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 // 26 // 27 // ------------------------------------------- 27 // -------------------------------------------------------------- 28 // GEANT 4 - ULTRA experiment 28 // GEANT 4 - ULTRA experiment example 29 // ------------------------------------------- 29 // -------------------------------------------------------------- 30 // 30 // 31 // Code developed by: 31 // Code developed by: 32 // B. Tome, M.C. Espirito-Santo, A. Trindade, << 32 // B. Tome, M.C. Espirito-Santo, A. Trindade, P. Rodrigues 33 // 33 // 34 // **************************************** 34 // **************************************************** 35 // * UltraRunAction.cc 35 // * UltraRunAction.cc 36 // **************************************** 36 // **************************************************** 37 // 37 // 38 // RunAction class for Ultra; it has also a 38 // RunAction class for Ultra; it has also a Messenger Class 39 // 39 // 40 #include "UltraRunAction.hh" 40 #include "UltraRunAction.hh" 41 #include "G4Run.hh" 41 #include "G4Run.hh" 42 #include "G4RunManager.hh" 42 #include "G4RunManager.hh" 43 #include "G4AnalysisManager.hh" << 43 #include "G4UImanager.hh" 44 #include "Randomize.hh" << 44 #include "G4VVisManager.hh" 45 #include <ctime> << 45 #include "G4ios.hh" >> 46 #include "UltraRunActionMessenger.hh" 46 #include "Randomize.hh" 47 #include "Randomize.hh" >> 48 #ifdef G4ANALYSIS_USE >> 49 #include "UltraAnalysisManager.hh" >> 50 #endif 47 51 >> 52 #include "Randomize.hh" >> 53 #include "G4ios.hh" 48 54 49 // //....oooOO0OOooo........oooOO0OOooo....... 55 // //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 50 56 51 UltraRunAction::UltraRunAction() 57 UltraRunAction::UltraRunAction() 52 { 58 { 53 seed = -1; // RANLUX seed << 59 54 luxury = 3; // RANLUX luxury level (3 i << 60 G4int seed = 1; // RANLUX seed 55 saveRndm = 1; << 61 G4int luxury = 3; // RANLUX luxury level (3 is default) >> 62 CLHEP::HepRandom::setTheSeed(seed,luxury); >> 63 CLHEP::HepRandom::showEngineStatus(); >> 64 >> 65 theRunActMessenger = new UltraRunActionMessenger(this); 56 } 66 } 57 67 58 // //....oooOO0OOooo........oooOO0OOooo....... 68 // //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 59 69 60 UltraRunAction::~UltraRunAction() 70 UltraRunAction::~UltraRunAction() 61 {;} << 71 { >> 72 delete theRunActMessenger; >> 73 } 62 74 63 // //....oooOO0OOooo........oooOO0OOooo....... 75 // //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 64 76 65 void UltraRunAction::BeginOfRunAction(const G4 77 void UltraRunAction::BeginOfRunAction(const G4Run* aRun) 66 { 78 { 67 // Get/create analysis manager: need to do t << 68 auto man = G4AnalysisManager::Instance(); << 69 man->SetDefaultFileType("root"); << 70 << 71 // Open an output file << 72 man->OpenFile("ultra"); << 73 man->SetFirstHistoId(1); << 74 << 75 // Create histogram(s) << 76 man->CreateH1("PhotonEnergy","Optical photon << 77 500,0.,5.); //bins' number, xmin, xmax << 78 man->CreateH1("NumberDetectedPhotons","Numbe << 79 10,0.,10.); //bins' number, xmin, xmax << 80 << 81 if (!IsMaster()) //it is a slave, do nothing << 82 { << 83 G4cout << "ooo Run " << aRun->GetRunID() << 84 return; << 85 } << 86 79 87 //Master or sequential << 80 #ifdef G4ANALYSIS_USE 88 G4cout << "ooo Run " << aRun->GetRunID() << << 81 UltraAnalysisManager* analysis = UltraAnalysisManager::getInstance(); 89 if (seed<0) //not initialized by anybody els << 82 analysis->book(); 90 { << 83 #endif 91 seed=time(0); << 84 92 G4Random::setTheSeed(seed,luxury); << 85 G4cout << "### Run " << aRun->GetRunID() << " start..." << G4endl; 93 G4Random::showEngineStatus(); << 94 } << 95 86 96 // save Rndm status 87 // save Rndm status 97 if (saveRndm > 0) 88 if (saveRndm > 0) 98 G4Random::saveEngineStatus("beginOfRun.rnd << 89 { CLHEP::HepRandom::showEngineStatus(); >> 90 CLHEP::HepRandom::saveEngineStatus("beginOfRun.rndm"); >> 91 } 99 92 100 return; << 101 } 93 } 102 94 103 // //....oooOO0OOooo........oooOO0OOooo....... 95 // //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 104 96 105 void UltraRunAction::EndOfRunAction(const G4Ru 97 void UltraRunAction::EndOfRunAction(const G4Run* aRun) 106 { 98 { 107 // Write histograms to file << 108 // Save histograms << 109 auto man = G4AnalysisManager::Instance(); << 110 man->Write(); << 111 man->CloseFile(); << 112 // Complete clean-up << 113 man->Clear(); << 114 << 115 if (!IsMaster()) << 116 { << 117 G4cout << "### Run " << aRun->GetRunID() << 118 return; << 119 } << 120 99 121 G4cout << "### Run " << aRun->GetRunID() << << 122 // save Rndm status 100 // save Rndm status 123 if (saveRndm == 1) 101 if (saveRndm == 1) 124 G4Random::saveEngineStatus("endOfRun.rndm" << 102 { CLHEP::HepRandom::showEngineStatus(); 125 return; << 103 CLHEP::HepRandom::saveEngineStatus("endOfRun.rndm"); >> 104 } >> 105 >> 106 // Write histograms to file >> 107 G4cout << "Close and Save Histograms" << G4endl; >> 108 G4cout << "### Run " << aRun->GetRunID() << " ended." << G4endl; >> 109 >> 110 #ifdef G4ANALYSIS_USE >> 111 UltraAnalysisManager* analysis = UltraAnalysisManager::getInstance(); >> 112 analysis->finish(); >> 113 #endif >> 114 >> 115 } >> 116 >> 117 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... >> 118 >> 119 void UltraRunAction::MySetRunID(G4int myrun) >> 120 { >> 121 runID = myrun ; 126 } 122 } 127 123