From fdd6e3ccf30d278a10dd9a3f339f3779814d9201 Mon Sep 17 00:00:00 2001 From: Gyula Bencedi Date: Mon, 21 Jul 2025 18:03:11 +0200 Subject: [PATCH 01/11] Added configuragble for chi2 track selection --- PWGMM/Mult/Tasks/dndetaMFTPbPb.cxx | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/PWGMM/Mult/Tasks/dndetaMFTPbPb.cxx b/PWGMM/Mult/Tasks/dndetaMFTPbPb.cxx index 4cc9a98d524..6506617e3ab 100644 --- a/PWGMM/Mult/Tasks/dndetaMFTPbPb.cxx +++ b/PWGMM/Mult/Tasks/dndetaMFTPbPb.cxx @@ -93,6 +93,7 @@ struct DndetaMFTPbPb { Configurable maxEta{"maxEta", -2.5f, ""}; Configurable minNclusterMft{"minNclusterMft", 5, "minimum number of MFT clusters"}; + Configurable useChi2Cut{"useChi2Cut", false, "use track chi2 cut"}; Configurable maxChi2{"maxChi2", 10.f, ""}; Configurable minPt{"minPt", 0., "minimum pT of the MFT tracks"}; Configurable requireCA{ @@ -762,8 +763,10 @@ struct DndetaMFTPbPb { { if (track.eta() < trackCuts.minEta || track.eta() > trackCuts.maxEta) return false; - if (track.chi2() > trackCuts.maxChi2) - return false; + if (trackCuts.useChi2Cut) { + if (track.chi2() > trackCuts.maxChi2) + return false; + } if (trackCuts.requireCA && !track.isCA()) return false; if (track.nClusters() < trackCuts.minNclusterMft) From 76a9e3e746eaec946e810fbcc01803668afa0cb0 Mon Sep 17 00:00:00 2001 From: Gyula Bencedi Date: Mon, 21 Jul 2025 18:25:43 +0200 Subject: [PATCH 02/11] Update dndetaMFTPbPb.cxx Added configurable axis for track chi2 histograms --- PWGMM/Mult/Tasks/dndetaMFTPbPb.cxx | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/PWGMM/Mult/Tasks/dndetaMFTPbPb.cxx b/PWGMM/Mult/Tasks/dndetaMFTPbPb.cxx index 6506617e3ab..b185fb1387d 100644 --- a/PWGMM/Mult/Tasks/dndetaMFTPbPb.cxx +++ b/PWGMM/Mult/Tasks/dndetaMFTPbPb.cxx @@ -65,6 +65,7 @@ AxisSpec dcaxyAxis = {500, -1, 50}; AxisSpec phiAxis = {629, 0, TwoPI, "Rad", "#phi"}; AxisSpec etaAxis = {20, -4., -2.}; AxisSpec centAxis{100, 0, 100, "centrality"}; +AxisSpec chiSqAxis = {100, 0., 1000.}; struct DndetaMFTPbPb { SliceCache cache; @@ -275,10 +276,10 @@ struct DndetaMFTPbPb { qaregistry.add( {"Tracks/Chi2Eta", "; #chi^{2}; #it{#eta}; occupancy", - {HistType::kTHnSparseF, {{600, 0, 20}, etaAxis, occupancyAxis}}}); + {HistType::kTHnSparseF, {chiSqAxis, etaAxis, occupancyAxis}}}); qaregistry.add({"Tracks/Chi2", "; #chi^{2};", - {HistType::kTH2F, {{600, 0, 20}, occupancyAxis}}}); + {HistType::kTH2F, {chiSqAxis, occupancyAxis}}}); qaregistry.add( {"Tracks/NclustersEta", "; nClusters; #eta; occupancy", @@ -376,11 +377,11 @@ struct DndetaMFTPbPb { {"Tracks/Centrality/Chi2Eta", "; #chi^{2}; #it{#eta}; centrality; occupancy", {HistType::kTHnSparseF, - {{600, 0, 20}, etaAxis, centralityAxis, occupancyAxis}}}); + {chiSqAxis, etaAxis, centralityAxis, occupancyAxis}}}); qaregistry.add({"Tracks/Centrality/Chi2", "; #chi^{2}; centrality; occupancy", {HistType::kTHnSparseF, - {{600, 0, 20}, centralityAxis, occupancyAxis}}}); + {chiSqAxis, centralityAxis, occupancyAxis}}}); qaregistry.add({"Tracks/Centrality/NclustersEta", "; nClusters; #eta; centrality; occupancy", {HistType::kTHnSparseF, From 5f994cfd0b468666e652fbaa1822e55c59c423cd Mon Sep 17 00:00:00 2001 From: Gyula Bencedi Date: Tue, 22 Jul 2025 11:47:50 +0200 Subject: [PATCH 03/11] Update dndetaMFTPbPb.cxx Add condition for IR histogram filling --- PWGMM/Mult/Tasks/dndetaMFTPbPb.cxx | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/PWGMM/Mult/Tasks/dndetaMFTPbPb.cxx b/PWGMM/Mult/Tasks/dndetaMFTPbPb.cxx index b185fb1387d..cf66c2f5550 100644 --- a/PWGMM/Mult/Tasks/dndetaMFTPbPb.cxx +++ b/PWGMM/Mult/Tasks/dndetaMFTPbPb.cxx @@ -1113,10 +1113,6 @@ struct DndetaMFTPbPb { { auto occ = getOccupancy(collision, eventCuts.occupancyEstimator); float c = getRecoCent(collision); - auto bc = collision.template foundBC_as(); - double ir = rateFetcher.fetch(ccdb.service, bc.timestamp(), bc.runNumber(), - "ZNC hadronic") * - 1.e-3; if constexpr (has_reco_cent) { registry.fill(HIST("Events/Centrality/Selection"), 1., c, occ); @@ -1128,6 +1124,8 @@ struct DndetaMFTPbPb { return; } if (eventCuts.cfgSelInteractionRate) { + auto bc = collision.template foundBC_as(); + double ir = rateFetcher.fetch(ccdb.service, bc.timestamp(), bc.runNumber(),"ZNC hadronic") * 1.e-3; if (!isIRSelected(bc, true)) { return; } @@ -1138,10 +1136,14 @@ struct DndetaMFTPbPb { registry.fill(HIST("Events/Centrality/Selection"), 2., c, occ); qaregistry.fill(HIST("Events/Centrality/hZvtxCent"), z, c, occ); qaregistry.fill(HIST("Events/Centrality/hCent"), c, occ); - qaregistry.fill(HIST("hCentOccIRate"), c, occ, ir); + if (eventCuts.cfgSelInteractionRate) { + qaregistry.fill(HIST("hCentOccIRate"), c, occ, ir); + } } else { - qaregistry.fill(HIST("hOccIRate"), occ, ir); + if (eventCuts.cfgSelInteractionRate) { + qaregistry.fill(HIST("hOccIRate"), occ, ir); + } registry.fill(HIST("Events/Selection"), 2., occ); } @@ -1164,10 +1166,6 @@ struct DndetaMFTPbPb { { auto occ = getOccupancy(collision, eventCuts.occupancyEstimator); float c = getRecoCent(collision); - auto bc = collision.template foundBC_as(); - double ir = rateFetcher.fetch(ccdb.service, bc.timestamp(), bc.runNumber(), - "ZNC hadronic") * - 1.e-3; if constexpr (has_reco_cent) { registry.fill(HIST("Events/Centrality/Selection"), 1., c, occ); @@ -1179,6 +1177,8 @@ struct DndetaMFTPbPb { return; } if (eventCuts.cfgSelInteractionRate) { + auto bc = collision.template foundBC_as(); + double ir = rateFetcher.fetch(ccdb.service, bc.timestamp(), bc.runNumber(), "ZNC hadronic") * 1.e-3; if (!isIRSelected(bc, true)) { return; } @@ -1187,10 +1187,14 @@ struct DndetaMFTPbPb { auto z = collision.posZ(); if constexpr (has_reco_cent) { registry.fill(HIST("Events/Centrality/Selection"), 2., c, occ); - qaregistry.fill(HIST("hCentOccIRate"), c, occ, ir); + if (eventCuts.cfgSelInteractionRate) { + qaregistry.fill(HIST("hCentOccIRate"), c, occ, ir); + } } else { registry.fill(HIST("Events/Selection"), 2., occ); - qaregistry.fill(HIST("hOccIRate"), occ, ir); + if (eventCuts.cfgSelInteractionRate) { + qaregistry.fill(HIST("hOccIRate"), occ, ir); + } } auto nBestTrks = countBestTracks(tracks, besttracks, z, c, occ); From da07d4cae0b7f39324666d9534820f0ea5ebc8e8 Mon Sep 17 00:00:00 2001 From: ALICE Action Bot Date: Tue, 22 Jul 2025 09:48:21 +0000 Subject: [PATCH 04/11] Please consider the following formatting changes --- PWGMM/Mult/Tasks/dndetaMFTPbPb.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PWGMM/Mult/Tasks/dndetaMFTPbPb.cxx b/PWGMM/Mult/Tasks/dndetaMFTPbPb.cxx index cf66c2f5550..23ec9442380 100644 --- a/PWGMM/Mult/Tasks/dndetaMFTPbPb.cxx +++ b/PWGMM/Mult/Tasks/dndetaMFTPbPb.cxx @@ -1125,7 +1125,7 @@ struct DndetaMFTPbPb { } if (eventCuts.cfgSelInteractionRate) { auto bc = collision.template foundBC_as(); - double ir = rateFetcher.fetch(ccdb.service, bc.timestamp(), bc.runNumber(),"ZNC hadronic") * 1.e-3; + double ir = rateFetcher.fetch(ccdb.service, bc.timestamp(), bc.runNumber(), "ZNC hadronic") * 1.e-3; if (!isIRSelected(bc, true)) { return; } From f266e8481bc33c812296896326ab297ffebdbb44 Mon Sep 17 00:00:00 2001 From: Gyula Bencedi Date: Tue, 22 Jul 2025 13:00:28 +0200 Subject: [PATCH 05/11] Update dndetaMFTPbPb.cxx --- PWGMM/Mult/Tasks/dndetaMFTPbPb.cxx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/PWGMM/Mult/Tasks/dndetaMFTPbPb.cxx b/PWGMM/Mult/Tasks/dndetaMFTPbPb.cxx index 23ec9442380..01f01fe79f7 100644 --- a/PWGMM/Mult/Tasks/dndetaMFTPbPb.cxx +++ b/PWGMM/Mult/Tasks/dndetaMFTPbPb.cxx @@ -1113,6 +1113,8 @@ struct DndetaMFTPbPb { { auto occ = getOccupancy(collision, eventCuts.occupancyEstimator); float c = getRecoCent(collision); + auto bc = collision.template foundBC_as(); + double ir = rateFetcher.fetch(ccdb.service, bc.timestamp(), bc.runNumber(), "ZNC hadronic") * 1.e-3; if constexpr (has_reco_cent) { registry.fill(HIST("Events/Centrality/Selection"), 1., c, occ); @@ -1124,8 +1126,6 @@ struct DndetaMFTPbPb { return; } if (eventCuts.cfgSelInteractionRate) { - auto bc = collision.template foundBC_as(); - double ir = rateFetcher.fetch(ccdb.service, bc.timestamp(), bc.runNumber(), "ZNC hadronic") * 1.e-3; if (!isIRSelected(bc, true)) { return; } @@ -1166,6 +1166,8 @@ struct DndetaMFTPbPb { { auto occ = getOccupancy(collision, eventCuts.occupancyEstimator); float c = getRecoCent(collision); + auto bc = collision.template foundBC_as(); + double ir = rateFetcher.fetch(ccdb.service, bc.timestamp(), bc.runNumber(), "ZNC hadronic") * 1.e-3; if constexpr (has_reco_cent) { registry.fill(HIST("Events/Centrality/Selection"), 1., c, occ); @@ -1177,8 +1179,6 @@ struct DndetaMFTPbPb { return; } if (eventCuts.cfgSelInteractionRate) { - auto bc = collision.template foundBC_as(); - double ir = rateFetcher.fetch(ccdb.service, bc.timestamp(), bc.runNumber(), "ZNC hadronic") * 1.e-3; if (!isIRSelected(bc, true)) { return; } From c6030de826a7a92a509adadccb9891bda44c95a2 Mon Sep 17 00:00:00 2001 From: Gyula Bencedi Date: Tue, 22 Jul 2025 13:49:04 +0200 Subject: [PATCH 06/11] Update dndetaMFTPbPb.cxx Modified interaction rate checks --- PWGMM/Mult/Tasks/dndetaMFTPbPb.cxx | 147 +++++++++++++---------------- 1 file changed, 63 insertions(+), 84 deletions(-) diff --git a/PWGMM/Mult/Tasks/dndetaMFTPbPb.cxx b/PWGMM/Mult/Tasks/dndetaMFTPbPb.cxx index 01f01fe79f7..4feeb7aae09 100644 --- a/PWGMM/Mult/Tasks/dndetaMFTPbPb.cxx +++ b/PWGMM/Mult/Tasks/dndetaMFTPbPb.cxx @@ -84,6 +84,10 @@ struct DndetaMFTPbPb { false, true}; + Configurable cfgDoIR{"cfgDoIR", false, "Flag to retrieve Interaction rate from CCDB"}; + Configurable cfgIRCrashOnNull{"cfgIRCrashOnNull", false, "Flag to avoid CTP RateFetcher crash"}; + Configurable cfgIRSource{"cfgIRSource", "T0VTX", "Estimator of the interaction rate (Pb-Pb: ZNC hadronic)"}; + struct : ConfigurableGroup { Configurable usephiCut{"usephiCut", false, "use azimuthal angle cut"}; Configurable phiCut{"phiCut", 0.1f, @@ -129,7 +133,6 @@ struct DndetaMFTPbPb { "minOccupancy", -1, "minimum occupancy from neighbouring collisions"}; Configurable maxOccupancy{ "maxOccupancy", -1, "maximum occupancy from neighbouring collisions"}; - Configurable cfgSelInteractionRate{"cfgSelInteractionRate", false, " Get Interaction rate from CCDB"}; Configurable minIR{"minIR", -1, "minimum IR (kHz) collisions"}; Configurable maxIR{"maxIR", -1, "maximum IR (kHz) collisions"}; } eventCuts; @@ -259,8 +262,10 @@ struct DndetaMFTPbPb { x->SetBinLabel(1, "All"); x->SetBinLabel(2, "Selected"); - qaregistry.add("hOccIRate", "hOccIRate", HistType::kTH2F, - {occupancyAxis, irBins}); + if (cfgDoIR) { + qaregistry.add("hOccIRate", "hOccIRate", HistType::kTH2F, + {occupancyAxis, irBins}); + } registry.add({"Events/NtrkZvtx", "; N_{trk}; Z_{vtx} (cm); occupancy", @@ -345,8 +350,10 @@ struct DndetaMFTPbPb { hstat->GetAxis(0)->SetBinLabel(1, "All"); hstat->GetAxis(0)->SetBinLabel(2, "Selected"); - qaregistry.add("hCentOccIRate", "hCentOccIRate", HistType::kTHnSparseF, - {centralityAxis, occupancyAxis, irBins}); + if (cfgDoIR) { + qaregistry.add("hCentOccIRate", "hCentOccIRate", HistType::kTHnSparseF, + {centralityAxis, occupancyAxis, irBins}); + } qaregistry.add({"Events/Centrality/hCent", "; centrality; occupancy", @@ -714,7 +721,6 @@ struct DndetaMFTPbPb { /// Joined tables using FullBCs = soa::Join; - using CollBCs = soa::Join; using Colls = soa::Join; using Coll = Colls::iterator; using CollsCentFT0C = soa::Join; @@ -737,28 +743,6 @@ struct DndetaMFTPbPb { using FiltBestTracks = soa::Filtered; using FiltParticles = soa::Filtered; - bool isIRSelected(CollBCs::iterator const& bc, bool fillHis = false) - { - double ir = (eventCuts.minIR >= 0 || eventCuts.maxIR >= 0) - ? rateFetcher.fetch(ccdb.service, bc.timestamp(), - bc.runNumber(), "ZNC hadronic") * - 1.e-3 - : -1; - if (eventCuts.minIR >= 0 && ir < eventCuts.minIR) { - return false; - } - if (fillHis) { - registry.fill(HIST("hEvtSel"), 13); - } - if (eventCuts.maxIR >= 0 && ir > eventCuts.maxIR) { - return false; - } - if (fillHis) { - registry.fill(HIST("hEvtSel"), 14); - } - return true; - } - template bool isTrackSelected(const T& track) { @@ -1016,6 +1000,19 @@ struct DndetaMFTPbPb { if constexpr (fillHis) { registry.fill(HIST("hEvtSel"), 12); } + double ir = (eventCuts.minIR >= 0 || eventCuts.maxIR >= 0) ? rateFetcher.fetch(ccdb.service, collision.timestamp(), collision.runNumber(), cfgIRSource, cfgIRCrashOnNull) * 1.e-3 : -1; + if (eventCuts.minIR >= 0 && ir < eventCuts.minIR) { + return false; + } + if (fillHis) { + registry.fill(HIST("hEvtSel"), 13); + } + if (eventCuts.maxIR >= 0 && ir > eventCuts.maxIR) { + return false; + } + if (fillHis) { + registry.fill(HIST("hEvtSel"), 14); + } return true; } @@ -1109,13 +1106,14 @@ struct DndetaMFTPbPb { /// @brief process function for counting tracks template void processData(typename C::iterator const& collision, - FiltMftTracks const& tracks, CollBCs const& /*bcs*/) + FiltMftTracks const& tracks) { auto occ = getOccupancy(collision, eventCuts.occupancyEstimator); float c = getRecoCent(collision); - auto bc = collision.template foundBC_as(); - double ir = rateFetcher.fetch(ccdb.service, bc.timestamp(), bc.runNumber(), "ZNC hadronic") * 1.e-3; - + float ir = -1; + if (cfgDoIR) { + ir = rateFetcher.fetch(ccdb.service, coll.timestamp(), coll.runNumber(), cfgIRSource, cfgIRCrashOnNull) * 1.e-3; + } if constexpr (has_reco_cent) { registry.fill(HIST("Events/Centrality/Selection"), 1., c, occ); } else { @@ -1125,23 +1123,17 @@ struct DndetaMFTPbPb { if (!isGoodEvent(collision)) { return; } - if (eventCuts.cfgSelInteractionRate) { - if (!isIRSelected(bc, true)) { - return; - } - } auto z = collision.posZ(); if constexpr (has_reco_cent) { registry.fill(HIST("Events/Centrality/Selection"), 2., c, occ); qaregistry.fill(HIST("Events/Centrality/hZvtxCent"), z, c, occ); qaregistry.fill(HIST("Events/Centrality/hCent"), c, occ); - if (eventCuts.cfgSelInteractionRate) { + if (cfgDoIR) { qaregistry.fill(HIST("hCentOccIRate"), c, occ, ir); } - } else { - if (eventCuts.cfgSelInteractionRate) { + if (cfgDoIR) { qaregistry.fill(HIST("hOccIRate"), occ, ir); } registry.fill(HIST("Events/Selection"), 2., occ); @@ -1161,14 +1153,14 @@ struct DndetaMFTPbPb { template void processDatawBestTracks( typename C::iterator const& collision, FiltMftTracks const& tracks, - soa::SmallGroups const& besttracks, - CollBCs const& /*bcs*/) + soa::SmallGroups const& besttracks) { auto occ = getOccupancy(collision, eventCuts.occupancyEstimator); float c = getRecoCent(collision); - auto bc = collision.template foundBC_as(); - double ir = rateFetcher.fetch(ccdb.service, bc.timestamp(), bc.runNumber(), "ZNC hadronic") * 1.e-3; - + float ir = -1; + if (cfgDoIR) { + ir = rateFetcher.fetch(ccdb.service, coll.timestamp(), coll.runNumber(), cfgIRSource, cfgIRCrashOnNull) * 1.e-3; + } if constexpr (has_reco_cent) { registry.fill(HIST("Events/Centrality/Selection"), 1., c, occ); } else { @@ -1178,21 +1170,16 @@ struct DndetaMFTPbPb { if (!isGoodEvent(collision)) { return; } - if (eventCuts.cfgSelInteractionRate) { - if (!isIRSelected(bc, true)) { - return; - } - } auto z = collision.posZ(); if constexpr (has_reco_cent) { registry.fill(HIST("Events/Centrality/Selection"), 2., c, occ); - if (eventCuts.cfgSelInteractionRate) { + if (cfgDoIR) { qaregistry.fill(HIST("hCentOccIRate"), c, occ, ir); } } else { registry.fill(HIST("Events/Selection"), 2., occ); - if (eventCuts.cfgSelInteractionRate) { + if (cfgDoIR) { qaregistry.fill(HIST("hOccIRate"), occ, ir); } } @@ -1208,18 +1195,18 @@ struct DndetaMFTPbPb { } void processDataInclusive(Colls::iterator const& collision, - FiltMftTracks const& tracks, CollBCs const& bcs) + FiltMftTracks const& tracks) { - processData(collision, tracks, bcs); + processData(collision, tracks); } PROCESS_SWITCH(DndetaMFTPbPb, processDataInclusive, "Count tracks (inclusive)", false); void processDataCentFT0C(CollsCentFT0C::iterator const& collision, - FiltMftTracks const& tracks, CollBCs const& bcs) + FiltMftTracks const& tracks) { - processData(collision, tracks, bcs); + processData(collision, tracks); } PROCESS_SWITCH(DndetaMFTPbPb, processDataCentFT0C, @@ -1227,36 +1214,36 @@ struct DndetaMFTPbPb { void processDataCentFT0CVariant1(CollsCentFT0CVariant1::iterator const& collision, - FiltMftTracks const& tracks, CollBCs const& bcs) + FiltMftTracks const& tracks) { - processData(collision, tracks, bcs); + processData(collision, tracks); } PROCESS_SWITCH(DndetaMFTPbPb, processDataCentFT0CVariant1, "Count tracks in FT0CVariant1 centrality bins", false); void processDataCentFT0M(CollsCentFT0M::iterator const& collision, - FiltMftTracks const& tracks, CollBCs const& bcs) + FiltMftTracks const& tracks) { - processData(collision, tracks, bcs); + processData(collision, tracks); } PROCESS_SWITCH(DndetaMFTPbPb, processDataCentFT0M, "Count tracks in FT0M centrality bins", false); void processDataCentNGlobal(CollsCentNGlobal::iterator const& collision, - FiltMftTracks const& tracks, CollBCs const& bcs) + FiltMftTracks const& tracks) { - processData(collision, tracks, bcs); + processData(collision, tracks); } PROCESS_SWITCH(DndetaMFTPbPb, processDataCentNGlobal, "Count tracks in NGlobal centrality bins", false); void processDataCentMFT(CollsCentMFT::iterator const& collision, - FiltMftTracks const& tracks, CollBCs const& bcs) + FiltMftTracks const& tracks) { - processData(collision, tracks, bcs); + processData(collision, tracks); } PROCESS_SWITCH(DndetaMFTPbPb, processDataCentMFT, @@ -1264,10 +1251,9 @@ struct DndetaMFTPbPb { void processDatawBestTracksInclusive( Colls::iterator const& collision, FiltMftTracks const& tracks, - soa::SmallGroups const& besttracks, - CollBCs const& bcs) + soa::SmallGroups const& besttracks) { - processDatawBestTracks(collision, tracks, besttracks, bcs); + processDatawBestTracks(collision, tracks, besttracks); } PROCESS_SWITCH(DndetaMFTPbPb, processDatawBestTracksInclusive, @@ -1276,10 +1262,9 @@ struct DndetaMFTPbPb { void processDatawBestTracksCentFT0C( CollsCentFT0C::iterator const& collision, FiltMftTracks const& tracks, - soa::SmallGroups const& besttracks, - CollBCs const& bcs) + soa::SmallGroups const& besttracks) { - processDatawBestTracks(collision, tracks, besttracks, bcs); + processDatawBestTracks(collision, tracks, besttracks); } PROCESS_SWITCH(DndetaMFTPbPb, processDatawBestTracksCentFT0C, @@ -1289,11 +1274,9 @@ struct DndetaMFTPbPb { void processDatawBestTracksCentFT0CVariant1( CollsCentFT0CVariant1::iterator const& collision, FiltMftTracks const& tracks, - soa::SmallGroups const& besttracks, - CollBCs const& bcs) + soa::SmallGroups const& besttracks) { - processDatawBestTracks(collision, tracks, besttracks, - bcs); + processDatawBestTracks(collision, tracks, besttracks); } PROCESS_SWITCH(DndetaMFTPbPb, processDatawBestTracksCentFT0CVariant1, @@ -1303,10 +1286,9 @@ struct DndetaMFTPbPb { void processDatawBestTracksCentFT0M( CollsCentFT0M::iterator const& collision, FiltMftTracks const& tracks, - soa::SmallGroups const& besttracks, - CollBCs const& bcs) + soa::SmallGroups const& besttracks) { - processDatawBestTracks(collision, tracks, besttracks, bcs); + processDatawBestTracks(collision, tracks, besttracks); } PROCESS_SWITCH(DndetaMFTPbPb, processDatawBestTracksCentFT0M, @@ -1315,11 +1297,9 @@ struct DndetaMFTPbPb { void processDatawBestTracksCentNGlobal( CollsCentNGlobal::iterator const& collision, FiltMftTracks const& tracks, - soa::SmallGroups const& besttracks, - CollBCs const& bcs) + soa::SmallGroups const& besttracks) { - processDatawBestTracks(collision, tracks, besttracks, - bcs); + processDatawBestTracks(collision, tracks, besttracks); } PROCESS_SWITCH(DndetaMFTPbPb, processDatawBestTracksCentNGlobal, @@ -1329,10 +1309,9 @@ struct DndetaMFTPbPb { void processDatawBestTracksCentMFT( CollsCentMFT::iterator const& collision, FiltMftTracks const& tracks, - soa::SmallGroups const& besttracks, - CollBCs const& bcs) + soa::SmallGroups const& besttracks) { - processDatawBestTracks(collision, tracks, besttracks, bcs); + processDatawBestTracks(collision, tracks, besttracks); } PROCESS_SWITCH(DndetaMFTPbPb, processDatawBestTracksCentMFT, From 8daae289e0daf09c6c3d4c419d01e798d80c6490 Mon Sep 17 00:00:00 2001 From: Gyula Bencedi Date: Tue, 22 Jul 2025 14:45:29 +0200 Subject: [PATCH 07/11] Update dndetaMFTPbPb.cxx Modified ratefetcher calling --- PWGMM/Mult/Tasks/dndetaMFTPbPb.cxx | 59 ++++++++++++++++-------------- 1 file changed, 31 insertions(+), 28 deletions(-) diff --git a/PWGMM/Mult/Tasks/dndetaMFTPbPb.cxx b/PWGMM/Mult/Tasks/dndetaMFTPbPb.cxx index 4feeb7aae09..a0ec2c5f2e0 100644 --- a/PWGMM/Mult/Tasks/dndetaMFTPbPb.cxx +++ b/PWGMM/Mult/Tasks/dndetaMFTPbPb.cxx @@ -721,6 +721,7 @@ struct DndetaMFTPbPb { /// Joined tables using FullBCs = soa::Join; + using CollBCs = soa::Join; using Colls = soa::Join; using Coll = Colls::iterator; using CollsCentFT0C = soa::Join; @@ -1106,13 +1107,14 @@ struct DndetaMFTPbPb { /// @brief process function for counting tracks template void processData(typename C::iterator const& collision, - FiltMftTracks const& tracks) + FiltMftTracks const& tracks, CollBCs const& /*bcs*/) { auto occ = getOccupancy(collision, eventCuts.occupancyEstimator); float c = getRecoCent(collision); + auto bc = collision.template foundBC_as(); float ir = -1; if (cfgDoIR) { - ir = rateFetcher.fetch(ccdb.service, coll.timestamp(), coll.runNumber(), cfgIRSource, cfgIRCrashOnNull) * 1.e-3; + ir = rateFetcher.fetch(ccdb.service, bc.timestamp(), bc.runNumber(), cfgIRSource, cfgIRCrashOnNull) * 1.e-3; } if constexpr (has_reco_cent) { registry.fill(HIST("Events/Centrality/Selection"), 1., c, occ); @@ -1153,13 +1155,14 @@ struct DndetaMFTPbPb { template void processDatawBestTracks( typename C::iterator const& collision, FiltMftTracks const& tracks, - soa::SmallGroups const& besttracks) + soa::SmallGroups const& besttracks, CollBCs const& /*bcs*/) { auto occ = getOccupancy(collision, eventCuts.occupancyEstimator); float c = getRecoCent(collision); + auto bc = collision.template foundBC_as(); float ir = -1; if (cfgDoIR) { - ir = rateFetcher.fetch(ccdb.service, coll.timestamp(), coll.runNumber(), cfgIRSource, cfgIRCrashOnNull) * 1.e-3; + ir = rateFetcher.fetch(ccdb.service, bc.timestamp(), bc.runNumber(), cfgIRSource, cfgIRCrashOnNull) * 1.e-3; } if constexpr (has_reco_cent) { registry.fill(HIST("Events/Centrality/Selection"), 1., c, occ); @@ -1195,18 +1198,18 @@ struct DndetaMFTPbPb { } void processDataInclusive(Colls::iterator const& collision, - FiltMftTracks const& tracks) + FiltMftTracks const& tracks, CollBCs const& bcs) { - processData(collision, tracks); + processData(collision, tracks, bcs); } PROCESS_SWITCH(DndetaMFTPbPb, processDataInclusive, "Count tracks (inclusive)", false); void processDataCentFT0C(CollsCentFT0C::iterator const& collision, - FiltMftTracks const& tracks) + FiltMftTracks const& tracks, CollBCs const& bcs) { - processData(collision, tracks); + processData(collision, tracks, bcs); } PROCESS_SWITCH(DndetaMFTPbPb, processDataCentFT0C, @@ -1214,36 +1217,36 @@ struct DndetaMFTPbPb { void processDataCentFT0CVariant1(CollsCentFT0CVariant1::iterator const& collision, - FiltMftTracks const& tracks) + FiltMftTracks const& tracks, CollBCs const& bcs) { - processData(collision, tracks); + processData(collision, tracks, bcs); } PROCESS_SWITCH(DndetaMFTPbPb, processDataCentFT0CVariant1, "Count tracks in FT0CVariant1 centrality bins", false); void processDataCentFT0M(CollsCentFT0M::iterator const& collision, - FiltMftTracks const& tracks) + FiltMftTracks const& tracks, CollBCs const& bcs) { - processData(collision, tracks); + processData(collision, tracks, bcs); } PROCESS_SWITCH(DndetaMFTPbPb, processDataCentFT0M, "Count tracks in FT0M centrality bins", false); void processDataCentNGlobal(CollsCentNGlobal::iterator const& collision, - FiltMftTracks const& tracks) + FiltMftTracks const& tracks, CollBCs const& bcs) { - processData(collision, tracks); + processData(collision, tracks, bcs); } PROCESS_SWITCH(DndetaMFTPbPb, processDataCentNGlobal, "Count tracks in NGlobal centrality bins", false); void processDataCentMFT(CollsCentMFT::iterator const& collision, - FiltMftTracks const& tracks) + FiltMftTracks const& tracks, CollBCs const& bcs) { - processData(collision, tracks); + processData(collision, tracks, bcs); } PROCESS_SWITCH(DndetaMFTPbPb, processDataCentMFT, @@ -1251,9 +1254,9 @@ struct DndetaMFTPbPb { void processDatawBestTracksInclusive( Colls::iterator const& collision, FiltMftTracks const& tracks, - soa::SmallGroups const& besttracks) + soa::SmallGroups const& besttracks, CollBCs const& bcs) { - processDatawBestTracks(collision, tracks, besttracks); + processDatawBestTracks(collision, tracks, besttracks, bcs); } PROCESS_SWITCH(DndetaMFTPbPb, processDatawBestTracksInclusive, @@ -1262,9 +1265,9 @@ struct DndetaMFTPbPb { void processDatawBestTracksCentFT0C( CollsCentFT0C::iterator const& collision, FiltMftTracks const& tracks, - soa::SmallGroups const& besttracks) + soa::SmallGroups const& besttracks, CollBCs const& bcs) { - processDatawBestTracks(collision, tracks, besttracks); + processDatawBestTracks(collision, tracks, besttracks, bcs); } PROCESS_SWITCH(DndetaMFTPbPb, processDatawBestTracksCentFT0C, @@ -1274,9 +1277,9 @@ struct DndetaMFTPbPb { void processDatawBestTracksCentFT0CVariant1( CollsCentFT0CVariant1::iterator const& collision, FiltMftTracks const& tracks, - soa::SmallGroups const& besttracks) + soa::SmallGroups const& besttracks, CollBCs const& bcs) { - processDatawBestTracks(collision, tracks, besttracks); + processDatawBestTracks(collision, tracks, besttracks, bcs); } PROCESS_SWITCH(DndetaMFTPbPb, processDatawBestTracksCentFT0CVariant1, @@ -1286,9 +1289,9 @@ struct DndetaMFTPbPb { void processDatawBestTracksCentFT0M( CollsCentFT0M::iterator const& collision, FiltMftTracks const& tracks, - soa::SmallGroups const& besttracks) + soa::SmallGroups const& besttracks, CollBCs const& bcs) { - processDatawBestTracks(collision, tracks, besttracks); + processDatawBestTracks(collision, tracks, besttracks, bcs); } PROCESS_SWITCH(DndetaMFTPbPb, processDatawBestTracksCentFT0M, @@ -1297,9 +1300,9 @@ struct DndetaMFTPbPb { void processDatawBestTracksCentNGlobal( CollsCentNGlobal::iterator const& collision, FiltMftTracks const& tracks, - soa::SmallGroups const& besttracks) + soa::SmallGroups const& besttracks, CollBCs const& bcs) { - processDatawBestTracks(collision, tracks, besttracks); + processDatawBestTracks(collision, tracks, besttracks, bcs); } PROCESS_SWITCH(DndetaMFTPbPb, processDatawBestTracksCentNGlobal, @@ -1309,9 +1312,9 @@ struct DndetaMFTPbPb { void processDatawBestTracksCentMFT( CollsCentMFT::iterator const& collision, FiltMftTracks const& tracks, - soa::SmallGroups const& besttracks) + soa::SmallGroups const& besttracks, CollBCs const& bcs) { - processDatawBestTracks(collision, tracks, besttracks); + processDatawBestTracks(collision, tracks, besttracks, bcs); } PROCESS_SWITCH(DndetaMFTPbPb, processDatawBestTracksCentMFT, From 00d60fd06e432e5d03e0a159db60e3b2cbbcda95 Mon Sep 17 00:00:00 2001 From: Gyula Bencedi Date: Wed, 23 Jul 2025 11:36:16 +0200 Subject: [PATCH 08/11] Update dndetaMFTPbPb.cxx Modified method for cutting on interaction rate --- PWGMM/Mult/Tasks/dndetaMFTPbPb.cxx | 92 +++++++++++++++--------------- 1 file changed, 46 insertions(+), 46 deletions(-) diff --git a/PWGMM/Mult/Tasks/dndetaMFTPbPb.cxx b/PWGMM/Mult/Tasks/dndetaMFTPbPb.cxx index a0ec2c5f2e0..6e769c19e16 100644 --- a/PWGMM/Mult/Tasks/dndetaMFTPbPb.cxx +++ b/PWGMM/Mult/Tasks/dndetaMFTPbPb.cxx @@ -85,6 +85,7 @@ struct DndetaMFTPbPb { true}; Configurable cfgDoIR{"cfgDoIR", false, "Flag to retrieve Interaction rate from CCDB"}; + Configurable cfgUseIRCut{"cfgUseIRCut", false, "Flag to cut on IR rate"}; Configurable cfgIRCrashOnNull{"cfgIRCrashOnNull", false, "Flag to avoid CTP RateFetcher crash"}; Configurable cfgIRSource{"cfgIRSource", "T0VTX", "Estimator of the interaction rate (Pb-Pb: ZNC hadronic)"}; @@ -159,7 +160,13 @@ struct DndetaMFTPbPb { "latest acceptable timestamp of creation for the object"}; Configurable ccdbUrl{"ccdbUrl", "http://alice-ccdb.cern.ch", "url of the ccdb repository"}; + + int mRunNumber{-1}; + uint64_t mSOR{0}; + double mMinSeconds{-1.}; + std::unordered_map gHadronicRate; ctpRateFetcher rateFetcher; + TH2* gCurrentHadronicRate; /// @brief init function, definition of histograms void init(InitContext&) @@ -226,7 +233,7 @@ struct DndetaMFTPbPb { } auto hev = registry.add("hEvtSel", "hEvtSel", HistType::kTH1F, - {{16, -0.5f, +15.5f}}); + {{14, -0.5f, +13.5f}}); hev->GetXaxis()->SetBinLabel(1, "All collisions"); hev->GetXaxis()->SetBinLabel(2, "Ev. sel."); hev->GetXaxis()->SetBinLabel(3, "kIsGoodZvtxFT0vsPV"); @@ -240,8 +247,6 @@ struct DndetaMFTPbPb { hev->GetXaxis()->SetBinLabel(11, "kNoHighMultCollInPrevRof"); hev->GetXaxis()->SetBinLabel(12, "Below min occup."); hev->GetXaxis()->SetBinLabel(13, "Above max occup."); - hev->GetXaxis()->SetBinLabel(14, "Below min IR (kHz)"); - hev->GetXaxis()->SetBinLabel(15, "Above max IR (kHz)"); auto hBcSel = registry.add("hBcSel", "hBcSel", HistType::kTH1F, {{3, -0.5f, +2.5f}}); @@ -262,11 +267,6 @@ struct DndetaMFTPbPb { x->SetBinLabel(1, "All"); x->SetBinLabel(2, "Selected"); - if (cfgDoIR) { - qaregistry.add("hOccIRate", "hOccIRate", HistType::kTH2F, - {occupancyAxis, irBins}); - } - registry.add({"Events/NtrkZvtx", "; N_{trk}; Z_{vtx} (cm); occupancy", {HistType::kTHnSparseF, {multAxis, zAxis, occupancyAxis}}}); @@ -350,11 +350,6 @@ struct DndetaMFTPbPb { hstat->GetAxis(0)->SetBinLabel(1, "All"); hstat->GetAxis(0)->SetBinLabel(2, "Selected"); - if (cfgDoIR) { - qaregistry.add("hCentOccIRate", "hCentOccIRate", HistType::kTHnSparseF, - {centralityAxis, occupancyAxis, irBins}); - } - qaregistry.add({"Events/Centrality/hCent", "; centrality; occupancy", {HistType::kTH2F, {centAxis, occupancyAxis}}, @@ -917,6 +912,24 @@ struct DndetaMFTPbPb { return -1.f; } + void initHadronicRate(CollBCs::iterator const& bc) + { + if (mRunNumber == bc.runNumber()) { + return; + } + mRunNumber = bc.runNumber(); + if (gHadronicRate.find(mRunNumber) == gHadronicRate.end()) { + auto runDuration = ccdb->getRunDuration(mRunNumber); + mSOR = runDuration.first; + mMinSeconds = std::floor(mSOR * 1.e-3); /// round tsSOR to the highest integer lower than tsSOR + double maxSec = std::ceil(runDuration.second * 1.e-3); /// round tsEOR to the lowest integer higher than tsEOR + const AxisSpec axisSeconds{static_cast((maxSec - mMinSeconds) / 20.f), 0, maxSec - mMinSeconds, "Seconds since SOR"}; + int hadronicRateBins = static_cast(eventCuts.maxIR - eventCuts.minIR); + gHadronicRate[mRunNumber] = registry.add(Form("HadronicRate/%i", mRunNumber), ";Time since SOR (s);Hadronic rate (kHz)", kTH2D, {axisSeconds, {hadronicRateBins, eventCuts.minIR, eventCuts.maxIR}}).get(); + } + gCurrentHadronicRate = gHadronicRate[mRunNumber]; + } + template bool isGoodEvent(C const& collision) { @@ -1001,19 +1014,6 @@ struct DndetaMFTPbPb { if constexpr (fillHis) { registry.fill(HIST("hEvtSel"), 12); } - double ir = (eventCuts.minIR >= 0 || eventCuts.maxIR >= 0) ? rateFetcher.fetch(ccdb.service, collision.timestamp(), collision.runNumber(), cfgIRSource, cfgIRCrashOnNull) * 1.e-3 : -1; - if (eventCuts.minIR >= 0 && ir < eventCuts.minIR) { - return false; - } - if (fillHis) { - registry.fill(HIST("hEvtSel"), 13); - } - if (eventCuts.maxIR >= 0 && ir > eventCuts.maxIR) { - return false; - } - if (fillHis) { - registry.fill(HIST("hEvtSel"), 14); - } return true; } @@ -1112,10 +1112,6 @@ struct DndetaMFTPbPb { auto occ = getOccupancy(collision, eventCuts.occupancyEstimator); float c = getRecoCent(collision); auto bc = collision.template foundBC_as(); - float ir = -1; - if (cfgDoIR) { - ir = rateFetcher.fetch(ccdb.service, bc.timestamp(), bc.runNumber(), cfgIRSource, cfgIRCrashOnNull) * 1.e-3; - } if constexpr (has_reco_cent) { registry.fill(HIST("Events/Centrality/Selection"), 1., c, occ); } else { @@ -1126,18 +1122,22 @@ struct DndetaMFTPbPb { return; } + if (cfgDoIR) { + initHadronicRate(bc); + double ir = rateFetcher.fetch(ccdb.service, bc.timestamp(), bc.runNumber(), cfgIRSource, cfgIRCrashOnNull) * 1.e-3; + double seconds = bc.timestamp() * 1.e-3 - mMinSeconds; + if (cfgUseIRCut && (ir < eventCuts.minIR || ir > eventCuts.maxIR)) { // cut on hadronic rate + return; + } + gCurrentHadronicRate->Fill(seconds, ir); + } + auto z = collision.posZ(); if constexpr (has_reco_cent) { registry.fill(HIST("Events/Centrality/Selection"), 2., c, occ); qaregistry.fill(HIST("Events/Centrality/hZvtxCent"), z, c, occ); qaregistry.fill(HIST("Events/Centrality/hCent"), c, occ); - if (cfgDoIR) { - qaregistry.fill(HIST("hCentOccIRate"), c, occ, ir); - } } else { - if (cfgDoIR) { - qaregistry.fill(HIST("hOccIRate"), occ, ir); - } registry.fill(HIST("Events/Selection"), 2., occ); } @@ -1160,10 +1160,6 @@ struct DndetaMFTPbPb { auto occ = getOccupancy(collision, eventCuts.occupancyEstimator); float c = getRecoCent(collision); auto bc = collision.template foundBC_as(); - float ir = -1; - if (cfgDoIR) { - ir = rateFetcher.fetch(ccdb.service, bc.timestamp(), bc.runNumber(), cfgIRSource, cfgIRCrashOnNull) * 1.e-3; - } if constexpr (has_reco_cent) { registry.fill(HIST("Events/Centrality/Selection"), 1., c, occ); } else { @@ -1174,17 +1170,21 @@ struct DndetaMFTPbPb { return; } + if (cfgDoIR) { + initHadronicRate(bc); + double ir = rateFetcher.fetch(ccdb.service, bc.timestamp(), bc.runNumber(), cfgIRSource, cfgIRCrashOnNull) * 1.e-3; + double seconds = bc.timestamp() * 1.e-3 - mMinSeconds; + if (cfgUseIRCut && (ir < eventCuts.minIR || ir > eventCuts.maxIR)) { // cut on hadronic rate + return; + } + gCurrentHadronicRate->Fill(seconds, ir); + } + auto z = collision.posZ(); if constexpr (has_reco_cent) { registry.fill(HIST("Events/Centrality/Selection"), 2., c, occ); - if (cfgDoIR) { - qaregistry.fill(HIST("hCentOccIRate"), c, occ, ir); - } } else { registry.fill(HIST("Events/Selection"), 2., occ); - if (cfgDoIR) { - qaregistry.fill(HIST("hOccIRate"), occ, ir); - } } auto nBestTrks = countBestTracks(tracks, besttracks, z, c, occ); From 8fdcafe85ccc4a088c34c7a91baa1dfc6d833c24 Mon Sep 17 00:00:00 2001 From: ALICE Action Bot Date: Wed, 23 Jul 2025 09:36:54 +0000 Subject: [PATCH 09/11] Please consider the following formatting changes --- PWGMM/Mult/Tasks/dndetaMFTPbPb.cxx | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/PWGMM/Mult/Tasks/dndetaMFTPbPb.cxx b/PWGMM/Mult/Tasks/dndetaMFTPbPb.cxx index 6e769c19e16..f522e9bf0b3 100644 --- a/PWGMM/Mult/Tasks/dndetaMFTPbPb.cxx +++ b/PWGMM/Mult/Tasks/dndetaMFTPbPb.cxx @@ -166,7 +166,7 @@ struct DndetaMFTPbPb { double mMinSeconds{-1.}; std::unordered_map gHadronicRate; ctpRateFetcher rateFetcher; - TH2* gCurrentHadronicRate; + TH2* gCurrentHadronicRate; /// @brief init function, definition of histograms void init(InitContext&) @@ -929,7 +929,7 @@ struct DndetaMFTPbPb { } gCurrentHadronicRate = gHadronicRate[mRunNumber]; } - + template bool isGoodEvent(C const& collision) { @@ -1130,7 +1130,7 @@ struct DndetaMFTPbPb { return; } gCurrentHadronicRate->Fill(seconds, ir); - } + } auto z = collision.posZ(); if constexpr (has_reco_cent) { @@ -1178,8 +1178,8 @@ struct DndetaMFTPbPb { return; } gCurrentHadronicRate->Fill(seconds, ir); - } - + } + auto z = collision.posZ(); if constexpr (has_reco_cent) { registry.fill(HIST("Events/Centrality/Selection"), 2., c, occ); From 0dd9980dbf3ae541014398ccb62ea23f71243b1c Mon Sep 17 00:00:00 2001 From: Gyula Bencedi Date: Wed, 23 Jul 2025 11:44:44 +0200 Subject: [PATCH 10/11] Update dndetaMFTPbPb.cxx include unordered_map to fix megalinter --- PWGMM/Mult/Tasks/dndetaMFTPbPb.cxx | 1 + 1 file changed, 1 insertion(+) diff --git a/PWGMM/Mult/Tasks/dndetaMFTPbPb.cxx b/PWGMM/Mult/Tasks/dndetaMFTPbPb.cxx index f522e9bf0b3..dba30ce6b42 100644 --- a/PWGMM/Mult/Tasks/dndetaMFTPbPb.cxx +++ b/PWGMM/Mult/Tasks/dndetaMFTPbPb.cxx @@ -20,6 +20,7 @@ #include #include #include +#include #include #include "CCDB/BasicCCDBManager.h" From f8ff8287db440afee51b1f80e4db6b685a687a57 Mon Sep 17 00:00:00 2001 From: ALICE Action Bot Date: Wed, 23 Jul 2025 09:45:10 +0000 Subject: [PATCH 11/11] Please consider the following formatting changes --- PWGMM/Mult/Tasks/dndetaMFTPbPb.cxx | 39 +++++++++++++++--------------- 1 file changed, 19 insertions(+), 20 deletions(-) diff --git a/PWGMM/Mult/Tasks/dndetaMFTPbPb.cxx b/PWGMM/Mult/Tasks/dndetaMFTPbPb.cxx index dba30ce6b42..6baa84ee4ea 100644 --- a/PWGMM/Mult/Tasks/dndetaMFTPbPb.cxx +++ b/PWGMM/Mult/Tasks/dndetaMFTPbPb.cxx @@ -15,16 +15,19 @@ /// \author Gyula Bencedi, gyula.bencedi@cern.ch /// \since Nov 2024 -#include -#include -#include -#include -#include -#include -#include +#include "Functions.h" +#include "Index.h" +#include "bestCollisionTable.h" -#include "CCDB/BasicCCDBManager.h" +#include "Common/CCDB/ctpRateFetcher.h" +#include "Common/DataModel/Centrality.h" +#include "Common/DataModel/CollisionAssociationTables.h" +#include "Common/DataModel/EventSelection.h" +#include "Common/DataModel/Multiplicity.h" +#include "Common/DataModel/TrackSelectionTables.h" +#include "CCDB/BasicCCDBManager.h" +#include "CommonConstants/MathConstants.h" #include "Framework/ASoAHelpers.h" #include "Framework/AnalysisDataModel.h" #include "Framework/AnalysisTask.h" @@ -32,22 +35,18 @@ #include "Framework/O2DatabasePDGPlugin.h" #include "Framework/RuntimeError.h" #include "Framework/runDataProcessing.h" - -#include "Common/CCDB/ctpRateFetcher.h" -#include "Common/DataModel/Centrality.h" -#include "Common/DataModel/CollisionAssociationTables.h" -#include "Common/DataModel/EventSelection.h" -#include "Common/DataModel/Multiplicity.h" -#include "Common/DataModel/TrackSelectionTables.h" -#include "CommonConstants/MathConstants.h" - #include "MathUtils/Utils.h" #include "ReconstructionDataFormats/GlobalTrackID.h" + #include "TPDGCode.h" -#include "Functions.h" -#include "Index.h" -#include "bestCollisionTable.h" +#include +#include +#include +#include +#include +#include +#include using namespace o2; using namespace o2::framework;