CMS 3D CMS Logo

Public Member Functions | Private Attributes

TrackingRecHitPropagator Class Reference

#include <TrackingRecHitPropagator.h>

List of all members.

Public Member Functions

template<class ResultingHit >
TransientTrackingRecHit::RecHitPointer project (const TransientTrackingRecHit::ConstRecHitPointer hit, const GeomDet &det, const TrajectoryStateOnSurface ts) const
 TrackingRecHitPropagator (const MagneticField *magf)
 ~TrackingRecHitPropagator ()

Private Attributes

const AnalyticalPropagatorthePropagator

Detailed Description

Definition at line 18 of file TrackingRecHitPropagator.h.


Constructor & Destructor Documentation

TrackingRecHitPropagator::TrackingRecHitPropagator ( const MagneticField magf) [inline]
TrackingRecHitPropagator::~TrackingRecHitPropagator ( ) [inline]

Definition at line 24 of file TrackingRecHitPropagator.h.

References thePropagator.

{delete thePropagator;}

Member Function Documentation

template<class ResultingHit >
TransientTrackingRecHit::RecHitPointer TrackingRecHitPropagator::project ( const TransientTrackingRecHit::ConstRecHitPointer  hit,
const GeomDet det,
const TrajectoryStateOnSurface  ts 
) const [inline]

Definition at line 26 of file TrackingRecHitPropagator.h.

References newFWLiteAna::build, TrajectoryStateOnSurface::charge(), alignCSCRings::e, TrajectoryStateOnSurface::isValid(), TrajectoryStateOnSurface::localMomentum(), TrajectoryStateOnSurface::magneticField(), AlCaHLTBitMon_ParallelJobs::p, AnalyticalPropagator::propagate(), GeomDet::surface(), TrajectoryStateOnSurface::surface(), and thePropagator.

                                                                                                                             {
        //1) propagate the best possible track parameters to the surface of the hit you want to "move" using a AnalyticalPropagator ;
        //2) create LocalTrajectoryParameters with the local x,y of the hit and direction + momentum from the propagated track parameters;
        //3) create a LocalTrajectoryError matrix which is 0 except for the local x,y submatrix, which is filled with the hit errors;
        //4) create a TSOS from the result of 2) and 3) and propagate it to the reference surface;
        //5) create a new hit with the local x,y subspace of the result of 4)
          if (!ts.isValid()) return InvalidTransientRecHit::build(hit->det());
          //      LogTrace("SiTrackerMultiRecHitUpdator") << "the tsos is valid";         
                //check if the ts lays or not on the destination surface and in case propagate it
                TrajectoryStateOnSurface propagated =ts;
                if (hit->surface() != &(ts.surface())) propagated = thePropagator->propagate(ts, *(hit->surface()));
                if (!propagated.isValid()) return InvalidTransientRecHit::build(hit->det());    
                //        LogTrace("SiTrackerMultiRecHitUpdator") << "the propagate tsos is valid";       
                //              LogTrace("SiTrackerMultiRecHitUpdator") << "Original: position: "<<hit->parameters()<<" error: "<<hit->parametersError()<<std::endl;
                //clone the original hit with this state
                TransientTrackingRecHit::RecHitPointer updatedOriginal = hit->clone(propagated);
                //              LogTrace("SiTrackerMultiRecHitUpdator") << "New: position: "<<updatedOriginal->parameters()<<" error: "<<updatedOriginal->parametersError()<<std::endl;
                
                //        LogTrace("SiTrackerMultiRecHitUpdator") << "rechit cloned";     
                LocalTrajectoryParameters ltp(updatedOriginal->localPosition(), propagated.localMomentum(), propagated.charge());
                AlgebraicSymMatrix55 ltem;
                ltem(3,3) = (updatedOriginal->parametersError())(1,1);
                ltem(4,4) = (updatedOriginal->parametersError())(2,2);
                ltem(3,4) = (updatedOriginal->parametersError())(1,2);
                //              LogTrace("SiTrackerMultiRecHitUpdator") <<"The cov matrix: "<<ltem<<std::endl;
                LocalTrajectoryError lte(ltem);
                //              LogTrace("SiTrackerMultiRecHitUpdator") <<"Original cov matrix: "<<lte.matrix()<<std::endl;
                TrajectoryStateOnSurface hit_state(ltp, lte, propagated.surface(), propagated.magneticField());
                TrajectoryStateOnSurface projected_hit_state = thePropagator->propagate(hit_state, det.surface());
                if (!projected_hit_state.isValid()) return InvalidTransientRecHit::build(hit->det());   
                LocalPoint p = projected_hit_state.localPosition();
                LocalError e = projected_hit_state.localError().positionError();
                //              LogTrace("SiTrackerMultiRecHitUpdator") << "position: "<<p<<" error: "<<e<<std::endl;
                //AlgebraicSymMatrix55 projm=projected_hit_state.localError().matrix();   
                //              for(int i=0;i<5;i++){
                //              LogTrace("SiTrackerMultiRecHitUpdator") <<"cov matrix: "<<projm<<std::endl;
                //              }
                return ResultingHit::build(p, e, &det, updatedOriginal->det(), updatedOriginal, this);
        }

Member Data Documentation