25 #include <boost/range/adaptor/indexed.hpp> 76 compressionSettings_(iConfig.getUntrackedParameter<
int>(
"compressionSettings", -1)),
77 storeNtuple_(iConfig.getParameter<
bool>(
"storeNtuple")),
78 lightNtupleSwitch_(iConfig.getParameter<
bool>(
"isLightNtuple")),
79 useTracksFromRecoVtx_(iConfig.getParameter<
bool>(
"useTracksFromRecoVtx")),
80 vertexZMax_(iConfig.getUntrackedParameter<double>(
"vertexZMax", 99.)),
81 intLumi_(iConfig.getUntrackedParameter<double>(
"intLumi", 0.)),
82 askFirstLayerHit_(iConfig.getParameter<
bool>(
"askFirstLayerHit")),
83 doBPix_(iConfig.getUntrackedParameter<
bool>(
"doBPix",
true)),
84 doFPix_(iConfig.getUntrackedParameter<
bool>(
"doFPix",
true)),
85 ptOfProbe_(iConfig.getUntrackedParameter<double>(
"probePt", 0.)),
86 pOfProbe_(iConfig.getUntrackedParameter<double>(
"probeP", 0.)),
87 etaOfProbe_(iConfig.getUntrackedParameter<double>(
"probeEta", 2.4)),
88 nHitsOfProbe_(iConfig.getUntrackedParameter<double>(
"probeNHits", 0.)),
89 nBins_(iConfig.getUntrackedParameter<
int>(
"numberOfBins", 24)),
90 minPt_(iConfig.getUntrackedParameter<double>(
"minPt", 1.)),
91 maxPt_(iConfig.getUntrackedParameter<double>(
"maxPt", 20.)),
92 debug_(iConfig.getParameter<
bool>(
"Debug")),
93 runControl_(iConfig.getUntrackedParameter<
bool>(
"runControl",
false)),
94 forceBeamSpotContraint_(iConfig.getUntrackedParameter<
bool>(
"forceBeamSpot",
false)) {
100 std::vector<unsigned int> defaultRuns;
101 defaultRuns.push_back(0);
119 if (clusteringAlgorithm ==
"gap") {
122 .getParameter<edm::ParameterSet>(
"TkGapClusParameters"));
123 }
else if (clusteringAlgorithm ==
"DA") {
126 .getParameter<edm::ParameterSet>(
"TkDAClusParameters"));
128 }
else if (clusteringAlgorithm ==
"DA_vect") {
131 .getParameter<edm::ParameterSet>(
"TkDAClusParameters"));
133 throw VertexException(
"PrimaryVertexProducerAlgorithm: unknown clustering algorithm: " + clusteringAlgorithm);
164 edm::LogVerbatim(
"PrimaryVertexValidation") <<
"######################################";
169 << std::setw(5) << it.second.second <<
") |" << std::endl;
200 edm::LogVerbatim(
"PrimaryVertexValidation") <<
"######################################\n";
201 edm::LogVerbatim(
"PrimaryVertexValidation") <<
"The pT binning is: [" << toOutput <<
"] \n";
213 using namespace reco;
220 bool passesRunControl =
false;
224 if (
iEvent.eventAuxiliary().run() == runControlNumber) {
227 <<
" run number: " <<
iEvent.eventAuxiliary().run() <<
" keeping run:" << runControlNumber;
229 passesRunControl =
true;
233 if (!passesRunControl)
268 double fBfield_ = ((*theB_).field()->inTesla(
GlobalPoint(0., 0., 0.))).
z();
275 if (!trackCollectionHandle.
isValid())
277 auto const&
tracks = *trackCollectionHandle;
289 LogTrace(
"PrimaryVertexValidation") <<
"caught std::exception " << er.
what() << std::endl;
292 std::vector<Vertex> vsorted = *(
vertices);
323 unsigned int vertexCollectionSize = vsorted.size();
326 for (
unsigned int i = 0;
i < vertexCollectionSize;
i++) {
339 double chi2prob = 0.;
341 if (!vsorted.at(0).isFake()) {
345 chi2ndf =
pv.normalizedChi2();
346 chi2prob = TMath::Prob(
pv.chi2(), (
int)
pv.ndof());
353 double pt = (**itrk).pt();
358 double dxyRes = (**itrk).dxy(myVertex);
359 double dzRes = (**itrk).dz(myVertex);
361 double dxy_err = (**itrk).dxyError();
362 double dz_err = (**itrk).dzError();
364 float trackphi = ((**itrk).phi()) * (180 /
M_PI);
365 float tracketa = (**itrk).eta();
374 if (tracketa >= etaF && tracketa < etaL) {
381 if (trackphi >= phiF && trackphi < phiL) {
391 if (tracketa >= etaJ && tracketa < etaK) {
414 if (beamSpotHandle.
isValid()) {
449 edm::LogInfo(
"PrimaryVertexValidation") <<
" looping over " << trackCollectionHandle->size() <<
"tracks";
451 h_nTracks->Fill(trackCollectionHandle->size());
457 std::vector<TransientTrack> t_tks;
465 edm::LogInfo(
"PrimaryVertexValidation") <<
"Found: " << t_tks.size() <<
" reconstructed tracks";
482 <<
" looping over: " <<
clusters.size() <<
" clusters from " << t_tks.size() <<
" selected tracks";
491 for (
const auto& iclus :
clusters) {
495 for (
const auto& theTTrack : iclus) {
504 const Track& theTrack = theTTrack.track();
538 int nhitinTIB =
hits.numberOfValidStripTIBHits();
539 int nhitinTOB =
hits.numberOfValidStripTOBHits();
540 int nhitinTID =
hits.numberOfValidStripTIDHits();
541 int nhitinTEC =
hits.numberOfValidStripTECHits();
542 int nhitinBPIX =
hits.numberOfValidPixelBarrelHits();
543 int nhitinFPIX =
hits.numberOfValidPixelEndcapHits();
545 if ((*iHit)->isValid()) {
579 vector<TransientTrack> theFinalTracks;
580 theFinalTracks.clear();
582 for (
const auto& tk : iclus) {
588 theFinalTracks.push_back(tk);
593 if (theFinalTracks.size() > 1) {
595 edm::LogInfo(
"PrimaryVertexValidation") <<
"Transient Track Collection size: " << theFinalTracks.size();
602 theFittedVertex = theFitter->vertex(theFinalTracks,
beamSpot);
604 theFittedVertex = theFitter->vertex(theFinalTracks);
607 double totalTrackWeights = 0;
608 if (theFittedVertex.isValid()) {
609 if (theFittedVertex.hasTrackWeight()) {
610 for (
const auto& theFinalTrack : theFinalTracks) {
612 totalTrackWeights += theFittedVertex.trackWeight(theFinalTrack);
621 theFittedVertex.position().x(), theFittedVertex.position().y(), theFittedVertex.position().z());
635 TMath::Prob(theFittedVertex.totalChiSquared(), (
int)theFittedVertex.degreesOfFreedom());
643 TMath::Prob(theFittedVertex.totalChiSquared(), (
int)theFittedVertex.degreesOfFreedom()));
646 double dxyFromMyVertex = theTrack.
dxy(myVertex);
647 double dzFromMyVertex = theTrack.
dz(myVertex);
650 theFittedVertex.position().x(), theFittedVertex.position().y(), theFittedVertex.position().z());
656 double dz_err =
sqrt(
std::pow(theTrack.
dzError(), 2) + theFittedVertex.positionError().czz());
660 theTTrack,
GlobalVector(theTrack.
px(), theTrack.
py(), theTrack.
pz()), theFittedVertex);
662 double s_ip2dpv_corr = s_ip2dpv.second.value();
663 double s_ip2dpv_err = s_ip2dpv.second.error();
667 theTTrack,
GlobalVector(theTrack.
px(), theTrack.
py(), theTrack.
pz()), theFittedVertex);
669 double s_ip3dpv_corr = s_ip3dpv.second.value();
670 double s_ip3dpv_err = s_ip3dpv.second.error();
674 double ip3d_corr = ip3dpv.second.value();
675 double ip3d_err = ip3dpv.second.error();
683 float my_dx = refPoint.
x() - myVertex.x();
684 float my_dy = refPoint.
y() - myVertex.y();
686 float my_dx2 = cPToVtx.
x() - myVertex.x();
687 float my_dy2 = cPToVtx.
y() - myVertex.y();
689 float my_dxy =
std::sqrt(my_dx * my_dx + my_dy * my_dy);
698 <<
"my_dx:" << my_dx <<
" my_dy:" << my_dy <<
" my_dxy:" << my_dxy <<
" my_dx2:" << my_dx2
699 <<
" my_dy2:" << my_dy2 <<
" d0: " <<
d0 <<
" dxyFromVtx:" << dxyFromMyVertex <<
"\n" 700 <<
" ============================== " 704 <<
"diff3:" << (my_dx - my_dx2) <<
" " << (my_dy - my_dy2) <<
"\n" 724 float trackphi = (theTrack.
phi()) * (180. /
M_PI);
725 float tracketa = theTrack.
eta();
726 float trackpt = theTrack.
pt();
727 float trackp = theTrack.
p();
732 int ladder_num = -1.;
733 int module_num = -1.;
734 int L1BPixHitCount = 0;
737 const DetId& detId =
hit->geographicalId();
738 unsigned int subid = detId.
subdetId();
746 if (clusterProbability > 0) {
763 if (module_num > 0 && ladder_num > 0) {
772 for (
int ipTBin = 0; ipTBin <
nPtBins_; ipTBin++) {
778 <<
" < pT < " <<
mypT_bins_[ipTBin + 1] << std::endl;
780 if (
std::abs(tracketa) < 1.5 && (trackpt >= pTF && trackpt < pTL)) {
791 <<
"passes tight eta cut: " <<
mypT_bins_[ipTBin] << std::endl;
806 if (pixelOcc.first ==
true)
807 edm::LogInfo(
"PrimaryVertexValidation") <<
"has BPIx hits" << std::endl;
808 if (pixelOcc.second ==
true)
809 edm::LogInfo(
"PrimaryVertexValidation") <<
"has FPix hits" << std::endl;
812 if (!
doBPix_ && (pixelOcc.first ==
true))
814 if (!
doFPix_ && (pixelOcc.second ==
true))
842 float dxyRecoV = theTrack.
dz(theRecoVertex);
843 float dzRecoV = theTrack.
dxy(theRecoVertex);
844 float dxysigmaRecoV =
849 double zTrack = (theTTrack.stateAtBeamLine().trackStateAtPCA()).
position().z();
850 double zVertex = theFittedVertex.position().z();
851 double tantheta =
tan((theTTrack.stateAtBeamLine().trackStateAtPCA()).momentum().theta());
854 double restrkz = zTrack -
zVertex;
855 double pulltrkz = (zTrack -
zVertex) / TMath::Sqrt(dz2);
880 n_dxyVsPhi->Fill(trackphi, dxyFromMyVertex / s_ip2dpv_err);
885 n_dxyVsEta->Fill(tracketa, dxyFromMyVertex / s_ip2dpv_err);
888 if (ladder_num > 0 && module_num > 0) {
890 <<
" ladder_num: " << ladder_num <<
" module_num: " << module_num << std::endl;
901 if (L1BPixHitCount == 1) {
922 if (tracketa >= etaF && tracketa < etaL) {
939 if (trackphi >= phiF && trackphi < phiL) {
959 if (tracketa >= etaJ && tracketa < etaK) {
974 <<
" myVertex.x()= " << myVertex.x() <<
"\n" 975 <<
" myVertex.y()= " << myVertex.y() <<
" \n" 976 <<
" myVertex.z()= " << myVertex.z() <<
" \n" 977 <<
" theTrack.dz(myVertex)= " << theTrack.
dz(myVertex) <<
" \n" 978 <<
" zPCA -myVertex.z() = " << (theTrack.
vertex().z() - myVertex.z());
986 LogTrace(
"PrimaryVertexValidation") <<
"caught std::exception " << er.
what() << std::endl;
993 edm::LogInfo(
"PrimaryVertexValidation") <<
"Not enough tracks to make a vertex. Returns no vertex info";
1000 edm::LogInfo(
"PrimaryVertexValidation") <<
"Track " <<
i <<
" : pT = " << theTrack.
pt();
1014 if (
hit.dimension() < 2) {
1017 const DetId detId(
hit.geographicalId());
1022 if (dynamic_cast<const SiStripRecHit2D*>(&
hit))
1024 else if (dynamic_cast<const SiStripMatchedRecHit2D*>(&
hit))
1026 else if (dynamic_cast<const ProjectedSiStripRecHit2D*>(&
hit))
1029 edm::LogError(
"UnknownType") <<
"@SUB=PrimaryVertexValidation::isHit2D" 1030 <<
"Tracker hit not in pixel and neither SiStripRecHit2D nor " 1031 <<
"SiStripMatchedRecHit2D nor ProjectedSiStripRecHit2D.";
1038 edm::LogWarning(
"DetectorMismatch") <<
"@SUB=PrimaryVertexValidation::isHit2D" 1039 <<
"Hit not in tracker with 'official' dimension >=2.";
1048 bool hasBPixHits =
false;
1049 bool hasFPixHits =
false;
1052 if (
p.numberOfValidPixelEndcapHits() != 0) {
1055 if (
p.numberOfValidPixelBarrelHits() != 0) {
1059 return std::make_pair(hasBPixHits, hasFPixHits);
1064 using namespace reco;
1066 for (
int i = 0;
i <
p.numberOfAllHits(HitPattern::TRACK_HITS);
i++) {
1067 uint32_t
pattern =
p.getHitPattern(HitPattern::TRACK_HITS,
i);
1081 edm::LogInfo(
"PrimaryVertexValidation") <<
"######################################\n" 1083 <<
"######################################";
1177 TH1F::SetDefaultSumw2(kTRUE);
1180 EventFeatures.
make<TH1F>(
"h_lumiFromConfig",
"luminosity from config;;luminosity of present run", 1, -0.5, 0.5);
1184 "run number from config;;run number (from configuration)",
1194 EventFeatures.
make<TH1I>(
"h_runFromEvent",
"run number from event;;run number (from event)", 1, -0.5, 0.5);
1196 EventFeatures.
make<TH1F>(
"h_nTracks",
"number of tracks per event;n_{tracks}/event;n_{events}", 300, -0.5, 299.5);
1198 EventFeatures.
make<TH1F>(
"h_nClus",
"number of track clusters;n_{clusters}/event;n_{events}", 50, -0.5, 49.5);
1200 "h_nOfflineVertices",
"number of offline reconstructed vertices;n_{vertices}/event;n_{events}", 50, -0.5, 49.5);
1201 h_runNumber = EventFeatures.
make<TH1F>(
"h_runNumber",
"run number;run number;n_{events}", 100000, 250000., 350000.);
1203 "h_xOfflineVertex",
"x-coordinate of offline vertex;x_{vertex};n_{events}", 100, -0.1, 0.1);
1205 "h_yOfflineVertex",
"y-coordinate of offline vertex;y_{vertex};n_{events}", 100, -0.1, 0.1);
1207 "h_zOfflineVertex",
"z-coordinate of offline vertex;z_{vertex};n_{events}", 100, -30., 30.);
1209 "h_xErrOfflineVertex",
"x-coordinate error of offline vertex;err_{x}^{vtx};n_{events}", 100, 0., 0.01);
1211 "h_yErrOfflineVertex",
"y-coordinate error of offline vertex;err_{y}^{vtx};n_{events}", 100, 0., 0.01);
1213 "h_zErrOfflineVertex",
"z-coordinate error of offline vertex;err_{z}^{vtx};n_{events}", 100, 0., 10.);
1214 h_BSx0 = EventFeatures.
make<TH1F>(
"h_BSx0",
"x-coordinate of reco beamspot;x^{BS}_{0};n_{events}", 100, -0.1, 0.1);
1215 h_BSy0 = EventFeatures.
make<TH1F>(
"h_BSy0",
"y-coordinate of reco beamspot;y^{BS}_{0};n_{events}", 100, -0.1, 0.1);
1216 h_BSz0 = EventFeatures.
make<TH1F>(
"h_BSz0",
"z-coordinate of reco beamspot;z^{BS}_{0};n_{events}", 100, -1., 1.);
1218 EventFeatures.
make<TH1F>(
"h_Beamsigmaz",
"z-coordinate beam width;#sigma_{Z}^{beam};n_{events}", 100, 0., 1.);
1220 EventFeatures.
make<TH1F>(
"h_BeamWidthX",
"x-coordinate beam width;#sigma_{X}^{beam};n_{events}", 100, 0., 0.01);
1222 EventFeatures.
make<TH1F>(
"h_BeamWidthY",
"y-coordinate beam width;#sigma_{Y}^{beam};n_{events}", 100, 0., 0.01);
1224 h_etaMax = EventFeatures.
make<TH1F>(
"etaMax",
"etaMax", 1, -0.5, 0.5);
1225 h_pTinfo = EventFeatures.
make<TH1F>(
"pTinfo",
"pTinfo", 3, -1.5, 1.5);
1226 h_pTinfo->GetXaxis()->SetBinLabel(1,
"n. bins");
1227 h_pTinfo->GetXaxis()->SetBinLabel(2,
"pT min");
1228 h_pTinfo->GetXaxis()->SetBinLabel(3,
"pT max");
1230 h_nbins = EventFeatures.
make<TH1F>(
"nbins",
"nbins", 1, -0.5, 0.5);
1231 h_nLadders = EventFeatures.
make<TH1F>(
"nladders",
"n. ladders", 1, -0.5, 0.5);
1232 h_nModZ = EventFeatures.
make<TH1F>(
"nModZ",
"n. modules along z", 1, -0.5, 0.5);
1237 h_probePt_ = ProbeFeatures.
make<TH1F>(
"h_probePt",
"p_{T} of probe track;track p_{T} (GeV); tracks", 100, 0., 50.);
1239 "h_probePtRebin",
"p_{T} of probe track;track p_{T} (GeV); tracks",
mypT_bins_.size() - 1,
mypT_bins_.data());
1240 h_probeP_ = ProbeFeatures.
make<TH1F>(
"h_probeP",
"momentum of probe track;track p (GeV); tracks", 100, 0., 100.);
1243 h_probePhi_ = ProbeFeatures.
make<TH1F>(
"h_probePhi",
"#phi of probe track;track #phi (rad);tracks", 100, -3.15, 3.15);
1246 ProbeFeatures.
make<TH2F>(
"h2_probeEtaPhi",
1247 "probe track #phi vs #eta;#eta of probe track;track #phi of probe track (rad); tracks",
1255 "probe track p_{T} vs #eta;#eta of probe track;track p_{T} (GeV); tracks",
1264 ProbeFeatures.
make<TH1F>(
"h_probeChi2",
"#chi^{2} of probe track;track #chi^{2}; tracks", 100, 0., 100.);
1266 "h_probeNormChi2",
" normalized #chi^{2} of probe track;track #chi^{2}/ndof; tracks", 100, 0., 10.);
1268 ProbeFeatures.
make<TH1F>(
"h_probeCharge",
"charge of probe track;track charge Q;tracks", 3, -1.5, 1.5);
1270 ProbeFeatures.
make<TH1F>(
"h_probeQoverP",
"q/p of probe track; track Q/p (GeV^{-1});tracks", 200, -1., 1.);
1272 "h_probedzRecoV",
"d_{z}(V_{offline}) of probe track;track d_{z}(V_{off}) (cm);tracks", 200, -1., 1.);
1274 "h_probedxyRecoV",
"d_{xy}(V_{offline}) of probe track;track d_{xy}(V_{off}) (cm);tracks", 200, -1., 1.);
1276 "h_probedzRefitV",
"d_{z}(V_{refit}) of probe track;track d_{z}(V_{fit}) (cm);tracks", 200, -0.5, 0.5);
1278 "h_probesignIPRefitV",
"ip_{2D}(V_{refit}) of probe track;track ip_{2D}(V_{fit}) (cm);tracks", 200, -1., 1.);
1280 "h_probedxyRefitV",
"d_{xy}(V_{refit}) of probe track;track d_{xy}(V_{fit}) (cm);tracks", 200, -0.5, 0.5);
1283 "h_probez0RefitV",
"z_{0}(V_{refit}) of probe track;track z_{0}(V_{fit}) (cm);tracks", 200, -1., 1.);
1285 "h_probed0RefitV",
"d_{0}(V_{refit}) of probe track;track d_{0}(V_{fit}) (cm);tracks", 200, -1., 1.);
1288 "h_probed3DRefitV",
"d_{3D}(V_{refit}) of probe track;track d_{3D}(V_{fit}) (cm);tracks", 200, 0., 1.);
1290 "h_probeReszRefitV",
"z_{track} -z_{V_{refit}};track res_{z}(V_{refit}) (cm);tracks", 200, -1., 1.);
1293 "h_probeRecoVSigZ",
"Longitudinal DCA Significance (reco);d_{z}(V_{off})/#sigma_{dz};tracks", 100, -8, 8);
1295 "h_probeRecoVSigXY",
"Transverse DCA Significance (reco);d_{xy}(V_{off})/#sigma_{dxy};tracks", 100, -8, 8);
1297 "h_probeRefitVSigZ",
"Longitudinal DCA Significance (refit);d_{z}(V_{fit})/#sigma_{dz};tracks", 100, -8, 8);
1299 "h_probeRefitVSigXY",
"Transverse DCA Significance (refit);d_{xy}(V_{fit})/#sigma_{dxy};tracks", 100, -8, 8);
1301 "h_probeRefitVSig3D",
"3D DCA Significance (refit);d_{3D}/#sigma_{3D};tracks", 100, 0., 20.);
1303 ProbeFeatures.
make<TH1F>(
"h_probeRefitVLogSig3D",
1304 "log_{10}(3D DCA-Significance) (refit);log_{10}(d_{3D}/#sigma_{3D});tracks",
1309 "h_probeRefitVSigResZ",
1310 "Longitudinal residual significance (refit);(z_{track} -z_{V_{fit}})/#sigma_{res_{z}};tracks",
1315 h_probeHits_ = ProbeFeatures.
make<TH1F>(
"h_probeNRechits",
"N_{hits} ;N_{hits} ;tracks", 40, -0.5, 39.5);
1316 h_probeHits1D_ = ProbeFeatures.
make<TH1F>(
"h_probeNRechits1D",
"N_{hits} 1D ;N_{hits} 1D ;tracks", 40, -0.5, 39.5);
1317 h_probeHits2D_ = ProbeFeatures.
make<TH1F>(
"h_probeNRechits2D",
"N_{hits} 2D ;N_{hits} 2D ;tracks", 40, -0.5, 39.5);
1319 ProbeFeatures.
make<TH1F>(
"h_probeNRechitsTIB",
"N_{hits} TIB ;N_{hits} TIB;tracks", 40, -0.5, 39.5);
1321 ProbeFeatures.
make<TH1F>(
"h_probeNRechitsTOB",
"N_{hits} TOB ;N_{hits} TOB;tracks", 40, -0.5, 39.5);
1323 ProbeFeatures.
make<TH1F>(
"h_probeNRechitsTID",
"N_{hits} TID ;N_{hits} TID;tracks", 40, -0.5, 39.5);
1325 ProbeFeatures.
make<TH1F>(
"h_probeNRechitsTEC",
"N_{hits} TEC ;N_{hits} TEC;tracks", 40, -0.5, 39.5);
1327 ProbeFeatures.
make<TH1F>(
"h_probeNRechitsBPIX",
"N_{hits} BPIX;N_{hits} BPIX;tracks", 40, -0.5, 39.5);
1329 ProbeFeatures.
make<TH1F>(
"h_probeNRechitsFPIX",
"N_{hits} FPIX;N_{hits} FPIX;tracks", 40, -0.5, 39.5);
1332 "h_probeL1Ladder",
"Ladder number (L1 hit); ladder number",
nLadders_ + 2, -1.5,
nLadders_ + 0.5);
1334 "h_probeL1Module",
"Module number (L1 hit); module number",
nModZ_ + 2, -1.5,
nModZ_ + 0.5);
1337 "Position in Layer 1 of first hit;module number;ladder number",
1346 "Position in Layer 1 of first hit;module number;ladder number",
1354 ProbeFeatures.
make<TH1I>(
"h_probeHasBPixL1Overlap",
"n. hits in L1;n. L1-BPix hits;tracks", 5, -0.5, 4.5);
1356 "h_probeL1ClusterProb",
1357 "log_{10}(Cluster Probability) for Layer1 hits;log_{10}(cluster probability); n. Layer1 hits",
1365 "h_fitVtxNtracks",
"N_{trks} used in vertex fit;N^{fit}_{tracks};vertices", 100, -0.5, 99.5);
1367 "h_fitVtxNdof",
"N_{DOF} of vertex fit;N_{DOF} of refit vertex;vertices", 100, -0.5, 99.5);
1369 "h_fitVtxChi2",
"#chi^{2} of vertex fit;vertex #chi^{2};vertices", 100, -0.5, 99.5);
1371 "h_fitVtxChi2ndf",
"#chi^{2}/ndf of vertex fit;vertex #chi^{2}/ndf;vertices", 100, -0.5, 9.5);
1373 "h_fitVtxChi2Prob",
"Prob(#chi^{2},ndf) of vertex fit;Prob(#chi^{2},ndf);vertices", 40, 0., 1.);
1375 "h_fitVtxTrackWeights",
"track weights associated to track;track weights;tracks", 40, 0., 1.);
1377 "h_fitVtxTrackAverageWeight_",
"average track weight per vertex;#LT track weight #GT;vertices", 40, 0., 1.);
1382 RecoVertexFeatures.
make<TH1F>(
"h_recoVtxNtracks",
"N^{vtx}_{trks};N^{vtx}_{trks};vertices", 100, -0.5, 99.5);
1384 RecoVertexFeatures.
make<TH1F>(
"h_recoVtxChi2ndf",
"#chi^{2}/ndf vtx;#chi^{2}/ndf vtx;vertices", 10, -0.5, 9.5);
1386 "h_recoVtxChi2Prob",
"Prob(#chi^{2},ndf);Prob(#chi^{2},ndf);vertices", 40, 0., 1.);
1388 RecoVertexFeatures.
make<TH1F>(
"h_recoVtxSumPt",
"Sum(p^{trks}_{T});Sum(p^{trks}_{T});vertices", 100, 0., 200.);
1553 for (
unsigned int iLadder = 0; iLadder <
nLadders_; iLadder++) {
1554 for (
unsigned int iModule = 0; iModule <
nModZ_; iModule++) {
1556 AbsL1Map.
make<TH1F>(Form(
"histo_dxy_ladder%i_module%i", iLadder, iModule),
1557 Form(
"d_{xy} ladder=%i module=%i;d_{xy} [#mum];tracks", iLadder, iModule),
1563 AbsL1Map.
make<TH1F>(Form(
"histo_dz_ladder%i_module%i", iLadder, iModule),
1564 Form(
"d_{z} ladder=%i module=%i;d_{z} [#mum];tracks", iLadder, iModule),
1570 NormL1Map.
make<TH1F>(Form(
"histo_norm_dxy_ladder%i_module%i", iLadder, iModule),
1571 Form(
"d_{xy} ladder=%i module=%i;d_{xy}/#sigma_{d_{xy}};tracks", iLadder, iModule),
1577 NormL1Map.
make<TH1F>(Form(
"histo_norm_dz_ladder%i_module%i", iLadder, iModule),
1578 Form(
"d_{z} ladder=%i module=%i;d_{z}/#sigma_{d_{z}};tracks", iLadder, iModule),
1601 Form(
"histo_dxy_eta_plot%i_phi_plot%i",
i,
j),
1602 Form(
"%.2f<#eta_{tk}<%.2f %.2f#circ<#varphi_{tk}<%.2f#circ;d_{xy};tracks", etaF, etaL, phiF, phiL),
1608 Form(
"histo_dz_eta_plot%i_phi_plot%i",
i,
j),
1609 Form(
"%.2f<#eta_{tk}<%.2f %.2f#circ<#varphi_{tk}<%.2f#circ;d_{z};tracks", etaF, etaL, phiF, phiL),
1615 Form(
"histo_d3D_eta_plot%i_phi_plot%i",
i,
j),
1616 Form(
"%.2f<#eta_{tk}<%.2f %.2f#circ<#varphi_{tk}<%.2f#circ;d_{3D};tracks", etaF, etaL, phiF, phiL),
1622 Form(
"histo_norm_dxy_eta_plot%i_phi_plot%i",
i,
j),
1623 Form(
"%.2f<#eta_{tk}<%.2f %.2f#circ<#varphi_{tk}<%.2f#circ;d_{xy}/#sigma_{d_{xy}};tracks",
1633 Form(
"histo_norm_dz_eta_plot%i_phi_plot%i",
i,
j),
1634 Form(
"%.2f<#eta_{tk}<%.2f %.2f#circ<#varphi_{tk}<%.2f#circ;d_{z}/#sigma_{d_{z}};tracks",
1644 Form(
"histo_norm_d3D_eta_plot%i_phi_plot%i",
i,
j),
1645 Form(
"%.2f<#eta_{tk}<%.2f %.2f#circ<#varphi_{tk}<%.2f#circ;d_{3D}/#sigma_{d_{3D}};tracks",
1661 "d_{xy} vs track #phi;track #phi [rad];track d_{xy}(PV) [#mum]",
1670 "d_{z} vs track #phi;track #phi [rad];track d_{z}(PV) [#mum]",
1680 "d_{xy}/#sigma_{d_{xy}} vs track #phi;track #phi [rad];track d_{xy}(PV)/#sigma_{d_{xy}}",
1689 BiasVsParameter.
make<TH2F>(
"h2_n_dz_vs_phi",
1690 "d_{z}/#sigma_{d_{z}} vs track #phi;track #phi [rad];track d_{z}(PV)/#sigma_{d_{z}}",
1699 "d_{xy} vs track #eta;track #eta;track d_{xy}(PV) [#mum]",
1708 "d_{z} vs track #eta;track #eta;track d_{z}(PV) [#mum]",
1717 BiasVsParameter.
make<TH2F>(
"h2_n_dxy_vs_eta",
1718 "d_{xy}/#sigma_{d_{xy}} vs track #eta;track #eta;track d_{xy}(PV)/#sigma_{d_{xy}}",
1727 "d_{z}/#sigma_{d_{z}} vs track #eta;track #eta;track d_{z}(PV)/#sigma_{d_{z}}",
1750 "#LT d_{xy} #GT vs #phi sector;#varphi (sector) [degrees];#LT d_{xy} #GT [#mum]",
1757 "#sigma_{d_{xy}} vs #phi sector;#varphi (sector) [degrees];#sigma_{d_{xy}} [#mum]",
1764 "#LT d_{z} #GT vs #phi sector;#varphi (sector) [degrees];#LT d_{z} #GT [#mum]",
1771 "#sigma_{d_{z}} vs #phi sector;#varphi (sector) [degrees];#sigma_{d_{z}} [#mum]",
1777 "means_dxy_eta",
"#LT d_{xy} #GT vs #eta sector;#eta (sector);#LT d_{xy} #GT [#mum]",
nBins_,
lowedge,
highedge);
1780 "#sigma_{d_{xy}} vs #eta sector;#eta (sector);#sigma_{d_{xy}} [#mum]",
1786 "means_dz_eta",
"#LT d_{z} #GT vs #eta sector;#eta (sector);#LT d_{z} #GT [#mum]",
nBins_,
lowedge,
highedge);
1789 "widths_dz_eta",
"#sigma_{d_{xy}} vs #eta sector;#eta (sector);#sigma_{d_{z}} [#mum]",
nBins_,
lowedge,
highedge);
1792 "norm_means_dxy_phi",
1793 "#LT d_{xy}/#sigma_{d_{xy}} #GT vs #phi sector;#varphi (sector) [degrees];#LT d_{xy}/#sigma_{d_{xy}} #GT",
1799 "norm_widths_dxy_phi",
1800 "width(d_{xy}/#sigma_{d_{xy}}) vs #phi sector;#varphi (sector) [degrees]; width(d_{xy}/#sigma_{d_{xy}})",
1806 "norm_means_dz_phi",
1807 "#LT d_{z}/#sigma_{d_{z}} #GT vs #phi sector;#varphi (sector) [degrees];#LT d_{z}/#sigma_{d_{z}} #GT",
1813 "norm_widths_dz_phi",
1814 "width(d_{z}/#sigma_{d_{z}}) vs #phi sector;#varphi (sector) [degrees];width(d_{z}/#sigma_{d_{z}})",
1820 "norm_means_dxy_eta",
1821 "#LT d_{xy}/#sigma_{d_{xy}} #GT vs #eta sector;#eta (sector);#LT d_{xy}/#sigma_{d_{z}} #GT",
1827 "norm_widths_dxy_eta",
1828 "width(d_{xy}/#sigma_{d_{xy}}) vs #eta sector;#eta (sector);width(d_{xy}/#sigma_{d_{z}})",
1835 "#LT d_{z}/#sigma_{d_{z}} #GT vs #eta sector;#eta (sector);#LT d_{z}/#sigma_{d_{z}} #GT",
1842 "width(d_{z}/#sigma_{d_{z}}) vs #eta sector;#eta (sector);width(d_{z}/#sigma_{d_{z}})",
1850 "#LT d_{xy} #GT vs pT;p_{T} [GeV];#LT d_{xy} #GT [#mum]",
1855 "#sigma_{d_{xy}} vs pT;p_{T} [GeV];#sigma_{d_{xy}} [#mum]",
1860 "means_dz_pT",
"#LT d_{z} #GT vs pT;p_{T} [GeV];#LT d_{z} #GT [#mum]",
mypT_bins_.size() - 1,
mypT_bins_.data());
1863 "#sigma_{d_{z}} vs pT;p_{T} [GeV];#sigma_{d_{z}} [#mum]",
1869 "#LT d_{xy}/#sigma_{d_{xy}} #GT vs pT;p_{T} [GeV];#LT d_{xy}/#sigma_{d_{xy}} #GT",
1875 "width(d_{xy}/#sigma_{d_{xy}}) vs pT;p_{T} [GeV]; width(d_{xy}/#sigma_{d_{xy}})",
1881 "#LT d_{z}/#sigma_{d_{z}} #GT vs pT;p_{T} [GeV];#LT d_{z}/#sigma_{d_{z}} #GT",
1887 "width(d_{z}/#sigma_{d_{z}}) vs pT;p_{T} [GeV];width(d_{z}/#sigma_{d_{z}})",
1893 "#LT d_{xy} #GT vs p_{T};p_{T}(|#eta|<1.) [GeV];#LT d_{xy} #GT [#mum]",
1899 "#sigma_{d_{xy}} vs p_{T};p_{T}(|#eta|<1.) [GeV];#sigma_{d_{xy}} [#mum]",
1905 "#LT d_{z} #GT vs p_{T};p_{T}(|#eta|<1.) [GeV];#LT d_{z} #GT [#mum]",
1911 "#sigma_{d_{z}} vs p_{T};p_{T}(|#eta|<1.) [GeV];#sigma_{d_{z}} [#mum]",
1916 "norm_means_dxy_pTCentral",
1917 "#LT d_{xy}/#sigma_{d_{xy}} #GT vs p_{T};p_{T}(|#eta|<1.) [GeV];#LT d_{xy}/#sigma_{d_{z}} #GT",
1922 "norm_widths_dxy_pTCentral",
1923 "width(d_{xy}/#sigma_{d_{xy}}) vs p_{T};p_{T}(|#eta|<1.) [GeV];width(d_{xy}/#sigma_{d_{z}})",
1928 "norm_means_dz_pTCentral",
1929 "#LT d_{z}/#sigma_{d_{z}} #GT vs p_{T};p_{T}(|#eta|<1.) [GeV];#LT d_{z}/#sigma_{d_{z}} #GT",
1934 "norm_widths_dz_pTCentral",
1935 "width(d_{z}/#sigma_{d_{z}}) vs p_{T};p_{T}(|#eta|<1.) [GeV];width(d_{z}/#sigma_{d_{z}})",
1942 "#LT d_{xy} #GT map;#eta (sector);#varphi (sector) [degrees]",
1951 "#LT d_{z} #GT map;#eta (sector);#varphi (sector) [degrees]",
1960 "#LT d_{xy}/#sigma_{d_{xy}} #GT map;#eta (sector);#varphi (sector) [degrees]",
1969 "#LT d_{z}/#sigma_{d_{z}} #GT map;#eta (sector);#varphi (sector) [degrees]",
1978 "#sigma_{d_{xy}} map;#eta (sector);#varphi (sector) [degrees]",
1987 "#sigma_{d_{z}} map;#eta (sector);#varphi (sector) [degrees]",
1997 "width(d_{xy}/#sigma_{d_{xy}}) map;#eta (sector);#varphi (sector) [degrees]",
2006 "width(d_{z}/#sigma_{d_{z}}) map;#eta (sector);#varphi (sector) [degrees]",
2018 "Median of d_{xy} vs #phi sector;#varphi (sector) [degrees];#mu_{1/2}(d_{xy}) [#mum]",
2025 "Median absolute deviation of d_{xy} vs #phi sector;#varphi (sector) [degrees];MAD(d_{xy}) [#mum]",
2032 "Median of d_{z} vs #phi sector;#varphi (sector) [degrees];#mu_{1/2}(d_{z}) [#mum]",
2039 "Median absolute deviation of d_{z} vs #phi sector;#varphi (sector) [degrees];MAD(d_{z}) [#mum]",
2046 "Median of d_{xy} vs #eta sector;#eta (sector);#mu_{1/2}(d_{xy}) [#mum]",
2053 "Median absolute deviation of d_{xy} vs #eta sector;#eta (sector);MAD(d_{xy}) [#mum]",
2060 "Median of d_{z} vs #eta sector;#eta (sector);#mu_{1/2}(d_{z}) [#mum]",
2067 "Median absolute deviation of d_{z} vs #eta sector;#eta (sector);MAD(d_{z}) [#mum]",
2073 "norm_medians_dxy_phi",
2074 "Median of d_{xy}/#sigma_{d_{xy}} vs #phi sector;#varphi (sector) [degrees];#mu_{1/2}(d_{xy}/#sigma_{d_{xy}})",
2080 "Median absolute deviation of d_{xy}/#sigma_{d_{xy}} vs #phi " 2081 "sector;#varphi (sector) [degrees]; MAD(d_{xy}/#sigma_{d_{xy}})",
2087 "norm_medians_dz_phi",
2088 "Median of d_{z}/#sigma_{d_{z}} vs #phi sector;#varphi (sector) [degrees];#mu_{1/2}(d_{z}/#sigma_{d_{z}})",
2094 "Median absolute deviation of d_{z}/#sigma_{d_{z}} vs #phi sector;#varphi " 2095 "(sector) [degrees];MAD(d_{z}/#sigma_{d_{z}})",
2101 "norm_medians_dxy_eta",
2102 "Median of d_{xy}/#sigma_{d_{xy}} vs #eta sector;#eta (sector);#mu_{1/2}(d_{xy}/#sigma_{d_{z}})",
2108 "norm_MADs_dxy_eta",
2109 "Median absolute deviation of d_{xy}/#sigma_{d_{xy}} vs #eta sector;#eta (sector);MAD(d_{xy}/#sigma_{d_{z}})",
2115 "norm_medians_dz_eta",
2116 "Median of d_{z}/#sigma_{d_{z}} vs #eta sector;#eta (sector);#mu_{1/2}(d_{z}/#sigma_{d_{z}})",
2123 "Median absolute deviation of d_{z}/#sigma_{d_{z}} vs #eta sector;#eta (sector);MAD(d_{z}/#sigma_{d_{z}})",
2172 Form(
"histo_dxy_eta_plot%i_phi_plot%i",
i,
j),
2173 Form(
"%.2f<#eta_{tk}<%.2f %.2f#circ<#varphi_{tk}<%.2f#circ;d_{xy} [#mum];tracks", etaF, etaL, phiF, phiL),
2179 Form(
"histo_dxy_eta_plot%i_phi_plot%i",
i,
j),
2180 Form(
"%.2f<#eta_{tk}<%.2f %.2f#circ<#varphi_{tk}<%.2f#circ;d_{z} [#mum];tracks", etaF, etaL, phiF, phiL),
2186 Form(
"histo_norm_dxy_eta_plot%i_phi_plot%i",
i,
j),
2187 Form(
"%.2f<#eta_{tk}<%.2f %.2f#circ<#varphi_{tk}<%.2f#circ;d_{xy}/#sigma_{d_{xy}};tracks",
2197 Form(
"histo_norm_dxy_eta_plot%i_phi_plot%i",
i,
j),
2198 Form(
"%.2f<#eta_{tk}<%.2f %.2f#circ<#varphi_{tk}<%.2f#circ;d_{z}/#sigma_{d_{z}};tracks",
2222 MeanBiasTrendsDir.
make<TH1F>(
"means_dxy_phi",
2223 "#LT d_{xy} #GT vs #phi sector;#varphi (sector) [degrees];#LT d_{xy} #GT [#mum]",
2230 "#sigma_{d_{xy}} vs #phi sector;#varphi (sector) [degrees];#sigma_{d_{xy}} [#mum]",
2236 MeanBiasTrendsDir.
make<TH1F>(
"means_dz_phi",
2237 "#LT d_{z} #GT vs #phi sector;#varphi (sector) [degrees];#LT d_{z} #GT [#mum]",
2243 WidthBiasTrendsDir.
make<TH1F>(
"widths_dz_phi",
2244 "#sigma_{d_{z}} vs #phi sector;#varphi (sector) [degrees];#sigma_{d_{z}} [#mum]",
2250 "means_dxy_eta",
"#LT d_{xy} #GT vs #eta sector;#eta (sector);#LT d_{xy} #GT [#mum]",
nBins_,
lowedge,
highedge);
2253 WidthBiasTrendsDir.
make<TH1F>(
"widths_dxy_eta",
2254 "#sigma_{d_{xy}} vs #eta sector;#eta (sector);#sigma_{d_{xy}} [#mum]",
2260 "means_dz_eta",
"#LT d_{z} #GT vs #eta sector;#eta (sector);#LT d_{z} #GT [#mum]",
nBins_,
lowedge,
highedge);
2263 WidthBiasTrendsDir.
make<TH1F>(
"widths_dz_eta",
2264 "#sigma_{d_{xy}} vs #eta sector;#eta (sector);#sigma_{d_{z}} [#mum]",
2270 "norm_means_dxy_phi",
2271 "#LT d_{xy}/#sigma_{d_{xy}} #GT vs #phi sector;#varphi (sector) [degrees];#LT d_{xy}/#sigma_{d_{xy}} #GT",
2277 "norm_widths_dxy_phi",
2278 "width(d_{xy}/#sigma_{d_{xy}}) vs #phi sector;#varphi (sector) [degrees]; width(d_{xy}/#sigma_{d_{xy}})",
2284 "norm_means_dz_phi",
2285 "#LT d_{z}/#sigma_{d_{z}} #GT vs #phi sector;#varphi (sector) [degrees];#LT d_{z}/#sigma_{d_{z}} #GT",
2291 "norm_widths_dz_phi",
2292 "width(d_{z}/#sigma_{d_{z}}) vs #phi sector;#varphi (sector) [degrees];width(d_{z}/#sigma_{d_{z}})",
2298 "norm_means_dxy_eta",
2299 "#LT d_{xy}/#sigma_{d_{xy}} #GT vs #eta sector;#eta (sector);#LT d_{xy}/#sigma_{d_{z}} #GT",
2305 "norm_widths_dxy_eta",
2306 "width(d_{xy}/#sigma_{d_{xy}}) vs #eta sector;#eta (sector);width(d_{xy}/#sigma_{d_{z}})",
2312 "norm_means_dz_eta",
2313 "#LT d_{z}/#sigma_{d_{z}} #GT vs #eta sector;#eta (sector);#LT d_{z}/#sigma_{d_{z}} #GT",
2319 "norm_widths_dz_eta",
2320 "width(d_{z}/#sigma_{d_{z}}) vs #eta sector;#eta (sector);width(d_{z}/#sigma_{d_{z}})",
2328 "#LT d_{xy} #GT map;#eta (sector);#varphi (sector) [degrees]",
2337 "#LT d_{z} #GT map;#eta (sector);#varphi (sector) [degrees]",
2346 Mean2DBiasMapsDir.
make<TH2F>(
"norm_means_dxy_map",
2347 "#LT d_{xy}/#sigma_{d_{xy}} #GT map;#eta (sector);#varphi (sector) [degrees]",
2356 Mean2DBiasMapsDir.
make<TH2F>(
"norm_means_dz_map",
2357 "#LT d_{z}/#sigma_{d_{z}} #GT map;#eta (sector);#varphi (sector) [degrees]",
2366 "#sigma_{d_{xy}} map;#eta (sector);#varphi (sector) [degrees]",
2375 "#sigma_{d_{z}} map;#eta (sector);#varphi (sector) [degrees]",
2384 Width2DBiasMapsDir.
make<TH2F>(
"norm_widths_dxy_map",
2385 "width(d_{xy}/#sigma_{d_{xy}}) map;#eta (sector);#varphi (sector) [degrees]",
2394 Width2DBiasMapsDir.
make<TH2F>(
"norm_widths_dz_map",
2395 "width(d_{z}/#sigma_{d_{z}}) map;#eta (sector);#varphi (sector) [degrees]",
2407 "Median of d_{xy} vs #phi sector;#varphi (sector) [degrees];#mu_{1/2}(d_{xy}) [#mum]",
2414 "Median absolute deviation of d_{xy} vs #phi sector;#varphi (sector) [degrees];MAD(d_{xy}) [#mum]",
2421 "Median of d_{z} vs #phi sector;#varphi (sector) [degrees];#mu_{1/2}(d_{z}) [#mum]",
2428 "Median absolute deviation of d_{z} vs #phi sector;#varphi (sector) [degrees];MAD(d_{z}) [#mum]",
2434 MedianBiasTrendsDir.
make<TH1F>(
"medians_dxy_eta",
2435 "Median of d_{xy} vs #eta sector;#eta (sector);#mu_{1/2}(d_{xy}) [#mum]",
2442 "Median absolute deviation of d_{xy} vs #eta sector;#eta (sector);MAD(d_{xy}) [#mum]",
2448 MedianBiasTrendsDir.
make<TH1F>(
"medians_dz_eta",
2449 "Median of d_{z} vs #eta sector;#eta (sector);#mu_{1/2}(d_{z}) [#mum]",
2455 MADBiasTrendsDir.
make<TH1F>(
"MADs_dz_eta",
2456 "Median absolute deviation of d_{z} vs #eta sector;#eta (sector);MAD(d_{z}) [#mum]",
2462 "norm_medians_dxy_phi",
2463 "Median of d_{xy}/#sigma_{d_{xy}} vs #phi sector;#varphi (sector) [degrees];#mu_{1/2}(d_{xy}/#sigma_{d_{xy}})",
2469 "Median absolute deviation of d_{xy}/#sigma_{d_{xy}} vs #phi " 2470 "sector;#varphi (sector) [degrees]; MAD(d_{xy}/#sigma_{d_{xy}})",
2476 "norm_medians_dz_phi",
2477 "Median of d_{z}/#sigma_{d_{z}} vs #phi sector;#varphi (sector) [degrees];#mu_{1/2}(d_{z}/#sigma_{d_{z}})",
2483 "Median absolute deviation of d_{z}/#sigma_{d_{z}} vs #phi " 2484 "sector;#varphi (sector) [degrees];MAD(d_{z}/#sigma_{d_{z}})",
2490 "norm_medians_dxy_eta",
2491 "Median of d_{xy}/#sigma_{d_{xy}} vs #eta sector;#eta (sector);#mu_{1/2}(d_{xy}/#sigma_{d_{z}})",
2497 "norm_MADs_dxy_eta",
2498 "Median absolute deviation of d_{xy}/#sigma_{d_{xy}} vs #eta sector;#eta (sector);MAD(d_{xy}/#sigma_{d_{z}})",
2504 "norm_medians_dz_eta",
2505 "Median of d_{z}/#sigma_{d_{z}} vs #eta sector;#eta (sector);#mu_{1/2}(d_{z}/#sigma_{d_{z}})",
2512 "Median absolute deviation of d_{z}/#sigma_{d_{z}} vs #eta sector;#eta (sector);MAD(d_{z}/#sigma_{d_{z}})",
2527 <<
"*********************************************************************************\n" 2528 <<
"* The configuration (ptOfProbe > " <<
ptOfProbe_ 2529 <<
"GeV) is not correctly set for current value of magnetic field \n" 2530 <<
"* Switching it to 0. !!! \n" 2531 <<
"*********************************************************************************" << std::endl;
2546 const time_t start_time = times.first / 1000000;
2548 <<
runNumber_ <<
" has start time: " << times.first <<
" - " << times.second << std::endl;
2550 <<
"human readable time: " << std::asctime(std::gmtime(&start_time)) << std::endl;
2572 edm::LogInfo(
"tracker geometry read") <<
"There are: " << pDD->
dets().size() <<
" detectors";
2611 <<
" pixel phase2 setup, nLadders: " <<
nLadders_ <<
" nModules:" <<
nModZ_;
2618 <<
" pixel phase1 setup, nLadders: " <<
nLadders_ <<
" nModules:" <<
nModZ_;
2625 <<
" pixel phase0 setup, nLadders: " <<
nLadders_ <<
" nModules:" <<
nModZ_;
2643 if (
h_etaMax->GetEntries() == 0.) {
2670 unsigned int count = 1;
2682 edm::LogInfo(
"PrimaryVertexValidation") <<
"######################################\n" 2683 <<
"# PrimaryVertexValidation::endJob()\n" 2684 <<
"# Number of analyzed events: " <<
Nevt_ <<
"\n" 2685 <<
"######################################";
2690 "means_dxy_modZ",
"#LT d_{xy} #GT vs modZ;module number (Z);#LT d_{xy} #GT [#mum]",
nModZ_, 0.,
nModZ_);
2693 "widths_dxy_modZ",
"#sigma_{d_{xy}} vs modZ;module number (Z);#sigma_{d_{xy}} [#mum]",
nModZ_, 0.,
nModZ_);
2696 "means_dz_modZ",
"#LT d_{z} #GT vs modZ;module number (Z);#LT d_{z} #GT [#mum]",
nModZ_, 0.,
nModZ_);
2699 "widths_dz_modZ",
"#sigma_{d_{z}} vs modZ;module number (Z);#sigma_{d_{z}} [#mum]",
nModZ_, 0.,
nModZ_);
2702 "#LT d_{xy} #GT vs ladder;ladder number (#phi);#LT d_{xy} #GT [#mum]",
2709 "#sigma_{d_{xy}} vs ladder;ladder number (#phi);#sigma_{d_{xy}} [#mum]",
2715 "means_dz_ladder",
"#LT d_{z} #GT vs ladder;ladder number (#phi);#LT d_{z} #GT [#mum]",
nLadders_, 0.,
nLadders_);
2719 "#sigma_{d_{z}} vs ladder;ladder number (#phi);#sigma_{d_{z}} [#mum]",
2725 "norm_means_dxy_modZ",
2726 "#LT d_{xy}/#sigma_{d_{xy}} #GT vs modZ;module number (Z);#LT d_{xy}/#sigma_{d_{xy}} #GT",
2732 "norm_widths_dxy_modZ",
2733 "width(d_{xy}/#sigma_{d_{xy}}) vs modZ;module number (Z); width(d_{xy}/#sigma_{d_{xy}})",
2740 "#LT d_{z}/#sigma_{d_{z}} #GT vs modZ;module number (Z);#LT d_{z}/#sigma_{d_{z}} #GT",
2747 "width(d_{z}/#sigma_{d_{z}}) vs pT;module number (Z);width(d_{z}/#sigma_{d_{z}})",
2753 "norm_means_dxy_ladder",
2754 "#LT d_{xy}/#sigma_{d_{xy}} #GT vs ladder;ladder number (#phi);#LT d_{xy}/#sigma_{d_{z}} #GT",
2760 "norm_widths_dxy_ladder",
2761 "width(d_{xy}/#sigma_{d_{xy}}) vs ladder;ladder number (#phi);width(d_{xy}/#sigma_{d_{z}})",
2767 "norm_means_dz_ladder",
2768 "#LT d_{z}/#sigma_{d_{z}} #GT vs ladder;ladder number (#phi);#LT d_{z}/#sigma_{d_{z}} #GT",
2774 "norm_widths_dz_ladder",
2775 "width(d_{z}/#sigma_{d_{z}}) vs ladder;ladder number (#phi);width(d_{z}/#sigma_{d_{z}})",
2783 "#LT d_{xy} #GT map;module number [z];ladder number [#varphi]",
2792 "#LT d_{z} #GT map;module number [z];ladder number [#varphi]",
2802 "#LT d_{xy}/#sigma_{d_{xy}} #GT map;module number [z];ladder number [#varphi]",
2811 "#LT d_{z}/#sigma_{d_{z}} #GT map;module number [z];ladder number [#varphi]",
2820 "#sigma_{d_{xy}} map;module number [z];ladder number [#varphi]",
2829 "#sigma_{d_{z}} map;module number [z];ladder number [#varphi]",
2839 "width(d_{xy}/#sigma_{d_{xy}}) map;module number [z];ladder number [#varphi]",
2849 "width(d_{z}/#sigma_{d_{z}}) map;module number [z];ladder number [#varphi]",
3034 <<
runInfo.product()->m_start_time_str <<
" " <<
runInfo.product()->m_stop_time_str << std::endl;
3036 return std::make_pair(
runInfo.product()->m_start_time_ll,
runInfo.product()->m_stop_time_ll);
3044 double average_current =
runInfo.product()->m_avg_current;
3045 bool isOn = (average_current > 2000.);
3048 return ((isOn && !is0T) || (!isOn && is0T));
3127 TH1F* residualsPlot[100],
3133 char phibincenter[129];
3137 char etabincenter[129];
3145 trendPlot->SetBinContent(
i + 1, mean_);
3146 trendPlot->SetBinError(
i + 1, meanErr_);
3152 trendPlot->SetBinContent(
i + 1, width_);
3153 trendPlot->SetBinError(
i + 1, widthErr_);
3159 trendPlot->SetBinContent(
i + 1, median_);
3160 trendPlot->SetBinError(
i + 1, medianErr_);
3166 trendPlot->SetBinContent(
i + 1, mad_);
3167 trendPlot->SetBinError(
i + 1, madErr_);
3172 <<
"fillTrendPlot() " << fitPar_ <<
" unknown estimator!" << std::endl;
3176 if (var_.find(
"eta") != std::string::npos) {
3177 trendPlot->GetXaxis()->SetBinLabel(
i + 1, etabincenter);
3178 }
else if (var_.find(
"phi") != std::string::npos) {
3179 trendPlot->GetXaxis()->SetBinLabel(
i + 1, phibincenter);
3182 <<
"fillTrendPlot() " << var_ <<
" unknown track parameter!" << std::endl;
3189 std::vector<TH1F*>&
h,
3194 for (
auto iterator =
h.begin(); iterator !=
h.end(); iterator++) {
3200 float mean_ = myFit.first.value();
3201 float meanErr_ = myFit.first.error();
3202 trendPlot->SetBinContent(
bin, mean_);
3203 trendPlot->SetBinError(
bin, meanErr_);
3207 float width_ = myFit.second.value();
3208 float widthErr_ = myFit.second.error();
3209 trendPlot->SetBinContent(
bin, width_);
3210 trendPlot->SetBinError(
bin, widthErr_);
3216 trendPlot->SetBinContent(
bin, median_);
3217 trendPlot->SetBinError(
bin, medianErr_);
3223 trendPlot->SetBinContent(
bin, mad_);
3224 trendPlot->SetBinError(
bin, madErr_);
3229 <<
"fillTrendPlotByIndex() " << fitPar_ <<
" unknown estimator!" << std::endl;
3233 char bincenter[129];
3237 trendPlot->GetXaxis()->SetBinLabel(
bin, bincenter);
3241 trendPlot->GetXaxis()->SetBinLabel(
bin, bincenter);
3251 TH1F* residualsMapPlot[100][100],
3257 for (
int i = 0;
i < nYBins_; ++
i) {
3258 char phibincenter[129];
3262 if (nXBins_ == nYBins_) {
3263 trendMap->GetYaxis()->SetBinLabel(
i + 1, phibincenter);
3266 for (
int j = 0;
j < nXBins_; ++
j) {
3267 char etabincenter[129];
3272 if (nXBins_ == nYBins_) {
3273 trendMap->GetXaxis()->SetBinLabel(
j + 1, etabincenter);
3281 trendMap->SetBinContent(
j + 1,
i + 1, mean_);
3282 trendMap->SetBinError(
j + 1,
i + 1, meanErr_);
3288 trendMap->SetBinContent(
j + 1,
i + 1, width_);
3289 trendMap->SetBinError(
j + 1,
i + 1, widthErr_);
3295 trendMap->SetBinContent(
j + 1,
i + 1, median_);
3296 trendMap->SetBinError(
j + 1,
i + 1, medianErr_);
3302 trendMap->SetBinContent(
j + 1,
i + 1, mad_);
3303 trendMap->SetBinError(
j + 1,
i + 1, madErr_);
3307 edm::LogWarning(
"PrimaryVertexValidation:") <<
" fillMap() " << fitPar_ <<
" unknown estimator!" << std::endl;
3317 if (
a.tracksSize() !=
b.tracksSize())
3318 return a.tracksSize() >
b.tracksSize() ?
true :
false;
3320 return a.chi2() <
b.chi2() ?
true :
false;
3333 double vzErr = 0.0, vxErr = 0.0, vyErr = 0.0;
3334 vtxPoint =
vertex.position();
3339 double dxy = 0.0,
dz = 0.0, dxysigma = 0.0, dzsigma = 0.0;
3342 dxysigma =
sqrt(
track.d0Error() *
track.d0Error() + vxErr * vyErr);
3343 dzsigma =
sqrt(
track.dzError() *
track.dzError() + vzErr * vzErr);
3351 if (
track.ptError() /
track.pt() > ptErrMax_)
3361 TH1F::SetDefaultSumw2(kTRUE);
3363 std::map<std::string, TH1*>
h;
3368 h[
"pseudorapidity_" +
type] =
3369 dir.make<TH1F>((
"rapidity_" +
type).c_str(),
"track pseudorapidity; track #eta; tracks", 100, -3., 3.);
3370 h[
"z0_" +
type] =
dir.make<TH1F>((
"z0_" +
type).c_str(),
"track z_{0};track z_{0} (cm);tracks", 80, -40., 40.);
3371 h[
"phi_" +
type] =
dir.make<TH1F>((
"phi_" +
type).c_str(),
"track #phi; track #phi;tracks", 80, -
M_PI,
M_PI);
3372 h[
"eta_" +
type] =
dir.make<TH1F>((
"eta_" +
type).c_str(),
"track #eta; track #eta;tracks", 80, -4., 4.);
3373 h[
"pt_" +
type] =
dir.make<TH1F>((
"pt_" +
type).c_str(),
"track p_{T}; track p_{T} [GeV];tracks", 100, 0., 20.);
3374 h[
"p_" +
type] =
dir.make<TH1F>((
"p_" +
type).c_str(),
"track p; track p [GeV];tracks", 100, 0., 20.);
3375 h[
"found_" +
type] =
3376 dir.make<TH1F>((
"found_" +
type).c_str(),
"n. found hits;n^{found}_{hits};tracks", 30, 0., 30.);
3377 h[
"lost_" +
type] =
dir.make<TH1F>((
"lost_" +
type).c_str(),
"n. lost hits;n^{lost}_{hits};tracks", 20, 0., 20.);
3378 h[
"nchi2_" +
type] =
3379 dir.make<TH1F>((
"nchi2_" +
type).c_str(),
"normalized track #chi^{2};track #chi^{2}/ndf;tracks", 100, 0., 20.);
3380 h[
"rstart_" +
type] =
dir.make<TH1F>(
3381 (
"rstart_" +
type).c_str(),
"track start radius; track innermost radius r (cm);tracks", 100, 0., 20.);
3382 h[
"expectedInner_" +
type] =
dir.make<TH1F>(
3383 (
"expectedInner_" +
type).c_str(),
"n. expected inner hits;n^{expected}_{inner};tracks", 10, 0., 10.);
3384 h[
"expectedOuter_" +
type] =
dir.make<TH1F>(
3385 (
"expectedOuter_" +
type).c_str(),
"n. expected outer hits;n^{expected}_{outer};tracks ", 10, 0., 10.);
3386 h[
"logtresxy_" +
type] =
3387 dir.make<TH1F>((
"logtresxy_" +
type).c_str(),
3388 "log10(track r-#phi resolution/#mum);log10(track r-#phi resolution/#mum);tracks",
3392 h[
"logtresz_" +
type] =
dir.make<TH1F>((
"logtresz_" +
type).c_str(),
3393 "log10(track z resolution/#mum);log10(track z resolution/#mum);tracks",
3397 h[
"tpullxy_" +
type] =
3398 dir.make<TH1F>((
"tpullxy_" +
type).c_str(),
"track r-#phi pull;pull_{r-#phi};tracks", 100, -10., 10.);
3399 h[
"tpullz_" +
type] =
3400 dir.make<TH1F>((
"tpullz_" +
type).c_str(),
"track r-z pull;pull_{r-z};tracks", 100, -50., 50.);
3401 h[
"tlogDCAxy_" +
type] =
dir.make<TH1F>(
3402 (
"tlogDCAxy_" +
type).c_str(),
"track log_{10}(DCA_{r-#phi});track log_{10}(DCA_{r-#phi});tracks", 200, -5., 3.);
3403 h[
"tlogDCAz_" +
type] =
dir.make<TH1F>(
3404 (
"tlogDCAz_" +
type).c_str(),
"track log_{10}(DCA_{r-z});track log_{10}(DCA_{r-z});tracks", 200, -5., 5.);
3405 h[
"lvseta_" +
type] =
dir.make<TH2F>(
3406 (
"lvseta_" +
type).c_str(),
"cluster length vs #eta;track #eta;cluster length", 60, -3., 3., 20, 0., 20);
3407 h[
"lvstanlambda_" +
type] =
dir.make<TH2F>((
"lvstanlambda_" +
type).c_str(),
3408 "cluster length vs tan #lambda; tan#lambda;cluster length",
3415 h[
"restrkz_" +
type] =
3416 dir.make<TH1F>((
"restrkz_" +
type).c_str(),
"z-residuals (track vs vertex);res_{z} (cm);tracks", 200, -5., 5.);
3417 h[
"restrkzvsphi_" +
type] =
dir.make<TH2F>((
"restrkzvsphi_" +
type).c_str(),
3418 "z-residuals (track - vertex) vs track #phi;track #phi;res_{z} (cm)",
3425 h[
"restrkzvseta_" +
type] =
dir.make<TH2F>((
"restrkzvseta_" +
type).c_str(),
3426 "z-residuals (track - vertex) vs track #eta;track #eta;res_{z} (cm)",
3433 h[
"pulltrkzvsphi_" +
type] =
3434 dir.make<TH2F>((
"pulltrkzvsphi_" +
type).c_str(),
3435 "normalized z-residuals (track - vertex) vs track #phi;track #phi;res_{z}/#sigma_{res_{z}}",
3442 h[
"pulltrkzvseta_" +
type] =
3443 dir.make<TH2F>((
"pulltrkzvseta_" +
type).c_str(),
3444 "normalized z-residuals (track - vertex) vs track #eta;track #eta;res_{z}/#sigma_{res_{z}}",
3451 h[
"pulltrkz_" +
type] =
dir.make<TH1F>((
"pulltrkz_" +
type).c_str(),
3452 "normalized z-residuals (track vs vertex);res_{z}/#sigma_{res_{z}};tracks",
3456 h[
"sigmatrkz0_" +
type] =
dir.make<TH1F>(
3457 (
"sigmatrkz0_" +
type).c_str(),
"z-resolution (excluding beam);#sigma^{trk}_{z_{0}} (cm);tracks", 100, 0., 5.);
3458 h[
"sigmatrkz_" +
type] =
dir.make<TH1F>(
3459 (
"sigmatrkz_" +
type).c_str(),
"z-resolution (including beam);#sigma^{trk}_{z} (cm);tracks", 100, 0., 5.);
3460 h[
"nbarrelhits_" +
type] =
dir.make<TH1F>(
3461 (
"nbarrelhits_" +
type).c_str(),
"number of pixel barrel hits;n. hits Barrel Pixel;tracks", 10, 0., 10.);
3462 h[
"nbarrelLayers_" +
type] =
dir.make<TH1F>(
3463 (
"nbarrelLayers_" +
type).c_str(),
"number of pixel barrel layers;n. layers Barrel Pixel;tracks", 10, 0., 10.);
3464 h[
"nPxLayers_" +
type] =
dir.make<TH1F>(
3465 (
"nPxLayers_" +
type).c_str(),
"number of pixel layers (barrel+endcap);n. Pixel layers;tracks", 10, 0., 10.);
3466 h[
"nSiLayers_" +
type] =
3467 dir.make<TH1F>((
"nSiLayers_" +
type).c_str(),
"number of Tracker layers;n. Tracker layers;tracks", 20, 0., 20.);
3468 h[
"trackAlgo_" +
type] =
3469 dir.make<TH1F>((
"trackAlgo_" +
type).c_str(),
"track algorithm;track algo;tracks", 30, 0., 30.);
3470 h[
"trackQuality_" +
type] =
3471 dir.make<TH1F>((
"trackQuality_" +
type).c_str(),
"track quality;track quality;tracks", 7, -1., 6.);
3481 unsigned int theNOfBins,
3484 bool isNormalized) {
3485 TH1F::SetDefaultSumw2(kTRUE);
3497 std::vector<TH1F*>
h;
3498 h.reserve(theNOfBins);
3500 if (theNOfBins == 0) {
3502 <<
"bookResidualsHistogram() The number of bins cannot be identically 0" << std::endl;
3513 for (
unsigned int i = 0;
i < theNOfBins;
i++) {
3515 ? Form(
"%s vs %s - bin %i (%f < %s < %f);%s %s;tracks",
3524 : Form(
"%s vs %s - bin %i;%s %s;tracks",
3531 TH1F* htemp =
dir.make<TH1F>(
3532 Form(
"histo_%s_%s_plot%i", s_resType.c_str(), s_varType.c_str(),
i),
3553 using namespace reco;
3566 double d0Error =
tt->track().d0Error();
3575 double dzError =
tt->track().dzError();
3595 double z = (
tt->stateAtBeamLine().trackStateAtPCA()).
position().z();
3596 double tantheta =
tan((
tt->stateAtBeamLine().trackStateAtPCA()).momentum().theta());
3597 double dz2 =
pow(
tt->track().dzError(), 2) +
wxy2_ /
pow(tantheta, 2);
3610 double kappa = -0.002998 * fBfield_ *
tt->track().qoverp() /
cos(
tt->track().theta());
3613 double s0 = (
x1 *
cos(
tt->track().phi()) +
y1 *
sin(
tt->track().phi())) /
q;
3627 PVValHelper::fill(
h,
"nbarrelLayers_" + ttype,
tt->track().hitPattern().pixelBarrelLayersWithMeasurement());
3628 PVValHelper::fill(
h,
"nPxLayers_" + ttype,
tt->track().hitPattern().pixelLayersWithMeasurement());
3629 PVValHelper::fill(
h,
"nSiLayers_" + ttype,
tt->track().hitPattern().trackerLayersWithMeasurement());
3631 h,
"expectedInner_" + ttype,
tt->track().hitPattern().numberOfLostHits(HitPattern::MISSING_INNER_HITS));
3633 h,
"expectedOuter_" + ttype,
tt->track().hitPattern().numberOfLostHits(HitPattern::MISSING_OUTER_HITS));
3638 int longesthit = 0, nbarrel = 0;
3639 for (
auto const&
hit :
tt->track().recHits()) {
3648 if (clust->sizeY() - longesthit > 0)
3649 longesthit = clust->sizeY();
3650 if (clust->sizeY() > 20.) {
3667 desc.setComment(
"Validates alignment payloads by evaluating unbiased track paramter resisuals to vertices");
3671 desc.addUntracked<
int>(
"compressionSettings", -1);
3672 desc.add<
bool>(
"storeNtuple",
false);
3673 desc.add<
bool>(
"isLightNtuple",
true);
3674 desc.add<
bool>(
"useTracksFromRecoVtx",
false);
3675 desc.addUntracked<
double>(
"vertexZMax", 99);
3676 desc.addUntracked<
double>(
"intLumi", 0.);
3677 desc.add<
bool>(
"askFirstLayerHit",
false);
3678 desc.addUntracked<
bool>(
"doBPix",
true);
3679 desc.addUntracked<
bool>(
"doFPix",
true);
3680 desc.addUntracked<
double>(
"probePt", 0.);
3681 desc.addUntracked<
double>(
"probeP", 0.);
3682 desc.addUntracked<
double>(
"probeEta", 2.4);
3683 desc.addUntracked<
double>(
"probeNHits", 0.);
3684 desc.addUntracked<
int>(
"numberOfBins", 24);
3685 desc.addUntracked<
double>(
"minPt", 1.);
3686 desc.addUntracked<
double>(
"maxPt", 20.);
3687 desc.add<
bool>(
"Debug",
false);
3688 desc.addUntracked<
bool>(
"runControl",
false);
3689 desc.addUntracked<
bool>(
"forceBeamSpot",
false);
3691 std::vector<unsigned int> defaultRuns;
3692 defaultRuns.push_back(0);
3693 desc.addUntracked<std::vector<unsigned int>>(
"runControlNumber", defaultRuns);
3704 psd0.add<
int>(
"numTracksThreshold", 0);
3723 descriptions.
add(
"primaryVertexValidation",
desc);
bool quality(const TrackQuality) const
Track quality.
std::vector< TH1F * > h_norm_dxy_modZ_
TrajectoryStateClosestToPoint trajectoryStateClosestToPoint(const AlgebraicVector3 &momentum, const GlobalPoint &referencePoint, const TrackCharge &charge, const AlgebraicSymMatrix66 &theCovarianceMatrix, const MagneticField *field)
TH1F * n_dxyPhiMedianTrend
static const char runNumber_[]
static const std::string kSharedResource
TH1F * n_dzEtaMedianTrend
Log< level::Info, true > LogVerbatim
void fillTrackHistos(std::map< std::string, TH1 *> &h, const std::string &ttype, const reco::TransientTrack *tt, const reco::Vertex &v, const reco::BeamSpot &beamSpot, double fBfield)
double qoverp() const
q / p
TH1F * n_dxyEtaMADBiasTrend
TH1F * a_dxyPhiMedianBiasTrend
edm::EDGetTokenT< reco::TrackCollection > theTrackCollectionToken_
TH1F * n_dxyPhiMADBiasTrend
TH1F * a_dxyladderWidthTrend
std::vector< TH1F * > n_IP3DPhiResiduals
Measurement1D getMedian(TH1F *histo)
std::vector< TH1F * > a_dxyEtaResiduals
TH1F * n_dzResidualsMap[nMaxBins_][nMaxBins_]
std::vector< TH1F * > a_d3DEtaResiduals
TH1F * a_dzPhiMedianBiasTrend
T getParameter(std::string const &) const
TH1F * a_dxyladderMeanTrend
unsigned int pxbLayer(const DetId &id) const
TH1F * a_dxyEtaWidthBiasTrend
std::vector< TH1F * > n_reszPhiResiduals
TFileDirectory MADTrendsDir
std::vector< unsigned int > runControlNumbers_
TH1F * n_dxyEtaMedianTrend
TH1F * n_dxyEtaMeanBiasTrend
TH1F * a_dzEtaWidthBiasTrend
TH1F * a_dzPhiMADBiasTrend
TH1F * h_probeRefitVSigXY_
static const int nMaxtracks_
TH1F * h_probeRefitVSigZ_
const bool isValid(const Frame &aFrame, const FrameQuality &aQuality, const uint16_t aExpectedPos)
static bool vtxSort(const reco::Vertex &a, const reco::Vertex &b)
TH1F * n_dxyEtaMedianBiasTrend
TFileDirectory WidthTrendsDir
unsigned short numberOfValidHits() const
number of valid hits found
TH1F * a_dxyEtaMADBiasTrend
std::pair< Measurement1D, Measurement1D > fitResiduals(TH1 *hist)
TH1F * h_probesignIP2DRefitV_
Quality qualityByName(std::string const &name)
TH1F * a_dzpTCentralWidthTrend
edm::EDGetTokenT< reco::BeamSpot > theBeamspotToken_
void fillTrendPlot(TH1F *trendPlot, TH1F *residualsPlot[100], PVValHelper::estimator fitPar_, const std::string &var_)
int nhits1D_[nMaxtracks_]
std::vector< TH1F * > h_dxy_pT_
TH1F * a_dxyResidualsMap[nMaxBins_][nMaxBins_]
std::map< std::string, TH1 * > hDA
TrackQuality
track quality
std::vector< TH1F * > a_IP3DEtaResiduals
#define DEFINE_FWK_MODULE(type)
std::vector< float > generateBins(int n, float start, float range)
void beginRun(edm::Run const &iRun, edm::EventSetup const &iSetup) override
double px() const
x coordinate of momentum vector
std::vector< TH1F * > n_dzPhiResiduals
double p() const
momentum vector magnitude
std::vector< TH1F * > a_d3DPhiResiduals
std::vector< TH1F * > n_d3DPhiResiduals
PrimaryVertexValidation(const edm::ParameterSet &)
std::vector< TH1F * > n_dxyPhiBiasResiduals
Sin< T >::type sin(const T &t)
TH1F * a_dzEtaMADBiasTrend
TH1F * n_dxyBiasResidualsMap[nMaxBins_][nMaxBins_]
TFileDirectory MeanTrendsDir
std::vector< TH1F * > n_d3DEtaResiduals
static void fillPSetDescription(edm::ParameterSetDescription &desc)
Global3DPoint GlobalPoint
const edm::ESGetToken< GlobalTrackingGeometry, GlobalTrackingGeometryRecord > trackingGeomToken_
std::vector< TH1F * > h_norm_dz_Central_pT_
const unsigned getPXBModules(unsigned int lay) const
double py() const
y coordinate of momentum vector
TH1F * h_xErrOfflineVertex
bool isNonnull() const
Checks for non-null.
double longitudinalImpactParameterError() const
std::string to_string(const V &value)
TH1F * n_dzladderMeanTrend
float DOFUnbiasedVertex_[nMaxtracks_]
TH1F * n_dzPhiWidthBiasTrend
std::map< std::pair< residualType, plotVariable >, std::pair< float, float > > range
double d3DFromMyVertex_[nMaxtracks_]
const DetContainer & dets() const override
Returm a vector of all GeomDet (including all GeomDetUnits)
double transverseImpactParameter() const
std::vector< TH1F * > a_reszPhiResiduals
double dxyBs_[nMaxtracks_]
double zPCA_[nMaxtracks_]
std::vector< TH1F * > a_IP2DPhiResiduals
TH1F * a_dxyPhiWidthBiasTrend
float chi2ProbUnbiasedVertex_[nMaxtracks_]
unsigned int pxbLadder(const DetId &id) const
const PerigeeTrajectoryError & perigeeError() const
Log< level::Error, false > LogError
std::vector< TH1F * > n_reszEtaResiduals
double dxyFromMyVertex_[nMaxtracks_]
TH1F * a_dzPhiWidthBiasTrend
TH1F * a_dzladderWidthTrend
TH1F * h_probeRefitVSig3D_
constexpr double max_eta_phase2
Measurement1D getMAD(TH1F *histo)
std::map< std::string, TH1 * > bookVertexHistograms(const TFileDirectory &dir)
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
std::vector< TH1F * > h_dz_modZ_
std::vector< TH1F * > h_dxy_modZ_
std::vector< TH1F * > a_dxEtaResiduals
std::pair< bool, bool > pixelHitsCheck(const reco::TransientTrack &track)
plotLabels getVarString(plotVariable var)
TH1F * h_probereszRefitV_
double dzErrorFromMyVertex_[nMaxtracks_]
std::vector< TH1F * > n_dxyEtaBiasResiduals
int isHighPurity_[nMaxtracks_]
int nhitsTIB_[nMaxtracks_]
constexpr std::array< uint8_t, layerIndexSize > layer
std::vector< TH1F * > n_dxyEtaResiduals
TH1F * h_probeRefitVSigResZ_
double qoverp_[nMaxtracks_]
double IPTsigFromMyVertex_[nMaxtracks_]
T getUntrackedParameter(std::string const &, T const &) const
reco::TransientTrack build(const reco::Track *p) const
GlobalPoint position() const
TH1F * a_dzEtaMedianTrend
std::vector< TH1F * > a_dzPhiBiasResiduals
double theta_[nMaxtracks_]
TH1F * a_dxyPhiMedianTrend
TH1F * a_dxypTCentralWidthTrend
std::map< plotVariable, std::vector< float > > trendbins
double pt() const
track transverse momentum
T * make(const Args &...args) const
make new ROOT object
constexpr double max_eta_phase1
auto recHits() const
Access to reconstructed hits on the track.
std::vector< TH1F * > h_norm_dxy_pT_
std::vector< TH1F * > a_dzEtaResiduals
TH1F * a_dzPhiMeanBiasTrend
edm::EDGetTokenT< reco::VertexCollection > theVertexCollectionToken_
float getHigh(residualType type, plotVariable plot)
int tracksUsedForVertexing_[nMaxtracks_]
float getLow(residualType type, plotVariable plot)
int charge() const
track electric charge
double dz() const
dz parameter (= dsz/cos(lambda)). This is the track z0 w.r.t (0,0,0) only if the refPoint is close to...
TH1F * n_dxymodZWidthTrend
TH1F * h_fitVtxTrackAverageWeight_
TFileDirectory Width2DMapsDir
T const * product() const
int isGoodTrack_[nMaxtracks_]
std::vector< TH1F * > a_dxyEtaBiasResiduals
const edm::ESGetToken< RunInfo, RunInfoRcd > runInfoTokenBR_
GlobalPoint position() const
TH1F * a_dxyPhiMADBiasTrend
unsigned int LuminosityBlockNumber_
TH1F * a_dxyPhiWidthTrend
double zErrOfflineVertex_
TH1F * h_yErrOfflineVertex
std::vector< TH1F * > h_norm_dxy_ladder_
int nhitsFPIX_[nMaxtracks_]
bool useTracksFromRecoVtx_
std::vector< TH1F * > a_dzPhiResiduals
TH1F * n_dzPhiMADBiasTrend
double dzError() const
error on dz
double yUnbiasedVertex_[nMaxtracks_]
bool isThere(GeomDetEnumerators::SubDetector subdet) const
std::unique_ptr< TrackClusterizerInZ > theTrackClusterizer_
TH1F * h_probeRecoVSigXY_
bool forceBeamSpotContraint_
static void fillPSetDescription(edm::ParameterSetDescription &desc)
TH1F * h_probeRefitVLogSig3D_
TH1F * h_fitVtxTrackWeights_
TH1F * a_dxymodZWidthTrend
TH2F * h2_probePassingLayer1Map_
std::vector< TH1F * > n_dxyPhiResiduals
Cos< T >::type cos(const T &t)
static const int nPtBins_
unsigned int EventNumber_
TH1F * a_dzL1ResidualsMap[nMaxBins_][nMaxBins_]
Tan< T >::type tan(const T &t)
Abs< T >::type abs(const T &t)
int nhitsTID_[nMaxtracks_]
double zUnbiasedVertex_[nMaxtracks_]
double phi() const
azimuthal angle of momentum vector
TH1F * a_dzPhiMedianTrend
std::vector< TH1F * > h_dxy_ladder_
void fill(std::map< std::string, TH1 *> &h, const std::string &s, double x)
constexpr int subdetId() const
get the contents of the subdetector field (not cast into any detector's numbering enum) ...
float chi2normUnbiasedVertex_[nMaxtracks_]
const Point & vertex() const
reference point on the track. This method is DEPRECATED, please use referencePoint() instead ...
TH1F * n_d3DResidualsMap[nMaxBins_][nMaxBins_]
bool getData(T &iHolder) const
std::vector< TH1F * > a_dxyPhiResiduals
TH1I * h_probeHasBPixL1Overlap_
std::vector< TH1F * > a_dxyPhiBiasResiduals
void analyze(const edm::Event &, const edm::EventSetup &) override
TH1F * n_dzEtaWidthBiasTrend
TH1F * a_d3DResidualsMap[nMaxBins_][nMaxBins_]
TH1F * n_dzEtaMADBiasTrend
ParameterDescriptionBase * add(U const &iLabel, T const &value)
float clusterProbability(unsigned int flags=0) const
std::vector< TH1F * > h_dxy_ladderNoOverlap_
ESHandle< T > getHandle(const ESGetToken< T, R > &iToken) const
TH1F * n_dxyL1ResidualsMap[nMaxBins_][nMaxBins_]
double IPLsigFromMyVertex_[nMaxtracks_]
double dzBs_[nMaxtracks_]
double yPCA_[nMaxtracks_]
void fillMap(TH2F *trendMap, TH1F *residualsMapPlot[100][100], PVValHelper::estimator fitPar_, const int nXBins_, const int nYBins_)
const PerigeeTrajectoryParameters & perigeeParameters() const
const edm::ESGetToken< TrackerTopology, TrackerTopologyRcd > topoToken_
bool hasFirstLayerPixelHits(const reco::TransientTrack &track)
std::vector< TH1F * > n_dzEtaResiduals
TH1F * a_dxyEtaWidthTrend
void setMap(residualType type, plotVariable plot, float low, float high)
std::unique_ptr< TrackFilterForPVFindingBase > theTrackFilter_
TH1F * n_dzPhiMeanBiasTrend
std::vector< TH1F * > n_IP3DEtaResiduals
TH1F * h_nOfflineVertices
int nhits2D_[nMaxtracks_]
TH1F * a_dxyEtaMedianBiasTrend
Log< level::Info, false > LogInfo
const int compressionSettings_
std::vector< TH1F * > h_norm_dz_pT_
bool isHit2D(const TrackingRecHit &hit, const PVValHelper::detectorPhase &thePhase) const
double eta() const
pseudorapidity of momentum vector
TH1F * n_dzPhiMedianBiasTrend
bool isBFieldConsistentWithMode(const edm::EventSetup &iSetup) const
static constexpr float d0
TH1F * a_dxyL1ResidualsMap[nMaxBins_][nMaxBins_]
void shrinkHistVectorToFit(std::vector< TH1F *> &h, unsigned int desired_size)
static TrackQuality qualityByName(const std::string &name)
std::vector< TH1F * > h_dz_pT_
const edm::ESGetToken< TransientTrackBuilder, TransientTrackRecord > ttkToken_
auto const & tracks
cannot be loose
plotLabels getTypeString(residualType type)
TFileDirectory mkdir(const std::string &dir, const std::string &descr="")
create a new subdirectory
TH1F * a_dzladderMeanTrend
const HitPattern & hitPattern() const
Access the hit pattern, indicating in which Tracker layers the track has hits.
std::vector< TH1F * > n_dzEtaBiasResiduals
edm::Service< TFileService > fs
std::vector< TH1F * > h_dz_Central_pT_
TH1F * n_dzEtaMeanBiasTrend
int nhitsTOB_[nMaxtracks_]
double chi2ndof_[nMaxtracks_]
TH1F * a_dxymodZMeanTrend
double longitudinalImpactParameter() const
std::vector< TH1F * > h_dz_ladder_
std::vector< TH1F * > a_IP2DEtaResiduals
XYZPointD XYZPoint
point in space with cartesian internal representation
double pz() const
z coordinate of momentum vector
TFileDirectory Mean2DMapsDir
double chi2() const
chi-squared of the fit
double normalizedChi2() const
chi-squared divided by n.d.o.f. (or chi-squared * 1e6 if n.d.o.f. is zero)
int nhitsTEC_[nMaxtracks_]
double yErrOfflineVertex_
constexpr double max_eta_phase0
const FreeTrajectoryState & theState() const
std::vector< TH1F * > n_IP2DPhiResiduals
void add(std::string const &label, ParameterSetDescription const &psetDescription)
double xPCA_[nMaxtracks_]
double xUnbiasedVertex_[nMaxtracks_]
std::vector< TH1F * > h_dxy_Central_pT_
TH1F * n_dxypTCentralWidthTrend
TH1F * n_dxyPhiWidthTrend
PVValHelper::detectorPhase phase_
TH1F * a_dzpTCentralMeanTrend
TH1F * a_dxypTCentralMeanTrend
TFileDirectory MedianTrendsDir
TH1F * n_dzL1ResidualsMap[nMaxBins_][nMaxBins_]
TH1F * a_dxyEtaMeanBiasTrend
TH1F * n_dxypTCentralMeanTrend
double theta() const
polar angle
std::map< unsigned int, std::pair< long long, long long > > runNumbersTimesLog_
~PrimaryVertexValidation() override
TH1F * a_dzEtaMedianBiasTrend
Pixel cluster – collection of neighboring pixels above threshold.
TString units(TString variable, Char_t axis)
double dzFromMyVertex_[nMaxtracks_]
TH1F * n_dxyEtaWidthTrend
TH1F * a_dxyPhiMeanBiasTrend
static int position[264][3]
TH1F * h_probeHitsInBPIX_
TH1F * h_recoVtxChi2Prob_
TH1F * h_probeHitsInFPIX_
TH1F * n_dxyEtaWidthBiasTrend
std::vector< TH1F * > a_reszEtaResiduals
std::vector< TH1F * > bookResidualsHistogram(const TFileDirectory &dir, unsigned int theNOfBins, PVValHelper::residualType resType, PVValHelper::plotVariable varType, bool isNormalized=false)
TH1F * a_dzmodZWidthTrend
TH1F * n_dxyladderMeanTrend
TH1F * a_dxyBiasResidualsMap[nMaxBins_][nMaxBins_]
TH1F * h_zErrOfflineVertex
T * make(const Args &...args) const
make new ROOT object
static void fillPSetDescription(edm::ParameterSetDescription &desc)
std::vector< TH1F * > a_dxPhiResiduals
std::vector< TH1F * > h_norm_dz_modZ_
TH1F * n_dxyResidualsMap[nMaxBins_][nMaxBins_]
bool passesTrackCuts(const reco::Track &track, const reco::Vertex &vertex, const std::string &qualityString_, double dxyErrMax_, double dzErrMax_, double ptErrMax_)
TH1F * n_dzpTCentralMeanTrend
TH1F * n_dzPhiMedianTrend
const edm::ESGetToken< TrackerTopology, TrackerTopologyRcd > topoTokenBR_
double dxyErrorFromMyVertex_[nMaxtracks_]
std::vector< TH1F * > a_dyEtaResiduals
TH1F * n_dxyPhiWidthBiasTrend
unsigned int pxbModule(const DetId &id) const
Log< level::Warning, false > LogWarning
std::vector< TH1F * > n_IP2DEtaResiduals
std::vector< TH1F * > h_norm_dz_ladder_
TH1F * n_dzladderWidthTrend
char const * what() const noexcept override
float sumOfWeightsUnbiasedVertex_[nMaxtracks_]
TH2F * h2_probeLayer1Map_
void fillByIndex(std::vector< TH1F *> &h, unsigned int index, double x, std::string tag="")
TH1F * n_dzBiasResidualsMap[nMaxBins_][nMaxBins_]
double d3DErrorFromMyVertex_[nMaxtracks_]
std::vector< TH1F * > a_dyPhiResiduals
double d0Error() const
error on d0
The Signals That Services Can Subscribe To This is based on ActivityRegistry h
Helper function to determine trigger accepts.
TH1F * n_dxymodZMeanTrend
std::vector< TH1F * > h_dxy_ladderOverlap_
TH1F * n_dzEtaMedianBiasTrend
const edm::ESGetToken< MagneticField, IdealMagneticFieldRecord > magFieldToken_
TH1F * a_dzBiasResidualsMap[nMaxBins_][nMaxBins_]
PVValHelper::histodetails theDetails_
TH1F * a_dxyEtaMedianTrend
std::array< float, nPtBins_+1 > mypT_bins_
int hasRecVertex_[nMaxtracks_]
TH1F * a_dzResidualsMap[nMaxBins_][nMaxBins_]
Power< A, B >::type pow(const A &a, const B &b)
double xErrOfflineVertex_
TH1F * a_dzEtaMeanBiasTrend
std::vector< TrackBaseRef >::const_iterator trackRef_iterator
The iteratator for the vector<TrackRef>
float chi2UnbiasedVertex_[nMaxtracks_]
TH1F * n_dzpTCentralWidthTrend
std::pair< long long, long long > getRunTime(const edm::EventSetup &iSetup) const
*vegas h *****************************************************used in the default bin number in original ***version of VEGAS is ***a higher bin number might help to derive a more precise ***grade subtle point
const unsigned getPXBLadders(unsigned int lay) const
std::vector< TH1F * > h_norm_dxy_Central_pT_
TH1F * n_dzmodZWidthTrend
TH1F * n_dxyPhiMedianBiasTrend
TH1F * n_dxyPhiMeanBiasTrend
Global3DVector GlobalVector
void fillTrendPlotByIndex(TH1F *trendPlot, std::vector< TH1F *> &h, PVValHelper::estimator fitPar_, PVValHelper::plotVariable plotVar=PVValHelper::END_OF_PLOTS)
double chi2_[nMaxtracks_]
std::vector< TH1F * > a_dzEtaBiasResiduals
std::vector< TH1F * > a_IP3DPhiResiduals
TH1F * n_dxyladderWidthTrend
double dxy() const
dxy parameter. (This is the transverse impact parameter w.r.t. to (0,0,0) ONLY if refPoint is close t...
int nhitsBPIX_[nMaxtracks_]
TH1F * h_probeL1ClusterProb_
std::vector< TH1F * > n_dzPhiBiasResiduals
double IP3DsigFromMyVertex_[nMaxtracks_]
TFile & file() const
return opened TFile
const edm::ESGetToken< TrackerGeometry, TrackerDigiGeometryRecord > geomTokenBR_