diff --git a/PWGLF/DataModel/Vtx3BodyTables.h b/PWGLF/DataModel/Vtx3BodyTables.h index 701f6a982cf..bb0dcc89fe1 100644 --- a/PWGLF/DataModel/Vtx3BodyTables.h +++ b/PWGLF/DataModel/Vtx3BodyTables.h @@ -97,6 +97,9 @@ DECLARE_SOA_COLUMN(TPCNSigmaPr, tpcNSigmaPr, float); //! nsigma proton o DECLARE_SOA_COLUMN(TPCNSigmaPi, tpcNSigmaPi, float); //! nsigma pion of TPC PID of the pion daughter DECLARE_SOA_COLUMN(TPCNSigmaDe, tpcNSigmaDe, float); //! nsigma deuteron of TPC PID of the bachelor daughter DECLARE_SOA_COLUMN(TPCNSigmaPiBach, tpcNSigmaPiBach, float); //! nsigma pion of TPC PID of the bachelor daughter +DECLARE_SOA_COLUMN(TPCSignalPr, tpcSignalPr, float); //! TPC signal of proton daughter +DECLARE_SOA_COLUMN(TPCSignalPi, tpcSignalPi, float); //! TPC signal of pion daughter +DECLARE_SOA_COLUMN(TPCSignalDe, tpcSignalDe, float); //! TPC signal of deuteron daughter DECLARE_SOA_COLUMN(TOFNSigmaDe, tofNSigmaDe, float); //! nsigma deuteron of TOF PID of the bachelor daughter DECLARE_SOA_COLUMN(PIDTrackingDe, pidTrackingDe, uint32_t); //! PID during tracking of bachelor daughter @@ -231,6 +234,7 @@ DECLARE_SOA_TABLE(Vtx3BodyDatas, "AOD", "VTX3BODYDATA", //! vtx3body::DCAVtxToDaughtersAv, vtx3body::CosPA, vtx3body::Ct, vtx3body::TPCNSigmaPr, vtx3body::TPCNSigmaPi, vtx3body::TPCNSigmaDe, vtx3body::TPCNSigmaPiBach, + vtx3body::TPCSignalPr, vtx3body::TPCSignalPi, vtx3body::TPCSignalDe, vtx3body::TOFNSigmaDe, vtx3body::ITSClSizePr, vtx3body::ITSClSizePi, vtx3body::ITSClSizeDe, vtx3body::TPCNClTrackPr, vtx3body::TPCNClTrackPi, vtx3body::TPCNClTrackDe, @@ -288,6 +292,7 @@ DECLARE_SOA_TABLE(McVtx3BodyDatas, "AOD", "MC3BODYDATA", //! vtx3body::DCAVtxToDaughtersAv, vtx3body::CosPA, vtx3body::Ct, vtx3body::TPCNSigmaPr, vtx3body::TPCNSigmaPi, vtx3body::TPCNSigmaDe, vtx3body::TPCNSigmaPiBach, + vtx3body::TPCSignalPr, vtx3body::TPCSignalPi, vtx3body::TPCSignalDe, vtx3body::TOFNSigmaDe, vtx3body::ITSClSizePr, vtx3body::ITSClSizePi, vtx3body::ITSClSizeDe, vtx3body::TPCNClTrackPr, vtx3body::TPCNClTrackPi, vtx3body::TPCNClTrackDe, diff --git a/PWGLF/TableProducer/Nuspex/decay3bodybuilder.cxx b/PWGLF/TableProducer/Nuspex/decay3bodybuilder.cxx index dc6995d51f1..b71c38eb678 100644 --- a/PWGLF/TableProducer/Nuspex/decay3bodybuilder.cxx +++ b/PWGLF/TableProducer/Nuspex/decay3bodybuilder.cxx @@ -947,6 +947,7 @@ struct decay3bodyBuilder { -1., // daughterDCAtoSVaverage -1., -1., // cosPA, ctau -1., -1., -1., -1., // tpcNsigma: 0 - proton, 1 - pion, 2 - deuteron, 3 - bach with pion hyp + -1., -1., -1., // tpcSignal: 0 - proton, 1 - pion, 2 - deuteron -1., // tofNsigmaDeuteron -1., -1., -1., // average ITS cluster sizes: proton, pion, deuteron -1., -1., -1., // TPCNCl: proton, pion, deuteron @@ -1109,6 +1110,7 @@ struct decay3bodyBuilder { helper.decay3body.daughterDCAtoSVaverage, helper.decay3body.cosPA, helper.decay3body.ctau, helper.decay3body.tpcNsigma[0], helper.decay3body.tpcNsigma[1], helper.decay3body.tpcNsigma[2], helper.decay3body.tpcNsigma[3], // 0 - proton, 1 - pion, 2 - deuteron, 3 - bach with pion hyp + helper.decay3body.tpcSignal[0], helper.decay3body.tpcSignal[1], helper.decay3body.tpcSignal[2], helper.decay3body.tofNsigmaDeuteron, helper.decay3body.averageITSClSize[0], helper.decay3body.averageITSClSize[1], helper.decay3body.averageITSClSize[2], // 0 - proton, 1 - pion, 2 - deuteron helper.decay3body.tpcNCl[0], helper.decay3body.tpcNCl[1], helper.decay3body.tpcNCl[2], // 0 - proton, 1 - pion, 2 - deuteron @@ -1141,6 +1143,7 @@ struct decay3bodyBuilder { helper.decay3body.daughterDCAtoSVaverage, helper.decay3body.cosPA, helper.decay3body.ctau, helper.decay3body.tpcNsigma[0], helper.decay3body.tpcNsigma[1], helper.decay3body.tpcNsigma[2], helper.decay3body.tpcNsigma[3], // 0 - proton, 1 - pion, 2 - deuteron, 3 - bach with pion hyp + helper.decay3body.tpcSignal[0], helper.decay3body.tpcSignal[1], helper.decay3body.tpcSignal[2], helper.decay3body.tofNsigmaDeuteron, helper.decay3body.averageITSClSize[0], helper.decay3body.averageITSClSize[1], helper.decay3body.averageITSClSize[2], // 0 - proton, 1 - pion, 2 - deuteron helper.decay3body.tpcNCl[0], helper.decay3body.tpcNCl[1], helper.decay3body.tpcNCl[2], // 0 - proton, 1 - pion, 2 - deuteron diff --git a/PWGLF/TableProducer/Nuspex/trackedHypertritonRecoTask.cxx b/PWGLF/TableProducer/Nuspex/trackedHypertritonRecoTask.cxx index a72d06e219e..1fddbb346fa 100644 --- a/PWGLF/TableProducer/Nuspex/trackedHypertritonRecoTask.cxx +++ b/PWGLF/TableProducer/Nuspex/trackedHypertritonRecoTask.cxx @@ -322,6 +322,13 @@ struct TrackedHypertritonRecoTask { zorroEvents->GetXaxis()->SetBinLabel(2, "fTracked3Body"); zorroEvents->GetYaxis()->SetBinLabel(1, "before sel8"); zorroEvents->GetYaxis()->SetBinLabel(2, "after sel8"); + + registry.add("hTrackProtonTPCSignal", "hTrackProtonTPCSignal", HistType::kTH2F, {{100, -10.0f, 10.0f, "p/z (GeV/c)"}, {2000, 0.0f, 2000.0f, "d#it{E}/d#it{x}"}}); + registry.add("hTrackPionTPCSignal", "hTrackPionTPCSignal", HistType::kTH2F, {{100, -10.0f, 10.0f, "p/z (GeV/c)"}, {2000, 0.0f, 2000.0f, "d#it{E}/d#it{x}"}}); + registry.add("hTrackDeuteronTPCSignal", "hTrackDeuteronTPCSignal", HistType::kTH2F, {{100, -10.0f, 10.0f, "p/z (GeV/c)"}, {2000, 0.0f, 2000.0f, "d#it{E}/d#it{x}"}}); + registry.add("hTrackProtonTPCSignalSelected", "hTrackProtonTPCSignalSelected", HistType::kTH2F, {{100, -10.0f, 10.0f, "p/z (GeV/c)"}, {2000, 0.0f, 2000.0f, "d#it{E}/d#it{x}"}}); + registry.add("hTrackPionTPCSignalSelected", "hTrackPionTPCSignalSelected", HistType::kTH2F, {{100, -10.0f, 10.0f, "p/z (GeV/c)"}, {2000, 0.0f, 2000.0f, "d#it{E}/d#it{x}"}}); + registry.add("hTrackDeuteronTPCSignalSelected", "hTrackDeuteronTPCSignalSelected", HistType::kTH2F, {{100, -10.0f, 10.0f, "p/z (GeV/c)"}, {2000, 0.0f, 2000.0f, "d#it{E}/d#it{x}"}}); } void initCCDB(aod::BCsWithTimestamps::iterator const& bc) @@ -801,6 +808,7 @@ struct TrackedHypertritonRecoTask { candidate.daughterDCAtoSV[0], candidate.daughterDCAtoSV[1], candidate.daughterDCAtoSV[2], candidate.daughterDCAtoSVaverage, candidate.cosPA, candidate.ctau, candidate.tpcNsigma[0], candidate.tpcNsigma[1], candidate.tpcNsigma[2], candidate.tpcNsigma[3], + candidate.tpcSignal[0], candidate.tpcSignal[1], candidate.tpcSignal[2], static_cast(candidate.tofNsigmaDeuteron), candidate.averageITSClSize[0], candidate.averageITSClSize[1], candidate.averageITSClSize[2], static_cast(candidate.tpcNCl[0]), static_cast(candidate.tpcNCl[1]), static_cast(candidate.tpcNCl[2]), @@ -828,6 +836,7 @@ struct TrackedHypertritonRecoTask { candidate.daughterDCAtoSV[0], candidate.daughterDCAtoSV[1], candidate.daughterDCAtoSV[2], candidate.daughterDCAtoSVaverage, candidate.cosPA, candidate.ctau, candidate.tpcNsigma[0], candidate.tpcNsigma[1], candidate.tpcNsigma[2], candidate.tpcNsigma[3], + candidate.tpcSignal[0], candidate.tpcSignal[1], candidate.tpcSignal[2], static_cast(candidate.tofNsigmaDeuteron), candidate.averageITSClSize[0], candidate.averageITSClSize[1], candidate.averageITSClSize[2], static_cast(candidate.tpcNCl[0]), static_cast(candidate.tpcNCl[1]), static_cast(candidate.tpcNCl[2]), @@ -846,24 +855,25 @@ struct TrackedHypertritonRecoTask { void fillGeneratedThreeBodyMCTable(ThreeBodyMCInfo const& info) { - mcVtx3BodyDatas(-1.f, - -1.f, -1.f, // mass, massV0 - -1.f, -1.f, -1.f, // position - -1.f, -1.f, -1.f, // momentum - -1.f, -1.f, // chi2, trackedClSize - -1.f, -1.f, -1.f, // proton momentum - -1.f, -1.f, -1.f, // pion momentum - -1.f, -1.f, -1.f, // deuteron momentum - -1.f, -1.f, -1.f, // daughter x at inner update - -1.f, -1.f, -1.f, // track DCAxy to PV - -1.f, -1.f, -1.f, // track DCA to PV - -1.f, -1.f, -1.f, // propagated track DCAxy to PV - -1.f, -1.f, -1.f, // propagated track DCA to PV - -1.f, -1.f, -1.f, // daughter DCA to SV - -1.f, -1.f, -1.f, // average daughter DCA, cosPA, ctau - -1.f, -1.f, -1.f, -1.f, - -1.f, - -1.f, -1.f, -1.f, + mcVtx3BodyDatas(-1.f, // sign + -1.f, -1.f, // mass, massV0 + -1.f, -1.f, -1.f, // position + -1.f, -1.f, -1.f, // momentum + -1.f, -1.f, // chi2, trackedClSize + -1.f, -1.f, -1.f, // proton momentum + -1.f, -1.f, -1.f, // pion momentum + -1.f, -1.f, -1.f, // deuteron momentum + -1.f, -1.f, -1.f, // daughter x at inner update + -1.f, -1.f, -1.f, // track DCAxy to PV + -1.f, -1.f, -1.f, // track DCA to PV + -1.f, -1.f, -1.f, // propagated track DCAxy to PV + -1.f, -1.f, -1.f, // propagated track DCA to PV + -1.f, -1.f, -1.f, // daughter DCA to SV + -1.f, -1.f, -1.f, // average daughter DCA, cosPA, ctau + -1.f, -1.f, -1.f, -1.f, // TPC nSigmas + -1.f, 1.f, -1.f, // TPC signals + -1.f, // TOF nSigma deuteron + -1.f, -1.f, -1.f, // average cluster sizes -1, -1, -1, std::numeric_limits::max(), info.genMomentum[0], info.genMomentum[1], info.genMomentum[2], info.genDecayVertex[0], info.genDecayVertex[1], info.genDecayVertex[2], @@ -875,6 +885,20 @@ struct TrackedHypertritonRecoTask { info.isDeuteronPrimary, static_cast(info.survivedEventSelection)); } + template + void fillQAHistograms(TTrack const& trackProton, TTrack const& trackPion, TTrack const& trackDeuteron, bool isSelected) + { + if (!isSelected) { + registry.fill(HIST("hTrackProtonTPCSignal"), trackProton.sign() * trackProton.tpcInnerParam(), trackProton.tpcSignal()); + registry.fill(HIST("hTrackPionTPCSignal"), trackPion.sign() * trackPion.tpcInnerParam(), trackPion.tpcSignal()); + registry.fill(HIST("hTrackDeuteronTPCSignal"), trackDeuteron.sign() * trackDeuteron.tpcInnerParam(), trackDeuteron.tpcSignal()); + } else { + registry.fill(HIST("hTrackProtonTPCSignalSelected"), trackProton.sign() * trackProton.tpcInnerParam(), trackProton.tpcSignal()); + registry.fill(HIST("hTrackPionTPCSignalSelected"), trackPion.sign() * trackPion.tpcInnerParam(), trackPion.tpcSignal()); + registry.fill(HIST("hTrackDeuteronTPCSignalSelected"), trackDeuteron.sign() * trackDeuteron.tpcInnerParam(), trackDeuteron.tpcSignal()); + } + } + void processData(Collisions const& collisions, aod::V0s const& /*v0s*/, aod::Decay3Bodys const& /*decay3Bodys*/, @@ -931,6 +955,8 @@ struct TrackedHypertritonRecoTask { const auto trackProton = trackDeuteron.sign() > 0 ? trackPositive : trackNegative; const auto trackPion = trackDeuteron.sign() > 0 ? trackNegative : trackPositive; + fillQAHistograms(trackProton, trackPion, trackDeuteron, false); + if (builder3Body.buildDecay3BodyCandidate(collision, trackProton, trackPion, trackDeuteron, decay3Body.globalIndex(), deuteronTOFNSigma(collision, trackDeuteron), tracked3Body.itsClsSize(), threeBody.useKFParticle, threeBody.setTopologicalConstraint, @@ -944,6 +970,7 @@ struct TrackedHypertritonRecoTask { continue; } + fillQAHistograms(trackProton, trackPion, trackDeuteron, true); fillThreeBodyTables(); } } @@ -1022,13 +1049,19 @@ struct TrackedHypertritonRecoTask { const auto trackDeuteron = decay3Body.track2_as(); const auto trackProton = trackDeuteron.sign() > 0 ? trackPositive : trackNegative; const auto trackPion = trackDeuteron.sign() > 0 ? trackNegative : trackPositive; + + fillQAHistograms(trackProton, trackPion, trackDeuteron, false); + if (!builder3Body.buildDecay3BodyCandidate(collision, trackProton, trackPion, trackDeuteron, decay3Body.globalIndex(), deuteronTOFNSigmaMC(collision, trackDeuteron), tracked3Body.itsClsSize(), threeBody.useKFParticle, threeBody.setTopologicalConstraint, threeBody.useSelections, threeBody.useChi2Selection, threeBody.useTPCforPion, threeBody.acceptTPCOnly, threeBody.askOnlyITSMatch, threeBody.calculateCovariance)) { + continue; } + + fillQAHistograms(trackProton, trackPion, trackDeuteron, true); const auto mcInfo = getThreeBodyMCInfo(trackProton, trackPion, trackDeuteron, collision, mcParticles); if (mcInfo.motherLabel < 0 && !mc.storeBackground) { continue; diff --git a/PWGLF/Utils/decay3bodyBuilderHelper.h b/PWGLF/Utils/decay3bodyBuilderHelper.h index 7888def137a..0eada168320 100644 --- a/PWGLF/Utils/decay3bodyBuilderHelper.h +++ b/PWGLF/Utils/decay3bodyBuilderHelper.h @@ -54,6 +54,9 @@ struct decay3bodyCandidate { std::array momProton{}; std::array momPion{}; std::array momDeuteron{}; + std::array tpcInnerMomProton{}; + std::array tpcInnerMomPion{}; + std::array tpcInnerMomDeuteron{}; std::array posProton{}; std::array posPion{}; std::array posDeuteron{}; @@ -65,6 +68,7 @@ struct decay3bodyCandidate { std::array trackDCAxyToPVprop{}; // 0 - proton, 1 - pion, 2 - deuteron std::array trackDCAToPVprop{}; // 0 - proton, 1 - pion, 2 - deuteron std::array tpcNsigma{}; // 0 - proton, 1 - pion, 2 - deuteron, 3 - bach with pion hyp + std::array tpcSignal{}; // 0 - proton, 1 - pion, 2 - deuteron double tofNsigmaDeuteron{}; std::array averageITSClSize{}; // 0 - proton, 1 - pion, 2 - deuteron std::array tpcNCl{}; // 0 - proton, 1 - pion, 2 - deuteron @@ -498,6 +502,9 @@ class decay3bodyBuilderHelper decay3body.tpcNsigma[1] = trackPion.tpcNSigmaPi(); decay3body.tpcNsigma[2] = trackDeuteron.tpcNSigmaDe(); decay3body.tpcNsigma[3] = trackDeuteron.tpcNSigmaPi(); + decay3body.tpcSignal[0] = trackProton.tpcSignal(); + decay3body.tpcSignal[1] = trackPion.tpcSignal(); + decay3body.tpcSignal[2] = trackDeuteron.tpcSignal(); // recalculated bachelor TOF PID decay3body.tofNsigmaDeuteron = tofNsigmaDeuteron;