Possibility to use Geant4 (Ivana)
authorhristov <hristov@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 11 Jul 2008 12:46:46 +0000 (12:46 +0000)
committerhristov <hristov@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 11 Jul 2008 12:46:46 +0000 (12:46 +0000)
macros/g4Config.C
macros/g4ConfigCommon.C
macros/g4ConfigGeometry.C [new file with mode: 0644]
macros/g4menu.C

index d69b24c..7da160b 100644 (file)
 //
 // You can also start from a mini GUI - g4menu.C.
 // See description in this macro.
+//
+// By I. Hrivnacova, IPN Orsay
        
 
 void Config()
 {
+  cout << "Running g4Config.C ... " << endl;
+
   // AliRoot setup
   //
-  gROOT->LoadMacro("g4ConfigCommon.C");
+  gROOT->LoadMacro("$ALICE_ROOT/macros/g4ConfigCommon.C");
   ConfigCommon();
 
   // Load Geant4 + Geant4 VMC libraries
@@ -28,8 +32,6 @@ void Config()
     if (!gInterpreter->IsLoaded("$ALICE/geant4_vmc/examples/macro/g4libs.C")) {
       gROOT->LoadMacro("$ALICE/geant4_vmc/examples/macro/g4libs.C");
       gInterpreter->ProcessLine("g4libs()");
-      // Load G4root library (for G4 navigation with TGeo)
-      gSystem->Load("libG4root");
     }
   }    
 
@@ -38,18 +40,14 @@ void Config()
   TGeant4 *geant4 = 0;
   if (!gMC) {
     TG4RunConfiguration* runConfiguration 
-      = new TG4RunConfiguration("geomVMCtoRoot", true);
-//      = new TG4RunConfiguration("geomRootToGeant4");
+      = new TG4RunConfiguration("geomRoot", 
+                                "emStandard+optical", 
+                                "specialCuts+specialControls+stackPopper");
+//      = new TG4RunConfiguration("geomRootToGeant4",
+//                                "emStandard+optical", 
+//                                "specialCuts+specialControls+stackPopper",
+//                                 true);
       
-    // Switch on hadron & optical physics, + special cuts
-    // Switch on optical physics (not activated by default)
-    TG4PhysicsListOptions options;
-    options.SetStackPopperPhysics(true);
-    options.SetHadronPhysics(true);
-    options.SetOpticalPhysics(true);
-    options.SetSpecialCutsPhysics(true);
-    options.SetSpecialControlsPhysics(true);
-    runConfiguration->SetPhysicsListOptions(options);
 
     geant4 = new TGeant4("TGeant4", "The Geant4 Monte Carlo", runConfiguration);
     cout << "Geant4 has been created." << endl;
@@ -102,9 +100,12 @@ void Config()
 
   // Set apply cuts 
   geant4->ProcessGeantCommand("/run/particle/applyCuts");  
-  geant4->ProcessGeantCommand("/mcVerbose/geometryManager 2");  
+  // geant4->ProcessGeantCommand("/mcVerbose/geometryManager 2");  
+  geant4->ProcessGeantCommand("/mcVerbose/composedPhysicsList 2");  
   geant4->ProcessGeantCommand("/mcDet/volNameSeparator !");
   geant4->ProcessGeantCommand("/mcControl/g3Defaults");
   geant4->ProcessGeantCommand("/mcPhysics/setStackPopperSelection e+ e- pi+ pi- kaon+ kaon- gamma");
-//  geant4->ProcessGeantCommand("/tracking/verbose 1");  
+  // geant4->ProcessGeantCommand("/tracking/verbose 1");  
+
+  cout << "Running g4Config.C finished ... " << endl;
 }
index 6498161..d59e6f0 100644 (file)
@@ -2,15 +2,25 @@
 //
 // AliRoot Configuration for running aliroot with Monte Carlo.
 // Called from g4Config.C
+//
+// By I. Hrivnacova, IPN Orsay
+
+enum PprGeo_t
+  {
+    kHoles, kNoHoles
+  };
+static PprGeo_t geo = kHoles;
 
 Float_t EtaToTheta(Float_t arg);
