00001 #ifndef Alignment_KalmanAlignmentAlgorithm_KalmanAlignmentUpdator_h 00002 #define Alignment_KalmanAlignmentAlgorithm_KalmanAlignmentUpdator_h 00003 00004 #include "Alignment/CommonAlignment/interface/AlignableNavigator.h" 00005 #include "Alignment/CommonAlignmentAlgorithm/interface/AlignmentParameterStore.h" 00006 #include "Alignment/ReferenceTrajectories/interface/TrajectoryFactoryBase.h" 00007 #include "Alignment/KalmanAlignmentAlgorithm/interface/KalmanAlignmentMetricsUpdator.h" 00008 00009 #include "DataFormats/BeamSpot/interface/BeamSpot.h" 00010 00012 00013 class MagneticField; 00014 00015 class KalmanAlignmentUpdator 00016 { 00017 00018 public: 00019 00020 typedef ReferenceTrajectoryBase::ReferenceTrajectoryPtr ReferenceTrajectoryPtr; 00021 00022 KalmanAlignmentUpdator( const edm::ParameterSet & config ) {} 00023 virtual ~KalmanAlignmentUpdator( void ) {} 00024 00027 virtual void process( const ReferenceTrajectoryPtr & trajectory, 00028 AlignmentParameterStore* store, 00029 AlignableNavigator* navigator, 00030 KalmanAlignmentMetricsUpdator* metrics, 00031 const MagneticField* magField = 0 ) = 0; 00032 00033 virtual KalmanAlignmentUpdator* clone( void ) const = 0; 00034 00035 protected: 00036 00038 void updateUserVariables( const std::vector< Alignable* > & alignables ) const; 00039 00042 virtual const std::vector< Alignable* > 00043 alignablesFromAlignableDets( std::vector< AlignableDetOrUnitPtr >& alignableDets, 00044 AlignmentParameterStore* store ) const; 00045 00046 unsigned int nDifferentAlignables( const std::vector<Alignable*>& ali ) const; 00047 00048 }; 00049 00050 00051 #endif