// PiecewiseInterpolation
// END_HTML
#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 "RooMsgService.h"
ClassImp(PiecewiseInterpolation)
;
PiecewiseInterpolation::PiecewiseInterpolation()
{
_lowIter = _lowSet.createIterator() ;
_highIter = _highSet.createIterator() ;
_paramIter = _paramSet.createIterator() ;
_positiveDefinite=false;
}
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)
{
_lowIter = _lowSet.createIterator() ;
_highIter = _highSet.createIterator() ;
_paramIter = _paramSet.createIterator() ;
if (lowSet.getSize() != highSet.getSize()) {
coutE(InputArguments) << "PiecewiseInterpolation::ctor(" << GetName() << ") ERROR: input lists should be of equal length" << endl ;
RooErrorHandler::softAbort() ;
}
TIterator* inputIter1 = lowSet.createIterator() ;
RooAbsArg* comp ;
while((comp = (RooAbsArg*)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) ;
}
}
delete inputIter1 ;
TIterator* inputIter2 = highSet.createIterator() ;
while((comp = (RooAbsArg*)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) ;
}
}
delete inputIter2 ;
TIterator* inputIter3 = paramSet.createIterator() ;
while((comp = (RooAbsArg*)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) ;
}
}
delete inputIter3 ;
}
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)
{
_lowIter = _lowSet.createIterator() ;
_highIter = _highSet.createIterator() ;
_paramIter = _paramSet.createIterator() ;
}
PiecewiseInterpolation::~PiecewiseInterpolation()
{
if (_lowIter) delete _lowIter ;
if (_highIter) delete _highIter ;
if (_paramIter) delete _paramIter ;
}
Double_t PiecewiseInterpolation::evaluate() const
{
Double_t nominal = _nominal;
Double_t sum(nominal) ;
_lowIter->Reset() ;
_highIter->Reset() ;
_paramIter->Reset() ;
RooAbsReal* param ;
RooAbsReal* high ;
RooAbsReal* low ;
int i=0;
while((param=(RooAbsReal*)_paramIter->Next())) {
low = (RooAbsReal*)_lowIter->Next() ;
high = (RooAbsReal*)_highIter->Next() ;
if(param->getVal()>0)
sum += param->getVal()*(high->getVal() - nominal );
else
sum += param->getVal()*(nominal - low->getVal());
++i;
}
if(_positiveDefinite && (sum<0)){
sum = 1e-6;
}
return sum;
}
Int_t PiecewiseInterpolation::getAnalyticalIntegralWN(RooArgSet& allVars, RooArgSet& analVars,
const RooArgSet* normSet, const char* ) const
{
if (allVars.getSize()==0) return 0 ;
if (_forceNumInt) return 0 ;
analVars.add(allVars) ;
Int_t sterileIdx(-1) ;
CacheElem* cache = (CacheElem*) _normIntMgr.getObj(normSet,&analVars,&sterileIdx,0) ;
if (cache) {
return _normIntMgr.lastIndex()+1 ;
}
cache = new CacheElem ;
RooAbsReal* param ;
RooAbsReal *func ;
func = (RooAbsReal*)(&_nominal.arg()) ;
RooAbsReal* funcInt = func->createIntegral(analVars) ;
cache->_funcIntList.addOwned(*funcInt) ;
_lowIter->Reset() ;
_highIter->Reset() ;
_paramIter->Reset() ;
int i=0;
while((param=(RooAbsReal*)_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) ;
TIterator* funcIntIter = cache->_funcIntList.createIterator() ;
TIterator* lowIntIter = cache->_lowIntList.createIterator() ;
TIterator* highIntIter = cache->_highIntList.createIterator() ;
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;
_paramIter->Reset() ;
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;
}
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