56 _pdfObsList(
"pdfObs",
"List of p.d.f. observables",this),
67 coutE(InputArguments) <<
"RooHistPdf::ctor(" << GetName()
68 <<
") ERROR variable list and RooDataHist must contain the same variables." << std::endl ;
71 for (
const auto arg : vars) {
72 if (!dvars->
find(arg->GetName())) {
73 coutE(InputArguments) <<
"RooHistPdf::ctor(" <<
GetName()
74 <<
") ERROR variable list and RooDataHist must contain the same variables." << std::endl ;
105 _pdfObsList(
"pdfObs",
"List of p.d.f. observables",this),
115 if (histObs.
size()!=dvars->
size()) {
116 coutE(InputArguments) <<
"RooHistPdf::ctor(" << GetName()
117 <<
") ERROR histogram variable list and RooDataHist must contain the same variables." << std::endl ;
118 throw(std::string(
"RooHistPdf::ctor() ERROR: histogram variable list and RooDataHist must contain the same variables")) ;
121 for (
const auto arg : histObs) {
122 if (!dvars->
find(arg->GetName())) {
123 coutE(InputArguments) <<
"RooHistPdf::ctor(" <<
GetName()
124 <<
") ERROR variable list and RooDataHist must contain the same variables." << std::endl ;
125 throw(std::string(
"RooHistPdf::ctor() ERROR: histogram variable list and RooDataHist must contain the same variables")) ;
127 if (!arg->isFundamental()) {
128 coutE(InputArguments) <<
"RooHistPdf::ctor(" <<
GetName()
129 <<
") ERROR all elements of histogram observables set must be of type RooRealVar or RooCategory." << std::endl ;
130 throw(std::string(
"RooHistPdf::ctor() ERROR all elements of histogram observables set must be of type RooRealVar or RooCategory.")) ;
153 std::unique_ptr<RooDataHist> dhist,
int intOrder)
185 std::span<double> output = ctx.
output();
195 for (
auto &
ret : output) {
209 for (
unsigned int i=0; i <
_pdfObsList.size(); ++i) {
224 return std::max(
ret, 0.0);
259 if (!_x || !_y)
return false;
260 if (!range || !strlen(range) || !_x->
hasRange(range) ||
274 if(lobs ==
nullptr)
return false;
276 bool isOkayForAnalyticalInt =
false;
280 if(!lobs->isJacobianOK(*var))
return false;
281 isOkayForAnalyticalInt =
true;
285 return isOkayForAnalyticalInt;
293 const char* rangeName,
303 for (
unsigned int n=0;
n < pdfObsList.
size() &&
n < histObsList.
size(); ++
n) {
304 const auto pa = pdfObsList[
n];
305 const auto ha = histObsList[
n];
307 if (okayForAnalytical(*pa, allVars)) {
310 if (fullRange(*pa, *ha, rangeName)) {
316 if (code == frcode) {
325 if (intOrder > 1 && !(code & 1)) {
329 return (code >= 2) ? code : 0;
334 const char* rangeName,
340 if (((2 << histObsList.
size()) - 1) == code) {
347 std::map<const RooAbsArg*, std::pair<double, double> > ranges;
348 for (
unsigned int n=0;
n < pdfObsList.
size() &&
n < histObsList.
size(); ++
n) {
349 const auto pa = pdfObsList[
n];
350 const auto ha = histObsList[
n];
352 if (code & (2 <<
n)) {
362 ha->copyCache(pa,
true);
366 double ret = (code & 1) ?
dataHist.sum(intSet,histObsList,
true,!histFuncMode) :
367 dataHist.sum(intSet,histObsList,
true,!histFuncMode, ranges);
398 bool isOkayForAnalyticalInt =
false;
405 if(!(lvalue && lvalue->isJacobianOK(dep)))
return false;
406 isOkayForAnalyticalInt =
true;
410 return isOkayForAnalyticalInt;
446 for (
unsigned int i=0; i < pdfObsList.
size(); ++i) {
466 std::span<const double> boundaries{binning->
array(),
static_cast<std::size_t
>(binning->
numBoundaries())};
494 double* boundaries = binning->
array() ;
496 auto hint =
new std::list<double> ;
501 if (boundaries[i]>=xlo && boundaries[i]<=xhi) {
502 hint->push_back(boundaries[i]) ;
517 std::unique_ptr<RooAbsCollection> common{
_pdfObsList.selectCommon(vars)};
534 if (wgt>max) max=wgt ;
550 if (std::abs(dh1.
weight(i)-dh2.
weight(i))>1
e-8)
return false ;
562 for(
auto const& data : ws.
allData()) {
586 coutE(ObjectHandling) <<
" RooHistPdf::importWorkspaceHook(" <<
GetName() <<
") unable to import clone of underlying RooDataHist with unique name " << uniqueName <<
", abort" << std::endl ;
598 coutE(ObjectHandling) <<
" RooHistPdf::importWorkspaceHook(" <<
GetName() <<
") unable to import clone of underlying RooDataHist with unique name " << uniqueName <<
", abort" << std::endl ;
int Int_t
Signed integer 4 bytes (int).
#define R__ASSERT(e)
Checks condition e and reports a fatal error if it's false.
Common abstract base class for objects that represent a value and a "shape" in RooFit.
virtual void copyCache(const RooAbsArg *source, bool valueOnly=false, bool setValDirty=true)=0
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.
virtual void syncCache(const RooArgSet *nset=nullptr)=0
virtual bool inRange(const char *) const
friend class RooWorkspace
RooAbsArg()
Default constructor.
Abstract base class for RooRealVar binning definitions.
virtual bool isParameterized() const
Interface function.
virtual Int_t numBoundaries() const =0
virtual double * array() const =0
Int_t numTypes(const char *=nullptr) const
Return number of types defined (in range named rangeName if rangeName!=nullptr).
virtual void removeAll()
Remove all arguments from our set, deleting them if we own them.
virtual bool add(const RooAbsArg &var, bool silent=false)
Add the specified argument to list.
Storage_t::size_type size() const
RooAbsArg * find(const char *name) const
Find object with given name in list.
Abstract base class for binned and unbinned datasets.
virtual Int_t numEntries() const
Return number of entries in dataset, i.e., count unweighted entries.
Abstract base class for objects that are lvalues, i.e.
virtual const RooAbsBinning * getBinningPtr(const char *rangeName) const =0
RooAbsPdf()
Default constructor.
Abstract base class for objects that represent a real value that may appear on the left hand side of ...
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.
const RooAbsBinning * getBinningPtr(const char *rangeName) const override
bool hasRange(const char *name) const override
Check if variable has a binning with given name.
virtual void doEval(RooFit::EvalContext &) const
Base function for computing multiple values of a RooAbsReal.
RooArgList is a container object that can hold multiple RooAbsArg objects.
RooArgSet is a container object that can hold multiple RooAbsArg objects.
Object to represent discrete states.
static std::list< double > * plotSamplingHintForBinBoundaries(std::span< const double > boundaries, double xlo, double xhi)
Returns sampling hints for a histogram with given boundaries.
Container class to hold N-dimensional binned data.
double weight(std::size_t i) const
Return weight of i-th bin.
const RooArgSet * get() const override
Get bin centre of current bin.
double sumEntries() const override
Sum the weights of all bins.
std::span< const double > at(RooAbsArg const *arg, RooAbsArg const *caller=nullptr)
std::span< double > output()
void Streamer(TBuffer &) override
Stream an object of class RooHistPdf.
RooArgSet _histObsList
List of observables defining dimensions of histogram.
Int_t _intOrder
Interpolation order.
bool forceAnalyticalInt(const RooAbsArg &dep) const override
bool areIdentical(const RooDataHist &dh1, const RooDataHist &dh2)
RooDataHist * _dataHist
Unowned pointer to underlying histogram.
bool _cdfBoundaries
Use boundary conditions for CDFs.
std::list< double > * binBoundaries(RooAbsRealLValue &, double, double) const override
Return sampling hint for making curves of (projections) of this function as the recursive division st...
double totVolume() const
Return the total volume spanned by the observables of the RooHistPdf.
void initializeOwnedDataHist(std::unique_ptr< RooDataHist > &&dataHist)
bool importWorkspaceHook(RooWorkspace &ws) override
Check if our datahist is already in the workspace.
RooSetProxy _pdfObsList
List of observables mapped onto histogram observables.
double maxVal(Int_t code) const override
Return maximum value for set of observables identified by code assigned in getMaxVal.
double analyticalIntegral(Int_t code, const char *rangeName=nullptr) const override
Return integral identified by 'code'.
RooAICRegistry _codeReg
! Auxiliary class keeping tracking of analytical integration code
std::list< double > * plotSamplingHint(RooAbsRealLValue &obs, double xlo, double xhi) const override
Return sampling hint for making curves of (projections) of this function as the recursive division st...
Int_t getMaxVal(const RooArgSet &vars) const override
Only handle case of maximum in all variables.
double _totVolume
! Total volume of space (product of ranges of observables)
RooDataHist * cloneAndOwnDataHist(const char *newname="")
Replaces underlying RooDataHist with a clone, which is now owned, and returns the clone.
std::unique_ptr< RooDataHist > _ownedDataHist
! Owned pointer to underlying histogram
void doEval(RooFit::EvalContext &) const override
Base function for computing multiple values of a RooAbsReal.
Int_t getAnalyticalIntegral(RooArgSet &allVars, RooArgSet &analVars, const char *rangeName=nullptr) const override
Determine integration scenario.
double evaluate() const override
Return the current value: The value of the bin enclosing the current coordinates of the observables,...
bool _unitNorm
Assume contents is unit normalized (for use as pdf cache).
Variable that can be changed from the outside.
RooAbsData * embeddedData(RooStringView name) const
Retrieve dataset (binned or unbinned) with given name. A null pointer is returned if not found.
std::list< RooAbsData * > allData() const
Return list of all dataset in the workspace.
bool import(const RooAbsArg &arg, 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 RooCmdArg &arg9={})
Import a RooAbsArg object, e.g.
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
const char * GetName() const override
Returns name of object.
RooCmdArg Rename(const char *suffix)
RooCmdArg Embedded(bool flag=true)
std::pair< double, double > getRangeOrBinningInterval(RooAbsArg const *arg, const char *rangeName)