133 std::cout <<
"Composite storage is not a valid *default* storage type." << std::endl;
158 throw std::runtime_error(
"RooAbsData::initializeVars(): the variables are already initialized!");
162 for (
const auto var : vars) {
163 if (!var->isFundamental()) {
164 coutE(InputArguments) <<
"RooAbsDataStore::initialize(" <<
GetName()
165 <<
"): Data set cannot contain non-fundamental types, ignoring " << var->GetName()
167 throw std::invalid_argument(std::string(
"Only fundamental variables can be placed into datasets. This is violated for ") + var->GetName());
174 for (
auto var :
_vars) {
185 _vars(
"Dataset Variables"),
211 for (
auto var :
_vars) {
212 var->attachArgs(
_vars);
219 std::map<std::string, RooAbsDataStore *> smap;
223 smap[itero.first] = dclone->
store();
258 RooPrintable::operator=(other);
305 bool ret =
_dstore->changeObservableName(from,to) ;
348 _dstore->cacheArgs(cacheOwner,varSet,nset,skipZeroWeights) ;
365 _dstore->attachCache(newOwner, cachedVars) ;
409 pc.
defineInt(
"evtStart",
"EventRange",0,0) ;
410 pc.
defineInt(
"evtStop",
"EventRange",1,std::numeric_limits<int>::max()) ;
411 pc.
defineSet(
"varSel",
"SelectVars",0,
nullptr) ;
415 pc.
process(arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8) ;
421 const char* cutRange = pc.
getString(
"cutRange",
nullptr,
true) ;
422 const char* cutSpec = pc.
getString(
"cutSpec",
nullptr,
true) ;
424 int nStart = pc.
getInt(
"evtStart",0) ;
425 int nStop = pc.
getInt(
"evtStop",std::numeric_limits<int>::max()) ;
428 const char* title = pc.
getString(
"title",
nullptr,
true) ;
433 varSubset.
add(*varSet) ;
434 for (
const auto arg : varSubset) {
435 if (!
_vars.find(arg->GetName())) {
436 coutW(InputArguments) <<
"RooAbsData::reduce(" <<
GetName() <<
") WARNING: variable "
437 << arg->GetName() <<
" not in dataset, ignored" << std::endl ;
438 varSubset.remove(*arg) ;
445 std::unique_ptr<RooAbsData> ret;
449 ret =
reduceEng(varSubset,&cutVarTmp,cutRange,nStart,nStop) ;
453 ret =
reduceEng(varSubset,cutVar,cutRange,nStart,nStop) ;
457 if (!ret)
return nullptr;
460 if (title) ret->SetTitle(title) ;
462 ret->copyGlobalObservables(*
this);
475 auto ret =
reduceEng(*
get(),&cutVar,
nullptr,0,std::numeric_limits<std::size_t>::max()) ;
476 ret->copyGlobalObservables(*
this);
487 auto ret =
reduceEng(*
get(),&cutVar,
nullptr,0,std::numeric_limits<std::size_t>::max()) ;
488 ret->copyGlobalObservables(*
this);
504 for (
const auto arg : varSubset) {
505 if (!
_vars.find(arg->GetName())) {
506 coutW(InputArguments) <<
"RooAbsData::reduce(" <<
GetName() <<
") WARNING: variable "
507 << arg->GetName() <<
" not in dataset, ignored" << std::endl ;
512 std::unique_ptr<RooAbsData> ret;
513 if (cut && strlen(cut)>0) {
515 ret =
reduceEng(varSubset2,&cutVar,
nullptr,0,std::numeric_limits<std::size_t>::max());
517 ret =
reduceEng(varSubset2,
nullptr,
nullptr,0,std::numeric_limits<std::size_t>::max());
519 ret->copyGlobalObservables(*
this);
535 if (!
_vars.find(arg->GetName())) {
536 coutW(InputArguments) <<
"RooAbsData::reduce(" <<
GetName() <<
") WARNING: variable "
537 << arg->GetName() <<
" not in dataset, ignored" << std::endl ;
542 auto ret =
reduceEng(varSubset2,&cutVar,
nullptr,0,std::numeric_limits<std::size_t>::max()) ;
543 ret->copyGlobalObservables(*
this);
604 const auto varNames =
ROOT::Split(varNameList,
",:");
605 RooRealVar* vars[3] = {
nullptr,
nullptr,
nullptr};
607 for (
unsigned int i = 0;
i < varNames.size(); ++
i) {
609 coutW(InputArguments) <<
"RooAbsData::createHistogram(" <<
GetName() <<
"): Can only create 3-dimensional histograms. Variable "
610 <<
i <<
" " << varNames[
i] <<
" unused." << std::endl;
616 coutE(InputArguments) <<
"RooAbsData::createHistogram(" <<
GetName() <<
") ERROR: dataset does not contain an observable named " << varNames[
i] << std::endl;
622 coutE(InputArguments) <<
"RooAbsData::createHistogram(" <<
GetName() <<
"): No variable to be histogrammed in list '" << varNameList <<
"'" << std::endl;
691 const char* cutSpec = pc.
getString(
"cutString",
nullptr,
true) ;
692 const char* cutRange = pc.
getString(
"cutRange",
nullptr,
true) ;
714 ownedCmds.
Add(bincmd) ;
715 argList.
Replace(autoRD,bincmd) ;
720 std::unique_ptr<RooCmdArg> autoRDY{
static_cast<RooCmdArg*
>((
static_cast<RooCmdArg*
>(argList.
find(
"YVar")))->subArgs().find(
"AutoRangeData"))};
733 std::unique_ptr<RooCmdArg> autoRDZ{
static_cast<RooCmdArg*
>((
static_cast<RooCmdArg*
>(argList.
find(
"ZVar")))->subArgs().find(
"AutoRangeData"))};
737 if (!
getRange(
static_cast<RooRealVar&
>(*zvar),zmin,zmax,autoRDZ->getDouble(0),autoRDZ->getInt(0))) {
761 std::string prodName(
"(") ;
762 for(
auto * arg : catSet) {
765 else catSet2.
add(*arg) ;
766 if (prodName.length()>1) {
769 prodName += arg->GetName() ;
771 coutW(InputArguments) <<
"RooAbsData::table(" <<
GetName() <<
") non-RooAbsCategory input argument " << arg->GetName() <<
" ignored" << std::endl ;
777 return table(tmp,cuts,opts) ;
831 if (order==1)
return 0 ;
832 if (order==2)
return 1 ;
834 return moment(var,order,cutSpec,cutRange) / std::pow(
sigma(var,cutSpec,cutRange),order) ;
849 double offset = order>1 ?
moment(var,1,cutSpec,cutRange) : 0 ;
865 coutE(InputArguments) <<
"RooDataSet::moment(" <<
GetName() <<
") ERROR: unknown variable: " << var.
GetName() << std::endl;
869 auto varPtr =
dynamic_cast<const RooRealVar*
>(arg);
872 coutE(InputArguments) <<
"RooDataSet::moment(" <<
GetName() <<
") ERROR: variable " << var.
GetName() <<
" is not of type RooRealVar" << std::endl ;
878 coutE(InputArguments) <<
"RooDataSet::moment(" <<
GetName() <<
") WARNING: empty dataset" << std::endl ;
883 std::unique_ptr<RooFormula> select;
885 select = std::make_unique<RooFormula>(
"select",cutSpec,*
get());
893 if (select && select->eval()==0) continue ;
894 if (cutRange && vars->
allInRange(cutRange)) continue ;
910 coutE(InputArguments) <<
"RooDataSet::" << methodname <<
"(" <<
GetName() <<
") ERROR: variable : " << extVar.
GetName() <<
" is not in data" << std::endl ;
915 coutE(InputArguments) <<
"RooDataSet::" << methodname <<
"(" <<
GetName() <<
") ERROR: variable : " << extVar.
GetName() <<
" is not of type RooRealVar in data" << std::endl ;
929 if (!xdata||!ydata)
return 0 ;
933 coutW(InputArguments) <<
"RooDataSet::" << (corr?
"correlation":
"covariance") <<
"(" <<
GetName() <<
") WARNING: empty dataset, returning zero" << std::endl ;
938 std::unique_ptr<RooFormula> select;
939 if (cutSpec) select = std::make_unique<RooFormula>(
"select",cutSpec,*
get());
950 if (select && select->eval()==0) continue ;
951 if (cutRange && vars->
allInRange(cutRange)) continue ;
973 return (xysum-xsum*ysum)/(sqrt(x2sum-(xsum*xsum))*sqrt(y2sum-(ysum*ysum))) ;
975 return (xysum-xsum*ysum);
990 varList.
add(*datavar) ;
996 coutW(InputArguments) <<
"RooDataSet::covariance(" <<
GetName() <<
") WARNING: empty dataset, returning zero" << std::endl ;
1001 std::unique_ptr<RooFormula> select = cutSpec ? std::make_unique<RooFormula>(
"select",cutSpec,*
get()) :
nullptr;
1004 std::vector<double> xsum(varList.
size()) ;
1005 std::vector<double> x2sum(varList.
size()) ;
1010 if (select && select->eval()==0) continue ;
1011 if (cutRange && dvars->
allInRange(cutRange)) continue ;
1013 for(std::size_t iX = 0; iX < varList.
size(); ++iX) {
1014 auto varx =
static_cast<RooRealVar const&
>(varList[iX]);
1015 xsum[iX] +=
weight() * varx.getVal() ;
1017 x2sum[iX] +=
weight() * varx.getVal() * varx.getVal();
1020 for(std::size_t iY = iX; iY < varList.
size(); ++iY) {
1021 auto vary =
static_cast<RooRealVar const&
>(varList[iY]);
1022 xysum(iX,iY) +=
weight() * varx.getVal() * vary.getVal();
1023 xysum(iY,iX) = xysum(iX,iY) ;
1030 for (std::size_t iX=0 ; iX<varList.
size() ; iX++) {
1035 for (std::size_t iY=0 ; iY<varList.
size() ; iY++) {
1036 xysum(iX,iY) /=
sumEntries(cutSpec, cutRange) ;
1041 auto C = std::make_unique<TMatrixDSym>(varList.
size()) ;
1042 for (std::size_t iX=0 ; iX<varList.
size() ; iX++) {
1043 for (std::size_t iY=0 ; iY<varList.
size() ; iY++) {
1044 (*C)(iX,iY) = xysum(iX,iY)-xsum[iX]*xsum[iY] ;
1046 (*C)(iX,iY) /= std::sqrt((x2sum[iX]-(xsum[iX]*xsum[iX]))*(x2sum[iY]-(xsum[iY]*xsum[iY]))) ;
1067 std::string
name = std::string{var.
GetName()} +
"Mean";
1068 std::string title = std::string{
"Mean of "} + var.
GetTitle();
1070 meanv->setConstant(
false) ;
1073 std::string label =
"<" + std::string{var.
getPlotLabel()} +
">";
1074 meanv->setPlotLabel(label.c_str());
1077 double meanVal=
moment(var,1,0,cutSpec,cutRange) ;
1080 double rmsVal= sqrt(
moment(var,2,meanVal,cutSpec,cutRange)*
N/(
N-1));
1081 meanv->setVal(meanVal) ;
1082 meanv->setError(
N > 0 ? rmsVal/sqrt(
N) : 0);
1101 std::string title(
"RMS of ");
1105 rms->setConstant(
false) ;
1110 rms->setPlotLabel(label.c_str());
1113 double meanVal(
moment(var,1,0,cutSpec,cutRange)) ;
1115 double rmsVal= sqrt(
moment(var,2,meanVal,cutSpec,cutRange)*
N/(
N-1));
1116 rms->setVal(rmsVal) ;
1117 rms->setError(rmsVal/sqrt(2*
N));
1169 pc.
defineInt(
"ymaxi",
"Layout",0,
int(0.95*10000)) ;
1172 pc.
defineInt(
"dummy",
"FormatArgs",0,0) ;
1183 const char* label = pc.
getString(
"label") ;
1187 const char* formatStr = pc.
getString(
"formatStr") ;
1188 int sigDigit = pc.
getInt(
"sigDigit") ;
1191 const char* cutSpec = pc.
getString(
"cutString",
nullptr,
true) ;
1192 const char* cutRange = pc.
getString(
"cutRange",
nullptr,
true) ;
1196 return statOn(frame,
what,label,0,
nullptr,
xmin,
xmax,
ymax,cutSpec,cutRange,formatCmd) ;
1207 const char* cutSpec,
const char* cutRange,
const RooCmdArg* formatCmd)
1209 bool showLabel= (label !=
nullptr && strlen(label) > 0);
1211 std::string whatStr{
what};
1212 std::transform(whatStr.begin(), whatStr.end(), whatStr.begin(), [](
unsigned char c){ return std::toupper(c); });
1213 bool showN = whatStr.find(
'N') != std::string::npos;
1214 bool showR = whatStr.find(
'R') != std::string::npos;
1215 bool showM = whatStr.find(
'M') != std::string::npos;
1224 if(showLabel)
ymin-= dy;
1228 if(!
box)
return nullptr;
1230 box->SetFillColor(0);
1231 box->SetBorderSize(1);
1232 box->SetTextAlign(12);
1233 box->SetTextSize(0.04F);
1234 box->SetFillStyle(1001);
1238 N.setPlotLabel(
"Entries") ;
1240 meanv->setPlotLabel(
"Mean") ;
1242 rms->setPlotLabel(
"RMS") ;
1243 std::unique_ptr<TString> rmsText;
1244 std::unique_ptr<TString> meanText;
1245 std::unique_ptr<TString> NText;
1247 rmsText.reset(rms->format(sigDigits,options));
1248 meanText.reset(meanv->format(sigDigits,options));
1249 NText.reset(
N.format(sigDigits,options));
1251 rmsText.reset(rms->format(*formatCmd));
1252 meanText.reset(meanv->format(*formatCmd));
1253 NText.reset(
N.format(*formatCmd));
1255 if (showR)
box->AddText(rmsText->Data());
1256 if (showM)
box->AddText(meanText->Data());
1257 if (showN)
box->AddText(NText->Data());
1260 if(showLabel)
box->AddText(label);
1275 if(
nullptr == hist) {
1276 coutE(InputArguments) <<
ClassName() <<
"::" <<
GetName() <<
":fillHistogram: no valid histogram to fill" << std::endl;
1282 if(hdim != plotVars.
size()) {
1283 coutE(InputArguments) <<
ClassName() <<
"::" <<
GetName() <<
":fillHistogram: plotVars has the wrong dimension" << std::endl;
1295 if(realVar ==
nullptr) {
1297 <<
"\" of type " << var->
ClassName() << std::endl;
1303 assert(
nullptr !=
clone);
1306 <<
":fillHistogram: Data does not contain the variable '" << realVar->
GetName() <<
"'." << std::endl;
1315 localVars.
add(*found);
1320 std::unique_ptr<RooFormula> select;
1321 if (cuts !=
nullptr && strlen(cuts) > 0) {
1322 select = std::make_unique<RooFormula>(cuts, cuts,
_vars,
false);
1323 if (!select || !select->ok()) {
1324 coutE(InputArguments) <<
ClassName() <<
"::" <<
GetName() <<
":fillHistogram: invalid cuts \"" << cuts <<
"\"" << std::endl;
1336 assert(
nullptr != zvar);
1340 assert(
nullptr != yvar);
1344 assert(
nullptr != xvar);
1347 coutE(InputArguments) <<
ClassName() <<
"::" <<
GetName() <<
":fillHistogram: cannot fill histogram with "
1348 << hdim <<
" dimensions" << std::endl;
1353 const auto cutVec =
ROOT::Split(cutRange ? cutRange :
"",
",");
1360 for(
int i=0;
i < nevent; ++
i) {
1367 if (select && select->eval()==0) {
1373 bool selectByRange =
true ;
1375 for (
const auto arg :
_vars) {
1376 bool selectThisArg = false ;
1377 for (
auto const& cut : cutVec) {
1378 if (!cut.empty() && arg->inRange(cut.c_str())) {
1379 selectThisArg =
true ;
1383 if (!selectThisArg) {
1384 selectByRange = false ;
1390 if (!selectByRange) {
1417 if (we==0) we =
weight() ;
1418 error2 += std::pow(we,2) ;
1442struct SplittingSetup {
1446 bool addWeightVar =
false;
1451 SplittingSetup setup;
1455 oocoutE(&
data, InputArguments) <<
"RooTreeData::split(" <<
data.GetName() <<
") ERROR category "
1456 << splitCat.
GetName() <<
" doesn't depend on any variable in this dataset"
1468 if (!setup.cloneCat) {
1469 oocoutE(&
data, InputArguments) <<
"RooTreeData::split(" <<
data.GetName() <<
") ERROR category "
1470 << splitCat.
GetName() <<
" is fundamental and does not appear in this dataset"
1477 setup.subsetVars.
add(*
data.get());
1479 std::unique_ptr<RooArgSet> vars{splitCat.
getVariables()};
1480 setup.subsetVars.
remove(*vars,
true,
true);
1482 setup.subsetVars.
remove(splitCat,
true,
true);
1487 setup.addWeightVar =
data.isWeighted();
1493 std::function<std::unique_ptr<RooAbsData>(
const char *label)> createEmptyData)
1495 auto dsetList = std::make_unique<TList>();
1498 if (createEmptyDataSets) {
1499 for (
const auto &nameIdx : cloneCat) {
1500 dsetList->Add(createEmptyData(nameIdx.first.c_str()).release());
1507 for (
int i = 0;
i <
data.numEntries(); ++
i) {
1509 auto subset =
static_cast<RooAbsData *
>(dsetList->FindObject(cloneCat.getCurrentLabel()));
1511 subset = createEmptyData(cloneCat.getCurrentLabel()).release();
1512 dsetList->Add(subset);
1554 SplittingSetup setup = initSplit(*
this, splitCat);
1557 if (!setup.cloneCat)
1560 auto createEmptyData = [&](
const char *label) -> std::unique_ptr<RooAbsData> {
1561 return std::unique_ptr<RooAbsData>{
1562 emptyClone(label, label, &setup.subsetVars, setup.addWeightVar ?
"weight" :
nullptr)};
1565 return splitImpl(*
this, *setup.cloneCat, createEmptyDataSets, createEmptyData);
1588 SplittingSetup setup = initSplit(*
this, splitCat);
1591 if (!setup.cloneCat)
1596 auto getPdfObservables = [
this, &simPdf](
const char *label) {
1599 catPdf->getObservables(this->
get(), obsSet);
1606 for (
const auto &catPair : splitCat) {
1607 allObservables.
add(getPdfObservables(catPair.first.c_str()));
1609 setup.subsetVars.
remove(allObservables,
true,
true);
1611 auto createEmptyData = [&](
const char *label) -> std::unique_ptr<RooAbsData> {
1613 RooArgSet subsetVarsCat(setup.subsetVars);
1614 subsetVarsCat.
add(getPdfObservables(label));
1615 return std::unique_ptr<RooAbsData>{
1616 this->
emptyClone(label, label, &subsetVarsCat, setup.addWeightVar ?
"weight" :
nullptr)};
1619 return splitImpl(*
this, *setup.cloneCat, createEmptyDataSets, createEmptyData);
1725 pc.
defineInt(
"nbins",
"BinningSpec",0,100) ;
1730 pc.
defineInt(
"lineColor",
"LineColor",0,-999) ;
1731 pc.
defineInt(
"lineStyle",
"LineStyle",0,-999) ;
1732 pc.
defineInt(
"lineWidth",
"LineWidth",0,-999) ;
1733 pc.
defineInt(
"markerColor",
"MarkerColor",0,-999) ;
1734 pc.
defineInt(
"markerStyle",
"MarkerStyle",0,-999) ;
1736 pc.
defineInt(
"fillColor",
"FillColor",0,-999) ;
1737 pc.
defineInt(
"fillStyle",
"FillStyle",0,-999) ;
1739 pc.
defineInt(
"histInvisible",
"Invisible",0,0) ;
1740 pc.
defineInt(
"refreshFrameNorm",
"RefreshNorm",0,1) ;
1746 pc.
defineMutex(
"DataError",
"Asymmetry",
"Efficiency") ;
1747 pc.
defineMutex(
"Binning",
"BinningName",
"BinningSpec") ;
1787 coutI(InputArguments) <<
"RooAbsData::plotOn(" <<
GetName()
1788 <<
") INFO: dataset has non-integer weights, auto-selecting SumW2 errors instead of Poisson errors" << std::endl ;
1794 <<
" to add to in RooPlot" << std::endl ;
1799 if (!asymCat && !effCat) {
1801 }
else if (asymCat) {
1807 int lineColor = pc.
getInt(
"lineColor") ;
1808 int lineStyle = pc.
getInt(
"lineStyle") ;
1809 int lineWidth = pc.
getInt(
"lineWidth") ;
1810 int markerColor = pc.
getInt(
"markerColor") ;
1811 int markerStyle = pc.
getInt(
"markerStyle") ;
1813 int fillColor = pc.
getInt(
"fillColor") ;
1814 int fillStyle = pc.
getInt(
"fillStyle") ;
1845 if(
nullptr == frame) {
1850 if(
nullptr == var) {
1852 <<
":plotOn: frame does not specify a plot variable" << std::endl;
1857 const std::string histName = std::string{
GetName()} +
"_plot";
1858 std::unique_ptr<TH1> hist;
1874 <<
":plotOn: fillHistogram() failed" << std::endl;
1880 double nomBinWidth ;
1889 if(
nullptr ==
graph) {
1891 <<
":plotOn: unable to create a RooHist object" << std::endl;
1900 std::unique_ptr<RooAbsData> tmp{
const_cast<RooAbsData*
>(
this)->
reduce(*var)};
1901 nEnt = tmp->sumEntries() ;
1906 coutI(Plotting) <<
"RooTreeData::plotOn: plotting " << hist->GetSumOfWeights() <<
" events out of " << nEnt <<
" total events" << std::endl ;
1907 graph->setRawEntries(nEnt) ;
1914 if (!
graph->hasIdenticalBinning(*otherGraph)) {
1915 coutE(Plotting) <<
"RooTreeData::plotOn: ERROR Histogram to be added to, '" << o.
addToHistName <<
"',has different binning" << std::endl ;
1929 std::string hname = std::string{
"h_"} +
GetName();
1931 hname += std::string{
"_CutRange["} + o.
cutRange +
"]";
1934 hname += std::string{
"_Cut["} + o.
cuts +
"]";
1936 graph->SetName(hname.c_str()) ;
1965 if(
nullptr == frame) {
1970 if(
nullptr == var) {
1972 <<
":plotAsymOn: frame does not specify a plot variable" << std::endl;
1977 std::string hist1Name(
GetName());
1978 std::string hist2Name(
GetName());
1979 hist1Name +=
"_plot1";
1980 std::unique_ptr<TH1> hist1;
1981 std::unique_ptr<TH1> hist2;
1982 hist2Name +=
"_plot2";
1996 assert(hist1 && hist2);
2011 <<
":plotAsymOn: createHistogram() failed" << std::endl;
2033 graph->SetName(hname.c_str()) ;
2058 if(
nullptr == frame) {
2063 if(
nullptr == var) {
2065 <<
":plotEffOn: frame does not specify a plot variable" << std::endl;
2070 std::string hist1Name(
GetName());
2071 std::string hist2Name(
GetName());
2072 hist1Name +=
"_plot1";
2073 std::unique_ptr<TH1> hist1;
2074 std::unique_ptr<TH1> hist2;
2075 hist2Name +=
"_plot2";
2089 assert(hist1 && hist2);
2104 <<
":plotEffOn: createHistogram() failed" << std::endl;
2126 graph->SetName(hname.c_str()) ;
2148 std::unique_ptr<RooArgSet> tableSet;
2152 <<
" is not in dataset and is also not dependent on data set" << std::endl ;
2157 tableSet = std::make_unique<RooArgSet>();
2158 if (
RooArgSet(cat).snapshot(*tableSet,
true)) {
2159 coutE(Plotting) <<
"RooTreeData::table(" <<
GetName() <<
") Couldn't deep-clone table category, abort." << std::endl;
2168 std::unique_ptr<RooFormulaVar> cutVar;
2169 std::string tableName{
GetName()};
2170 if (cuts && strlen(cuts)) {
2175 cutVar = std::make_unique<RooFormulaVar>(
"cutVar",cuts,
_vars) ;
2181 for(
int i=0;
i < nevent; ++
i) {
2184 if (cutVar && cutVar->getVal()==0) continue ;
2202 coutE(InputArguments) <<
"RooDataSet::getRange(" <<
GetName() <<
") ERROR: unknown variable: " << var.
GetName() << std::endl ;
2206 auto varPtr =
dynamic_cast<const RooRealVar*
>(arg);
2209 coutE(InputArguments) <<
"RooDataSet::getRange(" <<
GetName() <<
") ERROR: variable " << var.
GetName() <<
" is not of type RooRealVar" << std::endl ;
2215 coutE(InputArguments) <<
"RooDataSet::getRange(" <<
GetName() <<
") WARNING: empty dataset" << std::endl ;
2224 if (varPtr->getVal()<lowest) {
2225 lowest = varPtr->getVal() ;
2227 if (varPtr->getVal()>highest) {
2228 highest = varPtr->getVal() ;
2233 if (symMode==
false) {
2235 double margin = marginFrac*(highest-lowest) ;
2243 double mom1 =
moment(*varPtr,1) ;
2244 double delta = ((highest-mom1)>(mom1-lowest)?(highest-mom1):(mom1-lowest))*(1+marginFrac) ;
2245 lowest = mom1-delta ;
2246 highest = mom1+delta ;
2269 pruneSet.
remove(*usedObs,
true,
true) ;
2272 for(
auto * var : *
get()) {
2274 pruneSet.
add(*var) ;
2279 if (!pruneSet.
empty()) {
2285 if (rrv && !rrv->getBinning().isShareable()) {
2287 RooAbsReal* loFunc = rrv->getBinning().lowBoundFunc() ;
2288 RooAbsReal* hiFunc = rrv->getBinning().highBoundFunc() ;
2295 if (!depObs.
empty()) {
2296 pruneSet.
remove(depObs,
true,
true) ;
2304 pruneSet.
remove(keepObsList,
true,
true) ;
2306 if (!pruneSet.
empty()) {
2309 cxcoutI(Optimization) <<
"RooTreeData::optimizeReadingForTestStatistic(" <<
GetName() <<
"): Observables " << pruneSet
2310 <<
" in dataset are either not used at all, orserving exclusively p.d.f nodes that are now cached, disabling reading of these observables for TTree" << std::endl ;
2322 bool anyClient(
false);
2326 if (!cacheList.
find(client->GetName())) {
2332 return anyClient?ret:false ;
2339 _dstore->attachBuffers(extObs) ;
2409 return _dstore->hasFilledCache() ;
2422 coutW(InputArguments) <<
"RooAbsData::tree(" <<
GetName() <<
") WARNING: is not of StorageType::Tree. "
2423 <<
"Use GetClonedTree() instead or convert to tree storage." << std::endl;
2436 return tmp->CloneTree();
2461 if (iter.second == obj) {
2462 iter.second =
nullptr;
2478 arg->setAttribute(
"global",
true);
2480 if(
auto lval =
dynamic_cast<RooAbsRealLValue*
>(arg)) lval->setConstant(
true);
2518 if (eventWeights.empty()) {
2523 for (std::size_t
i = 0;
i < eventWeights.size(); ++
i) {
2526 return kahanWeight.
Sum();
2554 const char *
name)
const
2569 const char *cuts,
const char *
name)
const
2572 static int counter(0);
2574 std::unique_ptr<RooAbsReal> ownedPlotVarX;
2577 if (plotVarX ==
nullptr) {
2581 <<
" is not in dataset and is also not dependent on data set" << std::endl;
2587 plotVarX = ownedPlotVarX.get();
2593 std::unique_ptr<RooAbsReal> ownedPlotVarY;
2596 if (plotVarY ==
nullptr) {
2600 <<
" is not in dataset and is also not dependent on data set" << std::endl;
2606 plotVarY = ownedPlotVarY.get();
2613 std::unique_ptr<RooFormula> select;
2614 if (
nullptr != cuts && strlen(cuts)) {
2615 select = std::make_unique<RooFormula>(cuts, cuts,
_vars);
2616 if (!select->ok()) {
2621 const std::string histName = std::string{
GetName()} +
"_" +
name +
"_" +
Form(
"%08x", counter++);
2627 coutE(DataHandling) <<
GetName() <<
"::createHistogram: unable to create a new histogram" << std::endl;
2633 for (
int i = 0;
i < nevent; ++
i) {
2636 if (select && select->eval() == 0)
2638 histogram->Fill(plotVarX->getVal(), plotVarY->
getVal(),
weight());
true
Register systematic variations for multiple existing columns using auto-generated tags.
ROOT::RRangeCast< T, true, Range_t > dynamic_range_cast(Range_t &&coll)
ROOT::RRangeCast< T, false, Range_t > static_range_cast(Range_t &&coll)
TObject * clone(const char *newname) const override
static void indent(ostringstream &buf, int indent_level)
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h offset
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void data
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t result
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t index
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h Atom_t Int_t ULong_t ULong_t unsigned char prop_list Atom_t Atom_t Atom_t Time_t UChar_t len
TMatrixTSym< Double_t > TMatrixDSym
char * Form(const char *fmt,...)
Formats a string in a circular formatting buffer.
The Kahan summation is a compensated summation algorithm, which significantly reduces numerical error...
void AddIndexed(T input, std::size_t index)
Add input to the sum.
void fill(RooAbsCategory &cat, double weight=1.0) override
Increment the counter of the table slot with the name corresponding to that of the current category s...
Common abstract base class for objects that represent a value and a "shape" in RooFit.
bool dependsOn(const RooAbsCollection &serverList, const RooAbsArg *ignoreArg=nullptr, bool valueOnly=false) const
Test whether we depend on (ie, are served by) any object in the specified collection.
bool recursiveRedirectServers(const RooAbsCollection &newServerList, bool mustReplaceAll=false, bool nameChange=false, bool recurseInNewSet=true)
Recursively replace all servers with the new servers in newSet.
RooFit::OwningPtr< RooArgSet > getObservables(const RooArgSet &set, bool valueOnly=true) const
Given a set of possible observables, return the observables that this PDF depends on.
TIterator Use valueClients() and begin()
bool redirectServers(const RooAbsCollection &newServerList, bool mustReplaceAll=false, bool nameChange=false, bool isRecursionStep=false)
Replace all direct servers of this object with the new servers in newServerList.
virtual bool isDerived() const
Does value or shape of this arg depend on any other arg?
RooFit::OwningPtr< RooArgSet > getVariables(bool stripDisconnected=true) const
Return RooArgSet with all variables (tree leaf nodes of expression tree)
TObject * Clone(const char *newname=nullptr) const override
Make a clone of an object using the Streamer facility.
void leafNodeServerList(RooAbsCollection *list, const RooAbsArg *arg=nullptr, bool recurseNonDerived=false) const
Fill supplied list with all leaf nodes of the arg tree, starting with ourself as top node.
void attachDataSet(const RooAbsData &set)
Replace server nodes with names matching the dataset variable names with those data set variables,...
Abstract base class for RooRealVar binning definitions.
virtual double averageBinWidth() const =0
virtual bool isUniform() const
Abstract base class for objects that represent a discrete value that can be set from the outside,...
A space to attach TBranches.
const std::string & lookupName(value_type index) const
Get the name corresponding to the given index.
Roo1DTable * createTable(const char *label) const
Create a table matching the shape of this category.
virtual bool remove(const RooAbsArg &var, bool silent=false, bool matchByNameOnly=false)
Remove the specified argument from our list.
bool allInRange(const char *rangeSpec) const
Return true if all contained object report to have their value inside the specified range.
virtual bool add(const RooAbsArg &var, bool silent=false)
Add the specified argument to list.
Storage_t::size_type size() const
virtual RooAbsArg * addClone(const RooAbsArg &var, bool silent=false)
Add a clone of the specified argument to list.
RooAbsArg * find(const char *name) const
Find object with given name in list.
Abstract base class for a data collection.
virtual RooAbsData::CategorySpans getCategoryBatches(std::size_t, std::size_t) const
virtual RooAbsData::RealSpans getBatches(std::size_t first, std::size_t len) const =0
Retrieve batches for all observables in this data store.
Abstract base class for binned and unbinned datasets.
virtual double weight() const =0
virtual double sumEntries() const =0
Return effective number of entries in dataset, i.e., sum all weights.
virtual const RooArgSet * get() const
RooFit::OwningPtr< RooAbsData > reduce(const RooCmdArg &arg1, const RooCmdArg &arg2={}, const RooCmdArg &arg3={}, const RooCmdArg &arg4={}, const RooCmdArg &arg5={}, const RooCmdArg &arg6={}, const RooCmdArg &arg7={}, const RooCmdArg &arg8={})
Create a reduced copy of this dataset.
RooRealVar * meanVar(const RooRealVar &var, const char *cutSpec=nullptr, const char *cutRange=nullptr) const
Create a RooRealVar containing the mean of observable 'var' in this dataset.
void printMultiline(std::ostream &os, Int_t contents, bool verbose=false, TString indent="") const override
Interface for detailed printing of object.
const TNamed * _namePtr
! De-duplicated name pointer. This will be equal for all objects with the same name.
RooAbsData()
Default constructor.
static void setDefaultStorageType(StorageType s)
void SetName(const char *name) override
Set the name of the TNamed.
CategorySpans getCategoryBatches(std::size_t first=0, std::size_t len=std::numeric_limits< std::size_t >::max()) const
RooFit::OwningPtr< TMatrixDSym > corrcovMatrix(const RooArgList &vars, const char *cutSpec, const char *cutRange, bool corr) const
Return covariance matrix from data for given list of observables.
RooRealVar * dataRealVar(const char *methodname, const RooRealVar &extVar) const
Internal method to check if given RooRealVar maps to a RooRealVar in this dataset.
virtual Roo1DTable * table(const RooArgSet &catSet, const char *cuts="", const char *opts="") const
Construct table for product of categories in catSet.
std::map< RooFit::Detail::DataKey, std::span< const double > > RealSpans
void setGlobalObservables(RooArgSet const &globalObservables)
Sets the global observables stored in this data.
RooAbsDataStore * store()
void printClassName(std::ostream &os) const override
Print class name of dataset.
RooRealVar * rmsVar(const RooRealVar &var, const char *cutSpec=nullptr, const char *cutRange=nullptr) const
Create a RooRealVar containing the RMS of observable 'var' in this dataset.
double standMoment(const RooRealVar &var, double order, const char *cutSpec=nullptr, const char *cutRange=nullptr) const
Calculate standardized moment.
virtual RooPlot * statOn(RooPlot *frame, const RooCmdArg &arg1={}, const RooCmdArg &arg2={}, const RooCmdArg &arg3={}, const RooCmdArg &arg4={}, const RooCmdArg &arg5={}, const RooCmdArg &arg6={}, const RooCmdArg &arg7={}, const RooCmdArg &arg8={})
Add a box with statistics information to the specified frame.
void Draw(Option_t *option="") override
Forward draw command to data store.
virtual bool changeObservableName(const char *from, const char *to)
void printTitle(std::ostream &os) const override
Print title of dataset.
void RecursiveRemove(TObject *obj) override
If one of the TObject we have a referenced to is deleted, remove the reference.
virtual double weightError(ErrorType=Poisson) const
Return the symmetric error on the current weight.
void setDirtyProp(bool flag)
Control propagation of dirty flags from observables in dataset.
std::map< RooFit::Detail::DataKey, std::span< const RooAbsCategory::value_type > > CategorySpans
virtual RooFit::OwningPtr< TList > split(const RooAbsCategory &splitCat, bool createEmptyDataSets=false) const
Split the dataset into subsets based on states of a categorical variable in this dataset.
virtual TH1 * fillHistogram(TH1 *hist, const RooArgList &plotVars, const char *cuts="", const char *cutRange=nullptr) const
Loop over columns of our tree data and fill the input histogram.
virtual void setArgStatus(const RooArgSet &set, bool active)
virtual void cacheArgs(const RooAbsArg *owner, RooArgSet &varSet, const RooArgSet *nset=nullptr, bool skipZeroWeights=false)
Internal method – Cache given set of functions with data.
virtual RooPlot * plotEffOn(RooPlot *frame, const RooAbsCategoryLValue &effCat, PlotOpt o) const
Create and fill a histogram with the efficiency N[1] / ( N[1] + N[0] ), where N(1/0) is the number of...
RealSpans getBatches(std::size_t first=0, std::size_t len=std::numeric_limits< std::size_t >::max()) const
Write information to retrieve data columns into evalData.spans.
virtual void optimizeReadingWithCaching(RooAbsArg &arg, const RooArgSet &cacheList, const RooArgSet &keepObsList)
Prepare dataset for use with cached constant terms listed in 'cacheList' of expression 'arg'.
static StorageType defaultStorageType
virtual std::span< const double > getWeightBatch(std::size_t first, std::size_t len, bool sumW2=false) const =0
Return event weights of all events in range [first, first+len).
double corrcov(const RooRealVar &x, const RooRealVar &y, const char *cutSpec, const char *cutRange, bool corr) const
Internal method to calculate single correlation and covariance elements.
bool allClientsCached(RooAbsArg *, const RooArgSet &)
Utility function that determines if all clients of object 'var' appear in given list of cached nodes.
std::unique_ptr< RooAbsDataStore > _dstore
Data storage implementation.
void addOwnedComponent(const char *idxlabel, RooAbsData &data)
RooArgSet _vars
Dimensions of this data set.
bool canSplitFast() const
virtual RooPlot * plotAsymOn(RooPlot *frame, const RooAbsCategoryLValue &asymCat, PlotOpt o) const
Create and fill a histogram with the asymmetry N[+] - N[-] / ( N[+] + N[-] ), where N(+/-) is the num...
virtual RooPlot * plotOn(RooPlot *frame, const RooCmdArg &arg1={}, const RooCmdArg &arg2={}, const RooCmdArg &arg3={}, const RooCmdArg &arg4={}, const RooCmdArg &arg5={}, const RooCmdArg &arg6={}, const RooCmdArg &arg7={}, const RooCmdArg &arg8={}) const
RooAbsData * getSimData(const char *idxstate)
void copyGlobalObservables(const RooAbsData &other)
virtual bool isNonPoissonWeighted() const
bool hasFilledCache() const
double sumEntriesW2() const
Return sum of squared weights of this data.
virtual void attachCache(const RooAbsArg *newOwner, const RooArgSet &cachedVars)
Internal method – Attach dataset copied with cache contents to copied instances of functions.
void convertToVectorStore()
Convert tree-based storage to vector-based storage.
bool getRange(const RooAbsRealLValue &var, double &lowest, double &highest, double marginFrac=0.0, bool symMode=false) const
Fill Doubles 'lowest' and 'highest' with the lowest and highest value of observable 'var' in this dat...
RooArgSet _cachedVars
! External variables cached with this data set
virtual Int_t numEntries() const
Return number of entries in dataset, i.e., count unweighted entries.
virtual void convertToTreeStore()
Convert vector-based storage to tree-based storage.
double moment(const RooRealVar &var, double order, const char *cutSpec=nullptr, const char *cutRange=nullptr) const
Calculate moment of requested order.
RooAbsData & operator=(const RooAbsData &other)
virtual RooFit::OwningPtr< RooAbsData > emptyClone(const char *newName=nullptr, const char *newTitle=nullptr, const RooArgSet *vars=nullptr, const char *wgtVarName=nullptr) const =0
void SetNameTitle(const char *name, const char *title) override
Set all the TNamed parameters (name and title).
void copyImpl(const RooAbsData &other, const char *newname)
virtual void resetCache()
Internal method – Remove cached function values.
virtual std::unique_ptr< RooAbsData > reduceEng(const RooArgSet &varSubset, const RooFormulaVar *cutVar, const char *cutRange=nullptr, std::size_t nStart=0, std::size_t=std::numeric_limits< std::size_t >::max())=0
Int_t defaultPrintContents(Option_t *opt) const override
Define default print options, for a given print style.
std::unique_ptr< RooArgSet > _globalObservables
Snapshot of global observables.
virtual double weightSquared() const =0
TTree * GetClonedTree() const
Return a clone of the TTree which stores the data or create such a tree if vector storage is used.
void attachBuffers(const RooArgSet &extObs)
std::map< std::string, RooAbsData * > _ownedComponents
Owned external components.
static StorageType getDefaultStorageType()
void Streamer(TBuffer &) override
Stream an object of class RooAbsData.
void printName(std::ostream &os) const override
Print name of dataset.
const TTree * tree() const
Return a pointer to the TTree which stores the data.
TH1 * createHistogram(const char *name, const RooAbsRealLValue &xvar, const RooCmdArg &arg1={}, const RooCmdArg &arg2={}, const RooCmdArg &arg3={}, const RooCmdArg &arg4={}, const RooCmdArg &arg5={}, const RooCmdArg &arg6={}, const RooCmdArg &arg7={}, const RooCmdArg &arg8={}) const
Calls createHistogram(const char *name, const RooAbsRealLValue& xvar, const RooLinkedList& argList) c...
void initializeVars(RooArgSet const &vars)
~RooAbsData() override
Destructor.
Abstract interface for all probability density functions.
Abstract base class for objects that represent a real value that may appear on the left hand side of ...
virtual Int_t getBins(const char *name=nullptr) const
Get number of bins of currently defined range.
virtual const RooAbsBinning & getBinning(const char *name=nullptr, bool verbose=true, bool createOnTheFly=false) const =0
Retrieve binning configuration with given name or default binning.
TH1 * createHistogram(const char *name, const RooCmdArg &arg1={}, const RooCmdArg &arg2={}, const RooCmdArg &arg3={}, const RooCmdArg &arg4={}, const RooCmdArg &arg5={}, const RooCmdArg &arg6={}, const RooCmdArg &arg7={}, const RooCmdArg &arg8={}) const
virtual double getMax(const char *name=nullptr) const
Get maximum of currently defined range.
virtual double getMin(const char *name=nullptr) const
Get minimum of currently defined range.
Abstract base class for objects that represent a real value and implements functionality common to al...
double getVal(const RooArgSet *normalisationSet=nullptr) const
Evaluate object.
const char * getPlotLabel() const
Get the label associated with the variable.
RooArgList is a container object that can hold multiple RooAbsArg objects.
RooAbsArg * at(Int_t idx) const
Return object at given index, or nullptr if index is out of range.
RooArgSet is a container object that can hold multiple RooAbsArg objects.
RooArgSet * snapshot(bool deepCopy=true) const
Use RooAbsCollection::snapshot(), but return as RooArgSet.
Object to represent discrete states.
Named container for two doubles, two integers two object points and three string pointers that can be...
double getDouble(Int_t idx) const
Return double stored in slot idx.
RooLinkedList const & subArgs() const
Return list of sub-arguments in this RooCmdArg.
Int_t getInt(Int_t idx) const
TObject * Clone(const char *newName=nullptr) const override
Make a clone of an object using the Streamer facility.
Configurable parser for RooCmdArg named arguments.
void defineMutex(const char *head, Args_t &&... tail)
Define arguments where any pair is mutually exclusive.
bool process(const RooCmdArg &arg)
Process given RooCmdArg.
bool hasProcessed(const char *cmdName) const
Return true if RooCmdArg with name 'cmdName' has been processed.
double getDouble(const char *name, double defaultValue=0.0) const
Return double property registered with name 'name'.
bool defineDouble(const char *name, const char *argName, int doubleNum, double defValue=0.0)
Define double property name 'name' mapped to double in slot 'doubleNum' in RooCmdArg with name argNam...
static void stripCmdList(RooLinkedList &cmdList, const char *cmdsToPurge)
Utility function that strips command names listed (comma separated) in cmdsToPurge from cmdList.
RooArgSet * getSet(const char *name, RooArgSet *set=nullptr) const
Return RooArgSet property registered with name 'name'.
bool defineSet(const char *name, const char *argName, int setNum, const RooArgSet *set=nullptr)
Define TObject property name 'name' mapped to object in slot 'setNum' in RooCmdArg with name argName ...
bool ok(bool verbose) const
Return true of parsing was successful.
bool defineObject(const char *name, const char *argName, int setNum, const TObject *obj=nullptr, bool isArray=false)
Define TObject property name 'name' mapped to object in slot 'setNum' in RooCmdArg with name argName ...
const char * getString(const char *name, const char *defaultValue="", bool convEmptyToNull=false) const
Return string property registered with name 'name'.
bool defineString(const char *name, const char *argName, int stringNum, const char *defValue="", bool appendMode=false)
Define double property name 'name' mapped to double in slot 'stringNum' in RooCmdArg with name argNam...
bool defineInt(const char *name, const char *argName, int intNum, int defValue=0)
Define integer property name 'name' mapped to integer in slot 'intNum' in RooCmdArg with name argName...
void allowUndefined(bool flag=true)
If flag is true the processing of unrecognized RooCmdArgs is not considered an error.
int getInt(const char *name, int defaultValue=0) const
Return integer property registered with name 'name'.
TObject * getObject(const char *name, TObject *obj=nullptr) const
Return TObject property registered with name 'name'.
Combines several disjunct datasets into one.
Container class to hold N-dimensional binned data.
Container class to hold unbinned data.
Graphical representation of binned data based on the TGraphAsymmErrors class.
Collection class for internal use, storing a collection of RooAbsArg pointers in a doubly linked list...
bool Replace(const TObject *oldArg, const TObject *newArg)
Replace object 'oldArg' in collection with new object 'newArg'.
void Delete(Option_t *o=nullptr) override
Remove all elements in collection and delete all elements NB: Collection does not own elements,...
TObject * find(const char *name) const
Return pointer to object with given name in collection.
virtual void Add(TObject *arg)
TObject * FindObject(const char *name) const override
Return pointer to object with given name.
Connects several RooAbsCategory objects into a single category.
const TNamed * constPtr(const char *stringPtr)
Return a unique TNamed pointer for given C++ string.
static RooNameReg & instance()
Return reference to singleton instance.
static void incrementRenameCounter()
The renaming counter has to be incremented every time a RooAbsArg is renamed.
@ kRenamedArg
TNamed flag to indicate that some RooAbsArg has been renamed (flag set in new name)
static constexpr double infinity()
Return internal infinity representation.
Plot frame and a container for graphics objects within that frame.
void addObject(TObject *obj, Option_t *drawOptions="", bool invisible=false)
Add a generic object to this plot.
TObject * findObject(const char *name, const TClass *tClass=nullptr) const
Find the named object in our list of items and return a pointer to it.
double getFitRangeNEvt() const
Return the number of events in the fit range.
TAttLine * getAttLine(const char *name=nullptr) const
Return a pointer to the line attributes of the named object in this plot, or zero if the named object...
TAttFill * getAttFill(const char *name=nullptr) const
Return a pointer to the fill attributes of the named object in this plot, or zero if the named object...
RooAbsRealLValue * getPlotVar() const
TAttMarker * getAttMarker(const char *name=nullptr) const
Return a pointer to the marker attributes of the named object in this plot, or zero if the named obje...
void updateNormVars(const RooArgSet &vars)
Install the given set of observables are reference normalization variables for this frame.
void addPlotable(RooPlotable *plotable, Option_t *drawOptions="", bool invisible=false, bool refreshNorm=false)
Add the specified plotable object to our plot.
double getFitRangeBinW() const
Return the bin width that is being used to normalise the PDF.
Variable that can be changed from the outside.
Facilitates simultaneous fitting of multiple PDFs to subsets of a given dataset.
RooAbsPdf * getPdf(RooStringView catName) const
Return the p.d.f associated with the given index category name.
const RooAbsCategoryLValue & indexCat() const
The RooStringView is a wrapper around a C-style string that can also be constructed from a std::strin...
static void destroy(const TObject *obj)
Register deletion of object 'obj'.
static void create(const TObject *obj)
Register creation of object 'obj'.
TTree-backed data storage.
Uses std::vector to store data columns.
virtual void SetFillColor(Color_t fcolor)
Set the fill area color.
virtual void SetFillStyle(Style_t fstyle)
Set the fill area style.
virtual void SetLineStyle(Style_t lstyle)
Set the line style.
virtual void SetLineWidth(Width_t lwidth)
Set the line width.
virtual void SetLineColor(Color_t lcolor)
Set the line color.
virtual void SetMarkerColor(Color_t mcolor=1)
Set the marker color.
virtual void SetMarkerStyle(Style_t mstyle=1)
Set the marker style.
virtual void SetMarkerSize(Size_t msize=1)
Set the marker size.
Buffer base class used for serializing objects.
virtual Int_t ReadClassBuffer(const TClass *cl, void *pointer, const TClass *onfile_class=nullptr)=0
virtual Int_t WriteClassBuffer(const TClass *cl, void *pointer)=0
TH1 is the base class of all histogram classes in ROOT.
virtual Double_t GetBinError(Int_t bin) const
Return value of error associated to bin number bin.
virtual Int_t GetDimension() const
virtual void SetBinError(Int_t bin, Double_t error)
Set the bin Error Note that this resets the bin eror option to be of Normal Type and for the non-empt...
virtual Int_t Fill(Double_t x)
Increment bin with abscissa X by 1.
virtual TArrayD * GetSumw2()
virtual Int_t FindBin(Double_t x, Double_t y=0, Double_t z=0)
Return Global bin number corresponding to x,y,z.
virtual void Sumw2(Bool_t flag=kTRUE)
Create structure to store sum of squares of weights.
2-D histogram with a float per channel (see TH1 documentation)
Service class for 2-D histogram classes.
The 3-D histogram classes derived from the 1-D histogram classes.
TObject * Clone(const char *newname="") const override
Make a clone of an object using the Streamer facility.
virtual void SetTitle(const char *title="")
Set the title of the TNamed.
const char * GetName() const override
Returns name of object.
const char * GetTitle() const override
Returns title of object.
virtual void SetName(const char *name)
Set the name of the TNamed.
TNamed & operator=(const TNamed &rhs)
TNamed assignment operator.
virtual const char * ClassName() const
Returns name of class to which the object belongs.
void SetBit(UInt_t f, Bool_t set)
Set or unset the user status bits as specified in f.
TObject()
TObject constructor.
A Pave (see TPave) with text, lines or/and boxes inside.
A TTree represents a columnar dataset.
virtual TTree * CloneTree(Long64_t nentries=-1, Option_t *option="")
Create a clone of this tree and copy nentries.
void box(Int_t pat, Double_t x1, Double_t y1, Double_t x2, Double_t y2)
RooCmdArg ZVar(const RooAbsRealLValue &var, const RooCmdArg &arg={})
RooCmdArg YVar(const RooAbsRealLValue &var, const RooCmdArg &arg={})
RooCmdArg AxisLabel(const char *name)
RooCmdArg Binning(const RooAbsBinning &binning)
std::vector< std::string > Split(std::string_view str, std::string_view delims, bool skipEmpty=false)
Splits a string at each character in delims.
T * OwningPtr
An alias for raw pointers for indicating that the return type of a RooFit function is an owning point...
OwningPtr< T > makeOwningPtr(std::unique_ptr< T > &&ptr)
Internal helper to turn a std::unique_ptr<T> into an OwningPtr.
const char * addToHistName
RooAbsData::ErrorType etype
static uint64_t sum(uint64_t i)