@@ -78,7 +78,7 @@ using MyElectron = MyElectrons::iterator;
7878using FilteredMyElectrons = soa::Filtered<MyElectrons>;
7979using FilteredMyElectron = FilteredMyElectrons::iterator;
8080
81- using MyMuons = soa::Join<aod::EMPrimaryMuons, aod::EMPrimaryMuonEMEventIds, aod::EMAmbiguousMuonSelfIds, aod::EMGlobalMuonSelfIds>;
81+ using MyMuons = soa::Join<aod::EMPrimaryMuons, aod::EMPrimaryMuonEMEventIds, aod::EMAmbiguousMuonSelfIds, aod::EMGlobalMuonSelfIds, aod::EMPrimaryMuonsPrefilterBitDerived >;
8282using MyMuon = MyMuons::iterator;
8383using FilteredMyMuons = soa::Filtered<MyMuons>;
8484using FilteredMyMuon = FilteredMyMuons::iterator;
@@ -191,7 +191,7 @@ struct Dilepton {
191191 Configurable<bool > cfg_apply_cuts_from_prefilter{" cfg_apply_cuts_from_prefilter" , false , " flag to apply prefilter set when producing derived data" };
192192 Configurable<uint16_t > cfg_prefilter_bits{" cfg_prefilter_bits" , 0 , " prefilter bits [kNone : 0, kElFromPC : 1, kElFromPi0_20MeV : 2, kElFromPi0_40MeV : 4, kElFromPi0_60MeV : 8, kElFromPi0_80MeV : 16, kElFromPi0_100MeV : 32, kElFromPi0_120MeV : 64, kElFromPi0_140MeV : 128] Please consider logical-OR among them." }; // see PairUtilities.h
193193
194- Configurable<bool > cfg_apply_cuts_from_prefilter_derived{" cfg_apply_cuts_from_prefilter_derived" , false , " flag to apply pair cut same as prefilter set in derived data" };
194+ Configurable<bool > cfg_apply_cuts_from_prefilter_derived{" cfg_apply_cuts_from_prefilter_derived" , false , " flag to apply prefilter set in derived data" };
195195 Configurable<uint16_t > cfg_prefilter_bits_derived{" cfg_prefilter_bits_derived" , 0 , " prefilter bits [kNone : 0, kMee : 1, kPhiV : 2, kSplitOrMergedTrackLS : 4, kSplitOrMergedTrackULS : 8] Please consider logical-OR among them." }; // see PairUtilities.h
196196
197197 Configurable<float > cfg_min_pt_track{" cfg_min_pt_track" , 0.2 , " min pT for single track" };
@@ -265,6 +265,9 @@ struct Dilepton {
265265 Configurable<float > cfg_min_deta{" cfg_min_deta" , 0.02 , " min deta between 2 muons (elliptic cut)" };
266266 Configurable<float > cfg_min_dphi{" cfg_min_dphi" , 0.02 , " min dphi between 2 muons (elliptic cut)" };
267267
268+ Configurable<bool > cfg_apply_cuts_from_prefilter_derived{" cfg_apply_cuts_from_prefilter_derived" , false , " flag to apply prefilter set in derived data" };
269+ Configurable<uint16_t > cfg_prefilter_bits_derived{" cfg_prefilter_bits_derived" , 0 , " prefilter bits [kNone : 0, kSplitOrMergedTrackLS : 4, kSplitOrMergedTrackULS : 8] Please consider logical-OR among them." }; // see PairUtilities.h
270+
268271 Configurable<uint8_t > cfg_track_type{" cfg_track_type" , 3 , " muon track type [0: MFT-MCH-MID, 3: MCH-MID]" };
269272 Configurable<float > cfg_min_pt_track{" cfg_min_pt_track" , 0.2 , " min pT for single track" };
270273 Configurable<float > cfg_max_pt_track{" cfg_max_pt_track" , 1e+10 , " max pT for single track" };
@@ -731,6 +734,7 @@ struct Dilepton {
731734 fDielectronCut .RequireITSib1st (dielectroncuts.cfg_require_itsib_1st );
732735 fDielectronCut .SetChi2TOF (0 , dielectroncuts.cfg_max_chi2tof );
733736 // fDielectronCut.SetRelDiffPin(dielectroncuts.cfg_min_rel_diff_pin, dielectroncuts.cfg_max_rel_diff_pin);
737+ fDielectronCut .EnableTTCA (dielectroncuts.enableTTCA );
734738
735739 // for eID
736740 fDielectronCut .SetPIDScheme (dielectroncuts.cfg_pid_scheme );
@@ -810,6 +814,7 @@ struct Dilepton {
810814 fDimuonCut .SetMaxPDCARabsDep ([&](float rabs) { return (rabs < 26.5 ? 594 .f : 324 .f ); });
811815 fDimuonCut .SetMaxdPtdEtadPhiwrtMCHMID (dimuoncuts.cfg_max_relDPt_wrt_matchedMCHMID , dimuoncuts.cfg_max_DEta_wrt_matchedMCHMID , dimuoncuts.cfg_max_DPhi_wrt_matchedMCHMID ); // this is relevant for global muons
812816 fDimuonCut .SetMFTHitMap (dimuoncuts.requireMFTHitMap , dimuoncuts.requiredMFTDisks );
817+ fDimuonCut .EnableTTCA (dimuoncuts.enableTTCA );
813818 }
814819
815820 template <typename TQvectors>
@@ -868,13 +873,16 @@ struct Dilepton {
868873 if (!cut.template IsSelectedTrack <false >(t1) || !cut.template IsSelectedTrack <false >(t2)) {
869874 return false ;
870875 }
871-
872- if (!o2::aod::pwgem::dilepton::utils::emtrackutil::isBestMatch (t1, cut, tracks)) {
873- return false ;
874- }
875- if (!o2::aod::pwgem::dilepton::utils::emtrackutil::isBestMatch (t2, cut, tracks)) {
876+ if (!map_best_match_globalmuon[t1.globalIndex ()] || !map_best_match_globalmuon[t2.globalIndex ()]) {
876877 return false ;
877878 }
879+
880+ // if (!o2::aod::pwgem::dilepton::utils::emtrackutil::isBestMatch(t1, cut, tracks)) {
881+ // return false;
882+ // }
883+ // if (!o2::aod::pwgem::dilepton::utils::emtrackutil::isBestMatch(t2, cut, tracks)) {
884+ // return false;
885+ // }
878886 }
879887 }
880888
@@ -1146,7 +1154,7 @@ struct Dilepton {
11461154 Preslice<MyElectrons> perCollision_electron = aod::emprimaryelectron::emeventId;
11471155 Filter trackFilter_electron = dielectroncuts.cfg_min_pt_track < o2::aod::track::pt && dielectroncuts.cfg_min_eta_track < o2::aod::track::eta && o2::aod::track::eta < dielectroncuts.cfg_max_eta_track && nabs(o2::aod::track::dcaXY) < dielectroncuts.cfg_max_dcaxy && nabs(o2::aod::track::dcaZ) < dielectroncuts.cfg_max_dcaz && o2::aod::track::itsChi2NCl < dielectroncuts.cfg_max_chi2its && o2::aod::track::tpcChi2NCl < dielectroncuts.cfg_max_chi2tpc;
11481156 Filter pidFilter_electron = dielectroncuts.cfg_min_TPCNsigmaEl < o2::aod::pidtpc::tpcNSigmaEl && o2::aod::pidtpc::tpcNSigmaEl < dielectroncuts.cfg_max_TPCNsigmaEl;
1149- Filter ttcaFilter_electron = ifnode(dielectroncuts.enableTTCA.node(), o2::aod::emprimaryelectron::isAssociatedToMPC == true || o2::aod::emprimaryelectron::isAssociatedToMPC == false , o2::aod::emprimaryelectron::isAssociatedToMPC == true );
1157+ Filter ttcaFilter_electron = ifnode(dielectroncuts.enableTTCA.node(), true , o2::aod::emprimaryelectron::isAssociatedToMPC == true );
11501158 Filter prefilter_derived_electron = ifnode(dielectroncuts.cfg_apply_cuts_from_prefilter_derived.node() && dielectroncuts.cfg_prefilter_bits_derived.node() >= static_cast <uint16_t >(1 ),
11511159 ifnode ((dielectroncuts.cfg_prefilter_bits_derived.node() & static_cast<uint16_t>(1 << int (o2::aod::pwgem::dilepton::utils::pairutil::DileptonPrefilterBitDerived::kMee ))) > static_cast<uint16_t>(0 ), (o2::aod::emprimaryelectron::pfbderived & static_cast <uint16_t >(1 << int (o2::aod::pwgem::dilepton::utils::pairutil::DileptonPrefilterBitDerived::kMee ))) <= static_cast<uint16_t>(0 ), true) &&
11521160 ifnode((dielectroncuts.cfg_prefilter_bits_derived.node() & static_cast<uint16_t>(1 << int (o2::aod::pwgem::dilepton::utils::pairutil::DileptonPrefilterBitDerived::kPhiV ))) > static_cast<uint16_t>(0 ), (o2::aod::emprimaryelectron::pfbderived & static_cast <uint16_t >(1 << int (o2::aod::pwgem::dilepton::utils::pairutil::DileptonPrefilterBitDerived::kPhiV ))) <= static_cast<uint16_t>(0 ), true) &&
@@ -1170,14 +1178,20 @@ struct Dilepton {
11701178
11711179 Preslice<MyMuons> perCollision_muon = aod::emprimarymuon::emeventId;
11721180 Filter trackFilter_muon = o2::aod::fwdtrack::trackType == dimuoncuts.cfg_track_type && dimuoncuts.cfg_min_pt_track < o2::aod::fwdtrack::pt && o2::aod::fwdtrack::pt < dimuoncuts.cfg_max_pt_track && dimuoncuts.cfg_min_eta_track < o2::aod::fwdtrack::eta && o2::aod::fwdtrack::eta < dimuoncuts.cfg_max_eta_track;
1173- Filter ttcaFilter_muon = ifnode(dimuoncuts.enableTTCA.node(), o2::aod::emprimarymuon::isAssociatedToMPC == true || o2::aod::emprimarymuon::isAssociatedToMPC == false , o2::aod::emprimarymuon::isAssociatedToMPC == true );
1181+ Filter ttcaFilter_muon = ifnode(dimuoncuts.enableTTCA.node(), true , o2::aod::emprimarymuon::isAssociatedToMPC == true );
1182+ Filter prefilter_derived_muon = ifnode(dimuoncuts.cfg_apply_cuts_from_prefilter_derived.node() && dimuoncuts.cfg_prefilter_bits_derived.node() >= static_cast <uint16_t >(1 ),
1183+ ifnode ((dimuoncuts.cfg_prefilter_bits_derived.node() & static_cast<uint16_t>(1 << int (o2::aod::pwgem::dilepton::utils::pairutil::DileptonPrefilterBitDerived::kSplitOrMergedTrackLS ))) > static_cast<uint16_t>(0 ), (o2::aod::emprimarymuon::pfbderived & static_cast <uint16_t >(1 << int (o2::aod::pwgem::dilepton::utils::pairutil::DileptonPrefilterBitDerived::kSplitOrMergedTrackLS ))) <= static_cast<uint16_t>(0 ), true) &&
1184+ ifnode((dimuoncuts.cfg_prefilter_bits_derived.node() & static_cast<uint16_t>(1 << int (o2::aod::pwgem::dilepton::utils::pairutil::DileptonPrefilterBitDerived::kSplitOrMergedTrackULS ))) > static_cast<uint16_t>(0 ), (o2::aod::emprimarymuon::pfbderived & static_cast <uint16_t >(1 << int (o2::aod::pwgem::dilepton::utils::pairutil::DileptonPrefilterBitDerived::kSplitOrMergedTrackULS ))) <= static_cast<uint16_t>(0 ), true),
1185+ o2::aod::emprimarymuon::pfbderived >= static_cast<uint16_t>(0 ));
1186+
11741187 Partition<FilteredMyMuons> positive_muons = o2::aod::emprimarymuon::sign > int8_t (0 );
11751188 Partition<FilteredMyMuons> negative_muons = o2::aod::emprimarymuon::sign < int8_t (0 );
11761189
11771190 TEMH* emh_pos = nullptr ;
11781191 TEMH* emh_neg = nullptr ;
11791192
11801193 std::map<std::pair<int , int >, uint64_t > map_mixed_eventId_to_globalBC;
1194+ std::unordered_map<int , bool > map_best_match_globalmuon;
11811195
11821196 std::vector<int > used_trackIds_per_col;
11831197 int ndf = 0 ;
@@ -1428,13 +1442,16 @@ struct Dilepton {
14281442 if (!cut.IsSelectedTrack (t1) || !cut.IsSelectedTrack (t2)) {
14291443 return false ;
14301444 }
1431-
1432- if (!o2::aod::pwgem::dilepton::utils::emtrackutil::isBestMatch (t1, cut, tracks)) {
1433- return false ;
1434- }
1435- if (!o2::aod::pwgem::dilepton::utils::emtrackutil::isBestMatch (t2, cut, tracks)) {
1445+ if (!map_best_match_globalmuon[t1.globalIndex ()] || !map_best_match_globalmuon[t2.globalIndex ()]) {
14361446 return false ;
14371447 }
1448+
1449+ // if (!o2::aod::pwgem::dilepton::utils::emtrackutil::isBestMatch(t1, cut, tracks)) {
1450+ // return false;
1451+ // }
1452+ // if (!o2::aod::pwgem::dilepton::utils::emtrackutil::isBestMatch(t2, cut, tracks)) {
1453+ // return false;
1454+ // }
14381455 }
14391456
14401457 if constexpr (pairtype == o2::aod::pwgem::dilepton::utils::pairutil::DileptonPairType::kDielectron ) {
@@ -1567,12 +1584,14 @@ struct Dilepton {
15671584 runPairing<false >(collisions, positive_electrons, negative_electrons, o2::aod::emprimaryelectron::emeventId, fDielectronCut , electrons);
15681585 } else if constexpr (pairtype == o2::aod::pwgem::dilepton::utils::pairutil::DileptonPairType::kDimuon ) {
15691586 auto muons = std::get<0 >(std::tie (args...));
1587+ map_best_match_globalmuon = findBestMatchMap (muons, fDimuonCut );
15701588 if (cfgApplyWeightTTCA) {
15711589 fillPairWeightMap<false >(collisions, positive_muons, negative_muons, o2::aod::emprimarymuon::emeventId, fDimuonCut , muons);
15721590 }
15731591 runPairing<false >(collisions, positive_muons, negative_muons, o2::aod::emprimarymuon::emeventId, fDimuonCut , muons);
15741592 }
15751593 map_weight.clear ();
1594+ map_best_match_globalmuon.clear ();
15761595 ndf++;
15771596 }
15781597 PROCESS_SWITCH (Dilepton, processAnalysis, " run dilepton analysis" , true );
@@ -1587,12 +1606,14 @@ struct Dilepton {
15871606 runPairing<true >(collisions, positive_electrons, negative_electrons, o2::aod::emprimaryelectron::emeventId, fDielectronCut , electrons);
15881607 } else if constexpr (pairtype == o2::aod::pwgem::dilepton::utils::pairutil::DileptonPairType::kDimuon ) {
15891608 auto muons = std::get<0 >(std::tie (args...));
1609+ map_best_match_globalmuon = findBestMatchMap (muons, fDimuonCut );
15901610 if (cfgApplyWeightTTCA) {
15911611 fillPairWeightMap<true >(collisions, positive_muons, negative_muons, o2::aod::emprimarymuon::emeventId, fDimuonCut , muons);
15921612 }
15931613 runPairing<true >(collisions, positive_muons, negative_muons, o2::aod::emprimarymuon::emeventId, fDimuonCut , muons);
15941614 }
15951615 map_weight.clear ();
1616+ map_best_match_globalmuon.clear ();
15961617 ndf++;
15971618 }
15981619 PROCESS_SWITCH (Dilepton, processTriggerAnalysis, " run dilepton analysis on triggered data" , false );
0 commit comments