--- /dev/null
+// $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;
+}