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 - ULTRA experiment 25 // GEANT 4 - ULTRA experiment example 29 // ------------------------------------------- 26 // -------------------------------------------------------------- 30 // 27 // 31 // Code developed by: 28 // Code developed by: 32 // B. Tome, M.C. Espirito-Santo, A. Trindade, << 29 // B. Tome, M.C. Espirito-Santo, A. Trindade, P. Rodrigues 33 // 30 // 34 // **************************************** 31 // **************************************************** 35 // * UltraRunAction.cc 32 // * UltraRunAction.cc 36 // **************************************** 33 // **************************************************** 37 // 34 // 38 // RunAction class for Ultra; it has also a 35 // RunAction class for Ultra; it has also a Messenger Class 39 // 36 // 40 #include "UltraRunAction.hh" 37 #include "UltraRunAction.hh" 41 #include "G4Run.hh" 38 #include "G4Run.hh" 42 #include "G4RunManager.hh" 39 #include "G4RunManager.hh" 43 #include "G4AnalysisManager.hh" << 40 #include "G4UImanager.hh" 44 #include "Randomize.hh" << 41 #include "G4VVisManager.hh" 45 #include <ctime> << 42 #include "G4ios.hh" >> 43 #include "UltraRunActionMessenger.hh" 46 #include "Randomize.hh" 44 #include "Randomize.hh" >> 45 #ifdef G4ANALYSIS_USE >> 46 #include "UltraAnalysisManager.hh" >> 47 #endif 47 48 >> 49 #include "Randomize.hh" >> 50 #include "G4ios.hh" 48 51 49 // //....oooOO0OOooo........oooOO0OOooo....... 52 // //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 50 53 51 UltraRunAction::UltraRunAction() 54 UltraRunAction::UltraRunAction() 52 { 55 { 53 seed = -1; // RANLUX seed << 56 54 luxury = 3; // RANLUX luxury level (3 i << 57 G4int seed = 1; // RANLUX seed 55 saveRndm = 1; << 58 G4int luxury = 3; // RANLUX luxury level (3 is default) >> 59 HepRandom::setTheSeed(seed,luxury); >> 60 HepRandom::showEngineStatus(); >> 61 >> 62 theRunActMessenger = new UltraRunActionMessenger(this); 56 } 63 } 57 64 58 // //....oooOO0OOooo........oooOO0OOooo....... 65 // //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 59 66 60 UltraRunAction::~UltraRunAction() 67 UltraRunAction::~UltraRunAction() 61 {;} << 68 { >> 69 delete theRunActMessenger; >> 70 } 62 71 63 // //....oooOO0OOooo........oooOO0OOooo....... 72 // //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 64 73 65 void UltraRunAction::BeginOfRunAction(const G4 74 void UltraRunAction::BeginOfRunAction(const G4Run* aRun) 66 { 75 { 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 76 87 //Master or sequential << 77 #ifdef G4ANALYSIS_USE 88 G4cout << "ooo Run " << aRun->GetRunID() << << 78 UltraAnalysisManager* analysis = UltraAnalysisManager::getInstance(); 89 if (seed<0) //not initialized by anybody els << 79 analysis->book(); 90 { << 80 #endif 91 seed=time(0); << 81 92 G4Random::setTheSeed(seed,luxury); << 82 G4cout << "### Run " << aRun->GetRunID() << " start..." << G4endl; 93 G4Random::showEngineStatus(); << 94 } << 95 83 96 // save Rndm status 84 // save Rndm status 97 if (saveRndm > 0) 85 if (saveRndm > 0) 98 G4Random::saveEngineStatus("beginOfRun.rnd << 86 { HepRandom::showEngineStatus(); >> 87 HepRandom::saveEngineStatus("beginOfRun.rndm"); >> 88 } 99 89 100 return; << 90 G4UImanager* UI = G4UImanager::GetUIpointer(); >> 91 G4VVisManager* pVVisManager = G4VVisManager::GetConcreteInstance(); >> 92 >> 93 if(pVVisManager) >> 94 { >> 95 UI->ApplyCommand("/vis/scene/notifyHandlers"); >> 96 } 101 } 97 } 102 98 103 // //....oooOO0OOooo........oooOO0OOooo....... 99 // //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 104 100 105 void UltraRunAction::EndOfRunAction(const G4Ru 101 void UltraRunAction::EndOfRunAction(const G4Run* aRun) 106 { 102 { 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 103 121 G4cout << "### Run " << aRun->GetRunID() << << 122 // save Rndm status 104 // save Rndm status 123 if (saveRndm == 1) 105 if (saveRndm == 1) 124 G4Random::saveEngineStatus("endOfRun.rndm" << 106 { HepRandom::showEngineStatus(); 125 return; << 107 HepRandom::saveEngineStatus("endOfRun.rndm"); >> 108 } >> 109 >> 110 // Write histograms to file >> 111 G4cout << "Close and Save Histograms" << G4endl; >> 112 G4cout << "### Run " << aRun->GetRunID() << " ended." << G4endl; >> 113 >> 114 G4UImanager* UI = G4UImanager::GetUIpointer(); >> 115 G4VVisManager* pVVisManager = G4VVisManager::GetConcreteInstance(); >> 116 >> 117 if(pVVisManager) >> 118 { >> 119 UI->ApplyCommand("/vis/drawVolume"); >> 120 } >> 121 >> 122 #ifdef G4ANALYSIS_USE >> 123 UltraAnalysisManager* analysis = UltraAnalysisManager::getInstance(); >> 124 analysis->finish(); >> 125 #endif >> 126 >> 127 } >> 128 >> 129 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... >> 130 >> 131 void UltraRunAction::MySetRunID(G4int myrun) >> 132 { >> 133 runID = myrun ; 126 } 134 } 127 135