00001 #ifndef SiTrackerMultiRecHitUpdator_h 00002 #define SiTrackerMultiRecHitUpdator_h 00003 00004 #include "DataFormats/GeometryVector/interface/LocalPoint.h" 00005 #include "TrackingTools/TransientTrackingRecHit/interface/TransientTrackingRecHit.h" 00006 #include "TrackingTools/TransientTrackingRecHit/interface/TransientTrackingRecHitBuilder.h" 00007 00008 00009 #include <vector> 00010 00011 class SiTrackerMultiRecHit; 00012 class TrajectoryStateOnSurface; 00013 class TrackingRecHit; 00014 class TransientTrackingRecHitBuilder; 00015 class LocalError; 00016 class TrackingRecHitPropagator; 00017 /* 00018 builds a TSiTrackerMultiRecHitout of a vector of TrackingRecHit ans a tsos 00019 or updates an existing TSiTrackerMultiRecHitout given a tsos. 00020 */ 00021 class SiTrackerMultiRecHitUpdator{ 00022 public: 00023 SiTrackerMultiRecHitUpdator(const TransientTrackingRecHitBuilder* builder, 00024 const TrackingRecHitPropagator* hitpropagator, 00025 const std::vector<double>& anAnnealingProgram); 00026 virtual ~SiTrackerMultiRecHitUpdator(){}; 00027 00028 const std::vector<double>& annealingProgram() const {return theAnnealingProgram;} 00029 00030 //builds a TSiTrackerMultiRecHit 00031 virtual TransientTrackingRecHit::RecHitPointer buildMultiRecHit(const std::vector<const TrackingRecHit*>& rhv, 00032 TrajectoryStateOnSurface tsos, 00033 double annealing=1.) const; 00034 00035 //updates an existing TSiTrackerMultiRecHit 00036 //in case a diffrenet king of rechit is passed it returns clone(tsos) 00037 virtual TransientTrackingRecHit::RecHitPointer update( TransientTrackingRecHit::ConstRecHitPointer original, 00038 TrajectoryStateOnSurface tsos, 00039 double annealing=1.) const; 00040 00041 //returns a TSiTrackerMultiRecHit out of the transient components 00042 virtual TransientTrackingRecHit::RecHitPointer update( TransientTrackingRecHit::ConstRecHitContainer& tcomponents, 00043 TrajectoryStateOnSurface tsos, 00044 double annealing=1.) const; 00045 00046 const std::vector<double>& getAnnealingProgram() const {return theAnnealingProgram;} 00047 00048 private: 00049 LocalError calcParametersError(TransientTrackingRecHit::ConstRecHitContainer& map) const; 00050 LocalPoint calcParameters(TransientTrackingRecHit::ConstRecHitContainer& map, const LocalError& er) const; 00051 00052 const TransientTrackingRecHitBuilder* theBuilder; 00053 const TrackingRecHitPropagator* theHitPropagator; 00054 double theChi2Cut; 00055 const std::vector<double> theAnnealingProgram; 00056 00057 }; 00058 #endif