Skip to content

Commit 0651dcb

Browse files
authored
[PWGLF] V0 analysis vs multiplicity: add additional track info to the data model (#9873)
1 parent c283ece commit 0651dcb

File tree

3 files changed

+94
-31
lines changed

3 files changed

+94
-31
lines changed

PWGLF/DataModel/v0qaanalysis.h

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
// or submit itself to any jurisdiction.
1111
///
1212
/// \brief QA task for V0 analysis using derived data
13-
///
1413
/// \author Francesca Ercolessi (francesca.ercolessi@cern.ch)
1514

1615
#ifndef PWGLF_DATAMODEL_V0QAANALYSIS_H_
@@ -62,6 +61,16 @@ DECLARE_SOA_COLUMN(MultFV0A, multfv0a, float);
6261
DECLARE_SOA_COLUMN(EvFlag, evflag, int);
6362
DECLARE_SOA_COLUMN(Alpha, alpha, float);
6463
DECLARE_SOA_COLUMN(QtArm, qtarm, float);
64+
DECLARE_SOA_COLUMN(V0PosTPCCrossedRows, v0postpcCrossedRows, float);
65+
DECLARE_SOA_COLUMN(V0PosTPCCRFindCls, v0postpcCRFindCls, float);
66+
DECLARE_SOA_COLUMN(V0PosTPCNClsShared, v0postpcNClsShared, float);
67+
DECLARE_SOA_COLUMN(V0PosITSChi2NCl, v0positsChi2NCl, float);
68+
DECLARE_SOA_COLUMN(V0PosTPCChi2NCl, v0postpcChi2NCl, float);
69+
DECLARE_SOA_COLUMN(V0NegTPCCrossedRows, v0negtpcCrossedRows, float);
70+
DECLARE_SOA_COLUMN(V0NegTPCCRFindCls, v0negtpcCRFindCls, float);
71+
DECLARE_SOA_COLUMN(V0NegTPCNClsShared, v0negtpcNClsShared, float);
72+
DECLARE_SOA_COLUMN(V0NegITSChi2NCl, v0negitsChi2NCl, float);
73+
DECLARE_SOA_COLUMN(V0NegTPCChi2NCl, v0negtpcChi2NCl, float);
6574

6675
} // namespace myv0candidates
6776

@@ -77,7 +86,11 @@ DECLARE_SOA_TABLE(MyV0Candidates, "AOD", "MYV0CANDIDATES",
7786
myv0candidates::PosHasTOF, myv0candidates::NegHasTOF,
7887
myv0candidates::PDGCode, myv0candidates::IsDauK0Short, myv0candidates::IsDauLambda, myv0candidates::IsDauAntiLambda, myv0candidates::IsPhysicalPrimary,
7988
myv0candidates::MultFT0M, myv0candidates::MultFV0A,
80-
myv0candidates::EvFlag, myv0candidates::Alpha, myv0candidates::QtArm);
89+
myv0candidates::EvFlag, myv0candidates::Alpha, myv0candidates::QtArm,
90+
myv0candidates::V0PosTPCCrossedRows, myv0candidates::V0PosTPCCRFindCls, myv0candidates::V0PosTPCNClsShared,
91+
myv0candidates::V0PosITSChi2NCl, myv0candidates::V0PosTPCChi2NCl,
92+
myv0candidates::V0NegTPCCrossedRows, myv0candidates::V0NegTPCCRFindCls, myv0candidates::V0NegTPCNClsShared,
93+
myv0candidates::V0NegITSChi2NCl, myv0candidates::V0NegTPCChi2NCl);
8194

8295
} // namespace o2::aod
8396

PWGLF/TableProducer/Strangeness/v0qaanalysis.cxx

