Skip to content

Commit 33a81ff

Browse files
authored
Merge branch 'AliceO2Group:master' into master
2 parents acfabc2 + d5fa083 commit 33a81ff

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

47 files changed

+3290
-1500
lines changed

Common/TableProducer/fwdtrackPropagation.cxx

Lines changed: 27 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -61,15 +61,17 @@ struct FwdTrackPropagation {
6161
Configurable<float> maxEtaSA{"maxEtaSA", -2.5, "max. eta acceptance for MCH-MID"};
6262
Configurable<float> minEtaGL{"minEtaGL", -3.6, "min. eta acceptance for MFT-MCH-MID"};
6363
Configurable<float> maxEtaGL{"maxEtaGL", -2.5, "max. eta acceptance for MFT-MCH-MID"};
64+
Configurable<float> minRabsGL{"minRabsGL", 27.6, "min. R at absorber end for global muon (min. eta = -3.6)"}; // std::tan(2.f * std::atan(std::exp(- -3.6)) ) * -505.
6465
Configurable<float> minRabs{"minRabs", 17.6, "min. R at absorber end"};
6566
Configurable<float> midRabs{"midRabs", 26.5, "middle R at absorber end for pDCA cut"};
6667
Configurable<float> maxRabs{"maxRabs", 89.5, "max. R at absorber end"};
68+
Configurable<float> maxDCAxy{"maxDCAxy", 1e+10, "max. DCAxy for global muons"};
6769
Configurable<float> maxPDCAforLargeR{"maxPDCAforLargeR", 324.f, "max. pDCA for large R at absorber end"};
6870
Configurable<float> maxPDCAforSmallR{"maxPDCAforSmallR", 594.f, "max. pDCA for small R at absorber end"};
6971
Configurable<float> maxMatchingChi2MCHMFT{"maxMatchingChi2MCHMFT", 50.f, "max. chi2 for MCH-MFT matching"};
70-
Configurable<float> maxChi2{"maxChi2", 1e+6, "max. chi2 for muon tracking"};
71-
Configurable<bool> refitGlobalMuon{"refitGlobalMuon", false, "flag to refit global muon"};
72-
Configurable<bool> applyEtaCutToSAinGL{"applyEtaCutToSAinGL", false, "flag to apply eta cut to samuon in global muon"};
72+
Configurable<float> maxChi2SA{"maxChi2SA", 1e+6, "max. chi2 for standalone muon"};
73+
Configurable<float> maxChi2GL{"maxChi2GL", 50.f, "max. chi2 for global muon"};
74+
Configurable<bool> refitGlobalMuon{"refitGlobalMuon", true, "flag to refit global muon"};
7375

7476
HistogramRegistry fRegistry{"fRegistry"};
7577
static constexpr std::string_view muon_types[5] = {"MFTMCHMID/", "MFTMCHMIDOtherMatch/", "MFTMCH/", "MCHMID/", "MCH/"};
@@ -138,9 +140,9 @@ struct FwdTrackPropagation {
138140
fRegistry.add("MFTMCHMID/hChi2MatchMCHMID", "chi2 match MCH-MID;chi2", kTH1F, {{100, 0.0f, 100}}, false);
139141
fRegistry.add("MFTMCHMID/hChi2MatchMCHMFT", "chi2 match MCH-MFT;chi2", kTH1F, {{100, 0.0f, 100}}, false);
140142
fRegistry.add("MFTMCHMID/hMatchScoreMCHMFT", "match score MCH-MFT;score", kTH1F, {{100, 0.0f, 100}}, false);
141-
fRegistry.add("MFTMCHMID/hDCAxy2D", "DCA x vs. y;DCA_{x} (cm);DCA_{y} (cm)", kTH2F, {{200, -0.1, 0.1}, {200, -0.1, +0.1}}, false);
143+
fRegistry.add("MFTMCHMID/hDCAxy2D", "DCA x vs. y;DCA_{x} (cm);DCA_{y} (cm)", kTH2F, {{200, -0.5, 0.5}, {200, -0.5, +0.5}}, false);
142144
fRegistry.add("MFTMCHMID/hDCAxy2DinSigma", "DCA x vs. y in sigma;DCA_{x} (#sigma);DCA_{y} (#sigma)", kTH2F, {{200, -10, 10}, {200, -10, +10}}, false);
143-
fRegistry.add("MFTMCHMID/hDCAxy", "DCAxy;DCA_{xy} (cm);", kTH1F, {{100, 0, 0.1}}, false);
145+
fRegistry.add("MFTMCHMID/hDCAxy", "DCAxy;DCA_{xy} (cm);", kTH1F, {{100, 0, 1}}, false);
144146
fRegistry.add("MFTMCHMID/hDCAxyinSigma", "DCAxy in sigma;DCA_{xy} (#sigma);", kTH1F, {{100, 0, 10}}, false);
145147
fRegistry.addClone("MFTMCHMID/", "MCHMID/");
146148
fRegistry.add("MFTMCHMID/hDCAxResolutionvsPt", "DCA_{x} vs. p_{T};p_{T} (GeV/c);DCA_{x} resolution (#mum);", kTH2F, {{100, 0, 10.f}, {500, 0, 500}}, false);
@@ -149,62 +151,55 @@ struct FwdTrackPropagation {
149151
fRegistry.add("MCHMID/hDCAyResolutionvsPt", "DCA_{y} vs. p_{T};p_{T} (GeV/c);DCA_{y} resolution (#mum);", kTH2F, {{100, 0, 10.f}, {500, 0, 5e+5}}, false);
150152
}
151153

152-
bool isSelected(const float pt, const float eta, const float rAtAbsorberEnd, const float pDCA, const float chi2, const uint8_t trackType, const float etaMatchedMCHMID)
154+
bool isSelected(const float pt, const float eta, const float rAtAbsorberEnd, const float pDCA, const float chi2, const uint8_t trackType, const float dcaXY)
153155
{
154156
if (pt < minPt || maxPt < pt) {
155157
return false;
156158
}
157-
158159
if (rAtAbsorberEnd < minRabs || maxRabs < rAtAbsorberEnd) {
159160
return false;
160161
}
161-
162-
if (chi2 < 0.f || maxChi2 < chi2) {
162+
if (rAtAbsorberEnd < midRabs ? pDCA > maxPDCAforSmallR : pDCA > maxPDCAforLargeR) {
163163
return false;
164164
}
165165

166166
if (trackType == static_cast<uint8_t>(o2::aod::fwdtrack::ForwardTrackTypeEnum::GlobalMuonTrack)) {
167167
if (eta < minEtaGL || maxEtaGL < eta) {
168168
return false;
169169
}
170-
if (applyEtaCutToSAinGL && (etaMatchedMCHMID < minEtaSA || maxEtaSA < etaMatchedMCHMID)) {
170+
if (maxDCAxy < dcaXY) {
171+
return false;
172+
}
173+
if (chi2 < 0.f || maxChi2GL < chi2) {
174+
return false;
175+
}
176+
if (rAtAbsorberEnd < minRabsGL || maxRabs < rAtAbsorberEnd) {
171177
return false;
172178
}
173179
} else if (trackType == static_cast<uint8_t>(o2::aod::fwdtrack::ForwardTrackTypeEnum::MuonStandaloneTrack)) {
174180
if (eta < minEtaSA || maxEtaSA < eta) {
175181
return false;
176182
}
183+
if (chi2 < 0.f || maxChi2SA < chi2) {
184+
return false;
185+
}
177186
} else {
178187
return false;
179188
}
180189

181-
if (rAtAbsorberEnd < midRabs ? pDCA > maxPDCAforSmallR : pDCA > maxPDCAforLargeR) {
182-
return false;
183-
}
184190
return true;
185191
}
186192

187193
template <typename TCollision, typename TFwdTrack, typename TFwdTracks, typename TMFTTracks>
188-
void fillFwdTrackTable(TCollision const& collision, TFwdTrack fwdtrack, TFwdTracks const& fwdtracks, TMFTTracks const&, const bool isAmbiguous)
194+
void fillFwdTrackTable(TCollision const& collision, TFwdTrack fwdtrack, TFwdTracks const&, TMFTTracks const&, const bool isAmbiguous)
189195
{
190-
if (fwdtrack.trackType() == o2::aod::fwdtrack::ForwardTrackTypeEnum::GlobalMuonTrack) {
191-
std::map<int64_t, float> map_chi2MFTMCH;
192-
const auto& matchedGlobalTracks = fwdtracks.sliceBy(perMFTTrack, fwdtrack.matchMFTTrackId()); // MFT-MCH-MID or MFT-MCH
193-
for (const auto& matchedtrack : matchedGlobalTracks) {
194-
if (matchedtrack.trackType() == o2::aod::fwdtrack::ForwardTrackTypeEnum::GlobalMuonTrack) {
195-
map_chi2MFTMCH[matchedtrack.globalIndex()] = matchedtrack.chi2MatchMCHMFT();
196-
}
197-
}
198-
if (map_chi2MFTMCH.begin()->first != fwdtrack.globalIndex()) { // search for minimum chi2
199-
map_chi2MFTMCH.clear();
200-
return;
201-
}
202-
map_chi2MFTMCH.clear();
196+
if (fwdtrack.trackType() == o2::aod::fwdtrack::ForwardTrackTypeEnum::GlobalMuonTrack && (fwdtrack.chi2MatchMCHMFT() > maxMatchingChi2MCHMFT || fwdtrack.chi2() > maxChi2GL)) {
197+
return;
198+
} // Users have to decide the best match between MFT and MCH-MID at analysis level. The same global muon is repeatedly stored.
203199

204-
if (fwdtrack.chi2MatchMCHMFT() > maxMatchingChi2MCHMFT) {
205-
return;
206-
}
207-
} // reduce useless propagation
200+
if (fwdtrack.chi2MatchMCHMID() < 0.f) { // this should never happen. only for protection.
201+
return;
202+
}
208203

209204
o2::dataformats::GlobalFwdTrack propmuonAtPV = propagateMuon(fwdtrack, collision, propagationPoint::kToVertex);
210205
o2::dataformats::GlobalFwdTrack propmuonAtDCA = propagateMuon(fwdtrack, collision, propagationPoint::kToDCA);
@@ -240,9 +235,6 @@ struct FwdTrackPropagation {
240235

241236
if (fwdtrack.trackType() == o2::aod::fwdtrack::ForwardTrackTypeEnum::GlobalMuonTrack) {
242237
const auto& mchtrack = fwdtrack.template matchMCHTrack_as<TFwdTracks>(); // MCH-MID
243-
// etaMatchedMCHMID = mchtrack.eta();
244-
// phiMatchedMCHMID = mchtrack.phi();
245-
// o2::math_utils::bringTo02Pi(phiMatchedMCHMID);
246238
o2::dataformats::GlobalFwdTrack propmuonAtPV_Matched = propagateMuon(mchtrack, collision, propagationPoint::kToVertex);
247239
etaMatchedMCHMID = propmuonAtPV_Matched.getEta();
248240
phiMatchedMCHMID = propmuonAtPV_Matched.getPhi();
@@ -276,7 +268,7 @@ struct FwdTrackPropagation {
276268
return;
277269
}
278270

279-
if (!isSelected(pt, eta, rAtAbsorberEnd, pDCA, fwdtrack.chi2(), fwdtrack.trackType(), etaMatchedMCHMID)) {
271+
if (!isSelected(pt, eta, rAtAbsorberEnd, pDCA, fwdtrack.chi2(), fwdtrack.trackType(), dcaXY)) {
280272
return;
281273
}
282274

EventFiltering/PWGEM/HeavyNeutralMesonFilter.cxx

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -208,6 +208,12 @@ struct HeavyNeutralMesonFilter {
208208
false,
209209
"Evt sel: check for offline selection"};
210210

211+
Configurable<bool> ConfDoEMCShift{"ConfDoEMCShift", false, "Apply SM-wise shift in eta and phi to EMCal clusters to align with TPC tracks"};
212+
Configurable<std::vector<float>> ConfEMCEtaShift{"ConfEMCEtaShift", {0.f}, "values for SM-wise shift in eta to be added to EMCal clusters to align with TPC tracks"};
213+
Configurable<std::vector<float>> ConfEMCPhiShift{"ConfEMCPhiShift", {0.f}, "values for SM-wise shift in phi to be added to EMCal clusters to align with TPC tracks"};
214+
std::array<float, 20> EMCEtaShift = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
215+
std::array<float, 20> EMCPhiShift = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
216+
211217
template <typename T>
212218
bool isSelectedTrack(T const& track, CFTrigger::FemtoPartners partSpecies)
213219
{
@@ -760,6 +766,14 @@ struct HeavyNeutralMesonFilter {
760766
mHistManager.add("etaprimep/fetaprimePtVskstar_EMC", "Same Event distribution", HistType::kTH1F, {{8000, 0, 8}});
761767
mHistManager.add("etaprimep/fProtonPtVskstar_EMC", "Same Event distribution", HistType::kTH1F, {{8000, 0, 8}});
762768
mHistManager.add("etaprimep/fAntiProtonPtVskstar_EMC", "Same Event distribution", HistType::kTH1F, {{8000, 0, 8}});
769+
770+
if (ConfDoEMCShift.value) {
771+
for (unsigned short iSM = 0; iSM < 20; iSM++) {
772+
EMCEtaShift[iSM] = ConfEMCEtaShift.value[iSM];
773+
EMCPhiShift[iSM] = ConfEMCPhiShift.value[iSM];
774+
LOG(info) << "SM-wise shift in eta/phi for SM " << iSM << ": " << EMCEtaShift[iSM] << " / " << EMCPhiShift[iSM];
775+
}
776+
}
763777
}
764778
Preslice<aod::V0PhotonsKF> perCollision_pcm = aod::v0photonkf::collisionId;
765779
Preslice<aod::SkimEMCClusters> perCollision_emc = aod::skimmedcluster::collisionId;
@@ -817,10 +831,11 @@ struct HeavyNeutralMesonFilter {
817831
mHistManager.fill(HIST("Event/nClustersVsV0s"), clustersInThisCollision.size(), v0sInThisCollision.size());
818832
mHistManager.fill(HIST("Event/nTracks"), tracksWithItsPid.size());
819833

820-
hnmutilities::reconstructGGs(clustersInThisCollision, v0sInThisCollision, vGGs);
834+
std::vector<hnmutilities::Photon> vGammas;
835+
hnmutilities::storeGammasInVector(clustersInThisCollision, v0sInThisCollision, vGammas, EMCEtaShift, EMCPhiShift);
836+
hnmutilities::reconstructGGs(vGammas, vGGs);
837+
vGammas.clear();
821838
processGGs(vGGs);
822-
// hnmutilities::reconstructHeavyNeutralMesons(tracks, vGGs, vHNMs);
823-
// processHNMs(vHNMs);
824839

825840
bool isProton = false;
826841
bool isDeuteron = false;

EventFiltering/PWGLF/nucleiFilter.cxx

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -121,12 +121,13 @@ struct nucleiFilter {
121121
struct : ConfigurableGroup {
122122
Configurable<double> d_bz_input{"trgH3L3Body.d_bz", -999, "bz field, -999 is automatic"};
123123
Configurable<float> minCosPA3body{"trgH3L3Body.minCosPA3body", 0.9995, "minCosPA3body"};
124-
Configurable<float> dcavtxdau{"trgH3L3Body.dcavtxdau", 0.04, "meen DCA among Daughters"};
124+
Configurable<float> dcavtxdau{"trgH3L3Body.dcavtxdau", 0.02, "meen DCA among Daughters"};
125125
Configurable<float> dcapiontopv{"trgH3L3Body.dcapiontopv", 0.05, "DCA Pion To PV"};
126126
Configurable<float> tofPIDNSigmaMin{"trgH3L3Body.tofPIDNSigmaMin", -5, "tofPIDNSigmaMin"};
127127
Configurable<float> tofPIDNSigmaMax{"trgH3L3Body.tofPIDNSigmaMax", 5, "tofPIDNSigmaMax"};
128128
Configurable<float> tpcPIDNSigmaCut{"trgH3L3Body.tpcPIDNSigmaCut", 5, "tpcPIDNSigmaCut"};
129129
Configurable<float> lifetimecut{"trgH3L3Body.lifetimecut", 40., "lifetimecut"};
130+
Configurable<float> minDaughtersEta{"trgH3L3Body.minDaughtersEta", 1.f, "minDaughtersEta"};
130131
Configurable<float> minProtonPt{"trgH3L3Body.minProtonPt", 0.3, "minProtonPt"};
131132
Configurable<float> maxProtonPt{"trgH3L3Body.maxProtonPt", 5, "maxProtonPt"};
132133
Configurable<float> minPionPt{"trgH3L3Body.minPionPt", 0.1, "minPionPt"};
@@ -136,7 +137,7 @@ struct nucleiFilter {
136137
Configurable<float> minDeuteronPUseTOF{"trgH3L3Body.minDeuteronPUseTOF", 1, "minDeuteronPt Enable TOF PID"};
137138
Configurable<float> h3LMassLowerlimit{"trgH3L3Body.h3LMassLowerlimit", 2.96, "Hypertriton mass lower limit"};
138139
Configurable<float> h3LMassUpperlimit{"trgH3L3Body.h3LMassUpperlimit", 3.04, "Hypertriton mass upper limit"};
139-
Configurable<float> minP3Body{"trgH3L3Body.minP3Body", 0.5, "min P3Body"};
140+
Configurable<float> minP3Body{"trgH3L3Body.minP3Body", 1.5, "min P3Body"};
140141
Configurable<int> mintpcNClsproton{"trgH3L3Body.mintpcNClsproton", 90, "min tpc Nclusters for proton"};
141142
Configurable<int> mintpcNClspion{"trgH3L3Body.mintpcNClspion", 70, "min tpc Nclusters for pion"};
142143
Configurable<int> mintpcNClsdeuteron{"trgH3L3Body.mintpcNClsdeuteron", 100, "min tpc Nclusters for deuteron"};
@@ -173,6 +174,8 @@ struct nucleiFilter {
173174
qaHists.add("fDeuTOFNsigma", "Deuteron TOF Nsigma distribution", HistType::kTH2F, {{1200, -6, 6, "#it{p} (GeV/#it{c})"}, {2000, -100, 100, "TOF n#sigma"}});
174175
qaHists.add("fBachDeuTOFNsigma", "Bachelor Deuteron TOF Nsigma distribution", HistType::kTH2F, {{1200, -6, 6, "#it{p} (GeV/#it{c})"}, {2000, -100, 100, "TOF n#sigma"}});
175176
qaHists.add("fH3LMassVsPt", "Hypertrion mass Vs pT", HistType::kTH2F, {{100, 0, 10, "#it{p}_{T} (GeV/#it{c})"}, {80, 2.96, 3.04, "Inv. Mass (GeV/c^{2})"}});
177+
qaHists.add("fH3LDcaVsPt", "DCA vs pT", HistType::kTH2F, {{100, 0, 10, "#it{p}_{T} (GeV/#it{c})"}, {100, 0, 0.05, "DCA (cm)"}});
178+
qaHists.add("fH3LCosPAVsPt", "CosPA vs pT", HistType::kTH2F, {{100, 0, 10, "#it{p}_{T} (GeV/#it{c})"}, {100, 0.999, 1.0, "CosPA"}});
176179
qaHists.add("fExtremeIonisationITS", "ITS clusters for extreme ionisation trigger", HistType::kTH3F, {{4, 3.5, 7.5, "Number of ITS clusters"}, {150, 0, 15, "Average cluster size in ITS x cos#lambda"}, {100, 0.1, 10, "#it{p} (GeV/#it{c})"}});
177180

178181
for (int iN{0}; iN < nNuclei; ++iN) {
@@ -413,6 +416,10 @@ struct nucleiFilter {
413416
continue;
414417
}
415418

419+
if (std::abs(track0.eta()) > trgH3L3Body.minDaughtersEta || std::abs(track1.eta()) > trgH3L3Body.minDaughtersEta || std::abs(track2.eta()) > trgH3L3Body.minDaughtersEta) {
420+
continue;
421+
}
422+
416423
bool isProton = false, isPion = false, isAntiProton = false, isAntiPion = false;
417424
if (std::abs(track0.tpcNSigmaPr()) < std::abs(track0.tpcNSigmaPi())) {
418425
if (track0.p() >= trgH3L3Body.minProtonPt && track0.p() <= trgH3L3Body.maxProtonPt) {
@@ -500,7 +507,8 @@ struct nucleiFilter {
500507
continue;
501508
}
502509

503-
if (fitter3body.getChi2AtPCACandidate() > trgH3L3Body.dcavtxdau) {
510+
float dcaDaughters = fitter3body.getChi2AtPCACandidate();
511+
if (dcaDaughters > trgH3L3Body.dcavtxdau) {
504512
continue;
505513
}
506514

@@ -521,6 +529,8 @@ struct nucleiFilter {
521529
if (isProton && isAntiPion && std::abs(track1dca) >= trgH3L3Body.dcapiontopv) {
522530
qaHists.fill(HIST("fH3LMassVsPt"), pt3B, invmassH3L);
523531
qaHists.fill(HIST("fBachDeuTOFNsigma"), track2.p() * track2.sign(), tofNSigmaDeuteron);
532+
qaHists.fill(HIST("fH3LDcaVsPt"), pt3B, dcaDaughters);
533+
qaHists.fill(HIST("fH3LCosPAVsPt"), pt3B, vtxCosPA);
524534
keepEvent[3] = true;
525535
}
526536
}
@@ -529,6 +539,8 @@ struct nucleiFilter {
529539
if (isAntiProton && isPion && std::abs(track0dca) >= trgH3L3Body.dcapiontopv) {
530540
qaHists.fill(HIST("fH3LMassVsPt"), pt3B, invmassAntiH3L);
531541
qaHists.fill(HIST("fBachDeuTOFNsigma"), track2.p() * track2.sign(), tofNSigmaDeuteron);
542+
qaHists.fill(HIST("fH3LDcaVsPt"), pt3B, dcaDaughters);
543+
qaHists.fill(HIST("fH3LCosPAVsPt"), pt3B, vtxCosPA);
532544
keepEvent[3] = true;
533545
}
534546
}

EventFiltering/Zorro.cxx

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ void Zorro::populateExternalHists(int runNumber, TH2* ZorroHisto, TH2* ToiHisto)
113113
}
114114
if (!ToiHisto) {
115115
LOGF(info, "TOI histogram not set, creating a new one");
116-
ToiHisto = new TH2D("TOI", "TOI", 1, -0.5, 0.5, mTOIs.size(), -0.5, mTOIs.size() - 0.5);
116+
ToiHisto = new TH2D("TOI", "TOI", 1, -0.5, 0.5, mTOIs.size() * 2, -0.5, mTOIs.size() * 2 - 0.5);
117117
}
118118
// if it is the first run, initialize the histogram
119119
if (mRunNumberHistos.size() == 0) {
@@ -126,17 +126,22 @@ void Zorro::populateExternalHists(int runNumber, TH2* ZorroHisto, TH2* ToiHisto)
126126
ZorroHisto->GetYaxis()->SetBinLabel(i + 2 + mTOIs.size(), Form("%s scalers", mTOIs[i].data()));
127127
}
128128
// TOI histogram
129-
ToiHisto->SetBins(1, -0.5, 0.5, mTOIs.size(), -0.5, mTOIs.size() - 0.5);
129+
ToiHisto->SetBins(1, -0.5, 0.5, mTOIs.size() * 2, -0.5, mTOIs.size() * 2 - 0.5);
130130
ToiHisto->GetXaxis()->SetBinLabel(1, Form("%d", runNumber));
131131
for (size_t i{0}; i < mTOIs.size(); ++i) {
132-
ToiHisto->GetYaxis()->SetBinLabel(i + 1, mTOIs[i].data());
132+
ToiHisto->GetYaxis()->SetBinLabel(i * 2 + 1, mTOIs[i].data());
133+
ToiHisto->GetYaxis()->SetBinLabel(i * 2 + 2, Form("%s AnalysedTriggers", mTOIs[i].data()));
133134
}
134135
}
135136
if (mInspectedTVX) {
136137
ZorroHisto->Fill(Form("%d", runNumber), "inspected TVX", mInspectedTVX->GetBinContent(1));
137138
ZorroHisto->SetBinError(mRunNumberHistos.size() + 1, 1, mInspectedTVX->GetBinError(1));
138139
}
139140
if (mSelections) {
141+
mAnalysedTriggers = new TH1D("AnalysedTriggers", "", mSelections->GetNbinsX() - 2, -0.5, mSelections->GetNbinsX() - 2.5);
142+
for (int iBin{2}; iBin < mSelections->GetNbinsX(); ++iBin) { // Exclude first and last bins as they are total number of analysed and selected events, respectively
143+
mAnalysedTriggers->GetXaxis()->SetBinLabel(iBin - 1, mSelections->GetXaxis()->GetBinLabel(iBin));
144+
}
140145
for (size_t i{0}; i < mTOIs.size(); ++i) {
141146
int bin = findBin(mSelections, mTOIs[i]);
142147
ZorroHisto->Fill(Form("%d", runNumber), Form("%s selections", mTOIs[i].data()), mSelections->GetBinContent(bin));
@@ -248,6 +253,11 @@ bool Zorro::isSelected(uint64_t bcGlobalId, uint64_t tolerance, TH2* ToiHisto)
248253
if (mTOIidx[i] < 0) {
249254
continue;
250255
} else if (mLastResult.test(mTOIidx[i])) {
256+
if (ToiHisto && mAnalysedTriggers) {
257+
int binX = ToiHisto->GetXaxis()->FindBin(Form("%d", mRunNumber));
258+
int binY = ToiHisto->GetYaxis()->FindBin(Form("%s AnalysedTriggers", mTOIs[i].data()));
259+
ToiHisto->SetBinContent(binX, binY, mAnalysedTriggers->GetBinContent(mAnalysedTriggers->GetXaxis()->FindBin(mTOIs[i].data())));
260+
}
251261
mTOIcounts[i] += (lastSelectedIdx != mLastSelectedIdx); /// Avoid double counting
252262
if (mAnalysedTriggersOfInterest && lastSelectedIdx != mLastSelectedIdx) {
253263
mAnalysedTriggersOfInterest->Fill(i);

0 commit comments

Comments
 (0)