Skip to content

Commit 6da1933

Browse files
authored
[PWGCF] Add some QA histos and event selection cut (#10638)
1 parent 668eccb commit 6da1933

File tree

2 files changed

+170
-34
lines changed

2 files changed

+170
-34
lines changed

PWGCF/Flow/Tasks/flowEfficiencyCasc.cxx

Lines changed: 108 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ struct FlowEfficiencyCasc {
4343
O2_DEFINE_CONFIGURABLE(cfgCutPtMax, float, 3.0f, "Maximal pT for tracks")
4444
O2_DEFINE_CONFIGURABLE(cfgCutEta, float, 0.8f, "Eta range for tracks")
4545
O2_DEFINE_CONFIGURABLE(cfgCutChi2prTPCcls, float, 2.5f, "max chi2 per TPC clusters")
46+
O2_DEFINE_CONFIGURABLE(cfgCutOccupancyHigh, int, 500, "High cut on TPC occupancy")
4647
// topological cut for V0
4748
O2_DEFINE_CONFIGURABLE(cfgv0_radius, float, 5.0f, "minimum decay radius")
4849
O2_DEFINE_CONFIGURABLE(cfgv0_v0cospa, float, 0.995f, "minimum cosine of pointing angle")
@@ -97,7 +98,7 @@ struct FlowEfficiencyCasc {
9798

9899
void init(InitContext const&)
99100
{
100-
const AxisSpec axisCounter{1, 0, +1, ""};
101+
const AxisSpec axisCounter{2, 0, 2, ""};
101102
// create histograms
102103
registry.add("eventCounter", "eventCounter", kTH1F, {axisCounter});
103104
registry.add("mcEventCounter", "Monte Carlo Truth EventCounter", kTH1F, {axisCounter});
@@ -111,13 +112,89 @@ struct FlowEfficiencyCasc {
111112
registry.add("h3DRecLambda", "", {HistType::kTH3D, {cfgaxisPtV0, cfgaxisMultiplicity, axisLambdaMass}});
112113
registry.add("h3DRecXi", "", {HistType::kTH3D, {cfgaxisPtXi, cfgaxisMultiplicity, axisXiMass}});
113114
registry.add("h3DRecOmega", "", {HistType::kTH3D, {cfgaxisPtOmega, cfgaxisMultiplicity, axisOmegaMass}});
115+
116+
// V0 QA
117+
registry.add("QAhisto/V0/hqaV0radiusbefore", "", {HistType::kTH1D, {{200, 0, 200}}});
118+
registry.add("QAhisto/V0/hqaV0radiusafter", "", {HistType::kTH1D, {{200, 0, 200}}});
119+
registry.add("QAhisto/V0/hqaV0cosPAbefore", "", {HistType::kTH1D, {{1000, 0.95, 1}}});
120+
registry.add("QAhisto/V0/hqaV0cosPAafter", "", {HistType::kTH1D, {{1000, 0.95, 1}}});
121+
registry.add("QAhisto/V0/hqadcaV0daubefore", "", {HistType::kTH1D, {{100, 0, 1}}});
122+
registry.add("QAhisto/V0/hqadcaV0dauafter", "", {HistType::kTH1D, {{100, 0, 1}}});
123+
registry.add("QAhisto/V0/hqaarm_podobefore", "", {HistType::kTH2D, {{100, -1, 1}, {50, 0, 0.3}}});
124+
registry.add("QAhisto/V0/hqaarm_podoafter", "", {HistType::kTH2D, {{100, -1, 1}, {50, 0, 0.3}}});
125+
registry.add("QAhisto/V0/hqadcapostoPVbefore", "", {HistType::kTH1D, {{1000, -10, 10}}});
126+
registry.add("QAhisto/V0/hqadcapostoPVafter", "", {HistType::kTH1D, {{1000, -10, 10}}});
127+
registry.add("QAhisto/V0/hqadcanegtoPVbefore", "", {HistType::kTH1D, {{1000, -10, 10}}});
128+
registry.add("QAhisto/V0/hqadcanegtoPVafter", "", {HistType::kTH1D, {{1000, -10, 10}}});
129+
// Cascade QA
130+
registry.add("QAhisto/Casc/hqaCasccosPAbefore", "", {HistType::kTH1D, {{1000, 0.95, 1}}});
131+
registry.add("QAhisto/Casc/hqaCasccosPAafter", "", {HistType::kTH1D, {{1000, 0.95, 1}}});
132+
registry.add("QAhisto/Casc/hqaCascV0cosPAbefore", "", {HistType::kTH1D, {{1000, 0.95, 1}}});
133+
registry.add("QAhisto/Casc/hqaCascV0cosPAafter", "", {HistType::kTH1D, {{1000, 0.95, 1}}});
134+
registry.add("QAhisto/Casc/hqadcaCascV0toPVbefore", "", {HistType::kTH1D, {{1000, -10, 10}}});
135+
registry.add("QAhisto/Casc/hqadcaCascV0toPVafter", "", {HistType::kTH1D, {{1000, -10, 10}}});
136+
registry.add("QAhisto/Casc/hqadcaCascBachtoPVbefore", "", {HistType::kTH1D, {{1000, -10, 10}}});
137+
registry.add("QAhisto/Casc/hqadcaCascBachtoPVafter", "", {HistType::kTH1D, {{1000, -10, 10}}});
138+
registry.add("QAhisto/Casc/hqadcaCascdaubefore", "", {HistType::kTH1D, {{100, 0, 1}}});
139+
registry.add("QAhisto/Casc/hqadcaCascdauafter", "", {HistType::kTH1D, {{100, 0, 1}}});
140+
registry.add("QAhisto/Casc/hqadcaCascV0daubefore", "", {HistType::kTH1D, {{100, 0, 1}}});
141+
registry.add("QAhisto/Casc/hqadcaCascV0dauafter", "", {HistType::kTH1D, {{100, 0, 1}}});
142+
}
143+
template <typename TCollision>
144+
bool eventSelected(TCollision collision)
145+
{
146+
if (collision.alias_bit(kTVXinTRD)) {
147+
// TRD triggered
148+
return false;
149+
}
150+
if (!collision.selection_bit(o2::aod::evsel::kNoTimeFrameBorder)) {
151+
// reject collisions close to Time Frame borders
152+
// https://its.cern.ch/jira/browse/O2-4623
153+
return false;
154+
}
155+
if (!collision.selection_bit(o2::aod::evsel::kNoITSROFrameBorder)) {
156+
// reject events affected by the ITS ROF border
157+
// https://its.cern.ch/jira/browse/O2-4309
158+
return false;
159+
}
160+
if (!collision.selection_bit(o2::aod::evsel::kNoSameBunchPileup)) {
161+
// rejects collisions which are associated with the same "found-by-T0" bunch crossing
162+
// https://indico.cern.ch/event/1396220/#1-event-selection-with-its-rof
163+
return false;
164+
}
165+
if (!collision.selection_bit(o2::aod::evsel::kIsGoodZvtxFT0vsPV)) {
166+
// removes collisions with large differences between z of PV by tracks and z of PV from FT0 A-C time difference
167+
// use this cut at low multiplicities with caution
168+
return false;
169+
}
170+
if (!collision.selection_bit(o2::aod::evsel::kNoCollInTimeRangeStandard)) {
171+
// no collisions in specified time range
172+
return false;
173+
}
174+
if (!collision.selection_bit(o2::aod::evsel::kIsGoodITSLayersAll)) {
175+
// cut time intervals with dead ITS staves
176+
return false;
177+
}
178+
179+
auto occupancy = collision.trackOccupancyInTimeRange();
180+
if (occupancy > cfgCutOccupancyHigh)
181+
return false;
182+
183+
// // V0A T0A 5 sigma cut
184+
// if (std::fabs(collision.multFV0A() - fT0AV0AMean->Eval(collision.multFT0A())) > 5 * fT0AV0ASigma->Eval(collision.multFT0A()))
185+
// return false;
186+
187+
return true;
114188
}
115189

116190
void processRec(MyCollisions::iterator const& collision, V0MCCandidates const& V0s, CascMCCandidates const& Cascades, DaughterTracks const&, soa::Join<aod::CascMCCores, aod::CascMCCollRefs> const&, soa::Join<aod::V0MCCores, aod::V0MCCollRefs> const&)
117191
{
118192
registry.fill(HIST("eventCounter"), 0.5);
119193
if (!collision.sel8())
120194
return;
195+
if (eventSelected(collision))
196+
return;
197+
registry.fill(HIST("eventCounter"), 1.5);
121198
int rectracknum = collision.multNTracksGlobal();
122199
registry.fill(HIST("h2DCentvsNch"), collision.centFT0C(), rectracknum);
123200
for (const auto& casc : Cascades) {
@@ -127,6 +204,13 @@ struct FlowEfficiencyCasc {
127204
auto negdau = casc.negTrackExtra_as<DaughterTracks>();
128205
auto posdau = casc.posTrackExtra_as<DaughterTracks>();
129206
auto bachelor = casc.bachTrackExtra_as<DaughterTracks>();
207+
// fill QA
208+
registry.fill(HIST("QAhisto/Casc/hqaCasccosPAbefore"), casc.casccosPA(collision.posX(), collision.posY(), collision.posZ()));
209+
registry.fill(HIST("QAhisto/Casc/hqaCascV0cosPAbefore"), casc.v0cosPA(collision.posX(), collision.posY(), collision.posZ()));
210+
registry.fill(HIST("QAhisto/Casc/hqadcaCascV0toPVbefore"), casc.dcav0topv(collision.posX(), collision.posY(), collision.posZ()));
211+
registry.fill(HIST("QAhisto/Casc/hqadcaCascBachtoPVbefore"), casc.dcabachtopv());
212+
registry.fill(HIST("QAhisto/Casc/hqadcaCascdaubefore"), casc.dcacascdaughters());
213+
registry.fill(HIST("QAhisto/Casc/hqadcaCascV0daubefore"), casc.dcaV0daughters());
130214
// track quality check
131215
if (bachelor.tpcNClsFound() < cfgtpcclusters)
132216
continue;
@@ -157,13 +241,20 @@ struct FlowEfficiencyCasc {
157241
continue;
158242
if (std::fabs(casc.mLambda() - o2::constants::physics::MassLambda0) > cfgcasc_mlambdawindow)
159243
continue;
244+
// fill QA
245+
registry.fill(HIST("QAhisto/Casc/hqaCasccosPAafter"), casc.casccosPA(collision.posX(), collision.posY(), collision.posZ()));
246+
registry.fill(HIST("QAhisto/Casc/hqaCascV0cosPAafter"), casc.v0cosPA(collision.posX(), collision.posY(), collision.posZ()));
247+
registry.fill(HIST("QAhisto/Casc/hqadcaCascV0toPVafter"), casc.dcav0topv(collision.posX(), collision.posY(), collision.posZ()));
248+
registry.fill(HIST("QAhisto/Casc/hqadcaCascBachtoPVafter"), casc.dcabachtopv());
249+
registry.fill(HIST("QAhisto/Casc/hqadcaCascdauafter"), casc.dcacascdaughters());
250+
registry.fill(HIST("QAhisto/Casc/hqadcaCascV0dauafter"), casc.dcaV0daughters());
160251
// Omega and antiOmega
161252
int pdgCode{cascMC.pdgCode()};
162253
if (!cfgcheckMCParticle || (std::abs(pdgCode) == kOmegaMinus && std::abs(cascMC.pdgCodeV0()) == kLambda0 && std::abs(cascMC.pdgCodeBachelor()) == kKPlus)) {
163254
if (casc.sign() < 0 && (casc.mOmega() > 1.63) && (casc.mOmega() < 1.71) && std::fabs(casc.yOmega()) < cfgCasc_rapidity &&
164255
(!cfgcheckDauTPC || (std::fabs(bachelor.tpcNSigmaKa()) < cfgNSigma[2] && std::fabs(posdau.tpcNSigmaPr()) < cfgNSigma[1] && std::fabs(negdau.tpcNSigmaPi()) < cfgNSigma[0]))) {
165256
registry.fill(HIST("h3DRecOmega"), casc.pt(), rectracknum, casc.mOmega());
166-
} else if (casc.sign() < 0 && (casc.mOmega() > 1.63) && (casc.mOmega() < 1.71) && std::fabs(casc.yOmega()) < cfgCasc_rapidity &&
257+
} else if (casc.sign() > 0 && (casc.mOmega() > 1.63) && (casc.mOmega() < 1.71) && std::fabs(casc.yOmega()) < cfgCasc_rapidity &&
167258
(!cfgcheckDauTPC || (std::fabs(bachelor.tpcNSigmaKa()) < cfgNSigma[2] && std::fabs(negdau.tpcNSigmaPr()) < cfgNSigma[1] && std::fabs(posdau.tpcNSigmaPi()) < cfgNSigma[0]))) {
168259
registry.fill(HIST("h3DRecOmega"), casc.pt(), rectracknum, casc.mOmega());
169260
}
@@ -173,7 +264,7 @@ struct FlowEfficiencyCasc {
173264
if (casc.sign() < 0 && (casc.mXi() > 1.30) && (casc.mXi() < 1.37) && std::fabs(casc.yXi()) < cfgCasc_rapidity &&
174265
(!cfgcheckDauTPC || (std::fabs(bachelor.tpcNSigmaPi()) < cfgNSigma[0] && std::fabs(posdau.tpcNSigmaPr()) < cfgNSigma[1] && std::fabs(negdau.tpcNSigmaPi()) < cfgNSigma[0]))) {
175266
registry.fill(HIST("h3DRecXi"), casc.pt(), rectracknum, casc.mXi());
176-
} else if (casc.sign() < 0 && (casc.mXi() > 1.30) && (casc.mXi() < 1.37) && std::fabs(casc.yXi()) < cfgCasc_rapidity &&
267+
} else if (casc.sign() > 0 && (casc.mXi() > 1.30) && (casc.mXi() < 1.37) && std::fabs(casc.yXi()) < cfgCasc_rapidity &&
177268
(!cfgcheckDauTPC || (std::fabs(bachelor.tpcNSigmaPi()) < cfgNSigma[0] && std::fabs(negdau.tpcNSigmaPr()) < cfgNSigma[1] && std::fabs(posdau.tpcNSigmaPi()) < cfgNSigma[0]))) {
178269
registry.fill(HIST("h3DRecXi"), casc.pt(), rectracknum, casc.mXi());
179270
}
@@ -187,6 +278,13 @@ struct FlowEfficiencyCasc {
187278
auto v0negdau = v0.negTrackExtra_as<DaughterTracks>();
188279
auto v0posdau = v0.posTrackExtra_as<DaughterTracks>();
189280

281+
// fill QA before cut
282+
registry.fill(HIST("QAhisto/V0/hqaV0radiusbefore"), v0.v0radius());
283+
registry.fill(HIST("QAhisto/V0/hqaV0cosPAbefore"), v0.v0cosPA());
284+
registry.fill(HIST("QAhisto/V0/hqadcaV0daubefore"), v0.dcaV0daughters());
285+
registry.fill(HIST("QAhisto/V0/hqadcapostoPVbefore"), v0.dcapostopv());
286+
registry.fill(HIST("QAhisto/V0/hqadcanegtoPVbefore"), v0.dcanegtopv());
287+
registry.fill(HIST("QAhisto/V0/hqaarm_podobefore"), v0.alpha(), v0.qtarm());
190288
// track quality check
191289
if (v0posdau.tpcNClsFound() < cfgtpcclusters)
192290
continue;
@@ -213,13 +311,20 @@ struct FlowEfficiencyCasc {
213311
continue;
214312
if (std::fabs(v0.dcanegtopv()) < cfgv0_dcadautopv)
215313
continue;
314+
// fill QA after cut
315+
registry.fill(HIST("QAhisto/V0/hqaV0radiusafter"), v0.v0radius());
316+
registry.fill(HIST("QAhisto/V0/hqaV0cosPAafter"), v0.v0cosPA());
317+
registry.fill(HIST("QAhisto/V0/hqadcaV0dauafter"), v0.dcaV0daughters());
318+
registry.fill(HIST("QAhisto/V0/hqadcapostoPVafter"), v0.dcapostopv());
319+
registry.fill(HIST("QAhisto/V0/hqadcanegtoPVafter"), v0.dcanegtopv());
216320

217321
int pdgCode{v0MC.pdgCode()};
218322
// K0short
219323
if (!cfgcheckMCParticle || (std::abs(pdgCode) == kK0Short && v0MC.pdgCodePositive() == kPiPlus && v0MC.pdgCodeNegative() == kPiMinus)) {
220324
if (v0.qtarm() / std::fabs(v0.alpha()) > cfgv0_ArmPodocut && std::fabs(v0.y()) < 0.5 && std::fabs(v0.mK0Short() - o2::constants::physics::MassK0Short) < cfgv0_mk0swindow &&
221325
(!cfgcheckDauTPC || (std::fabs(v0posdau.tpcNSigmaPi()) < cfgNSigma[0] && std::fabs(v0negdau.tpcNSigmaPi()) < cfgNSigma[0]))) {
222326
registry.fill(HIST("h3DRecK0s"), v0.pt(), rectracknum, v0.mK0Short());
327+
registry.fill(HIST("QAhisto/V0/hqaarm_podoafter"), v0.alpha(), v0.qtarm());
223328
}
224329
}
225330
// Lambda and antiLambda

0 commit comments

Comments
 (0)