//Configuration of simulation
enum PprRun_t
{
kSTARLIGHT,
kRunMax
};
const char* pprRunName[] = {
"kSTARLIGHT"
};
enum PprTrigConf_t
{
kDefaultPPTrig, kDefaultPbPbTrig
};
const char * pprTrigConfName[] = {
"p-p","Pb-Pb"
};
// This part for configuration
static PprRun_t srun = kSTARLIGHT;
static AliMagF::BMap_t smag = AliMagF::k5kG;
static Int_t sseed = 12345; //Set 0 to use the current time
static PprTrigConf_t strig = kDefaultPPTrig; // default pp trigger configuration
// Comment line
static TString comment;
// Functions
Float_t EtaToTheta(Float_t arg);
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= "<<gRandom->GetSeed()<<endl;
// libraries required by geant321 and Pythia: loaded in sim.C
new TGeant3TGeo("C++ Interface to Geant3");
// Output every 100 tracks
TVirtualMC * vmc = TVirtualMC::GetMC();
// ((TGeant3*)vmc)->SetSWIT(4,100);
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(100);
gAlice->SetRunLoader(rl);
// Set the trigger configuration
AliSimulation::Instance()->SetTriggerConfig(pprTrigConfName[strig]);
cout<<"Trigger configuration is set to "<<pprTrigConfName[strig]<<endl;
//
// Set External decayer
AliDecayer *decayer = new AliDecayerPythia();
decayer->Init();
vmc->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
vmc->SetProcess("DCAY",1);
vmc->SetProcess("PAIR",1);
vmc->SetProcess("COMP",1);
vmc->SetProcess("PHOT",1);
vmc->SetProcess("PFIS",0);
vmc->SetProcess("DRAY",0);
vmc->SetProcess("ANNI",1);
vmc->SetProcess("BREM",1);
vmc->SetProcess("MUNU",1);
vmc->SetProcess("CKOV",1);
vmc->SetProcess("HADR",1);
vmc->SetProcess("LOSS",2);
vmc->SetProcess("MULS",1);
vmc->SetProcess("RAYL",1);
Float_t cut = 1.e-3; // 1MeV cut by default
Float_t tofmax = 1.e10;
vmc->SetCut("CUTGAM", cut);
vmc->SetCut("CUTELE", cut);
vmc->SetCut("CUTNEU", cut);
vmc->SetCut("CUTHAD", cut);
vmc->SetCut("CUTMUO", cut);
vmc->SetCut("BCUTE", cut);
vmc->SetCut("BCUTM", cut);
vmc->SetCut("DCUTE", cut);
vmc->SetCut("DCUTM", cut);
vmc->SetCut("PPCUTM", cut);
vmc->SetCut("TOFMAX", tofmax);
// Generator Configuration
gSystem->AddDynamicPath("../../objdir/lib/tgt_linux");
gSystem->Load("libStarLight");
gSystem->Load("libAliStarLight.so");
AliGenStarLight* sl = new AliGenStarLight(1000*1000);
sl->SetParameter("BEAM_1_Z = 82 #Z of projectile");
sl->SetParameter("BEAM_1_A = 208 #A of projectile");
sl->SetParameter("BEAM_2_Z = 82 #Z of target");
sl->SetParameter("BEAM_2_A = 208 #A of target");
sl->SetParameter("BEAM_1_GAMMA = 1470 #Gamma of the colliding ions");
sl->SetParameter("BEAM_2_GAMMA = 1470 #Gamma of the colliding ions");
sl->SetParameter("W_MAX = 12.0 #Max value of w");
sl->SetParameter("W_MIN = 2.0 #Min value of w");
sl->SetParameter("W_N_BINS = 40 #Bins i w");
sl->SetParameter("RAP_MAX = 8. #max y");
sl->SetParameter("RAP_N_BINS = 80 #Bins i y");
sl->SetParameter("CUT_PT = 0 #Cut in pT? 0 = (no, 1 = yes)");
sl->SetParameter("PT_MIN = 1.0 #Minimum pT in GeV");
sl->SetParameter("PT_MAX = 3.0 #Maximum pT in GeV");
sl->SetParameter("CUT_ETA = 0 #Cut in pseudorapidity? (0 = no, 1 = yes)");
sl->SetParameter("ETA_MIN = -10 #Minimum pseudorapidity");
sl->SetParameter("ETA_MAX = 10 #Maximum pseudorapidity");
sl->SetParameter("PROD_MODE = 2 #gg or gP switch (1 = 2-photon, 2 = coherent vector meson (narrow), 3 = coherent vector meson (wide), # 4 = incoherent vector meson, 5 = A+A DPMJet single, 6 = A+A DPMJet double, 7 = p+A DPMJet single, 8 = p+A Pythia single )");
// is N_EVENTS valid
sl->SetParameter("N_EVENTS = 10000000 #Number of events");
sl->SetParameter("PROD_PID = 113 #Channel of interest (not relevant for photonuclear processes)");
sl->SetParameter(Form("RND_SEED = %d #Random number seed", sseed));
sl->SetParameter("OUTPUT_FORMAT = 2 #Form of the output");
sl->SetParameter("BREAKUP_MODE = 5 #Controls the nuclear breakup");
sl->SetParameter("INTERFERENCE = 0 #Interference (0 = off, 1 = on)");
sl->SetParameter("IF_STRENGTH = 1. #% of intefernce (0.0 - 0.1)");
sl->SetParameter("COHERENT = 1 #Coherent=1,Incoherent=0");
sl->SetParameter("INCO_FACTOR = 1. #percentage of incoherence");
sl->SetParameter("BFORD = 9.5 #");
sl->SetParameter("INT_PT_MAX = 0.24 #Maximum pt considered, when interference is turned on");
sl->SetParameter("INT_PT_N_BINS = 120 #Number of pt bins when interference is turned on");
sl->Init();
sl->GetTStarLight()->PrintInputs(std::cout);
AliGenerator* gener = sl;
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 == AliMagF::k2kG) {
comment = comment.Append(" | L3 field 0.2 T");
} else if (smag == AliMagF::k5kG) {
comment = comment.Append(" | L3 field 0.5 T");
}
printf("\n \n Comment: %s \n \n", comment.Data());
// Field
TGeoGlobalMagField::Instance()->SetField(new AliMagF("Maps","Maps", -1., -1., smag));
rl->CdGAFile();
//
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 = 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");
}
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 AliZDCv4("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", "EMCAL_COMPLETEV1");
}
if (iACORDE)
{
//=================== ACORDE parameters ============================
AliACORDE *ACORDE = new AliACORDEv1("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));
}
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 "<<pprRunName[iRun]<<endl;
}
}
}
// Random Number seed
if (gSystem->Getenv("CONFIG_SEED")) {
sseed = atoi(gSystem->Getenv("CONFIG_SEED"));
}
}