CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_4_1_8_patch9/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 LocalTrajectoryParameters&) const; 
00014 
00015   StripClusterParameterEstimator::LocalValues 
00016     localParameters( const SiStripCluster&, const GeomDetUnit&, const LocalTrajectoryParameters&) const;
00017 
00018   StripCPEgeometric( edm::ParameterSet& conf, 
00019                      const MagneticField& mag, 
00020                      const TrackerGeometry& geom, 
00021                      const SiStripLorentzAngle& LorentzAngle,
00022                      const SiStripConfObject& confObj,
00023                      const SiStripLatency& latency)
00024     : StripCPE(conf, mag, geom, LorentzAngle, confObj, latency ),
00025     tan_diffusion_angle(conf.getParameter<double>("TanDiffusionAngle")),    
00026     thickness_rel_err2(pow(conf.getParameter<double>("ThicknessRelativeUncertainty"), 2)),
00027     noise_threshold(conf.getParameter<double>("NoiseThreshold")),
00028     maybe_noise_threshold(conf.getParameter<double>("MaybeNoiseThreshold")),
00029     scaling_squared(pow(conf.getParameter<double>("UncertaintyScaling"), 2)),
00030     minimum_uncertainty_squared(pow(conf.getParameter<double>("MinimumUncertainty"),2))
00031       {}
00032 
00033  private:
00034 
00035   const float 
00036     tan_diffusion_angle, 
00037     thickness_rel_err2, 
00038     noise_threshold, 
00039     maybe_noise_threshold, 
00040     scaling_squared, 
00041     minimum_uncertainty_squared;
00042 
00043   class WrappedCluster {
00044   public:
00045     WrappedCluster(const std::vector<stats_t<float> >&);
00046     void dropSmallerEdgeStrip();
00047     void addSuppressedEdgeStrip();
00048     float middle() const;
00049     stats_t<float> centroid() const;
00050     stats_t<float> sumQ() const;
00051     stats_t<float> eta() const;
00052     bool deformed() const;
00053     stats_t<float> maxProjection() const;
00054     stats_t<float> smallerEdgeStrip() const;
00055     int sign() const;
00056     uint16_t N;
00057   private:
00058     const stats_t<float>& last() const {return *(first+N-1);}
00059     std::vector<stats_t<float> >::const_iterator clusterFirst, first;
00060   };
00061 
00062   stats_t<float> offset_from_firstStrip( const std::vector<stats_t<float> >&, const stats_t<float>&) const;
00063   stats_t<float> geometric_position(const WrappedCluster&, const stats_t<float>&) const;
00064   bool useNPlusOne(const WrappedCluster&, const stats_t<float>&) const;
00065   bool useNMinusOne(const WrappedCluster&, const stats_t<float>&) const;
00066   bool ambiguousSize(const WrappedCluster&, const stats_t<float>&) const;
00067 
00068 };
00069 
00070 #endif