@@ -128,88 +128,104 @@ DECLARE_SOA_COLUMN(Timestamp, timestamp, uint64_t); //! Timestamp of a BC in ms
128128namespace 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+
138143namespace 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
157162namespace 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
166171namespace 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
202218namespace 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
207223namespace 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
224240namespace 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
30323037struct 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