00001 #ifndef CSCSegment_CSCSegAlgoShowering_h 00002 #define CSCSegment_CSCSegAlgoShowering_h 00003 00017 #include <DataFormats/CSCRecHit/interface/CSCRecHit2D.h> 00018 #include <DataFormats/CSCRecHit/interface/CSCSegment.h> 00019 #include <Geometry/CSCGeometry/interface/CSCChamber.h> 00020 #include <FWCore/ParameterSet/interface/ParameterSet.h> 00021 00022 #include <vector> 00023 00024 class CSCSegAlgoShowering { 00025 00026 public: 00027 00028 typedef std::vector<const CSCRecHit2D*> ChamberHitContainer; 00029 00031 explicit CSCSegAlgoShowering(const edm::ParameterSet& ps); 00032 00034 virtual ~CSCSegAlgoShowering(); 00035 00036 CSCSegment showerSeg( const CSCChamber* aChamber, ChamberHitContainer rechits ); 00037 00038 00039 private: 00040 00042 bool isHitNearSegment(const CSCRecHit2D* h) const; 00043 bool addHit(const CSCRecHit2D* hit, int layer); 00044 void updateParameters(void); 00045 bool hasHitOnLayer(int layer) const; 00046 void compareProtoSegment(const CSCRecHit2D* h, int layer); 00047 CLHEP::HepMatrix derivativeMatrix(void) const; 00048 AlgebraicSymMatrix weightMatrix(void) const; 00049 AlgebraicSymMatrix calculateError(void) const; 00050 void flipErrors(AlgebraicSymMatrix&) const; 00051 00052 void pruneFromResidual(); 00053 00054 // Member variables 00055 const std::string myName; 00056 const CSCChamber* theChamber; 00057 00058 ChamberHitContainer protoSegment; 00059 float protoSlope_u; 00060 float protoSlope_v; 00061 LocalPoint protoIntercept; 00062 double protoChi2; 00063 LocalVector protoDirection; 00064 00065 // input from .cfi file 00066 bool debug; 00067 int minHitsPerSegment; 00068 double dRPhiFineMax; 00069 double dPhiFineMax; 00070 float tanPhiMax; 00071 float tanThetaMax; 00072 float chi2Max; 00073 float maxRatioResidual; 00074 // float maxDR; 00075 float maxDTheta; 00076 float maxDPhi; 00077 00078 }; 00079 #endif 00080