+void    LoadPythia();
 static Int_t    eventsPerRun = 50;
 
-void ConfigCommon()
+void ConfigCommon(Bool_t setRootGeometry = kTRUE)
 {
-  // ============================= 
-  // Root file
-  // ============================= 
+  cout << "Running ConfigCommon.C ... " << endl;
+
+  // Load Pythia libraries
+  LoadPythia();
 
   // Create the output file
   AliRunLoader* rl = 0;
@@ -24,8 +34,13 @@ void ConfigCommon()
   rl->SetCompressionLevel(2);
   rl->SetNumberOfEventsPerFile(3);
   gAlice->SetRunLoader(rl);
-//  gAlice->SetRootGeometry();
-//  gAlice->SetGeometryFileName("geometry.root");
+  
+  // Set Root geometry file
+  //
+  if ( setRootGeometry ) {
+    gAlice->SetRootGeometry();
+    gAlice->SetGeometryFromFile("geometry.root");
+  }
 
   // Set the trigger configuration
   gAlice->SetTriggerDescriptor("Pb-Pb");
@@ -34,13 +49,12 @@ void ConfigCommon()
     // 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__);
-    int     nParticles = 500;
+    int     nParticles = 100;
     if (gSystem->Getenv("CONFIG_NPARTICLES"))
     {
         nParticles = atoi(gSystem->Getenv("CONFIG_NPARTICLES"));
     }
 
-///*
     AliGenCocktail *gener = new AliGenCocktail();
     gener->SetPhiRange(0, 360);
     // Set pseudorapidity range from -8 to 8.
@@ -90,6 +104,30 @@ void ConfigCommon()
     Int_t   iEMCAL =  1;
     Int_t   iACORDE = 0;
     Int_t   iVZERO =  1;
+/*
+    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   =  1;
+    Int_t   iTRD   =  0;
+    Int_t   iZDC   =  0;
+    Int_t   iEMCAL =  0;
+    Int_t   iACORDE = 0;
+    Int_t   iVZERO =  0;
+*/   
+// Exluded for problems
 
     rl->CdGAFile();
     //=================== Alice BODY parameters =============================
@@ -130,6 +168,11 @@ void ConfigCommon()
         //=================== FRAME parameters ============================
 
         AliFRAMEv2 *FRAME = new AliFRAMEv2("FRAME", "Space Frame");
+        if (geo == kHoles) {
+         FRAME->SetHoles(1);
+       } else {
+         FRAME->SetHoles(0);
+       }
     }
 
     if (iSHIL)
@@ -147,60 +190,11 @@ void ConfigCommon()
         AliPIPE *PIPE = new AliPIPEv3("PIPE", "Beam Pipe");
     }
  
