Skip to content

Commit dc0bdb8

Browse files
arifferoalibuild
andauthored
[PWGUD] Add RCT flag checks in UPCCandidateProducer (#16255)
Co-authored-by: ALICE Action Bot <alibuild@cern.ch>
1 parent c899e14 commit dc0bdb8

1 file changed

Lines changed: 67 additions & 0 deletions

File tree

PWGUD/TableProducer/UPCCandidateProducer.cxx

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
#include "PWGUD/DataModel/UDTables.h"
2020

2121
#include "Common/CCDB/EventSelectionParams.h"
22+
#include "Common/CCDB/RCTSelectionFlags.h"
2223
#include "Common/DataModel/EventSelection.h"
2324
#include "Common/DataModel/PIDResponseTOF.h"
2425
#include "Common/DataModel/PIDResponseTPC.h"
@@ -50,13 +51,15 @@
5051
#include <limits>
5152
#include <map>
5253
#include <numeric>
54+
#include <string>
5355
#include <unordered_map>
5456
#include <unordered_set>
5557
#include <utility>
5658
#include <vector>
5759

5860
using namespace o2::framework;
5961
using namespace o2::framework::expressions;
62+
using namespace o2::aod::rctsel;
6063

6164
struct UpcCandProducer {
6265
bool fDoMC{false};
@@ -91,6 +94,9 @@ struct UpcCandProducer {
9194
std::vector<bool> fwdSelectors;
9295
std::vector<bool> barrelSelectors;
9396

97+
// RCT flag checker
98+
RCTFlagsChecker myRCTChecker;
99+
94100
// skimmer flags
95101
// choose a source of signal MC events
96102
Configurable<int> fSignalGenID{"signalGenID", 1, "Signal generator ID"};
@@ -125,9 +131,16 @@ struct UpcCandProducer {
125131
Configurable<bool> fRequireNoTimeFrameBorder{"requireNoTimeFrameBorder", true, "Require kNoTimeFrameBorder selection bit"};
126132
Configurable<bool> fRequireNoITSROFrameBorder{"requireNoITSROFrameBorder", true, "Require kNoITSROFrameBorder selection bit"};
127133

134+
Configurable<std::string> rctLabel{"rctLabel", "muon", "RCT label to use, options: CBT, CBT_hadronPID, CBT_electronPID, CBT_calo, CBT_muon, CBT_muon_glo, muon = FV0 + MID + MCH, muon_glo = muon + MFT, none = do not use RCT flags"};
135+
Configurable<bool> checkZDC{"checkZDC", false, "Consider ZDC quality"};
136+
Configurable<bool> useLAasBad{"useLAasBad", false, "Consider Lim acc flag as Bad"};
137+
bool useRCTflags = true;
138+
128139
// QA histograms
129140
HistogramRegistry histRegistry{"HistRegistry", {}, OutputObjHandlingPolicy::AnalysisObject};
130141

142+
using CollisionsSels = o2::soa::Join<o2::aod::Collisions, o2::aod::EvSels>;
143+
131144
using BCsWithBcSels = o2::soa::Join<o2::aod::BCs, o2::aod::BcSels, o2::aod::BCFlags>;
132145

133146
using ForwardTracks = o2::soa::Join<o2::aod::UDFwdTracksProp, o2::aod::UDFwdTracksCovProp>;
@@ -146,6 +159,34 @@ struct UpcCandProducer {
146159

147160
upcCuts = (UPCCutparHolder)inputCuts;
148161

162+
// initialize RCT flag checker
163+
if (rctLabel.value != "none" && rctLabel.value != "muon" && rctLabel.value != "muon_glo") {
164+
myRCTChecker.init(rctLabel.value, checkZDC.value, useLAasBad.value);
165+
} else if (rctLabel.value == "none") {
166+
useRCTflags = false;
167+
myRCTChecker.init("CBT_muon");
168+
} else if (rctLabel.value == "muon") {
169+
if (checkZDC.value && useLAasBad.value) {
170+
myRCTChecker.init({kFV0Bad, kMCHBad, kMIDBad, kZDCBad, kMCHLimAccMCRepr, kMIDLimAccMCRepr});
171+
} else if (checkZDC.value) {
172+
myRCTChecker.init({kFV0Bad, kMCHBad, kMIDBad, kZDCBad});
173+
} else if (useLAasBad.value) {
174+
myRCTChecker.init({kFV0Bad, kMCHBad, kMIDBad, kMCHLimAccMCRepr, kMIDLimAccMCRepr});
175+
} else {
176+
myRCTChecker.init({kFV0Bad, kMCHBad, kMIDBad});
177+
}
178+
} else if (rctLabel.value == "muon_glo") {
179+
if (checkZDC.value && useLAasBad.value) {
180+
myRCTChecker.init({kFV0Bad, kMCHBad, kMIDBad, kMFTBad, kZDCBad, kMCHLimAccMCRepr, kMIDLimAccMCRepr, kMFTLimAccMCRepr});
181+
} else if (checkZDC.value) {
182+
myRCTChecker.init({kFV0Bad, kMCHBad, kMIDBad, kMFTBad, kZDCBad});
183+
} else if (useLAasBad.value) {
184+
myRCTChecker.init({kFV0Bad, kMCHBad, kMIDBad, kMFTBad, kMCHLimAccMCRepr, kMIDLimAccMCRepr, kMFTLimAccMCRepr});
185+
} else {
186+
myRCTChecker.init({kFV0Bad, kMCHBad, kMIDBad, kMFTBad});
187+
}
188+
}
189+
149190
const AxisSpec axisTrgCounters{10, 0.5, 10.5, ""};
150191
histRegistry.add("hCountersTrg", "", kTH1F, {axisTrgCounters});
151192
histRegistry.get<TH1>(HIST("hCountersTrg"))->GetXaxis()->SetBinLabel(1, "TCE");
@@ -179,6 +220,11 @@ struct UpcCandProducer {
179220
histRegistry.get<TH1>(HIST("BarrelsSelCounter"))->GetXaxis()->SetBinLabel(upchelpers::kBarrelSelTPCChi2 + 1, "TPCChi2");
180221
histRegistry.get<TH1>(HIST("BarrelsSelCounter"))->GetXaxis()->SetBinLabel(upchelpers::kBarrelSelDCAXY + 1, "DCAXY");
181222
histRegistry.get<TH1>(HIST("BarrelsSelCounter"))->GetXaxis()->SetBinLabel(upchelpers::kBarrelSelDCAZ + 1, "DCAZ");
223+
224+
histRegistry.add("RCTSelCounter", "RCTSelCounter", kTH1F, {{3, 0.5, 3.5}});
225+
histRegistry.get<TH1>(HIST("RCTSelCounter"))->GetXaxis()->SetBinLabel(1, "Before RCT sel");
226+
histRegistry.get<TH1>(HIST("RCTSelCounter"))->GetXaxis()->SetBinLabel(2, "After RCT sel");
227+
histRegistry.get<TH1>(HIST("RCTSelCounter"))->GetXaxis()->SetBinLabel(3, "RCT rejected");
182228
}
183229

184230
template <typename T>
@@ -682,6 +728,13 @@ struct UpcCandProducer {
682728
uint64_t trackBC = 0;
683729
if (trk.has_collision()) {
684730
const auto& col = trk.collision();
731+
auto bcRCT = col.bc_as<TBCs>();
732+
histRegistry.get<TH1>(HIST("RCTSelCounter"))->Fill(1);
733+
if (!myRCTChecker(bcRCT) && useRCTflags) {
734+
histRegistry.get<TH1>(HIST("RCTSelCounter"))->Fill(3);
735+
continue;
736+
}
737+
histRegistry.get<TH1>(HIST("RCTSelCounter"))->Fill(2);
685738
nContrib = col.numContrib();
686739
trackBC = col.bc_as<TBCs>().globalBC();
687740
hasTrackBC = true;
@@ -725,6 +778,13 @@ struct UpcCandProducer {
725778
if (!trk.has_collision())
726779
continue;
727780
const auto& col = trk.collision();
781+
auto bcRCT = col.bc_as<TBCs>();
782+
histRegistry.get<TH1>(HIST("RCTSelCounter"))->Fill(1);
783+
if (!myRCTChecker(bcRCT) && useRCTflags) {
784+
histRegistry.get<TH1>(HIST("RCTSelCounter"))->Fill(3);
785+
continue;
786+
}
787+
histRegistry.get<TH1>(HIST("RCTSelCounter"))->Fill(2);
728788
nContrib = col.numContrib();
729789
trackBC = col.bc_as<TBCs>().globalBC();
730790
hasTrackBC = true;
@@ -765,6 +825,13 @@ struct UpcCandProducer {
765825
if (!trk.has_collision())
766826
continue;
767827
const auto& col = trk.collision();
828+
auto bcRCT = col.bc_as<TBCs>();
829+
histRegistry.get<TH1>(HIST("RCTSelCounter"))->Fill(1);
830+
if (!myRCTChecker(bcRCT) && useRCTflags) {
831+
histRegistry.get<TH1>(HIST("RCTSelCounter"))->Fill(3);
832+
continue;
833+
}
834+
histRegistry.get<TH1>(HIST("RCTSelCounter"))->Fill(2);
768835
nContrib = col.numContrib();
769836
trackBC = col.bc_as<TBCs>().globalBC();
770837
const auto& bc = col.bc_as<TBCs>();

0 commit comments

Comments
 (0)