From ec196fa0ec2c61e1e431836b8af9d78f427bbf75 Mon Sep 17 00:00:00 2001
From: Helen Maguire <helen.maguire@cern.ch>
Date: Wed, 2 Jun 2021 17:37:00 +0200
Subject: [PATCH] 2June added num vertices, track weight and normalised track
 weight

---
 .../share/InDetPVMPlotDefCommon.xml           | 634 ++++++++++++++-
 .../src/InDetPerfPlot_VertexTruthMatching.cxx | 762 +++++++++++++++++-
 .../src/InDetPerfPlot_VertexTruthMatching.h   | 160 ++++
 3 files changed, 1496 insertions(+), 60 deletions(-)

diff --git a/InnerDetector/InDetValidation/InDetPhysValMonitoring/share/InDetPVMPlotDefCommon.xml b/InnerDetector/InDetValidation/InDetPhysValMonitoring/share/InDetPVMPlotDefCommon.xml
index a26dc53fcd58..09df1ba9928d 100644
--- a/InnerDetector/InDetValidation/InDetPhysValMonitoring/share/InDetPVMPlotDefCommon.xml
+++ b/InnerDetector/InDetValidation/InDetPhysValMonitoring/share/InDetPVMPlotDefCommon.xml
@@ -994,27 +994,27 @@
   <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"/>
+  <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_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"/>
+  <x title="Number of Matched HS Vertices" n="150" lo="0.0" hi="150"/>
   <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"/>
+  <x title="sum p_{T} (GeV)of tracks" n="100" lo="0.0" hi="150"/>
   <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"/>
+  <x title="sum p_{T} (GeV)of tracks" n="100" lo="0.0" hi="150"/>
   <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"/>
+  <x title="sum p_{T} (GeV)of tracks" n="100" lo="0.0" hi="150"/>
   <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"/>
+  <x title="sum p_{T} (GeV)of tracks" n="100" lo="0.0" hi="150"/>
   <y title="Entries" />
 </h>
 <h id="vx_sumpT_HS_matched" type="TH1" title="SumPt of tracks for HS matched vertices">
@@ -1036,51 +1036,51 @@
 
 <!--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"/>
+  <x title="sum of charges of tracks" n="51" 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"/>
+  <x title="sum of charges of tracks" n="51" 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"/>
+  <x title="sum of charges of tracks" n="51" 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"/>
+  <x title="sum of charges of tracks" n="51" 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"/>
+  <x title="sum of charges of tracks" n="51" 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"/>
+  <x title="sum of charges of tracks" n="51" 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"/>
+  <x title="sum of charges of tracks" n="51" 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"/>
+  <x title="sum of charges of tracks" n="51" 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"/>
+  <x title="sum of charges of tracks/number of tracks" n="100" lo="-0.4" hi="0.4"/>
   <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"/>
+  <x title="sum of charges of tracks/number of tracks" n="100" lo="-0.4" hi="0.4"/>
   <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"/>
+  <x title="sum of charges of tracks/number of tracks" n="100" lo="-0.4" hi="0.4"/>
   <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"/>
+  <x title="sum of charges of tracks/number of tracks" n="100" lo="-0.4" hi="0.4"/>
   <y title="Entries" />
 </h>
 
@@ -1101,38 +1101,620 @@
   <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"/>
+  <x title="asymmetry of track Z0 around vertex of tracks" n="100" lo="-1.0" hi="1.0"/>
   <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"/>
+  <x title="asymmetry of track Z0 around vertex of tracks" n="100" lo="-1.0" hi="1.0"/>
   <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"/>
+  <x title="asymmetry of track Z0 around vertex of tracks" n="100" lo="-1.0" hi="1.0"/>
   <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"/>
+  <x title="asymmetry of track Z0 around vertex of tracks" n="100" lo="-1.0" hi="1.0"/>
+  <y title="Entries" />
+</h>
+<h id="vx_track_weight_matched" type="TH1" title="Weights of tracks for PU  matched vertices">
+  <x title="track weights for PU vertex" n="100" lo="0" hi="1.10"/>
+  <y title="Entries" />
+</h>
+<h id="vx_track_weight_merged" type="TH1" title="Weights of tracks for PU merged vertices">
+  <x title="track weights for PU vertex" n="100" lo="0" hi="1.10"/>
+  <y title="Entries" />
+</h>
+<h id="vx_track_weight_split" type="TH1" title="Weights of tracks for PU split vertices">
+  <x title="track weights for PU vertex" n="100" lo="0" hi="1.10"/>
+  <y title="Entries" />
+</h>
+<h id="vx_track_weight_fake" type="TH1" title="Weights of tracks for PU fake vertices">
+  <x title="track weights for PU vertex" n="100" lo="0" hi="1.10"/>
+  <y title="Entries" />
+</h>
+<h id="vx_normalised_track_weight_matched" type="TH1" title="Normalised weights of tracks for PU  matched vertices">
+  <x title="Normalised track weights for PU vertex" n="100" lo="0" hi="1.10"/>
+  <y title="Entries" />
+</h>
+<h id="vx_normalised_track_weight_merged" type="TH1" title="Normalised weights of tracks for PU merged vertices">
+  <x title="Normalised track weights for PU vertex" n="100" lo="0" hi="1.10"/>
+  <y title="Entries" />
+</h>
+<h id="vx_normalised_track_weight_split" type="TH1" title="Normalised weights of tracks for PU split vertices">
+  <x title="Normalised track weights for PU vertex" n="100" lo="0" hi="1.10"/>
   <y title="Entries" />
 </h>
+<h id="vx_normalised_track_weight_fake" type="TH1" title="Normalised weights of tracks for PU fake vertices">
+  <x title="Normalised track weights for PU vertex" n="100" lo="0" hi="1.10"/>
+  <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"/>
+  <x title="asymmetry of track Z0 around vertex of tracks" n="100" lo="-1.0" hi="1"/>
   <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"/>
+  <x title="asymmetry of track Z0 around vertex of tracks" n="100" lo="-1.0" hi="1"/>
   <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"/>
+  <x title="asymmetry of track Z0 around vertex of tracks" n="100" lo="-1.0" hi="1"/>
   <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"/>
