From 3928b038c6232a3eb6bbfba903c3b4a80a4ba025 Mon Sep 17 00:00:00 2001 From: hristov Date: Fri, 13 Apr 2007 17:05:07 +0000 Subject: [PATCH] This commit was generated by cvs2svn to compensate for changes in r17912, which included commits to RCS files with non-trunk default branches. --- test/genkine/GetESD.sh | 10 + test/genkine/gen/fastGen.C | 229 +++++ test/genkine/gen/rungen.C | 10 + test/genkine/sim/.gdb_history | 7 + test/genkine/sim/Config.C | 475 ++++++++++ test/genkine/sim/rec.C | 11 + test/genkine/sim/sim.C | 9 + test/genkine/sim/test.C | 138 +++ test/gun/.gdb_history | 30 + test/gun/Config.C | 516 ++++++++++ test/gun/GetESD.sh | 21 + test/gun/rec.C | 20 + test/gun/sim.C | 12 + test/gun/test.C | 111 +++ test/merge/GetESD.sh | 11 + test/merge/GetESDval.sh | 11 + test/merge/backgr/.gdb_history | 11 + test/merge/backgr/Config.C | 1602 ++++++++++++++++++++++++++++++++ test/merge/backgr/rec.C | 16 + test/merge/backgr/sim.C | 10 + test/merge/signal/.gdb_history | 19 + test/merge/signal/Config.C | 1602 ++++++++++++++++++++++++++++++++ test/merge/signal/rec.C | 15 + test/merge/signal/sim.C | 11 + test/merge/test.C | 123 +++ test/pploadlibs/Config.C | 803 ++++++++++++++++ test/pploadlibs/rec.C | 19 + test/pploadlibs/run.C | 9 + test/pploadlibs/sim.C | 17 + 29 files changed, 5878 insertions(+) create mode 100755 test/genkine/GetESD.sh create mode 100644 test/genkine/gen/fastGen.C create mode 100644 test/genkine/gen/rungen.C create mode 100644 test/genkine/sim/.gdb_history create mode 100644 test/genkine/sim/Config.C create mode 100644 test/genkine/sim/rec.C create mode 100644 test/genkine/sim/sim.C create mode 100644 test/genkine/sim/test.C create mode 100644 test/gun/.gdb_history create mode 100644 test/gun/Config.C create mode 100755 test/gun/GetESD.sh create mode 100644 test/gun/rec.C create mode 100644 test/gun/sim.C create mode 100644 test/gun/test.C create mode 100755 test/merge/GetESD.sh create mode 100755 test/merge/GetESDval.sh create mode 100644 test/merge/backgr/.gdb_history create mode 100644 test/merge/backgr/Config.C create mode 100644 test/merge/backgr/rec.C create mode 100644 test/merge/backgr/sim.C create mode 100644 test/merge/signal/.gdb_history create mode 100644 test/merge/signal/Config.C create mode 100644 test/merge/signal/rec.C create mode 100644 test/merge/signal/sim.C create mode 100644 test/merge/test.C create mode 100644 test/pploadlibs/Config.C create mode 100644 test/pploadlibs/rec.C create mode 100644 test/pploadlibs/run.C create mode 100644 test/pploadlibs/sim.C diff --git a/test/genkine/GetESD.sh b/test/genkine/GetESD.sh new file mode 100755 index 00000000000..e9c011bb2b3 --- /dev/null +++ b/test/genkine/GetESD.sh @@ -0,0 +1,10 @@ +#!/bin/sh +rm -rf */*.root */*.log */*.dat +cd ./gen +aliroot -b -q rungen.C\(5\) 2>&1 | tee gen.log +chmod a-w *.root +cd ../sim +aliroot -b -q sim.C\(5\) 2>&1 | tee sim.log +aliroot -b -q rec.C 2>&1 | tee rec.log + + diff --git a/test/genkine/gen/fastGen.C b/test/genkine/gen/fastGen.C new file mode 100644 index 00000000000..9be11ce1b4c --- /dev/null +++ b/test/genkine/gen/fastGen.C @@ -0,0 +1,229 @@ +// Example: generation of kinematics tree with selected properties. +// Below we select events containing the decays D* -> D0 pi, D0 -> K- pi+ +// inside the barrel part of the ALICE detector (45 < theta < 135) + +#if !defined(__CINT__) || defined(__MAKECINT__) +#include +#include +#include +#include +#include +#include +#include +#include + +#include "AliGenerator.h" +#include "AliPDG.h" +#include "AliRunLoader.h" +#include "AliRun.h" +#include "AliStack.h" +#include "AliHeader.h" +#include "PYTHIA6/AliGenPythia.h" +#include "PYTHIA6/AliPythia.h" +#endif + +Float_t EtaToTheta(Float_t arg); +void GetFinalDecayProducts(Int_t ind, AliStack & stack , TArrayI & ar); + +void fastGen(Int_t nev = 1, char* filename = "galice.root") +{ + AliPDG::AddParticlesToPdgDataBase(); + TDatabasePDG* pPdg = TDatabasePDG::Instance(); + + + + // Run loader + AliRunLoader* rl = AliRunLoader::Open("galice.root","FASTRUN","recreate"); + + rl->SetCompressionLevel(2); + rl->SetNumberOfEventsPerFile(nev); + rl->LoadKinematics("RECREATE"); + rl->MakeTree("E"); + gAlice->SetRunLoader(rl); + + // Create stack + rl->MakeStack(); + AliStack* stack = rl->Stack(); + + // Header + AliHeader* header = rl->GetHeader(); + + // Create and Initialize Generator + + // Example of charm generation taken from Config_PythiaHeavyFlavours.C + AliGenPythia *gener = new AliGenPythia(-1); + gener->SetEnergyCMS(14000.); + gener->SetMomentumRange(0,999999); + gener->SetPhiRange(0., 360.); + gener->SetThetaRange(0.,180.); + // gener->SetProcess(kPyCharmppMNR); // Correct Pt distribution, wrong mult + gener->SetProcess(kPyMb); // Correct multiplicity, wrong Pt + gener->SetStrucFunc(kCTEQ4L); + gener->SetPtHard(2.1,-1.0); + gener->SetFeedDownHigherFamily(kFALSE); + gener->SetStack(stack); + gener->Init(); + + // Go to galice.root + rl->CdGAFile(); + + // Forbid some decays. Do it after gener->Init(0, because + // the initialization of the generator includes reading of the decay table. + + AliPythia * py= AliPythia::Instance(); + py->SetMDME(731,1,0); //forbid D*+->D+ + pi0 + py->SetMDME(732,1,0);//forbid D*+->D+ + gamma + + // Forbid all D0 decays except D0->K- pi+ + for(Int_t d=741; d<=756; d++){ + py->SetMDME(d,1,0); + } + // decay 757 is D0->K- pi+ + for(Int_t d=758; d<=801; d++){ + py->SetMDME(d,1,0); + } + + // + // Event Loop + // + + TStopwatch timer; + timer.Start(); + for (Int_t iev = 0; iev < nev; iev++) { + + cout <<"Event number "<< iev << endl; + + // Initialize event + header->Reset(0,iev); + rl->SetEventNumber(iev); + stack->Reset(); + rl->MakeTree("K"); + + // Generate event + Int_t nprim = 0; + Int_t ntrial = 0; + Int_t minmult = 1000; + Int_t ndstar = 0; + + + + //------------------------------------------------------------------------------------- + + while(!ndstar) { + // Selection of events with multiplicity + // bigger than "minmult" + stack->Reset(); + gener->Generate(); + ntrial++; + nprim = stack->GetNprimary(); + + for(Int_t ipart =0; ipart < nprim; ipart++){ + TParticle * part = stack->Particle(ipart); + if(part) { + + if (TMath::Abs(part->GetPdgCode())== 413) { + + TArrayI daughtersId; + + GetFinalDecayProducts(ipart,*stack,daughtersId); + + Bool_t kineOK = kTRUE; + + Double_t thetaMin = TMath::Pi()/4; + Double_t thetaMax = 3*TMath::Pi()/4; + + for (Int_t id=1; id<=daughtersId[0]; id++) { + TParticle * daughter = stack->Particle(daughtersId[id]); + if (!daughter) { + kineOK = kFALSE; + break; + } + + Double_t theta = daughter->Theta(); + if (thetathetaMax) { + kineOK = kFALSE; + break; + } + } + + if (!kineOK) continue; + + part->Print(); + ndstar++; + + } + } + } + } + + cout << "Number of particles " << nprim << endl; + cout << "Number of trials " << ntrial << endl; + + // Finish event + header->SetNprimary(stack->GetNprimary()); + header->SetNtrack(stack->GetNtrack()); + + // I/O + stack->FinishEvent(); + header->SetStack(stack); + rl->TreeE()->Fill(); + rl->WriteKinematics("OVERWRITE"); + + } // event loop + timer.Stop(); + timer.Print(); + + // Termination + // Generator + gener->FinishRun(); + // Stack + stack->FinishRun(); + // Write file + rl->WriteHeader("OVERWRITE"); + gener->Write(); + rl->Write(); +} + + + +Float_t EtaToTheta(Float_t arg){ + return (180./TMath::Pi())*2.*atan(exp(-arg)); +} + + +void GetFinalDecayProducts(Int_t ind, AliStack & stack , TArrayI & ar){ + + // Recursive algorithm to get the final decay products of a particle + // + // ind is the index of the particle in the AliStack + // stack is the particle stack from the generator + // ar contains the indexes of the final decay products + // ar[0] is the number of final decay products + + if (ind<0 || ind>stack.GetNtrack()) { + cerr << "Invalid index of the particle " << ind << endl; + return; + } + if (ar.GetSize()==0) { + ar.Set(10); + ar[0] = 0; + } + + TParticle * part = stack.Particle(ind); + + Int_t iFirstDaughter = part->GetFirstDaughter(); + if( iFirstDaughter<0) { + // This particle is a final decay product, add its index to the array + ar[0]++; + if (ar.GetSize() <= ar[0]) ar.Set(ar.GetSize()+10); // resize if needed + ar[ar[0]] = ind; + return; + } + + Int_t iLastDaughter = part->GetLastDaughter(); + + for (Int_t id=iFirstDaughter; id<=iLastDaughter;id++) { + // Now search for final decay products of the daughters + GetFinalDecayProducts(id,stack,ar); + } +} diff --git a/test/genkine/gen/rungen.C b/test/genkine/gen/rungen.C new file mode 100644 index 00000000000..29650a1c06c --- /dev/null +++ b/test/genkine/gen/rungen.C @@ -0,0 +1,10 @@ +void rungen(Int_t nev=1){ + // Simulation and reconstruction + TStopwatch timer; + timer.Start(); + gSystem->SetIncludePath("-I$ROOTSYS/include -I$ALICE_ROOT/include -I$ALICE_ROOT"); + gROOT->LoadMacro("fastGen.C+"); + fastGen(nev); + timer.Stop(); + timer.Print(); +} diff --git a/test/genkine/sim/.gdb_history b/test/genkine/sim/.gdb_history new file mode 100644 index 00000000000..83b55261ffe --- /dev/null +++ b/test/genkine/sim/.gdb_history @@ -0,0 +1,7 @@ +run +print fTree +up +quit +quit +run +quit diff --git a/test/genkine/sim/Config.C b/test/genkine/sim/Config.C new file mode 100644 index 00000000000..e8cadd625cd --- /dev/null +++ b/test/genkine/sim/Config.C @@ -0,0 +1,475 @@ +// One can use the configuration macro in compiled mode by +// root [0] gSystem->Load("libgeant321"); +// root [0] gSystem->SetIncludePath("-I$ROOTSYS/include -I$ALICE_ROOT/include\ +// -I$ALICE_ROOT -I$ALICE/geant3/TGeant3"); +// root [0] .x grun.C(1,"ConfigPPR.C++") + +#if !defined(__CINT__) || defined(__MAKECINT__) +#include +#include +#include +#include +#include +#include +#include +#include "STEER/AliRunLoader.h" +#include "STEER/AliRun.h" +#include "STEER/AliConfig.h" +#include "STEER/AliGenerator.h" +#include "STEER/AliLog.h" +#include "PYTHIA6/AliDecayerPythia.h" +#include "EVGEN/AliGenHIJINGpara.h" +#include "THijing/AliGenHijing.h" +#include "EVGEN/AliGenCocktail.h" +#include "EVGEN/AliGenSlowNucleons.h" +#include "EVGEN/AliSlowNucleonModelExp.h" +#include "EVGEN/AliGenParam.h" +#include "EVGEN/AliGenMUONlib.h" +#include "EVGEN/AliGenSTRANGElib.h" +#include "EVGEN/AliGenMUONCocktail.h" +#include "EVGEN/AliGenCocktail.h" +#include "EVGEN/AliGenGeVSim.h" +#include "EVGEN/AliGeVSimParticle.h" +#include "PYTHIA6/AliGenPythia.h" +#include "STEER/AliMagFMaps.h" +#include "STRUCT/AliBODY.h" +#include "STRUCT/AliMAG.h" +#include "STRUCT/AliABSOv0.h" +#include "STRUCT/AliDIPOv2.h" +#include "STRUCT/AliHALL.h" +#include "STRUCT/AliFRAMEv2.h" +#include "STRUCT/AliSHILv2.h" +#include "STRUCT/AliPIPEv0.h" +#include "ITS/AliITSvPPRasymmFMD.h" +#include "TPC/AliTPCv2.h" +#include "TOF/AliTOFv5T0.h" +#include "HMPID/AliHMPIDv1.h" +#include "ZDC/AliZDCv2.h" +#include "TRD/AliTRDv1.h" +#include "FMD/AliFMDv1.h" +#include "MUON/AliMUONv1.h" +#include "EMCAL/AliEMCALv2.h" +#include "PHOS/AliPHOSv1.h" +#include "PMD/AliPMDv1.h" +#include "T0/AliT0v1.h" +#include "EMCAL/AliEMCALv2.h" +#include "ACORDE/AliACORDEv0.h" +#include "VZERO/AliVZEROv7.h" +#include "EVGEN/AliGenExtFile.h" +#include "EVGEN/AliGenReaderTreeK.h" +#endif + +enum PprRad_t +{ + kGluonRadiation, kNoGluonRadiation +}; + +enum PprMag_t +{ + k2kG, k4kG, k5kG +}; + +enum PprTrigConf_t +{ + kDefaultPPTrig, kDefaultPbPbTrig +}; + +const char * pprTrigConfName[] = { + "p-p","Pb-Pb" +}; + +// This part for configuration + +static PprRad_t srad = kGluonRadiation; +static PprMag_t smag = k5kG; +static Int_t sseed = 12345; //Set 0 to use the current time + +static PprTrigConf_t strig = kDefaultPPTrig; // default PbPb trigger configuration +// Comment line +static TString comment; + +// Functions +Float_t EtaToTheta(Float_t arg); +AliGenerator* GeneratorFactory(); + +void Config() +{ + // ThetaRange is (0., 180.). It was (0.28,179.72) 7/12/00 09:00 + // Theta range given through pseudorapidity limits 22/6/2001 + + // Set Random Number seed + gRandom->SetSeed(sseed); + cout<<"Seed for random number generation= "<GetSeed()<Load("libgeant321"); +#endif + + new TGeant3TGeo("C++ Interface to Geant3"); + + AliRunLoader* rl=0x0; + + cout<<"Config.C: Creating Run Loader ..."<Fatal("Config.C","Can not instatiate the Run Loader"); + return; + } + rl->SetCompressionLevel(2); + rl->SetNumberOfEventsPerFile(100); + gAlice->SetRunLoader(rl); + + // Set the trigger configuration + gAlice->SetTriggerDescriptor(pprTrigConfName[strig]); + cout<<"Trigger configuration is set to "<SetForceDecay(kAll); + decayer->Init(); + + //forbid some decays + AliPythia * py= AliPythia::Instance(); + py->SetMDME(731,1,0); //forbid D*+->D+ + pi0 + py->SetMDME(732,1,0);//forbid D*+->D+ + gamma + + for(Int_t d=741; d<=756; d++){ + py->SetMDME(d,1,0); + } + + for(Int_t d=758; d<=801; d++){ + py->SetMDME(d,1,0); + } + + + + gMC->SetExternalDecayer(decayer); + // + // + //======================================================================= + // + //======================================================================= + // ************* STEERING parameters FOR ALICE SIMULATION ************** + // --- Specify event type to be tracked through the ALICE setup + // --- All positions are in cm, angles in degrees, and P and E in GeV + + gMC->SetProcess("DCAY",1); + gMC->SetProcess("PAIR",1); + gMC->SetProcess("COMP",1); + gMC->SetProcess("PHOT",1); + gMC->SetProcess("PFIS",0); + gMC->SetProcess("DRAY",0); + gMC->SetProcess("ANNI",1); + gMC->SetProcess("BREM",1); + gMC->SetProcess("MUNU",1); + gMC->SetProcess("CKOV",1); + gMC->SetProcess("HADR",1); + gMC->SetProcess("LOSS",2); + gMC->SetProcess("MULS",1); + gMC->SetProcess("RAYL",1); + + Float_t cut = 1.e-3; // 1MeV cut by default + Float_t tofmax = 1.e10; + + gMC->SetCut("CUTGAM", cut); + gMC->SetCut("CUTELE", cut); + gMC->SetCut("CUTNEU", cut); + gMC->SetCut("CUTHAD", cut); + gMC->SetCut("CUTMUO", cut); + gMC->SetCut("BCUTE", cut); + gMC->SetCut("BCUTM", cut); + gMC->SetCut("DCUTE", cut); + gMC->SetCut("DCUTM", cut); + gMC->SetCut("PPCUTM", cut); + gMC->SetCut("TOFMAX", tofmax); + + // Debug and log level + // AliLog::SetGlobalDebugLevel(0); + // AliLog::SetGlobalLogLevel(AliLog::kError); + + // Generator Configuration + AliGenerator* gener = GeneratorFactory(); + gener->SetOrigin(0, 0, 0); // vertex position + gener->SetSigma(0, 0, 5.3); // Sigma in (X,Y,Z) (cm) on IP position + gener->SetCutVertexZ(1.); // Truncate at 1 sigma + gener->SetVertexSmear(kPerEvent); + gener->SetTrackingFlag(1); + gener->Init(); + + if (smag == k2kG) { + comment = comment.Append(" | L3 field 0.2 T"); + } else if (smag == k4kG) { + comment = comment.Append(" | L3 field 0.4 T"); + } else if (smag == k5kG) { + comment = comment.Append(" | L3 field 0.5 T"); + } + + + if (srad == kGluonRadiation) + { + comment = comment.Append(" | Gluon Radiation On"); + + } else { + comment = comment.Append(" | Gluon Radiation Off"); + } + + + printf("\n \n Comment: %s \n \n", comment.Data()); + + +// Field (L3 0.4 T) + AliMagFMaps* field = new AliMagFMaps("Maps","Maps", 2, 1., 10., smag); + field->SetL3ConstField(0); //Using const. field in the barrel + rl->CdGAFile(); + gAlice->SetField(field); +// + Int_t iABSO = 1; + Int_t iDIPO = 1; + Int_t iFMD = 1; + Int_t iFRAME = 1; + Int_t iHALL = 1; + Int_t iITS = 1; + Int_t iMAG = 1; + Int_t iMUON = 1; + Int_t iPHOS = 1; + Int_t iPIPE = 1; + Int_t iPMD = 1; + Int_t iHMPID = 1; + Int_t iSHIL = 1; + Int_t iT0 = 1; + Int_t iTOF = 1; + Int_t iTPC = 1; + Int_t iTRD = 1; + Int_t iZDC = 1; + Int_t iEMCAL = 1; + Int_t iVZERO = 1; + Int_t iACORDE = 0; + + //=================== Alice BODY parameters ============================= + AliBODY *BODY = new AliBODY("BODY", "Alice envelop"); + + + if (iMAG) + { + //=================== MAG parameters ============================ + // --- Start with Magnet since detector layouts may be depending --- + // --- on the selected Magnet dimensions --- + AliMAG *MAG = new AliMAG("MAG", "Magnet"); + } + + + if (iABSO) + { + //=================== ABSO parameters ============================ + AliABSO *ABSO = new AliABSOv0("ABSO", "Muon Absorber"); + } + + if (iDIPO) + { + //=================== DIPO parameters ============================ + + AliDIPO *DIPO = new AliDIPOv2("DIPO", "Dipole version 2"); + } + + if (iHALL) + { + //=================== HALL parameters ============================ + + AliHALL *HALL = new AliHALL("HALL", "Alice Hall"); + } + + + if (iFRAME) + { + //=================== FRAME parameters ============================ + + AliFRAMEv2 *FRAME = new AliFRAMEv2("FRAME", "Space Frame"); + } + + if (iSHIL) + { + //=================== SHIL parameters ============================ + + AliSHIL *SHIL = new AliSHILv2("SHIL", "Shielding Version 2"); + } + + + if (iPIPE) + { + //=================== PIPE parameters ============================ + + AliPIPE *PIPE = new AliPIPEv0("PIPE", "Beam Pipe"); + } + + if(iITS) { + + //=================== ITS parameters ============================ + // + // As the innermost detector in ALICE, the Inner Tracking System "impacts" on + // almost all other detectors. This involves the fact that the ITS geometry + // still has several options to be followed in parallel in order to determine + // the best set-up which minimizes the induced background. All the geometries + // available to date are described in the following. Read carefully the comments + // and use the default version (the only one uncommented) unless you are making + // comparisons and you know what you are doing. In this case just uncomment the + // ITS geometry you want to use and run Aliroot. + // + // Detailed geometries: + // + // + //AliITS *ITS = new AliITSv5symm("ITS","Updated ITS TDR detailed version with symmetric services"); + // + //AliITS *ITS = new AliITSv5asymm("ITS","Updates ITS TDR detailed version with asymmetric services"); + // + AliITSvPPRasymmFMD *ITS = new AliITSvPPRasymmFMD("ITS","New ITS PPR detailed version with asymmetric services"); + ITS->SetMinorVersion(2); // don't touch this parameter if you're not an ITS developer + ITS->SetReadDet(kFALSE); // don't touch this parameter if you're not an ITS developer + // ITS->SetWriteDet("$ALICE_ROOT/ITS/ITSgeometry_vPPRasymm2.det"); // don't touch this parameter if you're not an ITS developer + ITS->SetThicknessDet1(200.); // detector thickness on layer 1 must be in the range [100,300] + ITS->SetThicknessDet2(200.); // detector thickness on layer 2 must be in the range [100,300] + ITS->SetThicknessChip1(150.); // chip thickness on layer 1 must be in the range [150,300] + ITS->SetThicknessChip2(150.); // chip thickness on layer 2 must be in the range [150,300] + ITS->SetRails(0); // 1 --> rails in ; 0 --> rails out + ITS->SetCoolingFluid(1); // 1 --> water ; 0 --> freon + + // Coarse geometries (warning: no hits are produced with these coarse geometries and they unuseful + // for reconstruction !): + // + // + //AliITSvPPRcoarseasymm *ITS = new AliITSvPPRcoarseasymm("ITS","New ITS PPR coarse version with asymmetric services"); + //ITS->SetRails(0); // 1 --> rails in ; 0 --> rails out + //ITS->SetSupportMaterial(0); // 0 --> Copper ; 1 --> Aluminum ; 2 --> Carbon + // + //AliITS *ITS = new AliITSvPPRcoarsesymm("ITS","New ITS PPR coarse version with symmetric services"); + //ITS->SetRails(0); // 1 --> rails in ; 0 --> rails out + //ITS->SetSupportMaterial(0); // 0 --> Copper ; 1 --> Aluminum ; 2 --> Carbon + // + // + // + // Geant3 <-> EUCLID conversion + // ============================ + // + // SetEUCLID is a flag to output (=1) or not to output (=0) both geometry and + // media to two ASCII files (called by default ITSgeometry.euc and + // ITSgeometry.tme) in a format understandable to the CAD system EUCLID. + // The default (=0) means that you dont want to use this facility. + // + ITS->SetEUCLID(0); + } + + if (iTPC) + { + //============================ TPC parameters ===================== + AliTPC *TPC = new AliTPCv2("TPC", "Default"); + } + + + if (iTOF) { + //=================== TOF parameters ============================ + AliTOF *TOF = new AliTOFv5T0("TOF", "normal TOF"); + } + + + if (iHMPID) + { + //=================== HMPID parameters =========================== + AliHMPID *HMPID = new AliHMPIDv1("HMPID", "normal HMPID"); + + } + + + if (iZDC) + { + //=================== ZDC parameters ============================ + + AliZDC *ZDC = new AliZDCv2("ZDC", "normal ZDC"); + } + + if (iTRD) + { + //=================== TRD parameters ============================ + + AliTRD *TRD = new AliTRDv1("TRD", "TRD slow simulator"); + } + + if (iFMD) + { + //=================== FMD parameters ============================ + AliFMD *FMD = new AliFMDv1("FMD", "normal FMD"); + } + + if (iMUON) + { + //=================== MUON parameters =========================== + // New MUONv1 version (geometry defined via builders) + AliMUON *MUON = new AliMUONv1("MUON", "default"); + } + //=================== PHOS parameters =========================== + + if (iPHOS) + { + AliPHOS *PHOS = new AliPHOSv1("PHOS", "IHEP"); + } + + + if (iPMD) + { + //=================== PMD parameters ============================ + AliPMD *PMD = new AliPMDv1("PMD", "normal PMD"); + } + + if (iT0) + { + //=================== T0 parameters ============================ + AliT0 *T0 = new AliT0v1("T0", "T0 Detector"); + } + + if (iEMCAL) + { + //=================== EMCAL parameters ============================ + AliEMCAL *EMCAL = new AliEMCALv2("EMCAL", "SHISH_77_TRD1_2X2_FINAL_110DEG"); + } + + if (iACORDE) + { + //=================== ACORDE parameters ============================ + AliACORDE *ACORDE = new AliACORDEv0("ACORDE", "normal ACORDE"); + } + + if (iVZERO) + { + //=================== VZERO parameters ============================ + AliVZERO *VZERO = new AliVZEROv7("VZERO", "normal VZERO"); + } + + +} + +Float_t EtaToTheta(Float_t arg){ + return (180./TMath::Pi())*2.*atan(exp(-arg)); +} + + + +AliGenerator* GeneratorFactory() { + + AliGenExtFile *gener = new AliGenExtFile(-1); + AliGenReaderTreeK * reader = new AliGenReaderTreeK(); + + reader->SetFileName("galice.root"); + reader->AddDir("../gen"); + gener->SetReader(reader); + + return gener; + + +} + diff --git a/test/genkine/sim/rec.C b/test/genkine/sim/rec.C new file mode 100644 index 00000000000..4044c53550d --- /dev/null +++ b/test/genkine/sim/rec.C @@ -0,0 +1,11 @@ +void rec() { + AliReconstruction reco; + + // reco.SetRunReconstruction("ITS TPC TRD TOF RICH FMD PMD VZERO START MUON ZDC"); + + TStopwatch timer; + timer.Start(); + reco.Run(); + timer.Stop(); + timer.Print(); +} diff --git a/test/genkine/sim/sim.C b/test/genkine/sim/sim.C new file mode 100644 index 00000000000..8c4a3ee0b1e --- /dev/null +++ b/test/genkine/sim/sim.C @@ -0,0 +1,9 @@ +void sim(Int_t nev=1) { + AliSimulation simulator; + + TStopwatch timer; + timer.Start(); + simulator.Run(nev); + timer.Stop(); + timer.Print(); +} diff --git a/test/genkine/sim/test.C b/test/genkine/sim/test.C new file mode 100644 index 00000000000..7ac32e78f4d --- /dev/null +++ b/test/genkine/sim/test.C @@ -0,0 +1,138 @@ +// Usage in compiled mode +// gSystem->SetIncludePath("-I$ROOTSYS/include -I$ALICE_ROOT/include"); +// gROOT->LoadMacro("test.C+"); +// test() + +#if !defined(__CINT__) || defined(__MAKECINT__) + +// Root include files +#include +#include +#include +#include +#include +#include +#include + +// AliRoot include files +#include "AliESD.h" +#include "AliRunLoader.h" +#include "AliRun.h" +#include "AliStack.h" + +#endif + +void test() { + + TStopwatch timer; + timer.Start(); + + TString name; + + // Signal file, tree, and branch + name = "AliESDs.root"; + TFile * fSig = TFile::Open(name.Data()); + TTree * tSig = (TTree*)fSig->Get("esdTree"); + TBranch * bSig = tSig->GetBranch("ESD"); + + AliESD * esdSig = 0; // The signal ESD object is put here + bSig->SetAddress(&esdSig); + + // Run loader + name = "galice.root"; + AliRunLoader* rlSig = AliRunLoader::Open(name.Data()); + + // gAlice + rlSig->LoadgAlice(); + gAlice = rlSig->GetAliRun(); + + // Now load kinematics and event header + rlSig->LoadKinematics(); + rlSig->LoadHeader(); + + // Loop on events + Long64_t nevSig = rlSig->GetNumberOfEvents(); + + cout << nevSig << " events" << endl; + + for (Int_t iev=0; ievGetEntry(iev); + + // Get MC + rlSig->GetEvent(iev); + + // Particle stack + AliStack * stackSig = rlSig->Stack(); + + Int_t nrec = esdSig->GetNumberOfTracks(); + + //------------------------------------------------------------------------------------------------- + Int_t nstack = stackSig->GetNtrack(); + for(Int_t istack=0; istack < nstack; istack++){ + + TParticle * part = stackSig->Particle(istack); + + // Loop on particles: check if the D* decay products are reconstructed + + if(!part) continue; + + if(TMath::Abs(part->GetPdgCode())== 413){ + cout<<"particle "<< istack << " is D*"<GetFirstDaughter(); //id of the Daughter = D^0 + if( iDaughter1<0) continue; + TParticle* daughter1 = stackSig->Particle(iDaughter1); + if(!daughter1) continue; + cout<<"first daughter: "<GetPdgCode()<GetLastDaughter(); //id of the Daughter = pi+ + if( iDaughter2<0) continue; + TParticle* daughter2 = stackSig->Particle(iDaughter2); + if(!daughter2) continue; + cout<<"last daughter: "<GetPdgCode()<GetPdgCode())== 421){ + iD0=iDaughter1; + iPi=iDaughter2; + } + else if(TMath::Abs(daughter2->GetPdgCode())== 421){ + iD0=iDaughter2; + iPi=iDaughter1; + } + + if (iD0<0) continue; + + TParticle* secondmother = stackSig->Particle(iD0); + + Int_t iD0Daughter1 = secondmother->GetFirstDaughter(); + TParticle* D0Daughter1 = stackSig->Particle(iD0Daughter1); + Int_t iD0Daughter2 = secondmother->GetLastDaughter(); + TParticle* D0Daughter2 = stackSig->Particle(iD0Daughter2); + + for(Int_t irec=0; irecGetTrack(irec); + UInt_t label = TMath::Abs(track->GetLabel()); + if(label<10000000) { + if(label == iPi) cout<Close(); + + timer.Stop(); + timer.Print(); +} diff --git a/test/gun/.gdb_history b/test/gun/.gdb_history new file mode 100644 index 00000000000..518e8710b82 --- /dev/null +++ b/test/gun/.gdb_history @@ -0,0 +1,30 @@ +run +b 'AliCluster::SetLabel(int, int)' if lab==171 +cont +quit +run +b AliCluster.h:56 if lab==171 +quit +quit +run +b AliCluster.cxx:343 if lab==171 +cont +print lab +cont +where +quit +run +b AliCluster.cxx:343 if lab==171 +cont +where +whatis fRawDig +up +whatis fRowDig +print *fRowDig +print kj +print ki +print *fRowDig->fTracks +where +whatis fInput +print *fInput +quit diff --git a/test/gun/Config.C b/test/gun/Config.C new file mode 100644 index 00000000000..032b8fa4346 --- /dev/null +++ b/test/gun/Config.C @@ -0,0 +1,516 @@ +// One can use the configuration macro in compiled mode by +// root [0] gSystem->Load("libgeant321"); +// root [0] gSystem->SetIncludePath("-I$ROOTSYS/include -I$ALICE_ROOT/include\ +// -I$ALICE_ROOT -I$ALICE/geant3/TGeant3"); +// root [0] .x grun.C(1,"Config.C++") + +#if !defined(__CINT__) || defined(__MAKECINT__) +#include +#include +#include +#include +#include +#include "STEER/AliRunLoader.h" +#include "STEER/AliRun.h" +#include "STEER/AliConfig.h" +#include "PYTHIA6/AliDecayerPythia.h" +#include "EVGEN/AliGenCocktail.h" +#include "EVGEN/AliGenHIJINGpara.h" +#include "EVGEN/AliGenFixed.h" +#include "EVGEN/AliGenBox.h" +#include "STEER/AliMagFMaps.h" +#include "STRUCT/AliBODY.h" +#include "STRUCT/AliMAG.h" +#include "STRUCT/AliABSOv0.h" +#include "STRUCT/AliDIPOv2.h" +#include "STRUCT/AliHALL.h" +#include "STRUCT/AliFRAMEv2.h" +#include "STRUCT/AliSHILv2.h" +#include "STRUCT/AliPIPEv0.h" +#include "ITS/AliITSvPPRasymmFMD.h" +#include "TPC/AliTPCv2.h" +#include "TOF/AliTOFv5T0.h" +#include "HMPID/AliHMPIDv1.h" +#include "ZDC/AliZDCv2.h" +#include "TRD/AliTRDv1.h" +#include "TRD/AliTRDgeometry.h" +#include "FMD/AliFMDv1.h" +#include "MUON/AliMUONv1.h" +#include "PHOS/AliPHOSv1.h" +#include "PMD/AliPMDv1.h" +#include "T0/AliT0v1.h" +#include "EMCAL/AliEMCALv2.h" +#include "ACORDE/AliACORDEv0.h" +#include "VZERO/AliVZEROv7.h" +#endif + +enum PprTrigConf_t +{ + kDefaultPPTrig, kDefaultPbPbTrig +}; + +const char * pprTrigConfName[] = { + "p-p","Pb-Pb" +}; + +Float_t EtaToTheta(Float_t arg); + +static PprTrigConf_t strig = kDefaultPPTrig;// default PP trigger configuration + +void Config() +{ + // ThetaRange is (0., 180.). It was (0.28,179.72) 7/12/00 09:00 + // Theta range given through pseudorapidity limits 22/6/2001 + + // Set Random Number seed + gRandom->SetSeed(123456); // Set 0 to use the currecnt time + + + // libraries required by geant321 +#if defined(__CINT__) + gSystem->Load("libgeant321"); +#endif + + new TGeant3TGeo("C++ Interface to Geant3"); + + AliRunLoader* rl=0x0; + + + rl = AliRunLoader::Open("galice.root", + AliConfig::GetDefaultEventFolderName(), + "recreate"); + if (rl == 0x0) + { + gAlice->Fatal("Config.C","Can not instatiate the Run Loader"); + return; + } + rl->SetCompressionLevel(2); + rl->SetNumberOfEventsPerFile(3); + gAlice->SetRunLoader(rl); + + // Set the trigger configuration + gAlice->SetTriggerDescriptor(pprTrigConfName[strig]); + cout<<"Trigger configuration is set to "<SetForceDecay(kAll); + decayer->Init(); + gMC->SetExternalDecayer(decayer); + //======================================================================= + // ************* STEERING parameters FOR ALICE SIMULATION ************** + // --- Specify event type to be tracked through the ALICE setup + // --- All positions are in cm, angles in degrees, and P and E in GeV + + + gMC->SetProcess("DCAY",1); + gMC->SetProcess("PAIR",1); + gMC->SetProcess("COMP",1); + gMC->SetProcess("PHOT",1); + gMC->SetProcess("PFIS",0); + gMC->SetProcess("DRAY",0); + gMC->SetProcess("ANNI",1); + gMC->SetProcess("BREM",1); + gMC->SetProcess("MUNU",1); + gMC->SetProcess("CKOV",1); + gMC->SetProcess("HADR",1); + gMC->SetProcess("LOSS",2); + gMC->SetProcess("MULS",1); + gMC->SetProcess("RAYL",1); + + Float_t cut = 1.e-3; // 1MeV cut by default + Float_t tofmax = 1.e10; + + gMC->SetCut("CUTGAM", cut); + gMC->SetCut("CUTELE", cut); + gMC->SetCut("CUTNEU", cut); + gMC->SetCut("CUTHAD", cut); + gMC->SetCut("CUTMUO", cut); + gMC->SetCut("BCUTE", cut); + gMC->SetCut("BCUTM", cut); + gMC->SetCut("DCUTE", cut); + gMC->SetCut("DCUTM", cut); + gMC->SetCut("PPCUTM", cut); + gMC->SetCut("TOFMAX", tofmax); + + // Special generation for Valgrind tests + // Each detector is fired by few particles selected + // to cover specific cases + + + // The cocktail iitself + + AliGenCocktail *gener = new AliGenCocktail(); + gener->SetPhiRange(0, 360); + // Set pseudorapidity range from -8 to 8. + Float_t thmin = EtaToTheta(8); // theta min. <---> eta max + Float_t thmax = EtaToTheta(-8); // theta max. <---> eta min + gener->SetThetaRange(thmin,thmax); + gener->SetOrigin(0, 0, 0); //vertex position + gener->SetSigma(0, 0, 0); //Sigma in (X,Y,Z) (cm) on IP position + + + // Particle guns for the barrel part (taken from RichConfig) + + AliGenFixed *pG1=new AliGenFixed(1); + pG1->SetPart(2212); + pG1->SetMomentum(2.5); + pG1->SetTheta(109.5-3); + pG1->SetPhi(10); + gener->AddGenerator(pG1,"g1",1); + + AliGenFixed *pG2=new AliGenFixed(1); + pG2->SetPart(211); + pG2->SetMomentum(1.0); + pG2->SetTheta( 90.0-3); + pG2->SetPhi(10); + gener->AddGenerator(pG2,"g2",1); + + AliGenFixed *pG3=new AliGenFixed(1); + pG3->SetPart(-211); + pG3->SetMomentum(1.5); + pG3->SetTheta(109.5-3); + pG3->SetPhi(30); + gener->AddGenerator(pG3,"g3",1); + + AliGenFixed *pG4=new AliGenFixed(1); + pG4->SetPart(321); + pG4->SetMomentum(0.7); + pG4->SetTheta( 90.0-3); + pG4->SetPhi(30); + gener->AddGenerator(pG4,"g4",1); + + AliGenFixed *pG5=new AliGenFixed(1); + pG5->SetPart(-321); + pG5->SetMomentum(1.0); + pG5->SetTheta( 70.0-3); + pG5->SetPhi(30); + gener->AddGenerator(pG5,"g5",1); + + AliGenFixed *pG6=new AliGenFixed(1); + pG6->SetPart(-2212); + pG6->SetMomentum(2.5); + pG6->SetTheta( 90.0-3); + pG6->SetPhi(50); + gener->AddGenerator(pG6,"g6",1); + + AliGenFixed *pG7=new AliGenFixed(1); + pG7->SetPart(-211); + pG7->SetMomentum(0.7); + pG7->SetTheta( 70.0-3); + pG7->SetPhi(50); + gener->AddGenerator(pG7,"g7",1); + + // Electrons for TRD + + AliGenFixed *pG8=new AliGenFixed(1); + pG8->SetPart(11); + pG8->SetMomentum(1.2); + pG8->SetTheta( 95.0); + pG8->SetPhi(190); + gener->AddGenerator(pG8,"g8",1); + + AliGenFixed *pG9=new AliGenFixed(1); + pG9->SetPart(-11); + pG9->SetMomentum(1.2); + pG9->SetTheta( 85.0); + pG9->SetPhi(190); + gener->AddGenerator(pG9,"g9",1); + + // PHOS + + AliGenBox *gphos = new AliGenBox(1); + gphos->SetMomentumRange(10,11.); + gphos->SetPhiRange(270.5,270.7); + gphos->SetThetaRange(90.5,90.7); + gphos->SetPart(22); + gener->AddGenerator(gphos,"GENBOX GAMMA for PHOS",1); + + // EMCAL + + AliGenBox *gemcal = new AliGenBox(1); + gemcal->SetMomentumRange(10,11.); + gemcal->SetPhiRange(90.5,199.5); + gemcal->SetThetaRange(90.5,90.7); + gemcal->SetPart(22); + gener->AddGenerator(gemcal,"GENBOX GAMMA for EMCAL",1); + + // MUON + AliGenBox * gmuon1 = new AliGenBox(1); + gmuon1->SetMomentumRange(20.,20.1); + gmuon1->SetPhiRange(0., 360.); + gmuon1->SetThetaRange(171.000,178.001); + gmuon1->SetPart(13); // Muons + gener->AddGenerator(gmuon1,"GENBOX MUON1",1); + + AliGenBox * gmuon2 = new AliGenBox(1); + gmuon2->SetMomentumRange(20.,20.1); + gmuon2->SetPhiRange(0., 360.); + gmuon2->SetThetaRange(171.000,178.001); + gmuon2->SetPart(-13); // Muons + gener->AddGenerator(gmuon2,"GENBOX MUON1",1); + + //TOF + AliGenFixed *gtof=new AliGenFixed(1); + gtof->SetPart(2212); + gtof->SetMomentum(2.5); + gtof->SetTheta(95); + pG1->SetPhi(340); + gener->AddGenerator(gtof,"Proton for TOF",1); + + gener->Init(); + + + // + // Activate this line if you want the vertex smearing to happen + // track by track + // + //gener->SetVertexSmear(perTrack); + // Field (L3 0.5 T) + AliMagFMaps* field = new AliMagFMaps("Maps","Maps", 2, 1., 10., 2); + field->SetL3ConstField(1); //Using const. field in the barrel if 0 + gAlice->SetField(field); + + + Int_t iABSO = 1; + Int_t iDIPO = 1; + Int_t iFMD = 1; + Int_t iFRAME = 1; + Int_t iHALL = 1; + Int_t iITS = 1; + Int_t iMAG = 1; + Int_t iMUON = 1; + Int_t iPHOS = 1; + Int_t iPIPE = 1; + Int_t iPMD = 1; + Int_t iHMPID = 1; + Int_t iSHIL = 1; + Int_t iT0 = 1; + Int_t iTOF = 1; + Int_t iTPC = 1; + Int_t iTRD = 1; + Int_t iZDC = 1; + Int_t iEMCAL = 1; + Int_t iACORDE = 0; + Int_t iVZERO = 1; + rl->CdGAFile(); + //=================== Alice BODY parameters ============================= + AliBODY *BODY = new AliBODY("BODY", "Alice envelop"); + + if (iMAG) + { + //=================== MAG parameters ============================ + // --- Start with Magnet since detector layouts may be depending --- + // --- on the selected Magnet dimensions --- + AliMAG *MAG = new AliMAG("MAG", "Magnet"); + } + + + if (iABSO) + { + //=================== ABSO parameters ============================ + AliABSO *ABSO = new AliABSOv0("ABSO", "Muon Absorber"); + } + + if (iDIPO) + { + //=================== DIPO parameters ============================ + + AliDIPO *DIPO = new AliDIPOv2("DIPO", "Dipole version 2"); + } + + if (iHALL) + { + //=================== HALL parameters ============================ + + AliHALL *HALL = new AliHALL("HALL", "Alice Hall"); + } + + + if (iFRAME) + { + //=================== FRAME parameters ============================ + + AliFRAMEv2 *FRAME = new AliFRAMEv2("FRAME", "Space Frame"); + } + + if (iSHIL) + { + //=================== SHIL parameters ============================ + + AliSHIL *SHIL = new AliSHILv2("SHIL", "Shielding Version 2"); + } + + + if (iPIPE) + { + //=================== PIPE parameters ============================ + + AliPIPE *PIPE = new AliPIPEv0("PIPE", "Beam Pipe"); + } + + if(iITS) { + + //=================== ITS parameters ============================ + // + // As the innermost detector in ALICE, the Inner Tracking System "impacts" on + // almost all other detectors. This involves the fact that the ITS geometry + // still has several options to be followed in parallel in order to determine + // the best set-up which minimizes the induced background. All the geometries + // available to date are described in the following. Read carefully the comments + // and use the default version (the only one uncommented) unless you are making + // comparisons and you know what you are doing. In this case just uncomment the + // ITS geometry you want to use and run Aliroot. + // + // Detailed geometries: + // + // + // + AliITSvPPRasymmFMD *ITS = new AliITSvPPRasymmFMD("ITS","ITS PPR detailed version with asymmetric services"); + ITS->SetMinorVersion(2); // don't touch this parameter if you're not an ITS developer + ITS->SetReadDet(kFALSE); // don't touch this parameter if you're not an ITS developer + // ITS->SetWriteDet("$ALICE_ROOT/ITS/ITSgeometry_vPPRasymm2.det"); // don't touch this parameter if you're not an ITS developer + ITS->SetThicknessDet1(200.); // detector thickness on layer 1 must be in the range [100,300] + ITS->SetThicknessDet2(200.); // detector thickness on layer 2 must be in the range [100,300] + ITS->SetThicknessChip1(150.); // chip thickness on layer 1 must be in the range [150,300] + ITS->SetThicknessChip2(150.); // chip thickness on layer 2 must be in the range [150,300] + ITS->SetRails(0); // 1 --> rails in ; 0 --> rails out + ITS->SetCoolingFluid(1); // 1 --> water ; 0 --> freon + + + // + // Coarse geometries (warning: no hits are produced with these coarse geometries and they unuseful + // for reconstruction !): + // + // + //AliITSvPPRcoarseasymm *ITS = new AliITSvPPRcoarseasymm("ITS","New ITS PPR coarse version with asymmetric services"); + //ITS->SetRails(0); // 1 --> rails in ; 0 --> rails out + //ITS->SetSupportMaterial(0); // 0 --> Copper ; 1 --> Aluminum ; 2 --> Carbon + // + //AliITS *ITS = new AliITSvPPRcoarsesymm("ITS","New ITS PPR coarse version with symmetric services"); + //ITS->SetRails(0); // 1 --> rails in ; 0 --> rails out + //ITS->SetSupportMaterial(0); // 0 --> Copper ; 1 --> Aluminum ; 2 --> Carbon + // + // + // + // Geant3 <-> EUCLID conversion + // ============================ + // + // SetEUCLID is a flag to output (=1) or not to output (=0) both geometry and + // media to two ASCII files (called by default ITSgeometry.euc and + // ITSgeometry.tme) in a format understandable to the CAD system EUCLID. + // The default (=0) means that you dont want to use this facility. + // + ITS->SetEUCLID(0); + } + + if (iTPC) + { + //============================ TPC parameters =================== + AliTPC *TPC = new AliTPCv2("TPC", "Default"); + } + + + if (iTOF) { + //=================== TOF parameters ============================ + AliTOF *TOF = new AliTOFv5T0("TOF", "normal TOF"); + // Partial geometry: modules at 2,3,4,6,7,11,12,14,15,16 + // starting at 6h in positive direction + Int_t TOFSectors[18]={-1,-1,0,0,0,-1,0,0,-1,-1,-1,0,0,-1,0,0,0,0}; + TOF->SetTOFSectors(TOFSectors); + } + + + if (iHMPID) + { + //=================== HMPID parameters =========================== + AliHMPID *HMPID = new AliHMPIDv1("HMPID", "normal HMPID"); + + } + + + if (iZDC) + { + //=================== ZDC parameters ============================ + + AliZDC *ZDC = new AliZDCv2("ZDC", "normal ZDC"); + } + + if (iTRD) + { + //=================== TRD parameters ============================ + + AliTRD *TRD = new AliTRDv1("TRD", "TRD slow simulator"); + AliTRDgeometry *geoTRD = TRD->GetGeometry(); + // Partial geometry: modules at 2,3,4,6,11,12,14,15 + // starting at 6h in positive direction + geoTRD->SetSMstatus(0,0); + geoTRD->SetSMstatus(1,0); + geoTRD->SetSMstatus(5,0); + geoTRD->SetSMstatus(7,0); + geoTRD->SetSMstatus(8,0); + geoTRD->SetSMstatus(9,0); + geoTRD->SetSMstatus(10,0); + geoTRD->SetSMstatus(13,0); + geoTRD->SetSMstatus(16,0); + geoTRD->SetSMstatus(17,0); + } + + if (iFMD) + { + //=================== FMD parameters ============================ + AliFMD *FMD = new AliFMDv1("FMD", "normal FMD"); + } + + if (iMUON) + { + //=================== MUON parameters =========================== + // New MUONv1 version (geometry defined via builders) + AliMUON *MUON = new AliMUONv1("MUON","default"); + } + //=================== PHOS parameters =========================== + + if (iPHOS) + { + AliPHOS *PHOS = new AliPHOSv1("PHOS", "IHEP"); + } + + + if (iPMD) + { + //=================== PMD parameters ============================ + AliPMD *PMD = new AliPMDv1("PMD", "normal PMD"); + } + + if (iT0) + { + //=================== T0 parameters ============================ + AliT0 *T0 = new AliT0v1("T0", "T0 Detector"); + } + + if (iEMCAL) + { + //=================== EMCAL parameters ============================ + AliEMCAL *EMCAL = new AliEMCALv2("EMCAL", "SHISH_77_TRD1_2X2_FINAL_110DEG"); + } + + if (iACORDE) + { + //=================== ACORDE parameters ============================ + AliACORDE *ACORDE = new AliACORDEv0("ACORDE", "normal ACORDE"); + } + + if (iVZERO) + { + //=================== VZERO parameters ============================ + AliVZERO *VZERO = new AliVZEROv7("VZERO", "normal VZERO"); + } + + +} + +Float_t EtaToTheta(Float_t arg){ + return (180./TMath::Pi())*2.*atan(exp(-arg)); +} diff --git a/test/gun/GetESD.sh b/test/gun/GetESD.sh new file mode 100755 index 00000000000..765037cc79d --- /dev/null +++ b/test/gun/GetESD.sh @@ -0,0 +1,21 @@ +#!/bin/sh +# Root +# export ROOTSYS=/afs/cern.ch/alice/library/root/new +# export PATH=$ROOTSYS/bin:$PATH +# export LD_LIBRARY_PATH=$ROOTSYS/lib:$LD_LIBRARY_PATH +# AliRoot +# export ALICE=/afs/cern.ch/alice/library +# export ALICE_LEVEL=new +# export ALICE_ROOT=$ALICE/$ALICE_LEVEL +# export ALICE_TARGET=`$ROOTSYS/bin/root-config --arch` +# export PATH=$ALICE_ROOT/bin/tgt_${ALICE_TARGET}:$PATH +# export LD_LIBRARY_PATH=$ALICE_ROOT/lib/tgt_${ALICE_TARGET}:$LD_LIBRARY_PATH +# Geant3 +# export LD_LIBRARY_PATH=$ALICE/geant3/lib/tgt_${ALICE_TARGET}:$LD_LIBRARY_PATH + +rm -rf *.root *.dat *.log fort* hlt hough *raw* +aliroot -b -q sim.C 2>&1 | tee sim.log +aliroot -b -q rec.C 2>&1 | tee rec.log + + + diff --git a/test/gun/rec.C b/test/gun/rec.C new file mode 100644 index 00000000000..a580f24f9a6 --- /dev/null +++ b/test/gun/rec.C @@ -0,0 +1,20 @@ +void rec() { + AliReconstruction reco; + reco.SetUniformFieldTracking(kFALSE); + reco.SetWriteESDfriend(); + reco.SetWriteAlignmentData(); + AliTPCReconstructor::SetStreamLevel(1); + // AliTPCReconstructor::SetRecoParam(AliTPCRecoParam::GetLowFluxParam()); + // reco.SetInput("raw.root"); + // reco.SetRunReconstruction("ITS TPC TRD TOF HMPID PHOS EMCAL MUON T0 VZERO FMD PMD ZDC"); + //reco.SetRunReconstruction("ITS TPC TRD TOF RICH PHOS EMCAL START VZERO FMD PMD ZDC"); + + AliCDBManager::Instance()->SetCacheFlag(kFALSE); + + + TStopwatch timer; + timer.Start(); + reco.Run(); + timer.Stop(); + timer.Print(); +} diff --git a/test/gun/sim.C b/test/gun/sim.C new file mode 100644 index 00000000000..17600932770 --- /dev/null +++ b/test/gun/sim.C @@ -0,0 +1,12 @@ +void sim(Int_t nev=4) { + AliSimulation simulator; + simulator.SetMakeSDigits("TRD TOF PHOS HMPID EMCAL MUON FMD ZDC PMD T0 VZERO"); + simulator.SetMakeDigitsFromHits("ITS TPC"); + // simulator.SetWriteRawData("ALL","raw.root",kTRUE); + + TStopwatch timer; + timer.Start(); + simulator.Run(nev); + timer.Stop(); + timer.Print(); +} diff --git a/test/gun/test.C b/test/gun/test.C new file mode 100644 index 00000000000..e8f1ee7b592 --- /dev/null +++ b/test/gun/test.C @@ -0,0 +1,111 @@ +// Usage in compiled mode +// gSystem->SetIncludePath("-I$ROOTSYS/include -I$ALICE_ROOT/include"); +// gROOT->LoadMacro("test.C+"); +// test() + +#if !defined(__CINT__) || defined(__MAKECINT__) + +// Root include files +#include +#include +#include +#include +#include +#include +#include + +// AliRoot include files +#include "AliESD.h" +#include "AliRunLoader.h" +#include "AliRun.h" +#include "AliStack.h" + +#endif + +void test(const char * sdir =".") { + + TStopwatch timer; + timer.Start(); + + TString name; + + // Signal file, tree, and branch + name = sdir; + name += "/AliESDs.root"; + TFile * fSig = TFile::Open(name.Data()); + TTree * tSig = (TTree*)fSig->Get("esdTree"); + TBranch * bSig = tSig->GetBranch("ESD"); + + AliESD * esdSig = 0; // The signal ESD object is put here + bSig->SetAddress(&esdSig); + + // Run loader (signal events) + name = sdir; + name += "/galice.root"; + AliRunLoader* rlSig = AliRunLoader::Open(name.Data()); + + // gAlice + rlSig->LoadgAlice(); + gAlice = rlSig->GetAliRun(); + + // Now load kinematics and event header + rlSig->LoadKinematics(); + rlSig->LoadHeader(); + + // Loop on events: check that MC and data contain the same number of events + Long64_t nevSig = rlSig->GetNumberOfEvents(); + + cout << nevSig << " signal events" << endl; + + Int_t lab[3]; // Labels from TOF + Double_t mom[3]; // Track momentum + + for (Int_t iev=0; ievGetEntry(iev); + + // Particle stack + rlSig->GetEvent(iev); + AliStack * stackSig = rlSig->Stack(); + stackSig->DumpPStack(); + Int_t nPartSig = stackSig->GetNtrack(); + + Int_t nrec = esdSig->GetNumberOfTracks(); + cout << nrec << " reconstructed tracks" << endl; + for(Int_t irec=0; irecGetTrack(irec); + cout << "Labels:" << endl; + cout << "Global: "<< track->GetLabel() << endl; + cout << "ITS: "<< track->GetITSLabel() << endl; + cout << "TPC: "<< track->GetTPCLabel() << endl; + cout << "TRD: "<< track->GetTRDLabel() << endl; + track->GetTOFLabel(lab); + cout << "TOF: "<< lab[0] <<" "<< lab[1] <<" "<< lab[2] << endl; + UInt_t label = TMath::Abs(track->GetLabel()); + if (label>=10000000) { + // Underlying event. 10000000 is the + // value of fkMASKSTEP in AliRunDigitizer + cout <<"Strange, there should be no underlying event"<=nPartSig) { + cout <<"Strange, label outside the range"<< endl; + continue; + } + TParticle * part = stackSig->Particle(label); + if(part) part->Print(); + track->GetPxPyPz(mom); + cout <<"Momentum: "<< mom[0] <<" "<< mom[1] <<" "<< mom[2] <Close(); + + timer.Stop(); + timer.Print(); +} diff --git a/test/merge/GetESD.sh b/test/merge/GetESD.sh new file mode 100755 index 00000000000..526074052ac --- /dev/null +++ b/test/merge/GetESD.sh @@ -0,0 +1,11 @@ +#!/bin/sh +rm -rf */*.root */*.dat* */*.log */fort* */hough */hlt */raw* */*~ +cd ./backgr +aliroot -b -q sim.C\(2\) 2>&1 | tee sim.log +aliroot -b -q rec.C 2>&1 | tee rec.log +chmod a-w *.root +cd ../signal +aliroot -b -q sim.C\(6\) 2>&1 | tee sim.log +aliroot -b -q rec.C 2>&1 | tee rec.log + + diff --git a/test/merge/GetESDval.sh b/test/merge/GetESDval.sh new file mode 100755 index 00000000000..b35adeed9d4 --- /dev/null +++ b/test/merge/GetESDval.sh @@ -0,0 +1,11 @@ +#!/bin/sh +rm -f */*.root */*.dat */*.log */fort* */hough */hlt */*~ +cd ./backgr +valgrind --error-limit=no --leak-check=full aliroot -b -q sim.C\(1\) 2>&1 | tee sim.log +valgrind --error-limit=no --leak-check=full aliroot -b -q rec.C 2>&1 | tee rec.log +#chmod a-w *.root +#cd ../signal +#valgrind --error-limit=no --leak-check=full aliroot -b -q sim.C\(3\) 2>&1 | tee sim.log +#valgrind --error-limit=no --leak-check=full aliroot -b -q rec.C 2>&1 | tee rec.log + + diff --git a/test/merge/backgr/.gdb_history b/test/merge/backgr/.gdb_history new file mode 100644 index 00000000000..b7662f8e77b --- /dev/null +++ b/test/merge/backgr/.gdb_history @@ -0,0 +1,11 @@ +run +print cpvRecPoints +print i +print cpvRecPoints->At(i) +quit +run -v +quit +run -b +quit +run +quit diff --git a/test/merge/backgr/Config.C b/test/merge/backgr/Config.C new file mode 100644 index 00000000000..ac7708ecf8e --- /dev/null +++ b/test/merge/backgr/Config.C @@ -0,0 +1,1602 @@ +// One can use the configuration macro in compiled mode by +// root [0] gSystem->Load("libgeant321"); +// root [0] gSystem->SetIncludePath("-I$ROOTSYS/include -I$ALICE_ROOT/include\ +// -I$ALICE_ROOT -I$ALICE/geant3/TGeant3"); +// root [0] .x grun.C(1,"ConfigPPR.C++") + +#if !defined(__CINT__) || defined(__MAKECINT__) +#include +#include +#include +#include +#include +#include +#include +#include +#include "STEER/AliRunLoader.h" +#include "STEER/AliRun.h" +#include "STEER/AliConfig.h" +#include "STEER/AliGenerator.h" +#include "STEER/AliLog.h" +#include "PYTHIA6/AliDecayerPythia.h" +#include "EVGEN/AliGenHIJINGpara.h" +#include "THijing/AliGenHijing.h" +#include "EVGEN/AliGenCocktail.h" +#include "EVGEN/AliGenSlowNucleons.h" +#include "EVGEN/AliSlowNucleonModelExp.h" +#include "EVGEN/AliGenParam.h" +#include "EVGEN/AliGenMUONlib.h" +#include "EVGEN/AliGenSTRANGElib.h" +#include "EVGEN/AliGenMUONCocktail.h" +#include "EVGEN/AliGenCocktail.h" +#include "EVGEN/AliGenGeVSim.h" +#include "EVGEN/AliGeVSimParticle.h" +#include "PYTHIA6/AliGenPythia.h" +#include "STEER/AliMagFMaps.h" +#include "STRUCT/AliBODY.h" +#include "STRUCT/AliMAG.h" +#include "STRUCT/AliABSOv0.h" +#include "STRUCT/AliDIPOv2.h" +#include "STRUCT/AliHALL.h" +#include "STRUCT/AliFRAMEv2.h" +#include "STRUCT/AliSHILv2.h" +#include "STRUCT/AliPIPEv0.h" +#include "ITS/AliITSvPPRasymmFMD.h" +#include "TPC/AliTPCv2.h" +#include "TOF/AliTOFv5T0.h" +#include "HMPID/AliHMPIDv1.h" +#include "ZDC/AliZDCv2.h" +#include "TRD/AliTRDv1.h" +#include "FMD/AliFMDv1.h" +#include "MUON/AliMUONv1.h" +#include "PHOS/AliPHOSv1.h" +#include "PMD/AliPMDv1.h" +#include "T0/AliT0v1.h" +#include "EMCAL/AliEMCALv2.h" +#include "ACORDE/AliACORDEv0.h" +#include "VZERO/AliVZEROv7.h" +#endif + +enum PprRun_t +{ + test50, + kParam_8000, kParam_4000, kParam_2000, + kHijing_cent1, kHijing_cent2, + kHijing_per1, kHijing_per2, kHijing_per3, kHijing_per4, kHijing_per5, + kHijing_jj25, kHijing_jj50, kHijing_jj75, kHijing_jj100, kHijing_jj200, + kHijing_gj25, kHijing_gj50, kHijing_gj75, kHijing_gj100, kHijing_gj200, + kHijing_pA, kPythia6, + kPythia6Jets20_24, kPythia6Jets24_29, kPythia6Jets29_35, + kPythia6Jets35_42, kPythia6Jets42_50, kPythia6Jets50_60, + kPythia6Jets60_72, kPythia6Jets72_86, kPythia6Jets86_104, + kPythia6Jets104_125, kPythia6Jets125_150, kPythia6Jets150_180, + kD0PbPb5500, kCharmSemiElPbPb5500, kBeautySemiElPbPb5500, + kCocktailTRD, kPyJJ, kPyGJ, + kMuonCocktailCent1, kMuonCocktailPer1, kMuonCocktailPer4, + kMuonCocktailCent1HighPt, kMuonCocktailPer1HighPt, kMuonCocktailPer4HighPt, + kMuonCocktailCent1Single, kMuonCocktailPer1Single, kMuonCocktailPer4Single, + kFlow_2_2000, kFlow_10_2000, kFlow_6_2000, kFlow_6_5000, + kHIJINGplus, kRunMax +}; + +const char* pprRunName[] = { + "test50", + "kParam_8000", "kParam_4000", "kParam_2000", + "kHijing_cent1", "kHijing_cent2", + "kHijing_per1", "kHijing_per2", "kHijing_per3", "kHijing_per4", + "kHijing_per5", + "kHijing_jj25", "kHijing_jj50", "kHijing_jj75", "kHijing_jj100", + "kHijing_jj200", + "kHijing_gj25", "kHijing_gj50", "kHijing_gj75", "kHijing_gj100", + "kHijing_gj200", "kHijing_pA", "kPythia6", + "kPythia6Jets20_24", "kPythia6Jets24_29", "kPythia6Jets29_35", + "kPythia6Jets35_42", "kPythia6Jets42_50", "kPythia6Jets50_60", + "kPythia6Jets60_72", "kPythia6Jets72_86", "kPythia6Jets86_104", + "kPythia6Jets104_125", "kPythia6Jets125_150", "kPythia6Jets150_180", + "kD0PbPb5500", "kCharmSemiElPbPb5500", "kBeautySemiElPbPb5500", + "kCocktailTRD", "kPyJJ", "kPyGJ", + "kMuonCocktailCent1", "kMuonCocktailPer1", "kMuonCocktailPer4", + "kMuonCocktailCent1HighPt", "kMuonCocktailPer1HighPt", "kMuonCocktailPer4HighPt", + "kMuonCocktailCent1Single", "kMuonCocktailPer1Single", "kMuonCocktailPer4Single", + "kFlow_2_2000", "kFlow_10_2000", "kFlow_6_2000", "kFlow_6_5000", "kHIJINGplus" +}; + +enum PprRad_t +{ + kGluonRadiation, kNoGluonRadiation +}; + +enum PprMag_t +{ + k2kG, k4kG, k5kG +}; + +enum PprTrigConf_t +{ + kDefaultPPTrig, kDefaultPbPbTrig +}; + +const char * pprTrigConfName[] = { + "p-p","Pb-Pb" +}; + +// This part for configuration +//static PprRun_t srun = test50; +static PprRun_t srun = kHijing_per4; +static PprRad_t srad = kGluonRadiation; +static PprMag_t smag = k5kG; +TDatime dat; +static Int_t sseed = dat.Get(); //Set 0 to use the current time +//static PprTrigConf_t strig = kDefaultPPTrig; // default pp trigger configuration +static PprTrigConf_t strig = kDefaultPbPbTrig; // default PbPb trigger configuration + +// Comment line +static TString comment; + +// Functions +Float_t EtaToTheta(Float_t arg); +AliGenerator* GeneratorFactory(PprRun_t srun); +AliGenHijing* HijingStandard(); +AliGenGeVSim* GeVSimStandard(Float_t, Float_t); +void ProcessEnvironmentVars(); + +void Config() +{ + // ThetaRange is (0., 180.). It was (0.28,179.72) 7/12/00 09:00 + // Theta range given through pseudorapidity limits 22/6/2001 + + // Get settings from environment variables + ProcessEnvironmentVars(); + + // Set Random Number seed + gRandom->SetSeed(sseed); + cout<<"Seed for random number generation= "<GetSeed()<Load("libgeant321"); +#endif + + new TGeant3TGeo("C++ Interface to Geant3"); + + AliRunLoader* rl=0x0; + + AliLog::Message(AliLog::kInfo, "Creating Run Loader", "", "", "Config()"," ConfigPPR.C", __LINE__); + + rl = AliRunLoader::Open("galice.root", + AliConfig::GetDefaultEventFolderName(), + "recreate"); + if (rl == 0x0) + { + gAlice->Fatal("Config.C","Can not instatiate the Run Loader"); + return; + } + rl->SetCompressionLevel(2); + rl->SetNumberOfEventsPerFile(3); + gAlice->SetRunLoader(rl); + + // Set the trigger configuration + gAlice->SetTriggerDescriptor(pprTrigConfName[strig]); + cout<<"Trigger configuration is set to "<SetForceDecay(kHadronicD); + break; + case kCharmSemiElPbPb5500: + decayer->SetForceDecay(kSemiElectronic); + break; + case kBeautySemiElPbPb5500: + decayer->SetForceDecay(kSemiElectronic); + break; + default: + decayer->SetForceDecay(kAll); + break; + } + decayer->Init(); + gMC->SetExternalDecayer(decayer); + // + // + //======================================================================= + // + //======================================================================= + // ************* STEERING parameters FOR ALICE SIMULATION ************** + // --- Specify event type to be tracked through the ALICE setup + // --- All positions are in cm, angles in degrees, and P and E in GeV + + gMC->SetProcess("DCAY",1); + gMC->SetProcess("PAIR",1); + gMC->SetProcess("COMP",1); + gMC->SetProcess("PHOT",1); + gMC->SetProcess("PFIS",0); + gMC->SetProcess("DRAY",0); + gMC->SetProcess("ANNI",1); + gMC->SetProcess("BREM",1); + gMC->SetProcess("MUNU",1); + gMC->SetProcess("CKOV",1); + gMC->SetProcess("HADR",1); + gMC->SetProcess("LOSS",2); + gMC->SetProcess("MULS",1); + gMC->SetProcess("RAYL",1); + + Float_t cut = 1.e-3; // 1MeV cut by default + Float_t tofmax = 1.e10; + + gMC->SetCut("CUTGAM", cut); + gMC->SetCut("CUTELE", cut); + gMC->SetCut("CUTNEU", cut); + gMC->SetCut("CUTHAD", cut); + gMC->SetCut("CUTMUO", cut); + gMC->SetCut("BCUTE", cut); + gMC->SetCut("BCUTM", cut); + gMC->SetCut("DCUTE", cut); + gMC->SetCut("DCUTM", cut); + gMC->SetCut("PPCUTM", cut); + gMC->SetCut("TOFMAX", tofmax); + + // Debug and log level + // AliLog::SetGlobalDebugLevel(0); + // AliLog::SetGlobalLogLevel(AliLog::kError); + + // Generator Configuration + AliGenerator* gener = GeneratorFactory(srun); + gener->SetOrigin(0, 0, 0); // vertex position + gener->SetSigma(0, 0, 5.3); // Sigma in (X,Y,Z) (cm) on IP position + gener->SetCutVertexZ(1.); // Truncate at 1 sigma + gener->SetVertexSmear(kPerEvent); + gener->SetTrackingFlag(1); + gener->Init(); + + if (smag == k2kG) { + comment = comment.Append(" | L3 field 0.2 T"); + } else if (smag == k4kG) { + comment = comment.Append(" | L3 field 0.4 T"); + } else if (smag == k5kG) { + comment = comment.Append(" | L3 field 0.5 T"); + } + + + if (srad == kGluonRadiation) + { + comment = comment.Append(" | Gluon Radiation On"); + + } else { + comment = comment.Append(" | Gluon Radiation Off"); + } + + printf("\n \n Comment: %s \n \n", comment.Data()); + + +// Field (L3 0.4 T) + AliMagFMaps* field = new AliMagFMaps("Maps","Maps", 2, 1., 10., smag); + field->SetL3ConstField(0); //Using const. field in the barrel + rl->CdGAFile(); + gAlice->SetField(field); +// + Int_t iABSO = 1; + Int_t iDIPO = 1; + Int_t iFMD = 1; + Int_t iFRAME = 1; + Int_t iHALL = 1; + Int_t iITS = 1; + Int_t iMAG = 1; + Int_t iMUON = 1; + Int_t iPHOS = 1; + Int_t iPIPE = 1; + Int_t iPMD = 1; + Int_t iHMPID = 1; + Int_t iSHIL = 1; + Int_t iT0 = 1; + Int_t iTOF = 1; + Int_t iTPC = 1; + Int_t iTRD = 1; + Int_t iZDC = 1; + Int_t iEMCAL = 1; + Int_t iVZERO = 1; + Int_t iACORDE = 0; + + //=================== Alice BODY parameters ============================= + AliBODY *BODY = new AliBODY("BODY", "Alice envelop"); + + + if (iMAG) + { + //=================== MAG parameters ============================ + // --- Start with Magnet since detector layouts may be depending --- + // --- on the selected Magnet dimensions --- + AliMAG *MAG = new AliMAG("MAG", "Magnet"); + } + + + if (iABSO) + { + //=================== ABSO parameters ============================ + AliABSO *ABSO = new AliABSOv0("ABSO", "Muon Absorber"); + } + + if (iDIPO) + { + //=================== DIPO parameters ============================ + + AliDIPO *DIPO = new AliDIPOv2("DIPO", "Dipole version 2"); + } + + if (iHALL) + { + //=================== HALL parameters ============================ + + AliHALL *HALL = new AliHALL("HALL", "Alice Hall"); + } + + + if (iFRAME) + { + //=================== FRAME parameters ============================ + + AliFRAMEv2 *FRAME = new AliFRAMEv2("FRAME", "Space Frame"); + } + + if (iSHIL) + { + //=================== SHIL parameters ============================ + + AliSHIL *SHIL = new AliSHILv2("SHIL", "Shielding Version 2"); + } + + + if (iPIPE) + { + //=================== PIPE parameters ============================ + + AliPIPE *PIPE = new AliPIPEv0("PIPE", "Beam Pipe"); + } + + if(iITS) { + + //=================== ITS parameters ============================ + // + // As the innermost detector in ALICE, the Inner Tracking System "impacts" on + // almost all other detectors. This involves the fact that the ITS geometry + // still has several options to be followed in parallel in order to determine + // the best set-up which minimizes the induced background. All the geometries + // available to date are described in the following. Read carefully the comments + // and use the default version (the only one uncommented) unless you are making + // comparisons and you know what you are doing. In this case just uncomment the + // ITS geometry you want to use and run Aliroot. + // + // Detailed geometries: + // + // + //AliITS *ITS = new AliITSv5symm("ITS","Updated ITS TDR detailed version with symmetric services"); + // + //AliITS *ITS = new AliITSv5asymm("ITS","Updates ITS TDR detailed version with asymmetric services"); + // + AliITSvPPRasymmFMD *ITS = new AliITSvPPRasymmFMD("ITS","New ITS PPR detailed version with asymmetric services"); + ITS->SetMinorVersion(2); // don't touch this parameter if you're not an ITS developer + ITS->SetReadDet(kFALSE); // don't touch this parameter if you're not an ITS developer + // ITS->SetWriteDet("$ALICE_ROOT/ITS/ITSgeometry_vPPRasymm2.det"); // don't touch this parameter if you're not an ITS developer + ITS->SetThicknessDet1(200.); // detector thickness on layer 1 must be in the range [100,300] + ITS->SetThicknessDet2(200.); // detector thickness on layer 2 must be in the range [100,300] + ITS->SetThicknessChip1(150.); // chip thickness on layer 1 must be in the range [150,300] + ITS->SetThicknessChip2(150.); // chip thickness on layer 2 must be in the range [150,300] + ITS->SetRails(0); // 1 --> rails in ; 0 --> rails out + ITS->SetCoolingFluid(1); // 1 --> water ; 0 --> freon + + // Coarse geometries (warning: no hits are produced with these coarse geometries and they unuseful + // for reconstruction !): + // + // + //AliITSvPPRcoarseasymm *ITS = new AliITSvPPRcoarseasymm("ITS","New ITS PPR coarse version with asymmetric services"); + //ITS->SetRails(0); // 1 --> rails in ; 0 --> rails out + //ITS->SetSupportMaterial(0); // 0 --> Copper ; 1 --> Aluminum ; 2 --> Carbon + // + //AliITS *ITS = new AliITSvPPRcoarsesymm("ITS","New ITS PPR coarse version with symmetric services"); + //ITS->SetRails(0); // 1 --> rails in ; 0 --> rails out + //ITS->SetSupportMaterial(0); // 0 --> Copper ; 1 --> Aluminum ; 2 --> Carbon + // + // + // + // Geant3 <-> EUCLID conversion + // ============================ + // + // SetEUCLID is a flag to output (=1) or not to output (=0) both geometry and + // media to two ASCII files (called by default ITSgeometry.euc and + // ITSgeometry.tme) in a format understandable to the CAD system EUCLID. + // The default (=0) means that you dont want to use this facility. + // + ITS->SetEUCLID(0); + } + + if (iTPC) + { + //============================ TPC parameters ===================== + AliTPC *TPC = new AliTPCv2("TPC", "Default"); + } + + + if (iTOF) { + //=================== TOF parameters ============================ + AliTOF *TOF = new AliTOFv5T0("TOF", "normal TOF"); + } + + + if (iHMPID) + { + //=================== HMPID parameters =========================== + AliHMPID *HMPID = new AliHMPIDv1("HMPID", "normal HMPID"); + + } + + + if (iZDC) + { + //=================== ZDC parameters ============================ + + AliZDC *ZDC = new AliZDCv2("ZDC", "normal ZDC"); + } + + if (iTRD) + { + //=================== TRD parameters ============================ + + AliTRD *TRD = new AliTRDv1("TRD", "TRD slow simulator"); + } + + if (iFMD) + { + //=================== FMD parameters ============================ + AliFMD *FMD = new AliFMDv1("FMD", "normal FMD"); + } + + if (iMUON) + { + //=================== MUON parameters =========================== + // New MUONv1 version (geometry defined via builders) + AliMUON *MUON = new AliMUONv1("MUON", "default"); + } + //=================== PHOS parameters =========================== + + if (iPHOS) + { + AliPHOS *PHOS = new AliPHOSv1("PHOS", "IHEP"); + } + + + if (iPMD) + { + //=================== PMD parameters ============================ + AliPMD *PMD = new AliPMDv1("PMD", "normal PMD"); + } + + if (iT0) + { + //=================== T0 parameters ============================ + AliT0 *T0 = new AliT0v1("T0", "T0 Detector"); + } + + if (iEMCAL) + { + //=================== EMCAL parameters ============================ + AliEMCAL *EMCAL = new AliEMCALv2("EMCAL", "SHISH_77_TRD1_2X2_FINAL_110DEG"); + } + + if (iACORDE) + { + //=================== ACORDE parameters ============================ + AliACORDE *ACORDE = new AliACORDEv0("ACORDE", "normal ACORDE"); + } + + if (iVZERO) + { + //=================== ACORDE parameters ============================ + AliVZERO *VZERO = new AliVZEROv7("VZERO", "normal VZERO"); + } + + +} + +Float_t EtaToTheta(Float_t arg){ + return (180./TMath::Pi())*2.*atan(exp(-arg)); +} + + + +AliGenerator* GeneratorFactory(PprRun_t srun) { + Int_t isw = 3; + if (srad == kNoGluonRadiation) isw = 0; + + + AliGenerator * gGener = 0x0; + switch (srun) { + case test50: + { + comment = comment.Append(":HIJINGparam test 50 particles"); + AliGenHIJINGpara *gener = new AliGenHIJINGpara(50); + gener->SetMomentumRange(0, 999999.); + gener->SetPhiRange(0., 360.); + // Set pseudorapidity range from -8 to 8. + Float_t thmin = EtaToTheta(8); // theta min. <---> eta max + Float_t thmax = EtaToTheta(-8); // theta max. <---> eta min + gener->SetThetaRange(thmin,thmax); + gGener=gener; + } + break; + case kParam_8000: + { + comment = comment.Append(":HIJINGparam N=8000"); + AliGenHIJINGpara *gener = new AliGenHIJINGpara(86030); + gener->SetMomentumRange(0, 999999.); + gener->SetPhiRange(0., 360.); + // Set pseudorapidity range from -8 to 8. + Float_t thmin = EtaToTheta(8); // theta min. <---> eta max + Float_t thmax = EtaToTheta(-8); // theta max. <---> eta min + gener->SetThetaRange(thmin,thmax); + gGener=gener; + } + break; + case kParam_4000: + { + comment = comment.Append("HIJINGparam N=4000"); + AliGenHIJINGpara *gener = new AliGenHIJINGpara(43015); + gener->SetMomentumRange(0, 999999.); + gener->SetPhiRange(0., 360.); + // Set pseudorapidity range from -8 to 8. + Float_t thmin = EtaToTheta(8); // theta min. <---> eta max + Float_t thmax = EtaToTheta(-8); // theta max. <---> eta min + gener->SetThetaRange(thmin,thmax); + gGener=gener; + } + break; + case kParam_2000: + { + comment = comment.Append("HIJINGparam N=2000"); + AliGenHIJINGpara *gener = new AliGenHIJINGpara(21507); + gener->SetMomentumRange(0, 999999.); + gener->SetPhiRange(0., 360.); + // Set pseudorapidity range from -8 to 8. + Float_t thmin = EtaToTheta(8); // theta min. <---> eta max + Float_t thmax = EtaToTheta(-8); // theta max. <---> eta min + gener->SetThetaRange(thmin,thmax); + gGener=gener; + } + break; +// +// Hijing Central +// + case kHijing_cent1: + { + comment = comment.Append("HIJING cent1"); + AliGenHijing *gener = HijingStandard(); +// impact parameter range + gener->SetImpactParameterRange(0., 5.); + gGener=gener; + } + break; + case kHijing_cent2: + { + comment = comment.Append("HIJING cent2"); + AliGenHijing *gener = HijingStandard(); +// impact parameter range + gener->SetImpactParameterRange(0., 2.); + gGener=gener; + } + break; +// +// Hijing Peripheral +// + case kHijing_per1: + { + comment = comment.Append("HIJING per1"); + AliGenHijing *gener = HijingStandard(); +// impact parameter range + gener->SetImpactParameterRange(5., 8.6); + gGener=gener; + } + break; + case kHijing_per2: + { + comment = comment.Append("HIJING per2"); + AliGenHijing *gener = HijingStandard(); +// impact parameter range + gener->SetImpactParameterRange(8.6, 11.2); + gGener=gener; + } + break; + case kHijing_per3: + { + comment = comment.Append("HIJING per3"); + AliGenHijing *gener = HijingStandard(); +// impact parameter range + gener->SetImpactParameterRange(11.2, 13.2); + gGener=gener; + } + break; + case kHijing_per4: + { + comment = comment.Append("HIJING per4"); + AliGenHijing *gener = HijingStandard(); +// impact parameter range + gener->SetImpactParameterRange(13.2, 15.); + gGener=gener; + } + break; + case kHijing_per5: + { + comment = comment.Append("HIJING per5"); + AliGenHijing *gener = HijingStandard(); +// impact parameter range + gener->SetImpactParameterRange(15., 100.); + gGener=gener; + } + break; +// +// Jet-Jet +// + case kHijing_jj25: + { + comment = comment.Append("HIJING Jet 25 GeV"); + AliGenHijing *gener = HijingStandard(); +// impact parameter range + gener->SetImpactParameterRange(0., 5.); + // trigger + gener->SetTrigger(1); + gener->SetPtJet(25.); + gener->SetRadiation(isw); + gener->SetSimpleJets(!isw); + gener->SetJetEtaRange(-0.3,0.3); + gener->SetJetPhiRange(75., 165.); + gGener=gener; + } + break; + + case kHijing_jj50: + { + comment = comment.Append("HIJING Jet 50 GeV"); + AliGenHijing *gener = HijingStandard(); +// impact parameter range + gener->SetImpactParameterRange(0., 5.); + // trigger + gener->SetTrigger(1); + gener->SetPtJet(50.); + gener->SetRadiation(isw); + gener->SetSimpleJets(!isw); + gener->SetJetEtaRange(-0.3,0.3); + gener->SetJetPhiRange(75., 165.); + gGener=gener; + } + break; + + case kHijing_jj75: + { + comment = comment.Append("HIJING Jet 75 GeV"); + AliGenHijing *gener = HijingStandard(); +// impact parameter range + gener->SetImpactParameterRange(0., 5.); + // trigger + gener->SetTrigger(1); + gener->SetPtJet(75.); + gener->SetRadiation(isw); + gener->SetSimpleJets(!isw); + gener->SetJetEtaRange(-0.3,0.3); + gener->SetJetPhiRange(75., 165.); + gGener=gener; + } + break; + + case kHijing_jj100: + { + comment = comment.Append("HIJING Jet 100 GeV"); + AliGenHijing *gener = HijingStandard(); +// impact parameter range + gener->SetImpactParameterRange(0., 5.); + // trigger + gener->SetTrigger(1); + gener->SetPtJet(100.); + gener->SetRadiation(isw); + gener->SetSimpleJets(!isw); + gener->SetJetEtaRange(-0.3,0.3); + gener->SetJetPhiRange(75., 165.); + gGener=gener; + } + break; + + case kHijing_jj200: + { + comment = comment.Append("HIJING Jet 200 GeV"); + AliGenHijing *gener = HijingStandard(); +// impact parameter range + gener->SetImpactParameterRange(0., 5.); + // trigger + gener->SetTrigger(1); + gener->SetPtJet(200.); + gener->SetRadiation(isw); + gener->SetSimpleJets(!isw); + gener->SetJetEtaRange(-0.3,0.3); + gener->SetJetPhiRange(75., 165.); + gGener=gener; + } + break; +// +// Gamma-Jet +// + case kHijing_gj25: + { + comment = comment.Append("HIJING Gamma 25 GeV"); + AliGenHijing *gener = HijingStandard(); +// impact parameter range + gener->SetImpactParameterRange(0., 5.); + // trigger + gener->SetTrigger(2); + gener->SetPtJet(25.); + gener->SetRadiation(isw); + gener->SetSimpleJets(!isw); + gener->SetJetEtaRange(-0.12, 0.12); + gener->SetJetPhiRange(220., 320.); + gGener=gener; + } + break; + + case kHijing_gj50: + { + comment = comment.Append("HIJING Gamma 50 GeV"); + AliGenHijing *gener = HijingStandard(); +// impact parameter range + gener->SetImpactParameterRange(0., 5.); + // trigger + gener->SetTrigger(2); + gener->SetPtJet(50.); + gener->SetRadiation(isw); + gener->SetSimpleJets(!isw); + gener->SetJetEtaRange(-0.12, 0.12); + gener->SetJetPhiRange(220., 320.); + gGener=gener; + } + break; + + case kHijing_gj75: + { + comment = comment.Append("HIJING Gamma 75 GeV"); + AliGenHijing *gener = HijingStandard(); +// impact parameter range + gener->SetImpactParameterRange(0., 5.); + // trigger + gener->SetTrigger(2); + gener->SetPtJet(75.); + gener->SetRadiation(isw); + gener->SetSimpleJets(!isw); + gener->SetJetEtaRange(-0.12, 0.12); + gener->SetJetPhiRange(220., 320.); + gGener=gener; + } + break; + + case kHijing_gj100: + { + comment = comment.Append("HIJING Gamma 100 GeV"); + AliGenHijing *gener = HijingStandard(); +// impact parameter range + gener->SetImpactParameterRange(0., 5.); + // trigger + gener->SetTrigger(2); + gener->SetPtJet(100.); + gener->SetRadiation(isw); + gener->SetSimpleJets(!isw); + gener->SetJetEtaRange(-0.12, 0.12); + gener->SetJetPhiRange(220., 320.); + gGener=gener; + } + break; + + case kHijing_gj200: + { + comment = comment.Append("HIJING Gamma 200 GeV"); + AliGenHijing *gener = HijingStandard(); +// impact parameter range + gener->SetImpactParameterRange(0., 5.); + // trigger + gener->SetTrigger(2); + gener->SetPtJet(200.); + gener->SetRadiation(isw); + gener->SetSimpleJets(!isw); + gener->SetJetEtaRange(-0.12, 0.12); + gener->SetJetPhiRange(220., 320.); + gGener=gener; + } + break; + case kHijing_pA: + { + comment = comment.Append("HIJING pA"); + + AliGenCocktail *gener = new AliGenCocktail(); + + AliGenHijing *hijing = new AliGenHijing(-1); +// centre of mass energy + hijing->SetEnergyCMS(TMath::Sqrt(82./208.) * 14000.); +// impact parameter range + hijing->SetImpactParameterRange(0., 15.); +// reference frame + hijing->SetReferenceFrame("CMS"); + hijing->SetBoostLHC(1); +// projectile + hijing->SetProjectile("P", 1, 1); + hijing->SetTarget ("A", 208, 82); +// tell hijing to keep the full parent child chain + hijing->KeepFullEvent(); +// enable jet quenching + hijing->SetJetQuenching(0); +// enable shadowing + hijing->SetShadowing(1); +// Don't track spectators + hijing->SetSpectators(0); +// kinematic selection + hijing->SetSelectAll(0); +// + AliGenSlowNucleons* gray = new AliGenSlowNucleons(1); + AliSlowNucleonModel* model = new AliSlowNucleonModelExp(); + gray->SetSlowNucleonModel(model); + gray->SetDebug(1); + gener->AddGenerator(hijing,"Hijing pPb", 1); + gener->AddGenerator(gray, "Gray Particles",1); + gGener=gener; + } + break; + case kPythia6: + { + comment = comment.Append(":Pythia p-p @ 14 TeV"); + AliGenPythia *gener = new AliGenPythia(-1); + gener->SetMomentumRange(0,999999); + gener->SetThetaRange(0., 180.); + gener->SetYRange(-12,12); + gener->SetPtRange(0,1000); + gener->SetProcess(kPyMb); + gener->SetEnergyCMS(14000.); + gGener=gener; + } + break; + case kPythia6Jets20_24: + { + comment = comment.Append(":Pythia jets 20-24 GeV @ 5.5 TeV"); + AliGenPythia * gener = new AliGenPythia(-1); + gener->SetEnergyCMS(5500.);// Centre of mass energy + gener->SetProcess(kPyJets);// Process type + gener->SetJetEtaRange(-0.5, 0.5);// Final state kinematic cuts + gener->SetJetPhiRange(0., 360.); + gener->SetJetEtRange(10., 1000.); + gener->SetGluonRadiation(1,1); + // gener->SetPtKick(0.); + // Structure function + gener->SetStrucFunc(kCTEQ4L); + gener->SetPtHard(20., 24.);// Pt transfer of the hard scattering + gener->SetPycellParameters(2., 274, 432, 0., 4., 5., 1.0); + gener->SetForceDecay(kAll);// Decay type (semielectronic, etc.) + gGener=gener; + } + break; + case kPythia6Jets24_29: + { + comment = comment.Append(":Pythia jets 24-29 GeV @ 5.5 TeV"); + AliGenPythia * gener = new AliGenPythia(-1); + gener->SetEnergyCMS(5500.);// Centre of mass energy + gener->SetProcess(kPyJets);// Process type + gener->SetJetEtaRange(-0.5, 0.5);// Final state kinematic cuts + gener->SetJetPhiRange(0., 360.); + gener->SetJetEtRange(10., 1000.); + gener->SetGluonRadiation(1,1); + // gener->SetPtKick(0.); + // Structure function + gener->SetStrucFunc(kCTEQ4L); + gener->SetPtHard(24., 29.);// Pt transfer of the hard scattering + gener->SetPycellParameters(2., 274, 432, 0., 4., 5., 1.0); + gener->SetForceDecay(kAll);// Decay type (semielectronic, etc.) + gGener=gener; + } + break; + case kPythia6Jets29_35: + { + comment = comment.Append(":Pythia jets 29-35 GeV @ 5.5 TeV"); + AliGenPythia * gener = new AliGenPythia(-1); + gener->SetEnergyCMS(5500.);// Centre of mass energy + gener->SetProcess(kPyJets);// Process type + gener->SetJetEtaRange(-0.5, 0.5);// Final state kinematic cuts + gener->SetJetPhiRange(0., 360.); + gener->SetJetEtRange(10., 1000.); + gener->SetGluonRadiation(1,1); + // gener->SetPtKick(0.); + // Structure function + gener->SetStrucFunc(kCTEQ4L); + gener->SetPtHard(29., 35.);// Pt transfer of the hard scattering + gener->SetPycellParameters(2., 274, 432, 0., 4., 5., 1.0); + gener->SetForceDecay(kAll);// Decay type (semielectronic, etc.) + gGener=gener; + } + break; + case kPythia6Jets35_42: + { + comment = comment.Append(":Pythia jets 35-42 GeV @ 5.5 TeV"); + AliGenPythia * gener = new AliGenPythia(-1); + gener->SetEnergyCMS(5500.);// Centre of mass energy + gener->SetProcess(kPyJets);// Process type + gener->SetJetEtaRange(-0.5, 0.5);// Final state kinematic cuts + gener->SetJetPhiRange(0., 360.); + gener->SetJetEtRange(10., 1000.); + gener->SetGluonRadiation(1,1); + // gener->SetPtKick(0.); + // Structure function + gener->SetStrucFunc(kCTEQ4L); + gener->SetPtHard(35., 42.);// Pt transfer of the hard scattering + gener->SetPycellParameters(2., 274, 432, 0., 4., 5., 1.0); + gener->SetForceDecay(kAll);// Decay type (semielectronic, etc.) + gGener=gener; + } + break; + case kPythia6Jets42_50: + { + comment = comment.Append(":Pythia jets 42-50 GeV @ 5.5 TeV"); + AliGenPythia * gener = new AliGenPythia(-1); + gener->SetEnergyCMS(5500.);// Centre of mass energy + gener->SetProcess(kPyJets);// Process type + gener->SetJetEtaRange(-0.5, 0.5);// Final state kinematic cuts + gener->SetJetPhiRange(0., 360.); + gener->SetJetEtRange(10., 1000.); + gener->SetGluonRadiation(1,1); + // gener->SetPtKick(0.); + // Structure function + gener->SetStrucFunc(kCTEQ4L); + gener->SetPtHard(42., 50.);// Pt transfer of the hard scattering + gener->SetPycellParameters(2., 274, 432, 0., 4., 5., 1.0); + gener->SetForceDecay(kAll);// Decay type (semielectronic, etc.) + gGener=gener; + } + break; + case kPythia6Jets50_60: + { + comment = comment.Append(":Pythia jets 50-60 GeV @ 5.5 TeV"); + AliGenPythia * gener = new AliGenPythia(-1); + gener->SetEnergyCMS(5500.);// Centre of mass energy + gener->SetProcess(kPyJets);// Process type + gener->SetJetEtaRange(-0.5, 0.5);// Final state kinematic cuts + gener->SetJetPhiRange(0., 360.); + gener->SetJetEtRange(10., 1000.); + gener->SetGluonRadiation(1,1); + // gener->SetPtKick(0.); + // Structure function + gener->SetStrucFunc(kCTEQ4L); + gener->SetPtHard(50., 60.);// Pt transfer of the hard scattering + gener->SetPycellParameters(2., 274, 432, 0., 4., 5., 1.0); + gener->SetForceDecay(kAll);// Decay type (semielectronic, etc.) + gGener=gener; + } + break; + case kPythia6Jets60_72: + { + comment = comment.Append(":Pythia jets 60-72 GeV @ 5.5 TeV"); + AliGenPythia * gener = new AliGenPythia(-1); + gener->SetEnergyCMS(5500.);// Centre of mass energy + gener->SetProcess(kPyJets);// Process type + gener->SetJetEtaRange(-0.5, 0.5);// Final state kinematic cuts + gener->SetJetPhiRange(0., 360.); + gener->SetJetEtRange(10., 1000.); + gener->SetGluonRadiation(1,1); + // gener->SetPtKick(0.); + // Structure function + gener->SetStrucFunc(kCTEQ4L); + gener->SetPtHard(60., 72.);// Pt transfer of the hard scattering + gener->SetPycellParameters(2., 274, 432, 0., 4., 5., 1.0); + gener->SetForceDecay(kAll);// Decay type (semielectronic, etc.) + gGener=gener; + } + break; + case kPythia6Jets72_86: + { + comment = comment.Append(":Pythia jets 72-86 GeV @ 5.5 TeV"); + AliGenPythia * gener = new AliGenPythia(-1); + gener->SetEnergyCMS(5500.);// Centre of mass energy + gener->SetProcess(kPyJets);// Process type + gener->SetJetEtaRange(-0.5, 0.5);// Final state kinematic cuts + gener->SetJetPhiRange(0., 360.); + gener->SetJetEtRange(10., 1000.); + gener->SetGluonRadiation(1,1); + // gener->SetPtKick(0.); + // Structure function + gener->SetStrucFunc(kCTEQ4L); + gener->SetPtHard(72., 86.);// Pt transfer of the hard scattering + gener->SetPycellParameters(2., 274, 432, 0., 4., 5., 1.0); + gener->SetForceDecay(kAll);// Decay type (semielectronic, etc.) + gGener=gener; + } + break; + case kPythia6Jets86_104: + { + comment = comment.Append(":Pythia jets 86-104 GeV @ 5.5 TeV"); + AliGenPythia * gener = new AliGenPythia(-1); + gener->SetEnergyCMS(5500.);// Centre of mass energy + gener->SetProcess(kPyJets);// Process type + gener->SetJetEtaRange(-0.5, 0.5);// Final state kinematic cuts + gener->SetJetPhiRange(0., 360.); + gener->SetJetEtRange(10., 1000.); + gener->SetGluonRadiation(1,1); + // gener->SetPtKick(0.); + // Structure function + gener->SetStrucFunc(kCTEQ4L); + gener->SetPtHard(86., 104.);// Pt transfer of the hard scattering + gener->SetPycellParameters(2., 274, 432, 0., 4., 5., 1.0); + gener->SetForceDecay(kAll);// Decay type (semielectronic, etc.) + gGener=gener; + } + break; + case kPythia6Jets104_125: + { + comment = comment.Append(":Pythia jets 105-125 GeV @ 5.5 TeV"); + AliGenPythia * gener = new AliGenPythia(-1); + gener->SetEnergyCMS(5500.);// Centre of mass energy + gener->SetProcess(kPyJets);// Process type + gener->SetJetEtaRange(-0.5, 0.5);// Final state kinematic cuts + gener->SetJetPhiRange(0., 360.); + gener->SetJetEtRange(10., 1000.); + gener->SetGluonRadiation(1,1); + // gener->SetPtKick(0.); + // Structure function + gener->SetStrucFunc(kCTEQ4L); + gener->SetPtHard(104., 125.);// Pt transfer of the hard scattering + gener->SetPycellParameters(2., 274, 432, 0., 4., 5., 1.0); + gener->SetForceDecay(kAll);// Decay type (semielectronic, etc.) + gGener=gener; + } + break; + case kPythia6Jets125_150: + { + comment = comment.Append(":Pythia jets 125-150 GeV @ 5.5 TeV"); + AliGenPythia * gener = new AliGenPythia(-1); + gener->SetEnergyCMS(5500.);// Centre of mass energy + gener->SetProcess(kPyJets);// Process type + gener->SetJetEtaRange(-0.5, 0.5);// Final state kinematic cuts + gener->SetJetPhiRange(0., 360.); + gener->SetJetEtRange(10., 1000.); + gener->SetGluonRadiation(1,1); + // gener->SetPtKick(0.); + // Structure function + gener->SetStrucFunc(kCTEQ4L); + gener->SetPtHard(125., 150.);// Pt transfer of the hard scattering + gener->SetPycellParameters(2., 274, 432, 0., 4., 5., 1.0); + gener->SetForceDecay(kAll);// Decay type (semielectronic, etc.) + gGener=gener; + } + break; + case kPythia6Jets150_180: + { + comment = comment.Append(":Pythia jets 150-180 GeV @ 5.5 TeV"); + AliGenPythia * gener = new AliGenPythia(-1); + gener->SetEnergyCMS(5500.);// Centre of mass energy + gener->SetProcess(kPyJets);// Process type + gener->SetJetEtaRange(-0.5, 0.5);// Final state kinematic cuts + gener->SetJetPhiRange(0., 360.); + gener->SetJetEtRange(10., 1000.); + gener->SetGluonRadiation(1,1); + // gener->SetPtKick(0.); + // Structure function + gener->SetStrucFunc(kCTEQ4L); + gener->SetPtHard(150., 180.);// Pt transfer of the hard scattering + gener->SetPycellParameters(2., 274, 432, 0., 4., 5., 1.0); + gener->SetForceDecay(kAll);// Decay type (semielectronic, etc.) + gGener=gener; + } + break; + case kD0PbPb5500: + { + comment = comment.Append(" D0 in Pb-Pb at 5.5 TeV"); + AliGenPythia * gener = new AliGenPythia(10); + gener->SetProcess(kPyD0PbPbMNR); + gener->SetStrucFunc(kCTEQ4L); + gener->SetPtHard(2.1,-1.0); + gener->SetEnergyCMS(5500.); + gener->SetNuclei(208,208); + gener->SetForceDecay(kHadronicD); + gener->SetYRange(-2,2); + gener->SetFeedDownHigherFamily(kFALSE); + gener->SetStackFillOpt(AliGenPythia::kParentSelection); + gener->SetCountMode(AliGenPythia::kCountParents); + gGener=gener; + } + break; + case kCharmSemiElPbPb5500: + { + comment = comment.Append(" Charm in Pb-Pb at 5.5 TeV"); + AliGenPythia * gener = new AliGenPythia(10); + gener->SetProcess(kPyCharmPbPbMNR); + gener->SetStrucFunc(kCTEQ4L); + gener->SetPtHard(2.1,-1.0); + gener->SetEnergyCMS(5500.); + gener->SetNuclei(208,208); + gener->SetForceDecay(kSemiElectronic); + gener->SetYRange(-2,2); + gener->SetFeedDownHigherFamily(kFALSE); + gener->SetCountMode(AliGenPythia::kCountParents); + gGener=gener; + } + break; + case kBeautySemiElPbPb5500: + { + comment = comment.Append(" Beauty in Pb-Pb at 5.5 TeV"); + AliGenPythia *gener = new AliGenPythia(10); + gener->SetProcess(kPyBeautyPbPbMNR); + gener->SetStrucFunc(kCTEQ4L); + gener->SetPtHard(2.75,-1.0); + gener->SetEnergyCMS(5500.); + gener->SetNuclei(208,208); + gener->SetForceDecay(kSemiElectronic); + gener->SetYRange(-2,2); + gener->SetFeedDownHigherFamily(kFALSE); + gener->SetCountMode(AliGenPythia::kCountParents); + gGener=gener; + } + break; + case kCocktailTRD: + { + comment = comment.Append(" Cocktail for TRD at 5.5 TeV"); + AliGenCocktail *gener = new AliGenCocktail(); + + AliGenParam *phi = new AliGenParam(10, + new AliGenMUONlib(), + AliGenMUONlib::kPhi, + "Vogt PbPb"); + + phi->SetPtRange(0, 100); + phi->SetYRange(-1., +1.); + phi->SetForceDecay(kDiElectron); + + AliGenParam *omega = new AliGenParam(10, + new AliGenMUONlib(), + AliGenMUONlib::kOmega, + "Vogt PbPb"); + + omega->SetPtRange(0, 100); + omega->SetYRange(-1., +1.); + omega->SetForceDecay(kDiElectron); + + AliGenParam *jpsi = new AliGenParam(10, + new AliGenMUONlib(), + AliGenMUONlib::kJpsiFamily, + "Vogt PbPb"); + + jpsi->SetPtRange(0, 100); + jpsi->SetYRange(-1., +1.); + jpsi->SetForceDecay(kDiElectron); + + AliGenParam *ups = new AliGenParam(10, + new AliGenMUONlib(), + AliGenMUONlib::kUpsilonFamily, + "Vogt PbPb"); + ups->SetPtRange(0, 100); + ups->SetYRange(-1., +1.); + ups->SetForceDecay(kDiElectron); + + AliGenParam *charm = new AliGenParam(10, + new AliGenMUONlib(), + AliGenMUONlib::kCharm, + "central"); + charm->SetPtRange(0, 100); + charm->SetYRange(-1.5, +1.5); + charm->SetForceDecay(kSemiElectronic); + + + AliGenParam *beauty = new AliGenParam(10, + new AliGenMUONlib(), + AliGenMUONlib::kBeauty, + "central"); + beauty->SetPtRange(0, 100); + beauty->SetYRange(-1.5, +1.5); + beauty->SetForceDecay(kSemiElectronic); + + AliGenParam *beautyJ = new AliGenParam(10, + new AliGenMUONlib(), + AliGenMUONlib::kBeauty, + "central"); + beautyJ->SetPtRange(0, 100); + beautyJ->SetYRange(-1.5, +1.5); + beautyJ->SetForceDecay(kBJpsiDiElectron); + + gener->AddGenerator(phi,"Phi",1); + gener->AddGenerator(omega,"Omega",1); + gener->AddGenerator(jpsi,"J/psi",1); + gener->AddGenerator(ups,"Upsilon",1); + gener->AddGenerator(charm,"Charm",1); + gener->AddGenerator(beauty,"Beauty",1); + gener->AddGenerator(beautyJ,"J/Psi from Beauty",1); + gGener=gener; + } + break; + case kPyJJ: + { + comment = comment.Append(" Jet-jet at 5.5 TeV"); + AliGenPythia *gener = new AliGenPythia(-1); + gener->SetEnergyCMS(5500.); + gener->SetProcess(kPyJets); + Double_t ptHardMin=10.0, ptHardMax=-1.0; + gener->SetPtHard(ptHardMin,ptHardMax); + gener->SetYHard(-0.7,0.7); + gener->SetJetEtaRange(-0.2,0.2); + gener->SetEventListRange(0,1); + gGener=gener; + } + break; + case kPyGJ: + { + comment = comment.Append(" Gamma-jet at 5.5 TeV"); + AliGenPythia *gener = new AliGenPythia(-1); + gener->SetEnergyCMS(5500.); + gener->SetProcess(kPyDirectGamma); + Double_t ptHardMin=10.0, ptHardMax=-1.0; + gener->SetPtHard(ptHardMin,ptHardMax); + gener->SetYHard(-1.0,1.0); + gener->SetGammaEtaRange(-0.13,0.13); + gener->SetGammaPhiRange(210.,330.); + gener->SetEventListRange(0,1); + gGener=gener; + } + break; + case kMuonCocktailCent1: + { + comment = comment.Append(" Muon Cocktail Cent1"); + AliGenMUONCocktail * gener = new AliGenMUONCocktail(); + gener->SetPtRange(0.4,100.); // Transverse momentum range + gener->SetPhiRange(0.,360.); // Azimuthal angle range + gener->SetYRange(-4.0,-2.4); + gener->SetMuonPtCut(0.8); + gener->SetMuonThetaCut(171.,178.); + gener->SetMuonMultiplicity(2); + gener->SetImpactParameterRange(0.,5.); //Centrality class Cent1 for PDC04 + gGener=gener; + } + break; + case kMuonCocktailPer1: + { + comment = comment.Append(" Muon Cocktail Per1"); + AliGenMUONCocktail * gener = new AliGenMUONCocktail(); + gener->SetPtRange(0.0,100.); // Transverse momentum range + gener->SetPhiRange(0.,360.); // Azimuthal angle range + gener->SetYRange(-4.0,-2.4); + gener->SetMuonPtCut(0.8); + gener->SetMuonThetaCut(171.,178.); + gener->SetMuonMultiplicity(2); + gener->SetImpactParameterRange(5.,8.6);//Centrality class Per1 for PDC04 + gGener=gener; + } + break; + case kMuonCocktailPer4: + { + comment = comment.Append(" Muon Cocktail Per4"); + AliGenMUONCocktail * gener = new AliGenMUONCocktail(); + gener->SetPtRange(0.0,100.); // Transverse momentum range + gener->SetPhiRange(0.,360.); // Azimuthal angle range + gener->SetYRange(-4.0,-2.4); + gener->SetMuonPtCut(0.8); + gener->SetMuonThetaCut(171.,178.); + gener->SetMuonMultiplicity(2); + gener->SetImpactParameterRange(13.2,15.0);//Centrality class Per4 for PDC04 + gGener=gener; + } + break; + case kMuonCocktailCent1HighPt: + { + comment = comment.Append(" Muon Cocktail HighPt Cent1"); + AliGenMUONCocktail * gener = new AliGenMUONCocktail(); + gener->SetPtRange(0.0,100.); // Transverse momentum range + gener->SetPhiRange(0.,360.); // Azimuthal angle range + gener->SetYRange(-4.0,-2.4); + gener->SetMuonPtCut(2.5); + gener->SetMuonThetaCut(171.,178.); + gener->SetMuonMultiplicity(2); + gener->SetImpactParameterRange(0.,5.); //Centrality class Cent1 for PDC04 + gGener=gener; + } + break; + case kMuonCocktailPer1HighPt : + { + comment = comment.Append(" Muon Cocktail HighPt Per1"); + AliGenMUONCocktail * gener = new AliGenMUONCocktail(); + gener->SetPtRange(0.0,100.); // Transverse momentum range + gener->SetPhiRange(0.,360.); // Azimuthal angle range + gener->SetYRange(-4.0,-2.4); + gener->SetMuonPtCut(2.5); + gener->SetMuonThetaCut(171.,178.); + gener->SetMuonMultiplicity(2); + gener->SetImpactParameterRange(5.,8.6);//Centrality class Per1 for PDC04 + gGener=gener; + } + break; + case kMuonCocktailPer4HighPt: + { + comment = comment.Append(" Muon Cocktail HighPt Per4"); + AliGenMUONCocktail * gener = new AliGenMUONCocktail(); + gener->SetPtRange(0.0,100.); // Transverse momentum range + gener->SetPhiRange(0.,360.); // Azimuthal angle range + gener->SetYRange(-4.0,-2.4); + gener->SetMuonPtCut(2.5); + gener->SetMuonThetaCut(171.,178.); + gener->SetMuonMultiplicity(2); + gener->SetImpactParameterRange(13.2,15.0);//Centrality class Per4 for PDC04 + gGener=gener; + } + break; + case kMuonCocktailCent1Single: + { + comment = comment.Append(" Muon Cocktail Single Cent1"); + AliGenMUONCocktail * gener = new AliGenMUONCocktail(); + gener->SetPtRange(0.0,100.); // Transverse momentum range + gener->SetPhiRange(0.,360.); // Azimuthal angle range + gener->SetYRange(-4.0,-2.4); + gener->SetMuonPtCut(0.8); + gener->SetMuonThetaCut(171.,178.); + gener->SetMuonMultiplicity(1); + gener->SetImpactParameterRange(0.,5.); //Centrality class Cent1 for PDC04 + gGener=gener; + } + break; + case kMuonCocktailPer1Single : + { + comment = comment.Append(" Muon Cocktail Single Per1"); + AliGenMUONCocktail * gener = new AliGenMUONCocktail(); + gener->SetPtRange(0.0,100.); // Transverse momentum range + gener->SetPhiRange(0.,360.); // Azimuthal angle range + gener->SetYRange(-4.0,-2.4); + gener->SetMuonPtCut(0.8); + gener->SetMuonThetaCut(171.,178.); + gener->SetMuonMultiplicity(1); + gener->SetImpactParameterRange(5.,8.6);//Centrality class Per1 for PDC04 + gener->SetNumberOfParticipants(229.3);//Centrality class Per1 for PDC04 + gGener=gener; + } + break; + case kMuonCocktailPer4Single: + { + comment = comment.Append(" Muon Cocktail Single Per4"); + AliGenMUONCocktail * gener = new AliGenMUONCocktail(); + gener->SetPtRange(0.0,100.); // Transverse momentum range + gener->SetPhiRange(0.,360.); // Azimuthal angle range + gener->SetYRange(-4.0,-2.4); + gener->SetMuonPtCut(0.8); + gener->SetMuonThetaCut(171.,178.); + gener->SetMuonMultiplicity(1); + gener->SetImpactParameterRange(13.2,15.0);//Centrality class Per4 for PDC04 + gGener=gener; + } + break; + case kFlow_2_2000: + { + comment = comment.Append(" Flow with dN/deta = 2000, vn = 2%"); + gGener = GeVSimStandard(2000., 2.); + } + break; + + case kFlow_10_2000: + { + comment = comment.Append(" Flow with dN/deta = 2000, vn = 10%"); + gGener = GeVSimStandard(2000., 10.); + } + break; + + case kFlow_6_2000: + { + comment = comment.Append(" Flow with dN/deta = 2000, vn = 6%"); + gGener = GeVSimStandard(2000., 6.); + } + break; + + case kFlow_6_5000: + { + comment = comment.Append(" Flow with dN/deta = 5000, vn = 6%"); + gGener = GeVSimStandard(5000., 6.); + } + break; + case kHIJINGplus: + { + // + // The cocktail + AliGenCocktail *gener = new AliGenCocktail(); + + // + // Charm production by Pythia + AliGenPythia * genpyc = new AliGenPythia(230); + genpyc->SetProcess(kPyCharmPbPbMNR); + genpyc->SetStrucFunc(kCTEQ4L); + genpyc->SetPtHard(2.1,-1.0); + genpyc->SetEnergyCMS(5500.); + genpyc->SetNuclei(208,208); + genpyc->SetYRange(-999,999); + genpyc->SetForceDecay(kAll); + genpyc->SetFeedDownHigherFamily(kFALSE); + genpyc->SetCountMode(AliGenPythia::kCountParents); + // + // Beauty production by Pythia + AliGenPythia * genpyb = new AliGenPythia(9); + genpyb->SetProcess(kPyBeautyPbPbMNR); + genpyb->SetStrucFunc(kCTEQ4L); + genpyb->SetPtHard(2.75,-1.0); + genpyb->SetEnergyCMS(5500.); + genpyb->SetNuclei(208,208); + genpyb->SetYRange(-999,999); + genpyb->SetForceDecay(kAll); + genpyb->SetFeedDownHigherFamily(kFALSE); + genpyb->SetCountMode(AliGenPythia::kCountParents); + // + // Hyperons + // + AliGenSTRANGElib *lib = new AliGenSTRANGElib(); + Int_t particle; + // Xi + particle = AliGenSTRANGElib::kXiMinus; + AliGenParam *genXi = new AliGenParam(16,particle,lib->GetPt(particle),lib->GetY(particle),lib->GetIp(particle)); + genXi->SetPtRange(0., 12.); + genXi->SetYRange(-1.1, 1.1); + genXi->SetForceDecay(kNoDecay); + + // + // Omega + particle = AliGenSTRANGElib::kOmegaMinus; + AliGenParam *genOmega = new AliGenParam(10,particle,lib->GetPt(particle),lib->GetY(particle),lib->GetIp(particle)); + genOmega->SetPtRange(0, 12.); + genOmega->SetYRange(-1.1, 1.1); + genOmega->SetForceDecay(kNoDecay); + + // + // Central Hijing + AliGenHijing *genHi = HijingStandard(); + genHi->SwitchOffHeavyQuarks(kTRUE); + genHi->SetImpactParameterRange(0.,5.); + // + // Add everything to the cocktail and shake ... + gener->AddGenerator(genHi, "Hijing cent1", 1); + gener->AddGenerator(genpyc, "Extra charm", 1); + gener->AddGenerator(genpyb, "Extra beauty", 1); + gener->AddGenerator(genXi, "Xi" , 1); + gener->AddGenerator(genOmega, "Omega", 1); + gGener = gener; + } + break; + default: break; + } + + return gGener; +} + +AliGenHijing* HijingStandard() +{ + AliGenHijing *gener = new AliGenHijing(-1); +// centre of mass energy + gener->SetEnergyCMS(5500.); +// reference frame + gener->SetReferenceFrame("CMS"); +// projectile + gener->SetProjectile("A", 208, 82); + gener->SetTarget ("A", 208, 82); +// tell hijing to keep the full parent child chain + gener->KeepFullEvent(); +// enable jet quenching + gener->SetJetQuenching(1); +// enable shadowing + gener->SetShadowing(1); +// neutral pion and heavy particle decays switched off + gener->SetDecaysOff(1); +// Don't track spectators + gener->SetSpectators(0); +// kinematic selection + gener->SetSelectAll(0); + return gener; +} + +AliGenGeVSim* GeVSimStandard(Float_t mult, Float_t vn) +{ + AliGenGeVSim* gener = new AliGenGeVSim(0); +// +// Mult is the number of charged particles in |eta| < 0.5 +// Vn is in (%) +// +// Sigma of the Gaussian dN/deta + Float_t sigma_eta = 2.75; +// +// Maximum eta + Float_t etamax = 7.00; +// +// +// Scale from multiplicity in |eta| < 0.5 to |eta| < |etamax| + Float_t mm = mult * (TMath::Erf(etamax/sigma_eta/sqrt(2.)) / TMath::Erf(0.5/sigma_eta/sqrt(2.))); +// +// Scale from charged to total multiplicity +// + mm *= 1.587; +// +// Vn + vn /= 100.; +// +// Define particles +// +// +// 78% Pions (26% pi+, 26% pi-, 26% p0) T = 250 MeV + AliGeVSimParticle *pp = new AliGeVSimParticle(kPiPlus, 1, 0.26 * mm, 0.25, sigma_eta) ; + AliGeVSimParticle *pm = new AliGeVSimParticle(kPiMinus, 1, 0.26 * mm, 0.25, sigma_eta) ; + AliGeVSimParticle *p0 = new AliGeVSimParticle(kPi0, 1, 0.26 * mm, 0.25, sigma_eta) ; +// +// 12% Kaons (3% K0short, 3% K0long, 3% K+, 3% K-) T = 300 MeV + AliGeVSimParticle *ks = new AliGeVSimParticle(kK0Short, 1, 0.03 * mm, 0.30, sigma_eta) ; + AliGeVSimParticle *kl = new AliGeVSimParticle(kK0Long, 1, 0.03 * mm, 0.30, sigma_eta) ; + AliGeVSimParticle *kp = new AliGeVSimParticle(kKPlus, 1, 0.03 * mm, 0.30, sigma_eta) ; + AliGeVSimParticle *km = new AliGeVSimParticle(kKMinus, 1, 0.03 * mm, 0.30, sigma_eta) ; +// +// 10% Protons / Neutrons (5% Protons, 5% Neutrons) T = 250 MeV + AliGeVSimParticle *pr = new AliGeVSimParticle(kProton, 1, 0.05 * mm, 0.25, sigma_eta) ; + AliGeVSimParticle *ne = new AliGeVSimParticle(kNeutron, 1, 0.05 * mm, 0.25, sigma_eta) ; +// +// Set Elliptic Flow properties + + Float_t pTsaturation = 2. ; + + pp->SetEllipticParam(vn,pTsaturation,0.) ; + pm->SetEllipticParam(vn,pTsaturation,0.) ; + p0->SetEllipticParam(vn,pTsaturation,0.) ; + pr->SetEllipticParam(vn,pTsaturation,0.) ; + ne->SetEllipticParam(vn,pTsaturation,0.) ; + ks->SetEllipticParam(vn,pTsaturation,0.) ; + kl->SetEllipticParam(vn,pTsaturation,0.) ; + kp->SetEllipticParam(vn,pTsaturation,0.) ; + km->SetEllipticParam(vn,pTsaturation,0.) ; +// +// Set Direct Flow properties + pp->SetDirectedParam(vn,1.0,0.) ; + pm->SetDirectedParam(vn,1.0,0.) ; + p0->SetDirectedParam(vn,1.0,0.) ; + pr->SetDirectedParam(vn,1.0,0.) ; + ne->SetDirectedParam(vn,1.0,0.) ; + ks->SetDirectedParam(vn,1.0,0.) ; + kl->SetDirectedParam(vn,1.0,0.) ; + kp->SetDirectedParam(vn,1.0,0.) ; + km->SetDirectedParam(vn,1.0,0.) ; +// +// Add particles to the list + gener->AddParticleType(pp) ; + gener->AddParticleType(pm) ; + gener->AddParticleType(p0) ; + gener->AddParticleType(pr) ; + gener->AddParticleType(ne) ; + gener->AddParticleType(ks) ; + gener->AddParticleType(kl) ; + gener->AddParticleType(kp) ; + gener->AddParticleType(km) ; +// +// Random Ev.Plane ---------------------------------- + TF1 *rpa = new TF1("gevsimPsiRndm","1", 0, 360); +// -------------------------------------------------- + gener->SetPtRange(0., 9.) ; // Use a resonable range! (used for bin size in numerical integration) + gener->SetPhiRange(0, 360); + // + // Set pseudorapidity range + Float_t thmin = EtaToTheta(+etamax); + Float_t thmax = EtaToTheta(-etamax); + gener->SetThetaRange(thmin,thmax); + return gener; +} + + + +void ProcessEnvironmentVars() +{ + // Run type + if (gSystem->Getenv("CONFIG_RUN_TYPE")) { + for (Int_t iRun = 0; iRun < kRunMax; iRun++) { + if (strcmp(gSystem->Getenv("CONFIG_RUN_TYPE"), pprRunName[iRun])==0) { + srun = (PprRun_t)iRun; + cout<<"Run type set to "<Getenv("CONFIG_SEED")) { + sseed = atoi(gSystem->Getenv("CONFIG_SEED")); + } +} diff --git a/test/merge/backgr/rec.C b/test/merge/backgr/rec.C new file mode 100644 index 00000000000..2a2307cd184 --- /dev/null +++ b/test/merge/backgr/rec.C @@ -0,0 +1,16 @@ +void rec() { + + AliReconstruction reco; + reco.SetUniformFieldTracking(kFALSE); + reco.SetWriteESDfriend(); + reco.SetWriteAlignmentData(); + AliTPCReconstructor::SetStreamLevel(1); + AliTPCReconstructor::SetRecoParam(AliTPCRecoParam::GetLowFluxParam()); + // reco.SetInput("raw.root"); + + TStopwatch timer; + timer.Start(); + reco.Run(); + timer.Stop(); + timer.Print(); +} diff --git a/test/merge/backgr/sim.C b/test/merge/backgr/sim.C new file mode 100644 index 00000000000..4ad34f1c2ae --- /dev/null +++ b/test/merge/backgr/sim.C @@ -0,0 +1,10 @@ +void sim(Int_t nev=1) { + AliSimulation simulator; + simulator.SetWriteRawData("ALL","raw.root",kTRUE); + + TStopwatch timer; + timer.Start(); + simulator.Run(nev); + timer.Stop(); + timer.Print(); +} diff --git a/test/merge/signal/.gdb_history b/test/merge/signal/.gdb_history new file mode 100644 index 00000000000..569be63b67f --- /dev/null +++ b/test/merge/signal/.gdb_history @@ -0,0 +1,19 @@ +run -b +quit +run +b 'TRef::GetObject() const' +cont +quit +run +b 'TRef::GetObject() const' +cont +print fPID +next +next +next +print obj +print uid +print *fPID +print uid +print *fPID->fObjects +quit diff --git a/test/merge/signal/Config.C b/test/merge/signal/Config.C new file mode 100644 index 00000000000..aa190a19bcc --- /dev/null +++ b/test/merge/signal/Config.C @@ -0,0 +1,1602 @@ +// One can use the configuration macro in compiled mode by +// root [0] gSystem->Load("libgeant321"); +// root [0] gSystem->SetIncludePath("-I$ROOTSYS/include -I$ALICE_ROOT/include\ +// -I$ALICE_ROOT -I$ALICE/geant3/TGeant3"); +// root [0] .x grun.C(1,"ConfigPPR.C++") + +#if !defined(__CINT__) || defined(__MAKECINT__) +#include +#include +#include +#include +#include +#include +#include +#include +#include "STEER/AliRunLoader.h" +#include "STEER/AliRun.h" +#include "STEER/AliConfig.h" +#include "STEER/AliGenerator.h" +#include "STEER/AliLog.h" +#include "PYTHIA6/AliDecayerPythia.h" +#include "EVGEN/AliGenHIJINGpara.h" +#include "THijing/AliGenHijing.h" +#include "EVGEN/AliGenCocktail.h" +#include "EVGEN/AliGenSlowNucleons.h" +#include "EVGEN/AliSlowNucleonModelExp.h" +#include "EVGEN/AliGenParam.h" +#include "EVGEN/AliGenMUONlib.h" +#include "EVGEN/AliGenSTRANGElib.h" +#include "EVGEN/AliGenMUONCocktail.h" +#include "EVGEN/AliGenCocktail.h" +#include "EVGEN/AliGenGeVSim.h" +#include "EVGEN/AliGeVSimParticle.h" +#include "PYTHIA6/AliGenPythia.h" +#include "STEER/AliMagFMaps.h" +#include "STRUCT/AliBODY.h" +#include "STRUCT/AliMAG.h" +#include "STRUCT/AliABSOv0.h" +#include "STRUCT/AliDIPOv2.h" +#include "STRUCT/AliHALL.h" +#include "STRUCT/AliFRAMEv2.h" +#include "STRUCT/AliSHILv2.h" +#include "STRUCT/AliPIPEv0.h" +#include "ITS/AliITSvPPRasymmFMD.h" +#include "TPC/AliTPCv2.h" +#include "TOF/AliTOFv5T0.h" +#include "HMPID/AliHMPIDv1.h" +#include "ZDC/AliZDCv2.h" +#include "TRD/AliTRDv1.h" +#include "FMD/AliFMDv1.h" +#include "MUON/AliMUONv1.h" +#include "PHOS/AliPHOSv1.h" +#include "PMD/AliPMDv1.h" +#include "T0/AliT0v1.h" +#include "EMCAL/AliEMCALv2.h" +#include "ACORDE/AliACORDEv0.h" +#include "VZERO/AliVZEROv7.h" +#endif + +enum PprRun_t +{ + test50, + kParam_8000, kParam_4000, kParam_2000, + kHijing_cent1, kHijing_cent2, + kHijing_per1, kHijing_per2, kHijing_per3, kHijing_per4, kHijing_per5, + kHijing_jj25, kHijing_jj50, kHijing_jj75, kHijing_jj100, kHijing_jj200, + kHijing_gj25, kHijing_gj50, kHijing_gj75, kHijing_gj100, kHijing_gj200, + kHijing_pA, kPythia6, + kPythia6Jets20_24, kPythia6Jets24_29, kPythia6Jets29_35, + kPythia6Jets35_42, kPythia6Jets42_50, kPythia6Jets50_60, + kPythia6Jets60_72, kPythia6Jets72_86, kPythia6Jets86_104, + kPythia6Jets104_125, kPythia6Jets125_150, kPythia6Jets150_180, + kD0PbPb5500, kCharmSemiElPbPb5500, kBeautySemiElPbPb5500, + kCocktailTRD, kPyJJ, kPyGJ, + kMuonCocktailCent1, kMuonCocktailPer1, kMuonCocktailPer4, + kMuonCocktailCent1HighPt, kMuonCocktailPer1HighPt, kMuonCocktailPer4HighPt, + kMuonCocktailCent1Single, kMuonCocktailPer1Single, kMuonCocktailPer4Single, + kFlow_2_2000, kFlow_10_2000, kFlow_6_2000, kFlow_6_5000, + kHIJINGplus, kRunMax +}; + +const char* pprRunName[] = { + "test50", + "kParam_8000", "kParam_4000", "kParam_2000", + "kHijing_cent1", "kHijing_cent2", + "kHijing_per1", "kHijing_per2", "kHijing_per3", "kHijing_per4", + "kHijing_per5", + "kHijing_jj25", "kHijing_jj50", "kHijing_jj75", "kHijing_jj100", + "kHijing_jj200", + "kHijing_gj25", "kHijing_gj50", "kHijing_gj75", "kHijing_gj100", + "kHijing_gj200", "kHijing_pA", "kPythia6", + "kPythia6Jets20_24", "kPythia6Jets24_29", "kPythia6Jets29_35", + "kPythia6Jets35_42", "kPythia6Jets42_50", "kPythia6Jets50_60", + "kPythia6Jets60_72", "kPythia6Jets72_86", "kPythia6Jets86_104", + "kPythia6Jets104_125", "kPythia6Jets125_150", "kPythia6Jets150_180", + "kD0PbPb5500", "kCharmSemiElPbPb5500", "kBeautySemiElPbPb5500", + "kCocktailTRD", "kPyJJ", "kPyGJ", + "kMuonCocktailCent1", "kMuonCocktailPer1", "kMuonCocktailPer4", + "kMuonCocktailCent1HighPt", "kMuonCocktailPer1HighPt", "kMuonCocktailPer4HighPt", + "kMuonCocktailCent1Single", "kMuonCocktailPer1Single", "kMuonCocktailPer4Single", + "kFlow_2_2000", "kFlow_10_2000", "kFlow_6_2000", "kFlow_6_5000", "kHIJINGplus" +}; + +enum PprRad_t +{ + kGluonRadiation, kNoGluonRadiation +}; + +enum PprMag_t +{ + k2kG, k4kG, k5kG +}; + +enum PprTrigConf_t +{ + kDefaultPPTrig, kDefaultPbPbTrig +}; + +const char * pprTrigConfName[] = { + "p-p","Pb-Pb" +}; + +// This part for configuration +//static PprRun_t srun = test50; +static PprRun_t srun = kPythia6; +static PprRad_t srad = kGluonRadiation; +static PprMag_t smag = k5kG; +TDatime dat; +static Int_t sseed = dat.Get(); //Set 0 to use the current time +//static PprTrigConf_t strig = kDefaultPPTrig; // default pp trigger configuration +static PprTrigConf_t strig = kDefaultPbPbTrig; // default PbPb trigger configuration + +// Comment line +static TString comment; + +// Functions +Float_t EtaToTheta(Float_t arg); +AliGenerator* GeneratorFactory(PprRun_t srun); +AliGenHijing* HijingStandard(); +AliGenGeVSim* GeVSimStandard(Float_t, Float_t); +void ProcessEnvironmentVars(); + +void Config() +{ + // ThetaRange is (0., 180.). It was (0.28,179.72) 7/12/00 09:00 + // Theta range given through pseudorapidity limits 22/6/2001 + + // Get settings from environment variables + ProcessEnvironmentVars(); + + // Set Random Number seed + gRandom->SetSeed(sseed); + cout<<"Seed for random number generation= "<GetSeed()<Load("libgeant321"); +#endif + + new TGeant3TGeo("C++ Interface to Geant3"); + + AliRunLoader* rl=0x0; + + AliLog::Message(AliLog::kInfo, "Creating Run Loader", "", "", "Config()"," ConfigPPR.C", __LINE__); + + rl = AliRunLoader::Open("galice.root", + AliConfig::GetDefaultEventFolderName(), + "recreate"); + if (rl == 0x0) + { + gAlice->Fatal("Config.C","Can not instatiate the Run Loader"); + return; + } + rl->SetCompressionLevel(2); + rl->SetNumberOfEventsPerFile(3); + gAlice->SetRunLoader(rl); + + // Set the trigger configuration + gAlice->SetTriggerDescriptor(pprTrigConfName[strig]); + cout<<"Trigger configuration is set to "<SetForceDecay(kHadronicD); + break; + case kCharmSemiElPbPb5500: + decayer->SetForceDecay(kSemiElectronic); + break; + case kBeautySemiElPbPb5500: + decayer->SetForceDecay(kSemiElectronic); + break; + default: + decayer->SetForceDecay(kAll); + break; + } + decayer->Init(); + gMC->SetExternalDecayer(decayer); + // + // + //======================================================================= + // + //======================================================================= + // ************* STEERING parameters FOR ALICE SIMULATION ************** + // --- Specify event type to be tracked through the ALICE setup + // --- All positions are in cm, angles in degrees, and P and E in GeV + + gMC->SetProcess("DCAY",1); + gMC->SetProcess("PAIR",1); + gMC->SetProcess("COMP",1); + gMC->SetProcess("PHOT",1); + gMC->SetProcess("PFIS",0); + gMC->SetProcess("DRAY",0); + gMC->SetProcess("ANNI",1); + gMC->SetProcess("BREM",1); + gMC->SetProcess("MUNU",1); + gMC->SetProcess("CKOV",1); + gMC->SetProcess("HADR",1); + gMC->SetProcess("LOSS",2); + gMC->SetProcess("MULS",1); + gMC->SetProcess("RAYL",1); + + Float_t cut = 1.e-3; // 1MeV cut by default + Float_t tofmax = 1.e10; + + gMC->SetCut("CUTGAM", cut); + gMC->SetCut("CUTELE", cut); + gMC->SetCut("CUTNEU", cut); + gMC->SetCut("CUTHAD", cut); + gMC->SetCut("CUTMUO", cut); + gMC->SetCut("BCUTE", cut); + gMC->SetCut("BCUTM", cut); + gMC->SetCut("DCUTE", cut); + gMC->SetCut("DCUTM", cut); + gMC->SetCut("PPCUTM", cut); + gMC->SetCut("TOFMAX", tofmax); + + // Debug and log level + // AliLog::SetGlobalDebugLevel(0); + // AliLog::SetGlobalLogLevel(AliLog::kError); + + // Generator Configuration + AliGenerator* gener = GeneratorFactory(srun); + gener->SetOrigin(0, 0, 0); // vertex position + gener->SetSigma(0, 0, 5.3); // Sigma in (X,Y,Z) (cm) on IP position + gener->SetCutVertexZ(1.); // Truncate at 1 sigma + gener->SetVertexSmear(kPerEvent); + gener->SetTrackingFlag(1); + gener->Init(); + + if (smag == k2kG) { + comment = comment.Append(" | L3 field 0.2 T"); + } else if (smag == k4kG) { + comment = comment.Append(" | L3 field 0.4 T"); + } else if (smag == k5kG) { + comment = comment.Append(" | L3 field 0.5 T"); + } + + + if (srad == kGluonRadiation) + { + comment = comment.Append(" | Gluon Radiation On"); + + } else { + comment = comment.Append(" | Gluon Radiation Off"); + } + + printf("\n \n Comment: %s \n \n", comment.Data()); + + +// Field (L3 0.4 T) + AliMagFMaps* field = new AliMagFMaps("Maps","Maps", 2, 1., 10., smag); + field->SetL3ConstField(0); //Using const. field in the barrel + rl->CdGAFile(); + gAlice->SetField(field); +// + Int_t iABSO = 1; + Int_t iDIPO = 1; + Int_t iFMD = 1; + Int_t iFRAME = 1; + Int_t iHALL = 1; + Int_t iITS = 1; + Int_t iMAG = 1; + Int_t iMUON = 1; + Int_t iPHOS = 1; + Int_t iPIPE = 1; + Int_t iPMD = 1; + Int_t iHMPID = 1; + Int_t iSHIL = 1; + Int_t iT0 = 1; + Int_t iTOF = 1; + Int_t iTPC = 1; + Int_t iTRD = 1; + Int_t iZDC = 1; + Int_t iEMCAL = 1; + Int_t iVZERO = 1; + Int_t iACORDE = 0; + + //=================== Alice BODY parameters ============================= + AliBODY *BODY = new AliBODY("BODY", "Alice envelop"); + + + if (iMAG) + { + //=================== MAG parameters ============================ + // --- Start with Magnet since detector layouts may be depending --- + // --- on the selected Magnet dimensions --- + AliMAG *MAG = new AliMAG("MAG", "Magnet"); + } + + + if (iABSO) + { + //=================== ABSO parameters ============================ + AliABSO *ABSO = new AliABSOv0("ABSO", "Muon Absorber"); + } + + if (iDIPO) + { + //=================== DIPO parameters ============================ + + AliDIPO *DIPO = new AliDIPOv2("DIPO", "Dipole version 2"); + } + + if (iHALL) + { + //=================== HALL parameters ============================ + + AliHALL *HALL = new AliHALL("HALL", "Alice Hall"); + } + + + if (iFRAME) + { + //=================== FRAME parameters ============================ + + AliFRAMEv2 *FRAME = new AliFRAMEv2("FRAME", "Space Frame"); + } + + if (iSHIL) + { + //=================== SHIL parameters ============================ + + AliSHIL *SHIL = new AliSHILv2("SHIL", "Shielding Version 2"); + } + + + if (iPIPE) + { + //=================== PIPE parameters ============================ + + AliPIPE *PIPE = new AliPIPEv0("PIPE", "Beam Pipe"); + } + + if(iITS) { + + //=================== ITS parameters ============================ + // + // As the innermost detector in ALICE, the Inner Tracking System "impacts" on + // almost all other detectors. This involves the fact that the ITS geometry + // still has several options to be followed in parallel in order to determine + // the best set-up which minimizes the induced background. All the geometries + // available to date are described in the following. Read carefully the comments + // and use the default version (the only one uncommented) unless you are making + // comparisons and you know what you are doing. In this case just uncomment the + // ITS geometry you want to use and run Aliroot. + // + // Detailed geometries: + // + // + //AliITS *ITS = new AliITSv5symm("ITS","Updated ITS TDR detailed version with symmetric services"); + // + //AliITS *ITS = new AliITSv5asymm("ITS","Updates ITS TDR detailed version with asymmetric services"); + // + AliITSvPPRasymmFMD *ITS = new AliITSvPPRasymmFMD("ITS","New ITS PPR detailed version with asymmetric services"); + ITS->SetMinorVersion(2); // don't touch this parameter if you're not an ITS developer + ITS->SetReadDet(kFALSE); // don't touch this parameter if you're not an ITS developer + // ITS->SetWriteDet("$ALICE_ROOT/ITS/ITSgeometry_vPPRasymm2.det"); // don't touch this parameter if you're not an ITS developer + ITS->SetThicknessDet1(200.); // detector thickness on layer 1 must be in the range [100,300] + ITS->SetThicknessDet2(200.); // detector thickness on layer 2 must be in the range [100,300] + ITS->SetThicknessChip1(150.); // chip thickness on layer 1 must be in the range [150,300] + ITS->SetThicknessChip2(150.); // chip thickness on layer 2 must be in the range [150,300] + ITS->SetRails(0); // 1 --> rails in ; 0 --> rails out + ITS->SetCoolingFluid(1); // 1 --> water ; 0 --> freon + + // Coarse geometries (warning: no hits are produced with these coarse geometries and they unuseful + // for reconstruction !): + // + // + //AliITSvPPRcoarseasymm *ITS = new AliITSvPPRcoarseasymm("ITS","New ITS PPR coarse version with asymmetric services"); + //ITS->SetRails(0); // 1 --> rails in ; 0 --> rails out + //ITS->SetSupportMaterial(0); // 0 --> Copper ; 1 --> Aluminum ; 2 --> Carbon + // + //AliITS *ITS = new AliITSvPPRcoarsesymm("ITS","New ITS PPR coarse version with symmetric services"); + //ITS->SetRails(0); // 1 --> rails in ; 0 --> rails out + //ITS->SetSupportMaterial(0); // 0 --> Copper ; 1 --> Aluminum ; 2 --> Carbon + // + // + // + // Geant3 <-> EUCLID conversion + // ============================ + // + // SetEUCLID is a flag to output (=1) or not to output (=0) both geometry and + // media to two ASCII files (called by default ITSgeometry.euc and + // ITSgeometry.tme) in a format understandable to the CAD system EUCLID. + // The default (=0) means that you dont want to use this facility. + // + ITS->SetEUCLID(0); + } + + if (iTPC) + { + //============================ TPC parameters ===================== + AliTPC *TPC = new AliTPCv2("TPC", "Default"); + } + + + if (iTOF) { + //=================== TOF parameters ============================ + AliTOF *TOF = new AliTOFv5T0("TOF", "normal TOF"); + } + + + if (iHMPID) + { + //=================== HMPID parameters =========================== + AliHMPID *HMPID = new AliHMPIDv1("HMPID", "normal HMPID"); + + } + + + if (iZDC) + { + //=================== ZDC parameters ============================ + + AliZDC *ZDC = new AliZDCv2("ZDC", "normal ZDC"); + } + + if (iTRD) + { + //=================== TRD parameters ============================ + + AliTRD *TRD = new AliTRDv1("TRD", "TRD slow simulator"); + } + + if (iFMD) + { + //=================== FMD parameters ============================ + AliFMD *FMD = new AliFMDv1("FMD", "normal FMD"); + } + + if (iMUON) + { + //=================== MUON parameters =========================== + // New MUONv1 version (geometry defined via builders) + AliMUON *MUON = new AliMUONv1("MUON", "default"); + } + //=================== PHOS parameters =========================== + + if (iPHOS) + { + AliPHOS *PHOS = new AliPHOSv1("PHOS", "IHEP"); + } + + + if (iPMD) + { + //=================== PMD parameters ============================ + AliPMD *PMD = new AliPMDv1("PMD", "normal PMD"); + } + + if (iT0) + { + //=================== T0 parameters ============================ + AliT0 *T0 = new AliT0v1("T0", "T0 Detector"); + } + + if (iEMCAL) + { + //=================== EMCAL parameters ============================ + AliEMCAL *EMCAL = new AliEMCALv2("EMCAL", "SHISH_77_TRD1_2X2_FINAL_110DEG"); + } + + if (iACORDE) + { + //=================== ACORDE parameters ============================ + AliACORDE *ACORDE = new AliACORDEv0("ACORDE", "normal ACORDE"); + } + + if (iVZERO) + { + //=================== ACORDE parameters ============================ + AliVZERO *VZERO = new AliVZEROv7("VZERO", "normal VZERO"); + } + + +} + +Float_t EtaToTheta(Float_t arg){ + return (180./TMath::Pi())*2.*atan(exp(-arg)); +} + + + +AliGenerator* GeneratorFactory(PprRun_t srun) { + Int_t isw = 3; + if (srad == kNoGluonRadiation) isw = 0; + + + AliGenerator * gGener = 0x0; + switch (srun) { + case test50: + { + comment = comment.Append(":HIJINGparam test 50 particles"); + AliGenHIJINGpara *gener = new AliGenHIJINGpara(50); + gener->SetMomentumRange(0, 999999.); + gener->SetPhiRange(0., 360.); + // Set pseudorapidity range from -8 to 8. + Float_t thmin = EtaToTheta(8); // theta min. <---> eta max + Float_t thmax = EtaToTheta(-8); // theta max. <---> eta min + gener->SetThetaRange(thmin,thmax); + gGener=gener; + } + break; + case kParam_8000: + { + comment = comment.Append(":HIJINGparam N=8000"); + AliGenHIJINGpara *gener = new AliGenHIJINGpara(86030); + gener->SetMomentumRange(0, 999999.); + gener->SetPhiRange(0., 360.); + // Set pseudorapidity range from -8 to 8. + Float_t thmin = EtaToTheta(8); // theta min. <---> eta max + Float_t thmax = EtaToTheta(-8); // theta max. <---> eta min + gener->SetThetaRange(thmin,thmax); + gGener=gener; + } + break; + case kParam_4000: + { + comment = comment.Append("HIJINGparam N=4000"); + AliGenHIJINGpara *gener = new AliGenHIJINGpara(43015); + gener->SetMomentumRange(0, 999999.); + gener->SetPhiRange(0., 360.); + // Set pseudorapidity range from -8 to 8. + Float_t thmin = EtaToTheta(8); // theta min. <---> eta max + Float_t thmax = EtaToTheta(-8); // theta max. <---> eta min + gener->SetThetaRange(thmin,thmax); + gGener=gener; + } + break; + case kParam_2000: + { + comment = comment.Append("HIJINGparam N=2000"); + AliGenHIJINGpara *gener = new AliGenHIJINGpara(21507); + gener->SetMomentumRange(0, 999999.); + gener->SetPhiRange(0., 360.); + // Set pseudorapidity range from -8 to 8. + Float_t thmin = EtaToTheta(8); // theta min. <---> eta max + Float_t thmax = EtaToTheta(-8); // theta max. <---> eta min + gener->SetThetaRange(thmin,thmax); + gGener=gener; + } + break; +// +// Hijing Central +// + case kHijing_cent1: + { + comment = comment.Append("HIJING cent1"); + AliGenHijing *gener = HijingStandard(); +// impact parameter range + gener->SetImpactParameterRange(0., 5.); + gGener=gener; + } + break; + case kHijing_cent2: + { + comment = comment.Append("HIJING cent2"); + AliGenHijing *gener = HijingStandard(); +// impact parameter range + gener->SetImpactParameterRange(0., 2.); + gGener=gener; + } + break; +// +// Hijing Peripheral +// + case kHijing_per1: + { + comment = comment.Append("HIJING per1"); + AliGenHijing *gener = HijingStandard(); +// impact parameter range + gener->SetImpactParameterRange(5., 8.6); + gGener=gener; + } + break; + case kHijing_per2: + { + comment = comment.Append("HIJING per2"); + AliGenHijing *gener = HijingStandard(); +// impact parameter range + gener->SetImpactParameterRange(8.6, 11.2); + gGener=gener; + } + break; + case kHijing_per3: + { + comment = comment.Append("HIJING per3"); + AliGenHijing *gener = HijingStandard(); +// impact parameter range + gener->SetImpactParameterRange(11.2, 13.2); + gGener=gener; + } + break; + case kHijing_per4: + { + comment = comment.Append("HIJING per4"); + AliGenHijing *gener = HijingStandard(); +// impact parameter range + gener->SetImpactParameterRange(13.2, 15.); + gGener=gener; + } + break; + case kHijing_per5: + { + comment = comment.Append("HIJING per5"); + AliGenHijing *gener = HijingStandard(); +// impact parameter range + gener->SetImpactParameterRange(15., 100.); + gGener=gener; + } + break; +// +// Jet-Jet +// + case kHijing_jj25: + { + comment = comment.Append("HIJING Jet 25 GeV"); + AliGenHijing *gener = HijingStandard(); +// impact parameter range + gener->SetImpactParameterRange(0., 5.); + // trigger + gener->SetTrigger(1); + gener->SetPtJet(25.); + gener->SetRadiation(isw); + gener->SetSimpleJets(!isw); + gener->SetJetEtaRange(-0.3,0.3); + gener->SetJetPhiRange(75., 165.); + gGener=gener; + } + break; + + case kHijing_jj50: + { + comment = comment.Append("HIJING Jet 50 GeV"); + AliGenHijing *gener = HijingStandard(); +// impact parameter range + gener->SetImpactParameterRange(0., 5.); + // trigger + gener->SetTrigger(1); + gener->SetPtJet(50.); + gener->SetRadiation(isw); + gener->SetSimpleJets(!isw); + gener->SetJetEtaRange(-0.3,0.3); + gener->SetJetPhiRange(75., 165.); + gGener=gener; + } + break; + + case kHijing_jj75: + { + comment = comment.Append("HIJING Jet 75 GeV"); + AliGenHijing *gener = HijingStandard(); +// impact parameter range + gener->SetImpactParameterRange(0., 5.); + // trigger + gener->SetTrigger(1); + gener->SetPtJet(75.); + gener->SetRadiation(isw); + gener->SetSimpleJets(!isw); + gener->SetJetEtaRange(-0.3,0.3); + gener->SetJetPhiRange(75., 165.); + gGener=gener; + } + break; + + case kHijing_jj100: + { + comment = comment.Append("HIJING Jet 100 GeV"); + AliGenHijing *gener = HijingStandard(); +// impact parameter range + gener->SetImpactParameterRange(0., 5.); + // trigger + gener->SetTrigger(1); + gener->SetPtJet(100.); + gener->SetRadiation(isw); + gener->SetSimpleJets(!isw); + gener->SetJetEtaRange(-0.3,0.3); + gener->SetJetPhiRange(75., 165.); + gGener=gener; + } + break; + + case kHijing_jj200: + { + comment = comment.Append("HIJING Jet 200 GeV"); + AliGenHijing *gener = HijingStandard(); +// impact parameter range + gener->SetImpactParameterRange(0., 5.); + // trigger + gener->SetTrigger(1); + gener->SetPtJet(200.); + gener->SetRadiation(isw); + gener->SetSimpleJets(!isw); + gener->SetJetEtaRange(-0.3,0.3); + gener->SetJetPhiRange(75., 165.); + gGener=gener; + } + break; +// +// Gamma-Jet +// + case kHijing_gj25: + { + comment = comment.Append("HIJING Gamma 25 GeV"); + AliGenHijing *gener = HijingStandard(); +// impact parameter range + gener->SetImpactParameterRange(0., 5.); + // trigger + gener->SetTrigger(2); + gener->SetPtJet(25.); + gener->SetRadiation(isw); + gener->SetSimpleJets(!isw); + gener->SetJetEtaRange(-0.12, 0.12); + gener->SetJetPhiRange(220., 320.); + gGener=gener; + } + break; + + case kHijing_gj50: + { + comment = comment.Append("HIJING Gamma 50 GeV"); + AliGenHijing *gener = HijingStandard(); +// impact parameter range + gener->SetImpactParameterRange(0., 5.); + // trigger + gener->SetTrigger(2); + gener->SetPtJet(50.); + gener->SetRadiation(isw); + gener->SetSimpleJets(!isw); + gener->SetJetEtaRange(-0.12, 0.12); + gener->SetJetPhiRange(220., 320.); + gGener=gener; + } + break; + + case kHijing_gj75: + { + comment = comment.Append("HIJING Gamma 75 GeV"); + AliGenHijing *gener = HijingStandard(); +// impact parameter range + gener->SetImpactParameterRange(0., 5.); + // trigger + gener->SetTrigger(2); + gener->SetPtJet(75.); + gener->SetRadiation(isw); + gener->SetSimpleJets(!isw); + gener->SetJetEtaRange(-0.12, 0.12); + gener->SetJetPhiRange(220., 320.); + gGener=gener; + } + break; + + case kHijing_gj100: + { + comment = comment.Append("HIJING Gamma 100 GeV"); + AliGenHijing *gener = HijingStandard(); +// impact parameter range + gener->SetImpactParameterRange(0., 5.); + // trigger + gener->SetTrigger(2); + gener->SetPtJet(100.); + gener->SetRadiation(isw); + gener->SetSimpleJets(!isw); + gener->SetJetEtaRange(-0.12, 0.12); + gener->SetJetPhiRange(220., 320.); + gGener=gener; + } + break; + + case kHijing_gj200: + { + comment = comment.Append("HIJING Gamma 200 GeV"); + AliGenHijing *gener = HijingStandard(); +// impact parameter range + gener->SetImpactParameterRange(0., 5.); + // trigger + gener->SetTrigger(2); + gener->SetPtJet(200.); + gener->SetRadiation(isw); + gener->SetSimpleJets(!isw); + gener->SetJetEtaRange(-0.12, 0.12); + gener->SetJetPhiRange(220., 320.); + gGener=gener; + } + break; + case kHijing_pA: + { + comment = comment.Append("HIJING pA"); + + AliGenCocktail *gener = new AliGenCocktail(); + + AliGenHijing *hijing = new AliGenHijing(-1); +// centre of mass energy + hijing->SetEnergyCMS(TMath::Sqrt(82./208.) * 14000.); +// impact parameter range + hijing->SetImpactParameterRange(0., 15.); +// reference frame + hijing->SetReferenceFrame("CMS"); + hijing->SetBoostLHC(1); +// projectile + hijing->SetProjectile("P", 1, 1); + hijing->SetTarget ("A", 208, 82); +// tell hijing to keep the full parent child chain + hijing->KeepFullEvent(); +// enable jet quenching + hijing->SetJetQuenching(0); +// enable shadowing + hijing->SetShadowing(1); +// Don't track spectators + hijing->SetSpectators(0); +// kinematic selection + hijing->SetSelectAll(0); +// + AliGenSlowNucleons* gray = new AliGenSlowNucleons(1); + AliSlowNucleonModel* model = new AliSlowNucleonModelExp(); + gray->SetSlowNucleonModel(model); + gray->SetDebug(1); + gener->AddGenerator(hijing,"Hijing pPb", 1); + gener->AddGenerator(gray, "Gray Particles",1); + gGener=gener; + } + break; + case kPythia6: + { + comment = comment.Append(":Pythia p-p @ 14 TeV"); + AliGenPythia *gener = new AliGenPythia(-1); + gener->SetMomentumRange(0,999999); + gener->SetThetaRange(0., 180.); + gener->SetYRange(-12,12); + gener->SetPtRange(0,1000); + gener->SetProcess(kPyMb); + gener->SetEnergyCMS(14000.); + gGener=gener; + } + break; + case kPythia6Jets20_24: + { + comment = comment.Append(":Pythia jets 20-24 GeV @ 5.5 TeV"); + AliGenPythia * gener = new AliGenPythia(-1); + gener->SetEnergyCMS(5500.);// Centre of mass energy + gener->SetProcess(kPyJets);// Process type + gener->SetJetEtaRange(-0.5, 0.5);// Final state kinematic cuts + gener->SetJetPhiRange(0., 360.); + gener->SetJetEtRange(10., 1000.); + gener->SetGluonRadiation(1,1); + // gener->SetPtKick(0.); + // Structure function + gener->SetStrucFunc(kCTEQ4L); + gener->SetPtHard(20., 24.);// Pt transfer of the hard scattering + gener->SetPycellParameters(2., 274, 432, 0., 4., 5., 1.0); + gener->SetForceDecay(kAll);// Decay type (semielectronic, etc.) + gGener=gener; + } + break; + case kPythia6Jets24_29: + { + comment = comment.Append(":Pythia jets 24-29 GeV @ 5.5 TeV"); + AliGenPythia * gener = new AliGenPythia(-1); + gener->SetEnergyCMS(5500.);// Centre of mass energy + gener->SetProcess(kPyJets);// Process type + gener->SetJetEtaRange(-0.5, 0.5);// Final state kinematic cuts + gener->SetJetPhiRange(0., 360.); + gener->SetJetEtRange(10., 1000.); + gener->SetGluonRadiation(1,1); + // gener->SetPtKick(0.); + // Structure function + gener->SetStrucFunc(kCTEQ4L); + gener->SetPtHard(24., 29.);// Pt transfer of the hard scattering + gener->SetPycellParameters(2., 274, 432, 0., 4., 5., 1.0); + gener->SetForceDecay(kAll);// Decay type (semielectronic, etc.) + gGener=gener; + } + break; + case kPythia6Jets29_35: + { + comment = comment.Append(":Pythia jets 29-35 GeV @ 5.5 TeV"); + AliGenPythia * gener = new AliGenPythia(-1); + gener->SetEnergyCMS(5500.);// Centre of mass energy + gener->SetProcess(kPyJets);// Process type + gener->SetJetEtaRange(-0.5, 0.5);// Final state kinematic cuts + gener->SetJetPhiRange(0., 360.); + gener->SetJetEtRange(10., 1000.); + gener->SetGluonRadiation(1,1); + // gener->SetPtKick(0.); + // Structure function + gener->SetStrucFunc(kCTEQ4L); + gener->SetPtHard(29., 35.);// Pt transfer of the hard scattering + gener->SetPycellParameters(2., 274, 432, 0., 4., 5., 1.0); + gener->SetForceDecay(kAll);// Decay type (semielectronic, etc.) + gGener=gener; + } + break; + case kPythia6Jets35_42: + { + comment = comment.Append(":Pythia jets 35-42 GeV @ 5.5 TeV"); + AliGenPythia * gener = new AliGenPythia(-1); + gener->SetEnergyCMS(5500.);// Centre of mass energy + gener->SetProcess(kPyJets);// Process type + gener->SetJetEtaRange(-0.5, 0.5);// Final state kinematic cuts + gener->SetJetPhiRange(0., 360.); + gener->SetJetEtRange(10., 1000.); + gener->SetGluonRadiation(1,1); + // gener->SetPtKick(0.); + // Structure function + gener->SetStrucFunc(kCTEQ4L); + gener->SetPtHard(35., 42.);// Pt transfer of the hard scattering + gener->SetPycellParameters(2., 274, 432, 0., 4., 5., 1.0); + gener->SetForceDecay(kAll);// Decay type (semielectronic, etc.) + gGener=gener; + } + break; + case kPythia6Jets42_50: + { + comment = comment.Append(":Pythia jets 42-50 GeV @ 5.5 TeV"); + AliGenPythia * gener = new AliGenPythia(-1); + gener->SetEnergyCMS(5500.);// Centre of mass energy + gener->SetProcess(kPyJets);// Process type + gener->SetJetEtaRange(-0.5, 0.5);// Final state kinematic cuts + gener->SetJetPhiRange(0., 360.); + gener->SetJetEtRange(10., 1000.); + gener->SetGluonRadiation(1,1); + // gener->SetPtKick(0.); + // Structure function + gener->SetStrucFunc(kCTEQ4L); + gener->SetPtHard(42., 50.);// Pt transfer of the hard scattering + gener->SetPycellParameters(2., 274, 432, 0., 4., 5., 1.0); + gener->SetForceDecay(kAll);// Decay type (semielectronic, etc.) + gGener=gener; + } + break; + case kPythia6Jets50_60: + { + comment = comment.Append(":Pythia jets 50-60 GeV @ 5.5 TeV"); + AliGenPythia * gener = new AliGenPythia(-1); + gener->SetEnergyCMS(5500.);// Centre of mass energy + gener->SetProcess(kPyJets);// Process type + gener->SetJetEtaRange(-0.5, 0.5);// Final state kinematic cuts + gener->SetJetPhiRange(0., 360.); + gener->SetJetEtRange(10., 1000.); + gener->SetGluonRadiation(1,1); + // gener->SetPtKick(0.); + // Structure function + gener->SetStrucFunc(kCTEQ4L); + gener->SetPtHard(50., 60.);// Pt transfer of the hard scattering + gener->SetPycellParameters(2., 274, 432, 0., 4., 5., 1.0); + gener->SetForceDecay(kAll);// Decay type (semielectronic, etc.) + gGener=gener; + } + break; + case kPythia6Jets60_72: + { + comment = comment.Append(":Pythia jets 60-72 GeV @ 5.5 TeV"); + AliGenPythia * gener = new AliGenPythia(-1); + gener->SetEnergyCMS(5500.);// Centre of mass energy + gener->SetProcess(kPyJets);// Process type + gener->SetJetEtaRange(-0.5, 0.5);// Final state kinematic cuts + gener->SetJetPhiRange(0., 360.); + gener->SetJetEtRange(10., 1000.); + gener->SetGluonRadiation(1,1); + // gener->SetPtKick(0.); + // Structure function + gener->SetStrucFunc(kCTEQ4L); + gener->SetPtHard(60., 72.);// Pt transfer of the hard scattering + gener->SetPycellParameters(2., 274, 432, 0., 4., 5., 1.0); + gener->SetForceDecay(kAll);// Decay type (semielectronic, etc.) + gGener=gener; + } + break; + case kPythia6Jets72_86: + { + comment = comment.Append(":Pythia jets 72-86 GeV @ 5.5 TeV"); + AliGenPythia * gener = new AliGenPythia(-1); + gener->SetEnergyCMS(5500.);// Centre of mass energy + gener->SetProcess(kPyJets);// Process type + gener->SetJetEtaRange(-0.5, 0.5);// Final state kinematic cuts + gener->SetJetPhiRange(0., 360.); + gener->SetJetEtRange(10., 1000.); + gener->SetGluonRadiation(1,1); + // gener->SetPtKick(0.); + // Structure function + gener->SetStrucFunc(kCTEQ4L); + gener->SetPtHard(72., 86.);// Pt transfer of the hard scattering + gener->SetPycellParameters(2., 274, 432, 0., 4., 5., 1.0); + gener->SetForceDecay(kAll);// Decay type (semielectronic, etc.) + gGener=gener; + } + break; + case kPythia6Jets86_104: + { + comment = comment.Append(":Pythia jets 86-104 GeV @ 5.5 TeV"); + AliGenPythia * gener = new AliGenPythia(-1); + gener->SetEnergyCMS(5500.);// Centre of mass energy + gener->SetProcess(kPyJets);// Process type + gener->SetJetEtaRange(-0.5, 0.5);// Final state kinematic cuts + gener->SetJetPhiRange(0., 360.); + gener->SetJetEtRange(10., 1000.); + gener->SetGluonRadiation(1,1); + // gener->SetPtKick(0.); + // Structure function + gener->SetStrucFunc(kCTEQ4L); + gener->SetPtHard(86., 104.);// Pt transfer of the hard scattering + gener->SetPycellParameters(2., 274, 432, 0., 4., 5., 1.0); + gener->SetForceDecay(kAll);// Decay type (semielectronic, etc.) + gGener=gener; + } + break; + case kPythia6Jets104_125: + { + comment = comment.Append(":Pythia jets 105-125 GeV @ 5.5 TeV"); + AliGenPythia * gener = new AliGenPythia(-1); + gener->SetEnergyCMS(5500.);// Centre of mass energy + gener->SetProcess(kPyJets);// Process type + gener->SetJetEtaRange(-0.5, 0.5);// Final state kinematic cuts + gener->SetJetPhiRange(0., 360.); + gener->SetJetEtRange(10., 1000.); + gener->SetGluonRadiation(1,1); + // gener->SetPtKick(0.); + // Structure function + gener->SetStrucFunc(kCTEQ4L); + gener->SetPtHard(104., 125.);// Pt transfer of the hard scattering + gener->SetPycellParameters(2., 274, 432, 0., 4., 5., 1.0); + gener->SetForceDecay(kAll);// Decay type (semielectronic, etc.) + gGener=gener; + } + break; + case kPythia6Jets125_150: + { + comment = comment.Append(":Pythia jets 125-150 GeV @ 5.5 TeV"); + AliGenPythia * gener = new AliGenPythia(-1); + gener->SetEnergyCMS(5500.);// Centre of mass energy + gener->SetProcess(kPyJets);// Process type + gener->SetJetEtaRange(-0.5, 0.5);// Final state kinematic cuts + gener->SetJetPhiRange(0., 360.); + gener->SetJetEtRange(10., 1000.); + gener->SetGluonRadiation(1,1); + // gener->SetPtKick(0.); + // Structure function + gener->SetStrucFunc(kCTEQ4L); + gener->SetPtHard(125., 150.);// Pt transfer of the hard scattering + gener->SetPycellParameters(2., 274, 432, 0., 4., 5., 1.0); + gener->SetForceDecay(kAll);// Decay type (semielectronic, etc.) + gGener=gener; + } + break; + case kPythia6Jets150_180: + { + comment = comment.Append(":Pythia jets 150-180 GeV @ 5.5 TeV"); + AliGenPythia * gener = new AliGenPythia(-1); + gener->SetEnergyCMS(5500.);// Centre of mass energy + gener->SetProcess(kPyJets);// Process type + gener->SetJetEtaRange(-0.5, 0.5);// Final state kinematic cuts + gener->SetJetPhiRange(0., 360.); + gener->SetJetEtRange(10., 1000.); + gener->SetGluonRadiation(1,1); + // gener->SetPtKick(0.); + // Structure function + gener->SetStrucFunc(kCTEQ4L); + gener->SetPtHard(150., 180.);// Pt transfer of the hard scattering + gener->SetPycellParameters(2., 274, 432, 0., 4., 5., 1.0); + gener->SetForceDecay(kAll);// Decay type (semielectronic, etc.) + gGener=gener; + } + break; + case kD0PbPb5500: + { + comment = comment.Append(" D0 in Pb-Pb at 5.5 TeV"); + AliGenPythia * gener = new AliGenPythia(10); + gener->SetProcess(kPyD0PbPbMNR); + gener->SetStrucFunc(kCTEQ4L); + gener->SetPtHard(2.1,-1.0); + gener->SetEnergyCMS(5500.); + gener->SetNuclei(208,208); + gener->SetForceDecay(kHadronicD); + gener->SetYRange(-2,2); + gener->SetFeedDownHigherFamily(kFALSE); + gener->SetStackFillOpt(AliGenPythia::kParentSelection); + gener->SetCountMode(AliGenPythia::kCountParents); + gGener=gener; + } + break; + case kCharmSemiElPbPb5500: + { + comment = comment.Append(" Charm in Pb-Pb at 5.5 TeV"); + AliGenPythia * gener = new AliGenPythia(10); + gener->SetProcess(kPyCharmPbPbMNR); + gener->SetStrucFunc(kCTEQ4L); + gener->SetPtHard(2.1,-1.0); + gener->SetEnergyCMS(5500.); + gener->SetNuclei(208,208); + gener->SetForceDecay(kSemiElectronic); + gener->SetYRange(-2,2); + gener->SetFeedDownHigherFamily(kFALSE); + gener->SetCountMode(AliGenPythia::kCountParents); + gGener=gener; + } + break; + case kBeautySemiElPbPb5500: + { + comment = comment.Append(" Beauty in Pb-Pb at 5.5 TeV"); + AliGenPythia *gener = new AliGenPythia(10); + gener->SetProcess(kPyBeautyPbPbMNR); + gener->SetStrucFunc(kCTEQ4L); + gener->SetPtHard(2.75,-1.0); + gener->SetEnergyCMS(5500.); + gener->SetNuclei(208,208); + gener->SetForceDecay(kSemiElectronic); + gener->SetYRange(-2,2); + gener->SetFeedDownHigherFamily(kFALSE); + gener->SetCountMode(AliGenPythia::kCountParents); + gGener=gener; + } + break; + case kCocktailTRD: + { + comment = comment.Append(" Cocktail for TRD at 5.5 TeV"); + AliGenCocktail *gener = new AliGenCocktail(); + + AliGenParam *phi = new AliGenParam(10, + new AliGenMUONlib(), + AliGenMUONlib::kPhi, + "Vogt PbPb"); + + phi->SetPtRange(0, 100); + phi->SetYRange(-1., +1.); + phi->SetForceDecay(kDiElectron); + + AliGenParam *omega = new AliGenParam(10, + new AliGenMUONlib(), + AliGenMUONlib::kOmega, + "Vogt PbPb"); + + omega->SetPtRange(0, 100); + omega->SetYRange(-1., +1.); + omega->SetForceDecay(kDiElectron); + + AliGenParam *jpsi = new AliGenParam(10, + new AliGenMUONlib(), + AliGenMUONlib::kJpsiFamily, + "Vogt PbPb"); + + jpsi->SetPtRange(0, 100); + jpsi->SetYRange(-1., +1.); + jpsi->SetForceDecay(kDiElectron); + + AliGenParam *ups = new AliGenParam(10, + new AliGenMUONlib(), + AliGenMUONlib::kUpsilonFamily, + "Vogt PbPb"); + ups->SetPtRange(0, 100); + ups->SetYRange(-1., +1.); + ups->SetForceDecay(kDiElectron); + + AliGenParam *charm = new AliGenParam(10, + new AliGenMUONlib(), + AliGenMUONlib::kCharm, + "central"); + charm->SetPtRange(0, 100); + charm->SetYRange(-1.5, +1.5); + charm->SetForceDecay(kSemiElectronic); + + + AliGenParam *beauty = new AliGenParam(10, + new AliGenMUONlib(), + AliGenMUONlib::kBeauty, + "central"); + beauty->SetPtRange(0, 100); + beauty->SetYRange(-1.5, +1.5); + beauty->SetForceDecay(kSemiElectronic); + + AliGenParam *beautyJ = new AliGenParam(10, + new AliGenMUONlib(), + AliGenMUONlib::kBeauty, + "central"); + beautyJ->SetPtRange(0, 100); + beautyJ->SetYRange(-1.5, +1.5); + beautyJ->SetForceDecay(kBJpsiDiElectron); + + gener->AddGenerator(phi,"Phi",1); + gener->AddGenerator(omega,"Omega",1); + gener->AddGenerator(jpsi,"J/psi",1); + gener->AddGenerator(ups,"Upsilon",1); + gener->AddGenerator(charm,"Charm",1); + gener->AddGenerator(beauty,"Beauty",1); + gener->AddGenerator(beautyJ,"J/Psi from Beauty",1); + gGener=gener; + } + break; + case kPyJJ: + { + comment = comment.Append(" Jet-jet at 5.5 TeV"); + AliGenPythia *gener = new AliGenPythia(-1); + gener->SetEnergyCMS(5500.); + gener->SetProcess(kPyJets); + Double_t ptHardMin=10.0, ptHardMax=-1.0; + gener->SetPtHard(ptHardMin,ptHardMax); + gener->SetYHard(-0.7,0.7); + gener->SetJetEtaRange(-0.2,0.2); + gener->SetEventListRange(0,1); + gGener=gener; + } + break; + case kPyGJ: + { + comment = comment.Append(" Gamma-jet at 5.5 TeV"); + AliGenPythia *gener = new AliGenPythia(-1); + gener->SetEnergyCMS(5500.); + gener->SetProcess(kPyDirectGamma); + Double_t ptHardMin=10.0, ptHardMax=-1.0; + gener->SetPtHard(ptHardMin,ptHardMax); + gener->SetYHard(-1.0,1.0); + gener->SetGammaEtaRange(-0.13,0.13); + gener->SetGammaPhiRange(210.,330.); + gener->SetEventListRange(0,1); + gGener=gener; + } + break; + case kMuonCocktailCent1: + { + comment = comment.Append(" Muon Cocktail Cent1"); + AliGenMUONCocktail * gener = new AliGenMUONCocktail(); + gener->SetPtRange(0.4,100.); // Transverse momentum range + gener->SetPhiRange(0.,360.); // Azimuthal angle range + gener->SetYRange(-4.0,-2.4); + gener->SetMuonPtCut(0.8); + gener->SetMuonThetaCut(171.,178.); + gener->SetMuonMultiplicity(2); + gener->SetImpactParameterRange(0.,5.); //Centrality class Cent1 for PDC04 + gGener=gener; + } + break; + case kMuonCocktailPer1: + { + comment = comment.Append(" Muon Cocktail Per1"); + AliGenMUONCocktail * gener = new AliGenMUONCocktail(); + gener->SetPtRange(0.0,100.); // Transverse momentum range + gener->SetPhiRange(0.,360.); // Azimuthal angle range + gener->SetYRange(-4.0,-2.4); + gener->SetMuonPtCut(0.8); + gener->SetMuonThetaCut(171.,178.); + gener->SetMuonMultiplicity(2); + gener->SetImpactParameterRange(5.,8.6);//Centrality class Per1 for PDC04 + gGener=gener; + } + break; + case kMuonCocktailPer4: + { + comment = comment.Append(" Muon Cocktail Per4"); + AliGenMUONCocktail * gener = new AliGenMUONCocktail(); + gener->SetPtRange(0.0,100.); // Transverse momentum range + gener->SetPhiRange(0.,360.); // Azimuthal angle range + gener->SetYRange(-4.0,-2.4); + gener->SetMuonPtCut(0.8); + gener->SetMuonThetaCut(171.,178.); + gener->SetMuonMultiplicity(2); + gener->SetImpactParameterRange(13.2,15.0);//Centrality class Per4 for PDC04 + gGener=gener; + } + break; + case kMuonCocktailCent1HighPt: + { + comment = comment.Append(" Muon Cocktail HighPt Cent1"); + AliGenMUONCocktail * gener = new AliGenMUONCocktail(); + gener->SetPtRange(0.0,100.); // Transverse momentum range + gener->SetPhiRange(0.,360.); // Azimuthal angle range + gener->SetYRange(-4.0,-2.4); + gener->SetMuonPtCut(2.5); + gener->SetMuonThetaCut(171.,178.); + gener->SetMuonMultiplicity(2); + gener->SetImpactParameterRange(0.,5.); //Centrality class Cent1 for PDC04 + gGener=gener; + } + break; + case kMuonCocktailPer1HighPt : + { + comment = comment.Append(" Muon Cocktail HighPt Per1"); + AliGenMUONCocktail * gener = new AliGenMUONCocktail(); + gener->SetPtRange(0.0,100.); // Transverse momentum range + gener->SetPhiRange(0.,360.); // Azimuthal angle range + gener->SetYRange(-4.0,-2.4); + gener->SetMuonPtCut(2.5); + gener->SetMuonThetaCut(171.,178.); + gener->SetMuonMultiplicity(2); + gener->SetImpactParameterRange(5.,8.6);//Centrality class Per1 for PDC04 + gGener=gener; + } + break; + case kMuonCocktailPer4HighPt: + { + comment = comment.Append(" Muon Cocktail HighPt Per4"); + AliGenMUONCocktail * gener = new AliGenMUONCocktail(); + gener->SetPtRange(0.0,100.); // Transverse momentum range + gener->SetPhiRange(0.,360.); // Azimuthal angle range + gener->SetYRange(-4.0,-2.4); + gener->SetMuonPtCut(2.5); + gener->SetMuonThetaCut(171.,178.); + gener->SetMuonMultiplicity(2); + gener->SetImpactParameterRange(13.2,15.0);//Centrality class Per4 for PDC04 + gGener=gener; + } + break; + case kMuonCocktailCent1Single: + { + comment = comment.Append(" Muon Cocktail Single Cent1"); + AliGenMUONCocktail * gener = new AliGenMUONCocktail(); + gener->SetPtRange(0.0,100.); // Transverse momentum range + gener->SetPhiRange(0.,360.); // Azimuthal angle range + gener->SetYRange(-4.0,-2.4); + gener->SetMuonPtCut(0.8); + gener->SetMuonThetaCut(171.,178.); + gener->SetMuonMultiplicity(1); + gener->SetImpactParameterRange(0.,5.); //Centrality class Cent1 for PDC04 + gGener=gener; + } + break; + case kMuonCocktailPer1Single : + { + comment = comment.Append(" Muon Cocktail Single Per1"); + AliGenMUONCocktail * gener = new AliGenMUONCocktail(); + gener->SetPtRange(0.0,100.); // Transverse momentum range + gener->SetPhiRange(0.,360.); // Azimuthal angle range + gener->SetYRange(-4.0,-2.4); + gener->SetMuonPtCut(0.8); + gener->SetMuonThetaCut(171.,178.); + gener->SetMuonMultiplicity(1); + gener->SetImpactParameterRange(5.,8.6);//Centrality class Per1 for PDC04 + gener->SetNumberOfParticipants(229.3);//Centrality class Per1 for PDC04 + gGener=gener; + } + break; + case kMuonCocktailPer4Single: + { + comment = comment.Append(" Muon Cocktail Single Per4"); + AliGenMUONCocktail * gener = new AliGenMUONCocktail(); + gener->SetPtRange(0.0,100.); // Transverse momentum range + gener->SetPhiRange(0.,360.); // Azimuthal angle range + gener->SetYRange(-4.0,-2.4); + gener->SetMuonPtCut(0.8); + gener->SetMuonThetaCut(171.,178.); + gener->SetMuonMultiplicity(1); + gener->SetImpactParameterRange(13.2,15.0);//Centrality class Per4 for PDC04 + gGener=gener; + } + break; + case kFlow_2_2000: + { + comment = comment.Append(" Flow with dN/deta = 2000, vn = 2%"); + gGener = GeVSimStandard(2000., 2.); + } + break; + + case kFlow_10_2000: + { + comment = comment.Append(" Flow with dN/deta = 2000, vn = 10%"); + gGener = GeVSimStandard(2000., 10.); + } + break; + + case kFlow_6_2000: + { + comment = comment.Append(" Flow with dN/deta = 2000, vn = 6%"); + gGener = GeVSimStandard(2000., 6.); + } + break; + + case kFlow_6_5000: + { + comment = comment.Append(" Flow with dN/deta = 5000, vn = 6%"); + gGener = GeVSimStandard(5000., 6.); + } + break; + case kHIJINGplus: + { + // + // The cocktail + AliGenCocktail *gener = new AliGenCocktail(); + + // + // Charm production by Pythia + AliGenPythia * genpyc = new AliGenPythia(230); + genpyc->SetProcess(kPyCharmPbPbMNR); + genpyc->SetStrucFunc(kCTEQ4L); + genpyc->SetPtHard(2.1,-1.0); + genpyc->SetEnergyCMS(5500.); + genpyc->SetNuclei(208,208); + genpyc->SetYRange(-999,999); + genpyc->SetForceDecay(kAll); + genpyc->SetFeedDownHigherFamily(kFALSE); + genpyc->SetCountMode(AliGenPythia::kCountParents); + // + // Beauty production by Pythia + AliGenPythia * genpyb = new AliGenPythia(9); + genpyb->SetProcess(kPyBeautyPbPbMNR); + genpyb->SetStrucFunc(kCTEQ4L); + genpyb->SetPtHard(2.75,-1.0); + genpyb->SetEnergyCMS(5500.); + genpyb->SetNuclei(208,208); + genpyb->SetYRange(-999,999); + genpyb->SetForceDecay(kAll); + genpyb->SetFeedDownHigherFamily(kFALSE); + genpyb->SetCountMode(AliGenPythia::kCountParents); + // + // Hyperons + // + AliGenSTRANGElib *lib = new AliGenSTRANGElib(); + Int_t particle; + // Xi + particle = AliGenSTRANGElib::kXiMinus; + AliGenParam *genXi = new AliGenParam(16,particle,lib->GetPt(particle),lib->GetY(particle),lib->GetIp(particle)); + genXi->SetPtRange(0., 12.); + genXi->SetYRange(-1.1, 1.1); + genXi->SetForceDecay(kNoDecay); + + // + // Omega + particle = AliGenSTRANGElib::kOmegaMinus; + AliGenParam *genOmega = new AliGenParam(10,particle,lib->GetPt(particle),lib->GetY(particle),lib->GetIp(particle)); + genOmega->SetPtRange(0, 12.); + genOmega->SetYRange(-1.1, 1.1); + genOmega->SetForceDecay(kNoDecay); + + // + // Central Hijing + AliGenHijing *genHi = HijingStandard(); + genHi->SwitchOffHeavyQuarks(kTRUE); + genHi->SetImpactParameterRange(0.,5.); + // + // Add everything to the cocktail and shake ... + gener->AddGenerator(genHi, "Hijing cent1", 1); + gener->AddGenerator(genpyc, "Extra charm", 1); + gener->AddGenerator(genpyb, "Extra beauty", 1); + gener->AddGenerator(genXi, "Xi" , 1); + gener->AddGenerator(genOmega, "Omega", 1); + gGener = gener; + } + break; + default: break; + } + + return gGener; +} + +AliGenHijing* HijingStandard() +{ + AliGenHijing *gener = new AliGenHijing(-1); +// centre of mass energy + gener->SetEnergyCMS(5500.); +// reference frame + gener->SetReferenceFrame("CMS"); +// projectile + gener->SetProjectile("A", 208, 82); + gener->SetTarget ("A", 208, 82); +// tell hijing to keep the full parent child chain + gener->KeepFullEvent(); +// enable jet quenching + gener->SetJetQuenching(1); +// enable shadowing + gener->SetShadowing(1); +// neutral pion and heavy particle decays switched off + gener->SetDecaysOff(1); +// Don't track spectators + gener->SetSpectators(0); +// kinematic selection + gener->SetSelectAll(0); + return gener; +} + +AliGenGeVSim* GeVSimStandard(Float_t mult, Float_t vn) +{ + AliGenGeVSim* gener = new AliGenGeVSim(0); +// +// Mult is the number of charged particles in |eta| < 0.5 +// Vn is in (%) +// +// Sigma of the Gaussian dN/deta + Float_t sigma_eta = 2.75; +// +// Maximum eta + Float_t etamax = 7.00; +// +// +// Scale from multiplicity in |eta| < 0.5 to |eta| < |etamax| + Float_t mm = mult * (TMath::Erf(etamax/sigma_eta/sqrt(2.)) / TMath::Erf(0.5/sigma_eta/sqrt(2.))); +// +// Scale from charged to total multiplicity +// + mm *= 1.587; +// +// Vn + vn /= 100.; +// +// Define particles +// +// +// 78% Pions (26% pi+, 26% pi-, 26% p0) T = 250 MeV + AliGeVSimParticle *pp = new AliGeVSimParticle(kPiPlus, 1, 0.26 * mm, 0.25, sigma_eta) ; + AliGeVSimParticle *pm = new AliGeVSimParticle(kPiMinus, 1, 0.26 * mm, 0.25, sigma_eta) ; + AliGeVSimParticle *p0 = new AliGeVSimParticle(kPi0, 1, 0.26 * mm, 0.25, sigma_eta) ; +// +// 12% Kaons (3% K0short, 3% K0long, 3% K+, 3% K-) T = 300 MeV + AliGeVSimParticle *ks = new AliGeVSimParticle(kK0Short, 1, 0.03 * mm, 0.30, sigma_eta) ; + AliGeVSimParticle *kl = new AliGeVSimParticle(kK0Long, 1, 0.03 * mm, 0.30, sigma_eta) ; + AliGeVSimParticle *kp = new AliGeVSimParticle(kKPlus, 1, 0.03 * mm, 0.30, sigma_eta) ; + AliGeVSimParticle *km = new AliGeVSimParticle(kKMinus, 1, 0.03 * mm, 0.30, sigma_eta) ; +// +// 10% Protons / Neutrons (5% Protons, 5% Neutrons) T = 250 MeV + AliGeVSimParticle *pr = new AliGeVSimParticle(kProton, 1, 0.05 * mm, 0.25, sigma_eta) ; + AliGeVSimParticle *ne = new AliGeVSimParticle(kNeutron, 1, 0.05 * mm, 0.25, sigma_eta) ; +// +// Set Elliptic Flow properties + + Float_t pTsaturation = 2. ; + + pp->SetEllipticParam(vn,pTsaturation,0.) ; + pm->SetEllipticParam(vn,pTsaturation,0.) ; + p0->SetEllipticParam(vn,pTsaturation,0.) ; + pr->SetEllipticParam(vn,pTsaturation,0.) ; + ne->SetEllipticParam(vn,pTsaturation,0.) ; + ks->SetEllipticParam(vn,pTsaturation,0.) ; + kl->SetEllipticParam(vn,pTsaturation,0.) ; + kp->SetEllipticParam(vn,pTsaturation,0.) ; + km->SetEllipticParam(vn,pTsaturation,0.) ; +// +// Set Direct Flow properties + pp->SetDirectedParam(vn,1.0,0.) ; + pm->SetDirectedParam(vn,1.0,0.) ; + p0->SetDirectedParam(vn,1.0,0.) ; + pr->SetDirectedParam(vn,1.0,0.) ; + ne->SetDirectedParam(vn,1.0,0.) ; + ks->SetDirectedParam(vn,1.0,0.) ; + kl->SetDirectedParam(vn,1.0,0.) ; + kp->SetDirectedParam(vn,1.0,0.) ; + km->SetDirectedParam(vn,1.0,0.) ; +// +// Add particles to the list + gener->AddParticleType(pp) ; + gener->AddParticleType(pm) ; + gener->AddParticleType(p0) ; + gener->AddParticleType(pr) ; + gener->AddParticleType(ne) ; + gener->AddParticleType(ks) ; + gener->AddParticleType(kl) ; + gener->AddParticleType(kp) ; + gener->AddParticleType(km) ; +// +// Random Ev.Plane ---------------------------------- + TF1 *rpa = new TF1("gevsimPsiRndm","1", 0, 360); +// -------------------------------------------------- + gener->SetPtRange(0., 9.) ; // Use a resonable range! (used for bin size in numerical integration) + gener->SetPhiRange(0, 360); + // + // Set pseudorapidity range + Float_t thmin = EtaToTheta(+etamax); + Float_t thmax = EtaToTheta(-etamax); + gener->SetThetaRange(thmin,thmax); + return gener; +} + + + +void ProcessEnvironmentVars() +{ + // Run type + if (gSystem->Getenv("CONFIG_RUN_TYPE")) { + for (Int_t iRun = 0; iRun < kRunMax; iRun++) { + if (strcmp(gSystem->Getenv("CONFIG_RUN_TYPE"), pprRunName[iRun])==0) { + srun = (PprRun_t)iRun; + cout<<"Run type set to "<Getenv("CONFIG_SEED")) { + sseed = atoi(gSystem->Getenv("CONFIG_SEED")); + } +} diff --git a/test/merge/signal/rec.C b/test/merge/signal/rec.C new file mode 100644 index 00000000000..4a5f91810db --- /dev/null +++ b/test/merge/signal/rec.C @@ -0,0 +1,15 @@ +void rec() { + AliReconstruction reco; + reco.SetUniformFieldTracking(kFALSE); + reco.SetWriteESDfriend(); + reco.SetWriteAlignmentData(); + AliTPCReconstructor::SetStreamLevel(1); + AliTPCReconstructor::SetRecoParam(AliTPCRecoParam::GetLowFluxParam()); + // reco.SetInput("raw.root"); + + TStopwatch timer; + timer.Start(); + reco.Run(); + timer.Stop(); + timer.Print(); +} diff --git a/test/merge/signal/sim.C b/test/merge/signal/sim.C new file mode 100644 index 00000000000..6da67a8c301 --- /dev/null +++ b/test/merge/signal/sim.C @@ -0,0 +1,11 @@ +void sim(Int_t nev=1) { + AliSimulation simulator; + simulator.MergeWith("../backgr/galice.root",3); + simulator.SetWriteRawData("ALL","raw.root",kTRUE); + + TStopwatch timer; + timer.Start(); + simulator.Run(nev); + timer.Stop(); + timer.Print(); +} diff --git a/test/merge/test.C b/test/merge/test.C new file mode 100644 index 00000000000..b1006ec8b18 --- /dev/null +++ b/test/merge/test.C @@ -0,0 +1,123 @@ +// Usage in compiled mode +// gSystem->SetIncludePath("-I$ROOTSYS/include -I$ALICE_ROOT/include"); +// gROOT->LoadMacro("test.C+"); +// test() + +#if !defined(__CINT__) || defined(__MAKECINT__) + +// Root include files +#include +#include +#include +#include +#include +#include +#include + +// AliRoot include files +#include "AliESD.h" +#include "AliRunLoader.h" +#include "AliRun.h" +#include "AliStack.h" + +#endif + +void test(const char * sdir ="signal", + const char * bdir ="backgr") { + + TStopwatch timer; + timer.Start(); + + TString name; + + // Signal file, tree, and branch + name = sdir; + name += "/AliESDs.root"; + TFile * fSig = TFile::Open(name.Data()); + TTree * tSig = (TTree*)fSig->Get("esdTree"); + TBranch * bSig = tSig->GetBranch("ESD"); + + AliESD * esdSig = 0; // The signal ESD object is put here + bSig->SetAddress(&esdSig); + + // Run loader (signal events) + name = sdir; + name += "/galice.root"; + AliRunLoader* rlSig = AliRunLoader::Open(name.Data()); + + // Run loader (underlying events) + name = bdir; + name += "/galice.root"; + AliRunLoader* rlUnd = AliRunLoader::Open(name.Data(),"Underlying"); + + // gAlice + rlSig->LoadgAlice(); + rlUnd->LoadgAlice(); + gAlice = rlSig->GetAliRun(); + + // Now load kinematics and event header + rlSig->LoadKinematics(); + rlSig->LoadHeader(); + rlUnd->LoadKinematics(); + rlUnd->LoadHeader(); + + // Loop on events: check that MC and data contain the same number of events + Long64_t nevSig = rlSig->GetNumberOfEvents(); + Long64_t nevUnd = rlUnd->GetNumberOfEvents(); + Long64_t nSigPerUnd = nevSig/nevUnd; + + cout << nevSig << " signal events" << endl; + cout << nevUnd << " underlying events" << endl; + cout << nSigPerUnd << " signal events per one underlying" << endl; + + for (Int_t iev=0; ievGetEntry(iev); + // Get signal kinematics + rlSig->GetEvent(iev); + // Get underlying kinematics + rlUnd->GetEvent(ievUnd); + + // Particle stack + AliStack * stackSig = rlSig->Stack(); + Int_t nPartSig = stackSig->GetNtrack(); + AliStack * stackUnd = rlUnd->Stack(); + Int_t nPartUnd = stackUnd->GetNtrack(); + + Int_t nrec = esdSig->GetNumberOfTracks(); + cout << nrec << " reconstructed tracks" << endl; + for(Int_t irec=0; irecGetTrack(irec); + UInt_t label = TMath::Abs(track->GetTPCLabel()); + if (label>=10000000) { + // Underlying event. 10000000 is the + // value of fkMASKSTEP in AliRunDigitizer +// cout << " Track from the underlying event" << endl; + label %=10000000; + if (label>=nPartUnd) continue; + TParticle * part = stackUnd->Particle(label); + if(part) part->Print(); + } + else { + cout << " Track " << label << " from the signal event" << endl; + if (label>=nPartSig) { + cout <<"Strange, label outside the range "<< endl; + continue; + } + TParticle * part = stackSig->Particle(label); + if(part) part->Print(); + } + + } + + } + + fSig->Close(); + + timer.Stop(); + timer.Print(); +} diff --git a/test/pploadlibs/Config.C b/test/pploadlibs/Config.C new file mode 100644 index 00000000000..be9a3d3980a --- /dev/null +++ b/test/pploadlibs/Config.C @@ -0,0 +1,803 @@ +// +// Configuration for the Physics Data Challenge 2006 +// + +// One can use the configuration macro in compiled mode by +// root [0] gSystem->Load("libgeant321"); +// root [0] gSystem->SetIncludePath("-I$ROOTSYS/include -I$ALICE_ROOT/include\ +// -I$ALICE_ROOT -I$ALICE/geant3/TGeant3"); +// root [0] .x grun.C(1,"Config_PDC06.C++") + +#if !defined(__CINT__) || defined(__MAKECINT__) +#include +#include +#include +#include +#include +#include +#include "EVGEN/AliGenCocktail.h" +#include "EVGEN/AliGenParam.h" +#include "EVGEN/AliGenMUONlib.h" +#include "STEER/AliRunLoader.h" +#include "STEER/AliRun.h" +#include "STEER/AliConfig.h" +#include "PYTHIA6/AliDecayerPythia.h" +#include "PYTHIA6/AliGenPythia.h" +#include "STEER/AliMagFMaps.h" +#include "STRUCT/AliBODY.h" +#include "STRUCT/AliMAG.h" +#include "STRUCT/AliABSOv0.h" +#include "STRUCT/AliDIPOv2.h" +#include "STRUCT/AliHALL.h" +#include "STRUCT/AliFRAMEv2.h" +#include "STRUCT/AliSHILv2.h" +#include "STRUCT/AliPIPEv0.h" +#include "ITS/AliITSgeom.h" +#include "ITS/AliITSvPPRasymmFMD.h" +#include "TPC/AliTPCv2.h" +#include "TOF/AliTOFv5T0.h" +#include "HMPID/AliHMPIDv1.h" +#include "ZDC/AliZDCv2.h" +#include "TRD/AliTRDv1.h" +#include "FMD/AliFMDv1.h" +#include "MUON/AliMUONv1.h" +#include "PHOS/AliPHOSv1.h" +#include "PMD/AliPMDv1.h" +#include "T0/AliT0v1.h" +#include "EMCAL/AliEMCALv2.h" +#include "ACORDE/AliACORDEv0.h" +#include "VZERO/AliVZEROv7.h" +#endif + + +enum PDC06Proc_t +{ +//--- Heavy Flavour Production --- + kCharmPbPb5500, kCharmpPb8800, kCharmpp14000, kCharmpp14000wmi, + kD0PbPb5500, kD0pPb8800, kD0pp14000, + kDPlusPbPb5500, kDPluspPb8800, kDPluspp14000, + kBeautyPbPb5500, kBeautypPb8800, kBeautypp14000, kBeautypp14000wmi, +// -- Pythia Mb + kPyMbNoHvq, kPyOmegaPlus, kPyOmegaMinus, kRunMax +}; + +const char * pprRunName[] = { + "kCharmPbPb5500", "kCharmpPb8800", "kCharmpp14000", "kCharmpp14000wmi", + "kD0PbPb5500", "kD0pPb8800", "kD0pp14000", + "kDPlusPbPb5500", "kDPluspPb8800", "kDPluspp14000", + "kBeautyPbPb5500", "kBeautypPb8800", "kBeautypp14000", "kBeautypp14000wmi", + "kPyMbNoHvq", "kPyOmegaPlus", "kPyOmegaMinus" +}; + + +//--- Decay Mode --- +enum DecayHvFl_t +{ + kNature, kHadr, kSemiEl, kSemiMu +}; +//--- Rapidity Cut --- +enum YCut_t +{ + kFull, kBarrel, kMuonArm +}; +//--- Magnetic Field --- +enum Mag_t +{ + k2kG, k4kG, k5kG +}; + +//--- Trigger config --- +enum TrigConf_t +{ + kDefaultPPTrig, kDefaultPbPbTrig +}; + +const char * TrigConfName[] = { + "p-p","Pb-Pb" +}; + +//--- Functions --- +AliGenPythia *PythiaHVQ(PDC06Proc_t proc); +AliGenerator *MbCocktail(); +AliGenerator *PyMbTriggered(Int_t pdg); +void ProcessEnvironmentVars(); + +// This part for configuration +static PDC06Proc_t proc = kPyMbNoHvq; +static DecayHvFl_t decHvFl = kNature; +static YCut_t ycut = kFull; +static Mag_t mag = k5kG; +static TrigConf_t trig = kDefaultPPTrig; // default pp trigger configuration +//========================// +// Set Random Number seed // +//========================// +TDatime dt; +static UInt_t seed = dt.Get(); + +// nEvts = -1 : you get 1 QQbar pair and all the fragmentation and +// decay chain +// nEvts = N>0 : you get N charm / beauty Hadrons +Int_t nEvts = -1; +// stars = kTRUE : all heavy resonances and their decay stored +// = kFALSE: only final heavy hadrons and their decays stored +Bool_t stars = kTRUE; + +// To be used only with kCharmppMNRwmi and kBeautyppMNRwmi +// To get a "reasonable" agreement with MNR results, events have to be +// generated with the minimum ptHard set to 2.76 GeV. +// To get a "perfect" agreement with MNR results, events have to be +// generated in four ptHard bins with the following relative +// normalizations: +// CHARM +// 2.76-3 GeV: 25% +// 3-4 GeV: 40% +// 4-8 GeV: 29% +// >8 GeV: 6% +// BEAUTY +// 2.76-4 GeV: 5% +// 4-6 GeV: 31% +// 6-8 GeV: 28% +// >8 GeV: 36% +Float_t ptHardMin = 2.76; +Float_t ptHardMax = -1.; + + +// Comment line +static TString comment; + +void Config() +{ + + + // Get settings from environment variables + ProcessEnvironmentVars(); + + gRandom->SetSeed(seed); + cerr<<"Seed for random number generation= "<Load("libgeant321"); +#endif + + new TGeant3TGeo("C++ Interface to Geant3"); + + //======================================================================= + // Create the output file + + + AliRunLoader* rl=0x0; + + cout<<"Config.C: Creating Run Loader ..."<Fatal("Config.C","Can not instatiate the Run Loader"); + return; + } + rl->SetCompressionLevel(2); + rl->SetNumberOfEventsPerFile(1000); + gAlice->SetRunLoader(rl); + + // Set the trigger configuration + gAlice->SetTriggerDescriptor(TrigConfName[trig]); + cout<<"Trigger configuration is set to "<SetProcess("DCAY",1); + gMC->SetProcess("PAIR",1); + gMC->SetProcess("COMP",1); + gMC->SetProcess("PHOT",1); + gMC->SetProcess("PFIS",0); + gMC->SetProcess("DRAY",0); + gMC->SetProcess("ANNI",1); + gMC->SetProcess("BREM",1); + gMC->SetProcess("MUNU",1); + gMC->SetProcess("CKOV",1); + gMC->SetProcess("HADR",1); + gMC->SetProcess("LOSS",2); + gMC->SetProcess("MULS",1); + gMC->SetProcess("RAYL",1); + + Float_t cut = 1.e-3; // 1MeV cut by default + Float_t tofmax = 1.e10; + + gMC->SetCut("CUTGAM", cut); + gMC->SetCut("CUTELE", cut); + gMC->SetCut("CUTNEU", cut); + gMC->SetCut("CUTHAD", cut); + gMC->SetCut("CUTMUO", cut); + gMC->SetCut("BCUTE", cut); + gMC->SetCut("BCUTM", cut); + gMC->SetCut("DCUTE", cut); + gMC->SetCut("DCUTM", cut); + gMC->SetCut("PPCUTM", cut); + gMC->SetCut("TOFMAX", tofmax); + + + + + // Set External decayer // + //======================// + TVirtualMCDecayer* decayer = new AliDecayerPythia(); + // DECAYS + // + switch(decHvFl) { + case kNature: + decayer->SetForceDecay(kAll); + break; + case kHadr: + decayer->SetForceDecay(kHadronicD); + break; + case kSemiEl: + decayer->SetForceDecay(kSemiElectronic); + break; + case kSemiMu: + decayer->SetForceDecay(kSemiMuonic); + break; + } + decayer->Init(); + gMC->SetExternalDecayer(decayer); + + //=========================// + // Generator Configuration // + //=========================// + AliGenerator* gener = 0x0; + + if (proc <= kBeautypp14000wmi) { + AliGenPythia *pythia = PythiaHVQ(proc); + // FeedDown option + pythia->SetFeedDownHigherFamily(kFALSE); + // Stack filling option + if(!stars) pythia->SetStackFillOpt(AliGenPythia::kParentSelection); + // Set Count mode + if(nEvts>0) pythia->SetCountMode(AliGenPythia::kCountParents); + // + // DECAYS + // + switch(decHvFl) { + case kNature: + pythia->SetForceDecay(kAll); + break; + case kHadr: + pythia->SetForceDecay(kHadronicD); + break; + case kSemiEl: + pythia->SetForceDecay(kSemiElectronic); + break; + case kSemiMu: + pythia->SetForceDecay(kSemiMuonic); + break; + } + // + // GEOM & KINE CUTS + // + pythia->SetMomentumRange(0,99999999); + pythia->SetPhiRange(0., 360.); + pythia->SetThetaRange(0,180); + switch(ycut) { + case kFull: + pythia->SetYRange(-999,999); + break; + case kBarrel: + pythia->SetYRange(-2,2); + break; + case kMuonArm: + pythia->SetYRange(1,6); + break; + } + gener = pythia; + } else if (proc == kPyMbNoHvq) { + gener = MbCocktail(); + } else if (proc == kPyOmegaMinus) { + gener = PyMbTriggered(3334); + } else if (proc == kPyOmegaPlus) { + gener = PyMbTriggered(-3334); + } + + + + // PRIMARY VERTEX + // + gener->SetOrigin(0., 0., 0.); // vertex position + // + // + // Size of the interaction diamond + // Longitudinal + Float_t sigmaz = 7.55 / TMath::Sqrt(2.); // [cm] + // + // Transverse + Float_t betast = 10; // beta* [m] + Float_t eps = 3.75e-6; // emittance [m] + Float_t gamma = 7000. / 0.938272; // relativistic gamma [1] + Float_t sigmaxy = TMath::Sqrt(eps * betast / gamma) / TMath::Sqrt(2.) * 100.; // [cm] + printf("\n \n Diamond size x-y: %10.3e z: %10.3e\n \n", sigmaxy, sigmaz); + + gener->SetSigma(sigmaxy, sigmaxy, sigmaz); // Sigma in (X,Y,Z) (cm) on IP position + gener->SetCutVertexZ(3.); // Truncate at 3 sigma + gener->SetVertexSmear(kPerEvent); + + gener->Init(); + + // FIELD + // + if (mag == k2kG) { + comment = comment.Append(" | L3 field 0.2 T"); + } else if (mag == k4kG) { + comment = comment.Append(" | L3 field 0.4 T"); + } else if (mag == k5kG) { + comment = comment.Append(" | L3 field 0.5 T"); + } + printf("\n \n Comment: %s \n \n", comment.Data()); + + AliMagFMaps* field = new AliMagFMaps("Maps","Maps", 2, 1., 10., mag); + field->SetL3ConstField(0); //Using const. field in the barrel + rl->CdGAFile(); + gAlice->SetField(field); + + + + Int_t iABSO = 1; + Int_t iACORDE = 0; + Int_t iDIPO = 1; + Int_t iEMCAL = 1; + Int_t iFMD = 1; + Int_t iFRAME = 1; + Int_t iHALL = 1; + Int_t iITS = 1; + Int_t iMAG = 1; + Int_t iMUON = 1; + Int_t iPHOS = 1; + Int_t iPIPE = 1; + Int_t iPMD = 1; + Int_t iHMPID = 1; + Int_t iSHIL = 1; + Int_t iT0 = 1; + Int_t iTOF = 1; + Int_t iTPC = 1; + Int_t iTRD = 1; + Int_t iVZERO = 1; + Int_t iZDC = 1; + + + //=================== Alice BODY parameters ============================= + AliBODY *BODY = new AliBODY("BODY", "Alice envelop"); + + + if (iMAG) + { + //=================== MAG parameters ============================ + // --- Start with Magnet since detector layouts may be depending --- + // --- on the selected Magnet dimensions --- + AliMAG *MAG = new AliMAG("MAG", "Magnet"); + } + + + if (iABSO) + { + //=================== ABSO parameters ============================ + AliABSO *ABSO = new AliABSOv0("ABSO", "Muon Absorber"); + } + + if (iDIPO) + { + //=================== DIPO parameters ============================ + + AliDIPO *DIPO = new AliDIPOv2("DIPO", "Dipole version 2"); + } + + if (iHALL) + { + //=================== HALL parameters ============================ + + AliHALL *HALL = new AliHALL("HALL", "Alice Hall"); + } + + + if (iFRAME) + { + //=================== FRAME parameters ============================ + + AliFRAMEv2 *FRAME = new AliFRAMEv2("FRAME", "Space Frame"); + } + + if (iSHIL) + { + //=================== SHIL parameters ============================ + + AliSHIL *SHIL = new AliSHILv2("SHIL", "Shielding Version 2"); + } + + + if (iPIPE) + { + //=================== PIPE parameters ============================ + + AliPIPE *PIPE = new AliPIPEv0("PIPE", "Beam Pipe"); + } + + if(iITS) { + + //=================== ITS parameters ============================ + // + // As the innermost detector in ALICE, the Inner Tracking System "impacts" on + // almost all other detectors. This involves the fact that the ITS geometry + // still has several options to be followed in parallel in order to determine + // the best set-up which minimizes the induced background. All the geometries + // available to date are described in the following. Read carefully the comments + // and use the default version (the only one uncommented) unless you are making + // comparisons and you know what you are doing. In this case just uncomment the + // ITS geometry you want to use and run Aliroot. + // + // Detailed geometries: + // + // + //AliITS *ITS = new AliITSv5symm("ITS","Updated ITS TDR detailed version with symmetric services"); + // + //AliITS *ITS = new AliITSv5asymm("ITS","Updates ITS TDR detailed version with asymmetric services"); + // + AliITSvPPRasymmFMD *ITS = new AliITSvPPRasymmFMD("ITS","New ITS PPR detailed version with asymmetric services"); + ITS->SetMinorVersion(2); // don't touch this parameter if you're not an ITS developer + ITS->SetReadDet(kFALSE); // don't touch this parameter if you're not an ITS developer + // ITS->SetWriteDet("$ALICE_ROOT/ITS/ITSgeometry_vPPRasymm2.det"); // don't touch this parameter if you're not an ITS developer + ITS->SetThicknessDet1(200.); // detector thickness on layer 1 must be in the range [100,300] + ITS->SetThicknessDet2(200.); // detector thickness on layer 2 must be in the range [100,300] + ITS->SetThicknessChip1(150.); // chip thickness on layer 1 must be in the range [150,300] + ITS->SetThicknessChip2(150.); // chip thickness on layer 2 must be in the range [150,300] + ITS->SetRails(0); // 1 --> rails in ; 0 --> rails out + ITS->SetCoolingFluid(1); // 1 --> water ; 0 --> freon + + // Coarse geometries (warning: no hits are produced with these coarse geometries and they unuseful + // for reconstruction !): + // + // + //AliITSvPPRcoarseasymm *ITS = new AliITSvPPRcoarseasymm("ITS","New ITS PPR coarse version with asymmetric services"); + //ITS->SetRails(0); // 1 --> rails in ; 0 --> rails out + //ITS->SetSupportMaterial(0); // 0 --> Copper ; 1 --> Aluminum ; 2 --> Carbon + // + //AliITS *ITS = new AliITSvPPRcoarsesymm("ITS","New ITS PPR coarse version with symmetric services"); + //ITS->SetRails(0); // 1 --> rails in ; 0 --> rails out + //ITS->SetSupportMaterial(0); // 0 --> Copper ; 1 --> Aluminum ; 2 --> Carbon + // + // + // + // Geant3 <-> EUCLID conversion + // ============================ + // + // SetEUCLID is a flag to output (=1) or not to output (=0) both geometry and + // media to two ASCII files (called by default ITSgeometry.euc and + // ITSgeometry.tme) in a format understandable to the CAD system EUCLID. + // The default (=0) means that you dont want to use this facility. + // + ITS->SetEUCLID(0); + } + + if (iTPC) + { + //============================ TPC parameters ===================== + AliTPC *TPC = new AliTPCv2("TPC", "Default"); + } + + + if (iTOF) { + //=================== TOF parameters ============================ + AliTOF *TOF = new AliTOFv5T0("TOF", "normal TOF"); + // Partial geometry: modules at 2,3,4,6,7,11,12,14,15,16 + // starting at 6h in positive direction + // Int_t TOFSectors[18]={-1,-1,0,0,0,-1,0,0,-1,-1,-1,0,0,-1,0,0,0,0}; + // Partial geometry: modules at 1,2,6,7,9,10,11,12,15,16,17 + // (ALICE numbering convention) + Int_t TOFSectors[18]={-1,0,0,-1,-1,-1,0,0,-1,0,0,0,0,-1,-1,0,0,0}; + TOF->SetTOFSectors(TOFSectors); + } + + + if (iHMPID) + { + //=================== HMPID parameters =========================== + AliHMPID *HMPID = new AliHMPIDv1("HMPID", "normal HMPID"); + + } + + + if (iZDC) + { + //=================== ZDC parameters ============================ + + AliZDC *ZDC = new AliZDCv2("ZDC", "normal ZDC"); + } + + if (iTRD) + { + //=================== TRD parameters ============================ + + AliTRD *TRD = new AliTRDv1("TRD", "TRD slow simulator"); + AliTRDgeometry *geoTRD = TRD->GetGeometry(); + // Partial geometry: modules at 2,3,4,6,11,12,14,15 + // starting at 6h in positive direction + geoTRD->SetSMstatus(0,0); + geoTRD->SetSMstatus(1,0); + geoTRD->SetSMstatus(5,0); + geoTRD->SetSMstatus(7,0); + geoTRD->SetSMstatus(8,0); + geoTRD->SetSMstatus(9,0); + geoTRD->SetSMstatus(10,0); + geoTRD->SetSMstatus(13,0); + geoTRD->SetSMstatus(16,0); + geoTRD->SetSMstatus(17,0); + } + + if (iFMD) + { + //=================== FMD parameters ============================ + AliFMD *FMD = new AliFMDv1("FMD", "normal FMD"); + } + + if (iMUON) + { + //=================== MUON parameters =========================== + // New MUONv1 version (geometry defined via builders) + AliMUON *MUON = new AliMUONv1("MUON", "default"); + } + //=================== PHOS parameters =========================== + + if (iPHOS) + { + AliPHOS *PHOS = new AliPHOSv1("PHOS", "IHEP"); + } + + + if (iPMD) + { + //=================== PMD parameters ============================ + AliPMD *PMD = new AliPMDv1("PMD", "normal PMD"); + } + + if (iT0) + { + //=================== T0 parameters ============================ + AliT0 *T0 = new AliT0v1("T0", "T0 Detector"); + } + + if (iEMCAL) + { + //=================== EMCAL parameters ============================ + AliEMCAL *EMCAL = new AliEMCALv2("EMCAL", "SHISH_77_TRD1_2X2_FINAL_110DEG"); + } + + if (iACORDE) + { + //=================== ACORDE parameters ============================ + AliACORDE *ACORDE = new AliACORDEv0("ACORDE", "normal ACORDE"); + } + + if (iVZERO) + { + //=================== VZERO parameters ============================ + AliVZERO *VZERO = new AliVZEROv7("VZERO", "normal VZERO"); + } +} +// +// PYTHIA +// +AliGenPythia *PythiaHVQ(PDC06Proc_t proc) { +//*******************************************************************// +// Configuration file for charm / beauty generation with PYTHIA // +// // +// The parameters have been tuned in order to reproduce the inclusive// +// heavy quark pt distribution given by the NLO pQCD calculation by // +// Mangano, Nason and Ridolfi. // +// // +// For details and for the NORMALIZATION of the yields see: // +// N.Carrer and A.Dainese, // +// "Charm and beauty production at the LHC", // +// ALICE-INT-2003-019, [arXiv:hep-ph/0311225]; // +// PPR Chapter 6.6, CERN/LHCC 2005-030 (2005). // +//*******************************************************************// + AliGenPythia * gener = 0x0; + + switch(proc) { + case kCharmPbPb5500: + comment = comment.Append(" Charm in Pb-Pb at 5.5 TeV"); + gener = new AliGenPythia(nEvts); + gener->SetProcess(kPyCharmPbPbMNR); + gener->SetStrucFunc(kCTEQ4L); + gener->SetPtHard(2.1,-1.0); + gener->SetEnergyCMS(5500.); + gener->SetNuclei(208,208); + break; + case kCharmpPb8800: + comment = comment.Append(" Charm in p-Pb at 8.8 TeV"); + gener = new AliGenPythia(nEvts); + gener->SetProcess(kPyCharmpPbMNR); + gener->SetStrucFunc(kCTEQ4L); + gener->SetPtHard(2.1,-1.0); + gener->SetEnergyCMS(8800.); + gener->SetProjectile("P",1,1); + gener->SetTarget("Pb",208,82); + break; + case kCharmpp14000: + comment = comment.Append(" Charm in pp at 14 TeV"); + gener = new AliGenPythia(nEvts); + gener->SetProcess(kPyCharmppMNR); + gener->SetStrucFunc(kCTEQ4L); + gener->SetPtHard(2.1,-1.0); + gener->SetEnergyCMS(14000.); + break; + case kCharmpp14000wmi: + comment = comment.Append(" Charm in pp at 14 TeV with mult. interactions"); + gener = new AliGenPythia(-1); + gener->SetProcess(kPyCharmppMNRwmi); + gener->SetStrucFunc(kCTEQ5L); + gener->SetPtHard(ptHardMin,ptHardMax); + gener->SetEnergyCMS(14000.); + break; + case kD0PbPb5500: + comment = comment.Append(" D0 in Pb-Pb at 5.5 TeV"); + gener = new AliGenPythia(nEvts); + gener->SetProcess(kPyD0PbPbMNR); + gener->SetStrucFunc(kCTEQ4L); + gener->SetPtHard(2.1,-1.0); + gener->SetEnergyCMS(5500.); + gener->SetNuclei(208,208); + break; + case kD0pPb8800: + comment = comment.Append(" D0 in p-Pb at 8.8 TeV"); + gener = new AliGenPythia(nEvts); + gener->SetProcess(kPyD0pPbMNR); + gener->SetStrucFunc(kCTEQ4L); + gener->SetPtHard(2.1,-1.0); + gener->SetEnergyCMS(8800.); + gener->SetProjectile("P",1,1); + gener->SetTarget("Pb",208,82); + break; + case kD0pp14000: + comment = comment.Append(" D0 in pp at 14 TeV"); + gener = new AliGenPythia(nEvts); + gener->SetProcess(kPyD0ppMNR); + gener->SetStrucFunc(kCTEQ4L); + gener->SetPtHard(2.1,-1.0); + gener->SetEnergyCMS(14000.); + break; + case kDPlusPbPb5500: + comment = comment.Append(" DPlus in Pb-Pb at 5.5 TeV"); + gener = new AliGenPythia(nEvts); + gener->SetProcess(kPyDPlusPbPbMNR); + gener->SetStrucFunc(kCTEQ4L); + gener->SetPtHard(2.1,-1.0); + gener->SetEnergyCMS(5500.); + gener->SetNuclei(208,208); + break; + case kDPluspPb8800: + comment = comment.Append(" DPlus in p-Pb at 8.8 TeV"); + gener = new AliGenPythia(nEvts); + gener->SetProcess(kPyDPluspPbMNR); + gener->SetStrucFunc(kCTEQ4L); + gener->SetPtHard(2.1,-1.0); + gener->SetEnergyCMS(8800.); + gener->SetProjectile("P",1,1); + gener->SetTarget("Pb",208,82); + break; + case kDPluspp14000: + comment = comment.Append(" DPlus in pp at 14 TeV"); + gener = new AliGenPythia(nEvts); + gener->SetProcess(kPyDPlusppMNR); + gener->SetStrucFunc(kCTEQ4L); + gener->SetPtHard(2.1,-1.0); + gener->SetEnergyCMS(14000.); + break; + case kBeautyPbPb5500: + comment = comment.Append(" Beauty in Pb-Pb at 5.5 TeV"); + gener = new AliGenPythia(nEvts); + gener->SetProcess(kPyBeautyPbPbMNR); + gener->SetStrucFunc(kCTEQ4L); + gener->SetPtHard(2.75,-1.0); + gener->SetEnergyCMS(5500.); + gener->SetNuclei(208,208); + break; + case kBeautypPb8800: + comment = comment.Append(" Beauty in p-Pb at 8.8 TeV"); + gener = new AliGenPythia(nEvts); + gener->SetProcess(kPyBeautypPbMNR); + gener->SetStrucFunc(kCTEQ4L); + gener->SetPtHard(2.75,-1.0); + gener->SetEnergyCMS(8800.); + gener->SetProjectile("P",1,1); + gener->SetTarget("Pb",208,82); + break; + case kBeautypp14000: + comment = comment.Append(" Beauty in pp at 14 TeV"); + gener = new AliGenPythia(nEvts); + gener->SetProcess(kPyBeautyppMNR); + gener->SetStrucFunc(kCTEQ4L); + gener->SetPtHard(2.75,-1.0); + gener->SetEnergyCMS(14000.); + break; + case kBeautypp14000wmi: + comment = comment.Append(" Beauty in pp at 14 TeV with mult. interactions"); + gener = new AliGenPythia(-1); + gener->SetProcess(kPyBeautyppMNRwmi); + gener->SetStrucFunc(kCTEQ5L); + gener->SetPtHard(ptHardMin,ptHardMax); + gener->SetEnergyCMS(14000.); + break; + } + + return gener; +} + +AliGenerator* MbCocktail() +{ + comment = comment.Append(" pp at 14 TeV: Pythia low-pt, no heavy quarks + J/Psi from parameterisation"); + AliGenCocktail * gener = new AliGenCocktail(); + gener->UsePerEventRates(); + +// +// Pythia + AliGenPythia* pythia = new AliGenPythia(-1); + pythia->SetMomentumRange(0, 999999.); + pythia->SetThetaRange(0., 180.); + pythia->SetYRange(-12.,12.); + pythia->SetPtRange(0,1000.); + pythia->SetProcess(kPyMb); + pythia->SetEnergyCMS(14000.); + pythia->SwitchHFOff(); + +// +// J/Psi parameterisation + + AliGenParam* jpsi = new AliGenParam(1, AliGenMUONlib::kJpsi, "CDF scaled", "Jpsi"); + jpsi->SetPtRange(0.,100.); + jpsi->SetYRange(-8., 8.); + jpsi->SetPhiRange(0., 360.); + jpsi->SetForceDecay(kAll); +// +// + gener->AddGenerator(jpsi, "J/Psi", 8.e-4); + gener->AddGenerator(pythia, "Pythia", 1.); + + + return gener; +} + +AliGenerator* PyMbTriggered(Int_t pdg) +{ + AliGenPythia* pythia = new AliGenPythia(-1); + pythia->SetMomentumRange(0, 999999.); + pythia->SetThetaRange(0., 180.); + pythia->SetYRange(-12.,12.); + pythia->SetPtRange(0,1000.); + pythia->SetProcess(kPyMb); + pythia->SetEnergyCMS(14000.); + pythia->SetTriggerParticle(pdg, 0.9); + return pythia; +} + +void ProcessEnvironmentVars() +{ + // Run type + if (gSystem->Getenv("CONFIG_RUN_TYPE")) { + for (Int_t iRun = 0; iRun < kRunMax; iRun++) { + if (strcmp(gSystem->Getenv("CONFIG_RUN_TYPE"), pprRunName[iRun])==0) { + proc = (PDC06Proc_t)iRun; + cout<<"Run type set to "<Getenv("CONFIG_SEED")) { + seed = atoi(gSystem->Getenv("CONFIG_SEED")); + } +} + + + diff --git a/test/pploadlibs/rec.C b/test/pploadlibs/rec.C new file mode 100644 index 00000000000..a2463aa1809 --- /dev/null +++ b/test/pploadlibs/rec.C @@ -0,0 +1,19 @@ +void rec() { + gSystem->Load("libTree"); + gROOT->Macro("loadlibsrec.C"); + new AliRun("gAlice","The ALICE Off-line Simulation Framework"); + AliReconstruction reco; + reco.SetUniformFieldTracking(kFALSE); + reco.SetWriteESDfriend(); + reco.SetWriteAlignmentData(); + AliTPCRecoParam * tpcRecoParam = AliTPCRecoParam::GetLowFluxParam(); + AliTPCReconstructor::SetRecoParam(tpcRecoParam); + AliTPCReconstructor::SetStreamLevel(1); + // reco.SetInput("raw.root"); + + TStopwatch timer; + timer.Start(); + reco.Run(); + timer.Stop(); + timer.Print(); +} diff --git a/test/pploadlibs/run.C b/test/pploadlibs/run.C new file mode 100644 index 00000000000..7ce1c3d69b9 --- /dev/null +++ b/test/pploadlibs/run.C @@ -0,0 +1,9 @@ +void run() +{ + TStopwatch timer; + timer.Start(); + gSystem->Exec("root.exe -q sim.C > sim.log 2>&1"); + gSystem->Exec("root.exe -q rec.C > rec.log 2>&1"); + timer.Stop(); + timer.Print(); +} diff --git a/test/pploadlibs/sim.C b/test/pploadlibs/sim.C new file mode 100644 index 00000000000..679d9f87610 --- /dev/null +++ b/test/pploadlibs/sim.C @@ -0,0 +1,17 @@ +void sim(Int_t nev=4) { + gSystem->Load("libTree"); + if (!strcmp(gSystem->GetBuildArch(),"macosx")) gSystem->Load("libf95"); + gROOT->Macro("loadlibssim.C"); + new AliRun("gAlice","The ALICE Off-line Simulation Framework"); + + AliSimulation simulator; + simulator.SetMakeSDigits("TRD TOF PHOS HMPID EMCAL MUON FMD ZDC PMD T0 VZERO"); + simulator.SetMakeDigitsFromHits("ITS TPC"); + simulator.SetWriteRawData("ALL","raw.root",kTRUE); + + TStopwatch timer; + timer.Start(); + simulator.Run(nev); + timer.Stop(); + timer.Print(); +} -- 2.31.1