/*****************************************************************************

 *****************************************************************************/

//////////////////////////////////////////////////////////////////////////////
// 
// BEGIN_HTML
// 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)

{
  // Constructor with two set of RooAbsReals. The value of the function will be
  //
  //  A = sum_i lowSet(i)*highSet(i) 
  //
  // If takeOwnership is true the PiecewiseInterpolation object will take ownership of the arguments in sumSet

  // KC: check both sizes
  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); // default code: linear interpolation
  }

  
  // Choose special integrator by default 
  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)
{
  // Copy constructor

  // Member _ownedList is intentionally not copy-constructed -- ownership is not transferred
  TRACE_CREATE
}



//_____________________________________________________________________________
PiecewiseInterpolation::~PiecewiseInterpolation() 
{
  // Destructor
  TRACE_DESTROY
}




//_____________________________________________________________________________
Double_t PiecewiseInterpolation::evaluate() const 
{
  // Calculate and return current value of self

  ///////////////////
  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: {
      // piece-wise linear
      if(param->getVal()>0)
	sum +=  param->getVal()*(high->getVal() - nominal );
      else
	sum += param->getVal()*(nominal - low->getVal());
      break ;
    }
    case 1: {
      // pice-wise log
      if(param->getVal()>=0)
	sum *= pow(high->getVal()/nominal, +param->getVal());
      else
	sum *= pow(low->getVal()/nominal,  -param->getVal());
      break ;
    }
    case 2: {
      // parabolic with linear
      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: {
      //parabolic version of log-normal
      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: {
      
      // WVE ****************************************************************
      // WVE *** THIS CODE IS CRITICAL TO HISTFACTORY FIT CPU PERFORMANCE ***
      // WVE *** Do not modify unless you know what you are doing...      ***
      // WVE ****************************************************************

      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);
	
	//fcns+der+2nd_der are eq at bd

        double val = nominal + x * (S + x * A * ( 15 + x * x * (-10 + x * x * 3  ) ) ); 


	if (val < 0) val = 0;
	sum += val-nominal;
      }
      break ;

      // WVE ****************************************************************
    }
    case 5: {
      
      double x0 = 1.0;//boundary;
      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;

	//fcns+der are eq at bd
	double a = S;
	double b = 3*A/(2*x0);
	//double c = 0;
	double d = -A/(2*x0*x0*x0);

	double val = nominal + a*x + b*pow(x, 2) + 0/*c*pow(x, 3)*/ + d*pow(x, 4);
	if (val < 0) val = 0;

	//cout << "Using interp code 5, val = " << val << endl;

	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;
    //     cout <<"sum < 0 forcing  positive definite"<<endl;
     //     int code = 1;
     //     RooArgSet* myset = new RooArgSet();
     //     cout << "integral = " << analyticalIntegralWN(code, myset) << endl;
  } 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* /*rangeName*/) const 
{
  // Advertise that all integrals can be handled internally.

  /*
  cout << "---------------------------\nin PiecewiseInterpolation get analytic integral " <<endl;
  cout << "all vars = "<<endl;
  allVars.Print("v");
  cout << "anal vars = "<<endl;
  analVars.Print("v");
  cout << "normset vars = "<<endl;
  if(normSet2)
    normSet2->Print("v");
  */


  // Handle trivial no-integration scenario
  if (allVars.getSize()==0) return 0 ;
  if (_forceNumInt) return 0 ;


  // Force using numeric integration
  // use special numeric integrator  
  return 0;
  

  // KC: check if interCode=0 for all 
  RooFIter paramIterExtra(_paramSet.fwdIterator()) ;
  int i=0;
  while( paramIterExtra.next() ) {
    if(!_interpCode.empty() && _interpCode[i]!=0){
      // can't factorize integral
      cout <<"can't factorize integral"<<endl;
      return 0;
    }
    ++i;
  }

  // Select subset of allVars that are actual dependents
  analVars.add(allVars) ;
  //  RooArgSet* normSet = normSet2 ? getObservables(normSet2) : 0 ;
  //  RooArgSet* normSet = getObservables();
  //  RooArgSet* normSet = 0;


  // Check if this configuration was created before
  Int_t sterileIdx(-1) ;
  CacheElem* cache = (CacheElem*) _normIntMgr.getObj(normSet,&analVars,&sterileIdx) ;
  if (cache) {
    return _normIntMgr.lastIndex()+1 ;
  }
  
  // Create new cache element
  cache = new CacheElem ;

  // Make list of function projection and normalization integrals 
  RooAbsReal *func ;
  //  const RooArgSet* nset = _paramList.nset() ;

  // do nominal
  func = (RooAbsReal*)(&_nominal.arg()) ;
  RooAbsReal* funcInt = func->createIntegral(analVars) ;
  cache->_funcIntList.addOwned(*funcInt) ;

  // do variations
  RooFIter lowIter(_lowSet.fwdIterator()) ;
  RooFIter highIter(_highSet.fwdIterator()) ;
  RooFIter paramIter(_paramSet.fwdIterator()) ;

  //  int i=0;
  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;
  }

  // Store cache element
  Int_t code = _normIntMgr.setObj(normSet,&analVars,(RooAbsCacheElement*)cache,0) ;

  return code+1 ; 
}




