Skip to content

Commit 088d3f9

Browse files
dsekihatalibuild
andauthored
[PWGEM/Dilepton] implement dimuon prefilter (#15316)
Co-authored-by: ALICE Action Bot <alibuild@cern.ch>
1 parent 05c70b3 commit 088d3f9

16 files changed

+657
-51
lines changed

PWGEM/Dilepton/Core/DielectronCut.cxx

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -356,3 +356,8 @@ void DielectronCut::IncludeITSsa(bool flag, float max)
356356
mMaxPtITSsa = max;
357357
LOG(info) << "Dielectron Cut, include ITSsa tracks: " << mIncludeITSsa << ", mMaxPtITSsa = " << mMaxPtITSsa;
358358
}
359+
void DielectronCut::EnableTTCA(bool flag)
360+
{
361+
mEnableTTCA = flag;
362+
LOG(info) << "Dielectron Cut, enable TTCA: " << mEnableTTCA;
363+
}

PWGEM/Dilepton/Core/DielectronCut.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ class DielectronCut : public TNamed
6767
kITSNCls,
6868
kITSChi2NDF,
6969
kITSClusterSize,
70+
kTTCA,
7071
kPrefilter,
7172
kNCuts
7273
};
@@ -210,6 +211,9 @@ class DielectronCut : public TNamed
210211
if (!IsSelectedTrack(track, DielectronCuts::kITSClusterSize)) {
211212
return false;
212213
}
214+
if (!IsSelectedTrack(track, DielectronCuts::kTTCA)) {
215+
return false;
216+
}
213217

