Select Git revision
Forked from
ALICEOffline / AliceMcProductionSetup
10 commits behind the upstream repository.
Maximiliano Puccio authored
The configurations for Pb-Pb are already validated. The one for p-Pb is still under validation.
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
Config.C 29.46 KiB
// $Id$
//
// Configuration for the Geant4 production 2010
// By E. Sicking, CERN
//
#if !defined(__CINT__) || defined(__MAKECINT__)
#include <Riostream.h>
#include <TRandom.h>
#include <TDatime.h>
#include <TSystem.h>
#include <TVirtualMC.h>
#include <TGeant3TGeo.h>
#include <TGeant4.h>
#include "STEER/AliRunLoader.h"
#include "STEER/AliRun.h"
#include "STEER/AliConfig.h"
#include "PYTHIA6/AliDecayerPythia.h"
#include "EVGEN/AliGenHIJINGpara.h"
#include "THijing/AliGenHijing.h"
#include "PYTHIA6/AliGenPythia.h"
#include "TDPMjet/AliGenDPMjet.h"
#include "STEER/AliMagFCheb.h"
#include "STRUCT/AliBODY.h"
#include "STRUCT/AliMAG.h"
#include "STRUCT/AliABSOv3.h"
#include "STRUCT/AliDIPOv3.h"
#include "STRUCT/AliHALLv3.h"
#include "STRUCT/AliFRAMEv2.h"
#include "STRUCT/AliSHILv3.h"
#include "STRUCT/AliPIPEv3.h"
#include "ITS/AliITSv11Hybrid.h"
#include "TPC/AliTPCv2.h"
#include "TOF/AliTOFv6T0.h"
#include "HMPID/AliHMPIDv3.h"
#include "ZDC/AliZDCv3.h"
#include "TRD/AliTRDv1.h"
#include "TRD/AliTRDgeometry.h"
#include "FMD/AliFMDv1.h"
#include "MUON/AliMUONv1.h"
#include "PHOS/AliPHOSv1.h"
#include "PHOS/AliPHOSSimParam.h"
#include "PMD/AliPMDv1.h"
#include "T0/AliT0v1.h"
#include "EMCAL/AliEMCALv2.h"
#include "ACORDE/AliACORDEv1.h"
#include "VZERO/AliVZEROv7.h"
#endif
enum PDC06Proc_t
{
kPythia6, kPythia6D6T, kPythia6ATLAS, kPythia6ATLAS_Flat, kPythiaPerugia0, kPhojet,
kBox, kJPsi, kHijing, kAntiNucleiCocktail, kRunMax, kDPMjet_pA_Nuclei
};
const char * pprRunName[] = {
"kPythia6", "kPythia6D6T", "kPythia6ATLAS", "kPythia6ATLAS_Flat", "kPythiaPerugia0", "kPhojet",
"kBox", "kJPsi", "kHijing", "kAntiNucleiCocktail", "kDPMjet_pA_Nuclei"
};
enum Mag_t
{
kNoField, k5kG, kFieldMax
};
const char * pprField[] = {
"kNoField", "k5kG"
};
enum PhysicsList_t {
FTFP_BERT_EMV, QGSP_BERT_EMV, QGSP_FTFP_BERT_EMV,
FTFP_BERT_EMV_OPTICAL, QGSP_BERT_EMV_OPTICAL, QGSP_FTFP_BERT_EMV_OPTICAL, kListMax
};
const char * physicsListName[] = {
"FTFP_BERT_EMV", "QGSP_BERT_EMV", "QGSP_FTFP_BERT_EMV",
"FTFP_BERT_EMV_OPTICAL", "QGSP_BERT_EMV_OPTICAL", "QGSP_FTFP_BERT_EMV_OPTICAL"
};
enum PprTrigConf_t
{
kDefaultPPTrig, kDefaultPbPbTrig
};
const char * pprTrigConfName[] = {
"p-p","Pb-Pb"
};
//--- Functions ---
AliGenerator *MbPythia();
AliGenerator *MbPythiaTuneD6T();
AliGenerator *MbPhojet();
AliGenerator *Box();
AliGenerator *Psi();
AliGenerator *Hijing();
AliGenerator *AntiNucleiCocktail();
AliGenerator *DPMjet_pA_Nuclei(Bool_t fragments);
Float_t EtaToTheta(Float_t arg);
void ProcessEnvironmentVars();
// Geterator, field, beam energy
// static PDC06Proc_t proc = kPythiaPerugia0;
static PDC06Proc_t proc = kDPMjet_pA_Nuclei;
static Mag_t mag = k5kG;
static Float_t pBeamEnergy = 4000.; // energy p-Beam
static Float_t energy = 2.*pBeamEnergy*TMath::Sqrt(82./208.); // energy in CMS
static Float_t bMin = 0.;
static Float_t bMax = 100.;
static Int_t runNumber = 0;
static PprTrigConf_t strig = kDefaultPPTrig; // default pp trigger configuration
static PhysicsList_t physicslist = FTFP_BERT_EMV;
//========================//
// Set Random Number seed //
//========================//
TDatime dt;
static UInt_t seed = dt.Get();
// Comment line
static TString comment;
void Config()
{
// Get settings from environment variables
ProcessEnvironmentVars();
gRandom->SetSeed(seed);
cerr<<"Seed for random number generation= "<<seed<<endl;
// Libraries required by geant321
#if defined(__CINT__)
gSystem->Load("liblhapdf.so"); // Parton density functions
gSystem->Load("libEGPythia6.so"); // TGenerator interface
gSystem->Load("libpythia6_4_25.so"); // Pythia 6.4
gSystem->Load("libAliPythia6.so"); // ALICE specific implementations gSystem->Load("libgeant321");
gSystem->Load("libhijing");
gSystem->Load("libTHijing");
if (proc == kDPMjet_pA_Nuclei) {
gSystem->Load("libdpmjet");
gSystem->Load("libTDPMjet");
}
#endif
// new TGeant3TGeo("C++ Interface to Geant3");
//=======================================================================
// Create the output file
AliRunLoader* rl=0x0;
cout<<"Config.C: Creating Run Loader ..."<<endl;
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(100);
gAlice->SetRunLoader(rl);
// gAlice->SetGeometryFromFile("geometry.root");
// gAlice->SetGeometryFromCDB();
// Set the trigger configuration: proton-proton
AliSimulation::Instance()->SetTriggerConfig(pprTrigConfName[strig]);
cout <<"Trigger configuration is set to "<<pprTrigConfName[strig]<<endl;
rl->CdGAFile();
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 AliABSOv3("ABSO", "Muon Absorber");
}
if (iDIPO)
{
//=================== DIPO parameters ============================
AliDIPO *DIPO = new AliDIPOv3("DIPO", "Dipole version 3");
}
if (iHALL)
{
//=================== HALL parameters ============================
AliHALL *HALL = new AliHALLv3("HALL", "Alice Hall");
}
if (iFRAME)
{
//=================== FRAME parameters ============================
AliFRAMEv2 *FRAME = new AliFRAMEv2("FRAME", "Space Frame");
FRAME->SetHoles(1);
}
if (iSHIL)
{
//=================== SHIL parameters ============================
AliSHIL *SHIL = new AliSHILv3("SHIL", "Shielding Version 3");
}
if (iPIPE)
{
//=================== PIPE parameters ============================
AliPIPE *PIPE = new AliPIPEv3("PIPE", "Beam Pipe");
}
if (iITS)
{
//=================== ITS parameters ============================
AliITS *ITS = new AliITSv11("ITS","ITS v11");
}
if (iTPC)
{
//============================ TPC parameters =====================
AliTPC *TPC = new AliTPCv2("TPC", "Default");
TPC->SetPrimaryIonisation();// not used with Geant3
}
if (iTOF) {
//=================== TOF parameters ============================
AliTOF *TOF = new AliTOFv6T0("TOF", "normal TOF");
}
if (iHMPID)
{
//=================== HMPID parameters ===========================
AliHMPID *HMPID = new AliHMPIDv3("HMPID", "normal HMPID");
}
if (iZDC)
{
//=================== ZDC parameters ============================
AliZDC *ZDC = new AliZDCv3("ZDC", "normal ZDC");
//Collimators aperture
ZDC->SetVCollSideCAperture(0.85);
ZDC->SetVCollSideCCentre(0.);
ZDC->SetVCollSideAAperture(0.75);
ZDC->SetVCollSideACentre(0.);
//Detector position
ZDC->SetYZNC(1.6);
ZDC->SetYZNA(1.6);
ZDC->SetYZPC(1.6);
ZDC->SetYZPA(1.6);
}
if (iTRD)
{
//=================== TRD parameters ============================
AliTRD *TRD = new AliTRDtestG4("TRD", "TRD slow simulator");
AliTRDgeometry *geoTRD = TRD->GetGeometry();
// Partial geometry: modules at 0,1,7,8,9,16,17
// starting at 3h in positive direction
geoTRD->SetSMstatus(4,0);
geoTRD->SetSMstatus(5,0);
geoTRD->SetSMstatus(12,0);
geoTRD->SetSMstatus(13,0);
geoTRD->SetSMstatus(14,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");
// activate trigger efficiency by cells
MUON->SetTriggerEffCells(1);
}
if (iPHOS)
{
//=================== PHOS parameters ===========================
AliPHOS *PHOS = new AliPHOSv1("PHOS", "noCPV_Modules123");
}
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", "EMCAL_FIRSTYEARV1");
}
if (iACORDE)
{
//=================== ACORDE parameters ============================
AliACORDE *ACORDE = new AliACORDEv1("ACORDE", "normal ACORDE");
}
if (iVZERO)
{
//=================== ACORDE parameters ============================
AliVZERO *VZERO = new AliVZEROv7("VZERO", "normal VZERO");
}
// Load Geant4 + Geant4 VMC libraries
//
if (gClassTable->GetID("TGeant4") == -1) {
TString g4libsMacro = "$G4VMCINSTALL/share/Geant4VMC-3.1.1/examples/macro/g4libs.C";
//TString g4libsMacro = "$ALICE/geant4_vmc/examples/macro/g4libs.C";
//Load Geant4 libraries
if (!gInterpreter->IsLoaded(g4libsMacro.Data())) {
gROOT->LoadMacro(g4libsMacro.Data());
gSystem->Exec("echo G4VMCINSTALL: $G4VMCINSTALL");
gInterpreter->ProcessLine("g4libs()");
}
}
// Create Geant4 VMC
//
TGeant4 *geant4 = 0;
if ( ! gMC ) {
TG4RunConfiguration* runConfiguration=0x0;
for (Int_t iList = 0; iList < kListMax; iList++) {
if(iList<kListMax/2) {
if(physicslist == iList){
runConfiguration =
new TG4RunConfiguration("geomRoot",
physicsListName[iList],
"specialCuts+stackPopper+stepLimiter",
true);
}
}
else if(iList>=kListMax/2) { //add "optical" PL to HadronPhysicsList
if(physicslist == iList){
runConfiguration = new TG4RunConfiguration("geomRoot",
Form("%s+optical",physicsListName[iList-kListMax/2]),
"specialCuts+stackPopper+stepLimiter",
true); }
}
}
geant4 = new TGeant4("TGeant4", "The Geant4 Monte Carlo", runConfiguration);
cout << "Geant4 has been created." << endl;
} else {
cout << "Monte Carlo has been already created." << endl;
}
// Customization of Geant4 VMC
//
geant4->ProcessGeantCommand("/mcVerbose/all 1");
geant4->ProcessGeantCommand("/mcVerbose/geometryManager 1");
geant4->ProcessGeantCommand("/mcVerbose/opGeometryManager 1");
geant4->ProcessGeantCommand("/mcTracking/loopVerbose 1");
geant4->ProcessGeantCommand("/mcPhysics/rangeCuts 0.01 mm");
geant4->ProcessGeantCommand("/mcVerbose/composedPhysicsList 2");
geant4->ProcessGeantCommand("/mcTracking/skipNeutrino true");
geant4->ProcessGeantCommand("/mcDet/setIsMaxStepInLowDensityMaterials true");
geant4->ProcessGeantCommand("/mcDet/setMaxStepInLowDensityMaterials 10 m");
// geant4->ProcessGeantCommand("/mcMagField/setConstDistance 1 mm");
//
// optical
//
geant4->ProcessGeantCommand("/process/optical/verbose 0");
geant4->ProcessGeantCommand("/process/optical/processActivation Scintillation false");
geant4->ProcessGeantCommand("/process/optical/processActivation OpWLS false");
geant4->ProcessGeantCommand("/process/optical/processActivation OpMieHG false");
geant4->ProcessGeantCommand("/process/optical/setTrackSecondariesFirst Cerenkov false");
geant4->ProcessGeantCommand("/mcMagField/stepperType NystromRK4");
//
// PAI for TRD
//
Int_t trdGas = gMC->MediumId("TRD_Gas-mix");
geant4->ProcessGeantCommand(Form("/mcPhysics/emModel/selectMedium %3d", trdGas));
geant4->ProcessGeantCommand("/mcPhysics/emModel/setElossModel PAI");
geant4->ProcessGeantCommand("/mcPhysics/emModel/setFluctModel PAI");
geant4->ProcessGeantCommand("/mcPhysics/emModel/setParticles all");
//
//=======================================================================
// ************* 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);
//======================//
// Set External decayer //
//======================//
TVirtualMCDecayer* decayer = new AliDecayerPythia();
decayer->SetForceDecay(kAll);
decayer->Init();
gMC->SetExternalDecayer(decayer);
//=========================//
// Generator Configuration //
//=========================//
AliGenerator* gener = 0x0;
if (proc == kPythia6) {
gener = MbPythia();
} else if (proc == kPythia6D6T) {
gener = MbPythiaTuneD6T();
} else if (proc == kPythia6ATLAS) {
gener = MbPythiaTuneATLAS();
} else if (proc == kPythiaPerugia0) {
gener = MbPythiaTunePerugia0();
} else if (proc == kPythia6ATLAS_Flat) {
gener = MbPythiaTuneATLAS_Flat();
} else if (proc == kPhojet) {
gener = MbPhojet();
} else if (proc == kBox) {
gener = Box();
} else if (proc == kJPsi) {
gener = Psi();
} else if (proc == kHijing) {
gener = Hijing();
} else if (proc == kAntiNucleiCocktail) {
gener = AntiNucleiCocktail();
} else if (proc == kDPMjet_pA_Nuclei) {
gener = DPMjet_pA_Nuclei(kFALSE);
}
//
//
// Size of the interaction diamond
// Longitudinal
Float_t sigmaz = 5.4 / TMath::Sqrt(2.); // [cm]
if (energy == 900)
//sigmaz = 10.5 / TMath::Sqrt(2.); // [cm]
//sigmaz = 3.7;
if (energy == 7000)
sigmaz = 6.3 / TMath::Sqrt(2.); // [cm]
//
// Transverse
// beta*
Float_t betast = 10.0; // beta* [m]
if (runNumber >= 117048) betast = 2.0;
if (runNumber > 122375) betast = 3.5; // starting with fill 1179
//
//
Float_t eps = 5.0e-6; // emittance [m] Float_t gamma = energy / 2.0 / 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->SetVertexSmear(kPerEvent);
gener->Init();
printf("\n \n Comment: %s \n \n", comment.Data());
}
//
// PYTHIA
//
AliGenerator* Box()
{
AliGenBox* gener = new AliGenBox(50);
gener->SetMomentumRange(10,10.1);
gener->SetPhiRange(0,360);
gener->SetThetaRange(60.,120.);
gener->SetOrigin(0,0,0);
//vertex position
gener->SetSigma(0,0,5.6); // Sigma in (X,Y,Z) (cm) on IP position
gener->SetPart(kMuonPlus);
return gener;
}
AliGenerator* Psi()
{
gener = new AliGenCocktail();
gener->SetEnergyCMS(7000.);
gener->SetProjectile("p", 1, 1);
gener->SetTarget("p", 1, 1);
AliGenParam *jpsi=0x0;
jpsi = new AliGenParam(1, AliGenMUONlib::kJpsi, "pp 7", "Jpsi"); // 8.8 TeV
jpsi->SetPtRange(0.,999.);
jpsi->SetYRange(-4.2, -2.3);
jpsi->SetPhiRange(0.,360.);
jpsi->SetForceDecay(kDiMuon);
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(energy);
gener->AddGenerator(pythia, "pythia", 1);
gener->AddGenerator(jpsi, "jpsi", 1);
return gener;
}
AliGenerator* MbPythia()
{
comment = comment.Append(" pp: Pythia low-pt");
//
// 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(energy);
return pythia;}
AliGenerator* MbPythiaTuneD6T()
{
comment = comment.Append(" pp: Pythia low-pt");
//
// 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(energy);
// Tune
// 109 D6T : Rick Field's CDF Tune D6T (NB: needs CTEQ6L pdfs externally)
pythia->SetTune(109); // F I X
pythia->SetStrucFunc(kCTEQ6l);
//
return pythia;
}
AliGenerator* MbPythiaTunePerugia0()
{
comment = comment.Append(" pp: Pythia low-pt (Perugia0)");
//
// 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(energy);
// Tune
// 320 Perugia 0
pythia->SetTune(320);
pythia->UseNewMultipleInteractionsScenario();
pythia->SetCrossingAngle(0,0.000280);
//
return pythia;
}
AliGenerator* MbPythiaTuneATLAS()
{
comment = comment.Append(" pp: Pythia low-pt");
//
// 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(energy);
// Tune
// C 306 ATLAS-CSC: Arthur Moraes' (new) ATLAS tune (needs CTEQ6L externally)
pythia->SetTune(306);
pythia->SetStrucFunc(kCTEQ6l);
//
return pythia;
}
AliGenerator* MbPythiaTuneATLAS_Flat()
{
AliGenPythia* pythia = MbPythiaTuneATLAS();
comment = comment.Append("; flat multiplicity distribution");
// set high multiplicity trigger
// this weight achieves a flat multiplicity distribution
Double_t cont[] =
{0,
0.234836, 0.103484, 0.00984802, 0.0199906, 0.0260018, 0.0208481, 0.0101477, 0.00146998, -0.00681513, -0.0114928,
-0.0113352, -0.0102012, -0.00895238, -0.00534961, -0.00261648, -0.000819048, 0.00130816, 0.00177978, 0.00373838, 0.00566255,
0.00628156, 0.00687458, 0.00668017, 0.00702917, 0.00810848, 0.00876167, 0.00832783, 0.00848518, 0.0107709, 0.0106849,
0.00933702, 0.00912525, 0.0106553, 0.0102785, 0.0101756, 0.010962, 0.00957103, 0.00970448, 0.0117133, 0.012271,
0.0113, 0.0113, 0.0113, 0.0113, 0.0113, 0.0113, 0.0113, 0.0113, 0.0113, 0.0113,
0.0113, 0.0113, 0.0113, 0.0113, 0.0113, 0.0113, 0.0113, 0.0113, 0.0113, 0.0113,
0.0113, 0.0113, 0.0113, 0.0113, 0.0113, 0.0113, 0.0113, 0.0113, 0.0113, 0.0113,
0.0113, 0.0113, 0.0113, 0.0113, 0.0113, 0.0113, 0.0113, 0.0113, 0.0113, 0.0113,
0.0113, 0.0113, 0.0113, 0.0113, 0.0113, 0.0113, 0.0113, 0.0113, 0.0113, 0.0113,
0.0113, 0.0113, 0.0113, 0.0113, 0.0113, 0.0113, 0.0113, 0.0113, 0.0113, 0.0113,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0};
Double_t err[] =
{0,
0.00168216, 0.000743548, 0.00103125, 0.00108605, 0.00117101, 0.00124577, 0.00129119, 0.00128341, 0.00121421, 0.00112431,
0.00100588, 0.000895078, 0.000790314, 0.000711673, 0.000634547, 0.000589133, 0.000542763, 0.000509552, 0.000487375, 0.000468906,
0.000460196, 0.000455806, 0.00044843, 0.000449317, 0.00045007, 0.000458016, 0.000461167, 0.000474742, 0.00050161, 0.00051637,
0.000542336, 0.000558854, 0.000599169, 0.000611982, 0.000663855, 0.000696322, 0.000722825, 0.000771686, 0.000838023, 0.000908317,
0.0003, 0.0003, 0.0003, 0.0003, 0.0003, 0.0003, 0.0003, 0.0003, 0.0003, 0.0003,
0.0003, 0.0003, 0.0003, 0.0003, 0.0003, 0.0003, 0.0003, 0.0003, 0.0003, 0.0003,
0.0003, 0.0003, 0.0003, 0.0003, 0.0003, 0.0003, 0.0003, 0.0003, 0.0003, 0.0003,
0.0003, 0.0003, 0.0003, 0.0003, 0.0003, 0.0003, 0.0003, 0.0003, 0.0003, 0.0003,
0.0003, 0.0003, 0.0003, 0.0003, 0.0003, 0.0003, 0.0003, 0.0003, 0.0003, 0.0003,
0.0003, 0.0003, 0.0003, 0.0003, 0.0003, 0.0003, 0.0003, 0.0003, 0.0003, 0.0003,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0};
TH1F *weight = new TH1F("newweight","newweight",120,-0.5,119.5);
weight->SetContent(cont);
weight->SetError(err);
Int_t limit = weight->GetRandom();
pythia->SetTriggerChargedMultiplicity(limit, 1.4);
comment = comment.Append(Form("; multiplicity threshold set to %d in |eta| < 1.4", limit));
return pythia;
}
AliGenerator* MbPhojet()
{
comment = comment.Append(" pp: Pythia low-pt");
//
// DPMJET
#if defined(__CINT__)
gSystem->Load("libdpmjet"); // Parton density functions
gSystem->Load("libTDPMjet"); // Parton density functions
#endif
AliGenDPMjet* dpmjet = new AliGenDPMjet(-1);
dpmjet->SetMomentumRange(0, 999999.);
dpmjet->SetThetaRange(0., 180.);
dpmjet->SetYRange(-12.,12.);
dpmjet->SetPtRange(0,1000.);
dpmjet->SetProcess(kDpmMb);
dpmjet->SetEnergyCMS(energy);
dpmjet->SetCrossingAngle(0,0.000280);
return dpmjet;
}
AliGenerator* Hijing()
{ AliGenHijing *gener = new AliGenHijing(-1);
// centre of mass energy
gener->SetEnergyCMS(2760.);
//bMin = 0.;
//bMin = 0.;
//bMax = 3.5; bis 5%
bMin = 12.09;
bMax = 13.97;
gener->SetImpactParameterRange(bMin, bMax);
cout<<"Impact parameter in Hijing ["<<bMin<<","<<bMax<<"]"<<endl;
// 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);
// Don't track spectators
gener->SetSpectators(0);
// kinematic selection
gener->SetSelectAll(0);
return gener;
}
AliGenerator* AntiNucleiCocktail()
{
// Set pseudorapidity range from -0.9 to 0.9
// Float_t thmin = EtaToTheta(0.9); // theta min. <---> eta max
// Float_t thmax = EtaToTheta(-0.9); // theta max. <---> eta min
AliGenCocktail *gener = new AliGenCocktail();
// 1. Hijing
AliGenHijing *gh = (AliGenHijing*) Hijing();
// 2. Deuteron
AliGenBox *box2 = new AliGenBox(50);
box2->SetPart(1000010020); // for deu
box2->SetPtRange(0., 10.);
box2->SetPhiRange(0., 360.);
box2->SetYRange(-1,1);
// 3. Anti-Deuteron
AliGenBox *box3 = new AliGenBox(50);
box3->SetPart(-1000010020); // for anti- deu
box3->SetPtRange(0., 10.);
box3->SetPhiRange(0., 360.);
box3->SetYRange(-1,1);
// 4. Triton
AliGenBox *box4 = new AliGenBox(50);
box4->SetPart(1000010030); // for tri
box4->SetPtRange(0., 10.);
box4->SetPhiRange(0., 360.);
box4->SetYRange(-1,1);
// 5. Anti-Triton
AliGenBox *box5 = new AliGenBox(50);
box5->SetPart(-1000010030); // for anti-tri
box5->SetPtRange(0., 10.);
box5->SetPhiRange(0., 360.);
box5->SetYRange(-1,1);
// 6. Helium3
AliGenBox *box6 = new AliGenBox(50);
box6->SetPart(1000020030); // for Helium3 box6->SetPtRange(0., 10.);
box6->SetPhiRange(0., 360.);
box6->SetYRange(-1,1);
// 7. Anti-Helium3
AliGenBox *box7 = new AliGenBox(50);
box7->SetPart(-1000020030); // for anti-Helium3
box7->SetPtRange(0., 10.);
box7->SetPhiRange(0., 360.);
box7->SetYRange(-1,1);
// 8. Helium4
AliGenBox *box8 = new AliGenBox(50);
box8->SetPart(1000020040); // for Helium4
box8->SetPtRange(0., 10.);
box8->SetPhiRange(0., 360.);
box8->SetYRange(-1,1);
// 9. Anti-Helium4
AliGenBox *box9 = new AliGenBox(50);
box9->SetPart(-1000020040); // for anti-Helium4
box9->SetPtRange(0., 10.);
box9->SetPhiRange(0., 360.);
box9->SetYRange(-1,1);
gener->AddGenerator(gh,"hijing",1);
gener->AddGenerator(box2,"fbox2",1);
gener->AddGenerator(box3,"fbox3",1);
gener->AddGenerator(box4,"fbox4",1);
gener->AddGenerator(box5,"fbox5",1);
gener->AddGenerator(box6,"fbox6",1);
gener->AddGenerator(box7,"fbox7",1);
gener->AddGenerator(box8,"fbox8",1);
gener->AddGenerator(box9,"fbox9",1);
return gener;
}
Float_t EtaToTheta(Float_t arg){
return (180./TMath::Pi())*2.*atan(exp(-arg));
}
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 "<<pprRunName[iRun]<<endl;
}
}
}
// Field
if (gSystem->Getenv("CONFIG_FIELD")) {
for (Int_t iField = 0; iField < kFieldMax; iField++) {
if (strcmp(gSystem->Getenv("CONFIG_FIELD"), pprField[iField])==0) {
mag = (Mag_t)iField;
cout<<"Field set to "<<pprField[iField]<<endl;
}
}
}
// Energy
if (gSystem->Getenv("CONFIG_ENERGY")) {
energy = atoi(gSystem->Getenv("CONFIG_ENERGY"));
cout<<"Energy set to "<<energy<<" GeV"<<endl;
}
// Random Number seed
if (gSystem->Getenv("CONFIG_SEED")) {
seed = atoi(gSystem->Getenv("CONFIG_SEED"));
}
// Impact param
if (gSystem->Getenv("CONFIG_BMIN")) {
bMin = atof(gSystem->Getenv("CONFIG_BMIN"));
}
if (gSystem->Getenv("CONFIG_BMAX")) {
bMax = atof(gSystem->Getenv("CONFIG_BMAX"));
}
cout<<"Impact parameter in ["<<bMin<<","<<bMax<<"]"<<endl;
// Run number
if (gSystem->Getenv("DC_RUN")) {
runNumber = atoi(gSystem->Getenv("DC_RUN"));
}
// Physics lists
if (gSystem->Getenv("CONFIG_PHYSICSLIST")) {
for (Int_t iList = 0; iList < kListMax; iList++) {
if (strcmp(gSystem->Getenv("CONFIG_PHYSICSLIST"), physicsListName[iList])==0){
physicslist = (PhysicsList_t)iList;
cout<<"Physics list set to "<< physicsListName[iList]<<endl;
}
}
}
}
AliGenerator* DPMjet_pA_Nuclei(Bool_t fragments) {
AliGenCocktail *gener = new AliGenCocktail();
gener->SetProjectile("A", 208, 82);
gener->SetTarget("P", 1, 1);
gener->SetEnergyCMS(energy);
AliGenDPMjet *genDPM = new AliGenDPMjet(-1);
// A-p
//
genDPM->SetProjectile("A", 208, 82);
genDPM->SetTarget("P", 1, 1);
genDPM->SetEnergyCMS(energy);
genDPM->SetProjectileBeamEnergy(82.*pBeamEnergy/208.);
//
genDPM->SetProcess(kDpmMb);
genDPM->SetImpactParameterRange(0., 100.);
// DO NOT BOOST !
// gener->SetBoostLHC(1);
//
genDPM->SetFragmentProd(fragments);
// 2. Deuteron
AliGenBox *box2 = new AliGenBox(10);
box2->SetPart(1000010020); // for 3LH
box2->SetPtRange(0., 8.);
box2->SetPhiRange(0., 360.);
box2->SetYRange(-1,1);
// 3. Anti-Deuteron
AliGenBox *box3 = new AliGenBox(10);
box3->SetPart(-1000010020); // for anti-3LH
box3->SetPtRange(0., 8.);
box3->SetPhiRange(0., 360.); box3->SetYRange(-1,1);
// 4. He-3
AliGenBox *box4 = new AliGenBox(10);
box4->SetPart(1000020030);
box4->SetPtRange(0., 8.);
box4->SetPhiRange(0., 360.);
box4->SetYRange(-1,1);
// 5. Anti-He-3
AliGenBox *box5 = new AliGenBox(10);
box5->SetPart(-1000020030);
box5->SetPtRange(0., 8.);
box5->SetPhiRange(0., 360.);
box5->SetYRange(-1,1);
// 6. triton
AliGenBox *box6 = new AliGenBox(10);
box6->SetPart(1000010030);
box6->SetPtRange(0., 8.);
box6->SetPhiRange(0., 360.);
box6->SetYRange(-1,1);
// 7. Anti-triton
AliGenBox *box7 = new AliGenBox(10);
box7->SetPart(-1000010030);
box7->SetPtRange(0., 8.);
box7->SetPhiRange(0., 360.);
box7->SetYRange(-1,1);
gener->AddGenerator(genDPM,"DPMjet",1);
gener->AddGenerator(box2,"deuterons",1);
gener->AddGenerator(box3,"antideuterons",1);
gener->AddGenerator(box4,"He3",1);
gener->AddGenerator(box5,"antiHe3",1);
gener->AddGenerator(box4,"triton",1);
gener->AddGenerator(box5,"antiTriton",1);
return gener;
}