GaudiTuples.h
Go to the documentation of this file.00001
00002 #ifndef GAUDIALG_GAUDITUPLES_H
00003 #define GAUDIALG_GAUDITUPLES_H 1
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #include "GaudiKernel/ClassID.h"
00021
00022
00023
00024 #include "GaudiAlg/Maps.h"
00025 #include "GaudiAlg/Tuple.h"
00026 #include "GaudiAlg/TupleObj.h"
00027
00028
00037
00038
00039 template <class PBASE>
00040 class GAUDI_API GaudiTuples: public PBASE
00041 {
00042 public:
00043
00045 typedef GaudiAlg::HistoID HistoID;
00047 typedef Tuples::Tuple Tuple ;
00049 typedef GaudiAlg::TupleID TupleID ;
00051 typedef GaudiAlg::TupleMapTitle TupleMapTitle ;
00053 typedef GaudiAlg::TupleMapNumericID TupleMapNumID ;
00055 typedef GaudiAlg::TupleMapLiteralID TupleMapLitID ;
00056
00057 public:
00058
00090 Tuple nTuple ( const std::string& title ,
00091 const CLID& clid = CLID_ColumnWiseTuple ) const ;
00092
00131 Tuple nTuple ( const TupleID& ID ,
00132 const std::string& title ,
00133 const CLID& clid = CLID_ColumnWiseTuple ) const ;
00134
00165 Tuple evtCol ( const std::string& title ,
00166 const CLID& clid = CLID_ColumnWiseTuple ) const ;
00167
00206 Tuple evtCol ( const TupleID& ID ,
00207 const std::string& title ,
00208 const CLID& clid = CLID_ColumnWiseTuple ) const ;
00209
00210 public:
00211
00213 bool produceNTuples () const { return m_produceNTuples ; }
00215 bool splitNTupleDir () const { return m_splitNTupleDir ; }
00217 const std::string& nTupleLUN () const { return m_nTupleLUN ; }
00219 const std::string& nTupleTopDir () const { return m_nTupleTopDir ; }
00221 const std::string& nTupleDir () const { return m_nTupleDir ; }
00223 TupleID::NumericID nTupleOffSet () const { return m_nTupleOffSet ; }
00225 std::string nTuplePath () const
00226 {
00227 const std::string path = nTupleLUN() + "/" + nTupleTopDir() + nTupleDir();
00228 return ( splitNTupleDir() ? dirHbookName( path ) : path ) ;
00229 }
00231 bool produceEvtCols () const { return m_produceEvtCols ; }
00233 bool splitEvtColDir () const { return m_splitEvtColDir ; }
00235 const std::string& evtColLUN () const { return m_evtColLUN ; }
00237 const std::string& evtColTopDir () const { return m_evtColTopDir ; }
00239 const std::string& evtColDir () const { return m_evtColDir ; }
00241 TupleID::NumericID evtColOffSet () const { return m_evtColOffSet ; }
00243 std::string evtColPath () const
00244 {
00245 std::string path = evtColLUN() + "/" + evtColTopDir() + evtColDir();
00246 return ( splitEvtColDir() ? dirHbookName( path ) : path );
00247 }
00249 bool tuplesPrint () const { return m_tuplesPrint ; }
00251 bool evtColsPrint () const { return m_evtColsPrint ; }
00252
00253 public :
00254
00258 long printTuples () const ;
00262 long printEvtCols () const ;
00263
00264 public :
00265
00267 bool nTupleExists ( const TupleID& ID ) const;
00269 bool evtColExists ( const TupleID& ID ) const;
00270
00271 protected:
00272
00274 const TupleMapTitle& nTupleMapTitle () const { return m_nTupleMapTitle ; }
00276 const TupleMapTitle& evtColMapTitle () const { return m_evtColMapTitle ; }
00278 const TupleMapNumID& nTupleMapNumID () const { return m_nTupleMapNumID ; }
00280 const TupleMapNumID& evtColMapNumID () const { return m_evtColMapNumID ; }
00282 const TupleMapLitID& nTupleMapLitID () const { return m_nTupleMapLitID ; }
00284 const TupleMapLitID& evtColMapLitID () const { return m_evtColMapLitID ; }
00285
00286 protected:
00287
00295 virtual Tuples::TupleObj*
00296 createNTuple ( const std::string& name ,
00297 NTuple::Tuple* tuple ,
00298 const CLID& clid ) const ;
00306 virtual Tuples::TupleObj*
00307 createEvtCol ( const std::string& name ,
00308 NTuple::Tuple* tuple ,
00309 const CLID& clid ) const ;
00310
00311 public:
00312
00314 GaudiTuples ( const std::string & name,
00315 ISvcLocator * pSvcLocator );
00317 GaudiTuples ( const std::string& type ,
00318 const std::string& name ,
00319 const IInterface* parent );
00321 virtual ~GaudiTuples();
00322
00323 protected:
00324
00328 virtual StatusCode initialize ();
00332 virtual StatusCode finalize ();
00333
00334 private:
00335
00337 inline void initGaudiTuplesConstructor()
00338 {
00339 m_produceNTuples = true ;
00340 m_splitNTupleDir = false ;
00341 m_nTupleLUN = "FILE1" ;
00342 m_nTupleTopDir = "" ;
00343 m_nTupleDir = this->name() ;
00344 m_nTupleOffSet = 0 ;
00345
00346 m_produceEvtCols = false ;
00347 m_splitEvtColDir = false ;
00348 m_evtColLUN = "EVTCOL" ;
00349 m_evtColTopDir = "" ;
00350 m_evtColDir = this->name() ;
00351 m_evtColOffSet = 0 ;
00352
00353 m_tuplesPrint = true ;
00354 m_evtColsPrint = false ;
00355
00356 this -> declareProperty
00357 ( "NTupleProduce" , m_produceNTuples ,
00358 "General switch to enable/disable N-tuples" ) ;
00359 this -> declareProperty
00360 ( "NTuplePrint" , m_tuplesPrint ,
00361 "Print N-tuple statistics" )
00362 -> declareUpdateHandler ( &GaudiTuples<PBASE>::printNTupleHandler , this ) ;
00363 this -> declareProperty
00364 ( "NTupleSplitDir" , m_splitNTupleDir ,
00365 "Split long directory names into short pieces (suitable for HBOOK)" ) ;
00366 this -> declareProperty
00367 ( "NTupleOffSet" , m_nTupleOffSet ,
00368 "Offset for numerical N-tuple ID" ) ;
00369 this -> declareProperty
00370 ( "NTupleLUN" , m_nTupleLUN ,
00371 "Logical File Unit for N-tuples" ) ;
00372 this -> declareProperty
00373 ( "NTupleTopDir" , m_nTupleTopDir ,
00374 "Top-level directory for N-Tuples") ;
00375 this -> declareProperty
00376 ( "NTupleDir" , m_nTupleDir ,
00377 "Subdirectory for N-Tuples" ) ;
00378
00379 this -> declareProperty
00380 ( "EvtColsProduce" , m_produceEvtCols ,
00381 "General switch to enable/disable Event Tag Collections" ) ;
00382 this -> declareProperty
00383 ( "EvtColsPrint" , m_evtColsPrint ,
00384 "Print statistics for Event Tag Collections " )
00385 -> declareUpdateHandler ( &GaudiTuples<PBASE>::printEvtColHandler , this ) ;
00386 this -> declareProperty
00387 ( "EvtColSplitDir" , m_splitEvtColDir ,
00388 "Split long directory names into short pieces" ) ;
00389 this -> declareProperty
00390 ( "EvtColOffSet" , m_evtColOffSet ,
00391 "Offset for numerical N-tuple ID" ) ;
00392 this -> declareProperty
00393 ( "EvtColLUN" , m_evtColLUN ,
00394 "Logical File Unit for Event Tag Collections" ) ;
00395 this -> declareProperty
00396 ( "EvtColTopDir" , m_evtColTopDir ,
00397 "Top-level directory for Event Tag Collections" ) ;
00398 this -> declareProperty
00399 ( "EvtColDir" , m_evtColDir ,
00400 "Subdirectory for Event Tag Collections" ) ;
00401
00402 }
00403
00404 private:
00405
00407 void printNTupleHandler ( Property& ) ;
00409 void printEvtColHandler ( Property& ) ;
00410
00411 private:
00412
00414 bool m_produceNTuples ;
00416 bool m_splitNTupleDir ;
00418 std::string m_nTupleLUN ;
00420 std::string m_nTupleTopDir ;
00422 std::string m_nTupleDir ;
00424 TupleID::NumericID m_nTupleOffSet ;
00425
00427 bool m_produceEvtCols ;
00429 bool m_splitEvtColDir ;
00431 std::string m_evtColLUN ;
00433 std::string m_evtColTopDir ;
00435 std::string m_evtColDir ;
00437 TupleID::NumericID m_evtColOffSet ;
00438
00440 bool m_tuplesPrint ;
00442 bool m_evtColsPrint ;
00443
00445 mutable TupleMapTitle m_nTupleMapTitle ;
00447 mutable TupleMapNumID m_nTupleMapNumID ;
00449 mutable TupleMapLitID m_nTupleMapLitID ;
00450
00452 mutable TupleMapTitle m_evtColMapTitle ;
00454 mutable TupleMapNumID m_evtColMapNumID ;
00456 mutable TupleMapLitID m_evtColMapLitID ;
00457
00458 };
00459
00460
00461
00462 #endif // GAUDIALG_GAUDITUPLES_H
00463