Skip to content

Commit fcc911e

Browse files
PWG-LF: Event selection update (#2955)
* INELgt0 upd * del. mult. and DCA QA histos * Please consider the following formatting changes * EvSelFilter * Please consider the following formatting changes * EvSelFlag conf. name --------- Co-authored-by: ALICE Action Bot <alibuild@cern.ch>
1 parent 13e318c commit fcc911e

File tree

3 files changed

+71
-70
lines changed

3 files changed

+71
-70
lines changed

PWGLF/DataModel/cascqaanalysis.h

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,12 @@ namespace o2::aod
4444
namespace mycascades
4545
{
4646

47+
enum EvFlags : uint8_t {
48+
EvINEL = 0x1, // INEL Event
49+
EvINELgt0 = 0x2, // Event with at least 1 PV contributors from the |eta| < 1
50+
EvINELgt1 = 0x4 // Event with at least 2 PV contributors from the |eta| < 1
51+
};
52+
4753
DECLARE_SOA_INDEX_COLUMN(Collision, collision);
4854
DECLARE_SOA_COLUMN(CollisionZ, zcoll, float);
4955
DECLARE_SOA_COLUMN(MultFT0M, multFT0M, float);
@@ -99,7 +105,14 @@ DECLARE_SOA_COLUMN(McPdgCode, mcPdgCode, float); //! -1 unkn
99105
DECLARE_SOA_COLUMN(IsPrimary, isPrimary, float); //! -1 unknown, 0 not primary, 1 primary
100106
DECLARE_SOA_COLUMN(BachBaryonCosPA, bachBaryonCosPA, float); //! avoid bach-baryon correlated inv mass structure in analysis
101107
DECLARE_SOA_COLUMN(BachBaryonDCAxyToPV, bachBaryonDCAxyToPV, float); //! avoid bach-baryon correlated inv mass structure in analysis
108+
DECLARE_SOA_COLUMN(EventSelFilterBitMask, eventSelFilterBitMask, uint8_t);
102109

110+
DECLARE_SOA_DYNAMIC_COLUMN(IsINEL, isINEL, //! True if the Event belongs to the INEL event class
111+
[](uint8_t flags) -> bool { return (flags & EvFlags::EvINEL) == EvFlags::EvINEL; });
112+
DECLARE_SOA_DYNAMIC_COLUMN(IsINELgt0, isINELgt0, //! True if the Event belongs to the INELgt0 event class
113+
[](uint8_t flags) -> bool { return (flags & EvFlags::EvINELgt0) == EvFlags::EvINELgt0; });
114+
DECLARE_SOA_DYNAMIC_COLUMN(IsINELgt1, isINELgt1, //! True if the Event belongs to the INELgt1 event class
115+
[](uint8_t flags) -> bool { return (flags & EvFlags::EvINELgt1) == EvFlags::EvINELgt1; });
103116
} // namespace mycascades
104117

105118
DECLARE_SOA_TABLE(MyCascades, "AOD", "MYCASCADES", o2::soa::Index<>,
@@ -115,7 +128,11 @@ DECLARE_SOA_TABLE(MyCascades, "AOD", "MYCASCADES", o2::soa::Index<>,
115128
mycascades::PosHasTOF, mycascades::NegHasTOF, mycascades::BachHasTOF,
116129
mycascades::PosPt, mycascades::NegPt, mycascades::BachPt,
117130
mycascades::McPdgCode, mycascades::IsPrimary,
118-
cascdata::BachBaryonCosPA, cascdata::BachBaryonDCAxyToPV);
131+
mycascades::BachBaryonCosPA, mycascades::BachBaryonDCAxyToPV,
132+
mycascades::EventSelFilterBitMask,
133+
mycascades::IsINEL<mycascades::EventSelFilterBitMask>,
134+
mycascades::IsINELgt0<mycascades::EventSelFilterBitMask>,
135+
mycascades::IsINELgt1<mycascades::EventSelFilterBitMask>);
119136

120137
} // namespace o2::aod
121138

PWGLF/TableProducer/cascqaanalysis.cxx

