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