Skip to content

Commit 7d27715

Browse files
authored
Data model for analysis track propagation to PV (#8348)
1 parent 2b3269a commit 7d27715

File tree

5 files changed

+63
-115
lines changed

5 files changed

+63
-115
lines changed

Detectors/AOD/include/AODProducerWorkflow/AODProducerWorkflowSpec.h

Lines changed: 0 additions & 98 deletions
Original file line numberDiff line numberDiff line change
@@ -54,104 +54,6 @@ using DataRequest = o2::globaltracking::DataRequest;
5454
namespace o2::aodproducer
5555
{
5656

57-
using TracksTable = o2::soa::Table<o2::aod::track::CollisionId,
58-
o2::aod::track::TrackType,
59-
o2::aod::track::X,
60-
o2::aod::track::Alpha,
61-
o2::aod::track::Y,
62-
o2::aod::track::Z,
63-
o2::aod::track::Snp,
64-
o2::aod::track::Tgl,
65-
o2::aod::track::Signed1Pt>;
66-
67-
using TracksCovTable = o2::soa::Table<o2::aod::track::SigmaY,
68-
o2::aod::track::SigmaZ,
69-
o2::aod::track::SigmaSnp,
70-
o2::aod::track::SigmaTgl,
71-
o2::aod::track::Sigma1Pt,
72-
o2::aod::track::RhoZY,
73-
o2::aod::track::RhoSnpY,
74-
o2::aod::track::RhoSnpZ,
75-
o2::aod::track::RhoTglY,
76-
o2::aod::track::RhoTglZ,
77-
o2::aod::track::RhoTglSnp,
78-
o2::aod::track::Rho1PtY,
79-
o2::aod::track::Rho1PtZ,
80-
o2::aod::track::Rho1PtSnp,
81-
o2::aod::track::Rho1PtTgl>;
82-
83-
using TracksExtraTable = o2::soa::Table<o2::aod::track::TPCInnerParam,
84-
o2::aod::track::Flags,
85-
o2::aod::track::ITSClusterMap,
86-
o2::aod::track::TPCNClsFindable,
87-
o2::aod::track::TPCNClsFindableMinusFound,
88-
o2::aod::track::TPCNClsFindableMinusCrossedRows,
89-
o2::aod::track::TPCNClsShared,
90-
o2::aod::track::TRDPattern,
91-
o2::aod::track::ITSChi2NCl,
92-
o2::aod::track::TPCChi2NCl,
93-
o2::aod::track::TRDChi2,
94-
o2::aod::track::TOFChi2,
95-
o2::aod::track::TPCSignal,
96-
o2::aod::track::TRDSignal,
97-
o2::aod::track::Length,
98-
o2::aod::track::TOFExpMom,
99-
o2::aod::track::TrackEtaEMCAL,
100-
o2::aod::track::TrackPhiEMCAL,
101-
o2::aod::track::TrackTime,
102-
o2::aod::track::TrackTimeRes>;
103-
104-
using MFTTracksTable = o2::soa::Table<o2::aod::fwdtrack::CollisionId,
105-
o2::aod::fwdtrack::X,
106-
o2::aod::fwdtrack::Y,
107-
o2::aod::fwdtrack::Z,
108-
o2::aod::fwdtrack::Phi,
109-
o2::aod::fwdtrack::Tgl,
110-
o2::aod::fwdtrack::Signed1Pt,
111-
o2::aod::fwdtrack::NClusters,
112-
o2::aod::fwdtrack::Chi2,
113-
o2::aod::fwdtrack::TrackTime,
114-
o2::aod::fwdtrack::TrackTimeRes>;
115-
116-
using FwdTracksTable = o2::soa::Table<o2::aod::fwdtrack::CollisionId,
117-
o2::aod::fwdtrack::TrackType,
118-
o2::aod::fwdtrack::X,
119-
o2::aod::fwdtrack::Y,
120-
o2::aod::fwdtrack::Z,
121-
o2::aod::fwdtrack::Phi,
122-
o2::aod::fwdtrack::Tgl,
123-
o2::aod::fwdtrack::Signed1Pt,
124-
o2::aod::fwdtrack::NClusters,
125-
o2::aod::fwdtrack::PDca,
126-
o2::aod::fwdtrack::RAtAbsorberEnd,
127-
o2::aod::fwdtrack::Chi2,
128-
o2::aod::fwdtrack::Chi2MatchMCHMID,
129-
o2::aod::fwdtrack::Chi2MatchMCHMFT,
130-
o2::aod::fwdtrack::MatchScoreMCHMFT,
131-
o2::aod::fwdtrack::MFTTrackId,
132-
o2::aod::fwdtrack::MCHTrackId,
133-
o2::aod::fwdtrack::MCHBitMap,
134-
o2::aod::fwdtrack::MIDBitMap,
135-
o2::aod::fwdtrack::MIDBoards,
136-
o2::aod::fwdtrack::TrackTime,
137-
o2::aod::fwdtrack::TrackTimeRes>;
138-
139-
using FwdTracksCovTable = o2::soa::Table<o2::aod::fwdtrack::SigmaX,
140-
o2::aod::fwdtrack::SigmaY,
141-
o2::aod::fwdtrack::SigmaPhi,
142-
o2::aod::fwdtrack::SigmaTgl,
143-
o2::aod::fwdtrack::Sigma1Pt,
144-
o2::aod::fwdtrack::RhoXY,
145-
o2::aod::fwdtrack::RhoPhiX,
146-
o2::aod::fwdtrack::RhoPhiY,
147-
o2::aod::fwdtrack::RhoTglX,
148-
o2::aod::fwdtrack::RhoTglY,
149-
o2::aod::fwdtrack::RhoTglPhi,
150-
o2::aod::fwdtrack::Rho1PtX,
151-
o2::aod::fwdtrack::Rho1PtY,
152-
o2::aod::fwdtrack::Rho1PtPhi,
153-
o2::aod::fwdtrack::Rho1PtTgl>;
154-
15557
typedef boost::tuple<int, int, int> Triplet_t;
15658

15759
struct TripletHash : std::unary_function<Triplet_t, std::size_t> {

Detectors/AOD/src/AODProducerWorkflowSpec.cxx

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -206,8 +206,8 @@ void AODProducerWorkflowDPL::addToTracksTable(TracksCursorType& tracksCursor, Tr
206206
float sY = TMath::Sqrt(track.getSigmaY2()), sZ = TMath::Sqrt(track.getSigmaZ2()), sSnp = TMath::Sqrt(track.getSigmaSnp2()),
207207
sTgl = TMath::Sqrt(track.getSigmaTgl2()), sQ2Pt = TMath::Sqrt(track.getSigma1Pt2());
208208
tracksCovCursor(0,
209+
truncateFloatFraction(sZ, mTrackCovDiag), // NOTE this writes StoredTracksCovIU where Z is before Y (see AnalysisDataModel.h)
209210
truncateFloatFraction(sY, mTrackCovDiag),
210-
truncateFloatFraction(sZ, mTrackCovDiag),
211211
truncateFloatFraction(sSnp, mTrackCovDiag),
212212
truncateFloatFraction(sTgl, mTrackCovDiag),
213213
truncateFloatFraction(sQ2Pt, mTrackCovDiag),
@@ -1214,8 +1214,8 @@ void AODProducerWorkflowDPL::run(ProcessingContext& pc)
12141214
auto& mcParticlesBuilder = pc.outputs().make<TableBuilder>(Output{"AOD", "MCPARTICLE_001"});
12151215
auto& mcTrackLabelBuilder = pc.outputs().make<TableBuilder>(Output{"AOD", "MCTRACKLABEL"});
12161216
auto& mftTracksBuilder = pc.outputs().make<TableBuilder>(Output{"AOD", "MFTTRACK"});
1217-
auto& tracksBuilder = pc.outputs().make<TableBuilder>(Output{"AOD", "TRACK"});
1218-
auto& tracksCovBuilder = pc.outputs().make<TableBuilder>(Output{"AOD", "TRACKCOV"});
1217+
auto& tracksBuilder = pc.outputs().make<TableBuilder>(Output{"AOD", "TRACK_IU"});
1218+
auto& tracksCovBuilder = pc.outputs().make<TableBuilder>(Output{"AOD", "TRACKCOV_IU"});
12191219
auto& tracksExtraBuilder = pc.outputs().make<TableBuilder>(Output{"AOD", "TRACKEXTRA"});
12201220
auto& ambigTracksBuilder = pc.outputs().make<TableBuilder>(Output{"AOD", "AMBIGUOUSTRACK"});
12211221
auto& ambigMFTTracksBuilder = pc.outputs().make<TableBuilder>(Output{"AOD", "AMBIGUOUSMFTTR"});
@@ -1232,18 +1232,18 @@ void AODProducerWorkflowDPL::run(ProcessingContext& pc)
12321232
auto fddCursor = fddBuilder.cursor<o2::aod::FDDs>();
12331233
auto ft0Cursor = ft0Builder.cursor<o2::aod::FT0s>();
12341234
auto fv0aCursor = fv0aBuilder.cursor<o2::aod::FV0As>();
1235-
auto fwdTracksCursor = fwdTracksBuilder.cursor<o2::aodproducer::FwdTracksTable>();
1236-
auto fwdTracksCovCursor = fwdTracksCovBuilder.cursor<o2::aodproducer::FwdTracksCovTable>();
1235+
auto fwdTracksCursor = fwdTracksBuilder.cursor<o2::aod::StoredFwdTracks>();
1236+
auto fwdTracksCovCursor = fwdTracksCovBuilder.cursor<o2::aod::StoredFwdTracksCov>();
12371237
auto mcColLabelsCursor = mcColLabelsBuilder.cursor<o2::aod::McCollisionLabels>();
12381238
auto mcCollisionsCursor = mcCollisionsBuilder.cursor<o2::aod::McCollisions>();
12391239
auto mcMFTTrackLabelCursor = mcMFTTrackLabelBuilder.cursor<o2::aod::McMFTTrackLabels>();
12401240
auto mcFwdTrackLabelCursor = mcFwdTrackLabelBuilder.cursor<o2::aod::McFwdTrackLabels>();
12411241
auto mcParticlesCursor = mcParticlesBuilder.cursor<o2::aod::StoredMcParticles_001>();
12421242
auto mcTrackLabelCursor = mcTrackLabelBuilder.cursor<o2::aod::McTrackLabels>();
1243-
auto mftTracksCursor = mftTracksBuilder.cursor<o2::aodproducer::MFTTracksTable>();
1244-
auto tracksCovCursor = tracksCovBuilder.cursor<o2::aodproducer::TracksCovTable>();
1245-
auto tracksCursor = tracksBuilder.cursor<o2::aodproducer::TracksTable>();
1246-
auto tracksExtraCursor = tracksExtraBuilder.cursor<o2::aodproducer::TracksExtraTable>();
1243+
auto mftTracksCursor = mftTracksBuilder.cursor<o2::aod::StoredMFTTracks>();
1244+
auto tracksCovCursor = tracksCovBuilder.cursor<o2::aod::StoredTracksCov>();
1245+
auto tracksCursor = tracksBuilder.cursor<o2::aod::StoredTracksIU>();
1246+
auto tracksExtraCursor = tracksExtraBuilder.cursor<o2::aod::StoredTracksExtra>();
12471247
auto ambigTracksCursor = ambigTracksBuilder.cursor<o2::aod::AmbiguousTracks>();
12481248
auto ambigMFTTracksCursor = ambigMFTTracksBuilder.cursor<o2::aod::AmbiguousMFTTracks>();
12491249
auto ambigFwdTracksCursor = ambigFwdTracksBuilder.cursor<o2::aod::AmbiguousFwdTracks>();
@@ -2016,8 +2016,8 @@ DataProcessorSpec getAODProducerWorkflowSpec(GID::mask_t src, bool enableSV, boo
20162016
outputs.emplace_back(OutputLabel{"O2mcparticle_001"}, "AOD", "MCPARTICLE_001", 0, Lifetime::Timeframe);
20172017
outputs.emplace_back(OutputLabel{"O2mctracklabel"}, "AOD", "MCTRACKLABEL", 0, Lifetime::Timeframe);
20182018
outputs.emplace_back(OutputLabel{"O2mfttrack"}, "AOD", "MFTTRACK", 0, Lifetime::Timeframe);
2019-
outputs.emplace_back(OutputLabel{"O2track"}, "AOD", "TRACK", 0, Lifetime::Timeframe);
2020-
outputs.emplace_back(OutputLabel{"O2trackcov"}, "AOD", "TRACKCOV", 0, Lifetime::Timeframe);
2019+
outputs.emplace_back(OutputLabel{"O2track_iu"}, "AOD", "TRACK_IU", 0, Lifetime::Timeframe);
2020+
outputs.emplace_back(OutputLabel{"O2trackcov_iu"}, "AOD", "TRACKCOV_IU", 0, Lifetime::Timeframe);
20212021
outputs.emplace_back(OutputLabel{"O2trackextra"}, "AOD", "TRACKEXTRA", 0, Lifetime::Timeframe);
20222022
outputs.emplace_back(OutputLabel{"O2ambiguoustrack"}, "AOD", "AMBIGUOUSTRACK", 0, Lifetime::Timeframe);
20232023
outputs.emplace_back(OutputLabel{"O2ambiguousMFTtrack"}, "AOD", "AMBIGUOUSMFTTR", 0, Lifetime::Timeframe);

Framework/Core/include/Framework/AnalysisDataModel.h

Lines changed: 47 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -233,7 +233,7 @@ DECLARE_SOA_DYNAMIC_COLUMN(HasTRD, hasTRD, //! Flag to check if track has a TRD
233233
[](uint8_t detectorMap) -> bool { return detectorMap & o2::aod::track::TRD; });
234234
DECLARE_SOA_DYNAMIC_COLUMN(HasTOF, hasTOF, //! Flag to check if track has a TOF measurement
235235
[](uint8_t detectorMap) -> bool { return detectorMap & o2::aod::track::TOF; });
236-
DECLARE_SOA_DYNAMIC_COLUMN(IsPVContributor, isPVContributor, //! Has this track contributed to the collision vertex fit
236+
DECLARE_SOA_DYNAMIC_COLUMN(IsPVContributor, isPVContributor, //! Run 3: Has this track contributed to the collision vertex fit
237237
[](uint8_t flags) -> bool { return (flags & o2::aod::track::PVContributor) == o2::aod::track::PVContributor; });
238238
DECLARE_SOA_DYNAMIC_COLUMN(PIDForTracking, pidForTracking, //! PID hypothesis used during tracking. See the constants in the class PID in PID.h
239239
[](uint32_t flags) -> uint32_t { return flags >> 28; });
@@ -281,7 +281,7 @@ DECLARE_SOA_DYNAMIC_COLUMN(TPCFractionSharedCls, tpcFractionSharedCls, //! Fract
281281
});
282282
} // namespace track
283283

284-
DECLARE_SOA_TABLE_FULL(StoredTracks, "Tracks", "AOD", "TRACK", //! On disk version of the Track table
284+
DECLARE_SOA_TABLE_FULL(StoredTracks, "Tracks", "AOD", "TRACK", //! On disk version of the track parameters at collision vertex
285285
o2::soa::Index<>, track::CollisionId, track::TrackType,
286286
track::X, track::Alpha,
287287
track::Y, track::Z, track::Snp, track::Tgl,
@@ -293,18 +293,58 @@ DECLARE_SOA_TABLE_FULL(StoredTracks, "Tracks", "AOD", "TRACK", //! On disk versi
293293
track::Rapidity<track::Signed1Pt, track::Tgl>,
294294
track::Sign<track::Signed1Pt>);
295295

296-
DECLARE_SOA_EXTENDED_TABLE(Tracks, StoredTracks, "TRACK", //! Basic track properties
296+
DECLARE_SOA_EXTENDED_TABLE(Tracks, StoredTracks, "TRACK", //! Track parameters at collision vertex
297297
aod::track::Pt,
298298
aod::track::P,
299299
aod::track::Eta,
300300
aod::track::Phi);
301301

302-
DECLARE_SOA_TABLE_FULL(StoredTracksCov, "TracksCov", "AOD", "TRACKCOV", //! On disk version of the TracksCov table
302+
DECLARE_SOA_TABLE_FULL(StoredTracksIU, "Tracks_IU", "AOD", "TRACK_IU", //! On disk version of the track parameters at inner most update (e.g. ITS) as it comes from the tracking
303+
o2::soa::Index<>, track::CollisionId, track::TrackType,
304+
track::X, track::Alpha,
305+
track::Y, track::Z, track::Snp, track::Tgl,
306+
track::Signed1Pt,
307+
track::Py<track::Signed1Pt, track::Snp, track::Alpha>,
308+
track::Px<track::Signed1Pt, track::Snp, track::Alpha>,
309+
track::Pz<track::Signed1Pt, track::Tgl>,
310+
track::Rapidity<track::Signed1Pt, track::Tgl>,
311+
track::Sign<track::Signed1Pt>);
312+
313+
DECLARE_SOA_EXTENDED_TABLE(TracksIU, StoredTracksIU, "TRACK_IU", //! Track parameters at inner most update (e.g. ITS) as it comes from the tracking
314+
aod::track::Pt,
315+
aod::track::P,
316+
aod::track::Eta,
317+
aod::track::Phi);
318+
319+
// NOTE Because table column lists have to be unique SigmaY and SigmaZ are swapped here compared to StoredTracksCov
320+
DECLARE_SOA_TABLE_FULL(StoredTracksCovIU, "TracksCov_IU", "AOD", "TRACKCOV_IU", //! On disk version of the TracksCov table at inner most update (e.g. ITS) as it comes from the tracking
321+
track::SigmaZ, track::SigmaY, track::SigmaSnp, track::SigmaTgl, track::Sigma1Pt,
322+
track::RhoZY, track::RhoSnpY, track::RhoSnpZ, track::RhoTglY, track::RhoTglZ,
323+
track::RhoTglSnp, track::Rho1PtY, track::Rho1PtZ, track::Rho1PtSnp, track::Rho1PtTgl);
324+
325+
DECLARE_SOA_EXTENDED_TABLE(TracksCovIU, StoredTracksCovIU, "TRACKCOV_IU", //! Track covariance matrix at inner most update (e.g. ITS) as it comes from the tracking
326+
aod::track::CYY,
327+
aod::track::CZY,
328+
aod::track::CZZ,
329+
aod::track::CSnpY,
330+
aod::track::CSnpZ,
331+
aod::track::CSnpSnp,
332+
aod::track::CTglY,
333+
aod::track::CTglZ,
334+
aod::track::CTglSnp,
335+
aod::track::CTglTgl,
336+
aod::track::C1PtY,
337+
aod::track::C1PtZ,
338+
aod::track::C1PtSnp,
339+
aod::track::C1PtTgl,
340+
aod::track::C1Pt21Pt2);
341+
342+
DECLARE_SOA_TABLE_FULL(StoredTracksCov, "TracksCov", "AOD", "TRACKCOV", //! On disk version of the TracksCov table at collision vertex
303343
track::SigmaY, track::SigmaZ, track::SigmaSnp, track::SigmaTgl, track::Sigma1Pt,
304344
track::RhoZY, track::RhoSnpY, track::RhoSnpZ, track::RhoTglY, track::RhoTglZ,
305345
track::RhoTglSnp, track::Rho1PtY, track::Rho1PtZ, track::Rho1PtSnp, track::Rho1PtTgl);
306346

307-
DECLARE_SOA_EXTENDED_TABLE(TracksCov, StoredTracksCov, "TRACKCOV", //! Track covariance matrix
347+
DECLARE_SOA_EXTENDED_TABLE(TracksCov, StoredTracksCov, "TRACKCOV", //! Track covariance matrix at collision vertex
308348
aod::track::CYY,
309349
aod::track::CZY,
310350
aod::track::CZZ,
@@ -343,7 +383,9 @@ DECLARE_SOA_EXTENDED_TABLE(TracksExtra, StoredTracksExtra, "TRACKEXTRA", //! Add
343383
track::DetectorMap);
344384

345385
using Track = Tracks::iterator;
386+
using TrackIU = TracksIU::iterator;
346387
using TrackCov = TracksCov::iterator;
388+
using TrackCovIU = TracksCovIU::iterator;
347389
using TrackExtra = TracksExtra::iterator;
348390

349391
} // namespace aod

Framework/Core/include/Framework/DataTypes.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ enum TrackTypeEnum : uint8_t {
3535
enum TrackFlags {
3636
TrackTimeResIsRange = 0x1, // Gaussian or range
3737
PVContributor = 0x2, // This track has contributed to the collision vertex fit
38-
OrphanTrack = 0x4 // Track has no association with any collision vertexd
38+
OrphanTrack = 0x4, // Track has no association with any collision vertex
3939
// NOTE Highest 4 (29..32) bits reserved for PID hypothesis
4040
};
4141
enum TrackFlagsRun2Enum {

Framework/Core/src/AODReaderHelpers.cxx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,8 +157,12 @@ AlgorithmSpec AODReaderHelpers::aodSpawnerCallback(std::vector<InputSpec>& reque
157157

158158
if (description == header::DataDescription{"TRACK"}) {
159159
outputs.adopt(Output{origin, description}, maker(o2::aod::TracksExtensionMetadata{}));
160+
} else if (description == header::DataDescription{"TRACK_IU"}) {
161+
outputs.adopt(Output{origin, description}, maker(o2::aod::TracksIUExtensionMetadata{}));
160162
} else if (description == header::DataDescription{"TRACKCOV"}) {
161163
outputs.adopt(Output{origin, description}, maker(o2::aod::TracksCovExtensionMetadata{}));
164+
} else if (description == header::DataDescription{"TRACKCOV_IU"}) {
165+
outputs.adopt(Output{origin, description}, maker(o2::aod::TracksCovIUExtensionMetadata{}));
162166
} else if (description == header::DataDescription{"TRACKEXTRA"}) {
163167
outputs.adopt(Output{origin, description}, maker(o2::aod::TracksExtraExtensionMetadata{}));
164168
} else if (description == header::DataDescription{"MFTTRACK"}) {

0 commit comments

Comments
 (0)