-    if(iITS) {
+    if (iITS)
+    {
+        //=================== ITS parameters ============================
 
-    //=================== ITS parameters ============================
-    //
-    // As the innermost detector in ALICE, the Inner Tracking System "impacts" on
-    // almost all other detectors. This involves the fact that the ITS geometry
-    // still has several options to be followed in parallel in order to determine
-    // the best set-up which minimizes the induced background. All the geometries
-    // available to date are described in the following. Read carefully the comments
-    // and use the default version (the only one uncommented) unless you are making
-    // comparisons and you know what you are doing. In this case just uncomment the
-    // ITS geometry you want to use and run Aliroot.
-    //
-    // Detailed geometries:         
-    //
-    //
-    //AliITS *ITS  = new AliITSv5symm("ITS","Updated ITS TDR detailed version with symmetric services");
-    //
-    //AliITS *ITS  = new AliITSv5asymm("ITS","Updates ITS TDR detailed version with asymmetric services");
-    //
-       AliITSvPPRasymmFMD *ITS  = new AliITSvPPRasymmFMD("ITS","New ITS PPR detailed version with asymmetric services");
-       ITS->SetMinorVersion(2);  // don't touch this parameter if you're not an ITS developer
-       ITS->SetReadDet(kFALSE);          // don't touch this parameter if you're not an ITS developer
-    //    ITS->SetWriteDet("$ALICE_ROOT/ITS/ITSgeometry_vPPRasymm2.det");  // don't touch this parameter if you're not an ITS developer
-       ITS->SetThicknessDet1(200.);   // detector thickness on layer 1 must be in the range [100,300]
-       ITS->SetThicknessDet2(200.);   // detector thickness on layer 2 must be in the range [100,300]
-       ITS->SetThicknessChip1(150.);  // chip thickness on layer 1 must be in the range [150,300]
-       ITS->SetThicknessChip2(150.);  // chip thickness on layer 2 must be in the range [150,300]
-       ITS->SetRails(0);            // 1 --> rails in ; 0 --> rails out
-       ITS->SetCoolingFluid(1);   // 1 --> water ; 0 --> freon
-
-    // Coarse geometries (warning: no hits are produced with these coarse geometries and they unuseful 
-    // for reconstruction !):
-    //                                                     
-    //
-    //AliITSvPPRcoarseasymm *ITS  = new AliITSvPPRcoarseasymm("ITS","New ITS PPR coarse version with asymmetric services");
-    //ITS->SetRails(0);                // 1 --> rails in ; 0 --> rails out
-    //ITS->SetSupportMaterial(0);      // 0 --> Copper ; 1 --> Aluminum ; 2 --> Carbon
-    //
-    //AliITS *ITS  = new AliITSvPPRcoarsesymm("ITS","New ITS PPR coarse version with symmetric services");
-    //ITS->SetRails(0);                // 1 --> rails in ; 0 --> rails out
-    //ITS->SetSupportMaterial(0);      // 0 --> Copper ; 1 --> Aluminum ; 2 --> Carbon
-    //                      
-    //
-    //
-    // Geant3 <-> EUCLID conversion
-    // ============================
-    //
-    // SetEUCLID is a flag to output (=1) or not to output (=0) both geometry and
-    // media to two ASCII files (called by default ITSgeometry.euc and
-    // ITSgeometry.tme) in a format understandable to the CAD system EUCLID.
-    // The default (=0) means that you dont want to use this facility.
-    //
-       ITS->SetEUCLID(0);  
+       AliITS *ITS  = new AliITSv11Hybrid("ITS","ITS v11Hybrid");
     }
 
     if (iTPC)
@@ -213,20 +207,13 @@ void ConfigCommon()
     if (iTOF) {
         //=================== TOF parameters ============================
        AliTOF *TOF = new AliTOFv6T0("TOF", "normal TOF");
-       // Partial geometry: modules at 2,3,4,6,7,11,12,14,15,16
-       // starting at 6h in positive direction
-       //      Int_t TOFSectors[18]={-1,-1,0,0,0,-1,0,0,-1,-1,-1,0,0,-1,0,0,0,0};
-       // Partial geometry: modules at 1,2,6,7,9,10,11,12,15,16,17
-       // (ALICE numbering convention)
-               Int_t TOFSectors[18]={-1,0,0,-1,-1,-1,0,0,-1,0,0,0,0,-1,-1,0,0,0};
-       TOF->SetTOFSectors(TOFSectors);
     }
 
 
     if (iHMPID)
     {
         //=================== HMPID parameters ===========================
-        AliHMPID *HMPID = new AliHMPIDv2("HMPID", "normal HMPID");
+        AliHMPID *HMPID = new AliHMPIDv3("HMPID", "normal HMPID");
 
     }
 
@@ -280,7 +267,7 @@ void ConfigCommon()
     if (iEMCAL)
     {
         //=================== EMCAL parameters ============================
-        AliEMCAL *EMCAL = new AliEMCALv2("EMCAL", "SHISH_77_TRD1_2X2_FINAL_110DEG");
+        AliEMCAL *EMCAL = new AliEMCALv2("EMCAL", "EMCAL_COMPLETE");
     }
 
      if (iACORDE)
@@ -297,8 +284,19 @@ void ConfigCommon()
 
      AliLog::Message(AliLog::kInfo, "End of Config", "Config.C", "Config.C", "Config()"," Config.C", __LINE__);
 
+     cout << "Running ConfigCommon.C finished ... " << endl;
+
 }
 
 Float_t EtaToTheta(Float_t arg){
   return (180./TMath::Pi())*2.*atan(exp(-arg));
 }
