Skip to content

Commit 303af12

Browse files
authored
[PWGEM/Dilepton] add XOR for matching in MC (#16071)
1 parent 5b33415 commit 303af12

1 file changed

Lines changed: 19 additions & 7 deletions

File tree

PWGEM/Dilepton/Core/DileptonMC.h

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -311,8 +311,9 @@ struct DileptonMC {
311311
o2::framework::Configurable<float> cfg_max_DPhi_wrt_matchedMCHMID{"cfg_max_DPhi_wrt_matchedMCHMID", 1e+10f, "max. dphi between MFT-MCH-MID and MCH-MID"};
312312
o2::framework::Configurable<bool> requireMFTHitMap{"requireMFTHitMap", false, "flag to apply MFT hit map"};
313313
o2::framework::Configurable<std::vector<int>> requiredMFTDisks{"requiredMFTDisks", std::vector<int>{0}, "hit map on MFT disks [0,1,2,3,4]. logical-OR of each double-sided disk"};
314-
o2::framework::Configurable<bool> acceptOnlyCorrectMatch{"acceptOnlyCorrectMatch", false, "flag to accept only correct match between MFT and MCH-MID"}; // this is only for MC study, as we don't know correct match in data.
315-
o2::framework::Configurable<bool> acceptOnlyWrongMatch{"acceptOnlyWrongMatch", false, "flag to accept only wrong match between MFT and MCH-MID"}; // this is only for MC study, as we don't know correct match in data.
314+
o2::framework::Configurable<bool> acceptOnlyCorrectMatch{"acceptOnlyCorrectMatch", false, "flag to accept only correct match between MFT and MCH-MID"}; // this is only for MC study, as we don't know correct match in data.
315+
o2::framework::Configurable<bool> acceptOnlyWrongMatch{"acceptOnlyWrongMatch", false, "flag to accept only wrong match between MFT and MCH-MID"}; // this is only for MC study, as we don't know correct match in data.
316+
o2::framework::Configurable<bool> acceptOnlyXORMatching{"acceptOnlyXORMatching", false, "flag to accept only correct-wrong XOR pairs between MFT and MCH-MID"}; // this is only for MC study, as we don't know correct match in data.
316317
} dimuoncuts;
317318

318319
o2::aod::rctsel::RCTFlagsChecker rctChecker;
@@ -1436,22 +1437,33 @@ struct DileptonMC {
14361437
// if (!o2::aod::pwgem::dilepton::utils::emtrackutil::isBestMatch<false>(t2, cut, tracks)) {
14371438
// return false;
14381439
// }
1440+
1441+
bool isCorrectMatch1 = t1.emmcparticleId() == t1.emmftmcparticleId();
1442+
bool isCorrectMatch2 = t2.emmcparticleId() == t2.emmftmcparticleId();
1443+
14391444
if (dimuoncuts.acceptOnlyCorrectMatch) {
1440-
if (t1.trackType() == static_cast<uint8_t>(o2::aod::fwdtrack::ForwardTrackTypeEnum::GlobalMuonTrack) && t1.emmcparticleId() != t1.emmftmcparticleId()) {
1445+
if (t1.trackType() == static_cast<uint8_t>(o2::aod::fwdtrack::ForwardTrackTypeEnum::GlobalMuonTrack) && !isCorrectMatch1) {
14411446
return false;
14421447
}
1443-
if (t2.trackType() == static_cast<uint8_t>(o2::aod::fwdtrack::ForwardTrackTypeEnum::GlobalMuonTrack) && t2.emmcparticleId() != t2.emmftmcparticleId()) {
1448+
if (t2.trackType() == static_cast<uint8_t>(o2::aod::fwdtrack::ForwardTrackTypeEnum::GlobalMuonTrack) && !isCorrectMatch2) {
14441449
return false;
14451450
}
14461451
}
1447-
if (dimuoncuts.acceptOnlyWrongMatch) { // reject correctly matched MFT-MCH-MID for bkg estimation
1448-
if (t1.trackType() == static_cast<uint8_t>(o2::aod::fwdtrack::ForwardTrackTypeEnum::GlobalMuonTrack) && t1.emmcparticleId() == t1.emmftmcparticleId()) {
1452+
if (dimuoncuts.acceptOnlyWrongMatch) {
1453+
if (t1.trackType() == static_cast<uint8_t>(o2::aod::fwdtrack::ForwardTrackTypeEnum::GlobalMuonTrack) && isCorrectMatch1) {
14491454
return false;
14501455
}
1451-
if (t2.trackType() == static_cast<uint8_t>(o2::aod::fwdtrack::ForwardTrackTypeEnum::GlobalMuonTrack) && t2.emmcparticleId() == t2.emmftmcparticleId()) {
1456+
if (t2.trackType() == static_cast<uint8_t>(o2::aod::fwdtrack::ForwardTrackTypeEnum::GlobalMuonTrack) && isCorrectMatch2) {
14521457
return false;
14531458
}
14541459
}
1460+
if (dimuoncuts.acceptOnlyXORMatching) { // this is dummy comment.
1461+
if (t1.trackType() == static_cast<uint8_t>(o2::aod::fwdtrack::ForwardTrackTypeEnum::GlobalMuonTrack) && t2.trackType() == static_cast<uint8_t>(o2::aod::fwdtrack::ForwardTrackTypeEnum::GlobalMuonTrack)) {
1462+
if (!(isCorrectMatch1 ^ isCorrectMatch2)) {
1463+
return false;
1464+
}
1465+
}
1466+
}
14551467

14561468
if (!cut.IsSelectedPair(t1, t2)) {
14571469
return false;

0 commit comments

Comments
 (0)