00001 #ifndef Alignment_CommonAlignmentAlgorithm_AlignmentParameterStore_h
00002 #define Alignment_CommonAlignmentAlgorithm_AlignmentParameterStore_h
00003
00004 #include "Alignment/CommonAlignment/interface/Utilities.h"
00005 #include "Alignment/CommonAlignmentAlgorithm/interface/AlignableData.h"
00006 #include "Alignment/CommonAlignmentAlgorithm/interface/AlignmentCorrelationsStore.h"
00007 #include "Alignment/CommonAlignmentParametrization/interface/CompositeAlignmentParameters.h"
00008
00016
00017 namespace edm { class ParameterSet; }
00018
00019 class AlignmentParameterStore
00020 {
00021
00022 public:
00023
00024 typedef std::vector<AlignmentParameters*> Parameters;
00025 typedef std::map< std::pair<Alignable*,Alignable*>,AlgebraicMatrix > Correlations;
00026 typedef std::vector<unsigned int> DetIds;
00027
00029 AlignmentParameterStore( const align::Alignables &alis, const edm::ParameterSet& config );
00030
00032 virtual ~AlignmentParameterStore();
00033
00036 CompositeAlignmentParameters
00037 selectParameters( const std::vector <AlignableDet*>& alignabledets ) const;
00039 CompositeAlignmentParameters
00040 selectParameters( const std::vector <AlignableDetOrUnitPtr>& alignabledets ) const;
00042 CompositeAlignmentParameters
00043 selectParameters( const std::vector <Alignable*>& alignables ) const;
00044
00046 void updateParameters(const CompositeAlignmentParameters& aap);
00047
00049 const align::Alignables& alignables(void) const { return theAlignables; }
00050
00052 align::Alignables validAlignables(void) const;
00053
00055 int numObjects(void) const { return theAlignables.size(); }
00056
00058 AlignmentCorrelationsStore* correlationsStore( void ) const { return theCorrelationsStore; }
00059
00061 const unsigned int numCorrelations( void ) const { return theCorrelationsStore->size(); }
00062
00064
00065
00067 Alignable* alignableFromAlignableDet( AlignableDetOrUnitPtr alignableDet ) const;
00068
00070
00071
00073 void applyParameters(void);
00074
00076 void applyParameters(Alignable* alignable);
00077
00079 void resetParameters(void);
00080
00082 void resetParameters(Alignable* ali);
00083
00086 void acquireRelativeParameters(void);
00087
00089 void applyAlignableAbsolutePositions( const align::Alignables& alis,
00090 const AlignablePositions& newpos, int& ierr );
00091
00093 void applyAlignableRelativePositions( const align::Alignables& alivec,
00094 const AlignableShifts& shifts, int& ierr );
00095
00097 void attachAlignmentParameters( const align::Alignables& alivec, const Parameters& parvec, int& ierr );
00098
00100 void attachAlignmentParameters(const Parameters& parvec, int& ierr);
00101
00103 void attachCorrelations( const align::Alignables& alivec, const Correlations& cormap,
00104 bool overwrite, int& ierr );
00105
00107 void attachCorrelations( const Correlations& cormap, bool overwrite, int& ierr );
00108
00110 void attachUserVariables( const align::Alignables& alivec,
00111 const std::vector<AlignmentUserVariables*>& uvarvec, int& ierr);
00112
00114 void setAlignmentPositionError( const align::Alignables& alivec, double valshift, double valrot );
00115
00117 std::pair<int,int> typeAndLayer( const Alignable* ali ) const;
00118
00120 typedef std::pair<Alignable*, unsigned int> ParameterId;
00132 bool hierarchyConstraints(const Alignable *aliMaster, const align::Alignables &aliComps,
00133 std::vector<std::vector<ParameterId> > ¶mIdsVecOut,
00134 std::vector<std::vector<float> > &factorsVecOut,
00135 bool all6, float epsilon = 1.e-15) const;
00136
00137 protected:
00138
00139
00140 AlignmentCorrelationsStore* theCorrelationsStore;
00141
00142 private:
00143
00144
00146 align::Alignables theAlignables;
00147
00148 };
00149
00150 #endif