File indexing completed on 2024-04-06 12:09:09
0001
0002
0003
0004
0005
0006
0007
0008 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0009 #include "FWCore/Utilities/interface/InputTag.h"
0010 #include "DQMServices/Core/interface/DQMStore.h"
0011 #include "DQM/TrackingMonitor/interface/VertexMonitor.h"
0012 #include "DQM/TrackingMonitor/interface/GetLumi.h"
0013 #include "TMath.h"
0014
0015 VertexMonitor::VertexMonitor(const edm::ParameterSet& iConfig,
0016 const edm::InputTag& primaryVertexInputTag,
0017 const edm::InputTag& selectedPrimaryVertexInputTag,
0018 std::string pvLabel)
0019 : conf_(iConfig),
0020 primaryVertexInputTag_(primaryVertexInputTag),
0021 selectedPrimaryVertexInputTag_(selectedPrimaryVertexInputTag),
0022 label_(pvLabel),
0023 NumberOfPVtx(nullptr),
0024 NumberOfPVtxVsBXlumi(nullptr),
0025 NumberOfPVtxVsGoodPVtx(nullptr),
0026 NumberOfGoodPVtx(nullptr),
0027 NumberOfGoodPVtxVsBXlumi(nullptr),
0028 FractionOfGoodPVtx(nullptr),
0029 FractionOfGoodPVtxVsBXlumi(nullptr),
0030 FractionOfGoodPVtxVsGoodPVtx(nullptr),
0031 FractionOfGoodPVtxVsPVtx(nullptr),
0032 NumberOfBADndofPVtx(nullptr),
0033 NumberOfBADndofPVtxVsBXlumi(nullptr),
0034 NumberOfBADndofPVtxVsGoodPVtx(nullptr),
0035 GoodPVtxSumPt(nullptr),
0036 GoodPVtxSumPtVsBXlumi(nullptr),
0037 GoodPVtxSumPtVsGoodPVtx(nullptr),
0038 GoodPVtxNumberOfTracks(nullptr),
0039 GoodPVtxNumberOfTracksVsBXlumi(nullptr),
0040 GoodPVtxNumberOfTracksVsGoodPVtx(nullptr),
0041 GoodPVtxNumberOfTracksVsGoodPVtxNdof(nullptr),
0042 GoodPVtxChi2oNDFVsGoodPVtx(nullptr),
0043 GoodPVtxChi2oNDFVsBXlumi(nullptr),
0044 GoodPVtxChi2ProbVsGoodPVtx(nullptr),
0045 GoodPVtxChi2ProbVsBXlumi(nullptr),
0046 doAllPlots_(conf_.getParameter<bool>("doAllPlots")),
0047 doPlotsVsBXlumi_(conf_.getParameter<bool>("doPlotsVsBXlumi")),
0048 doPlotsVsGoodPVtx_(conf_.getParameter<bool>("doPlotsVsGoodPVtx"))
0049
0050 {
0051
0052 if (doPlotsVsBXlumi_)
0053 lumiDetails_ = new GetLumi(iConfig.getParameter<edm::ParameterSet>("BXlumiSetup"));
0054 }
0055
0056 VertexMonitor::VertexMonitor(const edm::ParameterSet& iConfig,
0057 const edm::InputTag& primaryVertexInputTag,
0058 const edm::InputTag& selectedPrimaryVertexInputTag,
0059 std::string pvLabel,
0060 edm::ConsumesCollector& iC)
0061 : VertexMonitor(iConfig, primaryVertexInputTag, selectedPrimaryVertexInputTag, pvLabel) {
0062 if (doPlotsVsBXlumi_)
0063 lumiDetails_ = new GetLumi(iConfig.getParameter<edm::ParameterSet>("BXlumiSetup"), iC);
0064
0065 pvToken_ = iC.consumes<reco::VertexCollection>(primaryVertexInputTag_);
0066 selpvToken_ = iC.consumes<reco::VertexCollection>(selectedPrimaryVertexInputTag_);
0067 }
0068
0069 VertexMonitor::~VertexMonitor() = default;
0070
0071
0072
0073
0074
0075
0076
0077
0078 void VertexMonitor::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) {
0079 double bxlumi = 0.;
0080 if (doPlotsVsBXlumi_)
0081 bxlumi = lumiDetails_->getValue(iEvent);
0082
0083
0084 size_t totalNumPV = 0;
0085 size_t totalNumBADndofPV = 0;
0086 edm::Handle<reco::VertexCollection> pvHandle = iEvent.getHandle(pvToken_);
0087 if (pvHandle.isValid()) {
0088 totalNumPV = pvHandle->size();
0089
0090 for (reco::VertexCollection::const_iterator pv = pvHandle->begin(); pv != pvHandle->end(); ++pv) {
0091
0092 if (pv->ndof() < 4.)
0093 totalNumBADndofPV++;
0094 }
0095 } else
0096 return;
0097 NumberOfPVtx->Fill(totalNumPV);
0098 NumberOfBADndofPVtx->Fill(totalNumBADndofPV);
0099 if (doPlotsVsBXlumi_) {
0100 NumberOfPVtxVsBXlumi->Fill(bxlumi, totalNumPV);
0101 NumberOfBADndofPVtxVsBXlumi->Fill(bxlumi, totalNumBADndofPV);
0102 }
0103
0104 size_t totalNumGoodPV = 0;
0105 edm::Handle<reco::VertexCollection> selpvHandle = iEvent.getHandle(selpvToken_);
0106 if (selpvHandle.isValid())
0107 totalNumGoodPV = selpvHandle->size();
0108 else
0109 return;
0110
0111 if (doPlotsVsGoodPVtx_) {
0112 NumberOfPVtxVsGoodPVtx->Fill(totalNumGoodPV, totalNumPV);
0113 NumberOfBADndofPVtxVsGoodPVtx->Fill(totalNumGoodPV, totalNumBADndofPV);
0114 }
0115
0116 double fracGoodPV = double(totalNumGoodPV) / double(totalNumPV);
0117
0118
0119 NumberOfGoodPVtx->Fill(totalNumGoodPV);
0120 FractionOfGoodPVtx->Fill(fracGoodPV);
0121 if (doPlotsVsBXlumi_) {
0122 NumberOfGoodPVtxVsBXlumi->Fill(bxlumi, totalNumGoodPV);
0123 FractionOfGoodPVtxVsBXlumi->Fill(bxlumi, fracGoodPV);
0124 }
0125 if (doPlotsVsGoodPVtx_) {
0126 FractionOfGoodPVtxVsGoodPVtx->Fill(totalNumGoodPV, fracGoodPV);
0127 FractionOfGoodPVtxVsPVtx->Fill(totalNumPV, fracGoodPV);
0128 }
0129
0130 if (!selpvHandle->empty()) {
0131 double sumpt = 0;
0132 size_t ntracks = 0;
0133 double chi2ndf = 0.;
0134 double chi2prob = 0.;
0135
0136 if (!selpvHandle->at(0).isFake()) {
0137 reco::Vertex pv = selpvHandle->at(0);
0138
0139 ntracks = pv.tracksSize();
0140 chi2ndf = pv.normalizedChi2();
0141 chi2prob = TMath::Prob(pv.chi2(), (int)pv.ndof());
0142
0143 for (reco::Vertex::trackRef_iterator itrk = pv.tracks_begin(); itrk != pv.tracks_end(); ++itrk) {
0144 double pt = (**itrk).pt();
0145 sumpt += pt * pt;
0146 }
0147 GoodPVtxSumPt->Fill(sumpt);
0148 GoodPVtxNumberOfTracks->Fill(ntracks);
0149
0150 if (doPlotsVsBXlumi_) {
0151 GoodPVtxSumPtVsBXlumi->Fill(bxlumi, sumpt);
0152 GoodPVtxNumberOfTracksVsBXlumi->Fill(bxlumi, ntracks);
0153 GoodPVtxChi2oNDFVsBXlumi->Fill(bxlumi, chi2ndf);
0154 GoodPVtxChi2ProbVsBXlumi->Fill(bxlumi, chi2prob);
0155 }
0156 if (doPlotsVsGoodPVtx_) {
0157 GoodPVtxSumPtVsGoodPVtx->Fill(totalNumGoodPV, sumpt);
0158 GoodPVtxNumberOfTracksVsGoodPVtx->Fill(totalNumGoodPV, ntracks);
0159 GoodPVtxChi2oNDFVsGoodPVtx->Fill(totalNumGoodPV, chi2ndf);
0160 GoodPVtxChi2ProbVsGoodPVtx->Fill(totalNumGoodPV, chi2prob);
0161 }
0162 }
0163 }
0164 }
0165
0166
0167 void VertexMonitor::initHisto(DQMStore::IBooker& ibooker) {
0168
0169 std::string MEFolderName = conf_.getParameter<std::string>("PVFolderName");
0170
0171
0172 edm::ParameterSet ParametersGoodPVtx = conf_.getParameter<edm::ParameterSet>("GoodPVtx");
0173 int GoodPVtxBin = ParametersGoodPVtx.getParameter<int>("GoodPVtxBin");
0174 double GoodPVtxMin = ParametersGoodPVtx.getParameter<double>("GoodPVtxMin");
0175 double GoodPVtxMax = ParametersGoodPVtx.getParameter<double>("GoodPVtxMax");
0176
0177 edm::ParameterSet ParametersNTrkPVtx = conf_.getParameter<edm::ParameterSet>("NTrkPVtx");
0178 int NTrkPVtxBin = ParametersNTrkPVtx.getParameter<int>("NTrkPVtxBin");
0179 double NTrkPVtxMin = ParametersNTrkPVtx.getParameter<double>("NTrkPVtxMin");
0180 double NTrkPVtxMax = ParametersNTrkPVtx.getParameter<double>("NTrkPVtxMax");
0181
0182 edm::ParameterSet ParametersSumPtPVtx = conf_.getParameter<edm::ParameterSet>("SumPtPVtx");
0183 int SumPtPVtxBin = ParametersSumPtPVtx.getParameter<int>("SumPtPVtxBin");
0184 double SumPtPVtxMin = ParametersSumPtPVtx.getParameter<double>("SumPtPVtxMin");
0185 double SumPtPVtxMax = ParametersSumPtPVtx.getParameter<double>("SumPtPVtxMax");
0186
0187
0188
0189 ibooker.setCurrentFolder(MEFolderName + "/" + label_);
0190
0191 histname = "NumberOfPVtx_" + label_;
0192 NumberOfPVtx = ibooker.book1D(histname, histname, GoodPVtxBin, GoodPVtxMin, GoodPVtxMax);
0193 NumberOfPVtx->setAxisTitle("Number of PV", 1);
0194 NumberOfPVtx->setAxisTitle("Number of Events", 2);
0195
0196 histname = "NumberOfGoodPVtx_" + label_;
0197 NumberOfGoodPVtx = ibooker.book1D(histname, histname, GoodPVtxBin, GoodPVtxMin, GoodPVtxMax);
0198 NumberOfGoodPVtx->setAxisTitle("Number of Good PV", 1);
0199 NumberOfGoodPVtx->setAxisTitle("Number of Events", 2);
0200
0201 histname = "FractionOfGoodPVtx_" + label_;
0202 FractionOfGoodPVtx = ibooker.book1D(histname, histname, 100, 0., 1.);
0203 FractionOfGoodPVtx->setAxisTitle("fraction of Good PV", 1);
0204 FractionOfGoodPVtx->setAxisTitle("Number of Events", 2);
0205
0206 histname = "NumberOfBADndofPVtx_" + label_;
0207 NumberOfBADndofPVtx = ibooker.book1D(histname, histname, GoodPVtxBin, GoodPVtxMin, GoodPVtxMax);
0208 NumberOfBADndofPVtx->setAxisTitle("Number of BADndof #PV", 1);
0209 NumberOfBADndofPVtx->setAxisTitle("Number of Events", 2);
0210
0211 histname = "GoodPVtxSumPt_" + label_;
0212 GoodPVtxSumPt = ibooker.book1D(histname, histname, SumPtPVtxBin, SumPtPVtxMin, SumPtPVtxMax);
0213 GoodPVtxSumPt->setAxisTitle("primary vertex #Sum p_{T}^{2} [GeV^{2}/c^{2}]", 1);
0214 GoodPVtxSumPt->setAxisTitle("Number of events", 2);
0215
0216 histname = "GoodPVtxNumberOfTracks_" + label_;
0217 GoodPVtxNumberOfTracks = ibooker.book1D(histname, histname, NTrkPVtxBin, NTrkPVtxMin, NTrkPVtxMax);
0218 GoodPVtxNumberOfTracks->setAxisTitle("primary vertex number of tracks", 1);
0219 GoodPVtxNumberOfTracks->setAxisTitle("Number of events", 2);
0220
0221 if (doPlotsVsBXlumi_) {
0222
0223 edm::ParameterSet BXlumiParameters = conf_.getParameter<edm::ParameterSet>("BXlumiSetup");
0224 int BXlumiBin = BXlumiParameters.getParameter<int>("BXlumiBin");
0225 double BXlumiMin = BXlumiParameters.getParameter<double>("BXlumiMin");
0226 double BXlumiMax = BXlumiParameters.getParameter<double>("BXlumiMax");
0227
0228 ibooker.setCurrentFolder(MEFolderName + "/" + label_ + "/PUmonitoring/");
0229
0230 histname = "NumberOfPVtxVsBXlumi_" + label_;
0231 NumberOfPVtxVsBXlumi =
0232 ibooker.bookProfile(histname, histname, BXlumiBin, BXlumiMin, BXlumiMax, GoodPVtxMin, GoodPVtxMax * 3, "");
0233 NumberOfPVtxVsBXlumi->getTH1()->SetCanExtend(TH1::kAllAxes);
0234 NumberOfPVtxVsBXlumi->setAxisTitle("lumi BX [10^{30}Hzcm^{-2}]", 1);
0235 NumberOfPVtxVsBXlumi->setAxisTitle("Mean number of PV", 2);
0236
0237 histname = "NumberOfGoodPVtxVsBXlumi_" + label_;
0238 NumberOfGoodPVtxVsBXlumi =
0239 ibooker.bookProfile(histname, histname, BXlumiBin, BXlumiMin, BXlumiMax, GoodPVtxMin, GoodPVtxMax * 3, "");
0240 NumberOfGoodPVtxVsBXlumi->getTH1()->SetCanExtend(TH1::kAllAxes);
0241 NumberOfGoodPVtxVsBXlumi->setAxisTitle("lumi BX [10^{30}Hzcm^{-2}]", 1);
0242 NumberOfGoodPVtxVsBXlumi->setAxisTitle("Mean number of PV", 2);
0243
0244 histname = "FractionOfGoodPVtxVsBXlumi_" + label_;
0245 FractionOfGoodPVtxVsBXlumi = ibooker.bookProfile(histname, histname, BXlumiBin, BXlumiMin, BXlumiMax, 0., 1.5, "");
0246 FractionOfGoodPVtxVsBXlumi->getTH1()->SetCanExtend(TH1::kAllAxes);
0247 FractionOfGoodPVtxVsBXlumi->setAxisTitle("lumi BX [10^{30}Hzcm^{-2}]", 1);
0248 FractionOfGoodPVtxVsBXlumi->setAxisTitle("Mean number of PV", 2);
0249
0250 histname = "NumberOfBADndofPVtxVsBXlumi_" + label_;
0251 NumberOfBADndofPVtxVsBXlumi =
0252 ibooker.bookProfile(histname, histname, BXlumiBin, BXlumiMin, BXlumiMax, GoodPVtxMin, GoodPVtxMax * 3, "");
0253 NumberOfBADndofPVtxVsBXlumi->getTH1()->SetCanExtend(TH1::kAllAxes);
0254 NumberOfBADndofPVtxVsBXlumi->setAxisTitle("BADndof #PV", 1);
0255 NumberOfBADndofPVtxVsBXlumi->setAxisTitle("Number of Events", 2);
0256
0257 histname = "GoodPVtxSumPtVsBXlumi_" + label_;
0258 GoodPVtxSumPtVsBXlumi =
0259 ibooker.bookProfile(histname, histname, BXlumiBin, BXlumiMin, BXlumiMax, SumPtPVtxMin, SumPtPVtxMax * 3, "");
0260 GoodPVtxSumPtVsBXlumi->getTH1()->SetCanExtend(TH1::kAllAxes);
0261 GoodPVtxSumPtVsBXlumi->setAxisTitle("lumi BX [10^{30}Hzcm^{-2}]", 1);
0262 GoodPVtxSumPtVsBXlumi->setAxisTitle("Mean pv #Sum p_{T}^{2} [GeV^{2}/c]^{2}", 2);
0263
0264 histname = "GoodPVtxNumberOfTracksVsBXlumi_" + label_;
0265 GoodPVtxNumberOfTracksVsBXlumi =
0266 ibooker.bookProfile(histname, histname, BXlumiBin, BXlumiMin, BXlumiMax, NTrkPVtxMin, NTrkPVtxMax * 3, "");
0267 GoodPVtxNumberOfTracksVsBXlumi->getTH1()->SetCanExtend(TH1::kAllAxes);
0268 GoodPVtxNumberOfTracksVsBXlumi->setAxisTitle("lumi BX [10^{30}Hzcm^{-2}]", 1);
0269 GoodPVtxNumberOfTracksVsBXlumi->setAxisTitle("Mean pv number of tracks", 2);
0270
0271
0272 double Chi2NDFMin = conf_.getParameter<double>("Chi2NDFMin");
0273 double Chi2NDFMax = conf_.getParameter<double>("Chi2NDFMax");
0274
0275 double Chi2ProbMin = conf_.getParameter<double>("Chi2ProbMin");
0276 double Chi2ProbMax = conf_.getParameter<double>("Chi2ProbMax");
0277
0278 histname = "Chi2oNDFVsBXlumi_" + label_;
0279 Chi2oNDFVsBXlumi =
0280 ibooker.bookProfile(histname, histname, BXlumiBin, BXlumiMin, BXlumiMax, Chi2NDFMin, Chi2NDFMax * 3, "");
0281 Chi2oNDFVsBXlumi->getTH1()->SetCanExtend(TH1::kAllAxes);
0282 Chi2oNDFVsBXlumi->setAxisTitle("lumi BX [10^{30}Hzcm^{-2}]", 1);
0283 Chi2oNDFVsBXlumi->setAxisTitle("Mean #chi^{2}/ndof", 2);
0284
0285 histname = "Chi2ProbVsBXlumi_" + label_;
0286 Chi2ProbVsBXlumi =
0287 ibooker.bookProfile(histname, histname, BXlumiBin, BXlumiMin, BXlumiMax, Chi2ProbMin, Chi2ProbMax * 3, "");
0288 Chi2ProbVsBXlumi->getTH1()->SetCanExtend(TH1::kAllAxes);
0289 Chi2ProbVsBXlumi->setAxisTitle("lumi BX [10^{30}Hzcm^{-2}]", 1);
0290 Chi2ProbVsBXlumi->setAxisTitle("Mean #chi^{2}/prob", 2);
0291
0292 histname = "GoodPVtxChi2oNDFVsBXlumi_" + label_;
0293 GoodPVtxChi2oNDFVsBXlumi =
0294 ibooker.bookProfile(histname, histname, BXlumiBin, BXlumiMin, BXlumiMax, Chi2NDFMin, Chi2NDFMax, "");
0295 GoodPVtxChi2oNDFVsBXlumi->getTH1()->SetCanExtend(TH1::kAllAxes);
0296 GoodPVtxChi2oNDFVsBXlumi->setAxisTitle("lumi BX [10^{30}Hzcm^{-2}]", 1);
0297 GoodPVtxChi2oNDFVsBXlumi->setAxisTitle("Mean PV #chi^{2}/ndof", 2);
0298
0299 histname = "GoodPVtxChi2ProbVsBXlumi_" + label_;
0300 GoodPVtxChi2ProbVsBXlumi =
0301 ibooker.bookProfile(histname, histname, BXlumiBin, BXlumiMin, BXlumiMax, Chi2ProbMin, Chi2ProbMax * 3, "");
0302 GoodPVtxChi2ProbVsBXlumi->getTH1()->SetCanExtend(TH1::kAllAxes);
0303 GoodPVtxChi2ProbVsBXlumi->setAxisTitle("lumi BX [10^{30}Hzcm^{-2}]", 1);
0304 GoodPVtxChi2ProbVsBXlumi->setAxisTitle("Mean PV #chi^{2}/prob", 2);
0305 }
0306
0307 if (doPlotsVsGoodPVtx_) {
0308 ibooker.setCurrentFolder(MEFolderName + "/" + label_ + "/PUmonitoring/VsGoodPVtx");
0309
0310 histname = "NumberOfPVtxVsGoodPVtx_" + label_;
0311 NumberOfPVtxVsGoodPVtx = ibooker.bookProfile(
0312 histname, histname, GoodPVtxBin, GoodPVtxMin, GoodPVtxMax, GoodPVtxMin, GoodPVtxMax * 3, "");
0313 NumberOfPVtxVsGoodPVtx->getTH1()->SetCanExtend(TH1::kAllAxes);
0314 NumberOfPVtxVsGoodPVtx->setAxisTitle("Number of Good PV", 1);
0315 NumberOfPVtxVsGoodPVtx->setAxisTitle("Mean number of PV", 2);
0316
0317 histname = "FractionOfGoodPVtxVsGoodPVtx_" + label_;
0318 FractionOfGoodPVtxVsGoodPVtx = ibooker.bookProfile(
0319 histname, histname, GoodPVtxBin, GoodPVtxMin, GoodPVtxMax, GoodPVtxMin, GoodPVtxMax * 3, "");
0320 FractionOfGoodPVtxVsGoodPVtx->getTH1()->SetCanExtend(TH1::kAllAxes);
0321 FractionOfGoodPVtxVsGoodPVtx->setAxisTitle("Number of Good PV", 1);
0322 FractionOfGoodPVtxVsGoodPVtx->setAxisTitle("Mean fraction of Good PV", 2);
0323
0324 histname = "FractionOfGoodPVtxVsPVtx_" + label_;
0325 FractionOfGoodPVtxVsPVtx = ibooker.bookProfile(
0326 histname, histname, GoodPVtxBin, GoodPVtxMin, GoodPVtxMax, GoodPVtxMin, GoodPVtxMax * 3, "");
0327 FractionOfGoodPVtxVsPVtx->getTH1()->SetCanExtend(TH1::kAllAxes);
0328 FractionOfGoodPVtxVsPVtx->setAxisTitle("Number of Good PV", 1);
0329 FractionOfGoodPVtxVsPVtx->setAxisTitle("Mean number of Good PV", 2);
0330
0331 histname = "NumberOfBADndofPVtxVsGoodPVtx_" + label_;
0332 NumberOfBADndofPVtxVsGoodPVtx = ibooker.bookProfile(
0333 histname, histname, GoodPVtxBin, GoodPVtxMin, GoodPVtxMax, GoodPVtxMin, GoodPVtxMax * 3, "");
0334 NumberOfBADndofPVtxVsGoodPVtx->getTH1()->SetCanExtend(TH1::kAllAxes);
0335 NumberOfBADndofPVtxVsGoodPVtx->setAxisTitle("Number of Good PV", 1);
0336 NumberOfBADndofPVtxVsGoodPVtx->setAxisTitle("Mean Number of BAD PV", 2);
0337
0338 histname = "GoodPVtxSumPtVsGoodPVtx_" + label_;
0339 GoodPVtxSumPtVsGoodPVtx = ibooker.bookProfile(
0340 histname, histname, GoodPVtxBin, GoodPVtxMin, GoodPVtxMax, SumPtPVtxMin, SumPtPVtxMax * 3, "");
0341 GoodPVtxSumPtVsGoodPVtx->getTH1()->SetCanExtend(TH1::kAllAxes);
0342 GoodPVtxSumPtVsGoodPVtx->setAxisTitle("Number of Good PV", 1);
0343 GoodPVtxSumPtVsGoodPVtx->setAxisTitle("Mean pv #Sum p_{T}^{2} [GeV^{2}/c]^{2}", 2);
0344
0345 histname = "GoodPVtxNumberOfTracksVsGoodPVtx_" + label_;
0346 GoodPVtxNumberOfTracksVsGoodPVtx = ibooker.bookProfile(
0347 histname, histname, GoodPVtxBin, GoodPVtxMin, GoodPVtxMax, NTrkPVtxMin, NTrkPVtxMax * 3, "");
0348 GoodPVtxNumberOfTracksVsGoodPVtx->getTH1()->SetCanExtend(TH1::kAllAxes);
0349 GoodPVtxNumberOfTracksVsGoodPVtx->setAxisTitle("Number of Good PV", 1);
0350 GoodPVtxNumberOfTracksVsGoodPVtx->setAxisTitle("Mean pv number of tracks", 2);
0351
0352
0353 double Chi2NDFMin = conf_.getParameter<double>("Chi2NDFMin");
0354 double Chi2NDFMax = conf_.getParameter<double>("Chi2NDFMax");
0355
0356 double Chi2ProbMin = conf_.getParameter<double>("Chi2ProbMin");
0357 double Chi2ProbMax = conf_.getParameter<double>("Chi2ProbMax");
0358
0359 histname = "GoodPVtxChi2oNDFVsGoodPVtx_" + label_;
0360 GoodPVtxChi2oNDFVsGoodPVtx =
0361 ibooker.bookProfile(histname, histname, GoodPVtxBin, GoodPVtxMin, GoodPVtxMax, Chi2NDFMin, Chi2NDFMax * 3, "");
0362 GoodPVtxChi2oNDFVsGoodPVtx->getTH1()->SetCanExtend(TH1::kAllAxes);
0363 GoodPVtxChi2oNDFVsGoodPVtx->setAxisTitle("Number of Good PV", 1);
0364 GoodPVtxChi2oNDFVsGoodPVtx->setAxisTitle("Mean PV #chi^{2}/ndof", 2);
0365
0366 histname = "GoodPVtxChi2ProbVsGoodPVtx_" + label_;
0367 GoodPVtxChi2ProbVsGoodPVtx = ibooker.bookProfile(
0368 histname, histname, GoodPVtxBin, GoodPVtxMin, GoodPVtxMax, Chi2ProbMin, Chi2ProbMax * 3, "");
0369 GoodPVtxChi2ProbVsGoodPVtx->getTH1()->SetCanExtend(TH1::kAllAxes);
0370 GoodPVtxChi2ProbVsGoodPVtx->setAxisTitle("Number of Good PV", 1);
0371 GoodPVtxChi2ProbVsGoodPVtx->setAxisTitle("Mean PV #chi^{2}/prob", 2);
0372 }
0373 }
0374
0375
0376 void VertexMonitor::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
0377
0378
0379 edm::ParameterSetDescription desc;
0380 desc.setUnknown();
0381 descriptions.addDefault(desc);
0382 }