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 "G4AnalysisManager.hh" 44 #include "Randomize.hh" 44 #include "Randomize.hh" 45 #include <ctime> 45 #include <ctime> 46 #include "Randomize.hh" 46 #include "Randomize.hh" 47 47 48 48 49 // //....oooOO0OOooo........oooOO0OOooo....... 49 // //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 50 50 51 UltraRunAction::UltraRunAction() 51 UltraRunAction::UltraRunAction() 52 { 52 { 53 seed = -1; // RANLUX seed 53 seed = -1; // RANLUX seed 54 luxury = 3; // RANLUX luxury level (3 i 54 luxury = 3; // RANLUX luxury level (3 is default) 55 saveRndm = 1; 55 saveRndm = 1; 56 } 56 } 57 57 58 // //....oooOO0OOooo........oooOO0OOooo....... 58 // //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 59 59 60 UltraRunAction::~UltraRunAction() 60 UltraRunAction::~UltraRunAction() 61 {;} 61 {;} 62 62 63 // //....oooOO0OOooo........oooOO0OOooo....... 63 // //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 64 64 65 void UltraRunAction::BeginOfRunAction(const G4 65 void UltraRunAction::BeginOfRunAction(const G4Run* aRun) 66 { 66 { 67 // Get/create analysis manager: need to do t 67 // Get/create analysis manager: need to do that in the master and in the workers 68 auto man = G4AnalysisManager::Instance(); 68 auto man = G4AnalysisManager::Instance(); 69 man->SetDefaultFileType("root"); 69 man->SetDefaultFileType("root"); 70 70 71 // Open an output file 71 // Open an output file 72 man->OpenFile("ultra"); 72 man->OpenFile("ultra"); 73 man->SetFirstHistoId(1); 73 man->SetFirstHistoId(1); 74 74 75 // Create histogram(s) 75 // Create histogram(s) 76 man->CreateH1("PhotonEnergy","Optical photon 76 man->CreateH1("PhotonEnergy","Optical photons energy (eV)", //histoID,histo name 77 500,0.,5.); //bins' number, xmin, xmax 77 500,0.,5.); //bins' number, xmin, xmax 78 man->CreateH1("NumberDetectedPhotons","Numbe 78 man->CreateH1("NumberDetectedPhotons","Number of Detected Photons", 79 10,0.,10.); //bins' number, xmin, xmax 79 10,0.,10.); //bins' number, xmin, xmax 80 80 81 if (!IsMaster()) //it is a slave, do nothing 81 if (!IsMaster()) //it is a slave, do nothing else 82 { 82 { 83 G4cout << "ooo Run " << aRun->GetRunID() 83 G4cout << "ooo Run " << aRun->GetRunID() << " starts on slave." << G4endl; 84 return; 84 return; 85 } 85 } 86 86 87 //Master or sequential 87 //Master or sequential 88 G4cout << "ooo Run " << aRun->GetRunID() << 88 G4cout << "ooo Run " << aRun->GetRunID() << " starts (global)." << G4endl; 89 if (seed<0) //not initialized by anybody els 89 if (seed<0) //not initialized by anybody else 90 { 90 { 91 seed=time(0); 91 seed=time(0); 92 G4Random::setTheSeed(seed,luxury); 92 G4Random::setTheSeed(seed,luxury); 93 G4Random::showEngineStatus(); 93 G4Random::showEngineStatus(); 94 } 94 } 95 95 96 // save Rndm status 96 // save Rndm status 97 if (saveRndm > 0) 97 if (saveRndm > 0) 98 G4Random::saveEngineStatus("beginOfRun.rnd 98 G4Random::saveEngineStatus("beginOfRun.rndm"); 99 99 100 return; 100 return; 101 } 101 } 102 102 103 // //....oooOO0OOooo........oooOO0OOooo....... 103 // //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 104 104 105 void UltraRunAction::EndOfRunAction(const G4Ru 105 void UltraRunAction::EndOfRunAction(const G4Run* aRun) 106 { 106 { 107 // Write histograms to file 107 // Write histograms to file 108 // Save histograms 108 // Save histograms 109 auto man = G4AnalysisManager::Instance(); 109 auto man = G4AnalysisManager::Instance(); 110 man->Write(); 110 man->Write(); 111 man->CloseFile(); 111 man->CloseFile(); 112 // Complete clean-up 112 // Complete clean-up 113 man->Clear(); 113 man->Clear(); 114 114 115 if (!IsMaster()) 115 if (!IsMaster()) 116 { 116 { 117 G4cout << "### Run " << aRun->GetRunID() 117 G4cout << "### Run " << aRun->GetRunID() << " (slave) ended." << G4endl; 118 return; 118 return; 119 } 119 } 120 120 121 G4cout << "### Run " << aRun->GetRunID() << 121 G4cout << "### Run " << aRun->GetRunID() << " (global) ended." << G4endl; 122 // save Rndm status 122 // save Rndm status 123 if (saveRndm == 1) 123 if (saveRndm == 1) 124 G4Random::saveEngineStatus("endOfRun.rndm" 124 G4Random::saveEngineStatus("endOfRun.rndm"); 125 return; 125 return; 126 } 126 } 127 127