+  <x title="asymmetry of track Z0 around vertex of tracks" n="100" lo="-1.0" hi="1"/>
+  <y title="Entries" />
+</h>
+<h id="vx_track_weight_HS_matched" type="TH1" title="Weights of tracks for HS  matched vertices">
+  <x title="track weights for HS vertex" n="100" lo="0" hi="1.10"/>
+  <y title="Entries" />
+</h>
+<h id="vx_track_weight_HS_merged" type="TH1" title="Weights of tracks for HS merged vertices">
+  <x title="track weights for HS vertex" n="100" lo="0" hi="1.10"/>
+  <y title="Entries" />
+</h>
+<h id="vx_track_weight_HS_split" type="TH1" title="Weights of tracks for HS split vertices">
+  <x title="track weights for HS vertex" n="100" lo="0" hi="1.10"/>
+  <y title="Entries" />
+</h>
+<h id="vx_track_weight_HS_fake" type="TH1" title="Weights of tracks for HS fake vertices">
+  <x title="track weights for HS vertex" n="100" lo="0" hi="1.10"/>
+  <y title="Entries" />
+</h>
+<h id="vx_normalised_track_weight_HS_matched" type="TH1" title="Normalised weights of tracks for HS  matched vertices">
+  <x title="Normalised track weights for HS vertex" n="100" lo="0" hi="1.10"/>
+  <y title="Entries" />
+</h>
+<h id="vx_normalised_track_weight_HS_merged" type="TH1" title="Normalised weights of tracks for HS merged vertices">
+  <x title="Normalised track weights for HS vertex" n="100" lo="0" hi="1.10"/>
+  <y title="Entries" />
+</h>
+<h id="vx_normalised_track_weight_HS_split" type="TH1" title="Normalised weights of tracks for HS split vertices">
+  <x title="Normalised track weights for HS vertex" n="100" lo="0" hi="1.10"/>
+  <y title="Entries" />
+</h>
+<h id="vx_normalised_track_weight_HS_fake" type="TH1" title="Normalised weights of tracks for HS fake vertices">
+  <x title="Normalised track weights for HS vertex" n="100" lo="0" hi="1.10"/>
+  <y title="Entries" />
+</h>
+<h id="vx_d_asym_matched" type="TH1" title="asymmetry of track d0 around vertex of tracks for matched vertices">
+  <x title="asymmetry of track d0 around vertex of tracks" n="100" lo="-1.0" hi="1.0"/>
+  <y title="Entries" />
+</h>
+<h id="vx_d_asym_merged" type="TH1" title="asymmetry of track d0 around vertex of tracks for merged vertices">
+  <x title="asymmetry of track d0 around vertex of tracks" n="100" lo="-1.0" hi="1.0"/>
+  <y title="Entries" />
+</h>
+<h id="vx_d_asym_split" type="TH1" title="asymmetry of track d0 around vertex of tracks for split vertices">
+  <x title="asymmetry of track d0 around vertex of tracks" n="100" lo="-1.0" hi="1.0"/>
+  <y title="Entries" />
+</h>
+<h id="vx_d_asym_fake" type="TH1" title="asymmetry of track d0 around vertex of tracks for fake vertices">
+  <x title="asymmetry of track d0 around vertex of tracks" n="100" lo="-1.0" hi="1.0"/>
+  <y title="Entries" />
+</h>
+<h id="vx_d_asym_HS_matched" type="TH1" title="asymmetry of track d0 around vertex of tracks for HS matched vertices">
+  <x title="asymmetry of track d0 around vertex of tracks" n="100" lo="-1.0" hi="1"/>
+  <y title="Entries" />
+</h>
+<h id="vx_d_asym_HS_merged" type="TH1" title="asymmetry of track d0 around vertex of tracks for HS merged vertices">
+  <x title="asymmetry of track d0 around vertex of tracks" n="100" lo="-1.0" hi="1"/>
+  <y title="Entries" />
+</h>
+<h id="vx_d_asym_HS_split" type="TH1" title="asymmetry of track d0 around vertex of tracks for HS split vertices">
+  <x title="asymmetry of track d0 around vertex of tracks" n="100" lo="-1.0" hi="1"/>
+  <y title="Entries" />
+</h>
+<h id="vx_d_asym_HS_fake" type="TH1" title="asymmetry of track d0 around vertex of tracks for HS fake vertices">
+  <x title="asymmetry of track d0 around vertex of tracks" n="100" lo="-1.0" hi="1"/>
+  <y title="Entries" />
+</h>
+<h id="vx_chi2Over_ndf_matched" type="TH1" title="Chi squared/ndf of tracks for PU matched vertices">
+  <x title="Chi squared/ndf for vertex fit for PU" n="100" lo="0" hi="3"/>
+  <y title="Entries" />
+</h>
+<h id="vx_chi2Over_ndf_merged" type="TH1" title="Chi squared/ndf of tracks for PU merged vertices">
+  <x title="Chi squared/ndf for vertex fit for PU" n="100" lo="0" hi="3"/>
+  <y title="Entries" />
+</h>
+<h id="vx_chi2Over_ndf_split" type="TH1" title="Chi squared/ndf of tracks for PU split vertices">
+  <x title="Chi squared/ndf for vertex fit for PU" n="100" lo="0" hi="3"/>
+  <y title="Entries" />
+</h>
+<h id="vx_chi2Over_ndf_fake" type="TH1" title="Chi squared/ndf of tracks for PU fake vertices">
+  <x title="Chi squared/ndf for vertex fit for PU" n="100" lo="0" hi="3"/>
+  <y title="Entries" />
+</h>
+<h id="vx_chi2Over_ndf_HS_matched" type="TH1" title="Chi squared/ndf of tracks for HS matched vertices">
+  <x title="Chi squared/ndf for vertex fit for matched HS" n="100" lo="0" hi="3"/>
+  <y title="Entries" />
+</h>
+<h id="vx_chi2Over_ndf_HS_merged" type="TH1" title="Chi squared/ndf of tracks for HS merged vertices">
+  <x title="Chi squared/ndf for vertex fit for merged HS" n="100" lo="0" hi="3"/>
+  <y title="Entries" />
+</h>
+<h id="vx_chi2Over_ndf_HS_split" type="TH1" title="Chi squared/ndf of tracks for HS split vertices">
+  <x title="Chi squared/ndf for vertex fit for split HS" n="100" lo="0" hi="3"/>
+  <y title="Entries" />
+</h>
+<h id="vx_chi2Over_ndf_HS_fake" type="TH1" title="Chi squared/ndf of tracks for HS fake vertices">
+  <x title="Chi squared/ndf for vertex fit for fake HS" n="100" lo="0" hi="3"/>
+  <y title="Entries" />
+</h>
+<h id="vx_z0_skewness_HS_matched" type="TH1" title="Skewness of z0 of tracks z0 for HS matched vertices">
+  <x title="Skewness for z0 for HS" n="100" lo="-5" hi="5"/>
+  <y title="Entries" />
+</h>
+<h id="vx_z0_skewness_HS_merged" type="TH1" title="Skewness of z0 of tracks for HS merged vertices">
+  <x title="Skewness for z0 for HS" n="100" lo="-5" hi="5"/>
+  <y title="Entries" />
+</h>
+<h id="vx_z0_skewness_HS_split" type="TH1" title="Skewness of z0 of tracks for HS split vertices">
+  <x title="Skewness for z0 for HS" n="100" lo="-5" hi="5"/>
+  <y title="Entries" />
+</h>
+<h id="vx_z0_skewness_HS_fake" type="TH1" title="Skewness of z0 of tracks for HS fake vertices">
+  <x title="Skewness for z0 for HS" n="100" lo="-5" hi="5"/>
+  <y title="Entries" />
+</h>
+<h id="vx_z0_skewness_matched" type="TH1" title="Skewness of z0 of tracks z0 for PU matched vertices">
+  <x title="Skewness for Z0 PU" n="100" lo="-5" hi="5"/>
+  <y title="Entries" />
+</h>
+<h id="vx_z0_skewness_merged" type="TH1" title="Skewness of z0 of tracks for PU merged vertices">
+  <x title="Skewness for Z0 PU" n="100" lo="-5" hi="5"/>
+  <y title="Entries" />
+</h>
+<h id="vx_z0_skewness_split" type="TH1" title="Skewness of z0 of tracks for PU split vertices">
+  <x title="Skewness for Z0 PU" n="100" lo="-5" hi="5"/>
+  <y title="Entries" />
+</h>
+<h id="vx_z0_skewness_fake" type="TH1" title="Skewness of z0 of tracks for PU fake vertices">
+  <x title="Skewness for Z0 PU" n="100" lo="-5" hi="5"/>
+  <y title="Entries" />
+</h>
+<h id="vx_z0_kurtosis_HS_matched" type="TH1" title="Kurtosis of z0 of tracks z0 for HS matched vertices">
+  <x title="Kurtosis for Z0 HS" n="100" lo="0" hi="20"/>
+  <y title="Entries" />
+</h>
+<h id="vx_z0_kurtosis_HS_merged" type="TH1" title="Kurtosis of z0 of tracks for HS merged vertices">
+  <x title="Kurtosis for Z0 HS" n="100" lo="0" hi="20"/>
+  <y title="Entries" />
+</h>
+<h id="vx_z0_kurtosis_HS_split" type="TH1" title="Kurtosis of z0 of tracks for HS split vertices">
+  <x title="Kurtosis for Z0 HS" n="100" lo="0" hi="20"/>
+  <y title="Entries" />
+</h>
+<h id="vx_z0_kurtosis_HS_fake" type="TH1" title="Kurtosis of z0 of tracks for HS fake vertices">
+  <x title="Kurtosis for Z0 HS" n="100" lo="0" hi="20"/>
+  <y title="Entries" />
+</h>
+<h id="vx_z0_kurtosis_matched" type="TH1" title="Kurtosis of z0 of tracks for PU matched vertices">
+  <x title="Kurtosis for z0 PU" n="100" lo="0" hi="20"/>
+  <y title="Entries" />
+</h>
+<h id="vx_z0_kurtosis_merged" type="TH1" title="Kurtosis of z0 of tracks for PU merged vertices">
+  <x title="Kurtosis for z0 PU" n="100" lo="0" hi="20"/>
+  <y title="Entries" />
+</h>
+<h id="vx_z0_kurtosis_split" type="TH1" title="Kurtosis of z0 of tracks for PU split vertices">
+  <x title="Kurtosis for z0 PU" n="100" lo="0" hi="20"/>
+  <y title="Entries" />
+</h>
+<h id="vx_z0_kurtosis_fake" type="TH1" title="Kurtosis of z0 of tracks for PU fake vertices">
+  <x title="Kurtosis for z0 PU" n="100" lo="0" hi="20"/>
+  <y title="Entries" />
+</h>
+<h id="vx_d0_skewness_HS_matched" type="TH1" title="Skewness of d0 of tracks for HS matched vertices">
+  <x title="Skewness for d0 HS" n="100" lo="-5" hi="5"/>
+  <y title="Entries" />
+</h>
+<h id="vx_d0_skewness_HS_merged" type="TH1" title="Skewness of d0 of tracks for HS merged vertices">
+  <x title="Skewness for d0 HS" n="100" lo="-5" hi="5"/>
+  <y title="Entries" />
+</h>
+<h id="vx_d0_skewness_HS_split" type="TH1" title="Skewness of d0 of tracks for HS split vertices">
+  <x title="Skewness for d0 HS" n="100" lo="-5" hi="5"/>
+  <y title="Entries" />
+</h>
+<h id="vx_d0_skewness_HS_fake" type="TH1" title="Skewness of d0 of tracks for HS fake vertices">
+  <x title="Skewness for d0 HS" n="100" lo="-5" hi="5"/>
+  <y title="Entries" />
+</h>
+<h id="vx_d0_skewness_matched" type="TH1" title="Skewness of d0 of tracks for PU matched vertices">
+  <x title="Skewness for d0 PU" n="100" lo="-5" hi="5"/>
+  <y title="Entries" />
+</h>
+<h id="vx_d0_skewness_merged" type="TH1" title="Skewness of d0 of tracks for PU merged vertices">
+  <x title="Skewness for d0 PU" n="100" lo="-5" hi="5"/>
+  <y title="Entries" />
+</h>
+<h id="vx_d0_skewness_split" type="TH1" title="Skewness of d0 of tracks for PU split vertices">
+  <x title="Skewness for d0 PU" n="100" lo="-5" hi="5"/>
+  <y title="Entries" />
+</h>
+<h id="vx_d0_skewness_fake" type="TH1" title="Skewness of d0 of tracks for PU fake vertices">
+  <x title="Skewness for d0 PU" n="100" lo="-5" hi="5"/>
+  <y title="Entries" />
+</h>
+<h id="vx_d0_kurtosis_HS_matched" type="TH1" title="Kurtosis of d0 of tracks for HS matched vertices">
+  <x title="Kurtosis for d0 HS" n="100" lo="0" hi="20"/>
+  <y title="Entries" />
+</h>
+<h id="vx_d0_kurtosis_HS_merged" type="TH1" title="Kurtosis of d0 of tracks for HS merged vertices">
+  <x title="Kurtosis for d0 HS" n="100" lo="0" hi="20"/>
+  <y title="Entries" />
+</h>
+<h id="vx_d0_kurtosis_HS_split" type="TH1" title="Kurtosis of d0 of tracks for HS split vertices">
+  <x title="Kurtosis for d0 HS" n="100" lo="0" hi="20"/>
+  <y title="Entries" />
+</h>
+<h id="vx_d0_kurtosis_HS_fake" type="TH1" title="Kurtosis of d0 of tracks for HS fake vertices">
+  <x title="Kurtosis for d0 HS" n="100" lo="0" hi="20"/>
+  <y title="Entries" />
+</h>
+<h id="vx_d0_kurtosis_matched" type="TH1" title="Kurtosis of d0 of tracks for PU matched vertices">
+  <x title="Kurtosis for d0 PU" n="100" lo="0" hi="20"/>
+  <y title="Entries" />
+</h>
+<h id="vx_d0_kurtosis_merged" type="TH1" title="Kurtosis of d0 of tracks for PU merged vertices">
+  <x title="Kurtosis for d0 PU" n="100" lo="0" hi="20"/>
+  <y title="Entries" />
+</h>
+<h id="vx_d0_kurtosis_split" type="TH1" title="Kurtosis of d0 of tracks for PU split vertices">
+  <x title="Kurtosis for d0 PU" n="100" lo="0" hi="20"/>
+  <y title="Entries" />
+</h>
+<h id="vx_d0_kurtosis_fake" type="TH1" title="Kurtosis of d0 of tracks for PU fake vertices">
+  <x title="Kurtosis for d0 PU" n="100" lo="0" hi="20"/>
+  <y title="Entries" />
+</h>
+<h id="vx_pt_skewness_HS_matched" type="TH1" title="Skewness of pt of tracks for HS matched vertices">
+  <x title="Skewness for pt HS" n="100" lo="-10" hi="10"/>
+  <y title="Entries" />
+</h>
+<h id="vx_pt_skewness_HS_merged" type="TH1" title="Skewness of pt of tracks for HS merged vertices">
+  <x title="Skewness for pt HS" n="100" lo="-10" hi="10"/>
+  <y title="Entries" />
+</h>
+<h id="vx_pt_skewness_HS_split" type="TH1" title="Skewness of pt of tracks for HS split vertices">
+  <x title="Skewness for pt HS" n="100" lo="-10" hi="10"/>
+  <y title="Entries" />
+</h>
+<h id="vx_pt_skewness_HS_fake" type="TH1" title="Skewness of pt of tracks for HS fake vertices">
+  <x title="Skewness for pt HS" n="100" lo="-10" hi="10"/>
+  <y title="Entries" />
+</h>
+<h id="vx_pt_skewness_matched" type="TH1" title="Skewness of pt of tracks for PU matched vertices">
+  <x title="Skewness for pt PU" n="100" lo="-10" hi="10"/>
+  <y title="Entries" />
+</h>
+<h id="vx_pt_skewness_merged" type="TH1" title="Skewness of pt of tracks for PU merged vertices">
+  <x title="Skewness for pt PU" n="100" lo="-10" hi="10"/>
+  <y title="Entries" />
+</h>
+<h id="vx_pt_skewness_split" type="TH1" title="Skewness of pt of tracks for PU split vertices">
+  <x title="Skewness for pt PU" n="100" lo="-10" hi="10"/>
+  <y title="Entries" />
+</h>
+<h id="vx_pt_skewness_fake" type="TH1" title="Skewness of pt of tracks for PU fake vertices">
+  <x title="Skewness for pt PU" n="100" lo="-10" hi="10"/>
+  <y title="Entries" />
+</h>
+<h id="vx_pt_kurtosis_HS_matched" type="TH1" title="Kurtosis of pt of tracks for HS matched vertices">
+  <x title="Kurtosis for pt HS" n="100" lo="0" hi="50"/>
+  <y title="Entries" />
+</h>
+<h id="vx_pt_kurtosis_HS_merged" type="TH1" title="Kurtosis of pt of tracks for HS merged vertices">
+  <x title="Kurtosis for pt HS" n="100" lo="0" hi="50"/>
+  <y title="Entries" />
+</h>
+<h id="vx_pt_kurtosis_HS_split" type="TH1" title="Kurtosis of pt of tracks for HS split vertices">
+  <x title="Kurtosis for pt HS" n="100" lo="0" hi="50"/>
+  <y title="Entries" />
+</h>
+<h id="vx_pt_kurtosis_HS_fake" type="TH1" title="Kurtosis of pt of tracks for HS fake vertices">
+  <x title="Kurtosis for pt HS" n="100" lo="0" hi="50"/>
+  <y title="Entries" />
+</h>
+<h id="vx_pt_kurtosis_matched" type="TH1" title="Kurtosis of pt of tracks for PU matched vertices">
+  <x title="Kurtosis for pt PU" n="100" lo="0" hi="20"/>
+  <y title="Entries" />
+</h>
+<h id="vx_pt_kurtosis_merged" type="TH1" title="Kurtosis of pt of tracks for PU merged vertices">
+  <x title="Kurtosis for pt PU" n="100" lo="0" hi="20"/>
+  <y title="Entries" />
+</h>
+<h id="vx_pt_kurtosis_split" type="TH1" title="Kurtosis of pt of tracks for PU split vertices">
+  <x title="Kurtosis for pt PU" n="100" lo="0" hi="20"/>
+  <y title="Entries" />
+</h>
+<h id="vx_pt_kurtosis_fake" type="TH1" title="Kurtosis of pt of tracks for PU fake vertices">
+  <x title="Kurtosis for pt PU" n="100" lo="0" hi="20"/>
+  <y title="Entries" />
+</h>
+<!-- Helen ALL vertices (PU and HS) -->
+<h id="vx_sumpT_ALL_matched" type="TH1" title="SumPt of tracks for ALL matched vertices">
+  <x title="sum p_{T} (GeV)of tracks" n="100" lo="20.0" hi="400"/>
+  <y title="Entries" />
+</h>
+<h id="vx_sumpT_ALL_merged" type="TH1" title="SumPt of tracks for ALL merged vertices">
+  <x title="sum p_{T} (GeV)of tracks" n="100" lo="20.0" hi="400"/>
+  <y title="Entries" />
+</h>
+<h id="vx_sumpT_ALL_split" type="TH1" title="SumPt of tracks for ALL split vertices">
+  <x title="sum p_{T} (GeV)of tracks" n="100" lo="20.0" hi="400"/>
+  <y title="Entries" />
+</h>
+<h id="vx_sumpT_ALL_fake" type="TH1" title="SumPt of tracks for ALL fake vertices">
+  <x title="sum p_{T} (GeV)of tracks" n="100" lo="20.0" hi="400"/>
+  <y title="Entries" />
+</h>
+<h id="vx_sumCharge_ALL_matched" type="TH1" title="Sum of charges of tracks for ALL matched vertices">
+  <x title="sum of charges of tracks" n="51" lo="-25.0" hi="25"/>
+  <y title="Entries" />
+</h>
+<h id="vx_sumCharge_ALL_merged" type="TH1" title="Sum of charges of tracks for ALL merged vertices">
+  <x title="sum of charges of tracks" n="51" lo="-25.0" hi="25"/>
+  <y title="Entries" />
+</h>
+<h id="vx_sumCharge_ALL_split" type="TH1" title="Sumof charges of tracks for ALL split vertices">
+  <x title="sum of charges of tracks" n="51" lo="-25.0" hi="25"/>
+  <y title="Entries" />
+</h>
+<h id="vx_sumCharge_ALL_fake" type="TH1" title="Sum of charges of tracks for ALL fake vertices">
+  <x title="sum of charges of tracks" n="51" lo="-25.0" hi="25"/>
+  <y title="Entries" />
+</h>
+<h id="vx_sumCharge_N_trk_ALL_matched" type="TH1" title="Sum of charges of tracks/N_trk for ALL matched vertices">
+  <x title="sum of charges of tracks/number of tracks" n="100" lo="-0.4" hi="0.4"/>
+  <y title="Entries" />
+</h>
+<h id="vx_sumCharge_N_trk_ALL_merged" type="TH1" title="Sum of charges of tracks/N_trk for ALL merged vertices">
+  <x title="sum of charges of tracks/number of tracks" n="100" lo="-0.4" hi="0.4"/>
+  <y title="Entries" />
+</h>
+<h id="vx_sumCharge_N_trk_ALL_split" type="TH1" title="Sum of charges of tracks/N_trk for ALL split vertices">
+  <x title="sum of charges of tracks/number of tracks" n="100" lo="-0.4" hi="0.4"/>
+  <y title="Entries" />
+</h>
+<h id="vx_sumCharge_N_trk_ALL_fake" type="TH1" title="Sum of charges of tracks/N_trk for ALL fake vertices">
+  <x title="sum of charges of tracks/number of tracks" n="100" lo="-0.4" hi="0.4"/>
   <y title="Entries" />
 </h>
 
