Gaudi Framework, version v24r2

Home   Generated: Wed Dec 4 2013
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
THistSvc.h
Go to the documentation of this file.
1 #ifndef GAUDISVC_THISTSVC_H
2 #define GAUDISVC_THISTSVC_H
3 
4 #include "GaudiKernel/Service.h"
6 #include "GaudiKernel/IFileMgr.h"
10 
11 #include "TObject.h"
12 #include "TH1.h"
13 #include "TH2.h"
14 #include "TH3.h"
15 #include "TTree.h"
16 #include "TGraph.h"
17 #include "TList.h"
18 
19 
20 #include <vector>
21 #include <string>
22 #include <set>
23 #include <map>
24 
25 class IFileMgr;
26 class IIncidentSvc;
27 
28 // Forward declarations
29 template <class TYPE> class SvcFactory;
30 
31 class THistSvc: public extends3<Service, ITHistSvc, IIncidentListener,
32  IIoComponent> {
33 
34 public:
35 
36  virtual StatusCode initialize();
37  virtual StatusCode reinitialize();
38  virtual StatusCode finalize();
39 
40  virtual StatusCode regHist(const std::string& name);
41  virtual StatusCode regHist(const std::string& name, TH1*);
42  virtual StatusCode regHist(const std::string& name, TH2*);
43  virtual StatusCode regHist(const std::string& name, TH3*);
44 
45  virtual StatusCode getHist(const std::string& name, TH1*&) const;
46  virtual StatusCode getHist(const std::string& name, TH2*&) const;
47  virtual StatusCode getHist(const std::string& name, TH3*&) const;
48 
49  virtual StatusCode regTree(const std::string& name);
50  virtual StatusCode regTree(const std::string& name, TTree*);
51  virtual StatusCode getTree(const std::string& name, TTree*&) const;
52 
53  virtual StatusCode regGraph(const std::string& name);
54  virtual StatusCode regGraph(const std::string& name, TGraph*);
55  virtual StatusCode getGraph(const std::string& name, TGraph*&) const;
56 
57  virtual StatusCode deReg(TObject* obj);
58  virtual StatusCode deReg(const std::string& name);
59 
60  virtual std::vector<std::string> getHists() const;
61  virtual std::vector<std::string> getTrees() const;
62  virtual std::vector<std::string> getGraphs() const;
63 
64  virtual StatusCode getTHists(TDirectory *td, TList &,
65  bool recurse=false) const;
66  virtual StatusCode getTHists(const std::string& name, TList &,
67  bool recurse=false) const;
68 
69  virtual StatusCode getTHists(TDirectory *td, TList &tl,
70  bool recurse=false, bool reg=false);
71  virtual StatusCode getTHists(const std::string& name, TList &tl,
72  bool recurse=false, bool reg=false);
73 
74  virtual StatusCode getTTrees(TDirectory *td, TList &,
75  bool recurse=false) const;
76  virtual StatusCode getTTrees(const std::string& name, TList &,
77  bool recurse=false) const;
78 
79  virtual StatusCode getTTrees(TDirectory *td, TList & tl,
80  bool recurse=false, bool reg=false);
81  virtual StatusCode getTTrees(const std::string& name, TList & tl,
82  bool recurse=false, bool reg=false);
83 
84  virtual bool exists(const std::string& name) const;
85 
86  THistSvc(const std::string& name, ISvcLocator *svc );
87 
88  void handle(const Incident&);
89 
90  // From IIoComponent
91  virtual StatusCode io_reinit ();
92 
93 
94 protected:
95 
96  virtual ~THistSvc();
97 
98 private:
99 
101  public:
104  private:
105  TDirectory* m_gd;
106  TFile* m_gf;
107  int m_ge;
108  };
109 
110  enum Mode {
117  };
118 
119  struct THistID {
121  bool temp;
122  TObject* obj;
123  TFile* file;
125 
126  THistID():id(""),temp(true),obj(0),file(0),mode(INVALID) {}
127  THistID(const THistID& rhs):id(rhs.id), temp(rhs.temp),
128  obj(rhs.obj), file(rhs.file), mode(rhs.mode) {}
129  THistID(std::string& i, bool& t, TObject* o, TFile* f)
130  : id(i), temp(t), obj(o), file(f), mode(INVALID){
131  }
132  THistID(std::string& i, bool& t, TObject* o, TFile* f, Mode m)
133  : id(i), temp(t), obj(o), file(f), mode(m){
134  }
135 
136  bool operator < (THistID const &rhs) const {
137  return (obj < rhs.obj);
138  }
139  };
140 
141 
142  template <typename T>
143  StatusCode regHist_i(T* hist, const std::string& name);
144  template <typename T>
145  StatusCode getHist_i(const std::string& name, T*& hist, bool quiet=false) const;
146  template <typename T>
147  StatusCode readHist_i(const std::string& name, T*& hist) const;
148 
149 
150  StatusCode readHist(const std::string& name, TH1*&) const;
151  StatusCode readHist(const std::string& name, TH2*&) const;
152  StatusCode readHist(const std::string& name, TH3*&) const;
153  StatusCode readTree(const std::string& name, TTree*&) const;
154 
155  void updateFiles();
156  StatusCode write();
158  TDirectory* changeDir(const THistSvc::THistID& hid) const;
159  std::string dirname(std::string& dir) const;
160  void removeDoubleSlash(std::string&) const;
161 
162  bool browseTDir(TDirectory* dir) const;
163 
164  bool findStream(const std::string& name, std::string& root,
165  std::string& rem, TFile*& file) const;
166  void parseString(const std::string& id, std::string& root, std::string& rem)
167  const;
168 
170  void setupInputFile( Property& inputfile );
171 
173  void setupOutputFile( Property& outputfile );
174 
175  void setupCompressionLevel( Property& cmp );
176 
177  void copyFileLayout(TDirectory*, TDirectory*);
178 
179  void MergeRootFile( TDirectory *target, TDirectory *source);
180 
182 
183  mutable MsgStream m_log;
184 
189 
193 
197 
198 
203 
207 
209  streamMap m_fileStreams; // fileName->streams
210 
211  std::map<std::string, std::string > m_sharedFiles; // stream->filename of shared files
212 
215 
217 
220 
223 
224 };
225 
226 #ifndef GAUDISVC_THISTSVC_ICC
227  #include "THistSvc.icc"
228 #endif
229 
230 
231 #endif

Generated at Wed Dec 4 2013 14:33:11 for Gaudi Framework, version v24r2 by Doxygen version 1.8.2 written by Dimitri van Heesch, © 1997-2004