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
00082
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