Skip to content

Commit c9cf7eb

Browse files
authored
Merge pull request #48074 from mmusich/mm_fix_gpVertexAnalyzer
Alignment Validation: fix `GeneralPurposeVertexAnalyzer` configuration
2 parents e635e60 + 1265850 commit c9cf7eb

File tree

4 files changed

+57
-54
lines changed

4 files changed

+57
-54
lines changed

Alignment/OfflineValidation/plugins/GeneralPurposeVertexAnalyzer.cc

Lines changed: 51 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -32,17 +32,18 @@
3232
#include "CommonTools/UtilAlgos/interface/TFileService.h"
3333
#include "DataFormats/BeamSpot/interface/BeamSpot.h"
3434
#include "DataFormats/Common/interface/Association.h"
35+
#include "DataFormats/Common/interface/RefToBase.h"
3536
#include "DataFormats/Common/interface/ValueMap.h"
3637
#include "DataFormats/TrackReco/interface/Track.h"
3738
#include "DataFormats/TrackReco/interface/TrackFwd.h"
3839
#include "DataFormats/VertexReco/interface/Vertex.h"
3940
#include "DataFormats/VertexReco/interface/VertexFwd.h"
40-
#include "FWCore/ServiceRegistry/interface/Service.h"
4141
#include "FWCore/Framework/interface/Event.h"
4242
#include "FWCore/Framework/interface/Frameworkfwd.h"
4343
#include "FWCore/Framework/interface/MakerMacros.h"
4444
#include "FWCore/Framework/interface/one/EDAnalyzer.h"
4545
#include "FWCore/ParameterSet/interface/ParameterSet.h"
46+
#include "FWCore/ServiceRegistry/interface/Service.h"
4647
#include "FWCore/Utilities/interface/InputTag.h"
4748
#include "FWCore/Utilities/interface/isFinite.h"
4849

@@ -123,6 +124,7 @@ class GeneralPurposeVertexAnalyzer : public edm::one::EDAnalyzer<edm::one::Share
123124
TProfile2D *IPVsEtaVsPhi_, *IPErrVsEtaVsPhi_;
124125

125126
void bookIPMonitor(const edm::ParameterSet &, const edm::Service<TFileService> fs);
127+
void fillIPMonitor(const edm::RefToBase<reco::Track> &tk, const math::XYZPoint &pv);
126128
};
127129

128130
const edm::ParameterSet conf_;
@@ -187,23 +189,35 @@ class GeneralPurposeVertexAnalyzer : public edm::one::EDAnalyzer<edm::one::Share
187189

