Skip to content

Commit 2fad2ff

Browse files
committed
Adding a configurable to mute histograms from ambiguous tracks
1 parent 9a61853 commit 2fad2ff

2 files changed

Lines changed: 67 additions & 40 deletions

File tree

‎PWGDQ/Tasks/dqEfficiency_withAssoc.cxx‎

Lines changed: 46 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1714,6 +1714,8 @@ struct AnalysisSameEventPairing {
17141714
} fConfigCuts;
17151715

17161716
Configurable<bool> fConfigQA{"cfgQA", false, "If true, fill QA histograms"};
1717+
Configurable<bool> fConfigAmbiguousBarrelHistograms{"cfgAmbiguousBarrelHistograms", true, "If true, add the in/out-of-bunch ambiguity histogram classes for barrel pairs"};
1718+
Configurable<bool> fConfigAmbiguousMuonHistograms{"cfgAmbiguousMuonHistograms", true, "If true, add the in/out-of-bunch ambiguity histogram classes for muon pairs"};
17171719
Configurable<std::string> fConfigAddSEPHistogram{"cfgAddSEPHistogram", "", "Comma separated list of histograms"};
17181720
Configurable<std::string> fConfigAddJSONHistograms{"cfgAddJSONHistograms", "", "Histograms in JSON format"};
17191721

