SusyNtuple
|
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