Skip to content

Commit 41cbea3

Browse files
add 2D integral plot
1 parent d602204 commit 41cbea3

5 files changed

Lines changed: 96 additions & 48 deletions

File tree

src/EntryConfig.cpp

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ struct write_struct : public Utils::Visitor<void> {
2525

2626
EntryConfig::EntryConfig(const Axis& axis, Cuts* cuts, bool is_integral)
2727
: name_(axis.GetName()),
28-
type_(is_integral ? PlotType::kIntergral : PlotType::kHisto1D),
28+
type_(is_integral ? PlotType::kIntegral1D : PlotType::kHisto1D),
2929
axes_({axis}),
3030
entry_cuts_(cuts) {
3131
if (cuts)
@@ -43,6 +43,15 @@ EntryConfig::EntryConfig(const Axis& x, const Axis& y, Cuts* cuts, bool is_profi
4343
InitPlot();
4444
}
4545

46+
EntryConfig::EntryConfig(const Axis& x, Cuts* cuts_x, const Axis& y, Cuts* cuts_y) : type_(PlotType::kIntegral2D),
47+
axes_({x, y}),
48+
entry_cuts_(cuts_x) {
49+
Set2DName();
50+
InitPlot();
51+
}
52+
53+
54+
4655
TH1* EntryConfig::CreateHisto1D() const {
4756
auto* ret = new TH1F(name_.c_str(), title_.c_str(),
4857
axes_.at(0).GetNbins(), axes_.at(0).GetXmin(), axes_.at(0).GetXmax());
@@ -89,10 +98,14 @@ void EntryConfig::InitPlot() {
8998
plot_ = CreateHisto2D();
9099
break;
91100
}
92-
case PlotType::kIntergral: {
101+
case PlotType::kIntegral1D: {
93102
plot_ = CreateHisto1D();
94103
break;
95104
}
105+
case PlotType::kIntegral2D: {
106+
plot_ = CreateHisto2D();
107+
break;
108+
}
96109
case PlotType::kProfile: {
97110
plot_ = CreateProfile();
98111
break;
@@ -132,8 +145,7 @@ std::string EntryConfig::GetDirectoryName() const {
132145
const auto& br = ax.GetBranches();
133146
branches.insert(br.begin(), br.end());
134147
}
135-
// std::sort(branches.begin(), branches.end());
136-
148+
std::cout << "@@@@" << branches.size() << std::endl;
137149
std::string name{*branches.begin()};
138150
for (auto it = ++branches.begin(); it != branches.end(); ++it) {
139151
name += "_" + *it;

src/EntryConfig.hpp

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,12 @@ class Axis : public Variable, public TAxis {
2121
Axis() = default;
2222
Axis(const std::string& title, const Variable& var, const TAxis& a) : Variable(var), TAxis(a) {
2323
this->SetTitle(title.c_str());
24+
if(this->GetFields().size() == 1 && this->GetFields().at(0).GetName() == "ones"){
25+
// fields_[0] = Field(fields_[0].GetBranchName(), "ones");
26+
// fields_.clear();
27+
this->lambda_ = [](const std::vector<double>& ){ return 1; };
28+
this->name_ = "Ones";
29+
}
2430
}
2531
const char* GetName() const override { return Variable::GetName().c_str(); }
2632

@@ -37,12 +43,14 @@ class EntryConfig {
3743
kHisto1D,
3844
kHisto2D,
3945
kProfile,
40-
kIntergral
46+
kIntegral1D,
47+
kIntegral2D
4148
};
4249

4350
EntryConfig() = default;
4451
explicit EntryConfig(const Axis& axis, Cuts* cuts = nullptr, bool is_integral = false);
4552
EntryConfig(const Axis& x, const Axis& y, Cuts* cuts = nullptr, bool is_profile = false);
53+
EntryConfig(const Axis& x, Cuts* cuts_x, const Axis& y, Cuts* cuts_y);
4654

4755
EntryConfig(const EntryConfig&) = default;
4856
EntryConfig(EntryConfig&&) = default;
@@ -61,8 +69,8 @@ class EntryConfig {
6169
ANALYSISTREE_ATTR_NODISCARD Cuts* GetEntryCuts() const { return entry_cuts_; }
6270
ANALYSISTREE_ATTR_NODISCARD PlotType GetType() const { return type_; }
6371

64-
ANALYSISTREE_ATTR_NODISCARD std::pair<int, std::vector<int>> GetVariablesId() const { return vars_id_; }
65-
void SetVariablesId(const std::pair<int, std::vector<int>>& var_id) { vars_id_ = var_id; }
72+
ANALYSISTREE_ATTR_NODISCARD std::vector<std::pair<int, int>> GetVariablesId() const { return vars_id_; }
73+
void SetVariablesId(const std::vector<std::pair<int, int>>& var_id) { vars_id_ = var_id; }
6674

6775
ANALYSISTREE_ATTR_NODISCARD std::vector<Variable> GetVariables() const {
6876
std::vector<Variable> vars{};
@@ -92,7 +100,7 @@ class EntryConfig {
92100

93101
std::vector<Axis> axes_{};
94102
Cuts* entry_cuts_{nullptr};
95-
std::pair<int, std::vector<int>> vars_id_{};
103+
std::vector<std::pair<int, int>> vars_id_{};
96104

97105
TDirectory* out_dir_{nullptr};
98106
ClassDef(EntryConfig, 1);

src/Task.cpp

Lines changed: 45 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -3,35 +3,53 @@
33
namespace AnalysisTree {
44
namespace QA {
55

6+
void Task::FillIntegral(EntryConfig& plot){
7+
8+
double integral_x{0.};
9+
double integral_y{0.};
10+
auto var_ids = plot.GetVariablesId();
11+
12+
for (const auto& var : this->GetValues(var_ids.at(0).first)) {
13+
integral_x += var[var_ids.at(0).second];
14+
}
15+
if(plot.GetNdimentions() > 1) {
16+
for (const auto& var : this->GetValues(var_ids.at(1).first)) {
17+
integral_y += var[var_ids.at(1).second];
18+
}
19+
}
20+
if(plot.GetNdimentions() == 1) {
21+
plot.Fill(integral_x);
22+
}
23+
else{
24+
plot.Fill(integral_x, integral_y);
25+
}
26+
}
27+
628
void Task::Exec() {
729

830
AnalysisTask::Exec();
931

10-
double integral{0.};
11-
1232
for (auto& plot : entries_) {
33+
34+
if(plot.GetType() == EntryConfig::PlotType::kIntegral1D || plot.GetType() == EntryConfig::PlotType::kIntegral2D){
35+
FillIntegral(plot);
36+
continue;
37+
}
1338
auto var_ids = plot.GetVariablesId();
14-
for (auto var : this->GetValues(var_ids.first)) {
15-
if(plot.GetType() == EntryConfig::PlotType::kIntergral){
16-
integral += var[var_ids.second.at(0)];
17-
}
18-
else{
19-
switch (plot.GetNdimentions()) {
20-
case 1: {
21-
plot.Fill(var[var_ids.second.at(0)]);
22-
break;
23-
}
24-
case 2: {
25-
plot.Fill(var[var_ids.second.at(0)], var[var_ids.second.at(1)]);
26-
break;
27-
}
39+
for (auto var : this->GetValues(var_ids.at(0).first)) {
40+
41+
switch (plot.GetNdimentions()) {
42+
case 1: {
43+
plot.Fill(var[var_ids.at(0).second]);
44+
break;
45+
}
46+
case 2: {
47+
plot.Fill(var[var_ids.at(0).second], var[var_ids.at(1).second]);
48+
break;
2849
}
2950
}
3051
}
3152

32-
if(plot.GetType() == EntryConfig::PlotType::kIntergral){
33-
plot.Fill(integral);
34-
}
3553
}// plots
3654
}
3755

@@ -61,5 +79,13 @@ void Task::Init() {
6179
}
6280
}
6381

82+
size_t Task::AddAnalysisEntry(const Axis& a, Cuts* cuts, bool is_integral){
83+
entries_.emplace_back(EntryConfig(a, cuts, is_integral));
84+
auto var_id = AddEntry(AnalysisEntry(entries_.back().GetVariables(), entries_.back().GetEntryCuts()));
85+
entries_.back().SetVariablesId({{var_id.first, var_id.second.at(0)}});
86+
return entries_.size() - 1;
87+
}
88+
89+
6490
}// namespace QA
6591
}// namespace AnalysisTree

src/Task.hpp

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -21,47 +21,48 @@ class Task : public AnalysisTask {
2121
void Finish() override;
2222

2323
size_t AddH1(const Axis& x, Cuts* cuts = nullptr) {
24-
entries_.emplace_back(EntryConfig(x, cuts));
24+
entries_.emplace_back(EntryConfig(x, cuts, false));
2525
auto var_id = AddEntry(AnalysisEntry(entries_.back().GetVariables(), entries_.back().GetEntryCuts()));
26-
entries_.back().SetVariablesId(var_id);
26+
entries_.back().SetVariablesId({{var_id.first, var_id.second.at(0)}});
2727
return entries_.size() - 1;
2828
}
2929

3030
size_t AddH2(const Axis& x, const Axis& y, Cuts* cuts = nullptr) {
3131
entries_.emplace_back(EntryConfig(x, y, cuts));
3232
auto var_id = AddEntry(AnalysisEntry(entries_.back().GetVariables(), entries_.back().GetEntryCuts()));
33-
entries_.back().SetVariablesId(var_id);
33+
entries_.back().SetVariablesId({ {var_id.first, var_id.second.at(0)}, {var_id.first, var_id.second.at(1)} });
3434
return entries_.size() - 1;
3535
}
3636

3737
size_t AddProfile(const Axis& x, const Axis& y, Cuts* cuts = nullptr) {
3838
entries_.emplace_back(EntryConfig(x, y, cuts, true));
3939
auto var_id = AddEntry(AnalysisEntry(entries_.back().GetVariables(), entries_.back().GetEntryCuts()));
40-
entries_.back().SetVariablesId(var_id);
40+
entries_.back().SetVariablesId({ {var_id.first, var_id.second.at(0)}, {var_id.first, var_id.second.at(1)} });
4141
return entries_.size() - 1;
4242
}
4343

4444
size_t AddIntegral(const Axis& x, Cuts* cuts = nullptr) {
45-
if(x.GetFields()[0].GetName() == "ones"){
46-
Axis x_one = Axis(x.GetTitle(),
47-
// Variable("Ones", {}, [](const std::vector<double>& ){return 1;}),
48-
Variable("Ones", {{x.GetBranchName(), "id"}}, [](const std::vector<double>& ){return 1;}),
49-
{x.GetNbins(), x.GetXmin(), x.GetXmax()});
50-
entries_.emplace_back(EntryConfig(x_one, cuts, true));
51-
}
52-
else{
53-
entries_.emplace_back(EntryConfig(x, cuts, true));
54-
}
55-
45+
entries_.emplace_back(EntryConfig(x, cuts, true));
5646
auto var_id = AddEntry(AnalysisEntry(entries_.back().GetVariables(), entries_.back().GetEntryCuts()));
57-
entries_.back().SetVariablesId(var_id);
47+
entries_.back().SetVariablesId({{var_id.first, var_id.second.at(0)}});
48+
return entries_.size() - 1;
49+
}
50+
51+
size_t AddIntegral(const Axis& x, const Axis& y, Cuts* cuts_x = nullptr, Cuts* cuts_y = nullptr) {
52+
entries_.emplace_back(EntryConfig(x, cuts_x, y, cuts_y));
53+
auto var_id_x = AddEntry(AnalysisEntry({entries_.back().GetVariables()[0]}, cuts_x));
54+
auto var_id_y = AddEntry(AnalysisEntry({entries_.back().GetVariables()[1]}, cuts_y));
55+
entries_.back().SetVariablesId({ {var_id_x.first, var_id_x.second.at(0)}, {var_id_y.first, var_id_y.second.at(0)} });
5856
return entries_.size() - 1;
5957
}
6058

6159
std::vector<EntryConfig>& Entries() { return entries_; }
6260
void SetOutputFileName(std::string name) { out_file_name_ = std::move(name); }
6361

6462
private:
63+
void FillIntegral(EntryConfig& plot);
64+
size_t AddAnalysisEntry(const Axis& a, Cuts* cuts, bool is_integral);
65+
6566
std::vector<EntryConfig> entries_{};
6667
std::map<std::string, TDirectory*> dir_map_{};
6768
std::string out_file_name_{"QA.root"};

test/integration/Manager.test.hpp

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -43,12 +43,13 @@ TEST(Test_AnalysisTreeQA, Test_Manager) {
4343
Cuts eta_cut("eta_cut", {RangeCut("SimParticles.eta", -1, 1)});
4444

4545
AddParticleQA(task, "SimParticles");
46-
AddTrackQA(task, "RecTracks");
47-
AddTracksMatchQA(task, "RecTracks", "SimParticles");
48-
AddParticlesFlowQA(task, "SimParticles", {"SimEventHeader", "psi_RP"}, {211});
46+
// AddTrackQA(task, "RecTracks");
47+
// AddTracksMatchQA(task, "RecTracks", "SimParticles");
48+
// AddParticlesFlowQA(task, "SimParticles", {"SimEventHeader", "psi_RP"}, {211});
4949

50-
task->AddIntegral({"#sum p_{T}, GeV/c", {"RecTracks", "pT"}, {100, 0, 300}});
51-
task->AddIntegral({"M", {"RecTracks", "ones"}, {300, 0, 300}});
50+
// task->AddIntegral({"#sum p_{T}, GeV/c", {"RecTracks", "pT"}, {100, 0, 300}});
51+
// task->AddIntegral({"M", {"RecTracks", "ones"}, {300, 0, 300}});
52+
// task->AddIntegral({"M_{rec}", {"RecTracks", "ones"}, {300, 0, 300}}, {"M_{sim}", {"SimParticles", "ones"}, {300, 0, 300}});
5253

5354
man->AddTask(task);
5455

0 commit comments

Comments
 (0)