Geant4 Cross Reference |
1 // 1 // 2 // ******************************************* 2 // ******************************************************************** 3 // * License and Disclaimer 3 // * License and Disclaimer * 4 // * 4 // * * 5 // * The Geant4 software is copyright of th 5 // * The Geant4 software is copyright of the Copyright Holders of * 6 // * the Geant4 Collaboration. It is provided 6 // * the Geant4 Collaboration. It is provided under the terms and * 7 // * conditions of the Geant4 Software License 7 // * conditions of the Geant4 Software License, included in the file * 8 // * LICENSE and available at http://cern.ch/ 8 // * LICENSE and available at http://cern.ch/geant4/license . These * 9 // * include a list of copyright holders. 9 // * include a list of copyright holders. * 10 // * 10 // * * 11 // * Neither the authors of this software syst 11 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing fin 12 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warran 13 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assum 14 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file 15 // * use. Please see the license in the file LICENSE and URL above * 16 // * for the full disclaimer and the limitatio 16 // * for the full disclaimer and the limitation of liability. * 17 // * 17 // * * 18 // * This code implementation is the result 18 // * This code implementation is the result of the scientific and * 19 // * technical work of the GEANT4 collaboratio 19 // * technical work of the GEANT4 collaboration. * 20 // * By using, copying, modifying or distri 20 // * By using, copying, modifying or distributing the software (or * 21 // * any work based on the software) you ag 21 // * any work based on the software) you agree to acknowledge its * 22 // * use in resulting scientific publicati 22 // * use in resulting scientific publications, and indicate your * 23 // * acceptance of all terms of the Geant4 Sof 23 // * acceptance of all terms of the Geant4 Software license. * 24 // ******************************************* 24 // ******************************************************************** 25 // 25 // 26 /// \file RunAction.cc 26 /// \file RunAction.cc 27 /// \brief Implementation of the RunAction cla 27 /// \brief Implementation of the RunAction class 28 // 28 // 29 // 29 // 30 //....oooOO0OOooo........oooOO0OOooo........oo 30 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 31 //....oooOO0OOooo........oooOO0OOooo........oo 31 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 32 32 33 #include "RunAction.hh" 33 #include "RunAction.hh" 34 34 35 #include "DetectorConstruction.hh" 35 #include "DetectorConstruction.hh" 36 #include "HistoManager.hh" << 37 #include "PrimaryGeneratorAction.hh" 36 #include "PrimaryGeneratorAction.hh" >> 37 #include "HistoManager.hh" 38 #include "Run.hh" 38 #include "Run.hh" 39 << 40 #include "G4RunManager.hh" << 41 #include "G4Timer.hh" 39 #include "G4Timer.hh" >> 40 #include "G4RunManager.hh" 42 #include "Randomize.hh" 41 #include "Randomize.hh" 43 42 44 //....oooOO0OOooo........oooOO0OOooo........oo 43 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 45 44 46 RunAction::RunAction(DetectorConstruction* det 45 RunAction::RunAction(DetectorConstruction* det, PrimaryGeneratorAction* prim) 47 : fDetector(det), fPrimary(prim) << 46 :G4UserRunAction(), fDetector(det), fPrimary(prim), fRun(nullptr), >> 47 fTimer(nullptr) 48 { 48 { 49 fHistoManager = new HistoManager(); 49 fHistoManager = new HistoManager(); 50 } 50 } 51 51 52 //....oooOO0OOooo........oooOO0OOooo........oo 52 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 53 53 >> 54 RunAction::~RunAction() >> 55 { } >> 56 >> 57 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... >> 58 54 G4Run* RunAction::GenerateRun() 59 G4Run* RunAction::GenerateRun() 55 { << 60 { 56 fRun = new Run(fDetector); << 61 fRun = new Run(fDetector); 57 return fRun; 62 return fRun; 58 } 63 } 59 64 60 //....oooOO0OOooo........oooOO0OOooo........oo 65 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 61 66 62 void RunAction::BeginOfRunAction(const G4Run*) 67 void RunAction::BeginOfRunAction(const G4Run*) 63 { 68 { 64 // keep run condition 69 // keep run condition 65 if (fPrimary) { << 70 if ( fPrimary ) { 66 G4ParticleDefinition* particle = fPrimary- << 71 G4ParticleDefinition* particle >> 72 = fPrimary->GetParticleGun()->GetParticleDefinition(); 67 G4double energy = fPrimary->GetParticleGun 73 G4double energy = fPrimary->GetParticleGun()->GetParticleEnergy(); 68 fRun->SetPrimary(particle, energy); 74 fRun->SetPrimary(particle, energy); 69 } 75 } 70 << 76 71 // histograms << 77 //histograms 72 // 78 // 73 G4AnalysisManager* analysis = G4AnalysisMana 79 G4AnalysisManager* analysis = G4AnalysisManager::Instance(); 74 if (analysis->IsActive()) analysis->OpenFile 80 if (analysis->IsActive()) analysis->OpenFile(); 75 81 76 // save Rndm status and open the timer 82 // save Rndm status and open the timer 77 83 78 if (isMaster) { 84 if (isMaster) { 79 // G4Random::showEngineStatus(); 85 // G4Random::showEngineStatus(); 80 fTimer = new G4Timer(); 86 fTimer = new G4Timer(); 81 fTimer->Start(); 87 fTimer->Start(); 82 } 88 } 83 } 89 } 84 90 85 //....oooOO0OOooo........oooOO0OOooo........oo 91 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 86 92 87 void RunAction::EndOfRunAction(const G4Run*) 93 void RunAction::EndOfRunAction(const G4Run*) 88 { 94 { 89 // compute and print statistic << 95 // compute and print statistic 90 if (isMaster) { 96 if (isMaster) { 91 fTimer->Stop(); 97 fTimer->Stop(); 92 if (!((G4RunManager::GetRunManager()->GetR << 98 if(!((G4RunManager::GetRunManager()->GetRunManagerType() == 93 G4cout << "\n" << 99 G4RunManager::sequentialRM))) { 94 << "Total number of events: " << << 100 G4cout << "\n" << "Total number of events: " 95 G4cout << "Master thread time: " << *fT << 101 << fRun->GetNumberOfEvent() << G4endl; >> 102 G4cout << "Master thread time: " << *fTimer << G4endl; 96 } 103 } 97 delete fTimer; 104 delete fTimer; 98 fRun->EndOfRun(); 105 fRun->EndOfRun(); 99 } 106 } 100 // save histograms << 107 //save histograms 101 G4AnalysisManager* analysis = G4AnalysisMana << 108 G4AnalysisManager* analysis = G4AnalysisManager::Instance(); 102 if (analysis->IsActive()) { << 109 if (analysis->IsActive()) { 103 analysis->Write(); 110 analysis->Write(); 104 analysis->CloseFile(); 111 analysis->CloseFile(); 105 } << 112 } 106 113 107 // show Rndm status 114 // show Rndm status 108 // if (isMaster) G4Random::showEngineStatu << 115 // if (isMaster) G4Random::showEngineStatus(); 109 } 116 } 110 117 111 //....oooOO0OOooo........oooOO0OOooo........oo 118 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 112 119