+<h id="vx_z_asym_ALL_matched" type="TH1" title="asymmetry of track Z0 around vertex of tracks for ALL matched vertices">
+  <x title="asymmetry of track Z0 around vertex of tracks" n="100" lo="-1.0" hi="1"/>
+  <y title="Entries" />
+</h>
+<h id="vx_z_asym_ALL_merged" type="TH1" title="asymmetry of track Z0 around vertex of tracks for ALL merged vertices">
+  <x title="asymmetry of track Z0 around vertex of tracks" n="100" lo="-1.0" hi="1"/>
+  <y title="Entries" />
+</h>
+<h id="vx_z_asym_ALL_split" type="TH1" title="asymmetry of track Z0 around vertex of tracks for ALL split vertices">
+  <x title="asymmetry of track Z0 around vertex of tracks" n="100" lo="-1.0" hi="1"/>
+  <y title="Entries" />
+</h>
+<h id="vx_z_asym_ALL_fake" type="TH1" title="asymmetry of track Z0 around vertex of tracks for ALL fake vertices">
+  <x title="asymmetry of track Z0 around vertex of tracks" n="100" lo="-1.0" hi="1"/>
+  <y title="Entries" />
+</h>
+<h id="vx_track_weight_ALL_matched" type="TH1" title="Weights of tracks for ALL  matched vertices">
+  <x title="track weights for ALL vertex" n="100" lo="0" hi="1.10"/>
+  <y title="Entries" />
+</h>
+<h id="vx_track_weight_ALL_merged" type="TH1" title="Weights of tracks for ALL merged vertices">
+  <x title="track weights for ALL vertex" n="100" lo="0" hi="1.10"/>
+  <y title="Entries" />
+</h>
+<h id="vx_track_weight_ALL_split" type="TH1" title="Weights of tracks for ALL split vertices">
+  <x title="track weights for ALL vertex" n="100" lo="0" hi="1.10"/>
+  <y title="Entries" />
+</h>
+<h id="vx_track_weight_ALL_fake" type="TH1" title="Weights of tracks for ALL fake vertices">
+  <x title="track weights for ALL vertex" n="100" lo="0" hi="1.10"/>
+  <y title="Entries" />
+</h>
+<h id="vx_normalised_track_weight_ALL_matched" type="TH1" title="Normalised weights of tracks for ALL  matched vertices">
+  <x title="Normalised track weights for ALL vertex" n="100" lo="0" hi="1.10"/>
+  <y title="Entries" />
+</h>
+<h id="vx_normalised_track_weight_ALL_merged" type="TH1" title="Normalised weights of tracks for ALL merged vertices">
+  <x title="Normalised track weights for ALL vertex" n="100" lo="0" hi="1.10"/>
+  <y title="Entries" />
+</h>
+<h id="vx_normalised_track_weight_ALL_split" type="TH1" title="Normalised weights of tracks for ALL split vertices">
+  <x title="Normalised track weights for ALL vertex" n="100" lo="0" hi="1.10"/>
+  <y title="Entries" />
+</h>
+<h id="vx_normalised_track_weight_ALL_fake" type="TH1" title="Normalised weights of tracks for ALL fake vertices">
+  <x title="Normalised track weights for ALL vertex" n="100" lo="0" hi="1.10"/>
+  <y title="Entries" />
+</h>
+<h id="vx_d_asym_ALL_matched" type="TH1" title="asymmetry of track d0 around vertex of tracks for ALL matched vertices">
+  <x title="asymmetry of track d0 around vertex of tracks" n="100" lo="-1.0" hi="1"/>
+  <y title="Entries" />
+</h>
+<h id="vx_d_asym_ALL_merged" type="TH1" title="asymmetry of track d0 around vertex of tracks for ALL merged vertices">
+  <x title="asymmetry of track d0 around vertex of tracks" n="100" lo="-1.0" hi="1"/>
+  <y title="Entries" />
+</h>
+<h id="vx_d_asym_ALL_split" type="TH1" title="asymmetry of track d0 around vertex of tracks for ALL split vertices">
+  <x title="asymmetry of track d0 around vertex of tracks" n="100" lo="-1.0" hi="1"/>
+  <y title="Entries" />
+</h>
+<h id="vx_d_asym_ALL_fake" type="TH1" title="asymmetry of track d0 around vertex of tracks for ALL fake vertices">
+  <x title="asymmetry of track d0 around vertex of tracks" n="100" lo="-1.0" hi="1"/>
+  <y title="Entries" />
+</h>
+<h id="vx_chi2Over_ndf_ALL_matched" type="TH1" title="Chi squared/ndf of tracks for ALL matched vertices">
+  <x title="Chi squared/ndf for vertex fit for matched ALL" n="100" lo="0" hi="3"/>
+  <y title="Entries" />
+</h>
+<h id="vx_chi2Over_ndf_ALL_merged" type="TH1" title="Chi squared/ndf of tracks for ALL merged vertices">
+  <x title="Chi squared/ndf for vertex fit for merged ALL" n="100" lo="0" hi="3"/>
+  <y title="Entries" />
+</h>
+<h id="vx_chi2Over_ndf_ALL_split" type="TH1" title="Chi squared/ndf of tracks for ALL split vertices">
+  <x title="Chi squared/ndf for vertex fit for split ALL" n="100" lo="0" hi="3"/>
+  <y title="Entries" />
+</h>
+<h id="vx_chi2Over_ndf_ALL_fake" type="TH1" title="Chi squared/ndf of tracks for ALL fake vertices">
+  <x title="Chi squared/ndf for vertex fit for fake ALL" n="100" lo="0" hi="3"/>
+  <y title="Entries" />
+</h>
+<h id="vx_z0_skewness_ALL_matched" type="TH1" title="Skewness of z0 of tracks z0 for ALL matched vertices">
+  <x title="Skewness for z0 for ALL" n="100" lo="-5" hi="5"/>
+  <y title="Entries" />
+</h>
+<h id="vx_z0_skewness_ALL_merged" type="TH1" title="Skewness of z0 of tracks for ALL merged vertices">
+  <x title="Skewness for z0 for ALL" n="100" lo="-5" hi="5"/>
+  <y title="Entries" />
+</h>
+<h id="vx_z0_skewness_ALL_split" type="TH1" title="Skewness of z0 of tracks for ALL split vertices">
+  <x title="Skewness for z0 for ALL" n="100" lo="-5" hi="5"/>
+  <y title="Entries" />
+</h>
+<h id="vx_z0_skewness_ALL_fake" type="TH1" title="Skewness of z0 of tracks for ALL fake vertices">
+  <x title="Skewness for z0 for ALL" n="100" lo="-5" hi="5"/>
+  <y title="Entries" />
+</h>
+<h id="vx_z0_kurtosis_ALL_matched" type="TH1" title="Kurtosis of z0 of tracks z0 for ALL matched vertices">
+  <x title="Kurtosis for Z0 ALL" n="100" lo="0" hi="20"/>
+  <y title="Entries" />
+</h>
+<h id="vx_z0_kurtosis_ALL_merged" type="TH1" title="Kurtosis of z0 of tracks for ALL merged vertices">
+  <x title="Kurtosis for Z0 ALL" n="100" lo="0" hi="20"/>
+  <y title="Entries" />
+</h>
+<h id="vx_z0_kurtosis_ALL_split" type="TH1" title="Kurtosis of z0 of tracks for ALL split vertices">
+  <x title="Kurtosis for Z0 ALL" n="100" lo="0" hi="20"/>
+  <y title="Entries" />
+</h>
+<h id="vx_z0_kurtosis_ALL_fake" type="TH1" title="Kurtosis of z0 of tracks for ALL fake vertices">
+  <x title="Kurtosis for Z0 ALL" n="100" lo="0" hi="20"/>
+  <y title="Entries" />
+</h>
+<h id="vx_d0_skewness_ALL_matched" type="TH1" title="Skewness of d0 of tracks for ALL matched vertices">
+  <x title="Skewness for d0 ALL" n="100" lo="-5" hi="5"/>
+  <y title="Entries" />
+</h>
+<h id="vx_d0_skewness_ALL_merged" type="TH1" title="Skewness of d0 of tracks for ALL merged vertices">
+  <x title="Skewness for d0 ALL" n="100" lo="-5" hi="5"/>
+  <y title="Entries" />
+</h>
+<h id="vx_d0_skewness_ALL_split" type="TH1" title="Skewness of d0 of tracks for ALL split vertices">
+  <x title="Skewness for d0 ALL" n="100" lo="-5" hi="5"/>
+  <y title="Entries" />
+</h>
+<h id="vx_d0_skewness_ALL_fake" type="TH1" title="Skewness of d0 of tracks for ALL fake vertices">
+  <x title="Skewness for d0 ALL" n="100" lo="-5" hi="5"/>
+  <y title="Entries" />
+</h>
+<h id="vx_d0_kurtosis_ALL_matched" type="TH1" title="Kurtosis of d0 of tracks for ALL matched vertices">
+  <x title="Kurtosis for d0 ALL" n="100" lo="0" hi="20"/>
+  <y title="Entries" />
+</h>
+<h id="vx_d0_kurtosis_ALL_merged" type="TH1" title="Kurtosis of d0 of tracks for ALL merged vertices">
+  <x title="Kurtosis for d0 ALL" n="100" lo="0" hi="20"/>
+  <y title="Entries" />
+</h>
+<h id="vx_d0_kurtosis_ALL_split" type="TH1" title="Kurtosis of d0 of tracks for ALL split vertices">
+  <x title="Kurtosis for d0 ALL" n="100" lo="0" hi="20"/>
+  <y title="Entries" />
+</h>
+<h id="vx_d0_kurtosis_ALL_fake" type="TH1" title="Kurtosis of d0 of tracks for ALL fake vertices">
+  <x title="Kurtosis for d0 ALL" n="100" lo="0" hi="20"/>
+  <y title="Entries" />
+</h>
+<h id="vx_pt_skewness_ALL_matched" type="TH1" title="Skewness of pt of tracks for ALL matched vertices">
+  <x title="Skewness for pt ALL" n="100" lo="-10" hi="10"/>
+  <y title="Entries" />
+</h>
+<h id="vx_pt_skewness_ALL_merged" type="TH1" title="Skewness of pt of tracks for ALL merged vertices">
+  <x title="Skewness for pt ALL" n="100" lo="-10" hi="10"/>
+  <y title="Entries" />
+</h>
+<h id="vx_pt_skewness_ALL_split" type="TH1" title="Skewness of pt of tracks for ALL split vertices">
+  <x title="Skewness for pt ALL" n="100" lo="-10" hi="10"/>
+  <y title="Entries" />
+</h>
+<h id="vx_pt_skewness_ALL_fake" type="TH1" title="Skewness of pt of tracks for ALL fake vertices">
+  <x title="Skewness for pt ALL" n="100" lo="-10" hi="10"/>
+  <y title="Entries" />
+</h>
+<h id="vx_pt_kurtosis_ALL_matched" type="TH1" title="Kurtosis of pt of tracks for ALL matched vertices">
+  <x title="Kurtosis for pt ALL" n="100" lo="0" hi="50"/>
+  <y title="Entries" />
+</h>
+<h id="vx_pt_kurtosis_ALL_merged" type="TH1" title="Kurtosis of pt of tracks for ALL merged vertices">
+  <x title="Kurtosis for pt ALL" n="100" lo="0" hi="50"/>
+  <y title="Entries" />
+</h>
+<h id="vx_pt_kurtosis_ALL_split" type="TH1" title="Kurtosis of pt of tracks for ALL split vertices">
+  <x title="Kurtosis for pt ALL" n="100" lo="0" hi="50"/>
+  <y title="Entries" />
+</h>
+<h id="vx_pt_kurtosis_ALL_fake" type="TH1" title="Kurtosis of pt of tracks for ALL fake vertices">
+  <x title="Kurtosis for pt ALL" n="100" lo="0" hi="50"/>
+  <y title="Entries" />
+</h>
+<h id="vx_nVertices_ALL_matched" type="TH1" title="Number of matched vertices per event for sumpt above 20Gev">
+  <x title="Number of vertices per event ALL" n="100" lo="0" hi="100"/>
+  <y title="Entries" />
+</h>
+<h id="vx_nVertices_ALL_merged" type="TH1" title="Number of merged vertices per event for sumpt above 20Gev">
+  <x title="Number of vertices per event ALL" n="100" lo="0" hi="100"/>
+  <y title="Entries" />
+</h>
+<h id="vx_nVertices_ALL_split" type="TH1" title="Number of split vertices per event for sumpt above 20Gev">
+  <x title="Number of vertices per event ALL" n="100" lo="0" hi="100"/>
+  <y title="Entries" />
+</h>
+<h id="vx_nVertices_HS_matched" type="TH1" title="Number of HS matched vertices per event">
+  <x title="Number of vertices per event HS" n="100" lo="0" hi="10"/>
+  <y title="Entries" />
+</h>
+<h id="vx_nVertices_HS_merged" type="TH1" title="Number of HS merged vertices per event">
+  <x title="Number of vertices per event HS" n="100" lo="0" hi="10"/>
+  <y title="Entries" />
+</h>
+<h id="vx_nVertices_HS_split" type="TH1" title="Number of HS split vertices per event">
+  <x title="Number of vertices per event HS" n="100" lo="0" hi="10"/>
+  <y title="Entries" />
+</h>
+<h id="vx_nVertices_matched" type="TH1" title="Number of PU matched vertices per event">
+  <x title="Number of vertices per event PU" n="100" lo="0" hi="100"/>
+  <y title="Entries" />
+</h>
+<h id="vx_nVertices_merged" type="TH1" title="Number of PU merged vertices per event">
+  <x title="Number of vertices per event PU" n="100" lo="0" hi="100"/>
+  <y title="Entries" />
+</h>
+<h id="vx_nVertices_split" type="TH1" title="Number of PU split vertices per event">
+  <x title="Number of vertices per event PU" n="100" lo="0" hi="100"/>
+  <y title="Entries" />
+</h>
 <!-- -->
 <!-- Bad Match Rate (BMR) plots -->
 <h id="BadMatchRate" type="TProfile" title="Fraction of Tracks with &lt; 80% Truth Matching Probability">
