Geant4 Cross Reference |
1 // 2 // ******************************************************************** 3 // * License and Disclaimer * 4 // * * 5 // * The Geant4 software is copyright of the Copyright Holders of * 6 // * the Geant4 Collaboration. It is provided under the terms and * 7 // * conditions of the Geant4 Software License, included in the file * 8 // * LICENSE and available at http://cern.ch/geant4/license . These * 9 // * include a list of copyright holders. * 10 // * * 11 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file LICENSE and URL above * 16 // * for the full disclaimer and the limitation of liability. * 17 // * * 18 // * This code implementation is the result of the scientific and * 19 // * technical work of the GEANT4 collaboration. * 20 // * By using, copying, modifying or distributing the software (or * 21 // * any work based on the software) you agree to acknowledge its * 22 // * use in resulting scientific publications, and indicate your * 23 // * acceptance of all terms of the Geant4 Software license. * 24 // ******************************************************************** 25 // 26 // 27 /// \file Par02Output.hh 28 /// \brief Definition of the Par02Output class 29 30 #ifndef PAR02_OUTPUT_H 31 #define PAR02_OUTPUT_H 32 33 #include "G4ThreeVector.hh" 34 #include "globals.hh" 35 36 /// Handling the saving to the file. 37 /// 38 /// A singleton class that manages creation, writing to and closing of the 39 /// Root output file. 40 /// @author Anna Zaborowska 41 42 class Par02Output 43 { 44 public: 45 /// Indicates to which ntuple to save the information. 46 enum SaveType 47 { 48 eNoSave, 49 eSaveMC, 50 eSaveTracker, 51 eSaveEMCal, 52 eSaveHCal 53 }; 54 55 /// Allows the access to the unique Par02Output object. 56 /// @return A pointer to the Par02Output class. 57 static Par02Output* Instance(); 58 59 /// Sets the file name of the output root file. 60 /// @param name The name of the file. 61 void SetFileName(G4String name); 62 63 /// Gets the file name of the output root file. 64 /// @return The name of the file. 65 G4String GetFileName(); 66 67 /// Sets fFileNameWithRunNo that indicates whether to add the run number 68 /// to the file name. 69 /// @param app If add the run number. 70 void AppendName(G4bool app); 71 72 /// Calls the G4AnalysisManager::Instance(). It sets the file name of the 73 /// output file based on fFileName and fFileNameWithRunNo and opens the file. 74 /// @param runID A run number (to be added to file name if fFileNameWithRunNo 75 /// is true). 76 void StartAnalysis(G4int runID); 77 78 /// Calls the G4AnalysisManager::Instance(). 79 /// It writes to the output file and close it. 80 void EndAnalysis(); 81 82 /// Creates Ntuples used to store information about particle (its ID, PDG code, 83 /// energy deposits, etc.). To be called for each event in Par02EventAction. 84 void CreateNtuples(); 85 86 /// Creates histograms to combine information from all the events in the run. 87 /// To be called for each run in Par02RunAction. 88 void CreateHistograms(); 89 90 /// Saves the information about the particle (track). 91 /// @param aWhatToSave enum indicating what kind of information to store 92 /// (in which ntuple). 93 /// @param aPartID A unique ID within event (taken Geant TrackID). 94 /// @param aPDG A PDG code of a particle. 95 /// @param aVector A vector to be stored (particle momentum in tracker or 96 /// position of energy deposit in calorimeter). 97 /// @param aResolution A resolution of the detector that was used. 98 /// @param aEfficiency An efficiency of the detector that was used. 99 /// @param aEnergy An energy deposit (for calorimeters only: 100 /// Par02Output::SaveType::eEMCal or Par02Output::SaveType::eHCal). 101 void SaveTrack(SaveType aWhatToSave, G4int aPartID, G4int aPDG, G4ThreeVector aVector, 102 G4double aResolution = 0, G4double aEfficiency = 1, G4double aEnergy = 0); 103 104 /// Fills the histogram. 105 /// @param HNo Number of a histogram (decided by the order of creation 106 /// in CreateHistograms(), the first one is 0). 107 /// @param value A value to be filled into the histogram. 108 void FillHistogram(G4int HNo, G4double value) const; 109 110 ~Par02Output(); 111 112 protected: 113 /// A default, protected constructor (due to singleton pattern). 114 Par02Output(); 115 116 private: 117 /// The pointer to the only Par02Output class object. 118 static Par02Output* fPar02Output; 119 120 /// Current ntuple Id 121 static G4ThreadLocal G4int fCurrentNtupleId; 122 123 /// A name of the output root file. 124 G4String fFileName; 125 126 /// If true, a run number should be added to the file. Default: false. 127 G4bool fFileNameWithRunNo; 128 129 /// A control value of particle ID to ensure that data saved to various ntuples 130 /// match the same particle. It is set when Monte Carlo information is saved 131 /// and checked for all the detectors. 132 static G4ThreadLocal G4int fCurrentID; 133 }; 134 135 #endif 136