//_____________________________________________________________________________
Double_t PiecewiseInterpolation::analyticalIntegralWN(Int_t code, const RooArgSet* /*normSet2*/,const char* /*rangeName*/) const 
{
  // Implement analytical integrations by doing appropriate weighting from  component integrals
  // functions to integrators of components

  /*
  cout <<"Enter analytic Integral"<<endl;
  printDirty(true);
  //  _nominal.arg().setDirtyInhibit(kTRUE) ;
  _nominal.arg().setShapeDirty() ;
  RooAbsReal* temp ;
  RooFIter lowIter(_lowSet.fwdIterator()) ;
  while((temp=(RooAbsReal*)lowIter.next())) {
    //    temp->setDirtyInhibit(kTRUE) ;
    temp->setShapeDirty() ;
  }
  RooFIter highIter(_highSet.fwdIterator()) ;
  while((temp=(RooAbsReal*)highIter.next())) {
    //    temp->setDirtyInhibit(kTRUE) ;
    temp->setShapeDirty() ;
  }
  */

  /*
  RooAbsArg::setDirtyInhibit(kTRUE);
  printDirty(true);
  cout <<"done setting dirty inhibit = true"<<endl;

  // old integral, only works for linear and not positive definite
  CacheElem* cache = (CacheElem*) _normIntMgr.getObjByIndex(code-1) ;

  
 std::auto_ptr<RooArgSet> vars2( getParameters(RooArgSet()) );
 std::auto_ptr<RooArgSet> iset(  _normIntMgr.nameSet2ByIndex(code-1)->select(*vars2) );            
 cout <<"iset = "<<endl;
 iset->Print("v");

  double sum = 0;
  RooArgSet* vars = getVariables();
  vars->remove(_paramSet);
  _paramSet.Print("v");
  vars->Print("v");
  if(vars->getSize()==1){
    RooRealVar* obs = (RooRealVar*) vars->first();
    for(int i=0; i<obs->numBins(); ++i){
      obs->setVal( obs->getMin() + (.5+i)*(obs->getMax()-obs->getMin())/obs->numBins());
      sum+=evaluate()*(obs->getMax()-obs->getMin())/obs->numBins();
      cout << "obs = " << obs->getVal() << " sum = " << sum << endl;
    }
  } else{
    cout <<"only know how to deal with 1 observable right now"<<endl;
  }
  */

  /*
  _nominal.arg().setDirtyInhibit(kFALSE) ;
  RooFIter lowIter2(_lowSet.fwdIterator()) ;
  while((temp=(RooAbsReal*)lowIter2.next())) {
    temp->setDirtyInhibit(kFALSE) ;
  }
  RooFIter highIter2(_highSet.fwdIterator()) ;
  while((temp=(RooAbsReal*)highIter2.next())) {
    temp->setDirtyInhibit(kFALSE) ;
  }
  */
  
  /*
  RooAbsArg::setDirtyInhibit(kFALSE);
  printDirty(true);
  cout <<"done"<<endl;
  cout << "sum = " <<sum<<endl;
  //return sum;
  */  

  // old integral, only works for linear and not positive definite
  CacheElem* cache = (CacheElem*) _normIntMgr.getObjByIndex(code-1) ;
  if( cache==NULL ) {
    std::cout << "Error: Cache Element is NULL" << std::endl;
    throw std::exception();
  }

  // old integral, only works for linear and not positive definite
  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);

  // get nominal 
  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; }

  // now get low/high variations
  i = 0;
  RooFIter paramIter(_paramSet.fwdIterator()) ;

  // KC: old interp code with new iterator
  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;
  }

  /* // MB : old bit of interpolation code
  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;
  }
  */

  /* KC: the code below is wrong.  Can't pull out a constant change to a non-linear shape deformation.
  while( (param=(RooAbsReal*)paramIter.next()) ) {
    low = (RooAbsReal*)lowIntIter.next() ;
    high = (RooAbsReal*)highIntIter.next() ;

    if(_interpCode.empty() || _interpCode.at(i)==0){
      // piece-wise linear
      if(param->getVal()>0)
	value +=  param->getVal()*(high->getVal() - nominal );
      else
	value += param->getVal()*(nominal - low->getVal());
    } else if(_interpCode.at(i)==1){
      // pice-wise log
      if(param->getVal()>=0)
	value *= pow(high->getVal()/nominal, +param->getVal());
      else
	value *= pow(low->getVal()/nominal,  -param->getVal());
    } else if(_interpCode.at(i)==2){
      // parabolic with linear
      double a = 0.5*(high->getVal()+low->getVal())-nominal;
      double b = 0.5*(high->getVal()-low->getVal());
      double c = 0;
      if(param->getVal()>1 ){
	value += (2*a+b)*(param->getVal()-1)+high->getVal()-nominal;
      } else if(param->getVal()<-1 ) {
	value += -1*(2*a-b)*(param->getVal()+1)+low->getVal()-nominal;
      } else {
	value +=  a*pow(param->getVal(),2) + b*param->getVal()+c;
      }
    } else if(_interpCode.at(i)==3){
      //parabolic version of log-normal
      double a = 0.5*(high->getVal()+low->getVal())-nominal;
      double b = 0.5*(high->getVal()-low->getVal());
      double c = 0;
      if(param->getVal()>1 ){
	value += (2*a+b)*(param->getVal()-1)+high->getVal()-nominal;
      } else if(param->getVal()<-1 ) {
	value += -1*(2*a-b)*(param->getVal()+1)+low->getVal()-nominal;
      } else {
	value +=  a*pow(param->getVal(),2) + b*param->getVal()+c;
      }
	
    } else {
      coutE(InputArguments) << "PiecewiseInterpolation::analyticalIntegralWN ERROR:  " << param->GetName() 
			    << " with unknown interpolation code" << endl ;
    }
    ++i;
  }
  */

  //  cout << "value = " << value <<endl;
  return value;
}


