CMS 3D CMS Logo

StripMeasurementTransformator.cc

Go to the documentation of this file.
00001 #include "TrackingTools/KalmanUpdators/interface/StripMeasurementTransformator.h"
00002 #include "Geometry/CommonDetUnit/interface/GeomDetUnit.h"
00003 
00004 StripMeasurementTransformator::StripMeasurementTransformator(const TSOS& tsos,
00005                                                          const TransientTrackingRecHit& hit) : 
00006   theRecHit(hit),
00007   theState(tsos),
00008   theTopology(0) {
00009 
00010   init();
00011 }
00012 
00013 void StripMeasurementTransformator::init() {
00014 
00015   theTopology = 
00016     dynamic_cast<const StripTopology*>(&(hit().detUnit()->topology()));
00017 }
00018 
00019 AlgebraicVector2 StripMeasurementTransformator::hitParameters() const {
00020   
00021   AlgebraicVector2 av;
00022   MeasurementPoint mp = 
00023     topology()->measurementPosition(hit().localPosition());
00024   av[0] = mp.x();
00025   av[1] = mp.y();
00026 
00027   return av;
00028 }
00029 
00030 AlgebraicVector5 StripMeasurementTransformator::trajectoryParameters() const {
00031     
00032   return state().localParameters().vector();
00033 }
00034 
00035 AlgebraicVector2 
00036 StripMeasurementTransformator::projectedTrajectoryParameters() const {
00037 
00038   AlgebraicVector2 av;
00039   MeasurementPoint mp = 
00040     topology()->measurementPosition(state().localPosition());
00041   av[0] = mp.x();
00042   av[1] = mp.y();
00043 
00044   return av;
00045 }
00046 
00047 AlgebraicSymMatrix22 StripMeasurementTransformator::hitError() const {
00048 
00049   AlgebraicSymMatrix22 am;
00050    MeasurementError me = 
00051     topology()->measurementError(hit().localPosition(),
00052                                  hit().localPositionError());
00053   am(0,0) = me.uu();
00054   am(1,0) = me.uv();
00055   am(1,1) = me.vv();
00056   
00057   return am;
00058 }
00059 
00060 const AlgebraicSymMatrix55 & StripMeasurementTransformator::trajectoryError() const {
00061 
00062   return state().localError().matrix();
00063 }
00064 
00065 AlgebraicSymMatrix22 
00066 StripMeasurementTransformator::projectedTrajectoryError() const {
00067 
00068   AlgebraicSymMatrix22 am;
00069   MeasurementError me = 
00070     topology()->measurementError(state().localPosition(),
00071                                  state().localError().positionError());
00072   am(0,0) = me.uu();
00073   am(1,0) = me.uv();
00074   am(1,1) = me.vv();
00075 
00076   return am;
00077 }
00078 
00079 AlgebraicMatrix25 StripMeasurementTransformator::projectionMatrix() const {
00080 
00081   // H(measurement <- local)
00082   // m_meas = H*x_local + c
00083   AlgebraicMatrix25 H;
00084   
00085   float phi = 
00086     topology()->stripAngle(topology()->strip(state().localPosition()));
00087   float pitch = topology()->localPitch(state().localPosition());
00088   float length = topology()->localStripLength(state().localPosition());
00089   H(0,3) = cos(phi)/pitch; H(0,4) = sin(phi)/pitch;
00090   H(1,3) = -sin(phi)/length; H(1,4) = cos(phi)/length;
00091 
00092   return H;
00093 }
00094 

Generated on Tue Jun 9 17:48:22 2009 for CMSSW by  doxygen 1.5.4