#include "RooFit.h"
#include "Riostream.h"
#include <math.h>
#include "TMath.h"
#include "RooAbsReal.h"
#include "RooRealVar.h"
#include "RooArgList.h"
#include "RooMsgService.h"
#include "RooTrace.h"
#include "TMath.h"
#include "RooStats/HistFactory/FlexibleInterpVar.h"
using namespace std;
ClassImp(RooStats::HistFactory::FlexibleInterpVar)
using namespace RooStats;
using namespace HistFactory;
FlexibleInterpVar::FlexibleInterpVar()
{
_paramIter = _paramList.createIterator() ;
_nominal = 0;
_interpBoundary=1.;
_logInit = kFALSE ;
TRACE_CREATE
}
FlexibleInterpVar::FlexibleInterpVar(const char* name, const char* title,
const RooArgList& paramList,
Double_t nominal, vector<double> low, vector<double> high) :
RooAbsReal(name, title),
_paramList("paramList","List of paramficients",this),
_nominal(nominal), _low(low), _high(high), _interpBoundary(1.)
{
_logInit = kFALSE ;
_paramIter = _paramList.createIterator() ;
TIterator* paramIter = paramList.createIterator() ;
RooAbsArg* param ;
while((param = (RooAbsArg*)paramIter->Next())) {
if (!dynamic_cast<RooAbsReal*>(param)) {
coutE(InputArguments) << "FlexibleInterpVar::ctor(" << GetName() << ") ERROR: paramficient " << param->GetName()
<< " is not of type RooAbsReal" << endl ;
assert(0) ;
}
_paramList.add(*param) ;
_interpCode.push_back(0);
}
delete paramIter ;
TRACE_CREATE
}
FlexibleInterpVar::FlexibleInterpVar(const char* name, const char* title,
const RooArgList& paramList,
double nominal, const RooArgList& low, const RooArgList& high) :
RooAbsReal(name, title),
_paramList("paramList","List of paramficients",this),
_nominal(nominal), _interpBoundary(1.)
{
RooFIter lowIter = low.fwdIterator() ;
RooAbsReal* val ;
while ((val = (RooAbsReal*) lowIter.next())) {
_low.push_back(val->getVal()) ;
}
RooFIter highIter = high.fwdIterator() ;
while ((val = (RooAbsReal*) highIter.next())) {
_high.push_back(val->getVal()) ;
}
_logInit = kFALSE ;
_paramIter = _paramList.createIterator() ;
TIterator* paramIter = paramList.createIterator() ;
RooAbsArg* param ;
while((param = (RooAbsArg*)paramIter->Next())) {
if (!dynamic_cast<RooAbsReal*>(param)) {
coutE(InputArguments) << "FlexibleInterpVar::ctor(" << GetName() << ") ERROR: paramficient " << param->GetName()
<< " is not of type RooAbsReal" << endl ;
assert(0) ;
}
_paramList.add(*param) ;
_interpCode.push_back(0);
}
delete paramIter ;
TRACE_CREATE
}
FlexibleInterpVar::FlexibleInterpVar(const char* name, const char* title,
const RooArgList& paramList,
double nominal, vector<double> low, vector<double> high,
vector<int> code) :
RooAbsReal(name, title),
_paramList("paramList","List of paramficients",this),
_nominal(nominal), _low(low), _high(high), _interpCode(code), _interpBoundary(1.)
{
_logInit = kFALSE ;
_paramIter = _paramList.createIterator() ;
TIterator* paramIter = paramList.createIterator() ;
RooAbsArg* param ;
while((param = (RooAbsArg*)paramIter->Next())) {
if (!dynamic_cast<RooAbsReal*>(param)) {
coutE(InputArguments) << "FlexibleInterpVar::ctor(" << GetName() << ") ERROR: paramficient " << param->GetName()
<< " is not of type RooAbsReal" << endl ;
assert(0) ;
}
_paramList.add(*param) ;
}
delete paramIter ;
TRACE_CREATE
}
FlexibleInterpVar::FlexibleInterpVar(const char* name, const char* title) :
RooAbsReal(name, title),
_paramList("paramList","List of coefficients",this),
_nominal(0), _interpBoundary(1.)
{
_logInit = kFALSE ;
_paramIter = _paramList.createIterator() ;
TRACE_CREATE
}
FlexibleInterpVar::FlexibleInterpVar(const FlexibleInterpVar& other, const char* name) :
RooAbsReal(other, name),
_paramList("paramList",this,other._paramList),
_nominal(other._nominal), _low(other._low), _high(other._high), _interpCode(other._interpCode), _interpBoundary(other._interpBoundary)
{
_logInit = kFALSE ;
_paramIter = _paramList.createIterator() ;
TRACE_CREATE
}
FlexibleInterpVar::~FlexibleInterpVar()
{
delete _paramIter ;
TRACE_DESTROY
}
void FlexibleInterpVar::setInterpCode(RooAbsReal& param, int code){
int index = _paramList.index(¶m);
if(index<0){
coutE(InputArguments) << "FlexibleInterpVar::setInterpCode ERROR: " << param.GetName()
<< " is not in list" << endl ;
} else {
coutW(InputArguments) << "FlexibleInterpVar::setInterpCode : " << param.GetName()
<< " is now " << code << endl ;
_interpCode.at(index) = code;
}
_logInit = kFALSE ;
setValueDirty();
}
void FlexibleInterpVar::setAllInterpCodes(int code){
for(unsigned int i=0; i<_interpCode.size(); ++i){
_interpCode.at(i) = code;
}
_logInit = kFALSE ;
setValueDirty();
}
void FlexibleInterpVar::setNominal(Double_t newNominal){
coutW(InputArguments) << "FlexibleInterpVar::setNominal : nominal is now " << newNominal << endl ;
_nominal = newNominal;
_logInit = kFALSE ;
setValueDirty();
}
void FlexibleInterpVar::setLow(RooAbsReal& param, Double_t newLow){
int index = _paramList.index(¶m);
if(index<0){
coutE(InputArguments) << "FlexibleInterpVar::setLow ERROR: " << param.GetName()
<< " is not in list" << endl ;
} else {
coutW(InputArguments) << "FlexibleInterpVar::setLow : " << param.GetName()
<< " is now " << newLow << endl ;
_low.at(index) = newLow;
}
_logInit = kFALSE ;
setValueDirty();
}
void FlexibleInterpVar::setHigh(RooAbsReal& param, Double_t newHigh){
int index = _paramList.index(¶m);
if(index<0){
coutE(InputArguments) << "FlexibleInterpVar::setHigh ERROR: " << param.GetName()
<< " is not in list" << endl ;
} else {
coutW(InputArguments) << "FlexibleInterpVar::setHigh : " << param.GetName()
<< " is now " << newHigh << endl ;
_high.at(index) = newHigh;
}
_logInit = kFALSE ;
setValueDirty();
}
void FlexibleInterpVar::printAllInterpCodes(){
for(unsigned int i=0; i<_interpCode.size(); ++i){
coutI(InputArguments) <<"interp code for " << _paramList.at(i)->GetName() << " = " << _interpCode.at(i) <<endl;
if( _low.at(i) <= 0.001 ) coutE(InputArguments) << GetName() << ", " << _paramList.at(i)->GetName() << ": low value = " << _low.at(i) << endl;
if( _high.at(i) <= 0.001 ) coutE(InputArguments) << GetName() << ", " << _paramList.at(i)->GetName() << ": high value = " << _high.at(i) << endl;
}
}
double FlexibleInterpVar::PolyInterpValue(int i, double x) const {
double boundary = _interpBoundary;
double x0 = boundary;
if (!_logInit) {
_logInit=kTRUE ;
unsigned int n = _low.size();
assert(n == _high.size() );
_polCoeff.resize(n*6) ;
for (unsigned int j = 0; j < n ; j++) {
double * coeff = &_polCoeff[j * 6];
double pow_up = std::pow(_high[j]/_nominal, x0);
double pow_down = std::pow(_low[j]/_nominal, x0);
double logHi = std::log(_high[j]) ;
double logLo = std::log(_low[j] );
double pow_up_log = _high[j] <= 0.0 ? 0.0 : pow_up * logHi;
double pow_down_log = _low[j] <= 0.0 ? 0.0 : -pow_down * logLo;
double pow_up_log2 = _high[j] <= 0.0 ? 0.0 : pow_up_log * logHi;
double pow_down_log2= _low[j] <= 0.0 ? 0.0 : -pow_down_log* logLo;
double S0 = (pow_up+pow_down)/2;
double A0 = (pow_up-pow_down)/2;
double S1 = (pow_up_log+pow_down_log)/2;
double A1 = (pow_up_log-pow_down_log)/2;
double S2 = (pow_up_log2+pow_down_log2)/2;
double A2 = (pow_up_log2-pow_down_log2)/2;
coeff[0] = 1./(8*x0) *( 15*A0 - 7*x0*S1 + x0*x0*A2);
coeff[1] = 1./(8*x0*x0) *(-24 + 24*S0 - 9*x0*A1 + x0*x0*S2);
coeff[2] = 1./(4*pow(x0, 3))*( - 5*A0 + 5*x0*S1 - x0*x0*A2);
coeff[3] = 1./(4*pow(x0, 4))*( 12 - 12*S0 + 7*x0*A1 - x0*x0*S2);
coeff[4] = 1./(8*pow(x0, 5))*( + 3*A0 - 3*x0*S1 + x0*x0*A2);
coeff[5] = 1./(8*pow(x0, 6))*( -8 + 8*S0 - 5*x0*A1 + x0*x0*S2);
}
}
const double * coeff = &_polCoeff.front() + 6*i;
double a = coeff[0];
double b = coeff[1];
double c = coeff[2];
double d = coeff[3];
double e = coeff[4];
double f = coeff[5];
double value = 1. + x * (a + x * ( b + x * ( c + x * ( d + x * ( e + x * f ) ) ) ) );
return value;
}
Double_t FlexibleInterpVar::evaluate() const
{
Double_t total(_nominal) ;
_paramIter->Reset() ;
RooAbsReal* param ;
int i=0;
while((param=(RooAbsReal*)_paramIter->Next())) {
Int_t icode = _interpCode[i] ;
switch(icode) {
case 0: {
if(param->getVal()>0)
total += param->getVal()*(_high[i] - _nominal );
else
total += param->getVal()*(_nominal - _low[i]);
break ;
}
case 1: {
if(param->getVal()>=0)
total *= pow(_high[i]/_nominal, +param->getVal());
else
total *= pow(_low[i]/_nominal, -param->getVal());
break ;
}
case 2: {
double a = 0.5*(_high[i]+_low[i])-_nominal;
double b = 0.5*(_high[i]-_low[i]);
double c = 0;
if(param->getVal()>1 ){
total += (2*a+b)*(param->getVal()-1)+_high[i]-_nominal;
} else if(param->getVal()<-1 ) {
total += -1*(2*a-b)*(param->getVal()+1)+_low[i]-_nominal;
} else {
total += a*pow(param->getVal(),2) + b*param->getVal()+c;
}
break ;
}
case 3: {
double a = 0.5*(_high[i]+_low[i])-_nominal;
double b = 0.5*(_high[i]-_low[i]);
double c = 0;
if(param->getVal()>1 ){
total += (2*a+b)*(param->getVal()-1)+_high[i]-_nominal;
} else if(param->getVal()<-1 ) {
total += -1*(2*a-b)*(param->getVal()+1)+_low[i]-_nominal;
} else {
total += a*pow(param->getVal(),2) + b*param->getVal()+c;
}
break ;
}
case 4: {
double boundary = _interpBoundary;
double x = param->getVal();
if(x >= boundary)
{
total *= std::pow(_high[i]/_nominal, +param->getVal());
}
else if (x <= -boundary)
{
total *= std::pow(_low[i]/_nominal, -param->getVal());
}
else if (x != 0)
{
total *= PolyInterpValue(i, x);
}
break ;
}
default: {
coutE(InputArguments) << "FlexibleInterpVar::evaluate ERROR: " << param->GetName()
<< " with unknown interpolation code" << endl ;
}
}
++i;
}
if(total<=0) {
total= TMath::Limits<double>::Min();
}
return total;
}
void FlexibleInterpVar::printMultiline(ostream& os, Int_t contents,
Bool_t verbose, TString indent) const
{
RooAbsReal::printMultiline(os,contents,verbose,indent);
os << indent << "--- FlexibleInterpVar ---" << endl;
printFlexibleInterpVars(os);
}
void FlexibleInterpVar::printFlexibleInterpVars(ostream& os) const
{
_paramIter->Reset();
for (int i=0;i<(int)_low.size();i++) {
RooAbsReal* param=(RooAbsReal*)_paramIter->Next();
os << setw(36) << param->GetName()<<": "<<setw(7) << _low[i]<<" "<<setw(7) << _high[i]
<<endl;
}
}
FlexibleInterpVar.cxx:100 FlexibleInterpVar.cxx:101 FlexibleInterpVar.cxx:102 FlexibleInterpVar.cxx:103 FlexibleInterpVar.cxx:104 FlexibleInterpVar.cxx:105 FlexibleInterpVar.cxx:106 FlexibleInterpVar.cxx:107 FlexibleInterpVar.cxx:108 FlexibleInterpVar.cxx:109 FlexibleInterpVar.cxx:110 FlexibleInterpVar.cxx:111 FlexibleInterpVar.cxx:112 FlexibleInterpVar.cxx:113 FlexibleInterpVar.cxx:114 FlexibleInterpVar.cxx:115 FlexibleInterpVar.cxx:116 FlexibleInterpVar.cxx:117 FlexibleInterpVar.cxx:118 FlexibleInterpVar.cxx:119 FlexibleInterpVar.cxx:120 FlexibleInterpVar.cxx:121 FlexibleInterpVar.cxx:122 FlexibleInterpVar.cxx:123 FlexibleInterpVar.cxx:124 FlexibleInterpVar.cxx:125 FlexibleInterpVar.cxx:126 FlexibleInterpVar.cxx:127 FlexibleInterpVar.cxx:128 FlexibleInterpVar.cxx:129 FlexibleInterpVar.cxx:130 FlexibleInterpVar.cxx:131 FlexibleInterpVar.cxx:132 FlexibleInterpVar.cxx:133 FlexibleInterpVar.cxx:134 FlexibleInterpVar.cxx:135 FlexibleInterpVar.cxx:136 FlexibleInterpVar.cxx:137 FlexibleInterpVar.cxx:138 FlexibleInterpVar.cxx:139 FlexibleInterpVar.cxx:140 FlexibleInterpVar.cxx:141 FlexibleInterpVar.cxx:142 FlexibleInterpVar.cxx:143 FlexibleInterpVar.cxx:144 FlexibleInterpVar.cxx:145 FlexibleInterpVar.cxx:146 FlexibleInterpVar.cxx:147 FlexibleInterpVar.cxx:148 FlexibleInterpVar.cxx:149 FlexibleInterpVar.cxx:150 FlexibleInterpVar.cxx:151 FlexibleInterpVar.cxx:152 FlexibleInterpVar.cxx:153 FlexibleInterpVar.cxx:154 FlexibleInterpVar.cxx:155 FlexibleInterpVar.cxx:156 FlexibleInterpVar.cxx:157 FlexibleInterpVar.cxx:158 FlexibleInterpVar.cxx:159 FlexibleInterpVar.cxx:160 FlexibleInterpVar.cxx:161 FlexibleInterpVar.cxx:162 FlexibleInterpVar.cxx:163 FlexibleInterpVar.cxx:164 FlexibleInterpVar.cxx:165 FlexibleInterpVar.cxx:166 FlexibleInterpVar.cxx:167 FlexibleInterpVar.cxx:168 FlexibleInterpVar.cxx:169 FlexibleInterpVar.cxx:170 FlexibleInterpVar.cxx:171 FlexibleInterpVar.cxx:172 FlexibleInterpVar.cxx:173 FlexibleInterpVar.cxx:174 FlexibleInterpVar.cxx:175 FlexibleInterpVar.cxx:176 FlexibleInterpVar.cxx:177 FlexibleInterpVar.cxx:178 FlexibleInterpVar.cxx:179 FlexibleInterpVar.cxx:180 FlexibleInterpVar.cxx:181 FlexibleInterpVar.cxx:182 FlexibleInterpVar.cxx:183 FlexibleInterpVar.cxx:184 FlexibleInterpVar.cxx:185 FlexibleInterpVar.cxx:186 FlexibleInterpVar.cxx:187 FlexibleInterpVar.cxx:188 FlexibleInterpVar.cxx:189 FlexibleInterpVar.cxx:190 FlexibleInterpVar.cxx:191 FlexibleInterpVar.cxx:192 FlexibleInterpVar.cxx:193 FlexibleInterpVar.cxx:194 FlexibleInterpVar.cxx:195 FlexibleInterpVar.cxx:196 FlexibleInterpVar.cxx:197 FlexibleInterpVar.cxx:198 FlexibleInterpVar.cxx:199 FlexibleInterpVar.cxx:200 FlexibleInterpVar.cxx:201 FlexibleInterpVar.cxx:202 FlexibleInterpVar.cxx:203 FlexibleInterpVar.cxx:204 FlexibleInterpVar.cxx:205 FlexibleInterpVar.cxx:206 FlexibleInterpVar.cxx:207 FlexibleInterpVar.cxx:208 FlexibleInterpVar.cxx:209 FlexibleInterpVar.cxx:210 FlexibleInterpVar.cxx:211 FlexibleInterpVar.cxx:212 FlexibleInterpVar.cxx:213 FlexibleInterpVar.cxx:214 FlexibleInterpVar.cxx:215 FlexibleInterpVar.cxx:216 FlexibleInterpVar.cxx:217 FlexibleInterpVar.cxx:218 FlexibleInterpVar.cxx:219 FlexibleInterpVar.cxx:220 FlexibleInterpVar.cxx:221 FlexibleInterpVar.cxx:222 FlexibleInterpVar.cxx:223 FlexibleInterpVar.cxx:224 FlexibleInterpVar.cxx:225 FlexibleInterpVar.cxx:226 FlexibleInterpVar.cxx:227 FlexibleInterpVar.cxx:228 FlexibleInterpVar.cxx:229 FlexibleInterpVar.cxx:230 FlexibleInterpVar.cxx:231 FlexibleInterpVar.cxx:232 FlexibleInterpVar.cxx:233 FlexibleInterpVar.cxx:234 FlexibleInterpVar.cxx:235 FlexibleInterpVar.cxx:236 FlexibleInterpVar.cxx:237 FlexibleInterpVar.cxx:238 FlexibleInterpVar.cxx:239 FlexibleInterpVar.cxx:240 FlexibleInterpVar.cxx:241 FlexibleInterpVar.cxx:242 FlexibleInterpVar.cxx:243 FlexibleInterpVar.cxx:244 FlexibleInterpVar.cxx:245 FlexibleInterpVar.cxx:246 FlexibleInterpVar.cxx:247 FlexibleInterpVar.cxx:248 FlexibleInterpVar.cxx:249 FlexibleInterpVar.cxx:250 FlexibleInterpVar.cxx:251 FlexibleInterpVar.cxx:252 FlexibleInterpVar.cxx:253 FlexibleInterpVar.cxx:254 FlexibleInterpVar.cxx:255 FlexibleInterpVar.cxx:256 FlexibleInterpVar.cxx:257 FlexibleInterpVar.cxx:258 FlexibleInterpVar.cxx:259 FlexibleInterpVar.cxx:260 FlexibleInterpVar.cxx:261 FlexibleInterpVar.cxx:262 FlexibleInterpVar.cxx:263 FlexibleInterpVar.cxx:264 FlexibleInterpVar.cxx:265 FlexibleInterpVar.cxx:266 FlexibleInterpVar.cxx:267 FlexibleInterpVar.cxx:268 FlexibleInterpVar.cxx:269 FlexibleInterpVar.cxx:270 FlexibleInterpVar.cxx:271 FlexibleInterpVar.cxx:272 FlexibleInterpVar.cxx:273 FlexibleInterpVar.cxx:274 FlexibleInterpVar.cxx:275 FlexibleInterpVar.cxx:276 FlexibleInterpVar.cxx:277 FlexibleInterpVar.cxx:278 FlexibleInterpVar.cxx:279 FlexibleInterpVar.cxx:280 FlexibleInterpVar.cxx:281 FlexibleInterpVar.cxx:282 FlexibleInterpVar.cxx:283 FlexibleInterpVar.cxx:284 FlexibleInterpVar.cxx:285 FlexibleInterpVar.cxx:286 FlexibleInterpVar.cxx:287 FlexibleInterpVar.cxx:288 FlexibleInterpVar.cxx:289 FlexibleInterpVar.cxx:290 FlexibleInterpVar.cxx:291 FlexibleInterpVar.cxx:292 FlexibleInterpVar.cxx:293 FlexibleInterpVar.cxx:294 FlexibleInterpVar.cxx:295 FlexibleInterpVar.cxx:296 FlexibleInterpVar.cxx:297 FlexibleInterpVar.cxx:298 FlexibleInterpVar.cxx:299 FlexibleInterpVar.cxx:300 FlexibleInterpVar.cxx:301 FlexibleInterpVar.cxx:302 FlexibleInterpVar.cxx:303 FlexibleInterpVar.cxx:304 FlexibleInterpVar.cxx:305 FlexibleInterpVar.cxx:306 FlexibleInterpVar.cxx:307 FlexibleInterpVar.cxx:308 FlexibleInterpVar.cxx:309 FlexibleInterpVar.cxx:310 FlexibleInterpVar.cxx:311 FlexibleInterpVar.cxx:312 FlexibleInterpVar.cxx:313 FlexibleInterpVar.cxx:314 FlexibleInterpVar.cxx:315 FlexibleInterpVar.cxx:316 FlexibleInterpVar.cxx:317 FlexibleInterpVar.cxx:318 FlexibleInterpVar.cxx:319 FlexibleInterpVar.cxx:320 FlexibleInterpVar.cxx:321 FlexibleInterpVar.cxx:322 FlexibleInterpVar.cxx:323 FlexibleInterpVar.cxx:324 FlexibleInterpVar.cxx:325 FlexibleInterpVar.cxx:326 FlexibleInterpVar.cxx:327 FlexibleInterpVar.cxx:328 FlexibleInterpVar.cxx:329 FlexibleInterpVar.cxx:330 FlexibleInterpVar.cxx:331 FlexibleInterpVar.cxx:332 FlexibleInterpVar.cxx:333 FlexibleInterpVar.cxx:334 FlexibleInterpVar.cxx:335 FlexibleInterpVar.cxx:336 FlexibleInterpVar.cxx:337 FlexibleInterpVar.cxx:338 FlexibleInterpVar.cxx:339 FlexibleInterpVar.cxx:340 FlexibleInterpVar.cxx:341 FlexibleInterpVar.cxx:342 FlexibleInterpVar.cxx:343 FlexibleInterpVar.cxx:344 FlexibleInterpVar.cxx:345 FlexibleInterpVar.cxx:346 FlexibleInterpVar.cxx:347 FlexibleInterpVar.cxx:348 FlexibleInterpVar.cxx:349 FlexibleInterpVar.cxx:350 FlexibleInterpVar.cxx:351 FlexibleInterpVar.cxx:352 FlexibleInterpVar.cxx:353 FlexibleInterpVar.cxx:354 FlexibleInterpVar.cxx:355 FlexibleInterpVar.cxx:356 FlexibleInterpVar.cxx:357 FlexibleInterpVar.cxx:358 FlexibleInterpVar.cxx:359 FlexibleInterpVar.cxx:360 FlexibleInterpVar.cxx:361 FlexibleInterpVar.cxx:362 FlexibleInterpVar.cxx:363 FlexibleInterpVar.cxx:364 FlexibleInterpVar.cxx:365 FlexibleInterpVar.cxx:366 FlexibleInterpVar.cxx:367 FlexibleInterpVar.cxx:368 FlexibleInterpVar.cxx:369 FlexibleInterpVar.cxx:370 FlexibleInterpVar.cxx:371 FlexibleInterpVar.cxx:372 FlexibleInterpVar.cxx:373 FlexibleInterpVar.cxx:374 FlexibleInterpVar.cxx:375 FlexibleInterpVar.cxx:376 FlexibleInterpVar.cxx:377 FlexibleInterpVar.cxx:378 FlexibleInterpVar.cxx:379 FlexibleInterpVar.cxx:380 FlexibleInterpVar.cxx:381 FlexibleInterpVar.cxx:382 FlexibleInterpVar.cxx:383 FlexibleInterpVar.cxx:384 FlexibleInterpVar.cxx:385 FlexibleInterpVar.cxx:386 FlexibleInterpVar.cxx:387 FlexibleInterpVar.cxx:388 FlexibleInterpVar.cxx:389 FlexibleInterpVar.cxx:390 FlexibleInterpVar.cxx:391 FlexibleInterpVar.cxx:392 FlexibleInterpVar.cxx:393 FlexibleInterpVar.cxx:394 FlexibleInterpVar.cxx:395 FlexibleInterpVar.cxx:396 FlexibleInterpVar.cxx:397 FlexibleInterpVar.cxx:398 FlexibleInterpVar.cxx:399 FlexibleInterpVar.cxx:400 FlexibleInterpVar.cxx:401 FlexibleInterpVar.cxx:402 FlexibleInterpVar.cxx:403 FlexibleInterpVar.cxx:404 FlexibleInterpVar.cxx:405 FlexibleInterpVar.cxx:406 FlexibleInterpVar.cxx:407 FlexibleInterpVar.cxx:408 FlexibleInterpVar.cxx:409 FlexibleInterpVar.cxx:410 FlexibleInterpVar.cxx:411 FlexibleInterpVar.cxx:412 FlexibleInterpVar.cxx:413 FlexibleInterpVar.cxx:414 FlexibleInterpVar.cxx:415 FlexibleInterpVar.cxx:416 FlexibleInterpVar.cxx:417 FlexibleInterpVar.cxx:418 FlexibleInterpVar.cxx:419 FlexibleInterpVar.cxx:420 FlexibleInterpVar.cxx:421 FlexibleInterpVar.cxx:422 FlexibleInterpVar.cxx:423 FlexibleInterpVar.cxx:424 FlexibleInterpVar.cxx:425 FlexibleInterpVar.cxx:426 FlexibleInterpVar.cxx:427 FlexibleInterpVar.cxx:428 FlexibleInterpVar.cxx:429 FlexibleInterpVar.cxx:430 FlexibleInterpVar.cxx:431 FlexibleInterpVar.cxx:432 FlexibleInterpVar.cxx:433 FlexibleInterpVar.cxx:434 FlexibleInterpVar.cxx:435 FlexibleInterpVar.cxx:436 FlexibleInterpVar.cxx:437 FlexibleInterpVar.cxx:438 FlexibleInterpVar.cxx:439 FlexibleInterpVar.cxx:440 FlexibleInterpVar.cxx:441 FlexibleInterpVar.cxx:442 FlexibleInterpVar.cxx:443 FlexibleInterpVar.cxx:444 FlexibleInterpVar.cxx:445 FlexibleInterpVar.cxx:446 FlexibleInterpVar.cxx:447 FlexibleInterpVar.cxx:448 FlexibleInterpVar.cxx:449 FlexibleInterpVar.cxx:450 FlexibleInterpVar.cxx:451 FlexibleInterpVar.cxx:452 FlexibleInterpVar.cxx:453 FlexibleInterpVar.cxx:454 FlexibleInterpVar.cxx:455 FlexibleInterpVar.cxx:456 FlexibleInterpVar.cxx:457 FlexibleInterpVar.cxx:458 FlexibleInterpVar.cxx:459 FlexibleInterpVar.cxx:460 FlexibleInterpVar.cxx:461 FlexibleInterpVar.cxx:462 FlexibleInterpVar.cxx:463 FlexibleInterpVar.cxx:464 FlexibleInterpVar.cxx:465 FlexibleInterpVar.cxx:466 FlexibleInterpVar.cxx:467 FlexibleInterpVar.cxx:468 FlexibleInterpVar.cxx:469 FlexibleInterpVar.cxx:470 FlexibleInterpVar.cxx:471 FlexibleInterpVar.cxx:472 FlexibleInterpVar.cxx:473 FlexibleInterpVar.cxx:474 FlexibleInterpVar.cxx:475 FlexibleInterpVar.cxx:476 FlexibleInterpVar.cxx:477 FlexibleInterpVar.cxx:478 FlexibleInterpVar.cxx:479