From 4e17997534c81e3e3b945bc7c290a47fa2352bc3 Mon Sep 17 00:00:00 2001 From: Maximiliano Puccio Date: Wed, 20 Sep 2023 20:19:15 +0200 Subject: [PATCH 01/20] Add ITS cluster size to the AO2D --- .../ITS/include/DataFormatsITS/TrackITS.h | 19 ++++++++++++++++++- .../AODProducerWorkflowSpec.h | 1 + Detectors/AOD/src/AODProducerWorkflowSpec.cxx | 5 +++++ .../tracking/include/ITStracking/TimeFrame.h | 6 ++++++ .../ITSMFT/ITS/tracking/src/TimeFrame.cxx | 7 +++++++ .../ITSMFT/ITS/workflow/src/TrackerSpec.cxx | 1 + .../include/Framework/AnalysisDataModel.h | 3 ++- 7 files changed, 40 insertions(+), 2 deletions(-) diff --git a/DataFormats/Detectors/ITSMFT/ITS/include/DataFormatsITS/TrackITS.h b/DataFormats/Detectors/ITSMFT/ITS/include/DataFormatsITS/TrackITS.h index 3cef7f45a9fb1..1e7ec569849cb 100644 --- a/DataFormats/Detectors/ITSMFT/ITS/include/DataFormatsITS/TrackITS.h +++ b/DataFormats/Detectors/ITSMFT/ITS/include/DataFormatsITS/TrackITS.h @@ -122,13 +122,30 @@ class TrackITS : public o2::track::TrackParCov void setNextROFbit(bool toggle = true) { setUserField((getUserField() & ~kNextROF) | (-toggle & kNextROF)); } bool hasHitInNextROF() const { return getUserField() & kNextROF; } + void setClusterSize(int l, int size) { + if (l >= 8) return; + if (size > 15) size = 15; + mClusterSizes &= ~(0xf << (l * 4)); + mClusterSizes |= (size << (l * 4)); + } + + int getClusterSize(int l) { + if (l >= 8) return 0; + return (mClusterSizes >> (l * 4)) & 0xf; + } + + int getClusterSizes() const { + return mClusterSizes; + } + private: o2::track::TrackParCov mParamOut; ///< parameter at largest radius ClusRefs mClusRef; ///< references on clusters float mChi2 = 0.; ///< Chi2 for this track uint32_t mPattern = 0; ///< layers pattern + unsigned int mClusterSizes = 0u; - ClassDefNV(TrackITS, 5); + ClassDefNV(TrackITS, 6); }; class TrackITSExt : public TrackITS diff --git a/Detectors/AOD/include/AODProducerWorkflow/AODProducerWorkflowSpec.h b/Detectors/AOD/include/AODProducerWorkflow/AODProducerWorkflowSpec.h index 10c70ad2e77eb..854b487cbe78e 100644 --- a/Detectors/AOD/include/AODProducerWorkflow/AODProducerWorkflowSpec.h +++ b/Detectors/AOD/include/AODProducerWorkflow/AODProducerWorkflowSpec.h @@ -356,6 +356,7 @@ class AODProducerWorkflowDPL : public Task struct TrackExtraInfo { float tpcInnerParam = 0.f; uint32_t flags = 0; + uint32_t itsClusterSizes = 0u; uint8_t itsClusterMap = 0; uint8_t tpcNClsFindable = 0; int8_t tpcNClsFindableMinusFound = 0; diff --git a/Detectors/AOD/src/AODProducerWorkflowSpec.cxx b/Detectors/AOD/src/AODProducerWorkflowSpec.cxx index 6984ed3841e63..9b04e7fad8435 100644 --- a/Detectors/AOD/src/AODProducerWorkflowSpec.cxx +++ b/Detectors/AOD/src/AODProducerWorkflowSpec.cxx @@ -320,6 +320,7 @@ void AODProducerWorkflowDPL::addToTracksExtraTable(TracksExtraCursorType& tracks tracksExtraCursor(truncateFloatFraction(extraInfoHolder.tpcInnerParam, mTrack1Pt), extraInfoHolder.flags, extraInfoHolder.itsClusterMap, + extraInfoHolder.itsClusterSizes, extraInfoHolder.tpcNClsFindable, extraInfoHolder.tpcNClsFindableMinusFound, extraInfoHolder.tpcNClsFindableMinusCrossedRows, @@ -2371,6 +2372,7 @@ AODProducerWorkflowDPL::TrackExtraInfo AODProducerWorkflowDPL::processBarrelTrac 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; @@ -2729,6 +2731,9 @@ DataProcessorSpec getAODProducerWorkflowSpec(GID::mask_t src, bool enableSV, boo dataRequest->requestStrangeTracks(useMC); LOGF(info, "requestStrangeTracks Finish"); } + if (src[GID::ITS]) { + dataRequest->requestClusters(GIndex::getSourcesMask("ITS"), false); + } if (src[GID::TPC]) { dataRequest->requestClusters(GIndex::getSourcesMask("TPC"), false); // no need to ask for TOF clusters as they are requested with TOF tracks } diff --git a/Detectors/ITSMFT/ITS/tracking/include/ITStracking/TimeFrame.h b/Detectors/ITSMFT/ITS/tracking/include/ITStracking/TimeFrame.h index da35b1714978a..82d1e6fcf2e83 100644 --- a/Detectors/ITSMFT/ITS/tracking/include/ITStracking/TimeFrame.h +++ b/Detectors/ITSMFT/ITS/tracking/include/ITStracking/TimeFrame.h @@ -129,6 +129,7 @@ class TimeFrame const gsl::span getClusterLabels(int layerId, const Cluster& cl) const; const gsl::span getClusterLabels(int layerId, const int clId) const; int getClusterExternalIndex(int layerId, const int clId) const; + int getClusterSize(int clusterId); std::vector& getTrackletsLabel(int layer) { return mTrackletLabels[layer]; } std::vector& getCellsLabel(int layer) { return mCellLabels[layer]; } @@ -244,6 +245,7 @@ class TimeFrame std::vector mMSangles; std::vector mPhiCuts; std::vector mPositionResolution; + std::vector mClusterSize; std::vector mMultiplicityCutMask; std::vector> mPValphaX; /// PV x and alpha for track propagation std::vector> mUnsortedClusters; @@ -424,6 +426,10 @@ inline const gsl::span TimeFrame::getClusterLabels(int layerI return mClusterLabels->getLabels(mClusterExternalIndices[layerId][clId]); } +inline int TimeFrame::getClusterSize(int clusterId) { + return mClusterSize[clusterId]; +} + inline int TimeFrame::getClusterExternalIndex(int layerId, const int clId) const { return mClusterExternalIndices[layerId][clId]; diff --git a/Detectors/ITSMFT/ITS/tracking/src/TimeFrame.cxx b/Detectors/ITSMFT/ITS/tracking/src/TimeFrame.cxx index 24349e30b8017..d26a9f2c44c22 100644 --- a/Detectors/ITSMFT/ITS/tracking/src/TimeFrame.cxx +++ b/Detectors/ITSMFT/ITS/tracking/src/TimeFrame.cxx @@ -175,6 +175,8 @@ int TimeFrame::loadROFrameData(gsl::span rofs, geom->fillMatrixCache(o2::math_utils::bit2Mask(o2::math_utils::TransformType::T2L, o2::math_utils::TransformType::L2G)); mNrof = 0; + mClusterSize.clear(); + mClusterSize.reserve(clusters.size()); for (auto& rof : rofs) { for (int clusterId{rof.getFirstEntry()}; clusterId < rof.getFirstEntry() + rof.getNEntries(); ++clusterId) { auto& c = clusters[clusterId]; @@ -184,19 +186,24 @@ int TimeFrame::loadROFrameData(gsl::span rofs, auto pattID = c.getPatternID(); o2::math_utils::Point3D locXYZ; float sigmaY2 = DefClusError2Row, sigmaZ2 = DefClusError2Col, sigmaYZ = 0; // Dummy COG errors (about half pixel size) + int clusterSize{0}; if (pattID != itsmft::CompCluster::InvalidPatternID) { sigmaY2 = dict->getErr2X(pattID); sigmaZ2 = dict->getErr2Z(pattID); if (!dict->isGroup(pattID)) { locXYZ = dict->getClusterCoordinates(c); + clusterSize = dict->getNpixels(pattID); } else { o2::itsmft::ClusterPattern patt(pattIt); locXYZ = dict->getClusterCoordinates(c, patt); + clusterSize = patt.getNPixels(); } } else { o2::itsmft::ClusterPattern patt(pattIt); locXYZ = dict->getClusterCoordinates(c, patt, false); + clusterSize = patt.getNPixels(); } + mClusterSize.push_back(clusterSize); auto sensorID = c.getSensorID(); // Inverse transformation to the local --> tracking auto trkXYZ = geom->getMatrixT2L(sensorID) ^ locXYZ; diff --git a/Detectors/ITSMFT/ITS/workflow/src/TrackerSpec.cxx b/Detectors/ITSMFT/ITS/workflow/src/TrackerSpec.cxx index a61f454822681..b190bf7a9bcb2 100644 --- a/Detectors/ITSMFT/ITS/workflow/src/TrackerSpec.cxx +++ b/Detectors/ITSMFT/ITS/workflow/src/TrackerSpec.cxx @@ -297,6 +297,7 @@ void TrackerDPL::run(ProcessingContext& pc) for (int ic = TrackITSExt::MaxClusters; ic--;) { // track internally keeps in->out cluster indices, but we want to store the references as out->in!!! auto clid = trc.getClusterIndex(ic); if (clid >= 0) { + trc.setClusterSize(ic, mTimeFrame->getClusterSize(clid)); allClusIdx.push_back(clid); nclf++; } diff --git a/Framework/Core/include/Framework/AnalysisDataModel.h b/Framework/Core/include/Framework/AnalysisDataModel.h index e409dba7db9da..4a154fdd1cce5 100644 --- a/Framework/Core/include/Framework/AnalysisDataModel.h +++ b/Framework/Core/include/Framework/AnalysisDataModel.h @@ -222,6 +222,7 @@ DECLARE_SOA_EXPRESSION_COLUMN(C1Pt21Pt2, c1Pt21Pt2, float, //! 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); //! ITS cluster map, one bit per a layer, starting from the innermost +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 DECLARE_SOA_COLUMN(TPCNClsFindableMinusCrossedRows, tpcNClsFindableMinusCrossedRows, int8_t); //! TPC Clusters: Findable - crossed rows @@ -391,7 +392,7 @@ DECLARE_SOA_EXTENDED_TABLE(TracksCovIU, StoredTracksCovIU, "TRACKCOV_IU", //! Tr aod::track::C1Pt21Pt2); DECLARE_SOA_TABLE_FULL(StoredTracksExtra, "TracksExtra", "AOD", "TRACKEXTRA", //! On disk version of TracksExtra - track::TPCInnerParam, track::Flags, track::ITSClusterMap, + track::TPCInnerParam, track::Flags, track::ITSClusterMap, track::ITSClusterSizes, track::TPCNClsFindable, track::TPCNClsFindableMinusFound, track::TPCNClsFindableMinusCrossedRows, track::TPCNClsShared, track::TRDPattern, track::ITSChi2NCl, track::TPCChi2NCl, track::TRDChi2, track::TOFChi2, From 32e23d2346a73c7f0dedec069ff6360dddcc4821 Mon Sep 17 00:00:00 2001 From: fmazzasc Date: Fri, 6 Oct 2023 15:19:33 +0200 Subject: [PATCH 02/20] Add TracksExtra_001 --- .../include/Framework/AnalysisDataModel.h | 40 ++++++++++++++++--- Framework/Core/src/AODReaderHelpers.cxx | 6 ++- 2 files changed, 38 insertions(+), 8 deletions(-) diff --git a/Framework/Core/include/Framework/AnalysisDataModel.h b/Framework/Core/include/Framework/AnalysisDataModel.h index 4a154fdd1cce5..3437ad99059d9 100644 --- a/Framework/Core/include/Framework/AnalysisDataModel.h +++ b/Framework/Core/include/Framework/AnalysisDataModel.h @@ -391,8 +391,8 @@ DECLARE_SOA_EXTENDED_TABLE(TracksCovIU, StoredTracksCovIU, "TRACKCOV_IU", //! Tr aod::track::C1PtTgl, aod::track::C1Pt21Pt2); -DECLARE_SOA_TABLE_FULL(StoredTracksExtra, "TracksExtra", "AOD", "TRACKEXTRA", //! On disk version of TracksExtra - track::TPCInnerParam, track::Flags, track::ITSClusterMap, track::ITSClusterSizes, +DECLARE_SOA_TABLE_FULL(StoredTracksExtra_000, "TracksExtra", "AOD", "TRACKEXTRA", //! On disk version of TracksExtra + track::TPCInnerParam, track::Flags, track::ITSClusterMap, track::TPCNClsFindable, track::TPCNClsFindableMinusFound, track::TPCNClsFindableMinusCrossedRows, track::TPCNClsShared, track::TRDPattern, track::ITSChi2NCl, track::TPCChi2NCl, track::TRDChi2, track::TOFChi2, @@ -409,9 +409,34 @@ DECLARE_SOA_TABLE_FULL(StoredTracksExtra, "TracksExtra", "AOD", "TRACKEXTRA", // track::TPCFractionSharedCls, track::TrackEtaEMCAL, track::TrackPhiEMCAL, track::TrackTime, track::TrackTimeRes); -DECLARE_SOA_EXTENDED_TABLE(TracksExtra, StoredTracksExtra, "TRACKEXTRA", //! Additional track information (clusters, PID, etc.) +DECLARE_SOA_TABLE_FULL_VERSIONED(StoredTracksExtra_001, "TracksExtra", "AOD", "TRACKEXTRA", 1, // Version 1 of TracksExtra + track::TPCInnerParam, track::Flags, track::ITSClusterMap, track::ITSClusterSizes, + track::TPCNClsFindable, track::TPCNClsFindableMinusFound, track::TPCNClsFindableMinusCrossedRows, + track::TPCNClsShared, track::TRDPattern, track::ITSChi2NCl, + track::TPCChi2NCl, track::TRDChi2, track::TOFChi2, + track::TPCSignal, track::TRDSignal, track::Length, track::TOFExpMom, + track::PIDForTracking, + track::IsPVContributor, + track::HasITS, track::HasTPC, + track::HasTRD, track::HasTOF, + track::TPCNClsFound, + track::TPCNClsCrossedRows, + track::ITSNCls, track::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::DetectorMap); +DECLARE_SOA_EXTENDED_TABLE(TracksExtra_001, StoredTracksExtra_001, "TRACKEXTRA", //! Additional track information (clusters, PID, etc.) + track::DetectorMap); + +using StoredTracksExtra = StoredTracksExtra_001; +using TracksExtra = TracksExtra_001; + using Track = Tracks::iterator; using TrackIU = TracksIU::iterator; using TrackCov = TracksCov::iterator; @@ -1299,7 +1324,7 @@ using Run2BCInfo = Run2BCInfos::iterator; // ---- MC tables ---- namespace mccollision { -DECLARE_SOA_INDEX_COLUMN(BC, bc); //! BC index +DECLARE_SOA_INDEX_COLUMN(BC, bc); //! BC index DECLARE_SOA_COLUMN(GeneratorsID, generatorsID, short); //! disentangled generator IDs should be accessed from dynamic columns using getGenId, getCocktailId and getSourceId DECLARE_SOA_COLUMN(PosX, posX, float); //! X vertex position in cm DECLARE_SOA_COLUMN(PosY, posY, float); //! Y vertex position in cm @@ -1438,8 +1463,11 @@ namespace soa DECLARE_EQUIVALENT_FOR_INDEX(aod::Collisions_000, aod::Collisions_001); DECLARE_EQUIVALENT_FOR_INDEX(aod::StoredMcParticles_000, aod::StoredMcParticles_001); DECLARE_EQUIVALENT_FOR_INDEX(aod::StoredTracks, aod::StoredTracksIU); -DECLARE_EQUIVALENT_FOR_INDEX(aod::StoredTracks, aod::StoredTracksExtra); -DECLARE_EQUIVALENT_FOR_INDEX(aod::StoredTracksIU, aod::StoredTracksExtra); +DECLARE_EQUIVALENT_FOR_INDEX(aod::StoredTracks, aod::StoredTracksExtra_000); +DECLARE_EQUIVALENT_FOR_INDEX(aod::StoredTracksIU, aod::StoredTracksExtra_000); +DECLARE_EQUIVALENT_FOR_INDEX(aod::StoredTracks, aod::StoredTracksExtra_001); +DECLARE_EQUIVALENT_FOR_INDEX(aod::StoredTracksIU, aod::StoredTracksExtra_001); +DECLARE_EQUIVALENT_FOR_INDEX(aod::StoredTracksExtra_000, aod::StoredTracksExtra_001); DECLARE_EQUIVALENT_FOR_INDEX(aod::HMPID_000, aod::HMPID_001); } // namespace soa diff --git a/Framework/Core/src/AODReaderHelpers.cxx b/Framework/Core/src/AODReaderHelpers.cxx index e8e9700a8f519..66a00911c3718 100644 --- a/Framework/Core/src/AODReaderHelpers.cxx +++ b/Framework/Core/src/AODReaderHelpers.cxx @@ -175,8 +175,10 @@ AlgorithmSpec AODReaderHelpers::aodSpawnerCallback(std::vector& reque outputs.adopt(Output{origin, description, version}, maker(o2::aod::TracksCovExtensionMetadata{})); } else if (description == header::DataDescription{"TRACKCOV_IU"}) { outputs.adopt(Output{origin, description, version}, maker(o2::aod::TracksCovIUExtensionMetadata{})); - } else if (description == header::DataDescription{"TRACKEXTRA"}) { - outputs.adopt(Output{origin, description, version}, maker(o2::aod::TracksExtraExtensionMetadata{})); + } else if (description == header::DataDescription{"TRACKEXTRA_000"}) { + outputs.adopt(Output{origin, description, version}, maker(o2::aod::TracksExtra_000ExtensionMetadata{})); + } else if (description == header::DataDescription{"TRACKEXTRA_001"}) { + outputs.adopt(Output{origin, description, version}, maker(o2::aod::TracksExtra_001ExtensionMetadata{})); } else if (description == header::DataDescription{"MFTTRACK"}) { outputs.adopt(Output{origin, description, version}, maker(o2::aod::MFTTracksExtensionMetadata{})); } else if (description == header::DataDescription{"FWDTRACK"}) { From 91def847b162d98d7bb763c35540fde18c61e0ec Mon Sep 17 00:00:00 2001 From: fmazzasc Date: Mon, 9 Oct 2023 09:41:38 +0200 Subject: [PATCH 03/20] Update readerhelper --- Framework/Core/src/AODReaderHelpers.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Framework/Core/src/AODReaderHelpers.cxx b/Framework/Core/src/AODReaderHelpers.cxx index 66a00911c3718..4410fe8ba8031 100644 --- a/Framework/Core/src/AODReaderHelpers.cxx +++ b/Framework/Core/src/AODReaderHelpers.cxx @@ -175,7 +175,7 @@ AlgorithmSpec AODReaderHelpers::aodSpawnerCallback(std::vector& reque outputs.adopt(Output{origin, description, version}, maker(o2::aod::TracksCovExtensionMetadata{})); } else if (description == header::DataDescription{"TRACKCOV_IU"}) { outputs.adopt(Output{origin, description, version}, maker(o2::aod::TracksCovIUExtensionMetadata{})); - } else if (description == header::DataDescription{"TRACKEXTRA_000"}) { + } else if (description == header::DataDescription{"TRACKEXTRA"}) { outputs.adopt(Output{origin, description, version}, maker(o2::aod::TracksExtra_000ExtensionMetadata{})); } else if (description == header::DataDescription{"TRACKEXTRA_001"}) { outputs.adopt(Output{origin, description, version}, maker(o2::aod::TracksExtra_001ExtensionMetadata{})); From 37ad278d973310d4336afde3c536ae968a7b4cfd Mon Sep 17 00:00:00 2001 From: fmazzasc Date: Mon, 9 Oct 2023 10:27:47 +0200 Subject: [PATCH 04/20] Add cluster sizes to AB --- .../include/DataFormatsITSMFT/TrkClusRef.h | 22 ++++- Detectors/AOD/src/AODProducerWorkflowSpec.cxx | 1 + .../include/GlobalTracking/MatchTPCITS.h | 82 +++++++++---------- Detectors/GlobalTracking/src/MatchTPCITS.cxx | 29 +++++-- 4 files changed, 87 insertions(+), 47 deletions(-) diff --git a/DataFormats/Detectors/ITSMFT/common/include/DataFormatsITSMFT/TrkClusRef.h b/DataFormats/Detectors/ITSMFT/common/include/DataFormatsITSMFT/TrkClusRef.h index 164fd850fd539..28e2a6ae44262 100644 --- a/DataFormats/Detectors/ITSMFT/common/include/DataFormatsITSMFT/TrkClusRef.h +++ b/DataFormats/Detectors/ITSMFT/common/include/DataFormatsITSMFT/TrkClusRef.h @@ -26,11 +26,31 @@ namespace itsmft struct TrkClusRef : public o2::dataformats::RangeRefComp<4> { using o2::dataformats::RangeRefComp<4>::RangeRefComp; uint16_t pattern = 0; ///< layers pattern + uint32_t clsizes = 0; ///< cluster sizes for each layer GPUd() int getNClusters() const { return getEntries(); } bool hasHitOnLayer(int i) { return pattern & (0x1 << i); } - ClassDefNV(TrkClusRef, 1); + + void setClusterSize(int l, int size) { + if (l >= 8) return; + if (size > 15) size = 15; + clsizes &= ~(0xf << (l * 4)); + clsizes |= (size << (l * 4)); + } + + int getClusterSize(int l) { + if (l >= 8) return 0; + return (clsizes >> (l * 4)) & 0xf; + } + + int getClusterSizes() const { + return clsizes; + } + + + + ClassDefNV(TrkClusRef, 2); }; } // namespace itsmft diff --git a/Detectors/AOD/src/AODProducerWorkflowSpec.cxx b/Detectors/AOD/src/AODProducerWorkflowSpec.cxx index 9b04e7fad8435..f39b18d49501a 100644 --- a/Detectors/AOD/src/AODProducerWorkflowSpec.cxx +++ b/Detectors/AOD/src/AODProducerWorkflowSpec.cxx @@ -2380,6 +2380,7 @@ AODProducerWorkflowDPL::TrackExtraInfo AODProducerWorkflowDPL::processBarrelTrac } } 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()].clsizes; } if (contributorsGID[GIndex::Source::TPC].isIndexSet()) { const auto& tpcOrig = data.getTPCTrack(contributorsGID[GIndex::TPC]); diff --git a/Detectors/GlobalTracking/include/GlobalTracking/MatchTPCITS.h b/Detectors/GlobalTracking/include/GlobalTracking/MatchTPCITS.h index 7dc23b0af84de..f001f49f1e63e 100644 --- a/Detectors/GlobalTracking/include/GlobalTracking/MatchTPCITS.h +++ b/Detectors/GlobalTracking/include/GlobalTracking/MatchTPCITS.h @@ -86,7 +86,7 @@ namespace tpc { class TrackTPC; class VDriftCorrFact; -} +} // namespace tpc namespace gpu { @@ -124,7 +124,7 @@ struct TrackLocTPC : public o2::track::TrackParCov { float timeErr = 0.f; ///< time sigma (makes sense for constrained tracks only) int sourceID = 0; ///< TPC track origin in o2::dataformats::GlobalTrackID gid{}; // global track source ID (TPC track may be part of it) - int matchID = MinusOne; ///< entry (non if MinusOne) of its matchTPC struct in the mMatchesTPC + int matchID = MinusOne; ///< entry (non if MinusOne) of its matchTPC struct in the mMatchesTPC Constraint_t constraint{Constrained}; float getCorrectedTime(float dt) const // return time0 corrected for extra drift (to match certain Z) @@ -145,9 +145,9 @@ struct TrackLocITS : public o2::track::TrackParCov { enum : uint16_t { CloneBefore = 0x1, CloneAfter = 0x2 }; o2::math_utils::Bracketf_t tBracket; ///< bracketing time in \mus - int sourceID = 0; ///< track origin id - int roFrame = MinusOne; ///< ITS readout frame assigned to this track - int matchID = MinusOne; ///< entry (non if MinusOne) of its matchCand struct in the mMatchesITS + int sourceID = 0; ///< track origin id + int roFrame = MinusOne; ///< ITS readout frame assigned to this track + int matchID = MinusOne; ///< entry (non if MinusOne) of its matchCand struct in the mMatchesITS bool hasCloneBefore() const { return getUserField() & CloneBefore; } bool hasCloneAfter() const { return getUserField() & CloneAfter; } int getCloneShift() const { return hasCloneBefore() ? -1 : (hasCloneAfter() ? 1 : 0); } @@ -523,13 +523,13 @@ class MatchTPCITS float correctTPCTrack(o2::track::TrackParCov& trc, const TrackLocTPC& tTPC, const InteractionCandidate& cand) const; // RS FIXME will be needed for refit //================================================================ - bool mInitDone = false; ///< flag init already done - bool mFieldON = true; ///< flag for field ON/OFF - bool mCosmics = false; ///< flag cosmics mode - bool mMCTruthON = false; ///< flag availability of MC truth - float mBz = 0; ///< nominal Bz - int mTFCount = 0; ///< internal TF counter for debugger - int mNThreads = 1; ///< number of OMP threads + bool mInitDone = false; ///< flag init already done + bool mFieldON = true; ///< flag for field ON/OFF + bool mCosmics = false; ///< flag cosmics mode + bool mMCTruthON = false; ///< flag availability of MC truth + float mBz = 0; ///< nominal Bz + int mTFCount = 0; ///< internal TF counter for debugger + int mNThreads = 1; ///< number of OMP threads o2::InteractionRecord mStartIR{0, 0}; ///< IR corresponding to the start of the TF ///========== Parameters to be set externally, e.g. from CCDB ==================== @@ -553,27 +553,27 @@ class MatchTPCITS ///< assigned time0 and its track Z position (converted from mTPCTimeEdgeZSafeMargin) float mTPCTimeEdgeTSafeMargin = 0.f; float mTPCExtConstrainedNSigmaInv = 0.f; // inverse for NSigmas for TPC time-interval from external constraint time sigma - int mITSROFrameLengthInBC = 0; ///< ITS RO frame in BC (for ITS cont. mode only) - float mITSROFrameLengthMUS = -1.; ///< ITS RO frame in \mus - float mITSTimeResMUS = -1.; ///< nominal ITS time resolution derived from ROF - float mITSROFrameLengthMUSInv = -1.; ///< ITS RO frame in \mus inverse - int mITSTimeBiasInBC = 0; ///< ITS RO frame shift in BCs, i.e. t_i = (I_ROF*mITSROFrameLengthInBC + mITSTimeBiasInBC)*BCLength_MUS - float mITSTimeBiasMUS = 0.; ///< ITS RO frame shift in \mus, i.e. t_i = (I_ROF*mITSROFrameLengthInBC)*BCLength_MUS + mITSTimeBiasMUS - float mTPCVDrift = -1.; ///< TPC drift speed in cm/microseconds - float mTPCVDriftInv = -1.; ///< inverse TPC nominal drift speed in cm/microseconds - float mTPCDriftTimeOffset = 0; ///< drift time offset in mus - float mTPCTBinMUS = 0.; ///< TPC time bin duration in microseconds - float mTPCTBinNS = 0.; ///< TPC time bin duration in ns - float mTPCTBinMUSInv = 0.; ///< inverse TPC time bin duration in microseconds - float mZ2TPCBin = 0.; ///< conversion coeff from Z to TPC time-bin - float mTPCBin2Z = 0.; ///< conversion coeff from TPC time-bin to Z - float mNTPCBinsFullDrift = 0.; ///< max time bin for full drift - float mTPCZMax = 0.; ///< max drift length - float mTPCmeanX0Inv = 1. / 31850.; ///< TPC gas 1/X0 + int mITSROFrameLengthInBC = 0; ///< ITS RO frame in BC (for ITS cont. mode only) + float mITSROFrameLengthMUS = -1.; ///< ITS RO frame in \mus + float mITSTimeResMUS = -1.; ///< nominal ITS time resolution derived from ROF + float mITSROFrameLengthMUSInv = -1.; ///< ITS RO frame in \mus inverse + int mITSTimeBiasInBC = 0; ///< ITS RO frame shift in BCs, i.e. t_i = (I_ROF*mITSROFrameLengthInBC + mITSTimeBiasInBC)*BCLength_MUS + float mITSTimeBiasMUS = 0.; ///< ITS RO frame shift in \mus, i.e. t_i = (I_ROF*mITSROFrameLengthInBC)*BCLength_MUS + mITSTimeBiasMUS + float mTPCVDrift = -1.; ///< TPC drift speed in cm/microseconds + float mTPCVDriftInv = -1.; ///< inverse TPC nominal drift speed in cm/microseconds + float mTPCDriftTimeOffset = 0; ///< drift time offset in mus + float mTPCTBinMUS = 0.; ///< TPC time bin duration in microseconds + float mTPCTBinNS = 0.; ///< TPC time bin duration in ns + float mTPCTBinMUSInv = 0.; ///< inverse TPC time bin duration in microseconds + float mZ2TPCBin = 0.; ///< conversion coeff from Z to TPC time-bin + float mTPCBin2Z = 0.; ///< conversion coeff from TPC time-bin to Z + float mNTPCBinsFullDrift = 0.; ///< max time bin for full drift + float mTPCZMax = 0.; ///< max drift length + float mTPCmeanX0Inv = 1. / 31850.; ///< TPC gas 1/X0 float mMinTPCTrackPtInv = 999.; ///< cutoff on TPC track inverse pT float mMinITSTrackPtInv = 999.; ///< cutoff on ITS track inverse pT - bool mVDriftCalibOn = false; ///< flag to produce VDrift calibration data + bool mVDriftCalibOn = false; ///< flag to produce VDrift calibration data o2::tpc::VDriftCorrFact mTPCDrift{}; o2::gpu::CorrectionMapsHelper* mTPCCorrMapsHelper = nullptr; @@ -588,12 +588,14 @@ class MatchTPCITS const o2::globaltracking::RecoContainer* mRecoCont = nullptr; ///>>>------ these are input arrays which should not be modified by the matching code // since this info is provided by external device - gsl::span mTPCTracksArray; ///< input TPC tracks span - gsl::span mTPCTrackClusIdx; ///< input TPC track cluster indices span - gsl::span mITSTrackROFRec; ///< input ITS tracks ROFRecord span - gsl::span mITSTracksArray; ///< input ITS tracks span - gsl::span mITSTrackClusIdx; ///< input ITS track cluster indices span - std::vector mITSClustersArray; ///< ITS clusters created in loadInput + gsl::span mTPCTracksArray; ///< input TPC tracks span + gsl::span mTPCTrackClusIdx; ///< input TPC track cluster indices span + gsl::span mITSTrackROFRec; ///< input ITS tracks ROFRecord span + gsl::span mITSTracksArray; ///< input ITS tracks span + gsl::span mITSTrackClusIdx; ///< input ITS track cluster indices span + std::vector mITSClustersArray; ///< ITS clusters created in loadInput + std::vector mITSClusterSizes; ///< ITS cluster sizes created in loadInput + gsl::span mITSClusterROFRec; ///< input ITS clusters ROFRecord span gsl::span mFITInfo; ///< optional input FIT info span @@ -609,8 +611,8 @@ class MatchTPCITS /// <<<----- size_t mNMatchesControl = 0; - std::vector mInteractions; ///< possible interaction times - std::vector mInteractionMUSLUT; ///< LUT for interactions in 1MUS bins + std::vector mInteractions; ///< possible interaction times + std::vector mInteractionMUSLUT; ///< LUT for interactions in 1MUS bins ///< container for record the match of TPC track to single ITS track std::vector mMatchRecordsTPC; @@ -632,7 +634,7 @@ class MatchTPCITS std::vector mABWinnersIDs; std::vector mABTrackletClusterIDs; ///< IDs of ITS clusters for AfterBurner winners std::vector mABTrackletRefs; ///< references on AfterBurner winners clusters - std::vector mABClusterLinkIndex; ///< index of 1st ABClusterLink for every cluster used by AfterBurner, -1: unused, -10: used by external ITS tracks + std::vector mABClusterLinkIndex; ///< index of 1st ABClusterLink for every cluster used by AfterBurner, -1: unused, -10: used by external ITS tracks MCLabContTr mABTrackletLabels; // ------------------------------ @@ -687,7 +689,6 @@ class MatchTPCITS static constexpr std::string_view TimerName[] = {"Total", "PrepareITS", "PrepareTPC", "DoMatching", "SelectBest", "Refit", "ABSeeds", "ABMatching", "ABWinners", "ABRefit", "IO", "Debug"}; TStopwatch mTimer[NStopWatches]; - }; //______________________________________________ @@ -708,7 +709,6 @@ inline bool MatchTPCITS::isDisabledITS(const TrackLocITS& t) const { return t.ma //______________________________________________ inline bool MatchTPCITS::isDisabledTPC(const TrackLocTPC& t) const { return t.matchID < 0; } - } // namespace globaltracking } // namespace o2 diff --git a/Detectors/GlobalTracking/src/MatchTPCITS.cxx b/Detectors/GlobalTracking/src/MatchTPCITS.cxx index 32ee299bf6a64..7b25b70695d6c 100644 --- a/Detectors/GlobalTracking/src/MatchTPCITS.cxx +++ b/Detectors/GlobalTracking/src/MatchTPCITS.cxx @@ -146,6 +146,7 @@ void MatchTPCITS::clear() mITSROFTimes.clear(); mITSTrackROFContMapping.clear(); mITSClustersArray.clear(); + mITSClusterSizes.clear(); mTPCABSeeds.clear(); mTPCABIndexCache.clear(); mABWinnersIDs.clear(); @@ -300,7 +301,7 @@ bool MatchTPCITS::validateTPCMatch(int iTPC) if (rcITS.nextRecID == Validated) { return false; } - if (rcITS.partnerID == iTPC) { // is best matching TPC track for this ITS track actually iTPC? + if (rcITS.partnerID == iTPC) { // is best matching TPC track for this ITS track actually iTPC? int cloneID = tITS.getCloneShift(); // check if there is a clone of tITS while (cloneID) { cloneID += rcTPC.partnerID; @@ -570,6 +571,23 @@ bool MatchTPCITS::prepareITSData() auto pattIt = patterns.begin(); mITSClustersArray.reserve(clusITS.size()); o2::its::ioutils::convertCompactClusters(clusITS, pattIt, mITSClustersArray, mITSDict); + + // ITS clusters sizes + mITSClusterSizes.reserve(clusITS.size()); + auto pattIt2 = patterns.begin(); + for (auto& clus : clusITS) { + auto pattID = clus.getPatternID(); + int npix; + if (pattID == o2::itsmft::CompCluster::InvalidPatternID || mITSDict->isGroup(pattID)) { + o2::itsmft::ClusterPattern patt; + patt.acquirePattern(pattIt); + npix = patt.getNPixels(); + } else { + npix = mITSDict->getNpixels(pattID); + } + mITSClusterSizes.push_back(npix); + } + if (mMCTruthON) { mITSClsLabels = inp.mcITSClusters.get(); } @@ -1287,15 +1305,15 @@ bool MatchTPCITS::refitTrackTPCITS(int iTPC, int& iITS) if (!mCompareTracksDZ) { trfit.setZ(tITS.getZ()); // fix the seed Z } - float deltaT = (trfit.getZ() - tTPC.getZ()) * mTPCVDriftInv; // time correction in \mus - float timeErr = tTPC.constraint == TrackLocTPC::Constrained ? tTPC.timeErr : std::sqrt(tITS.getSigmaZ2() + tTPC.getSigmaZ2()) * mTPCVDriftInv; // estimate the error on time + float deltaT = (trfit.getZ() - tTPC.getZ()) * mTPCVDriftInv; // time correction in \mus + float timeErr = tTPC.constraint == TrackLocTPC::Constrained ? tTPC.timeErr : std::sqrt(tITS.getSigmaZ2() + tTPC.getSigmaZ2()) * mTPCVDriftInv; // estimate the error on time if (timeErr > mITSTimeResMUS && tTPC.constraint != TrackLocTPC::Constrained) { timeErr = mITSTimeResMUS; // chose smallest error deltaT = tTPC.constraint == TrackLocTPC::ASide ? tITS.tBracket.mean() - tTPC.time0 : tTPC.time0 - tITS.tBracket.mean(); } timeErr += mParams->globalTimeExtraErrorMUS; - float timeC = tTPC.getCorrectedTime(deltaT) + mParams->globalTimeBiasMUS; /// precise time estimate, optionally corrected for bias - if (timeC < 0) { // RS TODO similar check is needed for other edge of TF + float timeC = tTPC.getCorrectedTime(deltaT) + mParams->globalTimeBiasMUS; /// precise time estimate, optionally corrected for bias + if (timeC < 0) { // RS TODO similar check is needed for other edge of TF if (timeC + std::min(timeErr, mParams->tfEdgeTimeToleranceMUS * mTPCTBinMUSInv) < 0) { mMatchedTracks.pop_back(); // destroy failed track return false; @@ -1818,6 +1836,7 @@ void MatchTPCITS::refitABWinners() mABTrackletClusterIDs.push_back(winL.clID); ncl++; clref.pattern |= 0x1 << winL.layerID; + clref.setClusterSize(winL.layerID, mITSClusterSizes[winL.clID]); if (mMCTruthON) { accountClusterLabel(winL.clID); } From 3480484fa03a1cd62e50c805da3c74ce9c8b96af Mon Sep 17 00:00:00 2001 From: fmazzasc Date: Mon, 9 Oct 2023 12:26:30 +0200 Subject: [PATCH 05/20] Remove its cluster map --- Detectors/AOD/src/AODProducerWorkflowSpec.cxx | 3 -- .../include/Framework/AnalysisDataModel.h | 38 ++++++++++++++++--- 2 files changed, 33 insertions(+), 8 deletions(-) diff --git a/Detectors/AOD/src/AODProducerWorkflowSpec.cxx b/Detectors/AOD/src/AODProducerWorkflowSpec.cxx index f39b18d49501a..b8d0249556d24 100644 --- a/Detectors/AOD/src/AODProducerWorkflowSpec.cxx +++ b/Detectors/AOD/src/AODProducerWorkflowSpec.cxx @@ -319,7 +319,6 @@ void AODProducerWorkflowDPL::addToTracksExtraTable(TracksExtraCursorType& tracks // extra tracksExtraCursor(truncateFloatFraction(extraInfoHolder.tpcInnerParam, mTrack1Pt), extraInfoHolder.flags, - extraInfoHolder.itsClusterMap, extraInfoHolder.itsClusterSizes, extraInfoHolder.tpcNClsFindable, extraInfoHolder.tpcNClsFindableMinusFound, @@ -2371,7 +2370,6 @@ 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()]]; @@ -2379,7 +2377,6 @@ AODProducerWorkflowDPL::TrackExtraInfo AODProducerWorkflowDPL::processBarrelTrac 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()].clsizes; } if (contributorsGID[GIndex::Source::TPC].isIndexSet()) { diff --git a/Framework/Core/include/Framework/AnalysisDataModel.h b/Framework/Core/include/Framework/AnalysisDataModel.h index 3437ad99059d9..631cad29c38c9 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); //! ITS cluster map, one bit per a layer, starting from the innermost 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 retrocompatibility 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,10 +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) 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::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(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 @@ -261,6 +262,16 @@ 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(ITSClusterMapDyn, 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++) { + if ((itsClusterSizes >> (layer * 4)) & 0xf) { + clmap |= (1 << layer); + } + } + return clmap; + }); DECLARE_SOA_DYNAMIC_COLUMN(ITSNCls, itsNCls, //! Number of ITS clusters [](uint8_t itsClusterMap) -> uint8_t { uint8_t itsNcls = 0; @@ -281,6 +292,24 @@ DECLARE_SOA_DYNAMIC_COLUMN(ITSNClsInnerBarrel, itsNClsInnerBarrel, //! Number of } return itsNclsInnerBarrel; }); +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++) { + if ((itsClusterSizes >> (layer * 4)) & 0xf) + itsNcls++; + } + return itsNcls; + }); +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++) { + if ((itsClusterSizes >> (layer * 4)) & 0xf) + itsNclsInnerBarrel++; + } + return itsNclsInnerBarrel; + }); DECLARE_SOA_DYNAMIC_COLUMN(TPCFoundOverFindableCls, tpcFoundOverFindableCls, //! Ratio of found over findable clusters [](uint8_t tpcNClsFindable, int8_t tpcNClsFindableMinusFound) -> float { @@ -410,7 +439,7 @@ DECLARE_SOA_TABLE_FULL(StoredTracksExtra_000, "TracksExtra", "AOD", "TRACKEXTRA" track::TrackEtaEMCAL, track::TrackPhiEMCAL, track::TrackTime, track::TrackTimeRes); DECLARE_SOA_TABLE_FULL_VERSIONED(StoredTracksExtra_001, "TracksExtra", "AOD", "TRACKEXTRA", 1, // Version 1 of TracksExtra - track::TPCInnerParam, track::Flags, track::ITSClusterMap, track::ITSClusterSizes, + track::TPCInnerParam, track::Flags, track::ITSClusterSizes, track::TPCNClsFindable, track::TPCNClsFindableMinusFound, track::TPCNClsFindableMinusCrossedRows, track::TPCNClsShared, track::TRDPattern, track::ITSChi2NCl, track::TPCChi2NCl, track::TRDChi2, track::TOFChi2, @@ -421,13 +450,12 @@ DECLARE_SOA_TABLE_FULL_VERSIONED(StoredTracksExtra_001, "TracksExtra", "AOD", "T track::HasTRD, track::HasTOF, track::TPCNClsFound, track::TPCNClsCrossedRows, - track::ITSNCls, track::ITSNClsInnerBarrel, + track::ITSClusterMapDyn, 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); From 05b7979f3bf04c717adcc80a01d13cde8514692e Mon Sep 17 00:00:00 2001 From: ALICE Action Bot Date: Mon, 9 Oct 2023 10:37:12 +0000 Subject: [PATCH 06/20] Please consider the following formatting changes --- .../ITS/include/DataFormatsITS/TrackITS.h | 18 ++++++++++------ .../include/DataFormatsITSMFT/TrkClusRef.h | 21 +++++++++++-------- .../include/GlobalTracking/MatchTPCITS.h | 2 +- .../tracking/include/ITStracking/TimeFrame.h | 3 ++- .../include/Framework/AnalysisDataModel.h | 2 +- 5 files changed, 28 insertions(+), 18 deletions(-) diff --git a/DataFormats/Detectors/ITSMFT/ITS/include/DataFormatsITS/TrackITS.h b/DataFormats/Detectors/ITSMFT/ITS/include/DataFormatsITS/TrackITS.h index 1e7ec569849cb..f020882aa42a1 100644 --- a/DataFormats/Detectors/ITSMFT/ITS/include/DataFormatsITS/TrackITS.h +++ b/DataFormats/Detectors/ITSMFT/ITS/include/DataFormatsITS/TrackITS.h @@ -122,19 +122,25 @@ class TrackITS : public o2::track::TrackParCov void setNextROFbit(bool toggle = true) { setUserField((getUserField() & ~kNextROF) | (-toggle & kNextROF)); } bool hasHitInNextROF() const { return getUserField() & kNextROF; } - void setClusterSize(int l, int size) { - if (l >= 8) return; - if (size > 15) size = 15; + void setClusterSize(int l, int size) + { + if (l >= 8) + return; + if (size > 15) + size = 15; mClusterSizes &= ~(0xf << (l * 4)); mClusterSizes |= (size << (l * 4)); } - int getClusterSize(int l) { - if (l >= 8) return 0; + int getClusterSize(int l) + { + if (l >= 8) + return 0; return (mClusterSizes >> (l * 4)) & 0xf; } - int getClusterSizes() const { + int getClusterSizes() const + { return mClusterSizes; } diff --git a/DataFormats/Detectors/ITSMFT/common/include/DataFormatsITSMFT/TrkClusRef.h b/DataFormats/Detectors/ITSMFT/common/include/DataFormatsITSMFT/TrkClusRef.h index 28e2a6ae44262..37921ea1ac8f4 100644 --- a/DataFormats/Detectors/ITSMFT/common/include/DataFormatsITSMFT/TrkClusRef.h +++ b/DataFormats/Detectors/ITSMFT/common/include/DataFormatsITSMFT/TrkClusRef.h @@ -31,25 +31,28 @@ struct TrkClusRef : public o2::dataformats::RangeRefComp<4> { GPUd() int getNClusters() const { return getEntries(); } bool hasHitOnLayer(int i) { return pattern & (0x1 << i); } - - void setClusterSize(int l, int size) { - if (l >= 8) return; - if (size > 15) size = 15; + void setClusterSize(int l, int size) + { + if (l >= 8) + return; + if (size > 15) + size = 15; clsizes &= ~(0xf << (l * 4)); clsizes |= (size << (l * 4)); } - int getClusterSize(int l) { - if (l >= 8) return 0; + int getClusterSize(int l) + { + if (l >= 8) + return 0; return (clsizes >> (l * 4)) & 0xf; } - int getClusterSizes() const { + int getClusterSizes() const + { return clsizes; } - - ClassDefNV(TrkClusRef, 2); }; diff --git a/Detectors/GlobalTracking/include/GlobalTracking/MatchTPCITS.h b/Detectors/GlobalTracking/include/GlobalTracking/MatchTPCITS.h index f001f49f1e63e..cdfdcff01b132 100644 --- a/Detectors/GlobalTracking/include/GlobalTracking/MatchTPCITS.h +++ b/Detectors/GlobalTracking/include/GlobalTracking/MatchTPCITS.h @@ -594,7 +594,7 @@ class MatchTPCITS gsl::span mITSTracksArray; ///< input ITS tracks span gsl::span mITSTrackClusIdx; ///< input ITS track cluster indices span std::vector mITSClustersArray; ///< ITS clusters created in loadInput - std::vector mITSClusterSizes; ///< ITS cluster sizes created in loadInput + std::vector mITSClusterSizes; ///< ITS cluster sizes created in loadInput gsl::span mITSClusterROFRec; ///< input ITS clusters ROFRecord span gsl::span mFITInfo; ///< optional input FIT info span diff --git a/Detectors/ITSMFT/ITS/tracking/include/ITStracking/TimeFrame.h b/Detectors/ITSMFT/ITS/tracking/include/ITStracking/TimeFrame.h index 82d1e6fcf2e83..ca8059059f435 100644 --- a/Detectors/ITSMFT/ITS/tracking/include/ITStracking/TimeFrame.h +++ b/Detectors/ITSMFT/ITS/tracking/include/ITStracking/TimeFrame.h @@ -426,7 +426,8 @@ inline const gsl::span TimeFrame::getClusterLabels(int layerI return mClusterLabels->getLabels(mClusterExternalIndices[layerId][clId]); } -inline int TimeFrame::getClusterSize(int clusterId) { +inline int TimeFrame::getClusterSize(int clusterId) +{ return mClusterSize[clusterId]; } diff --git a/Framework/Core/include/Framework/AnalysisDataModel.h b/Framework/Core/include/Framework/AnalysisDataModel.h index 631cad29c38c9..bdbe0d4a7c343 100644 --- a/Framework/Core/include/Framework/AnalysisDataModel.h +++ b/Framework/Core/include/Framework/AnalysisDataModel.h @@ -222,7 +222,7 @@ DECLARE_SOA_EXPRESSION_COLUMN(C1Pt21Pt2, c1Pt21Pt2, float, //! 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(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 retrocompatibility +DECLARE_SOA_COLUMN(ITSClusterMap, itsClusterMap, uint8_t); //! Old cluster ITS cluster map, kept for retrocompatibility 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 From c50641a806b0bdfa87b8155f8c2b8f6e0b56a8fe Mon Sep 17 00:00:00 2001 From: fmazzasc Date: Tue, 10 Oct 2023 18:02:54 +0200 Subject: [PATCH 07/20] Add table versioning --- Detectors/GlobalTracking/src/MatchTPCITS.cxx | 2 +- .../include/Framework/AnalysisDataModel.h | 20 ++++++++++++++----- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/Detectors/GlobalTracking/src/MatchTPCITS.cxx b/Detectors/GlobalTracking/src/MatchTPCITS.cxx index 7b25b70695d6c..a12ee719515b9 100644 --- a/Detectors/GlobalTracking/src/MatchTPCITS.cxx +++ b/Detectors/GlobalTracking/src/MatchTPCITS.cxx @@ -580,7 +580,7 @@ bool MatchTPCITS::prepareITSData() int npix; if (pattID == o2::itsmft::CompCluster::InvalidPatternID || mITSDict->isGroup(pattID)) { o2::itsmft::ClusterPattern patt; - patt.acquirePattern(pattIt); + patt.acquirePattern(pattIt2); npix = patt.getNPixels(); } else { npix = mITSDict->getNpixels(pattID); diff --git a/Framework/Core/include/Framework/AnalysisDataModel.h b/Framework/Core/include/Framework/AnalysisDataModel.h index bdbe0d4a7c343..2bf8c24c0158f 100644 --- a/Framework/Core/include/Framework/AnalysisDataModel.h +++ b/Framework/Core/include/Framework/AnalysisDataModel.h @@ -240,7 +240,18 @@ DECLARE_SOA_COLUMN(TrackEtaEMCAL, trackEtaEmcal, float); 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) -DECLARE_SOA_EXPRESSION_COLUMN(DetectorMap, detectorMap, uint8_t, //! Detector map: see enum DetectorMapEnum + +// expression columns changing between versions have 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_EXPRESSION_COLUMN(DetectorMap, detectorMap, uint8_t, //! Detector map version 1 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) | @@ -428,8 +439,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, @@ -457,8 +468,7 @@ DECLARE_SOA_TABLE_FULL_VERSIONED(StoredTracksExtra_001, "TracksExtra", "AOD", "T 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::DetectorMap); From a5199b50dc7b808a7c535d673533c28525b0fa35 Mon Sep 17 00:00:00 2001 From: Francesco Mazzaschi <43742195+fmazzasc@users.noreply.github.com> Date: Tue, 10 Oct 2023 18:07:15 +0200 Subject: [PATCH 08/20] Fix comments Co-authored-by: Jan Fiete --- Framework/Core/include/Framework/AnalysisDataModel.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Framework/Core/include/Framework/AnalysisDataModel.h b/Framework/Core/include/Framework/AnalysisDataModel.h index 2bf8c24c0158f..dc2488daa52d6 100644 --- a/Framework/Core/include/Framework/AnalysisDataModel.h +++ b/Framework/Core/include/Framework/AnalysisDataModel.h @@ -431,7 +431,7 @@ DECLARE_SOA_EXTENDED_TABLE(TracksCovIU, StoredTracksCovIU, "TRACKCOV_IU", //! Tr aod::track::C1PtTgl, aod::track::C1Pt21Pt2); -DECLARE_SOA_TABLE_FULL(StoredTracksExtra_000, "TracksExtra", "AOD", "TRACKEXTRA", //! On disk version of TracksExtra +DECLARE_SOA_TABLE_FULL(StoredTracksExtra_000, "TracksExtra", "AOD", "TRACKEXTRA", //! On disk version of TracksExtra, version 0 track::TPCInnerParam, track::Flags, track::ITSClusterMap, track::TPCNClsFindable, track::TPCNClsFindableMinusFound, track::TPCNClsFindableMinusCrossedRows, track::TPCNClsShared, track::TRDPattern, track::ITSChi2NCl, From df1d5ba7102ab5cfa79cc28fba2bb27bd63e324a Mon Sep 17 00:00:00 2001 From: Francesco Mazzaschi <43742195+fmazzasc@users.noreply.github.com> Date: Tue, 10 Oct 2023 18:07:35 +0200 Subject: [PATCH 09/20] Fix comments (2) Co-authored-by: Jan Fiete --- Framework/Core/include/Framework/AnalysisDataModel.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Framework/Core/include/Framework/AnalysisDataModel.h b/Framework/Core/include/Framework/AnalysisDataModel.h index dc2488daa52d6..6acd3d809e032 100644 --- a/Framework/Core/include/Framework/AnalysisDataModel.h +++ b/Framework/Core/include/Framework/AnalysisDataModel.h @@ -449,7 +449,7 @@ DECLARE_SOA_TABLE_FULL(StoredTracksExtra_000, "TracksExtra", "AOD", "TRACKEXTRA" track::TPCFractionSharedCls, track::TrackEtaEMCAL, track::TrackPhiEMCAL, track::TrackTime, track::TrackTimeRes); -DECLARE_SOA_TABLE_FULL_VERSIONED(StoredTracksExtra_001, "TracksExtra", "AOD", "TRACKEXTRA", 1, // Version 1 of TracksExtra +DECLARE_SOA_TABLE_FULL_VERSIONED(StoredTracksExtra_001, "TracksExtra", "AOD", "TRACKEXTRA", 1, // On disk version of TracksExtra, version 1 track::TPCInnerParam, track::Flags, track::ITSClusterSizes, track::TPCNClsFindable, track::TPCNClsFindableMinusFound, track::TPCNClsFindableMinusCrossedRows, track::TPCNClsShared, track::TRDPattern, track::ITSChi2NCl, From ee83f5a9dad3d1c69c9058fd1a35f62b4f16de69 Mon Sep 17 00:00:00 2001 From: fmazzasc Date: Wed, 11 Oct 2023 11:37:12 +0200 Subject: [PATCH 10/20] Set old TrackExtra as default --- Detectors/AOD/src/AODProducerWorkflowSpec.cxx | 8 ++++--- .../include/Framework/AnalysisDataModel.h | 24 ++++++++++--------- 2 files changed, 18 insertions(+), 14 deletions(-) diff --git a/Detectors/AOD/src/AODProducerWorkflowSpec.cxx b/Detectors/AOD/src/AODProducerWorkflowSpec.cxx index b8d0249556d24..24b439ff880a2 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.itsClusterSizes, + extraInfoHolder.itsClusterMap, extraInfoHolder.tpcNClsFindable, extraInfoHolder.tpcNClsFindableMinusFound, extraInfoHolder.tpcNClsFindableMinusCrossedRows, @@ -2370,14 +2370,16 @@ AODProducerWorkflowDPL::TrackExtraInfo AODProducerWorkflowDPL::processBarrelTrac int nClusters = itsTrack.getNClusters(); float chi2 = itsTrack.getChi2(); extraInfoHolder.itsChi2NCl = nClusters != 0 ? chi2 / (float)nClusters : 0; - extraInfoHolder.itsClusterSizes = itsTrack.getClusterSizes(); + // extraInfoHolder.itsClusterSizes = itsTrack.getClusterSizes(); + extraInfoHolder.itsClusterMap = itsTrack.getPattern(); 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.itsClusterSizes = data.getITSABRefs()[contributorsGID[GIndex::Source::ITSAB].getIndex()].clsizes; + // extraInfoHolder.itsClusterSizes = data.getITSABRefs()[contributorsGID[GIndex::Source::ITSAB].getIndex()].clsizes; + extraInfoHolder.itsClusterMap = data.getITSABRefs()[contributorsGID[GIndex::Source::ITSAB].getIndex()].pattern; } 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 6acd3d809e032..8a64d7e510333 100644 --- a/Framework/Core/include/Framework/AnalysisDataModel.h +++ b/Framework/Core/include/Framework/AnalysisDataModel.h @@ -242,20 +242,22 @@ DECLARE_SOA_COLUMN(TrackTime, trackTime, float); 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 -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 + +namespace v001 +{ DECLARE_SOA_EXPRESSION_COLUMN(DetectorMap, detectorMap, uint8_t, //! Detector map version 1 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)); +} // 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; }); @@ -439,8 +441,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, @@ -457,8 +459,8 @@ 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::ITSClusterMapDyn, track::ITSNCls001, track::ITSNClsInnerBarrel001, @@ -468,12 +470,12 @@ DECLARE_SOA_TABLE_FULL_VERSIONED(StoredTracksExtra_001, "TracksExtra", "AOD", "T 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; +using StoredTracksExtra = StoredTracksExtra_000; +using TracksExtra = TracksExtra_000; using Track = Tracks::iterator; using TrackIU = TracksIU::iterator; From 138570255236851ed4f2a6c727ee8d2c169fbf4f Mon Sep 17 00:00:00 2001 From: fmazzasc Date: Wed, 11 Oct 2023 11:39:11 +0200 Subject: [PATCH 11/20] Fix data descriptor for trackextra --- Framework/Core/src/AODReaderHelpers.cxx | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/Framework/Core/src/AODReaderHelpers.cxx b/Framework/Core/src/AODReaderHelpers.cxx index 4410fe8ba8031..74e08caece536 100644 --- a/Framework/Core/src/AODReaderHelpers.cxx +++ b/Framework/Core/src/AODReaderHelpers.cxx @@ -176,9 +176,11 @@ AlgorithmSpec AODReaderHelpers::aodSpawnerCallback(std::vector& reque } else if (description == header::DataDescription{"TRACKCOV_IU"}) { outputs.adopt(Output{origin, description, version}, maker(o2::aod::TracksCovIUExtensionMetadata{})); } else if (description == header::DataDescription{"TRACKEXTRA"}) { - outputs.adopt(Output{origin, description, version}, maker(o2::aod::TracksExtra_000ExtensionMetadata{})); - } else if (description == header::DataDescription{"TRACKEXTRA_001"}) { - outputs.adopt(Output{origin, description, version}, maker(o2::aod::TracksExtra_001ExtensionMetadata{})); + if (version == 0U) { + outputs.adopt(Output{origin, description, version}, maker(o2::aod::TracksExtra_000ExtensionMetadata{})); + } else if (version == 1U) { + outputs.adopt(Output{origin, description, version}, maker(o2::aod::TracksExtra_001ExtensionMetadata{})); + } } else if (description == header::DataDescription{"MFTTRACK"}) { outputs.adopt(Output{origin, description, version}, maker(o2::aod::MFTTracksExtensionMetadata{})); } else if (description == header::DataDescription{"FWDTRACK"}) { From e76dc5e67f89779c2f4e963a4f09bac4bad8107a Mon Sep 17 00:00:00 2001 From: ALICE Action Bot Date: Wed, 11 Oct 2023 10:36:22 +0000 Subject: [PATCH 12/20] Please consider the following formatting changes --- Framework/Core/include/Framework/AnalysisDataModel.h | 1 - 1 file changed, 1 deletion(-) diff --git a/Framework/Core/include/Framework/AnalysisDataModel.h b/Framework/Core/include/Framework/AnalysisDataModel.h index 8a64d7e510333..5ed8026f647f1 100644 --- a/Framework/Core/include/Framework/AnalysisDataModel.h +++ b/Framework/Core/include/Framework/AnalysisDataModel.h @@ -249,7 +249,6 @@ DECLARE_SOA_EXPRESSION_COLUMN(DetectorMap, detectorMap, uint8_t, //! Detector ma 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 v001 { DECLARE_SOA_EXPRESSION_COLUMN(DetectorMap, detectorMap, uint8_t, //! Detector map version 1 From 6282035bb82369c2d0cdd05bfa51bf18e0d100d3 Mon Sep 17 00:00:00 2001 From: fmazzasc Date: Wed, 11 Oct 2023 14:20:37 +0200 Subject: [PATCH 13/20] 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 b07c6a9afa0d4..30e58735257ed 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 == "TracksExtraExtension"); + REQUIRE(task2.inputs[3].binding == "TracksExtra_000Extension"); REQUIRE(task2.inputs[4].binding == "TracksExtra"); REQUIRE(task2.inputs[5].binding == "TracksCovExtension"); REQUIRE(task2.inputs[6].binding == "TracksCov"); From 0e74a5c28d88a28d7d4fbf13085a02c9a60e5aac Mon Sep 17 00:00:00 2001 From: fmazzasc Date: Mon, 16 Oct 2023 14:18:27 +0200 Subject: [PATCH 14/20] Clean commented code --- Detectors/AOD/src/AODProducerWorkflowSpec.cxx | 2 -- 1 file changed, 2 deletions(-) diff --git a/Detectors/AOD/src/AODProducerWorkflowSpec.cxx b/Detectors/AOD/src/AODProducerWorkflowSpec.cxx index 24b439ff880a2..9c2f1d13eefaf 100644 --- a/Detectors/AOD/src/AODProducerWorkflowSpec.cxx +++ b/Detectors/AOD/src/AODProducerWorkflowSpec.cxx @@ -2370,7 +2370,6 @@ AODProducerWorkflowDPL::TrackExtraInfo AODProducerWorkflowDPL::processBarrelTrac int nClusters = itsTrack.getNClusters(); float chi2 = itsTrack.getChi2(); extraInfoHolder.itsChi2NCl = nClusters != 0 ? chi2 / (float)nClusters : 0; - // extraInfoHolder.itsClusterSizes = itsTrack.getClusterSizes(); extraInfoHolder.itsClusterMap = itsTrack.getPattern(); if (src == GIndex::ITS) { // standalone ITS track should set its time from the ROF const auto& rof = data.getITSTracksROFRecords()[mITSROFs[trackIndex.getIndex()]]; @@ -2378,7 +2377,6 @@ AODProducerWorkflowDPL::TrackExtraInfo AODProducerWorkflowDPL::processBarrelTrac setTrackTime(t, mITSROFrameHalfLengthNS, false); } } else if (contributorsGID[GIndex::Source::ITSAB].isIndexSet()) { // this is an ITS-TPC afterburner contributor - // extraInfoHolder.itsClusterSizes = data.getITSABRefs()[contributorsGID[GIndex::Source::ITSAB].getIndex()].clsizes; extraInfoHolder.itsClusterMap = data.getITSABRefs()[contributorsGID[GIndex::Source::ITSAB].getIndex()].pattern; } if (contributorsGID[GIndex::Source::TPC].isIndexSet()) { From be7937000de5e105478c95b9f2472e4207894d7a Mon Sep 17 00:00:00 2001 From: Francesco Mazzaschi <43742195+fmazzasc@users.noreply.github.com> Date: Mon, 16 Oct 2023 15:08:38 +0200 Subject: [PATCH 15/20] Fix comment (3) Co-authored-by: Jan Fiete --- Framework/Core/include/Framework/AnalysisDataModel.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Framework/Core/include/Framework/AnalysisDataModel.h b/Framework/Core/include/Framework/AnalysisDataModel.h index 5ed8026f647f1..3cdd008babb4d 100644 --- a/Framework/Core/include/Framework/AnalysisDataModel.h +++ b/Framework/Core/include/Framework/AnalysisDataModel.h @@ -222,7 +222,7 @@ DECLARE_SOA_EXPRESSION_COLUMN(C1Pt21Pt2, c1Pt21Pt2, float, //! 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(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 retrocompatibility +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 From dfe5933a9177921247816585ca60b05434390c23 Mon Sep 17 00:00:00 2001 From: fmazzasc Date: Mon, 16 Oct 2023 16:57:01 +0200 Subject: [PATCH 16/20] Move dyn columns to versioning namespace --- .../include/Framework/AnalysisDataModel.h | 60 +++++++++---------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/Framework/Core/include/Framework/AnalysisDataModel.h b/Framework/Core/include/Framework/AnalysisDataModel.h index 3cdd008babb4d..79e5a42801bea 100644 --- a/Framework/Core/include/Framework/AnalysisDataModel.h +++ b/Framework/Core/include/Framework/AnalysisDataModel.h @@ -256,6 +256,35 @@ 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, //! 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++) { + if ((itsClusterSizes >> (layer * 4)) & 0xf) { + clmap |= (1 << layer); + } + } + return clmap; + }); +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++) { + if ((itsClusterSizes >> (layer * 4)) & 0xf) + itsNcls++; + } + return itsNcls; + }); +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++) { + if ((itsClusterSizes >> (layer * 4)) & 0xf) + itsNclsInnerBarrel++; + } + return itsNclsInnerBarrel; + }); + } // namespace v001 DECLARE_SOA_DYNAMIC_COLUMN(HasITS, hasITS, //! Flag to check if track has a ITS match @@ -274,16 +303,6 @@ 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(ITSClusterMapDyn, 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++) { - if ((itsClusterSizes >> (layer * 4)) & 0xf) { - clmap |= (1 << layer); - } - } - return clmap; - }); DECLARE_SOA_DYNAMIC_COLUMN(ITSNCls, itsNCls, //! Number of ITS clusters [](uint8_t itsClusterMap) -> uint8_t { uint8_t itsNcls = 0; @@ -304,25 +323,6 @@ DECLARE_SOA_DYNAMIC_COLUMN(ITSNClsInnerBarrel, itsNClsInnerBarrel, //! Number of } return itsNclsInnerBarrel; }); -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++) { - if ((itsClusterSizes >> (layer * 4)) & 0xf) - itsNcls++; - } - return itsNcls; - }); -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++) { - if ((itsClusterSizes >> (layer * 4)) & 0xf) - 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; @@ -462,7 +462,7 @@ DECLARE_SOA_TABLE_FULL_VERSIONED(StoredTracksExtra_001, "TracksExtra", "AOD", "T track::HasTRD, track::HasTOF, track::TPCNClsFound, track::TPCNClsCrossedRows, - track::ITSClusterMapDyn, track::ITSNCls001, track::ITSNClsInnerBarrel001, + track::v001::ITSClusterMap, track::v001::ITSNCls, track::v001::ITSNClsInnerBarrel, track::TPCCrossedRowsOverFindableCls, track::TPCFoundOverFindableCls, track::TPCFractionSharedCls, From db63b19e2ff28cad9934e7ba5a7c3af473dcfb7f Mon Sep 17 00:00:00 2001 From: Jan Fiete Date: Mon, 16 Oct 2023 22:02:55 +0200 Subject: [PATCH 17/20] Update Framework/Core/include/Framework/AnalysisDataModel.h --- Framework/Core/include/Framework/AnalysisDataModel.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Framework/Core/include/Framework/AnalysisDataModel.h b/Framework/Core/include/Framework/AnalysisDataModel.h index 79e5a42801bea..5f8f7fef5f506 100644 --- a/Framework/Core/include/Framework/AnalysisDataModel.h +++ b/Framework/Core/include/Framework/AnalysisDataModel.h @@ -251,7 +251,7 @@ DECLARE_SOA_EXPRESSION_COLUMN(DetectorMap, detectorMap, uint8_t, //! Detector ma namespace v001 { -DECLARE_SOA_EXPRESSION_COLUMN(DetectorMap, detectorMap, uint8_t, //! Detector map version 1 +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) | From e7f129ac6d9aa5d2497602fbe05d75ca33769e6a Mon Sep 17 00:00:00 2001 From: fmazzasc Date: Tue, 17 Oct 2023 17:29:26 +0200 Subject: [PATCH 18/20] Add braces + unsigned shorts --- .../ITSMFT/ITS/include/DataFormatsITS/TrackITS.h | 9 ++++++--- .../GlobalTracking/include/GlobalTracking/MatchTPCITS.h | 2 +- .../ITSMFT/ITS/tracking/include/ITStracking/TimeFrame.h | 2 +- Detectors/ITSMFT/ITS/tracking/src/TimeFrame.cxx | 2 +- 4 files changed, 9 insertions(+), 6 deletions(-) diff --git a/DataFormats/Detectors/ITSMFT/ITS/include/DataFormatsITS/TrackITS.h b/DataFormats/Detectors/ITSMFT/ITS/include/DataFormatsITS/TrackITS.h index f020882aa42a1..709e8aa3ee329 100644 --- a/DataFormats/Detectors/ITSMFT/ITS/include/DataFormatsITS/TrackITS.h +++ b/DataFormats/Detectors/ITSMFT/ITS/include/DataFormatsITS/TrackITS.h @@ -124,18 +124,21 @@ class TrackITS : public o2::track::TrackParCov void setClusterSize(int l, int size) { - if (l >= 8) + if (l >= 8) { return; - if (size > 15) + } + if (size > 15) { size = 15; + } mClusterSizes &= ~(0xf << (l * 4)); mClusterSizes |= (size << (l * 4)); } int getClusterSize(int l) { - if (l >= 8) + if (l >= 8) { return 0; + } return (mClusterSizes >> (l * 4)) & 0xf; } diff --git a/Detectors/GlobalTracking/include/GlobalTracking/MatchTPCITS.h b/Detectors/GlobalTracking/include/GlobalTracking/MatchTPCITS.h index 40ec61d9357db..ebd9b987740de 100644 --- a/Detectors/GlobalTracking/include/GlobalTracking/MatchTPCITS.h +++ b/Detectors/GlobalTracking/include/GlobalTracking/MatchTPCITS.h @@ -607,7 +607,7 @@ class MatchTPCITS gsl::span mITSTracksArray; ///< input ITS tracks span gsl::span mITSTrackClusIdx; ///< input ITS track cluster indices span std::vector mITSClustersArray; ///< ITS clusters created in loadInput - std::vector mITSClusterSizes; ///< ITS cluster sizes created in loadInput + std::vector mITSClusterSizes; ///< ITS cluster sizes created in loadInput gsl::span mITSClusterROFRec; ///< input ITS clusters ROFRecord span gsl::span mFITInfo; ///< optional input FIT info span diff --git a/Detectors/ITSMFT/ITS/tracking/include/ITStracking/TimeFrame.h b/Detectors/ITSMFT/ITS/tracking/include/ITStracking/TimeFrame.h index ca8059059f435..34abe39a32688 100644 --- a/Detectors/ITSMFT/ITS/tracking/include/ITStracking/TimeFrame.h +++ b/Detectors/ITSMFT/ITS/tracking/include/ITStracking/TimeFrame.h @@ -245,7 +245,7 @@ class TimeFrame std::vector mMSangles; std::vector mPhiCuts; std::vector mPositionResolution; - std::vector mClusterSize; + std::vector mClusterSize; std::vector mMultiplicityCutMask; std::vector> mPValphaX; /// PV x and alpha for track propagation std::vector> mUnsortedClusters; diff --git a/Detectors/ITSMFT/ITS/tracking/src/TimeFrame.cxx b/Detectors/ITSMFT/ITS/tracking/src/TimeFrame.cxx index d26a9f2c44c22..79a52969fb94f 100644 --- a/Detectors/ITSMFT/ITS/tracking/src/TimeFrame.cxx +++ b/Detectors/ITSMFT/ITS/tracking/src/TimeFrame.cxx @@ -186,7 +186,7 @@ int TimeFrame::loadROFrameData(gsl::span rofs, auto pattID = c.getPatternID(); o2::math_utils::Point3D locXYZ; float sigmaY2 = DefClusError2Row, sigmaZ2 = DefClusError2Col, sigmaYZ = 0; // Dummy COG errors (about half pixel size) - int clusterSize{0}; + unsigned short clusterSize{0}; if (pattID != itsmft::CompCluster::InvalidPatternID) { sigmaY2 = dict->getErr2X(pattID); sigmaZ2 = dict->getErr2Z(pattID); From cf3b8fa8ddd733b097790d29e88a886f39fcccca Mon Sep 17 00:00:00 2001 From: fmazzasc Date: Wed, 18 Oct 2023 09:52:19 +0200 Subject: [PATCH 19/20] Move cluster sizes to uint8_t --- .../include/GlobalTracking/MatchTPCITS.h | 2 +- Detectors/GlobalTracking/src/MatchTPCITS.cxx | 10 +++++++--- .../ITS/tracking/include/ITStracking/TimeFrame.h | 2 +- Detectors/ITSMFT/ITS/tracking/src/TimeFrame.cxx | 8 ++++++-- 4 files changed, 15 insertions(+), 7 deletions(-) diff --git a/Detectors/GlobalTracking/include/GlobalTracking/MatchTPCITS.h b/Detectors/GlobalTracking/include/GlobalTracking/MatchTPCITS.h index ebd9b987740de..87cb8f6b8a44e 100644 --- a/Detectors/GlobalTracking/include/GlobalTracking/MatchTPCITS.h +++ b/Detectors/GlobalTracking/include/GlobalTracking/MatchTPCITS.h @@ -607,7 +607,7 @@ class MatchTPCITS gsl::span mITSTracksArray; ///< input ITS tracks span gsl::span mITSTrackClusIdx; ///< input ITS track cluster indices span std::vector mITSClustersArray; ///< ITS clusters created in loadInput - std::vector mITSClusterSizes; ///< ITS cluster sizes created in loadInput + std::vector mITSClusterSizes; ///< ITS cluster sizes created in loadInput gsl::span mITSClusterROFRec; ///< input ITS clusters ROFRecord span gsl::span mFITInfo; ///< optional input FIT info span diff --git a/Detectors/GlobalTracking/src/MatchTPCITS.cxx b/Detectors/GlobalTracking/src/MatchTPCITS.cxx index cfc66c92a9d92..3f22b9da176f6 100644 --- a/Detectors/GlobalTracking/src/MatchTPCITS.cxx +++ b/Detectors/GlobalTracking/src/MatchTPCITS.cxx @@ -587,7 +587,7 @@ bool MatchTPCITS::prepareITSData() auto pattIt2 = patterns.begin(); for (auto& clus : clusITS) { auto pattID = clus.getPatternID(); - int npix; + unsigned int npix; if (pattID == o2::itsmft::CompCluster::InvalidPatternID || mITSDict->isGroup(pattID)) { o2::itsmft::ClusterPattern patt; patt.acquirePattern(pattIt2); @@ -595,7 +595,11 @@ bool MatchTPCITS::prepareITSData() } else { npix = mITSDict->getNpixels(pattID); } - mITSClusterSizes.push_back(npix); + if (npix < 255) { + mITSClusterSizes.push_back(npix); + } else { + mITSClusterSizes.push_back(255); + } } if (mMCTruthON) { @@ -1313,7 +1317,7 @@ bool MatchTPCITS::refitTrackTPCITS(int iTPC, int& iITS, pmr::vector mMSangles; std::vector mPhiCuts; std::vector mPositionResolution; - std::vector mClusterSize; + std::vector mClusterSize; std::vector mMultiplicityCutMask; std::vector> mPValphaX; /// PV x and alpha for track propagation std::vector> mUnsortedClusters; diff --git a/Detectors/ITSMFT/ITS/tracking/src/TimeFrame.cxx b/Detectors/ITSMFT/ITS/tracking/src/TimeFrame.cxx index 79a52969fb94f..11da548c377b0 100644 --- a/Detectors/ITSMFT/ITS/tracking/src/TimeFrame.cxx +++ b/Detectors/ITSMFT/ITS/tracking/src/TimeFrame.cxx @@ -186,7 +186,7 @@ int TimeFrame::loadROFrameData(gsl::span rofs, auto pattID = c.getPatternID(); o2::math_utils::Point3D locXYZ; float sigmaY2 = DefClusError2Row, sigmaZ2 = DefClusError2Col, sigmaYZ = 0; // Dummy COG errors (about half pixel size) - unsigned short clusterSize{0}; + unsigned int clusterSize{0}; if (pattID != itsmft::CompCluster::InvalidPatternID) { sigmaY2 = dict->getErr2X(pattID); sigmaZ2 = dict->getErr2Z(pattID); @@ -203,7 +203,11 @@ int TimeFrame::loadROFrameData(gsl::span rofs, locXYZ = dict->getClusterCoordinates(c, patt, false); clusterSize = patt.getNPixels(); } - mClusterSize.push_back(clusterSize); + if (clusterSize < 255) { + mClusterSize.push_back(clusterSize); + } else { + mClusterSize.push_back(255); + } auto sensorID = c.getSensorID(); // Inverse transformation to the local --> tracking auto trkXYZ = geom->getMatrixT2L(sensorID) ^ locXYZ; From 2be5a53790cbe67b10d3a897e84b569b88f8dce6 Mon Sep 17 00:00:00 2001 From: fmazzasc Date: Thu, 19 Oct 2023 10:08:01 +0200 Subject: [PATCH 20/20] Swap pattern and clsizes order --- .../ITSMFT/common/include/DataFormatsITSMFT/TrkClusRef.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DataFormats/Detectors/ITSMFT/common/include/DataFormatsITSMFT/TrkClusRef.h b/DataFormats/Detectors/ITSMFT/common/include/DataFormatsITSMFT/TrkClusRef.h index 37921ea1ac8f4..7a027c2a2156c 100644 --- a/DataFormats/Detectors/ITSMFT/common/include/DataFormatsITSMFT/TrkClusRef.h +++ b/DataFormats/Detectors/ITSMFT/common/include/DataFormatsITSMFT/TrkClusRef.h @@ -25,8 +25,8 @@ namespace itsmft // can refer to max 15 indices in the vector of total length <268435456, i.e. 17895697 tracks in worst case struct TrkClusRef : public o2::dataformats::RangeRefComp<4> { using o2::dataformats::RangeRefComp<4>::RangeRefComp; - uint16_t pattern = 0; ///< layers pattern uint32_t clsizes = 0; ///< cluster sizes for each layer + uint16_t pattern = 0; ///< layers pattern GPUd() int getNClusters() const { return getEntries(); } bool hasHitOnLayer(int i) { return pattern & (0x1 << i); }