84 _dataVars(
"!dataVars",
"data Vars",
this),
85 _paramSet(
"!paramSet",
"bin parameters",
this),
86 _dataSet( (std::string(
name)+
"_dataSet").c_str(),
"", vars)
129 _dataVars(
"!dataVars",
"data Vars",
this),
130 _paramSet(
"!paramSet",
"bin parameters",
this),
131 _dataSet( (std::string(
name)+
"_dataSet").c_str(),
"", vars, Hist)
149 if( vars.
empty() )
return 0;
153 for (
auto comp : vars) {
155 auto errorMsg = std::string(
"ParamHistFunc::GetNumBins") + vars.
GetName() +
") ERROR: component "
156 +
comp->GetName() +
" in vars list is not of type RooRealVar";
175 _dataVars(
"!dataVars",
this,
other._dataVars ),
176 _paramSet(
"!paramSet",
this,
other._paramSet),
177 _numBins(
other._numBins ),
178 _dataSet(
other._dataSet )
205 const int i =
index /
n.yz;
206 const int tmp =
index %
n.yz;
207 const int j = tmp /
n.z;
208 const int k = tmp %
n.z;
210 const int idx = i +
j *
n.x + k *
n.xy;
212 throw std::runtime_error(
"invalid index");
233 for(
int i=0; i <
numBins(); ++i) {
245 std::cout <<
"Error - ParamHistFunc: cannot set Shape of ParamHistFunc: " <<
GetName()
246 <<
" using histogram: " << shape->
GetName()
247 <<
". Bins don't match" << std::endl;
248 throw std::runtime_error(
"setShape");
263 std::cout <<
"Error - ParamHisFunc: cannot set Shape of ParamHistFunc: " <<
GetName()
264 <<
" - param is not RooRealVar" << std::endl;
265 throw std::runtime_error(
"setShape");
299 std::cout <<
"Warning - ParamHistFunc::createParamSet() :"
300 <<
" No Variables provided. Not making constraint terms."
317 gamma.setConstant(
false );
336 for(
Int_t i = 0; i <
varx->numBins(); ++i) {
349 gamma.setConstant(
false );
369 for(
Int_t k = 0; k <
varz->numBins(); ++k) {
371 for(
Int_t i = 0; i <
varx->numBins(); ++i) {
384 gamma.setConstant(
false );
395 std::cout <<
" Error: ParamHistFunc doesn't support dimensions > 3D " << std::endl;
427 for (
auto comp : params) {
456 std::cout <<
"Warning: gamma_min <= gamma_max: Using default values (0, 10)" << std::endl;
480 auto gamma = std::make_unique<RooRealVar>(
VarName.c_str(),
VarName.c_str(),
482 gamma->setConstant(
false );
483 paramSet.addOwned(std::move(gamma));
496 std::cout <<
"ParamHistFunc() - Only works for 1-3 variables (1d-3d)" << std::endl;
530 std::cout <<
"ParamHistFunc::addParamSet - ERROR - "
531 <<
"Supplied list of parameters " << params.
GetName()
532 <<
" has " <<
numElements <<
" elements but the ParamHistFunc"
576 std::array<int, 3>
idxMult{{1,
n.x,
n.xy}};
592 for (std::size_t i = 0; i <
size; ++i) {
605 if (allVars.
empty())
return 0 ;
648 const double paramVal = param.getVal();
673 double* boundaries = binning->
array() ;
675 std::list<double>*
hint =
new std::list<double> ;
678 xlo = xlo - 0.01*(xhi-xlo) ;
679 xhi = xhi + 0.01*(xhi-xlo) ;
681 double delta = (xhi-xlo)*1
e-8 ;
686 if (boundaries[i]>=xlo && boundaries[i]<=xhi) {
687 hint->push_back(boundaries[i]-delta) ;
688 hint->push_back(boundaries[i]+delta) ;
709 for (
size_t i = 0; i < vars.
size(); i++) {
712 double *boundaries =
binnings.at(i)->array();
713 std::list<double> *
hint =
new std::list<double>;
714 for (
int j = 0;
j <
binnings.at(i)->numBoundaries();
j++) {
715 if (boundaries[
j] >= xlo && boundaries[
j] <= xhi) {
716 hint->push_back(boundaries[
j]);
size_t size(const MatrixT &matrix)
retrieve the size of a square matrix
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
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 value
A class which maps the current values of a RooRealVar (or a set of RooRealVars) to one of a number of...
static NumBins getNumBinsPerDim(RooArgSet const &vars)
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...
static Int_t GetNumBins(const RooArgSet &vars)
double analyticalIntegralWN(Int_t code, const RooArgSet *normSet, const char *rangeName=nullptr) const override
Implement analytical integrations by doing appropriate weighting from component integrals functions t...
void setConstant(bool constant)
Int_t getCurrentBin() const
Get the index of the gamma parameter associated with the current bin.
Int_t getAnalyticalIntegralWN(RooArgSet &allVars, RooArgSet &analVars, const RooArgSet *normSet, const char *rangeName=nullptr) const override
Advertise that all integrals can be handled internally.
RooObjCacheManager _normIntMgr
! The integration cache manager
double evaluate() const override
Find the bin corresponding to the current value of the observable, and evaluate the associated parame...
void doEval(RooFit::EvalContext &) const override
Find all bins corresponding to the values of the observables in ctx,.
RooAbsReal & getParameter() const
Int_t addParamSet(const RooArgList ¶ms)
static RooArgList createParamSet(RooWorkspace &w, const std::string &, const RooArgList &Vars)
Create the list of RooRealVar parameters which represent the height of the histogram bins.
void setParamConst(Int_t, bool=true)
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...
RooListProxy _paramSet
interpolation parameters
void setShape(TH1 *shape)
RooListProxy _dataVars
The RooRealVars.
void setAttribute(const Text_t *name, bool value=true)
Set (default) or clear a named boolean attribute of this object.
Abstract base class for RooRealVar binning definitions.
virtual Int_t numBoundaries() const =0
virtual double * array() const =0
const char * GetName() const override
Returns name of object.
Storage_t::size_type size() const
bool addTyped(const RooAbsCollection &list, bool silent=false)
Adds elements of a given RooAbsCollection to the container if they match the specified type.
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.
Abstract base class for objects that represent a real value that may appear on the left hand side of ...
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.
bool _forceNumInt
Force numerical integration if flag set.
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.
Int_t setObj(const RooArgSet *nset, T *obj, const TNamed *isetRangeName=nullptr)
Setter function without integration set.
Int_t lastIndex() const
Return index of slot used in last get or set operation.
T * getObj(const RooArgSet *nset, Int_t *sterileIndex=nullptr, const TNamed *isetRangeName=nullptr)
Getter function without integration set.
std::vector< std::unique_ptr< const RooAbsBinning > > const & getBinnings() const
Int_t getIndex(const RooAbsCollection &coord, bool fast=false) const
Calculate bin number of the given coordinates.
std::span< const double > binVolumes(std::size_t first, std::size_t len) const
Retrieve all bin volumes. Bins are indexed according to getIndex().
const RooArgSet * get() const override
Get bin centre of current bin.
std::span< const double > at(RooAbsArg const *arg, RooAbsArg const *caller=nullptr)
std::span< double > output()
Variable that can be changed from the outside.
void setVal(double value) override
Set value of variable to 'value'.
Persistable container for RooFit projects.
TH1 is the base class of all histogram classes in ROOT.
virtual Int_t GetNbinsY() const
virtual Int_t GetNbinsZ() const
virtual Int_t GetNbinsX() const
Bool_t IsBinUnderflow(Int_t bin, Int_t axis=0) const
Return true if the bin is underflow.
Bool_t IsBinOverflow(Int_t bin, Int_t axis=0) const
Return true if the bin is overflow.
virtual Double_t GetBinContent(Int_t bin) const
Return content of bin number bin.
const char * GetName() const override
Returns name of object.
Mother of all ROOT objects.
RooCmdArg RecycleConflictNodes(bool flag=true)