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 // $Id: GammaRayTelRunAction.cc 68794 2013-04-05 13:23:26Z gcosmo $ 27 // ------------------------------------------- 28 // ------------------------------------------------------------ 28 // GEANT 4 class implementation file 29 // GEANT 4 class implementation file 29 // CERN Geneva Switzerland 30 // CERN Geneva Switzerland 30 // 31 // 31 // 32 // 32 // ------------ GammaRayTelRunAction --- 33 // ------------ GammaRayTelRunAction ------ 33 // by R.Giannitrapani, F.Longo & G.S 34 // by R.Giannitrapani, F.Longo & G.Santin (13 nov 2000) 34 // 18.11.2001 G.Santin 35 // 18.11.2001 G.Santin 35 // - Modified the analysis management accordin 36 // - Modified the analysis management according to the new design 36 // 37 // 37 // ******************************************* 38 // ************************************************************ 38 39 >> 40 >> 41 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... >> 42 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... >> 43 39 #include "GammaRayTelRunAction.hh" 44 #include "GammaRayTelRunAction.hh" 40 #include "GammaRayTelAnalysis.hh" << 41 45 42 #include <cstdlib> << 46 #ifdef G4ANALYSIS_USE >> 47 #include "GammaRayTelAnalysis.hh" >> 48 #endif 43 49 44 #include "G4ios.hh" << 50 #include <stdlib.h> 45 #include "G4Run.hh" 51 #include "G4Run.hh" 46 #include "G4Threading.hh" << 47 #include "G4UImanager.hh" 52 #include "G4UImanager.hh" 48 #include "G4VVisManager.hh" 53 #include "G4VVisManager.hh" >> 54 #include "G4ios.hh" 49 55 50 //....oooOO0OOooo........oooOO0OOooo........oo << 56 extern std::ofstream outFile; 51 57 52 GammaRayTelRunAction::GammaRayTelRunAction() { << 58 GammaRayTelRunAction::GammaRayTelRunAction() >> 59 { 53 } 60 } 54 61 >> 62 55 //....oooOO0OOooo........oooOO0OOooo........oo 63 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 56 64 57 GammaRayTelRunAction::~GammaRayTelRunAction() << 65 GammaRayTelRunAction::~GammaRayTelRunAction() >> 66 { 58 } 67 } 59 68 60 //....oooOO0OOooo........oooOO0OOooo........oo 69 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 61 70 62 void GammaRayTelRunAction::BeginOfRunAction(co << 71 void GammaRayTelRunAction::BeginOfRunAction(const G4Run* aRun) 63 fRunID = run->GetRunID(); << 72 { >> 73 >> 74 // Open the file for the tracks of this run >> 75 >> 76 char name[15]; >> 77 sprintf(name,"Tracks_%d.dat", aRun->GetRunID()); >> 78 >> 79 #ifdef G4STORE_DATA >> 80 outFile.open(name); >> 81 #endif 64 82 65 // Master mode or sequential << 83 // Prepare the visualization 66 if (IsMaster()) { << 84 if (G4VVisManager::GetConcreteInstance()) 67 G4cout << "### Run " << run->GetRunID( << 85 { 68 } else { << 86 G4UImanager* UI = G4UImanager::GetUIpointer(); 69 G4cout << "### Run " << run->GetRunID( << 87 UI->ApplyCommand("/vis/scene/notifyHandlers"); 70 } << 88 } 71 << 89 72 // Prepare the visualization << 90 // If analysis is used reset the histograms 73 if (G4VVisManager::GetConcreteInstance() ! << 91 #ifdef G4ANALYSIS_USE 74 auto *userInterface = G4UImanager::Get << 92 GammaRayTelAnalysis* analysis = GammaRayTelAnalysis::getInstance(); 75 userInterface->ApplyCommand("/vis/scen << 93 // analysis->BeginOfRun(aRun->GetRunID()); 76 } << 94 analysis->BeginOfRun(); 77 << 95 #endif 78 // If analysis is used reset the histogram << 79 auto *analysis = GammaRayTelAnalysis::getI << 80 // analysis->BeginOfRun(run->GetRunID()); << 81 analysis->BeginOfRun(); << 82 } 96 } 83 97 84 //....oooOO0OOooo........oooOO0OOooo........oo 98 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 85 99 86 void GammaRayTelRunAction::EndOfRunAction(cons << 100 void GammaRayTelRunAction::EndOfRunAction(const G4Run* aRun) 87 G4cout << "End of Run " << run->GetRunID() << 101 { >> 102 char name[15]; >> 103 sprintf(name,"Tracks_%d.dat", aRun->GetRunID()); >> 104 G4cout << "End of Run " << G4endl; >> 105 G4cout << "File " << name << G4endl; >> 106 >> 107 /* >> 108 // Run ended, update the visualization >> 109 if (G4VVisManager::GetConcreteInstance()) { >> 110 G4UImanager::GetUIpointer()->ApplyCommand("/vis/viewer/update"); >> 111 } >> 112 */ 88 113 89 // Close the file with the hits informatio << 114 // Close the file with the hits information 90 #ifdef G4STORE_DATA 115 #ifdef G4STORE_DATA 91 if (outFile != nullptr) { << 116 outFile.close(); 92 G4cout << "File " << fileName << G4endl; << 93 outFile->close(); << 94 delete outFile; << 95 outFile = nullptr; << 96 } << 97 #endif 117 #endif 98 118 99 // If analysis is used, print out the hist << 119 // If analysis is used, print out the histograms 100 auto *analysis = GammaRayTelAnalysis::getI << 120 #ifdef G4ANALYSIS_USE 101 analysis->EndOfRun(); << 121 GammaRayTelAnalysis* analysis = GammaRayTelAnalysis::getInstance(); >> 122 analysis->EndOfRun(); >> 123 #endif 102 } 124 } 103 125 104 //....oooOO0OOooo........oooOO0OOooo........oo 126 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 105 127 106 auto GammaRayTelRunAction::GetOutputFile() -> << 107 if (outFile == nullptr) { << 108 OpenFile(); << 109 } << 110 return outFile; << 111 } << 112 128 113 //....oooOO0OOooo........oooOO0OOooo........oo << 114 129 115 void GammaRayTelRunAction::OpenFile() { << 130 116 // Open the file for the tracks of this ru << 131 117 #ifdef G4STORE_DATA << 132 118 // check that we are in a worker: returns -1 << 133 119 // one file per thread is produced << 134 120 // Tracks_runR.N.dat, where R = run number, << 121 std::stringstream name; << 122 << 123 if (G4Threading::G4GetThreadId() >= 0) { << 124 name << "Tracks_run" << fRunID << "." << << 125 } else { << 126 name << "Tracks_run" << fRunID << "." << << 127 } << 128 << 129 if (outFile == nullptr) { << 130 outFile = new std::ofstream; << 131 outFile->open(name.str()); << 132 fileName = G4String(name.str()); << 133 } << 134 G4cout << "Open file: " << fileName << G4e << 135 #endif << 136 } << 137 135