ATLAS Offline Software
InDetGlobalPrimaryVertexMonTool.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 
6 #include "LWHists/TH1F_LW.h"
7 #include "LWHists/TH2F_LW.h"
8 #include "LWHists/TProfile_LW.h"
9 #include "TGraph.h"
10 
12 #include "StoreGate/ReadHandle.h"
14 
16 
18 
20 #include <vector>
21 #include <cmath>
22 
23 InDetGlobalPrimaryVertexMonTool::InDetGlobalPrimaryVertexMonTool( const std::string & type, const std::string & name, const IInterface* parent )
25  // basic montoring
26  m_hPvN(nullptr),
27  m_hPvNPriVtx(nullptr),
28  m_hPvNPileupVtx(nullptr),
29  m_hPvN_LB(nullptr),
30  m_hPvNaveMu(nullptr),
31  m_hPvX(nullptr),
32  m_hPvY(nullptr),
33  m_hPvZ(nullptr),
34  m_hPvErrX(nullptr),
35  m_hPvErrY(nullptr),
36  m_hPvErrZ(nullptr),
37  m_hPvChiSqDoF(nullptr),
38  m_hPvNTracks(nullptr),
39  m_hPvTrackPt(nullptr),
40  m_hPvTrackEta(nullptr),
41  // ennhanced montoring
42  m_hVrt_XpullVsNtrkAverage_split(nullptr),
43  m_hVrt_YpullVsNtrkAverage_split(nullptr),
44  m_hVrt_ZpullVsNtrkAverage_split(nullptr),
45 
46  m_hVrt_XpullVsPt2Average_split(nullptr),
47  m_hVrt_YpullVsPt2Average_split(nullptr),
48  m_hVrt_ZpullVsPt2Average_split(nullptr),
49 
50  m_hVrt_Xerr_vs_ntrk(nullptr),
51  m_hVrt_Yerr_vs_ntrk(nullptr),
52  m_hVrt_Zerr_vs_ntrk(nullptr),
53 
54  m_hVrt_Xerr_vs_pt2(nullptr),
55  m_hVrt_Yerr_vs_pt2(nullptr),
56  m_hVrt_Zerr_vs_pt2(nullptr),
57  m_hVrt_split_tag_ntrk(nullptr),
58  m_hVrt_split_probe_ntrk(nullptr),
59  m_hVrt_split_matched_tag_ntrk(nullptr),
60  m_hVrt_split_matched_probe_ntrk(nullptr),
61  m_hVrt_split_dist_tag(nullptr),
62  m_hVrt_split_dist_probe(nullptr),
63  m_histFolder("InDetGlobal/PrimaryVertex"),
64  m_splitVertexTrkInvFraction(2),
65  m_distanceSplitVxMatch(5.0),
66  m_splitMatchingMetric(3),
67  m_doEnhancedMonitoring(false)
68 {
69  declareProperty("histFolder", m_histFolder);
70  declareProperty("splitVertexTrkInvFraction", m_splitVertexTrkInvFraction, "inverse fraction to split tracks (1:N)");
71  declareProperty("distanceSplitVertexMatch", m_distanceSplitVxMatch, "Distance for matching split-original Vertex in selection efficiency");
72  declareProperty("splitMatchingMetric", m_splitMatchingMetric, "Determines which function to use to calculate matching between split vertices and original input vertex -- used in selection efficiency");
73  declareProperty("doEnhancedMonitoring" , m_doEnhancedMonitoring, "turn on the enhanced vertex monitoring, it is triggered by the same InDetFlag that also triggers the creation of no beam constraint and split vertices");
74 }
75 
77 
79  StatusCode sc;
81  if(!sc.isSuccess()) return sc;
82 
83  ATH_CHECK( m_vxContainerName.initialize() );
86 
87  return StatusCode::SUCCESS;
88 }
89 
91 
92  MonGroup al_primaryvertex_shift( this, m_histFolder, run, ATTRIB_UNMANAGED);
93  MonGroup al_primaryvertex_expert( this, m_histFolder, run, ATTRIB_UNMANAGED);
94 
95  if( newRunFlag() ) {
96 
97  // basic monitoring
98  m_hPvX = makeAndRegisterTH1F(al_primaryvertex_shift,"pvX","Primary vertex: x;x (mm)",500,-5.,5.);
99  m_hPvY = makeAndRegisterTH1F(al_primaryvertex_shift,"pvY","Primary vertex: y;y (mm)",500,-5.,5.);
100  m_hPvZ = makeAndRegisterTH1F(al_primaryvertex_shift,"pvZ","Primary vertex: z;z (mm)",100,-200.,200.);
101  m_hPvN = makeAndRegisterTH1F(al_primaryvertex_shift,"pvN","Total number of vertices (primary and pile up);Total number of vertices",50,0.,50.);
102  if ( al_primaryvertex_shift.regHist( m_hPvN_LB = TProfile_LW::create("pvN_LB", "Total number of vertices (primary and pile up) vs LB", 2000, 0.5, 2000.5 ) ).isFailure() )
103  ATH_MSG_WARNING ("Unable to book histogram with name = "+std::string("pvN_LB"));
104 
105  m_hPvNPriVtx = makeAndRegisterTH1F(al_primaryvertex_expert,"pvNPriVtx","Number of primary vertices;Number of primary vertices",3,0.,3.);
106  m_hPvNPileupVtx = makeAndRegisterTH1F(al_primaryvertex_expert,"pvNPileupVtx","Number of pileup vertices;Number of pile up vertices",40,0.,40.);
108  {
109  m_hPvNaveMu = makeAndRegisterTH2F(al_primaryvertex_shift,"m_hPvNaveMu","Number of vertices vs <#mu>", 50, 0.,50., 40, 0.,40.);
110  }
111  m_hPvErrX = makeAndRegisterTH1F(al_primaryvertex_expert,"pvErrX","Primary vertex: #sigma_{x}; #sigma_{x} (mm)",100,0.,.25);
112  m_hPvErrY = makeAndRegisterTH1F(al_primaryvertex_expert,"pvErrY","Primary vertex: #sigma_{y}; #sigma_{y} (mm)",100,0.,.25);
113  m_hPvErrZ = makeAndRegisterTH1F(al_primaryvertex_expert,"pvErrZ","Primary vertex: #sigma_{z}; #sigma_{z} (mm)",100,0.,.25);
114  m_hPvChiSqDoF = makeAndRegisterTH1F(al_primaryvertex_shift,"pvChiSqDof","Primary vertex: #Chi^{2}/DoF of vertex fit;#Chi^{2}/DoF",100,0.,5.);
115  m_hPvNTracks = makeAndRegisterTH1F(al_primaryvertex_shift,"pvNTracks","Number of tracks in primary vertex;Number of tracks",300,0.,300.);
116  m_hPvTrackPt = makeAndRegisterTH1F(al_primaryvertex_shift,"pvTrackPt","Primary vertex: original track p_{t};p_{t} (GeV)",100,0.,20.);
117  m_hPvTrackEta = makeAndRegisterTH1F(al_primaryvertex_shift,"pvTrackEta","Primary vertex: original track #eta; #eta",100,-3.,3.);
118 
119  // enhanced monitoring
121  {
122  // to be certain that 0 tracks end up at 0. in histo (and 3 tracks at 3., aso. ...)
123  float minBinNTrk(-0.5); float maxBinNTrk(149.5); unsigned int numBinsNTrk((unsigned int)(maxBinNTrk-minBinNTrk));
124  float minBinSumPt2(0.); float maxBinSumPt2(20.); unsigned int numBinsSumPt2((unsigned int)( (maxBinSumPt2-minBinSumPt2) / 0.25 )); //bins size = 0.25
125 
126  m_hVrt_XpullVsNtrkAverage_split = makeAndRegisterTH2F(al_primaryvertex_expert,"Vrt_XpullVsNtrkAverage_split", "Entries;N Tracks average;x pull value",numBinsNTrk, minBinNTrk, maxBinNTrk, 60, -6., 6.);
127  m_hVrt_YpullVsNtrkAverage_split = makeAndRegisterTH2F(al_primaryvertex_expert,"Vrt_YpullVsNtrkAverage_split", "Entries;N Tracks average;y pull value",numBinsNTrk, minBinNTrk, maxBinNTrk, 60, -6., 6.);
128  m_hVrt_ZpullVsNtrkAverage_split = makeAndRegisterTH2F(al_primaryvertex_expert,"Vrt_ZpullVsNtrkAverage_split", "Entries;N Tracks average;z pull value",numBinsNTrk, minBinNTrk, maxBinNTrk, 60, -6., 6.);
129 
130  m_hVrt_XpullVsPt2Average_split = makeAndRegisterTH2F(al_primaryvertex_expert,"Vrt_XpullVsPt2Average_split", "Entries;#sqrt{#sum p_{T}^{2}} average [GeV];x pull value", numBinsSumPt2, minBinSumPt2, maxBinSumPt2, 60, -6., 6.);
131  m_hVrt_YpullVsPt2Average_split = makeAndRegisterTH2F(al_primaryvertex_expert,"Vrt_YpullVsPt2Average_split", "Entries;#sqrt{#sum p_{T}^{2}} average [GeV];y pull value", numBinsSumPt2, minBinSumPt2, maxBinSumPt2, 60, -6., 6.);
132  m_hVrt_ZpullVsPt2Average_split = makeAndRegisterTH2F(al_primaryvertex_expert,"Vrt_ZpullVsPt2Average_split", "Entries;#sqrt{#sum p_{T}^{2}} average [GeV];z pull value", numBinsSumPt2, minBinSumPt2, maxBinSumPt2, 60, -6., 6.);
133 
134  // errors of unconstrained vertices
135  m_hVrt_Xerr_vs_ntrk = makeAndRegisterTH2F(al_primaryvertex_expert,"Vrt_Xerr_vs_ntrk","Entries;Number of Tracks;x vertex Error [mm]",numBinsNTrk, minBinNTrk, maxBinNTrk, 200, 0., 1.);
136  m_hVrt_Yerr_vs_ntrk = makeAndRegisterTH2F(al_primaryvertex_expert,"Vrt_Yerr_vs_ntrk","Entries;Number of Tracks;y vertex Error [mm]",numBinsNTrk, minBinNTrk, maxBinNTrk, 200, 0., 1.);
137  m_hVrt_Zerr_vs_ntrk = makeAndRegisterTH2F(al_primaryvertex_expert,"Vrt_Zerr_vs_ntrk","Entries;Number of Tracks;z vertex Error [mm]",numBinsNTrk, minBinNTrk, maxBinNTrk, 400, 0., 2.);
138 
139  m_hVrt_Xerr_vs_pt2 = makeAndRegisterTH2F(al_primaryvertex_expert,"Vrt_Xerr_vs_pt2","Entries;#sqrt{#sum p_{T}^{2}} [GeV];x vertex Error [mm]", numBinsSumPt2, minBinSumPt2, maxBinSumPt2, 200, 0., 1.);
140  m_hVrt_Yerr_vs_pt2 = makeAndRegisterTH2F(al_primaryvertex_expert,"Vrt_Yerr_vs_pt2","Entries;#sqrt{#sum p_{T}^{2}} [GeV];y vertex Error [mm]", numBinsSumPt2, minBinSumPt2, maxBinSumPt2, 200, 0., 1.);
141  m_hVrt_Zerr_vs_pt2 = makeAndRegisterTH2F(al_primaryvertex_expert,"Vrt_Zerr_vs_pt2","Entries;#sqrt{#sum p_{T}^{2}} [GeV];z vertex Error [mm]", numBinsSumPt2, minBinSumPt2, maxBinSumPt2, 400, 0., 2.);
142 
143  // number of tag and probe split vertices reconstructed as a function of the number of tracks at the probe vertex
144  m_hVrt_split_tag_ntrk = makeAndRegisterTH1F(al_primaryvertex_expert, "Vrt_split_tag_ntrk", "N. events with reconstructed tag;Number of tracks @ tag vertex", numBinsNTrk, minBinNTrk, maxBinNTrk);
145  m_hVrt_split_probe_ntrk = makeAndRegisterTH1F(al_primaryvertex_expert, "Vrt_split_probe_ntrk", "N. events with both tag and probe reconstructed;Number of tracks @ probe vertex", numBinsNTrk, minBinNTrk, maxBinNTrk);
146  // number of tag and probe split vertices reconstructed and matched to original non-BC vertex
147  // as a function of the number of tracks at the probe vertex
148  m_hVrt_split_matched_tag_ntrk = makeAndRegisterTH1F(al_primaryvertex_expert, "Vrt_split_matched_tag_ntrk", "N. events with reconstructed tag;Number of tracks @ tag vertex", numBinsNTrk, minBinNTrk, maxBinNTrk);
149  m_hVrt_split_matched_probe_ntrk = makeAndRegisterTH1F(al_primaryvertex_expert, "Vrt_split_matched_probe_ntrk", "N. events with both tag and probe reconstructed;Number of tracks @ probe vertex", numBinsNTrk, minBinNTrk, maxBinNTrk);
150  // distance between split vertices and non-BC vertex
151  m_hVrt_split_dist_tag = makeAndRegisterTH1F(al_primaryvertex_expert, "Vrt_split_dist_tag", "Entries / 0.05mm;Distance of Tag split vertex from reconstructed", 100, 0., 20.);
152  m_hVrt_split_dist_probe = makeAndRegisterTH1F(al_primaryvertex_expert, "Vrt_split_dist_probe", "Entries / 0.05mm;Distance of Probe split vertex from reconstructed", 100, 0., 20.);
153 
154  // dummy registration for histos produced in the post processing (the DQ systems needs it like this ...)
155  // resolution graphs
156  makeAndRegisterDummyTGraph(al_primaryvertex_shift, "resolution_X_Ntrk");
157  makeAndRegisterDummyTGraph(al_primaryvertex_expert, "scaleFactorX_Ntrk_RMS");
158  makeAndRegisterDummyTGraph(al_primaryvertex_shift, "scaleFactor_X_Ntrk_Fit");
159 
160  makeAndRegisterDummyTGraph(al_primaryvertex_shift, "resolution_X_SumPt2");
161  makeAndRegisterDummyTGraph(al_primaryvertex_expert, "scaleFactorX_SumPt2_RMS");
162  makeAndRegisterDummyTGraph(al_primaryvertex_shift, "scaleFactor_X_SumPt2_Fit");
163 
164  makeAndRegisterDummyTGraph(al_primaryvertex_shift, "resolution_Y_Ntrk");
165  makeAndRegisterDummyTGraph(al_primaryvertex_expert, "scaleFactorY_Ntrk_RMS");
166  makeAndRegisterDummyTGraph(al_primaryvertex_shift, "scaleFactor_Y_Ntrk_Fit");
167 
168  makeAndRegisterDummyTGraph(al_primaryvertex_shift, "resolution_Y_SumPt2");
169  makeAndRegisterDummyTGraph(al_primaryvertex_expert, "scaleFactorY_SumPt2_RMS");
170  makeAndRegisterDummyTGraph(al_primaryvertex_shift, "scaleFactor_Y_SumPt2_Fit");
171 
172  makeAndRegisterDummyTGraph(al_primaryvertex_shift, "resolution_Z_Ntrk");
173  makeAndRegisterDummyTGraph(al_primaryvertex_expert, "scaleFactorZ_Ntrk_RMS");
174  makeAndRegisterDummyTGraph(al_primaryvertex_shift, "scaleFactor_Z_Ntrk_Fit");
175 
176  makeAndRegisterDummyTGraph(al_primaryvertex_shift, "resolution_Z_SumPt2");
177  makeAndRegisterDummyTGraph(al_primaryvertex_expert, "scaleFactorZ_SumPt2_RMS");
178  makeAndRegisterDummyTGraph(al_primaryvertex_shift, "scaleFactor_Z_SumPt2_Fit");
179 
180  // efficiency graphs
181  makeAndRegisterDummyTGraph(al_primaryvertex_shift, "g_RecEff_M1");
182  makeAndRegisterDummyTGraph(al_primaryvertex_shift, "g_SelEff_M1");
183 
184  }
185  }
186 
187  return StatusCode::SUCCESS;
188 }
189 
190 
192 
193  // Basic primary vertex monitoring
195  if (!vxContainer.isPresent()) {
196  ATH_MSG_DEBUG ("StoreGate doesn't contain primary vertex container with key "+m_vxContainerName.key());
197  return StatusCode::SUCCESS;
198  }
199  if (!vxContainer.isValid()) {
200  ATH_MSG_DEBUG ("Could not retrieve primary vertex container with key "+m_vxContainerName.key());
201  return StatusCode::SUCCESS;
202  }
203 
204  m_hPvN->Fill(vxContainer->size()-1); // exclude dummy vertex
205  m_hPvN_LB->Fill( AthenaMonManager::lumiBlockNumber(), vxContainer->size()-1);
206 
208  {
209  m_hPvNaveMu->Fill( lbAverageInteractionsPerCrossing(), vxContainer->size()-1 );
210  }
211  int nPriVtx = 0;
212  int nPileupVtx = 0;
213  for (xAOD::VertexContainer::const_iterator vxIter = vxContainer->begin(); vxIter != vxContainer->end(); ++vxIter)
214  {
215  // Count different types of vertices
216  if ((*vxIter)->vertexType() == xAOD::VxType::PriVtx) nPriVtx++;
217  if ((*vxIter)->vertexType() == xAOD::VxType::PileUp) nPileupVtx++;
218 
219  // Select primary vertex
220  if ((*vxIter)->vertexType() != xAOD::VxType::PriVtx) continue;
221  if ((*vxIter)->numberDoF() <= 0) continue;
222 
223  // fill basic vertex histograms
224 // std::cout << (*vxIter)->recVertex().position().x() << std::endl;
225  m_hPvX->Fill((*vxIter)->position().x());
226  m_hPvY->Fill((*vxIter)->position().y());
227  m_hPvZ->Fill((*vxIter)->position().z());
228  m_hPvErrX->Fill( Amg::error( (*vxIter)->covariancePosition(), Trk::x) );
229  m_hPvErrY->Fill( Amg::error( (*vxIter)->covariancePosition(), Trk::y) );
230  m_hPvErrZ->Fill( Amg::error( (*vxIter)->covariancePosition(), Trk::z) );
231  m_hPvChiSqDoF->Fill( (*vxIter)->chiSquared() / (*vxIter)->numberDoF() );
232 
233 
234  const auto & trackparticles = (*vxIter)->trackParticleLinks();
235 
236  // fill some track related histos
237  m_hPvNTracks->Fill( trackparticles.size() );
238 
239  // Histograms on original tracks used for primary vertex
240  for (const auto& trackparticle : trackparticles )
241  {
242  const Trk::Perigee & measuredPerigee = (*trackparticle)->perigeeParameters();
243  m_hPvTrackEta->Fill( measuredPerigee.eta() );
244  m_hPvTrackPt->Fill(measuredPerigee.pT()/1000. ); // Histo is in GeV, not MeV
245  }
246  }
247  m_hPvNPriVtx->Fill(nPriVtx);
248  m_hPvNPileupVtx->Fill(nPileupVtx);
249 
251  {
252  // Check for primary vertex with out beam constraint
254  if (!vxContainerWithoutBeamConstraint.isPresent()) {
255  ATH_MSG_DEBUG ("No primary vertex (done without beam constraint) with key "+m_vxContainerNameWithoutBeamConstraint.key()+" in storegate.");
256  return StatusCode::SUCCESS;
257  }
258  if (!vxContainerWithoutBeamConstraint.isValid()) {
259  ATH_MSG_DEBUG ("Could not retrieve primary vertex (done without beam constraint) with key "+m_vxContainerNameWithoutBeamConstraint.key());
260  return StatusCode::SUCCESS;
261  }
262 
264  if (!vxContainerSplit.isPresent()) {
265  ATH_MSG_DEBUG ("No split primary vertex with key "+m_vxContainerNameSplit.key()+" in storegate.");
266  return StatusCode::SUCCESS;
267  }
268  if (!vxContainerSplit.isValid()) {
269  ATH_MSG_DEBUG ("Could not retrieve split primary vertex with key "+m_vxContainerNameSplit.key());
270  return StatusCode::SUCCESS;
271  }
272 
273  for (xAOD::VertexContainer::const_iterator vxIter = vxContainerWithoutBeamConstraint->begin(); vxIter != vxContainerWithoutBeamConstraint->end(); ++vxIter)
274  {
275 
276  // Select primary vertex
277  if ((*vxIter)->vertexType() == xAOD::VxType::NoVtx) continue;
278  if ((*vxIter)->numberDoF() <= 0) continue;
279 
280  // fill some track related histos
281 
282  // Histograms on original tracks used for primary vertex
283  if ((*vxIter)->vxTrackAtVertexAvailable())
284  {
285  std::vector<Trk::VxTrackAtVertex> vxTrackAtVertex = (*vxIter)->vxTrackAtVertex();
286 
287  float sumpt2 = 0.;
288  for (std::vector<Trk::VxTrackAtVertex>::iterator trkIter = vxTrackAtVertex.begin();
289  trkIter != vxTrackAtVertex.end() ; ++trkIter)
290  {
291  // pT at initial and perigeeAtVertex should be similar if not equal. measured perigee is stored in vertex (the other has to be retrieved from the linked Trk::Track(Particle))
292  const Trk::Perigee* measuredPerigee = dynamic_cast<const Trk::Perigee*>((*trkIter).perigeeAtVertex());
293  if (measuredPerigee == nullptr) measuredPerigee = dynamic_cast<const Trk::Perigee*>((*trkIter).initialPerigee());
294  if (measuredPerigee!=nullptr) sumpt2 += (measuredPerigee->pT()*measuredPerigee->pT())/1e6;
295  }
296 
297  // for do enhanced vertexing
298  m_hVrt_Xerr_vs_ntrk->Fill(vxTrackAtVertex.size(), Amg::error( (*vxIter)->covariancePosition(), Trk::x) );
299  m_hVrt_Yerr_vs_ntrk->Fill(vxTrackAtVertex.size(), Amg::error( (*vxIter)->covariancePosition(), Trk::y) );
300  m_hVrt_Zerr_vs_ntrk->Fill(vxTrackAtVertex.size(), Amg::error( (*vxIter)->covariancePosition(), Trk::z) );
301 
302  float sqrt_sumpt2(std::sqrt(sumpt2));
303  m_hVrt_Xerr_vs_pt2->Fill(sqrt_sumpt2, Amg::error( (*vxIter)->covariancePosition(), Trk::x) );
304  m_hVrt_Yerr_vs_pt2->Fill(sqrt_sumpt2, Amg::error( (*vxIter)->covariancePosition(), Trk::y) );
305  m_hVrt_Zerr_vs_pt2->Fill(sqrt_sumpt2, Amg::error( (*vxIter)->covariancePosition(), Trk::z) );
306  }
307  }
308 
309  if (vxContainerSplit->size() >= 3) // you need two split vertices and there is the dummy
310  {
311  const xAOD::Vertex* splitVxCandiate1 = vxContainerSplit->at(0);
312  const xAOD::Vertex* splitVxCandiate2 = vxContainerSplit->at(1);
313 
314  // consider the first two split vertices for K-factor and reconstruction efficiency calculation
315  if (splitVxCandiate1 != nullptr and splitVxCandiate2 != nullptr)
316  {
317  // calculate reconstruction efficiency
318  // we ask only one reconstructed vertex (no Beamspot-Constrained) and two split vertices
319  const xAOD::Vertex* origVertexNoBC = vxContainerWithoutBeamConstraint->at(0);
320  if ( vxContainerWithoutBeamConstraint->size() == 2 and // 1 vtx + 1 dummy
321  origVertexNoBC->vertexType() == xAOD::VxType::PriVtx and // good vertex
322 
323  vxContainerSplit->size() == 4 and // 2 split vertices, 2 dummy in this container
324  splitVxCandiate1->vertexType() == xAOD::VxType::PriVtx) // tag vertex needs to be reconstructed
325  {
326  // calculate number of tracks at probe vertex -- needs to be discussed
327  int nTrackAtOrigVertex = origVertexNoBC->vxTrackAtVertex().size();
328  int nTracksForEff = nTrackAtOrigVertex * (m_splitVertexTrkInvFraction - 1) / (m_splitVertexTrkInvFraction);
329 
330  // fill tag histogram (denominator of efficiency)
331  m_hVrt_split_tag_ntrk->Fill(nTracksForEff);
332  float distanceMatchTag = GetSplitMatchDistance(splitVxCandiate1, origVertexNoBC);
333  m_hVrt_split_dist_tag->Fill(distanceMatchTag);
334  if (distanceMatchTag <= m_distanceSplitVxMatch)
335  m_hVrt_split_matched_tag_ntrk->Fill(nTracksForEff);
336 
337  // check if probe vertex was reconstructed
338  if (splitVxCandiate2->vertexType() == xAOD::VxType::PriVtx) {
339  m_hVrt_split_probe_ntrk->Fill(nTracksForEff);
340  float distanceMatchProbe = GetSplitMatchDistance(splitVxCandiate2, origVertexNoBC);
341  m_hVrt_split_dist_probe->Fill(distanceMatchProbe);
342  if (distanceMatchProbe <= m_distanceSplitVxMatch && distanceMatchTag <= m_distanceSplitVxMatch)
343  m_hVrt_split_matched_probe_ntrk->Fill(nTracksForEff);
344  } // end: probe split vertex reconstructed
345 
346  } // end: tag split vertex reconstructed
347 
348  // calculate K-factors for resolution
349  if (splitVxCandiate1->vertexType() == xAOD::VxType::PriVtx and splitVxCandiate2->vertexType() == xAOD::VxType::PriVtx)
350  {
351  float x_distance = splitVxCandiate1->position().x()-splitVxCandiate2->position().x();
352  float y_distance = splitVxCandiate1->position().y()-splitVxCandiate2->position().y();
353  float z_distance = splitVxCandiate1->position().z()-splitVxCandiate2->position().z();
354 
355  float x_error = std::sqrt(std::pow( Amg::error( splitVxCandiate1->covariancePosition(), Trk::x ),2) +
356  std::pow( Amg::error( splitVxCandiate2->covariancePosition(), Trk::x ),2) );
357  float y_error = std::sqrt(std::pow( Amg::error( splitVxCandiate1->covariancePosition(), Trk::y ),2) +
358  std::pow( Amg::error( splitVxCandiate2->covariancePosition(), Trk::y ),2) );
359  float z_error = std::sqrt(std::pow( Amg::error( splitVxCandiate1->covariancePosition(), Trk::z ),2) +
360  std::pow( Amg::error( splitVxCandiate2->covariancePosition(), Trk::z ),2) );
361 
362  float x_split_pull = x_distance/x_error;
363  float y_split_pull = y_distance/y_error;
364  float z_split_pull = z_distance/z_error;
365 
366  const std::vector< Trk::VxTrackAtVertex >& splitVxTrackAtVertexVector1 = splitVxCandiate1->vxTrackAtVertex();
367  const std::vector< Trk::VxTrackAtVertex >& splitVxTrackAtVertexVector2 = splitVxCandiate2->vxTrackAtVertex();
368 
369  int ntrk_even = splitVxTrackAtVertexVector1.size();
370  int ntrk_odd = splitVxTrackAtVertexVector2.size();
371  int ntrk_av = (ntrk_odd + ntrk_even)/2;
372 
373  m_hVrt_XpullVsNtrkAverage_split->Fill(ntrk_av, x_split_pull);
374  m_hVrt_YpullVsNtrkAverage_split->Fill(ntrk_av, y_split_pull);
375  m_hVrt_ZpullVsNtrkAverage_split->Fill(ntrk_av, z_split_pull);
376 
377  //calculation of the average sum of pt2
378  float sum_pt2_1 = 0.;
379  float sum_pt2_2 = 0.;
380 
381  for (std::vector<Trk::VxTrackAtVertex>::const_iterator trkIter = splitVxTrackAtVertexVector1.begin();
382  trkIter != splitVxTrackAtVertexVector1.end() ; ++trkIter)
383  {
384  // pT at initial and perigeeAtVertex should be similar if not equal. measured perigee is stored in vertex (the other has to be retrieved from the linked Trk::Track(Particle))
385  const Trk::Perigee* measuredPerigee = dynamic_cast<const Trk::Perigee*>((*trkIter).perigeeAtVertex());
386  if (measuredPerigee == nullptr) measuredPerigee = dynamic_cast<const Trk::Perigee*>((*trkIter).initialPerigee());
387  if (measuredPerigee!=nullptr)
388  {
389  // std::cout << measuredPerigee->pT() << std::endl;
390  float pT = measuredPerigee->pT()/1000.;
391  sum_pt2_1 += std::pow(pT,2);
392  }
393  }
394  float sqrt_sum_pt2_1(std::sqrt(sum_pt2_1));
395 
396  for (std::vector<Trk::VxTrackAtVertex>::const_iterator trkIter = splitVxTrackAtVertexVector2.begin();
397  trkIter != splitVxTrackAtVertexVector2.end() ; ++trkIter)
398  {
399  // pT at initial and perigeeAtVertex should be similar if not equal. measured perigee is stored in vertex (the other has to be retrieved from the linked Trk::Track(Particle))
400  const Trk::Perigee* measuredPerigee = dynamic_cast<const Trk::Perigee*>((*trkIter).perigeeAtVertex());
401  if (measuredPerigee == nullptr) measuredPerigee = dynamic_cast<const Trk::Perigee*>((*trkIter).initialPerigee());
402  if (measuredPerigee!=nullptr)
403  {
404  float pT = measuredPerigee->pT()/1000.;
405  sum_pt2_2 += std::pow(pT,2);
406  }
407  }
408  float sqrt_sum_pt2_2(std::sqrt(sum_pt2_2));
409 
410  float sqrt_sum_pt2_average((sqrt_sum_pt2_1+sqrt_sum_pt2_2)/2.);
411  m_hVrt_XpullVsPt2Average_split->Fill(sqrt_sum_pt2_average, x_split_pull);
412  m_hVrt_YpullVsPt2Average_split->Fill(sqrt_sum_pt2_average, y_split_pull);
413  m_hVrt_ZpullVsPt2Average_split->Fill(sqrt_sum_pt2_average, z_split_pull);
414  } // end loop: two succesfully reconstructed split vertices
415  }
416  } // end loop: at least 2 split vertices
417  } // end if (m_doEnhancedMonitoring)
418 
419  return StatusCode::SUCCESS;
420 }
421 
423  const char* hName,
424  const std::string& hTitle,
425  int nBins,
426  float minX,
427  float maxX)
428 {
429  TH1F_LW* h = TH1F_LW::create(hName,hTitle.c_str(),nBins,minX,maxX);
430  //h->Sumw2();
431  if (mon.regHist(h).isFailure()) {
432  ATH_MSG_WARNING ("Unable to book histogram with name = "+std::string(hName));
433  }
434  return h;
435 }
436 
438  const char* hName, const std::string& hTitle,
439  int nBinsX, float minX, float maxX,
440  int nBinsY, float minY, float maxY) {
441  TH2F_LW* h = TH2F_LW::create(hName,hTitle.c_str(),nBinsX,minX,maxX,nBinsY,minY,maxY);
442  //h->Sumw2();
443  //h->SetOption("colz");
444  if (mon.regHist(h).isFailure()) {
445  ATH_MSG_WARNING ("Unable to book histogram with name = "+std::string(hName));
446  }
447  return h;
448 }
449 
451  const char* hName, const std::string& hTitle,
452  int nBinsX, double* xRange, // range MUST be double, otherwise no compile ...
453  int nBinsY, float minY, float maxY) {
454  TH2F_LW* h = TH2F_LW::create(hName,hTitle.c_str(),nBinsX,xRange,nBinsY,minY,maxY);
455  //h->Sumw2();
456  //h->SetOption("colz");
457  if (mon.regHist(h).isFailure()) {
458  ATH_MSG_WARNING ("Unable to book histogram with name = "+std::string(hName));
459  }
460  return h;
461 }
462 
464 {
465  TGraph* h = new TGraph();
466  h->SetName(hName);
467  if (mon.regGraph(h).isFailure()) {
468  ATH_MSG_WARNING ("Unable to book TGraph with name = " + std::string(hName));
469  }
470  }
471 
472 
474 {
475  // Get difference in position
476  double dx = splitVx->position().x() - originalVx->position().x();
477  double dy = splitVx->position().y() - originalVx->position().y();
478  double dz = splitVx->position().z() - originalVx->position().z();
479  // The error on the difference is partially correlated. Assume split vertex error as rough estimate.
480  float dxError = Amg::error( splitVx->covariancePosition(), Trk::x);
481  float dyError = Amg::error( splitVx->covariancePosition(), Trk::y);
482  float dzError = Amg::error( splitVx->covariancePosition(), Trk::z);
483 
484  switch (m_splitMatchingMetric) {
485  case 0:
486  // dummy metric: returns zero distance
487  return 0.0;
488  break;
489  case 1:
490  // simple delta-z metric
491  return TMath::Abs(dz);
492  break;
493  case 2:
494  {
495  // 3-D distance divided by the error (dominated by Delta z)
496  double d = std::sqrt(dx*dx+dy*dy+dz*dz);
497  double dErr = std::sqrt(std::pow(dx*dxError/d,2)+std::pow(dy*dyError/d,2)+std::pow(dz*dzError/d,2));
498  return d/dErr;
499  break;
500  }
501  case 3:
502  {
503  // quadratic sum of significance distances in the 3 directions. Expected RMS = 1
504  return std::sqrt(std::pow(dx/dxError,2)+std::pow(dy/dyError,2)+std::pow(dz/dzError,2));
505  break;
506  }
507  default:
508  break;
509  }
510 
511  // choice not valid. Return high number and print error
512  ATH_MSG_DEBUG("Invalid choice for the vertex selection efficiency metric.");
513  return 999.0;
514 
515 }
TH2F_LW::Fill
virtual void Fill(const double &x, const double &y) override
Definition: TH2F_LW.cxx:329
xAOD::iterator
JetConstituentVector::iterator iterator
Definition: JetConstituentVector.cxx:68
InDetGlobalPrimaryVertexMonTool::makeAndRegisterTH2F
TH2F_LW * makeAndRegisterTH2F(MonGroup &mon, const char *hName, const std::string &hTitle, int nBinsX, float minX, float maxX, int nBinsY, float minY, float maxY)
Definition: InDetGlobalPrimaryVertexMonTool.cxx:437
InDetGlobalPrimaryVertexMonTool::m_hPvNaveMu
TH2F_LW * m_hPvNaveMu
Definition: InDetGlobalPrimaryVertexMonTool.h:42
InDetGlobalPrimaryVertexMonTool::m_distanceSplitVxMatch
float m_distanceSplitVxMatch
store maximum distance for matching split vertices to original non-BC vertex
Definition: InDetGlobalPrimaryVertexMonTool.h:98
Trk::y
@ y
Definition: ParamDefs.h:62
InDetGlobalPrimaryVertexMonTool::m_hVrt_XpullVsPt2Average_split
TH2F_LW * m_hVrt_XpullVsPt2Average_split
Definition: InDetGlobalPrimaryVertexMonTool.h:61
CalculateHighPtTerm.pT
pT
Definition: ICHEP2016/CalculateHighPtTerm.py:57
InDetGlobalPrimaryVertexMonTool::m_hPvTrackPt
TH1F_LW * m_hPvTrackPt
Definition: InDetGlobalPrimaryVertexMonTool.h:53
TH1F_LW.h
InDetGlobalPrimaryVertexMonTool::m_vxContainerNameWithoutBeamConstraint
SG::ReadHandleKey< xAOD::VertexContainer > m_vxContainerNameWithoutBeamConstraint
Definition: InDetGlobalPrimaryVertexMonTool.h:95
InDetGlobalPrimaryVertexMonTool::initialize
virtual StatusCode initialize()
Definition: InDetGlobalPrimaryVertexMonTool.cxx:78
TH2F_LW.h
InDetGlobalPrimaryVertexMonTool::m_hVrt_YpullVsNtrkAverage_split
TH2F_LW * m_hVrt_YpullVsNtrkAverage_split
Definition: InDetGlobalPrimaryVertexMonTool.h:58
DataModel_detail::const_iterator
Const iterator class for DataVector/DataList.
Definition: DVLIterator.h:82
InDetGlobalPrimaryVertexMonTool::m_hVrt_Xerr_vs_pt2
TH2F_LW * m_hVrt_Xerr_vs_pt2
Definition: InDetGlobalPrimaryVertexMonTool.h:69
InDetGlobalPrimaryVertexMonTool::m_vxContainerName
SG::ReadHandleKey< xAOD::VertexContainer > m_vxContainerName
Definition: InDetGlobalPrimaryVertexMonTool.h:94
InDetGlobalPrimaryVertexMonTool::m_hPvY
TH1F_LW * m_hPvY
Definition: InDetGlobalPrimaryVertexMonTool.h:45
Trk::z
@ z
global position (cartesian)
Definition: ParamDefs.h:63
TH1F_LW::Fill
virtual void Fill(const double &x) override
Definition: TH1F_LW.cxx:246
InDetGlobalPrimaryVertexMonTool::m_hPvNTracks
TH1F_LW * m_hPvNTracks
Definition: InDetGlobalPrimaryVertexMonTool.h:52
InDetGlobalPrimaryVertexMonTool::m_hPvErrY
TH1F_LW * m_hPvErrY
Definition: InDetGlobalPrimaryVertexMonTool.h:48
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
InDetGlobalPrimaryVertexMonTool::m_splitMatchingMetric
int m_splitMatchingMetric
store metric to be used for split vertex matching in selection efficiency Values currently implemente...
Definition: InDetGlobalPrimaryVertexMonTool.h:106
AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
InDetGlobalPrimaryVertexMonTool::m_vxContainerNameSplit
SG::ReadHandleKey< xAOD::VertexContainer > m_vxContainerNameSplit
Definition: InDetGlobalPrimaryVertexMonTool.h:96
hist_file_dump.d
d
Definition: hist_file_dump.py:137
Trk::ParametersT
Dummy class used to allow special convertors to be called for surfaces owned by a detector element.
Definition: EMErrorDetail.h:25
EventPrimitivesHelpers.h
InDetGlobalPrimaryVertexMonTool::m_hPvZ
TH1F_LW * m_hPvZ
Definition: InDetGlobalPrimaryVertexMonTool.h:46
conifer::pow
constexpr int pow(int x)
Definition: conifer.h:20
InDetGlobalPrimaryVertexMonTool::m_hPvNPriVtx
TH1F_LW * m_hPvNPriVtx
Definition: InDetGlobalPrimaryVertexMonTool.h:37
InDetGlobalPrimaryVertexMonTool::m_hPvTrackEta
TH1F_LW * m_hPvTrackEta
Definition: InDetGlobalPrimaryVertexMonTool.h:54
InDetGlobalPrimaryVertexMonTool::m_hVrt_split_dist_probe
TH1F_LW * m_hVrt_split_dist_probe
Distance between probe-split and original non-BC vertex (used for selection efficiency)
Definition: InDetGlobalPrimaryVertexMonTool.h:79
InDetGlobalPrimaryVertexMonTool::m_hVrt_XpullVsNtrkAverage_split
TH2F_LW * m_hVrt_XpullVsNtrkAverage_split
Definition: InDetGlobalPrimaryVertexMonTool.h:57
InDetGlobalPrimaryVertexMonTool::m_hPvErrZ
TH1F_LW * m_hPvErrZ
Definition: InDetGlobalPrimaryVertexMonTool.h:49
TProfile_LW.h
xAOD::Vertex_v1::position
const Amg::Vector3D & position() const
Returns the 3-pos.
InDetGlobalPrimaryVertexMonTool::m_hPvN_LB
TProfile_LW * m_hPvN_LB
Definition: InDetGlobalPrimaryVertexMonTool.h:40
InDetGlobalPrimaryVertexMonTool::m_hVrt_ZpullVsPt2Average_split
TH2F_LW * m_hVrt_ZpullVsPt2Average_split
Definition: InDetGlobalPrimaryVertexMonTool.h:63
ParamDefs.h
xAOD::Vertex_v1::vertexType
VxType::VertexType vertexType() const
The type of the vertex.
xAOD::VxType::NoVtx
@ NoVtx
Dummy vertex. TrackParticle was not used in vertex fit.
Definition: TrackingPrimitives.h:570
InDetGlobalPrimaryVertexMonTool::m_hPvX
TH1F_LW * m_hPvX
Definition: InDetGlobalPrimaryVertexMonTool.h:44
AthenaPoolTestRead.sc
sc
Definition: AthenaPoolTestRead.py:27
AthenaMonManager::environment
static Environment_t environment()
Returns the running environment of the monitoring application to help ManagedMonitorToolBase objects ...
Definition: AthenaMonManager.cxx:321
InDetGlobalPrimaryVertexMonTool::m_hVrt_Zerr_vs_pt2
TH2F_LW * m_hVrt_Zerr_vs_pt2
Definition: InDetGlobalPrimaryVertexMonTool.h:71
ManagedMonitorToolBase::MonGroup
A container of information describing a monitoring object.
Definition: ManagedMonitorToolBase.h:138
TH1F_LW
Definition: TH1F_LW.h:23
ManagedMonitorToolBase::initialize
virtual StatusCode initialize()
Definition: ManagedMonitorToolBase.cxx:669
TProfile_LW::create
static TProfile_LW * create(const char *name, const char *title, unsigned nbinsx, const double &xlow, const double &xup, const char *option=" ")
Definition: TProfile_LW.cxx:32
InDetGlobalPrimaryVertexMonTool::m_hVrt_split_probe_ntrk
TH1F_LW * m_hVrt_split_probe_ntrk
Number of probe and tag split vertices as fx of the number of tracks at probe (numerator)
Definition: InDetGlobalPrimaryVertexMonTool.h:75
InDetGlobalPrimaryVertexMonTool::m_hPvNPileupVtx
TH1F_LW * m_hPvNPileupVtx
Definition: InDetGlobalPrimaryVertexMonTool.h:38
InDetGlobalPrimaryVertexMonTool::GetSplitMatchDistance
double GetSplitMatchDistance(const xAOD::Vertex *splitVx, const xAOD::Vertex *originalVx)
Returns matching distance between split and original vertex.
Definition: InDetGlobalPrimaryVertexMonTool.cxx:473
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
extractSporadic.h
list h
Definition: extractSporadic.py:97
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
AthenaMonManager::online
@ online
Definition: AthenaMonManager.h:49
InDetGlobalPrimaryVertexMonTool::fillHistograms
virtual StatusCode fillHistograms()
An inheriting class should either override this function or fillHists().
Definition: InDetGlobalPrimaryVertexMonTool.cxx:191
InDetGlobalPrimaryVertexMonTool::m_hVrt_split_matched_probe_ntrk
TH1F_LW * m_hVrt_split_matched_probe_ntrk
Number of probe and tag split vertices matched with original vertex as fx of the number of tracks at ...
Definition: InDetGlobalPrimaryVertexMonTool.h:77
xAOD::VxType::PriVtx
@ PriVtx
Primary vertex.
Definition: TrackingPrimitives.h:571
ManagedMonitorToolBase::ATTRIB_UNMANAGED
@ ATTRIB_UNMANAGED
Definition: ManagedMonitorToolBase.h:131
InDetGlobalPrimaryVertexMonTool::makeAndRegisterDummyTGraph
void makeAndRegisterDummyTGraph(MonGroup &mon, const char *hName)
Definition: InDetGlobalPrimaryVertexMonTool.cxx:463
test_pyathena.parent
parent
Definition: test_pyathena.py:15
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
InDetGlobalPrimaryVertexMonTool::makeAndRegisterTH2FVariableXBins
TH2F_LW * makeAndRegisterTH2FVariableXBins(MonGroup &mon, const char *hName, const std::string &hTitle, int nBinsX, double *xRange, int nBinsY, float minY, float maxY)
Definition: InDetGlobalPrimaryVertexMonTool.cxx:450
run
Definition: run.py:1
InDetGlobalPrimaryVertexMonTool::InDetGlobalPrimaryVertexMonTool
InDetGlobalPrimaryVertexMonTool(const std::string &type, const std::string &name, const IInterface *parent)
Definition: InDetGlobalPrimaryVertexMonTool.cxx:23
InDetGlobalPrimaryVertexMonTool::m_hVrt_ZpullVsNtrkAverage_split
TH2F_LW * m_hVrt_ZpullVsNtrkAverage_split
Definition: InDetGlobalPrimaryVertexMonTool.h:59
SG::ReadHandle::isValid
virtual bool isValid() override final
Can the handle be successfully dereferenced?
InDetGlobalPrimaryVertexMonTool::m_hVrt_Xerr_vs_ntrk
TH2F_LW * m_hVrt_Xerr_vs_ntrk
Definition: InDetGlobalPrimaryVertexMonTool.h:65
TProfile_LW::Fill
void Fill(const double &x, const double &y)
Definition: TProfile_LW.cxx:223
ManagedMonitorToolBase::MonGroup::regHist
StatusCode regHist(TH1 *h)
Registers a TH1 (including TH2, TH3, and TProfile) to be included in the output stream using logical ...
Definition: ManagedMonitorToolBase.cxx:195
InDetGlobalPrimaryVertexMonTool::bookHistogramsRecurrent
virtual StatusCode bookHistogramsRecurrent()
An inheriting class should either override this function, bookHists() or bookHistograms().
Definition: InDetGlobalPrimaryVertexMonTool.cxx:90
InDetGlobalPrimaryVertexMonTool::m_histFolder
std::string m_histFolder
Definition: InDetGlobalPrimaryVertexMonTool.h:93
dumpTgcDigiJitter.nBins
list nBins
Definition: dumpTgcDigiJitter.py:29
xAOD::VxType::PileUp
@ PileUp
Pile-up vertex.
Definition: TrackingPrimitives.h:573
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
Amg::error
double error(const Amg::MatrixX &mat, int index)
return diagonal error of the matrix caller should ensure the matrix is symmetric and the index is in ...
Definition: EventPrimitivesHelpers.h:40
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
InDetGlobalPrimaryVertexMonTool::m_hVrt_split_tag_ntrk
TH1F_LW * m_hVrt_split_tag_ntrk
Number of tag split vertices as fx of the number of tracks at probe (denominator)
Definition: InDetGlobalPrimaryVertexMonTool.h:74
InDetGlobalPrimaryVertexMonTool::m_doEnhancedMonitoring
bool m_doEnhancedMonitoring
Definition: InDetGlobalPrimaryVertexMonTool.h:107
InDetGlobalPrimaryVertexMonTool::m_hVrt_Yerr_vs_ntrk
TH2F_LW * m_hVrt_Yerr_vs_ntrk
Definition: InDetGlobalPrimaryVertexMonTool.h:66
InDetGlobalPrimaryVertexMonTool::m_hVrt_YpullVsPt2Average_split
TH2F_LW * m_hVrt_YpullVsPt2Average_split
Definition: InDetGlobalPrimaryVertexMonTool.h:62
InDetGlobalPrimaryVertexMonTool::m_hPvErrX
TH1F_LW * m_hPvErrX
Definition: InDetGlobalPrimaryVertexMonTool.h:47
InDetGlobalPrimaryVertexMonTool::m_hVrt_Zerr_vs_ntrk
TH2F_LW * m_hVrt_Zerr_vs_ntrk
Definition: InDetGlobalPrimaryVertexMonTool.h:67
DataVector::end
const_iterator end() const noexcept
Return a const_iterator pointing past the end of the collection.
makeTRTBarrelCans.dy
tuple dy
Definition: makeTRTBarrelCans.py:21
InDetGlobalPrimaryVertexMonTool::m_hVrt_split_matched_tag_ntrk
TH1F_LW * m_hVrt_split_matched_tag_ntrk
Number of tag split vertices matched with original vertex as fx of the number of tracks at probe (den...
Definition: InDetGlobalPrimaryVertexMonTool.h:76
h
xAOD::Vertex_v1
Class describing a Vertex.
Definition: Vertex_v1.h:42
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
InDetGlobalPrimaryVertexMonTool::~InDetGlobalPrimaryVertexMonTool
virtual ~InDetGlobalPrimaryVertexMonTool()
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
plotBeamSpotMon.mon
mon
Definition: plotBeamSpotMon.py:67
AthMessaging.h
makeTRTBarrelCans.dx
tuple dx
Definition: makeTRTBarrelCans.py:20
InDetGlobalPrimaryVertexMonTool::m_hPvN
TH1F_LW * m_hPvN
Definition: InDetGlobalPrimaryVertexMonTool.h:36
SG::VarHandleBase::isPresent
bool isPresent() const
Is the referenced object present in SG?
Definition: StoreGate/src/VarHandleBase.cxx:397
TH2F_LW
Definition: TH2F_LW.h:23
AthenaMonManager::lumiBlockNumber
static unsigned int lumiBlockNumber()
Definition: AthenaMonManager.cxx:352
DataVector::at
const T * at(size_type n) const
Access an element, as an rvalue.
xAOD::Vertex_v1::vxTrackAtVertex
std::vector< Trk::VxTrackAtVertex > & vxTrackAtVertex()
Non-const access to the VxTrackAtVertex vector.
Definition: Vertex_v1.cxx:181
ReadHandle.h
Handle class for reading from StoreGate.
InDetGlobalPrimaryVertexMonTool.h
Trk::x
@ x
Definition: ParamDefs.h:61
InDetGlobalPrimaryVertexMonTool::m_splitVertexTrkInvFraction
int m_splitVertexTrkInvFraction
store inverse of the fraction of input tracks used for probe vertex (1:N)
Definition: InDetGlobalPrimaryVertexMonTool.h:97
InDetGlobalPrimaryVertexMonTool::m_hVrt_Yerr_vs_pt2
TH2F_LW * m_hVrt_Yerr_vs_pt2
Definition: InDetGlobalPrimaryVertexMonTool.h:70
InDetGlobalPrimaryVertexMonTool::m_hVrt_split_dist_tag
TH1F_LW * m_hVrt_split_dist_tag
Distance between tag-split and original non-BC vertex (used for selection efficiency)
Definition: InDetGlobalPrimaryVertexMonTool.h:78
InDetGlobalPrimaryVertexMonTool::m_hPvChiSqDoF
TH1F_LW * m_hPvChiSqDoF
Definition: InDetGlobalPrimaryVertexMonTool.h:50
DataVector::size
size_type size() const noexcept
Returns the number of elements in the collection.
TrackParticleContainer.h
DataVector::begin
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.
ManagedMonitorToolBase::newRunFlag
bool newRunFlag() const
Definition: ManagedMonitorToolBase.h:854
InDetGlobalPrimaryVertexMonTool::makeAndRegisterTH1F
TH1F_LW * makeAndRegisterTH1F(MonGroup &mon, const char *name, const std::string &title, int nBins, float minX, float maxX)
Definition: InDetGlobalPrimaryVertexMonTool.cxx:422
ManagedMonitorToolBase::lbAverageInteractionsPerCrossing
virtual float lbAverageInteractionsPerCrossing(const EventContext &ctx=Gaudi::Hive::currentContext()) const
Average mu, i.e.
Definition: ManagedMonitorToolBase.cxx:1924