+
+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/macros/g4ConfigGeometry.C b/macros/g4ConfigGeometry.C
new file mode 100644 (file)
index 0000000..7950527
--- /dev/null
@@ -0,0 +1,35 @@
+// $Id: g4Config.C 18590 2007-05-15 13:24:50Z hristov $
+//
+// Configuration macro for building AliRoot geometry 
+// using g4ConfigCommon.C.
+// TGeant3TGeo has to be used to build geometry as
+// TGeant4 does not support mixing calls to gMC and TGeo.
+//
+// By I. Hrivnacova, IPN Orsay
+       
+
+void Config()
+{
+  cout << "Running g4ConfigGometry.C ... " << endl;
+
+  // Load Geant3 + Geant3 VMC libraries
+  //
+  //  Libraries required by geant321
+  gSystem->Load("liblhapdf.so");      // Parton density functions
+  gSystem->Load("libpythia6.so");     // Pythia
+  gSystem->Load("libgeant321.so");
+  gSystem->Load("libEG");
+  gSystem->Load("libEGPythia6");
+  gSystem->Load("libAliPythia6.so");  // ALICE specific implementations
+
+  new TGeant3TGeo("C++ Interface to Geant3");
+  
+  
+  // AliRoot setup
+  //
+  gROOT->LoadMacro("$ALICE_ROOT/macros/g4ConfigCommon.C");
+  ConfigCommon(kFALSE);
+
+  cout << "Running g4ConfigGometry.C finished ... " << endl;
+
+}
index fe7f07a..cc29ecf 100644 (file)
@@ -5,13 +5,19 @@
 //  To run aliroot with Geant4 using the g4menu.C:
 //  aliroot
 //  root [0] .x g4menu.C
-//  --> Select "Init" and then "Run" button
+//  --> First select "Geometry" to build geometry.root file
+//  --> Then re-run aliroot and select "Run" button
 //         
-// The the bar enables to start Geant4 interactive session:
+// The Init button is kept for debugging purposes,
+// it itializes MonteCarlo but it does not itialize
+// completely ALICE framework. That's why to run simulation,
+// you have to re-run aliroot and select Run button.
+//
+// The menu enables to start Geant4 interactive session:
 //  --> Select "Geant4UI" button and use Geant4 interactive commands;
-//      In case TGeant4 has not yet been created you need first
-//      select "Geant4" button before selecting  "Geant4UI".       
 // To go back to Root UI, type exit.
+//
+// By I. Hrivnacova, IPN Orsay
 
 
 #include <iostream>
@@ -27,33 +33,79 @@ void g4menu()
   // Menu
   TControlBar* menu = new TControlBar("vertical","Alice Geant4 menu");
   
-  menu->AddButton("Init",     "gAlice->Init(\"g4Config.C\")", "Initialize \" AliRun \"");
-  menu->AddButton("Run",      "gAlice->Run()",  "Process Alice run");
-  menu->AddButton("Geant4",   "CreateGeant4()", "Create Geant4 only (without initializing AliRun)");
+  menu->AddButton("Geometry", "MakeGeometry()",  "Generate Root geometry file");
+  menu->AddButton("Run",      "RunSimulation()",  "Process Alice run");
+  menu->AddButton("Init",     "Init()",  "Initialize Alice for simulation");
   menu->AddButton("Geant4UI", "StartGeant4UI()","Go to Geant4 Interactive session");
-  menu->AddButton("XML",      "GenerateXML()","Generate XML (AGDD) file with geometry description");
+  menu->AddButton("AGDD",     "GenerateAGDD()","Generate XML (AGDD) file with geometry description");
+  //menu->AddButton("GDML",     "GenerateGDML()","Generate XML (GDML) file with geometry description");
   menu->AddButton("Quit",     "Quit()", "Quit aliroot");
   gROOT->SaveContext();
