In vmctest:
authorivana <ivana@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 18 Nov 2011 17:11:47 +0000 (17:11 +0000)
committerivana <ivana@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 18 Nov 2011 17:11:47 +0000 (17:11 +0000)
Adding a test for generating lego plots.

test/vmctest/lego/commonConfig.C [new file with mode: 0644]
test/vmctest/lego/g3Config.C [new file with mode: 0644]
test/vmctest/lego/g4Config.C [new file with mode: 0644]
test/vmctest/lego/runtest.sh [new file with mode: 0755]
test/vmctest/lego/sim.C [new file with mode: 0644]

diff --git a/test/vmctest/lego/commonConfig.C b/test/vmctest/lego/commonConfig.C
new file mode 100644 (file)
index 0000000..657c6a6
--- /dev/null
@@ -0,0 +1,338 @@
+// $Id$
+//
+// AliRoot Configuration for running aliroot with Monte Carlo.
+// commonConfig() includes the common setting for all MCs
+// which has to be called before MC is instantiated.
+// Called from MC specific configs (g3Config.C, g4Config.C).
+//
+// Extracted from G3 specific Config.C 
+// by I. Hrivnacova, IPN Orsay
+
+enum PprTrigConf_t {
+    kDefaultPPTrig, kDefaultPbPbTrig
+};
+
+const char * pprTrigConfName[] = {
+    "p-p","Pb-Pb"
+};
+
+enum ConfigVersion_t {
+    kConfigV0,  // default configuration  
+    kConfigV1   // configuration for LHC 2010 production
+};
+
+// Options 
+static AliMagF::BMap_t smag = AliMagF::k5kG;
+static PprTrigConf_t strig = kDefaultPPTrig; // default PP trigger configuration
+static TString comment;
+
+// Functions
+void  LoadPythia();
+
+void commonConfig(const TString& det, 
+                  ConfigVersion_t configVersion = kConfigV0)
+{
+  cout << "Running commonConfig.C ... " << endl;
+
+    // Set Random Number seed
+  gRandom->SetSeed(123456); // Set 0 to use the currecnt time
+  AliLog::Message(AliLog::kInfo, Form("Seed for random number generation = %d",gRandom->GetSeed()), "Config.C", "Config.C", "Config()","Config.C", __LINE__);
+
+
+  //=======================================================================
+  // Load Pythia libraries
+  //=======================================================================
+
+  LoadPythia();
+
+  //=======================================================================
+  // ALICE steering object (AliRunLoader)
+  //=======================================================================
+
+  AliRunLoader* rl 
+    = AliRunLoader::Open("galice.root",
+                         AliConfig::GetDefaultEventFolderName(),
+                         "recreate");
+  if ( ! rl ) {
+    gAlice->Fatal("Config.C","Can not instatiate the Run Loader");
+    return;
+  }
+  rl->SetCompressionLevel(2);
+  rl->SetNumberOfEventsPerFile(3);
+  gAlice->SetRunLoader(rl);
+  
+  //======================================================================
+  // Trigger configuration
+  //=======================================================================
+
+  AliSimulation::Instance()->SetTriggerConfig(pprTrigConfName[strig]);
+  cout << "Trigger configuration is set to  " << pprTrigConfName[strig] << endl;
+
+  // ============================= 
+  // Magnetic field
+  // ============================= 
+
+  // Field (L3 0.5 T)
+  AliMagF* field = new AliMagF("Maps","Maps", -1., -1., AliMagF::k5kG);
+  TGeoGlobalMagField::Instance()->SetField(field);
+
+  printf("\n \n Comment: %s \n \n", comment.Data());
+
+  // ============================= 
+  // Modules
+  // ============================= 
+
+  rl->CdGAFile();
+
+  Int_t   iABSO  =  0;
+  Int_t   iDIPO  =  0;
+  Int_t   iFMD   =  0;
+  Int_t   iFRAME =  0;
+  Int_t   iHALL  =  0;
+  Int_t   iITS   =  0;
+  Int_t   iMAG   =  0;
+  Int_t   iMUON  =  0;
+  Int_t   iPHOS  =  0;
+  Int_t   iPIPE  =  0;
+  Int_t   iPMD   =  0;
+  Int_t   iHMPID =  0;
+  Int_t   iSHIL  =  0;
+  Int_t   iT0    =  0;
+  Int_t   iTOF   =  0;
+  Int_t   iTPC   =  0;
+  Int_t   iTRD   =  0;
+  Int_t   iZDC   =  0;
+  Int_t   iEMCAL =  0;
+  Int_t   iACORDE = 0;
+  Int_t   iVZERO =  0;
+
+  if ( det == "ABSO" )  iABSO  =  1;
+  if ( det == "DIPO" )  iDIPO  =  1;
+  if ( det == "FMD" )   iFMD   =  1;
+  if ( det == "FRAME" )  iFRAME =  1;
+  if ( det == "HALL" )  iHALL  =  1;
+  if ( det == "ITS" )   iITS   =  1;
+  if ( det == "MAG" )   iMAG   =  1;
+  if ( det == "MUON" )  iMUON  =  1;
+  if ( det == "PHOS" )  iPHOS  =  1;
+  if ( det == "PIPE" )  iPIPE  =  1;
+  if ( det == "PMD" )   iPMD   =  1;
+  if ( det == "HMPID" )  iHMPID =  1;
+  if ( det == "SHIL" )  iSHIL  =  1;
+  if ( det == "T0" )    iT0    =  1;
+  if ( det == "TOF" )   iTOF   =  1;
+  if ( det == "TPC" )   iTPC   =  1;
+  if ( det == "TRD" )   iTRD   =  1;
+  if ( det == "ZDC" )   iZDC   =  1;
+  if ( det == "EMCAL" )  iEMCAL =  1;
+  if ( det == "ACORDE" ) iACORDE = 1;
+  if ( det == "VZERO" )  iVZERO =  1;
+
+  if ( det == "ALL" ) {
+    iABSO  =  1;
+    iDIPO  =  1;
+    iFMD   =  1;
+    iFRAME =  1;
+    iHALL  =  1;
+    iITS   =  1;
+    iMAG   =  1;
+    iMUON  =  1;
+    iPHOS  =  1;
+    iPIPE  =  1;
+    iPMD   =  1;
+    iHMPID =  1;
+    iSHIL  =  1;
+    iT0    =  1;
+    iTOF   =  1;
+    iTPC   =  1;
+    iTRD   =  1;
+    iZDC   =  1;
+    iEMCAL =  1;
+    iACORDE = 1;
+    iVZERO =  1;
+  }
+
+  rl->CdGAFile();
+  //=================== 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 AliITSv11Hybrid("ITS","ITS v11Hybrid");
+  }
+
+  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 AliZDCv3("ZDC", "normal ZDC");
+  }
+
+  if (iTRD)
+  {
+      //=================== TRD parameters ============================
+
+      AliTRD *TRD = new AliTRDv1("TRD", "TRD slow simulator");
+      if ( configVersion == kConfigV1 ) {
+        AliTRDgeometry *geoTRD = TRD->GetGeometry();
+        // Partial geometry: modules at 0,1,7,8,9,16,17
+        // starting at 3h in positive direction
+        geoTRD->SetSMstatus(2,0);
+        geoTRD->SetSMstatus(3,0);
+        geoTRD->SetSMstatus(4,0);
+        geoTRD->SetSMstatus(5,0);
+        geoTRD->SetSMstatus(6,0);
+        geoTRD->SetSMstatus(11,0);
+        geoTRD->SetSMstatus(12,0);
+        geoTRD->SetSMstatus(13,0);
+        geoTRD->SetSMstatus(14,0);
+        geoTRD->SetSMstatus(15,0);
+        geoTRD->SetSMstatus(16,0);
+      }
+  }
+
+  if (iFMD)
+  {
+      //=================== FMD parameters ============================
+      AliFMD *FMD = new AliFMDv1("FMD", "normal FMD");
+  }
+
+  if (iMUON)
+  {
+      //=================== MUON parameters ===========================
+      // New MUONv1 version (geometry defined via builders)
+      AliMUON *MUON = new AliMUONv1("MUON", "default");
+  }
+  //=================== PHOS parameters ===========================
+
+  if (iPHOS)
+  {
+     if ( configVersion == kConfigV0 ) 
+       AliPHOS *PHOS = new AliPHOSv1("PHOS", "IHEP");
+     else if ( configVersion == kConfigV1 )  
+       AliPHOS *PHOS = new AliPHOSv1("PHOS", "noCPV_Modules123"); 
+  }
+
+
+  if (iPMD)
+  {
+      //=================== PMD parameters ============================
+      AliPMD *PMD = new AliPMDv1("PMD", "normal PMD");
+  }
+
+  if (iT0)
+  {
+      //=================== T0 parameters ============================
+      AliT0 *T0 = new AliT0v1("T0", "T0 Detector");
+  }
+
+  if (iEMCAL)
+  {
+      //=================== EMCAL parameters ============================
+    if ( configVersion == kConfigV0 ) 
+      AliEMCAL *EMCAL = new AliEMCALv2("EMCAL", "EMCAL_COMPLETEV1");
+    else if ( configVersion == kConfigV1 )  
+      AliEMCAL *EMCAL = new AliEMCALv2("EMCAL", "EMCAL_FIRSTYEARV1");
+  }
+
+   if (iACORDE)
+  {
+      //=================== ACORDE parameters ============================
+      AliACORDE *ACORDE = new AliACORDEv1("ACORDE", "normal ACORDE");
+  }
+
+   if (iVZERO)
+  {
+      //=================== VZERO parameters ============================
+      AliVZERO *VZERO = new AliVZEROv7("VZERO", "normal VZERO");
+  }
+
+  AliLog::Message(AliLog::kInfo, "End of Config", "Config.C", "Config.C", "Config()"," Config.C", __LINE__);
+
+  cout << "Running commonConfig.C finished ... " << endl;
+}
+
+void LoadPythia()
+{
+  // Load Pythia related libraries
+  gSystem->Load("liblhapdf.so");      // Parton density functions
+  gSystem->Load("libEGPythia6.so");   // TGenerator interface
+  gSystem->Load("libpythia6.so");     // Pythia
+  gSystem->Load("libAliPythia6.so");  // ALICE specific implementations
+}
diff --git a/test/vmctest/lego/g3Config.C b/test/vmctest/lego/g3Config.C
new file mode 100644 (file)
index 0000000..3a46863
--- /dev/null
@@ -0,0 +1,28 @@
+// $Id$
+//
+// Configuration macro for running aliroot with Geant3
+// with primary events read from external file.
+//
+// By I. Hrivnacova, IPN Orsay
+
+void Config(const TString& det)
+{
+  cout << "Running g3Config.C ... " << endl;
+
+  // AliRoot setup
+  //
+  gROOT->LoadMacro("$ALICE_ROOT/test/vmctest/lego/commonConfig.C");
+  commonConfig(det);
+
+  // Load Geant3 + Geant3 VMC libraries
+  //
+#if defined(__CINT__)
+    gSystem->Load("libgeant321");
+#endif
+
+  // Create TGeant3
+  //  
+  new  TGeant3TGeo("C++ Interface to Geant3");
+
+  cout << "Running g3Config.C finished ... " << endl;
+}  
diff --git a/test/vmctest/lego/g4Config.C b/test/vmctest/lego/g4Config.C
new file mode 100644 (file)
index 0000000..e02c556
--- /dev/null
@@ -0,0 +1,126 @@
+// $Id$
+//
+// Configuration macro for running aliroot with Geant4
+// with primary events read from external file.
+//
+// By I. Hrivnacova, IPN Orsay
+       
+
+void Config(const TString& det)
+{
+  cout << "Running g4Config.C ... " << endl;
+
+  // AliRoot setup
+  //
+  gROOT->LoadMacro("$ALICE_ROOT/test/vmctest/lego/commonConfig.C");
+  commonConfig(det);
+
+  // TPC primary ionization 
+  AliTPC* TPC = (AliTPC*)gAlice->GetDetector("TPC");
+  if ( ! TPC )
+    cerr << "Cannot get TPC detector" << endl;
+  else  { 
+    cerr << "Setting TPC primary ionization" << endl;
+    TPC->SetPrimaryIonisation(); // not used with Geant3
+  }  
+
+  // Load Geant4 + Geant4 VMC libraries
+  //
+  if (gClassTable->GetID("TGeant4") == -1) {
+    // Load Geant4 libraries 
+    if (!gInterpreter->IsLoaded("$ALICE/geant4_vmc/examples/macro/g4libs.C")) {
+      gROOT->LoadMacro("$ALICE/geant4_vmc/examples/macro/g4libs.C");
+      gInterpreter->ProcessLine("g4libs()");
+    }
+  }    
+
+  // Create Geant4 VMC
+  //  
+  TGeant4 *geant4 = 0;
+  if ( ! gMC ) {
+    TG4RunConfiguration* runConfiguration 
+      = new TG4RunConfiguration("geomRoot", 
+                                "QGSP_BERT_EMV+optical", 
+                                "specialCuts+stackPopper+stepLimiter",
+                                 true);
+//      = new TG4RunConfiguration("geomRootToGeant4",
+//                                "emStandard+optical", 
+//                                "specialCuts+specialControls+stackPopper+stepLimiter",
+//                                 true);
+      
+    geant4 = new TGeant4("TGeant4", 
+                         "The Geant4 Monte Carlo : QGSP_BERT_EMV+optical", 
+                         runConfiguration);
+             // Repeat physics selection in the title; to be removed
+             // with new geant4_vmc tag (1.13)            
+                         
+    cout << "Geant4 has been created." << endl;
+  } 
+  else {
+    cout << "Monte Carlo has been already created." << endl;
+  }  
+
+  // Customization of Geant4 VMC
+  //
+
+    geant4->ProcessGeantCommand("/mcVerbose/all 1");  
+    geant4->ProcessGeantCommand("/mcVerbose/geometryManager 1");  
+    geant4->ProcessGeantCommand("/mcVerbose/opGeometryManager 1");  
+    geant4->ProcessGeantCommand("/mcTracking/loopVerbose 0");     
+    geant4->ProcessGeantCommand("/mcPhysics/rangeCuts 0.01 mm"); 
+    geant4->ProcessGeantCommand("/mcPhysics/selectOpProcess Scintillation");
+    geant4->ProcessGeantCommand("/mcPhysics/setOpProcessActivation false");
+    geant4->ProcessGeantCommand("/mcTracking/skipNeutrino true");
+    geant4->ProcessGeantCommand("/mcDet/setMaxStepInLowDensityMaterials 1 cm");
+
+  // Uncomment this line to get a detail info from each step 
+  //geant4->ProcessGeantCommand("/tracking/verbose 1");  
+  
+  // More info from the physics list
+  // the verbosity level is passed to all contained physics lists and their
+  // physics builders
+  //geant4->ProcessGeantCommand("/mcVerbose/composedPhysicsList 2");  
+  
+  // More info from optical processes
+  //geant4->ProcessGeantCommand("/mcVerbose/opticalPhysicsList 3");  
+  
+  // More info from geometry building
+  //geant4->ProcessGeantCommand("/mcVerbose/geometryManager 1");  
+
+  // More info from setting geometry properties (in materials and surfaces)
+  // for optical physics
+  //geant4->ProcessGeantCommand("/mcVerbose/opGeometryManager 1");  
+  
+  // More info about regions construction 
+  // and conversion of VMC cuts in cuts in range per regions 
+  // geant4->ProcessGeantCommand("/mcVerbose/regionsManager 2");
+  // geant4->ProcessGeantCommand("/mcRegions/print true");
+  
+  // Suppress verbose info from tracks which reached maximum number of steps
+  // (default value is 30000)  
+  //geant4->ProcessGeantCommand("/mcTracking/loopVerbose 0"); 
+    
+  //
+  // Set apply cuts 
+/*
+  geant4->ProcessGeantCommand("/run/particle/applyCuts");  
+  // geant4->ProcessGeantCommand("/mcVerbose/geometryManager 2");  
+
+  geant4->ProcessGeantCommand("/mcVerbose/composedPhysicsList 2");  
+  geant4->ProcessGeantCommand("/mcDet/volNameSeparator !");
+  geant4->ProcessGeantCommand("/mcPhysics/setStackPopperSelection e+ e- pi+ pi- kaon+ kaon- gamma");
+  //geant4->ProcessGeantCommand("/tracking/verbose 1");  
+
+  geant4->ProcessGeantCommand("/mcControl/g3Defaults");
+!!!!n Generates warnings:
+>>> Event 0
+G4ProcessTable::Insert : arguments are 0 pointer 
+G4ProcessTable::Insert : arguments are 0 pointer 
+G4ProcessTable::Insert : arguments are 0 pointer 
+G4ProcessTable::Insert : arguments are 0 pointer 
+G4ProcessTable::Insert : arguments are 0 pointer 
+
+*/
+
+  cout << "Running g4Config.C finished ... " << endl;
+}
diff --git a/test/vmctest/lego/runtest.sh b/test/vmctest/lego/runtest.sh
new file mode 100755 (executable)
index 0000000..15f8f0a
--- /dev/null
@@ -0,0 +1,34 @@
+#!/bin/sh
+# $Id $
+
+NEVENTS=1
+G3CONFIG="$ALICE_ROOT/test/vmctest/lego/g3Config.C" 
+G4CONFIG="$ALICE_ROOT/test/vmctest/lego/g4Config.C" 
+
+RUNG3=1
+RUNG4=1
+
+#for DET in ABSO DIPO FMD FRAME HALL ITS MAG MUON PHOS PIPE PMD HMPID SHIL T0 TOF TPC TRD ZDC EMCAL ACORDE VZERO; do
+for DET in ALL; do
+
+if [ "$RUNG3" = "1" ]; then 
+  G3OUTDIR=g3/lego_$DET
+  rm -rf *.root *.dat *.log fort* hlt hough raw* recraw/*.root recraw/*.log
+  aliroot -b -q  sim.C\($NEVENTS,\"$G3CONFIG\",\"$DET\"\)  2>&1 | tee sim.log
+  rm -fr $G3OUTDIR
+  mkdir -p $G3OUTDIR
+  mv *.root *.log $G3OUTDIR
+  cp $G3CONFIG $G3OUTDIR
+fi
+
+if [ "$RUNG4" = "1" ]; then 
+  G4OUTDIR=g4/lego_$DET
+  rm -rf *.root *.dat *.log fort* hlt hough raw* recraw/*.root recraw/*.log
+  aliroot -b -q  sim.C\($NEVENTS,\"$G4CONFIG\",\"$DET\"\)  2>&1 | tee sim.log
+  rm -fr $G4OUTDIR
+  mkdir -p $G4OUTDIR
+  mv *.root *.log $G4OUTDIR
+  cp $G4CONFIG $G4OUTDIR
+fi
+
+done
diff --git a/test/vmctest/lego/sim.C b/test/vmctest/lego/sim.C
new file mode 100644 (file)
index 0000000..8dde9d9
--- /dev/null
@@ -0,0 +1,17 @@
+// $Id$
+//
+// Macro for running lego simulation in test/vmctest/lego.
+
+void sim(Int_t nev=1, const TString& config, const TString& det)  {
+  AliSimulation simulator(config);
+  TString configFunction("Config(\"");
+  configFunction.Append(det.Data());
+  configFunction.Append(TString("\");"));
+  cout << configFunction.Data() << endl;
+  gAlice->SetConfigFunction(configFunction.Data());
+  TStopwatch timer;
+  timer.Start();
+  simulator.RunLego(config.Data());
+  timer.Stop();
+  timer.Print();
+}