154 map<string,TH1*> histMap,
Double_t wgt) :
179 map<string,RooDataHist*> dhistMap,
Double_t wgt) :
209 coutE(InputArguments) <<
"RooDataHist::ctor(" <<
GetName() <<
") ERROR: dimension of input histogram must match "
210 <<
"number of dimension variables" << endl ;
258 RooAbsData(
name,title,
RooArgSet(vars,(
RooAbsArg*)
RooCmdConfig::decodeObjOnTheFly(
"RooDataHist::RooDataHist",
"IndexCat",0,0,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8)))
267 pc.
defineInt(
"impDens",
"ImportHisto",0) ;
276 pc.
defineMutex(
"ImportHisto",
"ImportHistoSlice",
"ImportDataHistSlice") ;
296 const char* impSliceNames = pc.
getString(
"impSliceState",
"",
kTRUE) ;
299 const char* impSliceDNames = pc.
getString(
"impSliceDState",
"",
kTRUE) ;
306 importTH1(vars,*impHist,initWgt, impDens) ;
308 }
else if (indexCat) {
311 if (impSliceHistos.
GetSize()>0) {
314 map<string,TH1*> hmap ;
317 auto histo =
static_cast<TH1*
>(hiter->
Next());
325 map<string,RooDataHist*> dmap ;
356 Int_t offset[3]{0, 0, 0};
386 Int_t ix(0),iy(0),iz(0) ;
387 for (ix=0 ; ix < xvar->
getBins() ; ix++) {
390 for (iy=0 ; iy < yvar->
getBins() ; iy++) {
393 for (iz=0 ; iz < zvar->
getBins() ; iz++) {
412bool checkConsistentAxes(
const TH1*
first,
const TH1* second) {
438 for (
const auto& hiter : hmap) {
441 histo = hiter.second;
443 if (!checkConsistentAxes(histo, hiter.second)) {
444 coutE(InputArguments) <<
"Axes of histogram " << hiter.second->
GetName() <<
" are not consistent with first processed "
445 <<
"histogram " << histo->
GetName() << std::endl;
446 throw std::invalid_argument(
"Axes of inputs for RooDataHist are inconsistent");
450 if (!indexCat.
hasLabel(hiter.first)) {
452 coutI(InputArguments) <<
"RooDataHist::importTH1Set(" <<
GetName() <<
") defining state \"" << hiter.first <<
"\" in index category " << indexCat.
GetName() << endl ;
461 coutE(InputArguments) <<
"RooDataHist::importTH1Set(" <<
GetName() <<
"): dimension of input histogram must match "
462 <<
"number of continuous variables" << endl ;
463 throw std::invalid_argument(
"Inputs histograms for RooDataHist are not compatible with dimensions of variables.");
499 Int_t ic(0),ix(0),iy(0),iz(0) ;
500 for (ic=0 ; ic < icat->
numBins(0) ; ic++) {
503 for (ix=0 ; ix < xvar->
getBins() ; ix++) {
506 for (iy=0 ; iy < yvar->
getBins() ; iy++) {
509 for (iz=0 ; iz < zvar->
getBins() ; iz++) {
539 for (
const auto& diter : dmap) {
542 if (!indexCat.
hasLabel(diter.first)) {
544 coutI(InputArguments) <<
"RooDataHist::importDHistSet(" <<
GetName() <<
") defining state \"" << diter.first <<
"\" in index category " << indexCat.
GetName() << endl ;
555 for (
const auto& diter : dmap) {
559 icat->
setLabel(diter.first.c_str()) ;
577 coutE(InputArguments) <<
"RooDataHist::adjustBinning(" <<
GetName() <<
") ERROR: dimension " << ourVar->
GetName() <<
" must be real" << endl ;
581 const double xlo = theirVar.
getMin();
582 const double xhi = theirVar.
getMax();
587 const double tolerance = 1
e-6 * xbins.averageBinWidth();
590 const double xloAdj = xbins.binLow(xbins.binNumber(xlo + tolerance));
591 const double xhiAdj = xbins.binHigh(xbins.binNumber(xhi - tolerance));
592 xbins.setRange(xloAdj, xhiAdj);
596 if (
true || fabs(xloAdj - xlo) > tolerance || fabs(xhiAdj - xhi) > tolerance) {
597 coutI(DataHandling)<<
"RooDataHist::adjustBinning(" <<
GetName() <<
"): fit range of variable " << ourVar->
GetName() <<
" expanded to nearest bin boundaries: [" << xlo <<
"," << xhi <<
"] --> [" << xloAdj <<
"," << xhiAdj <<
"]" << endl;
603 *offset = xbins.rawBinNumber(xloAdj + tolerance);
609 const double tolerance = 1
e-6 * xbins.averageBinWidth();
612 const double xloAdj = xbins.binLow(xbins.binNumber(xlo + tolerance));
613 const double xhiAdj = xbins.binHigh(xbins.binNumber(xhi - tolerance));
614 xbins.setRange(xloAdj, xhiAdj);
617 if (fabs(xloAdj - xlo) > tolerance || fabs(xhiAdj - xhi) > tolerance) {
618 coutI(DataHandling)<<
"RooDataHist::adjustBinning(" <<
GetName() <<
"): fit range of variable " << ourVar->
GetName() <<
" expanded to nearest bin boundaries: [" << xlo <<
"," << xhi <<
"] --> [" << xloAdj <<
"," << xhiAdj <<
"]" << endl;
625 *offset = xbins.rawBinNumber(xloAdj + tolerance);
661void cloneArray(
double*& ours,
const double* theirs, std::size_t
n) {
662 if (ours)
delete[] ours;
665 ours =
new double[
n];
666 std::copy(theirs, theirs+
n, ours);
670void initArray(
double*& arr, std::size_t
n,
double val) {
671 if (arr)
delete[] arr;
675 std::fill(arr, arr+
n, val);
689 for (
const auto real :
_vars) {
697 for (
unsigned int i = 0; i <
_vars.
size(); ++i) {
710 _lvbins.emplace_back(binning ? binning->
clone() :
nullptr);
719 for (
const auto var :
_vars) {
724 for (
unsigned int i = 0u; i<
n; i++) {
748 if (!fillTree) return ;
754 Int_t j(0), idx(0), tmp(ibin) ;
760 theBinVolume *= arg2->getBinWidth(idx) ;
762 _binv[ibin] = theBinVolume ;
777 _binbounds.push_back(std::vector<Double_t>());
779 std::vector<Double_t>& bounds =
_binbounds.back();
780 bounds.reserve(2 * it->numBins());
781 for (
Int_t i = 0; i < it->numBins(); ++i) {
782 bounds.push_back(it->binLow(i));
783 bounds.push_back(it->binHigh(i));
794 RooAbsData(other,newname),
RooDirItem(), _arrSize(other._arrSize), _idxMult(other._idxMult), _pbinvCache(other._pbinvCache)
805 for (
const auto arg :
_vars) {
810 for (
const auto rvarg :
_vars) {
870 delete selCacheVars ;
881 std::size_t nStart, std::size_t nStop,
Bool_t )
894 coutE(DataHandling) <<
"RooDataHist::reduceEng(" <<
GetName() <<
") Couldn't deep-clone cut variable, abort," << endl ;
902 const std::size_t nevt = nStop < static_cast<std::size_t>(
numEntries()) ? nStop :
static_cast<std::size_t
>(
numEntries());
903 for (
auto i=nStart; i<nevt ; i++) {
908 for (
const auto arg : *row) {
909 if (!arg->inRange(cutRange)) {
915 if (!doSelect) continue ;
917 if (!cloneVar || cloneVar->
getVal()) {
975 if (&
_vars == &coords)
978 std::size_t masterIdx = 0;
980 for (
unsigned int i=0; i <
_vars.
size(); ++i) {
987 const RooAbsArg* theVar = fast ? coords[i] : coords.
find(*internalVar);
990 theVar = internalVar;
994 assert(
dynamic_cast<const RooAbsReal*
>(theVar));
995 const double val =
static_cast<const RooAbsReal*
>(theVar)->getVal();
1001 masterIdx +=
_idxMult[i] * cat->
getBin(
static_cast<const char*
>(
nullptr));
1015 cout <<
"_arrSize = " <<
_arrSize << endl ;
1017 cout <<
"wgt[" << i <<
"] = " <<
_wgt[i]
1018 <<
"\tsumw2[" << i <<
"] = " << (
_sumw2 ?
_sumw2[i] : -1.)
1019 <<
"\tvol[" << i <<
"] = " <<
_binv[i] << endl ;
1043 <<
":plotOn: frame does not specify a plot variable" << endl;
1050 <<
":plotOn: dataset doesn't contain plot frame variable" << endl;
1075 coutE(InputArguments) <<
"RooDataHist::weight(" <<
GetName() <<
") ERROR: interpolation order must be positive" << endl ;
1082 if (correctForBinSize) {
1108 Int_t ybinC = realY->getBin() ;
1109 Int_t ybinLo = ybinC-intOrder/2 - ((yval<realY->getBinning().binCenter(ybinC))?1:0) ;
1110 Int_t ybinM = realY->numBins() ;
1116 for (i=ybinLo ; i<=intOrder+ybinLo ; i++) {
1118 if (i>=0 && i<ybinM) {
1121 realY->setBin(ibin) ;
1122 xarr[i-ybinLo] = realY->getVal() ;
1123 }
else if (i>=ybinM) {
1125 ibin = 2*ybinM-i-1 ;
1126 realY->setBin(ibin) ;
1127 xarr[i-ybinLo] = 2*realY->getMax()-realY->getVal() ;
1131 realY->setBin(ibin) ;
1132 xarr[i-ybinLo] = 2*realY->getMin()-realY->getVal() ;
1138 cout <<
"RooDataHist interpolating data is" << endl ;
1140 for (
int q=0;
q<=intOrder ;
q++) cout << xarr[
q] <<
" " ;
1141 cout <<
" yarr = " ;
1142 for (
int q=0;
q<=intOrder ;
q++) cout << yarr[
q] <<
" " ;
1150 coutE(InputArguments) <<
"RooDataHist::weight(" <<
GetName() <<
") interpolation in "
1178 throw std::invalid_argument(
Form(
"RooDataHist::weightError(%s) error type Auto not allowed here",
GetName())) ;
1182 throw std::invalid_argument(
Form(
"RooDataHist::weightError(%s) error type Expected not allowed here",
GetName())) ;
1232 Int_t fbinLo = fbinC-intOrder/2 - ((xval<binning->
binCenter(fbinC))?1:0) ;
1239 for (i=fbinLo ; i<=intOrder+fbinLo ; i++) {
1241 if (i>=0 && i<fbinM) {
1246 xarr[i-fbinLo] = dim.
getVal() ;
1248 yarr[i - fbinLo] =
get_wgt(idx);
1249 if (correctForBinSize) yarr[i-fbinLo] /=
_binv[idx] ;
1250 }
else if (i>=fbinM) {
1252 ibin = 2*fbinM-i-1 ;
1255 if (cdfBoundaries) {
1256 xarr[i-fbinLo] = dim.
getMax()+1
e-10*(i-fbinM+1) ;
1257 yarr[i-fbinLo] = 1.0 ;
1261 yarr[i - fbinLo] =
get_wgt(idx);
1262 if (correctForBinSize)
1263 yarr[i - fbinLo] /=
_binv[idx];
1270 if (cdfBoundaries) {
1271 xarr[i-fbinLo] = dim.
getMin()-ibin*(1
e-10) ; ;
1272 yarr[i-fbinLo] = 0.0 ;
1276 yarr[i - fbinLo] =
get_wgt(idx);
1277 if (correctForBinSize)
1278 yarr[i - fbinLo] /=
_binv[idx];
1305 if ((sumw2 > 0. || wgt != 1.) && !
_sumw2) {
1316 if (
_sumw2)
_sumw2[idx] += (sumw2 > 0 ? sumw2 : wgt*wgt);
1358 if (wgtErr > 0. && !
_sumw2) {
1365 _wgt[binNumber] = wgt ;
1380 if (
_curIndex == std::numeric_limits<std::size_t>::max()) {
1407 add(dset,&cutVar,wgt) ;
1426 coutE(DataHandling) <<
"RooDataHist::add(" <<
GetName() <<
") Couldn't deep-clone cut variable, abort," << endl ;
1438 if (!cloneVar || cloneVar->
getVal()) {
1471 const double theBinVolume = correctForBinSize ? (inverseBinCor ? 1/
_binv[i] :
_binv[i]) : 1.0 ;
1472 kahanSum +=
get_wgt(i) * theBinVolume;
1503 sliceOnlySet.
remove(sumSet,
true,
true) ;
1505 _vars = sliceOnlySet;
1506 std::vector<double>
const * pbinv =
nullptr;
1508 if(correctForBinSize && inverseBinCor) {
1510 }
else if(correctForBinSize && !inverseBinCor) {
1518 for (
unsigned int i = 0; i <
_vars.
size(); ++i) {
1522 if (sumSet.
find(*arg)) {
1526 refBin[i] = argLv->
getBin();
1534 std::size_t tmpibin = ibin;
1538 for (
unsigned int ivar = 0; !skip && ivar <
_vars.
size(); ++ivar) {
1541 if (mask[ivar] && idx!=refBin[ivar])
1546 const double theBinVolume = correctForBinSize ? (inverseBinCor ? 1/(*pbinv)[ibin] : (*pbinv)[ibin] ) : 1.0 ;
1573 bool correctForBinSize,
bool inverseBinCor,
1574 const std::map<
const RooAbsArg*, std::pair<double, double> >& ranges,
1575 std::function<
double(
int)> getBinScale)
1583 sliceOnlySet.
remove(sumSet,
true,
true);
1584 _vars = sliceOnlySet;
1591 std::vector<double> rangeLo(
_vars.
getSize(), -std::numeric_limits<Double_t>::infinity());
1592 std::vector<double> rangeHi(
_vars.
getSize(), +std::numeric_limits<Double_t>::infinity());
1594 for (std::size_t i = 0; i <
_vars.
size(); ++i) {
1603 refBin[i] = argLV->
getBin();
1606 auto it = ranges.find(sumsetv ? sumsetv : slicesetv);
1607 if (ranges.end() != it) {
1608 rangeLo[i] = it->second.first;
1609 rangeHi[i] = it->second.second;
1618 for (
int ivar = 0, tmp = ibin; !skip && ivar <
int(
_vars.
size()); ++ivar) {
1621 if (mask[ivar] && idx!=refBin[ivar]) skip =
true;
1631 Double_t binVolumeSumSetInRange = 1.;
1637 const auto arg =
_vars[ivar];
1638 if (!sumSet.
find(*arg)) {
1645 if (binHi < rangeLo[ivar] || binLo > rangeHi[ivar]) {
1647 binVolumeSumSetInRange = 0.;
1651 binVolumeSumSetFull *= binHi - binLo;
1652 binVolumeSumSetInRange *= std::min(rangeHi[ivar], binHi) - std::max(rangeLo[ivar], binLo);
1654 const Double_t corrPartial = binVolumeSumSetInRange / binVolumeSumSetFull;
1655 if (0. == corrPartial)
continue;
1656 const Double_t corr = correctForBinSize ? (inverseBinCor ? binVolumeSumSetFull /
_binv[ibin] : binVolumeSumSetFull ) : 1.0;
1657 total += getBinScale(ibin)*(
get_wgt(ibin) * corr * corrPartial);
1678 for (
auto const&
v :
_vars) {
1679 code += ((dimSet.
find(*
v) ? 1 : 0) << i) ;
1685 if(!pbinv.empty()) {
1692 for (std::size_t i = 0; i < selDim.size(); ++i) {
1693 selDim[i] = (code >> i) & 1 ;
1698 Int_t idx(0), tmp(ibin) ;
1700 for (
unsigned int j=0; j <
_lvvars.size(); ++j) {
1710 pbinv[ibin] = theBinVolume ;
1750 if (cutSpec==0 && cutRange==0) {
1765 || (select && select->
eval() == 0.)
1772 if (select)
delete select ;
1859 coutE(InputArguments) <<
"RooDataHist::sliceIterator() variable " << sliceArg.
GetName() <<
" is not part of this RooDataHist" << endl ;
1906 for (
const auto arg :
_vars) {
1912 os << arg->GetName() ;
1930 for (
const auto arg :
_vars) {
1931 if (!arg->inRange(
nullptr)) {
1948 const double wgt =
_wgt[i];
1950 if (fabs(std::modf(wgt, &intpart)) > 1.E-10)
1969 os <<
indent <<
" Observables " <<
_vars << endl ;
1971 os <<
indent <<
" Observables: " ;
1986void RooDataHist::Streamer(
TBuffer &R__b) {
2007 RooAbsData::Streamer(R__b);
2008 TTree* X_tree(0) ; R__b >> X_tree;
2009 RooArgSet X_truth ; X_truth.Streamer(R__b);
2010 TString X_blindString ; X_blindString.Streamer(R__b);
2020 RooDirItem::Streamer(R__b);
2075 evalData.
spans[batch.first] = std::move(batch.second);
static void indent(ostringstream &buf, int indent_level)
static unsigned int total
double pow(double, double)
char * Form(const char *fmt,...)
The Kahan summation is a compensated summation algorithm, which significantly reduces numerical error...
static KahanSum< T, N > Accumulate(Iterator begin, Iterator end, T initialValue=T{})
Iterate over a range and return an instance of a KahanSum.
RooAbsArg is the common abstract base class for objects that represent a value and a "shape" in RooFi...
void attachDataSet(const RooAbsData &set)
Replace server nodes with names matching the dataset variable names with those data set variables,...
RooAbsBinning is the abstract base class for RooRealVar binning definitions.
virtual RooAbsBinning * clone(const char *name=0) const =0
virtual Double_t binCenter(Int_t bin) const =0
virtual Int_t binNumber(Double_t x) const =0
RooAbsCategoryLValue is the common abstract base class for objects that represent a discrete value th...
virtual Int_t getBin(const char *) const
Get index of plot bin for current value this category.
virtual void setBin(Int_t ibin, const char *rangeName=0)
Set category to i-th fit bin, which is the i-th registered state.
virtual Int_t numBins(const char *rangeName) const
Return the number of fit bins ( = number of types )
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.
RooAbsCollection * selectCommon(const RooAbsCollection &refColl) const
Create a subset of the current collection, consisting only of those elements that are contained as we...
RooAbsCollection & assignValueOnly(const RooAbsCollection &other, Bool_t oneSafe=kFALSE)
The assignment operator sets the value of any argument in our set that also appears in the other set.
Storage_t::size_type size() const
Bool_t allInRange(const char *rangeSpec) const
Return true if all contained object report to have their value inside the specified range.
virtual Bool_t remove(const RooAbsArg &var, Bool_t silent=kFALSE, Bool_t matchByNameOnly=kFALSE)
Remove the specified argument from our list.
RooAbsArg * find(const char *name) const
Find object with given name in list.
RooAbsDataStore is the abstract base class for data collection that use a TTree as internal storage m...
virtual void setExternalWeightArray(const Double_t *, const Double_t *, const Double_t *, const Double_t *)
virtual RooBatchCompute::RunContext getBatches(std::size_t first, std::size_t len) const =0
Retrieve batches for all observables in this data store.
virtual void checkInit() const
RooAbsData is the common abstract base class for binned and unbinned datasets.
virtual const RooArgSet * get() const
RooAbsDataStore * store()
void printMultiline(std::ostream &os, Int_t contents, Bool_t verbose=kFALSE, TString indent="") const
Interface for detailed printing of object.
virtual Double_t weight() const =0
static StorageType defaultStorageType
virtual Double_t weightSquared() const =0
virtual void attachCache(const RooAbsArg *newOwner, const RooArgSet &cachedVars)
Internal method – Attach dataset copied with cache contents to copied instances of functions.
virtual Int_t numEntries() const
Return number of entries in dataset, i.e., count unweighted entries.
virtual RooPlot * plotOn(RooPlot *frame, const RooCmdArg &arg1=RooCmdArg::none(), const RooCmdArg &arg2=RooCmdArg::none(), const RooCmdArg &arg3=RooCmdArg::none(), const RooCmdArg &arg4=RooCmdArg::none(), const RooCmdArg &arg5=RooCmdArg::none(), const RooCmdArg &arg6=RooCmdArg::none(), const RooCmdArg &arg7=RooCmdArg::none(), const RooCmdArg &arg8=RooCmdArg::none()) const
RooAbsDataStore * _dstore
External variables cached with this data set.
Abstract base class for objects that are lvalues, i.e.
virtual Double_t getBinWidth(Int_t i, const char *rangeName=0) const =0
virtual Int_t getBin(const char *rangeName=0) const =0
RooAbsRealLValue is the common abstract base class for objects that represent a real value that may a...
virtual Double_t getMax(const char *name=0) const
Get maximum of currently defined range.
virtual void setBin(Int_t ibin, const char *rangeName=0)
Set value to center of bin 'ibin' of binning 'rangeName' (or of default binning if no range is specif...
virtual Int_t numBins(const char *rangeName=0) const
virtual Int_t getBins(const char *name=0) const
Get number of bins of currently defined range.
virtual Double_t getMin(const char *name=0) const
Get miniminum of currently defined range.
virtual Int_t getBin(const char *rangeName=0) const
virtual void setBinFast(Int_t ibin, const RooAbsBinning &binning)
Set value to center of bin 'ibin' of binning 'rangeName' (or of default binning if no range is specif...
RooAbsReal is the common abstract base class for objects that represent a real value and implements f...
Double_t getVal(const RooArgSet *normalisationSet=nullptr) const
Evaluate object.
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.
Bool_t add(const RooAbsArg &var, Bool_t silent=kFALSE) override
Add element to non-owning set.
RooAbsArg * addClone(const RooAbsArg &var, Bool_t silent=kFALSE) override
Add clone of specified element to an owning set.
Class RooBinning is an implements RooAbsBinning in terms of an array of boundary values,...
RooCategory is an object to represent discrete states.
bool defineType(const std::string &label)
Define a state with given name.
virtual Bool_t setLabel(const char *label, bool printError=true) override
Set value by specifying the name of the desired state.
RooCmdArg is a named container for two doubles, two integers two object points and three string point...
Class RooCmdConfig is a configurable parser for RooCmdArg named arguments.
TObject * getObject(const char *name, TObject *obj=0)
Return TObject property registered with name 'name'.
Bool_t defineInt(const char *name, const char *argName, Int_t intNum, Int_t defValue=0)
Define integer property name 'name' mapped to integer in slot 'intNum' in RooCmdArg with name argName...
void defineMutex(const char *argName1, const char *argName2)
Define arguments named argName1 and argName2 mutually exclusive.
Bool_t defineObject(const char *name, const char *argName, Int_t setNum, const TObject *obj=0, Bool_t isArray=kFALSE)
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_t convEmptyToNull=kFALSE)
Return string property registered with name 'name'.
Int_t getInt(const char *name, Int_t defaultValue=0)
Return integer property registered with name 'name'.
const RooLinkedList & getObjectList(const char *name)
Return list of objects registered with name 'name'.
Bool_t defineDouble(const char *name, const char *argName, Int_t doubleNum, Double_t defValue=0.)
Define Double_t property name 'name' mapped to Double_t in slot 'doubleNum' in RooCmdArg with name ar...
void defineDependency(const char *refArgName, const char *neededArgName)
Define that processing argument name refArgName requires processing of argument named neededArgName t...
Double_t getDouble(const char *name, Double_t defaultValue=0)
Return Double_t property registered with name 'name'.
Bool_t defineString(const char *name, const char *argName, Int_t stringNum, const char *defValue="", Bool_t appendMode=kFALSE)
Define Double_t property name 'name' mapped to Double_t in slot 'stringNum' in RooCmdArg with name ar...
Bool_t ok(Bool_t verbose) const
Return true of parsing was successful.
Bool_t process(const RooCmdArg &arg)
Process given RooCmdArg.
The RooDataHist is a container class to hold N-dimensional binned data.
void dump2()
Debug stuff, should go...
void initialize(const char *binningName=0, Bool_t fillTree=kTRUE)
Initialization procedure: allocate weights array, calculate multipliers needed for N-space to 1-dim a...
friend class RooDataHistSliceIter
void getBatches(RooBatchCompute::RunContext &evalData, std::size_t begin, std::size_t len) const override
Write information to retrieve data columns into evalData.spans.
void SetNameTitle(const char *name, const char *title) override
Change the title of this RooDataHist.
std::vector< double > _maskedWeights
RooAbsData * reduceEng(const RooArgSet &varSubset, const RooFormulaVar *cutVar, const char *cutRange=0, std::size_t nStart=0, std::size_t nStop=std::numeric_limits< std::size_t >::max(), Bool_t copyCache=kTRUE) override
Implementation of RooAbsData virtual method that drives the RooAbsData::reduce() methods.
const std::vector< double > & calculatePartialBinVolume(const RooArgSet &dimSet) const
Fill the transient cache with partial bin volumes with up-to-date values for the partial volume speci...
Double_t weight() const override
Return weight of last bin that was requested with get().
RooAbsData * cacheClone(const RooAbsArg *newCacheOwner, const RooArgSet *newCacheVars, const char *newName=0) override
Construct a clone of this dataset that contains only the cached variables.
std::unordered_map< int, std::vector< double > > _pbinvCache
void checkBinBounds() const
double weight(std::size_t i) const
Return weight of i-th bin.
void set(std::size_t binNumber, double weight, double wgtErr)
Set bin content of bin that was last loaded with get(std::size_t).
Double_t sumEntries() const override
Sum the weights of all bins.
RooSpan< const double > getWeightBatch(std::size_t first, std::size_t len) const override
Return event weights of all events in range [first, first+len).
virtual void add(const RooArgSet &row, Double_t wgt=1.0)
Add wgt to the bin content enclosed by the coordinates passed in row.
RooDataHist()
Default constructor.
Double_t get_curWgtErrLo() const
virtual void printMultiline(std::ostream &os, Int_t content, Bool_t verbose=kFALSE, TString indent="") const override
Print the details on the dataset contents.
void importTH1Set(const RooArgList &vars, RooCategory &indexCat, std::map< std::string, TH1 * > hmap, Double_t initWgt, Bool_t doDensityCorrection)
Import data from given set of TH1/2/3 into this RooDataHist.
Int_t getIndex(const RooArgSet &coord, Bool_t fast=false) const
Calculate bin number of the given coordinates.
RooPlot * plotOn(RooPlot *frame, PlotOpt o) const override
Back end function to plotting functionality.
Double_t get_curSumW2() const
Bool_t isNonPoissonWeighted() const override
Returns true if dataset contains entries with a non-integer weight.
virtual void printArgs(std::ostream &os) const override
Print argument of dataset, i.e. the observable names.
Double_t interpolateDim(RooRealVar &dim, const RooAbsBinning *binning, Double_t xval, Int_t intOrder, Bool_t correctForBinSize, Bool_t cdfBoundaries)
Perform boundary safe 'intOrder'-th interpolation of weights in dimension 'dim' at current value 'xva...
void _adjustBinning(RooRealVar &theirVar, const TAxis &axis, RooRealVar *ourVar, Int_t *offset)
Cache for sum of entries ;.
std::vector< std::vector< Double_t > > _binbounds
List of used binnings associated with lvalues.
TIterator * sliceIterator(RooAbsArg &sliceArg, const RooArgSet &otherArgs)
Create an iterator over all bins in a slice defined by the subset of observables listed in sliceArg.
void importTH1(const RooArgList &vars, const TH1 &histo, Double_t initWgt, Bool_t doDensityCorrection)
Import data from given TH1/2/3 into this RooDataHist.
std::size_t _curIndex
Copy of _wgtVec, but masked events have a weight of zero.
Int_t calcTreeIndex() const
Legacy overload to calculate the tree index from the current value of _vars.
Double_t get_curWgtErrHi() const
~RooDataHist() override
Destructor.
void setAllWeights(Double_t value)
Set all the event weight of all bins to the specified value.
Double_t get_wgt(std::size_t idx) const
void importDHistSet(const RooArgList &vars, RooCategory &indexCat, std::map< std::string, RooDataHist * > dmap, Double_t initWgt)
Import data from given set of TH1/2/3 into this RooDataHist.
std::vector< RooAbsLValue * > _lvvars
Cache for arrays of partial bin volumes.
Int_t numEntries() const override
Return the number of bins.
void cacheValidEntries()
Compute which bins of the dataset are part of the currently set fit range.
void SetName(const char *name) override
Change the name of the RooDataHist.
std::vector< std::unique_ptr< const RooAbsBinning > > _lvbins
List of observables casted as RooAbsLValue.
std::vector< Int_t > _idxMult
void registerWeightArraysToDataStore() const
Hand over pointers to our weight arrays to the data store implementation.
void reset() override
Reset all bin weights to zero.
void adjustBinning(const RooArgList &vars, const TH1 &href, Int_t *offset=0)
Adjust binning specification on first and optionally second and third observable to binning in given ...
CacheSumState_t
list of bin bounds per dimension
virtual void printValue(std::ostream &os) const override
Print value of the dataset, i.e. the sum of weights contained in the dataset.
Double_t _cache_sum
Is cache sum valid? Needs to be Int_t instead of CacheSumState_t for subclasses.
Double_t binVolume() const
Return volume of current bin.
const RooArgSet * get() const override
Get bin centre of current bin.
void weightError(Double_t &lo, Double_t &hi, ErrorType etype=Poisson) const override
Return the error of current weight.
Double_t sum(bool correctForBinSize, bool inverseCorr=false) const
Return the sum of the weights of all bins in the histogram.
RooDirItem is a utility base class for RooFit objects that are to be attached to ROOT directories.
void appendToDir(TObject *obj, Bool_t forceMemoryResident=kFALSE)
Append object to directory.
void removeFromDir(TObject *obj)
Remove object from directory it was added to.
Bool_t getPoissonInterval(Int_t n, Double_t &mu1, Double_t &mu2, Double_t nSigma=1) const
Return a confidence interval for the expected number of events given n observed (unweighted) events.
static const RooHistError & instance()
Return a reference to a singleton object that is created the first time this method is called.
RooLinkedList is an collection class for internal use, storing a collection of RooAbsArg pointers in ...
TIterator * MakeIterator(Bool_t forward=kTRUE) const
Create a TIterator for this list.
virtual void Add(TObject *arg)
static Double_t interpolate(Double_t yArr[], Int_t nOrder, Double_t x)
A RooPlot is a plot frame and a container for graphics objects within that frame.
RooAbsRealLValue * getPlotVar() const
virtual void printStream(std::ostream &os, Int_t contents, StyleOption style, TString indent="") const
Print description of object on ostream, printing contents set by contents integer,...
RooRealVar represents a variable that can be changed from the outside.
void setRange(const char *name, Double_t min, Double_t max)
Set a fit or plotting range.
const RooAbsBinning & getBinning(const char *name=0, Bool_t verbose=kTRUE, Bool_t createOnTheFly=kFALSE) const
Return binning definition with name.
void setBinning(const RooAbsBinning &binning, const char *name=0)
Add given binning under name 'name' with this variable.
A simple container to hold a batch of data values.
constexpr std::span< T >::pointer data() const
constexpr bool empty() const noexcept
RooTreeDataStore is a TTree-backed data storage.
RooVectorDataStore uses std::vectors to store data columns.
const Double_t * GetArray() const
Class to manage histogram axis.
const TArrayD * GetXbins() const
Buffer base class used for serializing objects.
virtual Int_t ReadClassBuffer(const TClass *cl, void *pointer, const TClass *onfile_class=0)=0
virtual Version_t ReadVersion(UInt_t *start=0, UInt_t *bcnt=0, const TClass *cl=0)=0
virtual Int_t CheckByteCount(UInt_t startpos, UInt_t bcnt, const TClass *clss)=0
virtual void ReadFastArray(Bool_t *b, Int_t n)=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
TH1 is the base class of all histogram classes in ROOT.
virtual Int_t GetNbinsY() const
virtual Double_t GetBinError(Int_t bin) const
Return value of error associated to bin number bin.
virtual Int_t GetNbinsZ() const
virtual Int_t GetDimension() const
TAxis * GetXaxis()
Get the behaviour adopted by the object about the statoverflows. See EStatOverflows for more informat...
virtual Int_t GetNbinsX() const
virtual Double_t GetBinContent(Int_t bin) const
Return content of bin number bin.
Iterator abstract base class.
virtual TObject * Next()=0
virtual void Add(TObject *obj)
virtual TObject * Remove(TObject *obj)
Remove object from the list.
virtual void SetTitle(const char *title="")
Set the title of the TNamed.
virtual void SetName(const char *name)
Set the name of the TNamed.
virtual const char * GetTitle() const
Returns title of object.
virtual const char * GetName() const
Returns name of object.
virtual void SetNameTitle(const char *name, const char *title)
Set all the TNamed parameters (name and title).
Mother of all ROOT objects.
virtual const char * ClassName() const
Returns name of class to which the object belongs.
A TTree represents a columnar dataset.
std::vector< std::string > tokenise(const std::string &str, const std::string &delims, bool returnEmptyToken=true)
Tokenise the string by splitting at the characters in delims.
LongDouble_t Power(LongDouble_t x, LongDouble_t y)
Bool_t correctForBinWidth
This struct enables passing computation data around between elements of a computation graph.
std::unordered_map< const RooAbsReal *, RooSpan< const double > > spans
Once an object has computed its value(s), the span pointing to the results is registered here.