Skip to content

Commit e9feb02

Browse files
ChiaraDeMartin95Chiara De Martin
andauthored
[PWGLF] Add new event selection and histogram for efficiency in cascadeflow task (#8625)
Co-authored-by: Chiara De Martin <chiara.de.martin@cern.ch>
1 parent 50e69c2 commit e9feb02

File tree

2 files changed

+78
-18
lines changed

2 files changed

+78
-18
lines changed

PWGLF/DataModel/cascqaanalysis.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,8 @@ namespace cascadesflow
115115
DECLARE_SOA_COLUMN(CentFT0A, centFT0A, float);
116116
DECLARE_SOA_COLUMN(CentFT0C, centFT0C, float);
117117
DECLARE_SOA_COLUMN(CentFT0M, centFT0M, float);
118+
DECLARE_SOA_COLUMN(IsNoCollInTimeRange, isNoCollInTimeRange, bool);
119+
DECLARE_SOA_COLUMN(IsNoCollInRof, isNoCollInRof, bool);
118120
DECLARE_SOA_COLUMN(Sign, sign, int16_t);
119121
DECLARE_SOA_COLUMN(Pt, pt, float);
120122
DECLARE_SOA_COLUMN(Eta, eta, float);
@@ -160,7 +162,7 @@ DECLARE_SOA_TABLE(CascTraining, "AOD", "CascTraining", o2::soa::Index<>,
160162
mycascades::DCABachToPV, mycascades::DCACascDaughters, mycascades::DCAV0Daughters, mycascades::DCAV0ToPV, mycascades::BachBaryonCosPA, mycascades::BachBaryonDCAxyToPV, mycascades::McPdgCode);
161163

162164
DECLARE_SOA_TABLE(CascAnalysis, "AOD", "CascAnalysis", o2::soa::Index<>,
163-
cascadesflow::CentFT0C, cascadesflow::Sign, cascadesflow::Pt, cascadesflow::Eta, cascadesflow::Phi, cascadesflow::MassXi, cascadesflow::MassOmega, cascadesflow::V2CSP, cascadesflow::V2CEP, cascadesflow::PsiT0C, cascadesflow::BDTResponseXi, cascadesflow::BDTResponseOmega, cascadesflow::CosThetaStarLambdaFromOmega, cascadesflow::CosThetaStarLambdaFromXi, cascadesflow::CosThetaStarProton, mycascades::McPdgCode);
165+
cascadesflow::CentFT0C, cascadesflow::IsNoCollInTimeRange, cascadesflow::IsNoCollInRof, cascadesflow::Sign, cascadesflow::Pt, cascadesflow::Eta, cascadesflow::Phi, cascadesflow::MassXi, cascadesflow::MassOmega, cascadesflow::V2CSP, cascadesflow::V2CEP, cascadesflow::PsiT0C, cascadesflow::BDTResponseXi, cascadesflow::BDTResponseOmega, cascadesflow::CosThetaStarLambdaFromOmega, cascadesflow::CosThetaStarLambdaFromXi, cascadesflow::CosThetaStarProton, mycascades::McPdgCode);
164166