//_____________________________________________________________________________
void PiecewiseInterpolation::setInterpCode(RooAbsReal& param, int code){

  int index = _paramSet.index(&param);
  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 
{
  // WVE note: assumes nominal and alternates have identical structure, must add explicit check
  return _nominal.arg().binBoundaries(obs,xlo,xhi) ;  
}


//_____________________________________________________________________________
Bool_t PiecewiseInterpolation::isBinnedDistribution(const RooArgSet& obs) const 
{
  // WVE note: assumes nominal and alternates have identical structure, must add explicit check
  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)
{
   // Stream an object of class PiecewiseInterpolation.

   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);
   }
}


/*
//_____________________________________________________________________________
void PiecewiseInterpolation::printMetaArgs(ostream& os) const 
{
  // Customized printing of arguments of a PiecewiseInterpolation to more intuitively reflect the contents of the
  // product operator construction

  _lowIter->Reset() ;
  if (_highIter) {
    _highIter->Reset() ;
  }

  Bool_t first(kTRUE) ;
    
  RooAbsArg* arg1, *arg2 ;
  if (_highSet.getSize()!=0) { 

    while((arg1=(RooAbsArg*)_lowIter->Next())) {
      if (!first) {
	os << " + " ;
      } else {
	first = kFALSE ;
      }
      arg2=(RooAbsArg*)_highIter->Next() ;
      os << arg1->GetName() << " * " << arg2->GetName() ;
    }

  } else {
    
    while((arg1=(RooAbsArg*)_lowIter->Next())) {
      if (!first) {
	os << " + " ;
      } else {
	first = kFALSE ;
      }
      os << arg1->GetName() ; 
    }  

  }

  os << " " ;    
}

*/
 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