From b7b3cd19c1ed824843b599241301e6b4de8d6b6f Mon Sep 17 00:00:00 2001 From: fmazzasc Date: Sun, 22 Oct 2023 12:43:06 +0200 Subject: [PATCH 1/4] Set TrackExtra001 as default --- Detectors/AOD/src/AODProducerWorkflowSpec.cxx | 6 +- .../include/Framework/AnalysisDataModel.h | 80 ++++++++++--------- 2 files changed, 44 insertions(+), 42 deletions(-) diff --git a/Detectors/AOD/src/AODProducerWorkflowSpec.cxx b/Detectors/AOD/src/AODProducerWorkflowSpec.cxx index 9c2f1d13eefaf..0aa520b78ac69 100644 --- a/Detectors/AOD/src/AODProducerWorkflowSpec.cxx +++ b/Detectors/AOD/src/AODProducerWorkflowSpec.cxx @@ -319,7 +319,7 @@ void AODProducerWorkflowDPL::addToTracksExtraTable(TracksExtraCursorType& tracks // extra tracksExtraCursor(truncateFloatFraction(extraInfoHolder.tpcInnerParam, mTrack1Pt), extraInfoHolder.flags, - extraInfoHolder.itsClusterMap, + extraInfoHolder.itsClusterSizes, extraInfoHolder.tpcNClsFindable, extraInfoHolder.tpcNClsFindableMinusFound, extraInfoHolder.tpcNClsFindableMinusCrossedRows, @@ -2370,14 +2370,14 @@ AODProducerWorkflowDPL::TrackExtraInfo AODProducerWorkflowDPL::processBarrelTrac int nClusters = itsTrack.getNClusters(); float chi2 = itsTrack.getChi2(); extraInfoHolder.itsChi2NCl = nClusters != 0 ? chi2 / (float)nClusters : 0; - extraInfoHolder.itsClusterMap = itsTrack.getPattern(); + extraInfoHolder.itsClusterSizes = itsTrack.getClusterSizes(); if (src == GIndex::ITS) { // standalone ITS track should set its time from the ROF const auto& rof = data.getITSTracksROFRecords()[mITSROFs[trackIndex.getIndex()]]; double t = rof.getBCData().differenceInBC(mStartIR) * o2::constants::lhc::LHCBunchSpacingNS + mITSROFrameHalfLengthNS; setTrackTime(t, mITSROFrameHalfLengthNS, false); } } else if (contributorsGID[GIndex::Source::ITSAB].isIndexSet()) { // this is an ITS-TPC afterburner contributor - extraInfoHolder.itsClusterMap = data.getITSABRefs()[contributorsGID[GIndex::Source::ITSAB].getIndex()].pattern; + extraInfoHolder.itsClusterSizes = data.getITSABRefs()[contributorsGID[GIndex::Source::ITSAB].getIndex()].getClusterSizes(); } if (contributorsGID[GIndex::Source::TPC].isIndexSet()) { const auto& tpcOrig = data.getTPCTrack(contributorsGID[GIndex::TPC]); diff --git a/Framework/Core/include/Framework/AnalysisDataModel.h b/Framework/Core/include/Framework/AnalysisDataModel.h index 5f8f7fef5f506..6dd5135b54ddc 100644 --- a/Framework/Core/include/Framework/AnalysisDataModel.h +++ b/Framework/Core/include/Framework/AnalysisDataModel.h @@ -221,8 +221,8 @@ DECLARE_SOA_EXPRESSION_COLUMN(C1Pt21Pt2, c1Pt21Pt2, float, //! // TRACKEXTRA TABLE definition DECLARE_SOA_COLUMN(TPCInnerParam, tpcInnerParam, float); //! Momentum at inner wall of the TPC DECLARE_SOA_COLUMN(Flags, flags, uint32_t); //! Track flags. Run 2: see TrackFlagsRun2Enum | Run 3: see TrackFlags +DECLARE_SOA_COLUMN(ITSClusterMap, itsClusterMap, uint8_t); //! Old cluster ITS cluster map, kept for version 0 compatibility. Not in v000 namespace, as many O2Physics tables rely on this column DECLARE_SOA_COLUMN(ITSClusterSizes, itsClusterSizes, uint32_t); //! Clusters sizes, four bits per a layer, starting from the innermost -DECLARE_SOA_COLUMN(ITSClusterMap, itsClusterMap, uint8_t); //! Old cluster ITS cluster map, kept for version 0 compatibility DECLARE_SOA_COLUMN(TPCNClsFindable, tpcNClsFindable, uint8_t); //! Findable TPC clusters for this track geometry DECLARE_SOA_COLUMN(TPCNClsFindableMinusFound, tpcNClsFindableMinusFound, int8_t); //! TPC Clusters: Findable - Found DECLARE_SOA_COLUMN(TPCNClsFindableMinusCrossedRows, tpcNClsFindableMinusCrossedRows, int8_t); //! TPC Clusters: Findable - crossed rows @@ -241,22 +241,45 @@ DECLARE_SOA_COLUMN(TrackPhiEMCAL, trackPhiEmcal, float); DECLARE_SOA_COLUMN(TrackTime, trackTime, float); //! Estimated time of the track in ns wrt collision().bc() or ambiguoustrack.bcSlice()[0] DECLARE_SOA_COLUMN(TrackTimeRes, trackTimeRes, float); //! Resolution of the track time in ns (see TrackFlags::TrackTimeResIsRange) -// expression columns changing between versions have to be declared in different namespaces - +// expression columns changing between versions needs to be declared in different namespaces +namespace v000 +{ DECLARE_SOA_EXPRESSION_COLUMN(DetectorMap, detectorMap, uint8_t, //! Detector map: see enum DetectorMapEnum ifnode(aod::track::itsClusterMap > (uint8_t)0, static_cast(o2::aod::track::ITS), (uint8_t)0x0) | ifnode(aod::track::tpcNClsFindable > (uint8_t)0, static_cast(o2::aod::track::TPC), (uint8_t)0x0) | ifnode(aod::track::trdPattern > (uint8_t)0, static_cast(o2::aod::track::TRD), (uint8_t)0x0) | ifnode((aod::track::tofChi2 >= 0.f) && (aod::track::tofExpMom > 0.f), static_cast(o2::aod::track::TOF), (uint8_t)0x0)); +} // namespace v000 + +DECLARE_SOA_DYNAMIC_COLUMN(ITSNCls, itsNCls, //! Number of ITS clusters + [](uint8_t itsClusterMap) -> uint8_t { + uint8_t itsNcls = 0; + constexpr uint8_t bit = 1; + for (int layer = 0; layer < 7; layer++) { + if (itsClusterMap & (bit << layer)) + itsNcls++; + } + return itsNcls; + }); + +DECLARE_SOA_DYNAMIC_COLUMN(ITSNClsInnerBarrel, itsNClsInnerBarrel, //! Number of ITS clusters in the Inner Barrel + [](uint8_t itsClusterMap) -> uint8_t { + uint8_t itsNclsInnerBarrel = 0; + constexpr uint8_t bit = 1; + for (int layer = 0; layer < 3; layer++) { + if (itsClusterMap & (bit << layer)) + itsNclsInnerBarrel++; + } + return itsNclsInnerBarrel; + }); -namespace v001 -{ DECLARE_SOA_EXPRESSION_COLUMN(DetectorMap, detectorMap, uint8_t, //! Detector map version 1, see enum DetectorMapEnum ifnode(aod::track::itsClusterSizes > (uint32_t)0, static_cast(o2::aod::track::ITS), (uint8_t)0x0) | ifnode(aod::track::tpcNClsFindable > (uint8_t)0, static_cast(o2::aod::track::TPC), (uint8_t)0x0) | ifnode(aod::track::trdPattern > (uint8_t)0, static_cast(o2::aod::track::TRD), (uint8_t)0x0) | ifnode((aod::track::tofChi2 >= 0.f) && (aod::track::tofExpMom > 0.f), static_cast(o2::aod::track::TOF), (uint8_t)0x0)); -DECLARE_SOA_DYNAMIC_COLUMN(ITSClusterMap, itsClusterMap, //! ITS cluster map, one bit per a layer, starting from the innermost + +DECLARE_SOA_DYNAMIC_COLUMN(ITSClusterMap001, itsClusterMap, //! Dynamic ITS cluster map, one bit per a layer, starting from the innermost [](uint32_t itsClusterSizes) -> uint8_t { uint8_t clmap = 0; for (unsigned int layer = 0; layer < 7; layer++) { @@ -266,7 +289,7 @@ DECLARE_SOA_DYNAMIC_COLUMN(ITSClusterMap, itsClusterMap, //! ITS cluster map, on } return clmap; }); -DECLARE_SOA_DYNAMIC_COLUMN(ITSNCls, itsNCls, //! Number of ITS clusters +DECLARE_SOA_DYNAMIC_COLUMN(ITSNCls001, itsNCls, //! Number of ITS clusters [](uint8_t itsClusterSizes) -> uint8_t { uint8_t itsNcls = 0; for (int layer = 0; layer < 7; layer++) { @@ -275,7 +298,7 @@ DECLARE_SOA_DYNAMIC_COLUMN(ITSNCls, itsNCls, //! Number of ITS clusters } return itsNcls; }); -DECLARE_SOA_DYNAMIC_COLUMN(ITSNClsInnerBarrel, itsNClsInnerBarrel, //! Number of ITS clusters in the Inner Barrel +DECLARE_SOA_DYNAMIC_COLUMN(ITSNClsInnerBarrel001, itsNClsInnerBarrel, //! Number of ITS clusters in the Inner Barrel [](uint8_t itsClusterSizes) -> uint8_t { uint8_t itsNclsInnerBarrel = 0; for (int layer = 0; layer < 3; layer++) { @@ -285,8 +308,6 @@ DECLARE_SOA_DYNAMIC_COLUMN(ITSNClsInnerBarrel, itsNClsInnerBarrel, //! Number of return itsNclsInnerBarrel; }); -} // namespace v001 - DECLARE_SOA_DYNAMIC_COLUMN(HasITS, hasITS, //! Flag to check if track has a ITS match [](uint8_t detectorMap) -> bool { return detectorMap & o2::aod::track::ITS; }); DECLARE_SOA_DYNAMIC_COLUMN(HasTPC, hasTPC, //! Flag to check if track has a TPC match @@ -303,26 +324,7 @@ DECLARE_SOA_DYNAMIC_COLUMN(TPCNClsFound, tpcNClsFound, //! Number of found TPC c [](uint8_t tpcNClsFindable, int8_t tpcNClsFindableMinusFound) -> int16_t { return (int16_t)tpcNClsFindable - tpcNClsFindableMinusFound; }); DECLARE_SOA_DYNAMIC_COLUMN(TPCNClsCrossedRows, tpcNClsCrossedRows, //! Number of crossed TPC Rows [](uint8_t tpcNClsFindable, int8_t TPCNClsFindableMinusCrossedRows) -> int16_t { return (int16_t)tpcNClsFindable - TPCNClsFindableMinusCrossedRows; }); -DECLARE_SOA_DYNAMIC_COLUMN(ITSNCls, itsNCls, //! Number of ITS clusters - [](uint8_t itsClusterMap) -> uint8_t { - uint8_t itsNcls = 0; - constexpr uint8_t bit = 1; - for (int layer = 0; layer < 7; layer++) { - if (itsClusterMap & (bit << layer)) - itsNcls++; - } - return itsNcls; - }); -DECLARE_SOA_DYNAMIC_COLUMN(ITSNClsInnerBarrel, itsNClsInnerBarrel, //! Number of ITS clusters in the Inner Barrel - [](uint8_t itsClusterMap) -> uint8_t { - uint8_t itsNclsInnerBarrel = 0; - constexpr uint8_t bit = 1; - for (int layer = 0; layer < 3; layer++) { - if (itsClusterMap & (bit << layer)) - itsNclsInnerBarrel++; - } - return itsNclsInnerBarrel; - }); + DECLARE_SOA_DYNAMIC_COLUMN(TPCFoundOverFindableCls, tpcFoundOverFindableCls, //! Ratio of found over findable clusters [](uint8_t tpcNClsFindable, int8_t tpcNClsFindableMinusFound) -> float { int16_t tpcNClsFound = (int16_t)tpcNClsFindable - tpcNClsFindableMinusFound; @@ -440,8 +442,8 @@ DECLARE_SOA_TABLE_FULL(StoredTracksExtra_000, "TracksExtra", "AOD", "TRACKEXTRA" track::TPCSignal, track::TRDSignal, track::Length, track::TOFExpMom, track::PIDForTracking, track::IsPVContributor, - track::HasITS, track::HasTPC, - track::HasTRD, track::HasTOF, + track::HasITS, track::HasTPC, + track::HasTRD, track::HasTOF, track::TPCNClsFound, track::TPCNClsCrossedRows, track::ITSNCls, track::ITSNClsInnerBarrel, @@ -458,23 +460,23 @@ DECLARE_SOA_TABLE_FULL_VERSIONED(StoredTracksExtra_001, "TracksExtra", "AOD", "T track::TPCSignal, track::TRDSignal, track::Length, track::TOFExpMom, track::PIDForTracking, track::IsPVContributor, - track::HasITS, track::HasTPC, - track::HasTRD, track::HasTOF, + track::HasITS, track::HasTPC, + track::HasTRD, track::HasTOF, track::TPCNClsFound, track::TPCNClsCrossedRows, - track::v001::ITSClusterMap, track::v001::ITSNCls, track::v001::ITSNClsInnerBarrel, + track::ITSClusterMap001, track::ITSNCls001, track::ITSNClsInnerBarrel001, track::TPCCrossedRowsOverFindableCls, track::TPCFoundOverFindableCls, track::TPCFractionSharedCls, track::TrackEtaEMCAL, track::TrackPhiEMCAL, track::TrackTime, track::TrackTimeRes); DECLARE_SOA_EXTENDED_TABLE(TracksExtra_000, StoredTracksExtra_000, "TRACKEXTRA", //! Additional track information (clusters, PID, etc.) - track::DetectorMap); + track::v000::DetectorMap); DECLARE_SOA_EXTENDED_TABLE(TracksExtra_001, StoredTracksExtra_001, "TRACKEXTRA", //! Additional track information (clusters, PID, etc.) - track::v001::DetectorMap); + track::DetectorMap); -using StoredTracksExtra = StoredTracksExtra_000; -using TracksExtra = TracksExtra_000; +using StoredTracksExtra = StoredTracksExtra_001; +using TracksExtra = TracksExtra_001; using Track = Tracks::iterator; using TrackIU = TracksIU::iterator; From b724072cd5f1493c4b44747c3ae9760a2a34f333 Mon Sep 17 00:00:00 2001 From: fmazzasc Date: Mon, 23 Oct 2023 09:38:44 +0200 Subject: [PATCH 2/4] Fix test --- Framework/Core/test/test_AnalysisTask.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Framework/Core/test/test_AnalysisTask.cxx b/Framework/Core/test/test_AnalysisTask.cxx index 30e58735257ed..c166aec7f5b85 100644 --- a/Framework/Core/test/test_AnalysisTask.cxx +++ b/Framework/Core/test/test_AnalysisTask.cxx @@ -164,7 +164,7 @@ TEST_CASE("AdaptorCompilation") REQUIRE(task2.inputs.size() == 10); REQUIRE(task2.inputs[1].binding == "TracksExtension"); REQUIRE(task2.inputs[2].binding == "Tracks"); - REQUIRE(task2.inputs[3].binding == "TracksExtra_000Extension"); + REQUIRE(task2.inputs[3].binding == "TracksExtra_001Extension"); REQUIRE(task2.inputs[4].binding == "TracksExtra"); REQUIRE(task2.inputs[5].binding == "TracksCovExtension"); REQUIRE(task2.inputs[6].binding == "TracksCov"); From 4e31bd5e1dd2382488f45ec890223bd5e9d5b781 Mon Sep 17 00:00:00 2001 From: fmazzasc Date: Mon, 23 Oct 2023 11:00:12 +0200 Subject: [PATCH 3/4] Restore v001 --- .../include/Framework/AnalysisDataModel.h | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/Framework/Core/include/Framework/AnalysisDataModel.h b/Framework/Core/include/Framework/AnalysisDataModel.h index 6dd5135b54ddc..78a988f6a5a46 100644 --- a/Framework/Core/include/Framework/AnalysisDataModel.h +++ b/Framework/Core/include/Framework/AnalysisDataModel.h @@ -221,7 +221,7 @@ DECLARE_SOA_EXPRESSION_COLUMN(C1Pt21Pt2, c1Pt21Pt2, float, //! // TRACKEXTRA TABLE definition DECLARE_SOA_COLUMN(TPCInnerParam, tpcInnerParam, float); //! Momentum at inner wall of the TPC DECLARE_SOA_COLUMN(Flags, flags, uint32_t); //! Track flags. Run 2: see TrackFlagsRun2Enum | Run 3: see TrackFlags -DECLARE_SOA_COLUMN(ITSClusterMap, itsClusterMap, uint8_t); //! Old cluster ITS cluster map, kept for version 0 compatibility. Not in v000 namespace, as many O2Physics tables rely on this column +DECLARE_SOA_COLUMN(ITSClusterMap, itsClusterMap, uint8_t); //! Old cluster ITS cluster map, kept for version 0 compatibility DECLARE_SOA_COLUMN(ITSClusterSizes, itsClusterSizes, uint32_t); //! Clusters sizes, four bits per a layer, starting from the innermost DECLARE_SOA_COLUMN(TPCNClsFindable, tpcNClsFindable, uint8_t); //! Findable TPC clusters for this track geometry DECLARE_SOA_COLUMN(TPCNClsFindableMinusFound, tpcNClsFindableMinusFound, int8_t); //! TPC Clusters: Findable - Found @@ -241,15 +241,11 @@ DECLARE_SOA_COLUMN(TrackPhiEMCAL, trackPhiEmcal, float); DECLARE_SOA_COLUMN(TrackTime, trackTime, float); //! Estimated time of the track in ns wrt collision().bc() or ambiguoustrack.bcSlice()[0] DECLARE_SOA_COLUMN(TrackTimeRes, trackTimeRes, float); //! Resolution of the track time in ns (see TrackFlags::TrackTimeResIsRange) -// expression columns changing between versions needs to be declared in different namespaces -namespace v000 -{ DECLARE_SOA_EXPRESSION_COLUMN(DetectorMap, detectorMap, uint8_t, //! Detector map: see enum DetectorMapEnum ifnode(aod::track::itsClusterMap > (uint8_t)0, static_cast(o2::aod::track::ITS), (uint8_t)0x0) | ifnode(aod::track::tpcNClsFindable > (uint8_t)0, static_cast(o2::aod::track::TPC), (uint8_t)0x0) | ifnode(aod::track::trdPattern > (uint8_t)0, static_cast(o2::aod::track::TRD), (uint8_t)0x0) | ifnode((aod::track::tofChi2 >= 0.f) && (aod::track::tofExpMom > 0.f), static_cast(o2::aod::track::TOF), (uint8_t)0x0)); -} // namespace v000 DECLARE_SOA_DYNAMIC_COLUMN(ITSNCls, itsNCls, //! Number of ITS clusters [](uint8_t itsClusterMap) -> uint8_t { @@ -273,13 +269,16 @@ DECLARE_SOA_DYNAMIC_COLUMN(ITSNClsInnerBarrel, itsNClsInnerBarrel, //! Number of return itsNclsInnerBarrel; }); +// New columns are declared in a different namespace +namespace v001 +{ DECLARE_SOA_EXPRESSION_COLUMN(DetectorMap, detectorMap, uint8_t, //! Detector map version 1, see enum DetectorMapEnum ifnode(aod::track::itsClusterSizes > (uint32_t)0, static_cast(o2::aod::track::ITS), (uint8_t)0x0) | ifnode(aod::track::tpcNClsFindable > (uint8_t)0, static_cast(o2::aod::track::TPC), (uint8_t)0x0) | ifnode(aod::track::trdPattern > (uint8_t)0, static_cast(o2::aod::track::TRD), (uint8_t)0x0) | ifnode((aod::track::tofChi2 >= 0.f) && (aod::track::tofExpMom > 0.f), static_cast(o2::aod::track::TOF), (uint8_t)0x0)); -DECLARE_SOA_DYNAMIC_COLUMN(ITSClusterMap001, itsClusterMap, //! Dynamic ITS cluster map, one bit per a layer, starting from the innermost +DECLARE_SOA_DYNAMIC_COLUMN(ITSClusterMap, itsClusterMap, //! Dynamic ITS cluster map, one bit per a layer, starting from the innermost [](uint32_t itsClusterSizes) -> uint8_t { uint8_t clmap = 0; for (unsigned int layer = 0; layer < 7; layer++) { @@ -289,7 +288,7 @@ DECLARE_SOA_DYNAMIC_COLUMN(ITSClusterMap001, itsClusterMap, //! Dynamic ITS clus } return clmap; }); -DECLARE_SOA_DYNAMIC_COLUMN(ITSNCls001, itsNCls, //! Number of ITS clusters +DECLARE_SOA_DYNAMIC_COLUMN(ITSNCls, itsNCls, //! Number of ITS clusters [](uint8_t itsClusterSizes) -> uint8_t { uint8_t itsNcls = 0; for (int layer = 0; layer < 7; layer++) { @@ -298,7 +297,7 @@ DECLARE_SOA_DYNAMIC_COLUMN(ITSNCls001, itsNCls, //! Number of ITS clusters } return itsNcls; }); -DECLARE_SOA_DYNAMIC_COLUMN(ITSNClsInnerBarrel001, itsNClsInnerBarrel, //! Number of ITS clusters in the Inner Barrel +DECLARE_SOA_DYNAMIC_COLUMN(ITSNClsInnerBarrel, itsNClsInnerBarrel, //! Number of ITS clusters in the Inner Barrel [](uint8_t itsClusterSizes) -> uint8_t { uint8_t itsNclsInnerBarrel = 0; for (int layer = 0; layer < 3; layer++) { @@ -307,6 +306,7 @@ DECLARE_SOA_DYNAMIC_COLUMN(ITSNClsInnerBarrel001, itsNClsInnerBarrel, //! Number } return itsNclsInnerBarrel; }); +} // namespace v001 DECLARE_SOA_DYNAMIC_COLUMN(HasITS, hasITS, //! Flag to check if track has a ITS match [](uint8_t detectorMap) -> bool { return detectorMap & o2::aod::track::ITS; }); @@ -442,8 +442,8 @@ DECLARE_SOA_TABLE_FULL(StoredTracksExtra_000, "TracksExtra", "AOD", "TRACKEXTRA" track::TPCSignal, track::TRDSignal, track::Length, track::TOFExpMom, track::PIDForTracking, track::IsPVContributor, - track::HasITS, track::HasTPC, - track::HasTRD, track::HasTOF, + track::HasITS, track::HasTPC, + track::HasTRD, track::HasTOF, track::TPCNClsFound, track::TPCNClsCrossedRows, track::ITSNCls, track::ITSNClsInnerBarrel, @@ -460,20 +460,20 @@ DECLARE_SOA_TABLE_FULL_VERSIONED(StoredTracksExtra_001, "TracksExtra", "AOD", "T track::TPCSignal, track::TRDSignal, track::Length, track::TOFExpMom, track::PIDForTracking, track::IsPVContributor, - track::HasITS, track::HasTPC, - track::HasTRD, track::HasTOF, + track::HasITS, track::HasTPC, + track::HasTRD, track::HasTOF, track::TPCNClsFound, track::TPCNClsCrossedRows, - track::ITSClusterMap001, track::ITSNCls001, track::ITSNClsInnerBarrel001, + track::v001::ITSClusterMap, track::v001::ITSNCls, track::v001::ITSNClsInnerBarrel, track::TPCCrossedRowsOverFindableCls, track::TPCFoundOverFindableCls, track::TPCFractionSharedCls, track::TrackEtaEMCAL, track::TrackPhiEMCAL, track::TrackTime, track::TrackTimeRes); DECLARE_SOA_EXTENDED_TABLE(TracksExtra_000, StoredTracksExtra_000, "TRACKEXTRA", //! Additional track information (clusters, PID, etc.) - track::v000::DetectorMap); -DECLARE_SOA_EXTENDED_TABLE(TracksExtra_001, StoredTracksExtra_001, "TRACKEXTRA", //! Additional track information (clusters, PID, etc.) track::DetectorMap); +DECLARE_SOA_EXTENDED_TABLE(TracksExtra_001, StoredTracksExtra_001, "TRACKEXTRA", //! Additional track information (clusters, PID, etc.) + track::v001::DetectorMap); using StoredTracksExtra = StoredTracksExtra_001; using TracksExtra = TracksExtra_001; From 06e6ec352aff4d37b545701d54ba04b554962014 Mon Sep 17 00:00:00 2001 From: fmazzasc Date: Mon, 23 Oct 2023 12:03:35 +0200 Subject: [PATCH 4/4] Minimal change of AnalysisDataModel --- .../include/Framework/AnalysisDataModel.h | 52 +++++++++---------- 1 file changed, 25 insertions(+), 27 deletions(-) diff --git a/Framework/Core/include/Framework/AnalysisDataModel.h b/Framework/Core/include/Framework/AnalysisDataModel.h index 78a988f6a5a46..be7c05aeb3d1e 100644 --- a/Framework/Core/include/Framework/AnalysisDataModel.h +++ b/Framework/Core/include/Framework/AnalysisDataModel.h @@ -221,8 +221,8 @@ DECLARE_SOA_EXPRESSION_COLUMN(C1Pt21Pt2, c1Pt21Pt2, float, //! // TRACKEXTRA TABLE definition DECLARE_SOA_COLUMN(TPCInnerParam, tpcInnerParam, float); //! Momentum at inner wall of the TPC DECLARE_SOA_COLUMN(Flags, flags, uint32_t); //! Track flags. Run 2: see TrackFlagsRun2Enum | Run 3: see TrackFlags -DECLARE_SOA_COLUMN(ITSClusterMap, itsClusterMap, uint8_t); //! Old cluster ITS cluster map, kept for version 0 compatibility DECLARE_SOA_COLUMN(ITSClusterSizes, itsClusterSizes, uint32_t); //! Clusters sizes, four bits per a layer, starting from the innermost +DECLARE_SOA_COLUMN(ITSClusterMap, itsClusterMap, uint8_t); //! Old cluster ITS cluster map, kept for version 0 compatibility DECLARE_SOA_COLUMN(TPCNClsFindable, tpcNClsFindable, uint8_t); //! Findable TPC clusters for this track geometry DECLARE_SOA_COLUMN(TPCNClsFindableMinusFound, tpcNClsFindableMinusFound, int8_t); //! TPC Clusters: Findable - Found DECLARE_SOA_COLUMN(TPCNClsFindableMinusCrossedRows, tpcNClsFindableMinusCrossedRows, int8_t); //! TPC Clusters: Findable - crossed rows @@ -241,35 +241,14 @@ DECLARE_SOA_COLUMN(TrackPhiEMCAL, trackPhiEmcal, float); DECLARE_SOA_COLUMN(TrackTime, trackTime, float); //! Estimated time of the track in ns wrt collision().bc() or ambiguoustrack.bcSlice()[0] DECLARE_SOA_COLUMN(TrackTimeRes, trackTimeRes, float); //! Resolution of the track time in ns (see TrackFlags::TrackTimeResIsRange) +// expression columns changing between versions have to be declared in different namespaces + DECLARE_SOA_EXPRESSION_COLUMN(DetectorMap, detectorMap, uint8_t, //! Detector map: see enum DetectorMapEnum ifnode(aod::track::itsClusterMap > (uint8_t)0, static_cast(o2::aod::track::ITS), (uint8_t)0x0) | ifnode(aod::track::tpcNClsFindable > (uint8_t)0, static_cast(o2::aod::track::TPC), (uint8_t)0x0) | ifnode(aod::track::trdPattern > (uint8_t)0, static_cast(o2::aod::track::TRD), (uint8_t)0x0) | ifnode((aod::track::tofChi2 >= 0.f) && (aod::track::tofExpMom > 0.f), static_cast(o2::aod::track::TOF), (uint8_t)0x0)); -DECLARE_SOA_DYNAMIC_COLUMN(ITSNCls, itsNCls, //! Number of ITS clusters - [](uint8_t itsClusterMap) -> uint8_t { - uint8_t itsNcls = 0; - constexpr uint8_t bit = 1; - for (int layer = 0; layer < 7; layer++) { - if (itsClusterMap & (bit << layer)) - itsNcls++; - } - return itsNcls; - }); - -DECLARE_SOA_DYNAMIC_COLUMN(ITSNClsInnerBarrel, itsNClsInnerBarrel, //! Number of ITS clusters in the Inner Barrel - [](uint8_t itsClusterMap) -> uint8_t { - uint8_t itsNclsInnerBarrel = 0; - constexpr uint8_t bit = 1; - for (int layer = 0; layer < 3; layer++) { - if (itsClusterMap & (bit << layer)) - itsNclsInnerBarrel++; - } - return itsNclsInnerBarrel; - }); - -// New columns are declared in a different namespace namespace v001 { DECLARE_SOA_EXPRESSION_COLUMN(DetectorMap, detectorMap, uint8_t, //! Detector map version 1, see enum DetectorMapEnum @@ -277,8 +256,7 @@ DECLARE_SOA_EXPRESSION_COLUMN(DetectorMap, detectorMap, uint8_t, //! Detector ma ifnode(aod::track::tpcNClsFindable > (uint8_t)0, static_cast(o2::aod::track::TPC), (uint8_t)0x0) | ifnode(aod::track::trdPattern > (uint8_t)0, static_cast(o2::aod::track::TRD), (uint8_t)0x0) | ifnode((aod::track::tofChi2 >= 0.f) && (aod::track::tofExpMom > 0.f), static_cast(o2::aod::track::TOF), (uint8_t)0x0)); - -DECLARE_SOA_DYNAMIC_COLUMN(ITSClusterMap, itsClusterMap, //! Dynamic ITS cluster map, one bit per a layer, starting from the innermost +DECLARE_SOA_DYNAMIC_COLUMN(ITSClusterMap, itsClusterMap, //! ITS cluster map, one bit per a layer, starting from the innermost [](uint32_t itsClusterSizes) -> uint8_t { uint8_t clmap = 0; for (unsigned int layer = 0; layer < 7; layer++) { @@ -306,6 +284,7 @@ DECLARE_SOA_DYNAMIC_COLUMN(ITSNClsInnerBarrel, itsNClsInnerBarrel, //! Number of } return itsNclsInnerBarrel; }); + } // namespace v001 DECLARE_SOA_DYNAMIC_COLUMN(HasITS, hasITS, //! Flag to check if track has a ITS match @@ -324,7 +303,26 @@ DECLARE_SOA_DYNAMIC_COLUMN(TPCNClsFound, tpcNClsFound, //! Number of found TPC c [](uint8_t tpcNClsFindable, int8_t tpcNClsFindableMinusFound) -> int16_t { return (int16_t)tpcNClsFindable - tpcNClsFindableMinusFound; }); DECLARE_SOA_DYNAMIC_COLUMN(TPCNClsCrossedRows, tpcNClsCrossedRows, //! Number of crossed TPC Rows [](uint8_t tpcNClsFindable, int8_t TPCNClsFindableMinusCrossedRows) -> int16_t { return (int16_t)tpcNClsFindable - TPCNClsFindableMinusCrossedRows; }); - +DECLARE_SOA_DYNAMIC_COLUMN(ITSNCls, itsNCls, //! Number of ITS clusters + [](uint8_t itsClusterMap) -> uint8_t { + uint8_t itsNcls = 0; + constexpr uint8_t bit = 1; + for (int layer = 0; layer < 7; layer++) { + if (itsClusterMap & (bit << layer)) + itsNcls++; + } + return itsNcls; + }); +DECLARE_SOA_DYNAMIC_COLUMN(ITSNClsInnerBarrel, itsNClsInnerBarrel, //! Number of ITS clusters in the Inner Barrel + [](uint8_t itsClusterMap) -> uint8_t { + uint8_t itsNclsInnerBarrel = 0; + constexpr uint8_t bit = 1; + for (int layer = 0; layer < 3; layer++) { + if (itsClusterMap & (bit << layer)) + itsNclsInnerBarrel++; + } + return itsNclsInnerBarrel; + }); DECLARE_SOA_DYNAMIC_COLUMN(TPCFoundOverFindableCls, tpcFoundOverFindableCls, //! Ratio of found over findable clusters [](uint8_t tpcNClsFindable, int8_t tpcNClsFindableMinusFound) -> float { int16_t tpcNClsFound = (int16_t)tpcNClsFindable - tpcNClsFindableMinusFound;