@@ -96,13 +96,13 @@ using CollisionsFullWithPVMult = CollisionsFull;
9696using CollisionsFullMC = soa::Join<aod::Collisions, aod::McCollisionLabels, aod::EvSels, aod::CentFT0Cs, aod::FT0Mults, aod::PVMults>;
9797using HadHyperCollisionsFull = soa::Join<aod::Collisions, aod::EvSels, aod::CentFT0As, aod::CentFT0Cs, aod::CentFT0Ms, aod::FT0Mults>;
9898using HadHyperCollisionsFullMC = soa::Join<aod::Collisions, aod::McCollisionLabels, aod::EvSels, aod::CentFT0As, aod::CentFT0Cs, aod::CentFT0Ms, aod::FT0Mults>;
99- using 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>;
100- using TrackCandidatesMC = 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, aod::McTrackLabels>;
99+ using TrackCandidates = soa::Join<aod::pidTOFmass, 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>;
100+ using TrackCandidatesMC = soa::Join<aod::pidTOFmass, 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, aod::McTrackLabels>;
101101// The DCA-template process explicitly subscribes to the propagated covariance
102102// table. This makes the propagation service enter the branch where TrackTuner
103103// corrections can be applied when enabled, without adding that dependency to
104104// unrelated MC process switches.
105- using TrackCandidatesMCDca = soa::Join<aod::TracksIU, aod::TracksExtra, aod::TracksCov, 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, aod::McTrackLabels>;
105+ using TrackCandidatesMCDca = soa::Join<aod::pidTOFmass, aod:: TracksIU, aod::TracksExtra, aod::TracksCov, 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, aod::McTrackLabels>;
106106
107107namespace
108108{
@@ -435,13 +435,16 @@ struct HadNucleiFemto {
435435 std::string prefix{" tritonPid" };
436436 // Triton track-quality, purity and PID cuts
437437 Configurable<int > settingITSNClsMinTr{" settingITSNClsMinTr" , 5 , " Minimum number of ITS clusters for triton candidates" };
438+ Configurable<float > settingTPCChi2NClMaxTr{" settingTPCChi2NClMaxTr" , 4 .f , " Maximum TPC chi2 per cluster for triton candidates" };
439+ Configurable<float > settingITSChi2NClMaxTr{" settingITSChi2NClMaxTr" , 36 .f , " Maximum ITS chi2 per cluster for triton candidates" };
438440 Configurable<float > settingPIDMomentumSplitTr{" settingPIDMomentumSplitTr" , 2 .f , " Momentum separating low- and high-momentum triton TPC PID" };
439441 Configurable<float > settingCutTPCNsigmaLowPTr{" settingCutTPCNsigmaLowPTr" , 3 .f , " Maximum absolute TPC n-sigma for tritons below the momentum split" };
440442 Configurable<float > settingCutITSNsigmaLowPTr{" settingCutITSNsigmaLowPTr" , 3 .f , " Maximum absolute ITS n-sigma for tritons below the momentum split" };
441443 Configurable<float > settingCutTPCNsigmaHighPMinTr{" settingCutTPCNsigmaHighPMinTr" , -2 .f , " Minimum TPC n-sigma for tritons above the momentum split" };
442444 Configurable<float > settingCutTPCNsigmaHighPMaxTr{" settingCutTPCNsigmaHighPMaxTr" , 3 .f , " Maximum TPC n-sigma for tritons above the momentum split" };
443445 Configurable<float > settingTOFMassMomentumMinTr{" settingTOFMassMomentumMinTr" , 1 .2f , " Minimum momentum to apply the triton TOF mass cut" };
444446 Configurable<float > settingTOFMassMinTr{" settingTOFMassMinTr" , 2 .5f , " Minimum triton TOF mass" };
447+ Configurable<bool > settingUseTOFMassTableTr{" settingUseTOFMassTableTr" , false , " Use pidTOFmass mass for triton PID and purity instead of computeTOFMass" };
445448 Configurable<float > settingTOFMassMaxTr{" settingTOFMassMaxTr" , 3 .4f , " Maximum triton TOF mass" };
446449 Configurable<float > settingTPCRejectNsig{" settingTPCRejectNsig" , 3 .f , " Minimum absolute TPC n-sigma from deuteron, proton and pion hypotheses" };
447450 } tritonPid;
@@ -836,6 +839,8 @@ struct HadNucleiFemto {
836839 {" h2NsigmaHadKaTOF" , " NsigmaHad TOF distribution; #it{p}_{T}(GeV/#it{c}); n#sigma_{TPC}(K)" , {HistType::kTH1F , {{200 , -5 .0f , 5 .0f }}}},
837840
838841 // Purity
842+ {" h2MassTOFTrComputedVsTable" , " Triton TOF mass comparison before mass cut;computed mass (GeV/#it{c}^{2});table mass (GeV/#it{c}^{2})" , {HistType::kTH2F , {{280 , 0 .f , 7 .f }, {280 , 0 .f , 7 .f }}}},
843+ {" purity/h2MassTOFTrComputedVsTable" , " Triton TOF mass comparison before mass cut;computed mass (GeV/#it{c}^{2});table mass (GeV/#it{c}^{2})" , {HistType::kTH2F , {{280 , 0 .f , 7 .f }, {280 , 0 .f , 7 .f }}}},
839844 {" purity/h2MassTOFTr_preselection" , " Triton TOF mass before mass cut; signed #it{p}_{T} (GeV/#it{c}); m_{TOF} (GeV/#it{c}^{2})" , {HistType::kTH2F , {{280 , -7 .0f , 7 .0f }, {280 , 0 .0f , 7 .0f }}}},
840845 {" purity/h2NsigmaNuTPC_preselection" , " NsigmaNu TPC distribution; #it{p}_{T} (GeV/#it{c}); n#sigma_{TPC}(Nu)" , {HistType::kTH2F , {{280 , -7 .0f , 7 .0f }, {400 , -10 .0f , 10 .0f }}}},
841846 {" purity/h2NsigmaNuTPC_preselecComp" , " NsigmaNu TPC distribution; #it{p}_{T} (GeV/#it{c}); n#sigma_{TPC}(Nu)" , {HistType::kTH2F , {{280 , -7 .0f , 7 .0f }, {400 , -10 .0f , 10 .0f }}}},
@@ -1261,18 +1266,16 @@ struct HadNucleiFemto {
12611266 constexpr float maxAbsDcaXY = 0 .2f ;
12621267 constexpr float maxAbsDcaZ = 0 .2f ;
12631268 constexpr int minTPCCrossedRows = 70 ;
1264- constexpr float maxTPCChi2NCl = 5 .f ;
12651269 constexpr float maxTPCFractionSharedCls = 0 .3f ;
1266- constexpr float maxITSChi2NCl = 10 .f ;
12671270
12681271 return !(std::abs (candidate.eta ()) >= maxAbsEta ||
12691272 std::abs (candidate.dcaXY ()) >= maxAbsDcaXY ||
12701273 std::abs (candidate.dcaZ ()) >= maxAbsDcaZ ||
12711274 candidate.tpcNClsCrossedRows () < minTPCCrossedRows ||
1272- candidate.tpcChi2NCl () >= maxTPCChi2NCl ||
1275+ candidate.tpcChi2NCl () >= tritonPid. settingTPCChi2NClMaxTr ||
12731276 candidate.tpcFractionSharedCls () >= maxTPCFractionSharedCls ||
12741277 candidate.itsNCls () < tritonPid.settingITSNClsMinTr ||
1275- candidate.itsChi2NCl () >= maxITSChi2NCl );
1278+ candidate.itsChi2NCl () >= tritonPid. settingITSChi2NClMaxTr );
12761279 }
12771280
12781281 bool useDeuteronNucleus () const
@@ -1925,6 +1928,26 @@ struct HadNucleiFemto {
19251928 return std::abs (candidate.tpcInnerParam ()) * std::sqrt (1 .f / (beta * beta) - 1 .f );
19261929 }
19271930
1931+ template <typename Ttrack>
1932+ float tritonTOFMass (const Ttrack& candidate) const
1933+ {
1934+ return tritonPid.settingUseTOFMassTableTr .value ? candidate.mass () : computeTOFMass (candidate);
1935+ }
1936+
1937+ template <typename Ttrack>
1938+ void fillTritonTOFMassComparison (const Ttrack& candidate, bool isPurity)
1939+ {
1940+ const float computedMass = computeTOFMass (candidate);
1941+ const float tableMass = candidate.mass ();
1942+ if (std::isfinite (computedMass) && std::isfinite (tableMass)) {
1943+ if (isPurity) {
1944+ mQaRegistry .fill (HIST (" purity/h2MassTOFTrComputedVsTable" ), computedMass, tableMass);
1945+ } else {
1946+ mQaRegistry .fill (HIST (" h2MassTOFTrComputedVsTable" ), computedMass, tableMass);
1947+ }
1948+ }
1949+ }
1950+
19281951 template <typename Ttrack>
19291952 bool selectionPIDTr (const Ttrack& candidate)
19301953 {
@@ -1957,9 +1980,10 @@ struct HadNucleiFemto {
19571980 if (!candidate.hasTOF ()) {
19581981 return false ;
19591982 }
1960- const float massTOFTr = computeTOFMass (candidate);
1983+ fillTritonTOFMassComparison (candidate, false );
1984+ const float massTOFTr = tritonTOFMass (candidate);
19611985 mQaRegistry .fill (HIST (" h2MassTOFTr" ), candidate.sign () * absP, massTOFTr);
1962- if (massTOFTr <= tritonPid.settingTOFMassMinTr || massTOFTr >= tritonPid.settingTOFMassMaxTr ) {
1986+ if (! std::isfinite (massTOFTr) || massTOFTr <= tritonPid.settingTOFMassMinTr || massTOFTr >= tritonPid.settingTOFMassMaxTr ) {
19631987 return false ;
19641988 }
19651989 }
@@ -4109,7 +4133,8 @@ struct HadNucleiFemto {
41094133 mQaRegistry .fill (HIST (" purity/h2NsigmaNuTPC_preselection" ), signedPtTr, tpcNSigmaTr);
41104134 // Apply the triton TPC PID cut but keep TOF mass uncut to retain its sidebands.
41114135 if (passTPCTr && absPTr > tritonPid.settingTOFMassMomentumMinTr && track.hasTOF ()) {
4112- const float massTOFTr = computeTOFMass (track);
4136+ fillTritonTOFMassComparison (track, true );
4137+ const float massTOFTr = tritonTOFMass (track);
41134138 if (std::isfinite (massTOFTr)) {
41144139 mQaRegistry .fill (HIST (" purity/h2MassTOFTr_preselection" ), signedPtTr, massTOFTr);
41154140 }
0 commit comments