Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 16 additions & 14 deletions interface/DynamicTTreeInterface.h
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ class DYNAMIC_TREE_NAME: public DynamicTTreeBase
DATA_TABLE
#undef DATA
//---c arrays
#define DATA(t, name, size) argument_type<void(t)>::type* name;
#define DATA(t, name, size, MAX_SIZE) argument_type<void(t)>::type* name;
DATA_VECT_TABLE
#undef DATA
//---c++ classes
Expand All @@ -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<void(t)>::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<void(t)>::type[size](); \
#define DATA(t, name, size, MAX_SIZE) \
name = new argument_type<void(t)>::type[MAX_SIZE](); \
leaf = std::string(#name)+"["+#size+"]"+type_map[typeid(argument_type<void(t)>::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<void(t __VA_ARGS__)>::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;

Expand All @@ -77,7 +77,7 @@ DATA_TABLE
tree_->GetEntry(0);

//---c array
#define DATA(t, name, size) name=new argument_type<void(t)>::type[size](); tree_->SetBranchAddress(#name, name);
#define DATA(t, name, size, MAX_SIZE) name=new argument_type<void(t)>::type[size](); tree_->SetBranchAddress(#name, name);
DATA_VECT_TABLE
#undef DATA
//---c++ classes
Expand All @@ -91,20 +91,22 @@ 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);
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<void(t)>::type[size](); tree_->SetBranchAddress(#name, name);
#define DATA(t, name, size, MAX_SIZE) name=new argument_type<void(t)>::type[size](); tree_->SetBranchAddress(#name, name);
DATA_VECT_TABLE
#undef DATA
//---c++ classes
Expand All @@ -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<void(t)>::type[size]; \
tree_->SetBranchAddress(#name, name);
Expand Down
3 changes: 2 additions & 1 deletion src/DynamicTTreeBase.cc
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,8 @@ std::map<std::type_index, const char*> 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)
Expand Down
4 changes: 3 additions & 1 deletion test/DT_SimpleExample.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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, <std::string, std::pair<float, int> >)
Expand Down