Lines changed: 30 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -53,13 +53,13 @@ struct cascqaanalysis {
5353
{
5454
TString hCandidateCounterLabels[5] = {"All candidates", "v0data exists", "passed topo cuts", "has associated MC particle", "associated with Xi(Omega)"};
5555
TString hNEventsMCLabels[4] = {"All", "z vrtx", "INEL>0", "Associated with rec. collision"};
56-
TString hNEventsLabels[4] = {"All", "sel8", "z vrtx", "INEL>0"};
56+
TString hNEventsLabels[6] = {"All", "sel8", "z vrtx", "INEL", "INEL>0", "INEL>1"};
5757

58-
registry.add("hNEvents", "hNEvents", {HistType::kTH1F, {{4, 0.f, 4.f}}});
58+
registry.add("hNEvents", "hNEvents", {HistType::kTH1F, {{6, 0.f, 6.f}}});
5959
for (Int_t n = 1; n <= registry.get<TH1>(HIST("hNEvents"))->GetNbinsX(); n++) {
6060
registry.get<TH1>(HIST("hNEvents"))->GetXaxis()->SetBinLabel(n, hNEventsLabels[n - 1]);
6161
}
62-
registry.add("hNAssocCollisions", "hNAssocCollisions", {HistType::kTH1F, {{5, -0.5f, 4.5f}}});
62+
registry.add("hNAssocMCCollisions", "hNAssocMCCollisions", {HistType::kTH1F, {{5, -0.5f, 4.5f}}});
6363
registry.add("hNContributorsCorrelation", "hNContributorsCorrelation", {HistType::kTH2F, {{250, -0.5f, 249.5f, "Secondary Contributor"}, {250, -0.5f, 249.5f, "Main Contributor"}}});
6464
registry.add("hZCollision", "hZCollision", {HistType::kTH1F, {{200, -20.f, 20.f}}});
6565
registry.add("hZCollisionGen", "hZCollisionGen", {HistType::kTH1F, {{200, -20.f, 20.f}}});
@@ -87,12 +87,6 @@ struct cascqaanalysis {
8787
AxisSpec allTracks = {2000, 0, 2000, "N_{all tracks}"};
8888
AxisSpec secondaryTracks = {2000, 0, 2000, "N_{secondary tracks}"};
8989
registry.add("hINELgt0PrimariesSelection", "hINELgt0PrimariesSelection", {HistType::kTH2F, {allTracks, secondaryTracks}});
90-
registry.add("hDCAz_BefCut", "hDCAz_BefCut", HistType::kTH2F, {{400, -0.2, 0.2, "DCAz"}, {150, 0.0, 15.0, "p_{T} (GeV/c)"}});
91-
registry.add("hDCAz_AfterCut", "hDCAz_AfterCut", HistType::kTH2F, {{400, -0.2, 0.2, "DCAz"}, {150, 0.0, 15.0, "p_{T} (GeV/c)"}});
92-
registry.add("hDCAxy_BefCut", "hDCAxy_BefCut", HistType::kTH2F, {{400, -0.2, 0.2, "DCAxy"}, {150, 0.0, 15.0, "p_{T} (GeV/c)"}});
93-
registry.add("hDCAxy_AfterCut", "hDCAxy_AfterCut", HistType::kTH2F, {{400, -0.2, 0.2, "DCAxy"}, {150, 0.0, 15.0, "p_{T} (GeV/c)"}});
94-
registry.add("hNchMultFT0M", "hNchMultFT0M", HistType::kTH2F, {{300, 0.0f, 300.0f, "N_{ch}"}, {10000, 0.f, 10000.f, "FT0M signal"}});
95-
registry.add("hNchMultFV0A", "hNchMultFV0A", HistType::kTH2F, {{300, 0.0f, 300.0f, "N_{ch}"}, {15000, 0.f, 15000.f, "FV0A signal"}});
9690
}
9791

9892
// Event selection criteria
@@ -172,11 +166,14 @@ struct cascqaanalysis {
172166
registry.fill(HIST("hNEvents"), 2.5);
173167
}
174168

175-
if (INELgt0 && !isINELgt0(tracks, isFillEventSelectionQA)) {
176-
return false;
177-
}
178169
if (isFillEventSelectionQA) {
179170
registry.fill(HIST("hNEvents"), 3.5);
171+
if (collision.multNTracksPVeta1() > 0) {
172+
registry.fill(HIST("hNEvents"), 4.5);
173+
}
174+
if (collision.multNTracksPVeta1() > 1) {
175+
registry.fill(HIST("hNEvents"), 5.5);
176+
}
180177
}
181178

182179
if (isFillEventSelectionQA) {
@@ -193,43 +190,6 @@ struct cascqaanalysis {
193190
return (TMath::Abs(track.dcaXY()) < (maxDCANsigmaScaling * (DCASigma + DCAPtScaling / track.pt()))) && (TMath::Abs(track.dcaZ()) < maxDCAz);
194191
}
195192

196-
template <typename TTracks>
197-
bool isINELgt0(TTracks tracks, bool isFillEventSelectionQA)
198-
{
199-
// INEL > 0 (at least 1 charged track in |eta| < 1.0)
200-
std::vector<float> TracksEta(tracks.size());
201-
int nTracks = 0;
202-
int nRejTracks = 0;
203-
204-
for (const auto& track : tracks) {
205-
registry.fill(HIST("hDCAxy_BefCut"), track.dcaXY(), track.pt());
206-
registry.fill(HIST("hDCAz_BefCut"), track.dcaZ(), track.pt());
207-
208-
if (!isPrimaryTrack(track)) {
209-
nRejTracks++;
210-
continue; // consider only primaries
211-
}
212-
TracksEta[nTracks++] = track.eta();
213-
214-
registry.fill(HIST("hDCAxy_AfterCut"), track.dcaXY(), track.pt());
215-
registry.fill(HIST("hDCAz_AfterCut"), track.dcaZ(), track.pt());
216-
}
217-
218-
if (isFillEventSelectionQA) {
219-
registry.fill(HIST("hINELgt0PrimariesSelection"), tracks.size(), nRejTracks);
220-
}
221-
222-
auto etaConditionFunc = [](float elem) {
223-
return TMath::Abs(elem) < 1.0;
224-
};
225-
226-
if (std::any_of(TracksEta.begin(), TracksEta.end(), etaConditionFunc)) {
227-
return true;
228-
} else {
229-
return false;
230-
}
231-
}
232-
233193
template <typename TMcParticles>
234194
bool isINELgt0mc(TMcParticles particles)
235195
{
@@ -276,21 +236,6 @@ struct cascqaanalysis {
276236
}
277237
}
278238

279-
template <typename TCollision, typename TTracks>
280-
void fillMultHisto(TCollision const& collision, TTracks const& tracks)
281-
{
282-
double Nch = 0;
283-
for (const auto& track : tracks) {
284-
if (TMath::Abs(track.eta()) > 0.5)
285-
continue;
286-
if (!isPrimaryTrack(track))
287-
continue;
288-
Nch++;
289-
}
290-
registry.fill(HIST("hNchMultFT0M"), Nch, collision.multFT0A() + collision.multFT0C());
291-
registry.fill(HIST("hNchMultFV0A"), Nch, collision.multFV0A());
292-
}
293-
294239
void processData(soa::Join<aod::Collisions, aod::EvSels, aod::Mults, aod::CentFT0Ms, aod::CentFV0As>::iterator const& collision,
295240
soa::Filtered<aod::CascDataExt> const& Cascades,
296241
aod::V0sLinked const&,
@@ -332,6 +277,15 @@ struct cascqaanalysis {
332277
}
333278
}
334279

280+
uint8_t flags = 0;
281+
flags |= o2::aod::mycascades::EvFlags::EvINEL;
282+
if (collision.multNTracksPVeta1() > 0) {
283+
flags |= o2::aod::mycascades::EvFlags::EvINELgt0;
284+
}
285+
if (collision.multNTracksPVeta1() > 1) {
286+
flags |= o2::aod::mycascades::EvFlags::EvINELgt1;
287+
}
288+
335289
// c x tau
336290
float cascpos = std::hypot(casc.x() - collision.posX(), casc.y() - collision.posY(), casc.z() - collision.posZ());
337291
float cascptotmom = std::hypot(casc.px(), casc.py(), casc.pz());
@@ -352,7 +306,7 @@ struct cascqaanalysis {
352306
negdau.tofNSigmaPr(), posdau.tofNSigmaPr(), negdau.tofNSigmaPi(), posdau.tofNSigmaPi(), bachelor.tofNSigmaPi(), bachelor.tofNSigmaKa(),
353307
posdau.tpcNClsFound(), negdau.tpcNClsFound(), bachelor.tpcNClsFound(),
354308
posdau.hasTOF(), negdau.hasTOF(), bachelor.hasTOF(),
355-
posdau.pt(), negdau.pt(), bachelor.pt(), -1, -1, casc.bachBaryonCosPA(), casc.bachBaryonDCAxyToPV());
309+
posdau.pt(), negdau.pt(), bachelor.pt(), -1, -1, casc.bachBaryonCosPA(), casc.bachBaryonDCAxyToPV(), flags);
356310
}
357311
}
358312
}
@@ -371,8 +325,6 @@ struct cascqaanalysis {
371325
return;
372326
}
373327

