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