ROOT logo
//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"));
    }
}
 Config_.C:1
 Config_.C:2
 Config_.C:3
 Config_.C:4
 Config_.C:5
 Config_.C:6
 Config_.C:7
 Config_.C:8
 Config_.C:9
 Config_.C:10
 Config_.C:11
 Config_.C:12
 Config_.C:13
 Config_.C:14
 Config_.C:15
 Config_.C:16
 Config_.C:17
 Config_.C:18
 Config_.C:19
 Config_.C:20
 Config_.C:21
 Config_.C:22
 Config_.C:23
 Config_.C:24
 Config_.C:25
 Config_.C:26
 Config_.C:27
 Config_.C:28
 Config_.C:29
 Config_.C:30
 Config_.C:31
 Config_.C:32
 Config_.C:33
 Config_.C:34
 Config_.C:35
 Config_.C:36
 Config_.C:37
 Config_.C:38
 Config_.C:39
 Config_.C:40
 Config_.C:41
 Config_.C:42
 Config_.C:43
 Config_.C:44
 Config_.C:45
 Config_.C:46
 Config_.C:47
 Config_.C:48
 Config_.C:49
 Config_.C:50
 Config_.C:51
 Config_.C:52
 Config_.C:53
 Config_.C:54
 Config_.C:55
 Config_.C:56
 Config_.C:57
 Config_.C:58
 Config_.C:59
 Config_.C:60
 Config_.C:61
 Config_.C:62
 Config_.C:63
 Config_.C:64
 Config_.C:65
 Config_.C:66
 Config_.C:67
 Config_.C:68
 Config_.C:69
 Config_.C:70
 Config_.C:71
 Config_.C:72
 Config_.C:73
 Config_.C:74
 Config_.C:75
 Config_.C:76
 Config_.C:77
 Config_.C:78
 Config_.C:79
 Config_.C:80
 Config_.C:81
 Config_.C:82
 Config_.C:83
 Config_.C:84
 Config_.C:85
 Config_.C:86
 Config_.C:87
 Config_.C:88
 Config_.C:89
 Config_.C:90
 Config_.C:91
 Config_.C:92
 Config_.C:93
 Config_.C:94
 Config_.C:95
 Config_.C:96
 Config_.C:97
 Config_.C:98
 Config_.C:99
 Config_.C:100
 Config_.C:101
 Config_.C:102
 Config_.C:103
 Config_.C:104
 Config_.C:105
 Config_.C:106
 Config_.C:107
 Config_.C:108
 Config_.C:109
 Config_.C:110
 Config_.C:111
 Config_.C:112
 Config_.C:113
 Config_.C:114
 Config_.C:115
 Config_.C:116
 Config_.C:117
 Config_.C:118
 Config_.C:119
 Config_.C:120
 Config_.C:121
 Config_.C:122
 Config_.C:123
 Config_.C:124
 Config_.C:125
 Config_.C:126
 Config_.C:127
 Config_.C:128
 Config_.C:129
 Config_.C:130
 Config_.C:131
 Config_.C:132
 Config_.C:133
 Config_.C:134
 Config_.C:135
 Config_.C:136
 Config_.C:137
 Config_.C:138
 Config_.C:139
 Config_.C:140
 Config_.C:141
 Config_.C:142
 Config_.C:143
 Config_.C:144
 Config_.C:145
 Config_.C:146
 Config_.C:147
 Config_.C:148
 Config_.C:149
 Config_.C:150
 Config_.C:151
 Config_.C:152
 Config_.C:153
 Config_.C:154
 Config_.C:155
 Config_.C:156
 Config_.C:157
 Config_.C:158
 Config_.C:159
 Config_.C:160
 Config_.C:161
 Config_.C:162
 Config_.C:163
 Config_.C:164
 Config_.C:165
 Config_.C:166
 Config_.C:167
 Config_.C:168
 Config_.C:169
 Config_.C:170
 Config_.C:171
 Config_.C:172
 Config_.C:173
 Config_.C:174
 Config_.C:175
 Config_.C:176
 Config_.C:177
 Config_.C:178
 Config_.C:179
 Config_.C:180
 Config_.C:181
 Config_.C:182
 Config_.C:183
 Config_.C:184
 Config_.C:185
 Config_.C:186
 Config_.C:187
 Config_.C:188
 Config_.C:189
 Config_.C:190
 Config_.C:191
 Config_.C:192
 Config_.C:193
 Config_.C:194
 Config_.C:195
 Config_.C:196
 Config_.C:197
 Config_.C:198
 Config_.C:199
 Config_.C:200
 Config_.C:201
 Config_.C:202
 Config_.C:203
 Config_.C:204
 Config_.C:205
 Config_.C:206
 Config_.C:207
 Config_.C:208
 Config_.C:209
 Config_.C:210
 Config_.C:211
 Config_.C:212
 Config_.C:213
 Config_.C:214
 Config_.C:215
 Config_.C:216
 Config_.C:217
 Config_.C:218
 Config_.C:219
 Config_.C:220
 Config_.C:221
 Config_.C:222
 Config_.C:223
 Config_.C:224
 Config_.C:225
 Config_.C:226
 Config_.C:227
 Config_.C:228
 Config_.C:229
 Config_.C:230
 Config_.C:231
 Config_.C:232
 Config_.C:233
 Config_.C:234
 Config_.C:235
 Config_.C:236
 Config_.C:237
 Config_.C:238
 Config_.C:239
 Config_.C:240
 Config_.C:241
 Config_.C:242
 Config_.C:243
 Config_.C:244
 Config_.C:245
 Config_.C:246
 Config_.C:247
 Config_.C:248
 Config_.C:249
 Config_.C:250
 Config_.C:251
 Config_.C:252
 Config_.C:253
 Config_.C:254
 Config_.C:255
 Config_.C:256
 Config_.C:257
 Config_.C:258
 Config_.C:259
 Config_.C:260
 Config_.C:261
 Config_.C:262
 Config_.C:263
 Config_.C:264
 Config_.C:265
 Config_.C:266
 Config_.C:267
 Config_.C:268
 Config_.C:269
 Config_.C:270
 Config_.C:271
 Config_.C:272
 Config_.C:273
 Config_.C:274
 Config_.C:275
 Config_.C:276
 Config_.C:277
 Config_.C:278
 Config_.C:279
 Config_.C:280
 Config_.C:281
 Config_.C:282
 Config_.C:283
 Config_.C:284
 Config_.C:285
 Config_.C:286
 Config_.C:287
 Config_.C:288
 Config_.C:289
 Config_.C:290
 Config_.C:291
 Config_.C:292
 Config_.C:293
 Config_.C:294
 Config_.C:295
 Config_.C:296
 Config_.C:297
 Config_.C:298
 Config_.C:299
 Config_.C:300
 Config_.C:301
 Config_.C:302
 Config_.C:303
 Config_.C:304
 Config_.C:305
 Config_.C:306
 Config_.C:307
 Config_.C:308
 Config_.C:309
 Config_.C:310
 Config_.C:311
 Config_.C:312
 Config_.C:313
 Config_.C:314
 Config_.C:315
 Config_.C:316
 Config_.C:317
 Config_.C:318
 Config_.C:319
 Config_.C:320
 Config_.C:321
 Config_.C:322
 Config_.C:323
 Config_.C:324
 Config_.C:325
 Config_.C:326
 Config_.C:327
 Config_.C:328
 Config_.C:329
 Config_.C:330
 Config_.C:331
 Config_.C:332
 Config_.C:333
 Config_.C:334
 Config_.C:335
 Config_.C:336
 Config_.C:337
 Config_.C:338
 Config_.C:339
 Config_.C:340
 Config_.C:341
 Config_.C:342
 Config_.C:343
 Config_.C:344
 Config_.C:345
 Config_.C:346
 Config_.C:347
 Config_.C:348
 Config_.C:349
 Config_.C:350
 Config_.C:351
 Config_.C:352
 Config_.C:353
 Config_.C:354
 Config_.C:355
 Config_.C:356
 Config_.C:357
 Config_.C:358
 Config_.C:359
 Config_.C:360
 Config_.C:361
 Config_.C:362
 Config_.C:363
 Config_.C:364
 Config_.C:365
 Config_.C:366
 Config_.C:367
 Config_.C:368
 Config_.C:369
 Config_.C:370
 Config_.C:371
 Config_.C:372
 Config_.C:373
 Config_.C:374
 Config_.C:375
 Config_.C:376
 Config_.C:377
 Config_.C:378
 Config_.C:379
 Config_.C:380
 Config_.C:381
 Config_.C:382
 Config_.C:383
 Config_.C:384
 Config_.C:385