374-
fillMultHisto(collision, Tracks);
375-
376328
float lEventScale = scalefactor;
377329

378330
for (const auto& casc : Cascades) { // loop over Cascades
@@ -404,6 +356,15 @@ struct cascqaanalysis {
404356
}
405357
}
406358

359+
uint8_t flags = 0;
360+
flags |= o2::aod::mycascades::EvFlags::EvINEL;
361+
if (collision.multNTracksPVeta1() > 0) {
362+
flags |= o2::aod::mycascades::EvFlags::EvINELgt0;
363+
}
364+
if (collision.multNTracksPVeta1() > 1) {
365+
flags |= o2::aod::mycascades::EvFlags::EvINELgt1;
366+
}
367+
407368
// c x tau
408369
float cascpos = std::hypot(casc.x() - collision.posX(), casc.y() - collision.posY(), casc.z() - collision.posZ());
409370
float cascptotmom = std::hypot(casc.px(), casc.py(), casc.pz());
@@ -436,7 +397,7 @@ struct cascqaanalysis {
436397
negdau.tofNSigmaPr(), posdau.tofNSigmaPr(), negdau.tofNSigmaPi(), posdau.tofNSigmaPi(), bachelor.tofNSigmaPi(), bachelor.tofNSigmaKa(),
437398
posdau.tpcNClsFound(), negdau.tpcNClsFound(), bachelor.tpcNClsFound(),
438399
posdau.hasTOF(), negdau.hasTOF(), bachelor.hasTOF(),
439-
posdau.pt(), negdau.pt(), bachelor.pt(), lPDG, isPrimary, casc.bachBaryonCosPA(), casc.bachBaryonDCAxyToPV());
400+
posdau.pt(), negdau.pt(), bachelor.pt(), lPDG, isPrimary, casc.bachBaryonCosPA(), casc.bachBaryonDCAxyToPV(), flags);
440401
}
441402
}
442403
}
@@ -499,7 +460,7 @@ struct cascqaanalysis {
499460
}
500461
}
501462
SelectedEvents.resize(nevts);
502-
registry.fill(HIST("hNAssocCollisions"), nAssocColl);
463+
registry.fill(HIST("hNAssocMCCollisions"), nAssocColl);
503464
if (NumberOfContributors.size() == 2) {
504465
std::sort(NumberOfContributors.begin(), NumberOfContributors.end());
505466
registry.fill(HIST("hNContributorsCorrelation"), NumberOfContributors[0], NumberOfContributors[1]);

PWGLF/Tasks/cascpostprocessing.cxx

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,8 @@ struct cascpostprocessing {
6868

6969
Configurable<bool> isFT0MforMC{"isFT0MforMC", 0, "Fill with FT0M information or 0s"};
7070

71+
Configurable<int> evSelFlag{"evSelFlag", 2, "1 - INEL; 2 - INEL>0; 3 - INEL>1"};
72+
7173
HistogramRegistry registry{"registryts"};
7274

7375
void init(InitContext const&)
@@ -208,6 +210,27 @@ struct cascpostprocessing {
208210

209211
for (auto& candidate : mycascades) {
210212

213+
switch (evSelFlag) {
214+
case 1: {
215+
if (!candidate.isINEL())
216+
continue;
217+
break;
218+
}
219+
case 2: {
220+
if (!candidate.isINELgt0())
221+
continue;
222+
break;
223+
}
224+
case 3: {
225+
if (!candidate.isINELgt1())
226+
continue;
227+
break;
228+
}
229+
default:
230+
LOGF(fatal, "incorrect evSelFlag in cascpostprocessing task");
231+
break;
232+
}
233+
211234
counter = -1;
212235
registry.fill(HIST("hCandidate"), ++counter);
213236

0 commit comments

Comments
 (0)