Skip to content

Commit df4c1ac

Browse files
sigurdnesealibuild
andauthored
[PWGDQ,PWGEM] Add histogram group for reflected pairs. Fill generated pair MC quantities. (#10022)
Co-authored-by: ALICE Builder <alibuild@users.noreply.github.com>
1 parent e298b4f commit df4c1ac

File tree

6 files changed

+155
-33
lines changed

6 files changed

+155
-33
lines changed

PWGDQ/Core/VarManager.cxx

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -442,6 +442,10 @@ void VarManager::SetDefaultVarNames()
442442
fgVariableUnits[kDeltaPtotTracks] = "GeV/c";
443443
fgVariableNames[kCharge] = "charge";
444444
fgVariableUnits[kCharge] = "";
445+
fgVariableNames[kCharge1] = "charge track 1";
446+
fgVariableUnits[kCharge1] = "";
447+
fgVariableNames[kCharge2] = "charge track 2";
448+
fgVariableUnits[kCharge2] = "";
445449
fgVariableNames[kPin] = "p_{IN}";
446450
fgVariableUnits[kPin] = "GeV/c";
447451
fgVariableNames[kPin_leg1] = "p_{IN}";
@@ -591,7 +595,7 @@ void VarManager::SetDefaultVarNames()
591595
fgVariableUnits[kMCPy] = "GeV/c";
592596
fgVariableNames[kMCPz] = "MC pz";
593597
fgVariableUnits[kMCPz] = "GeV/c";
594-
fgVariableNames[kMCPt] = "MC pt";
598+
fgVariableNames[kMCPt] = "MC p_{T}";
595599
fgVariableUnits[kMCPt] = "GeV/c";
596600
fgVariableNames[kMCPhi] = "#varphi";
597601
fgVariableUnits[kMCPhi] = "rad";
@@ -601,6 +605,8 @@ void VarManager::SetDefaultVarNames()
601605
fgVariableUnits[kMCY] = "";
602606
fgVariableNames[kMCE] = "MC Energy";
603607
fgVariableUnits[kMCE] = "GeV";
608+
fgVariableNames[kMCMass] = "MC Mass";
609+
fgVariableUnits[kMCMass] = "GeV/c2";
604610
fgVariableNames[kMCVx] = "MC vx";
605611
fgVariableUnits[kMCVx] = "cm"; // TODO: check the unit
606612
fgVariableNames[kMCVy] = "MC vy";

PWGDQ/Core/VarManager.h

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -604,6 +604,7 @@ class VarManager : public TObject
604604
kMCPx,
605605
kMCPy,
606606
kMCPz,
607+
kMCMass,
607608
kMCE,
608609
kMCVx,
609610
kMCVy,
@@ -1053,8 +1054,8 @@ class VarManager : public TObject
10531054
static void FillTriple(T1 const& t1, T2 const& t2, T3 const& t3, float* values = nullptr, PairCandidateType pairType = kTripleCandidateToEEPhoton);
10541055
template <uint32_t fillMap, int pairType, typename T1, typename T2>
10551056
static void FillPairME(T1 const& t1, T2 const& t2, float* values = nullptr);
1056-
template <typename T1, typename T2>
1057-
static void FillPairMC(T1 const& t1, T2 const& t2, float* values = nullptr, PairCandidateType pairType = kDecayToEE);
1057+
template <int pairType, typename T1, typename T2>
1058+
static void FillPairMC(T1 const& t1, T2 const& t2, float* values = nullptr);
10581059
template <typename T1, typename T2, typename T3>
10591060
static void FillTripleMC(T1 const& t1, T2 const& t2, T3 const& t3, float* values = nullptr, PairCandidateType pairType = kTripleCandidateToEEPhoton);
10601061
template <int candidateType, typename T1, typename T2>
@@ -2719,6 +2720,9 @@ void VarManager::FillPair(T1 const& t1, T2 const& t2, float* values)
27192720
m2 = o2::constants::physics::MassMuon;
27202721
}
27212722

