CMS 3D CMS Logo

/data/doxygen/doxygen-1.7.3/gen/CMSSW_4_2_8/src/DataFormats/GeometryCommonDetAlgo/interface/ErrorFrameTransformer.h

Go to the documentation of this file.
00001 #ifndef ErrorFrameTransformer_H
00002 #define ErrorFrameTransformer_H
00003 
00004 #include "DataFormats/GeometrySurface/interface/Surface.h"
00005 #include "DataFormats/GeometryCommonDetAlgo/interface/GlobalError.h"
00006 #include "DataFormats/GeometryCommonDetAlgo/interface/LocalError.h"
00007 
00008 class   ErrorFrameTransformer {
00009 public:
00010 
00011   typedef Surface::Scalar         Scalar;
00012 
00013   GlobalError transform(const LocalError& le, const Surface& surf) const {
00014     // the GlobalError is a sym matrix, initialisation takes only
00015     // 6 T because GlobalError is stored as a lower triangular matrix.
00016     Scalar cxx = le.xx();
00017     Scalar cxy = le.xy();
00018     Scalar cyy = le.yy();
00019 
00020     Surface::RotationType r=surf.rotation();
00021 
00022     return GlobalError( r.xx()*(r.xx()*cxx+r.yx()*cxy) + r.yx()*(r.xx()*cxy+r.yx()*cyy) ,
00023                         r.xx()*(r.xy()*cxx+r.yy()*cxy) + r.yx()*(r.xy()*cxy+r.yy()*cyy) ,
00024                         r.xy()*(r.xy()*cxx+r.yy()*cxy) + r.yy()*(r.xy()*cxy+r.yy()*cyy) ,
00025                         r.xx()*(r.xz()*cxx+r.yz()*cxy) + r.yx()*(r.xz()*cxy+r.yz()*cyy) ,
00026                         r.xy()*(r.xz()*cxx+r.yz()*cxy) + r.yy()*(r.xz()*cxy+r.yz()*cyy) ,
00027                         r.xz()*(r.xz()*cxx+r.yz()*cxy) + r.yz()*(r.xz()*cxy+r.yz()*cyy) );
00028   }
00029   
00030   LocalError transform(const GlobalError& ge, const Surface& surf) const {
00031     Scalar cxx = ge.cxx(); Scalar cyx = ge.cyx(); Scalar cyy = ge.cyy();
00032     Scalar czx = ge.czx(); Scalar czy = ge.czy(); Scalar czz = ge.czz();
00033     
00034     Surface::RotationType r=surf.rotation();
00035 
00036     Scalar l11 
00037       = r.xx()*(r.xx()*cxx + r.xy()*cyx + r.xz()*czx)
00038       + r.xy()*(r.xx()*cyx + r.xy()*cyy + r.xz()*czy)
00039       + r.xz()*(r.xx()*czx + r.xy()*czy + r.xz()*czz);
00040     Scalar l12 
00041       = r.yx()*(r.xx()*cxx + r.xy()*cyx + r.xz()*czx)
00042       + r.yy()*(r.xx()*cyx + r.xy()*cyy + r.xz()*czy)
00043       + r.yz()*(r.xx()*czx + r.xy()*czy + r.xz()*czz);
00044     Scalar l22
00045       = r.yx()*(r.yx()*cxx + r.yy()*cyx + r.yz()*czx)
00046       + r.yy()*(r.yx()*cyx + r.yy()*cyy + r.yz()*czy)
00047       + r.yz()*(r.yx()*czx + r.yy()*czy + r.yz()*czz);
00048 
00049     return LocalError( l11, l12, l22);
00050   }
00051 
00052 };
00053 
00054 #endif