CMS 3D CMS Logo

/data/git/CMSSW_5_3_11_patch5/src/RecoLocalTracker/SiStripRecHitConverter/interface/StripCPEgeometric.h

Go to the documentation of this file.
00001 #ifndef RecoLocalTracker_SiStripRecHitConverter_StripCPEgeometric_H
00002 #define RecoLocalTracker_SiStripRecHitConverter_StripCPEgeometric_H
00003 
00004 #include "RecoLocalTracker/SiStripRecHitConverter/interface/StripCPE.h"
00005 #include "RecoLocalTracker/SiStripRecHitConverter/interface/ErrorPropogationTypes.h"
00006 
00007 class StripCPEgeometric : public StripCPE 
00008 {
00009 
00010  public:
00011  
00012   StripClusterParameterEstimator::LocalValues 
00013     localParameters( const SiStripCluster&, const GeomDetUnit&, const LocalTrajectoryParameters&) const;
00014 
00015   StripCPEgeometric( edm::ParameterSet& conf, 
00016                      const MagneticField& mag, 
00017                      const TrackerGeometry& geom, 
00018                      const SiStripLorentzAngle& LorentzAngle,
00019                      const SiStripConfObject& confObj,
00020                      const SiStripLatency& latency)
00021     : StripCPE(conf, mag, geom, LorentzAngle, confObj, latency ),
00022     tan_diffusion_angle(conf.getParameter<double>("TanDiffusionAngle")),    
00023     thickness_rel_err2(pow(conf.getParameter<double>("ThicknessRelativeUncertainty"), 2)),
00024     noise_threshold(conf.getParameter<double>("NoiseThreshold")),
00025     maybe_noise_threshold(conf.getParameter<double>("MaybeNoiseThreshold")),
00026     scaling_squared(pow(conf.getParameter<double>("UncertaintyScaling"), 2)),
00027     minimum_uncertainty_squared(pow(conf.getParameter<double>("MinimumUncertainty"),2))
00028       {}
00029 
00030  private:
00031 
00032   const float 
00033     tan_diffusion_angle, 
00034     thickness_rel_err2, 
00035     noise_threshold, 
00036     maybe_noise_threshold, 
00037     scaling_squared, 
00038     minimum_uncertainty_squared;
00039 
00040   class WrappedCluster {
00041   public:
00042     WrappedCluster(const std::vector<stats_t<float> >&);
00043     void dropSmallerEdgeStrip();
00044     void addSuppressedEdgeStrip();
00045     float middle() const;
00046     stats_t<float> centroid() const;
00047     stats_t<float> sumQ() const;
00048     stats_t<float> eta() const;
00049     bool deformed() const;
00050     stats_t<float> maxProjection() const;
00051     stats_t<float> smallerEdgeStrip() const;
00052     int sign() const;
00053     uint16_t N;
00054   private:
00055     const stats_t<float>& last() const {return *(first+N-1);}
00056     std::vector<stats_t<float> >::const_iterator clusterFirst, first;
00057   };
00058 
00059   stats_t<float> offset_from_firstStrip( const std::vector<stats_t<float> >&, const stats_t<float>&) const;
00060   stats_t<float> geometric_position(const WrappedCluster&, const stats_t<float>&) const;
00061   bool useNPlusOne(const WrappedCluster&, const stats_t<float>&) const;
00062   bool useNMinusOne(const WrappedCluster&, const stats_t<float>&) const;
00063   bool ambiguousSize(const WrappedCluster&, const stats_t<float>&) const;
00064 
00065 };
00066 
00067 #endif