diff --git a/interface/DynamicTTreeInterface.h b/interface/DynamicTTreeInterface.h index aef94a7..b5aa846 100644 --- a/interface/DynamicTTreeInterface.h +++ b/interface/DynamicTTreeInterface.h @@ -19,7 +19,7 @@ class DYNAMIC_TREE_NAME: public DynamicTTreeBase DATA_TABLE #undef DATA //---c arrays -#define DATA(t, name, size) argument_type::type* name; +#define DATA(t, name, size, MAX_SIZE) argument_type::type* name; DATA_VECT_TABLE #undef DATA //---c++ classes @@ -39,31 +39,31 @@ class DYNAMIC_TREE_NAME: public DynamicTTreeBase //---basic types std::string leaf; #define DATA(t, name) \ - name=0; \ + name=0; \ leaf = std::string(#name)+type_map[typeid(argument_type::type)]; \ tree_->Branch(#name, &name, leaf.c_str()); -DATA_TABLE + DATA_TABLE #undef DATA //---c arrays -#define DATA(t, name, size) \ - name = new argument_type::type[size](); \ +#define DATA(t, name, size, MAX_SIZE) \ + name = new argument_type::type[MAX_SIZE](); \ leaf = std::string(#name)+"["+#size+"]"+type_map[typeid(argument_type::type)]; \ - tree_->Branch(#name, name, leaf.c_str()); -DATA_VECT_TABLE + tree_->Branch(#name, name, leaf.c_str()); + DATA_VECT_TABLE #undef DATA //---c++ classes #define DATA(t, name, ...) \ name=new argument_type::type(); \ tree_->Branch(#name, &name); -DATA_CLASS_TABLE + DATA_CLASS_TABLE #undef DATA - } //---costructor for already existing TChain DYNAMIC_TREE_NAME(TChain* t): DynamicTTreeBase() { + std::cout << "HHG" << std::endl; //---save TTree ptr tree_ = t; @@ -77,7 +77,7 @@ DATA_TABLE tree_->GetEntry(0); //---c array -#define DATA(t, name, size) name=new argument_type::type[size](); tree_->SetBranchAddress(#name, name); +#define DATA(t, name, size, MAX_SIZE) name=new argument_type::type[size](); tree_->SetBranchAddress(#name, name); DATA_VECT_TABLE #undef DATA //---c++ classes @@ -91,9 +91,9 @@ DATA_CLASS_TABLE DYNAMIC_TREE_NAME(TTree* t): DynamicTTreeBase() { + //---save TTree ptr tree_ = t; - //---set branches //---basic types #define DATA(t, name) name=0; tree_->SetBranchAddress(#name, &name); @@ -101,10 +101,12 @@ DATA_TABLE #undef DATA //---get first entry in case c-arrays range depends on one of the previous variables - tree_->GetEntry(0); + tree_->GetEntry(0); + + //---c array -#define DATA(t, name, size) name=new argument_type::type[size](); tree_->SetBranchAddress(#name, name); +#define DATA(t, name, size, MAX_SIZE) name=new argument_type::type[size](); tree_->SetBranchAddress(#name, name); DATA_VECT_TABLE #undef DATA //---c++ classes @@ -127,7 +129,7 @@ DATA_CLASS_TABLE DATA_TABLE #undef DATA //---c array -#define DATA(t, name, size) \ +#define DATA(t, name, size, MAX_SIZE) \ if(name) delete[] name; \ name=new argument_type::type[size]; \ tree_->SetBranchAddress(#name, name); diff --git a/src/DynamicTTreeBase.cc b/src/DynamicTTreeBase.cc index e86e579..72bd4a8 100644 --- a/src/DynamicTTreeBase.cc +++ b/src/DynamicTTreeBase.cc @@ -10,7 +10,8 @@ std::map DynamicTTreeBase::type_map={ {typeid(float), "/F"}, {typeid(double), "/D"}, {typeid(long int), "/L"}, - {typeid(unsigned long int), "/l"} + {typeid(unsigned long int), "/l"}, + {typeid(unsigned long long), "/l"} }; bool DynamicTTreeBase::NextEntry(long int entry) diff --git a/test/DT_SimpleExample.cpp b/test/DT_SimpleExample.cpp index 9c78b3b..ffb985c 100644 --- a/test/DT_SimpleExample.cpp +++ b/test/DT_SimpleExample.cpp @@ -9,11 +9,13 @@ //---Define the TTree branches #define DYNAMIC_TREE_NAME DynamicTTree +#define MAX_SIZE 100 + #define DATA_TABLE \ DATA(int, i) \ DATA(float, f) #define DATA_VECT_TABLE \ - DATA(int, vi, i) + DATA(int, vi, i, MAX_SIZE) #define DATA_CLASS_TABLE \ DATA(std::string, s) \ DATA(std::map, m, >)