// PiecewiseInterpolation
// END_HTML
#include <exception>
#include "RooFit.h"
#include "Riostream.h"
#include "Riostream.h"
#include <math.h>
#include "RooStats/HistFactory/PiecewiseInterpolation.h"
#include "RooAbsReal.h"
#include "RooAbsPdf.h"
#include "RooErrorHandler.h"
#include "RooArgSet.h"
#include "RooNLLVar.h"
#include "RooChi2Var.h"
#include "RooRealVar.h"
#include "RooMsgService.h"
#include "RooNumIntConfig.h"
#include "RooTrace.h"
using namespace std;
ClassImp(PiecewiseInterpolation)
;
PiecewiseInterpolation::PiecewiseInterpolation()
{
_positiveDefinite=false;
TRACE_CREATE
}
PiecewiseInterpolation::PiecewiseInterpolation(const char* name, const char* title, const RooAbsReal& nominal,
const RooArgList& lowSet,
const RooArgList& highSet,
const RooArgList& paramSet,
Bool_t takeOwnership) :
RooAbsReal(name, title),
_nominal("!nominal","nominal value", this, (RooAbsReal&)nominal),
_lowSet("!lowSet","low-side variation",this),
_highSet("!highSet","high-side variation",this),
_paramSet("!paramSet","high-side variation",this),
_positiveDefinite(false)
{
if (lowSet.getSize() != highSet.getSize()) {
coutE(InputArguments) << "PiecewiseInterpolation::ctor(" << GetName() << ") ERROR: input lists should be of equal length" << endl ;
RooErrorHandler::softAbort() ;
}
RooFIter inputIter1 = lowSet.fwdIterator() ;
RooAbsArg* comp ;
while((comp = inputIter1.next())) {
if (!dynamic_cast<RooAbsReal*>(comp)) {
coutE(InputArguments) << "PiecewiseInterpolation::ctor(" << GetName() << ") ERROR: component " << comp->GetName()
<< " in first list is not of type RooAbsReal" << endl ;
RooErrorHandler::softAbort() ;
}
_lowSet.add(*comp) ;
if (takeOwnership) {
_ownedList.addOwned(*comp) ;
}
}
RooFIter inputIter2 = highSet.fwdIterator() ;
while((comp = inputIter2.next())) {
if (!dynamic_cast<RooAbsReal*>(comp)) {
coutE(InputArguments) << "PiecewiseInterpolation::ctor(" << GetName() << ") ERROR: component " << comp->GetName()
<< " in first list is not of type RooAbsReal" << endl ;
RooErrorHandler::softAbort() ;
}
_highSet.add(*comp) ;
if (takeOwnership) {
_ownedList.addOwned(*comp) ;
}
}
RooFIter inputIter3 = paramSet.fwdIterator() ;
while((comp = inputIter3.next())) {
if (!dynamic_cast<RooAbsReal*>(comp)) {
coutE(InputArguments) << "PiecewiseInterpolation::ctor(" << GetName() << ") ERROR: component " << comp->GetName()
<< " in first list is not of type RooAbsReal" << endl ;
RooErrorHandler::softAbort() ;
}
_paramSet.add(*comp) ;
if (takeOwnership) {
_ownedList.addOwned(*comp) ;
}
_interpCode.push_back(0);
}
specialIntegratorConfig(kTRUE)->method1D().setLabel("RooBinIntegrator") ;
TRACE_CREATE
}
PiecewiseInterpolation::PiecewiseInterpolation(const PiecewiseInterpolation& other, const char* name) :
RooAbsReal(other, name),
_nominal("!nominal",this,other._nominal),
_lowSet("!lowSet",this,other._lowSet),
_highSet("!highSet",this,other._highSet),
_paramSet("!paramSet",this,other._paramSet),
_positiveDefinite(other._positiveDefinite),
_interpCode(other._interpCode)
{
TRACE_CREATE
}
PiecewiseInterpolation::~PiecewiseInterpolation()
{
TRACE_DESTROY
}
Double_t PiecewiseInterpolation::evaluate() const
{
Double_t nominal = _nominal;
Double_t sum(nominal) ;
RooAbsReal* param ;
RooAbsReal* high ;
RooAbsReal* low ;
int i=0;
RooFIter lowIter(_lowSet.fwdIterator()) ;
RooFIter highIter(_highSet.fwdIterator()) ;
RooFIter paramIter(_paramSet.fwdIterator()) ;
while((param=(RooAbsReal*)paramIter.next())) {
low = (RooAbsReal*)lowIter.next() ;
high = (RooAbsReal*)highIter.next() ;
Int_t icode = _interpCode[i] ;
switch(icode) {
case 0: {
if(param->getVal()>0)
sum += param->getVal()*(high->getVal() - nominal );
else
sum += param->getVal()*(nominal - low->getVal());
break ;
}
case 1: {
if(param->getVal()>=0)
sum *= pow(high->getVal()/nominal, +param->getVal());
else
sum *= pow(low->getVal()/nominal, -param->getVal());
break ;
}
case 2: {
double a = 0.5*(high->getVal()+low->getVal())-nominal;
double b = 0.5*(high->getVal()-low->getVal());
double c = 0;
if(param->getVal()>1 ){
sum += (2*a+b)*(param->getVal()-1)+high->getVal()-nominal;
} else if(param->getVal()<-1 ) {
sum += -1*(2*a-b)*(param->getVal()+1)+low->getVal()-nominal;
} else {
sum += a*pow(param->getVal(),2) + b*param->getVal()+c;
}
break ;
}
case 3: {
double a = 0.5*(high->getVal()+low->getVal())-nominal;
double b = 0.5*(high->getVal()-low->getVal());
double c = 0;
if(param->getVal()>1 ){
sum += (2*a+b)*(param->getVal()-1)+high->getVal()-nominal;
} else if(param->getVal()<-1 ) {
sum += -1*(2*a-b)*(param->getVal()+1)+low->getVal()-nominal;
} else {
sum += a*pow(param->getVal(),2) + b*param->getVal()+c;
}
break ;
}
case 4: {
double x = param->getVal();
if (x>1) {
sum += x*(high->getVal() - nominal );
} else if (x<-1) {
sum += x*(nominal - low->getVal());
} else {
double eps_plus = high->getVal() - nominal;
double eps_minus = nominal - low->getVal();
double S = 0.5 * (eps_plus + eps_minus);
double A = 0.0625 * (eps_plus - eps_minus);
double val = nominal + x * (S + x * A * ( 15 + x * x * (-10 + x * x * 3 ) ) );
if (val < 0) val = 0;
sum += val-nominal;
}
break ;
}
case 5: {
double x0 = 1.0;
double x = param->getVal();
if (x > x0 || x < -x0)
{
if(x>0)
sum += x*(high->getVal() - nominal );
else
sum += x*(nominal - low->getVal());
}
else if (nominal != 0)
{
double eps_plus = high->getVal() - nominal;
double eps_minus = nominal - low->getVal();
double S = (eps_plus + eps_minus)/2;
double A = (eps_plus - eps_minus)/2;
double a = S;
double b = 3*A/(2*x0);
double d = -A/(2*x0*x0*x0);
double val = nominal + a*x + b*pow(x, 2) + 0 + d*pow(x, 4);
if (val < 0) val = 0;
sum += val-nominal;
}
break ;
}
default: {
coutE(InputArguments) << "PiecewiseInterpolation::evaluate ERROR: " << param->GetName()
<< " with unknown interpolation code" << icode << endl ;
break ;
}
}
++i;
}
if(_positiveDefinite && (sum<0)){
sum = 1e-6;
sum = 0;
} else if(sum<0){
cxcoutD(Tracing) <<"PiecewiseInterpolation::evaluate - sum < 0, not forcing positive definite"<<endl;
}
return sum;
}
Bool_t PiecewiseInterpolation::setBinIntegrator(RooArgSet& allVars)
{
if(allVars.getSize()==1){
RooAbsReal* temp = const_cast<PiecewiseInterpolation*>(this);
temp->specialIntegratorConfig(kTRUE)->method1D().setLabel("RooBinIntegrator") ;
int nbins = ((RooRealVar*) allVars.first())->numBins();
temp->specialIntegratorConfig(kTRUE)->getConfigSection("RooBinIntegrator").setRealValue("numBins",nbins);
return true;
}else{
cout << "Currently BinIntegrator only knows how to deal with 1-d "<<endl;
return false;
}
return false;
}
Int_t PiecewiseInterpolation::getAnalyticalIntegralWN(RooArgSet& allVars, RooArgSet& analVars,
const RooArgSet* normSet, const char* ) const
{
if (allVars.getSize()==0) return 0 ;
if (_forceNumInt) return 0 ;
return 0;
RooFIter paramIterExtra(_paramSet.fwdIterator()) ;
int i=0;
while( paramIterExtra.next() ) {
if(!_interpCode.empty() && _interpCode[i]!=0){
cout <<"can't factorize integral"<<endl;
return 0;
}
++i;
}
analVars.add(allVars) ;
Int_t sterileIdx(-1) ;
CacheElem* cache = (CacheElem*) _normIntMgr.getObj(normSet,&analVars,&sterileIdx) ;
if (cache) {
return _normIntMgr.lastIndex()+1 ;
}
cache = new CacheElem ;
RooAbsReal *func ;
func = (RooAbsReal*)(&_nominal.arg()) ;
RooAbsReal* funcInt = func->createIntegral(analVars) ;
cache->_funcIntList.addOwned(*funcInt) ;
RooFIter lowIter(_lowSet.fwdIterator()) ;
RooFIter highIter(_highSet.fwdIterator()) ;
RooFIter paramIter(_paramSet.fwdIterator()) ;
i=0;
while(paramIter.next() ) {
func = (RooAbsReal*)lowIter.next() ;
funcInt = func->createIntegral(analVars) ;
cache->_lowIntList.addOwned(*funcInt) ;
func = (RooAbsReal*)highIter.next() ;
funcInt = func->createIntegral(analVars) ;
cache->_highIntList.addOwned(*funcInt) ;
++i;
}
Int_t code = _normIntMgr.setObj(normSet,&analVars,(RooAbsCacheElement*)cache,0) ;
return code+1 ;
}
Double_t PiecewiseInterpolation::analyticalIntegralWN(Int_t code, const RooArgSet* ,const char* ) const
{
CacheElem* cache = (CacheElem*) _normIntMgr.getObjByIndex(code-1) ;
if( cache==NULL ) {
std::cout << "Error: Cache Element is NULL" << std::endl;
throw std::exception();
}
RooFIter funcIntIter = cache->_funcIntList.fwdIterator() ;
RooFIter lowIntIter = cache->_lowIntList.fwdIterator() ;
RooFIter highIntIter = cache->_highIntList.fwdIterator() ;
RooAbsReal *funcInt(0), *low(0), *high(0), *param(0) ;
Double_t value(0) ;
Double_t nominal(0);
int i=0;
while(( funcInt = (RooAbsReal*)funcIntIter.next())) {
value += funcInt->getVal() ;
nominal = value;
i++;
}
if(i==0 || i>1) { cout << "problem, wrong number of nominal functions"<<endl; }
i = 0;
RooFIter paramIter(_paramSet.fwdIterator()) ;
while( (param=(RooAbsReal*)paramIter.next()) ) {
low = (RooAbsReal*)lowIntIter.next() ;
high = (RooAbsReal*)highIntIter.next() ;
if(param->getVal()>0) {
value += param->getVal()*(high->getVal() - nominal );
} else {
value += param->getVal()*(nominal - low->getVal());
}
++i;
}
return value;
}
void PiecewiseInterpolation::setInterpCode(RooAbsReal& param, int code){
int index = _paramSet.index(¶m);
if(index<0){
coutE(InputArguments) << "PiecewiseInterpolation::setInterpCode ERROR: " << param.GetName()
<< " is not in list" << endl ;
} else {
coutW(InputArguments) << "PiecewiseInterpolation::setInterpCode : " << param.GetName()
<< " is now " << code << endl ;
_interpCode.at(index) = code;
}
}
void PiecewiseInterpolation::setAllInterpCodes(int code){
for(unsigned int i=0; i<_interpCode.size(); ++i){
_interpCode.at(i) = code;
}
}
void PiecewiseInterpolation::printAllInterpCodes(){
for(unsigned int i=0; i<_interpCode.size(); ++i){
coutI(InputArguments) <<"interp code for " << _paramSet.at(i)->GetName() << " = " << _interpCode.at(i) <<endl;
}
}
std::list<Double_t>* PiecewiseInterpolation::binBoundaries(RooAbsRealLValue& obs, Double_t xlo, Double_t xhi) const
{
return _nominal.arg().binBoundaries(obs,xlo,xhi) ;
}
Bool_t PiecewiseInterpolation::isBinnedDistribution(const RooArgSet& obs) const
{
return _nominal.arg().isBinnedDistribution(obs) ;
}
std::list<Double_t>* PiecewiseInterpolation::plotSamplingHint(RooAbsRealLValue& obs, Double_t xlo, Double_t xhi) const
{
return _nominal.arg().plotSamplingHint(obs,xlo,xhi) ;
}
void PiecewiseInterpolation::Streamer(TBuffer &R__b)
{
if (R__b.IsReading()) {
R__b.ReadClassBuffer(PiecewiseInterpolation::Class(),this);
specialIntegratorConfig(kTRUE)->method1D().setLabel("RooBinIntegrator") ;
if (_interpCode.empty()) _interpCode.resize(_paramSet.getSize());
} else {
R__b.WriteClassBuffer(PiecewiseInterpolation::Class(),this);
}
}
PiecewiseInterpolation.cxx:1 PiecewiseInterpolation.cxx:2 PiecewiseInterpolation.cxx:3 PiecewiseInterpolation.cxx:4 PiecewiseInterpolation.cxx:5 PiecewiseInterpolation.cxx:6 PiecewiseInterpolation.cxx:7 PiecewiseInterpolation.cxx:8 PiecewiseInterpolation.cxx:9 PiecewiseInterpolation.cxx:10 PiecewiseInterpolation.cxx:11 PiecewiseInterpolation.cxx:12 PiecewiseInterpolation.cxx:13 PiecewiseInterpolation.cxx:14 PiecewiseInterpolation.cxx:15 PiecewiseInterpolation.cxx:16 PiecewiseInterpolation.cxx:17 PiecewiseInterpolation.cxx:18 PiecewiseInterpolation.cxx:19 PiecewiseInterpolation.cxx:20 PiecewiseInterpolation.cxx:21 PiecewiseInterpolation.cxx:22 PiecewiseInterpolation.cxx:23 PiecewiseInterpolation.cxx:24 PiecewiseInterpolation.cxx:25 PiecewiseInterpolation.cxx:26 PiecewiseInterpolation.cxx:27 PiecewiseInterpolation.cxx:28 PiecewiseInterpolation.cxx:29 PiecewiseInterpolation.cxx:30 PiecewiseInterpolation.cxx:31 PiecewiseInterpolation.cxx:32 PiecewiseInterpolation.cxx:33 PiecewiseInterpolation.cxx:34 PiecewiseInterpolation.cxx:35 PiecewiseInterpolation.cxx:36 PiecewiseInterpolation.cxx:37 PiecewiseInterpolation.cxx:38 PiecewiseInterpolation.cxx:39 PiecewiseInterpolation.cxx:40 PiecewiseInterpolation.cxx:41 PiecewiseInterpolation.cxx:42 PiecewiseInterpolation.cxx:43 PiecewiseInterpolation.cxx:44 PiecewiseInterpolation.cxx:45 PiecewiseInterpolation.cxx:46 PiecewiseInterpolation.cxx:47 PiecewiseInterpolation.cxx:48 PiecewiseInterpolation.cxx:49 PiecewiseInterpolation.cxx:50 PiecewiseInterpolation.cxx:51 PiecewiseInterpolation.cxx:52 PiecewiseInterpolation.cxx:53 PiecewiseInterpolation.cxx:54 PiecewiseInterpolation.cxx:55 PiecewiseInterpolation.cxx:56 PiecewiseInterpolation.cxx:57 PiecewiseInterpolation.cxx:58 PiecewiseInterpolation.cxx:59 PiecewiseInterpolation.cxx:60 PiecewiseInterpolation.cxx:61 PiecewiseInterpolation.cxx:62 PiecewiseInterpolation.cxx:63 PiecewiseInterpolation.cxx:64 PiecewiseInterpolation.cxx:65 PiecewiseInterpolation.cxx:66 PiecewiseInterpolation.cxx:67 PiecewiseInterpolation.cxx:68 PiecewiseInterpolation.cxx:69 PiecewiseInterpolation.cxx:70 PiecewiseInterpolation.cxx:71 PiecewiseInterpolation.cxx:72 PiecewiseInterpolation.cxx:73 PiecewiseInterpolation.cxx:74 PiecewiseInterpolation.cxx:75 PiecewiseInterpolation.cxx:76 PiecewiseInterpolation.cxx:77 PiecewiseInterpolation.cxx:78 PiecewiseInterpolation.cxx:79 PiecewiseInterpolation.cxx:80 PiecewiseInterpolation.cxx:81 PiecewiseInterpolation.cxx:82 PiecewiseInterpolation.cxx:83 PiecewiseInterpolation.cxx:84 PiecewiseInterpolation.cxx:85 PiecewiseInterpolation.cxx:86 PiecewiseInterpolation.cxx:87 PiecewiseInterpolation.cxx:88 PiecewiseInterpolation.cxx:89 PiecewiseInterpolation.cxx:90 PiecewiseInterpolation.cxx:91 PiecewiseInterpolation.cxx:92 PiecewiseInterpolation.cxx:93 PiecewiseInterpolation.cxx:94 PiecewiseInterpolation.cxx:95 PiecewiseInterpolation.cxx:96 PiecewiseInterpolation.cxx:97 PiecewiseInterpolation.cxx:98 PiecewiseInterpolation.cxx:99 PiecewiseInterpolation.cxx:100 PiecewiseInterpolation.cxx:101 PiecewiseInterpolation.cxx:102 PiecewiseInterpolation.cxx:103 PiecewiseInterpolation.cxx:104 PiecewiseInterpolation.cxx:105 PiecewiseInterpolation.cxx:106 PiecewiseInterpolation.cxx:107 PiecewiseInterpolation.cxx:108 PiecewiseInterpolation.cxx:109 PiecewiseInterpolation.cxx:110 PiecewiseInterpolation.cxx:111 PiecewiseInterpolation.cxx:112 PiecewiseInterpolation.cxx:113 PiecewiseInterpolation.cxx:114 PiecewiseInterpolation.cxx:115 PiecewiseInterpolation.cxx:116 PiecewiseInterpolation.cxx:117 PiecewiseInterpolation.cxx:118 PiecewiseInterpolation.cxx:119 PiecewiseInterpolation.cxx:120 PiecewiseInterpolation.cxx:121 PiecewiseInterpolation.cxx:122 PiecewiseInterpolation.cxx:123 PiecewiseInterpolation.cxx:124 PiecewiseInterpolation.cxx:125 PiecewiseInterpolation.cxx:126 PiecewiseInterpolation.cxx:127 PiecewiseInterpolation.cxx:128 PiecewiseInterpolation.cxx:129 PiecewiseInterpolation.cxx:130 PiecewiseInterpolation.cxx:131 PiecewiseInterpolation.cxx:132 PiecewiseInterpolation.cxx:133 PiecewiseInterpolation.cxx:134 PiecewiseInterpolation.cxx:135 PiecewiseInterpolation.cxx:136 PiecewiseInterpolation.cxx:137 PiecewiseInterpolation.cxx:138 PiecewiseInterpolation.cxx:139 PiecewiseInterpolation.cxx:140 PiecewiseInterpolation.cxx:141 PiecewiseInterpolation.cxx:142 PiecewiseInterpolation.cxx:143 PiecewiseInterpolation.cxx:144 PiecewiseInterpolation.cxx:145 PiecewiseInterpolation.cxx:146 PiecewiseInterpolation.cxx:147 PiecewiseInterpolation.cxx:148 PiecewiseInterpolation.cxx:149 PiecewiseInterpolation.cxx:150 PiecewiseInterpolation.cxx:151 PiecewiseInterpolation.cxx:152 PiecewiseInterpolation.cxx:153 PiecewiseInterpolation.cxx:154 PiecewiseInterpolation.cxx:155 PiecewiseInterpolation.cxx:156 PiecewiseInterpolation.cxx:157 PiecewiseInterpolation.cxx:158 PiecewiseInterpolation.cxx:159 PiecewiseInterpolation.cxx:160 PiecewiseInterpolation.cxx:161 PiecewiseInterpolation.cxx:162 PiecewiseInterpolation.cxx:163 PiecewiseInterpolation.cxx:164 PiecewiseInterpolation.cxx:165 PiecewiseInterpolation.cxx:166 PiecewiseInterpolation.cxx:167 PiecewiseInterpolation.cxx:168 PiecewiseInterpolation.cxx:169 PiecewiseInterpolation.cxx:170 PiecewiseInterpolation.cxx:171 PiecewiseInterpolation.cxx:172 PiecewiseInterpolation.cxx:173 PiecewiseInterpolation.cxx:174 PiecewiseInterpolation.cxx:175 PiecewiseInterpolation.cxx:176 PiecewiseInterpolation.cxx:177 PiecewiseInterpolation.cxx:178 PiecewiseInterpolation.cxx:179 PiecewiseInterpolation.cxx:180 PiecewiseInterpolation.cxx:181 PiecewiseInterpolation.cxx:182 PiecewiseInterpolation.cxx:183 PiecewiseInterpolation.cxx:184 PiecewiseInterpolation.cxx:185 PiecewiseInterpolation.cxx:186 PiecewiseInterpolation.cxx:187 PiecewiseInterpolation.cxx:188 PiecewiseInterpolation.cxx:189 PiecewiseInterpolation.cxx:190 PiecewiseInterpolation.cxx:191 PiecewiseInterpolation.cxx:192 PiecewiseInterpolation.cxx:193 PiecewiseInterpolation.cxx:194 PiecewiseInterpolation.cxx:195 PiecewiseInterpolation.cxx:196 PiecewiseInterpolation.cxx:197 PiecewiseInterpolation.cxx:198 PiecewiseInterpolation.cxx:199 PiecewiseInterpolation.cxx:200 PiecewiseInterpolation.cxx:201 PiecewiseInterpolation.cxx:202 PiecewiseInterpolation.cxx:203 PiecewiseInterpolation.cxx:204 PiecewiseInterpolation.cxx:205 PiecewiseInterpolation.cxx:206 PiecewiseInterpolation.cxx:207 PiecewiseInterpolation.cxx:208 PiecewiseInterpolation.cxx:209 PiecewiseInterpolation.cxx:210 PiecewiseInterpolation.cxx:211 PiecewiseInterpolation.cxx:212 PiecewiseInterpolation.cxx:213 PiecewiseInterpolation.cxx:214 PiecewiseInterpolation.cxx:215 PiecewiseInterpolation.cxx:216 PiecewiseInterpolation.cxx:217 PiecewiseInterpolation.cxx:218 PiecewiseInterpolation.cxx:219 PiecewiseInterpolation.cxx:220 PiecewiseInterpolation.cxx:221 PiecewiseInterpolation.cxx:222 PiecewiseInterpolation.cxx:223 PiecewiseInterpolation.cxx:224 PiecewiseInterpolation.cxx:225 PiecewiseInterpolation.cxx:226 PiecewiseInterpolation.cxx:227 PiecewiseInterpolation.cxx:228 PiecewiseInterpolation.cxx:229 PiecewiseInterpolation.cxx:230 PiecewiseInterpolation.cxx:231 PiecewiseInterpolation.cxx:232 PiecewiseInterpolation.cxx:233 PiecewiseInterpolation.cxx:234 PiecewiseInterpolation.cxx:235 PiecewiseInterpolation.cxx:236 PiecewiseInterpolation.cxx:237 PiecewiseInterpolation.cxx:238 PiecewiseInterpolation.cxx:239 PiecewiseInterpolation.cxx:240 PiecewiseInterpolation.cxx:241 PiecewiseInterpolation.cxx:242 PiecewiseInterpolation.cxx:243 PiecewiseInterpolation.cxx:244 PiecewiseInterpolation.cxx:245 PiecewiseInterpolation.cxx:246 PiecewiseInterpolation.cxx:247 PiecewiseInterpolation.cxx:248 PiecewiseInterpolation.cxx:249 PiecewiseInterpolation.cxx:250 PiecewiseInterpolation.cxx:251 PiecewiseInterpolation.cxx:252 PiecewiseInterpolation.cxx:253 PiecewiseInterpolation.cxx:254 PiecewiseInterpolation.cxx:255 PiecewiseInterpolation.cxx:256 PiecewiseInterpolation.cxx:257 PiecewiseInterpolation.cxx:258 PiecewiseInterpolation.cxx:259 PiecewiseInterpolation.cxx:260 PiecewiseInterpolation.cxx:261 PiecewiseInterpolation.cxx:262 PiecewiseInterpolation.cxx:263 PiecewiseInterpolation.cxx:264 PiecewiseInterpolation.cxx:265 PiecewiseInterpolation.cxx:266 PiecewiseInterpolation.cxx:267 PiecewiseInterpolation.cxx:268 PiecewiseInterpolation.cxx:269 PiecewiseInterpolation.cxx:270 PiecewiseInterpolation.cxx:271 PiecewiseInterpolation.cxx:272 PiecewiseInterpolation.cxx:273 PiecewiseInterpolation.cxx:274 PiecewiseInterpolation.cxx:275 PiecewiseInterpolation.cxx:276 PiecewiseInterpolation.cxx:277 PiecewiseInterpolation.cxx:278 PiecewiseInterpolation.cxx:279 PiecewiseInterpolation.cxx:280 PiecewiseInterpolation.cxx:281 PiecewiseInterpolation.cxx:282 PiecewiseInterpolation.cxx:283 PiecewiseInterpolation.cxx:284 PiecewiseInterpolation.cxx:285 PiecewiseInterpolation.cxx:286 PiecewiseInterpolation.cxx:287 PiecewiseInterpolation.cxx:288 PiecewiseInterpolation.cxx:289 PiecewiseInterpolation.cxx:290 PiecewiseInterpolation.cxx:291 PiecewiseInterpolation.cxx:292 PiecewiseInterpolation.cxx:293 PiecewiseInterpolation.cxx:294 PiecewiseInterpolation.cxx:295 PiecewiseInterpolation.cxx:296 PiecewiseInterpolation.cxx:297 PiecewiseInterpolation.cxx:298 PiecewiseInterpolation.cxx:299 PiecewiseInterpolation.cxx:300 PiecewiseInterpolation.cxx:301 PiecewiseInterpolation.cxx:302 PiecewiseInterpolation.cxx:303 PiecewiseInterpolation.cxx:304 PiecewiseInterpolation.cxx:305 PiecewiseInterpolation.cxx:306 PiecewiseInterpolation.cxx:307 PiecewiseInterpolation.cxx:308 PiecewiseInterpolation.cxx:309 PiecewiseInterpolation.cxx:310 PiecewiseInterpolation.cxx:311 PiecewiseInterpolation.cxx:312 PiecewiseInterpolation.cxx:313 PiecewiseInterpolation.cxx:314 PiecewiseInterpolation.cxx:315 PiecewiseInterpolation.cxx:316 PiecewiseInterpolation.cxx:317 PiecewiseInterpolation.cxx:318 PiecewiseInterpolation.cxx:319 PiecewiseInterpolation.cxx:320 PiecewiseInterpolation.cxx:321 PiecewiseInterpolation.cxx:322 PiecewiseInterpolation.cxx:323 PiecewiseInterpolation.cxx:324 PiecewiseInterpolation.cxx:325 PiecewiseInterpolation.cxx:326 PiecewiseInterpolation.cxx:327 PiecewiseInterpolation.cxx:328 PiecewiseInterpolation.cxx:329 PiecewiseInterpolation.cxx:330 PiecewiseInterpolation.cxx:331 PiecewiseInterpolation.cxx:332 PiecewiseInterpolation.cxx:333 PiecewiseInterpolation.cxx:334 PiecewiseInterpolation.cxx:335 PiecewiseInterpolation.cxx:336 PiecewiseInterpolation.cxx:337 PiecewiseInterpolation.cxx:338 PiecewiseInterpolation.cxx:339 PiecewiseInterpolation.cxx:340 PiecewiseInterpolation.cxx:341 PiecewiseInterpolation.cxx:342 PiecewiseInterpolation.cxx:343 PiecewiseInterpolation.cxx:344 PiecewiseInterpolation.cxx:345 PiecewiseInterpolation.cxx:346 PiecewiseInterpolation.cxx:347 PiecewiseInterpolation.cxx:348 PiecewiseInterpolation.cxx:349 PiecewiseInterpolation.cxx:350 PiecewiseInterpolation.cxx:351 PiecewiseInterpolation.cxx:352 PiecewiseInterpolation.cxx:353 PiecewiseInterpolation.cxx:354 PiecewiseInterpolation.cxx:355 PiecewiseInterpolation.cxx:356 PiecewiseInterpolation.cxx:357 PiecewiseInterpolation.cxx:358 PiecewiseInterpolation.cxx:359 PiecewiseInterpolation.cxx:360 PiecewiseInterpolation.cxx:361 PiecewiseInterpolation.cxx:362 PiecewiseInterpolation.cxx:363 PiecewiseInterpolation.cxx:364 PiecewiseInterpolation.cxx:365 PiecewiseInterpolation.cxx:366 PiecewiseInterpolation.cxx:367 PiecewiseInterpolation.cxx:368 PiecewiseInterpolation.cxx:369 PiecewiseInterpolation.cxx:370 PiecewiseInterpolation.cxx:371 PiecewiseInterpolation.cxx:372 PiecewiseInterpolation.cxx:373 PiecewiseInterpolation.cxx:374 PiecewiseInterpolation.cxx:375 PiecewiseInterpolation.cxx:376 PiecewiseInterpolation.cxx:377 PiecewiseInterpolation.cxx:378 PiecewiseInterpolation.cxx:379 PiecewiseInterpolation.cxx:380 PiecewiseInterpolation.cxx:381 PiecewiseInterpolation.cxx:382 PiecewiseInterpolation.cxx:383 PiecewiseInterpolation.cxx:384 PiecewiseInterpolation.cxx:385 PiecewiseInterpolation.cxx:386 PiecewiseInterpolation.cxx:387 PiecewiseInterpolation.cxx:388 PiecewiseInterpolation.cxx:389 PiecewiseInterpolation.cxx:390 PiecewiseInterpolation.cxx:391 PiecewiseInterpolation.cxx:392 PiecewiseInterpolation.cxx:393 PiecewiseInterpolation.cxx:394 PiecewiseInterpolation.cxx:395 PiecewiseInterpolation.cxx:396 PiecewiseInterpolation.cxx:397 PiecewiseInterpolation.cxx:398 PiecewiseInterpolation.cxx:399 PiecewiseInterpolation.cxx:400 PiecewiseInterpolation.cxx:401 PiecewiseInterpolation.cxx:402 PiecewiseInterpolation.cxx:403 PiecewiseInterpolation.cxx:404 PiecewiseInterpolation.cxx:405 PiecewiseInterpolation.cxx:406 PiecewiseInterpolation.cxx:407 PiecewiseInterpolation.cxx:408 PiecewiseInterpolation.cxx:409 PiecewiseInterpolation.cxx:410 PiecewiseInterpolation.cxx:411 PiecewiseInterpolation.cxx:412 PiecewiseInterpolation.cxx:413 PiecewiseInterpolation.cxx:414 PiecewiseInterpolation.cxx:415 PiecewiseInterpolation.cxx:416 PiecewiseInterpolation.cxx:417 PiecewiseInterpolation.cxx:418 PiecewiseInterpolation.cxx:419 PiecewiseInterpolation.cxx:420 PiecewiseInterpolation.cxx:421 PiecewiseInterpolation.cxx:422 PiecewiseInterpolation.cxx:423 PiecewiseInterpolation.cxx:424 PiecewiseInterpolation.cxx:425 PiecewiseInterpolation.cxx:426 PiecewiseInterpolation.cxx:427 PiecewiseInterpolation.cxx:428 PiecewiseInterpolation.cxx:429 PiecewiseInterpolation.cxx:430 PiecewiseInterpolation.cxx:431 PiecewiseInterpolation.cxx:432 PiecewiseInterpolation.cxx:433 PiecewiseInterpolation.cxx:434 PiecewiseInterpolation.cxx:435 PiecewiseInterpolation.cxx:436 PiecewiseInterpolation.cxx:437 PiecewiseInterpolation.cxx:438 PiecewiseInterpolation.cxx:439 PiecewiseInterpolation.cxx:440 PiecewiseInterpolation.cxx:441 PiecewiseInterpolation.cxx:442 PiecewiseInterpolation.cxx:443 PiecewiseInterpolation.cxx:444 PiecewiseInterpolation.cxx:445 PiecewiseInterpolation.cxx:446 PiecewiseInterpolation.cxx:447 PiecewiseInterpolation.cxx:448 PiecewiseInterpolation.cxx:449 PiecewiseInterpolation.cxx:450 PiecewiseInterpolation.cxx:451 PiecewiseInterpolation.cxx:452 PiecewiseInterpolation.cxx:453 PiecewiseInterpolation.cxx:454 PiecewiseInterpolation.cxx:455 PiecewiseInterpolation.cxx:456 PiecewiseInterpolation.cxx:457 PiecewiseInterpolation.cxx:458 PiecewiseInterpolation.cxx:459 PiecewiseInterpolation.cxx:460 PiecewiseInterpolation.cxx:461 PiecewiseInterpolation.cxx:462 PiecewiseInterpolation.cxx:463 PiecewiseInterpolation.cxx:464 PiecewiseInterpolation.cxx:465 PiecewiseInterpolation.cxx:466 PiecewiseInterpolation.cxx:467 PiecewiseInterpolation.cxx:468 PiecewiseInterpolation.cxx:469 PiecewiseInterpolation.cxx:470 PiecewiseInterpolation.cxx:471 PiecewiseInterpolation.cxx:472 PiecewiseInterpolation.cxx:473 PiecewiseInterpolation.cxx:474 PiecewiseInterpolation.cxx:475 PiecewiseInterpolation.cxx:476 PiecewiseInterpolation.cxx:477 PiecewiseInterpolation.cxx:478 PiecewiseInterpolation.cxx:479 PiecewiseInterpolation.cxx:480 PiecewiseInterpolation.cxx:481 PiecewiseInterpolation.cxx:482 PiecewiseInterpolation.cxx:483 PiecewiseInterpolation.cxx:484 PiecewiseInterpolation.cxx:485 PiecewiseInterpolation.cxx:486 PiecewiseInterpolation.cxx:487 PiecewiseInterpolation.cxx:488 PiecewiseInterpolation.cxx:489 PiecewiseInterpolation.cxx:490 PiecewiseInterpolation.cxx:491 PiecewiseInterpolation.cxx:492 PiecewiseInterpolation.cxx:493 PiecewiseInterpolation.cxx:494 PiecewiseInterpolation.cxx:495 PiecewiseInterpolation.cxx:496 PiecewiseInterpolation.cxx:497 PiecewiseInterpolation.cxx:498 PiecewiseInterpolation.cxx:499 PiecewiseInterpolation.cxx:500 PiecewiseInterpolation.cxx:501 PiecewiseInterpolation.cxx:502 PiecewiseInterpolation.cxx:503 PiecewiseInterpolation.cxx:504 PiecewiseInterpolation.cxx:505 PiecewiseInterpolation.cxx:506 PiecewiseInterpolation.cxx:507 PiecewiseInterpolation.cxx:508 PiecewiseInterpolation.cxx:509 PiecewiseInterpolation.cxx:510 PiecewiseInterpolation.cxx:511 PiecewiseInterpolation.cxx:512 PiecewiseInterpolation.cxx:513 PiecewiseInterpolation.cxx:514 PiecewiseInterpolation.cxx:515 PiecewiseInterpolation.cxx:516 PiecewiseInterpolation.cxx:517 PiecewiseInterpolation.cxx:518 PiecewiseInterpolation.cxx:519 PiecewiseInterpolation.cxx:520 PiecewiseInterpolation.cxx:521 PiecewiseInterpolation.cxx:522 PiecewiseInterpolation.cxx:523 PiecewiseInterpolation.cxx:524 PiecewiseInterpolation.cxx:525 PiecewiseInterpolation.cxx:526 PiecewiseInterpolation.cxx:527 PiecewiseInterpolation.cxx:528 PiecewiseInterpolation.cxx:529 PiecewiseInterpolation.cxx:530 PiecewiseInterpolation.cxx:531 PiecewiseInterpolation.cxx:532 PiecewiseInterpolation.cxx:533 PiecewiseInterpolation.cxx:534 PiecewiseInterpolation.cxx:535 PiecewiseInterpolation.cxx:536 PiecewiseInterpolation.cxx:537 PiecewiseInterpolation.cxx:538 PiecewiseInterpolation.cxx:539 PiecewiseInterpolation.cxx:540 PiecewiseInterpolation.cxx:541 PiecewiseInterpolation.cxx:542 PiecewiseInterpolation.cxx:543 PiecewiseInterpolation.cxx:544 PiecewiseInterpolation.cxx:545 PiecewiseInterpolation.cxx:546 PiecewiseInterpolation.cxx:547 PiecewiseInterpolation.cxx:548 PiecewiseInterpolation.cxx:549 PiecewiseInterpolation.cxx:550 PiecewiseInterpolation.cxx:551 PiecewiseInterpolation.cxx:552 PiecewiseInterpolation.cxx:553 PiecewiseInterpolation.cxx:554 PiecewiseInterpolation.cxx:555 PiecewiseInterpolation.cxx:556 PiecewiseInterpolation.cxx:557 PiecewiseInterpolation.cxx:558 PiecewiseInterpolation.cxx:559 PiecewiseInterpolation.cxx:560 PiecewiseInterpolation.cxx:561 PiecewiseInterpolation.cxx:562 PiecewiseInterpolation.cxx:563 PiecewiseInterpolation.cxx:564 PiecewiseInterpolation.cxx:565 PiecewiseInterpolation.cxx:566 PiecewiseInterpolation.cxx:567 PiecewiseInterpolation.cxx:568 PiecewiseInterpolation.cxx:569 PiecewiseInterpolation.cxx:570 PiecewiseInterpolation.cxx:571 PiecewiseInterpolation.cxx:572 PiecewiseInterpolation.cxx:573 PiecewiseInterpolation.cxx:574 PiecewiseInterpolation.cxx:575 PiecewiseInterpolation.cxx:576 PiecewiseInterpolation.cxx:577 PiecewiseInterpolation.cxx:578 PiecewiseInterpolation.cxx:579 PiecewiseInterpolation.cxx:580 PiecewiseInterpolation.cxx:581 PiecewiseInterpolation.cxx:582 PiecewiseInterpolation.cxx:583 PiecewiseInterpolation.cxx:584 PiecewiseInterpolation.cxx:585 PiecewiseInterpolation.cxx:586 PiecewiseInterpolation.cxx:587 PiecewiseInterpolation.cxx:588 PiecewiseInterpolation.cxx:589 PiecewiseInterpolation.cxx:590 PiecewiseInterpolation.cxx:591 PiecewiseInterpolation.cxx:592 PiecewiseInterpolation.cxx:593 PiecewiseInterpolation.cxx:594 PiecewiseInterpolation.cxx:595 PiecewiseInterpolation.cxx:596 PiecewiseInterpolation.cxx:597 PiecewiseInterpolation.cxx:598 PiecewiseInterpolation.cxx:599 PiecewiseInterpolation.cxx:600 PiecewiseInterpolation.cxx:601 PiecewiseInterpolation.cxx:602 PiecewiseInterpolation.cxx:603 PiecewiseInterpolation.cxx:604 PiecewiseInterpolation.cxx:605 PiecewiseInterpolation.cxx:606 PiecewiseInterpolation.cxx:607 PiecewiseInterpolation.cxx:608 PiecewiseInterpolation.cxx:609 PiecewiseInterpolation.cxx:610 PiecewiseInterpolation.cxx:611 PiecewiseInterpolation.cxx:612 PiecewiseInterpolation.cxx:613 PiecewiseInterpolation.cxx:614 PiecewiseInterpolation.cxx:615 PiecewiseInterpolation.cxx:616 PiecewiseInterpolation.cxx:617 PiecewiseInterpolation.cxx:618 PiecewiseInterpolation.cxx:619 PiecewiseInterpolation.cxx:620 PiecewiseInterpolation.cxx:621 PiecewiseInterpolation.cxx:622 PiecewiseInterpolation.cxx:623 PiecewiseInterpolation.cxx:624 PiecewiseInterpolation.cxx:625 PiecewiseInterpolation.cxx:626 PiecewiseInterpolation.cxx:627 PiecewiseInterpolation.cxx:628 PiecewiseInterpolation.cxx:629 PiecewiseInterpolation.cxx:630 PiecewiseInterpolation.cxx:631 PiecewiseInterpolation.cxx:632 PiecewiseInterpolation.cxx:633 PiecewiseInterpolation.cxx:634 PiecewiseInterpolation.cxx:635 PiecewiseInterpolation.cxx:636 PiecewiseInterpolation.cxx:637 PiecewiseInterpolation.cxx:638 PiecewiseInterpolation.cxx:639 PiecewiseInterpolation.cxx:640 PiecewiseInterpolation.cxx:641 PiecewiseInterpolation.cxx:642 PiecewiseInterpolation.cxx:643 PiecewiseInterpolation.cxx:644 PiecewiseInterpolation.cxx:645 PiecewiseInterpolation.cxx:646 PiecewiseInterpolation.cxx:647 PiecewiseInterpolation.cxx:648 PiecewiseInterpolation.cxx:649 PiecewiseInterpolation.cxx:650 PiecewiseInterpolation.cxx:651 PiecewiseInterpolation.cxx:652 PiecewiseInterpolation.cxx:653 PiecewiseInterpolation.cxx:654 PiecewiseInterpolation.cxx:655 PiecewiseInterpolation.cxx:656 PiecewiseInterpolation.cxx:657 PiecewiseInterpolation.cxx:658 PiecewiseInterpolation.cxx:659 PiecewiseInterpolation.cxx:660 PiecewiseInterpolation.cxx:661 PiecewiseInterpolation.cxx:662 PiecewiseInterpolation.cxx:663 PiecewiseInterpolation.cxx:664 PiecewiseInterpolation.cxx:665 PiecewiseInterpolation.cxx:666 PiecewiseInterpolation.cxx:667 PiecewiseInterpolation.cxx:668 PiecewiseInterpolation.cxx:669 PiecewiseInterpolation.cxx:670 PiecewiseInterpolation.cxx:671 PiecewiseInterpolation.cxx:672 PiecewiseInterpolation.cxx:673 PiecewiseInterpolation.cxx:674 PiecewiseInterpolation.cxx:675 PiecewiseInterpolation.cxx:676 PiecewiseInterpolation.cxx:677 PiecewiseInterpolation.cxx:678 PiecewiseInterpolation.cxx:679 PiecewiseInterpolation.cxx:680 PiecewiseInterpolation.cxx:681 PiecewiseInterpolation.cxx:682 PiecewiseInterpolation.cxx:683 PiecewiseInterpolation.cxx:684 PiecewiseInterpolation.cxx:685 PiecewiseInterpolation.cxx:686 PiecewiseInterpolation.cxx:687 PiecewiseInterpolation.cxx:688 PiecewiseInterpolation.cxx:689 PiecewiseInterpolation.cxx:690 PiecewiseInterpolation.cxx:691 PiecewiseInterpolation.cxx:692 PiecewiseInterpolation.cxx:693 PiecewiseInterpolation.cxx:694 PiecewiseInterpolation.cxx:695 PiecewiseInterpolation.cxx:696 PiecewiseInterpolation.cxx:697 PiecewiseInterpolation.cxx:698 PiecewiseInterpolation.cxx:699 PiecewiseInterpolation.cxx:700 PiecewiseInterpolation.cxx:701 PiecewiseInterpolation.cxx:702 PiecewiseInterpolation.cxx:703 PiecewiseInterpolation.cxx:704 PiecewiseInterpolation.cxx:705 PiecewiseInterpolation.cxx:706 PiecewiseInterpolation.cxx:707 PiecewiseInterpolation.cxx:708 PiecewiseInterpolation.cxx:709 PiecewiseInterpolation.cxx:710 PiecewiseInterpolation.cxx:711 PiecewiseInterpolation.cxx:712 PiecewiseInterpolation.cxx:713 PiecewiseInterpolation.cxx:714 PiecewiseInterpolation.cxx:715 PiecewiseInterpolation.cxx:716