117using std::endl, std::string, std::map, std::list, std::ifstream, std::ofstream, std::ostream;
131struct FinalizeVarsOutput {
133 std::unique_ptr<RooRealVar> weight;
134 std::string weightVarName;
138FinalizeVarsOutput finalizeVars(
RooArgSet const &vars,
140 const char* wgtVarName,
145 FinalizeVarsOutput out;
146 out.finalVars.
add(vars);
150 std::vector<RooAbsData*> weightedImpDatasets;
151 if(impData && impData->
isWeighted()) weightedImpDatasets.push_back(impData);
153 if(
data->isWeighted()) {
154 weightedImpDatasets.push_back(
data);
158 bool needsWeightErrors =
false;
163 needsWeightErrors =
true;
168 out.finalVars.
add(*indexCat,
true);
171 out.weightVarName = wgtVarName ? wgtVarName :
"";
173 if(out.weightVarName.empty()) {
179 out.weightVarName = ds->weightVar()->GetName();
192 RooAbsArg * wgtVar = out.finalVars.
find(out.weightVarName.c_str());
193 if (!out.weightVarName.empty() && !wgtVar) {
194 const char*
name = out.weightVarName.c_str();
195 out.weight = std::make_unique<RooRealVar>(
name,
name, 1.0);
196 wgtVar = out.weight.get();
197 out.finalVars.
add(*out.weight);
200 if(needsWeightErrors) {
201 out.errorSet.
add(*wgtVar);
205 if(errorSet) out.errorSet.
add(*errorSet,
true);
211std::unique_ptr<RooDataSet> makeDataSetFromDataHist(
RooDataHist const &hist)
216 const char* wgtName = wgtVarCmdArg.
getString(0);
278 RooCmdConfig pc(
"RooDataSet::ctor(" + std::string(GetName()) +
")");
279 pc.defineInt(
"ownLinked",
"OwnLinked",0) ;
280 pc.defineObject(
"impTree",
"ImportTree",0) ;
281 pc.defineObject(
"impData",
"ImportData",0) ;
282 pc.defineObject(
"indexCat",
"IndexCat",0) ;
283 pc.defineObject(
"impSliceData",
"ImportDataSlice",0,
nullptr,
true) ;
284 pc.defineString(
"impSliceState",
"ImportDataSlice",0,
"",
true) ;
285 pc.defineObject(
"lnkSliceData",
"LinkDataSlice",0,
nullptr,
true) ;
286 pc.defineString(
"lnkSliceState",
"LinkDataSlice",0,
"",
true) ;
287 pc.defineString(
"cutSpec",
"CutSpec",0,
"") ;
288 pc.defineObject(
"cutVar",
"CutVar",0) ;
289 pc.defineString(
"cutRange",
"CutRange",0,
"") ;
290 pc.defineString(
"wgtVarName",
"WeightVarName",0,
"") ;
291 pc.defineInt(
"newWeight1",
"WeightVarName",0,0) ;
292 pc.defineString(
"fname",
"ImportFromFile",0,
"") ;
293 pc.defineString(
"tname",
"ImportFromFile",1,
"") ;
294 pc.defineObject(
"wgtVar",
"WeightVar",0) ;
295 pc.defineInt(
"newWeight2",
"WeightVar",0,0) ;
296 pc.defineObject(
"dummy1",
"ImportDataSliceMany",0) ;
297 pc.defineObject(
"dummy2",
"LinkDataSliceMany",0) ;
298 pc.defineSet(
"errorSet",
"StoreError",0) ;
299 pc.defineSet(
"asymErrSet",
"StoreAsymError",0) ;
300 pc.defineSet(
"glObs",
"GlobalObservables",0,
nullptr) ;
301 pc.defineMutex(
"ImportTree",
"ImportData",
"ImportDataSlice",
"LinkDataSlice",
"ImportFromFile") ;
302 pc.defineMutex(
"CutSpec",
"CutVar") ;
303 pc.defineMutex(
"WeightVarName",
"WeightVar") ;
304 pc.defineDependency(
"ImportDataSlice",
"IndexCat") ;
305 pc.defineDependency(
"LinkDataSlice",
"IndexCat") ;
306 pc.defineDependency(
"OwnLinked",
"LinkDataSlice") ;
318 const std::string errMsg =
"Error in RooDataSet constructor: command argument list could not be processed";
319 coutE(InputArguments) << errMsg << std::endl;
320 throw std::invalid_argument(errMsg);
323 if(pc.getSet(
"glObs")) setGlobalObservables(*pc.getSet(
"glObs"));
326 TTree* impTree =
static_cast<TTree*
>(pc.getObject(
"impTree")) ;
327 auto impData =
static_cast<RooAbsData*
>(pc.getObject(
"impData")) ;
329 const char* cutSpec = pc.getString(
"cutSpec",
"",
true) ;
330 const char* cutRange = pc.getString(
"cutRange",
"",
true) ;
331 const char* wgtVarName = pc.getString(
"wgtVarName",
"",
true) ;
333 const char* impSliceNames = pc.getString(
"impSliceState",
"",
true) ;
334 const RooLinkedList& impSliceData = pc.getObjectList(
"impSliceData") ;
335 const char* lnkSliceNames = pc.getString(
"lnkSliceState",
"",
true) ;
336 const RooLinkedList& lnkSliceData = pc.getObjectList(
"lnkSliceData") ;
338 RooArgSet* asymErrorSet = pc.getSet(
"asymErrSet") ;
339 const char* fname = pc.getString(
"fname") ;
340 const char* tname = pc.getString(
"tname") ;
341 Int_t ownLinked = pc.getInt(
"ownLinked") ;
342 Int_t newWeight = pc.getInt(
"newWeight1") + pc.getInt(
"newWeight2") ;
346 wgtVarName = wgtVar->
GetName();
349 auto finalVarsInfo = finalizeVars(vars,indexCat,wgtVarName,impData,impSliceData, pc.getSet(
"errorSet"));
350 initializeVars(finalVarsInfo.finalVars);
351 if(!finalVarsInfo.weightVarName.empty()) {
352 wgtVarName = finalVarsInfo.weightVarName.c_str();
355 RooArgSet* errorSet = finalVarsInfo.errorSet.
empty() ? nullptr : &finalVarsInfo.errorSet;
361 map<string,RooAbsData*> hmap ;
364 strlcpy(tmp, lnkSliceNames, 64000);
365 char *token = strtok(tmp,
",");
366 auto hiter = lnkSliceData.
begin();
368 hmap[token] =
static_cast<RooAbsData *
>(*hiter);
369 token = strtok(
nullptr,
",");
377 map<string,RooAbsDataStore*> storeMap ;
380 throw std::string(
"RooDataSet::RooDataSet() ERROR in constructor, cannot find index category") ;
382 for (map<string,RooAbsData*>::iterator hiter = hmap.begin() ; hiter!=hmap.end() ; ++hiter) {
384 if (indexCat && !indexCat->
hasLabel(hiter->first)) {
386 coutI(InputArguments) <<
"RooDataSet::ctor(" <<
GetName() <<
") defining state \"" << hiter->first <<
"\" in index category " << indexCat->
GetName() << std::endl ;
388 if (icat && !icat->
hasLabel(hiter->first)) {
391 icat->
setLabel(hiter->first.c_str()) ;
396 addOwnedComponent(hiter->first.c_str(),*hiter->second) ;
401 _dstore = std::make_unique<RooCompositeDataStore>(
name,title,_vars,*icat,storeMap) ;
408 if (defaultStorageType==Tree) {
409 _dstore = std::make_unique<RooTreeDataStore>(
name,title,_vars,wgtVarName) ;
411 }
else if (defaultStorageType==Vector) {
412 if (wgtVarName && newWeight) {
413 RooAbsArg* wgttmp = _vars.find(wgtVarName) ;
418 _dstore = std::make_unique<RooVectorDataStore>(
name,title,_vars,wgtVarName) ;
423 std::map<string,RooAbsData*> hmap ;
425 auto hiter = impSliceData.
begin() ;
426 for (
const auto& token :
ROOT::
Split(impSliceNames,
",")) {
429 std::stringstream errorMsgStream;
430 errorMsgStream <<
"RooDataSet::RooDataSet(\"" <<
GetName() <<
"\") "
431 <<
"you are providing import data for the category state \"" << token
432 <<
"\", but the index category \"" << indexCat->
GetName() <<
"\" has no such state!";
433 const std::string errorMsg = errorMsgStream.str();
434 coutE(InputArguments) << errorMsg << std::endl;
435 throw std::invalid_argument(errorMsg);
438 hmap[token] =
static_cast<RooDataSet*
>(*hiter);
445 std::unique_ptr<RooArgSet> intErrorSet{_vars.selectCommon(*errorSet)};
446 intErrorSet->setAttribAll(
"StoreError") ;
448 arg->attachToStore(*_dstore) ;
452 std::unique_ptr<RooArgSet> intAsymErrorSet{_vars.selectCommon(*asymErrorSet)};
453 intAsymErrorSet->setAttribAll(
"StoreAsymError") ;
455 arg->attachToStore(*_dstore) ;
463 std::unique_ptr<RooFormulaVar> cutVarTmp;
467 loadValuesFromSlices(*indexCat, hmap, cutRange, cutVar, cutSpec);
468 }
else if (impData) {
470 std::unique_ptr<RooDataSet> impDataSet;
474 impDataSet = makeDataSetFromDataHist(
static_cast<RooDataHist const &
>(*impData));
475 impData = impDataSet.get();
478 cutVarTmp = std::make_unique<RooFormulaVar>(cutSpec, cutSpec, *impData->
get(),
false);
479 cutVar = cutVarTmp.get();
481 _dstore->loadValues(impData->
store(), cutVar, cutRange);
483 }
else if (impTree || (fname && strlen(fname))) {
485 std::unique_ptr<TFile> file;
487 if (impTree ==
nullptr) {
490 std::stringstream ss;
491 ss <<
"RooDataSet::ctor(" <<
GetName() <<
") ERROR file '" << fname
492 <<
"' cannot be opened or does not exist";
493 const std::string errMsg = ss.str();
494 coutE(InputArguments) << errMsg << std::endl;
495 throw std::invalid_argument(errMsg);
498 file->GetObject(tname, impTree);
500 std::stringstream ss;
501 ss <<
"RooDataSet::ctor(" <<
GetName() <<
") ERROR file '" << fname
502 <<
"' does not contain a TTree named '" << tname <<
"'";
503 const std::string errMsg = ss.str();
504 coutE(InputArguments) << errMsg << std::endl;
505 throw std::invalid_argument(errMsg);
510 cutVarTmp = std::make_unique<RooFormulaVar>(cutSpec, cutSpec, _vars,
false);
511 cutVar = cutVarTmp.get();
515 tstore->
loadValues(impTree, cutVar, cutRange);
518 tmpstore.loadValues(impTree, cutVar, cutRange);
519 _dstore->append(tmpstore);
539 bool useOldWeight =
_wgtVar && (wgtVarName ==
nullptr || strcmp(wgtVarName,
_wgtVar->
GetName()) == 0);
541 if(newName ==
nullptr) newName =
GetName();
542 if(newTitle ==
nullptr) newTitle =
GetTitle();
546 if(vars ==
nullptr) {
554 vars2.
add(varInData ? *varInData : *var);
565 if(var->getAttribute(
"StoreError")) errorSet.
add(*var);
566 if(var->getAttribute(
"StoreAsymError")) asymErrorSet.
add(*var);
570 return RooFit::makeOwningPtr<RooAbsData>(std::make_unique<RooDataSet>(
571 newName, newTitle, vars2, WeightVar(wgtVarName), StoreError(errorSet), StoreAsymError(asymErrorSet)));
588 coutE(DataHandling) <<
"RooDataSet::RooDataSet(" <<
GetName() <<
"): designated weight variable "
589 << wgtVarName <<
" not found in set of variables, no weighting will be assigned" << std::endl ;
590 throw std::invalid_argument(
"RooDataSet::initialize() weight variable could not be initialised.");
592 coutE(DataHandling) <<
"RooDataSet::RooDataSet(" <<
GetName() <<
"): designated weight variable "
593 << wgtVarName <<
" is not of type RooRealVar, no weighting will be assigned" << std::endl ;
594 throw std::invalid_argument(
"RooDataSet::initialize() weight variable could not be initialised.");
608 const char *cutRange, std::size_t nStart, std::size_t nStop)
const
618 std::unique_ptr<RooAbsData> out{createEmptyClone()};
620 if (!cutRange || strchr(cutRange,
',') ==
nullptr) {
622 ds.
_dstore =
_dstore->reduce(ds.GetName(), ds.GetTitle(), ds._vars, cutVar, cutRange, nStart, nStop);
627 std::stringstream errMsg;
628 errMsg <<
"Error in RooAbsData::reduce! The ranges " << cutRange <<
" are overlapping!";
629 throw std::runtime_error(errMsg.str());
631 for (
const auto &token : tokens) {
632 std::unique_ptr<RooAbsData> appendedData{createEmptyClone()};
633 auto &ds =
static_cast<RooDataSet &
>(*appendedData);
634 ds.
_dstore =
_dstore->reduce(ds.GetName(), ds.GetTitle(), ds._vars, cutVar, token.c_str(), nStart, nStop);
668 title = std::string(
GetTitle()) +
"_binned" ;
697 return e > 0.0 ?
e *
e :
w *
w;
707 if(first +
len > nEntries) {
708 throw std::runtime_error(
"RooDataSet::getWeightBatch(): requested range not valid for dataset.");
712 if(allWeights.empty())
return {};
714 if(!sumW2)
return {&*(std::cbegin(allWeights) + first),
len};
724 for (std::size_t i = 0; i < nEntries; ++i) {
730 return std::span<const double>(&*(
_sumW2Buffer->begin() + first),
len);
777 std::unique_ptr<RooFormulaEvaluator> select =
nullptr;
778 if (cutSpec && strlen(cutSpec) > 0) {
779 select = RooFormulaUtils::makeFormulaEvaluator(
"select", cutSpec, *
get());
791 if (select && RooFormulaUtils::evalFormula(*select,
_vars) == 0.)
870 ccoutE(DataHandling) <<
"An event weight/error was passed but no weight variable was defined"
871 <<
" in the dataset '" <<
GetName() <<
"'. The weight will be ignored." << std::endl;
877 && std::abs(wgt*wgt - wgtError)/wgtError > 1.E-15
878 && _errorMsgCount < 5 && !_wgtVar->getAttribute(
"StoreError")) {
879 coutE(DataHandling) <<
"An event weight error was passed to the RooDataSet '" <<
GetName()
881 <<
"' does not store errors. Check `StoreError` in the RooDataSet constructor." << std::endl;
919 ccoutE(DataHandling) <<
"An event weight was given but no weight variable was defined"
920 <<
" in the dataset '" <<
GetName() <<
"'. The weight will be ignored." << std::endl;
925 && _errorMsgCount < 5 && !_wgtVar->getAttribute(
"StoreAsymError")) {
926 coutE(DataHandling) <<
"An event weight error was passed to the RooDataSet '" <<
GetName()
928 <<
"' does not store errors. Check `StoreAsymError` in the RooDataSet constructor." << std::endl;
971 ccoutE(DataHandling) <<
"An event weight was given but no weight variable was defined"
972 <<
" in the dataset '" <<
GetName() <<
"'. The weight will be ignored." << std::endl;
979 && wgtError != 0. && wgtError != wgt*wgt
980 && _errorMsgCount < 5 && !_wgtVar->getAttribute(
"StoreError")) {
981 coutE(DataHandling) <<
"An event weight error was passed to the RooDataSet '" <<
GetName()
983 <<
"' does not store errors. Check `StoreError` in the RooDataSet constructor." << std::endl;
1004 list<RooDataSet*> dsetList ;
1005 if (data1) dsetList.push_back(data1) ;
1006 if (data2) dsetList.push_back(data2) ;
1007 if (data3) dsetList.push_back(data3) ;
1008 if (data4) dsetList.push_back(data4) ;
1009 if (data5) dsetList.push_back(data5) ;
1010 if (data6) dsetList.push_back(data6) ;
1011 return merge(dsetList) ;
1027 for (list<RooDataSet*>::iterator iter = dsetList.begin() ; iter != dsetList.end() ; ++iter) {
1029 coutE(InputArguments) <<
"RooDataSet::merge(" <<
GetName() <<
") ERROR: datasets have different size" << std::endl ;
1035 list<RooAbsDataStore*> dstoreList ;
1036 for (list<RooDataSet*>::iterator iter = dsetList.begin() ; iter != dsetList.end() ; ++iter) {
1038 dstoreList.push_back((*iter)->store()) ;
1077 std::unique_ptr<RooAbsArg> ret{
_dstore->addColumn(var,adjustRange)};
1126 pc.
defineInt(
"lineColor",
"LineColor",0,-999) ;
1127 pc.
defineInt(
"lineStyle",
"LineStyle",0,-999) ;
1128 pc.
defineInt(
"lineWidth",
"LineWidth",0,-999) ;
1129 pc.
defineInt(
"markerColor",
"MarkerColor",0,-999) ;
1130 pc.
defineInt(
"markerStyle",
"MarkerStyle",0,8) ;
1132 pc.
defineInt(
"fillColor",
"FillColor",0,-999) ;
1133 pc.
defineInt(
"fillStyle",
"FillStyle",0,-999) ;
1134 pc.
defineInt(
"histInvisible",
"Invisible",0,0) ;
1147 const char* drawOptions = pc.
getString(
"drawOption") ;
1148 Int_t histInvisible = pc.
getInt(
"histInvisible") ;
1149 const char* histName = pc.
getString(
"histName",
nullptr,
true) ;
1150 double scaleFactor = pc.
getDouble(
"scaleFactor") ;
1159 coutE(InputArguments) <<
"RooDataSet::plotOnXY(" <<
GetName() <<
") ERROR: no YVar() argument specified and dataset is not weighted" << std::endl ;
1164 if (yvar && !dataY) {
1165 coutE(InputArguments) <<
"RooDataSet::plotOnXY(" <<
GetName() <<
") ERROR on YVar() argument, dataset does not contain a variable named " << yvar->
GetName() << std::endl ;
1217 frame->
addPlotable(graph,drawOptions,histInvisible) ;
1274 const char *verbOpt,
const char* commonPath,
1275 const char* indexCatName) {
1280 bool ownIsBlind(
true) ;
1281 RooAbsArg* blindState = variables.find(
"blindState") ;
1283 blindState =
new RooCategory(
"blindState",
"Blinding State") ;
1284 variables.add(*blindState) ;
1286 ownIsBlind = false ;
1288 oocoutE(
nullptr,DataHandling) <<
"RooDataSet::read: ERROR: variable list already contains"
1289 <<
"a non-RooCategory blindState member" << std::endl ;
1292 oocoutW(
nullptr,DataHandling) <<
"RooDataSet::read: WARNING: recycling existing "
1293 <<
"blindState category in variable list" << std::endl ;
1308 auto data = std::make_unique<RooDataSet>(
"dataset", fileList, variables);
1309 if (ownIsBlind) { variables.remove(*blindState) ;
delete blindState ; }
1311 oocoutE(
nullptr,DataHandling) <<
"RooDataSet::read: unable to create a new dataset"
1317 blindCat =
static_cast<RooCategory*
>(
data->_vars.find(
"blindState")) ;
1324 tmp =
data->_vars.find(indexCatName) ;
1326 oocoutE(
data.get(),DataHandling) <<
"RooDataSet::read: no index category named "
1327 << indexCatName <<
" in supplied variable list" << std::endl ;
1331 oocoutE(
data.get(),DataHandling) <<
"RooDataSet::read: variable " << indexCatName
1332 <<
" is not a RooCategory" << std::endl ;
1342 Int_t outOfRange(0) ;
1345 Int_t fileSeqNum(0);
1351 const char *catname = strchr(
filename.c_str(),
':');
1367 char newLabel[128] ;
1368 snprintf(newLabel,128,
"file%03d",fileSeqNum) ;
1369 if (indexCat->
defineType(newLabel,fileSeqNum)) {
1370 oocoutE(
data.get(), DataHandling) <<
"RooDataSet::read: Error, cannot register automatic type name " << newLabel
1371 <<
" in index category " << indexCat->
GetName() << std::endl ;
1379 oocoutI(
data.get(), DataHandling) <<
"RooDataSet::read: reading file " <<
filename << std::endl ;
1382 TString fullName(commonPath) ;
1384 ifstream file(fullName) ;
1387 oocoutE(
data.get(), DataHandling) <<
"RooDataSet::read: unable to open '"
1388 <<
filename <<
"'. Returning nullptr now." << std::endl;
1394 bool haveBlindString(
false) ;
1396 while(file.good() && !file.eof()) {
1398 if(debug)
oocxcoutD(
data.get(),DataHandling) <<
"reading line " <<
line << std::endl;
1401 if (file.peek() ==
'#') {
1402 if(debug)
oocxcoutD(
data.get(),DataHandling) <<
"skipping comment on line " <<
line << std::endl;
1405 bool readError = variables.readFromStream(file,
true,verbose) ;
1406 data->_vars.assign(variables) ;
1410 oocoutE(
data.get(), DataHandling) <<
"RooDataSet::read(static): read error at line " <<
line << std::endl ;
1417 blindCat->
setIndex(haveBlindString) ;
1423 while (isspace(file.peek())) {
1425 file >> std::noskipws >> dummy >> std::skipws;
1437 assert(
dynamic_cast<RooCategory*
>(variables.find(indexCatName)));
1438 const auto origIndexCat =
static_cast<RooCategory*
>(variables.find(indexCatName));
1439 for (
const auto& nameIdx : *indexCat) {
1440 origIndexCat->
defineType(nameIdx.first, nameIdx.second);
1443 oocoutI(
data.get(),DataHandling) <<
"RooDataSet::read: read " <<
data->numEntries()
1444 <<
" events (ignored " << outOfRange <<
" out of range events)" << std::endl;
1446 return data.release();
1463 coutE(DataHandling) <<
"RooDataSet::write(" <<
GetName() <<
") cannot create file " <<
filename << std::endl ;
1468 coutI(DataHandling) <<
"RooDataSet::write(" <<
GetName() <<
") writing ASCII file " <<
filename << std::endl ;
1486 coutW(DataHandling) <<
"RooDataSet::write(" <<
GetName() <<
"): WARNING error(s) have occurred in writing" << std::endl ;
1504 os <<
indent <<
" Dataset variable \"" <<
_wgtVar->
GetName() <<
"\" is interpreted as the event weight" << std::endl ;
1535 os << arg->GetName() ;
1598 TTree *X_tree(
nullptr);
1608 _dstore = std::make_unique<RooTreeDataStore>(X_tree,
_vars);
1643 const char * cstr =
"cstr";
1654 const char *rangeName,
RooFormulaVar const *cutVar,
const char *cutSpec)
1657 if (cutVar && cutSpec) {
1658 throw std::invalid_argument(
"Only one of cutVar or cutSpec should be not a nullptr!");
1663 for (
auto const &item : slices) {
1664 std::unique_ptr<RooDataSet> sliceDataSet;
1669 sliceDataSet = makeDataSetFromDataHist(
static_cast<RooDataHist const &
>(*sliceData));
1670 sliceData = sliceDataSet.get();
1674 if (!indexCat.
hasLabel(item.first)) {
1676 coutI(InputArguments) <<
"RooDataSet::ctor(" <<
GetName() <<
") defining state \"" << item.first
1677 <<
"\" in index category " << indexCat.
GetName() << std::endl;
1679 if (!indexCatInData.hasLabel(item.first)) {
1680 indexCatInData.defineType(item.first);
1682 indexCatInData.setLabel(item.first.c_str());
1683 std::unique_ptr<RooFormulaVar> cutVarTmp;
1685 cutVarTmp = std::make_unique<RooFormulaVar>(cutSpec, cutSpec, *sliceData->
get(),
false);
1686 cutVar = cutVarTmp.get();
1688 _dstore->loadValues(sliceData->
store(), cutVar, rangeName);
1704 os <<
"Contents of RooDataSet \"" <<
GetName() <<
"\"" << std::endl;
1707 os <<
"(dataset is empty)" << std::endl;
1711 if (
get() ==
nullptr ||
get()->empty()) {
1712 os <<
"(dataset has no observables)" << std::endl;
1718 os <<
" Entry " << i <<
": ";
1721 for (
const auto* var : *row) {
1722 if (!first) os <<
", ";
1725 os << var->GetName() <<
"=";
1726 if (
auto realVar =
dynamic_cast<const RooRealVar*
>(var)) {
1727 os << realVar->getVal();
1728 }
else if (
auto catVar =
dynamic_cast<const RooCategory*
>(var)) {
1729 os << catVar->getLabel();
1731 os <<
"(unsupported type)";
1735 os <<
", weight=" <<
weight();
1739 if (lo != 0.0 ||
hi != 0.0) {
1740 os <<
" ±[" << lo <<
"," <<
hi <<
"]";
ROOT::RRangeCast< T, false, Range_t > static_range_cast(Range_t &&coll)
int Int_t
Signed integer 4 bytes (int)
float Size_t
Attribute size (float)
short Version_t
Class version identifier (short)
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 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 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 filename
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
The Kahan summation is a compensated summation algorithm, which significantly reduces numerical error...
Common abstract base class for objects that represent a value and a "shape" in RooFit.
TClass * IsA() const override
void setAttribute(const Text_t *name, bool value=true)
Set (default) or clear a named boolean attribute of this object.
bool hasLabel(const std::string &label) const
Check if a state with name label exists.
virtual const char * getCurrentLabel() const
Return label string of current state.
virtual void removeAll()
Remove all arguments from our set, deleting them if we own them.
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.
void assignFast(const RooAbsCollection &other, bool setValDirty=true) const
Functional equivalent of assign() but assumes this and other collection have same layout.
virtual bool add(const RooAbsArg &var, bool silent=false)
Add the specified argument to list.
void assign(const RooAbsCollection &other) const
Sets the value, cache and constant attribute of any argument in our set that also appears in the othe...
virtual bool addOwned(RooAbsArg &var, bool silent=false)
Add an argument and transfer the ownership to the collection.
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 bool isWeighted() const =0
virtual double sumEntries() const
virtual double weightError(RooAbsData::ErrorType etype=RooAbsData::Poisson) const =0
virtual double weight() const =0
Abstract base class for binned and unbinned datasets.
virtual const RooArgSet * get() const
void printMultiline(std::ostream &os, Int_t contents, bool verbose=false, TString indent="") const override
Interface for detailed printing of object.
void SetName(const char *name) override
Set the name of the TNamed.
RooAbsDataStore * store()
std::unique_ptr< RooAbsDataStore > _dstore
Data storage implementation.
RooArgSet _vars
Dimensions of this data set.
virtual Int_t numEntries() const
Return number of entries in dataset, i.e., count unweighted entries.
virtual bool isWeighted() const
void Streamer(TBuffer &) override
Stream an object of class RooAbsData.
double getVal(const RooArgSet *normalisationSet=nullptr) const
Evaluate object.
RooArgList is a container object that can hold multiple RooAbsArg objects.
RooArgSet is a container object that can hold multiple RooAbsArg objects.
void Streamer(TBuffer &) override
Stream an object of class TObject.
virtual void writeToStream(std::ostream &os, bool compact, const char *section=nullptr) const
Write the contents of the argset in ASCII form to given stream.
Object to represent discrete states.
bool setIndex(Int_t index, bool printError=true) override
Set value by specifying the index code of the desired state.
bool defineType(const std::string &label)
Define a state with given name.
bool setLabel(const char *label, bool printError=true) override
Set value by specifying the name of the desired state.
Named container for two doubles, two integers two object points and three string pointers that can be...
const char * getString(Int_t idx) const
Return string stored in slot idx.
Configurable parser for RooCmdArg named arguments.
bool process(const RooCmdArg &arg)
Process given RooCmdArg.
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...
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...
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'.
Container class to hold N-dimensional binned data.
double weight(std::size_t i) const
Return weight of i-th bin.
double weightSquared(std::size_t i) const
Return squared weight sum of i-th bin.
const RooArgSet * get() const override
Get bin centre of current bin.
Container class to hold unbinned data.
RooFit::OwningPtr< RooAbsData > emptyClone(const char *newName=nullptr, const char *newTitle=nullptr, const RooArgSet *vars=nullptr, const char *wgtVarName=nullptr) const override
Return an empty clone of this dataset.
RooRealVar * _wgtVar
Pointer to weight variable (if set)
bool _doWeightErrorCheck
! When adding events with weights, check that weights can actually be stored.
RooArgSet _varsNoWgt
Vars without weight variable.
void loadValuesFromSlices(RooCategory &indexCat, std::map< std::string, RooAbsData * > const &slices, const char *rangeName, RooFormulaVar const *cutVar, const char *cutSpec)
RooFit::OwningPtr< RooDataHist > binnedClone(const char *newName=nullptr, const char *newTitle=nullptr) const
Return binned clone of this dataset.
void weightError(double &lo, double &hi, ErrorType etype=SumW2) const override
Return the asymmetric errors on the current weight.
const RooArgSet * get() const override
Return a RooArgSet with the coordinates of the current event.
void printContents(std::ostream &os=std::cout) const override
Print the contents of the dataset to the specified output stream.
virtual RooPlot * plotOnXY(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
Special plot method for 'X-Y' datasets used in fitting.
void initialize(const char *wgtVarName)
Initialize the dataset.
void printArgs(std::ostream &os) const override
Print argument of dataset, i.e. the observable names.
void SetName(const char *name) override
Change the name of this dataset into the given name.
virtual void addFast(const RooArgSet &row, double weight=1.0, double weightError=0.0)
Add a data point, with its coordinates specified in the 'data' argset, to the data set.
bool merge(RooDataSet *data1, RooDataSet *data2=nullptr, RooDataSet *data3=nullptr, RooDataSet *data4=nullptr, RooDataSet *data5=nullptr, RooDataSet *data6=nullptr)
TClass * IsA() const override
virtual RooAbsArg * addColumn(RooAbsArg &var, bool adjustRange=true)
Add a column with the values of the given (function) argument to this dataset.
bool write(const char *filename) const
Write the contents of this dataset to an ASCII file with the specified name.
double sumEntries() const override
Return effective number of entries in dataset, i.e., sum all weights.
std::span< const double > getWeightBatch(std::size_t first, std::size_t len, bool sumW2) const override
~RooDataSet() override
Destructor.
bool isNonPoissonWeighted() const override
Returns true if histogram contains bins with entries with a non-integer weight.
void SetNameTitle(const char *name, const char *title) override
Change the title of this dataset into the given name.
void printValue(std::ostream &os) const override
Print value of the dataset, i.e. the sum of weights contained in the dataset.
void append(RooDataSet &data)
Add all data points of given data set to this data set.
RooDataSet()
Default constructor for persistence.
std::unique_ptr< std::vector< double > > _sumW2Buffer
! Buffer for sumW2 in case a batch of values is requested.
void Streamer(TBuffer &) override
Stream an object of class RooDataSet.
void add(const RooArgSet &row, double weight, double weightError)
Add one ore more rows of data.
unsigned short _errorMsgCount
! Counter to silence error messages when filling dataset.
std::unique_ptr< RooAbsData > reduceEng(const RooArgSet &varSubset, const RooFormulaVar *cutVar, const char *cutRange=nullptr, std::size_t nStart=0, std::size_t nStop=std::numeric_limits< std::size_t >::max()) const override
Implementation of RooAbsData virtual method that drives the RooAbsData::reduce() methods.
void convertToTreeStore() override
Convert vector-based storage to tree-based storage.
void printMultiline(std::ostream &os, Int_t contents, bool verbose=false, TString indent="") const override
Print info about this dataset to the specified output stream.
double weightSquared() const override
Return squared event weight of the current event.
double weight() const override
Return event weight of current event.
static RooDataSet * read(const char *filename, const RooArgList &variables, const char *opts="", const char *commonPath="", const char *indexCatName=nullptr)
Read data from a text file and create a dataset from it.
bool isWeighted() const override
Return true if dataset contains weighted events.
Utility base class for RooFit objects that are to be attached to ROOT directories.
virtual void Streamer(TBuffer &)
void removeFromDir(TObject *obj)
Remove object from directory it was added to.
TDirectory * _dir
! Associated directory
Graphical representation of binned data based on the TGraphAsymmErrors class.
void addBinWithXYError(Axis_t binCenter, double n, double exlow, double exhigh, double eylow, double eyhigh, double scaleFactor=1.0)
Add a bin to this histogram with the specified bin contents and error.
Collection class for internal use, storing a collection of RooAbsArg pointers in a doubly linked list...
virtual void Add(TObject *arg)
RooLinkedListIterImpl begin() const
Plot frame and a container for graphics objects within that frame.
RooAbsRealLValue * getPlotVar() const
void addPlotable(RooPlotable *plotable, Option_t *drawOptions="", bool invisible=false, bool refreshNorm=false)
Add the specified plotable object to our plot.
Variable that can be changed from the outside.
void setVal(double value) override
Set value of variable to 'value'.
void setError(double value)
double getErrorLo() const
void setAsymError(double lo, double hi)
double getErrorHi() const
The RooStringView is a wrapper around a C-style string that can also be constructed from a std::strin...
TTree-backed data storage.
void loadValues(const TTree *t, const RooFormulaVar *select=nullptr, const char *rangeName=nullptr, Int_t nStart=0, Int_t nStop=2000000000)
Load values from tree 't' into this data collection, optionally selecting events using the RooFormula...
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 SetMarkerStyle(Style_t mstyle=1)
Set the marker style.
virtual void SetMarkerSize(Size_t msize=1)
Set the marker size.
virtual void SetMarkerColor(Color_t mcolor=1)
Set the marker color.
Buffer base class used for serializing objects.
virtual Version_t ReadVersion(UInt_t *start=nullptr, UInt_t *bcnt=nullptr, const TClass *cl=nullptr)=0
virtual Int_t CheckByteCount(UInt_t startpos, UInt_t bcnt, const TClass *clss)=0
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
static TClass * GetClass(const char *name, Bool_t load=kTRUE, Bool_t silent=kFALSE)
Static method returning pointer to TClass of the specified class name.
virtual TList * GetList() const
static TFile * Open(const char *name, Option_t *option="", const char *ftitle="", Int_t compress=ROOT::RCompressionSetting::EDefaults::kUseCompiledDefault, Int_t netopt=0)
Create / open a file.
void SetName(const char *name="") override
Set graph name.
void Add(TObject *obj) override
TObject * Remove(TObject *obj) override
Remove object from the list.
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.
Mother of all ROOT objects.
virtual Bool_t InheritsFrom(const char *classname) const
Returns kTRUE if object inherits from class "classname".
void ToLower()
Change string to lower-case.
virtual void Streamer(TBuffer &)
Stream a string object.
TString & Append(const char *cs)
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
A TTree represents a columnar dataset.
RooCmdArg StoreError(const RooArgSet &aset)
RooCmdArg WeightVar(const char *name="weight", bool reinterpretAsWeight=false)
std::vector< std::string > Split(std::string_view str, std::string_view delims, bool skipEmpty=false)
Splits a string at each character in delims.
The namespace RooFit contains mostly switches that change the behaviour of functions of PDFs (or othe...
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.
bool checkIfRangesOverlap(RooArgSet const &observables, std::vector< std::string > const &rangeNames)
void initialize(typename Architecture_t::Matrix_t &A, EInitialization m)
std::string GetName(TCppScope_t)