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 IIncidentSvc;
26 class THistSvc: public extends3<Service, ITHistSvc, IIncidentListener,
27  IIoComponent> {
28 
29 public:
30 
31  virtual StatusCode initialize();
32  virtual StatusCode reinitialize();
33  virtual StatusCode finalize();
34 
35  virtual StatusCode regHist(const std::string& name);
36  virtual StatusCode regHist(const std::string& name, TH1*);
37  virtual StatusCode regHist(const std::string& name, TH2*);
38  virtual StatusCode regHist(const std::string& name, TH3*);
39 
40  virtual StatusCode getHist(const std::string& name, TH1*&) const;
41  virtual StatusCode getHist(const std::string& name, TH2*&) const;
42  virtual StatusCode getHist(const std::string& name, TH3*&) const;
43 
44  virtual StatusCode regTree(const std::string& name);
45  virtual StatusCode regTree(const std::string& name, TTree*);
46  virtual StatusCode getTree(const std::string& name, TTree*&) const;
47 
48  virtual StatusCode regGraph(const std::string& name);
49  virtual StatusCode regGraph(const std::string& name, TGraph*);
50  virtual StatusCode getGraph(const std::string& name, TGraph*&) const;
51 
52  virtual StatusCode deReg(TObject* obj);
53  virtual StatusCode deReg(const std::string& name);
54 
55  virtual std::vector<std::string> getHists() const;
56  virtual std::vector<std::string> getTrees() const;
57  virtual std::vector<std::string> getGraphs() const;
58 
59  virtual StatusCode getTHists(TDirectory *td, TList &,
60  bool recurse=false) const;
61  virtual StatusCode getTHists(const std::string& name, TList &,
62  bool recurse=false) const;
63 
64  virtual StatusCode getTHists(TDirectory *td, TList &tl,
65  bool recurse=false, bool reg=false);
66  virtual StatusCode getTHists(const std::string& name, TList &tl,
67  bool recurse=false, bool reg=false);
68 
69  virtual StatusCode getTTrees(TDirectory *td, TList &,
70  bool recurse=false) const;
71  virtual StatusCode getTTrees(const std::string& name, TList &,
72  bool recurse=false) const;
73 
74  virtual StatusCode getTTrees(TDirectory *td, TList & tl,
75  bool recurse=false, bool reg=false);
76  virtual StatusCode getTTrees(const std::string& name, TList & tl,
77  bool recurse=false, bool reg=false);
78 
79  virtual bool exists(const std::string& name) const;
80 
81  THistSvc(const std::string& name, ISvcLocator *svc );
82 
83  void handle(const Incident&);
84 
85  // From IIoComponent
86  virtual StatusCode io_reinit ();
87 
88 
89 protected:
90 
91  virtual ~THistSvc();
92 
93 private:
94 
96  public:
99  private:
100  TDirectory* m_gd;
101  TFile* m_gf;
102  int m_ge;
103  };
104 
105  enum Mode {
112  };
113 
114  struct THistID {
115  std::string id;
116  bool temp;
117  TObject* obj;
118  TFile* file;
120 
121  THistID():id(""),temp(true),obj(0),file(0),mode(INVALID) {}
122  THistID(const THistID& rhs):id(rhs.id), temp(rhs.temp),
123  obj(rhs.obj), file(rhs.file), mode(rhs.mode) {}
124  THistID(std::string& i, bool& t, TObject* o, TFile* f)
125  : id(i), temp(t), obj(o), file(f), mode(INVALID){
126  }
127  THistID(std::string& i, bool& t, TObject* o, TFile* f, Mode m)
128  : id(i), temp(t), obj(o), file(f), mode(m){
129  }
130 
131  bool operator < (THistID const &rhs) const {
132  return (obj < rhs.obj);
133  }
134  };
135 
136 
137  template <typename T>
138  StatusCode regHist_i(T* hist, const std::string& name);
139  template <typename T>
140  StatusCode getHist_i(const std::string& name, T*& hist, bool quiet=false) const;
141  template <typename T>
142  StatusCode readHist_i(const std::string& name, T*& hist) const;
143 
144 
145  StatusCode readHist(const std::string& name, TH1*&) const;
146  StatusCode readHist(const std::string& name, TH2*&) const;
147  StatusCode readHist(const std::string& name, TH3*&) const;
148  StatusCode readTree(const std::string& name, TTree*&) const;
149 
150  void updateFiles();
151  StatusCode write();
152  StatusCode connect(const std::string&);
153  TDirectory* changeDir(const THistSvc::THistID& hid) const;
154  std::string dirname(std::string& dir) const;
155  void removeDoubleSlash(std::string&) const;
156 
157  bool browseTDir(TDirectory* dir) const;
158 
159  bool findStream(const std::string& name, std::string& root,
160  std::string& rem, TFile*& file) const;
161  void parseString(const std::string& id, std::string& root, std::string& rem)
162  const;
163 
165  void setupInputFile( Property& inputfile );
166 
168  void setupOutputFile( Property& outputfile );
169 
170  void setupCompressionLevel( Property& cmp );
171 
172  void copyFileLayout(TDirectory*, TDirectory*);
173 
174  void MergeRootFile( TDirectory *target, TDirectory *source);
175 
177 
178  mutable MsgStream m_log;
179 
181  std::vector<std::string> m_Rstream, m_Wstream;
184 
187  std::set<std::string> m_alreadyConnectedInFiles;
188 
191  std::set<std::string> m_alreadyConnectedOutFiles;
192 
193 
194  typedef std::map<std::string, THistID> uidMap;
195  typedef std::multimap<std::string, THistID> idMap;
196  typedef std::map<TObject*, THistID> objMap;
197  typedef std::multimap<std::string, std::string> streamMap;
198 
202 
203  std::map<std::string, std::pair<TFile*,Mode> > m_files; // stream->file
204  streamMap m_fileStreams; // fileName->streams
205 
206  std::map<std::string, std::string > m_sharedFiles; // stream->filename of shared files
207 
210 
211  mutable std::string m_curstream;
212 
215 
218 
219 };
220 
221 #ifndef GAUDISVC_THISTSVC_ICC
222  #include "THistSvc.icc"
223 #endif
224 
225 
226 #endif
bool m_delayConnect
Definition: THistSvc.h:209
Definition of the MsgStream class used to transmit messages.
Definition: MsgStream.h:24
THistID(std::string &i, bool &t, TObject *o, TFile *f, Mode m)
Definition: THistSvc.h:127
The ISvcLocator is the interface implemented by the Service Factory in the Application Manager to loc...
Definition: ISvcLocator.h:26
THistID(const THistID &rhs)
Definition: THistSvc.h:122
std::string m_curstream
Definition: THistSvc.h:211
virtual StatusCode deReg(TObject *obj)
Definition: THistSvc.cpp:929
void handle(const Incident &)
Inform that a new incident has occurred.
Definition: THistSvc.cpp:1911
IntegerProperty m_autoFlush
Definition: THistSvc.h:182
IntegerProperty m_autoSave
Definition: THistSvc.h:182
virtual StatusCode getGraph(const std::string &name, TGraph *&) const
Definition: THistSvc.cpp:1154
IIncidentSvc * p_incSvc
Definition: THistSvc.h:213
bool findStream(const std::string &name, std::string &root, std::string &rem, TFile *&file) const
Definition: THistSvc.cpp:1210
bool browseTDir(TDirectory *dir) const
Definition: THistSvc.cpp:413
bool signaledStop
Definition: THistSvc.h:208
void setupCompressionLevel(Property &cmp)
Definition: THistSvc.cpp:1278
StatusCode rootOpenAction(FILEMGR_CALLBACK_ARGS)
Definition: THistSvc.cpp:2132
void copyFileLayout(TDirectory *, TDirectory *)
helper function to recursively copy the layout of a TFile into a new TFile
Definition: THistSvc.cpp:1969
TDirectory * changeDir(const THistSvc::THistID &hid) const
Definition: THistSvc.cpp:1746
objMap m_tobjs
Definition: THistSvc.h:201
std::multimap< std::string, THistID > idMap
Definition: THistSvc.h:195
Base class used to extend a class implementing other interfaces.
Definition: extends.h:140
virtual StatusCode regTree(const std::string &name)
Definition: THistSvc.cpp:1035
StatusCode write()
Definition: THistSvc.cpp:1478
std::vector< std::string > m_Wstream
Definition: THistSvc.h:181
#define FILEMGR_CALLBACK_ARGS
Definition: IFileMgr.h:339
StringArrayProperty m_inputfile
Definition: THistSvc.h:180
BooleanProperty m_print
Definition: THistSvc.h:183
StringArrayProperty m_outputfile
Definition: THistSvc.h:180
virtual StatusCode regHist(const std::string &name)
Definition: THistSvc.cpp:1004
virtual StatusCode reinitialize()
Initialization (from INITIALIZED or RUNNING to INITIALIZED, via CONFIGURED).
Definition: THistSvc.cpp:233
std::string id
Definition: THistSvc.h:115
void setupOutputFile(Property &outputfile)
call-back method to handle output stream property
Definition: THistSvc.cpp:1337
std::string dirname(std::string &dir) const
Definition: THistSvc.cpp:1775
virtual StatusCode getTree(const std::string &name, TTree *&) const
Definition: THistSvc.cpp:1126
StatusCode readTree(const std::string &name, TTree *&) const
Definition: THistSvc.cpp:1203
virtual std::vector< std::string > getHists() const
Definition: THistSvc.cpp:1105
std::vector< std::string > m_Rstream
Definition: THistSvc.h:181
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:30
std::map< std::string, std::pair< TFile *, Mode > > m_files
Definition: THistSvc.h:203
bool m_okToConnect
Definition: THistSvc.h:209
IntegerProperty m_maxFileSize
Definition: THistSvc.h:182
std::multimap< std::string, std::string > streamMap
Definition: THistSvc.h:197
virtual std::vector< std::string > getTrees() const
Definition: THistSvc.cpp:1133
virtual StatusCode getTHists(TDirectory *td, TList &, bool recurse=false) const
Definition: THistSvc.cpp:459
virtual StatusCode regGraph(const std::string &name)
Definition: THistSvc.cpp:1056
StatusCode rootOpenErrAction(FILEMGR_CALLBACK_ARGS)
Definition: THistSvc.cpp:2164
void parseString(const std::string &id, std::string &root, std::string &rem) const
Definition: THistSvc.cpp:1257
list file
Definition: ana.py:160
StatusCode getHist_i(const std::string &name, T *&hist, bool quiet=false) const
Definition: THistSvc.icc:142
virtual StatusCode initialize()
Initialization (from CONFIGURED to INITIALIZED).
Definition: THistSvc.cpp:74
THistID(std::string &i, bool &t, TObject *o, TFile *f)
Definition: THistSvc.h:124
IntegerProperty m_compressionLevel
Definition: THistSvc.h:182
virtual const std::string & name() const
Retrieve name of the service.
Definition: Service.cpp:331
bool operator<(THistID const &rhs) const
Definition: THistSvc.h:131
virtual StatusCode io_reinit()
callback method to reinitialize the internal state of the component for I/O purposes (e...
Definition: THistSvc.cpp:2009
virtual StatusCode finalize()
Finalize (from INITIALIZED to CONFIGURED).
Definition: THistSvc.cpp:247
std::map< std::string, std::string > m_sharedFiles
Definition: THistSvc.h:206
TObject * obj
Definition: THistSvc.h:117
Property base class allowing Property* collections to be "homogeneous".
Definition: Property.h:43
virtual StatusCode getHist(const std::string &name, TH1 *&) const
Definition: THistSvc.cpp:1084
StatusCode regHist_i(T *hist, const std::string &name)
Definition: THistSvc.icc:17
uidMap m_uids
Definition: THistSvc.h:199
StatusCode readHist_i(const std::string &name, T *&hist) const
Definition: THistSvc.icc:243
Base class for all Incidents (computing events).
Definition: Incident.h:16
std::map< TObject *, THistID > objMap
Definition: THistSvc.h:196
StatusCode connect(const std::string &)
Definition: THistSvc.cpp:1512
StatusCode readHist(const std::string &name, TH1 *&) const
Definition: THistSvc.cpp:1182
idMap m_ids
Definition: THistSvc.h:200
IFileMgr * p_fileMgr
Definition: THistSvc.h:214
virtual bool exists(const std::string &name) const
Definition: THistSvc.cpp:1899
tuple root
Definition: IOTest.py:42
std::set< std::string > m_alreadyConnectedOutFiles
list of already connected files.
Definition: THistSvc.h:191
virtual ~THistSvc()
Definition: THistSvc.cpp:67
virtual std::vector< std::string > getGraphs() const
Definition: THistSvc.cpp:1161
std::map< std::string, THistID > uidMap
Definition: THistSvc.h:194
MsgStream m_log
Definition: THistSvc.h:178
std::set< std::string > m_alreadyConnectedInFiles
list of already connected files.
Definition: THistSvc.h:187
THistSvc(const std::string &name, ISvcLocator *svc)
Definition: THistSvc.cpp:48
void setupInputFile(Property &inputfile)
call-back method to handle input stream property
Definition: THistSvc.cpp:1291
list i
Definition: ana.py:128
virtual StatusCode getTTrees(TDirectory *td, TList &, bool recurse=false) const
Definition: THistSvc.cpp:567
The interface implemented by the IncidentSvc service.
Definition: IIncidentSvc.h:22
streamMap m_fileStreams
Definition: THistSvc.h:204
void MergeRootFile(TDirectory *target, TDirectory *source)
Definition: THistSvc.cpp:1823
void removeDoubleSlash(std::string &) const
Definition: THistSvc.cpp:1813
void updateFiles()
Definition: THistSvc.cpp:1375