Skip to content

Commit f9e3578

Browse files
authored
[PWGEM/Dilepton] fix for global muon in createResolutionMap.cxx (#12803)
1 parent c680abd commit f9e3578

File tree

2 files changed

+33
-22
lines changed

2 files changed

+33
-22
lines changed

PWGEM/Dilepton/Tasks/createResolutionMap.cxx

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -82,8 +82,9 @@ struct CreateResolutionMap {
8282
ConfigurableAxis ConfPhiGenBins{"ConfPhiGenBins", {72, 0, 2.f * M_PI}, "gen. eta bins at forward rapidity for output histograms"};
8383

8484
ConfigurableAxis ConfRelDeltaPtBins{"ConfRelDeltaPtBins", {200, -1.f, +1.f}, "rel. dpt for output histograms"};
85-
ConfigurableAxis ConfDeltaEtaBins{"ConfDeltaEtaBins", {200, -0.2f, +0.2f}, "deta bins for output histograms"};
86-
ConfigurableAxis ConfDeltaPhiBins{"ConfDeltaPhiBins", {200, -0.2f, +0.2f}, "dphi bins for output histograms"};
85+
ConfigurableAxis ConfDeltaEtaCBBins{"ConfDeltaEtaCBBins", {200, -0.5f, +0.5f}, "deta bins for output histograms"};
86+
ConfigurableAxis ConfDeltaEtaFWDBins{"ConfDeltaEtaFWDBins", {200, -0.5f, +0.5f}, "deta bins for output histograms"};
87+
ConfigurableAxis ConfDeltaPhiBins{"ConfDeltaPhiBins", {200, -0.5f, +0.5f}, "dphi bins for output histograms"};
8788

8889
Configurable<bool> cfgFillTHnSparse{"cfgFillTHnSparse", true, "fill THnSparse for output"};
8990
Configurable<bool> cfgFillTH2{"cfgFillTH2", false, "fill TH2 for output"};
@@ -212,7 +213,8 @@ struct CreateResolutionMap {
212213
const AxisSpec axis_eta_fwd_gen{ConfEtaFWDGenBins, "#eta_{l}^{gen}"};
213214
const AxisSpec axis_phi_gen{ConfPhiGenBins, "#varphi_{l}^{gen} (rad.)"};
214215
const AxisSpec axis_dpt{ConfRelDeltaPtBins, "(p_{T,l}^{gen} - p_{T,l}^{rec})/p_{T,l}^{gen}"};
215-
const AxisSpec axis_deta{ConfDeltaEtaBins, "#eta_{l}^{gen} - #eta_{l}^{rec}"};
216+
const AxisSpec axis_deta_cb{ConfDeltaEtaCBBins, "#eta_{l}^{gen} - #eta_{l}^{rec}"};
217+
const AxisSpec axis_deta_fwd{ConfDeltaEtaFWDBins, "#eta_{l}^{gen} - #eta_{l}^{rec}"};
216218
const AxisSpec axis_dphi{ConfDeltaPhiBins, "#varphi_{l}^{gen} - #varphi_{l}^{rec} (rad.)"};
217219
const AxisSpec axis_charge_gen{3, -1.5, +1.5, "true sign"};
218220

@@ -222,20 +224,26 @@ struct CreateResolutionMap {
222224
registry.add("Event/hGenID", "generator ID;generator ID;Number of mc collisions", kTH1F, {{7, -1.5, 5.5}}, true);
223225
}
224226
if (cfgFillTH2) {
225-
registry.add("Electron/hPt", "rec. p_{T,l};p_{T,l} (GeV/c)", kTH1F, {{1000, 0, 10}}, false);
226-
registry.add("Electron/hEtaPhi", "rec. #eta vs. #varphi;#varphi_{l} (rad.);#eta_{l}", kTH2F, {{90, 0, 2 * M_PI}, {100, -5, +5}}, false);
227+
registry.add("Electron/hPt", "rec. p_{T,e};p_{T,e} (GeV/c)", kTH1F, {{1000, 0, 10}}, false);
228+
registry.add("Electron/hEtaPhi", "rec. #eta vs. #varphi;#varphi_{e} (rad.);#eta_{e}", kTH2F, {{90, 0, 2 * M_PI}, {100, -5, +5}}, false);
227229
registry.add("Electron/Ptgen_RelDeltaPt", "resolution", kTH2F, {{axis_pt_gen}, {axis_dpt}}, true);
228-
registry.add("Electron/Ptgen_DeltaEta", "resolution", kTH2F, {{axis_pt_gen}, {axis_deta}}, true);
230+
registry.add("Electron/Ptgen_DeltaEta", "resolution", kTH2F, {{axis_pt_gen}, {axis_deta_cb}}, true);
229231
registry.add("Electron/Ptgen_DeltaPhi_Pos", "resolution", kTH2F, {{axis_pt_gen}, {axis_dphi}}, true);
230232
registry.add("Electron/Ptgen_DeltaPhi_Neg", "resolution", kTH2F, {{axis_pt_gen}, {axis_dphi}}, true);
231-
registry.addClone("Electron/", "StandaloneMuon/");
232-
registry.addClone("Electron/", "GlobalMuon/");
233+
234+
registry.add("StandaloneMuon/hPt", "rec. p_{T,#mu};p_{T,#mu} (GeV/c)", kTH1F, {{1000, 0, 10}}, false);
235+
registry.add("StandaloneMuon/hEtaPhi", "rec. #eta vs. #varphi;#varphi_{#mu} (rad.);#eta_{#mu}", kTH2F, {{90, 0, 2 * M_PI}, {100, -5, +5}}, false);
236+
registry.add("StandaloneMuon/Ptgen_RelDeltaPt", "resolution", kTH2F, {{axis_pt_gen}, {axis_dpt}}, true);
237+
registry.add("StandaloneMuon/Ptgen_DeltaEta", "resolution", kTH2F, {{axis_pt_gen}, {axis_deta_fwd}}, true);
238+
registry.add("StandaloneMuon/Ptgen_DeltaPhi_Pos", "resolution", kTH2F, {{axis_pt_gen}, {axis_dphi}}, true);
239+
registry.add("StandaloneMuon/Ptgen_DeltaPhi_Neg", "resolution", kTH2F, {{axis_pt_gen}, {axis_dphi}}, true);
240+
registry.addClone("StandaloneMuon/", "GlobalMuon/");
233241
}
234242

235243
if (cfgFillTHnSparse) {
236-
registry.add("Electron/hs_reso", "8D resolution", kTHnSparseF, {axis_cent, axis_pt_gen, axis_eta_cb_gen, axis_phi_gen, axis_charge_gen, axis_dpt, axis_deta, axis_dphi}, true);
237-
registry.add("StandaloneMuon/hs_reso", "8D resolution", kTHnSparseF, {axis_cent, axis_pt_gen, axis_eta_fwd_gen, axis_phi_gen, axis_charge_gen, axis_dpt, axis_deta, axis_dphi}, true);
238-
registry.add("GlobalMuon/hs_reso", "8D resolution", kTHnSparseF, {axis_cent, axis_pt_gen, axis_eta_fwd_gen, axis_phi_gen, axis_charge_gen, axis_dpt, axis_deta, axis_dphi}, true);
244+
registry.add("Electron/hs_reso", "8D resolution", kTHnSparseF, {axis_cent, axis_pt_gen, axis_eta_cb_gen, axis_phi_gen, axis_charge_gen, axis_dpt, axis_deta_cb, axis_dphi}, true);
245+
registry.add("StandaloneMuon/hs_reso", "8D resolution", kTHnSparseF, {axis_cent, axis_pt_gen, axis_eta_fwd_gen, axis_phi_gen, axis_charge_gen, axis_dpt, axis_deta_fwd, axis_dphi}, true);
246+
registry.add("GlobalMuon/hs_reso", "8D resolution", kTHnSparseF, {axis_cent, axis_pt_gen, axis_eta_fwd_gen, axis_phi_gen, axis_charge_gen, axis_dpt, axis_deta_fwd, axis_dphi}, true);
239247
}
240248
}
241249

@@ -592,7 +600,7 @@ struct CreateResolutionMap {
592600
return;
593601
}
594602

595-
if (!isSelectedMuon(pt, eta, rAtAbsorberEnd, pDCA, muon.chi2(), muon.trackType(), dcaXY)) {
603+
if (!isSelectedMuon(pt, eta, rAtAbsorberEnd, pDCA, muon.chi2() / (2.f * (muon.nClusters() + nClustersMFT) - 5.f), muon.trackType(), dcaXY)) {
596604
return;
597605
}
598606

@@ -656,7 +664,7 @@ struct CreateResolutionMap {
656664
if (muoncuts.cfg_max_dcaxy_gl < dcaXY) {
657665
return false;
658666
}
659-
if (chi2 < 0.f || muoncuts.cfg_max_chi2_gl < chi2) {
667+
if (chi2 < 0.f || muoncuts.cfg_max_chi2_gl < chi2) { // chi2/ndf
660668
return false;
661669
}
662670
if (rAtAbsorberEnd < muoncuts.cfg_min_rabs_gl || muoncuts.cfg_max_rabs_gl < rAtAbsorberEnd) {

PWGEM/Dilepton/Utils/MomentumSmearer.h

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -133,12 +133,15 @@ class MomentumSmearer
133133
}
134134
}
135135

136-
void fillVecReso(TH2F* fReso, std::vector<TH1F*>& fVecReso)
136+
void fillVecReso(TH2F* fReso, std::vector<TH1F*>& fVecReso, const char* suffix)
137137
{
138-
TAxis* axisPt = fReso->GetXaxis();
138+
TAxis* axisPt = fReso->GetXaxis(); // be careful! This works only for variable bin width.
139139
int nBinsPt = axisPt->GetNbins();
140-
for (int i = 1; i <= nBinsPt; i++) {
141-
fVecReso.push_back(reinterpret_cast<TH1F*>(fReso->ProjectionY("", i, i)));
140+
fVecReso.resize(nBinsPt);
141+
for (int i = 0; i < nBinsPt; i++) {
142+
auto h1 = reinterpret_cast<TH1F*>(fReso->ProjectionY(Form("h1reso%s_pt%d", suffix, i), i + 1, i + 1));
143+
h1->Scale(1.f, "width"); // convert ntrack to probability density
144+
fVecReso[i] = h1;
142145
}
143146
}
144147

@@ -257,10 +260,10 @@ class MomentumSmearer
257260
if (!fResoPhi_Neg) {
258261
LOGP(fatal, "Could not open {} from file {}", fResPhiNegHistName.Data(), fResFileName.Data());
259262
}
260-
fillVecReso(fResoPt, fVecResoPt);
261-
fillVecReso(fResoEta, fVecResoEta);
262-
fillVecReso(fResoPhi_Pos, fVecResoPhi_Pos);
263-
fillVecReso(fResoPhi_Neg, fVecResoPhi_Neg);
263+
fillVecReso(fResoPt, fVecResoPt, "_reldpt");
264+
fillVecReso(fResoEta, fVecResoEta, "_deta");
265+
fillVecReso(fResoPhi_Pos, fVecResoPhi_Pos, "_dphi_pos");
266+
fillVecReso(fResoPhi_Neg, fVecResoPhi_Neg, "_dphi_neg");
264267
}
265268
}
266269

@@ -361,7 +364,7 @@ class MomentumSmearer
361364
if (!fDCA) {
362365
LOGP(fatal, "Could not open {} from file {}", fDCAHistName.Data(), fDCAFileName.Data());
363366
}
364-
fillVecReso(fDCA, fVecDCA);
367+
fillVecReso(fDCA, fVecDCA, "_dca");
365368
}
366369

367370
if (!fFromCcdb) {

0 commit comments

Comments
 (0)