Lines changed: 29 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ struct LfV0qaanalysis {
7474
registry.get<TH1>(HIST("hNEvents"))->GetXaxis()->SetBinLabel(5, "TFBorder");
7575
registry.get<TH1>(HIST("hNEvents"))->GetXaxis()->SetBinLabel(6, "ITSROFBorder");
7676
registry.get<TH1>(HIST("hNEvents"))->GetXaxis()->SetBinLabel(7, "isTOFVertexMatched");
77-
registry.get<TH1>(HIST("hNEvents"))->GetXaxis()->SetBinLabel(8, "isGoodZvtxFT0vsPV");
77+
registry.get<TH1>(HIST("hNEvents"))->GetXaxis()->SetBinLabel(8, "isNoSameBunchPileup");
7878
registry.get<TH1>(HIST("hNEvents"))->GetXaxis()->SetBinLabel(9, "Applied selection");
7979

8080
registry.add("hCentFT0M", "hCentFT0M", {HistType::kTH1F, {{1000, 0.f, 100.f}}});
@@ -134,14 +134,16 @@ struct LfV0qaanalysis {
134134

135135
// Event selection criteria
136136
Configurable<float> cutzvertex{"cutzvertex", 15.0f, "Accepted z-vertex range (cm)"};
137+
Configurable<float> MCcutzvertex{"MCcutzvertex", 100.0f, "Accepted true MC z-vertex range (cm)"};
137138
Configurable<bool> sel8{"sel8", 0, "Apply sel8 event selection"};
138139
Configurable<bool> isMC{"isMC", 0, "Is MC"};
139140
Configurable<bool> isTriggerTVX{"isTriggerTVX", 1, "Is Trigger TVX"};
140141
Configurable<bool> isNoTimeFrameBorder{"isNoTimeFrameBorder", 1, "Is No Time Frame Border"};
141142
Configurable<bool> isNoITSROFrameBorder{"isNoITSROFrameBorder", 1, "Is No ITS Readout Frame Border"};
142143
Configurable<bool> isVertexTOFmatched{"isVertexTOFmatched", 0, "Is Vertex TOF matched"};
143-
Configurable<bool> isGoodZvtxFT0vsPV{"isGoodZvtxFT0vsPV", 0, "isGoodZvtxFT0vsPV"};
144+
Configurable<bool> isNoSameBunchPileup{"isNoSameBunchPileup", 0, "isNoSameBunchPileup"};
144145
Configurable<int> v0TypeSelection{"v0TypeSelection", 1, "select on a certain V0 type (leave negative if no selection desired)"};
146+
Configurable<bool> NotITSAfterburner{"NotITSAfterburner", 0, "NotITSAfterburner"};
145147

146148
// V0 selection criteria
147149
Configurable<double> v0cospa{"v0cospa", 0.97, "V0 CosPA"};
@@ -172,15 +174,15 @@ struct LfV0qaanalysis {
172174
return false;
173175
}
174176
registry.fill(HIST("hNEvents"), 4.5);
175-
if (!isMC && isNoITSROFrameBorder && !collision.selection_bit(aod::evsel::kNoITSROFrameBorder)) {
177+
if (isNoITSROFrameBorder && !collision.selection_bit(aod::evsel::kNoITSROFrameBorder)) {
176178
return false;
177179
}
178180
registry.fill(HIST("hNEvents"), 5.5);
179181
if (isVertexTOFmatched && !collision.selection_bit(aod::evsel::kIsVertexTOFmatched)) {
180182
return false;
181183
}
182184
registry.fill(HIST("hNEvents"), 6.5);
183-
if (isGoodZvtxFT0vsPV && !collision.selection_bit(aod::evsel::kIsGoodZvtxFT0vsPV)) {
185+
if (isNoSameBunchPileup && !collision.selection_bit(aod::evsel::kNoSameBunchPileup)) {
184186
return false;
185187
}
186188
registry.fill(HIST("hNEvents"), 7.5);
@@ -235,6 +237,10 @@ struct LfV0qaanalysis {
235237
bool isPhysicalPrimary = isMC;
236238
bool isDauK0Short = false, isDauLambda = false, isDauAntiLambda = false;
237239

240+
if (NotITSAfterburner && (v0.negTrack_as<DauTracks>().isITSAfterburner() || v0.posTrack_as<DauTracks>().isITSAfterburner())) {
241+
continue;
242+
}
243+
238244
if (v0.v0radius() > v0radius &&
239245
v0.v0cosPA() > v0cospa &&
240246
TMath::Abs(v0.posTrack_as<DauTracks>().eta()) < etadau &&
@@ -253,7 +259,13 @@ struct LfV0qaanalysis {
253259
v0.negTrack_as<DauTracks>().tofNSigmaPr(), v0.posTrack_as<DauTracks>().tofNSigmaPr(),
254260
v0.negTrack_as<DauTracks>().tofNSigmaPi(), v0.posTrack_as<DauTracks>().tofNSigmaPi(),
255261
v0.posTrack_as<DauTracks>().hasTOF(), v0.negTrack_as<DauTracks>().hasTOF(), lPDG, isDauK0Short, isDauLambda, isDauAntiLambda, isPhysicalPrimary,
256-
collision.centFT0M(), collision.centFV0A(), evFlag, v0.alpha(), v0.qtarm());
262+
collision.centFT0M(), collision.centFV0A(), evFlag, v0.alpha(), v0.qtarm(),
263+
v0.posTrack_as<DauTracks>().tpcNClsCrossedRows(), v0.posTrack_as<DauTracks>().tpcCrossedRowsOverFindableCls(),
264+
v0.posTrack_as<DauTracks>().tpcNClsShared(), v0.posTrack_as<DauTracks>().itsChi2NCl(),
265+
v0.posTrack_as<DauTracks>().tpcChi2NCl(),
266+
v0.negTrack_as<DauTracks>().tpcNClsCrossedRows(), v0.negTrack_as<DauTracks>().tpcCrossedRowsOverFindableCls(),
267+
v0.negTrack_as<DauTracks>().tpcNClsShared(), v0.negTrack_as<DauTracks>().itsChi2NCl(),
268+
v0.negTrack_as<DauTracks>().tpcChi2NCl());
257269
}
258270
}
259271
}
@@ -307,6 +319,10 @@ struct LfV0qaanalysis {
307319
continue;
308320
}
309321

322+
if (NotITSAfterburner && (v0.negTrack_as<DauTracks>().isITSAfterburner() || v0.posTrack_as<DauTracks>().isITSAfterburner())) {
323+
continue;
324+
}
325+
310326
// Highest numerator of efficiency
311327
if (v0mcparticle.isPhysicalPrimary()) {
312328
if (v0mcparticle.pdgCode() == 310) {
@@ -383,7 +399,13 @@ struct LfV0qaanalysis {
383399
v0.negTrack_as<DauTracksMC>().tofNSigmaPr(), v0.posTrack_as<DauTracksMC>().tofNSigmaPr(),
384400
v0.negTrack_as<DauTracksMC>().tofNSigmaPi(), v0.posTrack_as<DauTracksMC>().tofNSigmaPi(),
385401
v0.posTrack_as<DauTracksMC>().hasTOF(), v0.negTrack_as<DauTracksMC>().hasTOF(), lPDG, isDauK0Short, isDauLambda, isDauAntiLambda, isprimary,
386-
mcCollision.centFT0M(), cent, evFlag, v0.alpha(), v0.qtarm());
402+
mcCollision.centFT0M(), cent, evFlag, v0.alpha(), v0.qtarm(),
403+
v0.posTrack_as<DauTracks>().tpcNClsCrossedRows(), v0.posTrack_as<DauTracks>().tpcCrossedRowsOverFindableCls(),
404+
v0.posTrack_as<DauTracks>().tpcNClsShared(), v0.posTrack_as<DauTracks>().itsChi2NCl(),
405+
v0.posTrack_as<DauTracks>().tpcChi2NCl(),
406+
v0.negTrack_as<DauTracks>().tpcNClsCrossedRows(), v0.negTrack_as<DauTracks>().tpcCrossedRowsOverFindableCls(),
407+
v0.negTrack_as<DauTracks>().tpcNClsShared(), v0.negTrack_as<DauTracks>().itsChi2NCl(),
408+
v0.negTrack_as<DauTracks>().tpcChi2NCl());
387409
}
388410
}
389411

@@ -432,7 +454,7 @@ struct LfV0qaanalysis {
432454

433455
registry.fill(HIST("hNEventsMCGen"), 0.5);
434456

435-
if (TMath::Abs(mcCollision.posZ()) > cutzvertex) {
457+
if (TMath::Abs(mcCollision.posZ()) > MCcutzvertex) {
436458
return;
437459
}
438460
registry.fill(HIST("hNEventsMCGen"), 1.5);

PWGLF/Tasks/Strangeness/v0postprocessing.cxx

Lines changed: 50 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ using DauTracks = soa::Join<aod::Tracks, aod::TracksExtra, aod::TracksDCA, aod::
3131
struct v0postprocessing {
3232

3333
Configurable<float> radius{"radius", 0.5, "Radius"};
34+
Configurable<float> maxradius{"maxradius", 1000, "Radius"};
3435
Configurable<float> dcanegtopv{"dcanegtopv", 0.05, "DCA Neg To PV"};
3536
Configurable<float> dcapostopv{"dcapostopv", 0.05, "DCA Pos To PV"};
3637
Configurable<double> cospaK0s{"cospaK0s", 0.97, "K0s CosPA"};
@@ -45,6 +46,11 @@ struct v0postprocessing {
4546
Configurable<float> ntpcsigmaMC{"ntpcsigmaMC", 100, "N sigma TPC for MC"};
4647
Configurable<float> etadau{"etadau", 0.8, "Eta Daughters"};
4748
Configurable<float> minITShits{"minITShits", 2, "min ITS hits"};
49+
Configurable<float> min_TPC_nClusters{"min_TPC_nClusters", 80, "min_TPC_nClusters"};
50+
Configurable<float> min_TPC_nCrossedRowsOverFindableCls{"min_TPC_nCrossedRowsOverFindableCls", 0.8, "min_TPC_nCrossedRowsOverFindableCls"};
51+
Configurable<float> max_tpcSharedCls{"max_tpcSharedCls", 0.4, "max_tpcSharedCls"};
52+
Configurable<float> max_chi2_ITS{"max_chi2_ITS", 36, "max_chi2_ITS"};
53+
Configurable<float> max_chi2_TPC{"max_chi2_TPC", 4, "max_chi2_TPC"};
4854
Configurable<bool> isMC{"isMC", 1, "isMC"};
4955
Configurable<bool> evSel{"evSel", 1, "evSel"};
5056
Configurable<bool> hasTOF2Leg{"hasTOF2Leg", 0, "hasTOF2Leg"};
@@ -126,15 +132,35 @@ struct v0postprocessing {
126132
for (auto& candidate : myv0s) {
127133

128134
// common selections
129-
if (candidate.v0radius() < radius)
135+
if (candidate.v0radius() < radius && candidate.v0radius() > maxradius)
130136
continue;
131137
if (TMath::Abs(candidate.v0poseta()) > etadau)
132138
continue;
133139
if (TMath::Abs(candidate.v0negeta()) > etadau)
134140
continue;
135-
if (TMath::Abs(candidate.v0positshits()) < minITShits)
141+
if (candidate.v0positshits() < minITShits)
136142
continue;
137-
if (TMath::Abs(candidate.v0negitshits()) < minITShits)
143+
if (candidate.v0negitshits() < minITShits)
144+
continue;
145+
if (candidate.v0postpcCrossedRows() < min_TPC_nClusters)
146+
continue;
147+
if (candidate.v0negtpcCrossedRows() < min_TPC_nClusters)
148+
continue;
149+
if (candidate.v0postpcCRFindCls() < min_TPC_nCrossedRowsOverFindableCls)
150+
continue;
151+
if (candidate.v0negtpcCRFindCls() < min_TPC_nCrossedRowsOverFindableCls)
152+
continue;
153+
if (candidate.v0postpcNClsShared() > max_tpcSharedCls)
154+
continue;
155+
if (candidate.v0negtpcNClsShared() > max_tpcSharedCls)
156+
continue;
157+
if (candidate.v0positsChi2NCl() > max_chi2_ITS)
158+
continue;
159+
if (candidate.v0negitsChi2NCl() > max_chi2_ITS)
160+
continue;
161+
if (candidate.v0postpcChi2NCl() > max_chi2_TPC)
162+
continue;
163+
if (candidate.v0negtpcChi2NCl() > max_chi2_TPC)
138164
continue;
139165
if (TMath::Abs(candidate.v0dcanegtopv()) < dcanegtopv)
140166
continue;
@@ -160,26 +186,28 @@ struct v0postprocessing {
160186

161187
registry.fill(HIST("hArmenterosPodolanski"), candidate.alpha(), candidate.qtarm());
162188

163-
if (doArmenterosCut && candidate.qtarm() > (paramArmenterosCut * TMath::Abs(candidate.alpha()))) {
164-
registry.fill(HIST("hArmenterosPodolanski_Sel"), candidate.alpha(), candidate.qtarm());
165-
registry.fill(HIST("hMassK0Short"), candidate.massk0short());
166-
registry.fill(HIST("hMassVsPtK0Short"), candidate.v0pt(), candidate.massk0short());
167-
registry.fill(HIST("hMassVsPtK0ShortVsCentFT0M"), candidate.v0pt(), candidate.multft0m(), candidate.massk0short());
168-
registry.fill(HIST("hMassVsPtK0ShortVsCentFV0A"), candidate.v0pt(), candidate.multfv0a(), candidate.massk0short());
189+
if (doArmenterosCut && candidate.qtarm() <= (paramArmenterosCut * TMath::Abs(candidate.alpha()))) {
190+
continue;
191+
}
169192

170-
// QA
171-
if (!isMC) {
172-
registry.fill(HIST("hK0sV0Radius"), candidate.v0radius());
173-
registry.fill(HIST("hK0sCosPA"), candidate.v0cospa());
174-
registry.fill(HIST("hK0sV0DCANegToPV"), candidate.v0dcanegtopv());
175-
registry.fill(HIST("hK0sV0DCAPosToPV"), candidate.v0dcapostopv());
176-
registry.fill(HIST("hK0sV0DCAV0Daughters"), candidate.v0dcav0daughters());
177-
registry.fill(HIST("hK0sCtau"), candidate.ctauk0short());
178-
registry.fill(HIST("hK0sEtaDau"), candidate.v0poseta());
179-
registry.fill(HIST("hK0sRap"), candidate.rapk0short());
180-
registry.fill(HIST("hK0sTPCNSigmaPosPi"), candidate.ntpcsigmapospi());
181-
registry.fill(HIST("hK0sTPCNSigmaNegPi"), candidate.ntpcsigmanegpi());
182-
}
193+
registry.fill(HIST("hArmenterosPodolanski_Sel"), candidate.alpha(), candidate.qtarm());
194+
registry.fill(HIST("hMassK0Short"), candidate.massk0short());
195+
registry.fill(HIST("hMassVsPtK0Short"), candidate.v0pt(), candidate.massk0short());
196+
registry.fill(HIST("hMassVsPtK0ShortVsCentFT0M"), candidate.v0pt(), candidate.multft0m(), candidate.massk0short());
197+
registry.fill(HIST("hMassVsPtK0ShortVsCentFV0A"), candidate.v0pt(), candidate.multfv0a(), candidate.massk0short());
198+
199+
// QA
200+
if (!isMC) {
201+
registry.fill(HIST("hK0sV0Radius"), candidate.v0radius());
202+
registry.fill(HIST("hK0sCosPA"), candidate.v0cospa());
203+
registry.fill(HIST("hK0sV0DCANegToPV"), candidate.v0dcanegtopv());
204+
registry.fill(HIST("hK0sV0DCAPosToPV"), candidate.v0dcapostopv());
205+
registry.fill(HIST("hK0sV0DCAV0Daughters"), candidate.v0dcav0daughters());
206+
registry.fill(HIST("hK0sCtau"), candidate.ctauk0short());
207+
registry.fill(HIST("hK0sEtaDau"), candidate.v0poseta());
208+
registry.fill(HIST("hK0sRap"), candidate.rapk0short());
209+
registry.fill(HIST("hK0sTPCNSigmaPosPi"), candidate.ntpcsigmapospi());
210+
registry.fill(HIST("hK0sTPCNSigmaNegPi"), candidate.ntpcsigmanegpi());
183211
}
184212
}
185213

0 commit comments

Comments
 (0)