ATLAS Offline Software
InDetVertexMonitoring.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #include <iostream>
6 #include <map>
7 #include <string>
8 #include "LWHists/TH1F_LW.h"
9 #include "LWHists/TH2F_LW.h"
10 #include "TMath.h"
11 
13 #include "GaudiKernel/MsgStream.h"
14 #include "GaudiKernel/StatusCode.h"
15 
18 
19 #include "xAODTracking/Vertex.h"
22 
23 #include "InDetVertexMonitoring.h"
24 
26 
27 InDetVertexMonitoring::InDetVertexMonitoring( const std::string & type, const std::string & name, const IInterface* parent )
29 {
30  m_h_vxdist = nullptr;
31  m_h_Ntracks = nullptr;
32  m_h_sumpt = nullptr;
33  m_h_pvChiSq = nullptr;
34  m_h_pvDof = nullptr;
35  m_h_pvChiSqovDof = nullptr;
36  m_h_pvChiSqProb = nullptr;
37  m_h_cumulVx = nullptr;
38  m_h_deltaZpairs = nullptr;
39 }
40 
42 
44 
46 
48 
51  ATH_CHECK( m_vertexContainer.initialize() );
52 
53  return StatusCode::SUCCESS;
54 }
55 
57 
59 {
60  if(m_doControlPlots){
61  m_h_cumulVx = TH1F_LW::create("nVx","N_{Vx}",70,0,70.);
62  m_h_Ntracks = TH1F_LW::create("nTracks","N_{tracks}",50,0,50.);
63  m_h_sumpt = TH1F_LW::create("sumpt","sumpt",50,0,25.);
64  m_h_pvChiSq = TH1F_LW::create("pvChiSq","Primary vertex: #Chi^{2}",100,0,100.);
65  m_h_pvDof = TH1F_LW::create("pvDof","Primary vertex: Dof",100,0,100.);
66  m_h_pvChiSqovDof = TH1F_LW::create("pvChiSqovDof","Primary vertex: #Chi^{2}/DoF",100,0,5.);
67  m_h_pvChiSqProb = TH1F_LW::create("pvChiSqProb","Primary vertex: #Chi^{2} Probability",50,0,1.);
68  m_h_deltaZpairs = TH2F_LW::create("deltaZpairs","#Deltaz of vertices pairs",40,0,40.,20000,-300.,300);
69 
78  }
79 
80  m_h_vxdist = TH1F_LW::create("nVx","Vx number with EF_rd0_filled_NoAlg",70,0.,70.);
82 
83  return StatusCode::SUCCESS;
84 
85 }
86 
88 {
89 
91  if ( !vertexContainer.isValid() )
92  {
93  ATH_MSG_WARNING ("No xAOD::VertexContainer found");
94  return StatusCode::FAILURE;
95  }
96 
97  // Event info is never actually used
98  // Leaving in the call since perhaps the check for presence is necessary
100  if ( !eventInfo.isValid() )
101  {
102  ATH_MSG_WARNING ("No Event Info found");
103  return StatusCode::FAILURE;
104  }
105 
106  int n_vtx = vertexContainer->size()-1;
107 
108  for ( const xAOD::Vertex* vtx : (*vertexContainer) ) {
109  if (vtx->vertexType() == xAOD::VxType::NoVtx) continue;
110 
111  int ntrk(-1);
112  ntrk = vtx->nTrackParticles();
113 
114  if(m_doControlPlots){
115  m_h_Ntracks->Fill(ntrk);
116  double spt = 0.;
117  if(ntrk>0){
118  for (const ElementLink<xAOD::TrackParticleContainer>& trk : vtx->trackParticleLinks()) {
119  spt += (*trk)->pt()/1e6;
120  }
121  }
122  spt = TMath::Sqrt(spt);
123  m_h_sumpt->Fill(spt);
124  double chi2 = vtx->chiSquared();
126  double dof = vtx->numberDoF();
127  m_h_pvDof->Fill(dof);
128  double chi2ovdof = chi2/dof;
129  m_h_pvChiSqovDof->Fill(chi2ovdof);
130  double chi2prob = TMath::Prob(chi2,dof);
131  m_h_pvChiSqProb->Fill(chi2prob);
132  }
133  }
134 
135  if(m_doControlPlots){
136  m_h_cumulVx->Fill(n_vtx);
137  //DeltaZ Plot
138  double deltaZ = 0.;
139  double zit1 = 0.;
140  double zit2 = 0.;
141  for ( const xAOD::Vertex *vtx : (*vertexContainer) ) {
142  //Check vertex type (e.g. no dummy vertex)
143  if ( ! ( vtx->vertexType() == xAOD::VxType::PriVtx or vtx->vertexType() == xAOD::VxType::PileUp ) )
144  continue;
145  zit1 = vtx->z();
146  // Loop over vertices again (starting from vxIter + 1) to get all distinct pairs
147  for ( const xAOD::Vertex *vtx2 : (*vertexContainer) ) {
148  //Check vertex type (e.g. no dummy vertex)
149  if ( ! ( vtx2->vertexType() == xAOD::VxType::PriVtx or vtx->vertexType() == xAOD::VxType::PileUp ) )
150  continue;
151  zit2 = vtx2->z();
152  deltaZ = (zit1-zit2);
153  //Weight events with the total number of pairs (no compare distributions from different n_vtx bins)
154  m_h_deltaZpairs->Fill(n_vtx,deltaZ, 1./TMath::Binomial(n_vtx,2));
155  }
156  }
157  }
158 
159  m_h_vxdist->Fill(n_vtx);
160 
161  return StatusCode::SUCCESS;
162 }
TH2F_LW::Fill
virtual void Fill(const double &x, const double &y) override
Definition: TH2F_LW.cxx:329
InDetVertexMonitoring::~InDetVertexMonitoring
~InDetVertexMonitoring()
Definition: InDetVertexMonitoring.cxx:43
InDetVertexMonitoring::m_h_deltaZpairs
TH2F_LW * m_h_deltaZpairs
Definition: InDetVertexMonitoring.h:44
TH1F_LW.h
TH2F_LW.h
TH1F_LW::Fill
virtual void Fill(const double &x) override
Definition: TH1F_LW.cxx:246
CondAttrListCollection.h
This file defines the class for a collection of AttributeLists where each one is associated with a ch...
ManagedMonitorToolBase::lumiBlock
@ lumiBlock
Definition: ManagedMonitorToolBase.h:114
TH1F_LW::create
static TH1F_LW * create(const char *name, const char *title, unsigned nbinsx, const double &xlow, const double &xup)
Definition: TH1F_LW.cxx:33
ManagedMonitorToolBase
Provides functionality for users to implement and save histograms, ntuples, and summary data,...
Definition: ManagedMonitorToolBase.h:74
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:70
InDetVertexMonitoring::m_eventInfo
SG::ReadHandleKey< xAOD::EventInfo > m_eventInfo
Definition: InDetVertexMonitoring.h:53
InDetVertexMonitoring::InDetVertexMonitoring
InDetVertexMonitoring(const std::string &type, const std::string &name, const IInterface *parent)
Definition: InDetVertexMonitoring.cxx:27
InDetVertexMonitoring::m_h_pvDof
TH1F_LW * m_h_pvDof
Definition: InDetVertexMonitoring.h:40
xAOD::VxType::NoVtx
@ NoVtx
Dummy vertex. TrackParticle was not used in vertex fit.
Definition: TrackingPrimitives.h:570
InDetVertexMonitoring::m_h_vxdist
TH1F_LW * m_h_vxdist
Definition: InDetVertexMonitoring.h:36
InDetVertexMonitoring::initialize
virtual StatusCode initialize()
Definition: InDetVertexMonitoring.cxx:47
ManagedMonitorToolBase::initialize
virtual StatusCode initialize()
Definition: ManagedMonitorToolBase.cxx:669
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
InDetVertexMonitoring::m_h_pvChiSq
TH1F_LW * m_h_pvChiSq
Definition: InDetVertexMonitoring.h:39
InDetVertexMonitoring::m_histFolder
Gaudi::Property< std::string > m_histFolder
Definition: InDetVertexMonitoring.h:51
xAOD::VxType::PriVtx
@ PriVtx
Primary vertex.
Definition: TrackingPrimitives.h:571
chi2
double chi2(TH1 *h0, TH1 *h1)
Definition: comparitor.cxx:522
test_pyathena.parent
parent
Definition: test_pyathena.py:15
AthenaMonManager.h
InDetVertexMonitoring::m_h_Ntracks
TH1F_LW * m_h_Ntracks
Definition: InDetVertexMonitoring.h:37
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
run
Definition: run.py:1
ManagedMonitorToolBase::ATTRIB_MANAGED
@ ATTRIB_MANAGED
Definition: ManagedMonitorToolBase.h:131
SG::VarHandleKey::initialize
StatusCode initialize(bool used=true)
If this object is used as a property, then this should be called during the initialize phase.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:103
Vertex.h
SG::ReadHandle::isValid
virtual bool isValid() override final
Can the handle be successfully dereferenced?
InDetVertexMonitoring::m_h_pvChiSqovDof
TH1F_LW * m_h_pvChiSqovDof
Definition: InDetVertexMonitoring.h:41
xAOD::VxType::PileUp
@ PileUp
Pile-up vertex.
Definition: TrackingPrimitives.h:573
InDetVertexMonitoring::m_vertexContainer
SG::ReadHandleKey< xAOD::VertexContainer > m_vertexContainer
Definition: InDetVertexMonitoring.h:56
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
TH2F_LW::create
static TH2F_LW * create(const char *name, const char *title, unsigned nbinsx, const double &xmin, const double &xmax, unsigned nbinsy, const double &ymin, const double &ymax)
Definition: TH2F_LW.cxx:33
InDetVertexMonitoring::bookHistograms
virtual StatusCode bookHistograms()
An inheriting class should either override this function or bookHists().
Definition: InDetVertexMonitoring.cxx:58
InDetVertexMonitoring::m_doControlPlots
Gaudi::Property< bool > m_doControlPlots
Definition: InDetVertexMonitoring.h:48
TrackParticle.h
InDetVertexMonitoring::m_h_pvChiSqProb
TH1F_LW * m_h_pvChiSqProb
Definition: InDetVertexMonitoring.h:42
xAOD::Vertex_v1
Class describing a Vertex.
Definition: Vertex_v1.h:42
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
AthMessaging.h
InDetVertexMonitoring.h
InDetVertexMonitoring::fillHistograms
virtual StatusCode fillHistograms()
An inheriting class should either override this function or fillHists().
Definition: InDetVertexMonitoring.cxx:87
InDetVertexMonitoring::m_h_sumpt
TH1F_LW * m_h_sumpt
Definition: InDetVertexMonitoring.h:38
makeComparison.deltaZ
int deltaZ
Definition: makeComparison.py:46
DataVector::size
size_type size() const noexcept
Returns the number of elements in the collection.
ManagedMonitorToolBase::regHist
virtual StatusCode regHist(TH1 *h, const std::string &system, Interval_t interval, MgmtAttr_t histo_mgmt=ATTRIB_MANAGED, const std::string &chain="", const std::string &merge="")
Registers a TH1 (including TH2, TH3, and TProfile) to be included in the output stream using logical ...
Definition: ManagedMonitorToolBase.cxx:1454
InDetVertexMonitoring::m_h_cumulVx
TH1F_LW * m_h_cumulVx
Definition: InDetVertexMonitoring.h:43
TrackParticleContainer.h