165167
namespace myMCcascades
166168
{

PWGLF/TableProducer/Strangeness/cascadeflow.cxx

Lines changed: 75 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -135,10 +135,16 @@ struct cascadeFlow {
135135
Configurable<bool> isNoSameBunchPileupCut{"isNoSameBunchPileupCut", 1, "Same found-by-T0 bunch crossing rejection"};
136136
Configurable<bool> isGoodZvtxFT0vsPVCut{"isGoodZvtxFT0vsPVCut", 1, "z of PV by tracks and z of PV from FT0 A-C time difference cut"};
137137
Configurable<bool> isGoodEventEP{"isGoodEventEP", 1, "Event is used to calibrate event plane"};
138+
Configurable<bool> isTrackOccupancySel{"isTrackOccupancySel", 0, "isTrackOccupancySel"};
138139
Configurable<int> MinOccupancy{"MinOccupancy", 0, "MinOccupancy"};
139140
Configurable<int> MaxOccupancy{"MaxOccupancy", 500, "MaxOccupancy"};
140-
Configurable<bool> isCollInStandardTimeRange{"isCollInStandardTimeRange", 1, "To remove collisions in +-10 micros time range"};
141-
Configurable<bool> isCollInNarrowTimeRange{"isCollInNarrowTimeRange", 0, "To remove collisions in +-4 micros time range"};
141+
Configurable<bool> isFT0OccupancySel{"isFT0OccupancySel", 0, "isFT0OccupancySel"};
142+
Configurable<int> MinOccupancyFT0{"MinOccupancyFT0", 0, "MinOccupancyFT0"};
143+
Configurable<int> MaxOccupancyFT0{"MaxOccupancyFT0", 5000, "MaxOccupancyFT0"};
144+
Configurable<bool> isNoCollInStandardTimeRange{"isNoCollInStandardTimeRange", 1, "To remove collisions in +-10 micros time range"};
145+
Configurable<bool> isNoCollInNarrowTimeRange{"isNoCollInNarrowTimeRange", 0, "To remove collisions in +-2 micros time range"};
146+
Configurable<bool> isNoCollInRofStandard{"isNoCollInRofStandard", 0, "To remove collisions in the same ITS ROF and with a multiplicity above a certain threshold"};
147+
Configurable<bool> isNoTVXinTRD{"isNoTVXinTRD", 0, "To remove collisions with trigger in TRD"};
142148

143149
Configurable<float> MinPt{"MinPt", 0.6, "Min pt of cascade"};
144150
Configurable<float> MaxPt{"MaxPt", 10, "Max pt of cascade"};
@@ -213,22 +219,45 @@ struct cascadeFlow {
213219

214220
// occupancy cut
215221
int occupancy = collision.trackOccupancyInTimeRange();
216-
if (occupancy < MinOccupancy || occupancy > MaxOccupancy) {
222+
if (isTrackOccupancySel && (occupancy < MinOccupancy || occupancy > MaxOccupancy)) {
217223
return false;
218224
}
225+
// occupancy cut based on FT0C
226+
int occupancyFT0 = collision.ft0cOccupancyInTimeRange();
227+
if (isFT0OccupancySel && (occupancyFT0 < MinOccupancyFT0 || occupancyFT0 > MaxOccupancyFT0)) {
228+
return false;
229+
}
230+
219231
if (isFillHisto)
220232
histos.fill(HIST("hNEvents"), 5.5);
221233

222-
if (isCollInStandardTimeRange && !collision.selection_bit(o2::aod::evsel::kNoCollInTimeRangeStandard)) {
234+
// time-based event selection
235+
if (isNoCollInStandardTimeRange && !collision.selection_bit(o2::aod::evsel::kNoCollInTimeRangeStandard)) {
223236
return false;
224237
}
225-
226-
if (isCollInNarrowTimeRange && !collision.selection_bit(o2::aod::evsel::kNoCollInTimeRangeNarrow)) {
238+
if (isNoCollInNarrowTimeRange && !collision.selection_bit(o2::aod::evsel::kNoCollInTimeRangeStrict)) {
227239
return false;
228240
}
241+
229242
if (isFillHisto)
230243
histos.fill(HIST("hNEvents"), 6.5);
231244

245+
// In-ROF event selection
246+
if (isNoCollInRofStandard && !collision.selection_bit(o2::aod::evsel::kNoCollInRofStandard)) {
247+
return false;
248+
}
249+
250+
if (isFillHisto)
251+
histos.fill(HIST("hNEvents"), 7.5);
252+
253+
// TVX in TRD
254+
// if (isNoTVXinTRD && collision.alias_bit(kTVXinTRD)){
255+
// return false;
256+
// }
257+
258+
if (isFillHisto)
259+
histos.fill(HIST("hNEvents"), 8.5);
260+
232261
if (isFillHisto) {
233262
histos.fill(HIST("hEventNchCorrelation"), collision.multNTracksPVeta1(), collision.multNTracksGlobal());
234263
histos.fill(HIST("hEventPVcontributorsVsCentrality"), collision.centFT0C(), collision.multNTracksPVeta1());
@@ -337,7 +366,21 @@ struct cascadeFlow {
337366
cosThetaStarLambda[i] = boostedLambda.Pz() / boostedLambda.P();
338367
}
339368

369+
// time-based event selection
370+
bool isNoCollInTimeRangeStd = 0;
371+
if (coll.selection_bit(o2::aod::evsel::kNoCollInTimeRangeStandard))
372+
isNoCollInTimeRangeStd = 1;
373+
// IN-ROF pile-up rejection
374+
bool isNoCollInRofStd = 0;
375+
if (coll.selection_bit(o2::aod::evsel::kNoCollInRofStandard))
376+
isNoCollInRofStd = 1;
377+
// TVX in TRD
378+
bool isTVXinTRD = 0;
379+
// if (coll.alias_bit(kTVXinTRD)) isTVXinTRD = 1;
380+
340381
analysisSample(coll.centFT0C(),
382+
isNoCollInTimeRangeStd,
383+
isNoCollInRofStd,
341384
casc.sign(),
342385
casc.pt(),
343386
casc.eta(),
@@ -365,7 +408,7 @@ struct cascadeFlow {
365408
const AxisSpec ptAxis{static_cast<int>((MaxPt - MinPt) / 0.2), MinPt, MaxPt, "#it{p}_{T} (GeV/#it{c})"};
366409
const AxisSpec v2Axis{200, -1., 1., "#it{v}_{2}"};
367410
const AxisSpec CentAxis{18, 0., 90., "FT0C centrality percentile"};
368-
TString hNEventsLabels[8] = {"All", "sel8", "z vrtx", "kNoSameBunchPileup", "kIsGoodZvtxFT0vsPV", "trackOccupancyInTimeRange", "kNoCollInTimeRange", "kIsGoodEventEP"};
411+
TString hNEventsLabels[10] = {"All", "sel8", "z vrtx", "kNoSameBunchPileup", "kIsGoodZvtxFT0vsPV", "trackOccupancyInTimeRange", "kNoCollInTimeRange", "kNoCollInROF", "kTVXinTRD", "kIsGoodEventEP"};
369412
TString hNEventsLabelsMC[6] = {"All", "z vtx", ">=1RecoColl", "1Reco", "2Reco", "EvSelected"};
370413
TString hNCascLabelsMC[8] = {"All Xi", "all Omega", "Xi: has MC coll", "Om: has MC coll", "Xi: isPrimary", "Om: is Primary", "Xi: |eta|<0.8", "Om: |eta| < 0.8"};
371414

@@ -376,7 +419,7 @@ struct cascadeFlow {
376419
resolution.add("QVectorsNormT0CTPCC", "QVectorsNormT0CTPCC", HistType::kTH2F, {axisQVsNorm, CentAxis});
377420
resolution.add("QVectorsNormTPCAC", "QVectorsNormTPCCB", HistType::kTH2F, {axisQVsNorm, CentAxis});
378421

379-
histos.add("hNEvents", "hNEvents", {HistType::kTH1F, {{8, 0.f, 8.f}}});
422+
histos.add("hNEvents", "hNEvents", {HistType::kTH1F, {{10, 0.f, 10.f}}});
380423
for (Int_t n = 1; n <= histos.get<TH1>(HIST("hNEvents"))->GetNbinsX(); n++) {
381424
histos.get<TH1>(HIST("hNEvents"))->GetXaxis()->SetBinLabel(n, hNEventsLabels[n - 1]);
382425
}
@@ -398,17 +441,21 @@ struct cascadeFlow {
398441
histos.add("hCandidate", "hCandidate", HistType::kTH1F, {{22, -0.5, 21.5}});
399442
histos.add("hCascadeSignal", "hCascadeSignal", HistType::kTH1F, {{6, -0.5, 5.5}});
400443
histos.add("hCascade", "hCascade", HistType::kTH1F, {{6, -0.5, 5.5}});
401-
histos.add("hXiPtvsCent", "hXiPtvsCent", HistType::kTH2F, {{100, 0, 100}, {200, 0, 20}});
402-
histos.add("hOmegaPtvsCent", "hOmegaPtvsCent", HistType::kTH2F, {{100, 0, 100}, {200, 0, 20}});
444+
histos.add("hXiPtvsCent", "hXiPtvsCent", HistType::kTH2F, {{100, 0, 100}, {400, 0, 20}});
445+
histos.add("hXiPtvsCentEta08", "hXiPtvsCentEta08", HistType::kTH2F, {{100, 0, 100}, {400, 0, 20}});
446+
histos.add("hXiPtvsCentY05", "hXiPtvsCentY05", HistType::kTH2F, {{100, 0, 100}, {400, 0, 20}});
447+
histos.add("hOmegaPtvsCent", "hOmegaPtvsCent", HistType::kTH2F, {{100, 0, 100}, {400, 0, 20}});
448+
histos.add("hOmegaPtvsCentEta08", "hOmegaPtvsCentEta08", HistType::kTH2F, {{100, 0, 100}, {400, 0, 20}});
449+
histos.add("hOmegaPtvsCentY05", "hOmegaPtvsCentY05", HistType::kTH2F, {{100, 0, 100}, {400, 0, 20}});
403450
histos.add("hCascadePhi", "hCascadePhi", HistType::kTH1F, {{100, 0, 2 * TMath::Pi()}});
404451
histos.add("hcascminuspsiT0C", "hcascminuspsiT0C", HistType::kTH1F, {{100, 0, TMath::Pi()}});
405452
histos.add("hv2CEPvsFT0C", "hv2CEPvsFT0C", HistType::kTH2F, {CentAxis, {100, -1, 1}});
406453
histos.add("hv2CEPvsv2CSP", "hv2CEPvsV2CSP", HistType::kTH2F, {{100, -1, 1}, {100, -1, 1}});
407454

408-
histosMCGen.add("h2DGenXiEta08", "h2DGenXiEta08", HistType::kTH2F, {{100, 0, 100}, {200, 0, 20}});
409-
histosMCGen.add("h2DGenOmegaEta08", "h2DGenOmegaEta08", HistType::kTH2F, {{100, 0, 100}, {200, 0, 20}});
410-
histosMCGen.add("h2DGenXiY05", "h2DGenXiY05", HistType::kTH2F, {{100, 0, 100}, {200, 0, 20}});
411-
histosMCGen.add("h2DGenOmegaY05", "h2DGenOmegaY05", HistType::kTH2F, {{100, 0, 100}, {200, 0, 20}});
455+
histosMCGen.add("h2DGenXiEta08", "h2DGenXiEta08", HistType::kTH2F, {{100, 0, 100}, {400, 0, 20}});
456+
histosMCGen.add("h2DGenOmegaEta08", "h2DGenOmegaEta08", HistType::kTH2F, {{100, 0, 100}, {400, 0, 20}});
457+
histosMCGen.add("h2DGenXiY05", "h2DGenXiY05", HistType::kTH2F, {{100, 0, 100}, {400, 0, 20}});
458+
histosMCGen.add("h2DGenOmegaY05", "h2DGenOmegaY05", HistType::kTH2F, {{100, 0, 100}, {400, 0, 20}});
412459
histosMCGen.add("hGenXiY", "hGenXiY", HistType::kTH1F, {{100, -1, 1}});
413460
histosMCGen.add("hGenOmegaY", "hGenOmegaY", HistType::kTH1F, {{100, -1, 1}});
414461
histosMCGen.add("hZvertexGen", "hZvertexGen", HistType::kTH1F, {{100, -20, 20}});
@@ -544,7 +591,7 @@ struct cascadeFlow {
544591
if (isGoodEventEP && !coll.triggereventep()) {
545592
return;
546593
}
547-
histos.fill(HIST("hNEvents"), 7.5);
594+
histos.fill(HIST("hNEvents"), 9.5);
548595
histos.fill(HIST("hEventNchCorrelationAfterEP"), coll.multNTracksPVeta1(), coll.multNTracksGlobal());
549596
histos.fill(HIST("hEventPVcontributorsVsCentralityAfterEP"), coll.centFT0C(), coll.multNTracksPVeta1());
550597
histos.fill(HIST("hEventGlobalTracksVsCentralityAfterEP"), coll.centFT0C(), coll.multNTracksGlobal());
@@ -669,7 +716,7 @@ struct cascadeFlow {
669716
}
670717
}
671718

672-
histos.fill(HIST("hNEvents"), 7.5);
719+
histos.fill(HIST("hNEvents"), 9.5);
673720
histos.fill(HIST("hEventNchCorrelationAfterEP"), coll.multNTracksPVeta1(), coll.multNTracksGlobal());
674721
histos.fill(HIST("hEventPVcontributorsVsCentralityAfterEP"), coll.centFT0C(), coll.multNTracksPVeta1());
675722
histos.fill(HIST("hEventGlobalTracksVsCentralityAfterEP"), coll.centFT0C(), coll.multNTracksGlobal());
@@ -790,7 +837,7 @@ struct cascadeFlow {
790837
return;
791838
}
792839

793-
histos.fill(HIST("hNEvents"), 7.5);
840+
histos.fill(HIST("hNEvents"), 9.5);
794841
histos.fill(HIST("hEventNchCorrelationAfterEP"), coll.multNTracksPVeta1(), coll.multNTracksGlobal());
795842
histos.fill(HIST("hEventPVcontributorsVsCentralityAfterEP"), coll.centFT0C(), coll.multNTracksPVeta1());
796843
histos.fill(HIST("hEventGlobalTracksVsCentralityAfterEP"), coll.centFT0C(), coll.multNTracksGlobal());
@@ -813,11 +860,22 @@ struct cascadeFlow {
813860
pdgCode = 0;
814861
}
815862

863+
// rapidity definition
864+
float XiY = RecoDecay::y(std::array{casc.px(), casc.py(), casc.pz()}, constants::physics::MassXiMinus);
865+
float OmegaY = RecoDecay::y(std::array{casc.px(), casc.py(), casc.pz()}, constants::physics::MassOmegaMinus);
816866
// true reco cascades before applying any selection
817867
if (std::abs(pdgCode) == 3312 && std::abs(cascMC.pdgCodeV0()) == 3122 && std::abs(cascMC.pdgCodeBachelor()) == 211) {
818868
histos.fill(HIST("hXiPtvsCent"), coll.centFT0C(), casc.pt());
869+
if (std::abs(casc.eta()) < 0.8)
870+
histos.fill(HIST("hXiPtvsCentEta08"), coll.centFT0C(), casc.pt());
871+
if (std::abs(XiY) < 0.5)
872+
histos.fill(HIST("hXiPtvsCentY05"), coll.centFT0C(), casc.pt());
819873
} else if (std::abs(pdgCode) == 3334 && std::abs(cascMC.pdgCodeV0()) == 3122 && std::abs(cascMC.pdgCodeBachelor()) == 321) {
820874
histos.fill(HIST("hOmegaPtvsCent"), coll.centFT0C(), casc.pt());
875+
if (std::abs(casc.eta()) < 0.8)
876+
histos.fill(HIST("hOmegaPtvsCentEta08"), coll.centFT0C(), casc.pt());
877+
if (std::abs(OmegaY) < 0.5)
878+
histos.fill(HIST("hOmegaPtvsCentY05"), coll.centFT0C(), casc.pt());
821879
}
822880

823881
/// Add some minimal cuts for single track variables (min number of TPC clusters)

0 commit comments

Comments
 (0)