192 RooAbsReal(
name,title), _norm(0), _normSet(0), _normMgr(this,10), _selectComp(
kTRUE), _specGeneratorConfig(0)
205 RooAbsReal(
name,title,plotMin,plotMax), _norm(0), _normSet(0), _normMgr(this,10), _selectComp(
kTRUE), _specGeneratorConfig(0)
218 _normMgr(other._normMgr,this), _selectComp(other._selectComp), _normRange(other._normRange)
295 logEvalError(
"p.d.f normalization integral is zero or negative") ;
303 _value = rawVal / normVal ;
324 cxcoutD(
Eval) <<
"RooAbsPdf::analyticalIntegralWN(" <<
GetName() <<
") code = " << code <<
" normset = " << (normSet?*normSet:
RooArgSet()) << endl ;
327 if (code==0)
return getVal(normSet) ;
347 logEvalError(
Form(
"p.d.f value is Not-a-Number (%f), forcing value to zero",value)) ;
351 logEvalError(
Form(
"p.d.f value is less than zero (%f), forcing value to zero",value)) ;
356 if(!error)
return error ;
379 if (!nset)
return 1 ;
387 coutW(
Eval) <<
"RooAbsPdf::getNorm(" <<
GetName() <<
":: WARNING normalization is zero, nset = " ; nset->
Print(
"1") ;
407 return cache->
_norm ;
453 if (nsetChanged && adjustProxies) {
463 ((
RooAbsPdf*)
this)->setProxyNormSet(nset) ;
471 <<
") recreating normalization integral " << endl ;
474 cxcoutD(
Tracing) << IsA()->GetName() <<
"::syncNormalization(" <<
GetName() <<
") selfNormalized, creating unit norm" << endl;
480 TString ntitle(
GetTitle()) ; ntitle.Append(
" Unit Normalization") ;
481 TString nname(
GetName()) ; nname.Append(
"_UnitNorm") ;
492 if (cacheParamsStr && strlen(cacheParamsStr)) {
500 if (cacheParams->
getSize()>0) {
502 <<
"-dim value cache for integral over " << *depList <<
" as a function of " << *cacheParams <<
" in range " << (nr?nr:
"<default>") << endl ;
511 normInt= cachedIntegral ;
611 if (
fabs(prob)>1e6) {
612 coutW(
Eval) <<
"RooAbsPdf::getLogVal(" <<
GetName() <<
") WARNING: large likelihood value: " << prob << endl ;
617 logEvalError(
"getLogVal() top-level p.d.f evaluates to a negative number") ;
623 logEvalError(
"getLogVal() top-level p.d.f evaluates to zero") ;
625 return log((
double)0);
629 logEvalError(
"getLogVal() top-level p.d.f evaluates to NaN") ;
631 return log((
double)0);
665 if (
fabs(expected)<1
e-10 &&
fabs(observed)<1
e-10) {
671 logEvalError(
"extendedTerm #expected events is <0 or NaN") ;
702 << observed <<
" events. extendedTerm = " << extra << endl;
787 pc.defineString(
"rangeName",
"RangeWithName",0,
"",
kTRUE) ;
788 pc.defineString(
"addCoefRange",
"SumCoefRange",0,
"") ;
789 pc.defineString(
"globstag",
"GlobalObservablesTag",0,
"") ;
790 pc.defineDouble(
"rangeLo",
"Range",0,-999.) ;
791 pc.defineDouble(
"rangeHi",
"Range",1,-999.) ;
792 pc.defineInt(
"splitRange",
"SplitRange",0,0) ;
793 pc.defineInt(
"ext",
"Extended",0,2) ;
794 pc.defineInt(
"numcpu",
"NumCPU",0,1) ;
795 pc.defineInt(
"interleave",
"NumCPU",1,0) ;
796 pc.defineInt(
"verbose",
"Verbose",0,0) ;
797 pc.defineInt(
"optConst",
"Optimize",0,0) ;
798 pc.defineInt(
"cloneData",
"CloneData",2,0) ;
799 pc.defineSet(
"projDepSet",
"ProjectedObservables",0,0) ;
800 pc.defineSet(
"cPars",
"Constrain",0,0) ;
801 pc.defineSet(
"glObs",
"GlobalObservables",0,0) ;
802 pc.defineInt(
"constrAll",
"Constrained",0,0) ;
803 pc.defineInt(
"doOffset",
"OffsetLikelihood",0,0) ;
804 pc.defineSet(
"extCons",
"ExternalConstraints",0,0) ;
805 pc.defineMutex(
"Range",
"RangeWithName") ;
806 pc.defineMutex(
"Constrain",
"Constrained") ;
807 pc.defineMutex(
"GlobalObservables",
"GlobalObservablesTag") ;
810 pc.process(cmdList) ;
816 const char* rangeName =
pc.getString(
"rangeName",0,
kTRUE) ;
817 const char* addCoefRangeName =
pc.getString(
"addCoefRange",0,
kTRUE) ;
818 const char* globsTag =
pc.getString(
"globstag",0,
kTRUE) ;
820 Int_t numcpu =
pc.getInt(
"numcpu") ;
823 Int_t splitr =
pc.getInt(
"splitRange") ;
824 Bool_t verbose =
pc.getInt(
"verbose") ;
825 Int_t optConst =
pc.getInt(
"optConst") ;
826 Int_t cloneData =
pc.getInt(
"cloneData") ;
827 Int_t doOffset =
pc.getInt(
"doOffset") ;
831 cloneData = optConst ;
837 if (
pc.hasProcessed(
"GlobalObservablesTag")) {
838 if (glObs)
delete glObs ;
841 coutI(
Minimization) <<
"User-defined specification of global observables definition with tag named '" << globsTag <<
"'" << endl ;
843 }
else if (!
pc.hasProcessed(
"GlobalObservables")) {
849 coutI(
Minimization) <<
"p.d.f. provides built-in specification of global observables definition with tag named '" << defGlobObsTag <<
"'" << endl ;
850 if (glObs)
delete glObs ;
864 doStripDisconnected=
kTRUE ;
872 coutI(
Minimization) <<
"p.d.f. provides expected number of events, including extended term in likelihood." << endl ;
876 if (
pc.hasProcessed(
"Range")) {
886 if (rrv) rrv->
setRange(
"fit",rangeLo,rangeHi) ;
902 if (!rangeName || strchr(rangeName,
',')==0) {
906 nll =
new RooNLLVar(baseName.c_str(),
"-log(likelihood)",*
this,
data,projDeps,ext,rangeName,addCoefRangeName,numcpu,interl,verbose,splitr,cloneData) ;
911 const size_t bufSize = strlen(rangeName)+1;
912 char* buf =
new char[bufSize] ;
913 strlcpy(buf,rangeName,bufSize) ;
914 char* token = strtok(buf,
",") ;
916 RooAbsReal* nllComp =
new RooNLLVar(
Form(
"%s_%s",baseName.c_str(),token),
"-log(likelihood)",*
this,
data,projDeps,ext,token,addCoefRangeName,numcpu,interl,verbose,splitr,cloneData) ;
917 nllList.
add(*nllComp) ;
918 token = strtok(0,
",") ;
934 <<
" entries" << endl;
935 allConstraints.
add(*constr);
939 if (cPars && cPars->
getSize() > 0) {
941 allConstraints.
add(*constraints);
945 allConstraints.
add(*extCons);
953 <<
" with " << allConstraints.
getSize() <<
" entries" << endl;
961 if (allConstraints.
getSize()>0 && cPars) {
963 coutI(
Minimization) <<
" Including the following contraint terms in minimization: " << allConstraints << endl ;
965 coutI(
Minimization) <<
"The following global observables have been defined: " << *glObs << endl ;
967 nllCons =
new RooConstraintSum(
Form(
"%s_constr",baseName.c_str()),
"nllCons",allConstraints,glObs ? *glObs : *cPars) ;
980 if (doStripDisconnected) {
1110 RooLinkedList nllCmdList =
pc.filterCmdList(fitCmdList,
"ProjectedObservables,Extended,Range,RangeWithName,SumCoefRange,NumCPU,SplitRange,Constrained,Constrain,ExternalConstraints,CloneData,GlobalObservables,GlobalObservablesTag,OffsetLikelihood") ;
1112 pc.defineString(
"fitOpt",
"FitOptions",0,
"") ;
1113 pc.defineInt(
"optConst",
"Optimize",0,2) ;
1114 pc.defineInt(
"verbose",
"Verbose",0,0) ;
1115 pc.defineInt(
"doSave",
"Save",0,0) ;
1116 pc.defineInt(
"doTimer",
"Timer",0,0) ;
1117 pc.defineInt(
"plevel",
"PrintLevel",0,1) ;
1118 pc.defineInt(
"strat",
"Strategy",0,1) ;
1119 pc.defineInt(
"initHesse",
"InitialHesse",0,0) ;
1120 pc.defineInt(
"hesse",
"Hesse",0,1) ;
1121 pc.defineInt(
"minos",
"Minos",0,0) ;
1122 pc.defineInt(
"ext",
"Extended",0,2) ;
1123 pc.defineInt(
"numcpu",
"NumCPU",0,1) ;
1124 pc.defineInt(
"numee",
"PrintEvalErrors",0,10) ;
1125 pc.defineInt(
"doEEWall",
"EvalErrorWall",0,1) ;
1126 pc.defineInt(
"doWarn",
"Warnings",0,1) ;
1127 pc.defineInt(
"doSumW2",
"SumW2Error",0,-1) ;
1128 pc.defineInt(
"doOffset",
"OffsetLikelihood",0,0) ;
1129 pc.defineString(
"mintype",
"Minimizer",0,
"Minuit") ;
1130 pc.defineString(
"minalg",
"Minimizer",1,
"minuit") ;
1131 pc.defineObject(
"minosSet",
"Minos",0,0) ;
1132 pc.defineSet(
"cPars",
"Constrain",0,0) ;
1133 pc.defineSet(
"extCons",
"ExternalConstraints",0,0) ;
1134 pc.defineMutex(
"FitOptions",
"Verbose") ;
1135 pc.defineMutex(
"FitOptions",
"Save") ;
1136 pc.defineMutex(
"FitOptions",
"Timer") ;
1137 pc.defineMutex(
"FitOptions",
"Strategy") ;
1138 pc.defineMutex(
"FitOptions",
"InitialHesse") ;
1139 pc.defineMutex(
"FitOptions",
"Hesse") ;
1140 pc.defineMutex(
"FitOptions",
"Minos") ;
1141 pc.defineMutex(
"Range",
"RangeWithName") ;
1142 pc.defineMutex(
"InitialHesse",
"Minimizer") ;
1145 pc.process(fitCmdList) ;
1151 const char* fitOpt =
pc.getString(
"fitOpt",0,
kTRUE) ;
1152 Int_t optConst =
pc.getInt(
"optConst") ;
1153 Int_t verbose =
pc.getInt(
"verbose") ;
1154 Int_t doSave =
pc.getInt(
"doSave") ;
1155 Int_t doTimer =
pc.getInt(
"doTimer") ;
1156 Int_t plevel =
pc.getInt(
"plevel") ;
1157 Int_t strat =
pc.getInt(
"strat") ;
1158 Int_t initHesse=
pc.getInt(
"initHesse") ;
1159 Int_t hesse =
pc.getInt(
"hesse") ;
1160 Int_t minos =
pc.getInt(
"minos") ;
1161 Int_t numee =
pc.getInt(
"numee") ;
1162 Int_t doEEWall =
pc.getInt(
"doEEWall") ;
1163 Int_t doWarn =
pc.getInt(
"doWarn") ;
1164 Int_t doSumW2 =
pc.getInt(
"doSumW2") ;
1166#ifdef __ROOFIT_NOROOMINIMIZER
1167 const char* minType =0 ;
1169 const char* minType =
pc.getString(
"mintype",
"Minuit") ;
1170 const char* minAlg =
pc.getString(
"minalg",
"minuit") ;
1174 Bool_t weightedData =
data.isNonPoissonWeighted() ;
1177 if (weightedData && doSumW2==-1) {
1178 coutW(
InputArguments) <<
"RooAbsPdf::fitTo(" <<
GetName() <<
") WARNING: a likelihood fit is request of what appears to be weighted data. " << endl
1179 <<
" While the estimated values of the parameters will always be calculated taking the weights into account, " << endl
1180 <<
" there are multiple ways to estimate the errors on these parameter values. You are advised to make an " << endl
1181 <<
" explicit choice on the error calculation: " << endl
1182 <<
" - Either provide SumW2Error(kTRUE), to calculate a sum-of-weights corrected HESSE error matrix " << endl
1183 <<
" (error will be proportional to the number of events)" << endl
1184 <<
" - Or provide SumW2Error(kFALSE), to return errors from original HESSE error matrix" << endl
1185 <<
" (which will be proportional to the sum of the weights)" << endl
1186 <<
" If you want the errors to reflect the information contained in the provided dataset, choose kTRUE. " << endl
1187 <<
" If you want the errors to reflect the precision you would be able to obtain with an unweighted dataset " << endl
1188 <<
" with 'sum-of-weights' events, choose kFALSE." << endl ;
1193 if (doSumW2==1 && minos) {
1194 coutW(
InputArguments) <<
"RooAbsPdf::fitTo(" <<
GetName() <<
") WARNING: sum-of-weights correction does not apply to MINOS errors" << endl ;
1202 if (
string(minType)!=
"OldMinuit") {
1204#ifndef __ROOFIT_NOROOMINIMIZER
1207 m.setMinimizerType(minType) ;
1209 m.setEvalErrorWall(doEEWall) ;
1214 m.setPrintEvalErrors(numee) ;
1216 m.setPrintLevel(plevel) ;
1221 m.optimizeConst(optConst) ;
1227 ret =
m.fit(fitOpt) ;
1242 m.setStrategy(strat) ;
1251 m.minimize(minType,minAlg) ;
1258 if (doSumW2==1 &&
m.getNPar()>0) {
1261 vector<RooNLLVar*> nllComponents;
1262 nllComponents.reserve(comps->
getSize());
1267 if (!nllComp)
continue;
1268 nllComponents.push_back(nllComp);
1275 for (vector<RooNLLVar*>::iterator it = nllComponents.begin(); nllComponents.end() != it; ++it) {
1276 (*it)->applyWeightSquared(
kTRUE);
1278 coutI(
Fitting) <<
"RooAbsPdf::fitTo(" <<
GetName() <<
") Calculating sum-of-weights-squared correction matrix for covariance matrix" << endl ;
1281 for (vector<RooNLLVar*>::iterator it = nllComponents.begin(); nllComponents.end() != it; ++it) {
1282 (*it)->applyWeightSquared(
kFALSE);
1289 CholeskyDecompGenDim<Double_t> decomp(matC.
GetNrows(), matC);
1292 <<
") ERROR: Cannot apply sum-of-weights correction to covariance matrix: correction matrix calculated with weight-squared is singular" <<endl ;
1295 decomp.Invert(matC);
1298 for (
int i = 0; i < matC.
GetNrows(); ++i)
1299 for (
int j = 0; j < i; ++j) matC(j, i) = matC(i, j);
1303 m.applyCovarianceMatrix(matC);
1313 m.minos(*minosSet) ;
1322 string title =
Form(
"Result of fit of p.d.f. %s to dataset %s",
GetName(),
data.GetName()) ;
1323 ret =
m.save(
name.c_str(),title.c_str()) ;
1328 m.optimizeConst(0) ;
1337 m.setEvalErrorWall(doEEWall) ;
1342 m.setPrintEvalErrors(numee) ;
1344 m.setPrintLevel(plevel) ;
1349 m.optimizeConst(optConst) ;
1355 ret =
m.fit(fitOpt) ;
1370 m.setStrategy(strat) ;
1386 if (doSumW2==1 &&
m.getNPar()>0) {
1389 list<RooNLLVar*> nllComponents ;
1396 nllComponents.push_back(nllComp) ;
1404 for (list<RooNLLVar*>::iterator iter1=nllComponents.begin() ; iter1!=nllComponents.end() ; ++iter1) {
1405 (*iter1)->applyWeightSquared(
kTRUE) ;
1407 coutI(
Fitting) <<
"RooAbsPdf::fitTo(" <<
GetName() <<
") Calculating sum-of-weights-squared correction matrix for covariance matrix" << endl ;
1410 for (list<RooNLLVar*>::iterator iter2=nllComponents.begin() ; iter2!=nllComponents.end() ; ++iter2) {
1411 (*iter2)->applyWeightSquared(
kFALSE) ;
1418 CholeskyDecompGenDim<Double_t> decomp(matC.
GetNrows(), matC);
1421 <<
") ERROR: Cannot apply sum-of-weights correction to covariance matrix: correction matrix calculated with weight-squared is singular" <<endl ;
1424 decomp.Invert(matC);
1427 for (
int i = 0; i < matC.
GetNrows(); ++i)
1428 for (
int j = 0; j < i; ++j) matC(j, i) = matC(i, j);
1432 m.applyCovarianceMatrix(matC);
1442 m.minos(*minosSet) ;
1451 string title =
Form(
"Result of fit of p.d.f. %s to dataset %s",
GetName(),
data.GetName()) ;
1452 ret =
m.save(
name.c_str(),title.c_str()) ;
1458 m.optimizeConst(0) ;
1482 RooLinkedList chi2CmdList =
pc.filterCmdList(fitCmdList,
"Range,RangeWithName,NumCPU,Optimize,ProjectedObservables,AddCoefRange,SplitRange,DataError,Extended") ;
1526 pc.defineString(
"rangeName",
"RangeWithName",0,
"",
kTRUE) ;
1528 pc.process(cmdList) ;
1532 const char* rangeName =
pc.getString(
"rangeName",0,
kTRUE) ;
1539 if (!rangeName || strchr(rangeName,
',')==0) {
1542 chi2 =
new RooChi2Var(baseName.c_str(),baseName.c_str(),*
this,
data,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8) ;
1548 string rcmd =
"RangeWithName" ;
1549 if (arg1.
GetName()==rcmd) rarg = &arg1 ;
1550 if (arg2.
GetName()==rcmd) rarg = &arg2 ;
1551 if (arg3.
GetName()==rcmd) rarg = &arg3 ;
1552 if (arg4.
GetName()==rcmd) rarg = &arg4 ;
1553 if (arg5.
GetName()==rcmd) rarg = &arg5 ;
1554 if (arg6.
GetName()==rcmd) rarg = &arg6 ;
1555 if (arg7.
GetName()==rcmd) rarg = &arg7 ;
1556 if (arg8.
GetName()==rcmd) rarg = &arg8 ;
1560 const size_t bufSize = strlen(rangeName)+1;
1561 char* buf =
new char[bufSize] ;
1562 strlcpy(buf,rangeName,bufSize) ;
1563 char* token = strtok(buf,
",") ;
1568 &arg1==rarg?subRangeCmd:arg1,&arg2==rarg?subRangeCmd:arg2,
1569 &arg3==rarg?subRangeCmd:arg3,&arg4==rarg?subRangeCmd:arg4,
1570 &arg5==rarg?subRangeCmd:arg5,&arg6==rarg?subRangeCmd:arg6,
1571 &arg7==rarg?subRangeCmd:arg7,&arg8==rarg?subRangeCmd:arg8) ;
1572 chi2List.
add(*chi2Comp) ;
1573 token = strtok(0,
",") ;
1595 pc.defineInt(
"integrate",
"Integrate",0,0) ;
1596 pc.defineObject(
"yvar",
"YVar",0,0) ;
1599 pc.process(cmdList) ;
1605 Bool_t integrate =
pc.getInt(
"integrate") ;
1642 os << indent <<
"--- RooAbsPdf ---" << endl;
1643 os << indent <<
"Cached value = " <<
_value << endl ;
1645 os << indent <<
" Normalization integral: " << endl ;
1646 TString moreIndent(indent) ; moreIndent.Append(
" ") ;
1669 return new RooGenContext(*
this,vars,prototype,auxProto,verbose) ;
1676 Bool_t verbose,
Bool_t autoBinned,
const char* binnedTag)
const
1678 if (prototype || (auxProto && auxProto->
getSize()>0)) {
1679 return genContext(vars,prototype,auxProto,verbose);
1741 pc.defineObject(
"proto",
"PrototypeData",0,0) ;
1742 pc.defineString(
"dsetName",
"Name",0,
"") ;
1743 pc.defineInt(
"randProto",
"PrototypeData",0,0) ;
1744 pc.defineInt(
"resampleProto",
"PrototypeData",1,0) ;
1745 pc.defineInt(
"verbose",
"Verbose",0,0) ;
1746 pc.defineInt(
"extended",
"Extended",0,0) ;
1747 pc.defineInt(
"nEvents",
"NumEvents",0,0) ;
1748 pc.defineInt(
"autoBinned",
"AutoBinned",0,1) ;
1749 pc.defineInt(
"expectedData",
"ExpectedData",0,0) ;
1750 pc.defineDouble(
"nEventsD",
"NumEventsD",0,-1.) ;
1751 pc.defineString(
"binnedTag",
"GenBinned",0,
"") ;
1752 pc.defineMutex(
"GenBinned",
"ProtoData") ;
1755 pc.process(arg1,arg2,arg3,arg4,arg5,arg6) ;
1762 const char* dsetName =
pc.getString(
"dsetName") ;
1763 Bool_t verbose =
pc.getInt(
"verbose") ;
1764 Bool_t randProto =
pc.getInt(
"randProto") ;
1765 Bool_t resampleProto =
pc.getInt(
"resampleProto") ;
1766 Bool_t extended =
pc.getInt(
"extended") ;
1767 Bool_t autoBinned =
pc.getInt(
"autoBinned") ;
1768 const char* binnedTag =
pc.getString(
"binnedTag") ;
1769 Int_t nEventsI =
pc.getInt(
"nEvents") ;
1772 Bool_t expectedData =
pc.getInt(
"expectedData") ;
1788 }
else if (nEvents==0) {
1789 cxcoutI(
Generation) <<
"No number of events specified , number of events generated is "
1793 if (extended && protoData && !randProto) {
1794 cxcoutI(
Generation) <<
"WARNING Using generator option Extended() (Poisson distribution of #events) together "
1795 <<
"with a prototype dataset implies incomplete sampling or oversampling of proto data. "
1796 <<
"Set randomize flag in ProtoData() option to randomize prototype dataset order and thus "
1797 <<
"to randomize the set of over/undersampled prototype events for each generation cycle." << endl ;
1804 data =
generate(whatVars,*protoData,
Int_t(nEvents),verbose,randProto,resampleProto) ;
1806 data =
generate(whatVars,nEvents,verbose,autoBinned,binnedTag,expectedData, extended) ;
1810 if (dsetName && strlen(dsetName)>0) {
1811 data->SetName(dsetName) ;
1837 pc.defineObject(
"proto",
"PrototypeData",0,0) ;
1838 pc.defineString(
"dsetName",
"Name",0,
"") ;
1839 pc.defineInt(
"randProto",
"PrototypeData",0,0) ;
1840 pc.defineInt(
"resampleProto",
"PrototypeData",1,0) ;
1841 pc.defineInt(
"verbose",
"Verbose",0,0) ;
1842 pc.defineInt(
"extended",
"Extended",0,0) ;
1843 pc.defineInt(
"nEvents",
"NumEvents",0,0) ;
1844 pc.defineInt(
"autoBinned",
"AutoBinned",0,1) ;
1845 pc.defineString(
"binnedTag",
"GenBinned",0,
"") ;
1846 pc.defineMutex(
"GenBinned",
"ProtoData") ;
1850 pc.process(arg1,arg2,arg3,arg4,arg5,arg6) ;
1857 const char* dsetName =
pc.getString(
"dsetName") ;
1858 Int_t nEvents =
pc.getInt(
"nEvents") ;
1859 Bool_t verbose =
pc.getInt(
"verbose") ;
1860 Bool_t randProto =
pc.getInt(
"randProto") ;
1861 Bool_t resampleProto =
pc.getInt(
"resampleProto") ;
1862 Bool_t extended =
pc.getInt(
"extended") ;
1863 Bool_t autoBinned =
pc.getInt(
"autoBinned") ;
1864 const char* binnedTag =
pc.getString(
"binnedTag") ;
1868 return new GenSpec(cx,whatVars,protoData,nEvents,extended,randProto,resampleProto,dsetName) ;
1908 return new RooDataSet(
"emptyData",
"emptyData",whatVars) ;
1918 if(0 != context && context->
isValid()) {
1924 if(0 != context)
delete context;
1938 if (nEvents==0 && (prototype==0 || prototype->
numEntries()==0)) {
1939 return new RooDataSet(
"emptyData",
"emptyData",whatVars) ;
1945 if (resampleProto) {
1946 randProtoOrder=
kTRUE ;
1949 if (randProtoOrder && prototype && prototype->
numEntries()!=nEvents) {
1950 coutI(
Generation) <<
"RooAbsPdf::generate (Re)randomizing event order in prototype dataset (Nevt=" << nEvents <<
")" << endl ;
1957 generated= context.
generate(nEvents,skipInit,extended);
1960 coutE(
Generation) <<
"RooAbsPdf::generate(" <<
GetName() <<
") do not have a valid generator context" << endl;
1991 coutE(
Generation) <<
"RooAbsPdf::generate(" <<
GetName() <<
") ERROR creating generator context" << endl ;
2008 for (i=0 ; i<nProto ; i++) {
2016 if (!resampleProto) {
2018 for (i=0 ; i<nProto ; i++) {
2027 for (i=0 ; i<nProto ; i++) {
2091 if(server == &arg)
continue;
2132 pc.defineString(
"dsetName",
"Name",0,
"") ;
2133 pc.defineInt(
"verbose",
"Verbose",0,0) ;
2134 pc.defineInt(
"extended",
"Extended",0,0) ;
2135 pc.defineInt(
"nEvents",
"NumEvents",0,0) ;
2136 pc.defineDouble(
"nEventsD",
"NumEventsD",0,-1.) ;
2137 pc.defineInt(
"expectedData",
"ExpectedData",0,0) ;
2140 pc.process(arg1,arg2,arg3,arg4,arg5,arg6) ;
2146 Double_t nEvents =
pc.getDouble(
"nEventsD") ;
2148 nEvents =
pc.getInt(
"nEvents") ;
2151 Bool_t extended =
pc.getInt(
"extended") ;
2152 Bool_t expectedData =
pc.getInt(
"expectedData") ;
2153 const char* dsetName =
pc.getString(
"dsetName") ;
2158 cxcoutI(
Generation) <<
" Extended mode active, number of events generated (" << nEvents <<
") is Poisson fluctuation on "
2159 <<
GetName() <<
"::expectedEvents() = " << nEvents << endl ;
2164 }
else if (nEvents==0) {
2165 cxcoutI(
Generation) <<
"No number of events specified , number of events generated is "
2173 if (dsetName && strlen(dsetName)>0) {
2174 data->SetName(dsetName) ;
2204 coutE(
InputArguments) <<
"RooAbsPdf::generateBinned(" <<
GetName() <<
") ERROR: No event count provided and p.d.f does not provide expected number of events" << endl ;
2210 if (expectedData || extended) {
2223 Int_t histOutSum(0) ;
2232 }
else if (extended) {
2242 if (hist->
weight()>histMax) {
2243 histMax = hist->
weight() ;
2246 histOutSum += histOut[i] ;
2251 if (!expectedData && !extended) {
2256 Int_t nEvtExtra = abs(
Int_t(nEvents)-histOutSum) ;
2257 Int_t wgt = (histOutSum>nEvents) ? -1 : 1 ;
2260 while(nEvtExtra>0) {
2263 hist->
get(ibinRand) ;
2266 if (ranY<hist->weight()) {
2268 histOut[ibinRand]++ ;
2271 if (histOut[ibinRand]>0) {
2272 histOut[ibinRand]-- ;
2284 hist->
set(histOut[i],
sqrt(1.0*histOut[i])) ;
2287 }
else if (expectedData) {
2310 return generate(whatVars,nEvents) ;
2387 cmdList.
Add(plotRange) ;
2392 cmdList.
Add(normRange2) ;
2395 if (plotRange || normRange2) {
2396 coutI(
Plotting) <<
"RooAbsPdf::plotOn(" <<
GetName() <<
") p.d.f was fitted in range and no explicit "
2397 << (plotRange?
"plot":
"") << ((plotRange&&normRange2)?
",":
"")
2398 << (normRange2?
"norm":
"") <<
" range was specified, using fit range as default" << endl ;
2406 pc.defineDouble(
"scaleFactor",
"Normalization",0,1.0) ;
2407 pc.defineInt(
"scaleType",
"Normalization",0,
Relative) ;
2408 pc.defineObject(
"compSet",
"SelectCompSet",0) ;
2409 pc.defineString(
"compSpec",
"SelectCompSpec",0) ;
2410 pc.defineObject(
"asymCat",
"Asymmetry",0) ;
2411 pc.defineDouble(
"rangeLo",
"Range",0,-999.) ;
2412 pc.defineDouble(
"rangeHi",
"Range",1,-999.) ;
2413 pc.defineString(
"rangeName",
"RangeWithName",0,
"") ;
2414 pc.defineString(
"normRangeName",
"NormRange",0,
"") ;
2415 pc.defineInt(
"rangeAdjustNorm",
"Range",0,0) ;
2416 pc.defineInt(
"rangeWNAdjustNorm",
"RangeWithName",0,0) ;
2417 pc.defineMutex(
"SelectCompSet",
"SelectCompSpec") ;
2418 pc.defineMutex(
"Range",
"RangeWithName") ;
2419 pc.allowUndefined() ;
2422 pc.process(cmdList) ;
2429 Double_t scaleFactor =
pc.getDouble(
"scaleFactor") ;
2431 const char* compSpec =
pc.getString(
"compSpec") ;
2433 Bool_t haveCompSel = ( (compSpec && strlen(compSpec)>0) || compSet) ;
2436 TString nameSuffix ;
2437 if (compSpec && strlen(compSpec)>0) {
2438 nameSuffix.Append(
"_Comp[") ;
2439 nameSuffix.Append(compSpec) ;
2440 nameSuffix.Append(
"]") ;
2441 }
else if (compSet) {
2442 nameSuffix.Append(
"_Comp[") ;
2444 nameSuffix.Append(
"]") ;
2448 pc.stripCmdList(cmdList,
"SelectCompSet,SelectCompSpec") ;
2452 RooCmdArg cnsuffix(
"CurveNameSuffix",0,0,0,0,nameSuffix.Data(),0,0,0) ;
2453 cmdList.
Add(&cnsuffix);
2462 <<
"): ERROR the 'Expected' scale option can only be used on extendable PDFs" << endl ;
2474 list<pair<Double_t,Double_t> > rangeLim ;
2477 if (
pc.hasProcessed(
"Range")) {
2481 rangeLim.push_back(make_pair(rangeLo,rangeHi)) ;
2482 adjustNorm =
pc.getInt(
"rangeAdjustNorm") ;
2483 hasCustomRange =
kTRUE ;
2486 << rangeLo <<
"," << rangeHi <<
"]" ;
2487 if (!
pc.hasProcessed(
"NormRange")) {
2488 ccoutI(
Plotting) <<
", curve is normalized to data in " << (adjustNorm?
"given":
"full") <<
" given range" << endl ;
2493 nameSuffix.Append(
Form(
"_Range[%f_%f]",rangeLo,rangeHi)) ;
2495 }
else if (
pc.hasProcessed(
"RangeWithName")) {
2498 strlcpy(tmp,
pc.getString(
"rangeName",0,
kTRUE),1024) ;
2499 char* rangeNameToken = strtok(tmp,
",") ;
2500 while(rangeNameToken) {
2503 rangeLim.push_back(make_pair(rangeLo,rangeHi)) ;
2504 rangeNameToken = strtok(0,
",") ;
2506 adjustNorm =
pc.getInt(
"rangeWNAdjustNorm") ;
2507 hasCustomRange =
kTRUE ;
2510 if (!
pc.hasProcessed(
"NormRange")) {
2511 ccoutI(
Plotting) <<
", curve is normalized to data in " << (adjustNorm?
"given":
"full") <<
" given range" << endl ;
2516 nameSuffix.Append(
Form(
"_Range[%s]",
pc.getString(
"rangeName"))) ;
2519 if (
pc.hasProcessed(
"NormRange")) {
2521 strlcpy(tmp,
pc.getString(
"normRangeName",0,
kTRUE),1024) ;
2522 char* rangeNameToken = strtok(tmp,
",") ;
2524 while(rangeNameToken) {
2527 rangeLim.push_back(make_pair(rangeLo,rangeHi)) ;
2528 rangeNameToken = strtok(0,
",") ;
2530 adjustNorm =
kTRUE ;
2531 hasCustomRange =
kTRUE ;
2532 coutI(
Plotting) <<
"RooAbsPdf::plotOn(" <<
GetName() <<
") p.d.f. curve is normalized using explicit choice of ranges '" <<
pc.getString(
"normRangeName",0,
kTRUE) <<
"'" << endl ;
2534 nameSuffix.Append(
Form(
"_NormRange[%s]",
pc.getString(
"rangeName"))) ;
2538 if (hasCustomRange && adjustNorm) {
2541 list<pair<Double_t,Double_t> >::iterator riter = rangeLim.begin() ;
2542 for (;riter!=rangeLim.end() ; ++riter) {
2546 scaleFactor *= rangeNevt/nExpected ;
2552 scaleFactor *= nExpected ;
2554 scaleFactor /= nExpected ;
2577 branchNodeSet.
remove(*arg) ;
2589 if (dirSelNodes->
getSize()>0) {
2590 coutI(
Plotting) <<
"RooAbsPdf::plotOn(" <<
GetName() <<
") directly selected PDF components: " << *dirSelNodes << endl ;
2596 coutE(
Plotting) <<
"RooAbsPdf::plotOn(" <<
GetName() <<
") ERROR: component selection set " << *compSet <<
" does not match any components of p.d.f." << endl ;
2598 coutE(
Plotting) <<
"RooAbsPdf::plotOn(" <<
GetName() <<
") ERROR: component selection expression '" << compSpec <<
"' does not select any components of p.d.f." << endl ;
2603 delete dirSelNodes ;
2607 RooCmdArg cnsuffix(
"CurveNameSuffix",0,0,0,0,nameSuffix.Data(),0,0,0) ;
2608 cmdList.
Add(&cnsuffix);
2651 <<
"): ERROR the 'Expected' scale option can only be used on extendable PDFs" << endl ;
2717 pc.defineString(
"label",
"Label",0,
"") ;
2718 pc.defineDouble(
"xmin",
"Layout",0,0.50) ;
2719 pc.defineDouble(
"xmax",
"Layout",1,0.99) ;
2720 pc.defineInt(
"ymaxi",
"Layout",0,
Int_t(0.95*10000)) ;
2721 pc.defineInt(
"showc",
"ShowConstants",0,0) ;
2722 pc.defineObject(
"params",
"Parameters",0,0) ;
2723 pc.defineString(
"formatStr",
"Format",0,
"NELU") ;
2724 pc.defineInt(
"sigDigit",
"Format",0,2) ;
2725 pc.defineInt(
"dummy",
"FormatArgs",0,0) ;
2726 pc.defineMutex(
"Format",
"FormatArgs") ;
2729 pc.process(cmdList) ;
2734 const char* label =
pc.getString(
"label") ;
2738 Int_t showc =
pc.getInt(
"showc") ;
2741 const char* formatStr =
pc.getString(
"formatStr") ;
2742 Int_t sigDigit =
pc.getInt(
"sigDigit") ;
2748 if (
pc.hasProcessed(
"FormatArgs")) {
2758 if (
pc.hasProcessed(
"FormatArgs")) {
2782 TString opts(options) ;
2804 TString opts = options;
2806 Bool_t showLabel= (label != 0 && strlen(label) > 0);
2817 if(showLabel)
ymin-= dy;
2823 box->SetFillColor(0);
2824 box->SetBorderSize(1);
2825 box->SetTextAlign(12);
2826 box->SetTextSize(0.04F);
2827 box->SetFillStyle(1001);
2828 box->SetFillColor(0);
2832 if(var->
isConstant() && !showConstants)
continue;
2834 TString *formatted= options ? var->
format(sigDigits, options) : var->
format(*formatCmd) ;
2835 box->AddText(formatted->Data());
2839 if(showLabel)
box->AddText(label);
2902 pdfOwner->
_norm = 0 ;
2918 name.Append(
"_Proj[") ;
2980 pc.defineObject(
"supNormSet",
"SupNormSet",0,0) ;
2981 pc.defineInt(
"numScanBins",
"ScanParameters",0,1000) ;
2982 pc.defineInt(
"intOrder",
"ScanParameters",1,2) ;
2983 pc.defineInt(
"doScanNum",
"ScanNumCdf",0,1) ;
2984 pc.defineInt(
"doScanAll",
"ScanAllCdf",0,0) ;
2985 pc.defineInt(
"doScanNon",
"ScanNoCdf",0,0) ;
2986 pc.defineMutex(
"ScanNumCdf",
"ScanAllCdf",
"ScanNoCdf") ;
2989 pc.process(arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8) ;
3000 Int_t numScanBins =
pc.getInt(
"numScanBins") ;
3001 Int_t intOrder =
pc.getInt(
"intOrder") ;
3002 Int_t doScanNum =
pc.getInt(
"doScanNum") ;
3003 Int_t doScanAll =
pc.getInt(
"doScanAll") ;
3004 Int_t doScanNon =
pc.getInt(
"doScanNon") ;
3019 coutI(
NumIntegration) <<
"RooAbsPdf::createCdf(" <<
GetName() <<
") integration over observable(s) " << iset <<
" involves numeric integration," << endl
3020 <<
" constructing cdf though numeric integration of sampled pdf in " << numScanBins <<
" bins and applying order "
3021 << intOrder <<
" interpolation on integrated histogram." << endl
3022 <<
" To override this choice of technique use argument ScanNone(), to change scan parameters use ScanParameters(nbins,order) argument" << endl ;
3034 ivar->
setBins(numScanBins,
"numcdf") ;
3145 if (config)
return config ;
3183 delete _genContext ;
3191 _genContext(context), _whatVars(whatVars), _protoData(protoData), _nGen(nGen), _extended(extended),
3192 _randProto(randProto), _resampleProto(resampleProto), _dsetName(dsetName), _init(
init)
header file containing the templated implementation of matrix inversion routines for use with ROOT's ...
char * Form(const char *fmt,...)
class to compute the Cholesky decomposition of a matrix
RooAbsArg is the common abstract base class for objects that represent a value (of arbitrary type) an...
RooArgSet * getObservables(const RooArgSet &set, Bool_t valueOnly=kTRUE) const
void clearValueAndShapeDirty() const
RooWorkspace * _myws
Prevent 'AlwaysDirty' mode for this node.
Bool_t dependsOn(const RooAbsCollection &serverList, const RooAbsArg *ignoreArg=0, Bool_t valueOnly=kFALSE) const
Test whether we depend on (ie, are served by) any object in the specified collection.
virtual TObject * Clone(const char *newname=0) const
Make a clone of an object using the Streamer facility.
virtual void Print(Option_t *options=0) const
Print TNamed name and title.
const Text_t * getStringAttribute(const Text_t *key) const
Get string attribute mapped under key 'key'.
RooArgSet * getParameters(const RooAbsData *data, Bool_t stripDisconnected=kTRUE) const
Create a list of leaf nodes in the arg tree starting with ourself as top node that don't match any of...
Bool_t isValueDirty() const
RooArgSet * getVariables(Bool_t stripDisconnected=kTRUE) const
Return RooArgSet with all variables (tree leaf nodes of expresssion tree)
virtual void constOptimizeTestStatistic(ConstOpCode opcode, Bool_t doAlsoTrackingOpt=kTRUE)
Interface function signaling a request to perform constant term optimization.
void setOperMode(OperMode mode, Bool_t recurseADirty=kTRUE)
Change cache operation mode to given mode.
Bool_t addOwnedComponents(const RooArgSet &comps)
Take ownership of the contents of 'comps'.
Bool_t getAttribute(const Text_t *name) const
Check if a named attribute is set. By default, all attributes are unset.
void setProxyNormSet(const RooArgSet *nset)
Forward a change in the cached normalization argset to all the registered proxies.
friend class RooProjectedPdf
RooArgSet * getComponents() const
Bool_t isConstant() const
void branchNodeServerList(RooAbsCollection *list, const RooAbsArg *arg=0, Bool_t recurseNonDerived=kFALSE) const
Fill supplied list with all branch nodes of the arg tree starting with ourself as top node.
TIterator * serverIterator() const
RooAbsArg * findServer(const char *name) const
OperMode operMode() const
void setInterpolationOrder(Int_t order)
Set interpolation order of RooHistFunct representing cache histogram.
RooAbsCategoryLValue is the common abstract base class for objects that represent a discrete value th...
RooAbsCollection * selectCommon(const RooAbsCollection &refColl) const
Create a subset of the current collection, consisting only of those elements that are contained as we...
virtual Bool_t add(const RooAbsArg &var, Bool_t silent=kFALSE)
Add the specified argument to list.
RooAbsArg * first() const
RooAbsCollection * selectByName(const char *nameList, Bool_t verbose=kFALSE) const
Create a subset of the current collection, consisting only of those elements with names matching the ...
virtual void Print(Option_t *options=0) const
This method must be overridden when a class wants to print itself.
RooAbsCollection * selectByAttrib(const char *name, Bool_t value) const
Create a subset of the current collection, consisting only of those elements with the specified attri...
std::string contentsString() const
Return comma separated list of contained object names as STL string.
virtual Bool_t remove(const RooAbsArg &var, Bool_t silent=kFALSE, Bool_t matchByNameOnly=kFALSE)
Remove the specified argument from our list.
TIterator * createIterator(Bool_t dir=kIterForward) const
RooAbsArg * find(const char *name) const
Find object with given name in list.
RooAbsData is the common abstract base class for binned and unbinned datasets.
virtual Int_t numEntries() const
RooAbsGenContext is the abstract base class for generator contexts of RooAbsPdf objects.
virtual RooDataSet * generate(Double_t nEvents=0, Bool_t skipInit=kFALSE, Bool_t extendedMode=kFALSE)
Generate the specified number of events with nEvents>0 and and return a dataset containing the genera...
virtual void setExpectedData(Bool_t)
virtual void setProtoDataOrder(Int_t *lut)
Set the traversal order of prototype data to that in the lookup tables passed as argument.
Normalization set with for above integral.
virtual ~CacheElem()
Destructor of normalization cache element.
void operModeHook(RooAbsArg::OperMode)
Dummy implementation.
RooAbsGenContext * _genContext
RooAbsPdf is the abstract interface for all probability density functions The class provides hybrid a...
GenSpec * prepareMultiGen(const RooArgSet &whatVars, const RooCmdArg &arg1=RooCmdArg::none(), const RooCmdArg &arg2=RooCmdArg::none(), const RooCmdArg &arg3=RooCmdArg::none(), const RooCmdArg &arg4=RooCmdArg::none(), const RooCmdArg &arg5=RooCmdArg::none(), const RooCmdArg &arg6=RooCmdArg::none())
Prepare GenSpec configuration object for efficient generation of multiple datasets from identical spe...
RooObjCacheManager _normMgr
Double_t getNorm(const RooArgSet &nset) const
static Bool_t evalError()
Return the evaluation error flag.
virtual void generateEvent(Int_t code)
Interface for generation of anan event using the algorithm corresponding to the specified code.
virtual ~RooAbsPdf()
Destructor.
void setGeneratorConfig()
Remove the specialized numeric MC generator configuration associated with this object.
virtual void resetErrorCounters(Int_t resetValue=10)
Reset error counter to given value, limiting the number of future error messages for this pdf to 'res...
virtual RooAbsReal * createChi2(RooDataHist &data, const RooCmdArg &arg1=RooCmdArg::none(), const RooCmdArg &arg2=RooCmdArg::none(), const RooCmdArg &arg3=RooCmdArg::none(), const RooCmdArg &arg4=RooCmdArg::none(), const RooCmdArg &arg5=RooCmdArg::none(), const RooCmdArg &arg6=RooCmdArg::none(), const RooCmdArg &arg7=RooCmdArg::none(), const RooCmdArg &arg8=RooCmdArg::none())
Create a from a histogram and this function.
virtual RooFitResult * chi2FitTo(RooDataHist &data, const RooLinkedList &cmdList)
Calls RooAbsPdf::createChi2(RooDataSet& data, const RooLinkedList& cmdList) and returns fit result.
static int verboseEval()
Return global level of verbosity for p.d.f. evaluations.
Bool_t traceEvalPdf(Double_t value) const
Check that passed value is positive and not 'not-a-number'.
virtual RooAbsReal * createNLL(RooAbsData &data, const RooLinkedList &cmdList)
Construct representation of -log(L) of PDFwith given dataset.
virtual RooAbsGenContext * genContext(const RooArgSet &vars, const RooDataSet *prototype=0, const RooArgSet *auxProto=0, Bool_t verbose=kFALSE) const
Interface function to create a generator context from a p.d.f.
RooAbsReal * createScanCdf(const RooArgSet &iset, const RooArgSet &nset, Int_t numScanBins, Int_t intOrder)
TString _normRange
MC generator configuration specific for this object.
void setNormRange(const char *rangeName)
virtual Int_t getGenerator(const RooArgSet &directVars, RooArgSet &generateVars, Bool_t staticInitOK=kTRUE) const
Load generatedVars with the subset of directVars that we can generate events for, and return a code t...
RooNumGenConfig * specialGeneratorConfig() const
Returns the specialized integrator configuration for this RooAbsReal.
Bool_t canBeExtended() const
virtual Bool_t selfNormalized() const
virtual Bool_t traceEvalHook(Double_t value) const
WVE 08/21/01 Probably obsolete now.
virtual void printMultiline(std::ostream &os, Int_t contents, Bool_t verbose=kFALSE, TString indent="") const
Print multi line detailed information of this RooAbsPdf.
Double_t analyticalIntegralWN(Int_t code, const RooArgSet *normSet, const char *rangeName=0) const
Analytical integral with normalization (see RooAbsReal::analyticalIntegralWN() for further informatio...
RooDataSet * generate(const RooArgSet &whatVars, Int_t nEvents, const RooCmdArg &arg1, const RooCmdArg &arg2=RooCmdArg::none(), const RooCmdArg &arg3=RooCmdArg::none(), const RooCmdArg &arg4=RooCmdArg::none(), const RooCmdArg &arg5=RooCmdArg::none())
See RooAbsPdf::generate(const RooArgSet&,const RooCmdArg&,const RooCmdArg&,const RooCmdArg&,...
virtual RooAbsGenContext * autoGenContext(const RooArgSet &vars, const RooDataSet *prototype=0, const RooArgSet *auxProto=0, Bool_t verbose=kFALSE, Bool_t autoBinned=kTRUE, const char *binnedTag="") const
virtual Double_t extendedTerm(Double_t observedEvents, const RooArgSet *nset=0) const
Returned the extended likelihood term (Nexpect - Nobserved*log(NExpected) of this PDF for the given n...
virtual void printValue(std::ostream &os) const
Print value of p.d.f, also print normalization integral that was last used, if any.
virtual RooArgSet * getAllConstraints(const RooArgSet &observables, RooArgSet &constrainedParams, Bool_t stripDisconnected=kTRUE) const
This helper function finds and collects all constraints terms of all coponent p.d....
virtual RooFitResult * fitTo(RooAbsData &data, const RooCmdArg &arg1=RooCmdArg::none(), const RooCmdArg &arg2=RooCmdArg::none(), const RooCmdArg &arg3=RooCmdArg::none(), const RooCmdArg &arg4=RooCmdArg::none(), const RooCmdArg &arg5=RooCmdArg::none(), const RooCmdArg &arg6=RooCmdArg::none(), const RooCmdArg &arg7=RooCmdArg::none(), const RooCmdArg &arg8=RooCmdArg::none())
Fit PDF to given dataset.
static void raiseEvalError()
Raise the evaluation error flag.
virtual Bool_t syncNormalization(const RooArgSet *dset, Bool_t adjustProxies=kTRUE) const
Verify that the normalization integral cached with this PDF is valid for given set of normalization o...
virtual Double_t getValV(const RooArgSet *set=0) const
Return current value, normalized by integrating over the observables in 'nset'.
virtual RooArgSet * getConstraints(const RooArgSet &, RooArgSet &, Bool_t) const
virtual RooDataHist * generateBinned(const RooArgSet &whatVars, Double_t nEvents, const RooCmdArg &arg1, const RooCmdArg &arg2=RooCmdArg::none(), const RooCmdArg &arg3=RooCmdArg::none(), const RooCmdArg &arg4=RooCmdArg::none(), const RooCmdArg &arg5=RooCmdArg::none())
As RooAbsPdf::generateBinned(const RooArgSet&, const RooCmdArg&,const RooCmdArg&, const RooCmdArg&,...
virtual RooPlot * paramOn(RooPlot *frame, const RooCmdArg &arg1=RooCmdArg::none(), const RooCmdArg &arg2=RooCmdArg::none(), const RooCmdArg &arg3=RooCmdArg::none(), const RooCmdArg &arg4=RooCmdArg::none(), const RooCmdArg &arg5=RooCmdArg::none(), const RooCmdArg &arg6=RooCmdArg::none(), const RooCmdArg &arg7=RooCmdArg::none(), const RooCmdArg &arg8=RooCmdArg::none())
Add a box with parameter values (and errors) to the specified frame.
void setTraceCounter(Int_t value, Bool_t allNodes=kFALSE)
Reset trace counter to given value, limiting the number of future trace messages for this pdf to 'val...
RooAbsReal * createCdf(const RooArgSet &iset, const RooArgSet &nset=RooArgSet())
Create a cumulative distribution function of this p.d.f in terms of the observables listed in iset.
virtual const RooAbsReal * getNormObj(const RooArgSet *set, const RooArgSet *iset, const TNamed *rangeName=0) const
Return pointer to RooAbsReal object that implements calculation of integral over observables iset in ...
virtual Double_t getLogVal(const RooArgSet *set=0) const
Return the log of the current value with given normalization An error message is printed if the argum...
Int_t * randomizeProtoOrder(Int_t nProto, Int_t nGen, Bool_t resample=kFALSE) const
Return lookup table with randomized access order for prototype events, given nProto prototype data ev...
virtual Double_t expectedEvents(const RooArgSet *nset) const
Return expected number of events from this p.d.f for use in extended likelihood calculations.
void setNormRangeOverride(const char *rangeName)
virtual RooDataSet * generateSimGlobal(const RooArgSet &whatVars, Int_t nEvents)
Special generator interface for generation of 'global observables' – for RooStats tools.
virtual Bool_t isDirectGenSafe(const RooAbsArg &arg) const
Check if given observable can be safely generated using the pdfs internal generator mechanism (if tha...
const RooNumGenConfig * getGeneratorConfig() const
Return the numeric MC generator configuration used for this object.
virtual void initGenerator(Int_t code)
Interface for one-time initialization to setup the generator for the specified code.
virtual ExtendMode extendMode() const
RooAbsPdf()
Default constructor.
virtual RooAbsGenContext * binnedGenContext(const RooArgSet &vars, Bool_t verbose=kFALSE) const
Return a binned generator context.
static RooNumGenConfig * defaultGeneratorConfig()
Returns the default numeric MC generator configuration for all RooAbsReals.
RooNumGenConfig * _specGeneratorConfig
RooArgSet * _normSet
Normalization integral (owned by _normMgr)
static TString _normRangeOverride
static Int_t _verboseEval
static void clearEvalError()
Clear the evaluation error flag.
virtual RooAbsPdf * createProjection(const RooArgSet &iset)
Return a p.d.f that represent a projection of this p.d.f integrated over given observables.
virtual RooPlot * plotOn(RooPlot *frame, const RooCmdArg &arg1=RooCmdArg::none(), const RooCmdArg &arg2=RooCmdArg::none(), const RooCmdArg &arg3=RooCmdArg::none(), const RooCmdArg &arg4=RooCmdArg::none(), const RooCmdArg &arg5=RooCmdArg::none(), const RooCmdArg &arg6=RooCmdArg::none(), const RooCmdArg &arg7=RooCmdArg::none(), const RooCmdArg &arg8=RooCmdArg::none(), const RooCmdArg &arg9=RooCmdArg::none(), const RooCmdArg &arg10=RooCmdArg::none()) const
Helper calling plotOn(RooPlot*, RooLinkedList&) const.
virtual Double_t getMax(const char *name=0) const
virtual Double_t getMin(const char *name=0) const
RooAbsReal is the common abstract base class for objects that represent a real value and implements f...
void plotOnCompSelect(RooArgSet *selNodes) const
Helper function for plotting of composite p.d.fs.
virtual RooPlot * plotOn(RooPlot *frame, const RooCmdArg &arg1=RooCmdArg(), const RooCmdArg &arg2=RooCmdArg(), const RooCmdArg &arg3=RooCmdArg(), const RooCmdArg &arg4=RooCmdArg(), const RooCmdArg &arg5=RooCmdArg(), const RooCmdArg &arg6=RooCmdArg(), const RooCmdArg &arg7=RooCmdArg(), const RooCmdArg &arg8=RooCmdArg(), const RooCmdArg &arg9=RooCmdArg(), const RooCmdArg &arg10=RooCmdArg()) const
Plot (project) PDF on specified frame.
virtual Double_t evaluate() const =0
Evaluate this PDF / function / constant. Needs to be overridden by all derived classes.
TString integralNameSuffix(const RooArgSet &iset, const RooArgSet *nset=0, const char *rangeName=0, Bool_t omitEmpty=kFALSE) const
Construct string with unique suffix name to give to integral object that encodes integrated observabl...
RooAbsReal * createIntRI(const RooArgSet &iset, const RooArgSet &nset=RooArgSet())
Utility function for createRunningIntegral that construct an object implementing the standard (analyt...
RooFitResult * chi2FitDriver(RooAbsReal &fcn, RooLinkedList &cmdList)
Internal driver function for chi2 fits.
virtual void printMultiline(std::ostream &os, Int_t contents, Bool_t verbose=kFALSE, TString indent="") const
Structure printing.
virtual void enableOffsetting(Bool_t)
Double_t getVal(const RooArgSet *set=0) const
Evaluate object. Returns either cached value or triggers a recalculation.
RooAbsReal * createIntegral(const RooArgSet &iset, const RooCmdArg &arg1, const RooCmdArg &arg2=RooCmdArg::none(), const RooCmdArg &arg3=RooCmdArg::none(), const RooCmdArg &arg4=RooCmdArg::none(), const RooCmdArg &arg5=RooCmdArg::none(), const RooCmdArg &arg6=RooCmdArg::none(), const RooCmdArg &arg7=RooCmdArg::none(), const RooCmdArg &arg8=RooCmdArg::none()) const
Create an object that represents the integral of the function over one or more observables listed in ...
Bool_t plotSanityChecks(RooPlot *frame) const
Utility function for plotOn(), perform general sanity check on frame to ensure safe plotting operatio...
static void setEvalErrorLoggingMode(ErrorLoggingMode m)
Set evaluation error logging mode.
virtual Double_t analyticalIntegral(Int_t code, const char *rangeName=0) const
Implements the actual analytical integral(s) advertised by getAnalyticalIntegral.
const RooNumIntConfig * getIntegratorConfig() const
Return the numeric integration configuration used for this object.
virtual Bool_t isBinnedDistribution(const RooArgSet &) const
void logEvalError(const char *message, const char *serverValueString=0) const
Log evaluation error message.
RooDataHist * fillDataHist(RooDataHist *hist, const RooArgSet *nset, Double_t scaleFactor, Bool_t correctForBinVolume=kFALSE, Bool_t showProgress=kFALSE) const
Fill a RooDataHist with values sampled from this function at the bin centers.
RooAddition calculates the sum of a set of RooAbsReal terms, or when constructed with two sets,...
RooArgSet is a container object that can hold multiple RooAbsArg objects.
virtual Bool_t add(const RooAbsCollection &col, Bool_t silent=kFALSE)
Add a collection of arguments to this collection by calling add() for each element in the source coll...
RooBinnedGenContext is an efficient implementation of the generator context specific for binned pdfs.
T * getObj(const RooArgSet *nset, Int_t *sterileIndex=0, const TNamed *isetRangeName=0)
Int_t setObj(const RooArgSet *nset, T *obj, const TNamed *isetRangeName=0)
RooCachedReal is an implementation of RooAbsCachedReal that can cache any external RooAbsReal input f...
void setCacheSource(Bool_t flag)
RooCmdArg is a named container for two doubles, two integers two object points and three string point...
void setInt(Int_t idx, Int_t value)
Class RooCmdConfig is a configurable parser for RooCmdArg named arguments.
RooConstraintSum calculates the sum of the -(log) likelihoods of a set of RooAbsPfs that represent co...
RooDataSet is a container class to hold N-dimensional binned data.
virtual Double_t weight() const
void set(Double_t weight, Double_t wgtErr=-1)
Increment the weight of the bin enclosing the coordinates given by 'row' by the specified amount.
virtual Double_t sumEntries() const
virtual Int_t numEntries() const
Return the number of bins.
virtual const RooArgSet * get() const
RooDataSet is a container class to hold unbinned data.
RooFitResult is a container class to hold the input and output of a PDF fit to a dataset.
const TMatrixDSym & covarianceMatrix() const
Return covariance matrix.
Class RooGenContext implement a universal generator context for all RooAbsPdf classes that do not hav...
RooInt is a minimal implementation of a TObject holding a Int_t value.
RooLinkedList is an collection class for internal use, storing a collection of RooAbsArg pointers in ...
TObject * FindObject(const char *name) const
Return pointer to obejct with given name.
virtual void Add(TObject *arg)
RooMinimizer is a wrapper class around ROOT::Fit:Fitter that provides a seamless interface between th...
RooMinuit is a wrapper class around TFitter/TMinuit that provides a seamless interface between the MI...
Class RooNLLVar implements a a -log(likelihood) calculation from a dataset and a PDF.
static const char * str(const TNamed *ptr)
Return C++ string corresponding to given TNamed pointer.
RooNameSet is a utility class that stores the names the objects in a RooArget.
RooArgSet * select(const RooArgSet &list) const
Construct a RooArgSet of objects in input 'list' whose names match to those in the internal name list...
void setNameList(const char *givenList)
const char * content() const
Class RooNumCdf is an implementation of RooNumRunningInt specialized to calculate cumulative distribu...
RooNumGenConfig holds the configuration parameters of the various numeric integrators used by RooReal...
static RooNumGenConfig & defaultConfig()
Return reference to instance of default numeric integrator configuration object.
A RooPlot is a plot frame and a container for graphics objects within that frame.
void addObject(TObject *obj, Option_t *drawOptions="", Bool_t invisible=kFALSE)
Add a generic object to this plot.
Double_t getFitRangeNEvt() const
Return the number of events in the fit range.
Double_t getFitRangeBinW() const
Return the bin width that is being used to normalise the PDF.
const RooArgSet * getNormVars() const
RooAbsRealLValue * getPlotVar() const
void updateNormVars(const RooArgSet &vars)
Install the given set of observables are reference normalization variables for this frame.
virtual void printStream(std::ostream &os, Int_t contents, StyleOption style, TString indent="") const
Print description of object on ostream, printing contents set by contents integer,...
static UInt_t integer(UInt_t max, TRandom *generator=randomGenerator())
Return an integer uniformly distributed from [0,n-1].
static TRandom * randomGenerator()
Return a pointer to a singleton random-number generator implementation.
RooRealIntegral performs hybrid numerical/analytical integrals of RooAbsReal objects.
const RooArgSet & numIntRealVars() const
RooRealVar represents a fundamental (non-derived) real valued object.
void setBins(Int_t nBins, const char *name=0)
void setRange(const char *name, Double_t min, Double_t max)
Set range named 'name to [min,max].
TString * format(const RooCmdArg &formatArg) const
Format contents of RooRealVar for pretty printing on RooPlot parameter boxes.
Bool_t defineSetInternal(const char *name, const RooArgSet &aset)
const RooArgSet * set(const char *name)
Return pointer to previously defined named set with given nmame If no such set is found a null pointe...
Iterator abstract base class.
virtual TObject * Next()=0
TMatrixTSym< Element > & Similarity(const TMatrixT< Element > &n)
Calculate B * (*this) * B^T , final matrix will be (nrowsb x nrowsb) This is a similarity transform w...
The TNamed class is the base class for all named ROOT classes.
virtual const char * GetTitle() const
Returns title of object.
virtual const char * GetName() const
Returns name of object.
Mother of all ROOT objects.
A Pave (see TPave) with text, lines or/and boxes inside.
virtual Int_t Poisson(Double_t mean)
Generates a random integer N according to a Poisson law.
virtual Double_t Uniform(Double_t x1=1)
Returns a uniform deviate on the interval (0, x1).
virtual UInt_t Integer(UInt_t imax)
Returns a random integer on [ 0, imax-1 ].
void box(Int_t pat, Double_t x1, Double_t y1, Double_t x2, Double_t y2)
VecExpr< UnaryOp< Fabs< T >, VecExpr< A, T, D >, T >, T, D > fabs(const VecExpr< A, T, D > &rhs)
RooCmdArg NormRange(const char *rangeNameList)
RooCmdArg SupNormSet(const RooArgSet &nset)
RooCmdArg Range(const char *rangeName, Bool_t adjustNorm=kTRUE)
RooCmdArg Normalization(Double_t scaleFactor)
static constexpr double pc