diff --git a/PWGLF/Tasks/Nuspex/dedxPidAnalysis.cxx b/PWGLF/Tasks/Nuspex/dedxPidAnalysis.cxx index 3181a09495d..63b3e15a88e 100644 --- a/PWGLF/Tasks/Nuspex/dedxPidAnalysis.cxx +++ b/PWGLF/Tasks/Nuspex/dedxPidAnalysis.cxx @@ -87,11 +87,6 @@ struct DedxPidAnalysis { static constexpr int EtaIntervals = 8; static constexpr int ParticlesType = 4; static constexpr int CentralityClasses = 10; - float pionMin = 0.35; - float pionMax = 0.45; - float elTofCut = 0.1; - float pionTofCut = 1.0; - float pTcut = 2.0; bool fillHist = false; @@ -116,6 +111,12 @@ struct DedxPidAnalysis { }; + enum V0SigmaMode { + V0NoSigmaCut = 0, + V0SigmaOnly = 1, + V0TOFAndSigma = 2 + }; + enum NINELSelectionMode : int { NoSelINEL = 1, SelINELgt0 = 2, @@ -203,9 +204,17 @@ struct DedxPidAnalysis { Configurable nSigmaDCAxy{"nSigmaDCAxy", 3.0, "nSigma DCAxy selection"}; Configurable dcaXYp0{"dcaXYp0", 0.0105f, "DCAxy formula: p0 + p1/pt^p2"}; Configurable dcaXYp1{"dcaXYp1", 0.0350f, "DCAxy p1 parameter"}; - Configurable dcaXYp2{"dcaXYp2", 1.1f, "DCA_xy p2 parameter"}; + Configurable dcaXYp2{"dcaXYp2", 1.1f, "DCAxy p2 parameter"}; + Configurable dcaZp0{"dcaZp0", 0.0105f, "DCAz formula: p0 + p1/pt^p2"}; + Configurable dcaZp1{"dcaZp1", 0.0350f, "DCAz p1 parameter"}; + Configurable dcaZp2{"dcaZp2", 1.1f, "DCAz p2 parameter"}; Configurable nSigmaDCAz{"nSigmaDCAz", 3.0, "nSigma DCAz selection"}; - Configurable maxDCAz{"maxDCAz", 0.1f, "maxDCAz"}; + // Configurable maxDCAz{"maxDCAz", 0.1f, "maxDCAz"}; + Configurable pionMin{"pionMin", 0.35f, "pionMin"}; + Configurable pionMax{"pionMax", 0.45f, "pionMax"}; + Configurable elTofCut{"elTofCut", 0.1f, "elTofCut"}; + Configurable pionTofCut{"pionTofCut", 1.0f, "pionTofCut"}; + Configurable pTcut{"pTcut", 2.f, "pTcut"}; // v0 cuts Configurable v0cospaMin{"v0cospaMin", 0.999f, "Minimum V0 CosPA"}; Configurable minimumV0Radius{"minimumV0Radius", 1.2f, @@ -225,6 +234,7 @@ struct DedxPidAnalysis { Configurable v0ProperLifetimeCutLambda{"v0ProperLifetimeCutLambda", 30.f, "V0 proper lifetime cut for Lambda"}; Configurable nsigmaMax{"nsigmaMax", 3.0f, "Maximum nsigma cut"}; Configurable tpcMomentumCut{"tpcMomentumCut", 0.6f, "Momentum threshold above which TOF is required"}; + Configurable v0SigmaMode{"v0SigmaMode", 0, "0: no cut, 1: sigma only, 2: TOF + sigma above tpcMomentumCut"}; Configurable invMassCutK0s{"invMassCutK0s", 0.015f, "invariant Mass Cut for K0s"}; Configurable invMassCutLambda{"invMassCutLambda", 0.015f, "invariant Mass Cut for Lambda"}; Configurable invMassCutGamma{"invMassCutGamma", 0.015f, "invariant Mass Cut for Gamma"}; @@ -271,9 +281,10 @@ struct DedxPidAnalysis { Configurable> calibrationFactorNeg{"calibrationFactorNeg", {50.4011, 50.4764, 50.186, 49.2955, 48.8222, 49.4273, 49.9292, 50.0556}, "negative calibration factors"}; Configurable> calibrationFactorPos{"calibrationFactorPos", {50.5157, 50.6359, 50.3198, 49.3345, 48.9197, 49.4931, 50.0188, 50.1406}, "positive calibration factors"}; ConfigurableAxis binP{"binP", {VARIABLE_WIDTH, 0.1, 0.12, 0.14, 0.16, 0.18, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2.0, 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 2.8, 2.9, 3.0, 3.2, 3.4, 3.6, 3.8, 4.0, 4.5, 5.0, 5.5, 6.0, 6.5, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 18.0, 20.0}, ""}; - ConfigurableAxis centBins{"centBins", {100, 0, 100}, "Binning for centralidad"}; - ConfigurableAxis dedxBins{"dedxBins", {100, 0, 100}, "Binning for dedx"}; - ConfigurableAxis pFineBins{"pFineBins", {1995, 0.1, 40}, "Binning for momentum"}; + ConfigurableAxis centBins{"centBins", {100, 0, 100}, "Binning for centralidad plots"}; + ConfigurableAxis dedxBins{"dedxBins", {100, 0, 100}, "Binning for dedx plots"}; + ConfigurableAxis pFineBins{"pFineBins", {1995, 0.1, 40}, "Binning for momentum plots"}; + ConfigurableAxis dcaBins{"dcaBins", {500, -0.5, 0.5}, "Binning for DCA plots"}; // phi cut fits TF1* fphiCutHigh = nullptr; @@ -331,6 +342,13 @@ struct DedxPidAnalysis { } else if (v0SelectionMode == V0TPCTOF) { LOGF(info, "V0 seleccion using TOF + TPC"); } + if (v0SigmaMode == V0NoSigmaCut) { + LOGF(info, "V0 sigma mode: no cut"); + } else if (v0SigmaMode == V0SigmaOnly) { + LOGF(info, "V0 sigma mode: sigma only"); + } else if (v0SigmaMode == V0TOFAndSigma) { + LOGF(info, "V0 sigma mode: TOF + sigma above tpcMomentumCut"); + } if (calibrationMode) { LOGF(info, "Calibration mode activated"); } else { @@ -369,6 +387,7 @@ struct DedxPidAnalysis { AxisSpec centAxis{centBins, "Undefined multiplicity estimator"}; AxisSpec pFineAxis{pFineBins, "#it{p} (GeV/c)"}; AxisSpec pTFineAxis{pFineBins, "#it{p}_{T} (GeV/c)"}; + AxisSpec dcaAxis{dcaBins, ""}; switch (multiplicityEstimator) { case MultSelectionMode::NoMultiplicity: // No multiplicity LOGF(info, "No multiplicity estimator applied"); @@ -718,14 +737,18 @@ struct DedxPidAnalysis { registryDeDx.add("hTPCPIDAfter", "N clusters TPC PID After", HistType::kTH1F, {{200, 0, 200, "N_{cl,PID, After}"}}); // DCA cut + registryDeDx.add("hDCAxyVsPt_beforeAnyCut", "DCAxy vs pT before any tkr cut;#it{p}_{T} (GeV/c);DCA_{xy} (cm)", + HistType::kTH2F, {{ptAxis}, {dcaAxis}}); + registryDeDx.add("hDCAzVsPt_beforeAnyCut", "DCAz vs pT before any tkr cut;#it{p}_{T} (GeV/c);DCA_{z} (cm)", + HistType::kTH2F, {{ptAxis}, {dcaAxis}}); registryDeDx.add("hDCAxyVsPt_before", "DCAxy vs pT before cut;#it{p}_{T} (GeV/c);DCA_{xy} (cm)", - HistType::kTH2F, {{ptAxis}, {200, -0.5, 0.5}}); + HistType::kTH2F, {{ptAxis}, {dcaAxis}}); registryDeDx.add("hDCAzVsPt_before", "DCAz vs pT before cut;#it{p}_{T} (GeV/c);DCA_{z} (cm)", - HistType::kTH2F, {{ptAxis}, {200, -0.5, 0.5}}); + HistType::kTH2F, {{ptAxis}, {dcaAxis}}); registryDeDx.add("hDCAxyVsPt_after", "DCAxy vs pT after cut;#it{p}_{T} (GeV/c);DCA_{xy} (cm)", - HistType::kTH2F, {{ptAxis}, {200, -0.5, 0.5}}); + HistType::kTH2F, {{ptAxis}, {dcaAxis}}); registryDeDx.add("hDCAzVsPt_after", "DCAz vs pT after cut;#it{p}_{T} (GeV/c);DCA_{z} (cm)", - HistType::kTH2F, {{ptAxis}, {200, -0.5, 0.5}}); + HistType::kTH2F, {{ptAxis}, {dcaAxis}}); // Event Counter registryDeDx.add("evsel", "events selected", HistType::kTH1F, {{6, 0.5, 6.5, ""}}); @@ -816,7 +839,7 @@ struct DedxPidAnalysis { template bool passesDCAzCut(const T1& track) const { - const float maxiDcaZ = nSigmaDCAz.value * (maxDCAz.value) / 3.0; + const float maxiDcaZ = nSigmaDCAz.value * (dcaZp0.value + dcaZp1.value / std::pow(track.pt(), dcaZp2.value)) / 3.0; return std::abs(track.dcaZ()) < maxiDcaZ; } // Momentum @@ -872,16 +895,24 @@ struct DedxPidAnalysis { sigman = std::hypot(ntrack.tpcNSigmaPi(), ntrack.tofNSigmaPi()); } - if (ptrack.tpcInnerParam() > tpcMomentumCut) { - if (!ptrack.hasTOF()) - return false; + if (v0SigmaMode == V0TOFAndSigma) { + // TOF + sigma + if (ptrack.tpcInnerParam() > tpcMomentumCut) { + if (!ptrack.hasTOF()) + return false; + if (std::abs(sigmap) > nsigmaMax) + return false; + } + if (ntrack.tpcInnerParam() > tpcMomentumCut) { + if (!ntrack.hasTOF()) + return false; + if (std::abs(sigman) > nsigmaMax) + return false; + } + } else if (v0SigmaMode == V0SigmaOnly) { + // sigma only if (std::abs(sigmap) > nsigmaMax) return false; - } - - if (ntrack.tpcInnerParam() > tpcMomentumCut) { - if (!ntrack.hasTOF()) - return false; if (std::abs(sigman) > nsigmaMax) return false; } @@ -953,16 +984,24 @@ struct DedxPidAnalysis { sigman = std::hypot(ntrack.tpcNSigmaPi(), ntrack.tofNSigmaPi()); } - if (ptrack.tpcInnerParam() > tpcMomentumCut) { - if (!ptrack.hasTOF()) - return false; + if (v0SigmaMode == V0TOFAndSigma) { + // TOF + sigma + if (ptrack.tpcInnerParam() > tpcMomentumCut) { + if (!ptrack.hasTOF()) + return false; + if (std::abs(sigmap) > nsigmaMax) + return false; + } + if (ntrack.tpcInnerParam() > tpcMomentumCut) { + if (!ntrack.hasTOF()) + return false; + if (std::abs(sigman) > nsigmaMax) + return false; + } + } else if (v0SigmaMode == V0SigmaOnly) { + // sigma only if (std::abs(sigmap) > nsigmaMax) return false; - } - - if (ntrack.tpcInnerParam() > tpcMomentumCut) { - if (!ntrack.hasTOF()) - return false; if (std::abs(sigman) > nsigmaMax) return false; } @@ -1027,15 +1066,24 @@ struct DedxPidAnalysis { sigmap = std::hypot(ptrack.tpcNSigmaPi(), ptrack.tofNSigmaPi()); sigman = std::hypot(ntrack.tpcNSigmaPr(), ntrack.tofNSigmaPr()); } - if (ptrack.tpcInnerParam() > tpcMomentumCut) { - if (!ptrack.hasTOF()) - return false; - if (std::abs(sigmap) > nsigmaMax) - return false; - } - if (ntrack.tpcInnerParam() > tpcMomentumCut) { - if (!ntrack.hasTOF()) + if (v0SigmaMode == V0TOFAndSigma) { + // TOF + sigma + if (ptrack.tpcInnerParam() > tpcMomentumCut) { + if (!ptrack.hasTOF()) + return false; + if (std::abs(sigmap) > nsigmaMax) + return false; + } + if (ntrack.tpcInnerParam() > tpcMomentumCut) { + if (!ntrack.hasTOF()) + return false; + if (std::abs(sigman) > nsigmaMax) + return false; + } + } else if (v0SigmaMode == V0SigmaOnly) { + // sigma only + if (std::abs(sigmap) > nsigmaMax) return false; if (std::abs(sigman) > nsigmaMax) return false; @@ -1104,19 +1152,28 @@ struct DedxPidAnalysis { sigman = std::hypot(ntrack.tpcNSigmaEl(), ntrack.tofNSigmaEl()); } - if (ptrack.tpcInnerParam() > tpcMomentumCut) { - if (!ptrack.hasTOF()) - return false; + if (v0SigmaMode == V0TOFAndSigma) { + // TOF + sigma + if (ptrack.tpcInnerParam() > tpcMomentumCut) { + if (!ptrack.hasTOF()) + return false; + if (std::abs(sigmap) > nsigmaMax) + return false; + } + if (ntrack.tpcInnerParam() > tpcMomentumCut) { + if (!ntrack.hasTOF()) + return false; + if (std::abs(sigman) > nsigmaMax) + return false; + } + } else if (v0SigmaMode == V0SigmaOnly) { + // sigma only if (std::abs(sigmap) > nsigmaMax) return false; - } - - if (ntrack.tpcInnerParam() > tpcMomentumCut) { - if (!ntrack.hasTOF()) - return false; if (std::abs(sigman) > nsigmaMax) return false; } + const float gammaMass = 2 * MassElectron; // GeV/c^2 if (fillHist) @@ -1574,6 +1631,10 @@ struct DedxPidAnalysis { registryDeDx.fill(HIST("hTPCClustersBefore"), trk.tpcNClsFound()); registryDeDx.fill(HIST("hTPCPIDBefore"), trk.tpcNClsPID()); + // Before DCA any tkr cuts + registryDeDx.fill(HIST("hDCAxyVsPt_beforeAnyCut"), trk.pt(), trk.dcaXY()); + registryDeDx.fill(HIST("hDCAzVsPt_beforeAnyCut"), trk.pt(), trk.dcaZ()); + // track Selection wo DCA if (!mySelectionPrim.IsSelected(trk)) continue; diff --git a/PWGLF/Tasks/Nuspex/multiplicityPt.cxx b/PWGLF/Tasks/Nuspex/multiplicityPt.cxx index ac9ff908701..204501ce0ee 100644 --- a/PWGLF/Tasks/Nuspex/multiplicityPt.cxx +++ b/PWGLF/Tasks/Nuspex/multiplicityPt.cxx @@ -151,8 +151,15 @@ struct MultiplicityPt { Configurable maxChi2PerClusterTPC{"maxChi2PerClusterTPC", 4.f, "Additional cut on the maximum value of the chi2 per cluster in the TPC"}; Configurable minChi2PerClusterTPC{"minChi2PerClusterTPC", 0.5f, "Additional cut on the minimum value of the chi2 per cluster in the TPC"}; Configurable maxChi2PerClusterITS{"maxChi2PerClusterITS", 36.f, "Additional cut on the maximum value of the chi2 per cluster in the ITS"}; - Configurable maxDcaXYFactor{"maxDcaXYFactor", 1.f, "Additional cut on the maximum value of the DCA xy (multiplicative factor)"}; - Configurable maxDcaZ{"maxDcaZ", 2.0f, "Additional cut on the maximum value of the DCA z"}; + Configurable nSigmaDCAxy{"nSigmaDCAxy", 1.f, "Additional cut on the maximum value of the DCA xy (multiplicative factor)"}; + Configurable dcaXYp0{"dcaXYp0", 0.0105f, "DCAxy formula: p0 + p1/pt^p2"}; + Configurable dcaXYp1{"dcaXYp1", 0.0350f, "DCAxy p1 parameter"}; + Configurable dcaXYp2{"dcaXYp2", 1.1f, "DCAxy p2 parameter"}; + Configurable nSigmaDCAz{"nSigmaDCAz", 1.f, "Additional cut on the maximum value of the DCA z (multiplicative factor)"}; + Configurable dcaZp0{"dcaZp0", 0.0105f, "DCAz formula: p0 + p1/pt^p2"}; + Configurable dcaZp1{"dcaZp1", 0.0350f, "DCAz p1 parameter"}; + Configurable dcaZp2{"dcaZp2", 1.1f, "DCAz p2 parameter"}; + // Configurable maxDcaZ{"maxDcaZ", 2.0f, "Additional cut on the maximum value of the DCA z"}; Configurable minTPCNClsFound{"minTPCNClsFound", 70.0f, "min number of found TPC clusters"}; Configurable minTPCNClsPID{"minTPCNClsPID", 130.0f, "min number of PID TPC clusters"}; Configurable nClTPCFoundCut{"nClTPCFoundCut", false, "Apply TPC found clusters cut"}; @@ -187,6 +194,7 @@ struct MultiplicityPt { ConfigurableAxis pFineBins{"pFineBins", {1995, 0.1, 40}, "Binning for momentum"}; ConfigurableAxis dedxBins{"dedxBins", {100, 0, 100}, "Binning for dedx"}; std::vector centBinningStd = {0., 1., 5., 10., 15., 20., 30., 40., 50., 70., 100.}; + ConfigurableAxis dcaBins{"dcaBins", {200, -0.5, 0.5}, "Binning for DCA plots"}; // ── Custom track-selection object ──────────────────────── TrackSelection customTrackCuts; @@ -255,7 +263,7 @@ struct MultiplicityPt { customTrackCuts.SetMinNCrossedRowsTPC(minNCrossedRowsTPC.value); customTrackCuts.SetMinNCrossedRowsOverFindableClustersTPC(minNCrossedRowsOverFindableClustersTPC.value); customTrackCuts.SetMaxDcaXYPtDep([](float /*pt*/) { return 10000.f; }); - customTrackCuts.SetMaxDcaZ(maxDcaZ.value); + // customTrackCuts.SetMaxDcaZ(maxDcaZ.value); } // Initialize phi cut functions if enabled @@ -295,7 +303,7 @@ struct MultiplicityPt { const AxisSpec dcaXYAxis{105, -1.05f, 1.05f, "DCA_{xy} (cm)"}; const AxisSpec zvtxAxis{60, -30.0, 30.0, "Vtx_{z} (cm)"}; const AxisSpec nclAxis{161, -0.5, 160.5, "N_{cl} TPC"}; - + AxisSpec dcaAxis{dcaBins, ""}; // ======================================================================== // EVENT COUNTER AND BASIC HISTOGRAMS // ======================================================================== @@ -617,6 +625,18 @@ struct MultiplicityPt { registry.add("PhiCut/hPtVsPhiPrimeAfter", "pT vs #phi' after cut;p_{T};#phi'", kTH2F, {{100, 0, 10}, {100, 0, 0.4}}); } + // ======================================================================== + // DCA CUT MONITORING + // ======================================================================== + + registry.add("hDCAxyVsPt_before", "DCAxy vs pT before cut;#it{p}_{T} (GeV/c);DCA_{xy} (cm)", + HistType::kTH2F, {{ptAxis}, {dcaAxis}}); + registry.add("hDCAzVsPt_before", "DCAz vs pT before cut;#it{p}_{T} (GeV/c);DCA_{z} (cm)", + HistType::kTH2F, {{ptAxis}, {dcaAxis}}); + registry.add("hDCAxyVsPt_after", "DCAxy vs pT after cut;#it{p}_{T} (GeV/c);DCA_{xy} (cm)", + HistType::kTH2F, {{ptAxis}, {dcaAxis}}); + registry.add("hDCAzVsPt_after", "DCAz vs pT after cut;#it{p}_{T} (GeV/c);DCA_{z} (cm)", + HistType::kTH2F, {{ptAxis}, {dcaAxis}}); // ======================================================================== // CALIBRATION HISTOGRAMS @@ -711,7 +731,7 @@ struct MultiplicityPt { LOG(info) << "cfgINELCut = " << cfgINELCut.value; LOG(info) << "selTVXMC = " << selTVXMC.value; LOG(info) << "applyPhiCut = " << applyPhiCut.value; - LOG(info) << "maxDcaZ = " << maxDcaZ.value; + // LOG(info) << "maxDcaZ = " << maxDcaZ.value; } // Get magnetic field from CCDB @@ -790,19 +810,26 @@ struct MultiplicityPt { return true; } - template - bool passesDCAxyCut(const T& track) const + // DCA xy cut + template + bool passesDCAxyCut(const T1& track) const { - constexpr float C = 0.0105f, S = 0.0350f, P = 1.1f; - const float maxDCAxy = maxDcaXYFactor.value * (C + S / std::pow(track.pt(), P)); - return std::abs(track.dcaXY()) <= maxDCAxy; + const float maxDcaXY = nSigmaDCAxy.value * (dcaXYp0.value + dcaXYp1.value / std::pow(track.pt(), dcaXYp2.value)) / 3.0; + return std::abs(track.dcaXY()) < maxDcaXY; + } + // DCA z cut + template + bool passesDCAzCut(const T1& track) const + { + const float maxiDcaZ = nSigmaDCAz.value * (dcaZp0.value + dcaZp1.value / std::pow(track.pt(), dcaZp2.value)) / 3.0; + return std::abs(track.dcaZ()) < maxiDcaZ; } // Full track selection template bool passesTrackSelection(const T& track) const { - return passesTrackSelectionNoDCA(track) && passesDCAxyCut(track); + return passesTrackSelectionNoDCA(track) && passesDCAxyCut(track) && passesDCAzCut(track); } template @@ -1138,6 +1165,10 @@ struct MultiplicityPt { if (!track.has_mcParticle()) continue; + // Before DCA cuts + registry.fill(HIST("hDCAxyVsPt_before"), track.pt(), track.dcaXY()); + registry.fill(HIST("hDCAzVsPt_before"), track.pt(), track.dcaZ()); + if (applyPhiCut.value && track.pt() >= pTthresholdPhiCut.value) { float phiPrime = getTransformedPhi(track.phi(), track.sign(), magField); registry.fill(HIST("PhiCut/hPtVsPhiPrimeBefore"), track.pt(), phiPrime); @@ -1172,38 +1203,6 @@ struct MultiplicityPt { if (centIndex == -1) continue; - // ==================================================================== - // DEDX VS MOMENTUM HISTOGRAMS FILLING - ALL TRACKS - // ==================================================================== - hDedxVspTMomentumVsCent[10]->Fill(track.pt(), tpcSignal, eta); - if (charge > 0) { - registry.fill(HIST("DedxVsMomentum/dEdx_vs_Momentum_all_Pos"), momentum, tpcSignal, eta); - hDedxVsMomentumVsCentPos[centIndex]->Fill(momentum, tpcSignal, eta); - hDedxVspTMomentumVsCent[centIndex]->Fill(track.pt(), tpcSignal, eta); - hMomentumVsEtaPos[centIndex]->Fill(eta, momentum); - hMomentumVsEtaPos[10]->Fill(eta, momentum); - hpTVsEtaPos[centIndex]->Fill(eta, track.pt()); - hpTVsEtaPos[10]->Fill(eta, track.pt()); - registry.fill(HIST("ResponseMatrix/heta_vs_pt_vs_p_all_Pos"), eta, track.pt(), momentum); - } else { - registry.fill(HIST("DedxVsMomentum/dEdx_vs_Momentum_all_Neg"), momentum, tpcSignal, eta); - hDedxVsMomentumVsCentNeg[centIndex]->Fill(momentum, tpcSignal, eta); - hDedxVspTMomentumVsCent[centIndex]->Fill(track.pt(), tpcSignal, eta); - hMomentumVsEtaNeg[centIndex]->Fill(eta, momentum); - hMomentumVsEtaNeg[10]->Fill(eta, momentum); - hpTVsEtaNeg[centIndex]->Fill(eta, track.pt()); - hpTVsEtaNeg[10]->Fill(eta, track.pt()); - registry.fill(HIST("ResponseMatrix/heta_vs_pt_vs_p_all_Neg"), eta, track.pt(), momentum); - } - - if (isPrimary) { - if (charge > 0) { - registry.fill(HIST("ResponseMatrix/heta_vs_pt_vs_p_all_Pos_Pri"), eta, track.pt(), momentum); - } else { - registry.fill(HIST("ResponseMatrix/heta_vs_pt_vs_p_all_Neg_Pri"), eta, track.pt(), momentum); - } - } - registry.fill(HIST("hEta"), track.eta()); registry.fill(HIST("hPhi"), track.phi()); registry.fill(HIST("EtaVsPhi"), track.eta(), track.phi()); @@ -1251,6 +1250,10 @@ struct MultiplicityPt { if (!passesTrackSelection(track)) continue; + // After Trk cuts + registry.fill(HIST("hDCAxyVsPt_after"), track.pt(), track.dcaXY()); + registry.fill(HIST("hDCAzVsPt_after"), track.pt(), track.dcaZ()); + if (applyPhiCut.value && !passedPhiCut(track, magField)) continue; @@ -1318,6 +1321,38 @@ struct MultiplicityPt { } } + // ==================================================================== + // DEDX VS MOMENTUM HISTOGRAMS FILLING - ALL TRACKS + // ==================================================================== + hDedxVspTMomentumVsCent[10]->Fill(track.pt(), tpcSignal, eta); + if (charge > 0) { + registry.fill(HIST("DedxVsMomentum/dEdx_vs_Momentum_all_Pos"), momentum, tpcSignal, eta); + hDedxVsMomentumVsCentPos[centIndex]->Fill(momentum, tpcSignal, eta); + hDedxVspTMomentumVsCent[centIndex]->Fill(track.pt(), tpcSignal, eta); + hMomentumVsEtaPos[centIndex]->Fill(eta, momentum); + hMomentumVsEtaPos[10]->Fill(eta, momentum); + hpTVsEtaPos[centIndex]->Fill(eta, track.pt()); + hpTVsEtaPos[10]->Fill(eta, track.pt()); + registry.fill(HIST("ResponseMatrix/heta_vs_pt_vs_p_all_Pos"), eta, track.pt(), momentum); + } else { + registry.fill(HIST("DedxVsMomentum/dEdx_vs_Momentum_all_Neg"), momentum, tpcSignal, eta); + hDedxVsMomentumVsCentNeg[centIndex]->Fill(momentum, tpcSignal, eta); + hDedxVspTMomentumVsCent[centIndex]->Fill(track.pt(), tpcSignal, eta); + hMomentumVsEtaNeg[centIndex]->Fill(eta, momentum); + hMomentumVsEtaNeg[10]->Fill(eta, momentum); + hpTVsEtaNeg[centIndex]->Fill(eta, track.pt()); + hpTVsEtaNeg[10]->Fill(eta, track.pt()); + registry.fill(HIST("ResponseMatrix/heta_vs_pt_vs_p_all_Neg"), eta, track.pt(), momentum); + } + + if (isPrimary) { + if (charge > 0) { + registry.fill(HIST("ResponseMatrix/heta_vs_pt_vs_p_all_Pos_Pri"), eta, track.pt(), momentum); + } else { + registry.fill(HIST("ResponseMatrix/heta_vs_pt_vs_p_all_Neg_Pri"), eta, track.pt(), momentum); + } + } + // ==================================================================== // DEDX VS MOMENTUM HISTOGRAMS FILLING - PARTICLE SPECIFIC // ====================================================================