83 MEP hSimP_,
hSimPt_, hSimEta_, hSimPhi_, hSimDxy_, hSimDz_;
145 hNSim_ = dqm->
book1D(
"NSim" ,
"Number of particles per event", hDim.
nTrks, 0, hDim.
nTrks);
146 hNMuon_ = dqm->
book1D(
"NMuon",
"Number of muons per event" , hDim.
nTrks, 0, hDim.
nTrks);
149 hNTrks_ = dqm->
book1D(
"NTrks",
"Number of reco tracks per event", hDim.
nTrks, 0, hDim.
nTrks);
151 hNTrksPt_ = dqm->
book1D(
"NTrksPt",
"Number of reco tracks vs p_{T}", hDim.
nBinPt, hDim.
minPt, hDim.
maxPt);
171 hErrP_vs_Eta_ = dqm->
book2D(
"ErrP_vs_Eta",
"#Delta(p)/p vs #eta",
173 hErrPt_vs_Eta_ = dqm->
book2D(
"ErrPt_vs_Eta",
"#Delta(p_{T})/p_{T} vs #eta",
175 hErrQPt_vs_Eta_ = dqm->
book2D(
"ErrQPt_vs_Eta",
"#Delta(q/p_{T})/(q/p_{T}) vs #eta",
177 hErrEta_vs_Eta_ = dqm->
book2D(
"ErrEta_vs_Eta",
"#sigma(#eta) vs #eta",
181 hErrP_vs_P_ = dqm->
book2D(
"ErrP_vs_P",
"#Delta(p)/p vs p",
183 hErrPt_vs_Pt_ = dqm->
book2D(
"ErrPt_vs_Pt",
"#Delta(p_{T})/p_{T} vs p_{T}",
185 hErrQPt_vs_Pt_ = dqm->
book2D(
"ErrQPt_vs_Pt",
"#Delta(q/p_{T})/(q/p_{T}) vs p_{T}",
197 hPullPt_vs_Eta_ = dqm->
book2D(
"PullPt_vs_Eta",
"Pull(p_{T}) vs #eta",
199 hPullEta_vs_Eta_ = dqm->
book2D(
"PullEta_vs_Eta",
"Pull(#eta) vs #eta",
201 hPullPhi_vs_Eta_ = dqm->
book2D(
"PullPhi_vs_Eta",
"Pull(#phi) vs #eta",
205 hPullPt_vs_Pt_ = dqm->
book2D(
"PullPt_vs_Pt",
"Pull(p_{T}) vs p_{T}",
207 hPullEta_vs_Pt_ = dqm->
book2D(
"PullEta_vs_Pt",
"Pull(#eta) vs p_{T}",
211 const int nHits = 201;
212 hNHits_ = dqm->
book1D(
"NHits",
"Number of hits", nHits, 0, nHits);
213 hNHits_vs_Pt_ = dqm->
book2D(
"NHits_vs_Pt",
"Number of hits vs p_{T}",
215 hNHits_vs_Eta_ = dqm->
book2D(
"NHits_vs_Eta",
"Number of hits vs #eta",
217 hNSimHits_ = dqm->
book1D(
"NSimHits",
"Number of simHits", nHits, 0, nHits);
219 const int nLostHits = 5;
220 hNLostHits_ = dqm->
book1D(
"NLostHits",
"Number of Lost hits", nLostHits, 0, nLostHits);
221 hNLostHits_vs_Pt_ = dqm->
book2D(
"NLostHits_vs_Pt",
"Number of lost Hits vs p_{T}",
223 hNLostHits_vs_Eta_ = dqm->
book2D(
"NLostHits_vs_Eta",
"Number of lost Hits vs #eta",
226 const int nTrackerHits = 40;
227 hNTrackerHits_ = dqm->
book1D(
"NTrackerHits",
"Number of valid tracker hits", nTrackerHits, 0, nTrackerHits);
228 hNTrackerHits_vs_Pt_ = dqm->
book2D(
"NTrackerHits_vs_Pt",
"Number of valid traker hits vs p_{T}",
230 hNTrackerHits_vs_Eta_ = dqm->
book2D(
"NTrackerHits_vs_Eta",
"Number of valid tracker hits vs #eta",
233 const int nMuonHits = 60;
234 hNMuonHits_ = dqm->
book1D(
"NMuonHits",
"Number of valid muon hits", nMuonHits, 0, nMuonHits);
235 hNMuonHits_vs_Pt_ = dqm->
book2D(
"NMuonHits_vs_Pt",
"Number of valid muon hits vs p_{T}",
237 hNMuonHits_vs_Eta_ = dqm->
book2D(
"NMuonHits_vs_Eta",
"Number of valid muon hits vs #eta",
240 hNDof_ = dqm->
book1D(
"NDof",
"Number of DoF", hDim.
nDof, 0, hDim.
nDof);
241 hChi2_ = dqm->
book1D(
"Chi2",
"#Chi^{2}", hDim.
nBinErr, 0, 200);
242 hChi2Norm_ = dqm->
book1D(
"Chi2Norm",
"Normalized #Chi^{2}", hDim.
nBinErr, 0, 50);
243 hChi2Prob_ = dqm->
book1D(
"Chi2Prob",
"Prob(#Chi^{2})", hDim.
nBinErr, 0, 1);
245 hNDof_vs_Eta_ = dqm->
book2D(
"NDof_vs_Eta",
"Number of DoF vs #eta",
247 hChi2_vs_Eta_ = dqm->
book2D(
"Chi2_vs_Eta",
"#Chi^{2} vs #eta",
249 hChi2Norm_vs_Eta_ = dqm->
book2D(
"Chi2Norm_vs_Eta",
"Normalized #Chi^{2} vs #eta",
251 hChi2Prob_vs_Eta_ = dqm->
book2D(
"Chi2Prob_vs_Eta",
"Prob(#Chi^{2}) vs #eta",
254 hNSimToReco_ = dqm->
book1D(
"NSimToReco",
"Number of associated reco tracks", hDim.
nAssoc, 0, hDim.
nAssoc);
255 hNRecoToSim_ = dqm->
book1D(
"NRecoToSim",
"Number of associated sim TP's", hDim.
nAssoc, 0, hDim.
nAssoc);
264 const double simP = simRef->
p();
265 const double simPt = simRef->
pt();
266 const double simEta = doAbsEta_ ? fabs(simRef->
eta()) : simRef->
eta();
267 const double simPhi = simRef->
phi();
268 const double simQ = simRef->
charge();
269 const double simQPt = simQ/simPt;
273 const double simDxy = -simVtx.
x()*
sin(simPhi)+simVtx.y()*
cos(simPhi);
274 const double simDz = simVtx.z() - (simVtx.x()*simMom.x()+simVtx.y()*simMom.y())*simMom.z()/simMom.perp2();
293 hNHits_->Fill(nRecoHits);
294 hNHits_vs_Pt_ ->Fill(simPt , nRecoHits);
295 hNHits_vs_Eta_->Fill(simEta, nRecoHits);
297 hNLostHits_->Fill(nLostHits);
298 hNLostHits_vs_Pt_ ->Fill(simPt , nLostHits);
299 hNLostHits_vs_Eta_->Fill(simEta, nLostHits);
301 const double recoNDof = recoRef->
ndof();
302 const double recoChi2 = recoRef->
chi2();
304 const double recoChi2Prob = TMath::Prob(recoRef->
chi2(),
static_cast<int>(recoRef->
ndof()));
306 hNDof_->Fill(recoNDof);
307 hChi2_->Fill(recoChi2);
308 hChi2Norm_->Fill(recoChi2Norm);
309 hChi2Prob_->Fill(recoChi2Prob);
311 hNDof_vs_Eta_->Fill(simEta, recoNDof);
312 hChi2_vs_Eta_->Fill(simEta, recoChi2);
313 hChi2Norm_vs_Eta_->Fill(simEta, recoChi2Norm);
314 hChi2Prob_vs_Eta_->Fill(simEta, recoChi2Prob);
316 const double recoQ = recoRef->
charge();
317 if ( simQ*recoQ < 0 ) {
318 hMisQPt_ ->Fill(simPt );
319 hMisQEta_->Fill(simEta);
322 const double recoP = recoRef->
p();
323 const double recoPt = recoRef->
pt();
324 const double recoEta = recoRef->
eta();
325 const double recoPhi = recoRef->
phi();
326 const double recoQPt = recoQ/recoPt;
328 const double recoDxy = recoRef->
dxy();
329 const double recoDz = recoRef->
dz();
331 const double errP = (recoP-simP)/simP;
332 const double errPt = (recoPt-simPt)/simPt;
333 const double errEta = (recoEta-simEta)/simEta;
334 const double errPhi = (recoPhi-simPhi)/simPhi;
335 const double errQPt = (recoQPt-simQPt)/simQPt;
337 const double errDxy = (recoDxy-simDxy)/simDxy;
338 const double errDz = (recoDz-simDz)/simDz;
345 hErrP_ ->Fill(errP );
346 hErrPt_ ->Fill(errPt );
347 hErrEta_->Fill(errEta);
348 hErrPhi_->Fill(errPhi);
349 hErrDxy_->Fill(errDxy);
350 hErrDz_ ->Fill(errDz );
352 if(fabs(simEta) > 0. && fabs(simEta) < 0.8) {
353 hErrPBarrel_->Fill(errP);
354 hErrPtBarrel_->Fill(errPt);
355 }
else if (fabs(simEta) > 0.8 && fabs(simEta) < 1.2) {
356 hErrPOverlap_->Fill(errP);
357 hErrPtOverlap_->Fill(errPt);
358 }
else if (fabs(simEta) > 1.2 ){
359 hErrPEndcap_->Fill(errP);
360 hErrPtEndcap_->Fill(errPt);
363 hErrP_vs_Eta_ ->Fill(simEta, errP );
364 hErrPt_vs_Eta_ ->Fill(simEta, errPt );
365 hErrQPt_vs_Eta_->Fill(simEta, errQPt);
367 hErrP_vs_P_ ->Fill(simP , errP );
368 hErrPt_vs_Pt_ ->Fill(simPt , errPt );
369 hErrQPt_vs_Pt_->Fill(simQPt, errQPt);
371 hErrEta_vs_Eta_->Fill(simEta, errEta);
373 const double pullPt = (recoPt-simPt)/recoRef->
ptError();
374 const double pullQPt = (recoQPt-simQPt)/recoRef->
qoverpError();
375 const double pullEta = (recoEta-simEta)/recoRef->
etaError();
376 const double pullPhi = (recoPhi-simPhi)/recoRef->
phiError();
377 const double pullDxy = (recoDxy-simDxy)/recoRef->
dxyError();
378 const double pullDz = (recoDz-simDz)/recoRef->
dzError();
380 hPullPt_ ->Fill(pullPt );
381 hPullEta_->Fill(pullEta);
382 hPullPhi_->Fill(pullPhi);
383 hPullQPt_->Fill(pullQPt);
384 hPullDxy_->Fill(pullDxy);
385 hPullDz_ ->Fill(pullDz );
387 hPullPt_vs_Eta_->Fill(simEta, pullPt);
388 hPullPt_vs_Pt_ ->Fill(simPt, pullPt);
390 hPullEta_vs_Eta_->Fill(simEta, pullEta);
391 hPullPhi_vs_Eta_->Fill(simEta, pullPhi);
393 hPullEta_vs_Pt_->Fill(simPt, pullEta);
415 MEP hMuonTrackP_,
hMuonTrackPt_, hMuonTrackEta_, hMuonTrackPhi_, hMuonTrackDxy_, hMuonTrackDz_;
424 selector_(pset.getParameter<std::string>(
"selection"))
498 std::string trackType = pset.
getParameter< std::string >(
"trackType");
503 else throw cms::Exception(
"Configuration") <<
"Track type '" << trackType <<
"' not supported.\n";
529 LogError(
"RecoMuonValidator") <<
"DQMService not initialized\n";
546 const int nHits = 201;
607 if (assoByHits == 0)
throw cms::Exception(
"Configuration") <<
"The Track Associator with label '" <<
muAssocLabel_.
label() <<
"' is not a MuonAssociatorByHits.\n";
626 LogError(
"RecoMuonValidator") <<
"DQMService not initialized\n";
643 Muons = muonHandle->refVector();
646 for (
size_t i = 0;
i < nSim; ++
i) {
688 int glbNTrackerHits = 0;
int trkNTrackerHits = 0;
int staNTrackerHits = 0;
689 int glbNMuonHits = 0;
int trkNMuonHits = 0;
int staNMuonHits = 0;
690 int NTrackerHits = 0;
int NMuonHits = 0;
694 iMuon != muonColl.
end(); ++iMuon) {
718 if (iMuon->isGlobalMuon()) {
719 Track = iMuon->combinedMuon();
722 }
else if (iMuon->isTrackerMuon()) {
723 Track = iMuon->track();
727 Track = iMuon->standAloneMuon();
746 if (iMuon->isGlobalMuon()) {
747 double gtHitPat = iMuon->globalTrack()->hitPattern().numberOfHits() - iMuon->globalTrack()->hitPattern().numberOfValidHits();
748 double itHitPat = iMuon->innerTrack()->hitPattern().numberOfHits() - iMuon->innerTrack()->hitPattern().numberOfValidHits();
749 double otHitPat = iMuon->outerTrack()->hitPattern().numberOfHits() - iMuon->outerTrack()->hitPattern().numberOfValidHits();
766 if (iMuon->isGlobalMuon() && iMuon->isStandAloneMuon()) {
773 if (iMuon->isGlobalMuon() && iMuon->isTrackerMuon()) {
788 const double simP = simRef->p();
789 const double simPt = simRef->pt();
790 const double simEta =
doAbsEta_ ? fabs(simRef->eta()) : simRef->eta();
791 const double simPhi = simRef->phi();
793 GlobalPoint simVtx(simRef->vertex().x(), simRef->vertex().y(), simRef->vertex().z());
794 GlobalVector simMom(simRef->momentum().x(), simRef->momentum().y(), simRef->momentum().z());
795 const double simDxy = -simVtx.
x()*
sin(simPhi)+simVtx.y()*
cos(simPhi);
796 const double simDz = simVtx.z() - (simVtx.x()*simMom.x()+simVtx.y()*simMom.y())*simMom.z()/simMom.perp2();
798 const unsigned int nSimHits = simRef->pSimHit_end() - simRef->pSimHit_begin();
809 vector<pair<RefToBase<Muon>,
double> > MuRefV;
810 if ( simToMuonColl.find(simRef) != simToMuonColl.end() ) {
811 MuRefV = simToMuonColl[simRef];
813 if ( !MuRefV.empty()) {
815 const Muon*
Mu = MuRefV.begin()->first.get();
834 if((*hit)->isValid()) {
835 DetId recoid = (*hit)->geographicalId();
849 if((*hit)->isValid()) {
850 DetId recoid = (*hit)->geographicalId();
double p() const
momentum vector magnitude
T getParameter(std::string const &) const
MEP hNInvalidHitsITHitPattern_
T getUntrackedParameter(std::string const &, T const &) const
boost::indirect_iterator< typename seq_t::const_iterator > const_iterator
MEP hNTrackerHits_vs_Eta_
MEP hStaToGlbDiffNMuonHits_
int charge() const
electric charge
MonitorElement * book1D(const char *name, const char *title, int nchX, double lowX, double highX)
Book 1D histogram.
double normalizedChi2() const
chi-squared divided by n.d.o.f. (or chi-squared * 1e6 if n.d.o.f. is zero)
double dxyError() const
error on dxy
void cd(void)
go to top directory (ie. root)
void associateMuons(MuonToSimCollection &recoToSim, SimToMuonCollection &simToReco, const edm::RefToBaseVector< reco::Muon > &, MuonTrackType, const edm::RefVector< TrackingParticleCollection > &, const edm::Event *event=0, const edm::EventSetup *setup=0) const
void save(const std::string &filename, const std::string &path="", const std::string &pattern="", const std::string &rewrite="", SaveReferenceTag ref=SaveWithReference, int minStatus=dqm::qstatus::STATUS_OK, const std::string &fileupdate="RECREATE")
Sin< T >::type sin(const T &t)
double etaError() const
error on eta
virtual TrackRef track() const
reference to a Track
StringCutObjectSelector< reco::Muon > selector_
double phi() const
azimuthal angle of momentum vector
unsigned short numberOfLostHits() const
number of cases where track crossed a layer without getting a hit.
MEP hNInvalidHitsGTHitPattern_
MEP hNInvalidHitsOTHitPattern_
double pt() const
transverse momentum
TrajectoryStateOnSurface TSOS
MEP hTrkToGlbDiffNTrackerHitsEta_
virtual int countTrackerHits(const reco::Track &track) const
MEP hTrkToGlbDiffNTrackerHits_
TrackingParticleSelector tpSelector_
bool isNonnull() const
Checks for non-null.
SingleObjectSelector< TrackingParticleCollection,::TrackingParticleSelector > TrackingParticleSelector
std::map< TrackingParticleRef, std::vector< std::pair< edm::RefToBase< reco::Muon >, double > > > SimToMuonCollection
double phi() const
momentum azimuthal angle
double p() const
magnitude of momentum vector
virtual void analyze(const edm::Event &event, const edm::EventSetup &eventSetup)
double eta() const
pseudorapidity of momentum vector
MuonServiceProxy * theMuonService
double chi2() const
chi-squared of the fit
double ndof() const
number of degrees of freedom of the fit
edm::InputTag muAssocLabel_
double pt() const
track transverse momentum
Cos< T >::type cos(const T &t)
double ptError() const
error on Pt (set to 1000 TeV if charge==0 for safety)
virtual int countMuonHits(const reco::Track &track) const
double phiError() const
error on phi
const MuonAssociatorByHits * assoByHits
std::string outputFileName_
unsigned short numberOfValidHits() const
number of valid hits found
trackingRecHit_iterator recHitsBegin() const
Iterator to first hit on the track.
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger but the state exists so we define the behavior If all triggers are the negative crieriion will lead to accepting the event(this again matches the behavior of"!*"before the partial wildcard feature was incorporated).The per-event"cost"of each negative criterion with multiple relevant triggers is about the same as!*was in the past
MEP hTrkToGlbDiffNTrackerHitsPt_
virtual void beginRun(const edm::Run &, const edm::EventSetup &eventSetup)
double qoverpError() const
error on signed transverse curvature
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
MuonAssociatorByHits::MuonTrackType trackType_
std::vector< ConstRecHitPointer > ConstRecHitContainer
MEP hNDeltaInvalidHitsHitPattern_
MEP hStaToGlbDiffNMuonHitsEta_
T const * product() const
Vector momentum() const
spatial momentum vector
MEP hStaToGlbDiffNMuonHitsPt_
T const * product() const
void push_back(value_type const &ref)
Add a Ref<C, T> to the RefVector.
const_iterator begin() const
int charge() const
track electric charge
const_iterator end() const
std::vector< TrackingParticle > TrackingParticleCollection
void showDirStructure(void) const
MonitorElement * book2D(const char *name, const char *title, int nchX, double lowX, double highX, int nchY, double lowY, double highY)
Book 2D histogram.
T const * get() const
Returns C++ pointer to the item.
Detector det() const
get the detector field from this detid
const Point & vertex() const
vertex position
double dxy() const
dxy parameter. (This is the transverse impact parameter w.r.t. to (0,0,0) ONLY if refPoint is close t...
void fill(const TrackingParticle *simRef, const Track *recoRef)
std::map< edm::RefToBase< reco::Muon >, std::vector< std::pair< TrackingParticleRef, double > >, RefToBaseSort > MuonToSimCollection
edm::Ref< TrackingParticleCollection > TrackingParticleRef
RecoMuonValidator(const edm::ParameterSet &pset)
void setCurrentFolder(const std::string &fullpath)
void bookHistograms(DQMStore *dqm, const string &dirName, const HistoDimensions &hDim)
double eta() const
momentum pseudorapidity
trackingRecHit_iterator recHitsEnd() const
Iterator to last hit on the track.