Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/examples/extended/parameterisations/Par02/include/Par02Output.hh

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

  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