CMS 3D CMS Logo

List of all members | Public Member Functions | Private Member Functions | Private Attributes
MuonBadTrackFilter Class Reference
Inheritance diagram for MuonBadTrackFilter:
edm::global::EDFilter<> edm::global::EDFilterBase edm::ProducerBase edm::EDConsumerBase edm::ProductRegistryHelper

Public Member Functions

 MuonBadTrackFilter (const edm::ParameterSet &)
 
 ~MuonBadTrackFilter () override
 
- Public Member Functions inherited from edm::global::EDFilter<>
 EDFilter ()=default
 
bool hasAbilityToProduceInLumis () const final
 
bool hasAbilityToProduceInRuns () const final
 
bool wantsGlobalLuminosityBlocks () const final
 
bool wantsGlobalRuns () const final
 
bool wantsStreamLuminosityBlocks () const final
 
bool wantsStreamRuns () const final
 
- Public Member Functions inherited from edm::global::EDFilterBase
 EDFilterBase ()
 
ModuleDescription const & moduleDescription () const
 
 ~EDFilterBase () override
 
- Public Member Functions inherited from edm::ProducerBase
void callWhenNewProductsRegistered (std::function< void(BranchDescription const &)> const &func)
 
std::vector< edm::ProductResolverIndex > const & indiciesForPutProducts (BranchType iBranchType) const
 
 ProducerBase ()
 
std::vector< edm::ProductResolverIndex > const & putTokenIndexToProductResolverIndex () const
 
void registerProducts (ProducerBase *, ProductRegistry *, ModuleDescription const &)
 
std::function< void(BranchDescription const &)> registrationCallback () const
 used by the fwk to register list of products More...
 
void resolvePutIndicies (BranchType iBranchType, ModuleToResolverIndicies const &iIndicies, std::string const &moduleLabel)
 
 ~ProducerBase () noexcept(false) override
 
- Public Member Functions inherited from edm::EDConsumerBase
std::vector< ConsumesInfoconsumesInfo () const
 
void convertCurrentProcessAlias (std::string const &processName)
 Convert "@currentProcess" in InputTag process names to the actual current process name. More...
 
 EDConsumerBase ()
 
 EDConsumerBase (EDConsumerBase const &)=delete
 
 EDConsumerBase (EDConsumerBase &&)=default
 
ESProxyIndex const * esGetTokenIndices (edm::Transition iTrans) const
 
ProductResolverIndexAndSkipBit indexFrom (EDGetToken, BranchType, TypeID const &) const
 
void itemsMayGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
void itemsToGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
std::vector< ProductResolverIndexAndSkipBit > const & itemsToGetFrom (BranchType iType) const
 
void labelsForToken (EDGetToken iToken, Labels &oLabels) const
 
void modulesWhoseProductsAreConsumed (std::vector< ModuleDescription const * > &modules, ProductRegistry const &preg, std::map< std::string, ModuleDescription const * > const &labelsToDesc, std::string const &processName) const
 
EDConsumerBase const & operator= (EDConsumerBase const &)=delete
 
EDConsumerBaseoperator= (EDConsumerBase &&)=default
 
bool registeredToConsume (ProductResolverIndex, bool, BranchType) const
 
bool registeredToConsumeMany (TypeID const &, BranchType) const
 
ProductResolverIndexAndSkipBit uncheckedIndexFrom (EDGetToken) const
 
void updateLookup (BranchType iBranchType, ProductResolverIndexHelper const &, bool iPrefetchMayGet)
 
void updateLookup (eventsetup::ESRecordsToProxyIndices const &)
 
virtual ~EDConsumerBase () noexcept(false)
 

Private Member Functions

bool filter (edm::StreamID iID, edm::Event &, const edm::EventSetup &) const override
 
virtual void printMuonProperties (const reco::MuonRef &muonRef) const
 
virtual std::string trackInfo (const reco::TrackRef &trackRef) const
 

Private Attributes

const double chi2Min_
 
const bool debug_
 
const double p1_
 
const double p2_
 
const double p3_
 
const double ptMin_
 
const bool taggingMode_
 
edm::EDGetTokenT< reco::PFCandidateCollectiontokenPFCandidates_
 

Additional Inherited Members

