From 8bae3f3e948002fb38fb22800bb11707dfcdffa9 Mon Sep 17 00:00:00 2001 From: Rocco Liotino Date: Fri, 15 May 2026 11:02:22 +0200 Subject: [PATCH 1/5] major_update_producer --- DPG/Tasks/AOTTrack/PID/HMPID/CMakeLists.txt | 2 +- .../AOTTrack/PID/HMPID/hmpidTableProducer.cxx | 366 +++++++++++++++--- 2 files changed, 322 insertions(+), 46 deletions(-) diff --git a/DPG/Tasks/AOTTrack/PID/HMPID/CMakeLists.txt b/DPG/Tasks/AOTTrack/PID/HMPID/CMakeLists.txt index 96bb9ab18c4..d33a73eb12f 100644 --- a/DPG/Tasks/AOTTrack/PID/HMPID/CMakeLists.txt +++ b/DPG/Tasks/AOTTrack/PID/HMPID/CMakeLists.txt @@ -17,7 +17,7 @@ o2physics_add_dpl_workflow(hmpid-qa o2physics_add_dpl_workflow(hmpid-table-producer SOURCES hmpidTableProducer.cxx - PUBLIC_LINK_LIBRARIES O2Physics::AnalysisCore + PUBLIC_LINK_LIBRARIES O2Physics::AnalysisCore O2::HMPIDBase COMPONENT_NAME Analysis) o2physics_add_dpl_workflow(hmpid-deuteron diff --git a/DPG/Tasks/AOTTrack/PID/HMPID/hmpidTableProducer.cxx b/DPG/Tasks/AOTTrack/PID/HMPID/hmpidTableProducer.cxx index 1b6cea53ef5..a0142a84edf 100644 --- a/DPG/Tasks/AOTTrack/PID/HMPID/hmpidTableProducer.cxx +++ b/DPG/Tasks/AOTTrack/PID/HMPID/hmpidTableProducer.cxx @@ -11,26 +11,42 @@ #include "tableHMPID.h" +#include "Common/Core/PID/PIDTOF.h" +#include "Common/Core/trackUtilities.h" #include "Common/DataModel/Centrality.h" #include "Common/DataModel/EventSelection.h" #include "Common/DataModel/Multiplicity.h" #include "Common/DataModel/PIDResponseTOF.h" #include "Common/DataModel/PIDResponseTPC.h" #include "Common/DataModel/TrackSelectionTables.h" +#include "Common/TableProducer/PID/pidTOFBase.h" -#include +#include "CCDB/BasicCCDBManager.h" +#include "CCDB/CcdbApi.h" +#include "CommonConstants/GeomConstants.h" +#include "DataFormatsParameters/GRPMagField.h" +#include "DetectorsBase/GeometryManager.h" +#include "DetectorsBase/MatLayerCylSet.h" +#include "DetectorsBase/Propagator.h" +#include "MathUtils/Utils.h" +#include "ReconstructionDataFormats/TrackParametrizationWithError.h" #include +#include #include -#include #include -#include #include -#include -#include -#include +#include #include +#include +#include +#include -#include +#include +#include + +#include "HMPIDBase/Param.h" + +#include #include #include @@ -40,50 +56,238 @@ using namespace o2::framework::expressions; using namespace o2::constants::physics; struct HmpidTableProducer { + + Produces hmpidAnalysis; + HistogramRegistry histos{"histos", {}, OutputObjHandlingPolicy::AnalysisObject}; const AxisSpec axisEvtCounter{1, 0, +1, ""}; - // CCDB configurable Service ccdb; struct : ConfigurableGroup { Configurable ccdbUrl{"ccdbUrl", "http://alice-ccdb.cern.ch", "URL of the CCDB repository"}; + Configurable lutPath{"lutPath", "GLO/Param/MatLUT", "Path of the material LUT"}; + Configurable geoPath{"geoPath", "GLO/Config/GeometryAligned", "Path of the aligned geometry"}; + Configurable grpmagPath{"grpmagPath", "GLO/Config/GRPMagField", "CCDB path of GRPMagField"}; } ccdbConfig; - Produces hmpidAnalysis; - - // configurable for quality requirements + // ----------------------------------------------------------------------- + // Quality configurables + // ----------------------------------------------------------------------- Configurable requireITS{"requireITS", true, "Require ITS track"}; Configurable requireTPC{"requireTPC", true, "Require TPC track"}; Configurable requireTOF{"requireTOF", true, "Require TOF track"}; using CollisionCandidates = o2::soa::Join; - using TrackCandidates = soa::Join; + using TrackCandidates = soa::Join; void init(o2::framework::InitContext&) { - // Configure CCDB ccdb->setURL(ccdbConfig.ccdbUrl); ccdb->setCaching(true); ccdb->setLocalObjectValidityChecking(); ccdb->setFatalWhenNull(false); - histos.add("eventCounter", "eventCounter", kTH1F, {axisEvtCounter}); - histos.add("goodEventCounter", "goodEventCounter", kTH1F, {axisEvtCounter}); - histos.add("eventsHmpid", "eventsWithHmpid", kTH1F, {axisEvtCounter}); + // event counters + histos.add("eventCounter", "All events", kTH1F, {axisEvtCounter}); + histos.add("goodEventCounter", "Events passing sel8", kTH1F, {axisEvtCounter}); + histos.add("eventsHmpid", "Events with HMPID track", kTH1F, {axisEvtCounter}); + + // chamber extraction quality checks - M1 propagation, M2 clusSize encoding, M3 hybrid configuration + const AxisSpec axisCh{10, -1.5, 8.5, "Chamber"}; + histos.add("hChamberM1", "Chamber M1 (propagation)", kTH1F, {axisCh}); + histos.add("hChamberM2", "Chamber M2 (clusSize encoding)", kTH1F, {axisCh}); + histos.add("hChamberM3", "Chamber M3 (hybrid, in table)", kTH1F, {axisCh}); + + histos.add("hChamberM1vsM2", "M1 vs M2; M2; M1", kTH2F, {axisCh, axisCh}); + histos.add("hChamberM3vsM2", "M3 vs M2; M2; M3", kTH2F, {axisCh, axisCh}); + + histos.add("hClusSize", "Raw hmpidClusSize", kTH1F, {{500, -1.1e6, 1e6, "clusSize"}}); + histos.add("hClusSizeCorrupt", "Corrupt entries (<=0)", kTH1F, {{200, -1.1e6, 1., "clusSize"}}); + + histos.add("hChamberAssignment", + "Chamber assignment outcome; category; counts", + kTH1F, {{4, -0.5, 3.5, ""}}); } - // function to manage ccdb + // ----------------------------------------------------------------------- + // CCDB initialisation per run + // ----------------------------------------------------------------------- int mCCDBRunNumber = 0; + void initCCDB(aod::BCsWithTimestamps::iterator const& bc) { if (mCCDBRunNumber == bc.runNumber()) { return; } mCCDBRunNumber = bc.runNumber(); + + auto grpMag = ccdb->getForTimeStamp( + ccdbConfig.grpmagPath, bc.timestamp()); + if (!grpMag) { + LOGF(fatal, "initCCDB: GRPMagField not found at %s", + ccdbConfig.grpmagPath.value.c_str()); + return; + } + o2::base::Propagator::initFieldFromGRP(grpMag); + + auto lut = o2::base::MatLayerCylSet::rectifyPtrFromFile( + ccdb->get(ccdbConfig.lutPath)); + o2::base::Propagator::Instance()->setMatLUT(lut); + + // Geometry needed by o2::hmpid::Param for mars2Lors + if (!gGeoManager) { + ccdb->get(ccdbConfig.geoPath); + } + + LOGF(info, "initCCDB: run %d initialised (mag + LUT + geo)", bc.runNumber()); + } + + void propagateHelix( + double len, + double bz, + int charge, + std::array& x, + std::array& p) + { + // Extrapolate track along simple helix in magnetic field + + constexpr double KB2C = 0.299792458e-3; + + double px = p[0]; + double py = p[1]; + double pz = p[2]; + + double pmod = std::hypot(px, py, pz); + double pt = std::hypot(px, py); + + if (pt < o2::constants::math::Almost0 || std::abs(bz) < o2::constants::math::Almost0) // straight-line tracks + { + x[0] += px / pmod * len; + x[1] += py / pmod * len; + x[2] += pz / pmod * len; + + return; + } + + double a = -KB2C * bz * charge; + double rho = a / pmod; + + double sinr = std::sin(rho * len); + double cosr = std::cos(rho * len); + + x[0] += px * sinr / a - py * (1. - cosr) / a; + x[1] += py * sinr / a + px * (1. - cosr) / a; + x[2] += pz * len / pmod; + + double px0 = px; + + p[0] = px0 * cosr - py * sinr; + p[1] = py * cosr + px0 * sinr; + p[2] = pz; + } + + bool intersectHelixPlane( + double bz, + int charge, + const std::array& x0, + const std::array& p0, + const std::array& planePoint, + const std::array& planeNormal, + std::array& xOut, + std::array& pOut) + { + // Intersect a helix with a plane defined by normals and points, using an iterative approach. + + double s = + (planePoint[0] - x0[0]) * planeNormal[0] + + (planePoint[1] - x0[1]) * planeNormal[1] + + (planePoint[2] - x0[2]) * planeNormal[2]; + + double dist = 99999., distPrev = dist; + + const double kConvThr = 0.00001; + const int kMaxIter = 100; + + std::array x, p; + + for (int iter = 0; iter < kMaxIter; ++iter) { + + x = x0; + p = p0; + propagateHelix(s, bz, charge, x, p); + + dist = + (x[0] - planePoint[0]) * planeNormal[0] + + (x[1] - planePoint[1]) * planeNormal[1] + + (x[2] - planePoint[2]) * planeNormal[2]; + + if (std::abs(dist) >= std::abs(distPrev)) + return false; + + distPrev = dist; + s -= dist; + + if (std::abs(dist) < kConvThr) { + xOut = x; + pOut = p; + return true; + } + } + + return false; + } + + int getHmpidChamber( + std::array x, + std::array p, + double bz, + int charge) + { + auto* param = o2::hmpid::Param::instance(); + + for (int ch = o2::hmpid::Param::kMinCh; ch <= o2::hmpid::Param::kMaxCh; ++ch) { + + // Chamber module geometry: points and normals for radiators and PCs + std::array pRad{}, pPc{}; + std::array nRad{}, nPc{}; + + param->point(ch, pRad.data(), o2::hmpid::Param::kRad); + param->norm(ch, nRad.data()); + param->point(ch, pPc.data(), o2::hmpid::Param::kPc); + param->norm(ch, nPc.data()); + + // Intersection track - radiator plane + std::array xRad, pAtRad; + + if (!intersectHelixPlane(bz, charge, x, p, pRad, nRad, xRad, pAtRad)) + continue; + + // Intersection track - PC plane + std::array xPc, pAtPc; + + if (!intersectHelixPlane(bz, charge, xRad, pAtRad, pPc, nPc, xPc, pAtPc)) + continue; + + double theta, phi; + param->mars2LorsVec(ch, pAtRad.data(), theta, phi); + + double xL, yL; + param->mars2Lors(ch, xPc.data(), xL, yL); + + // Use isInside to check Chamber intersected + if (param->isInside(xL, yL, param->distCut())) + return ch; + } + + // No chamber intersected + return -1; } void processEvent(CollisionCandidates::iterator const& col, @@ -93,11 +297,9 @@ struct HmpidTableProducer { if (col.sel8()) { histos.fill(HIST("goodEventCounter"), 0.5); } - - // initialize CCDB for current BC initCCDB(col.bc_as()); } - PROCESS_SWITCH(HmpidTableProducer, processEvent, "Process event level - collisions", true); + PROCESS_SWITCH(HmpidTableProducer, processEvent, "Process event level", true); void processHmpid( aod::HMPIDs const& hmpids, @@ -105,60 +307,134 @@ struct HmpidTableProducer { CollisionCandidates const&, aod::BCsWithTimestamps const&) { - // --- Static set to track unique collisions with HMPID tracks --- static std::unordered_set collisionsWithHmpid; for (auto const& t : hmpids) { - // Access the global track associated to the HMPID track const auto& globalTrack = t.track_as(); if (!globalTrack.has_collision()) continue; - // Access the associated collision const auto& col = globalTrack.collision_as(); initCCDB(col.bc_as()); uint32_t collId = col.globalIndex(); - // --- Track quality selection --- + // Track quality selection if ((requireITS && !globalTrack.hasITS()) || (requireTPC && !globalTrack.hasTPC()) || (requireTOF && !globalTrack.hasTOF())) { continue; } - // Count collisions with at least one valid HMPID track if (collisionsWithHmpid.insert(collId).second) { histos.fill(HIST("eventsHmpid"), 0.5); } - float centrality = col.centFV0A(); + // clusSize diagnostics + histos.fill(HIST("hClusSize"), t.hmpidClusSize()); + bool isCorrupt = (t.hmpidClusSize() <= 0); + if (isCorrupt) { + histos.fill(HIST("hClusSizeCorrupt"), t.hmpidClusSize()); + } + + // --- M2: clusSize encoding --- + int chamberM2 = t.hmpidClusSize() / 1000000; + histos.fill(HIST("hChamberM2"), chamberM2); + + // --- M1: propagation + // obtain global coordinates + double sinA = std::sin(globalTrack.alpha()); + double cosA = std::cos(globalTrack.alpha()); + + std::array x = { + globalTrack.x() * cosA - globalTrack.y() * sinA, + globalTrack.x() * sinA + globalTrack.y() * cosA, + (double)globalTrack.z()}; + + std::array p = { + (double)globalTrack.px(), + (double)globalTrack.py(), + (double)globalTrack.pz()}; + + // int charge = (globalTrack.signed1Pt() > 0) ? +1 : -1; + short charge = globalTrack.sign(); + + auto prop = o2::base::Propagator::Instance(); + double bz = (double)prop->getNominalBz(); // positive sign + + int chamberM1 = getHmpidChamber(x, p, bz, charge); + + histos.fill(HIST("hChamberM1"), chamberM1); + + if (!isCorrupt) { + histos.fill(HIST("hChamberM1vsM2"), chamberM2, chamberM1); + } + + // --- M3: hybrid --- + int chamberM3 = -1; + if (!isCorrupt) { + chamberM3 = chamberM2; + } else { + chamberM3 = chamberM1; + } + + // Legend: + // bin 0 = clusSize > 0, chamber found (M2 ok) + // bin 1 = clusSize > 0, chamber not found (non dovrebbe mai accadere) + // bin 2 = clusSize <= 0, M1 recovery (corrupt, M1 ok) + // bin 3 = clusSize <= 0, M1 fails (corrupt, skipped) + + if (!isCorrupt && chamberM3 >= 0) { + histos.fill(HIST("hChamberAssignment"), 0.); + } else if (!isCorrupt && chamberM3 < 0) { + histos.fill(HIST("hChamberAssignment"), 1.); + } else if (isCorrupt && chamberM3 >= 0) { + histos.fill(HIST("hChamberAssignment"), 2.); + } else { + histos.fill(HIST("hChamberAssignment"), 3.); + } - // check cluster size sign - if (t.hmpidClusSize() <= 0) + histos.fill(HIST("hChamberM3"), chamberM3); + histos.fill(HIST("hChamberM3vsM2"), chamberM2, chamberM3); + + // Skip track if chamber undetermined + if (chamberM3 < 0) { continue; + } + // Fill photon charges float hmpidPhotsCharge2[o2::aod::kDimPhotonsCharge]; - for (int i = 0; i < o2::aod::kDimPhotonsCharge; i++) { hmpidPhotsCharge2[i] = t.hmpidPhotsCharge()[i]; } - /////FILL HMPID CUSTOM TABLE - hmpidAnalysis(t.hmpidSignal(), t.hmpidMom(), - globalTrack.p(), t.hmpidXTrack(), t.hmpidYTrack(), t.hmpidXMip(), - t.hmpidYMip(), t.hmpidNPhotons(), t.hmpidQMip(), (t.hmpidClusSize() % 1000000) / 1000, - t.hmpidClusSize() / 1000000, hmpidPhotsCharge2, globalTrack.eta(), globalTrack.phi(), - globalTrack.px(), globalTrack.py(), globalTrack.pz(), globalTrack.itsNCls(), - globalTrack.tpcNClsFound(), globalTrack.tpcNClsCrossedRows(), globalTrack.tpcChi2NCl(), globalTrack.itsChi2NCl(), - globalTrack.dcaXY(), globalTrack.dcaZ(), globalTrack.tpcNSigmaPi(), globalTrack.tofNSigmaPi(), - globalTrack.tpcNSigmaKa(), globalTrack.tofNSigmaKa(), globalTrack.tpcNSigmaPr(), globalTrack.tofNSigmaPr(), - globalTrack.tpcNSigmaDe(), globalTrack.tofNSigmaDe(), centrality); - } // end loop on hmpid table entries - } + // Fill output table + hmpidAnalysis( + t.hmpidSignal(), t.hmpidMom(), + globalTrack.p(), t.hmpidXTrack(), t.hmpidYTrack(), + t.hmpidXMip(), t.hmpidYMip(), + t.hmpidNPhotons(), t.hmpidQMip(), + (t.hmpidClusSize() % 1000000) / 1000, + chamberM3, + hmpidPhotsCharge2, + globalTrack.eta(), globalTrack.phi(), + globalTrack.px(), globalTrack.py(), globalTrack.pz(), + globalTrack.itsNCls(), globalTrack.tpcNClsFound(), globalTrack.tpcNClsCrossedRows(), + globalTrack.tpcChi2NCl(), globalTrack.itsChi2NCl(), + globalTrack.dcaXY(), globalTrack.dcaZ(), + globalTrack.tpcNSigmaPi(), globalTrack.tofNSigmaPi(), + globalTrack.tpcNSigmaKa(), globalTrack.tofNSigmaKa(), + globalTrack.tpcNSigmaPr(), globalTrack.tofNSigmaPr(), + globalTrack.tpcNSigmaDe(), globalTrack.tofNSigmaDe(), + col.centFV0A()); - PROCESS_SWITCH(HmpidTableProducer, processHmpid, "Process hmpid entries - tracks", true); + } // end HMPID loop + } + PROCESS_SWITCH(HmpidTableProducer, processHmpid, "Process HMPID entries", true); }; -WorkflowSpec defineDataProcessing(ConfigContext const& cfg) { return WorkflowSpec{adaptAnalysisTask(cfg)}; } +WorkflowSpec defineDataProcessing(ConfigContext const& cfg) +{ + return WorkflowSpec{adaptAnalysisTask(cfg)}; +} From cd67229f18729c0a0de41eee98e29c74f5863c4e Mon Sep 17 00:00:00 2001 From: Rocco Liotino Date: Fri, 15 May 2026 11:22:10 +0200 Subject: [PATCH 2/5] fixing_megalinter --- DPG/Tasks/AOTTrack/PID/HMPID/hmpidTableProducer.cxx | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/DPG/Tasks/AOTTrack/PID/HMPID/hmpidTableProducer.cxx b/DPG/Tasks/AOTTrack/PID/HMPID/hmpidTableProducer.cxx index a0142a84edf..c6b8e264968 100644 --- a/DPG/Tasks/AOTTrack/PID/HMPID/hmpidTableProducer.cxx +++ b/DPG/Tasks/AOTTrack/PID/HMPID/hmpidTableProducer.cxx @@ -47,6 +47,7 @@ #include "HMPIDBase/Param.h" #include +#include #include #include @@ -350,18 +351,18 @@ struct HmpidTableProducer { std::array x = { globalTrack.x() * cosA - globalTrack.y() * sinA, globalTrack.x() * sinA + globalTrack.y() * cosA, - (double)globalTrack.z()}; + static_cast(globalTrack.z())}; std::array p = { - (double)globalTrack.px(), - (double)globalTrack.py(), - (double)globalTrack.pz()}; + static_cast(globalTrack.px()), + static_cast(globalTrack.py()), + static_cast(globalTrack.pz())}; // int charge = (globalTrack.signed1Pt() > 0) ? +1 : -1; - short charge = globalTrack.sign(); + int16_t charge = globalTrack.sign(); auto prop = o2::base::Propagator::Instance(); - double bz = (double)prop->getNominalBz(); // positive sign + double bz = static_cast(prop->getNominalBz()); // positive sign int chamberM1 = getHmpidChamber(x, p, bz, charge); From f5e1205e8a286a8d3d5d20b6c1a05c24d957c9f4 Mon Sep 17 00:00:00 2001 From: Rocco Liotino Date: Fri, 15 May 2026 11:59:21 +0200 Subject: [PATCH 3/5] fixing_includes --- .../AOTTrack/PID/HMPID/hmpidTableProducer.cxx | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/DPG/Tasks/AOTTrack/PID/HMPID/hmpidTableProducer.cxx b/DPG/Tasks/AOTTrack/PID/HMPID/hmpidTableProducer.cxx index c6b8e264968..7709518a691 100644 --- a/DPG/Tasks/AOTTrack/PID/HMPID/hmpidTableProducer.cxx +++ b/DPG/Tasks/AOTTrack/PID/HMPID/hmpidTableProducer.cxx @@ -11,38 +11,24 @@ #include "tableHMPID.h" -#include "Common/Core/PID/PIDTOF.h" -#include "Common/Core/trackUtilities.h" #include "Common/DataModel/Centrality.h" #include "Common/DataModel/EventSelection.h" #include "Common/DataModel/Multiplicity.h" #include "Common/DataModel/PIDResponseTOF.h" #include "Common/DataModel/PIDResponseTPC.h" #include "Common/DataModel/TrackSelectionTables.h" -#include "Common/TableProducer/PID/pidTOFBase.h" #include "CCDB/BasicCCDBManager.h" -#include "CCDB/CcdbApi.h" -#include "CommonConstants/GeomConstants.h" #include "DataFormatsParameters/GRPMagField.h" -#include "DetectorsBase/GeometryManager.h" #include "DetectorsBase/MatLayerCylSet.h" #include "DetectorsBase/Propagator.h" -#include "MathUtils/Utils.h" -#include "ReconstructionDataFormats/TrackParametrizationWithError.h" #include -#include #include #include #include -#include #include -#include -#include -#include #include -#include #include "HMPIDBase/Param.h" From b05cf9a2aaddc48f1074b83f7fc3b837565eb0a9 Mon Sep 17 00:00:00 2001 From: Rocco Liotino Date: Fri, 15 May 2026 17:49:23 +0200 Subject: [PATCH 4/5] fixing_includes_v2 --- .../AOTTrack/PID/HMPID/hmpidTableProducer.cxx | 27 ++++++++++--------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/DPG/Tasks/AOTTrack/PID/HMPID/hmpidTableProducer.cxx b/DPG/Tasks/AOTTrack/PID/HMPID/hmpidTableProducer.cxx index 7709518a691..cb6e9dd5c24 100644 --- a/DPG/Tasks/AOTTrack/PID/HMPID/hmpidTableProducer.cxx +++ b/DPG/Tasks/AOTTrack/PID/HMPID/hmpidTableProducer.cxx @@ -11,18 +11,18 @@ #include "tableHMPID.h" -#include "Common/DataModel/Centrality.h" -#include "Common/DataModel/EventSelection.h" -#include "Common/DataModel/Multiplicity.h" -#include "Common/DataModel/PIDResponseTOF.h" -#include "Common/DataModel/PIDResponseTPC.h" -#include "Common/DataModel/TrackSelectionTables.h" - -#include "CCDB/BasicCCDBManager.h" -#include "DataFormatsParameters/GRPMagField.h" -#include "DetectorsBase/MatLayerCylSet.h" -#include "DetectorsBase/Propagator.h" -#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include #include #include #include @@ -30,9 +30,10 @@ #include -#include "HMPIDBase/Param.h" +#include #include +#include #include #include #include From 78b3d6e17728a429426ec20c7f418a9394ea24a6 Mon Sep 17 00:00:00 2001 From: Rocco Liotino Date: Fri, 15 May 2026 18:07:08 +0200 Subject: [PATCH 5/5] fixing_includes_o2physics --- DPG/Tasks/AOTTrack/PID/HMPID/hmpidTableProducer.cxx | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/DPG/Tasks/AOTTrack/PID/HMPID/hmpidTableProducer.cxx b/DPG/Tasks/AOTTrack/PID/HMPID/hmpidTableProducer.cxx index cb6e9dd5c24..58438690781 100644 --- a/DPG/Tasks/AOTTrack/PID/HMPID/hmpidTableProducer.cxx +++ b/DPG/Tasks/AOTTrack/PID/HMPID/hmpidTableProducer.cxx @@ -11,12 +11,12 @@ #include "tableHMPID.h" -#include -#include -#include -#include -#include -#include +#include "Common/DataModel/Centrality.h" +#include "Common/DataModel/EventSelection.h" +#include "Common/DataModel/Multiplicity.h" +#include "Common/DataModel/PIDResponseTOF.h" +#include "Common/DataModel/PIDResponseTPC.h" +#include "Common/DataModel/TrackSelectionTables.h" #include #include