00001 #ifndef Alignment_CommonAlignmentParametrization_CompositeAlignmentDerivativesExtractor_H 00002 #define Alignment_CommonAlignmentParametrization_CompositeAlignmentDerivativesExtractor_H 00003 00004 #include "DataFormats/CLHEP/interface/AlgebraicObjects.h" 00005 00013 00014 class Alignable; 00015 class AlignableDet; 00016 class AlignableDetOrUnitPtr; 00017 class TrajectoryStateOnSurface; 00018 00019 class CompositeAlignmentDerivativesExtractor 00020 { 00021 00022 public: 00023 00025 CompositeAlignmentDerivativesExtractor( const std::vector< Alignable* > & alignables, 00026 const std::vector< AlignableDet* > & alignableDets, 00027 const std::vector< TrajectoryStateOnSurface > & tsos ); 00029 CompositeAlignmentDerivativesExtractor( const std::vector< Alignable* > & alignables, 00030 const std::vector< AlignableDetOrUnitPtr > & alignableDets, 00031 const std::vector< TrajectoryStateOnSurface > & tsos ); 00032 00034 ~CompositeAlignmentDerivativesExtractor( void ) {}; 00035 00036 const AlgebraicMatrix & derivatives( void ) const { return theDerivatives; } 00037 const AlgebraicVector & correctionTerm( void ) const { return theCorrectionTerm; } 00038 00039 private: 00040 00041 void extractCurrentAlignment( const std::vector< Alignable* > & alignables, 00042 const std::vector< AlignableDetOrUnitPtr > & alignableDets, 00043 const std::vector< TrajectoryStateOnSurface > & tsos ); 00044 00045 void extractWithoutMultipleHits( const std::vector< AlgebraicVector > & subCorrectionTerm, 00046 const std::vector< AlgebraicMatrix > & subDerivatives ); 00047 00048 void extractWithMultipleHits( const std::vector< AlgebraicVector > & subCorrectionTerm, 00049 const std::vector< AlgebraicMatrix > & subDerivatives, 00050 const std::vector< Alignable* > & alignables ); 00051 00052 AlgebraicMatrix theDerivatives; 00053 AlgebraicVector theCorrectionTerm; 00054 00055 }; 00056 00057 #endif