Gaudi Framework, version v23r5

Home   Generated: Wed Nov 28 2012
 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"
9 
10 #include "TObject.h"
11 #include "TH1.h"
12 #include "TH2.h"
13 #include "TH3.h"
14 #include "TTree.h"
15 #include "TGraph.h"
16 #include "TList.h"
17 
18 
19 #include <vector>
20 #include <string>
21 #include <set>
22 #include <map>
23 
24 // Forward declarations
25 template <class TYPE> class SvcFactory;
26 
27 class THistSvc: public extends3<Service, ITHistSvc, IIncidentListener,
28  IIoComponent> {
29 
30 public:
31 
32  virtual StatusCode initialize();
33  virtual StatusCode reinitialize();
34  virtual StatusCode finalize();
35 
36  virtual StatusCode regHist(const std::string& name);
37  virtual StatusCode regHist(const std::string& name, TH1*);
38  virtual StatusCode regHist(const std::string& name, TH2*);
39  virtual StatusCode regHist(const std::string& name, TH3*);
40 
41  virtual StatusCode getHist(const std::string& name, TH1*&) const;
42  virtual StatusCode getHist(const std::string& name, TH2*&) const;
43  virtual StatusCode getHist(const std::string& name, TH3*&) const;
44 
45  virtual StatusCode regTree(const std::string& name);
46  virtual StatusCode regTree(const std::string& name, TTree*);
47  virtual StatusCode getTree(const std::string& name, TTree*&) const;
48 
49  virtual StatusCode regGraph(const std::string& name);
50  virtual StatusCode regGraph(const std::string& name, TGraph*);
51  virtual StatusCode getGraph(const std::string& name, TGraph*&) const;
52 
53  virtual StatusCode deReg(TObject* obj);
54  virtual StatusCode deReg(const std::string& name);
55 
56  virtual std::vector<std::string> getHists() const;
57  virtual std::vector<std::string> getTrees() const;
58  virtual std::vector<std::string> getGraphs() const;
59 
60  virtual StatusCode getTHists(TDirectory *td, TList &,
61  bool recurse=false) const;
62  virtual StatusCode getTHists(const std::string& name, TList &,
63  bool recurse=false) const;
64 
65  virtual StatusCode getTHists(TDirectory *td, TList &tl,
66  bool recurse=false, bool reg=false);
67  virtual StatusCode getTHists(const std::string& name, TList &tl,
68  bool recurse=false, bool reg=false);
69 
70  virtual StatusCode getTTrees(TDirectory *td, TList &,
71  bool recurse=false) const;
72  virtual StatusCode getTTrees(const std::string& name, TList &,
73  bool recurse=false) const;
74 
75  virtual StatusCode getTTrees(TDirectory *td, TList & tl,
76  bool recurse=false, bool reg=false);
77  virtual StatusCode getTTrees(const std::string& name, TList & tl,
78  bool recurse=false, bool reg=false);
79 
80  virtual bool exists(const std::string& name) const;
81 
82  THistSvc(const std::string& name, ISvcLocator *svc );
83 
84  void handle(const Incident&);
85 
86  // From IIoComponent
87  virtual StatusCode io_reinit ();
88 
89 
90 protected:
91 
92  virtual ~THistSvc();
93 
94 private:
95 
97  public:
100  private:
101  TDirectory* m_gd;
102  TFile* m_gf;
103  int m_ge;
104  };
105 
106 
107  struct THistID {
109  bool temp;
110  TObject* obj;
111  TFile* file;
112 
113  THistID():id(""),temp(true),obj(0),file(0) {}
114  THistID(const THistID& rhs):id(rhs.id), temp(rhs.temp),
115  obj(rhs.obj), file(rhs.file) {}
116  THistID(std::string& i, bool& t, TObject* o, TFile* f)
117  : id(i), temp(t), obj(o), file(f){}
118 
119  bool operator < (THistID const &rhs) const {
120  return (obj < rhs.obj);
121  }
122  };
123 
124  enum Mode {
130  };
131 
132  mutable MsgStream m_log;
133 
138 
139  template <typename T>
140  StatusCode regHist_i(T* hist, const std::string& name);
141  template <typename T>
142  StatusCode getHist_i(const std::string& name, T*& hist, bool quiet=false) const;
143  template <typename T>
144  StatusCode readHist_i(const std::string& name, T*& hist) const;
145 
146 
147  StatusCode readHist(const std::string& name, TH1*&) const;
148  StatusCode readHist(const std::string& name, TH2*&) const;
149  StatusCode readHist(const std::string& name, TH3*&) const;
150  StatusCode readTree(const std::string& name, TTree*&) const;
151 
152  void updateFiles();
153  StatusCode write();
155  TDirectory* changeDir(const THistSvc::THistID& hid) const;
156  std::string dirname(std::string& dir) const;
157  void removeDoubleSlash(std::string&) const;
158 
159  bool browseTDir(TDirectory* dir) const;
160 
161  bool findStream(const std::string& name, std::string& root,
162  std::string& rem, TFile*& file) const;
163  void parseString(const std::string& id, std::string& root, std::string& rem)
164  const;
165 
167  void setupInputFile( Property& inputfile );
168 
170  void setupOutputFile( Property& outputfile );
171 
172  void setupCompressionLevel( Property& cmp );
173 
174  void copyFileLayout(TDirectory*, TDirectory*);
175 
180 
184 
188 
189  // std::map<TObject*, TFile*> m_tobjs;
190 
194 
196  streamMap m_fileStreams; // fileName->streams
197 
198  std::map<std::string, std::string > m_sharedFiles; // stream->filename of shared files
199  void MergeRootFile( TDirectory *target, TDirectory *source);
200 
202 
204 
205 };
206 
207 #ifndef GAUDISVC_THISTSVC_ICC
208  #include "THistSvc.icc"
209 #endif
210 
211 
212 #endif

Generated at Wed Nov 28 2012 12:17:18 for Gaudi Framework, version v23r5 by Doxygen version 1.8.2 written by Dimitri van Heesch, © 1997-2004