Gaudi Framework, version v21r4

Home   Generated: 7 Sep 2009

GaudiTuples.h

Go to the documentation of this file.
00001 // $Id: GaudiTuples.h,v 1.7 2008/10/27 19:22:20 marcocle Exp $
00002 #ifndef GAUDIALG_GAUDITUPLES_H
00003 #define GAUDIALG_GAUDITUPLES_H 1
00004 
00005 // ============================================================================
00006 /* @file GaudiTuples.h
00007  *
00008  *  Header file for class : GaudiTuples
00009  *
00010  *  @author Chris Jones   Christopher.Rob.Jones@cern.ch
00011  *  @author Vanya BELYAEV Ivan.Belyaev@itep.ru
00012  *  @date   2005-08-08
00013  */
00014 // ============================================================================
00015 
00016 // Include files
00017 // ============================================================================
00018 // GaudiKernel
00019 // ============================================================================
00020 #include "GaudiKernel/ClassID.h"
00021 // ============================================================================
00022 // GaudiAlg
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:  // trivial accessors
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 ;     // Switch ON/OFF ntuple production
00340     m_splitNTupleDir = false ;    // for HBOOK it is better to use 'true'
00341     m_nTupleLUN      = "FILE1" ;  // logical unit for ntuples
00342     m_nTupleTopDir   = "" ;       // top level ntuple directory
00343     m_nTupleDir      = this->name() ;   // ntuple directory
00344     m_nTupleOffSet   = 0  ;       // offset for ntuples
00345     //
00346     m_produceEvtCols = false ;    // Switch ON/OFF ntupel production
00347     m_splitEvtColDir = false ;    // for HBOOK it is better to use 'true'
00348     m_evtColLUN      = "EVTCOL" ; // logical unit for ntuples
00349     m_evtColTopDir   = ""    ;    // top level ntuple directory
00350     m_evtColDir      = this->name() ;   // ntuple directory
00351     m_evtColOffSet   = 0   ;      // offset for ntuples
00352     //
00353     m_tuplesPrint    = true  ;    // print tuples at end of job
00354     m_evtColsPrint   = false  ;   // print event collections at end of job
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& /* theProp */ ) ; //       "NTuplePrint"
00409   void printEvtColHandler  ( Property& /* theProp */ ) ; //      "EvtcolsPrint" 
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    ;                      // print tuples at finalization?
00442   bool m_evtColsPrint   ;            // print event collections at finalization
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 // The END 
00461 // ============================================================================
00462 #endif // GAUDIALG_GAUDITUPLES_H
00463 // ============================================================================

Generated at Mon Sep 7 18:05:34 2009 for Gaudi Framework, version v21r4 by Doxygen version 1.5.6 written by Dimitri van Heesch, © 1997-2004