00001 #ifndef CSCSegment_CSCSegAlgoHitPruning_h 00002 #define CSCSegAlgoHitPruning_h 00003 00015 #include "FWCore/ParameterSet/interface/ParameterSet.h" 00016 #include <DataFormats/CSCRecHit/interface/CSCRecHit2D.h> 00017 #include <DataFormats/CSCRecHit/interface/CSCSegment.h> 00018 00019 #include <vector> 00020 00021 class CSCChamber; 00022 00023 class CSCSegAlgoHitPruning { 00024 00025 public: 00026 00027 typedef std::vector<const CSCRecHit2D*> ChamberHitContainer; 00028 00030 explicit CSCSegAlgoHitPruning(const edm::ParameterSet& ps); 00031 00033 ~CSCSegAlgoHitPruning(); 00034 00036 std::vector<CSCSegment> pruneBadHits(const CSCChamber* aChamber, std::vector<CSCSegment> segments); 00037 00038 private: 00039 void fitSlopes(void); 00040 void fillChiSquared(void); 00041 void fillLocalDirection(void); 00042 CLHEP::HepMatrix derivativeMatrix(void) const; 00043 AlgebraicSymMatrix weightMatrix(void) const; 00044 AlgebraicSymMatrix calculateError(void) const; 00045 void flipErrors(AlgebraicSymMatrix&) const; 00046 00047 const CSCChamber* theChamber; 00048 00049 ChamberHitContainer protoSegment; 00050 float protoSlope_u; 00051 float protoSlope_v; 00052 LocalPoint protoIntercept; 00053 double protoChi2; 00054 LocalVector protoDirection; 00055 00056 bool BrutePruning; 00057 }; 00058 #endif