Skip to content

Commit 5d7e314

Browse files
committed
distinguish float, int, bool in PlainTreeFiller
1 parent b6f1ad3 commit 5d7e314

2 files changed

Lines changed: 22 additions & 5 deletions

File tree

infra/PlainTreeFiller.cpp

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -55,12 +55,18 @@ void PlainTreeFiller::Init() {
5555
const auto& branch_config = config_->GetBranchConfig(branch_name_);
5656
for (const auto& field : branch_config.GetMap<float>()) {
5757
AnalysisTask::AddEntry(AnalysisEntry({Variable(branch_name_, field.first)}));
58+
vars_.emplace_back(FIB());
59+
vars_.back().type_ = Types::kFloat;
5860
}
5961
for (const auto& field : branch_config.GetMap<int>()) {
6062
AnalysisTask::AddEntry(AnalysisEntry({Variable(branch_name_, field.first)}));
63+
vars_.emplace_back(FIB());
64+
vars_.back().type_ = Types::kInteger;
6165
}
6266
for (const auto& field : branch_config.GetMap<bool>()) {
6367
AnalysisTask::AddEntry(AnalysisEntry({Variable(branch_name_, field.first)}));
68+
vars_.emplace_back(FIB());
69+
vars_.back().type_ = Types::kBool;
6470
}
6571
}
6672

@@ -70,7 +76,8 @@ void PlainTreeFiller::Init() {
7076
throw std::runtime_error("Only 1 output branch");
7177
}
7278
const auto& vars = entries_[0].GetVariables();
73-
vars_.resize(vars.size());
79+
80+
if(vars_.size() != vars.size()) throw std::runtime_error("PlainTreeFiller::Init(): vars_.size() != vars.size()");
7481

7582
file_ = TFile::Open(file_name_.c_str(), "recreate");
7683
plain_tree_ = new TTree(tree_name_.c_str(), "Plain Tree");
@@ -81,7 +88,9 @@ void PlainTreeFiller::Init() {
8188
if (!fields_to_preserve_.empty() && std::find(fields_to_preserve_.begin(), fields_to_preserve_.end(), leaf_name) == fields_to_preserve_.end()) continue;
8289
if (!is_prepend_leaves_with_branchname_) leaf_name.erase(0, branch_name_.size() + 1);
8390
std::replace(leaf_name.begin(), leaf_name.end(), '.', '_');
84-
plain_tree_->Branch(leaf_name.c_str(), &(vars_.at(i)), Form("%s/F", leaf_name.c_str()));
91+
if(vars_.at(i).type_ == Types::kFloat) plain_tree_->Branch(leaf_name.c_str(), &vars_.at(i).float_, Form("%s/F", leaf_name.c_str()));
92+
if(vars_.at(i).type_ == Types::kInteger) plain_tree_->Branch(leaf_name.c_str(), &vars_.at(i).int_, Form("%s/I", leaf_name.c_str()));
93+
if(vars_.at(i).type_ == Types::kBool) plain_tree_->Branch(leaf_name.c_str(), &vars_.at(i).bool_, Form("%s/O", leaf_name.c_str()));
8594
}
8695

8796
for (auto& cm : cuts_map_) {
@@ -97,7 +106,9 @@ void PlainTreeFiller::Exec() {
97106
for (const auto& channel : values) {
98107
assert(channel.size() == vars_.size());
99108
for (size_t i = 0; i < channel.size(); ++i) {
100-
vars_.at(i) = channel.at(i);
109+
if(vars_.at(i).type_ == Types::kFloat) vars_.at(i).float_ = static_cast<float>(channel.at(i));
110+
if(vars_.at(i).type_ == Types::kInteger) vars_.at(i).int_ = static_cast<int>(channel.at(i));
111+
if(vars_.at(i).type_ == Types::kBool) vars_.at(i).bool_ = static_cast<bool>(channel.at(i));
101112
}
102113
plain_tree_->Fill();
103114
}
@@ -109,6 +120,5 @@ void PlainTreeFiller::Finish() {
109120
plain_tree_->Write();
110121
file_->Close();
111122
delete file_;
112-
// delete plain_tree_;
113123
}
114124
}// namespace AnalysisTree

infra/PlainTreeFiller.hpp

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,13 @@
1212

1313
namespace AnalysisTree {
1414

15+
struct FIB {
16+
float float_{-299.f};
17+
int int_{-299};
18+
bool bool_{false};
19+
Types type_{Types::kNumberOfTypes};
20+
};
21+
1522
class PlainTreeFiller : public AnalysisTask {
1623
public:
1724
PlainTreeFiller() = default;
@@ -41,7 +48,7 @@ class PlainTreeFiller : public AnalysisTask {
4148
std::string tree_name_{"PlainTree"};
4249
std::string branch_name_;
4350

44-
std::vector<float> vars_{};
51+
std::vector<FIB> vars_;
4552
std::vector<std::string> fields_to_ignore_{};
4653
std::vector<std::string> fields_to_preserve_{};
4754

0 commit comments

Comments
 (0)