diff --git a/InnerDetector/InDetValidation/InDetPhysValMonitoring/src/InDetPerfPlot_VertexTruthMatching.cxx b/InnerDetector/InDetValidation/InDetPhysValMonitoring/src/InDetPerfPlot_VertexTruthMatching.cxx
index 48ef93979af7..d3eea9adbac8 100644
--- a/InnerDetector/InDetValidation/InDetPhysValMonitoring/src/InDetPerfPlot_VertexTruthMatching.cxx
+++ b/InnerDetector/InDetValidation/InDetPhysValMonitoring/src/InDetPerfPlot_VertexTruthMatching.cxx
@@ -10,9 +10,10 @@
 #include "InDetPerfPlot_VertexTruthMatching.h"
 #include "EventPrimitives/EventPrimitives.h"
 #include "EventPrimitives/EventPrimitivesHelpers.h"
-// 2 new includes HRM
+// 3 new includes HRM
 #include "InDetPerfPlot_Vertex.h"
 #include "InDetPerfPlot_nTracks.h"
+//#include "VxVertex/VxTrackAtVertex.h"
 
 using namespace IDPVM;
 
@@ -117,7 +118,169 @@ InDetPerfPlot_VertexTruthMatching::InDetPerfPlot_VertexTruthMatching(InDetPlotBa
     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)
