@@ -89,12 +89,11 @@ using std::array;
8989using CollBracket = o2::math_utils::Bracket<int >;
9090using HyperCandidates = aod::DataHypCandsWColl;
9191using HyperCandidatesMC = aod::MCHypCandsWColl;
92- using CollisionsFull = soa::Join<aod::Collisions, aod::EvSels, aod::CentFT0Cs, aod::FT0Mults>;
93- // The standard Femto producer stores multNTracksPV as its collision
94- // multiplicity. Subscribe to PVMults only in the mixed-event process so the
95- // same vertex--multiplicity pool definition can optionally be reproduced.
96- using CollisionsFullWithPVMult = soa::Join<aod::Collisions, aod::EvSels, aod::CentFT0Cs, aod::FT0Mults, aod::PVMults>;
97- using CollisionsFullMC = soa::Join<aod::Collisions, aod::McCollisionLabels, aod::EvSels, aod::CentFT0Cs, aod::FT0Mults>;
92+ // Save the PV-track multiplicity alongside numContrib in the event-info output
93+ // for both same-event and mixed-event pairs.
94+ using CollisionsFull = soa::Join<aod::Collisions, aod::EvSels, aod::CentFT0Cs, aod::FT0Mults, aod::PVMults>;
95+ using CollisionsFullWithPVMult = CollisionsFull;
96+ using CollisionsFullMC = soa::Join<aod::Collisions, aod::McCollisionLabels, aod::EvSels, aod::CentFT0Cs, aod::FT0Mults, aod::PVMults>;
9897using HadHyperCollisionsFull = soa::Join<aod::Collisions, aod::EvSels, aod::CentFT0As, aod::CentFT0Cs, aod::CentFT0Ms, aod::FT0Mults>;
9998using HadHyperCollisionsFullMC = soa::Join<aod::Collisions, aod::McCollisionLabels, aod::EvSels, aod::CentFT0As, aod::CentFT0Cs, aod::CentFT0Ms, aod::FT0Mults>;
10099using TrackCandidates = soa::Join<aod::TracksIU, aod::TracksExtra, aod::TracksCovIU, aod::TracksDCA, aod::TrackSelection, aod::pidTPCFullDe, aod::pidTPCFullTr, aod::pidTOFFullDe, aod::pidTOFFullTr, aod::pidTOFFullHe, aod::pidTPCFullPr, aod::pidTOFFullPr, aod::pidTPCFullPi, aod::pidTOFFullPi, aod::pidTPCFullKa, aod::pidTOFFullKa, aod::TOFSignal, aod::TOFEvTime>;
@@ -317,6 +316,7 @@ struct BufferedCollision {
317316 uint16_t numContrib{0u };
318317 float centFT0C{0 .f };
319318 float multFT0C{0 .f };
319+ int32_t multNTracksPV{0 };
320320 std::vector<BufferedTrack> nuclei;
321321 std::vector<BufferedTrack> hadrons;
322322};
@@ -403,6 +403,12 @@ struct HadNucleiFemto {
403403 // cppcheck-suppress unusedStructMember
404404 std::string prefix{" deuteronPid" };
405405 // Deuteron purity and PID cuts
406+ Configurable<int > settingTPCNClsFoundMinDe{" settingTPCNClsFoundMinDe" , 110 , " Minimum found TPC clusters for deuterons" };
407+ Configurable<int > settingTPCCrossedRowsMinDe{" settingTPCCrossedRowsMinDe" , 100 , " Minimum crossed TPC rows for deuterons" };
408+ Configurable<float > settingDeDCAxyOffset{" settingDeDCAxyOffset" , 0 .004f , " Deuteron DCAxy cut offset in cm" };
409+ Configurable<float > settingDeDCAxyPtCoeff{" settingDeDCAxyPtCoeff" , 0 .013f , " Deuteron DCAxy inverse-pT cut coefficient" };
410+ Configurable<float > settingDeDCAzOffset{" settingDeDCAzOffset" , 0 .004f , " Deuteron DCAz cut offset in cm" };
411+ Configurable<float > settingDeDCAzPtCoeff{" settingDeDCAzPtCoeff" , 0 .013f , " Deuteron DCAz inverse-pT cut coefficient" };
406412 Configurable<float > settingCutPinMinDe{" settingCutPinMinDe" , 0 .0f , " Minimum Pin for De" };
407413 Configurable<float > settingCutDeptMin{" settingCutDeptMin" , 0 .6f , " Minimum PT cut on De" };
408414 Configurable<float > settingCutDeptMax{" settingCutDeptMax" , 1 .6f , " Maximum PT cut on De" };
@@ -1230,16 +1236,14 @@ struct HadNucleiFemto {
12301236 return false ;
12311237 }
12321238
1233- constexpr int minTPCNClsFound = 110 ;
1234- constexpr int minTPCNClsCrossedRows = 100 ;
12351239 constexpr float minTPCCrossedRowsOverFound = 0 .f ;
12361240 constexpr int maxTPCNClsShared = 160 ;
12371241 constexpr float maxSharedTPCFraction = 1 .f ;
12381242 constexpr int minITSNClsInnerBarrel = 1 ;
12391243 const float tpcCrossedRowsOverFound = candidate.tpcNClsFound () > 0 ? static_cast <float >(candidate.tpcNClsCrossedRows ()) / candidate.tpcNClsFound () : 0 .f ;
12401244
1241- return !(candidate.tpcNClsFound () < minTPCNClsFound ||
1242- candidate.tpcNClsCrossedRows () < minTPCNClsCrossedRows ||
1245+ return !(candidate.tpcNClsFound () < deuteronPid. settingTPCNClsFoundMinDe ||
1246+ candidate.tpcNClsCrossedRows () < deuteronPid. settingTPCCrossedRowsMinDe ||
12431247 tpcCrossedRowsOverFound < minTPCCrossedRowsOverFound ||
12441248 candidate.tpcNClsShared () > maxTPCNClsShared ||
12451249 candidate.tpcFractionSharedCls () > maxSharedTPCFraction ||
@@ -1840,8 +1844,8 @@ struct HadNucleiFemto {
18401844 if (absPt <= 0 .f ) {
18411845 return false ;
18421846 }
1843- const float deDCAxyMax = 0 . 004f + 0 . 013f / absPt;
1844- const float deDCAzMax = 0 . 004f + 0 . 013f / absPt;
1847+ const float deDCAxyMax = deuteronPid. settingDeDCAxyOffset + deuteronPid. settingDeDCAxyPtCoeff / absPt;
1848+ const float deDCAzMax = deuteronPid. settingDeDCAzOffset + deuteronPid. settingDeDCAzPtCoeff / absPt;
18451849 if (std::abs (candidate.dcaXY ()) > deDCAxyMax || std::abs (candidate.dcaZ ()) > deDCAzMax) {
18461850 return false ;
18471851 }
@@ -2645,7 +2649,8 @@ struct HadNucleiFemto {
26452649 collision.posZ (),
26462650 collision.numContrib (),
26472651 collision.centFT0C (),
2648- collision.multFT0C ());
2652+ collision.multFT0C (),
2653+ collision.multNTracksPV ());
26492654 }
26502655 }
26512656
@@ -2658,7 +2663,8 @@ struct HadNucleiFemto {
26582663 collision.posZ ,
26592664 collision.numContrib ,
26602665 collision.centFT0C ,
2661- collision.multFT0C );
2666+ collision.multFT0C ,
2667+ collision.multNTracksPV );
26622668 }
26632669 }
26642670
@@ -3371,6 +3377,7 @@ struct HadNucleiFemto {
33713377 currentCollision.numContrib = collision.numContrib ();
33723378 currentCollision.centFT0C = collision.centFT0C ();
33733379 currentCollision.multFT0C = collision.multFT0C ();
3380+ currentCollision.multNTracksPV = collision.multNTracksPV ();
33743381
33753382 const uint64_t collIdx = collision.globalIndex ();
33763383 auto tracksThisCollision = tracks.sliceBy (mPerCol , collIdx);
@@ -3548,6 +3555,7 @@ struct HadNucleiFemto {
35483555 current.numContrib = collision.numContrib ();
35493556 current.centFT0C = collision.centFT0C ();
35503557 current.multFT0C = collision.multFT0C ();
3558+ current.multNTracksPV = collision.multNTracksPV ();
35513559 row.eventId = current.eventId ;
35523560 auto tracksThisCollision = tracks.sliceBy (mPerCol , collision.globalIndex ());
35533561 tracksThisCollision.bindExternalIndices (&tracks);
0 commit comments