@@ -161,11 +161,14 @@ struct TableMakerMC {
161161
162162 // CCDB connection configurables
163163 Configurable<std::string> fConfigCcdbUrl {" ccdb-url" , " http://alice-ccdb.cern.ch" , " url of the ccdb repository" };
164- Configurable<bool > fPropMuon {" cfgPropMuon" , false , " Propgate muon tracks through absorber" };
165164 Configurable<std::string> geoPath{" geoPath" , " GLO/Config/GeometryAligned" , " Path of the geometry file" };
166165 Configurable<std::string> grpmagPath{" grpmagPath" , " GLO/Config/GRPMagField" , " CCDB path of the GRPMagField object" };
167166 Configurable<std::string> grpmagPathRun2{" grpmagPathRun2" , " GLO/GRP/GRP" , " CCDB path of the GRPObject (Usage for Run 2)" };
168167
168+ // Muon related options
169+ Configurable<bool > fPropMuon {" cfgPropMuon" , true , " Propagate muon tracks through absorber (do not use if applying pairing)" };
170+ Configurable<bool > fRefitGlobalMuon {" cfgRefitGlobalMuon" , true , " Correct global muon parameters" };
171+
169172 Service<o2::ccdb::BasicCCDBManager> fCCDB ;
170173
171174 o2::parameters::GRPObject* grpmagrun2 = nullptr ; // for run 2, we access the GRPObject from GLO/GRP/GRP
@@ -648,7 +651,7 @@ struct TableMakerMC {
648651 }
649652
650653 template <uint32_t TMuonFillMap, typename TEvent, typename TMuons>
651- void skimMuons (TEvent const & collision, TMuons const & muons, FwdTrackAssoc const & muonAssocs, aod::McParticles const & mcTracks)
654+ void skimMuons (TEvent const & collision, TMuons const & muons, FwdTrackAssoc const & muonAssocs, aod::McParticles const & mcTracks, MFTTracks const & /* mftTracks */ )
652655 {
653656 // Skim the fwd-tracks (muons)
654657 // Loop over the collision-track associations, recompute track properties depending on the collision assigned, and apply track cuts for selection
@@ -670,7 +673,18 @@ struct TableMakerMC {
670673 VarManager::FillTrack<TMuonFillMap>(muon);
671674 // NOTE: If a muon is associated to multiple collisions, depending on the selections,
672675 // it may be accepted for some associations and rejected for other
673- VarManager::FillPropagateMuon<TMuonFillMap>(muon, collision);
676+ if (fPropMuon ) {
677+ VarManager::FillPropagateMuon<TMuonFillMap>(muon, collision);
678+ }
679+ // recalculte pDca and global muon kinematics
680+ if (static_cast <int >(muon.trackType ()) < 2 && fRefitGlobalMuon ) {
681+ auto muontrack = muon.template matchMCHTrack_as <TMuons>();
682+ auto mfttrack = muon.template matchMFTTrack_as <MFTTracks>();
683+ VarManager::FillTrackCollision<TMuonFillMap>(muontrack, collision);
684+ VarManager::FillGlobalMuonRefit<TMuonFillMap>(muontrack, mfttrack, collision);
685+ } else {
686+ VarManager::FillTrackCollision<TMuonFillMap>(muon, collision);
687+ }
674688
675689 if (fDoDetailedQA ) {
676690 fHistMan ->FillHistClass (" Muons_BeforeCuts" , VarManager::fgValues);
@@ -770,18 +784,31 @@ struct TableMakerMC {
770784 mftIdx = fMftIndexMap [muon.matchMFTTrackId ()];
771785 }
772786 }
773- muonBasic (reducedEventIdx, mchIdx, mftIdx, fFwdTrackFilterMap [muon.globalIndex ()], muon.pt (), muon.eta (), muon.phi (), muon.sign (), 0 );
774- muonExtra (muon.nClusters (), muon.pDca (), muon.rAtAbsorberEnd (),
787+ VarManager::FillTrack<TMuonFillMap>(muon);
788+ if (fPropMuon ) {
789+ VarManager::FillPropagateMuon<TMuonFillMap>(muon, collision);
790+ }
791+ // recalculte pDca and global muon kinematics
792+ if (static_cast <int >(muon.trackType ()) < 2 && fRefitGlobalMuon ) {
793+ auto muontrack = muon.template matchMCHTrack_as <TMuons>();
794+ auto mfttrack = muon.template matchMFTTrack_as <MFTTracks>();
795+ VarManager::FillTrackCollision<TMuonFillMap>(muontrack, collision);
796+ VarManager::FillGlobalMuonRefit<TMuonFillMap>(muontrack, mfttrack, collision);
797+ } else {
798+ VarManager::FillTrackCollision<TMuonFillMap>(muon, collision);
799+ }
800+ muonBasic (reducedEventIdx, mchIdx, mftIdx, fFwdTrackFilterMap [muon.globalIndex ()], VarManager::fgValues[VarManager::kPt ], VarManager::fgValues[VarManager::kEta ], VarManager::fgValues[VarManager::kPhi ], muon.sign (), 0 );
801+ muonExtra (muon.nClusters (), VarManager::fgValues[VarManager::kMuonPDca ], VarManager::fgValues[VarManager::kMuonRAtAbsorberEnd ],
775802 muon.chi2 (), muon.chi2MatchMCHMID (), muon.chi2MatchMCHMFT (),
776803 muon.matchScoreMCHMFT (),
777804 muon.mchBitMap (), muon.midBitMap (),
778- muon.midBoards (), muon.trackType (), muon. fwdDcaX (), muon. fwdDcaY () ,
805+ muon.midBoards (), muon.trackType (), VarManager::fgValues[VarManager:: kMuonDCAx ], VarManager::fgValues[VarManager:: kMuonDCAy ] ,
779806 muon.trackTime (), muon.trackTimeRes ());
780807 if constexpr (static_cast <bool >(TMuonFillMap & VarManager::ObjTypes::MuonCov)) {
781- muonCov (muon. x (), muon. y (), muon. z (), muon. phi (), muon. tgl () , muon.sign () / muon. pt () ,
782- muon. cXX (), muon. cXY (), muon. cYY (), muon. cPhiX (), muon. cPhiY (), muon. cPhiPhi () ,
783- muon. cTglX (), muon. cTglY (), muon. cTglPhi (), muon. cTglTgl (), muon. c1PtX (), muon. c1PtY () ,
784- muon. c1PtPhi (), muon. c1PtTgl (), muon. c1Pt21Pt2 () );
808+ 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 ] ,
809+ VarManager::fgValues[VarManager:: kMuonCXX ], VarManager::fgValues[VarManager:: kMuonCXY ], VarManager::fgValues[VarManager:: kMuonCYY ], VarManager::fgValues[VarManager:: kMuonCPhiX ], VarManager::fgValues[VarManager:: kMuonCPhiY ], VarManager::fgValues[VarManager:: kMuonCPhiPhi ] ,
810+ VarManager::fgValues[VarManager:: kMuonCTglX ], VarManager::fgValues[VarManager:: kMuonCTglY ], VarManager::fgValues[VarManager:: kMuonCTglPhi ], VarManager::fgValues[VarManager:: kMuonCTglTgl ], VarManager::fgValues[VarManager:: kMuonC1Pt2X ], VarManager::fgValues[VarManager:: kMuonC1Pt2Y ] ,
811+ VarManager::fgValues[VarManager:: kMuonC1Pt2Phi ], VarManager::fgValues[VarManager:: kMuonC1Pt2Tgl ], VarManager::fgValues[VarManager:: kMuonC1Pt21Pt2 ] );
785812 }
786813 if (muon.has_mcParticle ()) {
787814 auto mctrack = muon.template mcParticle_as <aod::McParticles>();
@@ -874,9 +901,9 @@ struct TableMakerMC {
874901 auto groupedMFTIndices = mftAssocs.sliceBy (mfttrackIndicesPerCollision, origIdx);
875902 skimMFT<TMFTFillMap>(collision, mftTracks, groupedMFTIndices);
876903 }
877- if constexpr (static_cast <bool >(TMuonFillMap)) {
904+ if constexpr (static_cast <bool >(TMuonFillMap) && static_cast < bool >(TMFTFillMap) ) {
878905 auto groupedMuonIndices = fwdTrackAssocs.sliceBy (fwdtrackIndicesPerCollision, origIdx);
879- skimMuons<TMuonFillMap>(collision, muons, groupedMuonIndices, mcParticles);
906+ skimMuons<TMuonFillMap>(collision, muons, groupedMuonIndices, mcParticles, mftTracks );
880907 }
881908 } // end loop over skimmed collisions
882909 }
0 commit comments