144 RooAbsArg(
name,title), _plotMin(0), _plotMax(0), _plotBins(100),
145 _value(0), _unit(unit), _forceNumInt(
kFALSE), _specIntegratorConfig(0), _selectComp(
kTRUE), _lastNSet(0)
158 Double_t inMaxVal,
const char *unit) :
159 RooAbsArg(
name,title), _plotMin(inMinVal), _plotMax(inMaxVal), _plotBins(100),
160 _value(0), _unit(unit), _forceNumInt(
kFALSE), _specIntegratorConfig(0), _selectComp(
kTRUE), _lastNSet(0)
172 RooAbsArg(other,
name), _plotMin(other._plotMin), _plotMax(other._plotMax),
173 _plotBins(other._plotBins), _value(other._value), _unit(other._unit), _label(other._label),
174 _forceNumInt(other._forceNumInt), _selectComp(other._selectComp), _lastNSet(0)
225 return (
getVal()==value) ;
245 if (!assumeSameType) {
261 if(appendUnit && 0 != strlen(
getUnit())) {
313 auto item = evalData.
spans.find(
this);
314 if (item != evalData.
spans.end()) {
320 std::map<RooFit::Detail::DataKey, RooSpan<const double>> dataSpans;
321 for (
auto const &evalDataItem : evalData.
spans) {
322 dataSpans[evalDataItem.first] = evalDataItem.second;
329 evalData.
spans[
this] = results;
373 <<
"): validation failed: " << value << endl ;
393 const RooArgSet* ,
const char* rangeName)
const
424 if (code==0)
return getVal(normSet) ;
438 coutF(Eval) <<
"RooAbsReal::analyticalIntegral(" <<
GetName() <<
") code " << code <<
" not implemented" << endl ;
499 os <<
indent <<
"--- RooAbsReal ---" << endl;
517 for (
auto const& arg : paramsOfInterest) {
523 name.append(arg->GetName()) ;
567 pc.
process(arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8) ;
598 if (!rangeName || strchr(rangeName,
',')==0) {
608 for (
const std::string& token : tokens) {
610 components.
add(*compIntegral);
614 title.
Prepend(
"Integral of ") ;
642 title.
Prepend(
"Integral of ") ;
667 title.
Prepend(
"Integral of ") ;
676 if (integrand !=
this) {
684 if (integrand ==
this && iset.
getSize()>0) {
685 coutI(Integration) <<
GetName() <<
" : multidimensional integration over observables with parameterized ranges in terms of other integrated observables detected, using recursive integration strategy to construct final integral" << endl ;
689 integrand = integral ;
697 coutE(Integration) <<
GetName() <<
" : ERROR while defining recursive integral over observables with parameterized integration ranges, please check that integration rangs specify uniquely defined integral " << endl;
706 if (cacheParamsStr && strlen(cacheParamsStr)) {
713 cxcoutD(Caching) <<
"RooAbsReal::createIntObj(" <<
GetName() <<
") INFO: constructing " << cacheParams.
getSize()
714 <<
"-dim value cache for integral over " << iset2 <<
" as a function of " << cacheParams <<
" in range " << (rangeName?rangeName:
"<none>") << endl ;
724 integral = cachedIntegral ;
754 for (
const auto aarg : allObs) {
769 obsWithParamRange.
add(*aarg) ;
770 obsWithFixedRange.
remove(*aarg) ;
771 obsServingAsRangeParams.
add(loBoundObs,
false) ;
772 obsServingAsRangeParams.
add(hiBoundObs,
false) ;
779 RooArgSet obsWithFixedRangeNP(obsWithFixedRange) ;
780 obsWithFixedRangeNP.
remove(obsServingAsRangeParams) ;
783 RooArgSet obsWithParamRangeNP(obsWithParamRange) ;
784 obsWithParamRangeNP.
remove(obsServingAsRangeParams) ;
788 innerObs.
add(obsWithFixedRangeNP) ;
789 innerObs.
add(obsWithParamRangeNP) ;
806 name.Append(
"_Int[") ;
821 name.Append(rangeName) ;
824 }
else if (!omitEmpty) {
825 name.Append(
"_Int[]") ;
828 if (nset && nset->
getSize()>0 ) {
833 name.Append(
"_Norm[") ;
906 for (
const auto arg : dependentVars) {
907 if(!arg->isFundamental() && !
dynamic_cast<const RooAbsLValue*
>(arg)) {
908 coutE(Plotting) <<
ClassName() <<
"::" <<
GetName() <<
":createPlotProjection: variable \"" << arg->GetName()
909 <<
"\" of wrong type: " << arg->ClassName() << endl;
916 <<
"\" is not a dependent and will be ignored." << endl;
921 leafNodes.
replace(*found,*arg);
923 leafNodes.
add(*arg) ;
927 arg->getObservables(&leafNodes, lvDep);
928 for (
const auto lvs : lvDep) {
932 leafNodes.
add(*lvs) ;
939 if(0 != projectedVars && projectedVars->
find(arg->GetName())) {
941 <<
"\" cannot be both a dependent and a projected variable." << endl;
947 if(0 != projectedVars) leafNodes.
remove(*projectedVars,
kTRUE);
952 coutE(Plotting) <<
"RooAbsPdf::createPlotProjection(" <<
GetName() <<
") Couldn't deep-clone PDF, abort," << endl ;
965 delete plotLeafNodes ;
969 if(0 != projectedVars) normSet.
add(*projectedVars);
978 if(0 == projectedVars) projectedVars= ∅
984 title.
Prepend(
"Projection of ");
989 if(0 == projected || !projected->
isValid()) {
990 coutE(Plotting) <<
ClassName() <<
"::" <<
GetName() <<
":createPlotProjection: cannot integrate out ";
993 if(0 != projected)
delete projected;
998 static_cast<RooRealIntegral*
>(projected)->setAllowComponentSelection(
true);
1035 coutE(InputArguments) <<
ClassName() <<
"::" <<
GetName() <<
":fillHistogram: no valid histogram to fill" << endl;
1041 if(hdim != plotVars.
getSize()) {
1042 coutE(InputArguments) <<
ClassName() <<
"::" <<
GetName() <<
":fillHistogram: plotVars has the wrong dimension" << endl;
1050 for(
Int_t index= 0; index < plotVars.
getSize(); index++) {
1055 <<
"\" of type " << var->
ClassName() << endl;
1060 <<
":fillHistogram: WARNING: variable is not an explicit dependent: " << realVar->
GetName() << endl;
1076 if (projectedVars) {
1077 allDeps.
add(*projectedVars) ;
1080 coutE(InputArguments) <<
"RooAbsReal::fillHistogram(" <<
GetName() <<
") error in checkObservables, abort" << endl ;
1088 cxcoutD(Plotting) <<
"RooAbsReal::fillHistogram(" <<
GetName() <<
") plot projection object is " << projected->
GetName() << endl ;
1091 Int_t xbins(0),ybins(1),zbins(1);
1103 assert(0 != zvar && 0 != zaxis);
1104 if (scaleForDensity) {
1112 assert(0 != yvar && 0 != yaxis);
1113 if (scaleForDensity) {
1121 assert(0 != xvar && 0 != xaxis);
1122 if (scaleForDensity) {
1127 coutE(InputArguments) <<
ClassName() <<
"::" <<
GetName() <<
":fillHistogram: cannot fill histogram with "
1128 << hdim <<
" dimensions" << endl;
1135 Int_t xbin(0),ybin(0),zbin(0);
1136 Int_t bins= xbins*ybins*zbins;
1137 for(
Int_t bin= 0; bin < bins; bin++) {
1140 if(bin % (xbins*ybins) == 0) {
1146 if(bin % xbins == 0) {
1147 ybin= (ybin%ybins) + 1;
1152 xbin= (xbin%xbins) + 1;
1156 coutE(InputArguments) <<
"RooAbsReal::fillHistogram: Internal Error!" << endl;
1162 coutW(Plotting) <<
"WARNING: Function evaluation error(s) at coordinates [x]=" << xvar->
getVal() ;
1163 if (hdim==2)
ccoutW(Plotting) <<
" [y]=" << yvar->
getVal() ;
1164 if (hdim==3)
ccoutW(Plotting) <<
" [z]=" << zvar->
getVal() ;
1165 ccoutW(Plotting) << endl ;
1211 coutE(InputArguments) <<
ClassName() <<
"::" <<
GetName() <<
":fillDataHist: no valid RooDataHist to fill" << endl;
1218 coutE(InputArguments) <<
"RooAbsReal::fillDataHist(" <<
GetName() <<
") error in checkObservables, abort" << endl ;
1235 if (showProgress && (i%onePct==0)) {
1236 ccoutP(Eval) <<
"." << flush ;
1239 Double_t binVal = theClone->
getVal(normSet?normSet:obs)*scaleFactor ;
1240 if (correctForBinSize) {
1243 hist->
set(i, binVal, 0.);
1272 strlcpy(buf,varNameList,1024) ;
1273 char* varName = strtok(buf,
",:") ;
1278 varName = strtok(0,
",") ;
1280 varName = strtok(0,
",") ;
1374 pc.
defineInt(
"intBinning",
"IntrinsicBinning",0,2) ;
1375 pc.
defineInt(
"extended",
"Extended",0,2) ;
1379 pc.
defineObject(
"projObs",
"ProjectedObservables",0,0) ;
1382 pc.
defineMutex(
"SelectCompSet",
"SelectCompSpec") ;
1384 pc.
defineMutex(
"IntrinsicBinning",
"BinningName") ;
1385 pc.
defineMutex(
"IntrinsicBinning",
"BinningSpec") ;
1413 if (!pdfSelf && doExtended>0) {
1414 coutW(InputArguments) <<
"RooAbsReal::createHistogram(" <<
GetName() <<
") WARNING extended mode requested for a non-pdf object, ignored" << endl ;
1418 coutW(InputArguments) <<
"RooAbsReal::createHistogram(" <<
GetName() <<
") WARNING extended mode requested for a non-extendable pdf, ignored" << endl ;
1421 if (pdfSelf && doExtended==2) {
1425 const char* compSpec = pc.
getString(
"compSpec") ;
1427 Bool_t haveCompSel = ( (compSpec && strlen(compSpec)>0) || compSet) ;
1430 if (doIntBinning>0) {
1435 if (doIntBinning==1) {
1436 coutW(InputArguments) <<
"RooAbsReal::createHistogram(" <<
GetName()
1437 <<
") WARNING, intrinsic model binning requested for histogram, but model does not define bin boundaries, reverting to default binning"<< endl ;
1440 if (doIntBinning==2) {
1441 coutI(InputArguments) <<
"RooAbsReal::createHistogram(" <<
GetName()
1442 <<
") INFO: Model has intrinsic binning definition, selecting that binning for the histogram"<< endl ;
1445 for (list<double>::iterator it=bl->begin() ; it!=bl->end() ; ++it) { ba[i++] = *it ; }
1446 intBinning =
new RooBinning(bl->size()-1,ba) ;
1452 pc.
stripCmdList(argListCreate,
"Scaling,ProjectedObservables,IntrinsicBinning,SelectCompSet,SelectCompSpec,Extended") ;
1457 argListCreate.
Add(&tmp) ;
1476 branchNodeSet.
remove(*arg) ;
1487 if (dirSelNodes->
getSize()>0) {
1488 coutI(Plotting) <<
"RooAbsPdf::createHistogram(" <<
GetName() <<
") directly selected PDF components: " << *dirSelNodes << endl ;
1494 coutE(Plotting) <<
"RooAbsPdf::createHistogram(" <<
GetName() <<
") ERROR: component selection set " << *compSet <<
" does not match any components of p.d.f." << endl ;
1496 coutE(Plotting) <<
"RooAbsPdf::createHistogram(" <<
GetName() <<
") ERROR: component selection expression '" << compSpec <<
"' does not select any components of p.d.f." << endl ;
1500 delete dirSelNodes ;
1536 for (
unsigned int i = 0; i < branchNodeSet.
size(); ++i) {
1537 const auto arg = branchNodeSet[i];
1539 branchNodeSet.
remove(*arg) ;
1546 for (
const auto arg : branchNodeSet) {
1555 for (
const auto arg : branchNodeSet) {
1556 for (
const auto selNode : *selNodes) {
1557 if (selNode->dependsOn(*arg)) {
1564 for (
const auto arg : branchNodeSet) {
1565 if (arg->dependsOn(*selNodes)) {
1570 tmp.
remove(*selNodes,
true);
1573 coutI(Plotting) <<
"RooAbsPdf::plotOn(" <<
GetName() <<
") indirectly selected PDF components: " << tmp << endl ;
1576 for (
const auto arg : branchNodeSet) {
1577 Bool_t select = selNodes->
find(arg->GetName()) !=
nullptr;
1728 argList.
Add(&rnorm) ;
1730 std::vector<string> rlist;
1734 rlist.emplace_back(rangeNameToken);
1737 for (
const auto& rangeString : rlist) {
1739 rcmd->
setString(0, rangeString.c_str());
1750 pc.
defineString(
"curveNameSuffix",
"CurveNameSuffix",0,
"") ;
1764 pc.
defineInt(
"doEvalError",
"EvalErrorValue",0,0) ;
1765 pc.
defineInt(
"shiftToZero",
"ShiftToZero",0,0) ;
1770 pc.
defineSet(
"errorPars",
"VisualizeError",0) ;
1771 pc.
defineInt(
"linearMethod",
"VisualizeError",0,0) ;
1772 pc.
defineInt(
"binProjData",
"ProjData",0,0) ;
1775 pc.
defineInt(
"numee",
"PrintEvalErrors",0,10) ;
1776 pc.
defineInt(
"rangeAdjustNorm",
"Range",0,0) ;
1777 pc.
defineInt(
"rangeWNAdjustNorm",
"RangeWithName",0,0) ;
1781 pc.
defineInt(
"markerColor",
"MarkerColor",0,-999) ;
1782 pc.
defineInt(
"markerStyle",
"MarkerStyle",0,-999) ;
1784 pc.
defineInt(
"lineColor",
"LineColor",0,-999) ;
1785 pc.
defineInt(
"lineStyle",
"LineStyle",0,-999) ;
1786 pc.
defineInt(
"lineWidth",
"LineWidth",0,-999) ;
1787 pc.
defineInt(
"fillColor",
"FillColor",0,-999) ;
1788 pc.
defineInt(
"fillStyle",
"FillStyle",0,-999) ;
1790 pc.
defineInt(
"curveInvisible",
"Invisible",0,0) ;
1791 pc.
defineInt(
"showProg",
"ShowProgress",0,0) ;
1793 pc.
defineInt(
"interleave",
"NumCPU",1,0) ;
1797 pc.
defineInt(
"moveToBack",
"MoveToBack",0,0) ;
1801 pc.
defineMutex(
"VisualizeError",
"VisualizeErrorData") ;
1816 if (!drawOpt.
Contains(
"P") && errFR) {
1843 const char* sliceCatState = pc.
getString(
"sliceCatState",0,
kTRUE) ;
1845 if (sliceCatState) {
1854 auto iter = sliceCatList.
begin();
1855 for (
unsigned int i=0; i < catTokens.size(); ++i) {
1856 if (
auto scat =
static_cast<RooCategory*
>(*iter)) {
1858 scat->setLabel(catTokens[i]) ;
1873 if (vlines==2) vlines=0 ;
1879 if (vlines==2) vlines=0 ;
1899 coutE(InputArguments) <<
"RooAbsReal::plotOn(" <<
GetName() <<
") cannot find existing curve " << o.
addToCurveName <<
" to add to in RooPlot" << endl ;
1905 cxcoutD(Plotting) <<
"RooAbsReal::plotOn(" <<
GetName() <<
") Preprocessing: have slice " << *sliceSet << endl ;
1910 for (
const auto sliceArg : *sliceSet) {
1913 projectedVars.
remove(*arg) ;
1915 coutI(Plotting) <<
"RooAbsReal::plotOn(" <<
GetName() <<
") slice variable "
1916 << sliceArg->GetName() <<
" was not projected anyway" << endl ;
1919 }
else if (projSet) {
1920 cxcoutD(Plotting) <<
"RooAbsReal::plotOn(" <<
GetName() <<
") Preprocessing: have projSet " << *projSet << endl ;
1923 cxcoutD(Plotting) <<
"RooAbsReal::plotOn(" <<
GetName() <<
") Preprocessing: have neither sliceSet nor projSet " << endl ;
1928 cxcoutD(Plotting) <<
"RooAbsReal::plotOn(" <<
GetName() <<
") Preprocessing: projectedVars = " << projectedVars << endl ;
1960 if ((fillColor != -999 || fillStyle != -999) && !drawOpt.
Contains(
"F")) {
1961 coutW(Plotting) <<
"Fill color or style was set for plotting \"" <<
GetName()
1962 <<
"\", but these only have an effect when 'DrawOption(\"F\")' for fill is used at the same time." << std::endl;
2002 cxcoutD(Plotting) <<
"RooAbsReal::plotOn(" <<
GetName() <<
") have ProjData with observables = " << *o.
projData->
get() << endl ;
2005 projDataVars.
add(*tmp) ;
2006 cxcoutD(Plotting) <<
"RooAbsReal::plotOn(" <<
GetName() <<
") have ProjDataSet = " << *o.
projDataSet <<
" will only use this subset of projData" << endl ;
2009 cxcoutD(Plotting) <<
"RooAbsReal::plotOn(" <<
GetName() <<
") using full ProjData" << endl ;
2014 cxcoutD(Plotting) <<
"RooAbsReal::plotOn(" <<
GetName() <<
") ProjDataVars = " << projDataVars << endl ;
2020 cxcoutD(Plotting) <<
"RooAbsReal::plotOn(" <<
GetName() <<
") have input projSet = " << *o.
projSet << endl ;
2022 cxcoutD(Plotting) <<
"RooAbsReal::plotOn(" <<
GetName() <<
") calculated projectedVars = " << *o.
projSet << endl ;
2029 cxcoutD(Plotting) <<
"RooAbsReal::plotOn(" <<
GetName() <<
") frame->getNormVars() that are also observables = " << sliceSetTmp << endl ;
2040 if (!sliceSetTmp.
empty()) {
2041 coutI(Plotting) <<
"RooAbsReal::plotOn(" <<
GetName() <<
") plot on "
2042 << frame->
getPlotVar()->
GetName() <<
" represents a slice in " << sliceSetTmp << endl ;
2044 sliceSet.
add(sliceSetTmp) ;
2050 cxcoutD(Plotting) <<
"RooAbsReal::plotOn(" <<
GetName() <<
") projectedVars = " << projectedVars <<
" sliceSet = " << sliceSet << endl ;
2063 if (!plotCloneSet) {
2064 coutE(Plotting) <<
"RooAbsReal::plotOn(" <<
GetName() <<
") Couldn't deep-clone self, abort," << endl ;
2070 if (projectedVars.
getSize()) {
2071 coutI(Plotting) <<
"RooAbsReal::plotOn(" <<
GetName() <<
") plot on " << plotVar->
GetName()
2072 <<
" integrates over variables " << projectedVars
2075 if (projDataNeededVars && projDataNeededVars->
getSize()>0) {
2076 coutI(Plotting) <<
"RooAbsReal::plotOn(" <<
GetName() <<
") plot on " << plotVar->
GetName()
2077 <<
" averages using data variables " << *projDataNeededVars << endl ;
2086 if (projDataNeededVars) {
2090 deps.
add(*plotVar) ;
2096 coutE(Plotting) <<
"RooAbsReal::plotOn(" <<
GetName() <<
") error in checkObservables, abort" << endl ;
2097 delete plotCloneSet ;
2098 if (projDataNeededVars)
delete projDataNeededVars ;
2106 cxcoutD(Plotting) <<
"RooAbsReal::plotOn(" <<
GetName() <<
") plot projection object is " << projection->
GetName() << endl ;
2113 fullNormSet.
add(projectedVars) ;
2114 if (projDataNeededVars && projDataNeededVars->
getSize()>0) {
2115 fullNormSet.
add(*projDataNeededVars) ;
2131 if (o.
projData && projDataNeededVars && projDataNeededVars->
getSize()>0) {
2141 if (sliceDataSet->
getSize()>0) {
2162 delete sliceDataSet ;
2164 if (!cutString.
IsNull()) {
2166 coutI(Plotting) <<
"RooAbsReal::plotOn(" <<
GetName() <<
") reducing given projection dataset to entries with " << cutString << endl ;
2171 <<
") only the following components of the projection data will be used: " << *projDataNeededVars << endl ;
2187 coutI(Plotting) <<
"RooAbsReal::plotOn(" <<
GetName() <<
") unbinned projection dataset consist only of discrete variables,"
2188 <<
" performing projection with binned copy for optimization." << endl ;
2196 if (projDataSel!=o.
projData)
delete projDataSel ;
2203 projection->
getVal(projDataSel->
get()) ;
2211 std::move(cfg),
true) ;
2265 if (projDataSel!=o.
projData)
delete projDataSel ;
2348 if (projDataNeededVars)
delete projDataNeededVars ;
2349 delete projectionCompList ;
2350 delete plotCloneSet ;
2372 projectedVars.
remove(*arg) ;
2374 coutI(Plotting) <<
"RooAbsReal::plotSliceOn(" <<
GetName() <<
") slice variable "
2375 << sliceArg->
GetName() <<
" was not projected anyway" << endl ;
2418 projDataVars.
add(*tmp) ;
2427 coutE(Plotting) <<
"RooAbsReal::plotAsymOn(" <<
GetName()
2428 <<
") function doesn't depend on asymmetry category " << asymCat.
GetName() << endl ;
2434 coutE(Plotting) <<
"RooAbsReal::plotAsymOn(" <<
GetName()
2435 <<
") asymmetry category must have 2 or 3 states with index values -1,0,1" << endl ;
2458 if (!sliceSetTmp.
empty()) {
2459 coutI(Plotting) <<
"RooAbsReal::plotAsymOn(" <<
GetName() <<
") plot on "
2460 << frame->
getPlotVar()->
GetName() <<
" represents a slice in " << sliceSetTmp << endl ;
2462 sliceSet.
add(sliceSetTmp) ;
2486 if (projectedVars.
getSize()) {
2487 coutI(Plotting) <<
"RooAbsReal::plotAsymOn(" <<
GetName() <<
") plot on " << plotVar->
GetName()
2488 <<
" projects variables " << projectedVars << endl ;
2490 if (projDataNeededVars && projDataNeededVars->
getSize()>0) {
2491 coutI(Plotting) <<
"RooAbsReal::plotOn(" <<
GetName() <<
") plot on " << plotVar->
GetName()
2492 <<
" averages using data variables "<< *projDataNeededVars << endl ;
2511 RooArgSet *posProjCompList, *negProjCompList ;
2517 depPos.
add(projDataVars) ;
2518 depNeg.
add(projDataVars) ;
2522 if (!posProj || !negProj) {
2523 coutE(Plotting) <<
"RooAbsReal::plotAsymOn(" <<
GetName() <<
") Unable to create projections, abort" << endl ;
2529 asymName.
Append(
"_Asym[") ;
2533 asymTitle.
Append(
" Asymmetry of ") ;
2546 if (sliceDataSet->
getSize()>0) {
2567 delete sliceDataSet ;
2569 if (!cutString.
IsNull()) {
2571 coutI(Plotting) <<
"RooAbsReal::plotAsymOn(" <<
GetName()
2572 <<
") reducing given projection dataset to entries with " << cutString << endl ;
2576 coutI(Plotting) <<
"RooAbsReal::plotAsymOn(" <<
GetName()
2577 <<
") only the following components of the projection data will be used: " << *projDataNeededVars << endl ;
2585 std::move(cfg),
true) ;
2591 ((
RooAbsReal*)posProj)->attachDataSet(*projDataSel) ;
2592 ((
RooAbsReal*)negProj)->attachDataSet(*projDataSel) ;
2626 if (projDataSel!=o.
projData)
delete projDataSel ;
2665 delete posProjCompList ;
2666 delete negProjCompList ;
2700 fpf_stripped.
add(*frv);
2707 cloneFunc->getObservables(&fpf_stripped, errorParams);
2710 if (nset_in.
empty()) {
2711 cloneFunc->getParameters(&errorParams, nset);
2713 cloneFunc->getObservables(&nset_in, nset);
2719 vector<int> fpf_idx;
2723 paramList.
add(*par);
2724 fpf_idx.push_back(i);
2728 vector<Double_t> plusVar, minusVar ;
2735 for (
Int_t ivar=0 ; ivar<paramList.
getSize() ; ivar++) {
2740 Double_t errVal = sqrt(V(ivar,ivar)) ;
2743 ((
RooRealVar*)paramList.
at(ivar))->setVal(cenVal+errVal) ;
2744 plusVar.push_back(cloneFunc->getVal(nset)) ;
2747 ((
RooRealVar*)paramList.
at(ivar))->setVal(cenVal-errVal) ;
2748 minusVar.push_back(cloneFunc->getVal(nset)) ;
2754 vector<double> errVec(paramList.
getSize()) ;
2755 for (
int i=0 ; i<paramList.
getSize() ; i++) {
2756 errVec[i] = sqrt(V(i,i)) ;
2757 for (
int j=i ; j<paramList.
getSize() ; j++) {
2758 C(i,j) = V(i,j)/sqrt(V(i,i)*V(j,j)) ;
2765 for (
unsigned int j=0 ; j<plusVar.size() ; j++) {
2766 F[j] = (plusVar[j]-minusVar[j])/2 ;
2821 pc.
stripCmdList(plotArgListTmp,
"VisualizeError,MoveToBack") ;
2825 for (
auto * cmd : static_range_cast<RooCmdArg*>(plotArgListTmp)) {
2826 if (std::string(
"Normalization")==cmd->GetName()) {
2829 plotArgList.
Add(cmd) ;
2832 plotArgList.
Add(cmd) ;
2841 coutE(Plotting) <<
ClassName() <<
"::" <<
GetName() <<
":plotOnWithErrorBand: no curve for central value available" << endl;
2868 coutI(Plotting) <<
"RooAbsReal::plotOn(" <<
GetName() <<
") INFO: visualizing " << Z <<
"-sigma uncertainties in parameters "
2869 << errorParams <<
" from fit result " << fr.
GetName() <<
" using " <<
n <<
" samplings." << endl ;
2875 vector<RooCurve*> cvec ;
2876 for (
int i=0 ; i<
d->numEntries() ; i++) {
2877 cloneParams.
assign(*
d->get(i)) ;
2879 cloneFunc->
plotOn(frame,tmp2) ;
2880 cvec.push_back(frame->
getCurve()) ;
2893 for (vector<RooCurve*>::iterator i=cvec.begin() ; i!=cvec.end() ; ++i) {
2915 fpf_stripped.
add(*frv);
2933 vector<int> fpf_idx ;
2937 paramList.
add(*par) ;
2938 fpf_idx.push_back(i) ;
2942 vector<RooCurve*> plusVar, minusVar ;
2951 for (
Int_t ivar=0 ; ivar<paramList.
getSize() ; ivar++) {
2956 Double_t errVal = sqrt(V(ivar,ivar)) ;
2959 ((
RooRealVar*)paramList.
at(ivar))->setVal(cenVal+Z*errVal) ;
2963 cloneFunc->
plotOn(frame,tmp2) ;
2964 plusVar.push_back(frame->
getCurve()) ;
2969 ((
RooRealVar*)paramList.
at(ivar))->setVal(cenVal-Z*errVal) ;
2971 cloneFunc->
plotOn(frame,tmp3) ;
2972 minusVar.push_back(frame->
getCurve()) ;
2979 vector<double> errVec(paramList.
getSize()) ;
2980 for (
int i=0 ; i<paramList.
getSize() ; i++) {
2981 errVec[i] = sqrt(V(i,i)) ;
2982 for (
int j=i ; j<paramList.
getSize() ; j++) {
2983 C(i,j) = V(i,j)/sqrt(V(i,i)*V(j,j)) ;
2993 for (vector<RooCurve*>::iterator i=plusVar.begin() ; i!=plusVar.end() ; ++i) {
2996 for (vector<RooCurve*>::iterator i=minusVar.begin() ; i!=minusVar.end() ; ++i) {
3003 if (!band)
return frame ;
3007 pc.
defineString(
"curveNameSuffix",
"CurveNameSuffix",0,
"") ;
3008 pc.
defineInt(
"lineColor",
"LineColor",0,-999) ;
3009 pc.
defineInt(
"lineStyle",
"LineStyle",0,-999) ;
3010 pc.
defineInt(
"lineWidth",
"LineWidth",0,-999) ;
3011 pc.
defineInt(
"markerColor",
"MarkerColor",0,-999) ;
3012 pc.
defineInt(
"markerStyle",
"MarkerStyle",0,-999) ;
3014 pc.
defineInt(
"fillColor",
"FillColor",0,-999) ;
3015 pc.
defineInt(
"fillStyle",
"FillStyle",0,-999) ;
3017 pc.
defineInt(
"curveInvisible",
"Invisible",0,0) ;
3018 pc.
defineInt(
"moveToBack",
"MoveToBack",0,0) ;
3084 <<
":plotOn: frame does not specify a plot variable" << endl;
3097 coutE(Plotting) <<
ClassName() <<
"::" <<
GetName() <<
":plotOn: WARNING: variable is not an explicit dependent: "
3118 cxcoutD(Plotting) <<
"RooAbsReal::makeProjectionSet(" <<
GetName() <<
") plotVar = " << plotVar->
GetName()
3119 <<
" allVars = " << (allVars?(*allVars):
RooArgSet()) << endl ;
3122 if (!allVars) return ;
3125 projectedVars.
add(*allVars) ;
3130 projectedVars.
remove(*found);
3139 cxcoutD(Plotting) <<
"RooAbsReal::makeProjectionSet(" <<
GetName() <<
") removing " << tmp->
GetName()
3140 <<
" from projection set because it a server of " << plotVar->
GetName() << endl ;
3141 projectedVars.
remove(*tmp) ;
3145 delete plotServers ;
3149 <<
") WARNING: cannot project out frame variable ("
3150 << found->
GetName() <<
"), ignoring" << endl ;
3162 <<
") function doesn't depend on projection variable "
3163 << arg->
GetName() <<
", ignoring" << endl ;
3202 if(binding && !binding->
isValid()) {
3203 coutE(InputArguments) <<
ClassName() <<
"::" <<
GetName() <<
":bindVars: cannot bind to " << vars << endl ;
3225 auto other =
static_cast<const RooAbsReal*
>(source);
3226 assert(
dynamic_cast<const RooAbsReal*
>(source));
3249 operator double()
override {
3260std::unique_ptr<TreeReadBuffer> createTreeReadBuffer(
const TString& branchName,
TTree&
tree) {
3261 auto buf =
new TypedTreeReadBuffer<T>();
3262 tree.SetBranchAddress(branchName.
Data(), &buf->_value);
3263 return std::unique_ptr<TreeReadBuffer>(buf);
3293 coutE(Eval) <<
"RooAbsReal::attachToTree(" <<
GetName() <<
") ERROR: TTree branch " <<
GetName()
3294 <<
" is an array and cannot be attached to a RooAbsReal" << endl ;
3304 std::map<std::string, std::pair<std::string, std::function<std::unique_ptr<TreeReadBuffer>()>>> typeMap {
3305 {
"Float_t", {
"FLOAT_TREE_BRANCH", [&](){
return createTreeReadBuffer<Float_t >(cleanName, t); }}},
3306 {
"Int_t", {
"INTEGER_TREE_BRANCH", [&](){
return createTreeReadBuffer<Int_t >(cleanName, t); }}},
3307 {
"UChar_t", {
"BYTE_TREE_BRANCH", [&](){
return createTreeReadBuffer<UChar_t >(cleanName, t); }}},
3308 {
"Bool_t", {
"BOOL_TREE_BRANCH", [&](){
return createTreeReadBuffer<Bool_t >(cleanName, t); }}},
3309 {
"Char_t", {
"SIGNEDBYTE_TREE_BRANCH", [&](){
return createTreeReadBuffer<Char_t >(cleanName, t); }}},
3310 {
"UInt_t", {
"UNSIGNED_INTEGER_TREE_BRANCH", [&](){
return createTreeReadBuffer<UInt_t >(cleanName, t); }}},
3311 {
"Long64_t", {
"LONG_TREE_BRANCH", [&](){
return createTreeReadBuffer<Long64_t >(cleanName, t); }}},
3312 {
"ULong64_t", {
"UNSIGNED_LONG_TREE_BRANCH", [&](){
return createTreeReadBuffer<ULong64_t>(cleanName, t); }}},
3313 {
"Short_t", {
"SHORT_TREE_BRANCH", [&](){
return createTreeReadBuffer<Short_t >(cleanName, t); }}},
3314 {
"UShort_t", {
"UNSIGNED_SHORT_TREE_BRANCH", [&](){
return createTreeReadBuffer<UShort_t >(cleanName, t); }}},
3317 auto typeDetails = typeMap.find(typeName.
Data());
3318 if (typeDetails != typeMap.end()) {
3319 coutI(DataHandling) <<
"RooAbsReal::attachToTree(" <<
GetName() <<
") TTree " << typeDetails->first <<
" branch " <<
GetName()
3320 <<
" will be converted to double precision." << endl ;
3330 coutE(InputArguments) <<
"RooAbsReal::attachToTree(" <<
GetName() <<
") data type " << typeName <<
" is not supported." << endl ;
3493 const TList &nameList)
const
3502 matched.
add(*found);
3516 if(isMatched) matchedArgs.
add(matched);
3565 if (config)
return config ;
3578 if (config)
return config ;
3680 if (inLogEvalError) {
3683 inLogEvalError =
kTRUE ;
3688 if (serverValueString) {
3693 oocoutE((
TObject*)0,Eval) <<
"RooAbsReal::logEvalError(" <<
"<STATIC>" <<
") evaluation error, " << endl
3694 <<
" origin : " << origName << endl
3695 <<
" message : " << ee.
_msg << endl
3696 <<
" server values: " << ee.
_srvval << endl ;
3703 inLogEvalError =
kFALSE ;
3735 if (inLogEvalError) {
3738 inLogEvalError =
kTRUE ;
3743 if (serverValueString) {
3763 ostringstream oss2 ;
3767 coutE(Eval) <<
"RooAbsReal::logEvalError(" <<
GetName() <<
") evaluation error, " << endl
3768 <<
" origin : " << oss2.str() << endl
3769 <<
" message : " << ee.
_msg << endl
3770 <<
" server values: " << ee.
_srvval << endl ;
3779 <<
") delayed evaluation error, " << endl
3780 <<
" origin : " << oss2.str() << endl
3781 <<
" message : " << oee.
_msg << endl
3782 <<
" server values: " << oee.
_srvval << endl ;
3789 inLogEvalError =
kFALSE ;
3845 if (maxPerNode<0) return ;
3847 map<const RooAbsArg*,pair<string,list<EvalError> > >::iterator iter =
_evalErrorList.begin() ;
3850 if (maxPerNode==0) {
3853 os << iter->second.first ;
3855 os <<
" has " << iter->second.second.size() <<
" errors" << endl ;
3860 os << iter->second.first << endl ;
3864 std::list<EvalError>::iterator iter2 = iter->second.second.begin() ;
3865 for(;iter2!=iter->second.second.end() ; ++iter2, i++) {
3866 os <<
" " << iter2->_msg <<
" @ " << iter2->_srvval << endl ;
3868 os <<
" ... (remaining " << iter->second.second.size() - maxPerNode <<
" messages suppressed)" << endl ;
3888 map<const RooAbsArg*,pair<string,list<EvalError> > >::iterator iter =
_evalErrorList.begin() ;
3890 ntot += iter->second.second.size() ;
3965 orderedObs.
add(obs) ;
4024 pc.
defineInt(
"numScanBins",
"ScanParameters",0,1000) ;
4025 pc.
defineInt(
"intOrder",
"ScanParameters",1,2) ;
4026 pc.
defineInt(
"doScanNum",
"ScanNum",0,1) ;
4027 pc.
defineInt(
"doScanAll",
"ScanAll",0,0) ;
4028 pc.
defineInt(
"doScanNon",
"ScanNone",0,0) ;
4032 pc.
process(arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8) ;
4062 coutI(NumIntegration) <<
"RooAbsPdf::createRunningIntegral(" <<
GetName() <<
") integration over observable(s) " << iset <<
" involves numeric integration," << endl
4063 <<
" constructing cdf though numeric integration of sampled pdf in " << numScanBins <<
" bins and applying order "
4064 << intOrder <<
" interpolation on integrated histogram." << endl
4065 <<
" To override this choice of technique use argument ScanNone(), to change scan parameters use ScanParameters(nbins,order) argument" << endl ;
4083 ivar->
setBins(numScanBins,
"numcdf") ;
4106 coutW(InputArguments) <<
"RooAbsPdf::createRunningIntegral(" <<
GetName() <<
") WARNING ignoring non-RooRealVar input argument " << arg->
GetName() << endl ;
4127 cloneList.
add(*cloneArg) ;
4133 loList.
add(*cloneLo) ;
4166 coutE(InputArguments) <<
"RooAbsReal::functor(" <<
GetName() <<
") ERROR: one or more specified observables are not variables of this p.d.f" << endl ;
4172 coutE(InputArguments) <<
"RooAbsReal::functor(" <<
GetName() <<
") ERROR: one or more specified parameters are not variables of this p.d.f" << endl ;
4193 if (realObs.
size() != obs.
size()) {
4194 coutE(InputArguments) <<
"RooAbsReal::functor(" <<
GetName() <<
") ERROR: one or more specified observables are not variables of this p.d.f" << endl ;
4199 if (realPars.
size() != pars.
size()) {
4200 coutE(InputArguments) <<
"RooAbsReal::functor(" <<
GetName() <<
") ERROR: one or more specified parameters are not variables of this p.d.f" << endl ;
4205 for (
int i=0 ; i<obs.
getSize() ; i++) {
4207 coutE(ObjectHandling) <<
"RooAbsReal::asTF(" <<
GetName() <<
") ERROR: proposed observable " << obs.
at(0)->
GetName() <<
" is not of type RooRealVar" << endl ;
4211 for (
int i=0 ; i<pars.
getSize() ; i++) {
4213 coutE(ObjectHandling) <<
"RooAbsReal::asTF(" <<
GetName() <<
") ERROR: proposed parameter " << pars.
at(0)->
GetName() <<
" is not of type RooRealVar" << endl ;
4245 <<
" observables specified, but a ROOT TFx can only have 1,2 or 3 observables" << endl ;
4250 for (
int i=0 ; i<pars.
getSize() ; i++) {
4280 return new RooDerivative(
name.c_str(),title.c_str(),*
this,obs,normSet,order,eps) ;
4295 string title=
Form(
"%sMoment of order %d of %s w.r.t %s ",(central?
"Central ":
""),order,
GetName(),obs.
GetName()) ;
4297 if (order==2)
return new RooSecondMoment(
name.c_str(),title.c_str(),*
this,obs,central,takeRoot) ;
4298 return new RooMoment(
name.c_str(),title.c_str(),*
this,obs,order,central,takeRoot) ;
4314 string title=
Form(
"%sMoment of order %d of %s w.r.t %s ",(central?
"Central ":
""),order,
GetName(),obs.
GetName()) ;
4316 if (order==1)
return new RooFirstMoment(
name.c_str(),title.c_str(),*
this,obs,normObs,intNormObs) ;
4317 if (order==2)
return new RooSecondMoment(
name.c_str(),title.c_str(),*
this,obs,normObs,central,takeRoot,intNormObs) ;
4318 return new RooMoment(
name.c_str(),title.c_str(),*
this,obs,normObs,order,central,takeRoot,intNormObs) ;
4453 return new RooChi2Var(
name.c_str(),
name.c_str(),*
this,data,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8) ;
4478 return createChi2(data,*cmds[0],*cmds[1],*cmds[2],*cmds[3],*cmds[4],*cmds[5],*cmds[6],*cmds[7]) ;
4593 pc.
defineInt(
"integrate",
"Integrate",0,0) ;
4630 pc.
defineInt(
"optConst",
"Optimize",0,1) ;
4634 pc.
defineInt(
"plevel",
"PrintLevel",0,1) ;
4636 pc.
defineInt(
"initHesse",
"InitialHesse",0,0) ;
4640 pc.
defineInt(
"numee",
"PrintEvalErrors",0,10) ;
4662 const char* minType = pc.
getString(
"mintype",
"Minuit") ;
4663 const char* minAlg = pc.
getString(
"minalg",
"minuit") ;
4681 m.setMinimizerType(minType);
4687 m.setPrintEvalErrors(numee) ;
4689 m.setPrintLevel(plevel) ;
4694 m.optimizeConst(optConst);
4705 if (opts.
Contains(
"v"))
m.setVerbose(1) ;
4706 if (opts.
Contains(
"t"))
m.setProfile(1) ;
4708 if (opts.
Contains(
"c"))
m.optimizeConst(1) ;
4711 if (opts.
Contains(
"0"))
m.setStrategy(0) ;
4713 if (opts.
Contains(
"0"))
m.setStrategy(1) ;
4717 ret = (opts.
Contains(
"r")) ?
m.save() : 0 ;
4732 m.setStrategy(strat) ;
4741 m.minimize(minType, minAlg) ;
4751 m.minos(*minosSet) ;
4760 string title =
Form(
"Result of fit of %s ",
GetName()) ;
4761 ret =
m.save(
name.c_str(),title.c_str()) ;
4801 while((arg=iter.
next())) {
4803 coutW(InputArguments) <<
"RooAbsReal::setParameterizeIntegral(" <<
GetName()
4804 <<
") function does not depend on listed parameter " << arg->
GetName() <<
", ignoring" << endl ;
4807 if (plist.size()>0) plist +=
":" ;