|
ATLAS Offline Software
|
Go to the documentation of this file.
5 #ifndef MSVTXPLOTMAKER_H
6 #define MSVTXPLOTMAKER_H
11 #include "GaudiKernel/SystemOfUnits.h"
27 #include "TEfficiency.h"
28 #include "TGraphAsymmErrors.h"
30 #include "TMultiGraph.h"
36 #include "TObjArray.h"
37 #include "TObjString.h"
42 MSVtxPlotMaker(
const std::string &
datapath,
const std::string &pltdir,
const std::string &treename=
"MSVtxValidTree");
155 void fillRecoVtxPlots(
const std::vector<Amg::Vector3D> &reco_vertices,
const std::vector<std::vector<Amg::Vector3D>> &reco_constituentPos);
156 void fillTruthComparisonHists(
const std::vector<Amg::Vector3D> &reco_vertices,
const std::vector<Amg::Vector3D> &truth_vertices);
158 std::unique_ptr<EffInputTH1> &denomHists, std::unique_ptr<EffInputTH1> &numHists);
160 void fillNvtxHists(
const std::vector<Amg::Vector3D> &vertices, std::unique_ptr<NVtxTH1> &
hists);
161 void fillVtxPosMaps(
const std::vector<Amg::Vector3D> &vertices, std::unique_ptr<VtxPosTGraph> &
graphs);
162 void fillVtxPosHists(
const std::vector<Amg::Vector3D> &vertices, std::unique_ptr<VtxPosTH> &
hists);
165 void fillVtxNhitsHists(
double total,
double inwards,
double inner,
double middle,
double outer, std::unique_ptr<NHitsTH1> &
hists);
166 void fillResidualHists(
double eta,
double dR,
double d_theta,
double d_phi,
double d_Lxy,
double d_z,
double d_phys, std::unique_ptr<ResidualTH1> &
hists);
169 void saveVtxPos(std::unique_ptr<VtxPosTH> &
hists,
const TString &plotdir);
170 void saveTGraph(TMultiGraph* zLxy, TMultiGraph* etaphi, std::unique_ptr<VtxPosTGraph> &
graphs,
const TString &plotdir);
171 void saveTH1(TH1*
h, TString plotpath,
const char* dectectorLabel=
"",
const char* new_ylabel=
nullptr,
bool norm=
false,
bool logy=
false);
172 void saveTHStack(TH1*
h1, TH1* h2,
const TString &h1_legend,
const TString &h2_legend,
const TString &
title,
const TString &plotpath,
int color1=2,
int color2=1);
174 void saveTH2(TH2*
h,
const TString &plotpath);
177 TH1*
getUnmatchedHist(TH1* h_all, TH1* h_matched,
const TString &name_unmatched);
194 std::unique_ptr<TCanvas>
m_c{
nullptr};
235 TH1*
m_h_Nvtx_truth =
new TH1D(
"Nvtx_truth",
"Nvtx_truth; Number of truth vertices in the barrel or endcaps; Events / bin", 4, 0, 4);
236 TH1*
m_h_Nvtx_truth_b =
new TH1D(
"Nvtx_truth_b",
"Nvtx_truth_b; Number of truth vertices in the barrel; Events / bin", 4, 0, 4);
237 TH1*
m_h_Nvtx_truth_e =
new TH1D(
"Nvtx_truth_e",
"Nvtx_truth_e; Number of truth vertices in the endcaps; Events / bin", 4, 0, 4);
240 TMultiGraph*
m_zLxy_truth =
new TMultiGraph(
"zLxy_mg_truth",
"zLxy_mg_truth");
245 TMultiGraph*
m_etaphi_truth =
new TMultiGraph(
"etaphi_mg_truth",
"etaphi_mg_truth");
250 TH1*
m_h_distanceToIP_truth =
new TH1D(
"distanceToIP_truth",
"distanceToIP_truth; Truth vertex |#bf{r}| [m]; Vertices / bin", 50, 0, 20);
252 TH2*
m_h_zLxy_truth =
new TH2D(
"zLxy_truth",
"zLxy_truth; Truth vertex z [m]; Truth vertex L_{xy} [m]", 128, -16, 16, 52, -1, 12);
253 TH2*
m_h_etaphi_truth =
new TH2D(
"etaphi_truth",
"etaphi_truth; Truth vertex #kern[-1.0]{ #eta}; Truth vertex #kern[-1.0]{ #phi} [rad]", 80, -2.6, 2.6, 40, -TMath::Pi(), TMath::Pi()+1);
257 TH1*
m_h_Nvtx =
new TH1D(
"Nvtx",
"Nvtx; Number of reco vertices in barrel or endcaps; Events / bin", 3, 0, 3);
258 TH1*
m_h_Nvtx_b =
new TH1D(
"Nvtx_b",
"Nvtx_b; Number of reco vertices in the barrel; Events / bin", 3, 0, 3);
259 TH1*
m_h_Nvtx_e =
new TH1D(
"Nvtx_e",
"Nvtx_e; Number of reco vertices in the endcaps; Events / bin", 3, 0, 3);
262 TMultiGraph*
m_zLxy =
new TMultiGraph(
"zLxy_mg",
"zLxy_mg");
267 TMultiGraph*
m_etaphi =
new TMultiGraph(
"etaphi_mg",
"etaphi_mg");
272 TH1*
m_h_distanceToIP =
new TH1D(
"distanceToIP",
"distanceToIP; Reco vertex |#bf{r}| [m]; Vertices / bin", 50, 0, 20);
274 TH2*
m_h_zLxy =
new TH2D(
"zLxy",
"zLxy; Reco vertex z [m]; Reco vertex L_{xy} [m]", 128, -16, 16, 52, -1, 12);
275 TH2*
m_h_etaphi =
new TH2D(
"etaphi",
"etaphi; Reco vertex #kern[-1.0]{ #eta}; Reco vertex #kern[-1.0]{ #phi} [rad]", 80, -2.6, 2.6, 40, -TMath::Pi(), TMath::Pi()+1);
277 TH1*
m_h_chi2_b =
new TH1D(
"chi2_b",
"chi2_b; Reco vertex #chi^{2}; Vertices / bin", 100, 0, 10);
278 TH1*
m_h_chi2_e =
new TH1D(
"chi2_e",
"chi2_e; Reco vertex #chi^{2}; Vertices / bin", 100, 0, 10);
279 TH1*
m_h_chi2nDoF_b =
new TH1D(
"chi2nDoF_b",
"chi2nDoF_b; Reco vertex #chi^{2}/n_{DoF}; Vertices / bin", 100, 0, 5);
280 TH1*
m_h_chi2nDoF_e =
new TH1D(
"chi2nDoF_e",
"chi2nDoF_e; Reco vertex #chi^{2}/n_{DoF}; Vertices / bin", 100, 0, 5);
281 TH1*
m_h_chi2prob_b =
new TH1D(
"chi2_prob_b",
"chi2_prob_b; Reco vertex #chi^{2} probability; Vertices / bin", 100, 0, 1);
282 TH1*
m_h_chi2prob_e =
new TH1D(
"chi2_prob_e",
"chi2_prob_e; Reco vertex #chi^{2} probability; Vertices / bin", 100, 0, 1);
284 TH1*
m_h_Nconsti_b =
new TH1D(
"Nconstituents_b",
"Nconstituents_b; Reco vertex number of constituents; Vertices / bin", 39, 1, 40);
285 TH1*
m_h_Nconsti_e =
new TH1D(
"Nconstituents_e",
"Nconstituents_e; Reco vertex number of constituents; Vertices / bin", 39, 1, 40);
287 TH1*
m_h_VtxConsti_dR_b =
new TH1D(
"VtxConsti_dR_b",
"VtxConsti_dR_b; #Delta R(reco vtx, constituent); Number of vertex-constituent pairs / bin", 100, 0, 3);
288 TH1*
m_h_VtxConsti_dRmax_b =
new TH1D(
"VtxConsti_dRmax_b",
"VtxConsti_dRmax_b; max #kern[-0.3]{#Delta } #kern[-0.2]{ R(reco vtx, constituent)}; Vertices / bin", 50, 0, 3);
289 TH1*
m_h_VtxConsti_dphimax_b =
new TH1D(
"VtxConsti_dphimax_b",
"VtxConsti_dphimax_b; max #kern[-0.3]{#Delta } #kern[-0.3]{ #phi (reco vtx, constituent)}; Vertices / bin", 50, -2.5, 2.5);
290 TH1*
m_h_VtxConsti_detamax_b =
new TH1D(
"VtxConsti_detamax_b",
"VtxConsti_detamax_b; max #kern[-0.3]{#Delta } #kern[-0.3]{ #eta (reco vtx, constituent)}; Vertices / bin", 50, -1.0, 1.0);
291 TH1*
m_h_VtxConsti_dR_e =
new TH1D(
"VtxConsti_dR_e",
"VtxConsti_dR_e; #Delta R(reco vtx, constituent); Number of vertex-constituent pairs / bin", 100, 0, 3);
292 TH1*
m_h_VtxConsti_dRmax_e =
new TH1D(
"VtxConsti_dRmax_e",
"VtxConsti_dRmax_e; max #kern[-0.3]{#Delta } #kern[-0.2]{ R(reco vtx, constituent)}; Vertices / bin", 50, 0, 3);
293 TH1*
m_h_VtxConsti_dphimax_e =
new TH1D(
"VtxConsti_dphimax_e",
"VtxConsti_dphimax_e; max #kern[-0.3]{#Delta } #kern[-0.3]{ #phi (reco vtx, constituent)}; Vertices / bin", 50, -2.5, 2.5);
294 TH1*
m_h_VtxConsti_detamax_e =
new TH1D(
"VtxConsti_detamax_e",
"VtxConsti_detamax_e; max #kern[-0.3]{#Delta } #kern[-0.3]{ #eta (reco vtx, constituent)}; Vertices / bin", 50, -1.0, 1.0);
301 TH1*
m_h_nMDT_b =
new TH1D(
"nMDT_b",
"nMDT_b; Number of MDT hits near the reco vertex; Vertices / bin", 100, 0, 4000);
302 TH1*
m_h_nMDT_e =
new TH1D(
"nMDT_e",
"nMDT_e; Number of MDT hits near the reco vertex; Vertices / bin", 100, 0, 4000);
303 TH1*
m_h_nMDT_I_b =
new TH1D(
"nMDT_I_b",
"nMDT_I_b; Number of inner layer MDT hits near the reco vertex; Vertices / bin", 100, 0, 1000);
304 TH1*
m_h_nMDT_I_e =
new TH1D(
"nMDT_I_e",
"nMDT_I_e; Number of inner layer MDT hits near the reco vertex; Vertices / bin", 100, 0, 1000);
305 TH1*
m_h_nMDT_M_b =
new TH1D(
"nMDT_M_b",
"nMDT_M_b; Number of middle layer MDT hits near the reco vertex; Vertices / bin", 100, 0, 2500);
306 TH1*
m_h_nMDT_M_e =
new TH1D(
"nMDT_M_e",
"nMDT_M_e; Number of middle layer MDT hits near the reco vertex; Vertices / bin", 100, 0, 2500);
307 TH1*
m_h_nMDT_O_b =
new TH1D(
"nMDT_O_b",
"nMDT_O_b; Number of outer layer MDT hits near the reco vertex; Vertices / bin", 100, 0, 2500);
308 TH1*
m_h_nMDT_O_e =
new TH1D(
"nMDT_O_e",
"nMDT_O_e; Number of outer layer MDT hits near the reco vertex; Vertices / bin", 100, 0, 2500);
309 TH1*
m_h_nMDT_InwardsTotal_b =
new TH1D(
"nMDT_InwardsTotal_b",
"nMDT_InwardsTotal_b; fraction of MDT hits inwards of the reco vertex; Vertices / bin", 100, 0, 3);
310 TH1*
m_h_nMDT_InwardsTotal_e =
new TH1D(
"nMDT_InwardsTotal_e",
"nMDT_InwardsTotal_e; fraction of MDT hits inwards of the reco vertex; Vertices / bin", 100, 0, 3);
311 TH1*
m_h_nMDT_IM_b =
new TH1D(
"nMDT_IM_b",
"nMDT_IM_b; Reco vertex inner/middle layer MDT hits; Vertices / bin", 100, 0, 3);
312 TH1*
m_h_nMDT_IM_e =
new TH1D(
"nMDT_IM_e",
"nMDT_IM_e; Reco vertex inner/middle layer MDT hits; Vertices / bin", 100, 0, 3);
313 TH1*
m_h_nMDT_IO_b =
new TH1D(
"nMDT_IO_b",
"nMDT_IO_b; Reco vertex inner/outer layer MDT hits; Vertices / bin", 100, 0, 3);
314 TH1*
m_h_nMDT_IO_e =
new TH1D(
"nMDT_IO_e",
"nMDT_IO_e; Reco vertex inner/outer layer MDT hits; Vertices / bin", 100, 0, 3);
315 TH1*
m_h_nMDT_MO_b =
new TH1D(
"nMDT_MO_b",
"nMDT_MO_b; Reco vertex middle/outer layer MDT hits; Vertices / bin", 100, 0, 3);
316 TH1*
m_h_nMDT_MO_e =
new TH1D(
"nMDT_MO_e",
"nMDT_MO_e; Reco vertex middle/outer layer MDT hits; Vertices / bin", 100, 0, 3);
318 TH1*
m_h_nRPC =
new TH1D(
"nRPC",
"nRPC_e; Number of RPC hits near the reco vertex; Vertices / bin", 50, 0, 1500);
319 TH1*
m_h_nRPC_I =
new TH1D(
"nRPC_I",
"nRPC_I_e; Number of inner layer RPC hits near the reco vertex; Vertices / bin", 50, 0, 500);
320 TH1*
m_h_nRPC_M =
new TH1D(
"nRPC_M",
"nRPC_M_e; Number of middle layer RPC hits near the reco vertex; Vertices / bin", 50, 0, 1000);
321 TH1*
m_h_nRPC_O =
new TH1D(
"nRPC_O",
"nRPC_O_e; Number of outer layer RPC hits near the reco vertex; Vertices / bin", 50, 0, 1000);
322 TH1*
m_h_nRPC_InwardsTotal =
new TH1D(
"nRPC_InwardsTotal",
"nRPC_InwardsTotal_e; fraction of RPC hits inwards of the reco vertex; Vertices / bin", 50, 0, 1);
323 TH1*
m_h_nRPC_IM =
new TH1D(
"nRPC_IM",
"nRPC_IM_e; Reco vertex inner/middle layer RPC hits; Vertices / bin", 50, 0, 3);
324 TH1*
m_h_nRPC_IO =
new TH1D(
"nRPC_IO",
"nRPC_IO_e; Reco vertex inner/outer layer RPC hits; Vertices / bin", 50, 0, 3);
325 TH1*
m_h_nRPC_MO =
new TH1D(
"nRPC_MO",
"nRPC_MO_e; Reco vertex middle/outer layer RPC hits; Vertices / bin", 50, 0, 3);
327 TH1*
m_h_nTGC =
new TH1D(
"nTGC",
"nTGC_e; Number of TGC hits near the reco vertex; Vertices / bin", 50, 0, 1500);
328 TH1*
m_h_nTGC_I =
new TH1D(
"nTGC_I",
"nTGC_I_e; Number of inner layer TGC hits near the reco vertex; Vertices / bin", 50, 0, 500);
329 TH1*
m_h_nTGC_M =
new TH1D(
"nTGC_M",
"nTGC_M_e; Number of middle layer TGC hits near the reco vertex; Vertices / bin", 50, 0, 1000);
330 TH1*
m_h_nTGC_O =
new TH1D(
"nTGC_O",
"nTGC_O_e; Number of outer layer TGC hits near the reco vertex; Vertices / bin", 50, 0, 1000);
331 TH1*
m_h_nTGC_InwardsTotal =
new TH1D(
"nTGC_InwardsTotal",
"nTGC_InwardsTotal_e; fraction of TGC hits inwards of the reco vertex; Vertices / bin", 50, 0, 1);
332 TH1*
m_h_nTGC_IM =
new TH1D(
"nTGC_IM",
"nTGC_IM_e; Reco vertex inner/middle layer TGC hits; Vertices / bin", 50, 0, 3);
333 TH1*
m_h_nTGC_IO =
new TH1D(
"nTGC_IO",
"nTGC_IO_e; Reco vertex inner/outer layer TGC hits; Vertices / bin", 50, 0, 3);
334 TH1*
m_h_nTGC_MO =
new TH1D(
"nTGC_MO",
"nTGC_MO_e; Reco vertex middle/outer layer TGC hits; Vertices / bin", 50, 0, 3);
338 TH1*
m_h_Nobj =
new TH1D(
"Nobj",
"Nobj; Number of objects; Events / bin", 20, 0, 20);
339 TH1*
m_h_Nobj_b =
new TH1D(
"Nobj_b",
"Nobj_b; Number of objects in the barrel; Events / bin", 20, 0, 20);
340 TH1*
m_h_Nobj_e =
new TH1D(
"Nobj_e",
"Nobj_e; Number of objects in the endcaps; Events / bin", 20, 0, 20);
341 TH1*
m_h_NobjReco =
new TH1D(
"objN_reco",
"objN_reco; Number of objects used for reconstruction in the barrel; Events / bin", 20, 0, 20);
342 TH1*
m_h_NobjReco_b =
new TH1D(
"objN_reco_b",
"objN_reco_b; Number of objects used for reconstruction in the barrel; Events / bin", 20, 0, 20);
343 TH1*
m_h_NobjReco_e =
new TH1D(
"objN_reco_e",
"objN_reco_e; Number of objects used for reconstruction in the endcaps; Events / bin", 20, 0, 20);
345 TH1*
m_h_obj_phi_b =
new TH1D(
"objPhi_b",
"objPhi_b; Object #kern[-0.05]{#phi in the barrel}; Objects / bin", 100, -TMath::Pi(), TMath::Pi());
346 TH1*
m_h_obj_phi_e =
new TH1D(
"objPhi_e",
"objPhi_e; Object #kern[-0.05]{#phi in the endcaps}; Objects / bin", 100, -TMath::Pi(), TMath::Pi());
347 TH1*
m_h_obj_eta =
new TH1D(
"objEta",
"objEta; Object #eta; Objects / bin", 50, -2.7, 2.7);
348 TH1*
m_h_objReco_phi_b =
new TH1D(
"objPhi_reco_b",
"objPhi_reco_b; Object #kern[-0.04]{#phi used for reconstruction in the barrel}; Objects / bin", 100, -TMath::Pi(), TMath::Pi());
349 TH1*
m_h_objReco_phi_e =
new TH1D(
"objPhi_reco_e",
"objPhi_reco_e; Object #kern[-0.04]{#phi used for reconstruction in the endcaps}; Objects / bin", 100, -TMath::Pi(), TMath::Pi());
350 TH1*
m_h_objReco_eta =
new TH1D(
"objEta_reco",
"objEta_reco; Object #kern[-0.06]{#eta used for reconstruction}; Objects / bin", 50, -2.7, 2.7);
353 TH1*
m_h_delta_R_b =
new TH1D(
"delta_R_b",
"delta_R; #Delta R(reco Vtx, truth Vtx); Vertices / bin", 50, 0, 0.5);
354 TH1*
m_h_delta_R_e =
new TH1D(
"delta_R_e",
"delta_R; #Delta R(reco Vtx, truth Vtx); Vertices / bin", 50, 0, 0.5);
355 TH1*
m_h_delta_theta_b =
new TH1D(
"delta_theta_b",
"delta_theta; #theta_{reco} - #theta_{truth} [rad]; Vertices / 0.01 rad", 100, -0.5, 0.5);
356 TH1*
m_h_delta_theta_e =
new TH1D(
"delta_theta_e",
"delta_theta; #theta_{reco} - #theta_{truth} [rad]; Vertices / 0.01 rad", 100, -0.5, 0.5);
357 TH1*
m_h_delta_phi_b =
new TH1D(
"delta_phi_b",
"delta_phi; #phi_{reco} - #phi_{truth} [rad]; Vertices / 0.02 rad", 50, -0.5, 0.5);
358 TH1*
m_h_delta_phi_e =
new TH1D(
"delta_phi_e",
"delta_phi; #phi_{reco} - #phi_{truth} [rad]; Vertices / 0.02 rad", 50, -0.5, 0.5);
359 TH1*
m_h_delta_Lxy_b =
new TH1D(
"delta_Lxy_b",
"delta_Lxy; L_{xy}^{reco} - L_{xy}^{truth} [cm]; Vertices / 10 cm", 100, -500, 500);
360 TH1*
m_h_delta_Lxy_e =
new TH1D(
"delta_Lxy_e",
"delta_Lxy; L_{xy}^{reco} - L_{xy}^{truth} [cm]; Vertices / 10 cm", 100, -500, 500);
361 TH1*
m_h_delta_z_b =
new TH1D(
"delta_z_b",
"delta_z; z_{reco} - z_{truth} [cm]; Vertices / 10 cm", 100, -500, 500);
362 TH1*
m_h_delta_z_e =
new TH1D(
"delta_z_e",
"delta_z; z_{reco} - z_{truth} [cm]; Vertices / 10 cm", 100, -500, 500);
363 TH1*
m_h_delta_phys_b =
new TH1D(
"delta_phys_b",
"delta_phys; |#bf{r}_{reco} - #bf{r}_{truth}| [cm]; Vertices / 10 cm", 50, 0, 500);
364 TH1*
m_h_delta_phys_e =
new TH1D(
"delta_phys_e",
"delta_phys; |#bf{r}_{reco} - #bf{r}_{truth}| [cm]; Vertices / 10 cm", 75, 0, 750);
366 TH1*
m_h_delta_Lxy_posEta_b =
new TH1D(
"delta_Lxy_posEta_b",
"delta_Lxy; L_{xy}^{reco} - L_{xy}^{truth} [cm]; Vertices / 10 cm", 100, -500, 500);
367 TH1*
m_h_delta_Lxy_posEta_e =
new TH1D(
"delta_Lxy_posEta_e",
"delta_Lxy; L_{xy}^{reco} - L_{xy}^{truth} [cm]; Vertices / 10 cm", 100, -500, 500);
368 TH1*
m_h_delta_Lxy_negEta_b =
new TH1D(
"delta_Lxy_negEta_b",
"delta_Lxy; L_{xy}^{reco} - L_{xy}^{truth} [cm]; Vertices / 10 cm", 100, -500, 500);
369 TH1*
m_h_delta_Lxy_negEta_e =
new TH1D(
"delta_Lxy_negEta_e",
"delta_Lxy; L_{xy}^{reco} - L_{xy}^{truth} [cm]; Vertices / 10 cm", 100, -500, 500);
370 TH1*
m_h_delta_z_posEta_b =
new TH1D(
"delta_z_posEta_b",
"delta_z; z_{reco} - z_{truth} [cm]; Vertices / 10 cm", 100, -500, 500);
371 TH1*
m_h_delta_z_negEta_b =
new TH1D(
"delta_z_negEta_b",
"delta_z; z_{reco} - z_{truth} [cm]; Vertices / 10 cm", 100, -500, 500);
372 TH1*
m_h_delta_z_posEta_e =
new TH1D(
"delta_z_posEta_e",
"delta_z; z_{reco} - z_{truth} [cm]; Vertices / 10 cm", 100, -500, 500);
373 TH1*
m_h_delta_z_negEta_e =
new TH1D(
"delta_z_negEta_e",
"delta_z; z_{reco} - z_{truth} [cm]; Vertices / 10 cm", 100, -500, 500);
379 TH1*
m_h_Reco_Lxy_b =
new TH1D(
"vReco_Lxy_b",
"reco vertex b; Reco vertex L_{xy} [m]; Vertices / bin", 30, 0, 9);
380 TH1*
m_h_RecoTruth_Lxy_b =
new TH1D(
"RecoTruth_Lxy_b",
"reco vertex matched to truth in the barrel; Reco vertex L_{xy} [m]; Vertices / bin", 30, 0, 9);
381 TH1*
m_h_Truth_Lxy_b =
new TH1D(
"Truth_Lxy_b",
"truth vertex b; Truth vertex L_{xy} [m]; Truth vertices / bin", 30, 0, 9);
382 TH1*
m_h_TruthReco_Lxy_b =
new TH1D(
"TruthReco_Lxy_b",
"truth vertex matched to reco in the barrel; Truth vertex L_{xy} [m]; Vertices / bin", 30, 0, 9);
384 TH1*
m_h_Reco_z_e =
new TH1D(
"Reco_z_e",
"reco vertex z; Reco vertex |z| [m]; Vertices / bin", 40, 0, 16);
385 TH1*
m_h_RecoTruth_z_e =
new TH1D(
"RecoTruth_z_e",
"reco vertex z matched to truth in the endcaps; Reco vertex |z| [m]; Vertices / bin", 40, 0, 16);
386 TH1*
m_h_Truth_z_e =
new TH1D(
"Truth_z_e",
"truth vertex z; Truth vertex |z| [m]; Truth vertices / bin", 40, 0, 16);
387 TH1*
m_h_TruthReco_z_e =
new TH1D(
"TruthReco_z_e",
"truth vertex z matched to reco in the endcaps; Truth vertex |z| [m]; Vertices / bin", 40, 0, 16);
389 TH1*
m_h_Reco_eta =
new TH1D(
"Reco_eta",
"reco vertex eta; Reco vertex #eta; Vertices / bin", 30, -3, 3);
390 TH1*
m_h_RecoTruth_eta =
new TH1D(
"RecoTruth_eta",
"reco vertex matched to truth; Reco vertex #eta; Vertices / bin", 30, -3, 3);
391 TH1*
m_h_Truth_eta =
new TH1D(
"Truth_eta",
"truth vertex eta; Truth vertex #eta; Truth vertices / bin", 30, -3, 3);
392 TH1*
m_h_TruthReco_eta =
new TH1D(
"TruthReco_eta",
"truth vertex matched to reco; Truth vertex #eta; Vertices / bin", 30, -3, 3);
394 TH1*
m_h_Reco_r_b =
new TH1D(
"Reco_r_b",
"reco vertex r; Reco vertex |#bf{r}| [m]; Vertices / bin", 60, 0, 18);
395 TH1*
m_h_RecoTruth_r_b =
new TH1D(
"RecoTruth_r_b",
"reco vertex matched to truth; Reco vertex |#bf{r}| [m]; Vertices / bin", 60, 0, 18);
396 TH1*
m_h_Truth_r_b =
new TH1D(
"Truth_r_b",
"truth vertex r; Truth vertex |#bf{r}| [m]; Truth vertices / bin", 60, 0, 18);
397 TH1*
m_h_TruthReco_r_b =
new TH1D(
"TruthReco_r_b",
"truth vertex matched to reco; Truth vertex |#bf{r}| [m]; Vertices / bin", 60, 0, 18);
399 TH1*
m_h_Reco_r_e =
new TH1D(
"Reco_r_e",
"reco vertex r; Reco vertex |#bf{r}| [m]; Vertices / bin", 60, 0, 18);
400 TH1*
m_h_RecoTruth_r_e =
new TH1D(
"RecoTruth_r_e",
"reco vertex matched to truth; Reco vertex |#bf{r}| [m]; Vertices / bin", 60, 0, 18);
401 TH1*
m_h_Truth_r_e =
new TH1D(
"Truth_r_e",
"truth vertex r; Truth vertex |#bf{r}| [m]; Truth vertices / bin", 60, 0, 18);
402 TH1*
m_h_TruthReco_r_e =
new TH1D(
"TruthReco_r_e",
"truth vertex matched to reco; Truth vertex |#bf{r}| [m]; Vertices / bin", 60, 0, 18);
434 #endif // MSVTXPLOTMAKER_H
MSVtxPlotMaker(const std::string &datapath, const std::string &pltdir, const std::string &treename="MSVtxValidTree")
TH1 * m_h_TruthReco_Lxy_b
TH1 * m_h_distanceToIP_truth
void fillEfficiency_NumeratorDenominatorHists(const std::vector< Amg::Vector3D > &vertices, const std::vector< Amg::Vector3D > &match_candidates, std::unique_ptr< EffInputTH1 > &denomHists, std::unique_ptr< EffInputTH1 > &numHists)
TH1 * m_h_VtxConsti_dRmax_b
void fillTruthVtxPlots(const std::vector< Amg::Vector3D > &truth_vertices)
TH1 * m_h_VtxConsti_dphimax_e
void fillAngularVtxConstiHists(const Amg::Vector3D &vtx, const std::vector< Amg::Vector3D > &consti, std::unique_ptr< AngularVtxConstiTH1 > &hists)
std::unique_ptr< NHitsTH1 > m_h_Nhits_MDT_b
std::vector< double > * m_truthVtx_x
std::vector< int > * m_msVtx_nMDT_M
TH1 * m_h_delta_z_negEta_e
std::vector< double > * m_truthVtx_z
TH1 * m_h_delta_Lxy_posEta_b
std::unique_ptr< NHitsTH1 > m_h_Nhits_TGC
Scalar eta() const
pseudorapidity method
TH1 * m_h_VtxConsti_dphimax_b
void saveTH1(TH1 *h, TString plotpath, const char *dectectorLabel="", const char *new_ylabel=nullptr, bool norm=false, bool logy=false)
std::unique_ptr< AngularVtxConstiTH1 > m_h_AngularVtxConsti_e
std::unique_ptr< EffInputTH1 > m_h_Truth
std::vector< int > * m_msVtx_nRPC_O
TH1 * m_h_delta_z_posEta_e
std::unique_ptr< TFile > m_input_file
void fillChi2Hists(double chi2, double NDoF, std::unique_ptr< Chi2TH1 > &hists)
void fillTruthComparisonHists(const std::vector< Amg::Vector3D > &reco_vertices, const std::vector< Amg::Vector3D > &truth_vertices)
TString m_plotdir_inputObjects
std::unique_ptr< NHitsTH1 > m_h_Nhits_RPC
std::vector< double > * m_msVtx_x
std::vector< int > * m_msVtx_nTGC_O
std::vector< int > * m_msVtx_nTGC
std::vector< double > * m_obj_theta
std::vector< int > * m_msVtx_nMDT_I
VtxPosTGraph(TGraph *zLxy_b, TGraph *etaphi_b, TGraph *zLxy_e, TGraph *etaphi_e, TGraph *zLxy_out, TGraph *etaphi_out)
std::vector< double > * m_obj_phi
void saveTEfficiency(TH1 *h_num, TH1 *h_denom, const TString &title, const TString &plotpath)
TH1 * m_h_delta_Lxy_posEta_e
void fillVtxNhitsHists(double total, double inwards, double inner, double middle, double outer, std::unique_ptr< NHitsTH1 > &hists)
TH1 * m_h_nRPC_InwardsTotal
std::unique_ptr< EffInputTH1 > m_h_Reco
TH1 * m_h_delta_Lxy_negEta_b
void saveTHStack(TH1 *h1, TH1 *h2, const TString &h1_legend, const TString &h2_legend, const TString &title, const TString &plotpath, int color1=2, int color2=1)
TString m_plotdir_recoVtxHits
std::unique_ptr< EffInputTH1 > m_h_TruthRecoMatched
std::vector< int > * m_msVtx_nMDT_inwards
TMultiGraph * m_zLxy_truth
TGraph * m_etaphi_truth_out
std::unique_ptr< TCanvas > m_c
Chi2TH1(TH1 *h_chi2, TH1 *h_chi2nDoF, TH1 *h_chi2prob)
double chi2(TH1 *h0, TH1 *h1)
void fillVtxPosHists(const std::vector< Amg::Vector3D > &vertices, std::unique_ptr< VtxPosTH > &hists)
std::vector< int > * m_msVtx_nMDT
void saveTGraph(TMultiGraph *zLxy, TMultiGraph *etaphi, std::unique_ptr< VtxPosTGraph > &graphs, const TString &plotdir)
TString m_plotdir_truthVtx
ResidualTH1(TH1 *h_delta_R, TH1 *h_delta_theta, TH1 *h_delta_phi, TH1 *h_delta_Lxy, TH1 *h_delta_z, TH1 *h_delta_phys, TH1 *h_delta_Lxy_posEta, TH1 *h_delta_Lxy_negEta, TH1 *h_delta_z_posEta, TH1 *h_delta_z_negEta)
void fillReconstructionObjectsHists()
std::vector< int > * m_msVtx_nTGC_I
TGraph * m_etaphi_truth_e
void fillVtxPosMaps(const std::vector< Amg::Vector3D > &vertices, std::unique_ptr< VtxPosTGraph > &graphs)
VtxPosTH(TH2 *h_zLxy, TH2 *h_etaphi, TH1 *h_distanceToIP)
std::vector< int > * m_msVtx_Ntrklet
TH1 * m_h_delta_z_negEta_b
std::unique_ptr< VtxPosTGraph > m_h_VtxPos
TH1 * m_h_nMDT_InwardsTotal_b
TGraph * m_zLxy_truth_out
std::vector< int > * m_msVtx_nTGC_M
std::unique_ptr< Chi2TH1 > m_h_VtxChi2_e
void fillVtxPosFiducialVolHists(const Amg::Vector3D &vtx, std::unique_ptr< EffInputTH1 > &hists)
std::unique_ptr< NVtxTH1 > m_h_NVtx_truth
TString m_plotdir_vtxResiduals
std::unique_ptr< NVtxTH1 > m_h_NVtx
TH1 * m_h_nTGC_InwardsTotal
TH1 * m_h_VtxConsti_dRmax_e
std::unique_ptr< VtxPosTH > m_h_VtxPosHists
void fillResidualHists(double eta, double dR, double d_theta, double d_phi, double d_Lxy, double d_z, double d_phys, std::unique_ptr< ResidualTH1 > &hists)
TH1 * m_h_delta_z_posEta_b
TH1 * m_h_delta_Lxy_negEta_e
TString m_plotdir_recoVtx
TString m_plotdir_vtxEfficiency
Eigen::Matrix< double, 3, 1 > Vector3D
TString m_plotdir_vtxFakeRate
std::unique_ptr< NHitsTH1 > m_h_Nhits_MDT_e
std::vector< int > * m_msVtx_nMDT_O
std::vector< int > * m_msVtx_nRPC
std::vector< double > * m_msVtx_chi2
std::vector< double > * m_truthVtx_y
void saveVtxPos(std::unique_ptr< VtxPosTH > &hists, const TString &plotdir)
virtual ~MSVtxPlotMaker()
TH1 * getUnmatchedHist(TH1 *h_all, TH1 *h_matched, const TString &name_unmatched)
std::vector< int > * m_msVtx_nTGC_inwards
std::unique_ptr< ResidualTH1 > m_h_VtxResiduals_e
std::unique_ptr< TFile > m_output_file
TH1 * m_h_RecoTruth_Lxy_b
std::vector< double > * m_obj_z
std::vector< double > * m_obj_y
std::unique_ptr< VtxPosTGraph > m_h_VtxPos_truth
std::vector< int > * m_obj_vtxLink
std::unique_ptr< Chi2TH1 > m_h_VtxChi2_b
std::vector< double > * m_msVtx_y
std::unique_ptr< ResidualTH1 > m_h_VtxResiduals_b
std::vector< int > * m_msVtx_nRPC_M
TH1 * m_h_VtxConsti_detamax_b
std::vector< double > * m_msVtx_z
std::vector< int > * m_msVtx_nRPC_inwards
std::vector< double > * m_obj_x
TGraph * m_etaphi_truth_b
NHitsTH1(TH1 *h_total, TH1 *h_I, TH1 *h_M, TH1 *h_O, TH1 *h_inwardsTotal, TH1 *h_IM, TH1 *h_IO, TH1 *h_MO)
std::unique_ptr< EffInputTH1 > m_h_RecoTruthMatched
std::unique_ptr< AngularVtxConstiTH1 > m_h_AngularVtxConsti_b
TMultiGraph * m_etaphi_truth
AngularVtxConstiTH1(TH1 *h_dR, TH1 *h_dRmax, TH1 *h_dphimax, TH1 *h_detamax)
NVtxTH1(TH1 *h_Nvtx, TH1 *h_Nvtx_b, TH1 *h_Nvtx_e)
std::vector< int > * m_msVtx_nRPC_I
void fillNvtxHists(const std::vector< Amg::Vector3D > &vertices, std::unique_ptr< NVtxTH1 > &hists)
TH1 * m_h_nMDT_InwardsTotal_e
void setColorPalette(TStyle *plotStyle)
void fillRecoVtxPlots(const std::vector< Amg::Vector3D > &reco_vertices, const std::vector< std::vector< Amg::Vector3D >> &reco_constituentPos)
std::unique_ptr< VtxPosTH > m_h_VtxPosHists_truth
TH1 * m_h_VtxConsti_detamax_e
std::vector< double > * m_obj_eta
void saveTH2(TH2 *h, const TString &plotpath)