CMS 3D CMS Logo

PrimaryVertexMonitor.cc
Go to the documentation of this file.
5 
7 
9 
10 #include "TMath.h"
11 
12 #include <fmt/format.h>
13 
14 using namespace reco;
15 using namespace edm;
16 
18  : conf_(pSet),
19  TopFolderName_(pSet.getParameter<std::string>("TopFolderName")),
20  AlignmentLabel_(pSet.getParameter<std::string>("AlignmentLabel")),
21  ndof_(pSet.getParameter<int>("ndof")),
22  useHPfoAlignmentPlots_(pSet.getParameter<bool>("useHPforAlignmentPlots")),
23  errorPrinted_(false),
24  nbvtx(nullptr),
25  bsX(nullptr),
26  bsY(nullptr),
27  bsZ(nullptr),
28  bsSigmaZ(nullptr),
29  bsDxdz(nullptr),
30  bsDydz(nullptr),
31  bsBeamWidthX(nullptr),
32  bsBeamWidthY(nullptr),
33  bsType(nullptr),
34  sumpt(nullptr),
35  ntracks(nullptr),
36  weight(nullptr),
37  chi2ndf(nullptr),
38  chi2prob(nullptr),
39  phi_pt1(nullptr),
40  eta_pt1(nullptr),
41  phi_pt10(nullptr),
42  eta_pt10(nullptr),
43  dxy2(nullptr) {
44  vertexInputTag_ = pSet.getParameter<InputTag>("vertexLabel");
45  beamSpotInputTag_ = pSet.getParameter<InputTag>("beamSpotLabel");
46  vertexToken_ = consumes<reco::VertexCollection>(vertexInputTag_);
47  scoreToken_ = consumes<VertexScore>(vertexInputTag_);
48  beamspotToken_ = consumes<reco::BeamSpot>(beamSpotInputTag_);
49 }
50 
51 // -- BeginRun
52 //---------------------------------------------------------------------------------//
54  std::string dqmLabel = "";
55 
56  //
57  // Book all histograms.
58  //
59 
60  // get the store
62  iBooker.setCurrentFolder(dqmLabel);
63 
64  // xPos = iBooker.book1D ("xPos","x Coordinate" ,100, -0.1, 0.1);
65 
66  nbvtx = iBooker.book1D("vtxNbr", "Reconstructed Vertices in Event", 80, -0.5, 79.5);
67  nbgvtx = iBooker.book1D("goodvtxNbr", "Reconstructed Good Vertices in Event", 80, -0.5, 79.5);
68 
69  // to be configured each year...
70  auto vposx = conf_.getParameter<double>("Xpos");
71  auto vposy = conf_.getParameter<double>("Ypos");
72 
73  nbtksinvtx[0] = iBooker.book1D("otherVtxTrksNbr", "Reconstructed Tracks in Vertex (other Vtx)", 40, -0.5, 99.5);
74  ntracksVsZ[0] = iBooker.bookProfile(
75  "otherVtxTrksVsZ", "Reconstructed Tracks in Vertex (other Vtx) vs Z", 80, -20., 20., 50, 0, 100, "");
76  ntracksVsZ[0]->setAxisTitle("z-bs", 1);
77  ntracksVsZ[0]->setAxisTitle("#tracks", 2);
78 
79  score[0] = iBooker.book1D("otherVtxScore", "sqrt(score) (other Vtx)", 100, 0., 400.);
80  trksWeight[0] = iBooker.book1D("otherVtxTrksWeight", "Total weight of Tracks in Vertex (other Vtx)", 40, 0, 100.);
81  vtxchi2[0] = iBooker.book1D("otherVtxChi2", "#chi^{2} (other Vtx)", 100, 0., 200.);
82  vtxndf[0] = iBooker.book1D("otherVtxNdf", "ndof (other Vtx)", 100, 0., 200.);
83  vtxprob[0] = iBooker.book1D("otherVtxProb", "#chi^{2} probability (other Vtx)", 100, 0., 1.);
84  nans[0] = iBooker.book1D("otherVtxNans", "Illegal values for x,y,z,xx,xy,xz,yy,yz,zz (other Vtx)", 9, 0.5, 9.5);
85 
86  nbtksinvtx[1] = iBooker.book1D("tagVtxTrksNbr", "Reconstructed Tracks in Vertex (tagged Vtx)", 100, -0.5, 99.5);
87  ntracksVsZ[1] = iBooker.bookProfile(
88  "tagVtxTrksVsZ", "Reconstructed Tracks in Vertex (tagged Vtx) vs Z", 80, -20., 20., 50, 0, 100, "");
89  ntracksVsZ[1]->setAxisTitle("z-bs", 1);
90  ntracksVsZ[1]->setAxisTitle("#tracks", 2);
91 
92  score[1] = iBooker.book1D("tagVtxScore", "sqrt(score) (tagged Vtx)", 100, 0., 400.);
93  trksWeight[1] = iBooker.book1D("tagVtxTrksWeight", "Total weight of Tracks in Vertex (tagged Vtx)", 100, 0, 100.);
94  vtxchi2[1] = iBooker.book1D("tagVtxChi2", "#chi^{2} (tagged Vtx)", 100, 0., 200.);
95  vtxndf[1] = iBooker.book1D("tagVtxNdf", "ndof (tagged Vtx)", 100, 0., 200.);
96  vtxprob[1] = iBooker.book1D("tagVtxProb", "#chi^{2} probability (tagged Vtx)", 100, 0., 1.);
97  nans[1] = iBooker.book1D("tagVtxNans", "Illegal values for x,y,z,xx,xy,xz,yy,yz,zz (tagged Vtx)", 9, 0.5, 9.5);
98 
99  xrec[0] = iBooker.book1D("otherPosX", "Position x Coordinate (other Vtx)", 100, vposx - 0.1, vposx + 0.1);
100  yrec[0] = iBooker.book1D("otherPosY", "Position y Coordinate (other Vtx)", 100, vposy - 0.1, vposy + 0.1);
101  zrec[0] = iBooker.book1D("otherPosZ", "Position z Coordinate (other Vtx)", 100, -20., 20.);
102  xDiff[0] = iBooker.book1D("otherDiffX", "X distance from BeamSpot (other Vtx)", 100, -500, 500);
103  yDiff[0] = iBooker.book1D("otherDiffY", "Y distance from BeamSpot (other Vtx)", 100, -500, 500);
104  xerr[0] = iBooker.book1D("otherErrX", "Uncertainty x Coordinate (other Vtx)", 100, 0., 100);
105  yerr[0] = iBooker.book1D("otherErrY", "Uncertainty y Coordinate (other Vtx)", 100, 0., 100);
106  zerr[0] = iBooker.book1D("otherErrZ", "Uncertainty z Coordinate (other Vtx)", 100, 0., 100);
107  xerrVsTrks[0] = iBooker.book2D(
108  "otherErrVsWeightX", "Uncertainty x Coordinate vs. track weight (other Vtx)", 100, 0, 100., 100, 0., 100);
109  yerrVsTrks[0] = iBooker.book2D(
110  "otherErrVsWeightY", "Uncertainty y Coordinate vs. track weight (other Vtx)", 100, 0, 100., 100, 0., 100);
111  zerrVsTrks[0] = iBooker.book2D(
112  "otherErrVsWeightZ", "Uncertainty z Coordinate vs. track weight (other Vtx)", 100, 0, 100., 100, 0., 100);
113 
114  xrec[1] = iBooker.book1D("tagPosX", "Position x Coordinate (tagged Vtx)", 100, vposx - 0.1, vposx + 0.1);
115  yrec[1] = iBooker.book1D("tagPosY", "Position y Coordinate (tagged Vtx)", 100, vposy - 0.1, vposy + 0.1);
116  zrec[1] = iBooker.book1D("tagPosZ", "Position z Coordinate (tagged Vtx)", 100, -20., 20.);
117  xDiff[1] = iBooker.book1D("tagDiffX", "X distance from BeamSpot (tagged Vtx)", 100, -500, 500);
118  yDiff[1] = iBooker.book1D("tagDiffY", "Y distance from BeamSpot (tagged Vtx)", 100, -500, 500);
119  xerr[1] = iBooker.book1D("tagErrX", "Uncertainty x Coordinate (tagged Vtx)", 100, 0., 100);
120  yerr[1] = iBooker.book1D("tagErrY", "Uncertainty y Coordinate (tagged Vtx)", 100, 0., 100);
121  zerr[1] = iBooker.book1D("tagErrZ", "Uncertainty z Coordinate (tagged Vtx)", 100, 0., 100);
122  xerrVsTrks[1] = iBooker.book2D(
123  "tagErrVsWeightX", "Uncertainty x Coordinate vs. track weight (tagged Vtx)", 100, 0, 100., 100, 0., 100);
124  yerrVsTrks[1] = iBooker.book2D(
125  "tagErrVsWeightY", "Uncertainty y Coordinate vs. track weight (tagged Vtx)", 100, 0, 100., 100, 0., 100);
126  zerrVsTrks[1] = iBooker.book2D(
127  "tagErrVsWeightZ", "Uncertainty z Coordinate vs. track weight (tagged Vtx)", 100, 0, 100., 100, 0., 100);
128 
129  type[0] = iBooker.book1D("otherType", "Vertex type (other Vtx)", 3, -0.5, 2.5);
130  type[1] = iBooker.book1D("tagType", "Vertex type (tagged Vtx)", 3, -0.5, 2.5);
131  for (int i = 0; i < 2; ++i) {
132  type[i]->setBinLabel(1, "Valid, real");
133  type[i]->setBinLabel(2, "Valid, fake");
134  type[i]->setBinLabel(3, "Invalid");
135  }
136 
137  // get the store
139  iBooker.setCurrentFolder(dqmLabel);
140 
141  bsX = iBooker.book1D("bsX", "BeamSpot x0", 100, vposx - 0.1, vposx + 0.1);
142  bsY = iBooker.book1D("bsY", "BeamSpot y0", 100, vposy - 0.1, vposy + 0.1);
143  bsZ = iBooker.book1D("bsZ", "BeamSpot z0", 100, -2., 2.);
144  bsSigmaZ = iBooker.book1D("bsSigmaZ", "BeamSpot sigmaZ", 100, 0., 10.);
145  bsDxdz = iBooker.book1D("bsDxdz", "BeamSpot dxdz", 100, -0.0003, 0.0003);
146  bsDydz = iBooker.book1D("bsDydz", "BeamSpot dydz", 100, -0.0003, 0.0003);
147  bsBeamWidthX = iBooker.book1D("bsBeamWidthX", "BeamSpot BeamWidthX", 100, 0., 100.);
148  bsBeamWidthY = iBooker.book1D("bsBeamWidthY", "BeamSpot BeamWidthY", 100, 0., 100.);
149  bsType = iBooker.book1D("bsType", "BeamSpot type", 4, -1.5, 2.5);
150  bsType->setBinLabel(1, "Unknown");
151  bsType->setBinLabel(2, "Fake");
152  bsType->setBinLabel(3, "LHC");
153  bsType->setBinLabel(4, "Tracker");
154 
155  // get the store
157  iBooker.setCurrentFolder(dqmLabel);
158 
159  int TKNoBin = conf_.getParameter<int>("TkSizeBin");
160  double TKNoMin = conf_.getParameter<double>("TkSizeMin");
161  double TKNoMax = conf_.getParameter<double>("TkSizeMax");
162 
163  int DxyBin = conf_.getParameter<int>("DxyBin");
164  double DxyMin = conf_.getParameter<double>("DxyMin");
165  double DxyMax = conf_.getParameter<double>("DxyMax");
166 
167  int PhiBin = conf_.getParameter<int>("PhiBin");
168  double PhiMin = conf_.getParameter<double>("PhiMin");
169  double PhiMax = conf_.getParameter<double>("PhiMax");
170 
171  int EtaBin = conf_.getParameter<int>("EtaBin");
172  double EtaMin = conf_.getParameter<double>("EtaMin");
173  double EtaMax = conf_.getParameter<double>("EtaMax");
174 
175  ntracks = iBooker.book1D("ntracks", "number of PV tracks (p_{T} > 1 GeV)", TKNoBin, TKNoMin, TKNoMax);
176  ntracks->setAxisTitle("Number of PV Tracks (p_{T} > 1 GeV) per Event", 1);
177  ntracks->setAxisTitle("Number of Event", 2);
178 
179  weight = iBooker.book1D("weight", "weight of PV tracks (p_{T} > 1 GeV)", 100, 0., 1.);
180  weight->setAxisTitle("weight of PV Tracks (p_{T} > 1 GeV) per Event", 1);
181  weight->setAxisTitle("Number of Event", 2);
182 
183  sumpt = iBooker.book1D("sumpt", "#Sum p_{T} of PV tracks (p_{T} > 1 GeV)", 100, -0.5, 249.5);
184  chi2ndf = iBooker.book1D("chi2ndf", "PV tracks (p_{T} > 1 GeV) #chi^{2}/ndof", 100, 0., 20.);
185  chi2prob = iBooker.book1D("chi2prob", "PV tracks (p_{T} > 1 GeV) #chi^{2} probability", 100, 0., 1.);
186 
187  dxy2 = iBooker.book1D("dxyzoom", "PV tracks (p_{T} > 1 GeV) d_{xy} (#mum)", DxyBin, DxyMin / 5., DxyMax / 5.);
188 
189  phi_pt1 = iBooker.book1D("phi_pt1", "PV tracks (p_{T} > 1 GeV) #phi; PV tracks #phi;#tracks", PhiBin, PhiMin, PhiMax);
190  eta_pt1 = iBooker.book1D("eta_pt1", "PV tracks (p_{T} > 1 GeV) #eta; PV tracks #eta;#tracks", EtaBin, EtaMin, EtaMax);
191  phi_pt10 =
192  iBooker.book1D("phi_pt10", "PV tracks (p_{T} > 10 GeV) #phi; PV tracks #phi;#tracks", PhiBin, PhiMin, PhiMax);
193  eta_pt10 =
194  iBooker.book1D("eta_pt10", "PV tracks (p_{T} > 10 GeV) #phi; PV tracks #eta;#tracks", EtaBin, EtaMin, EtaMax);
195 
196  // initialize and book the monitors;
197  dxy_pt1.varname_ = "xy";
198  dxy_pt1.pTcut_ = 1.f;
199  dxy_pt1.bookIPMonitor(iBooker, conf_);
200 
201  dxy_pt10.varname_ = "xy";
202  dxy_pt10.pTcut_ = 10.f;
203  dxy_pt10.bookIPMonitor(iBooker, conf_);
204 
205  dz_pt1.varname_ = "z";
206  dz_pt1.pTcut_ = 1.f;
207  dz_pt1.bookIPMonitor(iBooker, conf_);
208 
209  dz_pt10.varname_ = "z";
210  dz_pt10.pTcut_ = 10.f;
211  dz_pt10.bookIPMonitor(iBooker, conf_);
212 }
213 
215  int VarBin = config.getParameter<int>(fmt::format("D{}Bin", varname_));
216  double VarMin = config.getParameter<double>(fmt::format("D{}Min", varname_));
217  double VarMax = config.getParameter<double>(fmt::format("D{}Max", varname_));
218 
219  int PhiBin = config.getParameter<int>("PhiBin");
220  int PhiBin2D = config.getParameter<int>("PhiBin2D");
221  double PhiMin = config.getParameter<double>("PhiMin");
222  double PhiMax = config.getParameter<double>("PhiMax");
223 
224  int EtaBin = config.getParameter<int>("EtaBin");
225  int EtaBin2D = config.getParameter<int>("EtaBin2D");
226  double EtaMin = config.getParameter<double>("EtaMin");
227  double EtaMax = config.getParameter<double>("EtaMax");
228 
229  IP_ = iBooker.book1D(fmt::format("d{}_pt{}", varname_, pTcut_),
230  fmt::format("PV tracks (p_{{T}} > {} GeV) d_{{{}}} (#mum)", pTcut_, varname_),
231  VarBin,
232  VarMin,
233  VarMax);
234 
235  IPErr_ = iBooker.book1D(fmt::format("d{}Err_pt{}", varname_, pTcut_),
236  fmt::format("PV tracks (p_{{T}} > {} GeV) d_{{{}}} error (#mum)", pTcut_, varname_),
237  100,
238  0.,
239  (varname_.find("xy") != std::string::npos) ? 2000. : 10000.);
240 
241  IPVsPhi_ = iBooker.bookProfile(fmt::format("d{}VsPhi_pt{}", varname_, pTcut_),
242  fmt::format("PV tracks (p_{{T}} > {}) d_{{{}}} VS track #phi", pTcut_, varname_),
243  PhiBin,
244  PhiMin,
245  PhiMax,
246  VarBin,
247  VarMin,
248  VarMax,
249  "");
250  IPVsPhi_->setAxisTitle("PV track (p_{T} > 1 GeV) #phi", 1);
251  IPVsPhi_->setAxisTitle(fmt::format("PV tracks (p_{{T}} > {} GeV) d_{{{}}} (#mum)", pTcut_, varname_), 2);
252 
253  IPVsEta_ = iBooker.bookProfile(fmt::format("d{}VsEta_pt{}", varname_, pTcut_),
254  fmt::format("PV tracks (p_{{T}} > {}) d_{{{}}} VS track #eta", pTcut_, varname_),
255  EtaBin,
256  EtaMin,
257  EtaMax,
258  VarBin,
259  VarMin,
260  VarMax,
261  "");
262  IPVsEta_->setAxisTitle("PV track (p_{T} > 1 GeV) #eta", 1);
263  IPVsEta_->setAxisTitle(fmt::format("PV tracks (p_{{T}} > {} GeV) d_{{{}}} (#mum)", pTcut_, varname_), 2);
264 
265  IPErrVsPhi_ =
266  iBooker.bookProfile(fmt::format("d{}ErrVsPhi_pt{}", varname_, pTcut_),
267  fmt::format("PV tracks (p_{{T}} > {}) d_{{{}}} error VS track #phi", pTcut_, varname_),
268  PhiBin,
269  PhiMin,
270  PhiMax,
271  VarBin,
272  0.,
273  (varname_.find("xy") != std::string::npos) ? 100. : 200.,
274  "");
275  IPErrVsPhi_->setAxisTitle("PV track (p_{T} > 1 GeV) #phi", 1);
276  IPErrVsPhi_->setAxisTitle(fmt::format("PV tracks (p_{{T}} > {} GeV) d_{{{}}} error (#mum)", pTcut_, varname_), 2);
277 
278  IPErrVsEta_ =
279  iBooker.bookProfile(fmt::format("d{}ErrVsEta_pt{}", varname_, pTcut_),
280  fmt::format("PV tracks (p_{{T}} > {}) d_{{{}}} error VS track #eta", pTcut_, varname_),
281  EtaBin,
282  EtaMin,
283  EtaMax,
284  VarBin,
285  0.,
286  (varname_.find("xy") != std::string::npos) ? 100. : 200.,
287  "");
288  IPErrVsEta_->setAxisTitle("PV track (p_{T} > 1 GeV) #eta", 1);
289  IPErrVsEta_->setAxisTitle(fmt::format("PV tracks (p_{{T}} > {} GeV) d_{{{}}} error (#mum)", pTcut_, varname_), 2);
290 
291  IPVsEtaVsPhi_ = iBooker.bookProfile2D(
292  fmt::format("d{}VsEtaVsPhi_pt{}", varname_, pTcut_),
293  fmt::format("PV tracks (p_{{T}} > {}) d_{{{}}} VS track #eta VS track #phi", pTcut_, varname_),
294  EtaBin2D,
295  EtaMin,
296  EtaMax,
297  PhiBin2D,
298  PhiMin,
299  PhiMax,
300  VarBin,
301  VarMin,
302  VarMax,
303  "");
304  IPVsEtaVsPhi_->setAxisTitle("PV track (p_{T} > 1 GeV) #eta", 1);
305  IPVsEtaVsPhi_->setAxisTitle("PV track (p_{T} > 1 GeV) #phi", 2);
306  IPVsEtaVsPhi_->setAxisTitle(fmt::format("PV tracks (p_{{T}} > {} GeV) d_{{{}}} (#mum)", pTcut_, varname_), 3);
307 
309  fmt::format("d{}ErrVsEtaVsPhi_pt{}", varname_, pTcut_),
310  fmt::format("PV tracks (p_{{T}} > {}) d_{{{}}} error VS track #eta VS track #phi", pTcut_, varname_),
311  EtaBin2D,
312  EtaMin,
313  EtaMax,
314  PhiBin2D,
315  PhiMin,
316  PhiMax,
317  VarBin,
318  0.,
319  (varname_.find("xy") != std::string::npos) ? 100. : 200.,
320  "");
321  IPErrVsEtaVsPhi_->setAxisTitle("PV track (p_{T} > 1 GeV) #eta", 1);
322  IPErrVsEtaVsPhi_->setAxisTitle("PV track (p_{T} > 1 GeV) #phi", 2);
323  IPErrVsEtaVsPhi_->setAxisTitle(fmt::format("PV tracks (p_{{T}} > {} GeV) d_{{{}}} error (#mum)", pTcut_, varname_),
324  3);
325 }
326 
329  iEvent.getByToken(vertexToken_, recVtxs);
330 
331  Handle<VertexScore> scores;
332  iEvent.getByToken(scoreToken_, scores);
333 
334  edm::Handle<reco::BeamSpot> beamSpotHandle;
335  iEvent.getByToken(beamspotToken_, beamSpotHandle);
336 
337  //
338  // check for absent products and simply "return" in that case
339  //
340  if (recVtxs.isValid() == false || beamSpotHandle.isValid() == false) {
341  edm::LogWarning("PrimaryVertexMonitor")
342  << " Some products not available in the event: VertexCollection " << vertexInputTag_ << " " << recVtxs.isValid()
343  << " BeamSpot " << beamSpotInputTag_ << " " << beamSpotHandle.isValid() << ". Skipping plots for this event";
344  return;
345  }
346 
347  // check upfront that refs to track are (likely) to be valid
348  {
349  bool ok = true;
350  for (const auto& v : *recVtxs) {
351  if (v.tracksSize() > 0) {
352  const auto& ref = v.trackRefAt(0);
353  if (ref.isNull() || !ref.isAvailable()) {
354  if (!errorPrinted_)
355  edm::LogWarning("PrimaryVertexMonitor")
356  << "Skipping vertex collection: " << vertexInputTag_
357  << " since likely the track collection the vertex has refs pointing to is missing (at least the first "
358  "TrackBaseRef is null or not available)";
359  else
360  errorPrinted_ = true;
361  ok = false;
362  }
363  }
364  }
365  if (!ok)
366  return;
367  }
368 
369  BeamSpot beamSpot = *beamSpotHandle;
370 
371  nbvtx->Fill(recVtxs->size() * 1.);
372  int ng = 0;
373  for (auto const& vx : (*recVtxs))
374  if (vx.isValid() && !vx.isFake() && vx.ndof() >= ndof_)
375  ++ng;
376  nbgvtx->Fill(ng * 1.);
377 
378  if (scores.isValid() && !(*scores).empty()) {
379  auto pvScore = (*scores).get(0);
380  score[1]->Fill(std::sqrt(pvScore));
381  for (unsigned int i = 1; i < (*scores).size(); ++i)
382  score[0]->Fill(std::sqrt((*scores).get(i)));
383  }
384 
385  // fill PV tracks MEs (as now, for alignment)
386  if (!recVtxs->empty()) {
387  vertexPlots(recVtxs->front(), beamSpot, 1);
388  pvTracksPlots(recVtxs->front());
389 
390  for (reco::VertexCollection::const_iterator v = recVtxs->begin() + 1; v != recVtxs->end(); ++v)
391  vertexPlots(*v, beamSpot, 0);
392  }
393 
394  // Beamline plots:
395  bsX->Fill(beamSpot.x0());
396  bsY->Fill(beamSpot.y0());
397  bsZ->Fill(beamSpot.z0());
398  bsSigmaZ->Fill(beamSpot.sigmaZ());
399  bsDxdz->Fill(beamSpot.dxdz());
400  bsDydz->Fill(beamSpot.dydz());
401  bsBeamWidthX->Fill(beamSpot.BeamWidthX() * cmToUm);
402  bsBeamWidthY->Fill(beamSpot.BeamWidthY() * cmToUm);
403  bsType->Fill(beamSpot.type());
404 }
405 
407  if (!v.isValid())
408  return;
409  if (v.isFake())
410  return;
411 
412  if (v.tracksSize() == 0) {
413  ntracks->Fill(0);
414  return;
415  }
416 
417  const math::XYZPoint myVertex(v.position().x(), v.position().y(), v.position().z());
418 
419  size_t nTracks = 0;
420  float sumPT = 0.;
421 
422  for (reco::Vertex::trackRef_iterator t = v.tracks_begin(); t != v.tracks_end(); t++) {
423  bool isHighPurity = (**t).quality(reco::TrackBase::highPurity);
424  if (!isHighPurity && useHPfoAlignmentPlots_)
425  continue;
426 
427  float pt = (**t).pt();
428  if (pt < 1.)
429  continue;
430 
431  nTracks++;
432 
433  float eta = (**t).eta();
434  float phi = (**t).phi();
435 
436  float w = v.trackWeight(*t);
437  float chi2NDF = (**t).normalizedChi2();
438  float chi2Prob = TMath::Prob((**t).chi2(), (int)(**t).ndof());
439  float Dxy = (**t).dxy(myVertex) * cmToUm;
440  float Dz = (**t).dz(myVertex) * cmToUm;
441  float DxyErr = (**t).dxyError() * cmToUm;
442  float DzErr = (**t).dzError() * cmToUm;
443 
444  sumPT += pt * pt;
445 
446  // fill MEs
447  phi_pt1->Fill(phi);
448  eta_pt1->Fill(eta);
449 
450  weight->Fill(w);
451  chi2ndf->Fill(chi2NDF);
452  chi2prob->Fill(chi2Prob);
453  dxy2->Fill(Dxy);
454 
455  dxy_pt1.IP_->Fill(Dxy);
456  dxy_pt1.IPVsPhi_->Fill(phi, Dxy);
457  dxy_pt1.IPVsEta_->Fill(eta, Dxy);
458  dxy_pt1.IPVsEtaVsPhi_->Fill(eta, phi, Dxy);
459 
460  dxy_pt1.IPErr_->Fill(DxyErr);
461  dxy_pt1.IPErrVsPhi_->Fill(phi, DxyErr);
462  dxy_pt1.IPErrVsEta_->Fill(eta, DxyErr);
463  dxy_pt1.IPErrVsEtaVsPhi_->Fill(eta, phi, DxyErr);
464 
465  dz_pt1.IP_->Fill(Dz);
466  dz_pt1.IPVsPhi_->Fill(phi, Dz);
467  dz_pt1.IPVsEta_->Fill(eta, Dz);
469 
470  dz_pt1.IPErr_->Fill(DzErr);
471  dz_pt1.IPErrVsPhi_->Fill(phi, DzErr);
472  dz_pt1.IPErrVsEta_->Fill(eta, DzErr);
473  dz_pt1.IPErrVsEtaVsPhi_->Fill(eta, phi, DzErr);
474 
475  if (pt < 10.)
476  continue;
477 
478  phi_pt10->Fill(phi);
479  eta_pt10->Fill(eta);
480 
481  dxy_pt10.IP_->Fill(Dxy);
482  dxy_pt10.IPVsPhi_->Fill(phi, Dxy);
483  dxy_pt10.IPVsEta_->Fill(eta, Dxy);
485 
486  dxy_pt10.IPErr_->Fill(DxyErr);
487  dxy_pt10.IPErrVsPhi_->Fill(phi, DxyErr);
488  dxy_pt10.IPErrVsEta_->Fill(eta, DxyErr);
489  dxy_pt10.IPErrVsEtaVsPhi_->Fill(eta, phi, DxyErr);
490 
491  dz_pt10.IP_->Fill(Dz);
492  dz_pt10.IPVsPhi_->Fill(phi, Dz);
493  dz_pt10.IPVsEta_->Fill(eta, Dz);
495 
496  dz_pt10.IPErr_->Fill(DzErr);
497  dz_pt10.IPErrVsPhi_->Fill(phi, DzErr);
498  dz_pt10.IPErrVsEta_->Fill(eta, DzErr);
499  dz_pt10.IPErrVsEtaVsPhi_->Fill(eta, phi, DzErr);
500  }
501  ntracks->Fill(float(nTracks));
502  sumpt->Fill(sumPT);
503 }
504 
506  if (i < 0 || i > 1)
507  return;
508  if (!v.isValid())
509  type[i]->Fill(2.);
510  else if (v.isFake())
511  type[i]->Fill(1.);
512  else
513  type[i]->Fill(0.);
514 
515  if (v.isValid() && !v.isFake()) {
516  float weight = 0;
517  for (reco::Vertex::trackRef_iterator t = v.tracks_begin(); t != v.tracks_end(); t++)
518  weight += v.trackWeight(*t);
519  trksWeight[i]->Fill(weight);
520  nbtksinvtx[i]->Fill(v.tracksSize());
521  ntracksVsZ[i]->Fill(v.position().z() - beamSpot.z0(), v.tracksSize());
522 
523  vtxchi2[i]->Fill(v.chi2());
524  vtxndf[i]->Fill(v.ndof());
525  vtxprob[i]->Fill(ChiSquaredProbability(v.chi2(), v.ndof()));
526 
527  xrec[i]->Fill(v.position().x());
528  yrec[i]->Fill(v.position().y());
529  zrec[i]->Fill(v.position().z());
530 
531  float xb = beamSpot.x0() + beamSpot.dxdz() * (v.position().z() - beamSpot.z0());
532  float yb = beamSpot.y0() + beamSpot.dydz() * (v.position().z() - beamSpot.z0());
533  xDiff[i]->Fill((v.position().x() - xb) * cmToUm);
534  yDiff[i]->Fill((v.position().y() - yb) * cmToUm);
535 
536  xerr[i]->Fill(v.xError() * cmToUm);
537  yerr[i]->Fill(v.yError() * cmToUm);
538  zerr[i]->Fill(v.zError() * cmToUm);
539  xerrVsTrks[i]->Fill(weight, v.xError() * cmToUm);
540  yerrVsTrks[i]->Fill(weight, v.yError() * cmToUm);
541  zerrVsTrks[i]->Fill(weight, v.zError() * cmToUm);
542 
543  nans[i]->Fill(1., edm::isNotFinite(v.position().x()) * 1.);
544  nans[i]->Fill(2., edm::isNotFinite(v.position().y()) * 1.);
545  nans[i]->Fill(3., edm::isNotFinite(v.position().z()) * 1.);
546 
547  int index = 3;
548  for (int k = 0; k != 3; k++) {
549  for (int j = k; j != 3; j++) {
550  index++;
551  nans[i]->Fill(index * 1., edm::isNotFinite(v.covariance(k, j)) * 1.);
552  // in addition, diagonal element must be positive
553  if (j == k && v.covariance(k, j) < 0) {
554  nans[i]->Fill(index * 1., 1.);
555  }
556  }
557  }
558  }
559 }
560 
561 //define this as a plug-in
MonitorElement * xerrVsTrks[2]
MonitorElement * xerr[2]
T getParameter(std::string const &) const
Definition: ParameterSet.h:307
MonitorElement * vtxndf[2]
MonitorElement * bookProfile2D(TString const &name, TString const &title, int nchX, double lowX, double highX, int nchY, double lowY, double highY, double lowZ, double highZ, char const *option="s", FUNC onbooking=NOOP())
Definition: DQMStore.h:476
void pvTracksPlots(const reco::Vertex &v)
virtual void setCurrentFolder(std::string const &fullpath)
Definition: DQMStore.cc:36
dqm::reco::MonitorElement * IPErrVsEta_
void vertexPlots(const reco::Vertex &v, const reco::BeamSpot &beamSpot, int i)
T w() const
constexpr bool isNotFinite(T x)
Definition: isFinite.h:9
MonitorElement * bsSigmaZ
edm::InputTag beamSpotInputTag_
MonitorElement * eta_pt1
edm::EDGetTokenT< VertexScore > scoreToken_
Definition: weight.py:1
MonitorElement * chi2ndf
Definition: config.py:1
dqm::reco::MonitorElement * IPVsEtaVsPhi_
std::string const & label() const
Definition: InputTag.h:36
void bookIPMonitor(DQMStore::IBooker &, const edm::ParameterSet &)
MonitorElement * xDiff[2]
dqm::reco::MonitorElement * IP_
MonitorElement * ntracksVsZ[2]
edm::ParameterSet conf_
MonitorElement * zerrVsTrks[2]
MonitorElement * nans[2]
void Fill(long long x)
MonitorElement * phi_pt10
int iEvent
Definition: GenABIO.cc:224
dqm::reco::MonitorElement * IPVsEta_
dqm::reco::MonitorElement * IPErrVsPhi_
MonitorElement * yerrVsTrks[2]
void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override
MonitorElement * bookProfile(TString const &name, TString const &title, int nchX, double lowX, double highX, int, double lowY, double highY, char const *option="s", FUNC onbooking=NOOP())
Definition: DQMStore.h:399
void Fill(HcalDetId &id, double val, std::vector< TH2F > &depth)
MonitorElement * zerr[2]
T sqrt(T t)
Definition: SSEVec.h:19
MonitorElement * yrec[2]
dqm::reco::MonitorElement * IPErr_
float ChiSquaredProbability(double chiSquared, double nrDOF)
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
MonitorElement * zrec[2]
MonitorElement * vtxchi2[2]
edm::EDGetTokenT< reco::BeamSpot > beamspotToken_
edm::EDGetTokenT< reco::VertexCollection > vertexToken_
virtual void setBinLabel(int bin, const std::string &label, int axis=1)
set bin label for x, y or z axis (axis=1, 2, 3 respectively)
MonitorElement * eta_pt10
dqm::reco::MonitorElement * IPErrVsEtaVsPhi_
MonitorElement * chi2prob
XYZPointD XYZPoint
point in space with cartesian internal representation
Definition: Point3D.h:12
MonitorElement * nbtksinvtx[2]
dqm::reco::MonitorElement * IPVsPhi_
MonitorElement * phi_pt1
MonitorElement * book2D(TString const &name, TString const &title, int nchX, double lowX, double highX, int nchY, double lowY, double highY, FUNC onbooking=NOOP())
Definition: DQMStore.h:212
static constexpr int cmToUm
bool isValid() const
Definition: HandleBase.h:70
MonitorElement * yerr[2]
fixed size matrix
HLT enums.
void analyze(const edm::Event &, const edm::EventSetup &) override
MonitorElement * xrec[2]
MonitorElement * vtxprob[2]
MonitorElement * ntracks
Log< level::Warning, false > LogWarning
MonitorElement * bsBeamWidthY
MonitorElement * book1D(TString const &name, TString const &title, int const nchX, double const lowX, double const highX, FUNC onbooking=NOOP())
Definition: DQMStore.h:98
MonitorElement * score[2]
MonitorElement * yDiff[2]
std::vector< TrackBaseRef >::const_iterator trackRef_iterator
The iteratator for the vector<TrackRef>
Definition: Vertex.h:38
MonitorElement * trksWeight[2]
PrimaryVertexMonitor(const edm::ParameterSet &pSet)
Definition: Run.h:45
MonitorElement * bsBeamWidthX
virtual void setAxisTitle(const std::string &title, int axis=1)
set x-, y- or z-axis title (axis=1, 2, 3 respectively)