Geant4 Cross Reference |
1 // 1 // 2 // ******************************************* 2 // ******************************************************************** 3 // * License and Disclaimer << 3 // * DISCLAIMER * 4 // * 4 // * * 5 // * The Geant4 software is copyright of th << 5 // * The following disclaimer summarizes all the specific disclaimers * 6 // * the Geant4 Collaboration. It is provided << 6 // * of contributors to this software. The specific disclaimers,which * 7 // * conditions of the Geant4 Software License << 7 // * govern, are listed with their locations in: * 8 // * LICENSE and available at http://cern.ch/ << 8 // * http://cern.ch/geant4/license * 9 // * include a list of copyright holders. << 10 // * 9 // * * 11 // * Neither the authors of this software syst 10 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing fin 11 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warran 12 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assum 13 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file << 14 // * use. * 16 // * for the full disclaimer and the limitatio << 17 // * 15 // * * 18 // * This code implementation is the result << 16 // * This code implementation is the intellectual property of the * 19 // * technical work of the GEANT4 collaboratio << 17 // * GEANT4 collaboration. * 20 // * By using, copying, modifying or distri << 18 // * By copying, distributing or modifying the Program (or any work * 21 // * any work based on the software) you ag << 19 // * based on the Program) you indicate your acceptance of this * 22 // * use in resulting scientific publicati << 20 // * statement, and all its terms. * 23 // * acceptance of all terms of the Geant4 Sof << 24 // ******************************************* 21 // ******************************************************************** 25 // 22 // 26 // 23 // 27 // ------------------------------------------- 24 // -------------------------------------------------------------- 28 // GEANT 4 - Underground Dark Matter Detecto 25 // GEANT 4 - Underground Dark Matter Detector Advanced Example 29 // 26 // 30 // For information related to this code c 27 // For information related to this code contact: Alex Howard 31 // e-mail: alexander.howard@cern.ch << 28 // e-mail: a.s.howard@ic.ac.uk 32 // ------------------------------------------- 29 // -------------------------------------------------------------- 33 // Comments 30 // Comments 34 // 31 // 35 // Underground Advanced example mai 32 // Underground Advanced example main program 36 // by A. Howard and H. Araujo << 33 // by A. Howard and H. Araujo 37 // (27th November 2001) 34 // (27th November 2001) 38 // 35 // 39 // main program 36 // main program 40 // ------------------------------------------- 37 // -------------------------------------------------------------- 41 38 42 #include "G4Types.hh" << 39 #include "G4RunManager.hh" 43 #include "G4RunManagerFactory.hh" << 44 << 45 #include "G4UImanager.hh" 40 #include "G4UImanager.hh" >> 41 #include "G4UIterminal.hh" >> 42 #include "G4UItcsh.hh" >> 43 >> 44 #ifdef G4UI_USE_XM >> 45 #include "G4UIXm.hh" >> 46 #endif >> 47 46 #include "Randomize.hh" 48 #include "Randomize.hh" 47 49 >> 50 #ifdef G4VIS_USE 48 #include "G4VisExecutive.hh" 51 #include "G4VisExecutive.hh" 49 #include "G4UIExecutive.hh" << 52 #endif 50 #include "G4AnalysisManager.hh" << 51 53 52 #include "DMXDetectorConstruction.hh" 54 #include "DMXDetectorConstruction.hh" 53 #include "DMXPhysicsList.hh" 55 #include "DMXPhysicsList.hh" 54 #include "DMXActionInitializer.hh" << 56 #include "DMXPrimaryGeneratorAction.hh" >> 57 #include "DMXRunAction.hh" >> 58 #include "DMXEventAction.hh" >> 59 #include "DMXSteppingAction.hh" >> 60 #include "DMXStackingAction.hh" >> 61 >> 62 #include <vector> 55 63 56 int main(int argc,char** argv) { 64 int main(int argc,char** argv) { 57 65 >> 66 // choose the Random engine >> 67 CLHEP::HepRandom::setTheEngine(new CLHEP::RanecuEngine); >> 68 58 // Construct the default run manager 69 // Construct the default run manager 59 auto* runManager = G4RunManagerFactory::Crea << 70 G4RunManager * runManager = new G4RunManager; 60 G4int nThreads = 4; << 61 runManager->SetNumberOfThreads(nThreads); << 62 71 63 // set mandatory initialization classes 72 // set mandatory initialization classes 64 runManager->SetUserInitialization(new DMXDet << 73 DMXDetectorConstruction* detector = new DMXDetectorConstruction; >> 74 runManager->SetUserInitialization(detector); 65 runManager->SetUserInitialization(new DMXPhy 75 runManager->SetUserInitialization(new DMXPhysicsList); 66 runManager->SetUserInitialization(new DMXAct << 76 67 << 77 G4UIsession* session=0; >> 78 >> 79 if (argc==1) // Define UI session for interactive mode. >> 80 { >> 81 // G4UIterminal is a (dumb) terminal. >> 82 #ifdef G4UI_USE_XM >> 83 session = new G4UIXm(argc,argv); >> 84 #else >> 85 #ifdef G4UI_USE_TCSH >> 86 session = new G4UIterminal(new G4UItcsh); >> 87 #else >> 88 session = new G4UIterminal(); >> 89 #endif >> 90 #endif >> 91 } >> 92 >> 93 #ifdef G4VIS_USE 68 // visualization manager 94 // visualization manager 69 G4VisManager* visManager = new G4VisExecutiv 95 G4VisManager* visManager = new G4VisExecutive; 70 visManager->Initialize(); 96 visManager->Initialize(); >> 97 #endif >> 98 >> 99 // output environment variables: >> 100 #ifdef G4ANALYSIS_USE >> 101 G4cout << G4endl << G4endl << G4endl >> 102 << " User Environment " << G4endl >> 103 << " Using AIDA 3.2.1 analysis " << G4endl; >> 104 #else >> 105 G4cout << G4endl << G4endl << G4endl >> 106 << " User Environment " << G4endl >> 107 << " G4ANALYSIS_USE environment variable not set, NO ANALYSIS " >> 108 << G4endl; >> 109 #endif 71 110 72 #ifdef DMXENV_GPS_USE 111 #ifdef DMXENV_GPS_USE 73 G4cout << " Using GPS and not DMX gun " << G 112 G4cout << " Using GPS and not DMX gun " << G4endl; 74 #else 113 #else 75 G4cout << " Using the DMX gun " << G4endl; 114 G4cout << " Using the DMX gun " << G4endl; 76 #endif 115 #endif 77 << 116 >> 117 // set user action classes >> 118 DMXPrimaryGeneratorAction* DMXGenerator = new DMXPrimaryGeneratorAction; >> 119 runManager->SetUserAction(DMXGenerator); >> 120 // runManager->SetUserAction(new DMXPrimaryGeneratorAction); >> 121 // RunAction is inherited by EventAction for output filenames - will all >> 122 // change when implement proper analysis manager? >> 123 DMXRunAction* DMXRun = new DMXRunAction; >> 124 runManager->SetUserAction(DMXRun); >> 125 DMXEventAction* eventAction = new DMXEventAction(DMXRun,DMXGenerator); >> 126 runManager->SetUserAction(eventAction); >> 127 // eventAction is inherited by SteppingAction in order to switch colour >> 128 // flag: >> 129 runManager->SetUserAction(new DMXSteppingAction(eventAction)); >> 130 runManager->SetUserAction(new DMXStackingAction); 78 131 79 //Initialize G4 kernel 132 //Initialize G4 kernel 80 runManager->Initialize(); 133 runManager->Initialize(); 81 << 134 82 // get the pointer to the User Interface man << 135 // get the pointer to the User Interface manager 83 G4UImanager* UImanager = G4UImanager::GetUIp << 136 G4UImanager* UI = G4UImanager::GetUIpointer(); 84 137 85 // Define UI session for interactive mode. 138 // Define UI session for interactive mode. 86 if(argc == 1) << 139 if(session) { 87 { << 140 88 G4UIExecutive* ui = new G4UIExecutive(ar << 141 // G4UIterminal is a (dumb) terminal. 89 UImanager->ApplyCommand("/control/execut << 142 UI->ApplyCommand("/control/execute initInter.mac"); 90 ui->SessionStart(); << 143 /* 91 delete ui; << 144 #ifdef G4UI_USE_XM >> 145 // Customize the G4UIXm menubar with a macro file : >> 146 UI->ApplyCommand("/control/execute gui.mac"); >> 147 #endif >> 148 */ >> 149 session->SessionStart(); >> 150 delete session; 92 } 151 } 93 // Batch mode 152 // Batch mode 94 else 153 else 95 { << 154 { 96 G4String command = "/control/execute "; 155 G4String command = "/control/execute "; 97 G4String fileName = argv[1]; 156 G4String fileName = argv[1]; 98 UImanager->ApplyCommand(command+fileName << 157 UI->ApplyCommand(command+fileName); 99 } 158 } 100 159 101 //Close-out analysis: << 160 // job termination 102 // Save histograms << 161 #ifdef G4VIS_USE 103 G4AnalysisManager* man = G4AnalysisManager:: << 162 delete visManager; 104 man->Write(); << 163 #endif 105 man->CloseFile(); << 106 << 107 if(visManager) delete visManager; << 108 << 109 delete runManager; 164 delete runManager; 110 165 111 return 0; 166 return 0; 112 } 167 } 113 168 114 169