2723+
values[kCharge] = t1.sign() + t2.sign();
2724+
values[kCharge1] = t1.sign();
2725+
values[kCharge2] = t2.sign();
27222726
ROOT::Math::PtEtaPhiMVector v1(t1.pt(), t1.eta(), t1.phi(), m1);
27232727
ROOT::Math::PtEtaPhiMVector v2(t2.pt(), t2.eta(), t2.phi(), m2);
27242728
ROOT::Math::PtEtaPhiMVector v12 = v1 + v2;
@@ -3154,8 +3158,8 @@ void VarManager::FillPairME(T1 const& t1, T2 const& t2, float* values)
31543158
}
31553159
}
31563160

3157-
template <typename T1, typename T2>
3158-
void VarManager::FillPairMC(T1 const& t1, T2 const& t2, float* values, PairCandidateType pairType)
3161+
template <int pairType, typename T1, typename T2>
3162+
void VarManager::FillPairMC(T1 const& t1, T2 const& t2, float* values)
31593163
{
31603164
if (!values) {
31613165
values = fgValues;
@@ -3173,6 +3177,11 @@ void VarManager::FillPairMC(T1 const& t1, T2 const& t2, float* values, PairCandi
31733177
m2 = o2::constants::physics::MassPionCharged;
31743178
}
31753179

3180+
if (pairType == kDecayToKPi) {
3181+
m1 = o2::constants::physics::MassKaonCharged;
3182+
m2 = o2::constants::physics::MassPionCharged;
3183+
}
3184+
31763185
if (pairType == kElectronMuon) {
31773186
m2 = o2::constants::physics::MassMuon;
31783187
}
@@ -3181,11 +3190,11 @@ void VarManager::FillPairMC(T1 const& t1, T2 const& t2, float* values, PairCandi
31813190
ROOT::Math::PtEtaPhiMVector v1(t1.pt(), t1.eta(), t1.phi(), m1);
31823191
ROOT::Math::PtEtaPhiMVector v2(t2.pt(), t2.eta(), t2.phi(), m2);
31833192
ROOT::Math::PtEtaPhiMVector v12 = v1 + v2;
3184-
values[kMass] = v12.M();
3185-
values[kPt] = v12.Pt();
3186-
values[kEta] = v12.Eta();
3187-
values[kPhi] = v12.Phi();
3188-
values[kRap] = -v12.Rapidity();
3193+
values[kMCMass] = v12.M();
3194+
values[kMCPt] = v12.Pt();
3195+
values[kMCEta] = v12.Eta();
3196+
values[kMCPhi] = v12.Phi();
3197+
values[kMCY] = -v12.Rapidity();
31893198
}
31903199

31913200
template <typename T1, typename T2, typename T3>

PWGDQ/Tasks/dqEfficiency.cxx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -942,7 +942,7 @@ struct AnalysisSameEventPairing {
942942
checked = sig.CheckSignal(false, t1, t2);
943943
}
944944
if (checked) {
945-
VarManager::FillPairMC(t1, t2);
945+
VarManager::FillPairMC<VarManager::kDecayToEE>(t1, t2);
946946
fHistMan->FillHistClass(Form("MCTruthGenPair_%s", sig.GetName()), VarManager::fgValues);
947947
}
948948
}

PWGDQ/Tasks/dqEfficiency_withAssoc.cxx

Lines changed: 90 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -538,8 +538,11 @@ struct AnalysisTrackSelection {
538538
VarManager::ResetValues(0, VarManager::kNBarrelTrackVariables);
539539
// fill event information which might be needed in histograms/cuts that combine track and event properties
540540
VarManager::FillEvent<TEventFillMap>(event);
541-
auto eventMC = event.reducedMCevent();
542-
VarManager::FillEvent<VarManager::ObjTypes::ReducedEventMC>(eventMC);
541+
ReducedMCEvent* eventMC = nullptr;
542+
if (event.has_reducedMCevent()) {
543+
auto eventMC = event.reducedMCevent();
544+
VarManager::FillEvent<VarManager::ObjTypes::ReducedEventMC>(eventMC);
545+
}
543546

544547
auto track = assoc.template reducedtrack_as<TTracks>();
545548
VarManager::FillTrack<TTrackFillMap>(track);
@@ -550,7 +553,9 @@ struct AnalysisTrackSelection {
550553
if (track.has_reducedMCTrack()) {
551554
auto trackMC = track.reducedMCTrack();
552555
auto eventMCfromTrack = trackMC.reducedMCevent();
553-
isCorrectAssoc = (eventMCfromTrack.globalIndex() == eventMC.globalIndex());
556+
if (eventMC != nullptr) {
557+
isCorrectAssoc = (eventMCfromTrack.globalIndex() == eventMC->globalIndex());
558+
}
554559
VarManager::FillTrackMC(tracksMC, trackMC);
555560
}
556561

@@ -1970,7 +1975,7 @@ struct AnalysisSameEventPairing {
19701975
continue;
19711976
}
19721977
if (sig->CheckSignal(true, t1_raw, t2_raw)) {
1973-
VarManager::FillPairMC(t1, t2);
1978+
VarManager::FillPairMC<VarManager::kDecayToEE>(t1, t2);
19741979
fHistMan->FillHistClass(Form("MCTruthGenPair_%s", sig->GetName()), VarManager::fgValues);
19751980
}
19761981
} // end loop over MC signals
@@ -2052,11 +2057,13 @@ struct AnalysisAsymmetricPairing {
20522057
Configurable<uint32_t> fConfigLegCFilterMask{"cfgLegCFilterMask", 0, "Filter mask corresponding to cuts in event-selection"};
20532058
Configurable<string> fConfigCommonTrackCuts{"cfgCommonTrackCuts", "", "Comma separated list of cuts to be applied to all legs"};
20542059
Configurable<string> fConfigPairCuts{"cfgPairCuts", "", "Comma separated list of pair cuts"};
2060+
Configurable<string> fConfigPairCutsJSON{"cfgPairCutsJSON", "", "Additional list of pair cuts in JSON format"};
20552061
Configurable<bool> fConfigSkipAmbiguousIdCombinations{"cfgSkipAmbiguousIdCombinations", true, "Choose whether to skip pairs/triples which pass a stricter combination of cuts, e.g. KKPi triplets for D+ -> KPiPi"};
20562062

20572063
Configurable<std::string> fConfigHistogramSubgroups{"cfgAsymmetricPairingHistogramsSubgroups", "barrel,vertexing", "Comma separated list of asymmetric-pairing histogram subgroups"};
20582064
Configurable<bool> fConfigSameSignHistograms{"cfgSameSignHistograms", false, "Include same sign pair histograms for 2-prong decays"};
20592065
// Configurable<bool> fConfigAmbiguousHistograms{"cfgAmbiguousHistograms", false, "Include separate histograms for pairs/triplets with ambiguous tracks"};
2066+
Configurable<bool> fConfigReflectedHistograms{"cfgReflectedHistograms", false, "Include separate histograms for pairs which are reflections of previously counted pairs"};
20602067
Configurable<bool> fConfigQA{"cfgQA", false, "If true, fill QA histograms"};
20612068
Configurable<std::string> fConfigAddJSONHistograms{"cfgAddJSONHistograms", "", "Histograms in JSON format"};
20622069

@@ -2080,7 +2087,8 @@ struct AnalysisAsymmetricPairing {
20802087

20812088
std::map<int, std::vector<TString>> fTrackHistNames;
20822089
std::map<int, std::vector<TString>> fBarrelHistNamesMCmatched;
2083-
std::vector<AnalysisCompositeCut> fPairCuts;
2090+
std::vector<AnalysisCompositeCut*> fPairCuts;
2091+
int fNPairHistPrefixes;
20842092

20852093
std::vector<MCSignal> fRecMCSignals;
20862094
std::vector<MCSignal> fGenMCSignals;
@@ -2109,6 +2117,9 @@ struct AnalysisAsymmetricPairing {
21092117
Partition<soa::Join<aod::ReducedTracksAssoc, aod::BarrelTrackCuts>> legBCandidateAssocs = (o2::aod::dqanalysisflags::isBarrelSelected & fConfigLegBFilterMask) > static_cast<uint32_t>(0);
21102118
Partition<soa::Join<aod::ReducedTracksAssoc, aod::BarrelTrackCuts>> legCCandidateAssocs = (o2::aod::dqanalysisflags::isBarrelSelected & fConfigLegCFilterMask) > static_cast<uint32_t>(0);
21112119

2120+
// Map to track how many times a pair of tracks has been encountered
2121+
std::map<std::pair<int32_t, int32_t>, int8_t> fPairCount;
2122+
21122123
void init(o2::framework::InitContext& context)
21132124
{
21142125
if (context.mOptions.get<bool>("processDummy")) {
@@ -2129,7 +2140,16 @@ struct AnalysisAsymmetricPairing {
21292140
if (!cutNamesStr.IsNull()) {
21302141
std::unique_ptr<TObjArray> objArray(cutNamesStr.Tokenize(","));
21312142
for (int icut = 0; icut < objArray->GetEntries(); ++icut) {
2132-
fPairCuts.push_back(*dqcuts::GetCompositeCut(objArray->At(icut)->GetName()));
2143+
fPairCuts.push_back(dqcuts::GetCompositeCut(objArray->At(icut)->GetName()));
2144+
}
2145+
}
2146+
// Extra pair cuts via JSON
2147+
TString addPairCutsStr = fConfigPairCutsJSON.value;
2148+
if (addPairCutsStr != "") {
2149+
std::vector<AnalysisCut*> addPairCuts = dqcuts::GetCutsFromJSON(addPairCutsStr.Data());
2150+
for (auto& t : addPairCuts) {
2151+
fPairCuts.push_back((AnalysisCompositeCut*)t);
2152+
cutNamesStr += Form(",%s", t->GetName());
21332153
}
21342154
}
21352155

@@ -2148,6 +2168,15 @@ struct AnalysisAsymmetricPairing {
21482168
string tempCuts;
21492169
getTaskOptionValue<string>(context, "analysis-track-selection", "cfgTrackCuts", tempCuts, false);
21502170
TString tempCutsStr = tempCuts;
2171+
// check also the cuts added via JSON and add them to the string of cuts
2172+
getTaskOptionValue<string>(context, "analysis-track-selection", "cfgBarrelTrackCutsJSON", tempCuts, false);
2173+
TString addTrackCutsStr = tempCuts;
2174+
if (addTrackCutsStr != "") {
2175+
std::vector<AnalysisCut*> addTrackCuts = dqcuts::GetCutsFromJSON(addTrackCutsStr.Data());
2176+
for (auto& t : addTrackCuts) {
2177+
tempCutsStr += Form(",%s", t->GetName());
2178+
}
2179+
}
21512180
std::unique_ptr<TObjArray> objArray(tempCutsStr.Tokenize(","));
21522181
// Get the common leg cuts
21532182
int commonCutIdx;
@@ -2306,7 +2335,7 @@ struct AnalysisAsymmetricPairing {
23062335
pairHistPrefixes.push_back("PairsBarrelSEPP");
23072336
pairHistPrefixes.push_back("PairsBarrelSEMM");
23082337
}
2309-
int fNPairHistPrefixes = pairHistPrefixes.size();
2338+
fNPairHistPrefixes = pairHistPrefixes.size();
23102339

23112340
for (int iPrefix = 0; iPrefix < fNPairHistPrefixes; ++iPrefix) {
23122341
names.push_back(Form("%s_%s", pairHistPrefixes[iPrefix].Data(), legsStr.Data()));
@@ -2318,6 +2347,12 @@ struct AnalysisAsymmetricPairing {
23182347
histNames += Form("%s;", names[fNPairHistPrefixes + iPrefix].Data());
23192348
}
23202349
}
2350+
if (fConfigReflectedHistograms.value) {
2351+
for (int iPrefix = 0; iPrefix < fNPairHistPrefixes; ++iPrefix) {
2352+
names.push_back(Form("%s_reflected_%s", pairHistPrefixes[iPrefix].Data(), legsStr.Data()));
2353+
histNames += Form("%s;", names[(1 + fConfigQA.value) * fNPairHistPrefixes + iPrefix].Data());
2354+
}
2355+
}
23212356
fTrackHistNames[icut] = names;
23222357

23232358
std::unique_ptr<TObjArray> objArrayCommon(commonNamesStr.Tokenize(","));
@@ -2361,6 +2396,12 @@ struct AnalysisAsymmetricPairing {
23612396
names.push_back(Form("%s_%s_%s", pairHistPrefixes[iPrefix].Data(), legsStr.Data(), sig.GetName()));
23622397
histNames += Form("%s;", names[iPrefix].Data());
23632398
}
2399+
if (fConfigReflectedHistograms.value) {
2400+
for (int iPrefix = 0; iPrefix < fNPairHistPrefixes; ++iPrefix) {
2401+
names.push_back(Form("%s_reflected_%s_%s", pairHistPrefixes[iPrefix].Data(), legsStr.Data(), sig.GetName()));
2402+
histNames += Form("%s;", names[fNPairHistPrefixes + iPrefix].Data());
2403+
}
2404+
}
23642405
fBarrelHistNamesMCmatched[offset + icut] = names;
23652406

23662407
for (int iCommonCut = 0; iCommonCut < fNCommonTrackCuts; ++iCommonCut) {
@@ -2489,6 +2530,8 @@ struct AnalysisAsymmetricPairing {
24892530
template <bool TTwoProngFitter, int TPairType, uint32_t TEventFillMap, uint32_t TTrackFillMap, typename TEvents, typename TTrackAssocs, typename TTracks>
24902531
void runAsymmetricPairing(TEvents const& events, Preslice<TTrackAssocs>& preslice, TTrackAssocs const& /*assocs*/, TTracks const& /*tracks*/, ReducedMCEvents const& /*mcEvents*/, ReducedMCTracks const& /*mcTracks*/)
24912532
{
2533+
fPairCount.clear();
2534+
24922535
if (events.size() > 0) { // Additional protection to avoid crashing of events.begin().runNumber()
24932536
if (fCurrentRun != events.begin().runNumber()) {
24942537
initParamsFromCCDB(events.begin().timestamp(), false);
@@ -2558,6 +2601,18 @@ struct AnalysisAsymmetricPairing {
25582601
continue;
25592602
}
25602603

2604+
bool isReflected = false;
2605+
std::pair<int32_t, int32_t> trackIds(t1.globalIndex(), t2.globalIndex());
2606+
if (fPairCount.find(trackIds) != fPairCount.end()) {
2607+
// Double counting is possible due to track-collision ambiguity. Skip pairs which were counted before
2608+
fPairCount[trackIds] += 1;
2609+
continue;
2610+
}
2611+
if (fPairCount.find(std::pair(trackIds.second, trackIds.first)) != fPairCount.end()) {
2612+
isReflected = true;
2613+
}
2614+
fPairCount[trackIds] += 1;
2615+
25612616
sign1 = t1.sign();
25622617
sign2 = t2.sign();
25632618
// store the ambiguity number of the two dilepton legs in the last 4 digits of the two-track filter
@@ -2573,6 +2628,7 @@ struct AnalysisAsymmetricPairing {
25732628
mcDecision = 0;
25742629
for (auto sig = fRecMCSignals.begin(); sig != fRecMCSignals.end(); sig++, isig++) {
25752630
if (t1.has_reducedMCTrack() && t2.has_reducedMCTrack()) {
2631+
VarManager::FillPairMC<TPairType>(t1.reducedMCTrack(), t2.reducedMCTrack());
25762632
if ((*sig).CheckSignal(true, t1.reducedMCTrack(), t2.reducedMCTrack())) {
25772633
mcDecision |= static_cast<uint32_t>(1) << isig;
25782634
}
@@ -2592,18 +2648,27 @@ struct AnalysisAsymmetricPairing {
25922648
if (sign1 * sign2 < 0) { // +- pairs
25932649
fHistMan->FillHistClass(histNames[icut][0].Data(), VarManager::fgValues); // reconstructed, unmatched
25942650
if (isAmbi && fConfigQA) {
2595-
fHistMan->FillHistClass(histNames[icut][3].Data(), VarManager::fgValues);
2651+
fHistMan->FillHistClass(histNames[icut][fNPairHistPrefixes].Data(), VarManager::fgValues);
2652+
}
2653+
if (isReflected && fConfigReflectedHistograms.value) {
2654+
fHistMan->FillHistClass(histNames[icut][fNPairHistPrefixes * (1 + fConfigQA.value)].Data(), VarManager::fgValues);
25962655
}
25972656
} else if (fConfigSameSignHistograms.value) {
25982657
if (sign1 > 0) { // ++ pairs
25992658
fHistMan->FillHistClass(histNames[icut][1].Data(), VarManager::fgValues);
26002659
if (isAmbi && fConfigQA) {
2601-
fHistMan->FillHistClass(histNames[icut][4].Data(), VarManager::fgValues);
2660+
fHistMan->FillHistClass(histNames[icut][fNPairHistPrefixes + 1].Data(), VarManager::fgValues);
2661+
}
2662+
if (isReflected && fConfigReflectedHistograms.value) {
2663+
fHistMan->FillHistClass(histNames[icut][fNPairHistPrefixes * (1 + fConfigQA.value) + 1].Data(), VarManager::fgValues);
26022664
}
26032665
} else { // -- pairs
26042666
fHistMan->FillHistClass(histNames[icut][2].Data(), VarManager::fgValues);
26052667
if (isAmbi && fConfigQA) {
2606-
fHistMan->FillHistClass(histNames[icut][5].Data(), VarManager::fgValues);
2668+
fHistMan->FillHistClass(histNames[icut][fNPairHistPrefixes + 2].Data(), VarManager::fgValues);
2669+
}
2670+
if (isReflected && fConfigReflectedHistograms) {
2671+
fHistMan->FillHistClass(histNames[icut][fNPairHistPrefixes * (1 + fConfigQA.value) + 2].Data(), VarManager::fgValues);
26072672
}
26082673
}
26092674
}
@@ -2612,11 +2677,20 @@ struct AnalysisAsymmetricPairing {
26122677
if (mcDecision & (static_cast<uint32_t>(1) << isig)) {
26132678
if (sign1 * sign2 < 0) {
26142679
fHistMan->FillHistClass(histNamesMC[offset + icut][0].Data(), VarManager::fgValues);
2680+
if (isReflected && fConfigReflectedHistograms.value) {
2681+
fHistMan->FillHistClass(histNamesMC[offset + icut][fNPairHistPrefixes].Data(), VarManager::fgValues);
2682+
}
26152683
} else if (fConfigSameSignHistograms.value) {
26162684
if (sign1 > 0) {
26172685
fHistMan->FillHistClass(histNamesMC[offset + icut][1].Data(), VarManager::fgValues);
2686+
if (isReflected && fConfigReflectedHistograms.value) {
2687+
fHistMan->FillHistClass(histNamesMC[offset + icut][fNPairHistPrefixes + 1].Data(), VarManager::fgValues);
2688+
}
26182689
} else {
26192690
fHistMan->FillHistClass(histNamesMC[offset + icut][2].Data(), VarManager::fgValues);
2691+
if (isReflected && fConfigReflectedHistograms.value) {
2692+
fHistMan->FillHistClass(histNamesMC[offset + icut][fNPairHistPrefixes + 2].Data(), VarManager::fgValues);
2693+
}
26202694
}
26212695
}
26222696
}
@@ -2648,9 +2722,9 @@ struct AnalysisAsymmetricPairing {
26482722
}
26492723
}
26502724
} // end loop (common cuts)
2651-
for (unsigned int iPairCut = 0; iPairCut < fPairCuts.size(); iPairCut++) {
2652-
AnalysisCompositeCut cut = fPairCuts.at(iPairCut);
2653-
if (!(cut.IsSelected(VarManager::fgValues))) // apply pair cuts
2725+
int iPairCut = 0;
2726+
for (auto cut = fPairCuts.begin(); cut != fPairCuts.end(); cut++, iPairCut++) {
2727+
if (!((*cut)->IsSelected(VarManager::fgValues))) // apply pair cuts
26542728
continue;
26552729
pairFilter |= (static_cast<uint32_t>(1) << iPairCut);
26562730
// Histograms with pair cuts
@@ -2881,11 +2955,10 @@ struct AnalysisAsymmetricPairing {
28812955
} // end loop (MC signals)
28822956
}
28832957
} // end loop (common cuts)
2884-
for (unsigned int iPairCut = 0; iPairCut < fPairCuts.size(); iPairCut++) {
2885-
AnalysisCompositeCut cut = fPairCuts.at(iPairCut);
2886-
if (!(cut.IsSelected(VarManager::fgValues))) { // apply pair cuts
2958+
int iPairCut = 0;
2959+
for (auto cut = fPairCuts.begin(); cut != fPairCuts.end(); cut++, iPairCut++) {
2960+
if (!((*cut)->IsSelected(VarManager::fgValues))) // apply pair cuts
28872961
continue;
2888-
}
28892962
// Histograms with pair cuts
28902963
fHistMan->FillHistClass(histNames[fNLegCuts * (fNCommonTrackCuts + 1) + icut * fNPairCuts + iPairCut][0].Data(), VarManager::fgValues);
28912964
for (unsigned int isig = 0; isig < fRecMCSignals.size(); isig++) { // loop over MC signals

0 commit comments

Comments
 (0)