+  
+  cout << endl
+       << "**************************************************************" << endl
+       << "  To run simulation:"                                           << endl
+       << "  First select <Geometry> to build geometry.root file."         << endl
+       << "  Then re-run aliroot and select <Run> button"                  << endl
+       << endl
+       << "  The <Init> button is kept for debugging purposes,"            << endl
+       << "  it itializes MonteCarlo but it does not itialize"             << endl
+       << "  completely ALICE framework. That's why to run simulation,"    << endl
+       << "  you have to re-run aliroot and select Run button."            << endl
+       << endl
+       << "  The menu enables to start Geant4 interactive session:"        << endl
+       << "  Select <Geant4UI> button and use Geant4 interactive commands" << endl
+       << "  To go back to Root UI, type exit."                            << endl
+       << "**************************************************************" << endl
+       << endl;
+  
   menu->Show();
 }
 
-void CreateGeant4()
+void MakeGeometry()
 {  
-  if (!gMC) {
+  AliCDBManager* man = AliCDBManager::Instance();
+  man->SetDefaultStorage("local://$ALICE_ROOT");
+  man->SetRun(1);
+  gAlice->Init("$ALICE_ROOT/macros/g4ConfigGeometry.C");
   
-     // TG4RunConfiguration for Geant4
-     TG4RunConfiguration* runConfiguration 
-      = new TG4RunConfiguration(true);
+  // Generate geometry file
+  //
+  gGeoManager->Export("geometry.root");
   
-    // TGeant4
-    TGeant4* geant4
-      = new TGeant4("TGeant4", "The Geant4 Monte Carlo", runConfiguration);
-
-    cout << "Geant4 has been created." << endl;
-   }      
-  else {
-    cout << "Monte Carlo has been already created." << endl;
-  }       
+  cout << endl
+       << "Geometry file geometry.root has been generated." << endl
+       << "You have to re-run aliroot and choose Run in g4menu." << endl;
+       
+  exit(0);     
+}    
+
+
+void Init()
+{  
+  AliCDBManager* man = AliCDBManager::Instance();
+  man->SetDefaultStorage("local://$ALICE_ROOT");
+  man->SetRun(0);
+  gAlice->Init("$ALICE_ROOT/macros/g4Config.C");
+
+  cout << endl
+       << "Only MonteCarlo initialization has been performed. " << endl
+       << "To run simulation you have to re-run aliroot and choose Run in g4menu." << endl;
+}    
+
+
+void RunSimulation()
+{  
+  AliSimulation sim("$ALICE_ROOT/macros/g4Config.C");
+  sim.SetMakeDigits("");
+  sim.SetMakeSDigits("");
+  sim.SetRunHLT("");
+  sim.SetNumberOfEvents(1);
+  TStopwatch timer;
+  timer.Start();
+  sim.Run(1);
+  timer.Stop();
+  timer.Print();
 }    
 
 void StartGeant4UI()
@@ -77,7 +129,7 @@ void StartGeant4UI()
   }       
 } 
 
-void GenerateXML()
+void GenerateAGDD()
 {
   if (gMC) {
     // release Root terminal control
@@ -88,7 +140,7 @@ void GenerateXML()
     // add test if gMC is TGeant4
     TGeant4* g4 = (TGeant4*)gMC;
     
-    g4->ProcessGeantCommand("/xml/generateAGDD");
+    g4->ProcessGeantCommand("/vgm/generateAGDD");
 
     // new Root prompt
     //Getlinem(kInit, ((TRint*)gROOT->GetApplication())->GetPrompt());  
@@ -97,7 +149,28 @@ void GenerateXML()
     cout << "Monte Carlo has not been yet created." << endl;
   } 
 }        
+/*
+void GenerateGDML()
+{
+  if (gMC) {
+    // release Root terminal control
+
+    // go into non-raw term mode
+    //Getlinem(kCleanUp, 0);
+    
+    // add test if gMC is TGeant4
+    TGeant4* g4 = (TGeant4*)gMC;
+    
+    g4->ProcessGeantCommand("/vgm/generateGDML");
 
+    // new Root prompt
+    //Getlinem(kInit, ((TRint*)gROOT->GetApplication())->GetPrompt());  
+  }
+  else {  
+    cout << "Monte Carlo has not been yet created." << endl;
+  } 
+}        
+*/
 void Quit()
 {
   delete gAlice->GetRunLoader();