00001 #ifndef RECOTRACKER_TRANSIENTRACKINGRECHIT_TSiStripRecHit1D_H
00002 #define RECOTRACKER_TRANSIENTRACKINGRECHIT_TSiStripRecHit1D_H
00003
00004 #include "DataFormats/TrackerRecHit2D/interface/SiStripRecHit1D.h"
00005 #include "TrackingTools/TransientTrackingRecHit/interface/TransientTrackingRecHit.h"
00006 #include "RecoLocalTracker/ClusterParameterEstimator/interface/StripClusterParameterEstimator.h"
00007 #include "TrackingTools/TransientTrackingRecHit/interface/HelpertRecHit2DLocalPos.h"
00008 #include "DataFormats/Common/interface/RefGetter.h"
00009
00010 class TSiStripRecHit1D GCC11_FINAL : public TransientTrackingRecHit{
00011 public:
00012
00013 typedef SiStripRecHit1D::ClusterRef SiStripClusterRef;
00014
00015 typedef edm::LazyGetter<SiStripCluster>::value_ref SiStripRegionalClusterRef;
00016
00017 virtual ~TSiStripRecHit1D() {}
00018
00019
00020 virtual void getKfComponents( KfComponentsHolder & holder ) const {
00021 HelpertRecHit2DLocalPos().getKfComponents(holder, theHitData, *det());
00022 }
00023
00024
00025 virtual AlgebraicVector parameters() const {return theHitData.parameters();}
00026
00027
00028 virtual AlgebraicSymMatrix parametersError() const {
00029 return HelpertRecHit2DLocalPos().parError( theHitData.localPositionError(), *det());
00030
00031 }
00032
00033
00034 virtual AlgebraicMatrix projectionMatrix() const {return theHitData.projectionMatrix();}
00035 virtual int dimension() const {return theHitData.dimension();}
00036
00037 virtual LocalPoint localPosition() const {return theHitData.localPosition();}
00038 virtual LocalError localPositionError() const {return theHitData.localPositionError();}
00039
00040 virtual const TrackingRecHit * hit() const {return &theHitData;};
00041
00042 virtual std::vector<const TrackingRecHit*> recHits() const {
00043 return hit()->recHits();
00044 }
00045 virtual std::vector<TrackingRecHit*> recHits() {
00046 return theHitData.recHits();
00047 }
00048
00049 virtual const GeomDetUnit* detUnit() const;
00050
00051 virtual bool canImproveWithTrack() const {return true;}
00052
00053
00054 virtual RecHitPointer clone(const TrajectoryStateOnSurface& ts) const;
00055
00056
00057
00058 const SiStripRecHit1D* specificHit() const {return &theHitData;};
00059 const StripClusterParameterEstimator* cpe() const {return theCPE;}
00060
00061 static RecHitPointer build( const GeomDet * geom, const SiStripRecHit1D* rh,
00062 const StripClusterParameterEstimator* cpe,
00063 bool computeCoarseLocalPosition=false) {
00064 return RecHitPointer( new TSiStripRecHit1D( geom, rh, cpe,computeCoarseLocalPosition));
00065 }
00066
00067 static RecHitPointer build( const LocalPoint& pos, const LocalError& err,
00068 const GeomDet* det,
00069 const OmniClusterRef & clust,
00070 const StripClusterParameterEstimator* cpe) {
00071 return RecHitPointer( new TSiStripRecHit1D( pos, err, det, clust, cpe));
00072 }
00073
00074 static RecHitPointer build( const LocalPoint& pos, const LocalError& err,
00075 const GeomDet* det,
00076 const SiStripClusterRef & clust,
00077 const StripClusterParameterEstimator* cpe) {
00078 return RecHitPointer( new TSiStripRecHit1D( pos, err, det, OmniClusterRef(clust), cpe));
00079 }
00080
00081 static RecHitPointer build( const LocalPoint& pos, const LocalError& err,
00082 const GeomDet* det,
00083 const SiStripRegionalClusterRef & clust,
00084 const StripClusterParameterEstimator* cpe) {
00085 return RecHitPointer( new TSiStripRecHit1D( pos, err, det, OmniClusterRef(clust), cpe));
00086 }
00087
00088
00089
00090 private:
00091
00092 const StripClusterParameterEstimator* theCPE;
00093 SiStripRecHit1D theHitData;
00094
00095 TSiStripRecHit1D (const GeomDet * geom, const SiStripRecHit1D* rh,
00096 const StripClusterParameterEstimator* cpe,
00097 bool computeCoarseLocalPosition);
00098
00100 TSiStripRecHit1D( const LocalPoint& pos, const LocalError& err,
00101 const GeomDet* det,
00102 const OmniClusterRef & clust,
00103 const StripClusterParameterEstimator* cpe) :
00104 TransientTrackingRecHit(det),
00105 theCPE(cpe), theHitData(pos, err, det->geographicalId(), clust){}
00106
00107
00108
00109
00110 virtual TSiStripRecHit1D* clone() const {
00111 return new TSiStripRecHit1D(*this);
00112 }
00113
00114 };
00115
00116 #endif