00001 #ifndef TransientTrackingRecHit_H
00002 #define TransientTrackingRecHit_H
00003
00004 #include "DataFormats/TrackingRecHit/interface/TrackingRecHit.h"
00005 #include "Geometry/CommonDetUnit/interface/GeomDet.h"
00006 #include <TrackingTools/TrajectoryState/interface/TrajectoryStateOnSurface.h>
00007 #include "DataFormats/GeometrySurface/interface/Surface.h"
00008
00009 #include "DataFormats/GeometrySurface/interface/ReferenceCounted.h"
00010
00011 class GeomDetUnit;
00012
00013 class TransientTrackingRecHit : public TrackingRecHit,
00014 public ReferenceCounted {
00015 public:
00016
00017
00018
00019 typedef ReferenceCountingPointer< TransientTrackingRecHit> RecHitPointer;
00020 typedef ConstReferenceCountingPointer< TransientTrackingRecHit> ConstRecHitPointer;
00021 typedef std::vector<ConstRecHitPointer> RecHitContainer;
00022 typedef std::vector<ConstRecHitPointer> ConstRecHitContainer;
00023
00024 explicit TransientTrackingRecHit(const GeomDet * geom=0, float weight=1., float annealing=1.) :
00025 TrackingRecHit(geom ? geom->geographicalId().rawId() : 0),
00026 geom_(geom), weight_(weight), annealing_(annealing),
00027 globalPosition_(0,0,0),hasGlobalPosition_(false),
00028 globalError_(GlobalError::NullMatrix()),errorR_(0),errorZ_(0),errorRPhi_(0),hasGlobalError_(false){}
00029
00030 explicit TransientTrackingRecHit(const GeomDet * geom, DetId id, Type type=valid, float weight=1., float annealing=1. ) :
00031 TrackingRecHit(id, type),
00032 geom_(geom), weight_(weight), annealing_(annealing),
00033 globalPosition_(0,0,0),hasGlobalPosition_(false),
00034 globalError_(GlobalError::NullMatrix()),errorR_(0),errorZ_(0),errorRPhi_(0),hasGlobalError_(false){}
00035
00036 explicit TransientTrackingRecHit(const GeomDet * geom, TrackingRecHit::id_type id, Type type=valid, float weight=1., float annealing=1. ) :
00037 TrackingRecHit(id, type),
00038 geom_(geom), weight_(weight), annealing_(annealing),
00039 globalPosition_(0,0,0),hasGlobalPosition_(false),
00040 globalError_(GlobalError::NullMatrix()),errorR_(0),errorZ_(0),errorRPhi_(0),hasGlobalError_(false){}
00041
00042 explicit TransientTrackingRecHit(const GeomDet * geom, TrackingRecHit const & rh, float weight=1., float annealing=1. ) :
00043 TrackingRecHit(rh.geographicalId(), rh.type()),
00044 geom_(geom), weight_(weight), annealing_(annealing),
00045 globalPosition_(0,0,0),hasGlobalPosition_(false),
00046 globalError_(GlobalError::NullMatrix()),errorR_(0),errorZ_(0),errorRPhi_(0),hasGlobalError_(false){}
00047
00048
00049
00050
00051
00053 const GeomDet * det() const {return geom_;}
00054 virtual const Surface * surface() const {return &(geom_->surface());}
00055
00059 virtual const GeomDetUnit * detUnit() const;
00060
00061 virtual GlobalPoint globalPosition() const ;
00062 virtual GlobalError globalPositionError() const ;
00063
00064 float errorGlobalR() const;
00065 float errorGlobalZ() const;
00066 float errorGlobalRPhi() const;
00067
00072 virtual RecHitPointer clone (const TrajectoryStateOnSurface& ts) const;
00073
00078 virtual bool canImproveWithTrack() const {return false;}
00079
00080 virtual const TrackingRecHit * hit() const = 0;
00081
00083 virtual ConstRecHitContainer transientHits() const;
00084
00086 void setWeight(float weight){weight_ = weight;}
00087
00088 float weight() const {return weight_;}
00089
00092
00093 void setAnnealingFactor(float annealing) {annealing_ = annealing;}
00094
00095 float getAnnealingFactor() const {return annealing_;}
00096
00097 private:
00098 void setPositionErrors() const;
00099
00100 const GeomDet * geom_ ;
00101
00102 float weight_;
00103 float annealing_;
00104
00105
00106 mutable GlobalPoint globalPosition_;
00107 mutable bool hasGlobalPosition_;
00108 mutable GlobalError globalError_;
00109 mutable float errorR_,errorZ_,errorRPhi_;
00110 mutable bool hasGlobalError_;
00111
00112
00113
00114 virtual TransientTrackingRecHit * clone() const = 0;
00115
00116 };
00117
00118 #endif
00119