From 0e0066633c52553cea92101274344510dbe1a9c9 Mon Sep 17 00:00:00 2001 From: Gleb Romanenko Date: Fri, 24 Jan 2025 17:33:34 +0100 Subject: [PATCH 1/2] Data model update --- PWGCF/Femto3D/DataModel/singletrackselector.h | 447 ++++++++---------- PWGCF/Femto3D/TableProducer/CMakeLists.txt | 7 +- .../TableProducer/singleTrackSelector.cxx | 74 ++- .../singleTrackSelectorExtra.cxx | 16 +- .../singleTrackSelectorPIDMaker.cxx | 146 ++++++ PWGCF/Femto3D/Tasks/femto3dPairTask.cxx | 2 +- PWGCF/Femto3D/Tasks/femto3dPairTaskMC.cxx | 2 +- PWGCF/Femto3D/Tasks/femto3dQA.cxx | 43 +- .../Tasks/Nuspex/hadronnucleicorrelation.cxx | 11 +- PWGLF/Tasks/Strangeness/k0_mixed_events.cxx | 8 +- 10 files changed, 439 insertions(+), 317 deletions(-) create mode 100644 PWGCF/Femto3D/TableProducer/singleTrackSelectorPIDMaker.cxx diff --git a/PWGCF/Femto3D/DataModel/singletrackselector.h b/PWGCF/Femto3D/DataModel/singletrackselector.h index a49293f1b7a..750348c0544 100644 --- a/PWGCF/Femto3D/DataModel/singletrackselector.h +++ b/PWGCF/Femto3D/DataModel/singletrackselector.h @@ -23,6 +23,7 @@ #include "Framework/ASoA.h" #include "Framework/AnalysisDataModel.h" #include "Common/DataModel/PIDResponse.h" +#include "Common/DataModel/PIDResponseITS.h" #include "Framework/Logger.h" #include "Common/DataModel/Multiplicity.h" @@ -105,12 +106,12 @@ struct binningParent { } }; -using nsigma_v0 = binningParent(-10.f, 10.f)>; +// using nsigma_v0 = binningParent(-10.f, 10.f)>; using nsigma_v1 = binningParent(-6.35f, 6.35f)>; // Width 0.05 symmetric around 0 using nsigma = nsigma_v1; -using dca_v0 = binningParent(-1.f, 1.f)>; -using dca_v1 = binningParent(-1.f, 1.f), int16_t>; +// using dca_v0 = binningParent(-1.f, 1.f)>; +// using dca_v1 = binningParent(-1.f, 1.f), int16_t>; using dca_v2 = binningParent(-3.2767f, 3.2767f), int16_t>; // Width 0.0001 symmetric around 0 using dca = dca_v2; @@ -119,17 +120,15 @@ using rowsOverFindable = binningParent(0.f, 3.f)>; } // namespace binning +//==================================== base event characteristics ==================================== DECLARE_SOA_COLUMN(Mult, mult, int); // Multiplicity of the collision DECLARE_SOA_COLUMN(MultPercentile, multPerc, float); // Percentiles of multiplicity of the collision DECLARE_SOA_COLUMN(PosZ, posZ, float); // Vertex of the collision DECLARE_SOA_COLUMN(MagField, magField, float); // Magnetic field corresponding to a collision (in T) -DECLARE_SOA_COLUMN(IsNoSameBunchPileup, isNoSameBunchPileup, bool); -DECLARE_SOA_COLUMN(IsGoodZvtxFT0vsPV, isGoodZvtxFT0vsPV, bool); -DECLARE_SOA_COLUMN(IsVertexITSTPC, isVertexITSTPC, bool); +//==================================== extra event characteristics ==================================== DECLARE_SOA_COLUMN(HadronicRate, hadronicRate, double); DECLARE_SOA_COLUMN(Occupancy, occupancy, int); - DECLARE_SOA_DYNAMIC_COLUMN(dIsNoSameBunchPileup, isNoSameBunchPileup, [](uint64_t selBit) -> bool { return TESTBIT(selBit, evsel::kNoSameBunchPileup); }); DECLARE_SOA_DYNAMIC_COLUMN(dIsGoodZvtxFT0vsPV, isGoodZvtxFT0vsPV, [](uint64_t selBit) -> bool { return TESTBIT(selBit, evsel::kIsGoodZvtxFT0vsPV); }); DECLARE_SOA_DYNAMIC_COLUMN(dIsVertexITSTPC, isVertexITSTPC, [](uint64_t selBit) -> bool { return TESTBIT(selBit, evsel::kIsVertexITSTPC); }); @@ -145,12 +144,6 @@ DECLARE_SOA_TABLE(SingleCollSels, "AOD", "SINGLECOLLSEL", // Table of the variab singletrackselector::PosZ, singletrackselector::MagField); -DECLARE_SOA_TABLE(SingleCollExtras_v0, "AOD", "SINGLECOLLEXTRA", // Joinable collision table with Pile-Up flags - singletrackselector::IsNoSameBunchPileup, - singletrackselector::IsGoodZvtxFT0vsPV, - singletrackselector::IsVertexITSTPC, - singletrackselector::HadronicRate); - DECLARE_SOA_TABLE(SingleCollExtras_v1, "AOD", "SINGLECOLLEXTR1", // Joinable collision table with Pile-Up flags evsel::Selection, singletrackselector::HadronicRate, @@ -166,14 +159,20 @@ using SingleCollExtras = SingleCollExtras_v1; namespace singletrackselector { +//==================================== track characteristics ==================================== + DECLARE_SOA_INDEX_COLUMN(SingleCollSel, singleCollSel); // Index to the collision DECLARE_SOA_COLUMN(P, p, float); // Momentum of the track DECLARE_SOA_COLUMN(Eta, eta, float); DECLARE_SOA_COLUMN(Phi, phi, float); DECLARE_SOA_COLUMN(Sign, sign, int8_t); -DECLARE_SOA_COLUMN(TPCNClsFound, tpcNClsFound, int16_t); // Number of TPC clusters -DECLARE_SOA_COLUMN(TPCNClsShared, tpcNClsShared, uint8_t); // Number of shared TPC clusters -DECLARE_SOA_COLUMN(ITSNCls, itsNCls, uint8_t); // Number of ITS clusters (only stored in v0) +DECLARE_SOA_COLUMN(TPCNClsFound, tpcNClsFound, int16_t); // Number of TPC clusters +DECLARE_SOA_COLUMN(TPCNClsShared, tpcNClsShared, uint8_t); // Number of shared TPC clusters +DECLARE_SOA_DYNAMIC_COLUMN(TPCFractionSharedCls, tpcFractionSharedCls, //! Fraction of shared TPC clusters + [](uint8_t tpcNClsShared, int16_t tpcNClsFound) -> float { return (float)tpcNClsShared / (float)tpcNClsFound; }); + +DECLARE_SOA_COLUMN(ITSclsMap, itsClsMap, uint8_t); +DECLARE_SOA_COLUMN(ITSclusterSizes, itsClusterSizes, uint32_t); DECLARE_SOA_DYNAMIC_COLUMN(ITSNClsDyn, itsNCls, [](uint32_t itsClusterSizes) -> uint8_t { uint8_t itsNcls = 0; for (int layer = 0; layer < 7; layer++) { @@ -182,62 +181,112 @@ DECLARE_SOA_DYNAMIC_COLUMN(ITSNClsDyn, itsNCls, [](uint32_t itsClusterSizes) -> } return itsNcls; }); -DECLARE_SOA_COLUMN(ITSclsMap, itsClsMap, uint8_t); -DECLARE_SOA_COLUMN(ITSclusterSizes, itsClusterSizes, uint32_t); -DECLARE_SOA_COLUMN(StoredDcaXY, storedDcaXY, binning::dca_v0::binned_t); // impact parameter of the track with 8 bits (v0) -DECLARE_SOA_COLUMN(StoredDcaZ, storedDcaZ, binning::dca_v0::binned_t); // impact parameter of the track with 8 bits (v0) -DECLARE_SOA_COLUMN(StoredDcaXY_v1, storedDcaXY_v1, binning::dca_v1::binned_t); // impact parameter of the track with 16 bits (v1) -DECLARE_SOA_COLUMN(StoredDcaZ_v1, storedDcaZ_v1, binning::dca_v1::binned_t); // impact parameter of the track with 16 bits (v1) -DECLARE_SOA_COLUMN(StoredDcaXY_v2, storedDcaXY_v2, binning::dca_v2::binned_t); // impact parameter of the track with 16 bits (v2, larger range) -DECLARE_SOA_COLUMN(StoredDcaZ_v2, storedDcaZ_v2, binning::dca_v2::binned_t); // impact parameter of the track with 16 bits (v2, larger range) -DECLARE_SOA_COLUMN(StoredTPCChi2NCl, storedTpcChi2NCl, binning::chi2::binned_t); // TPC chi2 -DECLARE_SOA_COLUMN(StoredITSChi2NCl, storedItsChi2NCl, binning::chi2::binned_t); // ITS chi2 +DECLARE_SOA_COLUMN(StoredTPCChi2NCl, storedTpcChi2NCl, binning::chi2::binned_t); // TPC chi2 +DECLARE_SOA_DYNAMIC_COLUMN(TPCChi2NCl, tpcChi2NCl, + [](binning::chi2::binned_t chi2_binned) -> float { return singletrackselector::unPack(chi2_binned); }); + +DECLARE_SOA_COLUMN(StoredITSChi2NCl, storedItsChi2NCl, binning::chi2::binned_t); // ITS chi2 +DECLARE_SOA_DYNAMIC_COLUMN(ITSChi2NCl, itsChi2NCl, + [](binning::chi2::binned_t chi2_binned) -> float { return singletrackselector::unPack(chi2_binned); }); + DECLARE_SOA_COLUMN(StoredTPCCrossedRowsOverFindableCls, storedTpcCrossedRowsOverFindableCls, binning::rowsOverFindable::binned_t); // Ratio of found over findable clusters +DECLARE_SOA_DYNAMIC_COLUMN(TPCCrossedRowsOverFindableCls, tpcCrossedRowsOverFindableCls, + [](binning::rowsOverFindable::binned_t rowsOverFindable_binned) -> float { return singletrackselector::unPack(rowsOverFindable_binned); }); + +//==================================== DCA ==================================== + +DECLARE_SOA_COLUMN(StoredDcaXY, storedDcaXY, binning::dca::binned_t); // impact parameter of the track with 16 bits (v2, larger range) +DECLARE_SOA_DYNAMIC_COLUMN(DcaXY, dcaXY, + [](binning::dca::binned_t dca_binned) -> float { return singletrackselector::unPackSymmetric(dca_binned); }); + +DECLARE_SOA_COLUMN(StoredDcaZ, storedDcaZ, binning::dca::binned_t); // impact parameter of the track with 16 bits (v2, larger range) +DECLARE_SOA_DYNAMIC_COLUMN(DcaZ, dcaZ, + [](binning::dca::binned_t dca_binned) -> float { return singletrackselector::unPackSymmetric(dca_binned); }); + +using StoredDcaXY_v2 = StoredDcaXY; // compatibility with the old tables of version 2 -- to be removed later +using StoredDcaZ_v2 = StoredDcaZ; // compatibility with the old tables of version 2 -- to be removed later +//==================================== PID ==================================== + +//------------------------------------ Electrons ------------------------------------ + +DECLARE_SOA_COLUMN(StoredTOFNSigmaEl, storedTofNSigmaEl, binning::nsigma::binned_t); // (v1) TOF +DECLARE_SOA_DYNAMIC_COLUMN(TOFNSigmaEl, tofNSigmaEl, + [](binning::nsigma::binned_t nsigma_binned) -> float { return singletrackselector::unPackSymmetric(nsigma_binned); }); + +DECLARE_SOA_COLUMN(StoredTPCNSigmaEl, storedTpcNSigmaEl, binning::nsigma::binned_t); // (v1) TPC +DECLARE_SOA_DYNAMIC_COLUMN(TPCNSigmaEl, tpcNSigmaEl, + [](binning::nsigma::binned_t nsigma_binned) -> float { return singletrackselector::unPackSymmetric(nsigma_binned); }); + +//------------------------------------ Pions ------------------------------------ +DECLARE_SOA_COLUMN(StoredTOFNSigmaPi, storedTofNSigmaPi, binning::nsigma::binned_t); // (v1) TOF +DECLARE_SOA_DYNAMIC_COLUMN(TOFNSigmaPi, tofNSigmaPi, + [](binning::nsigma::binned_t nsigma_binned) -> float { return singletrackselector::unPackSymmetric(nsigma_binned); }); + +DECLARE_SOA_COLUMN(StoredTPCNSigmaPi, storedTpcNSigmaPi, binning::nsigma::binned_t); // (v1) TPC +DECLARE_SOA_DYNAMIC_COLUMN(TPCNSigmaPi, tpcNSigmaPi, + [](binning::nsigma::binned_t nsigma_binned) -> float { return singletrackselector::unPackSymmetric(nsigma_binned); }); + +//------------------------------------ Kaons ------------------------------------ +DECLARE_SOA_COLUMN(StoredTOFNSigmaKa, storedTofNSigmaKa, binning::nsigma::binned_t); // (v1) TOF +DECLARE_SOA_DYNAMIC_COLUMN(TOFNSigmaKa, tofNSigmaKa, + [](binning::nsigma::binned_t nsigma_binned) -> float { return singletrackselector::unPackSymmetric(nsigma_binned); }); + +DECLARE_SOA_COLUMN(StoredTPCNSigmaKa, storedTpcNSigmaKa, binning::nsigma::binned_t); // (v1) TPC +DECLARE_SOA_DYNAMIC_COLUMN(TPCNSigmaKa, tpcNSigmaKa, + [](binning::nsigma::binned_t nsigma_binned) -> float { return singletrackselector::unPackSymmetric(nsigma_binned); }); + +//------------------------------------ Protons ------------------------------------ +DECLARE_SOA_COLUMN(StoredTOFNSigmaPr, storedTofNSigmaPr, binning::nsigma::binned_t); // (v1) TOF +DECLARE_SOA_DYNAMIC_COLUMN(TOFNSigmaPr, tofNSigmaPr, + [](binning::nsigma::binned_t nsigma_binned) -> float { return singletrackselector::unPackSymmetric(nsigma_binned); }); + +DECLARE_SOA_COLUMN(StoredTPCNSigmaPr, storedTpcNSigmaPr, binning::nsigma::binned_t); // (v1) TPC +DECLARE_SOA_DYNAMIC_COLUMN(TPCNSigmaPr, tpcNSigmaPr, + [](binning::nsigma::binned_t nsigma_binned) -> float { return singletrackselector::unPackSymmetric(nsigma_binned); }); + +//------------------------------------ Deutrons ------------------------------------ +DECLARE_SOA_COLUMN(StoredTOFNSigmaDe, storedTofNSigmaDe, binning::nsigma::binned_t); // (v1) TOF +DECLARE_SOA_DYNAMIC_COLUMN(TOFNSigmaDe, tofNSigmaDe, + [](binning::nsigma::binned_t nsigma_binned) -> float { return singletrackselector::unPackSymmetric(nsigma_binned); }); + +DECLARE_SOA_COLUMN(StoredTPCNSigmaDe, storedTpcNSigmaDe, binning::nsigma::binned_t); // (v1) TPC +DECLARE_SOA_DYNAMIC_COLUMN(TPCNSigmaDe, tpcNSigmaDe, + [](binning::nsigma::binned_t nsigma_binned) -> float { return singletrackselector::unPackSymmetric(nsigma_binned); }); + +//------------------------------------ Helium3 ------------------------------------ +DECLARE_SOA_COLUMN(StoredTOFNSigmaHe, storedTofNSigmaHe, binning::nsigma::binned_t); // (v1) TOF +DECLARE_SOA_DYNAMIC_COLUMN(TOFNSigmaHe, tofNSigmaHe, + [](binning::nsigma::binned_t nsigma_binned) -> float { return singletrackselector::unPackSymmetric(nsigma_binned); }); -DECLARE_SOA_COLUMN(StoredTOFNSigmaPi, storedTofNSigmaPi, binning::nsigma::binned_t); // (v0) -DECLARE_SOA_COLUMN(StoredTPCNSigmaPi, storedTpcNSigmaPi, binning::nsigma::binned_t); // (v0) -DECLARE_SOA_COLUMN(StoredTOFNSigmaKa, storedTofNSigmaKa, binning::nsigma::binned_t); // (v0) -DECLARE_SOA_COLUMN(StoredTPCNSigmaKa, storedTpcNSigmaKa, binning::nsigma::binned_t); // (v0) -DECLARE_SOA_COLUMN(StoredTOFNSigmaPr, storedTofNSigmaPr, binning::nsigma::binned_t); // (v0) -DECLARE_SOA_COLUMN(StoredTPCNSigmaPr, storedTpcNSigmaPr, binning::nsigma::binned_t); // (v0) -DECLARE_SOA_COLUMN(StoredTOFNSigmaDe, storedTofNSigmaDe, binning::nsigma::binned_t); // (v0) -DECLARE_SOA_COLUMN(StoredTPCNSigmaDe, storedTpcNSigmaDe, binning::nsigma::binned_t); // (v0) -DECLARE_SOA_COLUMN(StoredTOFNSigmaHe, storedTofNSigmaHe, binning::nsigma::binned_t); // (v0) -DECLARE_SOA_COLUMN(StoredTPCNSigmaHe, storedTpcNSigmaHe, binning::nsigma::binned_t); // (v0) - -DECLARE_SOA_COLUMN(StoredTOFNSigmaPi_v1, storedTofNSigmaPi_v1, binning::nsigma::binned_t); // (v1) -DECLARE_SOA_COLUMN(StoredTPCNSigmaPi_v1, storedTpcNSigmaPi_v1, binning::nsigma::binned_t); // (v1) - -DECLARE_SOA_COLUMN(StoredTOFNSigmaKa_v1, storedTofNSigmaKa_v1, binning::nsigma::binned_t); // (v1) -DECLARE_SOA_COLUMN(StoredTPCNSigmaKa_v1, storedTpcNSigmaKa_v1, binning::nsigma::binned_t); // (v1) - -DECLARE_SOA_COLUMN(StoredTOFNSigmaPr_v1, storedTofNSigmaPr_v1, binning::nsigma::binned_t); // (v1) -DECLARE_SOA_COLUMN(StoredTPCNSigmaPr_v1, storedTpcNSigmaPr_v1, binning::nsigma::binned_t); // (v1) - -DECLARE_SOA_COLUMN(StoredTOFNSigmaDe_v1, storedTofNSigmaDe_v1, binning::nsigma::binned_t); // (v1) -DECLARE_SOA_COLUMN(StoredTPCNSigmaDe_v1, storedTpcNSigmaDe_v1, binning::nsigma::binned_t); // (v1) - -DECLARE_SOA_COLUMN(StoredTOFNSigmaHe_v1, storedTofNSigmaHe_v1, binning::nsigma::binned_t); // (v1) -DECLARE_SOA_COLUMN(StoredTPCNSigmaHe_v1, storedTpcNSigmaHe_v1, binning::nsigma::binned_t); // (v1) - -DECLARE_SOA_COLUMN(StoredITSNSigmaPi_v1, storedItsNSigmaPi_v1, binning::nsigma::binned_t); // (v1) -DECLARE_SOA_DYNAMIC_COLUMN(ITSNSigmaPi_v1, itsNSigmaPi, - [](binning::nsigma_v1::binned_t nsigma_binned) -> float { return singletrackselector::unPackSymmetric(nsigma_binned); }); -DECLARE_SOA_COLUMN(StoredITSNSigmaKa_v1, storedItsNSigmaKa_v1, binning::nsigma::binned_t); // (v1) -DECLARE_SOA_DYNAMIC_COLUMN(ITSNSigmaKa_v1, itsNSigmaKa, - [](binning::nsigma_v1::binned_t nsigma_binned) -> float { return singletrackselector::unPackSymmetric(nsigma_binned); }); -DECLARE_SOA_COLUMN(StoredITSNSigmaPr_v1, storedItsNSigmaPr_v1, binning::nsigma::binned_t); // (v1) -DECLARE_SOA_DYNAMIC_COLUMN(ITSNSigmaPr_v1, itsNSigmaPr, - [](binning::nsigma_v1::binned_t nsigma_binned) -> float { return singletrackselector::unPackSymmetric(nsigma_binned); }); -DECLARE_SOA_COLUMN(StoredITSNSigmaDe_v1, storedItsNSigmaDe_v1, binning::nsigma::binned_t); // (v1) -DECLARE_SOA_DYNAMIC_COLUMN(ITSNSigmaDe_v1, itsNSigmaDe, - [](binning::nsigma_v1::binned_t nsigma_binned) -> float { return singletrackselector::unPackSymmetric(nsigma_binned); }); -DECLARE_SOA_COLUMN(StoredITSNSigmaHe_v1, storedItsNSigmaHe_v1, binning::nsigma::binned_t); // (v1) -DECLARE_SOA_DYNAMIC_COLUMN(ITSNSigmaHe_v1, itsNSigmaHe, - [](binning::nsigma_v1::binned_t nsigma_binned) -> float { return singletrackselector::unPackSymmetric(nsigma_binned); }); +DECLARE_SOA_COLUMN(StoredTPCNSigmaHe, storedTpcNSigmaHe, binning::nsigma::binned_t); // (v1) TPC +DECLARE_SOA_DYNAMIC_COLUMN(TPCNSigmaHe, tpcNSigmaHe, + [](binning::nsigma::binned_t nsigma_binned) -> float { return singletrackselector::unPackSymmetric(nsigma_binned); }); + +using StoredTOFNSigmaPi_v1 = StoredTOFNSigmaPi; // compatibility with the old tables of version 2 -- to be removed later +using StoredTPCNSigmaPi_v1 = StoredTPCNSigmaPi; // compatibility with the old tables of version 2 -- to be removed later + +using StoredTOFNSigmaKa_v1 = StoredTOFNSigmaKa; // compatibility with the old tables of version 2 -- to be removed later +using StoredTPCNSigmaKa_v1 = StoredTPCNSigmaKa; // compatibility with the old tables of version 2 -- to be removed later + +using StoredTOFNSigmaPr_v1 = StoredTOFNSigmaPr; // compatibility with the old tables of version 2 -- to be removed later +using StoredTPCNSigmaPr_v1 = StoredTPCNSigmaPr; // compatibility with the old tables of version 2 -- to be removed later + +using StoredTOFNSigmaDe_v1 = StoredTOFNSigmaDe; // compatibility with the old tables of version 2 -- to be removed later +using StoredTPCNSigmaDe_v1 = StoredTPCNSigmaDe; // compatibility with the old tables of version 2 -- to be removed later + +using StoredTOFNSigmaHe_v1 = StoredTOFNSigmaHe; // compatibility with the old tables of version 2 -- to be removed later +using StoredTPCNSigmaHe_v1 = StoredTPCNSigmaHe; // compatibility with the old tables of version 2 -- to be removed later + +//==================================== Dynamic cols for kinematics ==================================== DECLARE_SOA_DYNAMIC_COLUMN(Energy, energy, [](float p, float mass) -> float { return sqrt(p * p + mass * mass); }); +DECLARE_SOA_DYNAMIC_COLUMN(Rapidity, rapidity, //! Track rapidity, computed under the mass assumption given as input + [](float p, float eta, float mass) -> float { + const auto pz = p * std::tanh(eta); + const auto energy = std::sqrt(p * p + mass * mass); + return 0.5f * log((energy + pz) / (energy - pz)); + }); DECLARE_SOA_DYNAMIC_COLUMN(Pt, pt, [](float p, float eta) -> float { return p / std::cosh(eta); }); DECLARE_SOA_DYNAMIC_COLUMN(Px, px, [](float p, float eta, float phi) -> float { return (p / std::cosh(eta)) * std::sin(phi); }); DECLARE_SOA_DYNAMIC_COLUMN(Py, py, [](float p, float eta, float phi) -> float { return (p / std::cosh(eta)) * std::cos(phi); }); @@ -251,91 +300,15 @@ DECLARE_SOA_DYNAMIC_COLUMN(PhiStar, phiStar, } }); -DECLARE_SOA_DYNAMIC_COLUMN(DcaXY_v0, dcaXY, - [](binning::dca_v0::binned_t dca_binned) -> float { return singletrackselector::unPack(dca_binned); }); -DECLARE_SOA_DYNAMIC_COLUMN(DcaZ_v0, dcaZ, - [](binning::dca_v0::binned_t dca_binned) -> float { return singletrackselector::unPack(dca_binned); }); -DECLARE_SOA_DYNAMIC_COLUMN(DcaXY_v1, dcaXY, - [](binning::dca_v1::binned_t dca_binned) -> float { return singletrackselector::unPack(dca_binned); }); -DECLARE_SOA_DYNAMIC_COLUMN(DcaZ_v1, dcaZ, - [](binning::dca_v1::binned_t dca_binned) -> float { return singletrackselector::unPack(dca_binned); }); - -DECLARE_SOA_DYNAMIC_COLUMN(DcaXY_v2, dcaXY, - [](binning::dca_v2::binned_t dca_binned) -> float { return singletrackselector::unPackSymmetric(dca_binned); }); -DECLARE_SOA_DYNAMIC_COLUMN(DcaZ_v2, dcaZ, - [](binning::dca_v2::binned_t dca_binned) -> float { return singletrackselector::unPackSymmetric(dca_binned); }); - -DECLARE_SOA_DYNAMIC_COLUMN(TPCChi2NCl, tpcChi2NCl, - [](binning::chi2::binned_t chi2_binned) -> float { return singletrackselector::unPack(chi2_binned); }); -DECLARE_SOA_DYNAMIC_COLUMN(ITSChi2NCl, itsChi2NCl, - [](binning::chi2::binned_t chi2_binned) -> float { return singletrackselector::unPack(chi2_binned); }); - -DECLARE_SOA_DYNAMIC_COLUMN(TPCCrossedRowsOverFindableCls, tpcCrossedRowsOverFindableCls, - [](binning::rowsOverFindable::binned_t rowsOverFindable_binned) -> float { return singletrackselector::unPack(rowsOverFindable_binned); }); - -DECLARE_SOA_DYNAMIC_COLUMN(TPCFractionSharedCls, tpcFractionSharedCls, //! Fraction of shared TPC clusters - [](uint8_t tpcNClsShared, int16_t tpcNClsFound) -> float { return (float)tpcNClsShared / (float)tpcNClsFound; }); - -DECLARE_SOA_DYNAMIC_COLUMN(TOFNSigmaPi_v0, tofNSigmaPi, - [](binning::nsigma_v0::binned_t nsigma_binned) -> float { return singletrackselector::unPack(nsigma_binned); }); -DECLARE_SOA_DYNAMIC_COLUMN(TPCNSigmaPi_v0, tpcNSigmaPi, - [](binning::nsigma_v0::binned_t nsigma_binned) -> float { return singletrackselector::unPack(nsigma_binned); }); -DECLARE_SOA_DYNAMIC_COLUMN(TOFNSigmaKa_v0, tofNSigmaKa, - [](binning::nsigma_v0::binned_t nsigma_binned) -> float { return singletrackselector::unPack(nsigma_binned); }); -DECLARE_SOA_DYNAMIC_COLUMN(TPCNSigmaKa_v0, tpcNSigmaKa, - [](binning::nsigma_v0::binned_t nsigma_binned) -> float { return singletrackselector::unPack(nsigma_binned); }); -DECLARE_SOA_DYNAMIC_COLUMN(TOFNSigmaPr_v0, tofNSigmaPr, - [](binning::nsigma_v0::binned_t nsigma_binned) -> float { return singletrackselector::unPack(nsigma_binned); }); -DECLARE_SOA_DYNAMIC_COLUMN(TPCNSigmaPr_v0, tpcNSigmaPr, - [](binning::nsigma_v0::binned_t nsigma_binned) -> float { return singletrackselector::unPack(nsigma_binned); }); -DECLARE_SOA_DYNAMIC_COLUMN(TOFNSigmaDe_v0, tofNSigmaDe, - [](binning::nsigma_v0::binned_t nsigma_binned) -> float { return singletrackselector::unPack(nsigma_binned); }); -DECLARE_SOA_DYNAMIC_COLUMN(TPCNSigmaDe_v0, tpcNSigmaDe, - [](binning::nsigma_v0::binned_t nsigma_binned) -> float { return singletrackselector::unPack(nsigma_binned); }); -DECLARE_SOA_DYNAMIC_COLUMN(TOFNSigmaHe_v0, tofNSigmaHe, - [](binning::nsigma_v0::binned_t nsigma_binned) -> float { return singletrackselector::unPack(nsigma_binned); }); -DECLARE_SOA_DYNAMIC_COLUMN(TPCNSigmaHe_v0, tpcNSigmaHe, - [](binning::nsigma_v0::binned_t nsigma_binned) -> float { return singletrackselector::unPack(nsigma_binned); }); - -DECLARE_SOA_DYNAMIC_COLUMN(TOFNSigmaPi_v1, tofNSigmaPi, - [](binning::nsigma_v1::binned_t nsigma_binned) -> float { return singletrackselector::unPackSymmetric(nsigma_binned); }); -DECLARE_SOA_DYNAMIC_COLUMN(TPCNSigmaPi_v1, tpcNSigmaPi, - [](binning::nsigma_v1::binned_t nsigma_binned) -> float { return singletrackselector::unPackSymmetric(nsigma_binned); }); -DECLARE_SOA_DYNAMIC_COLUMN(TOFNSigmaKa_v1, tofNSigmaKa, - [](binning::nsigma_v1::binned_t nsigma_binned) -> float { return singletrackselector::unPackSymmetric(nsigma_binned); }); -DECLARE_SOA_DYNAMIC_COLUMN(TPCNSigmaKa_v1, tpcNSigmaKa, - [](binning::nsigma_v1::binned_t nsigma_binned) -> float { return singletrackselector::unPackSymmetric(nsigma_binned); }); -DECLARE_SOA_DYNAMIC_COLUMN(TOFNSigmaPr_v1, tofNSigmaPr, - [](binning::nsigma_v1::binned_t nsigma_binned) -> float { return singletrackselector::unPackSymmetric(nsigma_binned); }); -DECLARE_SOA_DYNAMIC_COLUMN(TPCNSigmaPr_v1, tpcNSigmaPr, - [](binning::nsigma_v1::binned_t nsigma_binned) -> float { return singletrackselector::unPackSymmetric(nsigma_binned); }); -DECLARE_SOA_DYNAMIC_COLUMN(TOFNSigmaDe_v1, tofNSigmaDe, - [](binning::nsigma_v1::binned_t nsigma_binned) -> float { return singletrackselector::unPackSymmetric(nsigma_binned); }); -DECLARE_SOA_DYNAMIC_COLUMN(TPCNSigmaDe_v1, tpcNSigmaDe, - [](binning::nsigma_v1::binned_t nsigma_binned) -> float { return singletrackselector::unPackSymmetric(nsigma_binned); }); -DECLARE_SOA_DYNAMIC_COLUMN(TOFNSigmaHe_v1, tofNSigmaHe, - [](binning::nsigma_v1::binned_t nsigma_binned) -> float { return singletrackselector::unPackSymmetric(nsigma_binned); }); -DECLARE_SOA_DYNAMIC_COLUMN(TPCNSigmaHe_v1, tpcNSigmaHe, - [](binning::nsigma_v1::binned_t nsigma_binned) -> float { return singletrackselector::unPackSymmetric(nsigma_binned); }); +//==================================== EXtra info ==================================== DECLARE_SOA_COLUMN(TPCInnerParam, tpcInnerParam, float); // Momentum at inner wall of the TPC DECLARE_SOA_COLUMN(TPCSignal, tpcSignal, float); // dE/dx TPC DECLARE_SOA_COLUMN(Beta, beta, float); // TOF beta -DECLARE_SOA_COLUMN(StoredTPCNSigmaEl, storedTpcNSigmaEl, binning::nsigma::binned_t); -DECLARE_SOA_DYNAMIC_COLUMN(TPCNSigmaEl, tpcNSigmaEl, - [](binning::nsigma_v1::binned_t nsigma_binned) -> float { return singletrackselector::unPackSymmetric(nsigma_binned); }); - -DECLARE_SOA_DYNAMIC_COLUMN(Rapidity, rapidity, //! Track rapidity, computed under the mass assumption given as input - [](float p, float eta, float mass) -> float { - const auto pz = p * std::tanh(eta); - const auto energy = std::sqrt(p * p + mass * mass); - return 0.5f * log((energy + pz) / (energy - pz)); - }); - } // namespace singletrackselector -DECLARE_SOA_TABLE(SingleTrackSels_v0, "AOD", "SINGLETRACKSEL", // Table of the variables for single track selection. +DECLARE_SOA_TABLE(SingleTrackSels_v3, "AOD", "SINGLETRACKSEL", // Table of the variables for single track selection. o2::soa::Index<>, singletrackselector::SingleCollSelId, singletrackselector::P, @@ -344,101 +317,38 @@ DECLARE_SOA_TABLE(SingleTrackSels_v0, "AOD", "SINGLETRACKSEL", // Table of the v singletrackselector::Sign, singletrackselector::TPCNClsFound, singletrackselector::TPCNClsShared, - singletrackselector::ITSNCls, + singletrackselector::ITSclsMap, + singletrackselector::ITSclusterSizes, singletrackselector::StoredDcaXY, singletrackselector::StoredDcaZ, singletrackselector::StoredTPCChi2NCl, singletrackselector::StoredITSChi2NCl, singletrackselector::StoredTPCCrossedRowsOverFindableCls, - singletrackselector::StoredTOFNSigmaPi, - singletrackselector::StoredTPCNSigmaPi, - singletrackselector::StoredTOFNSigmaKa, - singletrackselector::StoredTPCNSigmaKa, - singletrackselector::StoredTOFNSigmaPr, - singletrackselector::StoredTPCNSigmaPr, - singletrackselector::StoredTOFNSigmaDe, - singletrackselector::StoredTPCNSigmaDe, - - singletrackselector::DcaXY_v0, - singletrackselector::DcaZ_v0, + singletrackselector::ITSNClsDyn, + track::v001::ITSClsSizeInLayer, + singletrackselector::DcaXY, + singletrackselector::DcaZ, singletrackselector::TPCChi2NCl, singletrackselector::ITSChi2NCl, singletrackselector::TPCCrossedRowsOverFindableCls, singletrackselector::TPCFractionSharedCls, - singletrackselector::TOFNSigmaPi_v0, - singletrackselector::TPCNSigmaPi_v0, - singletrackselector::TOFNSigmaKa_v0, - singletrackselector::TPCNSigmaKa_v0, - singletrackselector::TOFNSigmaPr_v0, - singletrackselector::TPCNSigmaPr_v0, - singletrackselector::TOFNSigmaDe_v0, - singletrackselector::TPCNSigmaDe_v0, - - singletrackselector::Rapidity, singletrackselector::Energy, + singletrackselector::Rapidity, singletrackselector::Pt, singletrackselector::Px, singletrackselector::Py, singletrackselector::Pz, - singletrackselector::PhiStar); + singletrackselector::PhiStar, -DECLARE_SOA_TABLE_VERSIONED(SingleTrackSels_v1, "AOD", "SINGLETRACKSEL1", 1, // Table of the variables for single track selection. - o2::soa::Index<>, - singletrackselector::SingleCollSelId, - singletrackselector::P, - singletrackselector::Eta, - singletrackselector::Phi, - singletrackselector::Sign, - singletrackselector::TPCNClsFound, - singletrackselector::TPCNClsShared, - singletrackselector::ITSclsMap, - singletrackselector::ITSclusterSizes, - singletrackselector::StoredDcaXY_v1, - singletrackselector::StoredDcaZ_v1, - singletrackselector::StoredTPCChi2NCl, - singletrackselector::StoredITSChi2NCl, - singletrackselector::StoredTPCCrossedRowsOverFindableCls, - - singletrackselector::StoredTOFNSigmaPi, - singletrackselector::StoredTPCNSigmaPi, - singletrackselector::StoredTOFNSigmaKa, - singletrackselector::StoredTPCNSigmaKa, - singletrackselector::StoredTOFNSigmaPr, - singletrackselector::StoredTPCNSigmaPr, - singletrackselector::StoredTOFNSigmaDe, - singletrackselector::StoredTPCNSigmaDe, - singletrackselector::StoredTOFNSigmaHe, - singletrackselector::StoredTPCNSigmaHe, - - singletrackselector::ITSNClsDyn, - track::v001::ITSClsSizeInLayer, - singletrackselector::DcaXY_v1, - singletrackselector::DcaZ_v1, - singletrackselector::TPCChi2NCl, - singletrackselector::ITSChi2NCl, - singletrackselector::TPCCrossedRowsOverFindableCls, - singletrackselector::TPCFractionSharedCls, - - singletrackselector::TOFNSigmaPi_v0, - singletrackselector::TPCNSigmaPi_v0, - singletrackselector::TOFNSigmaKa_v0, - singletrackselector::TPCNSigmaKa_v0, - singletrackselector::TOFNSigmaPr_v0, - singletrackselector::TPCNSigmaPr_v0, - singletrackselector::TOFNSigmaDe_v0, - singletrackselector::TPCNSigmaDe_v0, - singletrackselector::TOFNSigmaHe_v0, - singletrackselector::TPCNSigmaHe_v0, - - singletrackselector::Rapidity, - singletrackselector::Energy, - singletrackselector::Pt, - singletrackselector::Px, - singletrackselector::Py, - singletrackselector::Pz, - singletrackselector::PhiStar); + // PID with ITS (from PIDResponseITS.h) + o2::aod::pidits::ITSNSigmaElImp, + o2::aod::pidits::ITSNSigmaPiImp, + o2::aod::pidits::ITSNSigmaKaImp, + o2::aod::pidits::ITSNSigmaPrImp, + o2::aod::pidits::ITSNSigmaDeImp, + o2::aod::pidits::ITSNSigmaHeImp); DECLARE_SOA_TABLE_VERSIONED(SingleTrackSels_v2, "AOD", "SINGLETRACKSEL2", 2, // Table of the variables for single track selection. o2::soa::Index<>, @@ -470,23 +380,23 @@ DECLARE_SOA_TABLE_VERSIONED(SingleTrackSels_v2, "AOD", "SINGLETRACKSEL2", 2, // singletrackselector::ITSNClsDyn, track::v001::ITSClsSizeInLayer, - singletrackselector::DcaXY_v2, - singletrackselector::DcaZ_v2, + singletrackselector::DcaXY, + singletrackselector::DcaZ, singletrackselector::TPCChi2NCl, singletrackselector::ITSChi2NCl, singletrackselector::TPCCrossedRowsOverFindableCls, singletrackselector::TPCFractionSharedCls, - singletrackselector::TOFNSigmaPi_v1, - singletrackselector::TPCNSigmaPi_v1, - singletrackselector::TOFNSigmaKa_v1, - singletrackselector::TPCNSigmaKa_v1, - singletrackselector::TOFNSigmaPr_v1, - singletrackselector::TPCNSigmaPr_v1, - singletrackselector::TOFNSigmaDe_v1, - singletrackselector::TPCNSigmaDe_v1, - singletrackselector::TOFNSigmaHe_v1, - singletrackselector::TPCNSigmaHe_v1, + singletrackselector::TOFNSigmaPi, + singletrackselector::TPCNSigmaPi, + singletrackselector::TOFNSigmaKa, + singletrackselector::TPCNSigmaKa, + singletrackselector::TOFNSigmaPr, + singletrackselector::TPCNSigmaPr, + singletrackselector::TOFNSigmaDe, + singletrackselector::TPCNSigmaDe, + singletrackselector::TOFNSigmaHe, + singletrackselector::TPCNSigmaHe, singletrackselector::Rapidity, singletrackselector::Energy, @@ -496,28 +406,58 @@ DECLARE_SOA_TABLE_VERSIONED(SingleTrackSels_v2, "AOD", "SINGLETRACKSEL2", 2, // singletrackselector::Pz, singletrackselector::PhiStar); -using SingleTrackSels = SingleTrackSels_v2; +using SingleTrackSels = SingleTrackSels_v3; -DECLARE_SOA_TABLE(SingleTrkExtras, "AOD", "SINGLETRKEXTRA", - singletrackselector::TPCInnerParam, - singletrackselector::TPCSignal, - singletrackselector::Beta); +DECLARE_SOA_TABLE(SinglePIDEls_v0, "AOD", "SINGLEPIDEL0", + singletrackselector::StoredTPCNSigmaEl, + singletrackselector::TPCNSigmaEl); DECLARE_SOA_TABLE(SinglePIDEls, "AOD", "SINGLEPIDEL", + singletrackselector::StoredTOFNSigmaEl, singletrackselector::StoredTPCNSigmaEl, + + singletrackselector::TOFNSigmaEl, singletrackselector::TPCNSigmaEl); -DECLARE_SOA_TABLE(SinglePIDsITSPi, "AOD", "STSPIDITSPI", - singletrackselector::StoredITSNSigmaPi_v1, - singletrackselector::ITSNSigmaPi_v1); +DECLARE_SOA_TABLE(SinglePIDPis, "AOD", "SINGLEPIDPI", + singletrackselector::StoredTOFNSigmaPi, + singletrackselector::StoredTPCNSigmaPi, + + singletrackselector::TOFNSigmaPi, + singletrackselector::TPCNSigmaPi); -DECLARE_SOA_TABLE(SinglePIDsITSKa, "AOD", "STSPIDITSKA", - singletrackselector::StoredITSNSigmaKa_v1, - singletrackselector::ITSNSigmaKa_v1); +DECLARE_SOA_TABLE(SinglePIDKas, "AOD", "SINGLEPIDKA", + singletrackselector::StoredTOFNSigmaKa, + singletrackselector::StoredTPCNSigmaKa, -DECLARE_SOA_TABLE(SinglePIDsITSPr, "AOD", "STSPIDITSPR", - singletrackselector::StoredITSNSigmaPr_v1, - singletrackselector::ITSNSigmaPr_v1); + singletrackselector::TOFNSigmaKa, + singletrackselector::TPCNSigmaKa); + +DECLARE_SOA_TABLE(SinglePIDPrs, "AOD", "SINGLEPIDPR", + singletrackselector::StoredTOFNSigmaPr, + singletrackselector::StoredTPCNSigmaPr, + + singletrackselector::TOFNSigmaPr, + singletrackselector::TPCNSigmaPr); + +DECLARE_SOA_TABLE(SinglePIDDes, "AOD", "SINGLEPIDDE", + singletrackselector::StoredTOFNSigmaDe, + singletrackselector::StoredTPCNSigmaDe, + + singletrackselector::TOFNSigmaDe, + singletrackselector::TPCNSigmaDe); + +DECLARE_SOA_TABLE(SinglePIDHes, "AOD", "SINGLEPIDHE", + singletrackselector::StoredTOFNSigmaHe, + singletrackselector::StoredTPCNSigmaHe, + + singletrackselector::TOFNSigmaHe, + singletrackselector::TPCNSigmaHe); + +DECLARE_SOA_TABLE(SingleTrkExtras, "AOD", "SINGLETRKEXTRA", + singletrackselector::TPCInnerParam, + singletrackselector::TPCSignal, + singletrackselector::Beta); namespace singletrackselector { @@ -532,6 +472,10 @@ DECLARE_SOA_DYNAMIC_COLUMN(Px_MC, px_MC, [](float p, float eta, float phi) -> fl DECLARE_SOA_DYNAMIC_COLUMN(Py_MC, py_MC, [](float p, float eta, float phi) -> float { return (p / std::cosh(eta)) * std::cos(phi); }); DECLARE_SOA_DYNAMIC_COLUMN(Pz_MC, pz_MC, [](float p, float eta) -> float { return p * std::tanh(eta); }); +// DECLARE_SOA_COLUMN(Vx_MC, vx_MC, float); +// DECLARE_SOA_COLUMN(Vy_MC, vy_MC, float); +// DECLARE_SOA_COLUMN(Vz_MC, vz_MC, float); + } // namespace singletrackselector DECLARE_SOA_TABLE(SingleTrkMCs, "AOD", "SINGLETRKMC", // Table with generatad info from MC @@ -545,6 +489,11 @@ DECLARE_SOA_TABLE(SingleTrkMCs, "AOD", "SINGLETRKMC", // Table with generatad in singletrackselector::Py_MC, singletrackselector::Pz_MC); +// DECLARE_SOA_TABLE(SingleTrkMCExtras, "AOD", "SINGLETRKMCEX", // Table with generatad info from MC +// singletrackselector::Vx_MC, +// singletrackselector::Vy_MC, +// singletrackselector::Vz_MC); + } // namespace o2::aod #endif // PWGCF_FEMTO3D_DATAMODEL_SINGLETRACKSELECTOR_H_ diff --git a/PWGCF/Femto3D/TableProducer/CMakeLists.txt b/PWGCF/Femto3D/TableProducer/CMakeLists.txt index a31ce326c9f..01831d63091 100644 --- a/PWGCF/Femto3D/TableProducer/CMakeLists.txt +++ b/PWGCF/Femto3D/TableProducer/CMakeLists.txt @@ -9,7 +9,7 @@ # granted to it by virtue of its status as an Intergovernmental Organization # or submit itself to any jurisdiction. -add_subdirectory(Converters) +#add_subdirectory(Converters) o2physics_add_dpl_workflow(single-track-selector SOURCES singleTrackSelector.cxx @@ -19,4 +19,9 @@ o2physics_add_dpl_workflow(single-track-selector o2physics_add_dpl_workflow(single-track-selector-extra SOURCES singleTrackSelectorExtra.cxx PUBLIC_LINK_LIBRARIES O2Physics::AnalysisCore + COMPONENT_NAME Analysis) + +o2physics_add_dpl_workflow(single-track-selector-pid-dummy + SOURCES singleTrackSelectorPIDMaker.cxx + PUBLIC_LINK_LIBRARIES O2Physics::AnalysisCore COMPONENT_NAME Analysis) \ No newline at end of file diff --git a/PWGCF/Femto3D/TableProducer/singleTrackSelector.cxx b/PWGCF/Femto3D/TableProducer/singleTrackSelector.cxx index 538daf6cbb2..04638994546 100644 --- a/PWGCF/Femto3D/TableProducer/singleTrackSelector.cxx +++ b/PWGCF/Femto3D/TableProducer/singleTrackSelector.cxx @@ -100,11 +100,16 @@ struct singleTrackSelector { Produces tableRowCollExtra; Produces tableRow; Produces tableRowExtra; + Produces tableRowPIDEl; - Produces tableRowPIDITSPi; - Produces tableRowPIDITSKa; - Produces tableRowPIDITSPr; + Produces tableRowPIDPi; + Produces tableRowPIDKa; + Produces tableRowPIDPr; + Produces tableRowPIDDe; + Produces tableRowPIDHe; + Produces tableRowMC; + // Produces tableRowMCExtra; Filter eventFilter = (applyEvSel.node() == 0) || ((applyEvSel.node() == 1) && (aod::evsel::sel7 == true)) || @@ -237,26 +242,29 @@ struct singleTrackSelector { singletrackselector::packSymmetric(track.dcaZ()), singletrackselector::packInTable(track.tpcChi2NCl()), singletrackselector::packInTable(track.itsChi2NCl()), - singletrackselector::packInTable(track.tpcCrossedRowsOverFindableCls()), - singletrackselector::packSymmetric(track.tofNSigmaPi()), - singletrackselector::packSymmetric(track.tpcNSigmaPi()), - singletrackselector::packSymmetric(track.tofNSigmaKa()), - singletrackselector::packSymmetric(track.tpcNSigmaKa()), - singletrackselector::packSymmetric(track.tofNSigmaPr()), - singletrackselector::packSymmetric(track.tpcNSigmaPr()), - singletrackselector::packSymmetric(track.tofNSigmaDe()), - singletrackselector::packSymmetric(track.tpcNSigmaDe()), - singletrackselector::packSymmetric(track.tofNSigmaHe()), - singletrackselector::packSymmetric(track.tpcNSigmaHe())); + singletrackselector::packInTable(track.tpcCrossedRowsOverFindableCls())); tableRowExtra(track.tpcInnerParam(), track.tpcSignal(), track.beta()); - tableRowPIDEl(singletrackselector::packSymmetric(track.tpcNSigmaEl())); - tableRowPIDITSPi(singletrackselector::packSymmetric(track.itsNSigmaPi())); - tableRowPIDITSKa(singletrackselector::packSymmetric(track.itsNSigmaKa())); - tableRowPIDITSPr(singletrackselector::packSymmetric(track.itsNSigmaPr())); + tableRowPIDEl(singletrackselector::packSymmetric(track.tofNSigmaEl()), + singletrackselector::packSymmetric(track.tpcNSigmaEl())); + + tableRowPIDPi(singletrackselector::packSymmetric(track.tofNSigmaPi()), + singletrackselector::packSymmetric(track.tpcNSigmaPi())); + + tableRowPIDKa(singletrackselector::packSymmetric(track.tofNSigmaKa()), + singletrackselector::packSymmetric(track.tpcNSigmaKa())); + + tableRowPIDPr(singletrackselector::packSymmetric(track.tofNSigmaPr()), + singletrackselector::packSymmetric(track.tpcNSigmaPr())); + + tableRowPIDDe(singletrackselector::packSymmetric(track.tofNSigmaDe()), + singletrackselector::packSymmetric(track.tpcNSigmaDe())); + + tableRowPIDHe(singletrackselector::packSymmetric(track.tofNSigmaHe()), + singletrackselector::packSymmetric(track.tpcNSigmaHe())); if constexpr (isMC) { int origin = -1; @@ -277,6 +285,10 @@ struct singleTrackSelector { track.mcParticle().p(), track.mcParticle().eta(), track.mcParticle().phi()); + + // tableRowMCExtra(track.mcParticle().vx(), + // track.mcParticle().vy(), + // track.mcParticle().vz()); } break; // break the loop with particlesToKeep after the 'if' condition is satisfied -- don't want double entries } @@ -288,10 +300,6 @@ struct singleTrackSelector { aod::BCsWithTimestamps const&) { - auto tracksWithITSPid = soa::Attach(tracks); auto bc = collision.bc_as(); initCCDB(bc); @@ -320,7 +328,7 @@ struct singleTrackSelector { collision.posZ(), d_bz); - fillTrackTables(tracksWithITSPid); + fillTrackTables(tracks); } } PROCESS_SWITCH(singleTrackSelector, processDataRun2, "process data Run2", false); @@ -329,10 +337,7 @@ struct singleTrackSelector { soa::Filtered const& tracks, aod::BCsWithTimestamps const&) { - auto tracksWithITSPid = soa::Attach(tracks); + auto bc = collision.bc_as(); initCCDB(bc); @@ -403,7 +408,7 @@ struct singleTrackSelector { hadronicRate, occupancy); - fillTrackTables(tracksWithITSPid); + fillTrackTables(tracks); } } PROCESS_SWITCH(singleTrackSelector, processDataRun3, "process data Run3", true); @@ -413,10 +418,6 @@ struct singleTrackSelector { aod::McParticles const&, aod::BCsWithTimestamps const&) { - auto tracksWithITSPid = soa::Attach, - aod::pidits::ITSNSigmaPi, - aod::pidits::ITSNSigmaKa, - aod::pidits::ITSNSigmaPr>(tracks); auto bc = collision.bc_as(); initCCDB(bc); @@ -444,7 +445,7 @@ struct singleTrackSelector { collision.posZ(), d_bz); - fillTrackTables(tracksWithITSPid); + fillTrackTables(tracks); } } PROCESS_SWITCH(singleTrackSelector, processMCRun2, "process MC Run2", false); @@ -454,10 +455,7 @@ struct singleTrackSelector { aod::McParticles const& mcParticles, aod::BCsWithTimestamps const&) { - auto tracksWithITSPid = soa::Attach, - aod::pidits::ITSNSigmaPi, - aod::pidits::ITSNSigmaKa, - aod::pidits::ITSNSigmaPr>(tracks); + auto bc = collision.bc_as(); initCCDB(bc); double hadronicRate = 0.; @@ -519,7 +517,7 @@ struct singleTrackSelector { hadronicRate, occupancy); - fillTrackTables(tracksWithITSPid); + fillTrackTables(tracks); if (!enable_gen_info) { return; diff --git a/PWGCF/Femto3D/TableProducer/singleTrackSelectorExtra.cxx b/PWGCF/Femto3D/TableProducer/singleTrackSelectorExtra.cxx index d83568a18a5..0f065371ca8 100644 --- a/PWGCF/Femto3D/TableProducer/singleTrackSelectorExtra.cxx +++ b/PWGCF/Femto3D/TableProducer/singleTrackSelectorExtra.cxx @@ -34,27 +34,13 @@ struct singleTrackSelectorDummy { Produces tableRowCollExtra; - void processDefault(aod::SingleCollSels::iterator const&) + void process(aod::SingleCollSels::iterator const&) { uint64_t selection = 0; tableRowCollExtra(selection, 0.0, 0); } - PROCESS_SWITCH(singleTrackSelectorDummy, processDefault, "filling the CollExtra table with dummy values", true); - - void processExtra_v0(soa::Join::iterator const& collision) - { - uint64_t selection = 0; - selection |= collision.isNoSameBunchPileup() ? BIT(evsel::kNoSameBunchPileup) : 0; - selection |= collision.isGoodZvtxFT0vsPV() ? BIT(evsel::kIsGoodZvtxFT0vsPV) : 0; - selection |= collision.isVertexITSTPC() ? BIT(evsel::kIsVertexITSTPC) : 0; - - tableRowCollExtra(selection, - collision.hadronicRate(), - 0); - } - PROCESS_SWITCH(singleTrackSelectorDummy, processExtra_v0, "process using info from the previous version of stored CollExtra table", false); }; WorkflowSpec defineDataProcessing(ConfigContext const& cfgc) diff --git a/PWGCF/Femto3D/TableProducer/singleTrackSelectorPIDMaker.cxx b/PWGCF/Femto3D/TableProducer/singleTrackSelectorPIDMaker.cxx new file mode 100644 index 00000000000..1c1401d1e6c --- /dev/null +++ b/PWGCF/Femto3D/TableProducer/singleTrackSelectorPIDMaker.cxx @@ -0,0 +1,146 @@ +// Copyright 2019-2020 CERN and copyright holders of ALICE O2. +// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders. +// All rights not expressly granted are reserved. +// +// This software is distributed under the terms of the GNU General Public +// License v3 (GPL Version 3), copied verbatim in the file "COPYING". +// +// In applying this license CERN does not waive the privileges and immunities +// granted to it by virtue of its status as an Intergovernmental Organization +// or submit itself to any jurisdiction. +// +/// \file singleTrackSelectorPIDMaker.cxx +/// \brief creates dummy tables for PID columns that are not in the derived data +/// \author Sofia Tomassini, Gleb Romanenko, Nicolò Jacazio +/// \since 22 January 2025 + +#include +#include + +#include +#include +#include + +#include "PWGCF/Femto3D/DataModel/singletrackselector.h" + +#include "Framework/AnalysisTask.h" +#include "Framework/runDataProcessing.h" + +using namespace o2; +using namespace o2::framework; +using namespace o2::framework::expressions; +using namespace o2::track; +using namespace o2::aod; +//::singletrackselector; // the namespace defined in .h + +struct StPidEl { + Produces table; + void process(o2::aod::SingleTrackSels const& tracks) + { + table.reserve(tracks.size()); + for (int i = 0; i < tracks.size(); i++) { + table(singletrackselector::binning::nsigma::underflowBin, + singletrackselector::binning::nsigma::underflowBin); + } + } +}; +struct StPidPi { + Produces table; + void process(o2::aod::SingleTrackSels const& tracks) + { + table.reserve(tracks.size()); + for (int i = 0; i < tracks.size(); i++) { + table(singletrackselector::binning::nsigma::underflowBin, + singletrackselector::binning::nsigma::underflowBin); + } + } +}; +struct StPidKa { + Produces table; + void process(o2::aod::SingleTrackSels const& tracks) + { + table.reserve(tracks.size()); + for (int i = 0; i < tracks.size(); i++) { + table(singletrackselector::binning::nsigma::underflowBin, + singletrackselector::binning::nsigma::underflowBin); + } + } +}; +struct StPidPr { + Produces table; + void process(o2::aod::SingleTrackSels const& tracks) + { + table.reserve(tracks.size()); + for (int i = 0; i < tracks.size(); i++) { + table(singletrackselector::binning::nsigma::underflowBin, + singletrackselector::binning::nsigma::underflowBin); + } + } +}; +struct StPidDe { + Produces table; + void process(o2::aod::SingleTrackSels const& tracks) + { + table.reserve(tracks.size()); + for (int i = 0; i < tracks.size(); i++) { + table(singletrackselector::binning::nsigma::underflowBin, + singletrackselector::binning::nsigma::underflowBin); + } + } +}; +struct StPidHe { + Produces table; + void process(o2::aod::SingleTrackSels const& tracks) + { + table.reserve(tracks.size()); + for (int i = 0; i < tracks.size(); i++) { + table(singletrackselector::binning::nsigma::underflowBin, + singletrackselector::binning::nsigma::underflowBin); + } + } +}; + +WorkflowSpec defineDataProcessing(ConfigContext const& cfgc) +{ + auto workflow = WorkflowSpec{}; + + // Check if 'aod-metadata-tables' option is available in the config context + if (cfgc.options().hasOption("aod-metadata-tables")) { + const std::vector tables = cfgc.options().get>("aod-metadata-tables"); + + // Map of table names to their corresponding converter task functions + std::unordered_map>> tableToTasks = { + {"O2singlepidel", {[&]() { workflow.push_back(adaptAnalysisTask(cfgc)); }}}, + {"O2singlepidpi", {[&]() { workflow.push_back(adaptAnalysisTask(cfgc)); }}}, + {"O2singlepidka", {[&]() { workflow.push_back(adaptAnalysisTask(cfgc)); }}}, + {"O2singlepidpr", {[&]() { workflow.push_back(adaptAnalysisTask(cfgc)); }}}, + {"O2singlepidde", {[&]() { workflow.push_back(adaptAnalysisTask(cfgc)); }}}, + {"O2singlepidhe", {[&]() { workflow.push_back(adaptAnalysisTask(cfgc)); }}} + + }; + + for (auto const& tableInWorkflow : tables) { + LOG(info) << tableInWorkflow; + } + + // Iterate through the tables and process based on the mapping + for (auto const& table : tableToTasks) { + bool foundIt = false; + for (auto const& tableInWorkflow : tables) { + if (tableInWorkflow == table.first) { + foundIt = true; + break; + } + } + if (foundIt) + continue; + for (auto const& task : table.second) { + LOG(info) << "Adding task " << table.first; + task(); + } + } + } else { + LOG(warning) << "AOD converter: No tables found in the meta data"; + } + return workflow; +} diff --git a/PWGCF/Femto3D/Tasks/femto3dPairTask.cxx b/PWGCF/Femto3D/Tasks/femto3dPairTask.cxx index 045dc9ad2d8..09f407b5dbc 100644 --- a/PWGCF/Femto3D/Tasks/femto3dPairTask.cxx +++ b/PWGCF/Femto3D/Tasks/femto3dPairTask.cxx @@ -118,7 +118,7 @@ struct FemtoCorrelations { std::pair> TOFcuts_2; using FilteredCollisions = soa::Join; - using FilteredTracks = aod::SingleTrackSels; + using FilteredTracks = soa::Join; typedef std::shared_ptr::iterator> trkType; typedef std::shared_ptr::iterator> colType; diff --git a/PWGCF/Femto3D/Tasks/femto3dPairTaskMC.cxx b/PWGCF/Femto3D/Tasks/femto3dPairTaskMC.cxx index 4c095f134df..94b70bb8607 100644 --- a/PWGCF/Femto3D/Tasks/femto3dPairTaskMC.cxx +++ b/PWGCF/Femto3D/Tasks/femto3dPairTaskMC.cxx @@ -100,7 +100,7 @@ struct FemtoCorrelationsMC { std::pair> TOFcuts_2; using FilteredCollisions = soa::Join; - using FilteredTracks = soa::Join; + using FilteredTracks = soa::Join; typedef std::shared_ptr::iterator> trkType; typedef std::shared_ptr::iterator> colType; diff --git a/PWGCF/Femto3D/Tasks/femto3dQA.cxx b/PWGCF/Femto3D/Tasks/femto3dQA.cxx index e544b1bdacb..8b315d4bc98 100644 --- a/PWGCF/Femto3D/Tasks/femto3dQA.cxx +++ b/PWGCF/Femto3D/Tasks/femto3dQA.cxx @@ -28,6 +28,7 @@ #include "Framework/StaticFor.h" #include "PWGCF/Femto3D/DataModel/singletrackselector.h" +#include "PWGCF/Femto3D/Core/femto3dPairTask.h" using namespace o2; using namespace o2::soa; @@ -72,6 +73,8 @@ struct QAHistograms { Configurable> _centCut{"centCut", std::pair{0.f, 100.f}, "[min., max.] centrality range to keep tracks within"}; + Configurable> _dcaBinning{"dcaBinning", std::vector{501, 0.5f, 1}, "setup for variable binning (geometric progression is used): 1st (int) -- N_bins (must be odd, otherwise will be increased by 1); 2nd (float) -- abs value of the edge of axises in histos (-2nd, +2nd); 3d (int) -- desired ratio between w_bin at the edges and at 0;"}; + std::pair> TPCcuts; std::pair> TOFcuts; @@ -92,6 +95,30 @@ struct QAHistograms { TPCcuts = std::make_pair(_particlePDG, _tpcNSigma); TOFcuts = std::make_pair(_particlePDG, _tofNSigma); + int N = _dcaBinning.value[0]; // number of bins -- must be odd otherwise will be increased by 1 + if (N % 2 != 1) { + N += 1; + } + + std::unique_ptr dca_bins; + if (static_cast(_dcaBinning.value[2]) != 1.0) { + dca_bins = calc_var_bins(N + 1, _dcaBinning.value[1], static_cast(_dcaBinning.value[2])); + } else { + dca_bins = calc_const_bins(N, -_dcaBinning.value[1], _dcaBinning.value[1]); + } + auto const_bins_p = calc_const_bins(100, 0., 5.0); + + auto DCA_XY_p = registry.add("dcaxy_to_p", "dcaxy_to_p", kTH2F, {{100, 0., 5.0, "p"}, {501, -0.5, 0.5, "dcaxy"}}); + auto DCA_XY_pt = registry.add("dcaxy_to_pt", "dcaxy_to_pt", kTH2F, {{100, 0., 5.0, "pt"}, {501, -0.5, 0.5, "dcaxy"}}); + + auto DCA_Z_p = registry.add("dcaz_to_p", "dcaz_to_p", kTH2F, {{100, 0., 5.0, "p"}, {501, -0.5, 0.5, "dcaz"}}); + auto DCA_Z_pt = registry.add("dcaz_to_pt", "dcaz_to_pt", kTH2F, {{100, 0., 5.0, "pt"}, {501, -0.5, 0.5, "dcaz"}}); + + DCA_XY_p->SetBins(100, &const_bins_p[0], N, &dca_bins[0]); // set variable bins in Y and Z axis; constant on X + DCA_XY_pt->SetBins(100, &const_bins_p[0], N, &dca_bins[0]); // set variable bins in Y and Z axis; constant on X + DCA_Z_p->SetBins(100, &const_bins_p[0], N, &dca_bins[0]); // set variable bins in Y and Z axis; constant on X + DCA_Z_pt->SetBins(100, &const_bins_p[0], N, &dca_bins[0]); // set variable bins in Y and Z axis; constant on X + registry.add("TPCSignal_nocuts", "TPC signal without cuts", kTH2F, {{{200, 0., 5.0, "#it{p}_{inner} (GeV/#it{c})"}, {1000, 0., 1000.0, "dE/dx in TPC (arbitrary units)"}}}); registry.add("TOFSignal_nocuts", "TOF signal without cuts", kTH2F, {{{200, 0., 5.0, "#it{p} (GeV/#it{c})"}, {100, 0., 1.5, "#beta"}}}); @@ -103,10 +130,6 @@ struct QAHistograms { registry.add("p", "p", kTH1F, {{100, 0., 5., "p"}}); registry.add("pt", "pt", kTH1F, {{100, 0., 5., "pt"}}); registry.add("sign", "sign", kTH1F, {{3, -1.5, 1.5, "sign"}}); - registry.add("dcaxy_to_p", "dcaxy_to_p", kTH2F, {{100, 0., 5.0, "p"}, {501, -0.5, 0.5, "dcaxy"}}); - registry.add("dcaxy_to_pt", "dcaxy_to_pt", kTH2F, {{100, 0., 5., "pt"}, {501, -0.5, 0.5, "dcaxy"}}); - registry.add("dcaz_to_p", "dcaz_to_p", kTH2F, {{100, 0., 5., "p"}, {501, -0.5, 0.5, "dcaz"}}); - registry.add("dcaz_to_pt", "dcaz_to_pt", kTH2F, {{100, 0., 5., "pt"}, {501, -0.5, 0.5, "dcaz"}}); registry.add("TPCClusters", "TPCClusters", kTH1F, {{163, -0.5, 162.5, "NTPCClust"}}); registry.add("TPCCrossedRowsOverFindableCls", "TPCCrossedRowsOverFindableCls", kTH1F, {{100, 0.0, 10.0, "NcrossedRowsOverFindable"}}); registry.add("TPCFractionSharedCls", "TPCFractionSharedCls", kTH1F, {{100, 0.0, 1.0, "TPCsharedFraction"}}); @@ -121,18 +144,22 @@ struct QAHistograms { case 211: registry.add("nsigmaTOFPi", "nsigmaTOFPi", kTH2F, {{100, 0., 5.}, {100, -10., 10.}}); registry.add("nsigmaTPCPi", "nsigmaTPCPi", kTH2F, {{100, 0., 5.}, {100, -10., 10.}}); + registry.add("nsigmaITSPi", "nsigmaITSPi", kTH2F, {{100, 0., 5.}, {100, -10., 10.}}); break; case 321: registry.add("nsigmaTOFKa", "nsigmaTOFKa", kTH2F, {{100, 0., 5.}, {100, -10., 10.}}); registry.add("nsigmaTPCKa", "nsigmaTPCKa", kTH2F, {{100, 0., 5.}, {100, -10., 10.}}); + registry.add("nsigmaITSKa", "nsigmaITSKa", kTH2F, {{100, 0., 5.}, {100, -10., 10.}}); break; case 2212: registry.add("nsigmaTOFPr", "nsigmaTOFPr", kTH2F, {{100, 0., 5.}, {100, -10., 10.}}); registry.add("nsigmaTPCPr", "nsigmaTPCPr", kTH2F, {{100, 0., 5.}, {100, -10., 10.}}); + registry.add("nsigmaITSPr", "nsigmaITSPr", kTH2F, {{100, 0., 5.}, {100, -10., 10.}}); break; case 1000010020: registry.add("nsigmaTOFDe", "nsigmaTOFDe", kTH2F, {{100, 0., 5.}, {100, -10., 10.}}); registry.add("nsigmaTPCDe", "nsigmaTPCDe", kTH2F, {{100, 0., 5.}, {100, -10., 10.}}); + registry.add("nsigmaITSDe", "nsigmaITSDe", kTH2F, {{100, 0., 5.}, {100, -10., 10.}}); break; default: break; @@ -228,18 +255,22 @@ struct QAHistograms { case 211: registry.fill(HIST("nsigmaTOFPi"), track.p(), track.tofNSigmaPi()); registry.fill(HIST("nsigmaTPCPi"), track.p(), track.tpcNSigmaPi()); + registry.fill(HIST("nsigmaITSPi"), track.p(), track.itsNSigmaPi()); break; case 321: registry.fill(HIST("nsigmaTOFKa"), track.p(), track.tofNSigmaKa()); registry.fill(HIST("nsigmaTPCKa"), track.p(), track.tpcNSigmaKa()); + registry.fill(HIST("nsigmaITSKa"), track.p(), track.itsNSigmaKa()); break; case 2212: registry.fill(HIST("nsigmaTOFPr"), track.p(), track.tofNSigmaPr()); registry.fill(HIST("nsigmaTPCPr"), track.p(), track.tpcNSigmaPr()); + registry.fill(HIST("nsigmaITSPr"), track.p(), track.itsNSigmaPr()); break; case 1000010020: registry.fill(HIST("nsigmaTOFDe"), track.p(), track.tofNSigmaDe()); registry.fill(HIST("nsigmaTPCDe"), track.p(), track.tpcNSigmaDe()); + registry.fill(HIST("nsigmaITSDe"), track.p(), track.itsNSigmaDe()); break; default: break; @@ -253,13 +284,13 @@ struct QAHistograms { } } - void processDefault(soa::Filtered> const& collisions, soa::Filtered const& tracks) + void processDefault(soa::Filtered> const& collisions, soa::Filtered> const& tracks) { fillHistograms(collisions, tracks); } PROCESS_SWITCH(QAHistograms, processDefault, "process default", true); - void processExtra(soa::Filtered> const& collisions, soa::Filtered> const& tracks) + void processExtra(soa::Filtered> const& collisions, soa::Filtered> const& tracks) { fillHistograms(collisions, tracks); } diff --git a/PWGLF/Tasks/Nuspex/hadronnucleicorrelation.cxx b/PWGLF/Tasks/Nuspex/hadronnucleicorrelation.cxx index 334c952a105..cb3e5d01bd7 100644 --- a/PWGLF/Tasks/Nuspex/hadronnucleicorrelation.cxx +++ b/PWGLF/Tasks/Nuspex/hadronnucleicorrelation.cxx @@ -97,8 +97,11 @@ struct hadronnucleicorrelation { ConfigurableAxis AxisNSigma{"AxisNSigma", {35, -7.f, 7.f}, "n#sigma"}; using FilteredCollisions = soa::Filtered; - using FilteredTracks = soa::Filtered>; - using FilteredTracksMC = soa::Filtered>; + using FilteredTracks = soa::Filtered>; // old tables (v2) + using FilteredTracksMC = soa::Filtered>; // old tables (v2) + + // using FilteredTracks = soa::Filtered>; // new tables (v3) + // using FilteredTracksMC = soa::Filtered>; // new tables (v3) HistogramRegistry registry{"registry"}; HistogramRegistry QA{"QA"}; @@ -342,8 +345,8 @@ struct hadronnucleicorrelation { o2::aod::singletrackselector::unPack(o2::aod::singletrackselector::storedTpcChi2NCl) <= max_chi2_TPC && o2::aod::singletrackselector::unPack(o2::aod::singletrackselector::storedTpcCrossedRowsOverFindableCls) >= min_TPC_nCrossedRowsOverFindableCls && o2::aod::singletrackselector::unPack(o2::aod::singletrackselector::storedItsChi2NCl) <= max_chi2_ITS && - nabs(o2::aod::singletrackselector::unPack(o2::aod::singletrackselector::storedDcaXY_v2)) <= max_dcaxy && // For now no filtering on the DCAxy or DCAz (casting not supported) - nabs(o2::aod::singletrackselector::unPack(o2::aod::singletrackselector::storedDcaXY_v2)) <= max_dcaz && // For now no filtering on the DCAxy or DCAz (casting not supported) + nabs(o2::aod::singletrackselector::unPack(o2::aod::singletrackselector::storedDcaXY)) <= max_dcaxy && // For now no filtering on the DCAxy or DCAz (casting not supported) + nabs(o2::aod::singletrackselector::unPack(o2::aod::singletrackselector::storedDcaXY)) <= max_dcaz && // For now no filtering on the DCAxy or DCAz (casting not supported) nabs(o2::aod::singletrackselector::eta) <= etacut; template diff --git a/PWGLF/Tasks/Strangeness/k0_mixed_events.cxx b/PWGLF/Tasks/Strangeness/k0_mixed_events.cxx index 90ff4382b41..9aa59d37852 100644 --- a/PWGLF/Tasks/Strangeness/k0_mixed_events.cxx +++ b/PWGLF/Tasks/Strangeness/k0_mixed_events.cxx @@ -44,7 +44,8 @@ using namespace o2::framework; using namespace o2::framework::expressions; using FilteredCollisions = soa::Filtered; -using FilteredTracks = soa::Filtered; +using FilteredTracks = soa::Filtered; // old tables (v2) +// using FilteredTracks = soa::Filtered>; // new tables (v3) typedef std::shared_ptr trkType; typedef std::shared_ptr colType; @@ -151,7 +152,7 @@ struct K0MixedEvents { Filter pFilter = o2::aod::singletrackselector::p > _min_P&& o2::aod::singletrackselector::p < _max_P; Filter etaFilter = nabs(o2::aod::singletrackselector::eta) < _eta; Filter tpcTrkFilter = o2::aod::singletrackselector::tpcNClsFound >= _tpcNClsFound && o2::aod::singletrackselector::tpcNClsShared <= (uint8_t)_tpcNClsShared; - Filter itsNClsFilter = o2::aod::singletrackselector::itsNCls >= (uint8_t)_itsNCls; + // Filter itsNClsFilter = o2::aod::singletrackselector::itsNCls >= (uint8_t)_itsNCls; Filter vertexFilter = nabs(o2::aod::singletrackselector::posZ) < _vertexZ; @@ -282,6 +283,9 @@ struct K0MixedEvents { for (auto track : tracks) { LOG(debug) << "Track index " << track.singleCollSelId(); + if (track.itsNCls() < _itsNCls) { + continue; + } if (track.itsChi2NCl() > _itsChi2NCl) { continue; } From b55919bb5b9aa828c4192c4dc2a195f7b48aa637 Mon Sep 17 00:00:00 2001 From: Gleb Romanenko Date: Fri, 24 Jan 2025 17:47:54 +0100 Subject: [PATCH 2/2] fixing MegaLinter --- PWGCF/Femto3D/Tasks/femto3dPairTask.cxx | 3 +++ PWGCF/Femto3D/Tasks/femto3dPairTaskMC.cxx | 3 +++ PWGCF/Femto3D/Tasks/femto3dQA.cxx | 4 ++++ PWGLF/Tasks/Nuspex/hadronnucleicorrelation.cxx | 4 ++++ 4 files changed, 14 insertions(+) diff --git a/PWGCF/Femto3D/Tasks/femto3dPairTask.cxx b/PWGCF/Femto3D/Tasks/femto3dPairTask.cxx index 09f407b5dbc..fd4f2ac6ae8 100644 --- a/PWGCF/Femto3D/Tasks/femto3dPairTask.cxx +++ b/PWGCF/Femto3D/Tasks/femto3dPairTask.cxx @@ -18,6 +18,9 @@ #include #include #include +#include +#include +#include #include #include diff --git a/PWGCF/Femto3D/Tasks/femto3dPairTaskMC.cxx b/PWGCF/Femto3D/Tasks/femto3dPairTaskMC.cxx index 94b70bb8607..bdd5499bc9e 100644 --- a/PWGCF/Femto3D/Tasks/femto3dPairTaskMC.cxx +++ b/PWGCF/Femto3D/Tasks/femto3dPairTaskMC.cxx @@ -14,6 +14,9 @@ /// \since 31 May 2023 #include +#include +#include +#include #include #include diff --git a/PWGCF/Femto3D/Tasks/femto3dQA.cxx b/PWGCF/Femto3D/Tasks/femto3dQA.cxx index 8b315d4bc98..b860bbf4b36 100644 --- a/PWGCF/Femto3D/Tasks/femto3dQA.cxx +++ b/PWGCF/Femto3D/Tasks/femto3dQA.cxx @@ -13,6 +13,10 @@ /// \author Sofia Tomassini, Gleb Romanenko, Nicolò Jacazio /// \since 31 May 2023 +#include +#include +#include + #include "Framework/runDataProcessing.h" #include "Framework/AnalysisTask.h" #include "Framework/HistogramRegistry.h" diff --git a/PWGLF/Tasks/Nuspex/hadronnucleicorrelation.cxx b/PWGLF/Tasks/Nuspex/hadronnucleicorrelation.cxx index cb3e5d01bd7..e3e426fcad1 100644 --- a/PWGLF/Tasks/Nuspex/hadronnucleicorrelation.cxx +++ b/PWGLF/Tasks/Nuspex/hadronnucleicorrelation.cxx @@ -19,6 +19,10 @@ #include #include #include +#include +#include +#include +#include #include #include #include "TGrid.h"