@@ -66,6 +66,15 @@ struct qaEventTrackLite {
66
66
Configurable<float > chi2TofMin{" chi2TofMin" , -1001 .f , " Max TOF chi2" };
67
67
Configurable<float > lengthMin{" lengthMin" , -1001 .f , " Min length" };
68
68
69
+ // Selection 1
70
+ // ITS selections
71
+ Configurable<float > chi2ItsMaxSel1{" chi2ItsMaxSel1" , 1000 .f , " Max ITS chi2 Sel1" };
72
+ // TPC selections
73
+ Configurable<int > nClusterTpcMinSel1{" nClusterTpcMinSel1" , -1001 , " Minimum number of TPC clusters Sel1" };
74
+ Configurable<int > nCrossedRowsTpcMinSel1{" nCrossedRowsTpcMinSel1" , -1001 , " Minimum number of TPC crossed rows Sel1" };
75
+ Configurable<float > nCrossedRowsTpcOverFindableClustersTpcMinSel1{" nCrossedRowsTpcOverFindableClustersTpcMinSel1" , -1 , " Minimum ratio between TPC crossed rows and findable clusters Sel1" };
76
+ Configurable<float > chi2TpcMaxSel1{" chi2TpcMaxSel1" , 1000 .f , " Max TPC chi2 Sel1" };
77
+
69
78
void init (InitContext const &)
70
79
{
71
80
const AxisSpec axisPt{binsPt, " #it{p}_{T} [GeV/c]" };
@@ -110,13 +119,23 @@ struct qaEventTrackLite {
110
119
// kinematics
111
120
histos.add (" Tracks/relativeResoPt" , " relative #it{p}_{T} resolution;#sigma(#it{p}_{T})/#it{p}_{T};#it{p}_{T};" , kTH2D , {{axisPt, {500 , 0 ., 1 , " #sigma{#it{p}}/#it{p}_{T}" }}});
112
121
histos.add (" Tracks/relativeResoPtMean" , " mean relative #it{p}_{T} resolution;#LT(#it{p}_{T})/#it{p}_{T}#GT;#it{p}_{T};" , kTProfile , {axisPt});
122
+ // track cuts map
123
+ histos.add (" TrackCuts/selPtEtaPhiNoSel" , " pt eta phi map no el; pt,eta,phi" , kTH3D , {axisPt, {50 , -1.2 , 1.2 , " #eta" }, {30 , 0 ., 2 * M_PI, " #varphi" }});
124
+ histos.add (" TrackCuts/selPtEtaPhiSel1" , " pt eta phi map sel 1; pt,eta,phi" , kTH3D , {axisPt, {50 , -1.2 , 1.2 , " #eta" }, {30 , 0 ., 2 * M_PI, " #varphi" }});
125
+ histos.add (" TrackCuts/selPtEtaPhiSel2" , " pt eta phi map sel 2; pt,eta,phi" , kTH3D , {axisPt, {50 , -1.2 , 1.2 , " #eta" }, {30 , 0 ., 2 * M_PI, " #varphi" }});
126
+ histos.add (" TrackCuts/selPtEtaPhiSel3" , " pt eta phi map sel 3; pt,eta,phi" , kTH3D , {axisPt, {50 , -1.2 , 1.2 , " #eta" }, {30 , 0 ., 2 * M_PI, " #varphi" }});
113
127
114
128
// MC histograms
115
129
if (doprocessMCLite) {
116
130
histos.add (" Particles/PDGs" , " Particle PDGs;PDG Code" , kTH1D , {{100 , 0 .f , 100 .f }});
117
131
histos.add (" Particles/Kine/pt" , " Particle #it{p}_{T}" , kTH1D , {axisPt});
118
132
histos.add (" Particles/Kine/eta" , " Particle #eta" , kTH1D , {axisEta});
119
133
histos.add (" Particles/Kine/phi" , " Particle #phi" , kTH1D , {axisPhi});
134
+ histos.add (" Particle/selPtEtaPhiMCGenPrimary" , " pt eta phi map MC gen Primary; pt,eta,phi" , kTH3D , {axisPt, {50 , -1.2 , 1.2 , " #eta" }, {30 , 0 ., 2 * M_PI, " #varphi" }});
135
+ histos.add (" Particle/selPtEtaPhiMCRecoNoSelPrimary" , " pt eta phi map MC gen Primary; pt,eta,phi" , kTH3D , {axisPt, {50 , -1.2 , 1.2 , " #eta" }, {30 , 0 ., 2 * M_PI, " #varphi" }});
136
+ histos.add (" Particle/selPtEtaPhiMCRecoSel1Primary" , " pt eta phi map MC gen Primary; pt,eta,phi" , kTH3D , {axisPt, {50 , -1.2 , 1.2 , " #eta" }, {30 , 0 ., 2 * M_PI, " #varphi" }});
137
+ histos.add (" Particle/selPtEtaPhiMCRecoSel2Primary" , " pt eta phi map MC gen Primary; pt,eta,phi" , kTH3D , {axisPt, {50 , -1.2 , 1.2 , " #eta" }, {30 , 0 ., 2 * M_PI, " #varphi" }});
138
+ histos.add (" Particle/selPtEtaPhiMCRecoSel3Primary" , " pt eta phi map MC gen Primary; pt,eta,phi" , kTH3D , {axisPt, {50 , -1.2 , 1.2 , " #eta" }, {30 , 0 ., 2 * M_PI, " #varphi" }});
120
139
}
121
140
}
122
141
@@ -145,6 +164,11 @@ struct qaEventTrackLite {
145
164
void processDataLite (o2::soa::Filtered<aod::DPGTracks> const & tracks, aod::DPGCollisions const &)
146
165
{
147
166
for (const auto & track : tracks) {
167
+ // temporary additional selections
168
+ if (!applyTrackSelectionsNotFiltered (track))
169
+ continue ;
170
+ Bool_t sel1 = applyTrackSelectionsNotFilteredSel1 (track);
171
+
148
172
histos.fill (HIST (" Tracks/VertexPositionZ" ), track.dpgCollision ().posZ ());
149
173
histos.fill (HIST (" Tracks/Kine/pt" ), track.pt ());
150
174
histos.fill (HIST (" Tracks/Kine/eta" ), track.eta ());
@@ -180,6 +204,13 @@ struct qaEventTrackLite {
180
204
}
181
205
histos.fill (HIST (" Tracks/relativeResoPt" ), track.pt (), track.ptReso ());
182
206
histos.fill (HIST (" Tracks/relativeResoPtMean" ), track.pt (), track.ptReso ());
207
+
208
+ histos.fill (HIST (" TrackCuts/selPtEtaPhiNoSel" ), track.pt (), track.eta (), track.phi ());
209
+ if (sel1) {
210
+ histos.fill (HIST (" TrackCuts/selPtEtaPhiSel1" ), track.pt (), track.eta (), track.phi ());
211
+ }
212
+ histos.fill (HIST (" TrackCuts/selPtEtaPhiSel2" ), track.pt (), track.eta (), track.phi ());
213
+ histos.fill (HIST (" TrackCuts/selPtEtaPhiSel3" ), track.pt (), track.eta (), track.phi ());
183
214
}
184
215
}
185
216
PROCESS_SWITCH (qaEventTrackLite, processDataLite, " process data lite" , true );
@@ -188,8 +219,22 @@ struct qaEventTrackLite {
188
219
void processMCLite (o2::soa::Filtered<soa::Join<aod::DPGTracks, aod::DPGRecoParticles>> const & tracks, aod::DPGCollisions const &, aod::DPGNonRecoParticles const & particles)
189
220
{
190
221
for (const auto & track : tracks) {
222
+
223
+ // temporary additional selections
224
+ if (!applyTrackSelectionsNotFiltered (track))
225
+ continue ;
226
+ Bool_t sel1 = applyTrackSelectionsNotFilteredSel1 (track);
227
+
191
228
if (track.productionMode () == 0 ) {
192
229
histos.get <TH1>(HIST (" Particles/PDGs" ))->Fill (Form (" %i" , track.pdgCode ()), 1 );
230
+ histos.fill (HIST (" Particle/selPtEtaPhiMCRecoNoSelPrimary" ), track.ptMC (), track.eta (), track.phi ());
231
+
232
+ if (sel1) {
233
+ histos.fill (HIST (" Particle/selPtEtaPhiMCRecoSel1Primary" ), track.ptMC (), track.eta (), track.phi ());
234
+ }
235
+
236
+ histos.fill (HIST (" Particle/selPtEtaPhiMCRecoSel2Primary" ), track.ptMC (), track.eta (), track.phi ());
237
+ histos.fill (HIST (" Particle/selPtEtaPhiMCRecoSel3Primary" ), track.ptMC (), track.eta (), track.phi ());
193
238
}
194
239
195
240
histos.fill (HIST (" Particles/Kine/pt" ), track.ptMC ());
@@ -226,15 +271,53 @@ struct qaEventTrackLite {
226
271
if (track.hasTOF ()) {
227
272
histos.fill (HIST (" Tracks/matchedDet" ), 4 );
228
273
}
274
+ histos.fill (HIST (" TrackCuts/selPtEtaPhiNoSel" ), track.ptMC (), track.eta (), track.phi ());
275
+ if (sel1) {
276
+ histos.fill (HIST (" TrackCuts/selPtEtaPhiSel1" ), track.ptMC (), track.eta (), track.phi ());
277
+ }
278
+ histos.fill (HIST (" TrackCuts/selPtEtaPhiSel2" ), track.ptMC (), track.eta (), track.phi ());
279
+ histos.fill (HIST (" TrackCuts/selPtEtaPhiSel3" ), track.ptMC (), track.eta (), track.phi ());
229
280
}
230
281
231
282
for (const auto & particle : particles) {
232
283
histos.fill (HIST (" Particles/Kine/pt" ), particle.ptMC ());
233
284
histos.fill (HIST (" Particles/Kine/eta" ), particle.etaMC ());
234
285
histos.fill (HIST (" Particles/Kine/phi" ), particle.phiMC ());
286
+
287
+ if (particle.productionMode () == 0 )
288
+ histos.fill (HIST (" Particle/selPtEtaPhiMCGenPrimary" ), particle.ptMC (), particle.etaMC (), particle.phiMC ());
235
289
}
236
290
}
237
291
PROCESS_SWITCH (qaEventTrackLite, processMCLite, " process MC lite" , false );
292
+
293
+ template <typename T>
294
+ bool applyTrackSelectionsNotFiltered (const T& track)
295
+ {
296
+ if (track.tpcNClsFound () < nClusterTpcMin)
297
+ return false ;
298
+ if (track.tpcNClsCrossedRows () < nCrossedRowsTpcMin)
299
+ return false ;
300
+ if (track.tpcCrossedRowsOverFindableCls () < nCrossedRowsTpcOverFindableClustersTpcMin)
301
+ return false ;
302
+ return true ;
303
+ }
304
+
305
+ template <typename T>
306
+ bool applyTrackSelectionsNotFilteredSel1 (const T& track)
307
+ {
308
+ if (track.tpcNClsFound () < nClusterTpcMinSel1)
309
+ return false ;
310
+ if (track.tpcNClsCrossedRows () < nCrossedRowsTpcMinSel1)
311
+ return false ;
312
+ if (track.tpcCrossedRowsOverFindableCls () < nCrossedRowsTpcOverFindableClustersTpcMinSel1)
313
+ return false ;
314
+ if (track.itsChi2NCl () > chi2ItsMaxSel1)
315
+ return false ;
316
+ if (track.tpcChi2NCl () > chi2TpcMaxSel1)
317
+ return false ;
318
+
319
+ return true ;
320
+ }
238
321
};
239
322
240
323
WorkflowSpec defineDataProcessing (ConfigContext const & cfgc)
0 commit comments