214218
if (mRequireITSibAny) {
215219
auto hits_ib = std::count_if(its_ib_any_Requirement.second.begin(), its_ib_any_Requirement.second.end(), [&](auto&& requiredLayer) { return track.itsClusterMap() & (1 << requiredLayer); });
@@ -470,6 +474,9 @@ class DielectronCut : public TNamed
470474
case DielectronCuts::kITSClusterSize:
471475
return mMinMeanClusterSizeITS < track.meanClusterSizeITS() * std::cos(std::atan(track.tgl())) && track.meanClusterSizeITS() * std::cos(std::atan(track.tgl())) < mMaxMeanClusterSizeITS;
472476

477+
case DielectronCuts::kTTCA:
478+
return mEnableTTCA ? true : track.isAssociatedToMPC();
479+
473480
case DielectronCuts::kPrefilter:
474481
return track.pfb() <= 0;
475482

@@ -538,6 +545,7 @@ class DielectronCut : public TNamed
538545
void ApplyPrefilter(bool flag);
539546
void ApplyPhiV(bool flag);
540547
void IncludeITSsa(bool flag, float maxpt);
548+
void EnableTTCA(bool flag);
541549

542550
void SetPIDMlResponse(o2::analysis::MlResponseDielectronSingleTrack<float>* mlResponse)
543551
{
@@ -628,6 +636,7 @@ class DielectronCut : public TNamed
628636
float mMinTOFNsigmaPi{-1e+10}, mMaxTOFNsigmaPi{+1e+10};
629637
float mMinTOFNsigmaKa{-1e+10}, mMaxTOFNsigmaKa{+1e+10};
630638
float mMinTOFNsigmaPr{-1e+10}, mMaxTOFNsigmaPr{+1e+10};
639+
bool mEnableTTCA{true};
631640

632641
// float mMinITSNsigmaEl{-1e+10}, mMaxITSNsigmaEl{+1e+10};
633642
// float mMinITSNsigmaMu{-1e+10}, mMaxITSNsigmaMu{+1e+10};

PWGEM/Dilepton/Core/Dilepton.h

Lines changed: 37 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ using MyElectron = MyElectrons::iterator;
7878
using FilteredMyElectrons = soa::Filtered<MyElectrons>;
7979
using 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>;
8282
using MyMuon = MyMuons::iterator;
8383
using FilteredMyMuons = soa::Filtered<MyMuons>;
8484
using 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>
@@ -851,7 +856,7 @@ struct Dilepton {
851856
}
852857

853858
template <int ev_id, typename TCollision, typename TTrack1, typename TTrack2, typename TCut, typename TAllTracks>
854-
bool fillPairInfo(TCollision const& collision, TTrack1 const& t1, TTrack2 const& t2, TCut const& cut, TAllTracks const& tracks)
859+
bool fillPairInfo(TCollision const& collision, TTrack1 const& t1, TTrack2 const& t2, TCut const& cut, TAllTracks const&)
855860
{
856861
if constexpr (ev_id == 0) {
857862
if constexpr (pairtype == o2::aod::pwgem::dilepton::utils::pairutil::DileptonPairType::kDielectron) {
@@ -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;
@@ -1412,7 +1426,7 @@ struct Dilepton {
14121426
} // end of DF
14131427

14141428
template <typename TTrack1, typename TTrack2, typename TCut, typename TAllTracks>
1415-
bool isPairOK(TTrack1 const& t1, TTrack2 const& t2, TCut const& cut, TAllTracks const& tracks)
1429+
bool isPairOK(TTrack1 const& t1, TTrack2 const& t2, TCut const& cut, TAllTracks const&)
14161430
{
14171431
if constexpr (pairtype == o2::aod::pwgem::dilepton::utils::pairutil::DileptonPairType::kDielectron) {
14181432
if (dielectroncuts.cfg_pid_scheme == static_cast<int>(DielectronCut::PIDSchemes::kPIDML)) {
@@ -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);

PWGEM/Dilepton/Core/DileptonHadronMPC.h

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ using MyElectron = MyElectrons::iterator;
7979
using FilteredMyElectrons = soa::Filtered<MyElectrons>;
8080
using FilteredMyElectron = FilteredMyElectrons::iterator;
8181

82-
using MyMuons = soa::Join<aod::EMPrimaryMuons, aod::EMPrimaryMuonEMEventIds, aod::EMAmbiguousMuonSelfIds, aod::EMGlobalMuonSelfIds>;
82+
using MyMuons = soa::Join<aod::EMPrimaryMuons, aod::EMPrimaryMuonEMEventIds, aod::EMAmbiguousMuonSelfIds, aod::EMGlobalMuonSelfIds, aod::EMPrimaryMuonsPrefilterBitDerived>;
8383
using MyMuon = MyMuons::iterator;
8484
using FilteredMyMuons = soa::Filtered<MyMuons>;
8585
using FilteredMyMuon = FilteredMyMuons::iterator;
@@ -252,6 +252,9 @@ struct DileptonHadronMPC {
252252
Configurable<float> cfg_min_deta{"cfg_min_deta", 0.02, "min deta between 2 muons (elliptic cut)"};
253253
Configurable<float> cfg_min_dphi{"cfg_min_dphi", 0.02, "min dphi between 2 muons (elliptic cut)"};
254254

255+
Configurable<bool> cfg_apply_cuts_from_prefilter_derived{"cfg_apply_cuts_from_prefilter_derived", false, "flag to apply prefilter set in derived data"};
256+
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
257+
255258
Configurable<uint8_t> cfg_track_type{"cfg_track_type", 3, "muon track type [0: MFT-MCH-MID, 3: MCH-MID]"};
256259
Configurable<float> cfg_min_pt_track{"cfg_min_pt_track", 0.2, "min pT for single track"};
257260
Configurable<float> cfg_max_pt_track{"cfg_max_pt_track", 1e+10, "max pT for single track"};
@@ -619,7 +622,8 @@ struct DileptonHadronMPC {
619622
fDielectronCut.RequireITSibAny(dielectroncuts.cfg_require_itsib_any);
620623
fDielectronCut.RequireITSib1st(dielectroncuts.cfg_require_itsib_1st);
621624
fDielectronCut.SetChi2TOF(0, dielectroncuts.cfg_max_chi2tof);
622-
fDielectronCut.SetRelDiffPin(-1e+10, +1e+10);
625+
// fDielectronCut.SetRelDiffPin(-1e+10, +1e+10);
626+
fDielectronCut.EnableTTCA(dielectroncuts.enableTTCA);
623627

624628
// for eID
625629
fDielectronCut.SetPIDScheme(dielectroncuts.cfg_pid_scheme);
@@ -698,6 +702,7 @@ struct DileptonHadronMPC {
698702
fDimuonCut.SetMaxPDCARabsDep([&](float rabs) { return (rabs < 26.5 ? 594.f : 324.f); });
699703
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
700704
fDimuonCut.SetMFTHitMap(dimuoncuts.requireMFTHitMap, dimuoncuts.requiredMFTDisks);
705+
fDimuonCut.EnableTTCA(dimuoncuts.enableTTCA);
701706
}
702707

703708
void DefineEMTrackCut()
@@ -1021,7 +1026,12 @@ struct DileptonHadronMPC {
10211026

10221027
Preslice<MyMuons> perCollision_muon = aod::emprimarymuon::emeventId;
10231028
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 && dimuoncuts.cfg_min_phi_track < o2::aod::fwdtrack::phi && o2::aod::fwdtrack::phi < dimuoncuts.cfg_max_phi_track;
1024-
Filter ttcaFilter_muon = ifnode(dimuoncuts.enableTTCA.node(), o2::aod::emprimarymuon::isAssociatedToMPC == true || o2::aod::emprimarymuon::isAssociatedToMPC == false, o2::aod::emprimarymuon::isAssociatedToMPC == true);
1029+
Filter ttcaFilter_muon = ifnode(dimuoncuts.enableTTCA.node(), true, o2::aod::emprimarymuon::isAssociatedToMPC == true);
1030+
Filter prefilter_derived_muon = ifnode(dimuoncuts.cfg_apply_cuts_from_prefilter_derived.node() && dimuoncuts.cfg_prefilter_bits_derived.node() >= static_cast<uint16_t>(1),
1031+
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) &&
1032+
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),
1033+
o2::aod::emprimarymuon::pfbderived >= static_cast<uint16_t>(0));
1034+
10251035
Partition<FilteredMyMuons> positive_muons = o2::aod::emprimarymuon::sign > int8_t(0);
10261036
Partition<FilteredMyMuons> negative_muons = o2::aod::emprimarymuon::sign < int8_t(0);
10271037

0 commit comments

Comments
 (0)