ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4RootAnalysisManager.hh
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file G4RootAnalysisManager.hh
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 // The main manager for Root analysis.
28 // It delegates most of functions to the object specific managers.
29 
30 // Author: Ivana Hrivnacova, 18/06/2013 (ivana@ipno.in2p3.fr)
31 
32 #ifndef G4RootAnalysisManager_h
33 #define G4RootAnalysisManager_h 1
34 
36 #include "globals.hh"
37 
38 #include "tools/wroot/ntuple"
39 #include "tools/histo/hmpi"
40 
41 #include <memory>
42 
43 class G4RootFileManager;
47 
48 namespace tools {
49 namespace wroot {
50 class directory;
51 }
52 }
53 
54 enum class G4NtupleMergeMode {
55  kNone,
56  kMain,
57  kSlave
58 };
59 
61 {
63 
64  public:
65  explicit G4RootAnalysisManager(G4bool isMaster = true);
66  virtual ~G4RootAnalysisManager();
67 
68  // static methods
70  static G4bool IsInstance();
71 
72  // Access methods
74  tools::wroot::ntuple* GetNtuple(G4int ntupleId) const;
75 
76  // Iterators
77  std::vector<tools::wroot::ntuple*>::iterator BeginNtuple();
78  std::vector<tools::wroot::ntuple*>::iterator EndNtuple();
79  std::vector<tools::wroot::ntuple*>::const_iterator BeginConstNtuple() const;
80  std::vector<tools::wroot::ntuple*>::const_iterator EndConstNtuple() const;
81 
82  // MT/MPI
83  virtual void SetNtupleMerging(G4bool mergeNtuples,
84  G4int nofReducedNtupleFiles = 0) override;
85  virtual void SetNtupleRowWise(G4bool rowWise, G4bool rowMode = true) override;
86  virtual void SetBasketSize(unsigned int basketSize) override;
87  virtual void SetBasketEntries(unsigned int basketEntries) override;
88 
89  protected:
90  // virtual methods from base class
91  virtual G4bool OpenFileImpl(const G4String& fileName) override;
92  virtual G4bool WriteImpl() final;
93  virtual G4bool CloseFileImpl(G4bool reset) override;
94  virtual G4bool IsOpenFileImpl() const final;
95  // virtual functions (overriden in MPI implementation)
96  virtual G4bool WriteNtuple();
97  virtual G4bool Reset();
98 
99  private:
100  // static data members
103 
104  // methods
105  void SetNtupleMergingMode(G4bool mergeNtuples,
106  G4int nofNtupleFiles);
107  void ClearNtupleManagers();
108  void CreateNtupleManagers();
111 
112  template <typename T>
113  G4bool WriteT(const std::vector<T*>& htVector,
114  const std::vector<G4HnInformation*>& hnVector,
115  tools::wroot::directory* directory,
116  const G4String& hnType);
117  G4bool WriteH1();
118  G4bool WriteH2();
119  G4bool WriteH3();
120  G4bool WriteP1();
121  G4bool WriteP2();
122 
123  // data members
131 };
132 
133 #include "G4RootAnalysisManager.icc"
134 
135 #endif