@@ -1252,7 +1252,7 @@ struct AnalysisSameEventPairing {
12521252 Configurable<std::string> recSignals{" cfgBarrelMCRecSignals" , " " , " Comma separated list of MC signals (reconstructed)" };
12531253 Configurable<std::string> recSignalsJSON{" cfgMCRecSignalsJSON" , " " , " Comma separated list of MC signals (reconstructed) via JSON" };
12541254 Configurable<bool > skimSignalOnly{" cfgSkimSignalOnly" , false , " Configurable to select only matched candidates" };
1255- // Configurable<bool> runMCGenPair{"cfgRunMCGenPair", false, "Do pairing of true MC particles"};
1255+ Configurable<bool > runMCGenPair{" cfgRunMCGenPair" , false , " Do pairing of true MC particles" };
12561256 } fConfigMC ;
12571257
12581258 struct : ConfigurableGroup {
@@ -1981,6 +1981,7 @@ struct AnalysisSameEventPairing {
19811981 // Preslice<ReducedMCTracks> perReducedMcEvent = aod::reducedtrackMC::reducedMCeventId;
19821982 PresliceUnsorted<ReducedMCTracks> perReducedMcEvent = aod::reducedtrackMC::reducedMCeventId;
19831983
1984+ template <int TPairType>
19841985 void runMCGen (ReducedMCEvents const & mcEvents, ReducedMCTracks const & mcTracks)
19851986 {
19861987 // loop over mc stack and fill histograms for pure MC truth signals
@@ -2017,29 +2018,27 @@ struct AnalysisSameEventPairing {
20172018 }
20182019
20192020 if (fHasTwoProngGenMCsignals ) {
2020- for (auto & event : mcEvents) {
2021- auto groupedMCTracks = mcTracks.sliceBy (perReducedMcEvent, event.globalIndex ());
2022- groupedMCTracks.bindInternalIndicesTo (&mcTracks);
2023- for (auto & [t1, t2] : combinations (groupedMCTracks, groupedMCTracks)) {
2024- auto t1_raw = groupedMCTracks.rawIteratorAt (t1.globalIndex ());
2025- auto t2_raw = groupedMCTracks.rawIteratorAt (t2.globalIndex ());
2021+ for (auto & [t1, t2] : combinations (mcTracks, mcTracks)) {
2022+ auto t1_raw = mcTracks.rawIteratorAt (t1.globalIndex ());
2023+ auto t2_raw = mcTracks.rawIteratorAt (t2.globalIndex ());
2024+ if (t1_raw.reducedMCeventId () == t2_raw.reducedMCeventId ()) {
20262025 for (auto & sig : fGenMCSignals ) {
20272026 if (sig->GetNProngs () != 2 ) { // NOTE: 2-prong signals required here
20282027 continue ;
20292028 }
20302029 if (sig->CheckSignal (true , t1_raw, t2_raw)) {
20312030 mcDecision |= (static_cast <uint32_t >(1 ) << isig);
2032- VarManager::FillPairMC<VarManager:: kDecayToEE >(t1, t2);
2031+ VarManager::FillPairMC<TPairType >(t1, t2);
20332032 fHistMan ->FillHistClass (Form (" MCTruthGenPair_%s" , sig->GetName ()), VarManager::fgValues);
20342033 if (useMiniTree.fConfigMiniTree ) {
20352034 // WARNING! To be checked
2036- dileptonMiniTreeGen (mcDecision, event. impactParameter () , t1.pt (), t1.eta (), t1.phi (), t2.pt (), t2.eta (), t2.phi ());
2035+ dileptonMiniTreeGen (mcDecision, - 999 , t1.pt (), t1.eta (), t1.phi (), t2.pt (), t2.eta (), t2.phi ());
20372036 }
20382037 }
20392038 isig++;
2040- } // end loop over MC signals
2041- } // end loop over pairs
2042- } // end loop over events
2039+ }
2040+ }
2041+ }
20432042 }
20442043 } // end runMCGen
20452044
@@ -2051,9 +2050,9 @@ struct AnalysisSameEventPairing {
20512050 runSameEventPairing<true , VarManager::kDecayToEE , gkEventFillMapWithCov, gkTrackFillMapWithCov>(events, trackAssocsPerCollision, barrelAssocs, barrelTracks, mcEvents, mcTracks);
20522051 runSameEventPairing<true , VarManager::kDecayToMuMu , gkEventFillMapWithCov, gkMuonFillMapWithCov>(events, muonAssocsPerCollision, muonAssocs, muons, mcEvents, mcTracks);
20532052 // Feature replaced by processMCGen
2054- /* if (fConfigMC.runMCGenPair) {
2055- runMCGen(mcEvents, mcTracks);
2056- }*/
2053+ if (fConfigMC .runMCGenPair ) {
2054+ runMCGen<VarManager:: kDecayToEE > (mcEvents, mcTracks);
2055+ }
20572056 // runSameEventPairing<true, VarManager::kElectronMuon, gkEventFillMap, gkTrackFillMap>(event, tracks, muons);
20582057 }
20592058
@@ -2063,9 +2062,9 @@ struct AnalysisSameEventPairing {
20632062 {
20642063 runSameEventPairing<true , VarManager::kDecayToEE , gkEventFillMapWithCov, gkTrackFillMapWithCov>(events, trackAssocsPerCollision, barrelAssocs, barrelTracks, mcEvents, mcTracks);
20652064 // Feature replaced by processMCGen
2066- /* if (fConfigMC.runMCGenPair) {
2067- runMCGen(mcEvents, mcTracks);
2068- }*/
2065+ if (fConfigMC .runMCGenPair ) {
2066+ runMCGen<VarManager:: kDecayToEE > (mcEvents, mcTracks);
2067+ }
20692068 }
20702069
20712070 void processBarrelOnlyWithCollSkimmed (MyEventsVtxCovSelected const & events,
@@ -2074,19 +2073,19 @@ struct AnalysisSameEventPairing {
20742073 {
20752074 runSameEventPairing<true , VarManager::kDecayToEE , gkEventFillMapWithCov, gkTrackFillMapWithCovWithColl>(events, trackAssocsPerCollision, barrelAssocs, barrelTracks, mcEvents, mcTracks);
20762075 // Feature replaced by processMCGen
2077- /* if (fConfigMC.runMCGenPair) {
2078- runMCGen(mcEvents, mcTracks);
2079- }*/
2076+ if (fConfigMC .runMCGenPair ) {
2077+ runMCGen<VarManager:: kDecayToEE > (mcEvents, mcTracks);
2078+ }
20802079 }
20812080
20822081 void processMuonOnlySkimmed (MyEventsVtxCovSelected const & events,
20832082 soa::Join<aod::ReducedMuonsAssoc, aod::MuonTrackCuts> const & muonAssocs, MyMuonTracksWithCovWithAmbiguities const & muons, ReducedMCEvents const & mcEvents, ReducedMCTracks const & mcTracks)
20842083 {
20852084 runSameEventPairing<true , VarManager::kDecayToMuMu , gkEventFillMapWithCov, gkMuonFillMapWithCov>(events, muonAssocsPerCollision, muonAssocs, muons, mcEvents, mcTracks);
20862085 // Feature replaced by processMCGen
2087- /* if (fConfigMC.runMCGenPair) {
2088- runMCGen(mcEvents, mcTracks);
2089- }*/
2086+ if (fConfigMC .runMCGenPair ) {
2087+ runMCGen<VarManager:: kDecayToMuMu > (mcEvents, mcTracks);
2088+ }
20902089 }
20912090
20922091 PresliceUnsorted<ReducedMCTracks> perReducedMcGenEvent = aod::reducedtrackMC::reducedMCeventId;
0 commit comments