@@ -574,19 +574,13 @@ struct mftMchMatcher {
574574 return result;
575575 }
576576
577- void processMC (MyEvents const & collisions,
578- aod::BCsWithTimestamps const & bcs ,
579- MyMuonsMC const & muonTracks ,
580- MyMFTsMC const & mftTracks ,
581- MyMFTCovariances const & mftCovs ,
582- aod::McParticles const & /* mcParticles */ )
577+ template < bool isMc, class TCOLLS , class TBCS , class TMUONS , class TMFTS , class TCOVS >
578+ void fillTable (TCOLLS const & collisions ,
579+ TBCS const & /* bcs */ ,
580+ TMUONS const & muonTracks ,
581+ TMFTS const & mftTracks ,
582+ TCOVS const & mftCovs )
583583 {
584- if (bcs.size () > 0 ) {
585- auto bc = bcs.begin ();
586- initCCDB (bc);
587- VarManager::SetMatchingPlane (fzMatching.value );
588- }
589-
590584 registry.get <TH1>(HIST (" acceptedEvents" ))->Fill (0 );
591585 // reject a randomly selected fraction of events
592586 if (fSamplingFraction < 1.0 ) {
@@ -600,7 +594,9 @@ struct mftMchMatcher {
600594 fillBestMuonMatches (muonTracks);
601595
602596 std::vector<std::pair<int64_t , int64_t >> matchablePairs;
603- fillMatchablePairs (muonTracks, mftTracks, matchablePairs);
597+ if constexpr (isMc) {
598+ fillMatchablePairs (muonTracks, mftTracks, matchablePairs);
599+ }
604600
605601 mftCovIndexes.clear ();
606602 for (auto & mftTrackCov : mftCovs) {
@@ -626,10 +622,10 @@ struct mftMchMatcher {
626622 }
627623
628624 const auto & collision = collisions.rawIteratorAt (muon.collisionId ());
629- auto bc_coll = collision.bc_as <aod::BCsWithTimestamps >();
625+ auto bc_coll = collision.template bc_as <TBCS >();
630626
631- auto muontrack = muon.template matchMCHTrack_as <MyMuonsMC >();
632- auto mfttrack = muon.template matchMFTTrack_as <MyMFTsMC >();
627+ auto muontrack = muon.template matchMCHTrack_as <TMUONS >();
628+ auto mfttrack = muon.template matchMFTTrack_as <TMFTS >();
633629 auto const & mfttrackcov = mftCovs.rawIteratorAt (mftCovIndexes[mfttrack.globalIndex ()]);
634630
635631 auto muonTime = muontrack.trackTime () + bc_coll.globalBC () * o2::constants::lhc::LHCBunchSpacingNS;
@@ -657,9 +653,21 @@ struct mftMchMatcher {
657653 bool IsAmbig = (muon.compatibleCollIds ().size () != 1 );
658654 int MFTMult = collision.mftNtracks ();
659655
660- auto matchType = getMatchType (muon, muonTracks, mftTracks, matchablePairs, isBestMatch);
656+ auto matchType = kMatchTypeUndefined ;
657+ if constexpr (isMc) {
658+ matchType = getMatchType (muon, muonTracks, mftTracks, matchablePairs, isBestMatch);
659+ }
661660 bool isSignal = (matchType == kMatchTypeTrueLeading ) || (matchType == kMatchTypeTrueNonLeading );
662661
662+ int mcMaskMuon = 0 ;
663+ int mcMaskMft = 0 ;
664+ int ncMaskGlob = 0 ;
665+ if constexpr (isMc) {
666+ mcMaskMuon = muontrack.mcMask ();
667+ mcMaskMft = mfttrack.mcMask ();
668+ ncMaskGlob = muon.mcMask ();
669+ }
670+
663671 registry.get <TH1>(HIST (" matchType" ))->Fill (static_cast <int >(matchType));
664672
665673 fwdMatchMLCandidates (
@@ -719,15 +727,48 @@ struct mftMchMatcher {
719727 muon.fwdDcaY (),
720728 IsAmbig,
721729 MFTMult,
722- muontrack. mcMask () ,
723- mfttrack. mcMask () ,
724- muon. mcMask () ,
730+ mcMaskMuon ,
731+ mcMaskMft ,
732+ ncMaskGlob ,
725733 static_cast <int >(matchType),
726734 isSignal);
727735 }
728736 }
729737
738+ void processMC (MyEvents const & collisions,
739+ aod::BCsWithTimestamps const & bcs,
740+ MyMuonsMC const & muonTracks,
741+ MyMFTsMC const & mftTracks,
742+ MyMFTCovariances const & mftCovs,
743+ aod::McParticles const & /* mcParticles*/ )
744+ {
745+ if (bcs.size () > 0 ) {
746+ auto bc = bcs.begin ();
747+ initCCDB (bc);
748+ VarManager::SetMatchingPlane (fzMatching.value );
749+ }
750+
751+ fillTable<true >(collisions, bcs, muonTracks, mftTracks, mftCovs);
752+ }
753+
730754 PROCESS_SWITCH (mftMchMatcher, processMC, " process_MC" , true );
755+
756+ void processRD (MyEvents const & collisions,
757+ aod::BCsWithTimestamps const & bcs,
758+ MyMuonsWithCov const & muonTracks,
759+ MyMFTs const & mftTracks,
760+ MyMFTCovariances const & mftCovs)
761+ {
762+ if (bcs.size () > 0 ) {
763+ auto bc = bcs.begin ();
764+ initCCDB (bc);
765+ VarManager::SetMatchingPlane (fzMatching.value );
766+ }
767+
768+ fillTable<false >(collisions, bcs, muonTracks, mftTracks, mftCovs);
769+ }
770+
771+ PROCESS_SWITCH (mftMchMatcher, processRD, " process_RD" , false );
731772};
732773
733774WorkflowSpec defineDataProcessing (ConfigContext const & cfgc)
0 commit comments