Skip to content

Commit a2ded80

Browse files
committed
[PWGDQ] add track information in derived alignment tables
Add the global BC and the track time+resolution in the derived tables of the alignment analysis task, to allow comparison with the collision time as well as check time correlations between the muon pairs.
1 parent 5727b9e commit a2ded80

1 file changed

Lines changed: 27 additions & 2 deletions

File tree

‎PWGDQ/Tasks/muonGlobalAlignment.cxx‎

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,10 @@ DECLARE_SOA_INDEX_COLUMN_FULL_CUSTOM(Collision, collision, int32_t, MACollisions
172172
DECLARE_SOA_SELF_INDEX_COLUMN_FULL(MAMCHTrack, matchMCHTrack, int, "MAFWDTRACKs_MatchMCHTrack"); // o2-linter: disable=name/o2-column (to match naming in official tables)
173173
// ID of matching MFT track for GlobalMuonTracks and GlobalForwardTracks
174174
DECLARE_SOA_INDEX_COLUMN_FULL_CUSTOM(MAMFTTrack, matchMFTTrack, int32_t, MAMFTTracks, "MAMFTTRKs", ""); // o2-linter: disable=name/o2-column (to match naming in official tables)
175+
// Track time information
176+
DECLARE_SOA_COLUMN(GlobalBC, globalBC, uint64_t); //! Bunch crossing number (globally unique in this run)
177+
DECLARE_SOA_COLUMN(TrackTime, trackTime, float); //! Estimated time of the track in ns wrt collision().bc() or ambiguoustrack.bcSlice()[0]
178+
DECLARE_SOA_COLUMN(TrackTimeRes, trackTimeRes, float); //! Resolution of the track time in ns
175179
} // namespace muonalignfwdtrk
176180

177181
namespace o2::aod
@@ -185,6 +189,8 @@ DECLARE_SOA_TABLE(StoredMAFwdTracks, "AOD", "MAFWDTRACK",
185189
fwdtrack::Py<fwdtrack::Pt, fwdtrack::Phi>,
186190
fwdtrack::Pz<fwdtrack::Pt, fwdtrack::Tgl>,
187191
fwdtrack::Sign<fwdtrack::Signed1Pt>,
192+
muonalignfwdtrk::GlobalBC,
193+
muonalignfwdtrk::TrackTime, muonalignfwdtrk::TrackTimeRes,
188194
fwdtrack::Chi2, fwdtrack::Chi2MatchMCHMFT,
189195
muonalignfwdtrk::MAMFTTrackId, muonalignfwdtrk::MAMCHTrackId);
190196

@@ -2300,9 +2306,10 @@ struct MuonGlobalAlignment { // o2-linter: disable=name/workflow-file,name/struc
23002306
}
23012307

23022308
#if (PROCESS_DERIVED_TABLES == 0)
2303-
template <class COLL, class TMUON, class TCLS, class TMFT>
2309+
template <class COLL, class BC, class TMUON, class TCLS, class TMFT>
23042310
void StoreCollisions(const std::unordered_map<uint64_t, CollisionInfo>& collisionInfos,
23052311
COLL const& collisions,
2312+
BC const& bcs,
23062313
TMUON const& muonTracks,
23072314
TCLS const& clusters,
23082315
TMFT const& /*mftTracks*/,
@@ -2392,6 +2399,13 @@ struct MuonGlobalAlignment { // o2-linter: disable=name/workflow-file,name/struc
23922399
continue;
23932400
}
23942401

2402+
// skip tracks without associated collision (this should never be true here)
2403+
if (!mchTrack.has_collision()) {
2404+
continue;
2405+
}
2406+
const auto& trackColl = collisions.rawIteratorAt(mchTrack.collisionId());
2407+
const auto& trackBc = bcs.rawIteratorAt(trackColl.bcId());
2408+
23952409
// store all MCH tracks when the event contains a muon pair of opposite sign
23962410
if (!hasGoodOppositeSignMuonPair) {
23972411
// only store good MCH tracks
@@ -2405,6 +2419,8 @@ struct MuonGlobalAlignment { // o2-linter: disable=name/workflow-file,name/struc
24052419
mchTrack.x(), mchTrack.y(), mchTrack.z(),
24062420
mchTrack.phi(), mchTrack.tgl(), mchTrack.signed1Pt(),
24072421
mchTrack.nClusters(), mchTrack.pDca(), mchTrack.rAtAbsorberEnd(),
2422+
trackBc.globalBC(),
2423+
mchTrack.trackTime(), mchTrack.trackTimeRes(),
24082424
mchTrack.chi2(), mchTrack.chi2MatchMCHMFT(),
24092425
mchTrack.matchMFTTrackId(), mchTrack.matchMCHTrackId());
24102426

@@ -2437,9 +2453,16 @@ struct MuonGlobalAlignment { // o2-linter: disable=name/workflow-file,name/struc
24372453
continue;
24382454
}
24392455

2456+
// skip tracks without associated collision (this should never be true here)
2457+
if (!mchTrack.has_collision()) {
2458+
continue;
2459+
}
24402460
try {
24412461
auto remappedMchId = muonTrackIdRemapping.at(mchTrack.globalIndex());
24422462

2463+
const auto& trackColl = collisions.rawIteratorAt(mchTrack.collisionId());
2464+
const auto& trackBc = bcs.rawIteratorAt(trackColl.bcId());
2465+
24432466
mftTable(remappedCollisionIndex,
24442467
mftTrack.x(), mftTrack.y(), mftTrack.z(),
24452468
mftTrack.phi(), mftTrack.tgl(), mftTrack.signed1Pt(),
@@ -2450,6 +2473,8 @@ struct MuonGlobalAlignment { // o2-linter: disable=name/workflow-file,name/struc
24502473
muonTrack.x(), muonTrack.y(), muonTrack.z(),
24512474
muonTrack.phi(), muonTrack.tgl(), muonTrack.signed1Pt(),
24522475
muonTrack.nClusters(), muonTrack.pDca(), muonTrack.rAtAbsorberEnd(),
2476+
trackBc.globalBC(),
2477+
mchTrack.trackTime(), mchTrack.trackTimeRes(),
24532478
muonTrack.chi2(), muonTrack.chi2MatchMCHMFT(),
24542479
remappedMftTrkIndex, remappedMchId);
24552480

@@ -3207,7 +3232,7 @@ struct MuonGlobalAlignment { // o2-linter: disable=name/workflow-file,name/struc
32073232
InitCollisions(collisions, bcs, muonTracks, clusters, mftTracks, collisionInfos);
32083233

32093234
if (cfgProduceMuonAlignmentTables) {
3210-
StoreCollisions(collisionInfos, collisions, muonTracks, clusters, mftTracks, fwdTrackAssocs);
3235+
StoreCollisions(collisionInfos, collisions, bcs, muonTracks, clusters, mftTracks, fwdTrackAssocs);
32113236
}
32123237

32133238
FillMftPlots(collisions, muonTracks, mftTracks, collisionInfos);

0 commit comments

Comments
 (0)