00001
00002
00014 #ifndef RootBranch_H
00015 #define RootBranch_H
00016
00017 #include "RootDataType.h"
00018
00019 #include "pattern/libhippo.h"
00020
00021 #include "TLeaf.h"
00022 #include "TObjArray.h"
00023
00024 #include <string>
00025 #include <vector>
00026 #include <boost/tokenizer.hpp>
00027 #include <boost/lexical_cast.hpp>
00028
00029 class TBranch;
00030
00031 namespace hippodraw {
00032
00040 class MDL_HIPPOPLOT_API RootBranch
00041 {
00042
00043 private:
00044
00047 mutable TBranch * m_branch;
00048
00051 TLeaf * m_leaf;
00052
00056 hippodraw::RootData::Type m_leaf_type;
00057
00060 int m_number_leaves;
00061
00065 int m_number_elements;
00066
00071 mutable Double_t m_double_data;
00072
00077 mutable Float_t m_float_data;
00078
00083 mutable Int_t m_int_data;
00084
00089 mutable UInt_t m_uint_data;
00094 mutable Short_t m_short_data;
00095
00100 mutable UShort_t m_ushort_data;
00101
00106 mutable Long64_t m_long64_data;
00107
00112 mutable ULong64_t m_ulong64_data;
00113
00121 mutable Double_t * m_vector_double_data;
00122
00128 mutable Float_t * m_vector_float_data;
00129
00135 mutable Int_t * m_vector_int_data;
00136
00142 mutable UInt_t * m_vector_uint_data;
00143
00144
00150 mutable Short_t * m_vector_short_data;
00151
00157 mutable UShort_t * m_vector_ushort_data;
00158
00164 mutable Long64_t * m_vector_long64_data;
00165
00171 mutable ULong64_t * m_vector_ulong64_data;
00172
00176 std::vector < int > m_shape;
00177
00182 int m_releventIndex;
00183
00186 mutable bool m_branch_set;
00187
00194 bool m_useable;
00195
00196 public:
00197
00200 RootBranch ( TBranch * );
00201
00202 private:
00203
00206 RootBranch ( const RootBranch & );
00207
00210 RootBranch ();
00211
00212 public:
00213
00216 ~RootBranch();
00217
00218
00220 bool isMultiDimensional() const;
00221
00225 int numberOfElements() const;
00226
00229 unsigned int size () const;
00230
00233 bool empty () const;
00234
00237 double valueAt ( unsigned int row ) const;
00238
00241 hippodraw::RootData::Type getType () const;
00242
00250 double * doubleArrayAt ( unsigned int row );
00251
00254 float * floatArrayAt ( unsigned int row );
00255
00258 int * intArrayAt ( unsigned int row );
00259
00262 unsigned int * uintArrayAt ( unsigned int row );
00263
00264 bool isFilled ( ) const;
00265
00272 unsigned int getRank () const;
00273
00277 void setReleventIndex( const std::vector< unsigned int >& index );
00278
00282 const std::vector < int > & getShape ();
00283
00285 TBranch * getTBranch();
00286
00289 bool isUseable () const;
00290
00291 private:
00292
00295 void setBranchAddress () const;
00296
00301 void initShape ( const char* title );
00302
00303 };
00304
00305 }
00306
00307 #endif // RootBranch_H