00001 #ifndef RecoMuon_MuonIdentification_MuonKinkFinder_h 00002 #define RecoMuon_MuonIdentification_MuonKinkFinder_h 00003 00004 #include "DataFormats/MuonReco/interface/MuonQuality.h" 00005 #include "TrackingTools/TrackRefitter/interface/TrackTransformer.h" 00006 00007 class MuonKinkFinder { 00008 public: 00009 MuonKinkFinder(const edm::ParameterSet &iConfig); 00010 ~MuonKinkFinder() ; 00011 00012 // set event setup 00013 void init(const edm::EventSetup &iSetup) ; 00014 00015 // fill data, return false if refit failed or too few hits 00016 bool fillTrkKink(reco::MuonQuality & quality, const Trajectory &trajectory) const ; 00017 00018 // fill data, return false if refit failed or too few hits 00019 bool fillTrkKink(reco::MuonQuality & quality, const reco::Track &track) const ; 00020 00021 private: 00023 bool diagonalOnly_; 00025 bool usePosition_; 00026 00028 TrackTransformer refitter_; 00029 00030 // compute chi2 between track states 00031 double getChi2(const TrajectoryStateOnSurface &start, const TrajectoryStateOnSurface &other) const ; 00032 00033 // possibly crop matrix or set to zero off-diagonal elements, then invert 00034 void cropAndInvert(AlgebraicSymMatrix55 &cov) const ; 00035 }; 00036 #endif