From 228544e222aaccca2950342f9d0ee6e1917ad8c0 Mon Sep 17 00:00:00 2001 From: Paolo Meridiani Date: Tue, 4 Apr 2023 17:07:52 +0200 Subject: [PATCH 1/3] Adding c-matrix --- interface/DynamicTTreeInterface.h | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/interface/DynamicTTreeInterface.h b/interface/DynamicTTreeInterface.h index aef94a7..a3e63f6 100644 --- a/interface/DynamicTTreeInterface.h +++ b/interface/DynamicTTreeInterface.h @@ -6,6 +6,9 @@ #ifndef DATA_VECT_TABLE #define DATA_VECT_TABLE #endif +#ifndef DATA_MATRIX_TABLE +#define DATA_MATRIX_TABLE +#endif #ifndef DATA_CLASS_TABLE #define DATA_CLASS_TABLE #endif @@ -21,6 +24,10 @@ class DYNAMIC_TREE_NAME: public DynamicTTreeBase //---c arrays #define DATA(t, name, size) argument_type::type* name; DATA_VECT_TABLE +#undef DATA + //---c arrays +#define DATA(t, name, sizex, sizey) argument_type::type* name; + DATA_MATRIX_TABLE #undef DATA //---c++ classes #define DATA(t, name, ...) argument_type::type* name; TBranch* name ## _br = nullptr; @@ -50,6 +57,13 @@ DATA_TABLE leaf = std::string(#name)+"["+#size+"]"+type_map[typeid(argument_type::type)]; \ tree_->Branch(#name, name, leaf.c_str()); DATA_VECT_TABLE +#undef DATA + //---c matrix +#define DATA(t, name, sizex, sizey) \ + name = new argument_type::type[sizex][sizey](); \ + leaf = std::string(#name)+"["+#sizex+"]"+"["+#sizey+"]"+type_map[typeid(argument_type::type)]; \ + tree_->Branch(#name, name, leaf.c_str()); +DATA_MATRIX_TABLE #undef DATA //---c++ classes #define DATA(t, name, ...) \ @@ -79,6 +93,10 @@ DATA_TABLE //---c array #define DATA(t, name, size) name=new argument_type::type[size](); tree_->SetBranchAddress(#name, name); DATA_VECT_TABLE +#undef DATA + //---c matrix +#define DATA(t, name, sizex, sizey) name=new argument_type::type[sizex][sizey](); tree_->SetBranchAddress(#name, name); +DATA_MATRIX_TABLE #undef DATA //---c++ classes #define DATA(t, name, ...) name=new argument_type::type(); tree_->SetBranchAddress(#name, &name, &name ## _br); @@ -106,6 +124,10 @@ DATA_TABLE //---c array #define DATA(t, name, size) name=new argument_type::type[size](); tree_->SetBranchAddress(#name, name); DATA_VECT_TABLE +#undef DATA + //---c matrix +#define DATA(t, name, sizex, sizey) name=new argument_type::type[sizex][sizey](); tree_->SetBranchAddress(#name, name); +DATA_MATRIX_TABLE #undef DATA //---c++ classes #define DATA(t, name, ...) name=new argument_type::type(); tree_->SetBranchAddress(#name, &name, &name ## _br); @@ -132,6 +154,13 @@ DATA_CLASS_TABLE name=new argument_type::type[size]; \ tree_->SetBranchAddress(#name, name); DATA_VECT_TABLE +#undef DATA + //---c matrix +#define DATA(t, name, sizex, sizey) \ + if(name) delete[] name; \ + name=new argument_type::type[sizex][sizey]; \ + tree_->SetBranchAddress(#name, name); + DATA_MATRIX_TABLE #undef DATA //---c++ classes #define DATA(t, name, ...) \ From 49cd841ed8ba29d7061ef1a30f41ee309bdebbca Mon Sep 17 00:00:00 2001 From: Paolo Meridiani Date: Thu, 6 Apr 2023 20:29:47 +0200 Subject: [PATCH 2/3] Add max size --- interface/DynamicTTreeInterface.h | 52 +++++++------------------------ test/DT_SimpleExample.cpp | 4 ++- 2 files changed, 14 insertions(+), 42 deletions(-) diff --git a/interface/DynamicTTreeInterface.h b/interface/DynamicTTreeInterface.h index a3e63f6..8d8578a 100644 --- a/interface/DynamicTTreeInterface.h +++ b/interface/DynamicTTreeInterface.h @@ -6,9 +6,6 @@ #ifndef DATA_VECT_TABLE #define DATA_VECT_TABLE #endif -#ifndef DATA_MATRIX_TABLE -#define DATA_MATRIX_TABLE -#endif #ifndef DATA_CLASS_TABLE #define DATA_CLASS_TABLE #endif @@ -22,12 +19,8 @@ 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 arrays -#define DATA(t, name, sizex, sizey) argument_type::type* name; - DATA_MATRIX_TABLE #undef DATA //---c++ classes #define DATA(t, name, ...) argument_type::type* name; TBranch* name ## _br = nullptr; @@ -46,32 +39,24 @@ 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 -#undef DATA - //---c matrix -#define DATA(t, name, sizex, sizey) \ - name = new argument_type::type[sizex][sizey](); \ - leaf = std::string(#name)+"["+#sizex+"]"+"["+#sizey+"]"+type_map[typeid(argument_type::type)]; \ - tree_->Branch(#name, name, leaf.c_str()); -DATA_MATRIX_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 @@ -91,12 +76,8 @@ 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 matrix -#define DATA(t, name, sizex, sizey) name=new argument_type::type[sizex][sizey](); tree_->SetBranchAddress(#name, name); -DATA_MATRIX_TABLE #undef DATA //---c++ classes #define DATA(t, name, ...) name=new argument_type::type(); tree_->SetBranchAddress(#name, &name, &name ## _br); @@ -122,12 +103,8 @@ 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 matrix -#define DATA(t, name, sizex, sizey) name=new argument_type::type[sizex][sizey](); tree_->SetBranchAddress(#name, name); -DATA_MATRIX_TABLE #undef DATA //---c++ classes #define DATA(t, name, ...) name=new argument_type::type(); tree_->SetBranchAddress(#name, &name, &name ## _br); @@ -149,18 +126,11 @@ 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); DATA_VECT_TABLE -#undef DATA - //---c matrix -#define DATA(t, name, sizex, sizey) \ - if(name) delete[] name; \ - name=new argument_type::type[sizex][sizey]; \ - tree_->SetBranchAddress(#name, name); - DATA_MATRIX_TABLE #undef DATA //---c++ classes #define DATA(t, name, ...) \ 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, >) From d9fce079bdbc887d3f15c36b1c6781c634bb8911 Mon Sep 17 00:00:00 2001 From: Paolo Meridiani Date: Mon, 10 Apr 2023 17:45:00 +0200 Subject: [PATCH 3/3] fixing uint64 missing type --- interface/DynamicTTreeInterface.h | 7 +++++-- src/DynamicTTreeBase.cc | 3 ++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/interface/DynamicTTreeInterface.h b/interface/DynamicTTreeInterface.h index 8d8578a..b5aa846 100644 --- a/interface/DynamicTTreeInterface.h +++ b/interface/DynamicTTreeInterface.h @@ -63,6 +63,7 @@ class DYNAMIC_TREE_NAME: public DynamicTTreeBase DYNAMIC_TREE_NAME(TChain* t): DynamicTTreeBase() { + std::cout << "HHG" << std::endl; //---save TTree ptr tree_ = t; @@ -90,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); @@ -100,7 +101,9 @@ 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, MAX_SIZE) 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)