All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
GaudiTuples.h
Go to the documentation of this file.
1 #ifndef GAUDIALG_GAUDITUPLES_H
2 #define GAUDIALG_GAUDITUPLES_H 1
3 // ============================================================================
4 /* @file GaudiTuples.h
5  *
6  * Header file for class : GaudiTuples
7  *
8  * @author Chris Jones Christopher.Rob.Jones@cern.ch
9  * @author Vanya BELYAEV Ivan.Belyaev@itep.ru
10  * @date 2005-08-08
11  */
12 // ============================================================================
13 // Include files
14 // ============================================================================
15 #include "boost/algorithm/string/replace.hpp"
16 // ============================================================================
17 // GaudiKernel
18 // ============================================================================
19 #include "GaudiKernel/ClassID.h"
20 // ============================================================================
21 // GaudiAlg
22 // ============================================================================
23 #include "GaudiAlg/Maps.h"
24 #include "GaudiAlg/Tuple.h"
25 #include "GaudiAlg/TupleObj.h"
26 // ============================================================================
35 // ============================================================================
36 template <class PBASE>
37 class GAUDI_API GaudiTuples : public PBASE
38 {
39 public:
40  // ==========================================================================
51  // ==========================================================================
52 public:
53  // ==========================================================================
85  Tuple nTuple( const std::string& title, const CLID& clid = CLID_ColumnWiseTuple ) const;
86 
125  Tuple nTuple( const TupleID& ID, const std::string& title, const CLID& clid = CLID_ColumnWiseTuple ) const;
126 
157  Tuple evtCol( const std::string& title, const CLID& clid = CLID_ColumnWiseTuple ) const;
158 
197  Tuple evtCol( const TupleID& ID, const std::string& title, const CLID& clid = CLID_ColumnWiseTuple ) const;
198  // ==========================================================================
199 public: // trivial accessors
200  // ==========================================================================
202  bool produceNTuples() const { return m_produceNTuples; }
204  bool splitNTupleDir() const { return m_splitNTupleDir; }
206  const std::string& nTupleLUN() const { return m_nTupleLUN; }
208  const std::string& nTupleTopDir() const { return m_nTupleTopDir; }
210  const std::string& nTupleDir() const { return m_nTupleDir; }
212  TupleID::NumericID nTupleOffSet() const { return m_nTupleOffSet; }
214  std::string nTuplePath() const;
216  bool produceEvtCols() const { return m_produceEvtCols; }
218  bool splitEvtColDir() const { return m_splitEvtColDir; }
220  const std::string& evtColLUN() const { return m_evtColLUN; }
222  const std::string& evtColTopDir() const { return m_evtColTopDir; }
224  const std::string& evtColDir() const { return m_evtColDir; }
226  TupleID::NumericID evtColOffSet() const { return m_evtColOffSet; }
228  std::string evtColPath() const;
230  bool tuplesPrint() const { return m_tuplesPrint; }
232  bool evtColsPrint() const { return m_evtColsPrint; }
233  // ==========================================================================
234 public:
235  // ==========================================================================
239  long printTuples() const;
243  long printEvtCols() const;
244  // ==========================================================================
245 public:
246  // ==========================================================================
248  bool nTupleExists( const TupleID& ID ) const;
250  bool evtColExists( const TupleID& ID ) const;
251  // ==========================================================================
252 protected:
253  // ==========================================================================
255  const TupleMapTitle& nTupleMapTitle() const { return m_nTupleMapTitle; }
257  const TupleMapTitle& evtColMapTitle() const { return m_evtColMapTitle; }
259  const TupleMapID& nTupleMapID() const { return m_nTupleMapID; }
261  const TupleMapID& evtColMapID() const { return m_evtColMapID; }
262  // ==========================================================================
263 protected:
264  // ==========================================================================
272  virtual Tuples::TupleObj* createNTuple( const std::string& name, NTuple::Tuple* tuple, const CLID& clid ) const;
280  virtual Tuples::TupleObj* createEvtCol( const std::string& name, NTuple::Tuple* tuple, const CLID& clid ) const;
281  // ==========================================================================
282 public:
283  // ==========================================================================
285  GaudiTuples( const std::string& name, ISvcLocator* pSvcLocator );
287  GaudiTuples( const std::string& type, const std::string& name, const IInterface* parent );
289  ~GaudiTuples() override = default;
290  // ==========================================================================
291 protected:
292  // ==========================================================================
296  StatusCode initialize() override
297 #ifdef __ICC
298  {
299  return i_gtInitialize();
300  }
301  StatusCode i_gtInitialize()
302 #endif
303  ;
307  StatusCode finalize() override
308 #ifdef __ICC
309  {
310  return i_gtFinalize();
311  }
312  StatusCode i_gtFinalize()
313 #endif
314  ;
315  // ==========================================================================
316 private:
317  // ==========================================================================
320  {
321  m_tuplesPrint.declareUpdateHandler( &GaudiTuples<PBASE>::printNTupleHandler, this );
322  m_evtColsPrint.declareUpdateHandler( &GaudiTuples<PBASE>::printEvtColHandler, this );
323  }
324  // ==========================================================================
325 private:
326  // ==========================================================================
328  void printNTupleHandler( Gaudi::Details::PropertyBase& /* theProp */ ); // "NTuplePrint"
330  void printEvtColHandler( Gaudi::Details::PropertyBase& /* theProp */ ); // "EvtcolsPrint"
331  // ==========================================================================
332 private:
333  // ==========================================================================
334  Gaudi::Property<bool> m_produceNTuples{this, "NTupleProduce", true, "general switch to enable/disable N-tuples"};
335  Gaudi::Property<bool> m_tuplesPrint{this, "NTuplePrint", true, "print N-tuple statistics"};
336  Gaudi::Property<bool> m_splitNTupleDir{this, "NTupleSplitDir", false,
337  "split long directory names into short pieces (suitable for HBOOK)"};
338  Gaudi::Property<TupleID::NumericID> m_nTupleOffSet{this, "NTupleOffSet", 0, "offset for numerical N-tuple ID"};
339  Gaudi::Property<std::string> m_nTupleLUN{this, "NTupleLUN", "FILE1", "Logical File Unit for N-tuples"};
340  Gaudi::Property<std::string> m_nTupleTopDir{this, "NTupleTopDir", "", "top-level directory for N-Tuples"};
342  this, "NTupleDir", boost::algorithm::replace_all_copy( this->name(), ":", "_" ), "subdirectory for N-Tuples"};
343 
344  Gaudi::Property<bool> m_produceEvtCols{this, "EvtColsProduce", false,
345  "general switch to enable/disable Event Tag Collections"};
346  Gaudi::Property<bool> m_evtColsPrint{this, "EvtColsPrint", false, "print statistics for Event Tag Collections "};
347  Gaudi::Property<bool> m_splitEvtColDir{this, "EvtColSplitDir", false, "split long directory names into short pieces"};
348  Gaudi::Property<TupleID::NumericID> m_evtColOffSet{this, "EvtColOffSet", 0, "offset for numerical N-tuple ID"};
349  Gaudi::Property<std::string> m_evtColLUN{this, "EvtColLUN", "EVTCOL", "Logical File Unit for Event Tag Collections"};
350  Gaudi::Property<std::string> m_evtColTopDir{this, "EvtColTopDir", "",
351  "Top-level directory for Event Tag Collections"};
352  Gaudi::Property<std::string> m_evtColDir{this, "EvtColDir",
353  boost::algorithm::replace_all_copy( this->name(), ":", "_" ),
354  "Subdirectory for Event Tag Collections"};
355  // ==========================================================================
357  mutable TupleMapTitle m_nTupleMapTitle;
359  mutable TupleMapID m_nTupleMapID;
360  // ==========================================================================
362  mutable TupleMapTitle m_evtColMapTitle;
364  mutable TupleMapID m_evtColMapID;
365  // ==========================================================================
366 };
367 // ============================================================================
368 // The END
369 // ============================================================================
370 #endif // GAUDIALG_GAUDITUPLES_H
371 // ============================================================================
The ISvcLocator is the interface implemented by the Service Factory in the Application Manager to loc...
Definition: ISvcLocator.h:25
TupleMapTitle m_nTupleMapTitle
the actual storage of ntuples by title
Definition: GaudiTuples.h:357
Implementation of property with value of concrete type.
Definition: Property.h:313
Templated base class providing common &#39;ntupling&#39; methods.
Definition: GaudiTuples.h:37
bool splitEvtColDir() const
get the flag for Event Tag Collection path split (property "EvtColsSplitDir")
Definition: GaudiTuples.h:218
const std::string & evtColDir() const
get the Event Tag Collection directory (property "EvtColsDir")
Definition: GaudiTuples.h:224
Header file for class TupleObj.
TupleMapTitle m_evtColMapTitle
the actual storage of event collections by title
Definition: GaudiTuples.h:362
const std::string & nTupleLUN() const
get the logical unit for N-Tuples (property "NTupleLUN")
Definition: GaudiTuples.h:206
Tuples::Tuple Tuple
the actual type of the tuple
Definition: GaudiTuples.h:44
int NumericID
type for internal numeric ID
Definition: GaudiHistoID.h:49
GaudiAlg::TupleMapTitle TupleMapTitle
the actual type of (title) -> (tuple) mappping
Definition: GaudiTuples.h:48
const std::string & evtColTopDir() const
get the top-level Event Tag Collection directory (property "EvtColsTopDir")
Definition: GaudiTuples.h:222
const std::string & nTupleTopDir() const
get the top-level N-Tuple directory (property "NTupleTopDir")
Definition: GaudiTuples.h:208
bool evtColsPrint() const
print event collections at finalization
Definition: GaudiTuples.h:232
STL class.
TupleMapID m_evtColMapID
the actual storage of event collections by ID
Definition: GaudiTuples.h:364
A simple wrapper class over standard Gaudi NTuple::Tuple facility.
Definition: Tuple.h:116
const TupleMapTitle & nTupleMapTitle() const
access to the all ntuples by title
Definition: GaudiTuples.h:255
GaudiAlg::TupleID TupleID
the actual type of N-tuple ID
Definition: GaudiTuples.h:46
const TupleMapTitle & evtColMapTitle() const
access to the all evet tag collections by title
Definition: GaudiTuples.h:257
A simple wrapper class over standard Gaudi NTuple::Tuple facility.
Definition: TupleObj.h:196
GaudiAlg::TupleMapID TupleMapID
the actual type of (Numeric ID) -> (tuple) mappping
Definition: GaudiTuples.h:50
TupleID::NumericID nTupleOffSet() const
get the value for N-Tuple offset (property "NTupleOffSet")
Definition: GaudiTuples.h:212
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:26
Definition of the basic interface.
Definition: IInterface.h:234
GaudiAlg::HistoID HistoID
the actual type for histogram identifier
Definition: GaudiTuples.h:42
PropertyBase base class allowing PropertyBase* collections to be "homogeneous".
Definition: Property.h:32
unsigned int CLID
Class ID definition.
Definition: ClassID.h:8
bool tuplesPrint() const
print tuples at finalization
Definition: GaudiTuples.h:230
Abstract base class which allows the user to interact with the actual N tuple implementation.
Definition: NTuple.h:370
void initGaudiTuplesConstructor()
Constructor initialization and job options.
Definition: GaudiTuples.h:319
const TupleMapID & nTupleMapID() const
access to the all ntuples by numeric ID
Definition: GaudiTuples.h:259
TupleMapID m_nTupleMapID
the actual storage of ntuples by ID
Definition: GaudiTuples.h:359
const std::string & evtColLUN() const
get the logical unit for Event Tag Collections (property "EvtColsLUN")
Definition: GaudiTuples.h:220
const std::string & nTupleDir() const
get the N-Tuple directory (property "NTupleDir")
Definition: GaudiTuples.h:210
Common class providing an architecture-independent hash map.
Definition: HashMap.h:77
bool produceEvtCols() const
get the flag for Event Tag Collection production (property "EvtColsProduce")
Definition: GaudiTuples.h:216
TupleID::NumericID evtColOffSet() const
get the value for Event Tag Collection offset (property "EvtColsOffSet")
Definition: GaudiTuples.h:226
bool splitNTupleDir() const
get the flag for N-Tuple path split (property "NTupleSplitDir")
Definition: GaudiTuples.h:204
bool produceNTuples() const
get the flag for N-Tuple production (property "NTupleProduce")
Definition: GaudiTuples.h:202
#define GAUDI_API
Definition: Kernel.h:107
ID class for Histogram and Ntuples.
Definition: GaudiHistoID.h:44
Header file for class : Tuple.
const TupleMapID & evtColMapID() const
access to the all evet tag collections by numeric ID
Definition: GaudiTuples.h:261