Skip to content

Commit 1b0014f

Browse files
authored
[PWGCF] Add additional event selection flags + centrality prefactor (#14054)
1 parent 780216d commit 1b0014f

File tree

1 file changed

+111
-52
lines changed

1 file changed

+111
-52
lines changed

PWGCF/GenericFramework/Tasks/flowGfwLightIons.cxx

Lines changed: 111 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -116,14 +116,21 @@ struct FlowGfwLightIons {
116116
O2_DEFINE_CONFIGURABLE(cfgEtaPtPtFull, float, 0.8, "eta cut for pure pt-pt correlations");
117117
O2_DEFINE_CONFIGURABLE(cfgVtxZ, float, 10, "vertex cut (cm)");
118118
O2_DEFINE_CONFIGURABLE(cfgOccupancySelection, int, 2000, "Max occupancy selection, -999 to disable");
119-
O2_DEFINE_CONFIGURABLE(cfgNoSameBunchPileupCut, bool, true, "kNoSameBunchPileupCut");
120-
O2_DEFINE_CONFIGURABLE(cfgIsGoodZvtxFT0vsPV, bool, true, "kIsGoodZvtxFT0vsPV");
121-
O2_DEFINE_CONFIGURABLE(cfgIsGoodITSLayersAll, bool, true, "kIsGoodITSLayersAll");
122-
O2_DEFINE_CONFIGURABLE(cfgNoCollInTimeRangeStandard, bool, true, "kNoCollInTimeRangeStandard");
119+
struct : ConfigurableGroup {
120+
O2_DEFINE_CONFIGURABLE(cfgNoSameBunchPileupCut, bool, true, "kNoSameBunchPileupCut");
121+
O2_DEFINE_CONFIGURABLE(cfgIsGoodZvtxFT0vsPV, bool, true, "kIsGoodZvtxFT0vsPV");
122+
O2_DEFINE_CONFIGURABLE(cfgIsGoodITSLayersAll, bool, true, "kIsGoodITSLayersAll");
123+
O2_DEFINE_CONFIGURABLE(cfgNoCollInTimeRangeStandard, bool, true, "kNoCollInTimeRangeStandard");
124+
O2_DEFINE_CONFIGURABLE(cfgNoCollInRofStandard, bool, true, "kNoCollInRofStandard");
125+
O2_DEFINE_CONFIGURABLE(cfgNoHighMultCollInPrevRof, bool, true, "kNoHighMultCollInPrevRof");
126+
O2_DEFINE_CONFIGURABLE(cfgNoITSROFrameBorder, bool, true, "kNoITSROFrameBorder");
127+
O2_DEFINE_CONFIGURABLE(cfgNoTimeFrameBorder, bool, true, "kNoTimeFrameBorder");
128+
O2_DEFINE_CONFIGURABLE(cfgTVXinTRD, bool, true, "kTVXinTRD - Use kTVXinTRD (reject TRD triggered events)");
129+
O2_DEFINE_CONFIGURABLE(cfgIsVertexITSTPC, bool, true, "kIsVertexITSTPC - Selects collisions with at least one ITS-TPC track");
130+
} cfgEventCutFlags;
123131
O2_DEFINE_CONFIGURABLE(cfgDoOccupancySel, bool, true, "Bool for event selection on detector occupancy");
132+
O2_DEFINE_CONFIGURABLE(cfgCentralityFactor, double, 1., "Correction factor for testing centrality robustness");
124133
O2_DEFINE_CONFIGURABLE(cfgMultCut, bool, true, "Use additional event cut on mult correlations");
125-
O2_DEFINE_CONFIGURABLE(cfgTVXinTRD, bool, true, "Use kTVXinTRD (reject TRD triggered events)");
126-
O2_DEFINE_CONFIGURABLE(cfgIsVertexITSTPC, bool, true, "Selects collisions with at least one ITS-TPC track");
127134
O2_DEFINE_CONFIGURABLE(cfgMagField, float, 99999, "Configurable magnetic field; default CCDB will be queried");
128135
O2_DEFINE_CONFIGURABLE(cfgFixedMultMin, int, 1, "Minimum for fixed nch range");
129136
O2_DEFINE_CONFIGURABLE(cfgFixedMultMax, int, 3000, "Maximum for fixed nch range");
@@ -210,12 +217,16 @@ struct FlowGfwLightIons {
210217
kFilteredEvent = 1,
211218
kSel8,
212219
kOccupancy,
213-
kTVXTRD,
214-
kNoSamebunchPU,
215-
kZVtxFT0PV,
216-
kNoCollTRStd,
217-
kVtxITSTPC,
218-
kGoodITSLayers,
220+
kTVXinTRD,
221+
kNoSameBunchPileup,
222+
kIsGoodZvtxFT0vsPV,
223+
kNoCollInTimeRangeStandard,
224+
kNoCollInRofStandard,
225+
kNoHighMultCollInPrevRof,
226+
kNoTimeFrameBorder,
227+
kNoITSROFrameBorder,
228+
kIsVertexITSTPC,
229+
kIsGoodITSLayersAll,
219230
kMultCuts,
220231
kTrackCent
221232
};
@@ -415,18 +426,23 @@ struct FlowGfwLightIons {
415426
}
416427

417428
registry.addClone("eventQA/before/", "eventQA/after/");
418-
registry.add("eventQA/eventSel", "Number of Events;; Counts", {HistType::kTH1D, {{11, 0.5, 11.5}}});
429+
registry.add("eventQA/eventSel", "Number of Events;; Counts", {HistType::kTH1D, {{15, 0.5, 15.5}}});
419430
registry.get<TH1>(HIST("eventQA/eventSel"))->GetXaxis()->SetBinLabel(kFilteredEvent, "Filtered event");
420431
registry.get<TH1>(HIST("eventQA/eventSel"))->GetXaxis()->SetBinLabel(kSel8, "sel8");
421432
registry.get<TH1>(HIST("eventQA/eventSel"))->GetXaxis()->SetBinLabel(kOccupancy, "occupancy");
422-
registry.get<TH1>(HIST("eventQA/eventSel"))->GetXaxis()->SetBinLabel(kTVXTRD, "kTVXinTRD");
423-
registry.get<TH1>(HIST("eventQA/eventSel"))->GetXaxis()->SetBinLabel(kNoSamebunchPU, "kNoSameBunchPileup");
424-
registry.get<TH1>(HIST("eventQA/eventSel"))->GetXaxis()->SetBinLabel(kZVtxFT0PV, "kIsGoodZvtxFT0vsPV");
425-
registry.get<TH1>(HIST("eventQA/eventSel"))->GetXaxis()->SetBinLabel(kNoCollTRStd, "kNoCollInTimeRangeStandard");
426-
registry.get<TH1>(HIST("eventQA/eventSel"))->GetXaxis()->SetBinLabel(kVtxITSTPC, "kIsVertexITSTPC");
427-
registry.get<TH1>(HIST("eventQA/eventSel"))->GetXaxis()->SetBinLabel(kGoodITSLayers, "kIsGoodITSLayersAll");
433+
registry.get<TH1>(HIST("eventQA/eventSel"))->GetXaxis()->SetBinLabel(kTVXinTRD, "kTVXinTRD");
434+
registry.get<TH1>(HIST("eventQA/eventSel"))->GetXaxis()->SetBinLabel(kNoSameBunchPileup, "kNoSameBunchPileup");
435+
registry.get<TH1>(HIST("eventQA/eventSel"))->GetXaxis()->SetBinLabel(kIsGoodZvtxFT0vsPV, "kIsGoodZvtxFT0vsPV");
436+
registry.get<TH1>(HIST("eventQA/eventSel"))->GetXaxis()->SetBinLabel(kNoCollInTimeRangeStandard, "kNoCollInTimeRangeStandard");
437+
registry.get<TH1>(HIST("eventQA/eventSel"))->GetXaxis()->SetBinLabel(kNoCollInRofStandard, "kNoCollInRofStandard");
438+
registry.get<TH1>(HIST("eventQA/eventSel"))->GetXaxis()->SetBinLabel(kNoHighMultCollInPrevRof, "kNoHighMultCollInPrevRof");
439+
registry.get<TH1>(HIST("eventQA/eventSel"))->GetXaxis()->SetBinLabel(kNoTimeFrameBorder, "kNoTimeFrameBorder");
440+
registry.get<TH1>(HIST("eventQA/eventSel"))->GetXaxis()->SetBinLabel(kNoITSROFrameBorder, "kNoITSROFrameBorder");
441+
registry.get<TH1>(HIST("eventQA/eventSel"))->GetXaxis()->SetBinLabel(kIsVertexITSTPC, "kIsVertexITSTPC");
442+
registry.get<TH1>(HIST("eventQA/eventSel"))->GetXaxis()->SetBinLabel(kIsGoodITSLayersAll, "kIsGoodITSLayersAll");
428443
registry.get<TH1>(HIST("eventQA/eventSel"))->GetXaxis()->SetBinLabel(kMultCuts, "after Mult cuts");
429444
registry.get<TH1>(HIST("eventQA/eventSel"))->GetXaxis()->SetBinLabel(kTrackCent, "has track + within cent");
445+
LOGF(info, "eventsel N bins = %d", registry.get<TH1>(HIST("eventQA/eventSel"))->GetNbinsX());
430446
if (!cfgRunByRun && cfgFillWeights) {
431447
registry.add<TH3>("phi_eta_vtxz_ref", "", {HistType::kTH3D, {phiAxis, etaAxis, vtxAxis}});
432448
}
@@ -642,63 +658,101 @@ struct FlowGfwLightIons {
642658
template <typename TCollision>
643659
bool eventSelected(TCollision collision, const int& multTrk, const float& centrality, const int& run)
644660
{
645-
if (cfgTVXinTRD) {
661+
if (cfgEventCutFlags.cfgTVXinTRD) {
646662
if (collision.alias_bit(kTVXinTRD)) {
647663
// TRD triggered
648664
// "CMTVX-B-NOPF-TRD,minbias_TVX"
649665
return 0;
650666
}
651-
registry.fill(HIST("eventQA/eventSel"), kTVXTRD);
667+
registry.fill(HIST("eventQA/eventSel"), kTVXinTRD);
652668
if (cfgRunByRun)
653-
th1sList[run][hEventSel]->Fill(kTVXTRD);
669+
th1sList[run][hEventSel]->Fill(kTVXinTRD);
654670
}
655-
if (cfgNoSameBunchPileupCut) {
671+
if (cfgEventCutFlags.cfgNoSameBunchPileupCut) {
656672
if (!collision.selection_bit(o2::aod::evsel::kNoSameBunchPileup)) {
657673
// rejects collisions which are associated with the same "found-by-T0" bunch crossing
658674
// https://indico.cern.ch/event/1396220/#1-event-selection-with-its-rof
659675
return 0;
660676
}
661-
registry.fill(HIST("eventQA/eventSel"), kNoSamebunchPU);
677+
registry.fill(HIST("eventQA/eventSel"), kNoSameBunchPileup);
662678
if (cfgRunByRun)
663-
th1sList[run][hEventSel]->Fill(kNoSamebunchPU);
679+
th1sList[run][hEventSel]->Fill(kNoSameBunchPileup);
664680
}
665-
if (cfgIsGoodZvtxFT0vsPV) {
681+
if (cfgEventCutFlags.cfgIsGoodZvtxFT0vsPV) {
666682
if (!collision.selection_bit(o2::aod::evsel::kIsGoodZvtxFT0vsPV)) {
667683
// removes collisions with large differences between z of PV by tracks and z of PV from FT0 A-C time difference
668684
// use this cut at low multiplicities with caution
669685
return 0;
670686
}
671-
registry.fill(HIST("eventQA/eventSel"), kZVtxFT0PV);
687+
registry.fill(HIST("eventQA/eventSel"), kIsGoodZvtxFT0vsPV);
672688
if (cfgRunByRun)
673-
th1sList[run][hEventSel]->Fill(kZVtxFT0PV);
689+
th1sList[run][hEventSel]->Fill(kIsGoodZvtxFT0vsPV);
674690
}
675-
if (cfgNoCollInTimeRangeStandard) {
691+
if (cfgEventCutFlags.cfgNoCollInTimeRangeStandard) {
676692
if (!collision.selection_bit(o2::aod::evsel::kNoCollInTimeRangeStandard)) {
677693
// Rejection of the collisions which have other events nearby
678694
return 0;
679695
}
680-
registry.fill(HIST("eventQA/eventSel"), kNoCollTRStd);
696+
registry.fill(HIST("eventQA/eventSel"), kNoCollInTimeRangeStandard);
697+
if (cfgRunByRun)
698+
th1sList[run][hEventSel]->Fill(kNoCollInTimeRangeStandard);
699+
}
700+
701+
if (cfgEventCutFlags.cfgNoCollInRofStandard) {
702+
if (!collision.selection_bit(o2::aod::evsel::kNoCollInRofStandard)) {
703+
// Rejection of the collisions which have other events nearby
704+
return 0;
705+
}
706+
registry.fill(HIST("eventQA/eventSel"), kNoCollInRofStandard);
707+
if (cfgRunByRun)
708+
th1sList[run][hEventSel]->Fill(kNoCollInRofStandard);
709+
}
710+
711+
if (cfgEventCutFlags.cfgNoHighMultCollInPrevRof) {
712+
if (!collision.selection_bit(o2::aod::evsel::kNoHighMultCollInPrevRof)) {
713+
// Rejection of the collisions which have other events nearby
714+
return 0;
715+
}
716+
registry.fill(HIST("eventQA/eventSel"), kNoHighMultCollInPrevRof);
681717
if (cfgRunByRun)
682-
th1sList[run][hEventSel]->Fill(kNoCollTRStd);
718+
th1sList[run][hEventSel]->Fill(kNoHighMultCollInPrevRof);
683719
}
684720

685-
if (cfgIsVertexITSTPC) {
721+
if (cfgEventCutFlags.cfgIsVertexITSTPC) {
686722
if (!collision.selection_bit(o2::aod::evsel::kIsVertexITSTPC)) {
687723
// selects collisions with at least one ITS-TPC track, and thus rejects vertices built from ITS-only tracks
688724
return 0;
689725
}
690-
registry.fill(HIST("eventQA/eventSel"), kVtxITSTPC);
726+
registry.fill(HIST("eventQA/eventSel"), kIsVertexITSTPC);
691727
if (cfgRunByRun)
692-
th1sList[run][hEventSel]->Fill(kVtxITSTPC);
728+
th1sList[run][hEventSel]->Fill(kIsVertexITSTPC);
693729
}
694730

695-
if (cfgIsGoodITSLayersAll) {
731+
if (cfgEventCutFlags.cfgIsGoodITSLayersAll) {
696732
if (!collision.selection_bit(o2::aod::evsel::kIsGoodITSLayersAll)) {
697733
return 0;
698734
}
699-
registry.fill(HIST("eventQA/eventSel"), kGoodITSLayers);
735+
registry.fill(HIST("eventQA/eventSel"), kIsGoodITSLayersAll);
736+
if (cfgRunByRun)
737+
th1sList[run][hEventSel]->Fill(kIsGoodITSLayersAll);
738+
}
739+
740+
if (cfgEventCutFlags.cfgNoTimeFrameBorder) {
741+
if (!collision.selection_bit(o2::aod::evsel::kNoTimeFrameBorder)) {
742+
return 0;
743+
}
744+
registry.fill(HIST("eventQA/eventSel"), kNoTimeFrameBorder);
700745
if (cfgRunByRun)
701-
th1sList[run][hEventSel]->Fill(kGoodITSLayers);
746+
th1sList[run][hEventSel]->Fill(kNoTimeFrameBorder);
747+
}
748+
749+
if (cfgEventCutFlags.cfgNoITSROFrameBorder) {
750+
if (!collision.selection_bit(o2::aod::evsel::kNoITSROFrameBorder)) {
751+
return 0;
752+
}
753+
registry.fill(HIST("eventQA/eventSel"), kNoITSROFrameBorder);
754+
if (cfgRunByRun)
755+
th1sList[run][hEventSel]->Fill(kNoITSROFrameBorder);
702756
}
703757

704758
float vtxz = -999;
@@ -783,18 +837,23 @@ struct FlowGfwLightIons {
783837
profiles[pfCorr22] = registry.add<TProfile>(Form("%d/corr22", run), "", {HistType::kTProfile, {(cfgUseNch) ? nchAxis : centAxis}});
784838
tpfsList.insert(std::make_pair(run, profiles));
785839
}
786-
histos[hEventSel] = registry.add<TH1>(Form("%d/eventSel", run), "Number of Events;; Counts", {HistType::kTH1D, {{11, 0.5, 11.5}}});
840+
histos[hEventSel] = registry.add<TH1>(Form("%d/eventSel", run), "Number of Events;; Counts", {HistType::kTH1D, {{15, 0.5, 15.5}}});
787841
histos[hEventSel]->GetXaxis()->SetBinLabel(kFilteredEvent, "Filtered event");
788842
histos[hEventSel]->GetXaxis()->SetBinLabel(kSel8, "sel8");
789843
histos[hEventSel]->GetXaxis()->SetBinLabel(kOccupancy, "occupancy");
790-
histos[hEventSel]->GetXaxis()->SetBinLabel(kTVXTRD, "kTVXinTRD");
791-
histos[hEventSel]->GetXaxis()->SetBinLabel(kNoSamebunchPU, "kNoSameBunchPileup");
792-
histos[hEventSel]->GetXaxis()->SetBinLabel(kZVtxFT0PV, "kIsGoodZvtxFT0vsPV");
793-
histos[hEventSel]->GetXaxis()->SetBinLabel(kNoCollTRStd, "kNoCollInTimeRangeStandard");
794-
histos[hEventSel]->GetXaxis()->SetBinLabel(kVtxITSTPC, "kIsVertexITSTPC");
795-
histos[hEventSel]->GetXaxis()->SetBinLabel(kGoodITSLayers, "kIsGoodITSLayersAll");
844+
histos[hEventSel]->GetXaxis()->SetBinLabel(kTVXinTRD, "kTVXinTRD");
845+
histos[hEventSel]->GetXaxis()->SetBinLabel(kNoSameBunchPileup, "kNoSameBunchPileup");
846+
histos[hEventSel]->GetXaxis()->SetBinLabel(kIsGoodZvtxFT0vsPV, "kIsGoodZvtxFT0vsPV");
847+
histos[hEventSel]->GetXaxis()->SetBinLabel(kNoCollInTimeRangeStandard, "kNoCollInTimeRangeStandard");
848+
histos[hEventSel]->GetXaxis()->SetBinLabel(kNoCollInRofStandard, "kNoCollInRofStandard");
849+
histos[hEventSel]->GetXaxis()->SetBinLabel(kNoHighMultCollInPrevRof, "kNoHighMultCollInPrevRof");
850+
histos[hEventSel]->GetXaxis()->SetBinLabel(kNoTimeFrameBorder, "kNoTimeFrameBorder");
851+
histos[hEventSel]->GetXaxis()->SetBinLabel(kNoITSROFrameBorder, "kNoITSROFrameBorder");
852+
histos[hEventSel]->GetXaxis()->SetBinLabel(kIsVertexITSTPC, "kIsVertexITSTPC");
853+
histos[hEventSel]->GetXaxis()->SetBinLabel(kIsGoodITSLayersAll, "kIsGoodITSLayersAll");
796854
histos[hEventSel]->GetXaxis()->SetBinLabel(kMultCuts, "after Mult cuts");
797855
histos[hEventSel]->GetXaxis()->SetBinLabel(kTrackCent, "has track + within cent");
856+
798857
th1sList.insert(std::make_pair(run, histos));
799858
std::vector<std::shared_ptr<TH3>> histos3d(kCount_TH3Names);
800859
histos3d[hNUAref] = registry.add<TH3>(Form("%d/phi_eta_vtxz_ref", run), "", {HistType::kTH3D, {phiAxis, etaAxis, vtxAxis}});
@@ -1160,21 +1219,21 @@ struct FlowGfwLightIons {
11601219
{
11611220
switch (cfgCentEstimator) {
11621221
case kCentFT0C:
1163-
return collision.centFT0C();
1222+
return cfgCentralityFactor * collision.centFT0C();
11641223
case kCentFT0CVariant1:
1165-
return collision.centFT0CVariant1();
1224+
return cfgCentralityFactor * collision.centFT0CVariant1();
11661225
case kCentFT0M:
1167-
return collision.centFT0M();
1226+
return cfgCentralityFactor * collision.centFT0M();
11681227
case kCentFV0A:
1169-
return collision.centFV0A();
1228+
return cfgCentralityFactor * collision.centFV0A();
11701229
case kCentNTPV:
1171-
return collision.centNTPV();
1230+
return cfgCentralityFactor * collision.centNTPV();
11721231
case kCentNGlobal:
1173-
return collision.centNGlobal();
1232+
return cfgCentralityFactor * collision.centNGlobal();
11741233
case kCentMFT:
1175-
return collision.centMFT();
1234+
return cfgCentralityFactor * collision.centMFT();
11761235
default:
1177-
return collision.centFT0C();
1236+
return cfgCentralityFactor * collision.centFT0C();
11781237
}
11791238
}
11801239

0 commit comments

Comments
 (0)