CMS 3D CMS Logo

TwoBodyDecayFitter.cc

Go to the documentation of this file.
00001 #include "Alignment/TwoBodyDecay/interface/TwoBodyDecayFitter.h"
00002 
00003 
00004 using namespace std;
00005 
00006 
00007 TwoBodyDecayFitter::TwoBodyDecayFitter( const edm::ParameterSet & config ) :
00008   theVertexFinder( new DefaultLinearizationPointFinder() ),
00009   theLinPointFinder( new TwoBodyDecayLinearizationPointFinder( config ) ),
00010   theEstimator( new TwoBodyDecayEstimator( config ) ) {}
00011 
00012 
00013 TwoBodyDecayFitter::TwoBodyDecayFitter( const edm::ParameterSet & config,
00014                                         const LinearizationPointFinder* vf,
00015                                         const TwoBodyDecayLinearizationPointFinder* lpf,
00016                                         const TwoBodyDecayEstimator* est ) :
00017   theVertexFinder( vf->clone() ),
00018   theLinPointFinder( lpf->clone() ),
00019   theEstimator( est->clone() ) {}
00020 
00021 
00022 TwoBodyDecayFitter::~TwoBodyDecayFitter( void ) {}
00023 
00024 
00025 const TwoBodyDecay TwoBodyDecayFitter::estimate( const vector< reco::TransientTrack >& tracks,
00026                                                  const TwoBodyDecayVirtualMeasurement& vm ) const
00027 {
00028   // get geometrical linearization point
00029   GlobalPoint linVertex = theVertexFinder->getLinearizationPoint( tracks );
00030 
00031   // create linearized track states
00032   vector< RefCountedLinearizedTrackState > linTracks;
00033   linTracks.push_back( theLinTrackStateFactory.linearizedTrackState( linVertex, tracks[0] ) );
00034   linTracks.push_back( theLinTrackStateFactory.linearizedTrackState( linVertex, tracks[1] ) );
00035 
00036   // get full linearization point (geomatrical & kinematical)
00037   const TwoBodyDecayParameters linPoint = theLinPointFinder->getLinearizationPoint( linTracks, vm.primaryMass(), vm.secondaryMass() );
00038 
00039   // make the fit
00040   return theEstimator->estimate( linTracks, linPoint, vm );
00041 }
00042 
00043 
00044 const TwoBodyDecay TwoBodyDecayFitter::estimate( const vector< reco::TransientTrack >& tracks,
00045                                                  const std::vector< TrajectoryStateOnSurface >& tsos,
00046                                                  const TwoBodyDecayVirtualMeasurement& vm ) const
00047 {
00048   // get geometrical linearization point
00049   std::vector< FreeTrajectoryState > freeTrajStates;
00050   freeTrajStates.push_back( *tsos[0].freeState() );
00051   freeTrajStates.push_back( *tsos[1].freeState() );
00052   GlobalPoint linVertex = theVertexFinder->getLinearizationPoint( freeTrajStates );
00053 
00054   // create linearized track states
00055   vector< RefCountedLinearizedTrackState > linTracks;
00056   linTracks.push_back( theLinTrackStateFactory.linearizedTrackState( linVertex, tracks[0], tsos[0] ) );
00057   linTracks.push_back( theLinTrackStateFactory.linearizedTrackState( linVertex, tracks[1], tsos[1] ) );
00058 
00059   // get full linearization point (geomatrical & kinematical)
00060   const TwoBodyDecayParameters linPoint = theLinPointFinder->getLinearizationPoint( linTracks, vm.primaryMass(), vm.secondaryMass() );
00061 
00062   // make the fit
00063   return theEstimator->estimate( linTracks, linPoint, vm );
00064 }

Generated on Tue Jun 9 17:25:05 2009 for CMSSW by  doxygen 1.5.4