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
00029 GlobalPoint linVertex = theVertexFinder->getLinearizationPoint( tracks );
00030
00031
00032 vector< RefCountedLinearizedTrackState > linTracks;
00033 linTracks.push_back( theLinTrackStateFactory.linearizedTrackState( linVertex, tracks[0] ) );
00034 linTracks.push_back( theLinTrackStateFactory.linearizedTrackState( linVertex, tracks[1] ) );
00035
00036
00037 const TwoBodyDecayParameters linPoint = theLinPointFinder->getLinearizationPoint( linTracks, vm.primaryMass(), vm.secondaryMass() );
00038
00039
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
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
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
00060 const TwoBodyDecayParameters linPoint = theLinPointFinder->getLinearizationPoint( linTracks, vm.primaryMass(), vm.secondaryMass() );
00061
00062
00063 return theEstimator->estimate( linTracks, linPoint, vm );
00064 }