+    m_vx_z_asym_HS_fake(nullptr),
+
+    m_vx_track_weight_matched(nullptr),
+    m_vx_track_weight_merged(nullptr),
+    m_vx_track_weight_split(nullptr),
+    m_vx_track_weight_fake(nullptr),
+    m_vx_track_weight_HS_matched(nullptr),
+    m_vx_track_weight_HS_merged(nullptr),
+    m_vx_track_weight_HS_split(nullptr),
+    m_vx_track_weight_HS_fake(nullptr),
+    
+    m_vx_normalised_track_weight_matched(nullptr),
+    m_vx_normalised_track_weight_merged(nullptr),
+    m_vx_normalised_track_weight_split(nullptr),
+    m_vx_normalised_track_weight_fake(nullptr),
+    m_vx_normalised_track_weight_HS_matched(nullptr),
+    m_vx_normalised_track_weight_HS_merged(nullptr),
+    m_vx_normalised_track_weight_HS_split(nullptr),
+    m_vx_normalised_track_weight_HS_fake(nullptr),
+
+    m_vx_d_asym_matched(nullptr),
+    m_vx_d_asym_merged(nullptr),
+    m_vx_d_asym_split(nullptr),
+    m_vx_d_asym_fake(nullptr),
+    m_vx_d_asym_HS_matched(nullptr),
+    m_vx_d_asym_HS_merged(nullptr),
+    m_vx_d_asym_HS_split(nullptr),
+    m_vx_d_asym_HS_fake(nullptr),
+    
+    m_vx_chi2Over_ndf_matched(nullptr),
+    m_vx_chi2Over_ndf_merged(nullptr),
+    m_vx_chi2Over_ndf_split(nullptr),
+    m_vx_chi2Over_ndf_fake(nullptr),
+    m_vx_chi2Over_ndf_HS_matched(nullptr),
+    m_vx_chi2Over_ndf_HS_merged(nullptr),
+    m_vx_chi2Over_ndf_HS_split(nullptr),
+    m_vx_chi2Over_ndf_HS_fake(nullptr),
+
+    m_vx_z0_skewness_matched(nullptr),
+    m_vx_z0_skewness_merged(nullptr),
+    m_vx_z0_skewness_split(nullptr),
+    m_vx_z0_skewness_fake(nullptr),
+    m_vx_z0_skewness_HS_matched(nullptr),
+    m_vx_z0_skewness_HS_merged(nullptr),
+    m_vx_z0_skewness_HS_split(nullptr),
+    m_vx_z0_skewness_HS_fake(nullptr),
+
+    m_vx_z0_kurtosis_matched(nullptr),
+    m_vx_z0_kurtosis_merged(nullptr),
+    m_vx_z0_kurtosis_split(nullptr),
+    m_vx_z0_kurtosis_fake(nullptr),
+    m_vx_z0_kurtosis_HS_matched(nullptr),
+    m_vx_z0_kurtosis_HS_merged(nullptr),
+    m_vx_z0_kurtosis_HS_split(nullptr),
+    m_vx_z0_kurtosis_HS_fake(nullptr),
+
+    m_vx_d0_skewness_matched(nullptr),
+    m_vx_d0_skewness_merged(nullptr),
+    m_vx_d0_skewness_split(nullptr),
+    m_vx_d0_skewness_fake(nullptr),
+    m_vx_d0_skewness_HS_matched(nullptr),
+    m_vx_d0_skewness_HS_merged(nullptr),
+    m_vx_d0_skewness_HS_split(nullptr),
+    m_vx_d0_skewness_HS_fake(nullptr),
+    m_vx_d0_kurtosis_matched(nullptr),
+    m_vx_d0_kurtosis_merged(nullptr),
+    m_vx_d0_kurtosis_split(nullptr),
+    m_vx_d0_kurtosis_fake(nullptr),
+    m_vx_d0_kurtosis_HS_matched(nullptr),
+    m_vx_d0_kurtosis_HS_merged(nullptr),
+    m_vx_d0_kurtosis_HS_split(nullptr),
+    m_vx_d0_kurtosis_HS_fake(nullptr),
+    m_vx_pt_skewness_matched(nullptr),
+    m_vx_pt_skewness_merged(nullptr),
+    m_vx_pt_skewness_split(nullptr),
+    m_vx_pt_skewness_fake(nullptr),
+    m_vx_pt_skewness_HS_matched(nullptr),
+    m_vx_pt_skewness_HS_merged(nullptr),
+    m_vx_pt_skewness_HS_split(nullptr),
+    m_vx_pt_skewness_HS_fake(nullptr),
+    m_vx_pt_kurtosis_matched(nullptr),
+    m_vx_pt_kurtosis_merged(nullptr),
+    m_vx_pt_kurtosis_split(nullptr),
+    m_vx_pt_kurtosis_fake(nullptr),
+    m_vx_pt_kurtosis_HS_matched(nullptr),
+    m_vx_pt_kurtosis_HS_merged(nullptr),
+    m_vx_pt_kurtosis_HS_split(nullptr),
+    m_vx_pt_kurtosis_HS_fake(nullptr),
+
+    m_vx_sumpT_ALL_matched(nullptr),
+    m_vx_sumpT_ALL_merged(nullptr),
+    m_vx_sumpT_ALL_split(nullptr),
+    m_vx_sumpT_ALL_fake(nullptr),
+    m_vx_sumCharge_ALL_matched(nullptr),
+    m_vx_sumCharge_ALL_merged(nullptr),
+    m_vx_sumCharge_ALL_split(nullptr),
+    m_vx_sumCharge_ALL_fake(nullptr),
+    m_vx_sumCharge_N_trk_ALL_matched(nullptr),
+    m_vx_sumCharge_N_trk_ALL_merged(nullptr),
+    m_vx_sumCharge_N_trk_ALL_split(nullptr),
+    m_vx_sumCharge_N_trk_ALL_fake(nullptr),
+    m_vx_z_asym_ALL_matched(nullptr),
+    m_vx_z_asym_ALL_merged(nullptr),
+    m_vx_z_asym_ALL_split(nullptr),
+    m_vx_z_asym_ALL_fake(nullptr),
+    m_vx_d_asym_ALL_matched(nullptr),
+    m_vx_d_asym_ALL_merged(nullptr),
+    m_vx_d_asym_ALL_split(nullptr),
+    m_vx_d_asym_ALL_fake(nullptr),
+    
+    m_vx_track_weight_ALL_matched(nullptr),
+    m_vx_track_weight_ALL_merged(nullptr),
+    m_vx_track_weight_ALL_split(nullptr),
+    m_vx_track_weight_ALL_fake(nullptr),
+
+    m_vx_normalised_track_weight_ALL_matched(nullptr),
+    m_vx_normalised_track_weight_ALL_merged(nullptr),
+    m_vx_normalised_track_weight_ALL_split(nullptr),
+    m_vx_normalised_track_weight_ALL_fake(nullptr),
+
+    m_vx_chi2Over_ndf_ALL_matched(nullptr),
+    m_vx_chi2Over_ndf_ALL_merged(nullptr),
+    m_vx_chi2Over_ndf_ALL_split(nullptr),
+    m_vx_chi2Over_ndf_ALL_fake(nullptr),
+
+    m_vx_z0_skewness_ALL_matched(nullptr),
+    m_vx_z0_skewness_ALL_merged(nullptr),
+    m_vx_z0_skewness_ALL_split(nullptr),
+    m_vx_z0_skewness_ALL_fake(nullptr),
+
+    m_vx_z0_kurtosis_ALL_matched(nullptr),
+    m_vx_z0_kurtosis_ALL_merged(nullptr),
+    m_vx_z0_kurtosis_ALL_split(nullptr),
+    m_vx_z0_kurtosis_ALL_fake(nullptr),
+
+    m_vx_d0_skewness_ALL_matched(nullptr),
+    m_vx_d0_skewness_ALL_merged(nullptr),
+    m_vx_d0_skewness_ALL_split(nullptr),
+    m_vx_d0_skewness_ALL_fake(nullptr),
+    m_vx_d0_kurtosis_ALL_matched(nullptr),
+    m_vx_d0_kurtosis_ALL_merged(nullptr),
+    m_vx_d0_kurtosis_ALL_split(nullptr),
+    m_vx_d0_kurtosis_ALL_fake(nullptr),
+    m_vx_pt_skewness_ALL_matched(nullptr),
+    m_vx_pt_skewness_ALL_merged(nullptr),
+    m_vx_pt_skewness_ALL_split(nullptr),
+    m_vx_pt_skewness_ALL_fake(nullptr),
+    m_vx_pt_kurtosis_ALL_matched(nullptr),
+    m_vx_pt_kurtosis_ALL_merged(nullptr),
+    m_vx_pt_kurtosis_ALL_split(nullptr),
+    m_vx_pt_kurtosis_ALL_fake(nullptr),
+    m_vx_nVertices_ALL_matched(nullptr),
+    m_vx_nVertices_ALL_merged(nullptr),
+    m_vx_nVertices_ALL_split(nullptr),
+    m_vx_nVertices_HS_matched(nullptr),
+    m_vx_nVertices_HS_merged(nullptr),
+    m_vx_nVertices_HS_split(nullptr),
+    m_vx_nVertices_matched(nullptr),
+    m_vx_nVertices_merged(nullptr),
+    m_vx_nVertices_split(nullptr)
+
+
+
 
 {
   // nop
@@ -233,10 +396,169 @@ void InDetPerfPlot_VertexTruthMatching::initializePlots() {
         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");
+        book(m_vx_track_weight_matched, "vx_track_weight_matched");
+        book(m_vx_track_weight_merged, "vx_track_weight_merged");
+        book(m_vx_track_weight_split, "vx_track_weight_split");
+        book(m_vx_track_weight_fake, "vx_track_weight_fake");
+        book(m_vx_track_weight_HS_matched, "vx_track_weight_HS_matched");
+        book(m_vx_track_weight_HS_merged, "vx_track_weight_HS_merged");
+        book(m_vx_track_weight_HS_split, "vx_track_weight_HS_split");
+        book(m_vx_track_weight_HS_fake, "vx_track_weight_HS_fake");
+
+
+        book(m_vx_normalised_track_weight_matched, "vx_normalised_track_weight_matched");
+        book(m_vx_normalised_track_weight_merged, "vx_normalised_track_weight_merged");
+        book(m_vx_normalised_track_weight_split, "vx_normalised_track_weight_split");
+        book(m_vx_normalised_track_weight_fake, "vx_normalised_track_weight_fake");
+        book(m_vx_normalised_track_weight_HS_matched, "vx_normalised_track_weight_HS_matched");
+        book(m_vx_normalised_track_weight_HS_merged, "vx_normalised_track_weight_HS_merged");
+        book(m_vx_normalised_track_weight_HS_split, "vx_normalised_track_weight_HS_split");
+        book(m_vx_normalised_track_weight_HS_fake, "vx_normalised_track_weight_HS_fake");
+
+        book(m_vx_d_asym_matched,"vx_d_asym_matched");
+        book(m_vx_d_asym_merged,"vx_d_asym_merged");
+        book(m_vx_d_asym_split,"vx_d_asym_split");
+        book(m_vx_d_asym_fake,"vx_d_asym_fake");
+        book(m_vx_d_asym_HS_matched,"vx_d_asym_HS_matched");
+        book(m_vx_d_asym_HS_merged,"vx_d_asym_HS_merged");
+        book(m_vx_d_asym_HS_split,"vx_d_asym_HS_split");
+        book(m_vx_d_asym_HS_fake,"vx_d_asym_HS_fake");
  
+        book(m_vx_chi2Over_ndf_matched,"vx_chi2Over_ndf_matched");
+        book(m_vx_chi2Over_ndf_merged,"vx_chi2Over_ndf_merged");
+        book(m_vx_chi2Over_ndf_split,"vx_chi2Over_ndf_split");
+        book(m_vx_chi2Over_ndf_fake,"vx_chi2Over_ndf_fake");
+        book(m_vx_chi2Over_ndf_HS_matched,"vx_chi2Over_ndf_HS_matched");
+        book(m_vx_chi2Over_ndf_HS_merged,"vx_chi2Over_ndf_HS_merged");
+        book(m_vx_chi2Over_ndf_HS_split,"vx_chi2Over_ndf_HS_split");
+        book(m_vx_chi2Over_ndf_HS_fake,"vx_chi2Over_ndf_HS_fake");
+        
+        book(m_vx_z0_skewness_matched, "vx_z0_skewness_matched");
+        book(m_vx_z0_skewness_merged, "vx_z0_skewness_merged");
+        book(m_vx_z0_skewness_split, "vx_z0_skewness_split");
+        book(m_vx_z0_skewness_fake, "vx_z0_skewness_fake");
+        book(m_vx_z0_skewness_HS_matched, "vx_z0_skewness_HS_matched");
+        book(m_vx_z0_skewness_HS_merged, "vx_z0_skewness_HS_merged");
+        book(m_vx_z0_skewness_HS_split, "vx_z0_skewness_HS_split");
+        book(m_vx_z0_skewness_HS_fake, "vx_z0_skewness_HS_fake");
+        book(m_vx_z0_kurtosis_matched,"vx_z0_kurtosis_matched");
+        book(m_vx_z0_kurtosis_merged,"vx_z0_kurtosis_merged");
+        book(m_vx_z0_kurtosis_split,"vx_z0_kurtosis_split");
+        book(m_vx_z0_kurtosis_fake,"vx_z0_kurtosis_fake");
+        book(m_vx_z0_kurtosis_HS_matched,"vx_z0_kurtosis_HS_matched");
+        book(m_vx_z0_kurtosis_HS_merged,"vx_z0_kurtosis_HS_merged");
+        book(m_vx_z0_kurtosis_HS_split,"vx_z0_kurtosis_HS_split");
+        book(m_vx_z0_kurtosis_HS_fake,"vx_z0_kurtosis_HS_fake");
+
+        book(m_vx_d0_skewness_matched,"vx_d0_skewness_matched");
+        book(m_vx_d0_skewness_merged,"vx_d0_skewness_merged");
+        book(m_vx_d0_skewness_split,"vx_d0_skewness_split");
+        book(m_vx_d0_skewness_fake,"vx_d0_skewness_fake");
+        book(m_vx_d0_skewness_HS_matched,"vx_d0_skewness_HS_matched");
+        book(m_vx_d0_skewness_HS_merged,"vx_d0_skewness_HS_merged");
+        book(m_vx_d0_skewness_HS_split,"vx_d0_skewness_HS_split");
+        book(m_vx_d0_skewness_HS_fake,"vx_d0_skewness_HS_fake");
+        book(m_vx_d0_kurtosis_matched,"vx_d0_kurtosis_matched");
+        book(m_vx_d0_kurtosis_merged,"vx_d0_kurtosis_merged");
+        book(m_vx_d0_kurtosis_split,"vx_d0_kurtosis_split");
+        book(m_vx_d0_kurtosis_fake,"vx_d0_kurtosis_fake");
+        book(m_vx_d0_kurtosis_HS_matched,"vx_d0_kurtosis_HS_matched");
+        book(m_vx_d0_kurtosis_HS_merged,"vx_d0_kurtosis_HS_merged");
+        book(m_vx_d0_kurtosis_HS_split,"vx_d0_kurtosis_HS_split");
+        book(m_vx_d0_kurtosis_HS_fake,"vx_d0_kurtosis_HS_fake");
 
-
-
+        
+        book(m_vx_pt_skewness_matched,"vx_pt_skewness_matched");
+        book(m_vx_pt_skewness_merged,"vx_pt_skewness_merged");
+        book(m_vx_pt_skewness_split,"vx_pt_skewness_split");
+        book(m_vx_pt_skewness_fake,"vx_pt_skewness_fake");
+        book(m_vx_pt_skewness_HS_matched,"vx_pt_skewness_HS_matched");
+        book(m_vx_pt_skewness_HS_merged,"vx_pt_skewness_HS_merged");
+        book(m_vx_pt_skewness_HS_split,"vx_pt_skewness_HS_split");
+        book(m_vx_pt_skewness_HS_fake,"vx_pt_skewness_HS_fake");
+        book(m_vx_pt_kurtosis_matched,"vx_pt_kurtosis_matched");
+        book(m_vx_pt_kurtosis_merged,"vx_pt_kurtosis_merged");
+        book(m_vx_pt_kurtosis_split,"vx_pt_kurtosis_split");
+        book(m_vx_pt_kurtosis_fake,"vx_pt_kurtosis_fake");
+        book(m_vx_pt_kurtosis_HS_matched,"vx_pt_kurtosis_HS_matched");
+        book(m_vx_pt_kurtosis_HS_merged,"vx_pt_kurtosis_HS_merged");
+        book(m_vx_pt_kurtosis_HS_split,"vx_pt_kurtosis_HS_split");
+        book(m_vx_pt_kurtosis_HS_fake,"vx_pt_kurtosis_HS_fake");
+        // Histograms with all vertices
+        book(m_vx_sumpT_ALL_matched,"vx_sumpT_ALL_matched");
+        book(m_vx_sumpT_ALL_merged,"vx_sumpT_ALL_merged");
+        book(m_vx_sumpT_ALL_split,"vx_sumpT_ALL_split");
+        book( m_vx_sumpT_ALL_fake,"vx_sumpT_ALL_fake");
+        
+        book(m_vx_sumCharge_ALL_matched,"vx_sumCharge_ALL_matched");
+        book(m_vx_sumCharge_ALL_merged,"vx_sumCharge_ALL_merged");
+        book(m_vx_sumCharge_ALL_split,"vx_sumCharge_ALL_split");
+        book(m_vx_sumCharge_ALL_fake,"vx_sumCharge_ALL_fake");
+        book(m_vx_sumCharge_N_trk_ALL_matched, "vx_sumCharge_N_trk_ALL_matched");
+        book(m_vx_sumCharge_N_trk_ALL_merged, "vx_sumCharge_N_trk_ALL_merged");
+        book(m_vx_sumCharge_N_trk_ALL_split, "vx_sumCharge_N_trk_ALL_split");
+        book(m_vx_sumCharge_N_trk_ALL_fake, "vx_sumCharge_N_trk_ALL_fake");
+ 
+        book(m_vx_z_asym_ALL_matched,"vx_z_asym_ALL_matched");
+        book(m_vx_z_asym_ALL_merged,"vx_z_asym_ALL_merged");
+        book(m_vx_z_asym_ALL_split,"vx_z_asym_ALL_split");
+        book(m_vx_z_asym_ALL_fake,"vx_z_asym_ALL_fake");
+        
+        book(m_vx_track_weight_ALL_matched, "vx_track_weight_ALL_matched");
+        book(m_vx_track_weight_ALL_merged, "vx_track_weight_ALL_merged");
+        book(m_vx_track_weight_ALL_split, "vx_track_weight_ALL_split");
+        book(m_vx_track_weight_ALL_fake, "vx_track_weight_ALL_fake");
+        
+        book(m_vx_normalised_track_weight_ALL_matched, "vx_normalised_track_weight_ALL_matched");
+        book(m_vx_normalised_track_weight_ALL_merged, "vx_normalised_track_weight_ALL_merged");
+        book(m_vx_normalised_track_weight_ALL_split, "vx_normalised_track_weight_ALL_split");
+        book(m_vx_normalised_track_weight_ALL_fake, "vx_normalised_track_weight_ALL_fake");
+        
+        book(m_vx_d_asym_ALL_matched,"vx_d_asym_ALL_matched");
+        book(m_vx_d_asym_ALL_merged,"vx_d_asym_ALL_merged");
+        book(m_vx_d_asym_ALL_split,"vx_d_asym_ALL_split");
+        book(m_vx_d_asym_ALL_fake,"vx_d_asym_ALL_fake");
+        book(m_vx_chi2Over_ndf_ALL_matched,"vx_chi2Over_ndf_ALL_matched");
+        book(m_vx_chi2Over_ndf_ALL_merged,"vx_chi2Over_ndf_ALL_merged");
+        book(m_vx_chi2Over_ndf_ALL_split,"vx_chi2Over_ndf_ALL_split");
+        book(m_vx_chi2Over_ndf_ALL_fake,"vx_chi2Over_ndf_ALL_fake");
+        
+        book(m_vx_z0_skewness_ALL_matched, "vx_z0_skewness_ALL_matched");
+        book(m_vx_z0_skewness_ALL_merged, "vx_z0_skewness_ALL_merged");
+        book(m_vx_z0_skewness_ALL_split, "vx_z0_skewness_ALL_split");
+        book(m_vx_z0_skewness_ALL_fake, "vx_z0_skewness_ALL_fake");
+        book(m_vx_z0_kurtosis_ALL_matched,"vx_z0_kurtosis_ALL_matched");
+        book(m_vx_z0_kurtosis_ALL_merged,"vx_z0_kurtosis_ALL_merged");
+        book(m_vx_z0_kurtosis_ALL_split,"vx_z0_kurtosis_ALL_split");
+        book(m_vx_z0_kurtosis_ALL_fake,"vx_z0_kurtosis_ALL_fake");
+
+        book(m_vx_d0_skewness_ALL_matched,"vx_d0_skewness_ALL_matched");
+        book(m_vx_d0_skewness_ALL_merged,"vx_d0_skewness_ALL_merged");
+        book(m_vx_d0_skewness_ALL_split,"vx_d0_skewness_ALL_split");
+        book(m_vx_d0_skewness_ALL_fake,"vx_d0_skewness_ALL_fake");
+        book(m_vx_d0_kurtosis_ALL_matched,"vx_d0_kurtosis_ALL_matched");
+        book(m_vx_d0_kurtosis_ALL_merged,"vx_d0_kurtosis_ALL_merged");
+        book(m_vx_d0_kurtosis_ALL_split,"vx_d0_kurtosis_ALL_split");
+        book(m_vx_d0_kurtosis_ALL_fake,"vx_d0_kurtosis_ALL_fake");
+
+        book(m_vx_pt_skewness_ALL_matched,"vx_pt_skewness_ALL_matched");
+        book(m_vx_pt_skewness_ALL_merged,"vx_pt_skewness_ALL_merged");
+        book(m_vx_pt_skewness_ALL_split,"vx_pt_skewness_ALL_split");
+        book(m_vx_pt_skewness_ALL_fake,"vx_pt_skewness_ALL_fake");
+        book(m_vx_pt_kurtosis_ALL_matched,"vx_pt_kurtosis_ALL_matched");
+        book(m_vx_pt_kurtosis_ALL_merged,"vx_pt_kurtosis_ALL_merged");
+        book(m_vx_pt_kurtosis_ALL_split,"vx_pt_kurtosis_ALL_split");
+        book(m_vx_pt_kurtosis_ALL_fake,"vx_pt_kurtosis_ALL_fake");
+        
+        book(m_vx_nVertices_ALL_matched,"vx_nVertices_ALL_matched");
+        book(m_vx_nVertices_ALL_merged,"vx_nVertices_ALL_merged");
+        book(m_vx_nVertices_ALL_split,"vx_nVertices_ALL_split");
+        book(m_vx_nVertices_HS_matched,"vx_nVertices_HS_matched");
+        book(m_vx_nVertices_HS_merged,"vx_nVertices_HS_merged");
+        book(m_vx_nVertices_HS_split,"vx_nVertices_HS_split");
+        book(m_vx_nVertices_matched,"vx_nVertices_matched");
+        book(m_vx_nVertices_merged,"vx_nVertices_merged");
+        book(m_vx_nVertices_split, "vx_nVertices_split");
     }
 
 }
