From 9d1c422efa480adbde3f4be2ff937356099420e9 Mon Sep 17 00:00:00 2001 From: Helen Maguire <helen.maguire@cern.ch> Date: Fri, 19 Mar 2021 12:59:56 +0100 Subject: [PATCH] Added code for new histograms for matched, merged, split and fake vertices Initial commit towards QT task also added code for sumpt, sum charge , sum charge/n_trak and z-asymmetry for each category of vertex classification and for HS and PU vertices --- CommitTest.txt | 1 + .../share/InDetPVMPlotDefCommon.xml | 167 +++++++++++- .../InDetPhysValMonitoring_topOptions.py | 5 + .../src/InDetPerfPlot_VertexTruthMatching.cxx | 246 +++++++++++++++++- .../src/InDetPerfPlot_VertexTruthMatching.h | 50 ++++ .../src/InDetPerfPlot_nTracks.cxx | 12 + .../src/InDetRttPlots.cxx | 9 + .../src/InDetRttPlots.h | 3 + 8 files changed, 490 insertions(+), 3 deletions(-) create mode 100644 CommitTest.txt diff --git a/CommitTest.txt b/CommitTest.txt new file mode 100644 index 000000000000..c29f3a9ae881 --- /dev/null +++ b/CommitTest.txt @@ -0,0 +1 @@ +"test content for git tutorial" diff --git a/InnerDetector/InDetValidation/InDetPhysValMonitoring/share/InDetPVMPlotDefCommon.xml b/InnerDetector/InDetValidation/InDetPhysValMonitoring/share/InDetPVMPlotDefCommon.xml index 8a3e04e69276..a26dc53fcd58 100644 --- a/InnerDetector/InDetValidation/InDetPhysValMonitoring/share/InDetPVMPlotDefCommon.xml +++ b/InnerDetector/InDetValidation/InDetPhysValMonitoring/share/InDetPVMPlotDefCommon.xml @@ -933,7 +933,7 @@ <y title="Entries"/> </h> <h id="vx_track_weights" type="TH1F" title="Weights of tracks at vertex"> - <x title="Weight" n="100" lo="0." hi="10.0"/> + <x title="Weight" n="100" lo="0." hi="1.55555"/> <y title="Entries"/> </h> <h id="vx_track_pt" type="TH1F" title="Tracks at vertex p_{T}"> @@ -968,6 +968,171 @@ <x title="#sigma(z_{0}) (mm)" n="50" lo="0.0" hi="5.0"/> <y title="Entries"/> </h> +<!-- Helen OTP Vertex plots --> +<h id="vx_ntracks_vs_nmatchedvertices" type="TH1" title="Number of tracks for matched PU vertices"> + <x title="Number of Matched PU Vertices" n="150" lo="0.0" hi="150"/> + <y title="Number of Tracks" /> +</h> +<h id="vx_ntracks_vs_nmergedvertices" type="TH1" title="Number of tracks for merged PU vertices"> + <x title="Number of Merged PU Vertices" n="150" lo="0.0" hi="150"/> + <y title="Number of Tracks" /> +</h> +<h id="vx_ntracks_vs_nsplitvertices" type="TH1" title="Number of tracks for split PU vertices"> + <x title="Number of Split PU Vertices" n="150" lo="0.0" hi="150"/> + <y title="Number of Tracks" /> +</h> +<h id="vx_ntracks_vs_nfakevertices" type="TH1" title="Number of tracks for fake PU vertices"> + <x title="Number of Fake PU Vertices" n="150" lo="0.0" hi="150"/> + <y title="Number of Tracks" /> +</h> +<h id="vx_ntracks_vs_HS_nmatchedvertices" type="TH1" title="Number of tracks for matched HS vertices"> + <x title="Number of Matched HS Vertices" n="150" lo="0.0" hi="150"/> + <y title="Number of Tracks" /> +</h> +<h id="vx_ntracks_vs_HS_nmergedvertices" type="TH1" title="Number of tracks for merged HS vertices"> + <x title="Number of Merged HS Vertices" n="150" lo="0.0" hi="150"/> + <y title="Number of Tracks" /> +</h> +<h id="vx_ntracks_vs_HS_nsplitvertices" type="TH1" title="Number of tracks for split HS vertices"> + <x title="Number of Split HS Vertices" n="150" lo="0.0" hi="50"/> + <y title="Number of Tracks" /> +</h> +<h id="vx_ntracks_vs_HS_nfakevertices" type="TH1" title="Number of tracks for fake HS vertices"> + <x title="Number of Fake HS Vertices" n="150" lo="0.0" hi="50"/> + <y title="Number of Tracks" /> +</h> +<h id="vx_sumpT_matched" type="TH1" title="SumPt of tracks for matched vertices"> + <x title="sum p_{T} (GeV)of tracks" n="100" lo="0.0" hi="400"/> + <y title="Entries" /> +</h> +<h id="vx_sumpT_merged" type="TH1" title="SumPt of tracks for merged vertices"> + <x title="sum p_{T} (GeV)of tracks" n="100" lo="0.0" hi="400"/> + <y title="Entries" /> +</h> +<h id="vx_sumpT_split" type="TH1" title="SumPt of tracks for split vertices"> + <x title="sum p_{T} (GeV)of tracks" n="100" lo="0.0" hi="400"/> + <y title="Entries" /> +</h> +<h id="vx_sumpT_fake" type="TH1" title="SumPt of tracks for fake vertices"> + <x title="sum p_{T} (GeV)of tracks" n="100" lo="0.0" hi="400"/> + <y title="Entries" /> +</h> +<h id="vx_sumpT_HS_matched" type="TH1" title="SumPt of tracks for HS matched vertices"> + <x title="sum p_{T} (GeV)of tracks" n="100" lo="0.0" hi="400"/> + <y title="Entries" /> +</h> +<h id="vx_sumpT_HS_merged" type="TH1" title="SumPt of tracks for HS merged vertices"> + <x title="sum p_{T} (GeV)of tracks" n="100" lo="0.0" hi="400"/> + <y title="Entries" /> +</h> +<h id="vx_sumpT_HS_split" type="TH1" title="SumPt of tracks for HS split vertices"> + <x title="sum p_{T} (GeV)of tracks" n="100" lo="0.0" hi="400"/> + <y title="Entries" /> +</h> +<h id="vx_sumpT_HS_fake" type="TH1" title="SumPt of tracks for HS fake vertices"> + <x title="sum p_{T} (GeV)of tracks" n="100" lo="0.0" hi="400"/> + <y title="Entries" /> +</h> + +<!--Helen OTP sum charge plots --> +<h id="vx_sumCharge_matched" type="TH1" title="Sum of charges of tracks for matched vertices"> + <x title="sum of charges of tracks" n="100" lo="-25.0" hi="25"/> + <y title="Entries" /> +</h> +<h id="vx_sumCharge_merged" type="TH1" title="Sum of charges of tracks for merged vertices"> + <x title="sum of charges of tracks" n="100" lo="-25.0" hi="25"/> + <y title="Entries" /> +</h> +<h id="vx_sumCharge_split" type="TH1" title="Sumof charges of tracks for split vertices"> + <x title="sum of charges of tracks" n="100" lo="-25.0" hi="25"/> + <y title="Entries" /> +</h> +<h id="vx_sumCharge_fake" type="TH1" title="Sum of charges of tracks for fake vertices"> + <x title="sum of charges of tracks" n="100" lo="-25.0" hi="25"/> + <y title="Entries" /> +</h> +<h id="vx_sumCharge_HS_matched" type="TH1" title="Sum of charges of tracks for HS matched vertices"> + <x title="sum of charges of tracks" n="100" lo="-25.0" hi="25"/> + <y title="Entries" /> +</h> +<h id="vx_sumCharge_HS_merged" type="TH1" title="Sum of charges of tracks for HS merged vertices"> + <x title="sum of charges of tracks" n="100" lo="-25.0" hi="25"/> + <y title="Entries" /> +</h> +<h id="vx_sumCharge_HS_split" type="TH1" title="Sumof charges of tracks for HS split vertices"> + <x title="sum of charges of tracks" n="100" lo="-25.0" hi="25"/> + <y title="Entries" /> +</h> +<h id="vx_sumCharge_HS_fake" type="TH1" title="Sum of charges of tracks for HS fake vertices"> + <x title="sum of charges of tracks" n="100" lo="-25.0" hi="25"/> + <y title="Entries" /> +</h> +<h id="vx_sumCharge_N_trk_HS_matched" type="TH1" title="Sum of charges of tracks/N_trk for HS matched vertices"> + <x title="sum of charges of tracks/number of tracks" n="100" lo="-0.5" hi="0.5"/> + <y title="Entries" /> +</h> +<h id="vx_sumCharge_N_trk_HS_merged" type="TH1" title="Sum of charges of tracks/N_trk for HS merged vertices"> + <x title="sum of charges of tracks/number of tracks" n="100" lo="-0.5" hi="0.5"/> + <y title="Entries" /> +</h> +<h id="vx_sumCharge_N_trk_HS_split" type="TH1" title="Sum of charges of tracks/N_trk for HS split vertices"> + <x title="sum of charges of tracks/number of tracks" n="100" lo="-0.5" hi="0.5"/> + <y title="Entries" /> +</h> +<h id="vx_sumCharge_N_trk_HS_fake" type="TH1" title="Sum of charges of tracks/N_trk for HS fake vertices"> + <x title="sum of charges of tracks/number of tracks" n="100" lo="-0.5" hi="0.5"/> + <y title="Entries" /> +</h> + +<h id="vx_sumCharge_N_trk_matched" type="TH1" title="Sum of charges of tracks/N_trk for PU matched vertices"> + <x title="sum of charges of tracks/number of tracks" n="100" lo="-0.5" hi="0.5"/> + <y title="Entries" /> +</h> +<h id="vx_sumCharge_N_trk_merged" type="TH1" title="Sum of charges of tracks/N_trk for PU merged vertices"> + <x title="sum of charges of tracks/number of tracks" n="100" lo="-0.5" hi="0.5"/> + <y title="Entries" /> +</h> +<h id="vx_sumCharge_N_trk_split" type="TH1" title="Sum of charges of tracks/N_trk for PU split vertices"> + <x title="sum of charges of tracks/number of tracks" n="100" lo="-0.5" hi="0.5"/> + <y title="Entries" /> +</h> +<h id="vx_sumCharge_N_trk_fake" type="TH1" title="Sum of charges of tracks/N_trk for PU fake vertices"> + <x title="sum of charges of tracks/number of tracks" n="100" lo="-0.5" hi="0.5"/> + <y title="Entries" /> +</h> +<h id="vx_z_asym_matched" type="TH1" title="asymmetry of track Z0 around vertex of tracks for matched vertices"> + <x title="asymmetry of track Z0 around vertex of tracks" n="100" lo="-5.0" hi="5"/> + <y title="Entries" /> +</h> +<h id="vx_z_asym_merged" type="TH1" title="asymmetry of track Z0 around vertex of tracks for merged vertices"> + <x title="asymmetry of track Z0 around vertex of tracks" n="100" lo="-5.0" hi="5"/> + <y title="Entries" /> +</h> +<h id="vx_z_asym_split" type="TH1" title="asymmetry of track Z0 around vertex of tracks for split vertices"> + <x title="asymmetry of track Z0 around vertex of tracks" n="100" lo="-5.0" hi="5"/> + <y title="Entries" /> +</h> +<h id="vx_z_asym_fake" type="TH1" title="asymmetry of track Z0 around vertex of tracks for fake vertices"> + <x title="asymmetry of track Z0 around vertex of tracks" n="100" lo="-5.0" hi="5"/> + <y title="Entries" /> +</h> +<h id="vx_z_asym_HS_matched" type="TH1" title="asymmetry of track Z0 around vertex of tracks for HS matched vertices"> + <x title="asymmetry of track Z0 around vertex of tracks" n="100" lo="-5.0" hi="5"/> + <y title="Entries" /> +</h> +<h id="vx_z_asym_HS_merged" type="TH1" title="asymmetry of track Z0 around vertex of tracks for HS merged vertices"> + <x title="asymmetry of track Z0 around vertex of tracks" n="100" lo="-5.0" hi="5"/> + <y title="Entries" /> +</h> +<h id="vx_z_asym_HS_split" type="TH1" title="asymmetry of track Z0 around vertex of tracks for HS split vertices"> + <x title="asymmetry of track Z0 around vertex of tracks" n="100" lo="-5.0" hi="5"/> + <y title="Entries" /> +</h> +<h id="vx_z_asym_HS_fake" type="TH1" title="asymmetry of track Z0 around vertex of tracks for HS fake vertices"> + <x title="asymmetry of track Z0 around vertex of tracks" n="100" lo="-5.0" hi="5"/> + <y title="Entries" /> +</h> + <!-- --> <!-- Bad Match Rate (BMR) plots --> <h id="BadMatchRate" type="TProfile" title="Fraction of Tracks with < 80% Truth Matching Probability"> diff --git a/InnerDetector/InDetValidation/InDetPhysValMonitoring/share/InDetPhysValMonitoring_topOptions.py b/InnerDetector/InDetValidation/InDetPhysValMonitoring/share/InDetPhysValMonitoring_topOptions.py index ba7cb9e48839..a05e03f972a9 100644 --- a/InnerDetector/InDetValidation/InDetPhysValMonitoring/share/InDetPhysValMonitoring_topOptions.py +++ b/InnerDetector/InDetValidation/InDetPhysValMonitoring/share/InDetPhysValMonitoring_topOptions.py @@ -59,4 +59,9 @@ include ("PhysValMonitoring/PhysValInDet_jobOptions.py") # finally, set up the infrastructure for writing our output from GaudiSvc.GaudiSvcConf import THistSvc ServiceMgr += THistSvc() + svcMgr.THistSvc.Output += ["M_output DATAFILE='"+MyArgs.outputFile+"' OPT='RECREATE'"] + + +ToolSvc.InDetVertexTruthMatchTool.OutputLevel = 2 + diff --git a/InnerDetector/InDetValidation/InDetPhysValMonitoring/src/InDetPerfPlot_VertexTruthMatching.cxx b/InnerDetector/InDetValidation/InDetPhysValMonitoring/src/InDetPerfPlot_VertexTruthMatching.cxx index a6b21a33004b..9c412e3b486b 100644 --- a/InnerDetector/InDetValidation/InDetPhysValMonitoring/src/InDetPerfPlot_VertexTruthMatching.cxx +++ b/InnerDetector/InDetValidation/InDetPhysValMonitoring/src/InDetPerfPlot_VertexTruthMatching.cxx @@ -10,6 +10,9 @@ #include "InDetPerfPlot_VertexTruthMatching.h" #include "EventPrimitives/EventPrimitives.h" #include "EventPrimitives/EventPrimitivesHelpers.h" +// 2 new includes HRM +#include "InDetPerfPlot_Vertex.h" +#include "InDetPerfPlot_nTracks.h" using namespace IDPVM; @@ -72,7 +75,49 @@ InDetPerfPlot_VertexTruthMatching::InDetPerfPlot_VertexTruthMatching(InDetPlotBa m_vx_hs_truth_y_res_vs_nTrk(nullptr), m_vx_hs_truth_z_pull_vs_nTrk(nullptr), m_vx_hs_truth_x_pull_vs_nTrk(nullptr), - m_vx_hs_truth_y_pull_vs_nTrk(nullptr) + m_vx_hs_truth_y_pull_vs_nTrk(nullptr), + // New histos HRM Helen OTP + m_vx_ntracks_vs_nmatchedvertices(nullptr), + m_vx_ntracks_vs_nmergedvertices(nullptr), + m_vx_ntracks_vs_nsplitvertices(nullptr), + m_vx_ntracks_vs_nfakevertices(nullptr), + m_vx_ntracks_vs_HS_nmatchedvertices(nullptr), + m_vx_ntracks_vs_HS_nmergedvertices(nullptr), + m_vx_ntracks_vs_HS_nsplitvertices(nullptr), + m_vx_ntracks_vs_HS_nfakevertices(nullptr), + m_vx_sumpT_matched(nullptr), + m_vx_sumpT_merged(nullptr), + m_vx_sumpT_split(nullptr), + m_vx_sumpT_fake(nullptr), + m_vx_sumpT_HS_matched(nullptr), + m_vx_sumpT_HS_merged(nullptr), + m_vx_sumpT_HS_split(nullptr), + m_vx_sumpT_HS_fake(nullptr), + //Helen OTP sum of charges + m_vx_sumCharge_matched(nullptr), + m_vx_sumCharge_merged(nullptr), + m_vx_sumCharge_split(nullptr), + m_vx_sumCharge_fake(nullptr), + m_vx_sumCharge_HS_matched(nullptr), + m_vx_sumCharge_HS_merged(nullptr), + m_vx_sumCharge_HS_split(nullptr), + m_vx_sumCharge_HS_fake(nullptr), + m_vx_sumCharge_N_trk_HS_matched(nullptr), + m_vx_sumCharge_N_trk_HS_merged(nullptr), + m_vx_sumCharge_N_trk_HS_split(nullptr), + m_vx_sumCharge_N_trk_HS_fake(nullptr), + m_vx_sumCharge_N_trk_matched(nullptr), + m_vx_sumCharge_N_trk_merged(nullptr), + m_vx_sumCharge_N_trk_split(nullptr), + m_vx_sumCharge_N_trk_fake(nullptr), + m_vx_z_asym_matched(nullptr), + m_vx_z_asym_merged(nullptr), + m_vx_z_asym_split(nullptr), + m_vx_z_asym_fake(nullptr), + m_vx_z_asym_HS_matched(nullptr), + m_vx_z_asym_HS_merged(nullptr), + m_vx_z_asym_HS_split(nullptr), + m_vx_z_asym_HS_fake(nullptr) { // nop @@ -146,11 +191,55 @@ void InDetPerfPlot_VertexTruthMatching::initializePlots() { book(m_vx_hs_truth_x_pull_vs_nTrk, "vx_TYPE_truth_pull_x_vs_nTrk", "vx_hs_truth_pull_x_vs_nTrk"); book(m_vx_hs_truth_y_pull_vs_nTrk, "vx_TYPE_truth_pull_y_vs_nTrk", "vx_hs_truth_pull_y_vs_nTrk"); + // book the new histos Helen OTP + book(m_vx_ntracks_vs_nmatchedvertices,"vx_ntracks_vs_nmatchedvertices"); + book(m_vx_ntracks_vs_nmergedvertices,"vx_ntracks_vs_nmergedvertices"); + book(m_vx_ntracks_vs_nsplitvertices,"vx_ntracks_vs_nsplitvertices"); + book(m_vx_ntracks_vs_nfakevertices,"vx_ntracks_vs_nfakevertices"); + book(m_vx_ntracks_vs_HS_nmatchedvertices,"vx_ntracks_vs_HS_nmatchedvertices"); + book(m_vx_ntracks_vs_HS_nmergedvertices,"vx_ntracks_vs_HS_nmergedvertices"); + book(m_vx_ntracks_vs_HS_nsplitvertices,"vx_ntracks_vs_HS_nsplitvertices"); + book(m_vx_ntracks_vs_HS_nfakevertices,"vx_ntracks_vs_HS_nfakevertices"); + book(m_vx_sumpT_matched,"vx_sumpT_matched"); + book(m_vx_sumpT_merged,"vx_sumpT_merged"); + book(m_vx_sumpT_split,"vx_sumpT_split"); + book( m_vx_sumpT_fake,"vx_sumpT_fake"); + book(m_vx_sumpT_HS_matched,"vx_sumpT_HS_matched"); + book(m_vx_sumpT_HS_merged,"vx_sumpT_HS_merged"); + book(m_vx_sumpT_HS_split,"vx_sumpT_HS_split"); + book( m_vx_sumpT_HS_fake,"vx_sumpT_HS_fake"); + // Helen OTP sum of charges + book(m_vx_sumCharge_matched,"vx_sumCharge_matched"); + book(m_vx_sumCharge_merged,"vx_sumCharge_merged"); + book(m_vx_sumCharge_split,"vx_sumCharge_split"); + book( m_vx_sumCharge_fake,"vx_sumCharge_fake"); + book(m_vx_sumCharge_HS_matched,"vx_sumCharge_HS_matched"); + book(m_vx_sumCharge_HS_merged,"vx_sumCharge_HS_merged"); + book(m_vx_sumCharge_HS_split,"vx_sumCharge_HS_split"); + book(m_vx_sumCharge_HS_fake,"vx_sumCharge_HS_fake"); + book(m_vx_sumCharge_N_trk_HS_matched, "vx_sumCharge_N_trk_HS_matched"); + book(m_vx_sumCharge_N_trk_HS_merged, "vx_sumCharge_N_trk_HS_merged"); + book(m_vx_sumCharge_N_trk_HS_split, "vx_sumCharge_N_trk_HS_split"); + book(m_vx_sumCharge_N_trk_HS_fake, "vx_sumCharge_N_trk_HS_fake"); + book(m_vx_sumCharge_N_trk_matched, "vx_sumCharge_N_trk_matched"); + book(m_vx_sumCharge_N_trk_merged, "vx_sumCharge_N_trk_merged"); + book(m_vx_sumCharge_N_trk_split, "vx_sumCharge_N_trk_split"); + book(m_vx_sumCharge_N_trk_fake, "vx_sumCharge_N_trk_fake"); + book(m_vx_z_asym_matched,"vx_z_asym_matched"); + book(m_vx_z_asym_merged,"vx_z_asym_merged"); + book(m_vx_z_asym_split,"vx_z_asym_split"); + book(m_vx_z_asym_fake,"vx_z_asym_fake"); + book(m_vx_z_asym_HS_matched,"vx_z_asym_HS_matched"); + book(m_vx_z_asym_HS_merged,"vx_z_asym_HS_merged"); + book(m_vx_z_asym_HS_split,"vx_z_asym_HS_split"); + book(m_vx_z_asym_HS_fake,"vx_z_asym_HS_fake"); + + + } } - const xAOD::Vertex* InDetPerfPlot_VertexTruthMatching::getHSRecoVertexSumPt2(const xAOD::VertexContainer& recoVertices) const { const xAOD::Vertex* recoHSVertex = nullptr; float sumPtMax = -1.; @@ -174,6 +263,10 @@ const xAOD::Vertex* InDetPerfPlot_VertexTruthMatching::getHSRecoVertexSumPt2(con return recoHSVertex; } + + + + template<typename U, typename V> float InDetPerfPlot_VertexTruthMatching::getRadialDiff2(const U* vtx1, const V* vtx2) const { return (std::pow((vtx1->x() - vtx2->x()), 2) + std::pow((vtx1->y() - vtx2->y()), 2) + std::pow((vtx1->z() - vtx2->z()), 2)); @@ -315,6 +408,10 @@ void InDetPerfPlot_VertexTruthMatching::fill(const xAOD::Vertex& vertex) { matchType = recoVtxMatchTypeInfo(vertex); ATH_MSG_DEBUG("VERTEX DECORATOR ======= " << matchType << ", with nTRACKS === " << vertex.nTrackParticles() << ", vertex index = " << vertex.index() << " AT (x, y, z) = (" << vertex.x() << ", " << vertex.y() << ", " << vertex.z() << ")"); fillHisto(m_vx_type_truth, matchType); + + + + } catch (SG::ExcBadAuxVar &) { ATH_MSG_WARNING("VertexMatchType DECORATOR seems to be available, but may be broken ==========="); @@ -444,6 +541,149 @@ void InDetPerfPlot_VertexTruthMatching::fill(const xAOD::VertexContainer& vertex fillHisto(m_vx_all_truth_x_pull_vs_nTrk, vertex->nTrackParticles(), residual_x/vtxerr_y); fillHisto(m_vx_all_truth_y_pull_vs_nTrk, vertex->nTrackParticles(), residual_y/vtxerr_x); +// Helen OTP - get sumpt for each vertex (not just for HS vertex) +// For each vertex, loop over all tracks and get sumpt and sum of charges +// also use this to get the z asymmetry around the vertex. + + + const xAOD::TrackParticle* trackTmp = nullptr; + float sumPt =0; + // get the charge associated with each track + double sumCharge = 0; + float z_asym = 0; + float sumDZ = 0; + float deltaZ =0; + float modsumDZ =0; + + + for (size_t i = 0; i < vertex->nTrackParticles(); i++) { + trackTmp = vertex->trackParticle(i); + deltaZ = trackTmp->z0(); + if (trackTmp) { + sumPt = sumPt + trackTmp->pt(); + sumCharge = sumCharge + trackTmp->charge(); + // sum of delta z + sumDZ = sumDZ + deltaZ; + modsumDZ = modsumDZ + sqrt(deltaZ * deltaZ); + z_asym = modsumDZ/sumDZ; + } + } + if (recoVtxMatchTypeInfo(*vertex) == InDetVertexTruthMatchUtils::VertexMatchType::MATCHED) { + if (vertex == bestRecoHSVtx_truth) { + + fillHisto(m_vx_sumpT_HS_matched,sumPt / Gaudi::Units::GeV); + fillHisto(m_vx_sumCharge_HS_matched,sumCharge); + fillHisto(m_vx_sumCharge_N_trk_HS_matched, sumCharge/vertex->nTrackParticles()); + fillHisto(m_vx_z_asym_HS_matched, z_asym); + + } + else { + + fillHisto(m_vx_sumpT_matched,sumPt / Gaudi::Units::GeV); + fillHisto(m_vx_sumCharge_matched,sumCharge); + fillHisto(m_vx_sumCharge_N_trk_matched, sumCharge/vertex->nTrackParticles()); + fillHisto(m_vx_z_asym_matched, z_asym); + } + } + + if (recoVtxMatchTypeInfo(*vertex) == InDetVertexTruthMatchUtils::VertexMatchType::MERGED) { + if (vertex == bestRecoHSVtx_truth) { + + fillHisto(m_vx_sumpT_HS_merged, sumPt / Gaudi::Units::GeV); + fillHisto(m_vx_sumCharge_HS_merged, sumCharge); + fillHisto(m_vx_sumCharge_N_trk_HS_merged, sumCharge/vertex->nTrackParticles()); + fillHisto(m_vx_z_asym_HS_merged, z_asym); + } + else { + fillHisto(m_vx_sumpT_merged, sumPt / Gaudi::Units::GeV); + fillHisto(m_vx_sumCharge_merged, sumCharge); + fillHisto(m_vx_sumCharge_N_trk_merged, sumCharge/vertex->nTrackParticles()); + fillHisto(m_vx_z_asym_merged, z_asym); + } + } + + if (recoVtxMatchTypeInfo(*vertex) == InDetVertexTruthMatchUtils::VertexMatchType::SPLIT) { + if (vertex == bestRecoHSVtx_truth) { + fillHisto(m_vx_sumpT_HS_split, sumPt / Gaudi::Units::GeV); + fillHisto(m_vx_sumCharge_HS_split, sumCharge); + fillHisto(m_vx_sumCharge_N_trk_HS_split, sumCharge/vertex->nTrackParticles()); + fillHisto(m_vx_z_asym_HS_split, z_asym); + } + else { + fillHisto(m_vx_sumpT_split, sumPt / Gaudi::Units::GeV); + fillHisto(m_vx_sumCharge_split, sumCharge); + fillHisto(m_vx_sumCharge_N_trk_split, sumCharge/vertex->nTrackParticles()); + fillHisto(m_vx_z_asym_HS_split, z_asym); + } + } + if (recoVtxMatchTypeInfo(*vertex) == InDetVertexTruthMatchUtils::VertexMatchType::FAKE) { + if (vertex == bestRecoHSVtx_truth) { + fillHisto(m_vx_sumpT_HS_fake, sumPt / Gaudi::Units::GeV); + fillHisto(m_vx_sumCharge_HS_fake, sumCharge); + fillHisto(m_vx_sumCharge_N_trk_HS_fake, sumCharge/vertex->nTrackParticles()); + fillHisto(m_vx_z_asym_HS_fake, z_asym); + } + + else { + + fillHisto(m_vx_sumpT_fake, sumPt / Gaudi::Units::GeV); + fillHisto(m_vx_sumCharge_fake, sumCharge); + fillHisto(m_vx_sumCharge_N_trk_fake, sumCharge/vertex->nTrackParticles()); + fillHisto(m_vx_z_asym_fake, z_asym); + } + } + + //end of sumPt; // can't return here as its a void function + + + +// Add new histos to check for number of tracks for each vertex type Helen OTP +// + + if (vertex == bestRecoHSVtx_truth) { + + + if (recoVtxMatchTypeInfo(*vertex) == InDetVertexTruthMatchUtils::VertexMatchType::MATCHED) { + + fillHisto(m_vx_ntracks_vs_HS_nmatchedvertices, vertex->nTrackParticles()); + } + + if (recoVtxMatchTypeInfo(*vertex) == InDetVertexTruthMatchUtils::VertexMatchType::MERGED) { + fillHisto(m_vx_ntracks_vs_HS_nmergedvertices, vertex->nTrackParticles()); + + } + + if (recoVtxMatchTypeInfo(*vertex) == InDetVertexTruthMatchUtils::VertexMatchType::SPLIT) { + fillHisto(m_vx_ntracks_vs_HS_nsplitvertices, vertex->nTrackParticles()); + } + if (recoVtxMatchTypeInfo(*vertex) == InDetVertexTruthMatchUtils::VertexMatchType::FAKE) { + fillHisto(m_vx_ntracks_vs_HS_nfakevertices, vertex->nTrackParticles()); + } + } + else { + + + + if (recoVtxMatchTypeInfo(*vertex) == InDetVertexTruthMatchUtils::VertexMatchType::MATCHED) { + + fillHisto(m_vx_ntracks_vs_nmatchedvertices, vertex->nTrackParticles()); + } + + if (recoVtxMatchTypeInfo(*vertex) == InDetVertexTruthMatchUtils::VertexMatchType::MERGED) { + fillHisto(m_vx_ntracks_vs_nmergedvertices, vertex->nTrackParticles()); + + } + + if (recoVtxMatchTypeInfo(*vertex) == InDetVertexTruthMatchUtils::VertexMatchType::SPLIT) { + fillHisto(m_vx_ntracks_vs_nsplitvertices, vertex->nTrackParticles()); + } + if (recoVtxMatchTypeInfo(*vertex) == InDetVertexTruthMatchUtils::VertexMatchType::FAKE) { + fillHisto(m_vx_ntracks_vs_nfakevertices, vertex->nTrackParticles()); + } + + } + + } // end loop over vertices @@ -501,6 +741,8 @@ void InDetPerfPlot_VertexTruthMatching::fill(const xAOD::VertexContainer& vertex fillHisto(m_vx_nReco_vs_nTruth_split, nTruthVertices, breakdown[InDetVertexTruthMatchUtils::VertexMatchType::SPLIT]); fillHisto(m_vx_nReco_vs_nTruth_fake, nTruthVertices, breakdown[InDetVertexTruthMatchUtils::VertexMatchType::FAKE]); fillHisto(m_vx_nReco_vs_nTruth_dummy, nTruthVertices, breakdown[InDetVertexTruthMatchUtils::VertexMatchType::DUMMY]); + + // And by hardscatter type: InDetVertexTruthMatchUtils::HardScatterType hsType = InDetVertexTruthMatchUtils::classifyHardScatter(vertexContainer); diff --git a/InnerDetector/InDetValidation/InDetPhysValMonitoring/src/InDetPerfPlot_VertexTruthMatching.h b/InnerDetector/InDetValidation/InDetPhysValMonitoring/src/InDetPerfPlot_VertexTruthMatching.h index 31574711c13c..c0961b52a50d 100644 --- a/InnerDetector/InDetValidation/InDetPhysValMonitoring/src/InDetPerfPlot_VertexTruthMatching.h +++ b/InnerDetector/InDetValidation/InDetPhysValMonitoring/src/InDetPerfPlot_VertexTruthMatching.h @@ -62,6 +62,8 @@ private: TProfile* m_vx_nReco_vs_nTruth_highpu; TProfile* m_vx_nReco_vs_nTruth_hssplit; TProfile* m_vx_nReco_vs_nTruth_none; + + // HS vertex reconstruction efficiency vs PU TEfficiency* m_vx_hs_reco_eff; // HS vertex selection efficiency vs PU @@ -117,6 +119,54 @@ private: TH2* m_vx_hs_truth_z_pull_vs_nTrk; TH2* m_vx_hs_truth_x_pull_vs_nTrk; TH2* m_vx_hs_truth_y_pull_vs_nTrk; + // New Histograms for #of tracks acssociated with each type of vertex - Helen OTP + TH1* m_vx_ntracks_vs_nmatchedvertices; + TH1* m_vx_ntracks_vs_nmergedvertices; + TH1* m_vx_ntracks_vs_nsplitvertices; + TH1* m_vx_ntracks_vs_nfakevertices; + TH1* m_vx_ntracks_vs_HS_nmatchedvertices; + TH1* m_vx_ntracks_vs_HS_nmergedvertices; + TH1* m_vx_ntracks_vs_HS_nsplitvertices; + TH1* m_vx_ntracks_vs_HS_nfakevertices; + // Helen OTP - sum Pt of tracks for each type of vertex + TH1* m_vx_sumpT_matched; + TH1* m_vx_sumpT_merged; + TH1* m_vx_sumpT_split; + TH1* m_vx_sumpT_fake; + TH1* m_vx_sumpT_HS_matched; + TH1* m_vx_sumpT_HS_merged; + TH1* m_vx_sumpT_HS_split; + TH1* m_vx_sumpT_HS_fake; + // Helen OTP - sum of charges + TH1* m_vx_sumCharge_matched; + TH1* m_vx_sumCharge_merged; + TH1* m_vx_sumCharge_split; + TH1* m_vx_sumCharge_fake; + TH1* m_vx_sumCharge_HS_matched; + TH1* m_vx_sumCharge_HS_merged; + TH1* m_vx_sumCharge_HS_split; + TH1* m_vx_sumCharge_HS_fake; + // Helen OTP - sum charge/n_trk + TH1* m_vx_sumCharge_N_trk_HS_matched; + TH1* m_vx_sumCharge_N_trk_HS_merged; + TH1* m_vx_sumCharge_N_trk_HS_split; + TH1* m_vx_sumCharge_N_trk_HS_fake; + TH1* m_vx_sumCharge_N_trk_matched; + TH1* m_vx_sumCharge_N_trk_merged; + TH1* m_vx_sumCharge_N_trk_split; + TH1* m_vx_sumCharge_N_trk_fake; + // Helen OTP asymmetery in z + TH1* m_vx_z_asym_matched; + TH1* m_vx_z_asym_merged; + TH1* m_vx_z_asym_split; + TH1* m_vx_z_asym_fake; + TH1* m_vx_z_asym_HS_matched; + TH1* m_vx_z_asym_HS_merged; + TH1* m_vx_z_asym_HS_split; + TH1* m_vx_z_asym_HS_fake; + + + ///@} private: diff --git a/InnerDetector/InDetValidation/InDetPhysValMonitoring/src/InDetPerfPlot_nTracks.cxx b/InnerDetector/InDetValidation/InDetPhysValMonitoring/src/InDetPerfPlot_nTracks.cxx index a261480fd998..3ee89c520b75 100644 --- a/InnerDetector/InDetValidation/InDetPhysValMonitoring/src/InDetPerfPlot_nTracks.cxx +++ b/InnerDetector/InDetValidation/InDetPhysValMonitoring/src/InDetPerfPlot_nTracks.cxx @@ -32,6 +32,14 @@ InDetPerfPlot_nTracks::initializePlots() { book(m_ntracks_vs_mu,"ntracks_vs_mu"); book(m_ntracks_vs_nvertices,"ntracks_vs_nvertices"); + //book(m_ntracks_vs_nmatchedvertices,"ntracks_vs_nmatchedvertices"); + //book(m_ntracks_vs_nmergedvertices,"ntracks_vs_nmergedvertices"); + //book(m_ntracks_vs_nsplitvertices,"ntracks_vs_nsplitvertices"); + //book(m_ntracks_vs_nfakevertices,"ntracks_vs_nfakevertices"); + + + + } void @@ -45,5 +53,9 @@ void InDetPerfPlot_nTracks::fill(const unsigned int ntracks, const unsigned int fillHisto(m_ntracks_vs_mu, muu, ntracks); fillHisto(m_ntracks_vs_nvertices, nvertices, ntracks); + // fillHisto(m_ntracks_vs_nmatchedvertices,nvertices, ntracks); + // fillHisto(m_ntracks_vs_nmergedvertices,nvertices, ntracks); + // fillHisto(m_ntracks_vs_nsplitvertices,nvertices, ntracks); + // fillHisto(m_ntracks_vs_nfakevertices,nvertices, ntracks); } diff --git a/InnerDetector/InDetValidation/InDetPhysValMonitoring/src/InDetRttPlots.cxx b/InnerDetector/InDetValidation/InDetPhysValMonitoring/src/InDetRttPlots.cxx index a8b5d6887489..3fe6800de317 100644 --- a/InnerDetector/InDetValidation/InDetPhysValMonitoring/src/InDetRttPlots.cxx +++ b/InnerDetector/InDetValidation/InDetPhysValMonitoring/src/InDetRttPlots.cxx @@ -17,6 +17,9 @@ InDetRttPlots::InDetRttPlots(InDetPlotBase* pParent, const std::string& sDir, const int iDetailLevel) : InDetPlotBase(pParent, sDir), m_trackParameters(this, "Tracks/Selected/Parameters"), + m_matchedTrackParameters(this, "Tracks/Matched/Parameters"), + m_mergedTrackParameters(this, "Tracks/Merged/Parameters"), + m_fakeTrackParameters(this, "Tracks/Fake/Parameters"), m_nTracks(this, "Tracks/Tracks"), m_hitResidualPlot(this, "Tracks/Hits/Residuals"), m_hitEffPlot(this, "Tracks/Hits/Efficiency"), @@ -152,6 +155,9 @@ InDetRttPlots::fill(const xAOD::TrackParticle& particle) { m_hitEffPlot.fill(particle); // fill pt plots m_trackParameters.fill(particle); + m_matchedTrackParameters.fill(particle); + m_mergedTrackParameters.fill(particle); + m_fakeTrackParameters.fill(particle); m_anTrackingPlots.fill(particle); if(m_iDetailLevel >= 200){ @@ -204,6 +210,9 @@ void InDetRttPlots::fill(const xAOD::TruthParticle& truthParticle) { // fill truth plots m_trackParameters.fill(truthParticle); + m_matchedTrackParameters.fill(truthParticle); + m_mergedTrackParameters.fill(truthParticle); + m_fakeTrackParameters.fill(truthParticle); } // diff --git a/InnerDetector/InDetValidation/InDetPhysValMonitoring/src/InDetRttPlots.h b/InnerDetector/InDetValidation/InDetPhysValMonitoring/src/InDetRttPlots.h index c5383ace813d..f85f6f21c3cb 100644 --- a/InnerDetector/InDetValidation/InDetPhysValMonitoring/src/InDetRttPlots.h +++ b/InnerDetector/InDetValidation/InDetPhysValMonitoring/src/InDetRttPlots.h @@ -81,6 +81,9 @@ public: private: InDetPerfPlot_TrackParameters m_trackParameters; + InDetPerfPlot_TrackParameters m_matchedTrackParameters; + InDetPerfPlot_TrackParameters m_mergedTrackParameters; + InDetPerfPlot_TrackParameters m_fakeTrackParameters; InDetPerfPlot_nTracks m_nTracks; InDetPerfPlot_HitResidual m_hitResidualPlot; InDetPerfPlot_HitEfficiency m_hitEffPlot; -- GitLab