00001
00002 #include "Alignment/ReferenceTrajectories/interface/BzeroReferenceTrajectory.h"
00003
00004 #include "DataFormats/CLHEP/interface/AlgebraicObjects.h"
00005 #include "DataFormats/TrajectoryState/interface/LocalTrajectoryParameters.h"
00006
00007 #include "TrackingTools/TrajectoryState/interface/TrajectoryStateOnSurface.h"
00008 #include "TrackingTools/TransientTrackingRecHit/interface/TransientTrackingRecHit.h"
00009
00010
00011 BzeroReferenceTrajectory::BzeroReferenceTrajectory(const TrajectoryStateOnSurface &refTsos,
00012 const TransientTrackingRecHit::ConstRecHitContainer
00013 &recHits, bool hitsAreReverse,
00014 const MagneticField *magField,
00015 MaterialEffects materialEffects,
00016 PropagationDirection propDir,
00017 double mass, double momentumEstimate) :
00018 ReferenceTrajectory( refTsos.localParameters().mixedFormatVector().kSize, recHits.size() ),
00019 theMomentumEstimate( momentumEstimate )
00020 {
00021
00022
00023
00024 theParameters = asHepVector<5>( refTsos.localParameters().mixedFormatVector() );
00025 theParameters[0] = 1./theMomentumEstimate;
00026
00027 LocalTrajectoryParameters locParamWithFixedMomentum( theParameters,
00028 refTsos.localParameters().pzSign(),
00029 refTsos.localParameters().charge() );
00030
00031 const TrajectoryStateOnSurface refTsosWithFixedMomentum(locParamWithFixedMomentum, refTsos.localError(),
00032 refTsos.surface(), magField,
00033 surfaceSide(propDir));
00034
00035 if (hitsAreReverse)
00036 {
00037 TransientTrackingRecHit::ConstRecHitContainer fwdRecHits;
00038 fwdRecHits.reserve(recHits.size());
00039
00040 for (TransientTrackingRecHit::ConstRecHitContainer::const_reverse_iterator it=recHits.rbegin(); it != recHits.rend(); ++it)
00041 fwdRecHits.push_back(*it);
00042
00043 theValidityFlag = this->construct(refTsosWithFixedMomentum, fwdRecHits, mass, materialEffects, propDir, magField);
00044 } else {
00045 theValidityFlag = this->construct(refTsosWithFixedMomentum, recHits, mass, materialEffects, propDir, magField);
00046 }
00047
00048
00049 theParameters = theParameters.sub( 2, 5 );
00050 theDerivatives = theDerivatives.sub( 1, theDerivatives.num_row(), 2, 5 );
00051 }