Skip to content

Commit f4bc635

Browse files
authored
Add histograms for unambiguous muons by event-mixing (#8101)
1 parent 86c1cf6 commit f4bc635

File tree

3 files changed

+95
-2
lines changed

3 files changed

+95
-2
lines changed

PWGDQ/Core/CutsLibrary.cxx

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2565,6 +2565,11 @@ AnalysisCompositeCut* o2::aod::dqcuts::GetCompositeCut(const char* cutName)
25652565
return cut;
25662566
}
25672567

2568+
if (!nameStr.compare("matchedQualityCutsMFTeta")) {
2569+
cut->AddCut(GetAnalysisCut("matchedQualityCutsMFTeta"));
2570+
return cut;
2571+
}
2572+
25682573
if (!nameStr.compare("muonQualityCuts3SigmaPDCA")) {
25692574
cut->AddCut(GetAnalysisCut("muonQualityCuts3SigmaPDCA"));
25702575
return cut;
@@ -5316,6 +5321,17 @@ AnalysisCut* o2::aod::dqcuts::GetAnalysisCut(const char* cutName)
53165321
return cut;
53175322
}
53185323

5324+
if (!nameStr.compare("matchedQualityCutsMFTeta")) {
5325+
cut->AddCut(VarManager::kEta, -3.6, -2.5);
5326+
cut->AddCut(VarManager::kMuonRAtAbsorberEnd, 17.6, 89.5);
5327+
cut->AddCut(VarManager::kMuonPDca, 0.0, 594.0, false, VarManager::kMuonRAtAbsorberEnd, 17.6, 26.5);
5328+
cut->AddCut(VarManager::kMuonPDca, 0.0, 324.0, false, VarManager::kMuonRAtAbsorberEnd, 26.5, 89.5);
5329+
cut->AddCut(VarManager::kMuonChi2, 0.0, 1e6);
5330+
cut->AddCut(VarManager::kMuonChi2MatchMCHMID, 0.0, 1e6); // matching MCH-MID
5331+
cut->AddCut(VarManager::kMuonChi2MatchMCHMFT, 0.0, 1e6); // matching MFT-MCH
5332+
return cut;
5333+
}
5334+
53195335
if (!nameStr.compare("muonQualityCutsMatchingOnly")) {
53205336
cut->AddCut(VarManager::kEta, -4.0, -2.5);
53215337
cut->AddCut(VarManager::kMuonChi2, 0.0, 1e6);

PWGDQ/Core/HistogramsLibrary.cxx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1103,7 +1103,9 @@ void o2::aod::dqhistograms::DefineHistograms(HistogramManager* hm, const char* h
11031103
hm->AddHistogram(histClass, "MassLow", "", false, 400, 0.0, 2.0, VarManager::kMass);
11041104
}
11051105
if (subGroupStr.Contains("lmmumu")) {
1106-
hm->AddHistogram(histClass, "Mass_QuadDCAabsXY", "", false, 250, 0.0, 5.0, VarManager::kMass, 500, 0.0, 1, VarManager::kQuadDCAabsXY);
1106+
hm->AddHistogram(histClass, "Mass_QuadDCAabsXY", "", false, 250, 0.0, 5.0, VarManager::kMass, 900, 0.0, 3, VarManager::kQuadDCAabsXY);
1107+
hm->AddHistogram(histClass, "Mass_Lxyz", "", false, 250, 0.0, 5.0, VarManager::kMass, 1000, 0.0, 5, VarManager::kVertexingLxyz);
1108+
hm->AddHistogram(histClass, "Mass_OpeningAngle", "", false, 250, 0.0, 5.0, VarManager::kMass, 800, 0, 0.8, VarManager::kOpeningAngle);
11071109
}
11081110
if (subGroupStr.Contains("flow-dimuon")) {
11091111
int varV2[6] = {VarManager::kMass, VarManager::kPt, VarManager::kRap, VarManager::kCentFT0C, VarManager::kU2Q2, VarManager::kCos2DeltaPhi};

PWGDQ/Tasks/tableReader_withAssoc.cxx

Lines changed: 76 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1118,8 +1118,26 @@ struct AnalysisSameEventPairing {
11181118
names.push_back(Form("PairsMuonSEPM_ambiguousOutOfBunch_%s", objArray->At(icut)->GetName()));
11191119
names.push_back(Form("PairsMuonSEPP_ambiguousOutOfBunch_%s", objArray->At(icut)->GetName()));
11201120
names.push_back(Form("PairsMuonSEMM_ambiguousOutOfBunch_%s", objArray->At(icut)->GetName()));
1121+
names.push_back(Form("PairsMuonSEPM_unambiguous_%s", objArray->At(icut)->GetName()));
1122+
names.push_back(Form("PairsMuonSEPP_unambiguous_%s", objArray->At(icut)->GetName()));
1123+
names.push_back(Form("PairsMuonSEMM_unambiguous_%s", objArray->At(icut)->GetName()));
11211124
histNames += Form("%s;%s;%s;", names[(fEnableMuonMixingHistos ? 6 : 3)].Data(), names[(fEnableMuonMixingHistos ? 7 : 4)].Data(), names[(fEnableMuonMixingHistos ? 8 : 5)].Data());
11221125
histNames += Form("%s;%s;%s;", names[(fEnableMuonMixingHistos ? 9 : 6)].Data(), names[(fEnableMuonMixingHistos ? 10 : 7)].Data(), names[(fEnableMuonMixingHistos ? 11 : 8)].Data());
1126+
histNames += Form("%s;%s;%s;", names[(fEnableMuonMixingHistos ? 12 : 9)].Data(), names[(fEnableMuonMixingHistos ? 13 : 10)].Data(), names[(fEnableMuonMixingHistos ? 14 : 11)].Data());
1127+
if (fEnableMuonMixingHistos) {
1128+
names.push_back(Form("PairsMuonMEPM_ambiguousInBunch_%s", objArray->At(icut)->GetName()));
1129+
names.push_back(Form("PairsMuonMEPP_ambiguousInBunch_%s", objArray->At(icut)->GetName()));
1130+
names.push_back(Form("PairsMuonMEMM_ambiguousInBunch_%s", objArray->At(icut)->GetName()));
1131+
names.push_back(Form("PairsMuonMEPM_ambiguousOutOfBunch_%s", objArray->At(icut)->GetName()));
1132+
names.push_back(Form("PairsMuonMEPP_ambiguousOutOfBunch_%s", objArray->At(icut)->GetName()));
1133+
names.push_back(Form("PairsMuonMEMM_ambiguousOutOfBunch_%s", objArray->At(icut)->GetName()));
1134+
names.push_back(Form("PairsMuonMEPM_unambiguous_%s", objArray->At(icut)->GetName()));
1135+
names.push_back(Form("PairsMuonMEPP_unambiguous_%s", objArray->At(icut)->GetName()));
1136+
names.push_back(Form("PairsMuonMEMM_unambiguous_%s", objArray->At(icut)->GetName()));
1137+
histNames += Form("%s;%s;%s;", names[15].Data(), names[16].Data(), names[17].Data());
1138+
histNames += Form("%s;%s;%s;", names[18].Data(), names[19].Data(), names[20].Data());
1139+
histNames += Form("%s;%s;%s;", names[21].Data(), names[22].Data(), names[23].Data());
1140+
}
11231141
fMuonHistNames[icut] = names;
11241142

11251143
TString cutNamesStr = fConfigPairCuts.value;
@@ -1475,10 +1493,12 @@ struct AnalysisSameEventPairing {
14751493
// Fill histograms
14761494
bool isAmbiInBunch = false;
14771495
bool isAmbiOutOfBunch = false;
1496+
bool isUnambiguous = false;
14781497
for (int icut = 0; icut < ncuts; icut++) {
14791498
if (twoTrackFilter & (uint32_t(1) << icut)) {
14801499
isAmbiInBunch = (twoTrackFilter & (uint32_t(1) << 28)) || (twoTrackFilter & (uint32_t(1) << 29));
14811500
isAmbiOutOfBunch = (twoTrackFilter & (uint32_t(1) << 30)) || (twoTrackFilter & (uint32_t(1) << 31));
1501+
isUnambiguous = !((twoTrackFilter & (uint32_t(1) << 28)) || (twoTrackFilter & (uint32_t(1) << 29)) || (twoTrackFilter & (uint32_t(1) << 30)) || (twoTrackFilter & (uint32_t(1) << 31)));
14821502
if (sign1 * sign2 < 0) {
14831503
fHistMan->FillHistClass(histNames[icut][0].Data(), VarManager::fgValues);
14841504
if (isAmbiInBunch) {
@@ -1487,6 +1507,9 @@ struct AnalysisSameEventPairing {
14871507
if (isAmbiOutOfBunch) {
14881508
fHistMan->FillHistClass(histNames[icut][3 + histIdxOffset + 3].Data(), VarManager::fgValues);
14891509
}
1510+
if (isUnambiguous) {
1511+
fHistMan->FillHistClass(histNames[icut][3 + histIdxOffset + 6].Data(), VarManager::fgValues);
1512+
}
14901513
} else {
14911514
if (sign1 > 0) {
14921515
fHistMan->FillHistClass(histNames[icut][1].Data(), VarManager::fgValues);
@@ -1496,6 +1519,9 @@ struct AnalysisSameEventPairing {
14961519
if (isAmbiOutOfBunch) {
14971520
fHistMan->FillHistClass(histNames[icut][4 + histIdxOffset + 3].Data(), VarManager::fgValues);
14981521
}
1522+
if (isUnambiguous) {
1523+
fHistMan->FillHistClass(histNames[icut][4 + histIdxOffset + 6].Data(), VarManager::fgValues);
1524+
}
14991525
} else {
15001526
fHistMan->FillHistClass(histNames[icut][2].Data(), VarManager::fgValues);
15011527
if (isAmbiInBunch) {
@@ -1504,6 +1530,9 @@ struct AnalysisSameEventPairing {
15041530
if (isAmbiOutOfBunch) {
15051531
fHistMan->FillHistClass(histNames[icut][5 + histIdxOffset + 3].Data(), VarManager::fgValues);
15061532
}
1533+
if (isUnambiguous) {
1534+
fHistMan->FillHistClass(histNames[icut][5 + histIdxOffset + 6].Data(), VarManager::fgValues);
1535+
}
15071536
}
15081537
}
15091538
for (unsigned int iPairCut = 0; iPairCut < fPairCuts.size(); iPairCut++) {
@@ -1565,24 +1594,70 @@ struct AnalysisSameEventPairing {
15651594
VarManager::FillPairVn<TPairType>(t1, t2);
15661595
}
15671596
pairSign = t1.sign() + t2.sign();
1597+
// store the ambiguity number of the two dilepton legs in the last 4 digits of the two-track filter
1598+
if (t1.muonAmbiguityInBunch() > 1) {
1599+
twoTrackFilter |= (uint32_t(1) << 28);
1600+
}
1601+
if (t2.muonAmbiguityInBunch() > 1) {
1602+
twoTrackFilter |= (uint32_t(1) << 29);
1603+
}
1604+
if (t1.muonAmbiguityOutOfBunch() > 1) {
1605+
twoTrackFilter |= (uint32_t(1) << 30);
1606+
}
1607+
if (t2.muonAmbiguityOutOfBunch() > 1) {
1608+
twoTrackFilter |= (uint32_t(1) << 31);
1609+
}
15681610
ncuts = fNCutsMuon;
15691611
histNames = fMuonHistNames;
15701612
}
15711613
/*if constexpr (TPairType == VarManager::kElectronMuon) {
15721614
twoTrackFilter = a1.isBarrelSelected_raw() & a1.isBarrelSelectedPrefilter_raw() & a2.isMuonSelected_raw() & fTrackFilterMask;
15731615
}*/
15741616

1617+
bool isAmbiInBunch = false;
1618+
bool isAmbiOutOfBunch = false;
1619+
bool isUnambiguous = false;
15751620
for (int icut = 0; icut < ncuts; icut++) {
15761621
if (!(twoTrackFilter & (uint32_t(1) << icut))) {
15771622
continue; // cut not passed
15781623
}
1624+
isAmbiInBunch = (twoTrackFilter & (uint32_t(1) << 28)) || (twoTrackFilter & (uint32_t(1) << 29));
1625+
isAmbiOutOfBunch = (twoTrackFilter & (uint32_t(1) << 30)) || (twoTrackFilter & (uint32_t(1) << 31));
1626+
isUnambiguous = !((twoTrackFilter & (uint32_t(1) << 28)) || (twoTrackFilter & (uint32_t(1) << 29)) || (twoTrackFilter & (uint32_t(1) << 30)) || (twoTrackFilter & (uint32_t(1) << 31)));
15791627
if (pairSign == 0) {
15801628
fHistMan->FillHistClass(histNames[icut][3].Data(), VarManager::fgValues);
1629+
if (isAmbiInBunch) {
1630+
fHistMan->FillHistClass(histNames[icut][15].Data(), VarManager::fgValues);
1631+
}
1632+
if (isAmbiOutOfBunch) {
1633+
fHistMan->FillHistClass(histNames[icut][18].Data(), VarManager::fgValues);
1634+
}
1635+
if (isUnambiguous) {
1636+
fHistMan->FillHistClass(histNames[icut][21].Data(), VarManager::fgValues);
1637+
}
15811638
} else {
15821639
if (pairSign > 0) {
15831640
fHistMan->FillHistClass(histNames[icut][4].Data(), VarManager::fgValues);
1641+
if (isAmbiInBunch) {
1642+
fHistMan->FillHistClass(histNames[icut][16].Data(), VarManager::fgValues);
1643+
}
1644+
if (isAmbiOutOfBunch) {
1645+
fHistMan->FillHistClass(histNames[icut][19].Data(), VarManager::fgValues);
1646+
}
1647+
if (isUnambiguous) {
1648+
fHistMan->FillHistClass(histNames[icut][22].Data(), VarManager::fgValues);
1649+
}
15841650
} else {
15851651
fHistMan->FillHistClass(histNames[icut][5].Data(), VarManager::fgValues);
1652+
if (isAmbiInBunch) {
1653+
fHistMan->FillHistClass(histNames[icut][17].Data(), VarManager::fgValues);
1654+
}
1655+
if (isAmbiOutOfBunch) {
1656+
fHistMan->FillHistClass(histNames[icut][20].Data(), VarManager::fgValues);
1657+
}
1658+
if (isUnambiguous) {
1659+
fHistMan->FillHistClass(histNames[icut][23].Data(), VarManager::fgValues);
1660+
}
15861661
}
15871662
}
15881663
} // end for (cuts)
@@ -1648,7 +1723,7 @@ struct AnalysisSameEventPairing {
16481723

16491724
void processMixingAllSkimmed(soa::Filtered<MyEventsHashSelected>& events,
16501725
soa::Join<aod::ReducedTracksAssoc, aod::BarrelTrackCuts, aod::Prefilter> const& trackAssocs, MyBarrelTracksWithCov const& tracks,
1651-
soa::Join<aod::ReducedMuonsAssoc, aod::MuonTrackCuts> const& muonAssocs, MyMuonTracksWithCov const& muons)
1726+
soa::Join<aod::ReducedMuonsAssoc, aod::MuonTrackCuts> const& muonAssocs, MyMuonTracksWithCovWithAmbiguities const& muons)
16521727
{
16531728
runSameSideMixing<pairTypeEE, gkEventFillMap>(events, trackAssocs, tracks, trackAssocsPerCollision);
16541729
runSameSideMixing<pairTypeMuMu, gkEventFillMap>(events, muonAssocs, muons, muonAssocsPerCollision);

0 commit comments

Comments
 (0)