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