#include "DataFormats/TrackReco/interface/TrackResiduals.h"
Go to the source code of this file.
Functions | |
reco::TrackResiduals | trajectoryToResiduals (const Trajectory &, enum reco::TrackResiduals::ResidualType=reco::TrackResiduals::X_Y_PULLS) |
reco::TrackResiduals trajectoryToResiduals | ( | const Trajectory & | , | |
enum reco::TrackResiduals::ResidualType | = reco::TrackResiduals::X_Y_PULLS | |||
) |
Definition at line 6 of file TrajectoryToResiduals.cc.
References alongMomentum, TrajectoryMeasurement::backwardPredictedState(), Trajectory::direction(), TrajectoryMeasurement::forwardPredictedState(), i, TrajectoryStateOnSurface::localError(), TrajectoryStateOnSurface::localPosition(), Trajectory::measurements(), HelpertRecHit2DLocalPos::parError(), LocalTrajectoryError::positionError(), TrajectoryMeasurement::recHit(), reco::TrackResiduals::setPullXY(), reco::TrackResiduals::setResidualXY(), funct::sqrt(), PV3DBase< T, PVType, FrameType >::x(), x, reco::TrackResiduals::X_Y_PULLS, reco::TrackResiduals::X_Y_RESIDUALS, LocalError::xx(), PV3DBase< T, PVType, FrameType >::y(), y, and LocalError::yy().
Referenced by KfTrackProducerBase::putInEvt().
00008 { 00009 reco::TrackResiduals residuals(type); 00010 int i_residual = 0; 00011 Trajectory::DataContainer::const_iterator i_fwd = 00012 trajectory.measurements().begin(); 00013 Trajectory::DataContainer::const_reverse_iterator i_bwd = 00014 trajectory.measurements().rbegin(); 00015 Trajectory::DataContainer::const_iterator i_end = 00016 trajectory.measurements().end(); 00017 Trajectory::DataContainer::const_reverse_iterator i_rend = 00018 trajectory.measurements().rend(); 00019 bool forward = trajectory.direction() == alongMomentum; 00020 for (; forward ? i_fwd != i_end : i_bwd != i_rend; 00021 ++i_fwd, ++i_bwd, ++i_residual) { 00022 const TrajectoryMeasurement *i = forward ? &*i_fwd : &*i_bwd; 00023 if (!i->recHit()->isValid()) 00024 continue; 00025 TrajectoryStateCombiner combine; 00026 TrajectoryStateOnSurface combo = combine(i->forwardPredictedState(), 00027 i->backwardPredictedState()); 00028 LocalPoint combo_localpos = combo.localPosition(); 00029 LocalError combo_localerr = combo.localError().positionError(); 00030 LocalPoint dethit_localpos = i->recHit()->localPosition(); 00031 LocalError dethit_localerr = i->recHit()->localPositionError(); 00032 HelpertRecHit2DLocalPos helper; 00033 AlgebraicSymMatrix error_including_alignment = 00034 helper.parError(dethit_localerr, *i->recHit()->det()); 00035 switch (type) { 00036 case reco::TrackResiduals::X_Y_RESIDUALS: 00037 { 00038 double x = (dethit_localpos.x() - combo_localpos.x()) / 00039 sqrt(error_including_alignment[0][0]); 00040 double y = (dethit_localpos.y() - combo_localpos.y()) / 00041 sqrt(error_including_alignment[1][1]); 00042 residuals.setResidualXY(i_residual, x, y); 00043 break; 00044 } 00045 case reco::TrackResiduals::X_Y_PULLS: 00046 { 00047 double x = (dethit_localpos.x() - combo_localpos.x()) / 00048 sqrt(error_including_alignment[0][0] + combo_localerr.xx()); 00049 double y = (dethit_localpos.y() - combo_localpos.y()) / 00050 sqrt(error_including_alignment[1][1] + combo_localerr.yy()); 00051 residuals.setPullXY(i_residual, x, y); 00052 break; 00053 } 00054 default: 00055 assert(0); 00056 } 00057 } 00058 return residuals; 00059 }