@@ -481,7 +803,22 @@ void InDetPerfPlot_VertexTruthMatching::fill(const xAOD::VertexContainer& vertex
         else {
             ATH_MSG_WARNING("Size of truth HS vertex vector is 0 -- assuming truth HS vertex to NOT be reconstructed.");
         }
+         
 
+        // add variables here so that they are in correct scope (outside loop over vertices)
+        float number_matched = 0;
+        float number_merged = 0;
+        float number_split = 0;
+        float number_matched_HS = 0;
+        float number_merged_HS = 0;
+        float number_split_HS = 0;
+        float number_matched_PU = 0;
+        float number_merged_PU = 0;
+        float number_split_PU = 0;
+      
+   //   std::cout << "declaring vertex number variables helenmaguire";
+
+ 
         // Iterate over vertices:
         InDetVertexTruthMatchUtils::VertexMatchType matchType;
         for (const auto& vertex : vertexContainer.stdcont()) {
@@ -541,33 +878,131 @@ 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;
+         float sum_dD =0;
+
          // get the charge associated with each track
          double sumCharge = 0;
          float z_asym = 0;
+         float d_asym = 0;
          float sumDZ = 0;
          float deltaZ =0;
+         float deltaD =0;
          float modsumDZ =0;
-         
- 
+         float modsumDD =0;
+
+         // make vector
+         std::vector<float> track_deltaZ;
+         track_deltaZ.clear();
+         std::vector<float> track_deltaD;
+         track_deltaD.clear();
+         std::vector<float> track_deltaPt;
+         track_deltaPt.clear();
+
+            // loop over tracks 
             for (size_t i = 0; i < vertex->nTrackParticles(); i++) {
                 trackTmp = vertex->trackParticle(i);
                 deltaZ = trackTmp->z0() - vertex->z();
+                deltaD = trackTmp->d0();
+
+             //  std::cout << "loop over tracks helenmaguire";
+
+
                 if (trackTmp) {
                     sumPt = sumPt + trackTmp->pt();
                     sumCharge = sumCharge + trackTmp->charge();
+                    track_deltaZ.push_back(deltaZ);
+                    track_deltaD.push_back(deltaD);
+                    track_deltaPt.push_back(trackTmp->pt());
                     // sum of delta z
                     sumDZ = sumDZ + deltaZ; 
                     modsumDZ = modsumDZ + sqrt(deltaZ * deltaZ);
-                    z_asym = modsumDZ/sumDZ;
-                }
+                    sum_dD = sum_dD + trackTmp->d0();
+                    modsumDD = modsumDD + sqrt(deltaD * deltaD);
+               }
+
+            } // end loop over tracks
+            if  (modsumDZ >0) {
+                z_asym = sumDZ/modsumDZ;
             }
+            if  (modsumDD >0) {
+                d_asym = sum_dD/modsumDD;
+            }
+
+
+          
+            double av_sumPt =0;
+            double mean_Dz =0;
+            mean_Dz=sumDZ/track_deltaZ.size(); //calculate average
+            sum_dD=sum_dD/track_deltaD.size(); //calculate average
+            av_sumPt=sumPt/track_deltaPt.size(); //calculate average
+            double n=0;
+            n = track_deltaZ.size(); // get number of tracks 
+
+            double z_sd = 0; //  standard deviation
+            double z_skew = 0;
+            double z_kurt = 0;
+            double z_var=0;
+            double d_sd = 0;
+            double d_var = 0;
+            double d_kurt =0;
+            double d_skew =0;
+            double pt_sd = 0;
+            double pt_var = 0;
+            double pt_kurt =0;
+            double pt_skew =0;
+
+            for ( size_t i = 0; i < track_deltaZ.size(); i++) {
+
+               z_var =(z_var + (track_deltaZ.at(i) - mean_Dz )*(track_deltaZ.at(i) - mean_Dz ));
+               z_skew =(z_skew + (track_deltaZ.at(i) - mean_Dz )*(track_deltaZ.at(i) - mean_Dz )*(track_deltaZ.at(i) - mean_Dz ));
+               z_kurt =(z_kurt + (track_deltaZ.at(i) - mean_Dz )*(track_deltaZ.at(i) - mean_Dz )*(track_deltaZ.at(i) - mean_Dz )*(track_deltaZ.at(i) - mean_Dz ));
+
+           } 
+               z_var = z_var/(n-1);
+               z_sd = sqrt(z_var);
+               z_skew = z_skew/((n-1)*z_sd*z_sd*z_sd);
+               z_kurt = z_kurt/((n-1)*z_sd*z_sd*z_sd*z_sd);
+
+            for ( size_t i = 0; i < track_deltaD.size(); i++) {
+
+               d_var =(d_var + (track_deltaD.at(i) - sum_dD )*(track_deltaD.at(i) - sum_dD ));
+               d_skew =(d_skew + (track_deltaD.at(i) - sum_dD )*(track_deltaD.at(i) - sum_dD )*(track_deltaD.at(i) - sum_dD ));
+               d_kurt =(d_kurt + (track_deltaD.at(i) - sum_dD )*(track_deltaD.at(i) - sum_dD )*(track_deltaD.at(i) - sum_dD )*(track_deltaD.at(i) - sum_dD ));
+
+           } 
+               d_var = d_var/(n-1);
+               d_sd = sqrt(d_var);
+               d_skew = d_skew/((n-1)*d_sd*d_sd*d_sd);
+               d_kurt = d_kurt/((n-1)*d_sd*d_sd*d_sd*d_sd);
+
+
+           for ( size_t i = 0; i < track_deltaPt.size(); i++) {
+
+               pt_var =(pt_var + (track_deltaPt.at(i) - av_sumPt )*(track_deltaPt.at(i) - av_sumPt ));
+               pt_skew =(pt_skew + (track_deltaPt.at(i) - av_sumPt )*(track_deltaPt.at(i) - av_sumPt )*(track_deltaPt.at(i) - av_sumPt ));
+               pt_kurt =(pt_kurt + (track_deltaPt.at(i) - av_sumPt )*(track_deltaPt.at(i) - av_sumPt )*(track_deltaPt.at(i) - av_sumPt )*(track_deltaPt.at(i) - av_sumPt ));
+
+          }
+               pt_var = pt_var/(n-1);
+               pt_sd = sqrt(pt_var);
+               pt_skew = pt_skew/((n-1)*pt_sd*pt_sd*pt_sd);
+               pt_kurt = pt_kurt/((n-1)*pt_sd*pt_sd*pt_sd*pt_sd);
+
+          float ndf = vertex->numberDoF();
+          if (ndf != 0) {
+
+
+
            if (recoVtxMatchTypeInfo(*vertex) == InDetVertexTruthMatchUtils::VertexMatchType::MATCHED) {
               if (vertex == bestRecoHSVtx_truth) {
 	
@@ -575,6 +1010,21 @@ void InDetPerfPlot_VertexTruthMatching::fill(const xAOD::VertexContainer& vertex
                  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);
+                 fillHisto(m_vx_d_asym_HS_matched, d_asym);
+                 fillHisto(m_vx_chi2Over_ndf_HS_matched, vertex->chiSquared()/ndf);
+
+                 fillHisto(m_vx_z0_skewness_HS_matched, z_skew);
+                 fillHisto(m_vx_z0_kurtosis_HS_matched, z_kurt);
+                 fillHisto(m_vx_d0_skewness_HS_matched, d_skew);
+                 fillHisto(m_vx_d0_kurtosis_HS_matched, d_kurt);
+                 fillHisto(m_vx_pt_skewness_HS_matched, pt_skew);
+                 fillHisto(m_vx_pt_kurtosis_HS_matched, pt_kurt);
+       
+
+                 for (const float& weight : vertex->trackWeights()) {
+                     fillHisto(m_vx_track_weight_HS_matched, weight);
+                     fillHisto(m_vx_normalised_track_weight_HS_matched, weight/n);
+                 }
 
               }	
 	      else { 
@@ -583,8 +1033,46 @@ void InDetPerfPlot_VertexTruthMatching::fill(const xAOD::VertexContainer& vertex
                  fillHisto(m_vx_sumCharge_matched,sumCharge);
                  fillHisto(m_vx_sumCharge_N_trk_matched, sumCharge/vertex->nTrackParticles());
                  fillHisto(m_vx_z_asym_matched, z_asym);
-              }
-           }
+                 fillHisto(m_vx_d_asym_matched, d_asym);
+                 fillHisto(m_vx_chi2Over_ndf_matched, vertex->chiSquared()/ndf);
+              
+                 fillHisto(m_vx_z0_skewness_matched, z_skew);
+                 fillHisto(m_vx_z0_kurtosis_matched, z_kurt);
+                 fillHisto(m_vx_d0_skewness_matched, d_skew);
+                 fillHisto(m_vx_d0_kurtosis_matched, d_kurt);
+                 fillHisto(m_vx_pt_skewness_matched, pt_skew);
+                 fillHisto(m_vx_pt_kurtosis_matched, pt_kurt);
+
+
+
+                 for (const float& weight : vertex->trackWeights()) {
+                     fillHisto(m_vx_track_weight_matched, weight);
+                     fillHisto(m_vx_normalised_track_weight_matched, weight/n);
+                 }
+             }
+// fill some histograms that contain both HS and PU above a min pt - say 20GeV
+              double minpt = 20 ; // GeV
+              if (sumPt/Gaudi::Units::GeV > minpt) {
+                 fillHisto(m_vx_sumpT_ALL_matched,sumPt / Gaudi::Units::GeV);
+                 fillHisto(m_vx_sumCharge_ALL_matched,sumCharge);
+                 fillHisto(m_vx_sumCharge_N_trk_ALL_matched, sumCharge/vertex->nTrackParticles());
+                 fillHisto(m_vx_z_asym_ALL_matched, z_asym);
+                 fillHisto(m_vx_d_asym_ALL_matched, d_asym);
+                 fillHisto(m_vx_chi2Over_ndf_ALL_matched, vertex->chiSquared()/ndf);
+
+                 fillHisto(m_vx_z0_skewness_ALL_matched, z_skew);
+                 fillHisto(m_vx_z0_kurtosis_ALL_matched, z_kurt);
+                 fillHisto(m_vx_d0_skewness_ALL_matched, d_skew);
+                 fillHisto(m_vx_d0_kurtosis_ALL_matched, d_kurt);
+                 fillHisto(m_vx_pt_skewness_ALL_matched, pt_skew);
+                 fillHisto(m_vx_pt_kurtosis_ALL_matched, pt_kurt);
+                 for (const float& weight : vertex->trackWeights()) {
+                     fillHisto(m_vx_track_weight_ALL_matched, weight);
+                     fillHisto(m_vx_normalised_track_weight_ALL_matched, weight/n);
+                 }
+
+            }
+           }  // end of if matched vertices
 
            if (recoVtxMatchTypeInfo(*vertex) == InDetVertexTruthMatchUtils::VertexMatchType::MERGED) {
               if (vertex == bestRecoHSVtx_truth) {
@@ -593,53 +1081,243 @@ void InDetPerfPlot_VertexTruthMatching::fill(const xAOD::VertexContainer& vertex
                  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);
+                 fillHisto(m_vx_d_asym_HS_merged, d_asym);
+                 fillHisto(m_vx_chi2Over_ndf_HS_merged, vertex->chiSquared()/ndf);
+
+                 fillHisto(m_vx_z0_skewness_HS_merged, z_skew);
+                 fillHisto(m_vx_z0_kurtosis_HS_merged, z_kurt);
+                 fillHisto(m_vx_d0_skewness_HS_merged, d_skew);
+                 fillHisto(m_vx_d0_kurtosis_HS_merged, d_kurt);
+                 fillHisto(m_vx_pt_skewness_HS_merged, pt_skew);
+                 fillHisto(m_vx_pt_kurtosis_HS_merged, pt_kurt);
+                 for (const float& weight : vertex->trackWeights()) {
+                     fillHisto(m_vx_track_weight_HS_merged, weight);
+                     fillHisto(m_vx_normalised_track_weight_HS_merged, weight/n);
+                 }
+
+
+
               }
               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);
+                 fillHisto(m_vx_d_asym_merged, d_asym);
+                 fillHisto(m_vx_chi2Over_ndf_merged, vertex->chiSquared()/ndf);
+             
+                 fillHisto(m_vx_z0_skewness_merged, z_skew);
+                 fillHisto(m_vx_z0_kurtosis_merged, z_kurt);
+                 fillHisto(m_vx_d0_skewness_merged, d_skew);
+                 fillHisto(m_vx_d0_kurtosis_merged, d_kurt);
+                 fillHisto(m_vx_pt_skewness_merged, pt_skew);
+                 fillHisto(m_vx_pt_kurtosis_merged, pt_kurt);
+                 for (const float& weight : vertex->trackWeights()) {
+                     fillHisto(m_vx_track_weight_merged, weight);
+                     fillHisto(m_vx_normalised_track_weight_merged, weight/n);
+                 }
+
               }
