// $Header: LookUp2d.cxx $
// two dimensional lookup table
// Version 1.0 7-Jan-1999 Richard creation
#include "LookUp2d.h"
#include "TMath.h"
//______________________________________________________________________
//
// LookUp2d
//
// utility class which reads a 2-d table and uses it for interpolation
ClassImp(LookUp2d)
LookUp2d::LookUp2d(TString name, Float_t* key1, Float_t* key2, Float_t* mat,
Int_t numBins1, Int_t numBins2) :
m_name(name), m_key1(key1), m_key2(key2), m_matrix(mat),
m_numBins1(numBins1), m_numBins2(numBins2) {
};
LookUp2d::~LookUp2d() {};
Float_t LookUp2d::interpolateVal(Float_t val1, Float_t val2, Int_t* rc) {
// interpolates table given input val1, val2
int badVal1LowerBound = 1,
badVal1UpperBound = 2,
badVal2LowerBound = 3,
badVal2UpperBound = 4,
goodBounds = 0;
if (val1 > m_key1[m_numBins1-1] ) {
*rc = badVal1UpperBound;
return 0.;
};
if (val2 > m_key2[m_numBins2-1] ) {
*rc = badVal2UpperBound;
return 0.;
};
Int_t index1 = TMath::BinarySearch(m_numBins1,m_key1,val1);
index1 = ( index1 < 0 ) ? 0 : index1;
Int_t index2 = TMath::BinarySearch(m_numBins2,m_key2,val2);
index2 = ( index2 < 0 ) ? 0 : index2;
Float_t t = (val1 - m_key1[index1]) / (m_key1[index1+1] -
m_key1[index1]);
Float_t u = (val2 - m_key2[index2]) / (m_key2[index2+1] -
m_key2[index2]);
Float_t y1 = m_matrix[index1*m_numBins2+index2];
Float_t y2 = m_matrix[(index1+1)*m_numBins2+index2];
Float_t y3 = m_matrix[(index1+1)*m_numBins2+index2+1];
Float_t y4 = m_matrix[index1*m_numBins2+index2+1];
Float_t yNew = (1.-t)*(1.-u)*y1 + t*(1.-u)*y2 + t*u*y3 + (1.-t)*u*y4;
*rc = goodBounds;
return yNew;
};
ROOT page - Class index - Top of the page
This page has been automatically generated. If you have any comments or suggestions about the page layout send a mail to ROOT support, or contact the developers with any questions or problems regarding ROOT.