00001 #ifndef Alignment_CommonAlignmentParametrization_CompositeAlignmentParameters_h
00002 #define Alignment_CommonAlignmentParametrization_CompositeAlignmentParameters_h
00003
00004
00005
00006 #include "Alignment/CommonAlignment/interface/AlignmentParameters.h"
00007
00012
00013 class AlignableDet;
00014
00015 class CompositeAlignmentParameters : public AlignmentParameters
00016 {
00017
00018 public:
00019
00021 typedef std::vector<Alignable*> Components;
00022
00023 typedef std::map<AlignableDetOrUnitPtr,Alignable*> AlignableDetToAlignableMap;
00024 typedef std::map<Alignable*,int> Aliposmap;
00025 typedef std::map<Alignable*,int> Alilenmap;
00026
00028
00029 CompositeAlignmentParameters(const AlgebraicVector& par, const AlgebraicSymMatrix& cov,
00030 const Components& comp);
00031
00032 CompositeAlignmentParameters(const AlgebraicVector& par, const AlgebraicSymMatrix& cov,
00033 const Components& comp, const AlignableDetToAlignableMap& alimap,
00034 const Aliposmap& aliposmap, const Alilenmap& alilenmap);
00035
00036 CompositeAlignmentParameters( const DataContainer& data,
00037 const Components& comp, const AlignableDetToAlignableMap& alimap,
00038 const Aliposmap& aliposmap, const Alilenmap& alilenmap);
00039
00041 virtual ~CompositeAlignmentParameters();
00042
00044 CompositeAlignmentParameters* clone( const AlgebraicVector& par,
00045 const AlgebraicSymMatrix& cov) const;
00046
00048 CompositeAlignmentParameters* cloneFromSelected( const AlgebraicVector& par,
00049 const AlgebraicSymMatrix& cov) const;
00050
00052 CompositeAlignmentParameters* clone( const AlgebraicVector& par, const AlgebraicSymMatrix& cov,
00053 const AlignableDetToAlignableMap& alimap,
00054 const Aliposmap& aliposmap,
00055 const Alilenmap& alilenmap) const;
00056
00058 CompositeAlignmentParameters* cloneFromSelected( const AlgebraicVector& par,
00059 const AlgebraicSymMatrix& cov,
00060 const AlignableDetToAlignableMap& alimap,
00061 const Aliposmap& aliposmap,
00062 const Alilenmap& alilenmap) const;
00063
00065 Components components() const;
00066
00068 AlgebraicMatrix derivatives( const TrajectoryStateOnSurface& tsos, const AlignableDetOrUnitPtr &alidet ) const;
00070 AlgebraicMatrix selectedDerivatives( const TrajectoryStateOnSurface& tsos,
00071 const AlignableDetOrUnitPtr &alidet ) const;
00073 AlgebraicMatrix derivatives( const std::vector<TrajectoryStateOnSurface>& tsosvec,
00074 const std::vector<AlignableDet*>& alidetvec ) const;
00075 AlgebraicMatrix derivatives( const std::vector<TrajectoryStateOnSurface>& tsosvec,
00076 const std::vector<AlignableDetOrUnitPtr>& alidetvec ) const;
00078 AlgebraicMatrix selectedDerivatives( const std::vector<TrajectoryStateOnSurface> &tsosvec,
00079 const std::vector<AlignableDet*> &alidetvec ) const;
00080 AlgebraicMatrix selectedDerivatives( const std::vector<TrajectoryStateOnSurface> &tsosvec,
00081 const std::vector<AlignableDetOrUnitPtr> &alidetvec ) const;
00082
00084 AlgebraicVector correctionTerm( const std::vector<TrajectoryStateOnSurface>& tsosvec,
00085 const std::vector<AlignableDet*>& alidetvec ) const;
00086 AlgebraicVector correctionTerm( const std::vector<TrajectoryStateOnSurface>& tsosvec,
00087 const std::vector<AlignableDetOrUnitPtr>& alidetvec ) const;
00089 AlgebraicMatrix derivativesLegacy ( const TrajectoryStateOnSurface& tsos,
00090 AlignableDet* alidet ) const;
00092 AlgebraicMatrix selectedDerivativesLegacy( const TrajectoryStateOnSurface& tsos,
00093 AlignableDet* alidet ) const;
00095 AlgebraicMatrix derivativesLegacy( const std::vector<TrajectoryStateOnSurface>& tsosvec,
00096 const std::vector<AlignableDet*>& alidetvec ) const;
00098 AlgebraicMatrix selectedDerivativesLegacy( const std::vector<TrajectoryStateOnSurface>& tsosvec,
00099 const std::vector<AlignableDet*>& alidetvec ) const;
00100
00102 Alignable* alignableFromAlignableDet( AlignableDetOrUnitPtr adet ) const;
00103
00104
00106 AlgebraicVector parameterSubset ( const std::vector<Alignable*>& vec ) const;
00107
00109 AlgebraicSymMatrix covarianceSubset( const std::vector<Alignable*>& vec ) const;
00110
00112 AlgebraicMatrix covarianceSubset ( const std::vector<Alignable*>& veci,
00113 const std::vector<Alignable*>& vecj ) const;
00114
00115 private:
00116
00118 bool extractPositionAndLength( const std::vector<Alignable*>& alignables,
00119 std::vector<int>& posvec,
00120 std::vector<int>& lenvec,
00121 int& length ) const;
00122
00124 std::vector< Alignable* > extractAlignables( const std::vector< Alignable* >& alignables ) const;
00125
00128 void convert(const std::vector<AlignableDet*> &input,
00129 std::vector<AlignableDetOrUnitPtr> &output) const;
00130
00132 Components theComponents;
00133
00135 AlignableDetToAlignableMap theAlignableDetToAlignableMap;
00136
00138 Aliposmap theAliposmap;
00139 Alilenmap theAlilenmap;
00140
00141 };
00142
00143 #endif