85 _dataVars(
"!dataVars",
"data Vars", this),
86 _paramSet(
"!paramSet",
"bin parameters", this),
87 _dataSet( (std::string(
name)+
"_dataSet").c_str(),
"", vars)
130 _dataVars(
"!dataVars",
"data Vars", this),
131 _paramSet(
"!paramSet",
"bin parameters", this),
132 _dataSet( (std::string(
name)+
"_dataSet").c_str(),
"", vars, Hist)
150 if( vars.
empty() )
return 0;
154 for (
auto comp : vars) {
156 auto errorMsg = std::string(
"ParamHistFunc::GetNumBins") + vars.
GetName() +
") ERROR: component "
157 + comp->GetName() +
" in vars list is not of type RooRealVar";
158 oocoutE(
nullptr, InputArguments) << errorMsg << std::endl;
159 throw std::runtime_error(errorMsg);
163 Int_t varNumBins = var->numBins();
175 _normIntMgr(other._normIntMgr, this),
176 _dataVars(
"!dataVars", this, other._dataVars ),
177 _paramSet(
"!paramSet", this, other._paramSet),
178 _numBins( other._numBins ),
179 _dataSet( other._dataSet )
206 const int i =
index /
n.yz;
207 const int tmp =
index %
n.yz;
208 const int j = tmp /
n.z;
209 const int k = tmp %
n.z;
211 const int idx = i + j *
n.x + k *
n.xy;
213 throw std::runtime_error(
"invalid index");
234 for(
int i=0; i <
numBins(); ++i) {
245 if( num_hist_bins !=
numBins() ) {
246 std::cout <<
"Error - ParamHistFunc: cannot set Shape of ParamHistFunc: " <<
GetName()
247 <<
" using histogram: " << shape->
GetName()
248 <<
". Bins don't match" << std::endl;
249 throw std::runtime_error(
"setShape");
253 Int_t TH1BinNumber = 0;
264 std::cout <<
"Error - ParamHisFunc: cannot set Shape of ParamHistFunc: " <<
GetName()
265 <<
" - param is not RooRealVar" << std::endl;
266 throw std::runtime_error(
"setShape");
300 std::cout <<
"Warning - ParamHistFunc::createParamSet() :"
301 <<
" No Variables provided. Not making constraint terms."
306 else if( numVars == 1 ) {
311 std::stringstream VarNameStream;
312 VarNameStream <<
Prefix <<
"_bin_" << i;
313 std::string VarName = VarNameStream.str();
315 RooRealVar gamma( VarName.c_str(), VarName.c_str(), 1.0 );
318 gamma.setConstant(
false );
323 paramSet.
add( *gamma_wspace );
328 else if( numVars == 2 ) {
332 std::vector< Int_t > Indices(numVars, 0);
345 std::stringstream VarNameStream;
346 VarNameStream <<
Prefix <<
"_bin_" << i <<
"_" << j;
347 std::string VarName = VarNameStream.str();
349 RooRealVar gamma( VarName.c_str(), VarName.c_str(), 1.0 );
352 gamma.setConstant(
false );
357 paramSet.
add( *gamma_wspace );
363 else if( numVars == 3 ) {
367 std::vector< Int_t > Indices(numVars, 0);
382 std::stringstream VarNameStream;
383 VarNameStream <<
Prefix <<
"_bin_" << i <<
"_" << j <<
"_" << k;
384 std::string VarName = VarNameStream.str();
386 RooRealVar gamma( VarName.c_str(), VarName.c_str(), 1.0 );
389 gamma.setConstant(
false );
394 paramSet.
add( *gamma_wspace );
402 std::cout <<
" Error: ParamHistFunc doesn't support dimensions > 3D " << std::endl;
428 double gamma_min,
double gamma_max) {
434 for (
auto comp : params) {
438 var->setMax( gamma_max );
452 double gamma_min,
double gamma_max) {
459 if( gamma_max <= gamma_min ) {
461 std::cout <<
"Warning: gamma_min <= gamma_max: Using default values (0, 10)" << std::endl;
468 double gamma_nominal = 1.0;
470 if( gamma_nominal < gamma_min ) {
471 gamma_nominal = gamma_min;
474 if( gamma_nominal > gamma_max ) {
475 gamma_nominal = gamma_max;
481 std::stringstream VarNameStream;
482 VarNameStream <<
Prefix <<
"_bin_" << i;
483 std::string VarName = VarNameStream.str();
485 auto gamma = std::make_unique<RooRealVar>(VarName.c_str(), VarName.c_str(),
486 gamma_nominal, gamma_min, gamma_max);
487 gamma->setConstant(
false );
488 paramSet.
addOwned(std::move(gamma));
498 int numVars = vars.
size();
500 if (numVars > 3 || numVars < 1) {
501 std::cout <<
"ParamHistFunc() - Only works for 1-3 variables (1d-3d)" << std::endl;
505 int numBinsX = numVars >= 1 ?
static_cast<RooRealVar const&
>(*vars[0]).
numBins() : 1;
506 int numBinsY = numVars >= 2 ?
static_cast<RooRealVar const&
>(*vars[1]).
numBins() : 1;
507 int numBinsZ = numVars >= 3 ?
static_cast<RooRealVar const&
>(*vars[2]).
numBins() : 1;
509 return {numBinsX, numBinsY, numBinsZ};
534 if( numVarBins != numElements ) {
535 std::cout <<
"ParamHistFunc::addParamSet - ERROR - "
536 <<
"Supplied list of parameters " << params.
GetName()
537 <<
" has " << numElements <<
" elements but the ParamHistFunc"
538 <<
GetName() <<
" has " << numVarBins <<
" bins."
582 std::array<int, 3> idxMult{{1,
n.x,
n.xy}};
587 auto indexBuffer =
reinterpret_cast<int*
>(
output.data() +
size) -
size;
588 std::fill(indexBuffer, indexBuffer +
size, 0);
593 for (std::size_t iVar = 0; iVar <
_dataVars.
size(); ++iVar) {
598 for (std::size_t i = 0; i <
size; ++i) {
611 if (allVars.
empty())
return 0 ;
616 analVars.
add(allVars) ;
619 Int_t sterileIdx(-1) ;
654 const double paramVal = param.
getVal();
657 value += paramVal * binVolumes[i];
679 double* boundaries = binning->
array() ;
681 std::list<double>* hint =
new std::list<double> ;
684 xlo = xlo - 0.01*(xhi-xlo) ;
685 xhi = xhi + 0.01*(xhi-xlo) ;
687 double delta = (xhi-xlo)*1
e-8 ;
692 if (boundaries[i]>=xlo && boundaries[i]<=xhi) {
693 hint->push_back(boundaries[i]-delta) ;
694 hint->push_back(boundaries[i]+delta) ;
715 for (
size_t i = 0; i < vars.
size(); i++) {
716 if (varName == vars[i]->
GetName()) {
718 double *boundaries = binnings.at(i)->array();
719 std::list<double> *hint =
new std::list<double>;
720 for (
int j = 0; j < binnings.at(i)->numBoundaries(); j++) {
721 if (boundaries[j] >= xlo && boundaries[j] <= xhi) {
722 hint->push_back(boundaries[j]);
size_t size(const MatrixT &matrix)
retrieve the size of a square matrix
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 evalData, and evaluate the associated...
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.
virtual bool add(const RooAbsArg &var, bool silent=false)
Add the specified argument to list.
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 bool addOwned(RooAbsArg &var, bool silent=false)
Add an argument and transfer the ownership to the collection.
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
Abstract base class for objects that represent a real value that may appear on the left hand side of ...
Int_t numBins(const char *rangeName=nullptr) const override
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'.
void setMin(const char *name, double value)
Set minimum of name range to given 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)