- Public Types inherited from edm::global::EDFilterBase
typedef EDFilterBase ModuleType
 
- Public Types inherited from edm::ProducerBase
using ModuleToResolverIndicies = std::unordered_multimap< std::string, std::tuple< edm::TypeID const *, const char *, edm::ProductResolverIndex >>
 
typedef ProductRegistryHelper::TypeLabelList TypeLabelList
 
- Public Types inherited from edm::EDConsumerBase
typedef ProductLabels Labels
 
- Static Public Member Functions inherited from edm::global::EDFilterBase
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
static void prevalidate (ConfigurationDescriptions &descriptions)
 
- Protected Member Functions inherited from edm::EDConsumerBase
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > consumes (edm::InputTag const &tag)
 
EDGetToken consumes (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken consumes (TypeToGet const &id, edm::InputTag const &tag)
 
ConsumesCollector consumesCollector ()
 Use a ConsumesCollector to gather consumes information from helper functions. More...
 
template<typename ProductType , BranchType B = InEvent>
void consumesMany ()
 
void consumesMany (const TypeToGet &id)
 
template<BranchType B>
void consumesMany (const TypeToGet &id)
 
template<typename ESProduct , typename ESRecord , Transition Tr = Transition::Event>
auto esConsumes ()
 
template<typename ESProduct , typename ESRecord , Transition Tr = Transition::Event>
auto esConsumes (ESInputTag const &tag)
 
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > mayConsume (edm::InputTag const &tag)
 
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 

Detailed Description

Definition at line 28 of file MuonBadTrackFilter.cc.

Constructor & Destructor Documentation

MuonBadTrackFilter::MuonBadTrackFilter ( const edm::ParameterSet iConfig)
explicit

Definition at line 62 of file MuonBadTrackFilter.cc.

63  : tokenPFCandidates_ ( consumes<reco::PFCandidateCollection>(iConfig.getParameter<edm::InputTag> ("PFCandidates") ))
64  , taggingMode_ ( iConfig.getParameter<bool> ("taggingMode") )
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") )
71 {
72  produces<bool>();
73 }
T getParameter(std::string const &) const
edm::EDGetTokenT< reco::PFCandidateCollection > tokenPFCandidates_
MuonBadTrackFilter::~MuonBadTrackFilter ( )
override

Definition at line 75 of file MuonBadTrackFilter.cc.

75 { }

Member Function Documentation

bool MuonBadTrackFilter::filter ( edm::StreamID  iID,
edm::Event iEvent,
const edm::EventSetup iSetup 
) const
overrideprivate

Definition at line 84 of file MuonBadTrackFilter.cc.

References funct::abs(), chi2Min_, gather_cfg::cout, debug_, edm::Event::getByToken(), mps_fire::i, edm::Ref< C, T, F >::isAvailable(), edm::Ref< C, T, F >::isNull(), reco::PFCandidate::muonRef(), p1_, p2_, p3_, reco::LeafCandidate::pdgId(), patMuonMerger_cfi::pfCandidates, printMuonProperties(), reco::tau::disc::Pt(), reco::LeafCandidate::pt(), ptMin_, edm::Event::put(), mathSSE::sqrt(), taggingMode_, tokenPFCandidates_, and reco::PFCandidate::trackRef().

85 {
86  using namespace std;
87  using namespace edm;
88 
90  iEvent.getByToken(tokenPFCandidates_,pfCandidates);
91 
92  bool foundBadTrack = false;
93 
94  for ( unsigned i=0; i<pfCandidates->size(); ++i ) {
95 
96  const reco::PFCandidate & cand = (*pfCandidates)[i];
97 
98  if ( std::abs(cand.pdgId()) != 13 ) continue;
99 
100  if (cand.pt() < ptMin_) continue;
101 
102  if (cand.muonRef().isNull()) continue;
103 
104  const reco::MuonRef muon = cand.muonRef();
105  if ( debug_ ) printMuonProperties(muon);
106 
107  if (muon->muonBestTrack().isAvailable()) {
108  if (muon->muonBestTrack()->hitPattern().numberOfValidMuonHits() == 0) {
109 
110  if (muon->globalTrack().isAvailable()) {
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;
121  }
122  }
123 
124  }
125  }
126 
127  // perform same check as for charged hadrons
128  if (!cand.trackRef().isNull()) {
129 
130  const reco::TrackRef trackref = cand.trackRef();
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();
135 
136  if ((DPt/Pt) > (p1_ * sqrt(p2_*p2_/P+p3_*p3_) / (1.+LostHits))) {
137 
138  foundBadTrack = true;
139 
140  if ( debug_ ) {
141  cout << cand << endl;
142  cout << "muon \t" << "track pT = " << Pt << " +/- " << DPt;
143  cout << endl;
144  }
145  }
146  }
147 
148  // check if at least one track has good quality
149  if (muon->innerTrack().isAvailable()) {
150  const double P = muon->innerTrack()->p();
151  const double DPt = muon->innerTrack()->ptError();
152  if (P != 0) {
153  if ( debug_ ) cout << "innerTrack DPt/P: " << DPt/P << endl;
154  if (DPt/P < 1) {
155  if ( debug_ ) cout << "innerTrack good" << endl;
156  continue;
157  }
158  }
159  }
160  if (muon->pickyTrack().isAvailable()) {
161  const double P = muon->pickyTrack()->p();
162  const double DPt = muon->pickyTrack()->ptError();
163  if (P != 0) {
164  if ( debug_ ) cout << "pickyTrack DPt/P: " << DPt/P << endl;
165  if (DPt/P < 1) {
166  if ( debug_ ) cout << "pickyTrack good" << endl;
167  continue;
168  }
169  }
170  }
171  if (muon->globalTrack().isAvailable()) {
172  const double P = muon->globalTrack()->p();
173  const double DPt = muon->globalTrack()->ptError();
174  if (P != 0) {
175  if ( debug_ ) cout << "globalTrack DPt/P: " << DPt/P << endl;
176  if (DPt/P < 1) {
177  if ( debug_ ) cout << "globalTrack good" << endl;
178  continue;
179  }
180  }
181  }
182  if (muon->tpfmsTrack().isAvailable()) {
183  const double P = muon->tpfmsTrack()->p();
184  const double DPt = muon->tpfmsTrack()->ptError();
185  if (P != 0) {
186  if ( debug_ ) cout << "tpfmsTrack DPt/P: " << DPt/P << endl;
187  if (DPt/P < 1) {
188  if ( debug_ ) cout << "tpfmsTrack good" << endl;
189  continue;
190  }
191  }
192  }
193  if (muon->dytTrack().isAvailable()) {
194  const double P = muon->dytTrack()->p();
195  const double DPt = muon->dytTrack()->ptError();
196  if (P != 0) {
197  if ( debug_ ) cout << "dytTrack DPt/P: " << DPt/P << endl;
198  if (DPt/P < 1) {
199  if ( debug_ ) cout << "dytTrack good" << endl;
200  continue;
201  }
202  }
203  }
204  if ( debug_ ) cout << "No tracks are good" << endl;
205  foundBadTrack = true;
206 
207 
208  } // end loop over PF candidates
209 
210 
211  bool pass = !foundBadTrack;
212 
213  iEvent.put(std::make_unique<bool>(pass));
214 
215  return taggingMode_ || pass;
216 }
bool isAvailable() const
Definition: Ref.h:575
int pdgId() const final
PDG identifier.
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:125
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:517
double pt() const final
transverse momentum
reco::TrackRef trackRef() const
Definition: PFCandidate.cc:442
T sqrt(T t)
Definition: SSEVec.h:18
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
bool isNull() const
Checks for null.
Definition: Ref.h:248
reco::MuonRef muonRef() const
Definition: PFCandidate.cc:459
std::pair< OmniClusterRef, TrackingParticleRef > P
virtual void printMuonProperties(const reco::MuonRef &muonRef) const
Particle reconstructed by the particle flow algorithm.
Definition: PFCandidate.h:40
HLT enums.
edm::EDGetTokenT< reco::PFCandidateCollection > tokenPFCandidates_
void MuonBadTrackFilter::printMuonProperties ( const reco::MuonRef muonRef) const
privatevirtual

