1 #ifndef DTreeInterfaceObjects_h
2 #define DTreeInterfaceObjects_h
13 #include "TLorentzVector.h"
26 static_assert(std::is_same<Char_t, DType>::value || std::is_same<UChar_t, DType>::value ||
27 std::is_same<Short_t, DType>::value || std::is_same<UShort_t, DType>::value || std::is_same<Int_t, DType>::value ||
28 std::is_same<UInt_t, DType>::value || std::is_same<Float_t, DType>::value || std::is_same<Double_t, DType>::value ||
29 std::is_same<Long64_t, DType>::value || std::is_same<ULong64_t, DType>::value || std::is_same<Bool_t, DType>::value ||
30 std::is_same<TVector2, DType>::value || std::is_same<TVector3, DType>::value || std::is_same<TLorentzVector, DType>::value,
31 "DTreeTypeChecker ERROR: TYPE IS NOT SUPPORTED.");
36 static_assert(std::is_same<Char_t, DType>::value || std::is_same<UChar_t, DType>::value ||
37 std::is_same<Short_t, DType>::value || std::is_same<UShort_t, DType>::value || std::is_same<Int_t, DType>::value ||
38 std::is_same<UInt_t, DType>::value || std::is_same<Float_t, DType>::value || std::is_same<Double_t, DType>::value ||
39 std::is_same<Long64_t, DType>::value || std::is_same<ULong64_t, DType>::value || std::is_same<Bool_t, DType>::value,
40 "DTreeTypeChecker ERROR: TYPE IS NOT A SUPPORTED FUNDAMENTAL TYPE.");
45 static_assert(std::is_same<TVector2, DType>::value || std::is_same<TVector3, DType>::value || std::is_same<TLorentzVector, DType>::value,
46 "DTreeTypeChecker ERROR: TYPE IS NOT A SUPPORTED TOBJECT TYPE.");
65 while(dUserInfo->GetEntries() > 0)
66 dUserInfo->RemoveLast();
72 template <
typename DType>
void Register_Single(
string locBranchName);
73 template <
typename DType>
void Register_FundamentalArray(
string locBranchName,
string locArraySizeName,
size_t locInitialArraySize = 10);
74 template <
typename DType>
void Register_ClonesArray(
string locBranchName,
size_t locInitialArraySize = 10);
86 DTreeTypeChecker::Is_Supported<DType>();
87 dBranchNames.push_back(locBranchName);
88 dBranchTypeMap.insert(pair<string, type_index>(locBranchName, type_index(
typeid(DType))));
93 DTreeTypeChecker::Is_Fundamental<DType>();
94 dBranchNames.push_back(locBranchName);
95 dBranchTypeMap.insert(pair<string, type_index>(locBranchName, type_index(
typeid(DType))));
96 dInitialArraySizeMap[locBranchName] = locInitialArraySize;
97 dArraySizeNameMap[locBranchName] = locArraySizeName;
102 DTreeTypeChecker::Is_TObject<DType>();
103 dBranchNames.push_back(locBranchName);
104 dBranchTypeMap.insert(pair<string, type_index>(locBranchName, type_index(
typeid(DType))));
105 dInitialArraySizeMap[locBranchName] = locInitialArraySize;
115 virtual void* Get(
size_t locArrayIndex) = 0;
116 virtual void Check_Capacity(
void) = 0;
119 template <
typename DType>
127 void*
Get(
size_t locArrayIndex){
return static_cast<void*
>(&(dFillData[locArrayIndex]));}
128 void Check_Capacity(
void);
131 size_t dMaxFillVectorSize = 1000;
136 if(dFillData.size() <= dMaxFillVectorSize)
138 dFillData.resize(dMaxFillVectorSize);
151 template <
typename DType>
void Fill_Single(
string locBranchName,
const DType& locData);
152 template <
typename DType>
void Fill_Array(
string locBranchName,
const DType& locData,
size_t locArrayIndex);
155 map<string, pair<type_index, DFillBaseClass*> >
dFillData;
163 DTreeTypeChecker::Is_Supported<DType>();
164 type_index locTypeIndex(
typeid(DType));
166 auto locIterator = dFillData.find(locBranchName);
167 if(locIterator == dFillData.end())
171 locFillClass->
dFillData.push_back(locData);
172 dFillData.emplace(locBranchName, std::make_pair(locTypeIndex, static_cast<DFillBaseClass*>(locFillClass)));
174 else if(locTypeIndex != locIterator->second.first)
175 cout <<
"WARNING: CANNOT FILL: IS WRONG TYPE FOR BRANCH " << locBranchName << endl;
185 DTreeTypeChecker::Is_Supported<DType>();
186 type_index locTypeIndex(
typeid(DType));
188 auto locIterator = dFillData.find(locBranchName);
189 if(locIterator == dFillData.end())
193 dFillData.emplace(locBranchName, std::make_pair(locTypeIndex, static_cast<DFillBaseClass*>(locFillClass)));
196 locFillClass->
dFillData.resize(locArrayIndex + 1);
197 locFillClass->dFillData[locArrayIndex] = locData;
198 dArrayLargestIndexFilledMap[locBranchName] = locArrayIndex;
200 else if(locTypeIndex != locIterator->second.first)
201 cout <<
"WARNING: CANNOT FILL: IS WRONG TYPE FOR BRANCH " << locBranchName << endl;
207 if(locArrayIndex >= locFillClass->dFillData.size())
208 locFillClass->
dFillData.resize(locArrayIndex + 1);
209 locFillClass->dFillData[locArrayIndex] = locData;
212 auto& locLargestIndexFilled = dArrayLargestIndexFilledMap[locBranchName];
213 if(
int(locArrayIndex) > locLargestIndexFilled)
214 locLargestIndexFilled = locArrayIndex;
232 for(
auto& locBranchPair : dFillData)
233 delete locBranchPair.second.second;
236 #endif //DTreeInterfaceObjects
void * Get(size_t locArrayIndex)
map< string, size_t > dInitialArraySizeMap
void Register_Single(string locBranchName)
void Fill_Array(string locBranchName, const DType &locData, size_t locArrayIndex)
map< string, string > dArraySizeNameMap
~DTreeBranchRegister(void)
map< string, pair< type_index, DFillBaseClass * > > dFillData
virtual ~DFillBaseClass()
vector< string > dBranchNames
void Register_ClonesArray(string locBranchName, size_t locInitialArraySize=10)
void Check_Capacity(void)
static void Is_Fundamental(void)
void Register_FundamentalArray(string locBranchName, string locArraySizeName, size_t locInitialArraySize=10)
TList * Get_UserInfo(void) const
DTreeBranchRegister(void)
static void Is_TObject(void)
static void Is_Supported(void)
map< string, int > dArrayLargestIndexFilledMap
map< string, type_index > dBranchTypeMap
void Fill_Single(string locBranchName, const DType &locData)