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