4545#include " PWGDQ/Core/MCSignalLibrary.h"
4646#include " Common/DataModel/PIDResponse.h"
4747#include " Common/DataModel/TrackSelectionTables.h"
48+ #include " Common/DataModel/FwdTrackReAlignTables.h"
4849#include " Common/DataModel/CollisionAssociationTables.h"
4950#include " DataFormatsParameters/GRPMagField.h"
5051#include " DataFormatsParameters/GRPObject.h"
@@ -83,6 +84,7 @@ using MyBarrelTracksWithCov = soa::Join<aod::Tracks, aod::TracksExtra, aod::Trac
8384 aod::McTrackLabels>;
8485using MyMuons = soa::Join<aod::FwdTracks, aod::McFwdTrackLabels, aod::FwdTracksDCA>;
8586using MyMuonsWithCov = soa::Join<aod::FwdTracks, aod::FwdTracksCov, aod::McFwdTrackLabels, aod::FwdTracksDCA>;
87+ using MyMuonsRealignWithCov = soa::Join<aod::FwdTracksReAlign, aod::FwdTrksCovReAlign>;
8688
8789using MyEvents = soa::Join<aod::Collisions, aod::EvSels, aod::McCollisionLabels>;
8890using MyEventsWithMults = soa::Join<aod::Collisions, aod::EvSels, aod::Mults, aod::MultsExtra, aod::McCollisionLabels>;
@@ -101,6 +103,7 @@ constexpr static uint32_t gkTrackFillMapWithCov = VarManager::ObjTypes::Track |
101103// constexpr static uint32_t gkTrackFillMapWithDalitzBits = gkTrackFillMap | VarManager::ObjTypes::DalitzBits;
102104// constexpr static uint32_t gkMuonFillMap = VarManager::ObjTypes::Muon;
103105constexpr static uint32_t gkMuonFillMapWithCov = VarManager::ObjTypes::Muon | VarManager::ObjTypes::MuonCov;
106+ constexpr static uint32_t gkMuonRealignFillMapWithCov = VarManager::ObjTypes::MuonRealign | VarManager::ObjTypes::MuonCovRealign;
104107// constexpr static uint32_t gkMuonFillMapWithAmbi = VarManager::ObjTypes::Muon | VarManager::ObjTypes::AmbiMuon;
105108// constexpr static uint32_t gkMuonFillMapWithCovAmbi = VarManager::ObjTypes::Muon | VarManager::ObjTypes::MuonCov | VarManager::ObjTypes::AmbiMuon;
106109// constexpr static uint32_t gkTrackFillMapWithAmbi = VarManager::ObjTypes::Track | VarManager::ObjTypes::AmbiTrack;
@@ -229,7 +232,7 @@ struct TableMakerMC {
229232 // Check whether barrel or muon are enabled
230233 bool isProcessBCenabled = context.mOptions .get <bool >(" processPP" );
231234 bool isBarrelEnabled = (context.mOptions .get <bool >(" processPP" ) || context.mOptions .get <bool >(" processPPBarrelOnly" ) || context.mOptions .get <bool >(" processPbPbBarrelOnly" ));
232- bool isMuonEnabled = (context.mOptions .get <bool >(" processPP" ) || context.mOptions .get <bool >(" processPPMuonOnly" ) || context.mOptions .get <bool >(" processPbPbMuonOnly" ));
235+ bool isMuonEnabled = (context.mOptions .get <bool >(" processPP" ) || context.mOptions .get <bool >(" processPPMuonOnly" ) || context.mOptions .get <bool >(" processPPMuonRealignOnly " ) || context. mOptions . get < bool >( " processPbPbMuonOnly" ) || context. mOptions . get < bool >( " processPbPbMuonRealignOnly " ));
233236 // Make sure at least one process function is enabled
234237 if (!(isProcessBCenabled || isBarrelEnabled || isMuonEnabled)) {
235238 LOG (fatal) << " No process function was enabled for TableMakerMC. Check it out!!!" ;
@@ -826,8 +829,8 @@ struct TableMakerMC {
826829 }
827830 }
828831
829- template <uint32_t TMuonFillMap, uint32_t TMFTFillMap, typename TEvent, typename TMuons, typename TMFTTracks>
830- void skimMuons (TEvent const & collision, TMuons const & muons, FwdTrackAssoc const & muonAssocs, aod::McParticles const & mcTracks, TMFTTracks const & /* mftTracks*/ )
832+ template <uint32_t TMuonFillMap, uint32_t TMuonRealignFillMap, uint32_t TMFTFillMap, typename TEvent, typename TMuons, typename TMuonsRealign , typename TMFTTracks>
833+ void skimMuons (TEvent const & collision, TMuons const & muons, TMuonsRealign const & muonsRealign, FwdTrackAssoc const & muonAssocs, aod::McParticles const & mcTracks, TMFTTracks const & /* mftTracks*/ )
831834 {
832835 // Skim the fwd-tracks (muons)
833836 // Loop over the collision-track associations, recompute track properties depending on the collision assigned, and apply track cuts for selection
@@ -868,7 +871,26 @@ struct TableMakerMC {
868871 VarManager::FillTrackCollision<TMuonFillMap>(muontrack, collision);
869872 VarManager::FillGlobalMuonRefit<TMuonFillMap>(muontrack, mfttrack, collision);
870873 } else {
871- VarManager::FillTrackCollision<TMuonFillMap>(muon, collision);
874+ if constexpr ((static_cast <bool >(TMuonRealignFillMap)) && static_cast <int >(muon.trackType ()) > 2 ) {
875+ // refill kinematic info and recalculate propagation in case of using realigned muons
876+ auto muonRealignSelected = muonsRealign.select (aod::fwdtrackrealign::fwdtrackId == assoc.fwdtrackId () && aod::fwdtrackrealign::collisionId == collision.globalIndex ());
877+ if (muonRealignSelected.size () == 1 ) {
878+ for (const auto & muonRealign : muonRealignSelected) {
879+ // refill muon information with realigned tracks
880+ VarManager::FillTrack<TMuonRealignFillMap>(muonRealign);
881+
882+ if (fConfigVariousOptions .fPropMuon ) {
883+ VarManager::FillPropagateMuon<TMuonRealignFillMap>(muonRealign, collision);
884+ }
885+
886+ VarManager::FillTrackCollision<TMuonRealignFillMap>(muonRealign, collision);
887+ }
888+ } else {
889+ LOGF (fatal, " Inconsistent size of realigned muon track candidates." );
890+ }
891+ } else {
892+ VarManager::FillTrackCollision<TMuonFillMap>(muon, collision);
893+ }
872894 }
873895
874896 if (fDoDetailedQA ) {
@@ -980,16 +1002,35 @@ struct TableMakerMC {
9801002 VarManager::FillTrackCollision<TMuonFillMap>(muontrack, collision);
9811003 VarManager::FillGlobalMuonRefit<TMuonFillMap>(muontrack, mfttrack, collision);
9821004 } else {
983- VarManager::FillTrackCollision<TMuonFillMap>(muon, collision);
1005+ if constexpr ((static_cast <bool >(TMuonRealignFillMap)) && static_cast <int >(muon.trackType ()) > 2 ) {
1006+ // refill kinematic info and recalculate propagation in case of using realigned muons
1007+ auto muonRealignSelected = muonsRealign.select (aod::fwdtrackrealign::fwdtrackId == origIdx && aod::fwdtrackrealign::collisionId == collision.globalIndex ());
1008+ if (muonRealignSelected.size () == 1 ) {
1009+ for (const auto & muonRealign : muonRealignSelected) {
1010+ // refill muon information with realigned tracks
1011+ VarManager::FillTrack<TMuonRealignFillMap>(muonRealign);
1012+
1013+ if (fConfigVariousOptions .fPropMuon ) {
1014+ VarManager::FillPropagateMuon<TMuonRealignFillMap>(muonRealign, collision);
1015+ }
1016+
1017+ VarManager::FillTrackCollision<TMuonRealignFillMap>(muonRealign, collision);
1018+ }
1019+ } else {
1020+ LOGF (fatal, " Inconsistent size of realigned muon track candidates." );
1021+ }
1022+ } else {
1023+ VarManager::FillTrackCollision<TMuonFillMap>(muon, collision);
1024+ }
9841025 }
9851026 muonBasic (reducedEventIdx, mchIdx, mftIdx, fFwdTrackFilterMap [muon.globalIndex ()], VarManager::fgValues[VarManager::kPt ], VarManager::fgValues[VarManager::kEta ], VarManager::fgValues[VarManager::kPhi ], muon.sign (), 0 );
9861027 muonExtra (muon.nClusters (), VarManager::fgValues[VarManager::kMuonPDca ], VarManager::fgValues[VarManager::kMuonRAtAbsorberEnd ],
987- muon. chi2 () , muon.chi2MatchMCHMID (), muon.chi2MatchMCHMFT (),
1028+ VarManager::fgValues[VarManager:: kMuonChi2 ] , muon.chi2MatchMCHMID (), muon.chi2MatchMCHMFT (),
9881029 muon.matchScoreMCHMFT (),
9891030 muon.mchBitMap (), muon.midBitMap (),
9901031 muon.midBoards (), muon.trackType (), VarManager::fgValues[VarManager::kMuonDCAx ], VarManager::fgValues[VarManager::kMuonDCAy ],
9911032 muon.trackTime (), muon.trackTimeRes ());
992- if constexpr (static_cast <bool >(TMuonFillMap & VarManager::ObjTypes::MuonCov)) {
1033+ if constexpr (static_cast <bool >(TMuonFillMap & VarManager::ObjTypes::MuonCov) || static_cast < bool >(TMuonRealignFillMap & VarManager::ObjTypes::MuonCovRealign) ) {
9931034 muonCov (VarManager::fgValues[VarManager::kX ], VarManager::fgValues[VarManager::kY ], VarManager::fgValues[VarManager::kZ ], VarManager::fgValues[VarManager::kPhi ], VarManager::fgValues[VarManager::kTgl ], muon.sign () / VarManager::fgValues[VarManager::kPt ],
9941035 VarManager::fgValues[VarManager::kMuonCXX ], VarManager::fgValues[VarManager::kMuonCXY ], VarManager::fgValues[VarManager::kMuonCYY ], VarManager::fgValues[VarManager::kMuonCPhiX ], VarManager::fgValues[VarManager::kMuonCPhiY ], VarManager::fgValues[VarManager::kMuonCPhiPhi ],
9951036 VarManager::fgValues[VarManager::kMuonCTglX ], VarManager::fgValues[VarManager::kMuonCTglY ], VarManager::fgValues[VarManager::kMuonCTglPhi ], VarManager::fgValues[VarManager::kMuonCTglTgl ], VarManager::fgValues[VarManager::kMuonC1Pt2X ], VarManager::fgValues[VarManager::kMuonC1Pt2Y ],
@@ -1004,10 +1045,10 @@ struct TableMakerMC {
10041045 } // end loop over selected muons
10051046 } // end skimMuons
10061047
1007- template <uint32_t TEventFillMap, uint32_t TTrackFillMap, uint32_t TMuonFillMap, uint32_t TMFTFillMap, typename TEvents, typename TTracks,
1008- typename TMuons, typename TMFTTracks, typename TTrackAssoc, typename TFwdTrackAssoc, typename TMFTTrackAssoc>
1048+ template <uint32_t TEventFillMap, uint32_t TTrackFillMap, uint32_t TMuonFillMap, uint32_t TMuonRealignFillMap, uint32_t TMFTFillMap, typename TEvents, typename TTracks,
1049+ typename TMuons, typename TMuonsRealign, typename TMFTTracks, typename TTrackAssoc, typename TFwdTrackAssoc, typename TMFTTrackAssoc>
10091050 void fullSkimming (TEvents const & collisions, BCsWithTimestamps const & bcs,
1010- TTracks const & tracksBarrel, TMuons const & muons, TMFTTracks const & mftTracks,
1051+ TTracks const & tracksBarrel, TMuons const & muons, TMuonsRealign const & muonsRealign, TMFTTracks const & mftTracks,
10111052 TTrackAssoc const & trackAssocs, TFwdTrackAssoc const & fwdTrackAssocs, TMFTTrackAssoc const & mftAssocs,
10121053 aod::McCollisions const & mcCollisions, aod::McParticles const & mcParticles)
10131054 {
@@ -1104,10 +1145,17 @@ struct TableMakerMC {
11041145 if (fConfigVariousOptions .fKeepBestMatch ) {
11051146 skimBestMuonMatches (muons);
11061147 }
1107- skimMuons<TMuonFillMap, TMFTFillMap>(collision, muons, groupedMuonIndices, mcParticles, mftTracks);
1148+ skimMuons<TMuonFillMap, 0u , TMFTFillMap>(collision, muons, nullptr , groupedMuonIndices, mcParticles, mftTracks);
11081149 } else {
1150+ // auto groupedMuonIndices = fwdTrackAssocs.sliceBy(fwdtrackIndicesPerCollision, origIdx);
1151+ // skimMuons<TMuonFillMap, 0u>(collision, muons, groupedMuonIndices, mcParticles, nullptr);
1152+ if constexpr (static_cast <bool >(TMuonRealignFillMap)) {
11091153 auto groupedMuonIndices = fwdTrackAssocs.sliceBy (fwdtrackIndicesPerCollision, origIdx);
1110- skimMuons<TMuonFillMap, 0u >(collision, muons, groupedMuonIndices, mcParticles, nullptr );
1154+ skimMuons<TMuonFillMap, 0u , 0u >(collision, muons, nullptr , groupedMuonIndices, mcParticles, nullptr );
1155+ } else {
1156+ auto groupedMuonIndices = fwdTrackAssocs.sliceBy (fwdtrackIndicesPerCollision, origIdx);
1157+ skimMuons<TMuonFillMap, TMuonRealignFillMap, 0u >(collision, muons, muonsRealign, groupedMuonIndices, mcParticles, nullptr );
1158+ }
11111159 }
11121160 }
11131161 } // end loop over skimmed collisions
@@ -1256,45 +1304,61 @@ struct TableMakerMC {
12561304 aod::TrackAssoc const & trackAssocs, aod::FwdTrackAssoc const & fwdTrackAssocs, aod::MFTTrackAssoc const & mftAssocs,
12571305 aod::McCollisions const & mcCollisions, aod::McParticles const & mcParticles)
12581306 {
1259- fullSkimming<gkEventFillMapWithMults, gkTrackFillMapWithCov, gkMuonFillMapWithCov, gkMFTFillMap>(collisions, bcs, tracksBarrel, tracksMuon, mftTracks, trackAssocs, fwdTrackAssocs, mftAssocs, mcCollisions, mcParticles);
1307+ fullSkimming<gkEventFillMapWithMults, gkTrackFillMapWithCov, gkMuonFillMapWithCov, 0u , gkMFTFillMap>(collisions, bcs, tracksBarrel, tracksMuon, nullptr , mftTracks, trackAssocs, fwdTrackAssocs, mftAssocs, mcCollisions, mcParticles);
12601308 }
12611309
12621310 void processPPBarrelOnly (MyEventsWithMults const & collisions, aod::BCsWithTimestamps const & bcs,
12631311 MyBarrelTracksWithCov const & tracksBarrel, aod::TrackAssoc const & trackAssocs,
12641312 aod::McCollisions const & mcCollisions, aod::McParticles const & mcParticles)
12651313 {
1266- fullSkimming<gkEventFillMapWithMults, gkTrackFillMapWithCov, 0u , 0u >(collisions, bcs, tracksBarrel, nullptr , nullptr , trackAssocs, nullptr , nullptr , mcCollisions, mcParticles);
1314+ fullSkimming<gkEventFillMapWithMults, gkTrackFillMapWithCov, 0u , 0u , 0u >(collisions, bcs, tracksBarrel, nullptr , nullptr , nullptr , trackAssocs, nullptr , nullptr , mcCollisions, mcParticles);
12671315 }
12681316
12691317 void processPPMuonOnly (MyEventsWithMults const & collisions, aod::BCsWithTimestamps const & bcs,
12701318 MyMuonsWithCov const & tracksMuon, MFTTrackLabeled const & mftTracks,
12711319 aod::FwdTrackAssoc const & fwdTrackAssocs, aod::MFTTrackAssoc const & mftAssocs,
12721320 aod::McCollisions const & mcCollisions, aod::McParticles const & mcParticles)
12731321 {
1274- fullSkimming<gkEventFillMapWithMults, 0u , gkMuonFillMapWithCov, gkMFTFillMap>(collisions, bcs, nullptr , tracksMuon, mftTracks, nullptr , fwdTrackAssocs, mftAssocs, mcCollisions, mcParticles);
1322+ fullSkimming<gkEventFillMapWithMults, 0u , gkMuonFillMapWithCov, 0u , gkMFTFillMap>(collisions, bcs, nullptr , tracksMuon, nullptr , mftTracks, nullptr , fwdTrackAssocs, mftAssocs, mcCollisions, mcParticles);
1323+ }
1324+
1325+ void processPPMuonRealignOnly (MyEventsWithMults const & collisions, aod::BCsWithTimestamps const & bcs,
1326+ MyMuonsWithCov const & tracksMuon, MyMuonsRealignWithCov const & muonsRealign, MFTTrackLabeled const & mftTracks,
1327+ aod::FwdTrackAssoc const & fwdTrackAssocs, aod::MFTTrackAssoc const & mftAssocs,
1328+ aod::McCollisions const & mcCollisions, aod::McParticles const & mcParticles)
1329+ {
1330+ fullSkimming<gkEventFillMapWithMults, 0u , gkMuonFillMapWithCov, 0u , gkMFTFillMap>(collisions, bcs, nullptr , tracksMuon, nullptr , mftTracks, nullptr , fwdTrackAssocs, mftAssocs, mcCollisions, mcParticles);
12751331 }
12761332
12771333 void processPbPb (MyEventsWithCentAndMults const & collisions, aod::BCsWithTimestamps const & bcs,
12781334 MyBarrelTracksWithCov const & tracksBarrel, MyMuonsWithCov const & tracksMuon, MFTTrackLabeled const & mftTracks,
12791335 aod::TrackAssoc const & trackAssocs, aod::FwdTrackAssoc const & fwdTrackAssocs, aod::MFTTrackAssoc const & mftAssocs,
12801336 aod::McCollisions const & mcCollisions, aod::McParticles const & mcParticles)
12811337 {
1282- fullSkimming<gkEventFillMapWithCentAndMults, gkTrackFillMapWithCov, gkMuonFillMapWithCov, gkMFTFillMap>(collisions, bcs, tracksBarrel, tracksMuon, mftTracks, trackAssocs, fwdTrackAssocs, mftAssocs, mcCollisions, mcParticles);
1338+ fullSkimming<gkEventFillMapWithCentAndMults, gkTrackFillMapWithCov, gkMuonFillMapWithCov, 0u , gkMFTFillMap>(collisions, bcs, tracksBarrel, tracksMuon, nullptr , mftTracks, trackAssocs, fwdTrackAssocs, mftAssocs, mcCollisions, mcParticles);
12831339 }
12841340
12851341 void processPbPbBarrelOnly (MyEventsWithCentAndMults const & collisions, aod::BCsWithTimestamps const & bcs,
12861342 MyBarrelTracksWithCov const & tracksBarrel, aod::TrackAssoc const & trackAssocs,
12871343 aod::McCollisions const & mcCollisions, aod::McParticles const & mcParticles)
12881344 {
1289- fullSkimming<gkEventFillMapWithCentAndMults, gkTrackFillMapWithCov, 0u , 0u >(collisions, bcs, tracksBarrel, nullptr , nullptr , trackAssocs, nullptr , nullptr , mcCollisions, mcParticles);
1345+ fullSkimming<gkEventFillMapWithCentAndMults, gkTrackFillMapWithCov, 0u , 0u , 0u >(collisions, bcs, tracksBarrel, nullptr , nullptr , nullptr , trackAssocs, nullptr , nullptr , mcCollisions, mcParticles);
12901346 }
12911347
12921348 void processPbPbMuonOnly (MyEventsWithCentAndMults const & collisions, aod::BCsWithTimestamps const & bcs,
12931349 MyMuonsWithCov const & tracksMuon, MFTTrackLabeled const & mftTracks,
12941350 aod::FwdTrackAssoc const & fwdTrackAssocs, aod::MFTTrackAssoc const & mftAssocs,
12951351 aod::McCollisions const & mcCollisions, aod::McParticles const & mcParticles)
12961352 {
1297- fullSkimming<gkEventFillMapWithCentAndMults, 0u , gkMuonFillMapWithCov, gkMFTFillMap>(collisions, bcs, nullptr , tracksMuon, mftTracks, nullptr , fwdTrackAssocs, mftAssocs, mcCollisions, mcParticles);
1353+ fullSkimming<gkEventFillMapWithCentAndMults, 0u , gkMuonFillMapWithCov, 0u , gkMFTFillMap>(collisions, bcs, nullptr , tracksMuon, nullptr , mftTracks, nullptr , fwdTrackAssocs, mftAssocs, mcCollisions, mcParticles);
1354+ }
1355+
1356+ void processPbPbMuonRealignOnly (MyEventsWithCentAndMults const & collisions, aod::BCsWithTimestamps const & bcs,
1357+ MyMuonsWithCov const & tracksMuon, MyMuonsRealignWithCov const & muonsRealign, MFTTrackLabeled const & mftTracks,
1358+ aod::FwdTrackAssoc const & fwdTrackAssocs, aod::MFTTrackAssoc const & mftAssocs,
1359+ aod::McCollisions const & mcCollisions, aod::McParticles const & mcParticles)
1360+ {
1361+ fullSkimming<gkEventFillMapWithCentAndMults, 0u , gkMuonFillMapWithCov, 0u , gkMFTFillMap>(collisions, bcs, nullptr , tracksMuon, nullptr , mftTracks, nullptr , fwdTrackAssocs, mftAssocs, mcCollisions, mcParticles);
12981362 }
12991363
13001364 // Process the BCs and store stats for luminosity retrieval -----------------------------------------------------------------------------------
@@ -1311,9 +1375,11 @@ struct TableMakerMC {
13111375 PROCESS_SWITCH (TableMakerMC, processPP, " Produce both barrel and muon skims, pp settings" , false );
13121376 PROCESS_SWITCH (TableMakerMC, processPPBarrelOnly, " Produce only barrel skims, pp settings " , false );
13131377 PROCESS_SWITCH (TableMakerMC, processPPMuonOnly, " Produce only muon skims, pp settings" , false );
1378+ PROCESS_SWITCH (TableMakerMC, processPPMuonRealignOnly, " Build realigned muon only DQ skimmed data model typically for pp/p-Pb and UPC Pb-Pb" , false );
13141379 PROCESS_SWITCH (TableMakerMC, processPbPb, " Produce both barrel and muon skims, PbPb settings" , false );
13151380 PROCESS_SWITCH (TableMakerMC, processPbPbBarrelOnly, " Produce only barrel skims, PbPb settings" , false );
13161381 PROCESS_SWITCH (TableMakerMC, processPbPbMuonOnly, " Produce only muon skims, PbPb settings" , false );
1382+ PROCESS_SWITCH (TableMakerMC, processPbPbMuonRealignOnly, " Build realigned muon only DQ skimmed data model typically for Pb-Pb, w/o event filtering" , false );
13171383 PROCESS_SWITCH (TableMakerMC, processOnlyBCs, " Analyze the BCs to store sampled lumi" , false );
13181384};
13191385
0 commit comments