|
34 | 34 | using namespace o2; |
35 | 35 | using namespace o2::framework; |
36 | 36 | using namespace o2::framework::expressions; |
| 37 | +using namespace o2::aod::rctsel; |
37 | 38 |
|
38 | 39 | // using DauTracks = soa::Join<aod::TracksIU, aod::TracksExtra, aod::TracksCovIU, aod::TracksDCA, aod::pidTPCPi, aod::pidTPCPr, aod::pidTPCKa, aod::pidTOFPi, aod::pidTOFPr>; |
39 | 40 | using TrkPidInfo = soa::Join<aod::pidTPCFullPi, aod::pidTPCFullPr, aod::pidTPCFullKa, aod::pidTOFPi, aod::pidTOFPr, aod::pidTOFKa>; |
@@ -79,6 +80,14 @@ struct Cascqaanalysis { |
79 | 80 | Configurable<bool> isNoITSROFrameBorder{"isNoITSROFrameBorder", 1, "ITS ROF border cut"}; |
80 | 81 | Configurable<bool> isNoCollInTimeRangeNarrow{"isNoCollInTimeRangeNarrow", 1, "No collisions in +-2us window"}; |
81 | 82 |
|
| 83 | + Configurable<bool> requireRCTFlagChecker{"requireRCTFlagChecker", true, "Check event quality in run condition table"}; |
| 84 | + Configurable<std::string> cfgEvtRCTFlagCheckerLabel{"cfgEvtRCTFlagCheckerLabel", "CBT_hadronPID", "Evt sel: RCT flag checker label"}; |
| 85 | + Configurable<bool> cfgEvtRCTFlagCheckerZDCCheck{"cfgEvtRCTFlagCheckerZDCCheck", false, "Evt sel: RCT flag checker ZDC check"}; |
| 86 | + Configurable<bool> cfgEvtRCTFlagCheckerFV0Check{"cfgEvtRCTFlagCheckerFV0Check", false, "Evt sel: RCT flag checker FV0 check"}; |
| 87 | + Configurable<bool> cfgEvtRCTFlagCheckerLimitAcceptAsBad{"cfgEvtRCTFlagCheckerLimitAcceptAsBad", false, "Evt sel: RCT flag checker treat Limited Acceptance As Bad"}; |
| 88 | + |
| 89 | + RCTFlagsChecker rctChecker; |
| 90 | + |
82 | 91 | // Cascade selection criteria |
83 | 92 | Configurable<float> scalefactor{"scalefactor", 1.0, "Scaling factor"}; |
84 | 93 | Configurable<double> casccospa{"casccospa", 0.97, "Casc CosPA"}; |
@@ -119,9 +128,9 @@ struct Cascqaanalysis { |
119 | 128 | { |
120 | 129 | TString hCandidateCounterLabels[4] = {"All candidates", "passed topo cuts", "has associated MC particle", "associated with Xi(Omega)"}; |
121 | 130 | TString hNEventsMCLabels[6] = {"All", "z vrtx", "INEL", "INEL>0", "INEL>1", "Associated with rec. collision"}; |
122 | | - TString hNEventsLabels[13] = {"All", "kIsTriggerTVX", "kNoTimeFrameBorder", "kNoITSROFrameBorder", "kIsVertexITSTPC", "kNoSameBunchPileup", "kIsGoodZvtxFT0vsPV", "isVertexTOFmatched", "kNoCollInTimeRangeNarrow", "z vrtx", "INEL", "INEL>0", "INEL>1"}; |
| 131 | + TString hNEventsLabels[14] = {"All", "kIsTriggerTVX", "kNoTimeFrameBorder", "kNoITSROFrameBorder", "kIsVertexITSTPC", "kNoSameBunchPileup", "kIsGoodZvtxFT0vsPV", "isVertexTOFmatched", "kNoCollInTimeRangeNarrow", "z vrtx", "RCTFlagsChecker", "INEL", "INEL>0", "INEL>1"}; |
123 | 132 |
|
124 | | - registry.add("hNEvents", "hNEvents", {HistType::kTH1D, {{13, 0.f, 13.f}}}); |
| 133 | + registry.add("hNEvents", "hNEvents", {HistType::kTH1D, {{14, 0.f, 14.f}}}); |
125 | 134 |
|
126 | 135 | for (int n = 1; n <= registry.get<TH1>(HIST("hNEvents"))->GetNbinsX(); n++) { |
127 | 136 | registry.get<TH1>(HIST("hNEvents"))->GetXaxis()->SetBinLabel(n, hNEventsLabels[n - 1]); |
@@ -169,6 +178,13 @@ struct Cascqaanalysis { |
169 | 178 | registry.add("hFT0MFV0Asignal", "hFT0MFV0Asignal", {HistType::kTH2D, {signalFT0MAxis, signalFV0AAxis}}); |
170 | 179 | registry.add("hFT0MsignalPVContr", "hFT0MsignalPVContr", {HistType::kTH3D, {signalFT0MAxis, multNTracksAxis, eventTypeAxis}}); |
171 | 180 | } |
| 181 | + |
| 182 | + |
| 183 | + rctChecker.init(cfgEvtRCTFlagCheckerLabel, cfgEvtRCTFlagCheckerZDCCheck, cfgEvtRCTFlagCheckerLimitAcceptAsBad); |
| 184 | + if (cfgEvtRCTFlagCheckerFV0Check) { |
| 185 | + rctChecker.set(o2::aod::rctsel::kFV0Bad); |
| 186 | + } |
| 187 | + |
172 | 188 | } |
173 | 189 |
|
174 | 190 | Filter preFilter = |
@@ -256,14 +272,14 @@ struct Cascqaanalysis { |
256 | 272 | { |
257 | 273 | // 0 - INEL, 1 - INEL>0, 2 - INEL>1 |
258 | 274 | int evFlag = 0; |
259 | | - registry.fill(HIST("hNEvents"), 10.5); // INEL |
| 275 | + registry.fill(HIST("hNEvents"), 11.5); // INEL |
260 | 276 | if (collision.isInelGt0()) { |
261 | 277 | evFlag += 1; |
262 | | - registry.fill(HIST("hNEvents"), 11.5); // INEL>0 |
| 278 | + registry.fill(HIST("hNEvents"), 12.5); // INEL>0 |
263 | 279 | } |
264 | 280 | if (collision.isInelGt1()) { |
265 | 281 | evFlag += 1; |
266 | | - registry.fill(HIST("hNEvents"), 12.5); // INEL>1 |
| 282 | + registry.fill(HIST("hNEvents"), 13.5); // INEL>1 |
267 | 283 | } |
268 | 284 | return evFlag; |
269 | 285 | } |
@@ -347,6 +363,14 @@ struct Cascqaanalysis { |
347 | 363 | registry.fill(HIST("hZCollision"), collision.posZ()); |
348 | 364 | } |
349 | 365 |
|
| 366 | + // RCTFlagChecker selection |
| 367 | + if (requireRCTFlagChecker && !rctChecker(collision)) { |
| 368 | + return false; |
| 369 | + } |
| 370 | + if (isFillEventSelectionQA) { |
| 371 | + registry.fill(HIST("hNEvents"), 10.5); |
| 372 | + } |
| 373 | + |
350 | 374 | return true; |
351 | 375 | } |
352 | 376 |
|
@@ -483,15 +507,15 @@ struct Cascqaanalysis { |
483 | 507 | uint16_t nchFV0 = getGenNchInFV0Aregion(mcPartSlice); |
484 | 508 |
|
485 | 509 | int evType = 0; |
486 | | - registry.fill(HIST("hNEvents"), 10.5); // INEL |
| 510 | + registry.fill(HIST("hNEvents"), 11.5); // INEL |
487 | 511 | // Rec. collision associated with INEL>0 gen. one |
488 | 512 | if (pwglf::isINELgtNmc(mcPartSlice, 0, pdgDB)) { |
489 | | - registry.fill(HIST("hNEvents"), 11.5); // INEL |
| 513 | + registry.fill(HIST("hNEvents"), 12.5); // INEL |
490 | 514 | evType++; |
491 | 515 | } |
492 | 516 | // Rec. collision associated with INEL>1 gen. one |
493 | 517 | if (pwglf::isINELgtNmc(mcPartSlice, 1, pdgDB)) { |
494 | | - registry.fill(HIST("hNEvents"), 12.5); // INEL |
| 518 | + registry.fill(HIST("hNEvents"), 13.5); // INEL |
495 | 519 | evType++; |
496 | 520 | } |
497 | 521 |
|
|
0 commit comments