Definition at line 249 of file MuonBadTrackFilter.cc.

References reco::Muon::CombinedTrack, gather_cfg::cout, DEFINE_FWK_MODULE, delta, reco::Muon::DYT, reco::Muon::InnerTrack, muon::isGoodMuon(), edm::Ref< C, T, F >::isNonnull(), SiStripPI::max, min(), reco::Muon::OuterTrack, reco::Muon::Picky, particleFlowDisplacedVertex_cfi::ratio, mathSSE::sqrt(), conversionPostprocessing_cfi::standAlone, AlCaHLTBitMon_QueryRunRegistry::string, muon::TM2DCompatibilityLoose, muon::TM2DCompatibilityTight, muon::TMLastStationAngLoose, muon::TMLastStationAngTight, muon::TMLastStationLoose, muon::TMLastStationOptimizedBarrelLowPtLoose, muon::TMLastStationOptimizedBarrelLowPtTight, muon::TMLastStationOptimizedLowPtLoose, muon::TMLastStationOptimizedLowPtTight, muon::TMLastStationTight, muon::TMOneStationLoose, muon::TMOneStationTight, reco::Muon::TPFMS, trackingTruthProducer_cfi::tracker, and trackInfo().

Referenced by filter().

249  {
250 
251  if ( !muonRef.isNonnull() ) return;
252 
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;
259 
260  reco::Muon::MuonTrackType tunePType = muonRef->tunePMuonBestTrackType();
261  std::string tunePTypeStr;
262  switch( tunePType ){
263  case reco::Muon::InnerTrack: tunePTypeStr = "Inner"; break;
264  case reco::Muon::OuterTrack: tunePTypeStr = "Outer"; break;
265  case reco::Muon::CombinedTrack: tunePTypeStr = "Combined"; break;
266  case reco::Muon::TPFMS: tunePTypeStr = "TPFMS"; break;
267  case reco::Muon::Picky: tunePTypeStr = "Picky"; break;
268  case reco::Muon::DYT: tunePTypeStr = "DYT"; break;
269  default:tunePTypeStr = "unknow"; break;
270  }
271 
272  std::cout<<"pt " << muonRef->pt()
273  <<" eta " << muonRef->eta()
274  <<" GL: "<<isGL
275  <<" TR: "<<isTR
276  <<" ST: "<<isST
277  <<" TPFMS: "<<isTPFMS
278  <<" Picky: "<<isPicky
279  <<" DYT: "<<isDyt
280  <<" TuneP: "<<tunePTypeStr
281  <<" nMatches "<<muonRef->numberOfMatches()<<std::endl;
282 
283  if ( isGL ) {
284  std::cout<<"\tCombined "<<trackInfo(muonRef->combinedMuon())<<std::endl;
285  std::cout<<"\tInner "<<trackInfo(muonRef->innerTrack())<<std::endl;
286  }
287 
288  if ( isST ) {
289  std::cout<<"\tOuter "<<trackInfo(muonRef->standAloneMuon())<<std::endl;
290  }
291 
292  if ( isTR ){
293  reco::TrackRef trackerMu = muonRef->innerTrack();
294  // const reco::Track& track = *trackerMu;
295  std::cout<<"\tInner "<<trackInfo(trackerMu)<<std::endl;
296  std::cout<< "\t\tTMLastStationAngLoose "
297  << muon::isGoodMuon(*muonRef,muon::TMLastStationAngLoose) << std::endl
298  << "\t\tTMLastStationAngTight "
299  << muon::isGoodMuon(*muonRef,muon::TMLastStationAngTight) << std::endl
300  << "\t\tTMLastStationLoose "
301  << muon::isGoodMuon(*muonRef,muon::TMLastStationLoose) << std::endl
302  << "\t\tTMLastStationTight "
303  << muon::isGoodMuon(*muonRef,muon::TMLastStationTight) << std::endl
304  << "\t\tTMOneStationLoose "
305  << muon::isGoodMuon(*muonRef,muon::TMOneStationLoose) << std::endl
306  << "\t\tTMOneStationTight "
307  << muon::isGoodMuon(*muonRef,muon::TMOneStationTight) << std::endl
308  << "\t\tTMLastStationOptimizedLowPtLoose "
310  << "\t\tTMLastStationOptimizedLowPtTight "
312  << "\t\tTMLastStationOptimizedBarrelLowPtLoose "
314  << "\t\tTMLastStationOptimizedBarrelLowPtTight "
316  << std::endl;
317  }
318 
319  if( isPicky ) {
320  std::cout<<"\tPicky "<<trackInfo(muonRef->pickyTrack())<<std::endl;
321  }
322 
323  if( isDyt ) {
324  std::cout<<"\tDyt "<<trackInfo(muonRef->dytTrack())<<std::endl;
325  }
326 
327  if( isTPFMS ) {
328  std::cout<<"\tTPFMS "<<trackInfo(muonRef->tpfmsTrack())<<std::endl;
329  }
330 
331  std::cout<< "TM2DCompatibilityLoose "
332  << muon::isGoodMuon(*muonRef,muon::TM2DCompatibilityLoose) << std::endl
333  << "TM2DCompatibilityTight "
334  << muon::isGoodMuon(*muonRef,muon::TM2DCompatibilityTight) << std::endl;
335 
336  if ( muonRef->isGlobalMuon()
337  && muonRef->isTrackerMuon()
338  && muonRef->isStandAloneMuon() ) {
339  reco::TrackRef combinedMu = muonRef->combinedMuon();
340  reco::TrackRef trackerMu = muonRef->track();
341  reco::TrackRef standAloneMu = muonRef->standAloneMuon();
342 
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());
346 
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;
350 
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.;
357 
358  double delta3 = standAlone && tracker ?
359  fabs(1./standAloneMu->pt() -1./trackerMu->pt())
360  /sqrt(sigmaStandAlone*sigmaStandAlone + sigmaTracker*sigmaTracker) : 100.;
361 
362  double delta =
363  standAloneMu->hitPattern().numberOfValidMuonDTHits()+
364  standAloneMu->hitPattern().numberOfValidMuonCSCHits() > 0 ?
365  std::min(delta3,std::min(delta1,delta2)) : std::max(delta3,std::max(delta1,delta2));
366 
367  std::cout << "delta = " << delta << " delta1 "<<delta1<<" delta2 "<<delta2<<" delta3 "<<delta3<<std::endl;
368 
369  double ratio =
370  combinedMu->ptError()/combinedMu->pt()
371  / (trackerMu->ptError()/trackerMu->pt());
372  //if ( ratio > 2. && delta < 3. ) std::cout << "ALARM ! " << ratio << ", " << delta << std::endl;
373  std::cout<<" ratio "<<ratio<<" combined mu pt "<<combinedMu->pt()<<std::endl;
374  //bool quality3 = ( combinedMu->pt() < 50. || ratio < 2. ) && delta < 3.;
375  }
376 
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;
387  return;
388 }
dbl * delta
Definition: mlp_gen.cc:36
bool isNonnull() const
Checks for non-null.
Definition: Ref.h:251
virtual std::string trackInfo(const reco::TrackRef &trackRef) const
T sqrt(T t)
Definition: SSEVec.h:18
T min(T a, T b)
Definition: MathUtil.h:58
bool isGoodMuon(const reco::Muon &muon, SelectionType type, reco::Muon::ArbitrationType arbitrationType=reco::Muon::SegmentAndTrackArbitration)
main GoodMuon wrapper call
MuonTrackType
map for Global Muon refitters
Definition: Muon.h:38
std::string MuonBadTrackFilter::trackInfo ( const reco::TrackRef trackRef) const
privatevirtual