-           }
+              double minpt = 20 ; // GeV
+              if (sumPt/Gaudi::Units::GeV > minpt) {
+                 fillHisto(m_vx_sumpT_ALL_merged,sumPt / Gaudi::Units::GeV);
+                 fillHisto(m_vx_sumCharge_ALL_merged,sumCharge);
+                 fillHisto(m_vx_sumCharge_N_trk_ALL_merged, sumCharge/vertex->nTrackParticles());
+                 fillHisto(m_vx_z_asym_ALL_merged, z_asym);
+                 fillHisto(m_vx_d_asym_ALL_merged, d_asym);
+                 fillHisto(m_vx_chi2Over_ndf_ALL_merged, vertex->chiSquared()/ndf);
+
+                 fillHisto(m_vx_z0_skewness_ALL_merged, z_skew);
+                 fillHisto(m_vx_z0_kurtosis_ALL_merged, z_kurt);
+                 fillHisto(m_vx_d0_skewness_ALL_merged, d_skew);
+                 fillHisto(m_vx_d0_kurtosis_ALL_merged, d_kurt);
+                 fillHisto(m_vx_pt_skewness_ALL_merged, pt_skew);
+                 fillHisto(m_vx_pt_kurtosis_ALL_merged, pt_kurt);
+                 for (const float& weight : vertex->trackWeights()) {
+                     fillHisto(m_vx_track_weight_ALL_merged, weight);
+                     fillHisto(m_vx_normalised_track_weight_ALL_merged, weight/n);
+                 }
+
+             }
+           }   //end of if merged vertices
 
            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);
+                 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);
+                 fillHisto(m_vx_d_asym_HS_split, d_asym);
+                 fillHisto(m_vx_chi2Over_ndf_HS_split, vertex->chiSquared()/ndf);
+
+                 fillHisto(m_vx_z0_skewness_HS_split, z_skew);
+                 fillHisto(m_vx_z0_kurtosis_HS_split, z_kurt);
+                 fillHisto(m_vx_d0_skewness_HS_split, d_skew);
+                 fillHisto(m_vx_d0_kurtosis_HS_split, d_kurt);
+                 fillHisto(m_vx_pt_skewness_HS_split, pt_skew);
+                 fillHisto(m_vx_pt_kurtosis_HS_split, pt_kurt);
+                 for (const float& weight : vertex->trackWeights()) {
+                     fillHisto(m_vx_track_weight_HS_split, weight);
+                     fillHisto(m_vx_normalised_track_weight_HS_split, weight/n);
+                 }
+
+
               }
               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_split, z_asym);
+                 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_split, z_asym);
+                 fillHisto(m_vx_d_asym_split, d_asym);
+                 fillHisto(m_vx_chi2Over_ndf_split, vertex->chiSquared()/ndf);
+
+                 fillHisto(m_vx_z0_skewness_split, z_skew);
+                 fillHisto(m_vx_z0_kurtosis_split, z_kurt);
+                 fillHisto(m_vx_d0_skewness_split, d_skew);
+                 fillHisto(m_vx_d0_kurtosis_split, d_kurt);
+                 fillHisto(m_vx_pt_skewness_split, pt_skew);
+                 fillHisto(m_vx_pt_kurtosis_split, pt_kurt);
+                 for (const float& weight : vertex->trackWeights()) {
+                     fillHisto(m_vx_track_weight_split, weight);
+                     fillHisto(m_vx_normalised_track_weight_split, weight/n);
+                 }
+
+
               }
-	   }
+// fill some histograms that contain both HS and PU above a min pt - say 20GeV
+              double minpt = 20 ; // GeV
+              if (sumPt/Gaudi::Units::GeV > minpt) {
+                 fillHisto(m_vx_sumpT_ALL_split,sumPt / Gaudi::Units::GeV);
+                 fillHisto(m_vx_sumCharge_ALL_split,sumCharge);
+                 fillHisto(m_vx_sumCharge_N_trk_ALL_split, sumCharge/vertex->nTrackParticles());
+                 fillHisto(m_vx_z_asym_ALL_split, z_asym);
+                 fillHisto(m_vx_d_asym_ALL_split, d_asym);
+                 fillHisto(m_vx_chi2Over_ndf_ALL_split, vertex->chiSquared()/ndf);
+
+                 fillHisto(m_vx_z0_skewness_ALL_split, z_skew);
+                 fillHisto(m_vx_z0_kurtosis_ALL_split, z_kurt);
+                 fillHisto(m_vx_d0_skewness_ALL_split, d_skew);
+                 fillHisto(m_vx_d0_kurtosis_ALL_split, d_kurt);
+                 fillHisto(m_vx_pt_skewness_ALL_split, pt_skew);
+                 fillHisto(m_vx_pt_kurtosis_ALL_split, pt_kurt);
+                 for (const float& weight : vertex->trackWeights()) {
+                     fillHisto(m_vx_track_weight_ALL_split, weight);
+                     fillHisto(m_vx_normalised_track_weight_ALL_split, weight/n);
+                 }
+              }
+
+	   }   // end of if split vertices
+
+
            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);
+                 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);
+                 fillHisto(m_vx_d_asym_HS_fake, d_asym);
+                 fillHisto(m_vx_chi2Over_ndf_HS_fake, vertex->chiSquared()/ndf);
+
+                 fillHisto(m_vx_z0_skewness_HS_fake, z_skew);
+                 fillHisto(m_vx_z0_kurtosis_HS_fake, z_kurt);
+                 fillHisto(m_vx_d0_skewness_HS_fake, d_skew);
+                 fillHisto(m_vx_d0_kurtosis_HS_fake, d_kurt);
+                 fillHisto(m_vx_pt_skewness_HS_fake, pt_skew);
+                 fillHisto(m_vx_pt_kurtosis_HS_fake, pt_kurt);
+                 for (const float& weight : vertex->trackWeights()) {
+                     fillHisto(m_vx_track_weight_HS_fake, weight);
+                 }
               }
 
               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);
+                 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);
+                 fillHisto(m_vx_d_asym_fake, d_asym);
+                 fillHisto(m_vx_chi2Over_ndf_fake, vertex->chiSquared()/ndf);
+
+                 fillHisto(m_vx_z0_skewness_fake, z_skew);
+                 fillHisto(m_vx_z0_kurtosis_fake, z_kurt);
+                 fillHisto(m_vx_d0_skewness_fake, d_skew);
+                 fillHisto(m_vx_d0_kurtosis_fake, d_kurt);
+                 fillHisto(m_vx_pt_skewness_fake, pt_skew);
+                 fillHisto(m_vx_pt_kurtosis_fake, pt_kurt);
+                 for (const float& weight : vertex->trackWeights()) {
+                     fillHisto(m_vx_track_weight_fake, weight);
+                 }
              }
-           }
+// fill some histograms that contain both HS and PU above a min pt - say 20GeV
+              double minpt = 20 ; // GeV
+              if (sumPt/Gaudi::Units::GeV > minpt) {
+                 fillHisto(m_vx_sumpT_ALL_fake,sumPt / Gaudi::Units::GeV);
+                 fillHisto(m_vx_sumCharge_ALL_fake,sumCharge);
+                 fillHisto(m_vx_sumCharge_N_trk_ALL_fake, sumCharge/vertex->nTrackParticles());
+                 fillHisto(m_vx_z_asym_ALL_fake, z_asym);
+                 fillHisto(m_vx_d_asym_ALL_fake, d_asym);
+                 fillHisto(m_vx_chi2Over_ndf_ALL_fake, vertex->chiSquared()/ndf);
+
+                 fillHisto(m_vx_z0_skewness_ALL_fake, z_skew);
+                 fillHisto(m_vx_z0_kurtosis_ALL_fake, z_kurt);
+                 fillHisto(m_vx_d0_skewness_ALL_fake, d_skew);
+                 fillHisto(m_vx_d0_kurtosis_ALL_fake, d_kurt);
+                 fillHisto(m_vx_pt_skewness_ALL_fake, pt_skew);
+                 fillHisto(m_vx_pt_kurtosis_ALL_fake, pt_kurt);
+                 for (const float& weight : vertex->trackWeights()) {
+                     fillHisto(m_vx_track_weight_ALL_fake, weight);
+                 }
+
+             }
+           }   // end of fake vertices
+// Helen OTP count the number of vertices for each type per event
+         
+
+         if (recoVtxMatchTypeInfo(*vertex) == InDetVertexTruthMatchUtils::VertexMatchType::MATCHED) {
+              if (vertex == bestRecoHSVtx_truth) {
+                 number_matched_HS++;
+              }
+              else {
+                 number_matched_PU++;         
+              }
+              double minpt = 20 ; // GeV
+              if (sumPt/Gaudi::Units::GeV > minpt) {
+                  number_matched++;
+             }
+        }
+
+         if (recoVtxMatchTypeInfo(*vertex) == InDetVertexTruthMatchUtils::VertexMatchType::MERGED) {
+              if (vertex == bestRecoHSVtx_truth) {
+                 number_merged_HS++;
+              }
+              else {
+                 number_merged_PU++;         
+              }
+              double minpt = 20 ; // GeV
+              if (sumPt/Gaudi::Units::GeV > minpt) {
+                  number_merged++;
+             }
+        }
+
+         if (recoVtxMatchTypeInfo(*vertex) == InDetVertexTruthMatchUtils::VertexMatchType::SPLIT) {
+              if (vertex == bestRecoHSVtx_truth) {
+                 number_split_HS++;
+              }
+              else {
+                 number_split_PU++;         
+              }
+              double minpt = 20 ; // GeV
+              if (sumPt/Gaudi::Units::GeV > minpt) {
+                  number_split++;    
+             }
+         }
 
