ATLAS Offline Software
Loading...
Searching...
No Matches
VertexPlots.cxx
Go to the documentation of this file.
1
12
13
14#include "VertexPlots.h"
15
16
20IDTPM2::VertexPlots::VertexPlots( const std::string& name, ToolHandle<GenericMonitoringTool>* m )
21 : IPlotBase( name, m ) {
22}
23
24
25
26
30
32
34 m_reference.initialize( this, "reference");
35 m_test.initialize( this, "test");
36
38
39 m_vtx_ntest_vs_nref = TIDA::Histogram2D<float>( monTool(), "vtx_ntest_vs_nref" );
40
42 m_vtx_res_x = TIDA::Histogram<float>( monTool(), "vtx_res_x" );
43 m_vtx_res_y = TIDA::Histogram<float>( monTool(), "vtx_res_y" );
44 m_vtx_res_z = TIDA::Histogram<float>( monTool(), "vtx_res_z" );
45
47 m_vtx_res_z_vs_z = TIDA::Histogram2D<float> ( monTool(), "2D", "vtx_res_z_vs_z" );
48 m_vtx_res_z_vs_ntracks = TIDA::Histogram2D<float> ( monTool(), "2D", "vtx_res_z_vs_ntracks" );
49 m_vtx_res_z_vs_nvtx = TIDA::Histogram2D<float> ( monTool(), "2D", "vtx_res_z_vs_nvtx" );
50 m_vtx_res_z_vs_mu = TIDA::Histogram2D<float> ( monTool(), "2D", "vtx_res_z_vs_mu" );
51
53 m_vtx_eff_vs_z = TIDA::Histogram2D<float> ( monTool(), "vtx_eff_vs_z" );
54 m_vtx_eff_vs_mu = TIDA::Histogram2D<float> ( monTool(), "vtx_eff_vs_mu" );
55 m_vtx_eff_vs_nvtx = TIDA::Histogram2D<float> ( monTool(), "vtx_eff_vs_nvtx" );
56 m_vtx_eff_vs_ntracks = TIDA::Histogram2D<float> ( monTool(), "vtx_eff_vs_ntracks" );
57
58}
59
60
62
63 // MY_MSG_DEBUG << "Booking vertex parameters plots in " << endmsg;
64
65 m_nVtx = TIDA::Histogram<float>( p->monTool(), "nVtx", s );
66 m_nVtx_vs_actualMu = TIDA::Histogram2D<float>( p->monTool(), "nVtx_vs_actualMu", s );
67
69 m_vtx_x = TIDA::Histogram<float>( p->monTool(), "vtx_x", s );
70 m_vtx_y = TIDA::Histogram<float>( p->monTool(), "vtx_y", s );
71 m_vtx_z = TIDA::Histogram<float>( p->monTool(), "vtx_z", s );
72 m_vtx_time = TIDA::Histogram<float>( p->monTool(), "vtx_time", s );
73 // if( m_vertexType != "truth" ) {
75 m_vtx_x_err = TIDA::Histogram<float>( p->monTool(), "vtx_x_err", s );
76 m_vtx_y_err = TIDA::Histogram<float>( p->monTool(), "vtx_y_err", s );
77 m_vtx_z_err = TIDA::Histogram<float>( p->monTool(), "vtx_z_err", s );
78 m_vtx_time_err = TIDA::Histogram<float>( p->monTool(), "vtx_time_err", s );
79 m_vtx_chi2OverNdof = TIDA::Histogram<float>( p->monTool(), "vtx_chi2OverNdof", s );
80 m_vtx_type = TIDA::Histogram<float>( p->monTool(), "vtx_type", s );
81 // }
82
83 //if( m_doTrackPlots ) {
85 m_vtx_nTracks = TIDA::Histogram<float>( p->monTool(), "vtx_nTracks",s );
86 m_vtx_track_weight = TIDA::Histogram<float>( p->monTool(), "vtx_track_weight", s );
87 m_vtx_track_pt = TIDA::Histogram<float>( p->monTool(), "vtx_track_pt", s );
88 m_vtx_track_eta = TIDA::Histogram<float>( p->monTool(), "vtx_track_eta", s );
89 m_vtx_track_nSiHits = TIDA::Histogram<float>( p->monTool(), "vtx_track_nSiHits", s );
90 m_vtx_track_nSiHoles = TIDA::Histogram<float>( p->monTool(), "vtx_track_nSiHoles", s );
91 m_vtx_track_d0 = TIDA::Histogram<float>( p->monTool(), "vtx_track_d0", s );
92 m_vtx_track_z0 = TIDA::Histogram<float>( p->monTool(), "vtx_track_z0", s );
93 m_vtx_track_d0_err = TIDA::Histogram<float>( p->monTool(), "vtx_track_d0_err", s );
94 m_vtx_track_z0_err = TIDA::Histogram<float>( p->monTool(), "vtx_track_z0_err", s );
95
96 // }
97 // } else {
99 // m_nVtx_vs_actualMu_2D = TIDA::Histogram<float>( monTool(), "nVtx_vs_actualMu_2D" );
100 // if( m_doTruthMuPlots ) {
101 // m_nVtx_vs_truthMu_2D = TIDA::Histogram<float>( monTool(), "nVtx_vs_truthMu_2D" );
102 // m_nVtx_vs_truthMu = TIDA::Histogram<float>( monTool(), "nVtx_vs_truthMu" );
103 // }
104
105}
106
107
109
111 float vx = v->x();
112 float vy = v->y();
113 float vz = v->z();
114
115 m_vtx_x.Fill( vx );
116 m_vtx_y.Fill( vy );
117 m_vtx_z.Fill( vz );
118
120 float vxErr = v->dx();
121 float vyErr = v->dy();
122 float vzErr = v->dz();
123
124 m_vtx_x_err.Fill( vxErr );
125 m_vtx_y_err.Fill( vyErr );
126 m_vtx_z_err.Fill( vzErr );
127
128 // float vtimeErr = timeErr( vertex );
129
130 float vchi2 = v->chiSquared();
131 float vndof = v->numberDoF();
132
133 if ( vndof!=0 ) m_vtx_chi2OverNdof.Fill( vchi2/vndof );
134
135 float vtype = v->vertexType();
136
139 // float vtime = v->time();
140
141 // bool vhasValidTime = bool( hasValidTime( vertex ) );
142
146 // if( vhasValidTime ) {
147 // m_vtx_time.Fill( vtime );
148 // m_vtx_time_err.fill( vtimeErr, weight );
149 // }
150
151 m_vtx_type.Fill( vtype );
152
153
155
156 size_t nvTracks = v->nTrackParticles();
157
158 m_vtx_nTracks.Fill( nvTracks );
159
160#if 0
163
164 for( size_t it=0 ; it<nvTracks ; it++ ) {
165 m_vtx_track_weight.Fill( associatedTrackWeights[it], weight );
166
167 float tpt = pT( *associatedTracks[it] ) / Gaudi::Units::GeV;
168 float teta = eta( *associatedTracks[it] );
169 float tnSiHits = nSiHits( *associatedTracks[it] );
170 float tnSiHoles = nSiHoles( *associatedTracks[it] );
171 float td0 = d0( *associatedTracks[it] );
172 float tz0 = z0( *associatedTracks[it] ) - vz;
173 float td0Err = error( *associatedTracks[it], Trk::d0 );
174 // TODO: should this also account for the vertex z error?
175 float tz0Err = error( *associatedTracks[it], Trk::z0 );
176
177 m_vtx_track_pt.Fill( tpt ); //, weight );
178 m_vtx_track_eta.Fill( teta ); //, weight );
179 m_vtx_track_nSiHits.Fill( tnSiHits ); //, weight );
180 m_vtx_track_nSiHoles.Fill( tnSiHoles ); //, weight );
181 m_vtx_track_d0.Fill( td0 ); // , weight );
182 m_vtx_track_z0.Fill( tz0 ); // , weight );
183 m_vtx_track_d0_err.Fill( td0Err ); // , weight );
184 m_vtx_track_z0_err.Fill( tz0Err ); // , weight );
185 } // close loop over tracks
186#endif
187
188}
189
190
191void IDTPM2::VertexPlots::execute( const TrackAnalysisStore& collections ) const {
192
193 // long lumiblock = 0;
194 double mu = 0;
195
196 const xAOD::EventInfo* eventinfo = collections.eventInfo();
197
198 if (eventinfo) {
200 // runnumber = collections.eventInfo()->runNumber();
201 // eventid = collections.eventInfo()->eventNumber();
202 // lumiblock = collections.eventInfo()->lumiBlock();
203 mu = collections.eventInfo()->averageInteractionsPerCrossing();
204 }
205
206 const std::vector<const VertexView*>& ref = collections.refvertices();
207 const std::vector<const VertexView*>& test = collections.testvertices();
208
210
211 m_vtx_ntest_vs_nref.Fill( ref.size(), test.size() );
212
213 m_reference.m_nVtx.Fill( ref.size() );
214 m_reference.m_nVtx_vs_actualMu.Fill( mu, ref.size() );
215
216 m_test.m_nVtx.Fill( test.size() );
217 m_test.m_nVtx_vs_actualMu.Fill( mu, test.size() );
218
220
221 for ( size_t i=0 ; i<ref.size() ; i++ ) { m_reference.fill( ref[i] ); }
222 for ( size_t i=0 ; i<test.size() ; i++ ) { m_test.fill( test[i] ); }
223
224 // std::cout << "ref: " << ref.size() << "\ttest: " << test.size() << std::endl;
225
226 // now residuals andc efficiencies ...
227
228 const TIDA::Associator<const VertexView>* matcher = collections.vertex_matcher();
229
230 for ( size_t i=0 ; i<ref.size() ; i++ ) {
231
232 const VertexView* vr = ref[i];
233
234 const VertexView* vt = matcher->matched( ref[i] );
235
236 bool matched = false;
237
238 if ( vt ) matched = true;
239
240 size_t nvTracks = vr->nTrackParticles();
241
242 m_vtx_eff_vs_z.Fill( vr->z(), matched );
243 m_vtx_eff_vs_mu.Fill( mu, matched );
244 m_vtx_eff_vs_nvtx.Fill( ref.size(), matched );
245 m_vtx_eff_vs_ntracks.Fill( nvTracks, matched );
246
249
250 if ( matched ) {
251
252 float dx = vt->x() - vr->x();
253 float dy = vt->y() - vr->y();
254 float dz = vt->z() - vr->z();
255
256 m_vtx_res_x.Fill( dx );
257 m_vtx_res_y.Fill( dy );
258 m_vtx_res_z.Fill( dz );
259
260 m_vtx_res_z_vs_z.Fill( vr->z(), dz );
261 m_vtx_res_z_vs_ntracks.Fill( nvTracks, dz );
262 m_vtx_res_z_vs_nvtx.Fill( ref.size(), dz );
263 m_vtx_res_z_vs_mu.Fill( mu, dz );
264
265 }
266
267 }
268
273
274 // if( m_doTrackPlots ) {
275 // size_t nvTracks = associatedTracks.size();
276 // if( nvTracks != associatedTrackWeights.size() ) {
277 // MY_MSG_ERROR << "Vertex-associated track number mismatch" << endmsg;
278 // return StatusCode::FAILURE;
279 // }
280 //
281
282 // if( m_doTruthMuPlots ) {
283 // m_nVtx_vs_truthMu_2D.fill( truthMu, nVertices, weight );
284 // m_nVtx_vs_truthMu.fill( truthMu, nVertices, weight );
285 // }
286
287}
288
289
294
295 MY_MSG_DEBUG << "Finalising vertex parameters plots" << endmsg;
296
297 std::string realpath = realPath( "/Vertex/" ); // basestr+stub;
298
299 MY_MSG_DEBUG << "realpath: " << realpath << endmsg;
300
301 processResolution( realpath+"vtx_res_z_vs_z/" );
302 processResolution( realpath+"vtx_res_z_vs_ntracks/" );
303 processResolution( realpath+"vtx_res_z_vs_nvtx/" );
304 processResolution( realpath+"vtx_res_z_vs_mu/" );
305
306 // std::cout << "resplot: " << name() << "\t" << m_vtx_res_z_vs_z.name() << std::endl;
307 // std::cout << "resplot: " << name() << "\t" << m_vtx_res_z_vs_ntracks.name() << std::endl;
308 // std::cout << "resplot: " << name() << "\t" << m_vtx_res_z_vs_nvtx.name() << std::endl;
309 // std::cout << "resplot: " << name() << "\t" << m_vtx_res_z_vs_mu.name() << std::endl;
310
311}
const std::regex ref(r_ef)
Scalar eta() const
pseudorapidity method
#define endmsg
#define MY_MSG_DEBUG
Definition MsgMacros.h:25
emacs: this is -*- c++ -*-
void processResolution(const std::string &path, bool writeflag=false)
Definition IPlotBase.h:89
ToolHandle< GenericMonitoringTool > * monTool()
mon tool
Definition IPlotBase.h:71
std::string realPath(const std::string &tag="")
This is a horrific function, has to get ALL the histograms, just to be able to work out how to get th...
Definition IPlotBase.cxx:86
const std::string & name() const
generic utilities, just in case
Definition IPlotBase.h:68
IPlotBase(const std::string &name, ToolHandle< GenericMonitoringTool > *m=0)
built from dirName and anaTag
Definition IPlotBase.h:41
TIDA::Histogram2D< float > m_vtx_eff_vs_z
efficiencies ...
void initialize()
Book the histograms.
TIDA::Histogram2D< float > m_vtx_res_z_vs_mu
TIDA::Histogram2D< float > m_vtx_eff_vs_ntracks
ParHistograms m_test
why mess about with separate tools for the distributions, the efficiencies and resolutions
TIDA::Histogram2D< float > m_vtx_res_z_vs_z
diferential residuals ...
TIDA::Histogram< float > m_vtx_res_y
VertexPlots(const std::string &name, ToolHandle< GenericMonitoringTool > *m=0)
Constructor.
TIDA::Histogram2D< float > m_vtx_res_z_vs_ntracks
ParHistograms m_reference
TIDA::Histogram< float > m_vtx_res_z
TIDA::Histogram2D< float > m_vtx_res_z_vs_nvtx
void execute(const TrackAnalysisStore &collections) const
this can be over ridden if need be
void finalize()
Print out final stats on histograms.
TIDA::Histogram< float > m_vtx_res_x
residuals ...
TIDA::Histogram2D< float > m_vtx_eff_vs_nvtx
TIDA::Histogram2D< float > m_vtx_ntest_vs_nref
ParHisrograms matched;.
TIDA::Histogram2D< float > m_vtx_eff_vs_mu
Type-erased view on a generic vertex class - implementation won't bother with any VertexTraits at the...
Definition VertexView.h:42
@ d0
Definition ParamDefs.h:63
@ z0
Definition ParamDefs.h:64
EventInfo_v1 EventInfo
Definition of the latest event info version.
TIDA::Histogram< float > m_vtx_time_err
Definition VertexPlots.h:78
TIDA::Histogram< float > m_vtx_track_weight
vertex-associated tracks plots, maybe we want things like sumpt^2 as well ?
Definition VertexPlots.h:87
TIDA::Histogram< float > m_vtx_track_nSiHoles
Definition VertexPlots.h:91
TIDA::Histogram< float > m_vtx_x_err
Definition VertexPlots.h:72
void fill(const VertexView *v) const
TIDA::Histogram< float > m_vtx_type
no ndof as well ?
Definition VertexPlots.h:80
TIDA::Histogram< float > m_nVtx
global vertex quantities ...
Definition VertexPlots.h:61
TIDA::Histogram< float > m_vtx_track_eta
Definition VertexPlots.h:89
TIDA::Histogram< float > m_vtx_track_z0_err
Definition VertexPlots.h:95
TIDA::Histogram< float > m_vtx_track_d0_err
Definition VertexPlots.h:94
TIDA::Histogram< float > m_vtx_track_d0
Definition VertexPlots.h:92
TIDA::Histogram< float > m_vtx_track_pt
Definition VertexPlots.h:88
TIDA::Histogram< float > m_vtx_x
vertex parameter plots ...
Definition VertexPlots.h:66
TIDA::Histogram< float > m_vtx_z
Definition VertexPlots.h:68
TIDA::Histogram< float > m_vtx_track_z0
Definition VertexPlots.h:93
TIDA::Histogram< float > m_vtx_y
Definition VertexPlots.h:67
TIDA::Histogram< float > m_vtx_y_err
Definition VertexPlots.h:73
TIDA::Histogram2D< float > m_nVtx_vs_actualMu
Definition VertexPlots.h:62
TIDA::Histogram< float > m_vtx_nTracks
Definition VertexPlots.h:82
TIDA::Histogram< float > m_vtx_track_nSiHits
Definition VertexPlots.h:90
TIDA::Histogram< float > m_vtx_time
Definition VertexPlots.h:70
TIDA::Histogram< float > m_vtx_z_err
Definition VertexPlots.h:74
void initialize(VertexPlots *p, const std::string &s="")
TIDA::Histogram< float > m_vtx_chi2OverNdof
Definition VertexPlots.h:79