65 ,
ptMin_ ( iConfig.getParameter<double> (
"ptMin") )
66 ,
chi2Min_ ( iConfig.getParameter<double> (
"chi2Min") )
67 ,
p1_ ( iConfig.getParameter<double> (
"p1") )
68 ,
p2_ ( iConfig.getParameter<double> (
"p2") )
69 ,
p3_ ( iConfig.getParameter<double> (
"p3") )
70 ,
debug_ ( iConfig.getParameter<
bool> (
"debug") )
92 bool foundBadTrack =
false;
94 for (
unsigned i=0;
i<pfCandidates->size(); ++
i ) {
108 if (muon->muonBestTrack()->hitPattern().numberOfValidMuonHits() == 0) {
111 if (muon->globalTrack()->normalizedChi2() >
chi2Min_) {
112 foundBadTrack =
true;
113 if (
debug_ )
cout <<
"globalTrack numberOfValidMuonHits: " << muon->globalTrack()->hitPattern().numberOfValidMuonHits() <<
114 " numberOfValidMuonCSCHits: " << muon->globalTrack()->hitPattern().numberOfValidMuonCSCHits() <<
115 " numberOfValidMuonDTHits: " << muon->globalTrack()->hitPattern().numberOfValidMuonDTHits() <<
116 " normalizedChi2: " << muon->globalTrack()->normalizedChi2() << endl;
117 if (
debug_ )
cout <<
"muonBestTrack numberOfValidMuonHits: " << muon->muonBestTrack()->hitPattern().numberOfValidMuonHits() <<
118 " numberOfValidMuonCSCHits: " << muon->muonBestTrack()->hitPattern().numberOfValidMuonCSCHits() <<
119 " numberOfValidMuonDTHits: " << muon->muonBestTrack()->hitPattern().numberOfValidMuonDTHits() <<
120 " normalizedChi2: " << muon->muonBestTrack()->normalizedChi2() << endl;
131 const double Pt = trackref->pt();
132 const double DPt = trackref->ptError();
133 const double P = trackref->p();
134 const unsigned int LostHits = trackref->numberOfLostHits();
138 foundBadTrack =
true;
141 cout << cand << endl;
142 cout <<
"muon \t" <<
"track pT = " << Pt <<
" +/- " << DPt;
150 const double P = muon->innerTrack()->p();
151 const double DPt = muon->innerTrack()->ptError();
153 if (
debug_ )
cout <<
"innerTrack DPt/P: " << DPt/P << endl;
155 if (
debug_ )
cout <<
"innerTrack good" << endl;
161 const double P = muon->pickyTrack()->p();
162 const double DPt = muon->pickyTrack()->ptError();
164 if (
debug_ )
cout <<
"pickyTrack DPt/P: " << DPt/P << endl;
166 if (
debug_ )
cout <<
"pickyTrack good" << endl;
172 const double P = muon->globalTrack()->p();
173 const double DPt = muon->globalTrack()->ptError();
175 if (
debug_ )
cout <<
"globalTrack DPt/P: " << DPt/P << endl;
177 if (
debug_ )
cout <<
"globalTrack good" << endl;
183 const double P = muon->tpfmsTrack()->p();
184 const double DPt = muon->tpfmsTrack()->ptError();
186 if (
debug_ )
cout <<
"tpfmsTrack DPt/P: " << DPt/P << endl;
188 if (
debug_ )
cout <<
"tpfmsTrack good" << endl;
194 const double P = muon->dytTrack()->p();
195 const double DPt = muon->dytTrack()->ptError();
197 if (
debug_ )
cout <<
"dytTrack DPt/P: " << DPt/P << endl;
199 if (
debug_ )
cout <<
"dytTrack good" << endl;
204 if (
debug_ )
cout <<
"No tracks are good" << endl;
205 foundBadTrack =
true;
211 bool pass = !foundBadTrack;
213 iEvent.
put(std::make_unique<bool>(pass));
221 std::ostringstream
out;
224 out <<
"track ref not set";
227 out <<
"track ref not available";
231 out <<
"pt = " << track.
pt() <<
" +- " << track.
ptError()/track.
pt()
241 <<
"; Valid inner hits:" 253 bool isGL = muonRef->isGlobalMuon();
254 bool isTR = muonRef->isTrackerMuon();
255 bool isST = muonRef->isStandAloneMuon();
256 bool isTPFMS = muonRef->tpfmsTrack().
isNonnull() && muonRef->tpfmsTrack()->pt()>0;
257 bool isPicky = muonRef->pickyTrack().
isNonnull() && muonRef->pickyTrack()->pt()>0;
258 bool isDyt = muonRef->dytTrack().
isNonnull() && muonRef->dytTrack()->pt()>0;
269 default:tunePTypeStr =
"unknow";
break;
273 <<
" eta " << muonRef->eta()
277 <<
" TPFMS: "<<isTPFMS
278 <<
" Picky: "<<isPicky
280 <<
" TuneP: "<<tunePTypeStr
281 <<
" nMatches "<<muonRef->numberOfMatches()<<std::endl;
298 <<
"\t\tTMLastStationAngTight " 300 <<
"\t\tTMLastStationLoose " 302 <<
"\t\tTMLastStationTight " 304 <<
"\t\tTMOneStationLoose " 306 <<
"\t\tTMOneStationTight " 308 <<
"\t\tTMLastStationOptimizedLowPtLoose " 310 <<
"\t\tTMLastStationOptimizedLowPtTight " 312 <<
"\t\tTMLastStationOptimizedBarrelLowPtLoose " 314 <<
"\t\tTMLastStationOptimizedBarrelLowPtTight " 333 <<
"TM2DCompatibilityTight " 336 if ( muonRef->isGlobalMuon()
337 && muonRef->isTrackerMuon()
338 && muonRef->isStandAloneMuon() ) {
343 double sigmaCombined = combinedMu->ptError()/(combinedMu->pt()*combinedMu->pt());
344 double sigmaTracker = trackerMu->ptError()/(trackerMu->pt()*trackerMu->pt());
345 double sigmaStandAlone = standAloneMu->ptError()/(standAloneMu->pt()*standAloneMu->pt());
347 bool combined = combinedMu->ptError()/combinedMu->pt() < 0.20;
348 bool tracker = trackerMu->ptError()/trackerMu->pt() < 0.20;
349 bool standAlone = standAloneMu->ptError()/standAloneMu->pt() < 0.20;
351 double delta1 = combined && tracker ?
352 fabs(1./combinedMu->pt() -1./trackerMu->pt())
353 /
sqrt(sigmaCombined*sigmaCombined + sigmaTracker*sigmaTracker) : 100.;
354 double delta2 = combined && standAlone ?
355 fabs(1./combinedMu->pt() -1./standAloneMu->pt())
356 /
sqrt(sigmaCombined*sigmaCombined + sigmaStandAlone*sigmaStandAlone) : 100.;
358 double delta3 = standAlone && tracker ?
359 fabs(1./standAloneMu->pt() -1./trackerMu->pt())
360 /
sqrt(sigmaStandAlone*sigmaStandAlone + sigmaTracker*sigmaTracker) : 100.;
363 standAloneMu->hitPattern().numberOfValidMuonDTHits()+
364 standAloneMu->hitPattern().numberOfValidMuonCSCHits() > 0 ?
367 std::cout <<
"delta = " << delta <<
" delta1 "<<delta1<<
" delta2 "<<delta2<<
" delta3 "<<delta3<<std::endl;
370 combinedMu->ptError()/combinedMu->pt()
371 / (trackerMu->ptError()/trackerMu->pt());
373 std::cout<<
" ratio "<<ratio<<
" combined mu pt "<<combinedMu->pt()<<std::endl;
377 double sumPtR03 = muonRef->isolationR03().sumPt;
378 double emEtR03 = muonRef->isolationR03().emEt;
379 double hadEtR03 = muonRef->isolationR03().hadEt;
380 double relIsoR03 = (sumPtR03 + emEtR03 + hadEtR03)/muonRef->pt();
381 double sumPtR05 = muonRef->isolationR05().sumPt;
382 double emEtR05 = muonRef->isolationR05().emEt;
383 double hadEtR05 = muonRef->isolationR05().hadEt;
384 double relIsoR05 = (sumPtR05 + emEtR05 + hadEtR05)/muonRef->pt();
385 std::cout<<
" 0.3 Rel Iso: "<<relIsoR03<<
" sumPt "<<sumPtR03<<
" emEt "<<emEtR03<<
" hadEt "<<hadEtR03<<std::endl;
386 std::cout<<
" 0.5 Rel Iso: "<<relIsoR05<<
" sumPt "<<sumPtR05<<
" emEt "<<emEtR05<<
" hadEt "<<hadEtR05<<std::endl;
int pdgId() const final
PDG identifier.
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
bool isNonnull() const
Checks for non-null.
double normalizedChi2() const
chi-squared divided by n.d.o.f. (or chi-squared * 1e6 if n.d.o.f. is zero)
bool getByToken(EDGetToken token, Handle< PROD > &result) const
~MuonBadTrackFilter() override
double pt() const final
transverse momentum
virtual std::string trackInfo(const reco::TrackRef &trackRef) const
int numberOfLostMuonHits() const
int numberOfValidMuonCSCHits() const
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
int numberOfValidMuonRPCHits() const
reco::TrackRef trackRef() const
#define DEFINE_FWK_MODULE(type)
MuonBadTrackFilter(const edm::ParameterSet &)
double pt() const
track transverse momentum
double ptError() const
error on Pt (set to 1000 TeV if charge==0 for safety)
Abs< T >::type abs(const T &t)
bool filter(edm::StreamID iID, edm::Event &, const edm::EventSetup &) const override
int numberOfLostMuonRPCHits() const
bool isNull() const
Checks for null.
bool isGoodMuon(const reco::Muon &muon, SelectionType type, reco::Muon::ArbitrationType arbitrationType=reco::Muon::SegmentAndTrackArbitration)
main GoodMuon wrapper call
reco::MuonRef muonRef() const
std::vector< reco::PFCandidate > PFCandidateCollection
collection of PFCandidates
const HitPattern & hitPattern() const
Access the hit pattern, indicating in which Tracker layers the track has hits.
std::pair< OmniClusterRef, TrackingParticleRef > P
int numberOfValidTrackerHits() const
virtual void printMuonProperties(const reco::MuonRef &muonRef) const
Particle reconstructed by the particle flow algorithm.
int numberOfLostMuonDTHits() const
edm::EDGetTokenT< reco::PFCandidateCollection > tokenPFCandidates_
int numberOfValidMuonDTHits() const
int numberOfValidPixelHits() const
MuonTrackType
map for Global Muon refitters
int numberOfValidMuonHits() const
int numberOfLostMuonCSCHits() const