-         //end of sumPt;   // can't return here as its a void function
+        } // end of if (ndf != 0)
  
 
 
 // Add new histos to check for number of tracks for each vertex type Helen OTP  
-//
-
+        for (const auto& vertex : vertexContainer.stdcont()) {
            if (vertex == bestRecoHSVtx_truth) {
 
          
@@ -684,9 +1362,22 @@ void InDetPerfPlot_VertexTruthMatching::fill(const xAOD::VertexContainer& vertex
            }
        
    
-
+       } 
+     //     std::cout << " End loop over vertices  helenmaguire";
         } // end loop over vertices
 
+// Helen OTP - add new histos to count number of vertices per event
+        fillHisto(m_vx_nVertices_ALL_matched, number_matched);
+        fillHisto(m_vx_nVertices_ALL_merged, number_merged);
+        fillHisto(m_vx_nVertices_ALL_split, number_split);
+        fillHisto(m_vx_nVertices_HS_matched, number_matched_HS);
+        fillHisto(m_vx_nVertices_HS_merged, number_merged_HS);
+        fillHisto(m_vx_nVertices_HS_split, number_split_HS);
+        fillHisto(m_vx_nVertices_matched, number_matched_PU);
+        fillHisto(m_vx_nVertices_merged, number_merged_PU);
+        fillHisto(m_vx_nVertices_split, number_split_PU);
+
+
         // Now fill plots relating to the reconstruction of our truth HS vertex (efficiency and resolutions)
         if (truthHSVertices.size() != 0) {
             localPUDensity = getLocalPUDensity(truthHSVtx, truthHSVertices, truthPUVertices);
@@ -779,6 +1470,9 @@ void InDetPerfPlot_VertexTruthMatching::fill(const xAOD::VertexContainer& vertex
 void InDetPerfPlot_VertexTruthMatching::finalizePlots() {
 
     if (m_iDetailLevel >= 200) {
+        
+//        std::cout << " finalizePlots helenmaguire    !!!*";
+
         fillResoHist(m_vx_hs_truth_long_reso, m_vx_hs_truth_long_reso_vs_PU);
         fillResoHist(m_vx_hs_truth_trans_reso, m_vx_hs_truth_trans_reso_vs_PU);
     }
diff --git a/InnerDetector/InDetValidation/InDetPhysValMonitoring/src/InDetPerfPlot_VertexTruthMatching.h b/InnerDetector/InDetValidation/InDetPhysValMonitoring/src/InDetPerfPlot_VertexTruthMatching.h
index c0961b52a50d..8305367c3a74 100644
--- a/InnerDetector/InDetValidation/InDetPhysValMonitoring/src/InDetPerfPlot_VertexTruthMatching.h
+++ b/InnerDetector/InDetValidation/InDetPhysValMonitoring/src/InDetPerfPlot_VertexTruthMatching.h
@@ -160,12 +160,172 @@ private:
     TH1* m_vx_z_asym_merged;
     TH1* m_vx_z_asym_split;
     TH1* m_vx_z_asym_fake;
+    TH1* m_vx_track_weight_matched;
+    TH1* m_vx_track_weight_merged;
+    TH1* m_vx_track_weight_split;
+    TH1* m_vx_track_weight_fake;
+    TH1* m_vx_track_weight_HS_matched;
+    TH1* m_vx_track_weight_HS_merged;
+    TH1* m_vx_track_weight_HS_split;
+    TH1* m_vx_track_weight_HS_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;
+    
+    TH1* m_vx_normalised_track_weight_matched;
+    TH1* m_vx_normalised_track_weight_merged;
+    TH1* m_vx_normalised_track_weight_split;
+    TH1* m_vx_normalised_track_weight_fake;
+    TH1* m_vx_normalised_track_weight_HS_matched;
+    TH1* m_vx_normalised_track_weight_HS_merged;
+    TH1* m_vx_normalised_track_weight_HS_split;
+    TH1* m_vx_normalised_track_weight_HS_fake;
+
+    TH1* m_vx_d_asym_matched;
+    TH1* m_vx_d_asym_merged;
+    TH1* m_vx_d_asym_split;
+    TH1* m_vx_d_asym_fake;
+    TH1* m_vx_d_asym_HS_matched;
+    TH1* m_vx_d_asym_HS_merged;
+    TH1* m_vx_d_asym_HS_split;
+    TH1* m_vx_d_asym_HS_fake;
+
+    TH1* m_vx_chi2Over_ndf_matched;
+    TH1* m_vx_chi2Over_ndf_merged;
+    TH1* m_vx_chi2Over_ndf_split;
+    TH1* m_vx_chi2Over_ndf_fake;
+    TH1* m_vx_chi2Over_ndf_HS_matched;
+    TH1* m_vx_chi2Over_ndf_HS_merged;
+    TH1* m_vx_chi2Over_ndf_HS_split;
+    TH1* m_vx_chi2Over_ndf_HS_fake;
+
+// histo to get skewness and kurtosis of z0 of tracks around vertex
+   
+    TH1* m_vx_z0_skewness_HS_matched;
+    TH1* m_vx_z0_kurtosis_HS_matched;
+    TH1* m_vx_z0_skewness_matched;
+    TH1* m_vx_z0_kurtosis_matched;
+    TH1* m_vx_z0_skewness_HS_merged;
+    TH1* m_vx_z0_kurtosis_HS_merged;
+    TH1* m_vx_z0_skewness_merged;
+    TH1* m_vx_z0_kurtosis_merged;
+    TH1* m_vx_z0_skewness_HS_split;
+    TH1* m_vx_z0_kurtosis_HS_split;
+    TH1* m_vx_z0_skewness_split;
+    TH1* m_vx_z0_kurtosis_split;
+    TH1* m_vx_z0_skewness_HS_fake;
+    TH1* m_vx_z0_kurtosis_HS_fake;
+    TH1* m_vx_z0_skewness_fake;
+    TH1* m_vx_z0_kurtosis_fake;
+
+    TH1* m_vx_d0_skewness_HS_matched;
+    TH1* m_vx_d0_skewness_HS_merged;
+    TH1* m_vx_d0_skewness_HS_split;
+    TH1* m_vx_d0_skewness_HS_fake;
+    TH1* m_vx_d0_skewness_matched;
+    TH1* m_vx_d0_skewness_merged;
+    TH1* m_vx_d0_skewness_split;
+    TH1* m_vx_d0_skewness_fake;
+    TH1* m_vx_d0_kurtosis_HS_matched;
+    TH1* m_vx_d0_kurtosis_HS_merged;
+    TH1* m_vx_d0_kurtosis_HS_split;
+    TH1* m_vx_d0_kurtosis_HS_fake;
+    TH1* m_vx_d0_kurtosis_matched;
+    TH1* m_vx_d0_kurtosis_merged;
+    TH1* m_vx_d0_kurtosis_split;
+    TH1* m_vx_d0_kurtosis_fake;
+
+
+    TH1* m_vx_pt_skewness_matched;
+    TH1* m_vx_pt_skewness_merged;
+    TH1* m_vx_pt_skewness_split;
+    TH1* m_vx_pt_skewness_fake;
+    TH1* m_vx_pt_skewness_HS_matched;
+    TH1* m_vx_pt_skewness_HS_merged;
+    TH1* m_vx_pt_skewness_HS_split;
+    TH1* m_vx_pt_skewness_HS_fake;
+    TH1* m_vx_pt_kurtosis_matched;
+    TH1* m_vx_pt_kurtosis_merged;
+    TH1* m_vx_pt_kurtosis_split;
+    TH1* m_vx_pt_kurtosis_fake;
+    TH1* m_vx_pt_kurtosis_HS_matched;
+    TH1* m_vx_pt_kurtosis_HS_merged;
+    TH1* m_vx_pt_kurtosis_HS_split;
+    TH1* m_vx_pt_kurtosis_HS_fake;
+    // ALL Vertices
+    TH1* m_vx_sumpT_ALL_matched;
+    TH1* m_vx_sumpT_ALL_merged;
+    TH1* m_vx_sumpT_ALL_split;
+    TH1* m_vx_sumpT_ALL_fake;
+    
+    TH1* m_vx_sumCharge_ALL_matched;
+    TH1* m_vx_sumCharge_ALL_merged;
+    TH1* m_vx_sumCharge_ALL_split;
+    TH1* m_vx_sumCharge_ALL_fake;
+    TH1* m_vx_sumCharge_N_trk_ALL_matched;
+    TH1* m_vx_sumCharge_N_trk_ALL_merged;
+    TH1* m_vx_sumCharge_N_trk_ALL_split;
+    TH1* m_vx_sumCharge_N_trk_ALL_fake;
+    TH1* m_vx_z_asym_ALL_matched;
+    TH1* m_vx_z_asym_ALL_merged;
+    TH1* m_vx_z_asym_ALL_split;
+    TH1* m_vx_z_asym_ALL_fake;
+    TH1* m_vx_track_weight_ALL_matched;
+    TH1* m_vx_track_weight_ALL_merged;
+    TH1* m_vx_track_weight_ALL_split;
+    TH1* m_vx_track_weight_ALL_fake;
+    TH1* m_vx_normalised_track_weight_ALL_matched;
+    TH1* m_vx_normalised_track_weight_ALL_merged;
+    TH1* m_vx_normalised_track_weight_ALL_split;
+    TH1* m_vx_normalised_track_weight_ALL_fake;
+    TH1* m_vx_d_asym_ALL_matched;
+    TH1* m_vx_d_asym_ALL_merged;
+    TH1* m_vx_d_asym_ALL_split;
+    TH1* m_vx_d_asym_ALL_fake;
+
+    TH1* m_vx_chi2Over_ndf_ALL_matched;
+    TH1* m_vx_chi2Over_ndf_ALL_merged;
+    TH1* m_vx_chi2Over_ndf_ALL_split;
+    TH1* m_vx_chi2Over_ndf_ALL_fake;
+
+// histo to get skewness and kurtosis of z0 of tracks around vertex
+   
+    TH1* m_vx_z0_skewness_ALL_matched;
+    TH1* m_vx_z0_kurtosis_ALL_matched;
+    TH1* m_vx_z0_skewness_ALL_merged;
+    TH1* m_vx_z0_kurtosis_ALL_merged;
+    TH1* m_vx_z0_skewness_ALL_split;
+    TH1* m_vx_z0_kurtosis_ALL_split;
+    TH1* m_vx_z0_skewness_ALL_fake;
+    TH1* m_vx_z0_kurtosis_ALL_fake;
 
+    TH1* m_vx_d0_skewness_ALL_matched;
+    TH1* m_vx_d0_skewness_ALL_merged;
+    TH1* m_vx_d0_skewness_ALL_split;
+    TH1* m_vx_d0_skewness_ALL_fake;
+    TH1* m_vx_d0_kurtosis_ALL_matched;
+    TH1* m_vx_d0_kurtosis_ALL_merged;
+    TH1* m_vx_d0_kurtosis_ALL_split;
+    TH1* m_vx_d0_kurtosis_ALL_fake;
 
+    TH1* m_vx_pt_skewness_ALL_matched;
+    TH1* m_vx_pt_skewness_ALL_merged;
+    TH1* m_vx_pt_skewness_ALL_split;
+    TH1* m_vx_pt_skewness_ALL_fake;
+    TH1* m_vx_pt_kurtosis_ALL_matched;
+    TH1* m_vx_pt_kurtosis_ALL_merged;
+    TH1* m_vx_pt_kurtosis_ALL_split;
+    TH1* m_vx_pt_kurtosis_ALL_fake;
+    TH1* m_vx_nVertices_ALL_matched;
+    TH1* m_vx_nVertices_ALL_merged;
+    TH1* m_vx_nVertices_ALL_split;
+    TH1* m_vx_nVertices_HS_matched;
+    TH1* m_vx_nVertices_HS_merged;
+    TH1* m_vx_nVertices_HS_split;
+    TH1* m_vx_nVertices_matched;
+    TH1* m_vx_nVertices_merged;
+    TH1* m_vx_nVertices_split;
 
 
     ///@}
-- 
GitLab