@@ -1913,7 +1915,7 @@ struct AnalysisSameEventPairing {
19131915
Form("PairsBarrelSEPM_%s", objArray->At(icut)->GetName()),
19141916
Form("PairsBarrelSEPP_%s", objArray->At(icut)->GetName()),
19151917
Form("PairsBarrelSEMM_%s", objArray->At(icut)->GetName())};
1916-
if (fConfigQA) {
1918+
if (fConfigQA && fConfigAmbiguousBarrelHistograms) {
19171919
// assign separate hist directories for ambiguous tracks
19181920
names.push_back(Form("PairsBarrelSEPM_ambiguousInBunch_%s", objArray->At(icut)->GetName()));
19191921
names.push_back(Form("PairsBarrelSEPP_ambiguousInBunch_%s", objArray->At(icut)->GetName()));
@@ -1956,12 +1958,14 @@ struct AnalysisSameEventPairing {
19561958
if (fConfigQA) {
19571959
names.push_back(Form("PairsBarrelSEPMCorrectAssoc_%s_%s", objArray->At(icut)->GetName(), sig->GetName()));
19581960
names.push_back(Form("PairsBarrelSEPMIncorrectAssoc_%s_%s", objArray->At(icut)->GetName(), sig->GetName()));
1959-
names.push_back(Form("PairsBarrelSEPM_ambiguousInBunch_%s_%s", objArray->At(icut)->GetName(), sig->GetName()));
1960-
names.push_back(Form("PairsBarrelSEPM_ambiguousInBunchCorrectAssoc_%s_%s", objArray->At(icut)->GetName(), sig->GetName()));
1961-
names.push_back(Form("PairsBarrelSEPM_ambiguousInBunchIncorrectAssoc_%s_%s", objArray->At(icut)->GetName(), sig->GetName()));
1962-
names.push_back(Form("PairsBarrelSEPM_ambiguousOutOfBunch_%s_%s", objArray->At(icut)->GetName(), sig->GetName()));
1963-
names.push_back(Form("PairsBarrelSEPM_ambiguousOutOfBunchCorrectAssoc_%s_%s", objArray->At(icut)->GetName(), sig->GetName()));
1964-
names.push_back(Form("PairsBarrelSEPM_ambiguousOutOfBunchIncorrectAssoc_%s_%s", objArray->At(icut)->GetName(), sig->GetName()));
1961+
if (fConfigAmbiguousBarrelHistograms) {
1962+
names.push_back(Form("PairsBarrelSEPM_ambiguousInBunch_%s_%s", objArray->At(icut)->GetName(), sig->GetName()));
1963+
names.push_back(Form("PairsBarrelSEPM_ambiguousInBunchCorrectAssoc_%s_%s", objArray->At(icut)->GetName(), sig->GetName()));
1964+
names.push_back(Form("PairsBarrelSEPM_ambiguousInBunchIncorrectAssoc_%s_%s", objArray->At(icut)->GetName(), sig->GetName()));
1965+
names.push_back(Form("PairsBarrelSEPM_ambiguousOutOfBunch_%s_%s", objArray->At(icut)->GetName(), sig->GetName()));
1966+
names.push_back(Form("PairsBarrelSEPM_ambiguousOutOfBunchCorrectAssoc_%s_%s", objArray->At(icut)->GetName(), sig->GetName()));
1967+
names.push_back(Form("PairsBarrelSEPM_ambiguousOutOfBunchIncorrectAssoc_%s_%s", objArray->At(icut)->GetName(), sig->GetName()));
1968+
}
19651969
}
19661970
for (auto const& n : names) {
19671971
histNames += Form("%s;", n.Data());
@@ -2004,7 +2008,7 @@ struct AnalysisSameEventPairing {
20042008
Form("PairsMuonSEPM_%s", objArray->At(icut)->GetName()),
20052009
Form("PairsMuonSEPP_%s", objArray->At(icut)->GetName()),
20062010
Form("PairsMuonSEMM_%s", objArray->At(icut)->GetName())};
2007-
if (fConfigQA) {
2011+
if (fConfigQA && fConfigAmbiguousMuonHistograms) {
20082012
// assign separate hist directories for ambiguous tracks
20092013
names.push_back(Form("PairsMuonSEPM_ambiguousInBunch_%s", objArray->At(icut)->GetName()));
20102014
names.push_back(Form("PairsMuonSEPP_ambiguousInBunch_%s", objArray->At(icut)->GetName()));
@@ -2045,12 +2049,14 @@ struct AnalysisSameEventPairing {
20452049
if (fConfigQA) {
20462050
names.push_back(Form("PairsMuonSEPMCorrectAssoc_%s_%s", objArray->At(icut)->GetName(), sig->GetName()));
20472051
names.push_back(Form("PairsMuonSEPMIncorrectAssoc_%s_%s", objArray->At(icut)->GetName(), sig->GetName()));
2048-
names.push_back(Form("PairsMuonSEPM_ambiguousInBunch_%s_%s", objArray->At(icut)->GetName(), sig->GetName()));
2049-
names.push_back(Form("PairsMuonSEPM_ambiguousInBunchCorrectAssoc_%s_%s", objArray->At(icut)->GetName(), sig->GetName()));
2050-
names.push_back(Form("PairsMuonSEPM_ambiguousInBunchIncorrectAssoc_%s_%s", objArray->At(icut)->GetName(), sig->GetName()));
2051-
names.push_back(Form("PairsMuonSEPM_ambiguousOutOfBunch_%s_%s", objArray->At(icut)->GetName(), sig->GetName()));
2052-
names.push_back(Form("PairsMuonSEPM_ambiguousOutOfBunchCorrectAssoc_%s_%s", objArray->At(icut)->GetName(), sig->GetName()));
2053-
names.push_back(Form("PairsMuonSEPM_ambiguousOutOfBunchIncorrectAssoc_%s_%s", objArray->At(icut)->GetName(), sig->GetName()));
2052+
if (fConfigAmbiguousMuonHistograms) {
2053+
names.push_back(Form("PairsMuonSEPM_ambiguousInBunch_%s_%s", objArray->At(icut)->GetName(), sig->GetName()));
2054+
names.push_back(Form("PairsMuonSEPM_ambiguousInBunchCorrectAssoc_%s_%s", objArray->At(icut)->GetName(), sig->GetName()));
2055+
names.push_back(Form("PairsMuonSEPM_ambiguousInBunchIncorrectAssoc_%s_%s", objArray->At(icut)->GetName(), sig->GetName()));
2056+
names.push_back(Form("PairsMuonSEPM_ambiguousOutOfBunch_%s_%s", objArray->At(icut)->GetName(), sig->GetName()));
2057+
names.push_back(Form("PairsMuonSEPM_ambiguousOutOfBunchCorrectAssoc_%s_%s", objArray->At(icut)->GetName(), sig->GetName()));
2058+
names.push_back(Form("PairsMuonSEPM_ambiguousOutOfBunchIncorrectAssoc_%s_%s", objArray->At(icut)->GetName(), sig->GetName()));
2059+
}
20542060
}
20552061
for (auto const& n : names) {
20562062
histNames += Form("%s;", n.Data());
@@ -2154,12 +2160,15 @@ struct AnalysisSameEventPairing {
21542160
if (fConfigQA) {
21552161
names.push_back(Form("PairsEleMuSEPMCorrectAssoc_%s_%s_%s", trackCutName.Data(), muonCutName.Data(), sig->GetName()));
21562162
names.push_back(Form("PairsEleMuSEPMIncorrectAssoc_%s_%s_%s", trackCutName.Data(), muonCutName.Data(), sig->GetName()));
2157-
names.push_back(Form("PairsEleMuSEPM_ambiguousInBunch_%s_%s_%s", trackCutName.Data(), muonCutName.Data(), sig->GetName()));
2158-
names.push_back(Form("PairsEleMuSEPM_ambiguousInBunchCorrectAssoc_%s_%s_%s", trackCutName.Data(), muonCutName.Data(), sig->GetName()));
2159-
names.push_back(Form("PairsEleMuSEPM_ambiguousInBunchIncorrectAssoc_%s_%s_%s", trackCutName.Data(), muonCutName.Data(), sig->GetName()));
2160-
names.push_back(Form("PairsEleMuSEPM_ambiguousOutOfBunch_%s_%s_%s", trackCutName.Data(), muonCutName.Data(), sig->GetName()));
2161-
names.push_back(Form("PairsEleMuSEPM_ambiguousOutOfBunchCorrectAssoc_%s_%s_%s", trackCutName.Data(), muonCutName.Data(), sig->GetName()));
2162-
names.push_back(Form("PairsEleMuSEPM_ambiguousOutOfBunchIncorrectAssoc_%s_%s_%s", trackCutName.Data(), muonCutName.Data(), sig->GetName()));
2163+
// the e-mu ambiguity classes mix a barrel and a muon leg, so they need both switches
2164+
if (fConfigAmbiguousBarrelHistograms && fConfigAmbiguousMuonHistograms) {
2165+
names.push_back(Form("PairsEleMuSEPM_ambiguousInBunch_%s_%s_%s", trackCutName.Data(), muonCutName.Data(), sig->GetName()));
2166+
names.push_back(Form("PairsEleMuSEPM_ambiguousInBunchCorrectAssoc_%s_%s_%s", trackCutName.Data(), muonCutName.Data(), sig->GetName()));
2167+
names.push_back(Form("PairsEleMuSEPM_ambiguousInBunchIncorrectAssoc_%s_%s_%s", trackCutName.Data(), muonCutName.Data(), sig->GetName()));
2168+
names.push_back(Form("PairsEleMuSEPM_ambiguousOutOfBunch_%s_%s_%s", trackCutName.Data(), muonCutName.Data(), sig->GetName()));
2169+
names.push_back(Form("PairsEleMuSEPM_ambiguousOutOfBunchCorrectAssoc_%s_%s_%s", trackCutName.Data(), muonCutName.Data(), sig->GetName()));
2170+
names.push_back(Form("PairsEleMuSEPM_ambiguousOutOfBunchIncorrectAssoc_%s_%s_%s", trackCutName.Data(), muonCutName.Data(), sig->GetName()));
2171+
}
21632172
}
21642173
for (auto const& n : names) {
21652174
histNames += Form("%s;", n.Data());
@@ -2309,6 +2318,12 @@ struct AnalysisSameEventPairing {
23092318
histNamesMC = fMuonHistNamesMCmatched;
23102319
ncuts = fNCutsMuon;
23112320
}
2321+
// the in/out-of-bunch ambiguity hist classes are only booked (and therefore only fillable) when the
2322+
// corresponding switch is on; the indices below assume they are appended last in each name vector
2323+
bool fillAmbiguousHistos = fConfigAmbiguousBarrelHistograms;
2324+
if constexpr (TPairType == VarManager::kDecayToMuMu) {
2325+
fillAmbiguousHistos = fConfigAmbiguousMuonHistograms;
2326+
}
23122327

23132328
auto twoTrackFilter = static_cast<uint32_t>(0);
23142329
int sign1 = 0;
@@ -2629,15 +2644,15 @@ struct AnalysisSameEventPairing {
26292644
} else { // incorrect track-collision association
26302645
fHistMan->FillHistClass(histNamesMC[icut * fRecMCSignals.size() + isig][4].Data(), dqefficiency_helpers::varValues());
26312646
}
2632-
if (isAmbiInBunch) { // ambiguous in bunch
2647+
if (fillAmbiguousHistos && isAmbiInBunch) { // ambiguous in bunch
26332648
fHistMan->FillHistClass(histNamesMC[icut * fRecMCSignals.size() + isig][5].Data(), dqefficiency_helpers::varValues());
26342649
if (isCorrectAssoc_leg1 && isCorrectAssoc_leg2) {
26352650
fHistMan->FillHistClass(histNamesMC[icut * fRecMCSignals.size() + isig][6].Data(), dqefficiency_helpers::varValues());
26362651
} else {
26372652
fHistMan->FillHistClass(histNamesMC[icut * fRecMCSignals.size() + isig][7].Data(), dqefficiency_helpers::varValues());
26382653
}
26392654
}
2640-
if (isAmbiOutOfBunch) { // ambiguous out of bunch
2655+
if (fillAmbiguousHistos && isAmbiOutOfBunch) { // ambiguous out of bunch
26412656
fHistMan->FillHistClass(histNamesMC[icut * fRecMCSignals.size() + isig][8].Data(), dqefficiency_helpers::varValues());
26422657
if (isCorrectAssoc_leg1 && isCorrectAssoc_leg2) {
26432658
fHistMan->FillHistClass(histNamesMC[icut * fRecMCSignals.size() + isig][9].Data(), dqefficiency_helpers::varValues());
@@ -2647,7 +2662,7 @@ struct AnalysisSameEventPairing {
26472662
}
26482663
}
26492664
}
2650-
if (fConfigQA) {
2665+
if (fConfigQA && fillAmbiguousHistos) {
26512666
if (isAmbiInBunch) {
26522667
fHistMan->FillHistClass(histNames[icut][3].Data(), dqefficiency_helpers::varValues());
26532668
}
@@ -2664,7 +2679,7 @@ struct AnalysisSameEventPairing {
26642679
fHistMan->FillHistClass(histNamesMC[icut * fRecMCSignals.size() + isig][1].Data(), dqefficiency_helpers::varValues());
26652680
}
26662681
}
2667-
if (fConfigQA) {
2682+
if (fConfigQA && fillAmbiguousHistos) {
26682683
if (isAmbiInBunch) {
26692684
fHistMan->FillHistClass(histNames[icut][4].Data(), dqefficiency_helpers::varValues());
26702685
}
@@ -2679,7 +2694,7 @@ struct AnalysisSameEventPairing {
26792694
fHistMan->FillHistClass(histNamesMC[icut * fRecMCSignals.size() + isig][2].Data(), dqefficiency_helpers::varValues());
26802695
}
26812696
}
2682-
if (fConfigQA) {
2697+
if (fConfigQA && fillAmbiguousHistos) {
26832698
if (isAmbiInBunch) {
26842699
fHistMan->FillHistClass(histNames[icut][5].Data(), dqefficiency_helpers::varValues());
26852700
}
@@ -2859,6 +2874,8 @@ struct AnalysisSameEventPairing {
28592874
const auto& histNames = fTrackMuonHistNames;
28602875
const auto& histNamesMC = fTrackMuonHistNamesMCmatched;
28612876
int nPairCuts = !fPairCuts.empty() ? static_cast<int>(fPairCuts.size()) : 1;
2877+
// e-mu pairs have one barrel and one muon leg, so the ambiguity classes need both switches
2878+
bool fillAmbiguousHistos = fConfigAmbiguousBarrelHistograms && fConfigAmbiguousMuonHistograms;
28622879

28632880
uint32_t twoTrackFilter = 0;
28642881
uint32_t mcDecision = 0;
@@ -3021,7 +3038,7 @@ struct AnalysisSameEventPairing {
30213038
} else {
30223039
fHistMan->FillHistClass(mcNames[2].Data(), dqefficiency_helpers::varValues());
30233040
}
3024-
if (!fConfigQA || mcNames.size() < 11) {
3041+
if (!fConfigQA || mcNames.size() < 5) {
30253042
continue;
30263043
}
30273044
// QA fills (PM only, mirroring the dilepton MC layout: indices 3..10)
@@ -3031,6 +3048,9 @@ struct AnalysisSameEventPairing {
30313048
} else {
30323049
fHistMan->FillHistClass(mcNames[4].Data(), dqefficiency_helpers::varValues());
30333050
}
3051+
if (!fillAmbiguousHistos || mcNames.size() < 11) {
3052+
continue;
3053+
}
30343054
if (isAmbiInBunch) {
30353055
fHistMan->FillHistClass(mcNames[5].Data(), dqefficiency_helpers::varValues());
30363056
if (isCorrectPair) {

‎PWGDQ/Tasks/tableReader_withAssoc.h‎

Lines changed: 21 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1485,6 +1485,7 @@ struct AnalysisSameEventPairing {
14851485
o2::framework::Configurable<std::string> fConfigAddJSONHistograms{"cfgAddJSONHistograms", "", "Histograms in JSON format"};
14861486
o2::framework::Configurable<bool> fConfigQA{"cfgQA", true, "If true, fill output histograms"};
14871487
o2::framework::Configurable<bool> fConfigAmbiguousMuonHistograms{"cfgAmbiguousMuonHistograms", true, "If true, fill ambiguous histograms"};
1488+
o2::framework::Configurable<bool> fConfigAmbiguousBarrelHistograms{"cfgAmbiguousBarrelHistograms", true, "If true, add the ambiguity histogram classes for barrel pairs"};
14881489

14891490
// option for TR pair fill
14901491
o2::framework::Configurable<bool> fConfigTRPairs{"cfgFillTRPairs", false, "If true, fill Track rotation pairs"};
@@ -1708,21 +1709,27 @@ struct AnalysisSameEventPairing {
17081709
Form("PairsBarrelSEPP_%s", objArray->At(icut)->GetName()),
17091710
Form("PairsBarrelSEMM_%s", objArray->At(icut)->GetName())};
17101711
histNames += Form("%s;%s;%s;", names[0].Data(), names[1].Data(), names[2].Data());
1711-
names.push_back(Form("PairsBarrelSEPM_ambiguousextra_%s", objArray->At(icut)->GetName()));
1712-
names.push_back(Form("PairsBarrelSEPP_ambiguousextra_%s", objArray->At(icut)->GetName()));
1713-
names.push_back(Form("PairsBarrelSEMM_ambiguousextra_%s", objArray->At(icut)->GetName()));
1714-
histNames += Form("%s;%s;%s;", names[3].Data(), names[4].Data(), names[5].Data());
1712+
// append a hist class to both the name vector and the list of classes to be created
1713+
auto addName = [&names, &histNames](TString const& name) {
1714+
names.push_back(name);
1715+
histNames += Form("%s;", name.Data());
1716+
};
1717+
if (fConfigAmbiguousBarrelHistograms) {
1718+
addName(Form("PairsBarrelSEPM_ambiguousextra_%s", objArray->At(icut)->GetName()));
1719+
addName(Form("PairsBarrelSEPP_ambiguousextra_%s", objArray->At(icut)->GetName()));
1720+
addName(Form("PairsBarrelSEMM_ambiguousextra_%s", objArray->At(icut)->GetName()));
1721+
}
17151722
if (fConfigTRPairs) {
1716-
names.push_back(Form("PairsBarrelTRPM_%s", objArray->At(icut)->GetName()));
1717-
names.push_back(Form("PairsBarrelTRPM_ambiguousextra_%s", objArray->At(icut)->GetName()));
1718-
names.push_back(Form("PairsBarrelTR_MEPM_%s", objArray->At(icut)->GetName()));
1719-
histNames += Form("%s;%s;%s;", names[6].Data(), names[7].Data(), names[8].Data());
1723+
addName(Form("PairsBarrelTRPM_%s", objArray->At(icut)->GetName()));
1724+
if (fConfigAmbiguousBarrelHistograms) {
1725+
addName(Form("PairsBarrelTRPM_ambiguousextra_%s", objArray->At(icut)->GetName()));
1726+
}
1727+
addName(Form("PairsBarrelTR_MEPM_%s", objArray->At(icut)->GetName()));
17201728
}
17211729
if (fEnableBarrelMixingHistos) {
1722-
names.push_back(Form("PairsBarrelMEPM_%s", objArray->At(icut)->GetName()));
1723-
names.push_back(Form("PairsBarrelMEPP_%s", objArray->At(icut)->GetName()));
1724-
names.push_back(Form("PairsBarrelMEMM_%s", objArray->At(icut)->GetName()));
1725-
histNames += Form("%s;%s;%s;", names[(fConfigTRPairs ? 9 : 6)].Data(), names[(fConfigTRPairs ? 10 : 7)].Data(), names[(fConfigTRPairs ? 11 : 8)].Data());
1730+
addName(Form("PairsBarrelMEPM_%s", objArray->At(icut)->GetName()));
1731+
addName(Form("PairsBarrelMEPP_%s", objArray->At(icut)->GetName()));
1732+
addName(Form("PairsBarrelMEMM_%s", objArray->At(icut)->GetName()));
17261733
}
17271734
fTrackHistNames[icut] = names;
17281735

@@ -2412,7 +2419,7 @@ struct AnalysisSameEventPairing {
24122419
isLeg1Ambi = (twoTrackFilter & (static_cast<uint32_t>(1) << 28) || (twoTrackFilter & (static_cast<uint32_t>(1) << 30)));
24132420
isLeg2Ambi = (twoTrackFilter & (static_cast<uint32_t>(1) << 29) || (twoTrackFilter & (static_cast<uint32_t>(1) << 31)));
24142421
if constexpr (TPairType == VarManager::kDecayToEE) {
2415-
if (isLeg1Ambi && isLeg2Ambi) {
2422+
if (fConfigAmbiguousBarrelHistograms && isLeg1Ambi && isLeg2Ambi) {
24162423
std::pair<uint32_t, uint32_t> iPair(a1.reducedtrackId(), a2.reducedtrackId());
24172424
if (fAmbiguousPairs.contains(iPair)) {
24182425
if (fAmbiguousPairs[iPair] & (static_cast<uint32_t>(1) << icut)) { // if this pair is already stored with this cut
@@ -2569,7 +2576,7 @@ struct AnalysisSameEventPairing {
25692576
isLeg1Ambi = (twoTrackFilter & (static_cast<uint32_t>(1) << 28) || (twoTrackFilter & (static_cast<uint32_t>(1) << 30)));
25702577
isLeg2Ambi = (twoTrackFilter & (static_cast<uint32_t>(1) << 29) || (twoTrackFilter & (static_cast<uint32_t>(1) << 31)));
25712578
if constexpr (TPairType == VarManager::kDecayToEE) {
2572-
if (isLeg1Ambi && isLeg2Ambi) {
2579+
if (fConfigAmbiguousBarrelHistograms && isLeg1Ambi && isLeg2Ambi) {
25732580
std::pair<uint32_t, uint32_t> iPair(a1.reducedtrackId(), a2.reducedtrackId());
25742581
if (fAmbiguousPairs.contains(iPair)) {
25752582
if (fAmbiguousPairs[iPair] & (static_cast<uint32_t>(1) << icut)) { // if this pair is already stored with this cut

0 commit comments

Comments
 (0)