188190
void GeneralPurposeVertexAnalyzer::IPMonitoring::bookIPMonitor(const edm::ParameterSet &config,
189191
const edm::Service<TFileService> fs) {
192+
// Lambda for range validation
193+
auto checkRange = [](const std::string &name, double min, double max) {
194+
if (min >= max) {
195+
throw cms::Exception("IPMonitoring")
196+
<< "Invalid range for " << name << ": min (" << min << ") >= max (" << max << ")";
197+
}
198+
};
199+
190200
int VarBin = config.getParameter<int>(fmt::format("D{}Bin", varname_));
191201
double VarMin = config.getParameter<double>(fmt::format("D{}Min", varname_));
192202
double VarMax = config.getParameter<double>(fmt::format("D{}Max", varname_));
203+
checkRange(fmt::format("D{}", varname_), VarMin, VarMax);
193204

194205
int PhiBin = config.getParameter<int>("PhiBin");
195206
int PhiBin2D = config.getParameter<int>("PhiBin2D");
196207
double PhiMin = config.getParameter<double>("PhiMin");
197208
double PhiMax = config.getParameter<double>("PhiMax");
209+
checkRange("Phi", PhiMin, PhiMax);
198210

199211
int EtaBin = config.getParameter<int>("EtaBin");
200212
int EtaBin2D = config.getParameter<int>("EtaBin2D");
201213
double EtaMin = config.getParameter<double>("EtaMin");
202214
double EtaMax = config.getParameter<double>("EtaMax");
215+
checkRange("Eta", EtaMin, EtaMax);
203216

204217
int PtBin = config.getParameter<int>("PtBin");
205218
double PtMin = config.getParameter<double>("PtMin") * pTcut_;
206219
double PtMax = config.getParameter<double>("PtMax") * pTcut_;
220+
checkRange("Pt", PtMin, PtMax);
207221

208222
IP_ = fs->make<TH1D>(fmt::format("d{}_pt{}", varname_, pTcut_).c_str(),
209223
fmt::format("PV tracks (p_{{T}} > {} GeV) d_{{{}}} (#mum)", pTcut_, varname_).c_str(),
@@ -336,6 +350,38 @@ void GeneralPurposeVertexAnalyzer::IPMonitoring::bookIPMonitor(const edm::Parame
336350
fmt::format("PV tracks (p_{{T}} > {} GeV) d_{{{}}} error (#mum)", pTcut_, varname_).c_str());
337351
}
338352

353+
void GeneralPurposeVertexAnalyzer::IPMonitoring::fillIPMonitor(const edm::RefToBase<reco::Track> &tk,
354+
const math::XYZPoint &pv) {
355+
float value = 999.f, error = 9999.f;
356+
357+
if (varname_ == "xy") {
358+
value = tk->dxy(pv) * cmToUm;
359+
error = tk->dxyError() * cmToUm;
360+
} else if (varname_ == "z") {
361+
value = tk->dz(pv) * cmToUm;
362+
error = tk->dzError() * cmToUm;
363+
} else {
364+
throw cms::Exception("IPMonitoring") << "Unknown varname: " << varname_ << ". Expected 'xy' or 'z\'.";
365+
}
366+
367+
const float eta = tk->eta();
368+
const float phi = tk->phi();
369+
const float pt = tk->pt();
370+
371+
IP_->Fill(value);
372+
IPVsPhi_->Fill(phi, value);
373+
IPVsEta_->Fill(eta, value);
374+
IPVsPt_->Fill(pt, value);
375+
IPVsEtaVsPhi_->Fill(eta, phi, value);
376+
377+
IPErr_->Fill(error);
378+
IPPull_->Fill(value / error);
379+
IPErrVsPhi_->Fill(phi, error);
380+
IPErrVsEta_->Fill(eta, error);
381+
IPErrVsPt_->Fill(pt, error);
382+
IPErrVsEtaVsPhi_->Fill(eta, phi, error);
383+
}
384+
339385
//
340386
// constructors and destructor
341387
//
@@ -510,9 +556,6 @@ void GeneralPurposeVertexAnalyzer::pvTracksPlots(const reco::Vertex &v) {
510556
const float chi2NDF = t->normalizedChi2();
511557
const float chi2Prob = TMath::Prob(t->chi2(), static_cast<int>(t->ndof()));
512558
const float Dxy = t->dxy(myVertex) * cmToUm;
513-
const float Dz = t->dz(myVertex) * cmToUm;
514-
const float DxyErr = t->dxyError() * cmToUm;
515-
const float DzErr = t->dzError() * cmToUm;
516559

517560
sumPT += pt2;
518561

@@ -524,60 +567,20 @@ void GeneralPurposeVertexAnalyzer::pvTracksPlots(const reco::Vertex &v) {
524567
eta_pt1->Fill(eta);
525568

526569
// dxy pT>1
527-
528-
dxy_pt1.IP_->Fill(Dxy);
529-
dxy_pt1.IPVsPhi_->Fill(phi, Dxy);
530-
dxy_pt1.IPVsEta_->Fill(eta, Dxy);
531-
dxy_pt1.IPVsEtaVsPhi_->Fill(eta, phi, Dxy);
532-
533-
dxy_pt1.IPErr_->Fill(DxyErr);
534-
dxy_pt1.IPPull_->Fill(Dxy / DxyErr);
535-
dxy_pt1.IPErrVsPhi_->Fill(phi, DxyErr);
536-
dxy_pt1.IPErrVsEta_->Fill(eta, DxyErr);
537-
dxy_pt1.IPErrVsEtaVsPhi_->Fill(eta, phi, DxyErr);
570+
dxy_pt1.fillIPMonitor(t, myVertex);
538571

539572
// dz pT>1
540-
541-
dz_pt1.IP_->Fill(Dz);
542-
dz_pt1.IPVsPhi_->Fill(phi, Dz);
543-
dz_pt1.IPVsEta_->Fill(eta, Dz);
544-
dz_pt1.IPVsEtaVsPhi_->Fill(eta, phi, Dz);
545-
546-
dz_pt1.IPErr_->Fill(DzErr);
547-
dz_pt1.IPPull_->Fill(Dz / DzErr);
548-
dz_pt1.IPErrVsPhi_->Fill(phi, DzErr);
549-
dz_pt1.IPErrVsEta_->Fill(eta, DzErr);
550-
dz_pt1.IPErrVsEtaVsPhi_->Fill(eta, phi, DzErr);
573+
dz_pt1.fillIPMonitor(t, myVertex);
551574

552575
if (pt >= 10.f) {
553576
phi_pt10->Fill(phi);
554577
eta_pt10->Fill(eta);
555578

556579
// dxy pT>10
557-
558-
dxy_pt10.IP_->Fill(Dxy);
559-
dxy_pt10.IPVsPhi_->Fill(phi, Dxy);
560-
dxy_pt10.IPVsEta_->Fill(eta, Dxy);
561-
dxy_pt10.IPVsEtaVsPhi_->Fill(eta, phi, Dxy);
562-
563-
dxy_pt10.IPErr_->Fill(DxyErr);
564-
dxy_pt10.IPPull_->Fill(Dxy / DxyErr);
565-
dxy_pt10.IPErrVsPhi_->Fill(phi, DxyErr);
566-
dxy_pt10.IPErrVsEta_->Fill(eta, DxyErr);
567-
dxy_pt10.IPErrVsEtaVsPhi_->Fill(eta, phi, DxyErr);
580+
dxy_pt10.fillIPMonitor(t, myVertex);
568581

569582
// dz pT>10
570-
571-
dz_pt10.IP_->Fill(Dz);
572-
dz_pt10.IPVsPhi_->Fill(phi, Dz);
573-
dz_pt10.IPVsEta_->Fill(eta, Dz);
574-
dz_pt10.IPVsEtaVsPhi_->Fill(eta, phi, Dz);
575-
576-
dz_pt10.IPErr_->Fill(DzErr);
577-
dz_pt10.IPPull_->Fill(Dz / DzErr);
578-
dz_pt10.IPErrVsPhi_->Fill(phi, DzErr);
579-
dz_pt10.IPErrVsEta_->Fill(eta, DzErr);
580-
dz_pt10.IPErrVsEtaVsPhi_->Fill(eta, phi, DzErr);
583+
dz_pt10.fillIPMonitor(t, myVertex);
581584
}
582585
}
583586

Alignment/OfflineValidation/python/TkAlAllInOneTool/GenericV_cfg.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -182,8 +182,8 @@
182182
TkSizeMin = cms.double(499.5),
183183
TkSizeMax = cms.double(-0.5),
184184
DxyBin = cms.int32(100),
185-
DxyMin = cms.double(5000),
186-
DxyMax = cms.double(-5000),
185+
DxyMin = cms.double(-2000),
186+
DxyMax = cms.double(2000),
187187
DzBin = cms.int32(100),
188188
DzMin = cms.double(-2000),
189189
DzMax = cms.double(2000),

Alignment/OfflineValidation/test/testPrimaryVertexRelatedValidations_cfg.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -405,8 +405,8 @@ def switchClusterizerParameters(da):
405405
TkSizeMin = cms.double(499.5),
406406
TkSizeMax = cms.double(-0.5),
407407
DxyBin = cms.int32(100),
408-
DxyMin = cms.double(5000),
409-
DxyMax = cms.double(-5000),
408+
DxyMin = cms.double(-2000),
409+
DxyMax = cms.double(2000),
410410
DzBin = cms.int32(100),
411411
DzMin = cms.double(-2000),
412412
DzMax = cms.double(2000),

DQMOffline/RecoB/plugins/PrimaryVertexMonitor.cc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -549,7 +549,7 @@ void PrimaryVertexMonitor::pvTracksPlots(const Vertex& v) {
549549
dz_pt1.IPPull_->Fill(Dz / DzErr);
550550
dz_pt1.IPErrVsPhi_->Fill(phi, DzErr);
551551
dz_pt1.IPErrVsEta_->Fill(eta, DzErr);
552-
dz_pt1.IPErrVsPt_->Fill(pt, DxyErr);
552+
dz_pt1.IPErrVsPt_->Fill(pt, DzErr);
553553
dz_pt1.IPErrVsEtaVsPhi_->Fill(eta, phi, DzErr);
554554

555555
if (pt < 10.)
@@ -585,7 +585,7 @@ void PrimaryVertexMonitor::pvTracksPlots(const Vertex& v) {
585585
dz_pt10.IPPull_->Fill(Dz / DzErr);
586586
dz_pt10.IPErrVsPhi_->Fill(phi, DzErr);
587587
dz_pt10.IPErrVsEta_->Fill(eta, DzErr);
588-
dz_pt10.IPErrVsPt_->Fill(pt, DxyErr);
588+
dz_pt10.IPErrVsPt_->Fill(pt, DzErr);
589589
dz_pt10.IPErrVsEtaVsPhi_->Fill(eta, phi, DzErr);
590590
}
591591
ntracks->Fill(float(nTracks));

0 commit comments

Comments
 (0)