00001 #include "TrackingTools/TrajectoryState/interface/SurfaceSideDefinition.h"
00002 #include "TrackingTools/MaterialEffects/interface/MaterialEffectsUpdator.h"
00003
00004 using namespace SurfaceSideDefinition;
00005
00006
00007
00008
00009
00010
00011 TrajectoryStateOnSurface MaterialEffectsUpdator::updateState (const TrajectoryStateOnSurface& TSoS,
00012 const PropagationDirection propDir) const {
00013
00014
00015
00016
00017
00018
00019 const Surface& surface = TSoS.surface();
00020 if ( !surface.mediumProperties() || propDir==anyDirection ||
00021 TSoS.surfaceSide()==atCenterOfSurface ) return TSoS;
00022
00023
00024
00025 if ( (propDir==alongMomentum && TSoS.surfaceSide()==afterSurface ) ||
00026 (propDir==oppositeToMomentum && TSoS.surfaceSide()==beforeSurface ) ) return TSoS;
00027
00028
00029
00030 LocalTrajectoryParameters lp = TSoS.localParameters();
00031 if ( !lp.updateP(deltaP(TSoS,propDir)) )
00032 return TrajectoryStateOnSurface();
00033
00034
00035
00036 SurfaceSide side = propDir==alongMomentum ? afterSurface : beforeSurface;
00037 if ( TSoS.hasError() ) {
00038 AlgebraicSymMatrix55 eloc = TSoS.localError().matrix() + deltaLocalError(TSoS,propDir);
00039 return TrajectoryStateOnSurface(lp,LocalTrajectoryError(eloc),surface,
00040 &(TSoS.globalParameters().magneticField()),side);
00041 }
00042 else {
00043 return TrajectoryStateOnSurface(lp,surface,&(TSoS.globalParameters().magneticField()),side);
00044 }
00045 }
00046
00047
00048 AlgebraicSymMatrix55 MaterialEffectsUpdator::theNullMatrix;