@@ -15,7 +15,7 @@ void TreeUtil::Init(TTree* treeIn) {
1515void TreeUtil::GetEntry (unsigned int idx) {
1616 index = idx;
1717 for (auto & pair : data) {
18- pair.second . isLoaded = false ;
18+ pair.second -> isLoaded = false ;
1919 }
2020}
2121
@@ -82,46 +82,52 @@ void TreeUtil::loadAllBranches() {
8282}
8383
8484template <typename T>
85- T const & TreeUtil::get (std::string name) {
86- auto search = data.find (name);
87- if (search == data.end ()) {
85+ const T & TreeUtil::get (const std::string& name) {
86+ auto it = data.find (name);
87+ if (it == data.end ()) {
8888 tree->SetMakeClass (1 );
89- TBranch* branch = tree->GetBranch (name.c_str ());
90- if (branch == nullptr )
89+ TBranch* br = tree->GetBranch (name.c_str ());
90+ if (!br )
9191 throw std::out_of_range (" Branch " + name + " does not exist!" );
92- search = data.emplace (name, std::move (BranchData{branch, false , static_cast <T*>(nullptr )})).first ;
93- branch->SetAddress (&search->second .ptr );
92+ it = data.emplace (name, std::make_unique<BranchDataHolder<T>>(br)).first ;
9493 tree->SetMakeClass (0 );
9594 }
96- if (!search->second .isLoaded ) {
97- search->second .branch ->GetEntry (index);
98- search->second .isLoaded = true ;
95+
96+ auto * bd = static_cast <BranchDataHolder<T>*>(it->second .get ());
97+ if (!bd->isLoaded ) {
98+ bd->branch ->GetEntry (index);
99+ bd->adoptIfNeeded ();
100+ bd->isLoaded = true ;
99101 }
100- return *std::get< T*>(search-> second . ptr );
102+ return *static_cast < const T*>(bd-> getRaw () );
101103}
102104
103- short const & TreeUtil::getS (std::string name) { return get<short >(name); }
104- unsigned short const & TreeUtil::getUS (std::string name) { return get<unsigned short >(name); }
105- int const & TreeUtil::getI (std::string name) { return get<int >(name); }
106- unsigned int const & TreeUtil::getU (std::string name) { return get<unsigned int >(name); }
107- float const & TreeUtil::getF (std::string name) { return get<float >(name); }
108- std::vector<short > const & TreeUtil::getVS (std::string name) { return get<std::vector<short >>(name); }
109- std::vector<unsigned short > const & TreeUtil::getVUS (std::string name) { return get<std::vector<unsigned short >>(name); }
110- std::vector<int > const & TreeUtil::getVI (std::string name) { return get<std::vector<int >>(name); }
111- std::vector<unsigned int > const & TreeUtil::getVU (std::string name) { return get<std::vector<unsigned int >>(name); }
112- std::vector<float > const & TreeUtil::getVF (std::string name) { return get<std::vector<float >>(name); }
113- std::vector<std::vector<short >> const & TreeUtil::getVVS (std::string name) {
105+ short const & TreeUtil::getS (std::string const & name) { return get<short >(name); }
106+ unsigned short const & TreeUtil::getUS (std::string const & name) { return get<unsigned short >(name); }
107+ int const & TreeUtil::getI (std::string const & name) { return get<int >(name); }
108+ unsigned int const & TreeUtil::getU (std::string const & name) { return get<unsigned int >(name); }
109+ float const & TreeUtil::getF (std::string const & name) { return get<float >(name); }
110+ std::vector<short > const & TreeUtil::getVS (std::string const & name) { return get<std::vector<short >>(name); }
111+ std::vector<unsigned short > const & TreeUtil::getVUS (std::string const & name) {
112+ return get<std::vector<unsigned short >>(name);
113+ }
114+ std::vector<int > const & TreeUtil::getVI (std::string const & name) { return get<std::vector<int >>(name); }
115+ std::vector<unsigned int > const & TreeUtil::getVU (std::string const & name) {
116+ return get<std::vector<unsigned int >>(name);
117+ }
118+ std::vector<float > const & TreeUtil::getVF (std::string const & name) { return get<std::vector<float >>(name); }
119+ std::vector<std::vector<short >> const & TreeUtil::getVVS (std::string const & name) {
114120 return get<std::vector<std::vector<short >>>(name);
115121}
116- std::vector<std::vector<unsigned short >> const & TreeUtil::getVVUS (std::string name) {
122+ std::vector<std::vector<unsigned short >> const & TreeUtil::getVVUS (std::string const & name) {
117123 return get<std::vector<std::vector<unsigned short >>>(name);
118124}
119- std::vector<std::vector<int >> const & TreeUtil::getVVI (std::string name) {
125+ std::vector<std::vector<int >> const & TreeUtil::getVVI (std::string const & name) {
120126 return get<std::vector<std::vector<int >>>(name);
121127}
122- std::vector<std::vector<unsigned int >> const & TreeUtil::getVVU (std::string name) {
128+ std::vector<std::vector<unsigned int >> const & TreeUtil::getVVU (std::string const & name) {
123129 return get<std::vector<std::vector<unsigned int >>>(name);
124130}
125- std::vector<std::vector<float >> const & TreeUtil::getVVF (std::string name) {
131+ std::vector<std::vector<float >> const & TreeUtil::getVVF (std::string const & name) {
126132 return get<std::vector<std::vector<float >>>(name);
127133}
0 commit comments