00001 #include "AtlfastAlgs/ParameterResolutions.h"
00002 #include <cmath>
00003
00004 namespace Atlfast
00005 {
00006
00007 double ParameterResolutions::resolution( const TrackTrajectory& traj ) const
00008 {
00009
00010
00011 TrackParameters track = traj.parameters();
00012 double eta = std::abs( track.eta() );
00013 double pT = track.pT();
00014
00015 std::vector<BinID>::const_iterator iter = m_coefficientBins.begin();
00016 std::vector<BinID>::const_iterator end = m_coefficientBins.end();
00017 std::vector<double> coefficients;
00018 for ( ; iter != end; ++iter )
00019 {
00020 double value = this->interpolate( eta, iter->low(), iter->high() );
00021 coefficients.push_back(value);
00022 }
00023 return calculateResolution( pT, coefficients );
00024 }
00025
00026
00027 double ParameterResolutions::interpolate( double eta, double coeffLow, double coeffHigh ) const
00028 {
00029 double slope = ( coeffHigh - coeffLow ) / ( m_etaHigh - m_etaLow );
00030 double value = coeffLow + slope * ( eta - m_etaLow );
00031 return value;
00032 }
00033
00034 double ParameterResolutions::calculateResolution( double pT, const std::vector<double>& coefficients ) const
00035 {
00036 if ( pT == 0 ) return 0;
00037 double resolution = 0;
00038 std::vector<double>::const_iterator powerSeries = m_powerSeries.begin();
00039 std::vector<double>::const_iterator iter = coefficients.begin();
00040 std::vector<double>::const_iterator end = coefficients.end();
00041
00042 for ( ; iter != end; ++iter )
00043 {
00044 resolution += (*iter) / std::pow( pT, (*powerSeries) );
00045 ++powerSeries;
00046 }
00047 return resolution;
00048 }
00049
00050 }