SusyNtuple
SusyNtuple/VarHandle.h
00001 // Dear emacs, this is -*- c++ -*-
00002 // $Id: CodeGenerator_v2_constants.h 510583 2012-07-18 09:12:16Z krasznaa $
00003 #ifndef D3PDREADER_VARHANDLE_H
00004 #define D3PDREADER_VARHANDLE_H
00005 
00006 // ROOT include(s):
00007 #include <TString.h>
00008 #include <TDataType.h>
00009 
00010 // Local include(s):
00011 #include "SusyNtuple/D3PDReadStats.h"
00012 
00013 // Forward declaration(s):
00014 class TObject;
00015 class TTree;
00016 class TBranch;
00017 
00018 namespace D3PDReader {
00019 
00029    class VarHandleBase {
00030 
00031    protected:
00033       enum BranchAvailability {
00034          UNKNOWN = 0, 
00035          AVAILABLE = 1, 
00036          UNAVAILABLE = 2 
00037       };
00038 
00039    public:
00041       VarHandleBase( ::TObject* parent = 0, const char* name = "",
00042                      const ::Long64_t* master = 0 );
00044       virtual ~VarHandleBase() {}
00045 
00047       ::TObject* GetParent() const;
00049       void SetParent( ::TObject* parent );
00050 
00052       const char* GetName() const;
00054       void SetName( const char* name );
00055 
00057       const char* GetType() const;
00059       void SetType( const char* type );
00060 
00062       const ::Long64_t* GetMaster() const;
00064       void SetMaster( const ::Long64_t* master );
00065 
00067       virtual void ReadFrom( ::TTree* tree ) = 0;
00069       virtual ::TBranch* WriteTo( ::TTree* tree ) = 0;
00070 
00072       ::Bool_t IsActive() const;
00074       void SetActive( ::Bool_t active = kTRUE );
00075 
00077       virtual ::Bool_t IsAvailable() const;
00078 
00080       virtual void ReadCurrentEntry() const = 0;
00081 
00083       virtual void Clear() = 0;
00084 
00086       virtual VariableStats GetStatistics() const;
00087 
00088    protected:
00090       ::Bool_t ConnectVariable( void* var, ::TClass* realClass,
00091                                 EDataType dtype, Bool_t isptr ) const;
00093       void UpdateBranch() const;
00095       void UpdateStat( ::TBranch* br ) const;
00097       const char* RootType( const char* typeid_type ) const;
00099       const char* RootCppType( const char* typeid_type ) const;
00100 
00101       const ::Long64_t* fMaster; 
00102       ::TObject* fParent; 
00103       ::Bool_t fFromInput; 
00104       ::TTree* fInTree; 
00105       mutable ::TBranch* fInBranch; 
00106       mutable BranchAvailability fAvailable; 
00107 
00108    private:
00109       ::TString fName; 
00110       ::Bool_t fActive; 
00111 
00112       ::TString fType; 
00113       mutable std::vector< ::Long64_t > fEntriesRead; 
00114       mutable std::vector< ::Float_t > fBranchSize; 
00115       mutable std::vector< ::Float_t > fZippedSize; 
00116 
00117    }; // class VarHandleBase
00118 
00130    template< typename Type >
00131    class VarHandle : public VarHandleBase {
00132 
00133    public:
00135       typedef Type& result_type;
00137       typedef const Type& const_result_type;
00138 
00140       VarHandle( ::TObject* parent = 0, const char* name = "",
00141                  const ::Long64_t* master = 0 );
00143       ~VarHandle();
00144 
00146       virtual void ReadFrom( ::TTree* tree );
00148       virtual ::TBranch* WriteTo( ::TTree* tree );
00149 
00151       result_type operator()();
00153       const_result_type operator()() const;
00154 
00156       virtual void ReadCurrentEntry() const;
00157 
00159       virtual void Clear();
00160 
00161    private:
00162       mutable Type fVariable; 
00163 
00164    }; // class VarHandle
00165 
00178    template< typename Type >
00179    class VarHandle< Type* > : public VarHandleBase {
00180 
00181    public:
00183       typedef Type* result_type;
00185       typedef const Type* const_result_type;
00186 
00188       VarHandle( ::TObject* parent = 0, const char* name = "",
00189                  const ::Long64_t* master = 0 );
00191       ~VarHandle();
00192 
00194       virtual void ReadFrom( ::TTree* tree );
00196       virtual ::TBranch* WriteTo( ::TTree* tree );
00197 
00199       result_type operator()();
00201       const_result_type operator()() const;
00202 
00204       virtual void ReadCurrentEntry() const;
00205 
00207       virtual void Clear();
00208 
00209    private:
00210       mutable Type* fVariable; 
00211 
00212    }; // class VarHandle
00213 
00214 } // namespace D3PDReader
00215 
00216 // Include the implementation:
00217 #ifndef __CLING__
00218 #include "VarHandle.icc"
00219 #endif // cling
00220 
00221 #endif // D3PDREADER_VARHANDLE_H
 All Classes Functions Variables Typedefs Enumerations Enumerator