@@ -129,20 +129,17 @@ struct derivedlambdakzeroanalysis {
129129 ConfigurableAxis axisTPCrows{" axisTPCrows" , {160 , 0 .0f , 160 .0f }, " N TPC rows" };
130130 ConfigurableAxis axisITSclus{" axisITSclus" , {7 , 0 .0f , 7 .0f }, " N ITS Clusters" };
131131
132- enum species { spK0Short = 0 ,
133- spLambda,
134- spAntiLambda };
135-
136132 enum selection { selCosPA = 0 ,
137133 selRadius,
138134 selDCANegToPV,
139135 selDCAPosToPV,
140136 selDCAV0Dau,
141137 selK0ShortRapidity,
142138 selLambdaRapidity,
143- selK0ShortTPC,
144- selLambdaTPC,
145- selAntiLambdaTPC,
139+ selTPCPIDPositivePion,
140+ selTPCPIDNegativePion,
141+ selTPCPIDPositiveProton,
142+ selTPCPIDNegativeProton,
146143 selK0ShortCTau,
147144 selLambdaCTau,
148145 selK0ShortArmenteros,
@@ -164,7 +161,7 @@ struct derivedlambdakzeroanalysis {
164161 uint32_t maskTopoNoDCAPosToPV;
165162 uint32_t maskTopoNoCosPA;
166163 uint32_t maskTopoNoDCAV0Dau;
167- uint32_t maskTrackTypes ;
164+ uint32_t maskTrackProperties ;
168165
169166 uint32_t maskK0ShortSpecific;
170167 uint32_t maskLambdaSpecific;
@@ -187,30 +184,40 @@ struct derivedlambdakzeroanalysis {
187184 maskTopoNoCosPA = (1 << selRadius) | (1 << selDCANegToPV) | (1 << selDCAPosToPV) | (1 << selDCAV0Dau);
188185 maskTopoNoDCAV0Dau = (1 << selCosPA) | (1 << selRadius) | (1 << selDCANegToPV) | (1 << selDCAPosToPV);
189186
190- maskTrackTypes = 0 ;
187+ maskK0ShortSpecific = (1 << selK0ShortRapidity) | (1 << selK0ShortCTau) | (1 << selK0ShortArmenteros) | (1 << selConsiderK0Short);
188+ maskLambdaSpecific = (1 << selLambdaRapidity) | (1 << selLambdaCTau) | (1 << selConsiderLambda);
189+ maskAntiLambdaSpecific = (1 << selLambdaRapidity) | (1 << selLambdaCTau) | (1 << selConsiderAntiLambda);
190+
191+ // ask for specific TPC PID selections
192+
193+ maskTrackProperties = 0 ;
191194 if (requirePosITSonly) {
192- maskTrackTypes = (1 << selPosItsOnly);
195+ maskTrackProperties = (1 << selPosItsOnly);
193196 } else {
194- maskTrackTypes = (1 << selPosGoodTPCTrack);
197+ maskTrackProperties = (1 << selPosGoodTPCTrack);
198+ // TPC signal is available: ask for positive track PID
199+ maskK0ShortSpecific = maskK0ShortSpecific | (1 << selTPCPIDPositivePion);
200+ maskLambdaSpecific = maskLambdaSpecific | (1 << selTPCPIDPositiveProton);
201+ maskAntiLambdaSpecific = maskAntiLambdaSpecific | (1 << selTPCPIDPositivePion);
195202 }
196203 if (requireNegITSonly) {
197- maskTrackTypes = (1 << selNegItsOnly);
204+ maskTrackProperties = (1 << selNegItsOnly);
198205 } else {
199- maskTrackTypes = (1 << selNegGoodTPCTrack);
206+ maskTrackProperties = (1 << selNegGoodTPCTrack);
207+ // TPC signal is available: ask for negative track PID
208+ maskK0ShortSpecific = maskK0ShortSpecific | (1 << selTPCPIDNegativePion);
209+ maskLambdaSpecific = maskLambdaSpecific | (1 << selTPCPIDNegativeProton);
210+ maskAntiLambdaSpecific = maskAntiLambdaSpecific | (1 << selTPCPIDNegativePion);
200211 }
201212
202- maskK0ShortSpecific = (1 << selK0ShortRapidity) | (1 << selK0ShortTPC) | (1 << selK0ShortCTau) | (1 << selK0ShortArmenteros) | (1 << selConsiderK0Short);
203- maskLambdaSpecific = (1 << selLambdaRapidity) | (1 << selLambdaTPC) | (1 << selLambdaCTau) | (1 << selConsiderLambda);
204- maskAntiLambdaSpecific = (1 << selLambdaRapidity) | (1 << selAntiLambdaTPC) | (1 << selLambdaCTau) | (1 << selConsiderAntiLambda);
205-
206213 // Primary particle selection, central to analysis
207- maskSelectionK0Short = maskTopological | maskTrackTypes | maskK0ShortSpecific | (1 << selPhysPrimK0Short);
208- maskSelectionLambda = maskTopological | maskTrackTypes | maskLambdaSpecific | (1 << selPhysPrimLambda);
209- maskSelectionAntiLambda = maskTopological | maskTrackTypes | maskAntiLambdaSpecific | (1 << selPhysPrimAntiLambda);
214+ maskSelectionK0Short = maskTopological | maskTrackProperties | maskK0ShortSpecific | (1 << selPhysPrimK0Short);
215+ maskSelectionLambda = maskTopological | maskTrackProperties | maskLambdaSpecific | (1 << selPhysPrimLambda);
216+ maskSelectionAntiLambda = maskTopological | maskTrackProperties | maskAntiLambdaSpecific | (1 << selPhysPrimAntiLambda);
210217
211218 // No primary requirement for feeddown matrix
212- secondaryMaskSelectionLambda = maskTopological | maskTrackTypes | maskLambdaSpecific;
213- secondaryMaskSelectionAntiLambda = maskTopological | maskTrackTypes | maskAntiLambdaSpecific;
219+ secondaryMaskSelectionLambda = maskTopological | maskTrackProperties | maskLambdaSpecific;
220+ secondaryMaskSelectionAntiLambda = maskTopological | maskTrackProperties | maskAntiLambdaSpecific;
214221
215222 // Event Counters
216223 histos.add (" hEventSelection" , " hEventSelection" , kTH1F , {{3 , -0 .5f , +2 .5f }});
@@ -314,24 +321,6 @@ struct derivedlambdakzeroanalysis {
314321 histos.add (" GeneralQA/h2dArmenterosSelected" , " h2dArmenterosSelected" , kTH2F , {axisAPAlpha, axisAPQt});
315322 }
316323
317- template <typename TV0>
318- bool compatibleTPC (TV0 v0, int sp)
319- {
320- float pidPos = TMath::Abs (v0.template posTrackExtra_as <dauTracks>().tpcNSigmaPi ());
321- float pidNeg = TMath::Abs (v0.template negTrackExtra_as <dauTracks>().tpcNSigmaPi ());
322-
323- if (sp == spLambda)
324- pidPos = TMath::Abs (v0.template posTrackExtra_as <dauTracks>().tpcNSigmaPr ());
325- if (sp == spAntiLambda)
326- pidNeg = TMath::Abs (v0.template negTrackExtra_as <dauTracks>().tpcNSigmaPr ());
327-
328- if (pidPos < TpcPidNsigmaCut && pidNeg < TpcPidNsigmaCut)
329- return true ;
330-
331- // if not, then not
332- return false ;
333- }
334-
335324 template <typename TV0, typename TCollision>
336325 uint32_t computeReconstructionBitmap (TV0 v0, TCollision collision)
337326 // precalculate this information so that a check is one mask operation, not many
@@ -355,23 +344,25 @@ struct derivedlambdakzeroanalysis {
355344 if (TMath::Abs (v0.yK0Short ()) < rapidityCut)
356345 bitset (bitMap, selK0ShortRapidity);
357346
358- // TPC PID
359- if (compatibleTPC (v0, spK0Short))
360- bitset (bitMap, selK0ShortTPC);
361- if (compatibleTPC (v0, spLambda))
362- bitset (bitMap, selLambdaTPC);
363- if (compatibleTPC (v0, spAntiLambda))
364- bitset (bitMap, selAntiLambdaTPC);
365-
366347 auto posTrackExtra = v0.template posTrackExtra_as <dauTracks>();
367348 auto negTrackExtra = v0.template negTrackExtra_as <dauTracks>();
368349
369- // TPC quality
350+ // TPC quality flags
370351 if (posTrackExtra.tpcCrossedRows () >= minTPCrows)
371352 bitset (bitMap, selPosGoodTPCTrack);
372353 if (negTrackExtra.tpcCrossedRows () >= minTPCrows)
373354 bitset (bitMap, selNegGoodTPCTrack);
374355
356+ // TPC PID
357+ if (fabs (posTrackExtra.tpcNSigmaPi ()) < TpcPidNsigmaCut)
358+ bitset (bitMap, selTPCPIDPositivePion);
359+ if (fabs (posTrackExtra.tpcNSigmaPr ()) < TpcPidNsigmaCut)
360+ bitset (bitMap, selTPCPIDPositiveProton);
361+ if (fabs (negTrackExtra.tpcNSigmaPi ()) < TpcPidNsigmaCut)
362+ bitset (bitMap, selTPCPIDNegativePion);
363+ if (fabs (negTrackExtra.tpcNSigmaPr ()) < TpcPidNsigmaCut)
364+ bitset (bitMap, selTPCPIDNegativeProton);
365+
375366 // ITS only tag
376367 if (posTrackExtra.tpcCrossedRows () < 1 )
377368 bitset (bitMap, selPosItsOnly);
0 commit comments