Definition at line 219 of file MuonBadTrackFilter.cc.

References reco::TrackBase::hitPattern(), edm::Ref< C, T, F >::isAvailable(), edm::Ref< C, T, F >::isNull(), reco::TrackBase::normalizedChi2(), reco::HitPattern::numberOfLostMuonCSCHits(), reco::HitPattern::numberOfLostMuonDTHits(), reco::HitPattern::numberOfLostMuonHits(), reco::HitPattern::numberOfLostMuonRPCHits(), reco::HitPattern::numberOfValidMuonCSCHits(), reco::HitPattern::numberOfValidMuonDTHits(), reco::HitPattern::numberOfValidMuonHits(), reco::HitPattern::numberOfValidMuonRPCHits(), reco::HitPattern::numberOfValidPixelHits(), reco::HitPattern::numberOfValidTrackerHits(), MillePedeFileConverter_cfg::out, reco::TrackBase::pt(), reco::TrackBase::ptError(), and HiIsolationCommonParameters_cff::track.

Referenced by printMuonProperties().

219  {
220 
221  std::ostringstream out;
222 
223  if(trackRef.isNull()) {
224  out << "track ref not set";
225  }
226  else if (! trackRef.isAvailable()) {
227  out << "track ref not available";
228  }
229  else {
230  const reco::Track& track = *trackRef;
231  out << "pt = " << track.pt() << " +- " << track.ptError()/track.pt()
232  << " chi2 = " << track.normalizedChi2()
233  << "; Muon Hits: " << track.hitPattern().numberOfValidMuonHits()
234  << "/" << track.hitPattern().numberOfLostMuonHits()
235  << " (DT: " << track.hitPattern().numberOfValidMuonDTHits()
236  << "/" << track.hitPattern().numberOfLostMuonDTHits()
237  << " CSC: " << track.hitPattern().numberOfValidMuonCSCHits()
238  << "/" << track.hitPattern().numberOfLostMuonCSCHits()
239  << " RPC: " << track.hitPattern().numberOfValidMuonRPCHits()
240  << "/" << track.hitPattern().numberOfLostMuonRPCHits() << ")"
241  << "; Valid inner hits:"
242  << " TRK: " << track.hitPattern().numberOfValidTrackerHits()
243  << " PIX: " << track.hitPattern().numberOfValidPixelHits();
244  }
245  return out.str();
246 }
bool isAvailable() const
Definition: Ref.h:575
double normalizedChi2() const
chi-squared divided by n.d.o.f. (or chi-squared * 1e6 if n.d.o.f. is zero)
Definition: TrackBase.h:600
int numberOfLostMuonHits() const
Definition: HitPattern.h:1000
int numberOfValidMuonCSCHits() const
Definition: HitPattern.h:961
int numberOfValidMuonRPCHits() const
Definition: HitPattern.h:966
double pt() const
track transverse momentum
Definition: TrackBase.h:660
double ptError() const
error on Pt (set to 1000 TeV if charge==0 for safety)
Definition: TrackBase.h:814
int numberOfLostMuonRPCHits() const
Definition: HitPattern.h:1070
bool isNull() const
Checks for null.
Definition: Ref.h:248
const HitPattern & hitPattern() const
Access the hit pattern, indicating in which Tracker layers the track has hits.
Definition: TrackBase.h:485
int numberOfValidTrackerHits() const
Definition: HitPattern.h:901
int numberOfLostMuonDTHits() const
Definition: HitPattern.h:1060
int numberOfValidMuonDTHits() const
Definition: HitPattern.h:956
int numberOfValidPixelHits() const
Definition: HitPattern.h:916
int numberOfValidMuonHits() const
Definition: HitPattern.h:906
int numberOfLostMuonCSCHits() const
Definition: HitPattern.h:1065

Member Data Documentation

const double MuonBadTrackFilter::chi2Min_
private

Definition at line 43 of file MuonBadTrackFilter.cc.

Referenced by filter().

const bool MuonBadTrackFilter::debug_
private

Definition at line 47 of file MuonBadTrackFilter.cc.

Referenced by filter().

const double MuonBadTrackFilter::p1_
private

Definition at line 44 of file MuonBadTrackFilter.cc.

Referenced by filter().

const double MuonBadTrackFilter::p2_
private

Definition at line 45 of file MuonBadTrackFilter.cc.

Referenced by filter().

const double MuonBadTrackFilter::p3_
private

Definition at line 46 of file MuonBadTrackFilter.cc.

Referenced by filter().

const double MuonBadTrackFilter::ptMin_
private

Definition at line 42 of file MuonBadTrackFilter.cc.

Referenced by filter().

const bool MuonBadTrackFilter::taggingMode_
private

Definition at line 41 of file MuonBadTrackFilter.cc.

Referenced by filter().

edm::EDGetTokenT<reco::PFCandidateCollection> MuonBadTrackFilter::tokenPFCandidates_
private

Definition at line 40 of file MuonBadTrackFilter.cc.

Referenced by filter().