Skip to content

Commit ac15ef4

Browse files
TMP: nContrib
1 parent df74839 commit ac15ef4

1 file changed

Lines changed: 121 additions & 39 deletions

File tree

DPG/Tasks/FIT/qaFIT.cxx

Lines changed: 121 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -151,17 +151,9 @@ struct fitQa {
151151
bool hasFT0 = false; ///< (o2::aod::collision::has_foundFT0())
152152
bool hasFV0 = false; ///< (o2::aod::collision::has_foundFV0())
153153
bool hasFDD = false; ///< (o2::aod::collision::has_foundFDD())
154-
bool isFT0VTX = false; ///< FT0 vertex trigger
155-
bool isFT0CE = false; ///< FT0 central trigger
156-
bool isFT0SCE = false; ///< FT0 semi-central trigger
157-
bool isFV0ORA = false; ///< FV0 ORA trigger
158-
bool isFV0CH = false; ///< FV0 charge trigger
159-
bool isFV0IN = false; ///< FV0 inner rings charge trigger
160-
bool isFDDORA = false; ///< FDD ORA trigger
161-
bool isFDDORC = false; ///< FDD ORC trigger
162-
bool isFDDVTX = false; ///< FDD vertex trigger
163-
bool isFT0VTXandFV0ORA = false; ///< FT0 vertex AND FV0 ORA trigger
164-
bool isFT0VTXandFDDVTX = false; ///< FT0 vertex AND FDD vertex trigger
154+
std::bitset<8> ft0Triggers; ///< FT0 trigger bits (o2::aod::ft0::TriggerMask)
155+
std::bitset<8> fv0Triggers; ///< FV0 trigger bits (o2::aod::fv0::TriggerMask)
156+
std::bitset<8> fddTriggers; ///< FDD trigger bits (o2::aod::fdd::TriggerMask)
165157

166158
/// Helper struct for event selection conditions
167159
struct Condition {
@@ -171,6 +163,9 @@ struct fitQa {
171163
};
172164

173165
std::vector<Condition> conditions{}; //< Event selection conditions to be considered
166+
std::vector<Condition> ft0Conditions{}; //< FT0 related event selection conditions to be considered
167+
std::vector<Condition> fv0Conditions{}; //< FT0 related event selection conditions to be considered
168+
std::vector<Condition> fddConditions{}; //< FT0 related event selection conditions to be considered
174169

175170
/* Output objects
176171
NOTE1: 1D Quantities are stored in 2D hists, with event selection conditions on the Y-axis.
@@ -189,6 +184,9 @@ struct fitQa {
189184
OutputObj<TH2F> ooPV{"collPV"}; ///< Primary vertex (cm)
190185
OutputObj<TH2F> ooPVns{"collPVns"}; ///< Primary vertex (ns)
191186
OutputObj<TH2F> ooNcontrib{"collNcontrib"}; ///< Number of contributors
187+
OutputObj<TH2F> ooNcontribFT0{"collNcontribFT0"}; ///< Number of contributors, FT0 triggers
188+
OutputObj<TH2F> ooNcontribFV0{"collNcontribFV0"}; ///< Number of contributors, FV0 triggers
189+
OutputObj<TH2F> ooNcontribFDD{"collNcontribFDD"}; ///< Number of contributors, FDD triggers
192190

193191
// FT0
194192
OutputObj<TH2F> ooFT0TimeA{"FT0TimeA"}; ///< FT0A average time (ns)
@@ -286,6 +284,9 @@ struct fitQa {
286284

287285
/// 1D quantities (one value per collision)
288286
std::unordered_map<OutputObj<TH2F>*, std::function<float()>> objs;
287+
std::unordered_map<OutputObj<TH2F>*, std::function<float()>> objsft0;
288+
std::unordered_map<OutputObj<TH2F>*, std::function<float()>> objsfv0;
289+
std::unordered_map<OutputObj<TH2F>*, std::function<float()>> objsfdd;
289290
/// 2D quantities (one value per collision, e.g. collision time vs vertex)
290291
std::unordered_map<OutputObj<TH3F>*, std::function<std::pair<float, float>()>> objs2D;
291292
/// 2D quantities per X bin (one value per X bin per collision, e.g. amplitude per channel)
@@ -323,17 +324,9 @@ struct fitQa {
323324
hasFT0 = false;
324325
hasFV0 = false;
325326
hasFDD = false;
326-
isFT0VTX = false;
327-
isFT0CE = false;
328-
isFT0SCE = false;
329-
isFV0ORA = false;
330-
isFV0CH = false;
331-
isFV0IN = false;
332-
isFDDORA = false;
333-
isFDDORC = false;
334-
isFDDVTX = false;
335-
isFT0VTXandFV0ORA = false;
336-
isFT0VTXandFDDVTX = false;
327+
ft0Triggers.reset();
328+
fv0Triggers.reset();
329+
fddTriggers.reset();
337330
}
338331

339332
void init(InitContext&) {
@@ -344,17 +337,42 @@ struct fitQa {
344337
// conditions.push_back({"HasFT0", "has FT0", [&]() { return hasFT0; }});
345338
// conditions.push_back({"HasFV0", "has FV0", [&]() { return hasFV0; }});
346339
// conditions.push_back({"HasFDD", "has FDD", [&]() { return hasFDD; }});
347-
conditions.push_back({"FT0VTX", "FT0 vertex", [&]() { return isFT0VTX; }});
340+
conditions.push_back({"FT0VTX", "FT0 vertex", [&]() { return ft0Triggers.test(o2::fit::Triggers::bitVertex); }});
348341
// conditions.push_back({"FT0CE", "FT0 CE", [&]() { return isFT0CE; }});
349342
// conditions.push_back({"FT0SCE", "FT0 SCE", [&]() { return isFT0SCE; }});
350343
// conditions.push_back({"FV0ORA", "FV0 ORA", [&]() { return isFV0ORA; }});
351344
// conditions.push_back({"FV0CH", "FV0 CH", [&]() { return isFV0CH; }});
352345
// conditions.push_back({"FV0IN", "FV0 IN", [&]() { return isFV0IN; }});
353346
// conditions.push_back({"FDDVTX", "FDD vertex", [&]() { return isFDDVTX; }});
354-
conditions.push_back({"FT0VTXandFV0ORA", "FT0 vertex AND FV0 ORA", [&]() { return isFT0VTXandFV0ORA; }});
347+
conditions.push_back({"FT0VTXandFV0ORA", "FT0 vertex AND FV0 ORA", [&]() { return ft0Triggers.test(o2::fit::Triggers::bitVertex) && fv0Triggers.test(o2::fit::Triggers::bitA); }});
355348
// conditions.push_back({"FT0VTXandFV0CH", "FT0 vertex AND FV0 CH", [&]() { return isFT0VTX && isFV0CH; }});
356349
// conditions.push_back({"FT0VTXandFV0IN", "FT0 vertex AND FV0 IN", [&]() { return isFT0VTX && isFV0IN; }});
357-
conditions.push_back({"FT0VTXandFDDVTX", "FT0 vertex AND FDD vertex", [&]() { return isFT0VTXandFDDVTX; }});
350+
conditions.push_back({"FT0VTXandFDDVTX", "FT0 vertex AND FDD vertex", [&]() { return ft0Triggers.test(o2::fit::Triggers::bitVertex) && fddTriggers.test(o2::fit::Triggers::bitVertex); }});
351+
352+
ft0Conditions.push_back({"All", "all collisions", [&]() { return true; }});
353+
ft0Conditions.push_back({"FT0ORA", "FT0 ORA", [&]() { return ft0Triggers.test(o2::fit::Triggers::bitA); }});
354+
ft0Conditions.push_back({"FT0ORC", "FT0 ORC", [&]() { return ft0Triggers.test(o2::fit::Triggers::bitC); }});
355+
ft0Conditions.push_back({"FT0VTX", "FT0 VTX", [&]() { return ft0Triggers.test(o2::fit::Triggers::bitVertex); }});
356+
ft0Conditions.push_back({"FT0CE", "FT0 CE", [&]() { return ft0Triggers.test(o2::fit::Triggers::bitCen); }});
357+
ft0Conditions.push_back({"FT0SCE", "FT0 SCE", [&]() { return ft0Triggers.test(o2::fit::Triggers::bitSCen); }});
358+
ft0Conditions.push_back({"FT0ACTIVEA", "FT0 ACTIVE A", [&]() { return ft0Triggers.test(o2::fit::Triggers::bitLaser); }});
359+
ft0Conditions.push_back({"FT0ACTIVEC", "FT0 ACTIVE C", [&]() { return ft0Triggers.test(o2::fit::Triggers::bitOutputsAreBlocked); }});
360+
ft0Conditions.push_back({"FT0FLANGE", "FT0 FLANGE", [&]() { return ft0Triggers.test(o2::fit::Triggers::bitDataIsValid); }});
361+
ft0Conditions.push_back({"FT0MINBIAS", "FT0 MIN BIAS", [&]() { return ft0Triggers.test(o2::fit::Triggers::bitVertex) && (ft0Triggers.test(o2::fit::Triggers::bitCen) || ft0Triggers.test(o2::fit::Triggers::bitSCen)); }});
362+
363+
fv0Conditions.push_back({"All", "all collisions", [&]() { return true; }});
364+
fv0Conditions.push_back({"FV0ORA", "FV0 ORA", [&]() { return fv0Triggers.test(o2::fit::Triggers::bitA); }});
365+
fv0Conditions.push_back({"FV0NCHAN", "FV0 NCHAN", [&]() { return fv0Triggers.test(o2::fit::Triggers::bitTrgNchan); }});
366+
fv0Conditions.push_back({"FV0CH", "FV0 CH", [&]() { return fv0Triggers.test(o2::fit::Triggers::bitTrgCharge); }});
367+
fv0Conditions.push_back({"FV0OUT", "FV0 OUT", [&]() { return fv0Triggers.test(o2::fit::Triggers::bitAOut); }});
368+
fv0Conditions.push_back({"FV0CH", "FV0 IN", [&]() { return fv0Triggers.test(o2::fit::Triggers::bitAIn); }});
369+
370+
fddConditions.push_back({"All", "all collisions", [&]() { return true; }});
371+
fddConditions.push_back({"FDDORA", "FDD ORA", [&]() { return fddTriggers.test(o2::fit::Triggers::bitA); }});
372+
fddConditions.push_back({"FDDORC", "FDD ORC", [&]() { return fddTriggers.test(o2::fit::Triggers::bitC); }});
373+
fddConditions.push_back({"FDDVTX", "FDD vertex", [&]() { return fddTriggers.test(o2::fit::Triggers::bitVertex); }});
374+
fddConditions.push_back({"FDDCE", "FDD CE", [&]() { return fddTriggers.test(o2::fit::Triggers::bitCen); }});
375+
fddConditions.push_back({"FDDSCE", "FDD SCE", [&]() { return fddTriggers.test(o2::fit::Triggers::bitSCen); }});
358376

359377
/* Init OutputObj's */
360378

@@ -371,6 +389,15 @@ struct fitQa {
371389
ooNcontrib.setObject(new TH2F(ooNcontrib.label.c_str(), "Number of contributors to primary vertex;Number of contributors to primary vertex", nBinsNContrib, nContribMin, nContribMax, conditions.size(), 0, conditions.size()));
372390
objs[&ooNcontrib] = [&]() { return nContrib; };
373391

392+
ooNcontribFT0.setObject(new TH2F(ooNcontribFT0.label.c_str(), "Number of contributors to primary vertex;Number of contributors to primary vertex", nBinsNContrib, nContribMin, nContribMax, conditions.size(), 0, ft0Conditions.size()));
393+
objsft0[&ooNcontribFT0] = [&]() { return nContrib; };
394+
395+
ooNcontribFV0.setObject(new TH2F(ooNcontribFV0.label.c_str(), "Number of contributors to primary vertex;Number of contributors to primary vertex", nBinsNContrib, nContribMin, nContribMax, conditions.size(), 0, fv0Conditions.size()));
396+
objsfv0[&ooNcontribFV0] = [&]() { return nContrib; };
397+
398+
ooNcontribFDD.setObject(new TH2F(ooNcontribFDD.label.c_str(), "Number of contributors to primary vertex;Number of contributors to primary vertex", nBinsNContrib, nContribMin, nContribMax, conditions.size(), 0, fddConditions.size()));
399+
objsfdd[&ooNcontribFDD] = [&]() { return nContrib; };
400+
374401
ooFT0TimeA.setObject(new TH2F(ooFT0TimeA.label.c_str(), "FT0A time;$\\langle t_{\\text{FT0A}} \\rangle \\text{ (ns)}$", nBinsT, tMin, tMax, conditions.size(), 0, conditions.size()));
375402
objs[&ooFT0TimeA] = [&]() { return ft0timeA; };
376403

@@ -573,6 +600,21 @@ struct fitQa {
573600
h.first->object->GetYaxis()->SetBinLabel(c + 1, conditions[c].title.c_str());
574601
}
575602
}
603+
for (auto &h : objsft0) {
604+
for (size_t c = 0; c < conditions.size(); c++) {
605+
h.first->object->GetYaxis()->SetBinLabel(c + 1, ft0Conditions[c].title.c_str());
606+
}
607+
}
608+
for (auto &h : objsfv0) {
609+
for (size_t c = 0; c < conditions.size(); c++) {
610+
h.first->object->GetYaxis()->SetBinLabel(c + 1, fv0Conditions[c].title.c_str());
611+
}
612+
}
613+
for (auto &h : objsfdd) {
614+
for (size_t c = 0; c < conditions.size(); c++) {
615+
h.first->object->GetYaxis()->SetBinLabel(c + 1, fddConditions[c].title.c_str());
616+
}
617+
}
576618
for (auto &h : objs2D) {
577619
for (size_t c = 0; c < conditions.size(); c++) {
578620
h.first->object->GetZaxis()->SetBinLabel(c + 1, conditions[c].title.c_str());
@@ -607,10 +649,10 @@ struct fitQa {
607649

608650
if (hasFT0) {
609651
auto ft0 = collision.foundFT0();
610-
std::bitset<8> ft0Triggers = ft0.triggerMask();
611-
isFT0VTX = ft0Triggers[o2::fit::Triggers::bitVertex];
612-
isFT0CE = ft0Triggers[o2::fit::Triggers::bitCen];
613-
isFT0SCE = ft0Triggers[o2::fit::Triggers::bitSCen];
652+
ft0Triggers = ft0.triggerMask();
653+
// isFT0VTX = ft0Triggers[o2::fit::Triggers::bitVertex];
654+
// isFT0CE = ft0Triggers[o2::fit::Triggers::bitCen];
655+
// isFT0SCE = ft0Triggers[o2::fit::Triggers::bitSCen];
614656

615657
ft0timeA = ft0.timeA();
616658
ft0timeC = ft0.timeC();
@@ -632,10 +674,10 @@ struct fitQa {
632674

633675
if (hasFV0) {
634676
auto fv0 = collision.foundFV0();
635-
std::bitset<8> fv0Triggers = fv0.triggerMask();
636-
isFV0ORA = fv0Triggers[o2::fit::Triggers::bitA];
637-
isFV0CH = fv0Triggers[o2::fit::Triggers::bitTrgNchan];
638-
isFV0IN = fv0Triggers[o2::fit::Triggers::bitAIn];
677+
fv0Triggers = fv0.triggerMask();
678+
// isFV0ORA = fv0Triggers[o2::fit::Triggers::bitA];
679+
// isFV0CH = fv0Triggers[o2::fit::Triggers::bitTrgNchan];
680+
// isFV0IN = fv0Triggers[o2::fit::Triggers::bitAIn];
639681

640682
fv0time = fv0.time();
641683

@@ -647,10 +689,10 @@ struct fitQa {
647689

648690
if (hasFDD) {
649691
auto fdd = collision.foundFDD();
650-
std::bitset<8> fddTriggers = fdd.triggerMask();
651-
isFDDORA = fddTriggers[o2::fit::Triggers::bitA];
652-
isFDDORC = fddTriggers[o2::fit::Triggers::bitC];
653-
isFDDVTX = fddTriggers[o2::fit::Triggers::bitVertex];
692+
fddTriggers = fdd.triggerMask();
693+
// isFDDORA = fddTriggers[o2::fit::Triggers::bitA];
694+
// isFDDORC = fddTriggers[o2::fit::Triggers::bitC];
695+
// isFDDVTX = fddTriggers[o2::fit::Triggers::bitVertex];
654696

655697
fddtimeA = fdd.timeA();
656698
fddtimeC = fdd.timeC();
@@ -668,12 +710,15 @@ struct fitQa {
668710
}
669711
}
670712

671-
isFT0VTXandFV0ORA = isFT0VTX && isFV0ORA;
672-
isFT0VTXandFDDVTX = isFT0VTX && isFDDVTX;
713+
// isFT0VTXandFV0ORA = isFT0VTX && isFV0ORA;
714+
// isFT0VTXandFDDVTX = isFT0VTX && isFDDVTX;
673715

674716
/* Evaluate conditions and fill stats histo */
675717

676718
std::vector<bool> condResults(conditions.size(), false);
719+
std::vector<bool> ft0CondResults(ft0Conditions.size(), false);
720+
std::vector<bool> fv0CondResults(fv0Conditions.size(), false);
721+
std::vector<bool> fddCondResults(fddConditions.size(), false);
677722

678723
for (size_t c = 0; c < conditions.size(); c++) {
679724
condResults[c] = conditions[c].eval();
@@ -682,6 +727,16 @@ struct fitQa {
682727
}
683728
}
684729

730+
for (size_t c = 0; c < ft0Conditions.size(); c++) {
731+
ft0CondResults[c] = ft0Conditions[c].eval();
732+
}
733+
for (size_t c = 0; c < fv0Conditions.size(); c++) {
734+
fv0CondResults[c] = fv0Conditions[c].eval();
735+
}
736+
for (size_t c = 0; c < fddConditions.size(); c++) {
737+
fddCondResults[c] = fddConditions[c].eval();
738+
}
739+
685740
/* Fill histograms */
686741

687742
for (auto &h : objs) {
@@ -693,6 +748,33 @@ struct fitQa {
693748
}
694749
}
695750

751+
for (auto &h : objsft0) {
752+
float v = h.second();
753+
for (size_t c = 0; c < ft0Conditions.size(); c++) {
754+
if (ft0CondResults[c]) {
755+
(*h.first)->Fill(v, c + 0.5f);
756+
}
757+
}
758+
}
759+
760+
for (auto &h : objsfv0) {
761+
float v = h.second();
762+
for (size_t c = 0; c < fv0Conditions.size(); c++) {
763+
if (fv0CondResults[c]) {
764+
(*h.first)->Fill(v, c + 0.5f);
765+
}
766+
}
767+
}
768+
769+
for (auto &h : objsfdd) {
770+
float v = h.second();
771+
for (size_t c = 0; c < fddConditions.size(); c++) {
772+
if (fddCondResults[c]) {
773+
(*h.first)->Fill(v, c + 0.5f);
774+
}
775+
}
776+
}
777+
696778
for (auto &h : objs2D) {
697779
auto v = h.second();
698780
for (size_t c = 0; c < conditions.size(); c++) {

0 commit comments

Comments
 (0)