91 ibooker.
book1D(
"ddxyAbsoluteResiduals_tracker",
"ddxyAbsoluteResiduals_tracker", ddxyBin, ddxyMin, ddxyMax);
93 ibooker.
book1D(
"ddzAbsoluteResiduals_tracker",
"ddzAbsoluteResiduals_tracker", ddzBin, ddzMin, ddzMax);
95 ibooker.
book1D(
"dphiAbsoluteResiduals_tracker",
"dphiAbsoluteResiduals_tracker", dphiBin, dphiMin, dphiMax);
97 "dthetaAbsoluteResiduals_tracker",
"dthetaAbsoluteResiduals_tracker", dthetaBin, dthetaMin, dthetaMax);
99 ibooker.
book1D(
"dptAbsoluteResiduals_tracker",
"dptAbsoluteResiduals_tracker", dptBin, dptMin, dptMax);
101 ibooker.
book1D(
"dcurvAbsoluteResiduals_tracker",
"dcurvAbsoluteResiduals_tracker", dcurvBin, dcurvMin, dcurvMax);
104 ibooker.
book1D(
"ddxyNormalizedResiduals_tracker",
"ddxyNormalizedResiduals_tracker", normBin, normMin, normMax);
106 ibooker.
book1D(
"ddzNormalizedResiduals_tracker",
"ddzNormalizedResiduals_tracker", normBin, normMin, normMax);
108 ibooker.
book1D(
"dphiNormalizedResiduals_tracker",
"dphiNormalizedResiduals_tracker", normBin, normMin, normMax);
110 "dthetaNormalizedResiduals_tracker",
"dthetaNormalizedResiduals_tracker", normBin, normMin, normMax);
112 ibooker.
book1D(
"dptNormalizedResiduals_tracker",
"dptNormalizedResiduals_tracker", normBin, normMin, normMax);
114 ibooker.
book1D(
"dcurvNormalizedResiduals_tracker",
"dcurvNormalizedResiduals_tracker", normBin, normMin, normMax);
118 ibooker.
book1D(
"ddxyAbsoluteResiduals_global",
"ddxyAbsoluteResiduals_global", ddxyBin, ddxyMin, ddxyMax);
120 ibooker.
book1D(
"ddzAbsoluteResiduals_global",
"ddzAbsoluteResiduals_global", ddzBin, ddzMin, ddzMax);
122 ibooker.
book1D(
"dphiAbsoluteResiduals_global",
"dphiAbsoluteResiduals_global", dphiBin, dphiMin, dphiMax);
124 "dthetaAbsoluteResiduals_global",
"dthetaAbsoluteResiduals_global", dthetaBin, dthetaMin, dthetaMax);
126 ibooker.
book1D(
"dptAbsoluteResiduals_global",
"dptAbsoluteResiduals_global", dptBin, dptMin, dptMax);
128 ibooker.
book1D(
"dcurvAbsoluteResiduals_global",
"dcurvAbsoluteResiduals_global", dcurvBin, dcurvMin, dcurvMax);
131 ibooker.
book1D(
"ddxyNormalizedResiduals_global",
"ddxyNormalizedResiduals_global", normBin, normMin, normMax);
133 ibooker.
book1D(
"ddzNormalizedResiduals_global",
"ddzNormalizedResiduals_global", normBin, normMin, normMax);
135 ibooker.
book1D(
"dphiNormalizedResiduals_global",
"dphiNormalizedResiduals_global", normBin, normMin, normMax);
137 "dthetaNormalizedResiduals_global",
"dthetaNormalizedResiduals_global", normBin, normMin, normMax);
139 ibooker.
book1D(
"dptNormalizedResiduals_global",
"dptNormalizedResiduals_global", normBin, normMin, normMax);
141 ibooker.
book1D(
"dcurvNormalizedResiduals_global",
"dcurvNormalizedResiduals_global", normBin, normMin, normMax);
144 ddxyAbsoluteResiduals_tracker_->
setAxisTitle(
"(#delta d_{xy})/#sqrt{2} [#mum]");
145 ddxyAbsoluteResiduals_tracker_->setAxisTitle(
"(#delta d_{z})/#sqrt{2} [#mum]");
146 ddxyAbsoluteResiduals_tracker_->setAxisTitle(
"(#delta #phi)/#sqrt{2} [mrad]");
147 ddxyAbsoluteResiduals_tracker_->setAxisTitle(
"(#delta #theta)/#sqrt{2} [mrad]");
148 ddxyAbsoluteResiduals_tracker_->setAxisTitle(
"(#delta pT)/#sqrt{2} [GeV]");
149 ddxyAbsoluteResiduals_tracker_->setAxisTitle(
"(#delta (1/pT))/#sqrt{2} [GeV^{-1}]");
195 if (splitTracks->size() == 2) {
197 edm::LogInfo(
"TrackSplittingMonitor") <<
"Split Track size: " << splitTracks->size();
207 double nRechits1 = 0;
208 double nRechitinBPIX1 = 0;
210 if ((*iHit)->isValid()) {
212 int type = (*iHit)->geographicalId().subdetId();
219 double nRechits2 = 0;
220 double nRechitinBPIX2 = 0;
222 if ((*iHit)->isValid()) {
224 int type = (*iHit)->geographicalId().subdetId();
232 double d01 = track1.
d0();
233 double dz1 = track1.
dz();
234 double d02 = track2.
d0();
235 double dz2 = track2.
dz();
238 double pt1 = track1.
pt();
239 double pt2 = track2.
pt();
252 if ((pt1 + pt2) / 2 <
ptCut_) {
256 edm::LogInfo(
"TrackSplittingMonitor") <<
" Setected after all cuts ?";
258 double ddxyVal = d01 - d02;
259 double ddzVal = dz1 - dz2;
260 double dphiVal = track1.
phi() - track2.
phi();
261 double dthetaVal = track1.
theta() - track2.
theta();
262 double dptVal = pt1 -
pt2;
263 double dcurvVal = (1 /
pt1) - (1 / pt2);
265 double d01ErrVal = track1.
d0Error();
266 double d02ErrVal = track2.
d0Error();
267 double dz1ErrVal = track1.
dzError();
268 double dz2ErrVal = track2.
dzError();
269 double phi1ErrVal = track1.
phiError();
270 double phi2ErrVal = track2.
phiError();
273 double pt1ErrVal = track1.
ptError();
274 double pt2ErrVal = track2.
ptError();
287 sqrt(theta1ErrVal * theta1ErrVal + theta2ErrVal * theta2ErrVal));
290 dcurvVal /
sqrt(
pow(pt1ErrVal, 2) /
pow(pt1, 4) +
pow(pt2ErrVal, 2) /
pow(pt2, 4)));
295 bool topGlobalMuonFlag =
false;
296 bool bottomGlobalMuonFlag =
false;
297 int topGlobalMuon = -1;
298 int bottomGlobalMuon = -1;
299 double topGlobalMuonNorchi2 = 1e10;
300 double bottomGlobalMuonNorchi2 = 1e10;
303 for (std::vector<reco::Muon>::const_iterator gmI = splitMuons->begin(); gmI != splitMuons->end(); gmI++) {
304 if (gmI->isTrackerMuon() && gmI->isStandAloneMuon() && gmI->isGlobalMuon()) {
308 if (gmI->innerTrack() == trackerTrackRef1) {
309 if (gmI->globalTrack()->normalizedChi2() < topGlobalMuonNorchi2) {
310 topGlobalMuonFlag =
true;
311 topGlobalMuonNorchi2 = gmI->globalTrack()->normalizedChi2();
312 topGlobalMuon = gmCtr;
315 if (gmI->innerTrack() == trackerTrackRef2) {
316 if (gmI->globalTrack()->normalizedChi2() < bottomGlobalMuonNorchi2) {
317 bottomGlobalMuonFlag =
true;
318 bottomGlobalMuonNorchi2 = gmI->globalTrack()->normalizedChi2();
319 bottomGlobalMuon = gmCtr;
326 if (bottomGlobalMuonFlag && topGlobalMuonFlag) {
327 reco::Muon muonTop = splitMuons->at(topGlobalMuon);
328 reco::Muon muonBottom = splitMuons->at(bottomGlobalMuon);
333 double ddxyValGlb = glb1->d0() - glb2->d0();
334 double ddzValGlb = glb1->dz() - glb2->dz();
335 double dphiValGlb = glb1->phi() - glb2->phi();
336 double dthetaValGlb = glb1->theta() - glb2->theta();
337 double dptValGlb = glb1->pt() - glb2->pt();
338 double dcurvValGlb = (1 / glb1->pt()) - (1 / glb2->pt());
340 double d01ErrValGlb = glb1->d0Error();
341 double d02ErrValGlb = glb2->d0Error();
342 double dz1ErrValGlb = glb1->dzError();
343 double dz2ErrValGlb = glb2->dzError();
344 double phi1ErrValGlb = glb1->phiError();
345 double phi2ErrValGlb = glb2->phiError();
346 double theta1ErrValGlb = glb1->thetaError();
347 double theta2ErrValGlb = glb2->thetaError();
348 double pt1ErrValGlb = glb1->ptError();
349 double pt2ErrValGlb = glb2->ptError();
359 sqrt(d01ErrValGlb * d01ErrValGlb + d02ErrValGlb * d02ErrValGlb));
361 sqrt(dz1ErrValGlb * dz1ErrValGlb + dz2ErrValGlb * dz2ErrValGlb));
363 dphiValGlb /
sqrt(phi1ErrValGlb * phi1ErrValGlb + phi2ErrValGlb * phi2ErrValGlb));
365 dthetaValGlb /
sqrt(theta1ErrValGlb * theta1ErrValGlb + theta2ErrValGlb * theta2ErrValGlb));
367 sqrt(pt1ErrValGlb * pt1ErrValGlb + pt2ErrValGlb * pt2ErrValGlb));
369 dcurvValGlb /
sqrt(
pow(pt1ErrValGlb, 2) /
pow(pt1, 4) +
pow(pt2ErrValGlb, 2) /
pow(pt2, 4)));
edm::ESHandle< TrackerGeometry > theGeometry
MonitorElement * book1D(TString const &name, TString const &title, int const nchX, double const lowX, double const highX)
T getParameter(std::string const &) const
double d0Error() const
error on d0
MonitorElement * dthetaAbsoluteResiduals_global_
MonitorElement * dcurvNormalizedResiduals_global_
double d0() const
dxy parameter in perigee convention (d0 = -dxy)
double normalizedChi2() const
chi-squared divided by n.d.o.f. (or chi-squared * 1e6 if n.d.o.f. is zero)
MonitorElement * dthetaAbsoluteResiduals_tracker_
bool getByToken(EDGetToken token, Handle< PROD > &result) const
double theta() const
polar angle
void setCurrentFolder(std::string const &fullpath)
MonitorElement * ddzNormalizedResiduals_global_
edm::InputTag splitMuons_
MonitorElement * ddxyNormalizedResiduals_tracker_
double phi() const
azimuthal angle of momentum vector
MonitorElement * dcurvAbsoluteResiduals_tracker_
edm::ESHandle< RPCGeometry > rpcGeometry
MonitorElement * ddzAbsoluteResiduals_global_
edm::EDGetTokenT< std::vector< reco::Muon > > splitMuonsToken_
void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override
MonitorElement * dphiNormalizedResiduals_global_
MonitorElement * dthetaNormalizedResiduals_tracker_
#define DEFINE_FWK_MODULE(type)
MonitorElement * ddxyNormalizedResiduals_global_
MonitorElement * dthetaNormalizedResiduals_global_
MonitorElement * dphiNormalizedResiduals_tracker_
double pt() const
track transverse momentum
MonitorElement * dcurvAbsoluteResiduals_global_
double ptError() const
error on Pt (set to 1000 TeV if charge==0 for safety)
MonitorElement * dphiAbsoluteResiduals_tracker_
double phiError() const
error on phi
edm::ESHandle< MagneticField > theMagField
MonitorElement * ddzNormalizedResiduals_tracker_
MonitorElement * dptAbsoluteResiduals_global_
trackingRecHit_iterator recHitsBegin() const
Iterator to first hit on the track.
MonitorElement * dptAbsoluteResiduals_tracker_
edm::InputTag splitTracks_
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...
double dzError() const
error on dz
~TrackSplittingMonitor() override
TrackSplittingMonitor(const edm::ParameterSet &)
void analyze(const edm::Event &, const edm::EventSetup &) override
MonitorElement * ddzAbsoluteResiduals_tracker_
MonitorElement * ddxyAbsoluteResiduals_global_
edm::ESHandle< DTGeometry > dtGeometry
MonitorElement * dcurvNormalizedResiduals_tracker_
MonitorElement * dphiAbsoluteResiduals_global_
edm::EDGetTokenT< std::vector< reco::Track > > splitTracksToken_
MonitorElement * dptNormalizedResiduals_tracker_
MonitorElement * dptNormalizedResiduals_global_
edm::ESHandle< CSCGeometry > cscGeometry
MonitorElement * ddxyAbsoluteResiduals_tracker_
Power< A, B >::type pow(const A &a, const B &b)
double thetaError() const
error on theta
virtual TrackRef globalTrack() const
reference to Track reconstructed in both tracked and muon detector
trackingRecHit_iterator recHitsEnd() const
Iterator to last hit on the track.
virtual void setAxisTitle(const std::string &title, int axis=1)
set x-, y- or z-axis title (axis=1, 2, 3 respectively)