ROOT logo
//Configuration of simulation

enum PprRun_t 
{
  test50, testdEdx,
    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", "testdEdx",
    "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 PprTrigConf_t
{
    kDefaultPPTrig, kDefaultPbPbTrig
};

const char * pprTrigConfName[] = {
    "p-p","Pb-Pb"
};

// This part for configuration    

//static PprRun_t srun = kPythia6;
static PprRun_t srun = testdEdx;
static PprRad_t srad = kGluonRadiation;
static AliMagF::BMap_t smag = AliMagF::k5kG;
static Int_t    sseed = 0; //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);
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= "<<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();


    switch (srun) {
    case kD0PbPb5500:
      decayer->SetForceDecay(kHadronicD);
      break;
    case kCharmSemiElPbPb5500:
      decayer->SetForceDecay(kSemiElectronic);
      break;
    case kBeautySemiElPbPb5500:
      decayer->SetForceDecay(kSemiElectronic);
      break;
    default:
      decayer->SetForceDecay(kAll);
      break;
    }
    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
    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 == AliMagF::k2kG) {
	comment = comment.Append(" | L3 field 0.2 T");
    } else if (smag == AliMagF::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
    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;
    Int_t   iAD = 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 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");
    }
 
      if (iAD)
    {
        //=================== AD parameters ============================
        AliAD *AD = new AliADv1("AD", "normal AD test");
	AD->SetADAToInstalled(kTRUE);
	AD->SetADCToInstalled(kTRUE);
    }
 
        
}

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 testdEdx:
      {
        // generator for the dEdx simulation study
	gSystem->Getenv("TestdEdxNTracks");
	Int_t ntracks =50;
	AliGenCocktail *generCocktail  = new AliGenCocktail();
        if (gSystem->Getenv("TestdEdxNTracks")) ntracks= atoi(gSystem->Getenv("TestdEdxNTracks"));
	comment = comment.Append(":HIJINGparam test N particles");
	generCocktail->SetMomentumRange(0, 999999.);
	generCocktail->SetPhiRange(0., 360.);
	
	// Set pseudorapidity range from -8 to 8.
	Float_t thmin = EtaToTheta(2);   // theta min. <---> eta max
	Float_t thmax = EtaToTheta(-2);  // theta max. <---> eta min 
	generCocktail->SetThetaRange(thmin,thmax);
	//
	AliGenHIJINGpara *generHijing = new AliGenHIJINGpara(ntracks);	
	generHijing->SetThetaRange(thmin,thmax);
	generCocktail->AddGenerator(generHijing,"Hijing param", 1);
	AliGenBox *generEl = new AliGenBox(0.2*ntracks);
	generEl->SetThetaRange(thmin,thmax);	
	generEl->SetMomentumRange(0.2,1.);
	generEl->SetPart(kElectron);
	generCocktail->AddGenerator(generEl,"GENBOX Electrons for the dEdx study",1);
	gGener=generCocktail;
      }
      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.);
        gener->SetProjectile("p", 1, 1) ; 
        gener->SetTarget("p", 1, 1) ; 
        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.)
        gener->SetProjectile("p", 1, 1) ; 
        gener->SetTarget("p", 1, 1) ; 
        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.)
        gener->SetProjectile("p", 1, 1) ; 
        gener->SetTarget("p", 1, 1) ; 
        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.)
        gener->SetProjectile("p", 1, 1) ; 
        gener->SetTarget("p", 1, 1) ; 
        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.)
        gener->SetProjectile("p", 1, 1) ; 
        gener->SetTarget("p", 1, 1) ; 
        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.)
        gener->SetProjectile("p", 1, 1) ; 
        gener->SetTarget("p", 1, 1) ; 
        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.)
        gener->SetProjectile("p", 1, 1) ; 
        gener->SetTarget("p", 1, 1) ; 
        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.)
        gener->SetProjectile("p", 1, 1) ; 
        gener->SetTarget("p", 1, 1) ; 
        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.)
        gener->SetProjectile("p", 1, 1) ; 
        gener->SetTarget("p", 1, 1) ; 
        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.)
        gener->SetProjectile("p", 1, 1) ; 
        gener->SetTarget("p", 1, 1) ; 
        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.)
        gener->SetProjectile("p", 1, 1) ; 
        gener->SetTarget("p", 1, 1) ; 
        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);
        gener->SetProjectile("A", 208, 82) ; 
        gener->SetTarget("A", 208, 82) ; 
        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);
        gener->SetProjectile("A", 208, 82) ; 
        gener->SetTarget("A", 208, 82) ; 
        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);
        gener->SetProjectile("A", 208, 82) ; 
        gener->SetTarget("A", 208, 82) ; 
        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);
        gener->SetProjectile("A", 208, 82) ; 
        gener->SetTarget("A", 208, 82) ; 
        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);
        gener->SetProjectile("p", 1, 1) ; 
        gener->SetTarget("p", 1, 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);
        gener->SetProjectile("p", 1, 1) ; 
        gener->SetTarget("p", 1, 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;
        gener->SetProjectile("A", 208, 82) ; 
        gener->SetTarget("A", 208, 82) ; 
      }
        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
        gener->SetProjectile("A", 208, 82) ; 
        gener->SetTarget("A", 208, 82) ; 
        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
        gener->SetProjectile("A", 208, 82) ; 
        gener->SetTarget("A", 208, 82) ; 
        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
        gener->SetProjectile("A", 208, 82) ; 
        gener->SetTarget("A", 208, 82) ; 
       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
        gener->SetProjectile("A", 208, 82) ; 
        gener->SetTarget("A", 208, 82) ; 
        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
        gener->SetProjectile("A", 208, 82) ; 
        gener->SetTarget("A", 208, 82) ; 
        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
        gener->SetProjectile("A", 208, 82) ; 
        gener->SetTarget("A", 208, 82) ; 
        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
        gener->SetProjectile("A", 208, 82) ; 
        gener->SetTarget("A", 208, 82) ; 
        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
        gener->SetProjectile("A", 208, 82) ; 
        gener->SetTarget("A", 208, 82) ; 
        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 = kXiMinus;
        AliGenParam *genXi = new AliGenParam(16,lib,particle);
        genXi->SetPtRange(0., 12.);
        genXi->SetYRange(-1.1, 1.1);
        genXi->SetForceDecay(kNoDecay);	
        
        //
        // Omega
        particle = kOmegaMinus;
        AliGenParam *genOmega = new AliGenParam(10,lib,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);
        gener->SetProjectile("A", 208, 82) ; 
        gener->SetTarget("A", 208, 82) ; 
        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 "<<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
 Config.C:386
 Config.C:387
 Config.C:388
 Config.C:389
 Config.C:390
 Config.C:391
 Config.C:392
 Config.C:393
 Config.C:394
 Config.C:395
 Config.C:396
 Config.C:397
 Config.C:398
 Config.C:399
 Config.C:400
 Config.C:401
 Config.C:402
 Config.C:403
 Config.C:404
 Config.C:405
 Config.C:406
 Config.C:407
 Config.C:408
 Config.C:409
 Config.C:410
 Config.C:411
 Config.C:412
 Config.C:413
 Config.C:414
 Config.C:415
 Config.C:416
 Config.C:417
 Config.C:418
 Config.C:419
 Config.C:420
 Config.C:421
 Config.C:422
 Config.C:423
 Config.C:424
 Config.C:425
 Config.C:426
 Config.C:427
 Config.C:428
 Config.C:429
 Config.C:430
 Config.C:431
 Config.C:432
 Config.C:433
 Config.C:434
 Config.C:435
 Config.C:436
 Config.C:437
 Config.C:438
 Config.C:439
 Config.C:440
 Config.C:441
 Config.C:442
 Config.C:443
 Config.C:444
 Config.C:445
 Config.C:446
 Config.C:447
 Config.C:448
 Config.C:449
 Config.C:450
 Config.C:451
 Config.C:452
 Config.C:453
 Config.C:454
 Config.C:455
 Config.C:456
 Config.C:457
 Config.C:458
 Config.C:459
 Config.C:460
 Config.C:461
 Config.C:462
 Config.C:463
 Config.C:464
 Config.C:465
 Config.C:466
 Config.C:467
 Config.C:468
 Config.C:469
 Config.C:470
 Config.C:471
 Config.C:472
 Config.C:473
 Config.C:474
 Config.C:475
 Config.C:476
 Config.C:477
 Config.C:478
 Config.C:479
 Config.C:480
 Config.C:481
 Config.C:482
 Config.C:483
 Config.C:484
 Config.C:485
 Config.C:486
 Config.C:487
 Config.C:488
 Config.C:489
 Config.C:490
 Config.C:491
 Config.C:492
 Config.C:493
 Config.C:494
 Config.C:495
 Config.C:496
 Config.C:497
 Config.C:498
 Config.C:499
 Config.C:500
 Config.C:501
 Config.C:502
 Config.C:503
 Config.C:504
 Config.C:505
 Config.C:506
 Config.C:507
 Config.C:508
 Config.C:509
 Config.C:510
 Config.C:511
 Config.C:512
 Config.C:513
 Config.C:514
 Config.C:515
 Config.C:516
 Config.C:517
 Config.C:518
 Config.C:519
 Config.C:520
 Config.C:521
 Config.C:522
 Config.C:523
 Config.C:524
 Config.C:525
 Config.C:526
 Config.C:527
 Config.C:528
 Config.C:529
 Config.C:530
 Config.C:531
 Config.C:532
 Config.C:533
 Config.C:534
 Config.C:535
 Config.C:536
 Config.C:537
 Config.C:538
 Config.C:539
 Config.C:540
 Config.C:541
 Config.C:542
 Config.C:543
 Config.C:544
 Config.C:545
 Config.C:546
 Config.C:547
 Config.C:548
 Config.C:549
 Config.C:550
 Config.C:551
 Config.C:552
 Config.C:553
 Config.C:554
 Config.C:555
 Config.C:556
 Config.C:557
 Config.C:558
 Config.C:559
 Config.C:560
 Config.C:561
 Config.C:562
 Config.C:563
 Config.C:564
 Config.C:565
 Config.C:566
 Config.C:567
 Config.C:568
 Config.C:569
 Config.C:570
 Config.C:571
 Config.C:572
 Config.C:573
 Config.C:574
 Config.C:575
 Config.C:576
 Config.C:577
 Config.C:578
 Config.C:579
 Config.C:580
 Config.C:581
 Config.C:582
 Config.C:583
 Config.C:584
 Config.C:585
 Config.C:586
 Config.C:587
 Config.C:588
 Config.C:589
 Config.C:590
 Config.C:591
 Config.C:592
 Config.C:593
 Config.C:594
 Config.C:595
 Config.C:596
 Config.C:597
 Config.C:598
 Config.C:599
 Config.C:600
 Config.C:601
 Config.C:602
 Config.C:603
 Config.C:604
 Config.C:605
 Config.C:606
 Config.C:607
 Config.C:608
 Config.C:609
 Config.C:610
 Config.C:611
 Config.C:612
 Config.C:613
 Config.C:614
 Config.C:615
 Config.C:616
 Config.C:617
 Config.C:618
 Config.C:619
 Config.C:620
 Config.C:621
 Config.C:622
 Config.C:623
 Config.C:624
 Config.C:625
 Config.C:626
 Config.C:627
 Config.C:628
 Config.C:629
 Config.C:630
 Config.C:631
 Config.C:632
 Config.C:633
 Config.C:634
 Config.C:635
 Config.C:636
 Config.C:637
 Config.C:638
 Config.C:639
 Config.C:640
 Config.C:641
 Config.C:642
 Config.C:643
 Config.C:644
 Config.C:645
 Config.C:646
 Config.C:647
 Config.C:648
 Config.C:649
 Config.C:650
 Config.C:651
 Config.C:652
 Config.C:653
 Config.C:654
 Config.C:655
 Config.C:656
 Config.C:657
 Config.C:658
 Config.C:659
 Config.C:660
 Config.C:661
 Config.C:662
 Config.C:663
 Config.C:664
 Config.C:665
 Config.C:666
 Config.C:667
 Config.C:668
 Config.C:669
 Config.C:670
 Config.C:671
 Config.C:672
 Config.C:673
 Config.C:674
 Config.C:675
 Config.C:676
 Config.C:677
 Config.C:678
 Config.C:679
 Config.C:680
 Config.C:681
 Config.C:682
 Config.C:683
 Config.C:684
 Config.C:685
 Config.C:686
 Config.C:687
 Config.C:688
 Config.C:689
 Config.C:690
 Config.C:691
 Config.C:692
 Config.C:693
 Config.C:694
 Config.C:695
 Config.C:696
 Config.C:697
 Config.C:698
 Config.C:699
 Config.C:700
 Config.C:701
 Config.C:702
 Config.C:703
 Config.C:704
 Config.C:705
 Config.C:706
 Config.C:707
 Config.C:708
 Config.C:709
 Config.C:710
 Config.C:711
 Config.C:712
 Config.C:713
 Config.C:714
 Config.C:715
 Config.C:716
 Config.C:717
 Config.C:718
 Config.C:719
 Config.C:720
 Config.C:721
 Config.C:722
 Config.C:723
 Config.C:724
 Config.C:725
 Config.C:726
 Config.C:727
 Config.C:728
 Config.C:729
 Config.C:730
 Config.C:731
 Config.C:732
 Config.C:733
 Config.C:734
 Config.C:735
 Config.C:736
 Config.C:737
 Config.C:738
 Config.C:739
 Config.C:740
 Config.C:741
 Config.C:742
 Config.C:743
 Config.C:744
 Config.C:745
 Config.C:746
 Config.C:747
 Config.C:748
 Config.C:749
 Config.C:750
 Config.C:751
 Config.C:752
 Config.C:753
 Config.C:754
 Config.C:755
 Config.C:756
 Config.C:757
 Config.C:758
 Config.C:759
 Config.C:760
 Config.C:761
 Config.C:762
 Config.C:763
 Config.C:764
 Config.C:765
 Config.C:766
 Config.C:767
 Config.C:768
 Config.C:769
 Config.C:770
 Config.C:771
 Config.C:772
 Config.C:773
 Config.C:774
 Config.C:775
 Config.C:776
 Config.C:777
 Config.C:778
 Config.C:779
 Config.C:780
 Config.C:781
 Config.C:782
 Config.C:783
 Config.C:784
 Config.C:785
 Config.C:786
 Config.C:787
 Config.C:788
 Config.C:789
 Config.C:790
 Config.C:791
 Config.C:792
 Config.C:793
 Config.C:794
 Config.C:795
 Config.C:796
 Config.C:797
 Config.C:798
 Config.C:799
 Config.C:800
 Config.C:801
 Config.C:802
 Config.C:803
 Config.C:804
 Config.C:805
 Config.C:806
 Config.C:807
 Config.C:808
 Config.C:809
 Config.C:810
 Config.C:811
 Config.C:812
 Config.C:813
 Config.C:814
 Config.C:815
 Config.C:816
 Config.C:817
 Config.C:818
 Config.C:819
 Config.C:820
 Config.C:821
 Config.C:822
 Config.C:823
 Config.C:824
 Config.C:825
 Config.C:826
 Config.C:827
 Config.C:828
 Config.C:829
 Config.C:830
 Config.C:831
 Config.C:832
 Config.C:833
 Config.C:834
 Config.C:835
 Config.C:836
 Config.C:837
 Config.C:838
 Config.C:839
 Config.C:840
 Config.C:841
 Config.C:842
 Config.C:843
 Config.C:844
 Config.C:845
 Config.C:846
 Config.C:847
 Config.C:848
 Config.C:849
 Config.C:850
 Config.C:851
 Config.C:852
 Config.C:853
 Config.C:854
 Config.C:855
 Config.C:856
 Config.C:857
 Config.C:858
 Config.C:859
 Config.C:860
 Config.C:861
 Config.C:862
 Config.C:863
 Config.C:864
 Config.C:865
 Config.C:866
 Config.C:867
 Config.C:868
 Config.C:869
 Config.C:870
 Config.C:871
 Config.C:872
 Config.C:873
 Config.C:874
 Config.C:875
 Config.C:876
 Config.C:877
 Config.C:878
 Config.C:879
 Config.C:880
 Config.C:881
 Config.C:882
 Config.C:883
 Config.C:884
 Config.C:885
 Config.C:886
 Config.C:887
 Config.C:888
 Config.C:889
 Config.C:890
 Config.C:891
 Config.C:892
 Config.C:893
 Config.C:894
 Config.C:895
 Config.C:896
 Config.C:897
 Config.C:898
 Config.C:899
 Config.C:900
 Config.C:901
 Config.C:902
 Config.C:903
 Config.C:904
 Config.C:905
 Config.C:906
 Config.C:907
 Config.C:908
 Config.C:909
 Config.C:910
 Config.C:911
 Config.C:912
 Config.C:913
 Config.C:914
 Config.C:915
 Config.C:916
 Config.C:917
 Config.C:918
 Config.C:919
 Config.C:920
 Config.C:921
 Config.C:922
 Config.C:923
 Config.C:924
 Config.C:925
 Config.C:926
 Config.C:927
 Config.C:928
 Config.C:929
 Config.C:930
 Config.C:931
 Config.C:932
 Config.C:933
 Config.C:934
 Config.C:935
 Config.C:936
 Config.C:937
 Config.C:938
 Config.C:939
 Config.C:940
 Config.C:941
 Config.C:942
 Config.C:943
 Config.C:944
 Config.C:945
 Config.C:946
 Config.C:947
 Config.C:948
 Config.C:949
 Config.C:950
 Config.C:951
 Config.C:952
 Config.C:953
 Config.C:954
 Config.C:955
 Config.C:956
 Config.C:957
 Config.C:958
 Config.C:959
 Config.C:960
 Config.C:961
 Config.C:962
 Config.C:963
 Config.C:964
 Config.C:965
 Config.C:966
 Config.C:967
 Config.C:968
 Config.C:969
 Config.C:970
 Config.C:971
 Config.C:972
 Config.C:973
 Config.C:974
 Config.C:975
 Config.C:976
 Config.C:977
 Config.C:978
 Config.C:979
 Config.C:980
 Config.C:981
 Config.C:982
 Config.C:983
 Config.C:984
 Config.C:985
 Config.C:986
 Config.C:987
 Config.C:988
 Config.C:989
 Config.C:990
 Config.C:991
 Config.C:992
 Config.C:993
 Config.C:994
 Config.C:995
 Config.C:996
 Config.C:997
 Config.C:998
 Config.C:999
 Config.C:1000
 Config.C:1001
 Config.C:1002
 Config.C:1003
 Config.C:1004
 Config.C:1005
 Config.C:1006
 Config.C:1007
 Config.C:1008
 Config.C:1009
 Config.C:1010
 Config.C:1011
 Config.C:1012
 Config.C:1013
 Config.C:1014
 Config.C:1015
 Config.C:1016
 Config.C:1017
 Config.C:1018
 Config.C:1019
 Config.C:1020
 Config.C:1021
 Config.C:1022
 Config.C:1023
 Config.C:1024
 Config.C:1025
 Config.C:1026
 Config.C:1027
 Config.C:1028
 Config.C:1029
 Config.C:1030
 Config.C:1031
 Config.C:1032
 Config.C:1033
 Config.C:1034
 Config.C:1035
 Config.C:1036
 Config.C:1037
 Config.C:1038
 Config.C:1039
 Config.C:1040
 Config.C:1041
 Config.C:1042
 Config.C:1043
 Config.C:1044
 Config.C:1045
 Config.C:1046
 Config.C:1047
 Config.C:1048
 Config.C:1049
 Config.C:1050
 Config.C:1051
 Config.C:1052
 Config.C:1053
 Config.C:1054
 Config.C:1055
 Config.C:1056
 Config.C:1057
 Config.C:1058
 Config.C:1059
 Config.C:1060
 Config.C:1061
 Config.C:1062
 Config.C:1063
 Config.C:1064
 Config.C:1065
 Config.C:1066
 Config.C:1067
 Config.C:1068
 Config.C:1069
 Config.C:1070
 Config.C:1071
 Config.C:1072
 Config.C:1073
 Config.C:1074
 Config.C:1075
 Config.C:1076
 Config.C:1077
 Config.C:1078
 Config.C:1079
 Config.C:1080
 Config.C:1081
 Config.C:1082
 Config.C:1083
 Config.C:1084
 Config.C:1085
 Config.C:1086
 Config.C:1087
 Config.C:1088
 Config.C:1089
 Config.C:1090
 Config.C:1091
 Config.C:1092
 Config.C:1093
 Config.C:1094
 Config.C:1095
 Config.C:1096
 Config.C:1097
 Config.C:1098
 Config.C:1099
 Config.C:1100
 Config.C:1101
 Config.C:1102
 Config.C:1103
 Config.C:1104
 Config.C:1105
 Config.C:1106
 Config.C:1107
 Config.C:1108
 Config.C:1109
 Config.C:1110
 Config.C:1111
 Config.C:1112
 Config.C:1113
 Config.C:1114
 Config.C:1115
 Config.C:1116
 Config.C:1117
 Config.C:1118
 Config.C:1119
 Config.C:1120
 Config.C:1121
 Config.C:1122
 Config.C:1123
 Config.C:1124
 Config.C:1125
 Config.C:1126
 Config.C:1127
 Config.C:1128
 Config.C:1129
 Config.C:1130
 Config.C:1131
 Config.C:1132
 Config.C:1133
 Config.C:1134
 Config.C:1135
 Config.C:1136
 Config.C:1137
 Config.C:1138
 Config.C:1139
 Config.C:1140
 Config.C:1141
 Config.C:1142
 Config.C:1143
 Config.C:1144
 Config.C:1145
 Config.C:1146
 Config.C:1147
 Config.C:1148
 Config.C:1149
 Config.C:1150
 Config.C:1151
 Config.C:1152
 Config.C:1153
 Config.C:1154
 Config.C:1155
 Config.C:1156
 Config.C:1157
 Config.C:1158
 Config.C:1159
 Config.C:1160
 Config.C:1161
 Config.C:1162
 Config.C:1163
 Config.C:1164
 Config.C:1165
 Config.C:1166
 Config.C:1167
 Config.C:1168
 Config.C:1169
 Config.C:1170
 Config.C:1171
 Config.C:1172
 Config.C:1173
 Config.C:1174
 Config.C:1175
 Config.C:1176
 Config.C:1177
 Config.C:1178
 Config.C:1179
 Config.C:1180
 Config.C:1181
 Config.C:1182
 Config.C:1183
 Config.C:1184
 Config.C:1185
 Config.C:1186
 Config.C:1187
 Config.C:1188
 Config.C:1189
 Config.C:1190
 Config.C:1191
 Config.C:1192
 Config.C:1193
 Config.C:1194
 Config.C:1195
 Config.C:1196
 Config.C:1197
 Config.C:1198
 Config.C:1199
 Config.C:1200
 Config.C:1201
 Config.C:1202
 Config.C:1203
 Config.C:1204
 Config.C:1205
 Config.C:1206
 Config.C:1207
 Config.C:1208
 Config.C:1209
 Config.C:1210
 Config.C:1211
 Config.C:1212
 Config.C:1213
 Config.C:1214
 Config.C:1215
 Config.C:1216
 Config.C:1217
 Config.C:1218
 Config.C:1219
 Config.C:1220
 Config.C:1221
 Config.C:1222
 Config.C:1223
 Config.C:1224
 Config.C:1225
 Config.C:1226
 Config.C:1227
 Config.C:1228
 Config.C:1229
 Config.C:1230
 Config.C:1231
 Config.C:1232
 Config.C:1233
 Config.C:1234
 Config.C:1235
 Config.C:1236
 Config.C:1237
 Config.C:1238
 Config.C:1239
 Config.C:1240
 Config.C:1241
 Config.C:1242
 Config.C:1243
 Config.C:1244
 Config.C:1245
 Config.C:1246
 Config.C:1247
 Config.C:1248
 Config.C:1249
 Config.C:1250
 Config.C:1251
 Config.C:1252
 Config.C:1253
 Config.C:1254
 Config.C:1255
 Config.C:1256
 Config.C:1257
 Config.C:1258
 Config.C:1259
 Config.C:1260
 Config.C:1261
 Config.C:1262
 Config.C:1263
 Config.C:1264
 Config.C:1265
 Config.C:1266
 Config.C:1267
 Config.C:1268
 Config.C:1269
 Config.C:1270
 Config.C:1271
 Config.C:1272
 Config.C:1273
 Config.C:1274
 Config.C:1275
 Config.C:1276
 Config.C:1277
 Config.C:1278
 Config.C:1279
 Config.C:1280
 Config.C:1281
 Config.C:1282
 Config.C:1283
 Config.C:1284
 Config.C:1285
 Config.C:1286
 Config.C:1287
 Config.C:1288
 Config.C:1289
 Config.C:1290
 Config.C:1291
 Config.C:1292
 Config.C:1293
 Config.C:1294
 Config.C:1295
 Config.C:1296
 Config.C:1297
 Config.C:1298
 Config.C:1299
 Config.C:1300
 Config.C:1301
 Config.C:1302
 Config.C:1303
 Config.C:1304
 Config.C:1305
 Config.C:1306
 Config.C:1307
 Config.C:1308
 Config.C:1309
 Config.C:1310
 Config.C:1311
 Config.C:1312
 Config.C:1313
 Config.C:1314
 Config.C:1315
 Config.C:1316
 Config.C:1317
 Config.C:1318
 Config.C:1319
 Config.C:1320
 Config.C:1321
 Config.C:1322
 Config.C:1323
 Config.C:1324
 Config.C:1325
 Config.C:1326
 Config.C:1327
 Config.C:1328
 Config.C:1329
 Config.C:1330
 Config.C:1331
 Config.C:1332
 Config.C:1333
 Config.C:1334
 Config.C:1335
 Config.C:1336
 Config.C:1337
 Config.C:1338
 Config.C:1339
 Config.C:1340
 Config.C:1341
 Config.C:1342
 Config.C:1343
 Config.C:1344
 Config.C:1345
 Config.C:1346
 Config.C:1347
 Config.C:1348
 Config.C:1349
 Config.C:1350
 Config.C:1351
 Config.C:1352
 Config.C:1353
 Config.C:1354
 Config.C:1355
 Config.C:1356
 Config.C:1357
 Config.C:1358
 Config.C:1359
 Config.C:1360
 Config.C:1361
 Config.C:1362
 Config.C:1363
 Config.C:1364
 Config.C:1365
 Config.C:1366
 Config.C:1367
 Config.C:1368
 Config.C:1369
 Config.C:1370
 Config.C:1371
 Config.C:1372
 Config.C:1373
 Config.C:1374
 Config.C:1375
 Config.C:1376
 Config.C:1377
 Config.C:1378
 Config.C:1379
 Config.C:1380
 Config.C:1381
 Config.C:1382
 Config.C:1383
 Config.C:1384
 Config.C:1385
 Config.C:1386
 Config.C:1387
 Config.C:1388
 Config.C:1389
 Config.C:1390
 Config.C:1391
 Config.C:1392
 Config.C:1393
 Config.C:1394
 Config.C:1395
 Config.C:1396
 Config.C:1397
 Config.C:1398
 Config.C:1399
 Config.C:1400
 Config.C:1401
 Config.C:1402
 Config.C:1403
 Config.C:1404
 Config.C:1405
 Config.C:1406
 Config.C:1407
 Config.C:1408
 Config.C:1409
 Config.C:1410
 Config.C:1411
 Config.C:1412
 Config.C:1413
 Config.C:1414
 Config.C:1415
 Config.C:1416
 Config.C:1417
 Config.C:1418
 Config.C:1419
 Config.C:1420
 Config.C:1421
 Config.C:1422
 Config.C:1423
 Config.C:1424
 Config.C:1425
 Config.C:1426
 Config.C:1427
 Config.C:1428
 Config.C:1429
 Config.C:1430
 Config.C:1431
 Config.C:1432
 Config.C:1433
 Config.C:1434
 Config.C:1435
 Config.C:1436
 Config.C:1437
 Config.C:1438
 Config.C:1439
 Config.C:1440
 Config.C:1441
 Config.C:1442
 Config.C:1443
 Config.C:1444
 Config.C:1445
 Config.C:1446
 Config.C:1447
 Config.C:1448
 Config.C:1449
 Config.C:1450
 Config.C:1451
 Config.C:1452
 Config.C:1453
 Config.C:1454
 Config.C:1455
 Config.C:1456
 Config.C:1457
 Config.C:1458
 Config.C:1459
 Config.C:1460
 Config.C:1461
 Config.C:1462
 Config.C:1463
 Config.C:1464
 Config.C:1465
 Config.C:1466
 Config.C:1467
 Config.C:1468
 Config.C:1469
 Config.C:1470
 Config.C:1471
 Config.C:1472
 Config.C:1473
 Config.C:1474
 Config.C:1475
 Config.C:1476
 Config.C:1477
 Config.C:1478
 Config.C:1479
 Config.C:1480
 Config.C:1481
 Config.C:1482
 Config.C:1483
 Config.C:1484
 Config.C:1485
 Config.C:1486
 Config.C:1487
 Config.C:1488
 Config.C:1489
 Config.C:1490
 Config.C:1491
 Config.C:1492
 Config.C:1493
 Config.C:1494
 Config.C:1495
 Config.C:1496
 Config.C:1497
 Config.C:1498
 Config.C:1499
 Config.C:1500
 Config.C:1501
 Config.C:1502
 Config.C:1503
 Config.C:1504
 Config.C:1505
 Config.C:1506
 Config.C:1507
 Config.C:1508
 Config.C:1509
 Config.C:1510
 Config.C:1511
 Config.C:1512
 Config.C:1513
 Config.C:1514
 Config.C:1515
 Config.C:1516
 Config.C:1517
 Config.C:1518
 Config.C:1519
 Config.C:1520
 Config.C:1521
 Config.C:1522
 Config.C:1523
 Config.C:1524
 Config.C:1525
 Config.C:1526
 Config.C:1527
 Config.C:1528
 Config.C:1529
 Config.C:1530
 Config.C:1531
 Config.C:1532
 Config.C:1533
 Config.C:1534
 Config.C:1535
 Config.C:1536
 Config.C:1537
 Config.C:1538
 Config.C:1539
 Config.C:1540
 Config.C:1541
 Config.C:1542
 Config.C:1543
 Config.C:1544
 Config.C:1545
 Config.C:1546
 Config.C:1547
 Config.C:1548
 Config.C:1549
 Config.C:1550
 Config.C:1551
 Config.C:1552
 Config.C:1553
 Config.C:1554
 Config.C:1555
 Config.C:1556
 Config.C:1557
 Config.C:1558
 Config.C:1559
 Config.C:1560
 Config.C:1561
 Config.C:1562
 Config.C:1563
 Config.C:1564
 Config.C:1565
 Config.C:1566
 Config.C:1567
 Config.C:1568
 Config.C:1569
 Config.C:1570
 Config.C:1571
 Config.C:1572
 Config.C:1573
 Config.C:1574
 Config.C:1575
 Config.C:1576
 Config.C:1577
 Config.C:1578
 Config.C:1579