Skip to content

Commit c11e536

Browse files
authored
[PWGDQ] fixes to the derived tables for global muon alignment (#17848)
1 parent 1960f33 commit c11e536

1 file changed

Lines changed: 110 additions & 98 deletions

File tree

PWGDQ/Tasks/muonGlobalAlignment.cxx

Lines changed: 110 additions & 98 deletions
Original file line numberDiff line numberDiff line change
@@ -128,88 +128,104 @@ DECLARE_SOA_COLUMN(Timestamp, timestamp, uint64_t); //! Timestamp of a BC in ms
128128
namespace o2::aod
129129
{
130130
// Reduced collisions table
131-
DECLARE_SOA_TABLE(MuonAlignCollisions, "AOD", "MUONALIGNCOLL", //! Time and vertex information of collision
131+
DECLARE_SOA_TABLE(MACollisions, "AOD", "MACOLL", //! Time and vertex information of collision
132132
o2::soa::Index<>, muonaligncoll::RunNumber, muonaligncoll::Timestamp,
133133
collision::PosX, collision::PosY, collision::PosZ,
134134
collision::CovXX, collision::CovYY, collision::CovZZ);
135-
using MuonAlignCollision = MuonAlignCollisions::iterator;
135+
using MACollision = MACollisions::iterator;
136136
} // namespace o2::aod
137137

138+
namespace muonalignmfttrk
139+
{
140+
DECLARE_SOA_INDEX_COLUMN_FULL_CUSTOM(Collision, collision, int32_t, MACollisions, "MACOLLs", "");
141+
} // namespace muonalignmfttrk
142+
138143
namespace o2::aod
139144
{
140145
// Reduced MFT tracks table
141-
DECLARE_SOA_TABLE_FULL(StoredMuonAlignMFTTracks, "MuonAlignMFTTracks", "AOD", "MAMFTTRK", //! On disk version of MFTTracks
142-
o2::soa::Index<>, fwdtrack::CollisionId,
143-
fwdtrack::X, fwdtrack::Y, fwdtrack::Z, fwdtrack::Phi, fwdtrack::Tgl, fwdtrack::Signed1Pt,
144-
fwdtrack::v001::NClusters<fwdtrack::MFTClusterSizesAndTrackFlags>, fwdtrack::MFTClusterSizesAndTrackFlags, fwdtrack::IsCA<fwdtrack::MFTClusterSizesAndTrackFlags>,
145-
fwdtrack::Px<fwdtrack::Pt, fwdtrack::Phi>,
146-
fwdtrack::Py<fwdtrack::Pt, fwdtrack::Phi>,
147-
fwdtrack::Pz<fwdtrack::Pt, fwdtrack::Tgl>,
148-
fwdtrack::Sign<fwdtrack::Signed1Pt>, fwdtrack::Chi2);
149-
150-
DECLARE_SOA_EXTENDED_TABLE_USER(MuonAlignMFTTracks, StoredMuonAlignMFTTracks, "MAMFTTRK", //! Additional MFTTracks information (Pt, Eta, P), version 0
146+
DECLARE_SOA_TABLE(StoredMAMFTTracks, "AOD", "MAMFTTRK", //! On disk version of MFTTracks
147+
o2::soa::Index<>, muonalignmfttrk::CollisionId,
148+
fwdtrack::X, fwdtrack::Y, fwdtrack::Z, fwdtrack::Phi, fwdtrack::Tgl, fwdtrack::Signed1Pt,
149+
fwdtrack::v001::NClusters<fwdtrack::MFTClusterSizesAndTrackFlags>, fwdtrack::MFTClusterSizesAndTrackFlags, fwdtrack::IsCA<fwdtrack::MFTClusterSizesAndTrackFlags>,
150+
fwdtrack::Px<fwdtrack::Pt, fwdtrack::Phi>,
151+
fwdtrack::Py<fwdtrack::Pt, fwdtrack::Phi>,
152+
fwdtrack::Pz<fwdtrack::Pt, fwdtrack::Tgl>,
153+
fwdtrack::Sign<fwdtrack::Signed1Pt>, fwdtrack::Chi2);
154+
155+
DECLARE_SOA_EXTENDED_TABLE_USER(MAMFTTracks, StoredMAMFTTracks, "MAMFTTRK", //! Additional MFTTracks information (Pt, Eta, P), version 0
151156
aod::fwdtrack::Pt,
152157
aod::fwdtrack::Eta,
153158
aod::fwdtrack::P);
154-
using MuonAlignMFTTrack = MuonAlignMFTTracks::iterator;
159+
using MAMFTTrack = MAMFTTracks::iterator;
155160
} // namespace o2::aod
156161

157162
namespace muonalignfwdtrk
158163
{
159-
DECLARE_SOA_INDEX_COLUMN_FULL_CUSTOM(Collision, collision, int32_t, o2::aod::MuonAlignCollisions, "MACOLLs", "");
164+
DECLARE_SOA_INDEX_COLUMN_FULL_CUSTOM(Collision, collision, int32_t, MACollisions, "MACOLLs", "");
160165
// Index of matching MCH track for GlobalMuonTracks and GlobalForwardTracks
161-
DECLARE_SOA_SELF_INDEX_COLUMN_FULL(MuonAlignMCHTrack, matchMCHTrack, int, "MuonAlignFwdTracks_MatchMCHTrack"); // o2-linter: disable=name/o2-column (to match naming in official tables)
166+
DECLARE_SOA_SELF_INDEX_COLUMN_FULL(MAMCHTrack, matchMCHTrack, int, "MAFWDTRACKs_MatchMCHTrack"); // o2-linter: disable=name/o2-column (to match naming in official tables)
162167
// ID of matching MFT track for GlobalMuonTracks and GlobalForwardTracks
163-
DECLARE_SOA_INDEX_COLUMN(MuonAlignMFTTrack, matchMFTTrack); // o2-linter: disable=name/o2-column (to match naming in official tables)
168+
DECLARE_SOA_INDEX_COLUMN_FULL_CUSTOM(MAMFTTrack, matchMFTTrack, int32_t, MAMFTTracks, "MAMFTTRKs", ""); // o2-linter: disable=name/o2-column (to match naming in official tables)
164169
} // namespace muonalignfwdtrk
165170

166171
namespace o2::aod
167172
{
168173
// Reduced forward tracks table
169-
DECLARE_SOA_TABLE_FULL(StoredMuonAlignFwdTracks, "MuonAlignFwdTracks", "AOD", "MAFWDTRK",
170-
o2::soa::Index<>, muonalignfwdtrk::CollisionId, fwdtrack::TrackType,
171-
fwdtrack::X, fwdtrack::Y, fwdtrack::Z, fwdtrack::Phi, fwdtrack::Tgl,
172-
fwdtrack::Signed1Pt, fwdtrack::NClusters, fwdtrack::PDca, fwdtrack::RAtAbsorberEnd,
173-
fwdtrack::Px<fwdtrack::Pt, fwdtrack::Phi>,
174-
fwdtrack::Py<fwdtrack::Pt, fwdtrack::Phi>,
175-
fwdtrack::Pz<fwdtrack::Pt, fwdtrack::Tgl>,
176-
fwdtrack::Sign<fwdtrack::Signed1Pt>,
177-
fwdtrack::Chi2, fwdtrack::Chi2MatchMCHMFT,
178-
muonalignfwdtrk::MuonAlignMFTTrackId, muonalignfwdtrk::MuonAlignMCHTrackId,
179-
fwdtrack::CXX,
180-
fwdtrack::CXY,
181-
fwdtrack::CYY,
182-
fwdtrack::CPhiX,
183-
fwdtrack::CPhiY,
184-
fwdtrack::CPhiPhi,
185-
fwdtrack::CTglX,
186-
fwdtrack::CTglY,
187-
fwdtrack::CTglPhi,
188-
fwdtrack::CTglTgl,
189-
fwdtrack::C1PtX,
190-
fwdtrack::C1PtY,
191-
fwdtrack::C1PtPhi,
192-
fwdtrack::C1PtTgl,
193-
fwdtrack::C1Pt21Pt2);
194-
195-
DECLARE_SOA_EXTENDED_TABLE_USER(MuonAlignFwdTracks, StoredMuonAlignFwdTracks, "MAFWDTRK", //!
174+
DECLARE_SOA_TABLE(StoredMAFwdTracks, "AOD", "MAFWDTRACK",
175+
o2::soa::Index<>, muonalignfwdtrk::CollisionId, fwdtrack::TrackType,
176+
fwdtrack::X, fwdtrack::Y, fwdtrack::Z, fwdtrack::Phi, fwdtrack::Tgl,
177+
fwdtrack::Signed1Pt, fwdtrack::NClusters, fwdtrack::PDca, fwdtrack::RAtAbsorberEnd,
178+
fwdtrack::Px<fwdtrack::Pt, fwdtrack::Phi>,
179+
fwdtrack::Py<fwdtrack::Pt, fwdtrack::Phi>,
180+
fwdtrack::Pz<fwdtrack::Pt, fwdtrack::Tgl>,
181+
fwdtrack::Sign<fwdtrack::Signed1Pt>,
182+
fwdtrack::Chi2, fwdtrack::Chi2MatchMCHMFT,
183+
muonalignfwdtrk::MAMFTTrackId, muonalignfwdtrk::MAMCHTrackId);
184+
185+
DECLARE_SOA_EXTENDED_TABLE_USER(MAFwdTracks, StoredMAFwdTracks, "MAFWDTRACK", //!
196186
aod::fwdtrack::Pt,
197187
aod::fwdtrack::Eta,
198188
aod::fwdtrack::P);
199-
using MuonAlignFwdTrack = MuonAlignFwdTracks::iterator;
189+
190+
// Reduced forward track covariances table
191+
192+
DECLARE_SOA_TABLE(StoredMAFwdTracksCov, "AOD", "MAFWDTRACKSCOV", //!
193+
fwdtrack::SigmaX, fwdtrack::SigmaY, fwdtrack::SigmaPhi, fwdtrack::SigmaTgl, fwdtrack::Sigma1Pt,
194+
fwdtrack::RhoXY, fwdtrack::RhoPhiY, fwdtrack::RhoPhiX, fwdtrack::RhoTglX, fwdtrack::RhoTglY,
195+
fwdtrack::RhoTglPhi, fwdtrack::Rho1PtX, fwdtrack::Rho1PtY, fwdtrack::Rho1PtPhi, fwdtrack::Rho1PtTgl);
196+
197+
DECLARE_SOA_EXTENDED_TABLE_USER(MAFwdTracksCov, StoredMAFwdTracksCov, "MAFWDTRACKSCOV", //!
198+
aod::fwdtrack::CXX,
199+
aod::fwdtrack::CXY,
200+
aod::fwdtrack::CYY,
201+
aod::fwdtrack::CPhiX,
202+
aod::fwdtrack::CPhiY,
203+
aod::fwdtrack::CPhiPhi,
204+
aod::fwdtrack::CTglX,
205+
aod::fwdtrack::CTglY,
206+
aod::fwdtrack::CTglPhi,
207+
aod::fwdtrack::CTglTgl,
208+
aod::fwdtrack::C1PtX,
209+
aod::fwdtrack::C1PtY,
210+
aod::fwdtrack::C1PtPhi,
211+
aod::fwdtrack::C1PtTgl,
212+
aod::fwdtrack::C1Pt21Pt2);
213+
214+
using MAFwdTrack = MAFwdTracks::iterator;
215+
using MAFwdTrackCov = MAFwdTracksCov::iterator;
200216
} // namespace o2::aod
201217

202218
namespace muonaligncl
203219
{
204-
DECLARE_SOA_INDEX_COLUMN_FULL_CUSTOM(FwdTrack, fwdTrack, int32_t, o2::aod::StoredMuonAlignFwdTracks, "MAFWDTRKs", "");
220+
DECLARE_SOA_INDEX_COLUMN_FULL_CUSTOM(FwdTrack, fwdTrack, int32_t, MAFwdTracks, "MAFwdTracks", "");
205221
} // namespace muonaligncl
206222

207223
namespace o2::aod
208224
{
209225
// Reduced MCH clusters table
210-
DECLARE_SOA_TABLE(MuonAlignFwdTrkCls, "AOD", "MAFWDTRKCL", //! Forward Track Cluster information
226+
DECLARE_SOA_TABLE(MAFwdTrkCls, "AOD", "MAFWDTRKCL", //! Forward Track Cluster information
211227
o2::soa::Index<>,
212-
fwdtrkcl::FwdTrackId,
228+
muonaligncl::FwdTrackId,
213229
fwdtrkcl::X,
214230
fwdtrkcl::Y,
215231
fwdtrkcl::Z,
@@ -218,7 +234,7 @@ DECLARE_SOA_TABLE(MuonAlignFwdTrkCls, "AOD", "MAFWDTRKCL", //! Forward Track Clu
218234
fwdtrkcl::IsGoodX<fwdtrkcl::ClInfo>,
219235
fwdtrkcl::IsGoodY<fwdtrkcl::ClInfo>);
220236

221-
using MuonAlignFwdTrkCl = MuonAlignFwdTrkCls::iterator;
237+
using MAFwdTrkCl = MAFwdTrkCls::iterator;
222238
} // namespace o2::aod
223239

224240
namespace o2::aod
@@ -249,12 +265,14 @@ struct MuonGlobalAlignment { // o2-linter: disable=name/workflow-file,name/struc
249265
static constexpr double BransonPlaneZ = -466.f;
250266

251267
#if (PROCESS_DERIVED_TABLES == 0)
252-
Produces<aod::MuonAlignCollisions> collTable;
253-
Produces<aod::StoredMuonAlignFwdTracks> fwdTable;
254-
Produces<aod::StoredMuonAlignMFTTracks> mftTable;
255-
Produces<aod::MuonAlignFwdTrkCls> clusTable;
268+
Produces<aod::MACollisions> collTable;
269+
Produces<aod::StoredMAFwdTracks> fwdTable;
270+
Produces<aod::StoredMAFwdTracksCov> fwdCovTable;
271+
Produces<aod::StoredMAMFTTracks> mftTable;
272+
Produces<aod::MAFwdTrkCls> clusTable;
256273
Produces<aod::CompactMFTTracks> compactMftTable;
257274
Configurable<bool> cfgProduceMuonAlignmentTables{"cfgProduceMuonAlignmentTables", false, "flag to produce derived tables for muon alignment"};
275+
Configurable<bool> cfgProduceMuonAlignmentTablesWithCovariances{"cfgProduceMuonAlignmentTablesWithCovariances", true, "flag to include muon track covariances in derived tables for muon alignment"};
258276
Configurable<bool> cfgProduceMFTTable{"cfgProduceMFTTable", false, "flag to produce MFTs table"};
259277
#endif
260278

@@ -447,7 +465,7 @@ struct MuonGlobalAlignment { // o2-linter: disable=name/workflow-file,name/struc
447465
#if (PROCESS_DERIVED_TABLES == 0)
448466
Preslice<aod::FwdTrkCls> perMuon = aod::fwdtrkcl::fwdtrackId;
449467
#else
450-
Preslice<aod::MuonAlignFwdTrkCls> perMuon = aod::fwdtrkcl::fwdtrackId;
468+
Preslice<aod::MAFwdTrkCls> perMuon = muonaligncl::fwdTrackId;
451469
#endif
452470

453471
o2::aod::rctsel::RCTFlagsChecker rctChecker{"CBT_muon_glo", false, false, true};
@@ -2197,7 +2215,7 @@ struct MuonGlobalAlignment { // o2-linter: disable=name/workflow-file,name/struc
21972215
for (const auto& [collisionIndex, collisionInfo] : collisionInfos) {
21982216
auto const& c = collisions.rawIteratorAt(collisionIndex);
21992217

2200-
if (collisionInfo.globalMuonTracks.empty()) {
2218+
if (collisionInfo.mchTracks.empty()) {
22012219
continue;
22022220
}
22032221

@@ -2209,28 +2227,24 @@ struct MuonGlobalAlignment { // o2-linter: disable=name/workflow-file,name/struc
22092227
for (const auto& mchIndex : collisionInfo.mchTracks) {
22102228
auto const& mchTrack = muonTracks.rawIteratorAt(mchIndex);
22112229

2230+
// only store good MCH tracks
2231+
if (!IsGoodMuon(mchTrack, c, cfgTrackChi2MchUp, 0.f, cfgPtMchLow, {cfgEtaMftLow, cfgEtaMftUp}, {cfgRabsLow, cfgRabsUp}, fSigmaPdcaUp)) {
2232+
continue;
2233+
}
2234+
22122235
fwdTable(collId,
22132236
mchTrack.trackType(),
22142237
mchTrack.x(), mchTrack.y(), mchTrack.z(),
22152238
mchTrack.phi(), mchTrack.tgl(), mchTrack.signed1Pt(),
22162239
mchTrack.nClusters(), mchTrack.pDca(), mchTrack.rAtAbsorberEnd(),
22172240
mchTrack.chi2(), mchTrack.chi2MatchMCHMFT(),
2218-
mchTrack.matchMFTTrackId(), mchTrack.matchMCHTrackId(),
2219-
mchTrack.cXX(),
2220-
mchTrack.cXY(),
2221-
mchTrack.cYY(),
2222-
mchTrack.cPhiX(),
2223-
mchTrack.cPhiY(),
2224-
mchTrack.cPhiPhi(),
2225-
mchTrack.cTglX(),
2226-
mchTrack.cTglY(),
2227-
mchTrack.cTglPhi(),
2228-
mchTrack.cTglTgl(),
2229-
mchTrack.c1PtX(),
2230-
mchTrack.c1PtY(),
2231-
mchTrack.c1PtPhi(),
2232-
mchTrack.c1PtTgl(),
2233-
mchTrack.c1Pt21Pt2());
2241+
mchTrack.matchMFTTrackId(), mchTrack.matchMCHTrackId());
2242+
2243+
if (cfgProduceMuonAlignmentTablesWithCovariances.value) {
2244+
fwdCovTable(mchTrack.sigmaX(), mchTrack.sigmaY(), mchTrack.sigmaPhi(), mchTrack.sigmaTgl(), mchTrack.sigma1Pt(),
2245+
mchTrack.rhoXY(), mchTrack.rhoPhiY(), mchTrack.rhoPhiX(), mchTrack.rhoTglX(), mchTrack.rhoTglY(),
2246+
mchTrack.rhoTglPhi(), mchTrack.rho1PtX(), mchTrack.rho1PtY(), mchTrack.rho1PtPhi(), mchTrack.rho1PtTgl());
2247+
}
22342248

22352249
// loop over attached clusters
22362250
auto clustersSliced = clusters.sliceBy(perMuon, mchTrack.globalIndex()); // Slice clusters by muon id
@@ -2262,22 +2276,13 @@ struct MuonGlobalAlignment { // o2-linter: disable=name/workflow-file,name/struc
22622276
muonTrack.phi(), muonTrack.tgl(), muonTrack.signed1Pt(),
22632277
muonTrack.nClusters(), muonTrack.pDca(), muonTrack.rAtAbsorberEnd(),
22642278
muonTrack.chi2(), muonTrack.chi2MatchMCHMFT(),
2265-
mftTrkId, remappedMchId,
2266-
muonTrack.cXX(),
2267-
muonTrack.cXY(),
2268-
muonTrack.cYY(),
2269-
muonTrack.cPhiX(),
2270-
muonTrack.cPhiY(),
2271-
muonTrack.cPhiPhi(),
2272-
muonTrack.cTglX(),
2273-
muonTrack.cTglY(),
2274-
muonTrack.cTglPhi(),
2275-
muonTrack.cTglTgl(),
2276-
muonTrack.c1PtX(),
2277-
muonTrack.c1PtY(),
2278-
muonTrack.c1PtPhi(),
2279-
muonTrack.c1PtTgl(),
2280-
muonTrack.c1Pt21Pt2());
2279+
mftTrkId, remappedMchId);
2280+
2281+
if (cfgProduceMuonAlignmentTablesWithCovariances.value) {
2282+
fwdCovTable(muonTrack.sigmaX(), muonTrack.sigmaY(), muonTrack.sigmaPhi(), muonTrack.sigmaTgl(), muonTrack.sigma1Pt(),
2283+
muonTrack.rhoXY(), muonTrack.rhoPhiY(), muonTrack.rhoPhiX(), muonTrack.rhoTglX(), muonTrack.rhoTglY(),
2284+
muonTrack.rhoTglPhi(), muonTrack.rho1PtX(), muonTrack.rho1PtY(), muonTrack.rho1PtPhi(), muonTrack.rho1PtTgl());
2285+
}
22812286

22822287
fwdTrkId += 1;
22832288
mftTrkId += 1;
@@ -2997,10 +3002,10 @@ struct MuonGlobalAlignment { // o2-linter: disable=name/workflow-file,name/struc
29973002

29983003
#else
29993004

3000-
void processDerivedTables(o2::aod::MuonAlignCollisions const& collisions,
3001-
o2::aod::MuonAlignFwdTrkCls const& clusters,
3002-
o2::aod::MuonAlignMFTTracks const& mftTracks,
3003-
o2::aod::MuonAlignFwdTracks const& muonTracks)
3005+
void processDerivedTables(o2::aod::MACollisions const& collisions,
3006+
soa::Join<o2::aod::MAFwdTracks, o2::aod::MAFwdTracksCov> const& muonTracks,
3007+
o2::aod::MAFwdTrkCls const& clusters,
3008+
o2::aod::MAMFTTracks const& mftTracks)
30043009
{
30053010
if (collisions.size() < 1) {
30063011
return;
@@ -3028,28 +3033,35 @@ struct MuonGlobalAlignment { // o2-linter: disable=name/workflow-file,name/struc
30283033
};
30293034

30303035
#if (PROCESS_DERIVED_TABLES == 1)
3031-
// Extends the fwdtracksrealign table with expression columns
3036+
// Extends the derived tables with expression columns
30323037
struct MuonGlobalAlignmentSpawner {
3033-
Spawns<aod::MuonAlignFwdTracks> realignFwdTrks;
3034-
Spawns<aod::MuonAlignMFTTracks> realignMftTrks;
3038+
Spawns<aod::MAFwdTracks> realignFwdTrks;
3039+
Spawns<aod::MAFwdTracksCov> realignFwdTrksCov;
3040+
Spawns<aod::MAMFTTracks> realignMftTrks;
30353041
void init(InitContext const&) {}
30363042

3037-
auto process(o2::aod::StoredMuonAlignFwdTracks const& storedFwd,
3038-
o2::aod::StoredMuonAlignMFTTracks const& storedMft)
3043+
/*auto process(o2::aod::StoredMAFwdTracks const& storedFwd,
3044+
o2::aod::StoredMAFwdTracksCov const& storedFwdCov,
3045+
o2::aod::StoredMAMFTTracks const& storedMft)
30393046
{
30403047
// Evaluate the dynamic kinematic expressions on the fly
3041-
auto fwdExtended = o2::soa::Extend<o2::aod::StoredMuonAlignFwdTracks,
3048+
auto fwdExtended = o2::soa::Extend<o2::aod::StoredMAFwdTracks,
30423049
aod::fwdtrack::Pt,
30433050
aod::fwdtrack::Eta,
30443051
aod::fwdtrack::P>(storedFwd);
30453052
3046-
auto mftExtended = o2::soa::Extend<o2::aod::StoredMuonAlignMFTTracks,
3053+
auto fwdExtended = o2::soa::Extend<o2::aod::StoredMAFwdTracks,
3054+
aod::fwdtrack::Pt,
3055+
aod::fwdtrack::Eta,
3056+
aod::fwdtrack::P>(storedFwd);
3057+
3058+
auto mftExtended = o2::soa::Extend<o2::aod::StoredMAMFTTracks,
30473059
aod::fwdtrack::Pt,
30483060
aod::fwdtrack::Eta,
30493061
aod::fwdtrack::P>(storedMft);
30503062
30513063
return std::make_tuple(fwdExtended, mftExtended);
3052-
}
3064+
}*/
30533065
};
30543066
#endif
30553067

0 commit comments

Comments
 (0)