Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:01:55

0001 #ifndef AlignTransformErrorExtended_H
0002 #define AlignTransformErrorExtended_H
0003 #include "CondFormats/Serialization/interface/Serializable.h"
0004 
0005 #include "CLHEP/Matrix/SymMatrix.h"
0006 #include "CLHEP/Vector/RotationInterfaces.h"
0007 
0008 #include "CondFormats/Alignment/interface/Definitions.h"
0009 
0010 /// Class holding error due to an Alignment transformation
0011 /// It contains the raw detector id and the symmetrical error matrix.
0012 /// It is optimized for storage (error matrix is stored as C-array)
0013 class AlignTransformErrorExtended {
0014 public:
0015   typedef CLHEP::HepSymMatrix SymMatrix;
0016 
0017   AlignTransformErrorExtended() {}
0018   AlignTransformErrorExtended(const SymMatrix& symMatrix, align::ID irawId) : m_rawId(irawId) {
0019     for (unsigned int i = 0; i < m_nPars; ++i)
0020       for (unsigned int j = 0; j <= i; ++j)
0021         m_Parameters[i * (i + 1) / 2 + j] = symMatrix[i][j];
0022   }
0023 
0024   SymMatrix matrix() const {
0025     SymMatrix result(m_nPars);
0026     for (unsigned int i = 0; i < m_nPars; ++i)
0027       for (unsigned int j = 0; j <= i; ++j)
0028         result[i][j] = m_Parameters[i * (i + 1) / 2 + j];
0029     return result;
0030   }
0031 
0032   align::ID rawId() const { return m_rawId; }
0033 
0034   // Implemented so this can be sorted by rawId
0035   const bool operator<(const AlignTransformErrorExtended& other) const { return (m_rawId < other.rawId()); }
0036 
0037 private:
0038   //FIXME difference here
0039   static const unsigned int m_nPars = 6;
0040   double m_Parameters[m_nPars * (m_nPars + 1) / 2];
0041   align::ID m_rawId;
0042 
0043   COND_SERIALIZABLE;
0044 };
0045 #endif  //AlignTransformErrorExtended_H