ROOT logo
// $Id$
//
// Configuration macro for running aliroot with Geant4
// with primary events read from external file
// with reprocessing 5th event starting from the saved random
// engine status files.
//
// By I. Hrivnacova, IPN Orsay
 	

void Config()
{
  cout << "Running g4Config.C ... " << endl;

  // AliRoot setup
  //
  gROOT->LoadMacro("$ALICE_ROOT/test/vmctest/gun/commonConfig.C");
  commonConfig();

  // 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", 
                                "FTFP_BERT_EMV+optical", 
                                "specialCuts+stackPopper+stepLimiter",
                                 true);
//      = new TG4RunConfiguration("geomRootToGeant4",
//                                "FTFP_BERT_EMV+optical", 
//                                "specialCuts+specialControls+stackPopper+stepLimiter",
//                                 true);
      
    geant4 = new TGeant4("TGeant4", 
                         "The Geant4 Monte Carlo : FTFP_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("/mcTracking/skipNeutrino true");
    geant4->ProcessGeantCommand("/mcDet/setMaxStepInLowDensityMaterials 1 cm");

    // for Geant4 <= 9.4.p03
    //geant4->ProcessGeantCommand("/mcPhysics/selectOpProcess Scintillation");
    //geant4->ProcessGeantCommand("/mcPhysics/setOpProcessActivation false");
    // for Geant4 >= 9.5
    geant4->ProcessGeantCommand("/optics_engine/selectOpProcess Scintillation");
    geant4->ProcessGeantCommand("/optics_engine/setOpProcessUse false");
    geant4->ProcessGeantCommand("/optics_engine/selectOpProcess OpWLS");
    geant4->ProcessGeantCommand("/optics_engine/setOpProcessUse false");
    geant4->ProcessGeantCommand("/optics_engine/selectOpProcess OpMieHG");
    geant4->ProcessGeantCommand("/optics_engine/setOpProcessUse false");
    
    // Activate reading random engine status from a file
    gAlice->GetMCApp()->SetReadRndmStatus(kTRUE);
    gAlice->GetMCApp()->SetRndmFileName("randomEvt4.root");
    geant4->ProcessGeantCommand("/mcRun/readRandom true");
    geant4->ProcessGeantCommand("/mcRun/setRandomFile run0evt4.rndm");

  // 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 

*/

  // AliRoot event generator
  // (it has to be created after MC, as it may use decayer via VMC)
  //
  gROOT->LoadMacro("$ALICE_ROOT/test/vmctest/gun/genExtFileConfig.C");
  genExtFileConfig(4);

  cout << "Running g4Config.C finished ... " << endl;
}
 g4Config2.C:1
 g4Config2.C:2
 g4Config2.C:3
 g4Config2.C:4
 g4Config2.C:5
 g4Config2.C:6
 g4Config2.C:7
 g4Config2.C:8
 g4Config2.C:9
 g4Config2.C:10
 g4Config2.C:11
 g4Config2.C:12
 g4Config2.C:13
 g4Config2.C:14
 g4Config2.C:15
 g4Config2.C:16
 g4Config2.C:17
 g4Config2.C:18
 g4Config2.C:19
 g4Config2.C:20
 g4Config2.C:21
 g4Config2.C:22
 g4Config2.C:23
 g4Config2.C:24
 g4Config2.C:25
 g4Config2.C:26
 g4Config2.C:27
 g4Config2.C:28
 g4Config2.C:29
 g4Config2.C:30
 g4Config2.C:31
 g4Config2.C:32
 g4Config2.C:33
 g4Config2.C:34
 g4Config2.C:35
 g4Config2.C:36
 g4Config2.C:37
 g4Config2.C:38
 g4Config2.C:39
 g4Config2.C:40
 g4Config2.C:41
 g4Config2.C:42
 g4Config2.C:43
 g4Config2.C:44
 g4Config2.C:45
 g4Config2.C:46
 g4Config2.C:47
 g4Config2.C:48
 g4Config2.C:49
 g4Config2.C:50
 g4Config2.C:51
 g4Config2.C:52
 g4Config2.C:53
 g4Config2.C:54
 g4Config2.C:55
 g4Config2.C:56
 g4Config2.C:57
 g4Config2.C:58
 g4Config2.C:59
 g4Config2.C:60
 g4Config2.C:61
 g4Config2.C:62
 g4Config2.C:63
 g4Config2.C:64
 g4Config2.C:65
 g4Config2.C:66
 g4Config2.C:67
 g4Config2.C:68
 g4Config2.C:69
 g4Config2.C:70
 g4Config2.C:71
 g4Config2.C:72
 g4Config2.C:73
 g4Config2.C:74
 g4Config2.C:75
 g4Config2.C:76
 g4Config2.C:77
 g4Config2.C:78
 g4Config2.C:79
 g4Config2.C:80
 g4Config2.C:81
 g4Config2.C:82
 g4Config2.C:83
 g4Config2.C:84
 g4Config2.C:85
 g4Config2.C:86
 g4Config2.C:87
 g4Config2.C:88
 g4Config2.C:89
 g4Config2.C:90
 g4Config2.C:91
 g4Config2.C:92
 g4Config2.C:93
 g4Config2.C:94
 g4Config2.C:95
 g4Config2.C:96
 g4Config2.C:97
 g4Config2.C:98
 g4Config2.C:99
 g4Config2.C:100
 g4Config2.C:101
 g4Config2.C:102
 g4Config2.C:103
 g4Config2.C:104
 g4Config2.C:105
 g4Config2.C:106
 g4Config2.C:107
 g4Config2.C:108
 g4Config2.C:109
 g4Config2.C:110
 g4Config2.C:111
 g4Config2.C:112
 g4Config2.C:113
 g4Config2.C:114
 g4Config2.C:115
 g4Config2.C:116
 g4Config2.C:117
 g4Config2.C:118
 g4Config2.C:119
 g4Config2.C:120
 g4Config2.C:121
 g4Config2.C:122
 g4Config2.C:123
 g4Config2.C:124
 g4Config2.C:125
 g4Config2.C:126
 g4Config2.C:127
 g4Config2.C:128
 g4Config2.C:129
 g4Config2.C:130
 g4Config2.C:131
 g4Config2.C:132
 g4Config2.C:133
 g4Config2.C:134
 g4Config2.C:135
 g4Config2.C:136
 g4Config2.C:137
 g4Config2.C:138
 g4Config2.C:139
 g4Config2.C:140
 g4Config2.C:141
 g4Config2.C:142
 g4Config2.C:143
 g4Config2.C:144
 g4Config2.C:145
 g4Config2.C:146
 g4Config2.C:147
 g4Config2.C:148
 g4Config2.C:149
 g4Config2.C:150