@@ -60,7 +60,7 @@ struct femtoUniversePairTaskTrackCascadeExtended {
6060 Configurable<int > ConfTrackChoicePartOne{" ConfTrackChoicePartOne" , 0 , " 0:Proton, 1:Pion, 2:Kaon" };
6161 Configurable<int > ConfTrkPDGCodePartOne{" ConfTrkPDGCodePartOne" , 2212 , " Particle 1 (Track) - PDG code" };
6262 Configurable<int > ConfCascType1{" ConfCascType1" , 0 , " select one of the V0s (Omega = 0, Xi = 1, anti-Omega = 2, anti-Xi = 3) for track-cascade combination" };
63- Configurable<int > ConfChargePart1{" ConfChargePart1" , 0 , " sign of particle 1" };
63+ Configurable<int > ConfChargePart1{" ConfChargePart1" , 1 , " sign of particle 1" };
6464 Configurable<float > ConfHPtPart1{" ConfHPtPart1" , 4 .0f , " higher limit for pt of particle 1" };
6565 Configurable<float > ConfLPtPart1{" ConfLPtPart1" , 0 .5f , " lower limit for pt of particle 1" };
6666 Configurable<float > ConfHPtPart2{" ConfHPtPart2" , 4 .0f , " higher limit for pt of particle 2" };
@@ -103,6 +103,7 @@ struct femtoUniversePairTaskTrackCascadeExtended {
103103
104104 FemtoUniverseContainer<femtoUniverseContainer::EventType::same, femtoUniverseContainer::Observable::kstar> sameEventCont;
105105 FemtoUniverseContainer<femtoUniverseContainer::EventType::mixed, femtoUniverseContainer::Observable::kstar> mixedEventCont;
106+ FemtoUniversePairCleaner<aod::femtouniverseparticle::ParticleType::kTrack , aod::femtouniverseparticle::ParticleType::kCascade > pairCleaner;
106107
107108 HistogramRegistry rXiQA{" xi" , {}, OutputObjHandlingPolicy::AnalysisObject, true , true };
108109 HistogramRegistry qaRegistry{" TrackQA" , {}, OutputObjHandlingPolicy::AnalysisObject};
@@ -197,6 +198,7 @@ struct femtoUniversePairTaskTrackCascadeExtended {
197198
198199 sameEventCont.init (&resultRegistry, ConfkstarBins, ConfMultBins, ConfkTBins, ConfmTBins, ConfmultBins3D, ConfmTBins3D, ConfEtaBins, ConfPhiBins, ConfIsMC, ConfUse3D);
199200 mixedEventCont.init (&resultRegistry, ConfkstarBins, ConfMultBins, ConfkTBins, ConfmTBins, ConfmultBins3D, ConfmTBins3D, ConfEtaBins, ConfPhiBins, ConfIsMC, ConfUse3D);
201+ pairCleaner.init (&qaRegistry);
200202 }
201203
202204 void processCascades (FilteredFDCollision& col, FemtoFullParticles& parts)
@@ -263,8 +265,6 @@ struct femtoUniversePairTaskTrackCascadeExtended {
263265
264266 void processSameEvent (FilteredFDCollision& col, FemtoFullParticles& parts)
265267 {
266- // const auto& magFieldTesla = col.magField();
267-
268268 auto groupPartsOne = partsOne->sliceByCached (aod::femtouniverseparticle::fdCollisionId, col.globalIndex (), cache);
269269 auto groupPartsTwo = partsTwo->sliceByCached (aod::femtouniverseparticle::fdCollisionId, col.globalIndex (), cache);
270270
@@ -275,8 +275,8 @@ struct femtoUniversePairTaskTrackCascadeExtended {
275275 const auto & negChild = parts.iteratorAt (part.index () - 2 );
276276 const auto & bachelor = parts.iteratorAt (part.index () - 1 );
277277 // / Child particles must pass this condition to be selected
278- /* if (!IsParticleTPC(posChild, CascChildTable[ConfCascType1][0]) || !IsParticleTPC(negChild, CascChildTable[ConfCascType1][1]) || !IsParticleTPC(bachelor, CascChildTable[ConfCascType1][2]))
279- continue;*/
278+ if (!IsParticleTPC (posChild, CascChildTable[ConfCascType1][0 ]) || !IsParticleTPC (negChild, CascChildTable[ConfCascType1][1 ]) || !IsParticleTPC (bachelor, CascChildTable[ConfCascType1][2 ]))
279+ continue ;
280280
281281 posChildHistos.fillQA <false , true >(posChild);
282282 negChildHistos.fillQA <false , true >(negChild);
@@ -303,24 +303,29 @@ struct femtoUniversePairTaskTrackCascadeExtended {
303303 }
304304
305305 for (auto & [p1, p2] : combinations (CombinationsFullIndexPolicy (groupPartsOne, groupPartsTwo))) {
306+ // Cascade invariant mass cut
306307 if (!invMCascade (p2.mLambda (), p2.mAntiLambda ()))
307308 continue ;
309+ // PID
308310 if (!IsParticleCombined (p1, ConfTrackChoicePartOne))
309311 continue ;
310- // const auto& posChild = parts.iteratorAt(p2.index() - 3);
311- // const auto& negChild = parts.iteratorAt(p2.index() - 2);
312- // const auto& bachelor = parts.iteratorAt(p2.index() - 1);
313-
312+ // track cleaning
313+ if (!pairCleaner.isCleanPair (p1, p2, parts)) {
314+ continue ;
315+ }
316+ const auto & posChild = parts.iteratorAt (p2.index () - 3 );
317+ const auto & negChild = parts.iteratorAt (p2.index () - 2 );
318+ const auto & bachelor = parts.iteratorAt (p2.index () - 1 );
314319 // / Child particles must pass this condition to be selected
315- /* if (!IsParticleTPC(posChild, CascChildTable[ConfCascType1][0]) || !IsParticleTPC(negChild, CascChildTable[ConfCascType1][1]) || !IsParticleTPC(bachelor, CascChildTable[ConfCascType1][2]))
316- continue;*/
320+ if (!IsParticleTPC (posChild, CascChildTable[ConfCascType1][0 ]) || !IsParticleTPC (negChild, CascChildTable[ConfCascType1][1 ]) || !IsParticleTPC (bachelor, CascChildTable[ConfCascType1][2 ]))
321+ continue ;
317322
318323 sameEventCont.setPair <false >(p1, p2, col.multNtr (), ConfUse3D, 1 .0f );
319324 }
320325 }
321326 PROCESS_SWITCH (femtoUniversePairTaskTrackCascadeExtended, processSameEvent, " Enable processing same event for track - cascade" , true );
322327
323- void processMixedEvent (FilteredFDCollisions& cols, FemtoFullParticles& /* parts*/ )
328+ void processMixedEvent (FilteredFDCollisions& cols, FemtoFullParticles& parts)
324329 {
325330 ColumnBinningPolicy<aod::collision::PosZ, aod::femtouniversecollision::MultNtr> colBinning{{ConfVtxBins, ConfMultBins}, true };
326331
@@ -336,18 +341,23 @@ struct femtoUniversePairTaskTrackCascadeExtended {
336341 continue ;
337342 }
338343 for (auto & [p1, p2] : combinations (CombinationsFullIndexPolicy (groupPartsOne, groupPartsTwo))) {
344+ // Cascade invariant mass cut
339345 if (!invMCascade (p2.mLambda (), p2.mAntiLambda ()))
340346 continue ;
347+ // PID
341348 if (!IsParticleCombined (p1, ConfTrackChoicePartOne))
342349 continue ;
343350
344- // const auto& posChild = parts.iteratorAt(p2.index() - 3);
345- // const auto& negChild = parts.iteratorAt(p2.index() - 2);
346- // const auto& bachelor = parts.iteratorAt(p2.index() - 1);
347-
351+ const auto & posChild = parts.iteratorAt (p2.index () - 3 );
352+ const auto & negChild = parts.iteratorAt (p2.index () - 2 );
353+ const auto & bachelor = parts.iteratorAt (p2.index () - 1 );
348354 // / Child particles must pass this condition to be selected
349- /* if (!IsParticleTPC(posChild, CascChildTable[ConfCascType1][0]) || !IsParticleTPC(negChild, CascChildTable[ConfCascType1][1]) || !IsParticleTPC(bachelor, CascChildTable[ConfCascType1][2]))
350- continue;*/
355+ if (!IsParticleTPC (posChild, CascChildTable[ConfCascType1][0 ]) || !IsParticleTPC (negChild, CascChildTable[ConfCascType1][1 ]) || !IsParticleTPC (bachelor, CascChildTable[ConfCascType1][2 ]))
356+ continue ;
357+ // track cleaning
358+ if (!pairCleaner.isCleanPair (p1, p2, parts)) {
359+ continue ;
360+ }
351361
352362 mixedEventCont.setPair <false >(p1, p2, collision1.multNtr (), ConfUse3D, 1 .0f );
353363 }
0 commit comments