diff --git a/PWGLF/DataModel/LFAntinCexTables.h b/PWGLF/DataModel/LFAntinCexTables.h index f49eab6ad80..9e8f4ce1ca8 100644 --- a/PWGLF/DataModel/LFAntinCexTables.h +++ b/PWGLF/DataModel/LFAntinCexTables.h @@ -103,6 +103,16 @@ DECLARE_SOA_COLUMN(PLayersOk, pLayersOk, int8_t); DECLARE_SOA_COLUMN(APLayersOk, apLayersOk, int8_t); DECLARE_SOA_COLUMN(PVtxZ, pVtxZ, float); + +// Proton ITS PID +DECLARE_SOA_COLUMN(PTrkItsNSigmaPr, pTrkItsNSigmaPr, float); +DECLARE_SOA_COLUMN(PTrkItsPidValid, pTrkItsPidValid, int8_t); +DECLARE_SOA_COLUMN(PTrkTgl, pTrkTgl, float); + +// Antiproton ITS PID +DECLARE_SOA_COLUMN(AntipTrkItsNSigmaPr, antipTrkItsNSigmaPr, float); +DECLARE_SOA_COLUMN(AntipTrkItsPidValid, antipTrkItsPidValid, int8_t); +DECLARE_SOA_COLUMN(AntipTrkTgl, antipTrkTgl, float); } // namespace antin_cex // Table @@ -123,7 +133,9 @@ DECLARE_SOA_TABLE(AntinCexPairs, "AOD", "ANTINCEX", antin_cex::DPairP, antin_cex::DPairPt, antin_cex::DPairPz, antin_cex::DOpenAngle, antin_cex::SVNearestLayerId, antin_cex::SVDeltaRToLayer, antin_cex::PTrkItsHitMap, antin_cex::APTrkItsHitMap, antin_cex::PLayersOk, antin_cex::APLayersOk, - antin_cex::PVtxZ); + antin_cex::PVtxZ, + antin_cex::PTrkItsNSigmaPr, antin_cex::PTrkItsPidValid, antin_cex::PTrkTgl, + antin_cex::AntipTrkItsNSigmaPr, antin_cex::AntipTrkItsPidValid, antin_cex::AntipTrkTgl); } // namespace o2::aod diff --git a/PWGLF/TableProducer/Nuspex/nucleiAntineutronCex.cxx b/PWGLF/TableProducer/Nuspex/nucleiAntineutronCex.cxx index 9fea0a7e487..32a896db20c 100644 --- a/PWGLF/TableProducer/Nuspex/nucleiAntineutronCex.cxx +++ b/PWGLF/TableProducer/Nuspex/nucleiAntineutronCex.cxx @@ -15,21 +15,23 @@ /// \author Fabiola Lugo /// -#include "PWGLF/DataModel/LFAntinCexTables.h" - -#include "CommonConstants/MathConstants.h" -#include "DCAFitter/DCAFitterN.h" -#include "DetectorsBase/Propagator.h" -#include "Framework/AnalysisDataModel.h" -#include "Framework/AnalysisTask.h" -#include "Framework/Logger.h" -#include "Framework/runDataProcessing.h" -#include "ReconstructionDataFormats/TrackParametrization.h" - -#include "TMCProcess.h" -#include "TMath.h" -#include "TPDGCode.h" -#include "TVector3.h" +#include + +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include #include #include @@ -157,6 +159,20 @@ struct NucleiAntineutronCex { histos.add("vtxfit_mc_dY", "SV residual Y (fit - MC);#Delta Y (cm);Entries", kTH1F, {{400, -20., 20.}}); histos.add("vtxfit_mc_dZ", "SV residual Z (fit - MC);#Delta Z (cm);Entries", kTH1F, {{400, -20., 20.}}); histos.add("vtxfit_mc_d3D", "SV distance |fit - MC|;#Delta r (cm);Entries", kTH1F, {{300, 0., 30.}}); + + // ITS PID (protons / antiprotons, reconstructed tracks) + histos.add("pItsNsigmaPr", "ITS n#sigma (p hyp., proton);n#sigma_{ITS}(p);Entries", kTH1F, {{100, -10., 10.}}); + histos.add("apItsNsigmaPr", "ITS n#sigma (p hyp., antiproton);n#sigma_{ITS}(p);Entries", kTH1F, {{100, -10., 10.}}); + histos.add("pItsPidValid", "ITS PID valid flag (proton);PidValid;Entries", kTH1F, {{2, 0., 2.}}); + histos.add("apItsPidValid", "ITS PID valid flag (antiproton);PidValid;Entries", kTH1F, {{2, 0., 2.}}); + histos.add("pTgl", "tgl (proton track);tgl;Entries", kTH1F, {{100, -2., 2.}}); + histos.add("apTgl", "tgl (antiproton track);tgl;Entries", kTH1F, {{100, -2., 2.}}); + histos.add("pItsNsigmaPr_bg", "ITS n#sigma (p hyp., proton);n#sigma_{ITS}(p);Entries", kTH1F, {{100, -10., 10.}}); + histos.add("apItsNsigmaPr_bg", "ITS n#sigma (p hyp., antiproton);n#sigma_{ITS}(p);Entries", kTH1F, {{100, -10., 10.}}); + histos.add("pItsPidValid_bg", "ITS PID valid flag (proton);PidValid;Entries", kTH1F, {{2, 0., 2.}}); + histos.add("apItsPidValid_bg", "ITS PID valid flag (antiproton);PidValid;Entries", kTH1F, {{2, 0., 2.}}); + histos.add("pTgl_bg", "tgl (proton track);tgl;Entries", kTH1F, {{100, -2., 2.}}); + histos.add("apTgl_bg", "tgl (antiproton track);tgl;Entries", kTH1F, {{100, -2., 2.}}); } static o2::track::TrackParCov makeTPCovFromAOD(const TracksWCovMc::iterator& tr) @@ -495,6 +511,9 @@ struct NucleiAntineutronCex { // int antip_trk_nClsTPC = 0; int antipTrkNClsIts = 0; uint16_t apItsMap = 0; + float pTrkItsNSigmaPr = -999.f; + int8_t pTrkItsPidValid = 0; + float pTrkTgl = 0.f; bool pLayers = false; bool pHasTrack = false; @@ -507,6 +526,11 @@ struct NucleiAntineutronCex { // int p_trk_nClsTPC = 0; int pTrkNClsIts = 0; uint16_t pItsMap = 0; + float antipTrkItsNSigmaPr = -999.f; + int8_t antipTrkItsPidValid = 0; + float antipTrkTgl = 0.f; + + o2::aod::ITSResponse itsResponse; for (const auto& track : tracks) { if (!track.has_mcParticle()) @@ -542,11 +566,25 @@ struct NucleiAntineutronCex { antipTrkTpcSignal = track.tpcSignal(); // antip_trk_nClsTPC = track.tpcNCls(); antipTrkNClsIts = track.itsNCls(); + antipTrkTgl = track.tgl(); + const auto nsigmaITSantip = itsResponse.nSigmaITS(track); + antipTrkItsNSigmaPr = static_cast(nsigmaITSantip); + antipTrkItsPidValid = std::isfinite(nsigmaITSantip) ? 1 : 0; antipHasTrack = true; apItsMap = static_cast(track.itsClusterMap()); antipLayers = (apItsMap != 0); if (layerCondition) antipLayers = true; + if (motherPdg == -kNeutron) { + histos.fill(HIST("apItsNsigmaPr"), antipTrkItsNSigmaPr); + histos.fill(HIST("apItsPidValid"), antipTrkItsPidValid); + histos.fill(HIST("apTgl"), antipTrkTgl); + } + if (motherPdg != -kNeutron) { + histos.fill(HIST("apItsNsigmaPr_bg"), antipTrkItsNSigmaPr); + histos.fill(HIST("apItsPidValid_bg"), antipTrkItsPidValid); + histos.fill(HIST("apTgl_bg"), antipTrkTgl); + } } else if (mc.globalIndex() == pId) { pTrkP = track.p(); pTrkPx = track.px(); @@ -556,11 +594,26 @@ struct NucleiAntineutronCex { pTrkTpcSignal = track.tpcSignal(); // p_trk_nClsTPC = track.tpcNCls(); pTrkNClsIts = track.itsNCls(); + pTrkTgl = track.tgl(); + const auto nsigmaITSp = + itsResponse.nSigmaITS(track); + pTrkItsNSigmaPr = static_cast(nsigmaITSp); + pTrkItsPidValid = std::isfinite(nsigmaITSp) ? 1 : 0; pHasTrack = true; pItsMap = static_cast(track.itsClusterMap()); pLayers = (pItsMap != 0); if (layerCondition) pLayers = true; + if (motherPdg == -kNeutron) { + histos.fill(HIST("pItsNsigmaPr"), pTrkItsNSigmaPr); + histos.fill(HIST("pItsPidValid"), pTrkItsPidValid); + histos.fill(HIST("pTgl"), pTrkTgl); + } + if (motherPdg == -kNeutron) { + histos.fill(HIST("pItsNsigmaPr_bg"), pTrkItsNSigmaPr); + histos.fill(HIST("pItsPidValid_bg"), pTrkItsPidValid); + histos.fill(HIST("pTgl_bg"), pTrkTgl); + } } } if (!(pHasTrack && antipHasTrack)) @@ -782,7 +835,15 @@ struct NucleiAntineutronCex { static_cast(pLayers ? 1 : 0), static_cast(antipLayers ? 1 : 0), - pvtxZ); + pvtxZ, + + pTrkItsNSigmaPr, + pTrkItsPidValid, + pTrkTgl, + + antipTrkItsNSigmaPr, + antipTrkItsPidValid, + antipTrkTgl); } } // ==== end DCAFitter2 ====