00001 #ifndef RecoLocalTracker_SiStripRecHitConverter_StripCPE_H 00002 #define RecoLocalTracker_SiStripRecHitConverter_StripCPE_H 00003 00004 #include "RecoLocalTracker/ClusterParameterEstimator/interface/StripClusterParameterEstimator.h" 00005 00006 #include "FWCore/ParameterSet/interface/ParameterSet.h" 00007 #include "MagneticField/Engine/interface/MagneticField.h" 00008 #include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" 00009 #include "CondFormats/SiStripObjects/interface/SiStripLorentzAngle.h" 00010 #include "CondFormats/SiStripObjects/interface/SiStripConfObject.h" 00011 #include "CondFormats/SiStripObjects/interface/SiStripLatency.h" 00012 #include <ext/hash_map> 00013 class StripTopology; 00014 00015 class StripCPE : public StripClusterParameterEstimator 00016 { 00017 public: 00018 00019 StripClusterParameterEstimator::LocalValues localParameters( const SiStripCluster& cl, const GeomDetUnit&) const; 00020 00021 StripCPE( edm::ParameterSet & conf, 00022 const MagneticField&, 00023 const TrackerGeometry&, 00024 const SiStripLorentzAngle&, 00025 const SiStripConfObject&, 00026 const SiStripLatency&); 00027 LocalVector driftDirection(const StripGeomDetUnit* det) const; 00028 00029 protected: 00030 00031 const bool peakMode_; 00032 const TrackerGeometry & geom_; 00033 const MagneticField& magfield_ ; 00034 const SiStripLorentzAngle& LorentzAngleMap_; 00035 std::vector<double> shift; 00036 std::vector<double> xtalk1; 00037 std::vector<double> xtalk2; 00038 00039 struct Param { 00040 Param() : topology(0) {} 00041 StripTopology const * topology; 00042 LocalVector drift; 00043 float thickness, pitch_rel_err2, maxLength; 00044 int nstrips; 00045 SiStripDetId::ModuleGeometry moduleGeom; 00046 float coveredStrips(const LocalVector&, const LocalPoint&) const; 00047 }; 00048 Param const & param(const GeomDetUnit& det) const { 00049 return m_Params[det.index()-m_off]; 00050 } 00051 00052 private: 00053 00054 void fillParams(); 00055 typedef std::vector<Param> Params; 00056 Params m_Params; 00057 unsigned int m_off; 00058 00059 }; 00060 #endif