]> git.uio.no Git - u/mrichter/AliRoot.git/blame - ACORDE/macros/Config.C
The present commit corresponds to an important change in the way the
[u/mrichter/AliRoot.git] / ACORDE / macros / Config.C
CommitLineData
19f796ed 1//
19f796ed 2// Configuration for the Physics Data Challenge 2006
19f796ed 3//
19f796ed 4// One can use the configuration macro in compiled mode by
19f796ed 5// root [0] gSystem->Load("libgeant321");
19f796ed 6// root [0] gSystem->SetIncludePath("-I$ROOTSYS/include -I$ALICE_ROOT/include\
19f796ed 7// -I$ALICE_ROOT -I$ALICE/geant3/TGeant3");
19f796ed 8// root [0] .x grun.C(1,"Config_PDC06.C++")
19f796ed 9#if !defined(__CINT__) || defined(__MAKECINT__)
19f796ed 10#include <Riostream.h>
19f796ed 11#include <TRandom.h>
19f796ed 12#include <TDatime.h>
19f796ed 13#include <TSystem.h>
19f796ed 14#include <TVirtualMC.h>
19f796ed 15#include <TGeant3TGeo.h>
19f796ed 16#include "EVGEN/AliGenCocktail.h"
19f796ed 17#include "EVGEN/AliGenParam.h"
19f796ed 18#include "EVGEN/AliGenMUONlib.h"
19f796ed 19#include "STEER/AliRunLoader.h"
19f796ed 20#include "STEER/AliRun.h"
19f796ed 21#include "STEER/AliConfig.h"
19f796ed 22#include "PYTHIA6/AliDecayerPythia.h"
19f796ed 23#include "PYTHIA6/AliGenPythia.h"
f7a1cc68 24#include "STEER/AliMagF.h"
19f796ed 25#include "STRUCT/AliBODY.h"
19f796ed 26#include "STRUCT/AliMAG.h"
19f796ed 27#include "STRUCT/AliABSOv0.h"
19f796ed 28#include "STRUCT/AliDIPOv2.h"
19f796ed 29#include "STRUCT/AliHALL.h"
19f796ed 30#include "STRUCT/AliFRAMEv2.h"
19f796ed 31#include "STRUCT/AliSHILv2.h"
19f796ed 32#include "STRUCT/AliPIPEv0.h"
19f796ed 33#include "ITS/AliITSgeom.h"
19f796ed 34#include "ITS/AliITSvPPRasymmFMD.h"
19f796ed 35#include "TPC/AliTPCv2.h"
19f796ed 36#include "TOF/AliTOFv5T0.h"
19f796ed 37#include "HMPID/AliHMPIDv1.h"
19f796ed 38#include "ZDC/AliZDCv2.h"
19f796ed 39#include "TRD/AliTRDv1.h"
19f796ed 40#include "FMD/AliFMDv1.h"
19f796ed 41#include "MUON/AliMUONv1.h"
19f796ed 42#include "PHOS/AliPHOSv1.h"
19f796ed 43#include "PMD/AliPMDv1.h"
19f796ed 44#include "T0/AliT0v1.h"
19f796ed 45#include "EMCAL/AliEMCALv2.h"
19f796ed 46#include "CRT/AliCRTv0.h"
19f796ed 47#include "VZERO/AliVZEROv7.h"
19f796ed 48#endif
19f796ed 49//--- Trigger config ---
19f796ed 50enum TrigConf_t
19f796ed 51{
19f796ed 52 kDefaultPPTrig, kDefaultPbPbTrig
19f796ed 53};
19f796ed 54const char * TrigConfName[] = {
19f796ed 55 "p-p","Pb-Pb"
19f796ed 56};
19f796ed 57//--- Decay Mode ---
19f796ed 58enum DecayHvFl_t
19f796ed 59{
19f796ed 60 kNature, kHadr, kSemiEl, kSemiMu
19f796ed 61};
19f796ed 62//--- Rapidity Cut ---
19f796ed 63enum YCut_t
19f796ed 64{
19f796ed 65 kFull, kBarrel, kMuonArm
19f796ed 66};
19f796ed 67void ProcessEnvironmentVars();
19f796ed 68// This part for configuration
19f796ed 69static DecayHvFl_t decHvFl = kNature;
19f796ed 70static YCut_t ycut = kFull;
f7a1cc68 71static AliMagF::BMap_t mag = AliMagF::k5kG;
19f796ed 72static TrigConf_t trig = kDefaultPPTrig;
19f796ed 73//========================//
19f796ed 74// Set Random Number seed //
19f796ed 75//========================//
19f796ed 76TDatime dt;
19f796ed 77static UInt_t seed = dt.Get();
19f796ed 78// Comment line
19f796ed 79static TString comment;
19f796ed 80void Config()
19f796ed 81{
19f796ed 82
19f796ed 83 // Get settings from environment variables
19f796ed 84 ProcessEnvironmentVars();
19f796ed 85 gRandom->SetSeed(seed);
19f796ed 86 // gRandom->SetSeed(12345);
19f796ed 87 cerr<<"Seed for random number generation= "<<seed<<endl;
19f796ed 88 // libraries required by geant321
19f796ed 89#if defined(__CINT__)
19f796ed 90 gSystem->Load("libgeant321");
19f796ed 91#endif
19f796ed 92 new TGeant3TGeo("C++ Interface to Geant3");
19f796ed 93 //=======================================================================
19f796ed 94 // Create the output file
19f796ed 95
19f796ed 96 AliRunLoader* rl=0x0;
19f796ed 97 cout<<"Config.C: Creating Run Loader ..."<<endl;
19f796ed 98 rl = AliRunLoader::Open("galice.root",
19f796ed 99 AliConfig::GetDefaultEventFolderName(),
19f796ed 100 "recreate");
19f796ed 101 if (rl == 0x0)
19f796ed 102 {
19f796ed 103 gAlice->Fatal("Config.C","Can not instatiate the Run Loader");
19f796ed 104 return;
19f796ed 105 }
19f796ed 106 rl->SetCompressionLevel(2);
19f796ed 107 rl->SetNumberOfEventsPerFile(1000);
19f796ed 108 gAlice->SetRunLoader(rl);
19f796ed 109
19f796ed 110 // Set the trigger configuration
19f796ed 111 gAlice->SetTriggerDescriptor(TrigConfName[trig]);
19f796ed 112 cout<<"Trigger configuration is set to "<<TrigConfName[trig]<<endl;
19f796ed 113 //
19f796ed 114 //=======================================================================
19f796ed 115 // ************* STEERING parameters FOR ALICE SIMULATION **************
19f796ed 116 // --- Specify event type to be tracked through the ALICE setup
19f796ed 117 // --- All positions are in cm, angles in degrees, and P and E in GeV
19f796ed 118 gMC->SetProcess("DCAY",1);
19f796ed 119 gMC->SetProcess("PAIR",1);
19f796ed 120 gMC->SetProcess("COMP",1);
19f796ed 121 gMC->SetProcess("PHOT",1);
19f796ed 122 gMC->SetProcess("PFIS",0);
19f796ed 123 gMC->SetProcess("DRAY",0);
19f796ed 124 gMC->SetProcess("ANNI",1);
19f796ed 125 gMC->SetProcess("BREM",1);
19f796ed 126 gMC->SetProcess("MUNU",1);
19f796ed 127 gMC->SetProcess("CKOV",1);
19f796ed 128 gMC->SetProcess("HADR",1);
19f796ed 129 gMC->SetProcess("LOSS",2);
19f796ed 130 gMC->SetProcess("MULS",1);
19f796ed 131 gMC->SetProcess("RAYL",1);
19f796ed 132 Float_t cut = 1.e-3; // 1MeV cut by default
19f796ed 133 Float_t tofmax = 1.e10;
19f796ed 134 gMC->SetCut("CUTGAM", cut);
19f796ed 135 gMC->SetCut("CUTELE", cut);
19f796ed 136 gMC->SetCut("CUTNEU", cut);
19f796ed 137 gMC->SetCut("CUTHAD", cut);
19f796ed 138 gMC->SetCut("CUTMUO", cut);
19f796ed 139 gMC->SetCut("BCUTE", cut);
19f796ed 140 gMC->SetCut("BCUTM", cut);
19f796ed 141 gMC->SetCut("DCUTE", cut);
19f796ed 142 gMC->SetCut("DCUTM", cut);
19f796ed 143 gMC->SetCut("PPCUTM", cut);
19f796ed 144 gMC->SetCut("TOFMAX", tofmax);
19f796ed 145 // ((TGeant3 *) gMC)->SetSWIT(2,2);
19f796ed 146 // ((TGeant3 *) gMC)->SetDEBU(1,999,1);
19f796ed 147 // Set External decayer //
19f796ed 148 //======================//
19f796ed 149 TVirtualMCDecayer* decayer = new AliDecayerPythia();
19f796ed 150 // DECAYS
19f796ed 151 //
19f796ed 152 switch(decHvFl) {
19f796ed 153 case kNature:
19f796ed 154 decayer->SetForceDecay(kAll);
19f796ed 155 break;
19f796ed 156 case kHadr:
19f796ed 157 decayer->SetForceDecay(kHadronicD);
19f796ed 158 break;
19f796ed 159 case kSemiEl:
19f796ed 160 decayer->SetForceDecay(kSemiElectronic);
19f796ed 161 break;
19f796ed 162 case kSemiMu:
19f796ed 163 decayer->SetForceDecay(kSemiMuonic);
19f796ed 164 break;
19f796ed 165 }
19f796ed 166 decayer->Init();
19f796ed 167 gMC->SetExternalDecayer(decayer);
19f796ed 168 //=========================//
19f796ed 169 // Generator Configuration //
19f796ed 170 //=========================//
19f796ed 171 AliGenBox* gener = new AliGenBox();
19f796ed 172 gener->SetThetaRange(45,135);
19f796ed 173 gener->SetPhiRange(30,150);
19f796ed 174 gener->SetMomentumRange(9.8,10.2);
19f796ed 175 gener->SetPart(kMuonMinus);
19f796ed 176 gener->SetNumberParticles(20);
19f796ed 177 gener->Init();
19f796ed 178 // FIELD
19f796ed 179 //
f7a1cc68 180 if (mag == AliMagF::k2kG) {
19f796ed 181 comment = comment.Append(" | L3 field 0.2 T");
f7a1cc68 182 } else if (mag == AliMagF::k5kG) {
19f796ed 183 comment = comment.Append(" | L3 field 0.5 T");
19f796ed 184 }
19f796ed 185 printf("\n \n Comment: %s \n \n", comment.Data());
19f796ed 186
f7a1cc68 187 AliMagF* field = new AliMagF("Maps","Maps",2,1.,1., 10.,mag);
19f796ed 188 field->SetL3ConstField(0); //Using const. field in the barrel
f7a1cc68 189 TGeoGlobalMagField::Instance()->SetField(field);
19f796ed 190
191 rl->CdGAFile();
192
19f796ed 193 Int_t iABSO = 0;
19f796ed 194 Int_t iACORDE = 1;
19f796ed 195 Int_t iDIPO = 0;
19f796ed 196 Int_t iEMCAL = 0;
19f796ed 197 Int_t iFMD = 0;
19f796ed 198 Int_t iFRAME = 0;
19f796ed 199 Int_t iHALL = 0;
19f796ed 200 Int_t iITS = 0;
19f796ed 201 Int_t iMAG = 0;
19f796ed 202 Int_t iMUON = 0;
19f796ed 203 Int_t iPHOS = 0;
19f796ed 204 Int_t iPIPE = 0;
19f796ed 205 Int_t iPMD = 0;
19f796ed 206 Int_t iHMPID = 0;
19f796ed 207 Int_t iSHIL = 0;
19f796ed 208 Int_t iT0 = 0;
19f796ed 209 Int_t iTOF = 0;
19f796ed 210 Int_t iTPC = 0;
19f796ed 211 Int_t iTRD = 0;
19f796ed 212 Int_t iVZERO = 0;
19f796ed 213 Int_t iZDC = 0;
19f796ed 214
19f796ed 215 //=================== Alice BODY parameters =============================
19f796ed 216 AliBODY *BODY = new AliBODY("BODY", "Alice envelop");
19f796ed 217 if (iMAG)
19f796ed 218 {
19f796ed 219 //=================== MAG parameters ============================
19f796ed 220 // --- Start with Magnet since detector layouts may be depending ---
19f796ed 221 // --- on the selected Magnet dimensions ---
19f796ed 222 AliMAG *MAG = new AliMAG("MAG", "Magnet");
19f796ed 223 }
19f796ed 224 if (iABSO)
19f796ed 225 {
19f796ed 226 //=================== ABSO parameters ============================
19f796ed 227 AliABSO *ABSO = new AliABSOv0("ABSO", "Muon Absorber");
19f796ed 228 }
19f796ed 229 if (iDIPO)
f7a1cc68 230 {
231 //=================== DIPO parameters ============================
19f796ed 232 AliDIPO *DIPO = new AliDIPOv2("DIPO", "Dipole version 2");
19f796ed 233 }
19f796ed 234 if (iHALL)
19f796ed 235 {
19f796ed 236 //=================== HALL parameters ============================
19f796ed 237 AliHALL *HALL = new AliHALL("HALL", "Alice Hall");
19f796ed 238 }
19f796ed 239 if (iFRAME)
19f796ed 240 {
19f796ed 241 //=================== FRAME parameters ============================
19f796ed 242 AliFRAMEv2 *FRAME = new AliFRAMEv2("FRAME", "Space Frame");
19f796ed 243 }
19f796ed 244 if (iSHIL)
19f796ed 245 {
19f796ed 246 //=================== SHIL parameters ============================
19f796ed 247 AliSHIL *SHIL = new AliSHILv2("SHIL", "Shielding Version 2");
19f796ed 248 }
19f796ed 249 if (iPIPE)
19f796ed 250 {
19f796ed 251 //=================== PIPE parameters ============================
19f796ed 252 AliPIPE *PIPE = new AliPIPEv0("PIPE", "Beam Pipe");
19f796ed 253 }
19f796ed 254
19f796ed 255 if(iITS) {
19f796ed 256 //=================== ITS parameters ============================
19f796ed 257 //
19f796ed 258 // As the innermost detector in ALICE, the Inner Tracking System "impacts" on
19f796ed 259 // almost all other detectors. This involves the fact that the ITS geometry
19f796ed 260 // still has several options to be followed in parallel in order to determine
19f796ed 261 // the best set-up which minimizes the induced background. All the geometries
19f796ed 262 // available to date are described in the following. Read carefully the comments
19f796ed 263 // and use the default version (the only one uncommented) unless you are making
19f796ed 264 // comparisons and you know what you are doing. In this case just uncomment the
19f796ed 265 // ITS geometry you want to use and run Aliroot.
19f796ed 266 //
19f796ed 267 // Detailed geometries:
19f796ed 268 //
19f796ed 269 //
19f796ed 270 //AliITS *ITS = new AliITSv5symm("ITS","Updated ITS TDR detailed version with symmetric services");
19f796ed 271 //
19f796ed 272 //AliITS *ITS = new AliITSv5asymm("ITS","Updates ITS TDR detailed version with asymmetric services");
19f796ed 273 //
19f796ed 274 AliITSvPPRasymmFMD *ITS = new AliITSvPPRasymmFMD("ITS","New ITS PPR detailed version with asymmetric services");
19f796ed 275 ITS->SetMinorVersion(2); // don't touch this parameter if you're not an ITS developer
19f796ed 276 ITS->SetReadDet(kFALSE); // don't touch this parameter if you're not an ITS developer
19f796ed 277 // ITS->SetWriteDet("$ALICE_ROOT/ITS/ITSgeometry_vPPRasymm2.det"); // don't touch this parameter if you're not an ITS developer
19f796ed 278 ITS->SetThicknessDet1(200.); // detector thickness on layer 1 must be in the range [100,300]
19f796ed 279 ITS->SetThicknessDet2(200.); // detector thickness on layer 2 must be in the range [100,300]
19f796ed 280 ITS->SetThicknessChip1(150.); // chip thickness on layer 1 must be in the range [150,300]
19f796ed 281 ITS->SetThicknessChip2(150.); // chip thickness on layer 2 must be in the range [150,300]
19f796ed 282 ITS->SetRails(0); // 1 --> rails in ; 0 --> rails out
19f796ed 283 ITS->SetCoolingFluid(1); // 1 --> water ; 0 --> freon
19f796ed 284 // Coarse geometries (warning: no hits are produced with these coarse geometries and they unuseful
19f796ed 285 // for reconstruction !):
19f796ed 286 //
19f796ed 287 //
19f796ed 288 //AliITSvPPRcoarseasymm *ITS = new AliITSvPPRcoarseasymm("ITS","New ITS PPR coarse version with asymmetric services");
19f796ed 289 //ITS->SetRails(0); // 1 --> rails in ; 0 --> rails out
19f796ed 290 //ITS->SetSupportMaterial(0); // 0 --> Copper ; 1 --> Aluminum ; 2 --> Carbon
19f796ed 291 //
19f796ed 292 //AliITS *ITS = new AliITSvPPRcoarsesymm("ITS","New ITS PPR coarse version with symmetric services");
19f796ed 293 //ITS->SetRails(0); // 1 --> rails in ; 0 --> rails out
19f796ed 294 //ITS->SetSupportMaterial(0); // 0 --> Copper ; 1 --> Aluminum ; 2 --> Carbon
19f796ed 295 //
19f796ed 296 //
19f796ed 297 //
19f796ed 298 // Geant3 <-> EUCLID conversion
19f796ed 299 // ============================
19f796ed 300 //
19f796ed 301 // SetEUCLID is a flag to output (=1) or not to output (=0) both geometry and
19f796ed 302 // media to two ASCII files (called by default ITSgeometry.euc and
19f796ed 303 // ITSgeometry.tme) in a format understandable to the CAD system EUCLID.
19f796ed 304 // The default (=0) means that you dont want to use this facility.
19f796ed 305 //
19f796ed 306 ITS->SetEUCLID(0);
19f796ed 307 }
19f796ed 308 if (iTPC)
19f796ed 309 {
19f796ed 310 //============================ TPC parameters =====================
19f796ed 311 AliTPC *TPC = new AliTPCv2("TPC", "Default");
19f796ed 312 }
19f796ed 313 if (iTOF) {
19f796ed 314 //=================== TOF parameters ============================
19f796ed 315 AliTOF *TOF = new AliTOFv5T0("TOF", "normal TOF");
19f796ed 316 // Partial geometry: modules at 2,3,4,6,7,11,12,14,15,16
19f796ed 317 // starting at 6h in positive direction
19f796ed 318 // Int_t TOFSectors[18]={-1,-1,0,0,0,-1,0,0,-1,-1,-1,0,0,-1,0,0,0,0};
19f796ed 319 // Partial geometry: modules at 1,2,6,7,9,10,11,12,15,16,17
19f796ed 320 // (ALICE numbering convention)
19f796ed 321 Int_t TOFSectors[18]={-1,0,0,-1,-1,-1,0,0,-1,0,0,0,0,-1,-1,0,0,0};
19f796ed 322 TOF->SetTOFSectors(TOFSectors);
19f796ed 323 }
19f796ed 324 if (iHMPID)
19f796ed 325 {
19f796ed 326 //=================== HMPID parameters ===========================
19f796ed 327 AliHMPID *HMPID = new AliHMPIDv1("HMPID", "normal HMPID");
19f796ed 328 }
19f796ed 329 if (iZDC)
19f796ed 330 {
19f796ed 331 //=================== ZDC parameters ============================
19f796ed 332 AliZDC *ZDC = new AliZDCv2("ZDC", "normal ZDC");
19f796ed 333 }
19f796ed 334 if (iTRD)
19f796ed 335 {
19f796ed 336 //=================== TRD parameters ============================
19f796ed 337 AliTRD *TRD = new AliTRDv1("TRD", "TRD slow simulator");
19f796ed 338 AliTRDgeometry *geoTRD = TRD->GetGeometry();
19f796ed 339 // Partial geometry: modules at 2,3,4,6,11,12,14,15
19f796ed 340 // starting at 6h in positive direction
19f796ed 341 geoTRD->SetSMstatus(0,0);
19f796ed 342 geoTRD->SetSMstatus(1,0);
19f796ed 343 geoTRD->SetSMstatus(5,0);
19f796ed 344 geoTRD->SetSMstatus(7,0);
19f796ed 345 geoTRD->SetSMstatus(8,0);
19f796ed 346 geoTRD->SetSMstatus(9,0);
19f796ed 347 geoTRD->SetSMstatus(10,0);
19f796ed 348 geoTRD->SetSMstatus(13,0);
19f796ed 349 geoTRD->SetSMstatus(16,0);
19f796ed 350 geoTRD->SetSMstatus(17,0);
19f796ed 351 }
19f796ed 352 if (iFMD)
19f796ed 353 {
19f796ed 354 //=================== FMD parameters ============================
19f796ed 355 AliFMD *FMD = new AliFMDv1("FMD", "normal FMD");
19f796ed 356 }
19f796ed 357 if (iMUON)
19f796ed 358 {
19f796ed 359 //=================== MUON parameters ===========================
19f796ed 360 // New MUONv1 version (geometry defined via builders)
19f796ed 361 AliMUON *MUON = new AliMUONv1("MUON", "default");
19f796ed 362 }
19f796ed 363 //=================== PHOS parameters ===========================
19f796ed 364 if (iPHOS)
19f796ed 365 {
19f796ed 366 AliPHOS *PHOS = new AliPHOSv1("PHOS", "IHEP");
19f796ed 367 }
19f796ed 368 if (iPMD)
19f796ed 369 {
19f796ed 370 //=================== PMD parameters ============================
19f796ed 371 AliPMD *PMD = new AliPMDv1("PMD", "normal PMD");
19f796ed 372 }
19f796ed 373 if (iT0)
19f796ed 374 {
19f796ed 375 //=================== T0 parameters ============================
19f796ed 376 AliT0 *T0 = new AliT0v1("T0", "T0 Detector");
19f796ed 377 }
19f796ed 378 if (iEMCAL)
19f796ed 379 {
19f796ed 380 //=================== EMCAL parameters ============================
8224b11d 381 AliEMCAL *EMCAL = new AliEMCALv2("EMCAL", "EMCAL_COMPLETE");
19f796ed 382 }
19f796ed 383 if (iACORDE)
19f796ed 384 {
19f796ed 385 //=================== ACORDE parameters ============================
f7882672 386 AliACORDE *ACORDE = new AliACORDEv1("ACORDE", "normal ACORDE");
19f796ed 387 // ACORDE->SetITSGeometry(kTRUE);
19f796ed 388 // ACORDE->SetCreateCavern(kFALSE);
19f796ed 389 }
19f796ed 390 if (iVZERO)
19f796ed 391 {
19f796ed 392 //=================== VZERO parameters =============================
19f796ed 393 AliVZERO *VZERO = new AliVZEROv7("VZERO", "normal VZERO");
19f796ed 394 }
19f796ed 395}
19f796ed 396void ProcessEnvironmentVars()
19f796ed 397{
19f796ed 398 // Run type
19f796ed 399 if (gSystem->Getenv("CONFIG_RUN_TYPE")) {
19f796ed 400 for (Int_t iRun = 0; iRun < kRunMax; iRun++) {
19f796ed 401 if (strcmp(gSystem->Getenv("CONFIG_RUN_TYPE"), pprRunName[iRun])==0) {
19f796ed 402 proc = (PDC06Proc_t)iRun;
19f796ed 403 cout<<"Run type set to "<<pprRunName[iRun]<<endl;
19f796ed 404 }
19f796ed 405 }
19f796ed 406 }
19f796ed 407 // Random Number seed
19f796ed 408 if (gSystem->Getenv("CONFIG_SEED")) {
19f796ed 409 seed = atoi(gSystem->Getenv("CONFIG_SEED"));
19f796ed 410 }
19f796ed 411}