13 #include <fmt/format.h> 19 : vertexInputTag_(pSet.getParameter<
InputTag>(
"vertexLabel")),
20 beamSpotInputTag_(pSet.getParameter<
InputTag>(
"beamSpotLabel")),
22 scoreToken_(consumes<
VertexScore>(vertexInputTag_)),
23 beamspotToken_(consumes<
reco::
BeamSpot>(beamSpotInputTag_)),
25 TopFolderName_(pSet.getParameter<
std::
string>(
"TopFolderName")),
26 AlignmentLabel_(pSet.getParameter<
std::
string>(
"AlignmentLabel")),
27 ndof_(pSet.getParameter<
int>(
"ndof")),
28 useHPfoAlignmentPlots_(pSet.getParameter<
bool>(
"useHPforAlignmentPlots")),
37 bsBeamWidthX(nullptr),
38 bsBeamWidthY(nullptr),
74 nbtksinvtx[0] = iBooker.
book1D(
"otherVtxTrksNbr",
"Reconstructed Tracks in Vertex (other Vtx)", 40, -0.5, 99.5);
76 "otherVtxTrksVsZ",
"Reconstructed Tracks in Vertex (other Vtx) vs Z", 80, -20., 20., 50, 0, 100,
"");
80 score[0] = iBooker.
book1D(
"otherVtxScore",
"sqrt(score) (other Vtx)", 100, 0., 400.);
81 trksWeight[0] = iBooker.
book1D(
"otherVtxTrksWeight",
"Total weight of Tracks in Vertex (other Vtx)", 40, 0, 100.);
82 vtxchi2[0] = iBooker.
book1D(
"otherVtxChi2",
"#chi^{2} (other Vtx)", 100, 0., 200.);
83 vtxndf[0] = iBooker.
book1D(
"otherVtxNdf",
"ndof (other Vtx)", 100, 0., 200.);
84 vtxprob[0] = iBooker.
book1D(
"otherVtxProb",
"#chi^{2} probability (other Vtx)", 100, 0., 1.);
85 nans[0] = iBooker.
book1D(
"otherVtxNans",
"Illegal values for x,y,z,xx,xy,xz,yy,yz,zz (other Vtx)", 9, 0.5, 9.5);
87 nbtksinvtx[1] = iBooker.
book1D(
"tagVtxTrksNbr",
"Reconstructed Tracks in Vertex (tagged Vtx)", 100, -0.5, 99.5);
89 "tagVtxTrksVsZ",
"Reconstructed Tracks in Vertex (tagged Vtx) vs Z", 80, -20., 20., 50, 0, 100,
"");
93 score[1] = iBooker.
book1D(
"tagVtxScore",
"sqrt(score) (tagged Vtx)", 100, 0., 400.);
94 trksWeight[1] = iBooker.
book1D(
"tagVtxTrksWeight",
"Total weight of Tracks in Vertex (tagged Vtx)", 100, 0, 100.);
95 vtxchi2[1] = iBooker.
book1D(
"tagVtxChi2",
"#chi^{2} (tagged Vtx)", 100, 0., 200.);
96 vtxndf[1] = iBooker.
book1D(
"tagVtxNdf",
"ndof (tagged Vtx)", 100, 0., 200.);
97 vtxprob[1] = iBooker.
book1D(
"tagVtxProb",
"#chi^{2} probability (tagged Vtx)", 100, 0., 1.);
98 nans[1] = iBooker.
book1D(
"tagVtxNans",
"Illegal values for x,y,z,xx,xy,xz,yy,yz,zz (tagged Vtx)", 9, 0.5, 9.5);
100 xrec[0] = iBooker.
book1D(
"otherPosX",
"Position x Coordinate (other Vtx)", 100, vposx - 0.1, vposx + 0.1);
101 yrec[0] = iBooker.
book1D(
"otherPosY",
"Position y Coordinate (other Vtx)", 100, vposy - 0.1, vposy + 0.1);
102 zrec[0] = iBooker.
book1D(
"otherPosZ",
"Position z Coordinate (other Vtx)", 100, -20., 20.);
103 xDiff[0] = iBooker.
book1D(
"otherDiffX",
"X distance from BeamSpot (other Vtx)", 100, -500, 500);
104 yDiff[0] = iBooker.
book1D(
"otherDiffY",
"Y distance from BeamSpot (other Vtx)", 100, -500, 500);
105 xerr[0] = iBooker.
book1D(
"otherErrX",
"Uncertainty x Coordinate (other Vtx)", 100, 0., 100);
106 yerr[0] = iBooker.
book1D(
"otherErrY",
"Uncertainty y Coordinate (other Vtx)", 100, 0., 100);
107 zerr[0] = iBooker.
book1D(
"otherErrZ",
"Uncertainty z Coordinate (other Vtx)", 100, 0., 100);
109 "otherErrVsWeightX",
"Uncertainty x Coordinate vs. track weight (other Vtx)", 100, 0, 100., 100, 0., 100);
111 "otherErrVsWeightY",
"Uncertainty y Coordinate vs. track weight (other Vtx)", 100, 0, 100., 100, 0., 100);
113 "otherErrVsWeightZ",
"Uncertainty z Coordinate vs. track weight (other Vtx)", 100, 0, 100., 100, 0., 100);
115 xrec[1] = iBooker.
book1D(
"tagPosX",
"Position x Coordinate (tagged Vtx)", 100, vposx - 0.1, vposx + 0.1);
116 yrec[1] = iBooker.
book1D(
"tagPosY",
"Position y Coordinate (tagged Vtx)", 100, vposy - 0.1, vposy + 0.1);
117 zrec[1] = iBooker.
book1D(
"tagPosZ",
"Position z Coordinate (tagged Vtx)", 100, -20., 20.);
118 xDiff[1] = iBooker.
book1D(
"tagDiffX",
"X distance from BeamSpot (tagged Vtx)", 100, -500, 500);
119 yDiff[1] = iBooker.
book1D(
"tagDiffY",
"Y distance from BeamSpot (tagged Vtx)", 100, -500, 500);
120 xerr[1] = iBooker.
book1D(
"tagErrX",
"Uncertainty x Coordinate (tagged Vtx)", 100, 0., 100);
121 yerr[1] = iBooker.
book1D(
"tagErrY",
"Uncertainty y Coordinate (tagged Vtx)", 100, 0., 100);
122 zerr[1] = iBooker.
book1D(
"tagErrZ",
"Uncertainty z Coordinate (tagged Vtx)", 100, 0., 100);
124 "tagErrVsWeightX",
"Uncertainty x Coordinate vs. track weight (tagged Vtx)", 100, 0, 100., 100, 0., 100);
126 "tagErrVsWeightY",
"Uncertainty y Coordinate vs. track weight (tagged Vtx)", 100, 0, 100., 100, 0., 100);
128 "tagErrVsWeightZ",
"Uncertainty z Coordinate vs. track weight (tagged Vtx)", 100, 0, 100., 100, 0., 100);
130 type[0] = iBooker.
book1D(
"otherType",
"Vertex type (other Vtx)", 3, -0.5, 2.5);
131 type[1] = iBooker.
book1D(
"tagType",
"Vertex type (tagged Vtx)", 3, -0.5, 2.5);
132 for (
int i = 0;
i < 2; ++
i) {
134 type[
i]->setBinLabel(2,
"Valid, fake");
135 type[
i]->setBinLabel(3,
"Invalid");
142 bsX = iBooker.
book1D(
"bsX",
"BeamSpot x0", 100, vposx - 0.1, vposx + 0.1);
143 bsY = iBooker.
book1D(
"bsY",
"BeamSpot y0", 100, vposy - 0.1, vposy + 0.1);
144 bsZ = iBooker.
book1D(
"bsZ",
"BeamSpot z0", 100, -2., 2.);
145 bsSigmaZ = iBooker.
book1D(
"bsSigmaZ",
"BeamSpot sigmaZ", 100, 0., 10.);
146 bsDxdz = iBooker.
book1D(
"bsDxdz",
"BeamSpot dxdz", 100, -0.0003, 0.0003);
147 bsDydz = iBooker.
book1D(
"bsDydz",
"BeamSpot dydz", 100, -0.0003, 0.0003);
150 bsType = iBooker.
book1D(
"bsType",
"BeamSpot type", 4, -1.5, 2.5);
180 ntracks = iBooker.
book1D(
"ntracks",
"number of PV tracks (p_{T} > 1 GeV)", TKNoBin, TKNoMin, TKNoMax);
184 weight = iBooker.
book1D(
"weight",
"weight of PV tracks (p_{T} > 1 GeV)", 100, 0., 1.);
185 weight->setAxisTitle(
"weight of PV Tracks (p_{T} > 1 GeV) per Event", 1);
186 weight->setAxisTitle(
"Number of Event", 2);
188 sumpt = iBooker.
book1D(
"sumpt",
"#Sum p_{T} of PV tracks (p_{T} > 1 GeV)", 100, -0.5, 249.5);
189 chi2ndf = iBooker.
book1D(
"chi2ndf",
"PV tracks (p_{T} > 1 GeV) #chi^{2}/ndof", 100, 0., 20.);
190 chi2prob = iBooker.
book1D(
"chi2prob",
"PV tracks (p_{T} > 1 GeV) #chi^{2} probability", 100, 0., 1.);
198 "PV tracks p_{T};PV tracks p_{T} [GeV];#tracks",
259 (
varname_.find(
"xy") != std::string::npos) ? 2000. : 10000.);
319 (
varname_.find(
"xy") != std::string::npos) ? 100. : 200.,
332 (
varname_.find(
"xy") != std::string::npos) ? 100. : 200.,
382 (
varname_.find(
"xy") != std::string::npos) ? 100. : 200.,
403 if (recVtxs.
isValid() ==
false || beamSpotHandle.
isValid() ==
false) {
405 <<
" Some products not available in the event: VertexCollection " <<
vertexInputTag_ <<
" " << recVtxs.
isValid()
413 for (
const auto&
v : *recVtxs) {
414 if (
v.tracksSize() > 0) {
415 const auto& ref =
v.trackRefAt(0);
416 if (ref.isNull() || !ref.isAvailable()) {
420 <<
" since likely the track collection the vertex has refs pointing to is missing (at least the first " 421 "TrackBaseRef is null or not available)";
436 for (
auto const&
vx : (*recVtxs))
437 if (
vx.isValid() && !
vx.isFake() &&
vx.ndof() >=
ndof_)
441 if (scores.
isValid() && !(*scores).empty()) {
442 auto pvScore = (*scores).get(0);
444 for (
unsigned int i = 1;
i < (*scores).size(); ++
i)
449 if (!recVtxs->empty()) {
453 for (reco::VertexCollection::const_iterator
v = recVtxs->begin() + 1;
v != recVtxs->end(); ++
v)
475 if (
v.tracksSize() == 0) {
480 const math::XYZPoint myVertex(
v.position().x(),
v.position().y(),
v.position().z());
490 float pt = (**t).pt();
498 float eta = (**t).eta();
499 float phi = (**t).phi();
501 float w =
v.trackWeight(*
t);
502 float chi2NDF = (**t).normalizedChi2();
503 float chi2Prob = TMath::Prob((**t).chi2(), (
int)(**t).ndof());
504 float Dxy = (**t).dxy(myVertex) *
cmToUm;
505 float Dz = (**t).dz(myVertex) *
cmToUm;
506 float DxyErr = (**t).dxyError() *
cmToUm;
507 float DzErr = (**t).dzError() *
cmToUm;
600 if (
v.isValid() && !
v.isFake()) {
633 for (
int k = 0;
k != 3;
k++) {
634 for (
int j =
k;
j != 3;
j++) {
638 if (
j ==
k &&
v.covariance(
k,
j) < 0) {
650 desc.add<
int>(
"ndof", 4);
651 desc.add<
bool>(
"useHPforAlignmentPlots",
true);
654 desc.add<
double>(
"PUMax", 80.0);
655 desc.add<
double>(
"Xpos", 0.1);
656 desc.add<
double>(
"Ypos", 0.0);
657 desc.add<
int>(
"TkSizeBin", 100);
658 desc.add<
double>(
"TkSizeMin", -0.5);
659 desc.add<
double>(
"TkSizeMax", 499.5);
660 desc.add<
int>(
"DxyBin", 100);
661 desc.add<
double>(
"DxyMin", -5000.0);
662 desc.add<
double>(
"DxyMax", 5000.0);
663 desc.add<
int>(
"DzBin", 100);
664 desc.add<
double>(
"DzMin", -2000.0);
665 desc.add<
double>(
"DzMax", 2000.0);
666 desc.add<
int>(
"PhiBin", 32);
669 desc.add<
int>(
"EtaBin", 26);
670 desc.add<
double>(
"EtaMin", 2.5);
671 desc.add<
double>(
"EtaMax", -2.5);
672 desc.add<
int>(
"PtBin", 49);
673 desc.add<
double>(
"PtMin", 1.);
674 desc.add<
double>(
"PtMax", 50.);
675 desc.add<
int>(
"PhiBin2D", 12);
676 desc.add<
int>(
"EtaBin2D", 8);
MonitorElement * xerrVsTrks[2]
const std::string AlignmentLabel_
void addWithDefaultLabel(ParameterSetDescription const &psetDescription)
T getParameter(std::string const &) const
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())
void pvTracksPlots(const reco::Vertex &v)
virtual void setCurrentFolder(std::string const &fullpath)
const bool useHPfoAlignmentPlots_
dqm::reco::MonitorElement * IPErrVsEta_
void vertexPlots(const reco::Vertex &v, const reco::BeamSpot &beamSpot, int i)
constexpr bool isNotFinite(T x)
MonitorElement * bsSigmaZ
dqm::reco::MonitorElement * IPErrVsPt_
const edm::EDGetTokenT< reco::BeamSpot > beamspotToken_
const std::string dqmLabel
dqm::reco::MonitorElement * IPPull_
std::vector< Vertex > VertexCollection
collection of Vertex objects
dqm::reco::MonitorElement * IPVsEtaVsPhi_
void bookIPMonitor(DQMStore::IBooker &, const edm::ParameterSet &)
MonitorElement * xDiff[2]
const edm::InputTag vertexInputTag_
dqm::reco::MonitorElement * IP_
MonitorElement * ntracksVsZ[2]
const edm::EDGetTokenT< VertexScore > scoreToken_
MonitorElement * zerrVsTrks[2]
MonitorElement * phi_pt10
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())
void Fill(HcalDetId &id, double val, std::vector< TH2F > &depth)
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
dqm::reco::MonitorElement * IPErr_
float ChiSquaredProbability(double chiSquared, double nrDOF)
#define DEFINE_FWK_MODULE(type)
MonitorElement * vtxchi2[2]
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
const edm::ParameterSet conf_
const std::string TopFolderName_
XYZPointD XYZPoint
point in space with cartesian internal representation
MonitorElement * nbtksinvtx[2]
dqm::reco::MonitorElement * IPVsPhi_
MonitorElement * book2D(TString const &name, TString const &title, int nchX, double lowX, double highX, int nchY, double lowY, double highY, FUNC onbooking=NOOP())
dqm::reco::MonitorElement * IPVsPt_
static constexpr int cmToUm
void analyze(const edm::Event &, const edm::EventSetup &) override
MonitorElement * vtxprob[2]
dqm::reco::MonitorElement * makeTH1IfLog(DQMStore::IBooker &ibook, bool logx, bool logy, Args &&...args)
const edm::EDGetTokenT< reco::VertexCollection > vertexToken_
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())
MonitorElement * score[2]
MonitorElement * yDiff[2]
std::vector< TrackBaseRef >::const_iterator trackRef_iterator
The iteratator for the vector<TrackRef>
MonitorElement * trksWeight[2]
dqm::reco::MonitorElement * makeProfileIfLog(DQMStore::IBooker &ibook, bool logx, bool logy, Args &&...args)
PrimaryVertexMonitor(const edm::ParameterSet &pSet)
MonitorElement * bsBeamWidthX
virtual void setAxisTitle(const std::string &title, int axis=1)
set x-, y- or z-axis title (axis=1, 2, 3 respectively)
const edm::InputTag beamSpotInputTag_