81 std::vector<double> out(numBins);
83 for (
int i = 0; i < numBins; ++i) {
95using std::string, std::vector, std::make_unique, std::pair, std::unique_ptr, std::map;
131 std::cout <<
"Error: Did not find 'ModelConfig' object in file: " <<
ws_single->GetName()
137 cxcoutWHF <<
"No Parametetrs of interest are set" << std::endl;
142 sstream <<
"Setting Parameter(s) of Interest as: ";
154 std::cout <<
"WARNING: Can't find parameter of interest: " <<
poi_name
155 <<
" in Workspace. Not setting in ModelConfig." << std::endl;
184 for(
unsigned int i=0; i<
measurement.GetAsimovDatasets().size(); ++i) {
194 cxcoutPHF <<
"Importing Asimov dataset" << std::endl;
197 std::cout <<
"Error: Failed to import Asimov dataset: " <<
AsimovName
230 cxcoutF(HistFactory) <<
"Error: Failed to make Single-Channel workspace for channel: " <<
ch_name
231 <<
" and measurement: " <<
measurement.GetName() << std::endl;
283 if( ! channel.CheckHistograms() ) {
284 cxcoutFHF <<
"MakeModelAndMeasurementsFast: Channel: " << channel.GetName()
285 <<
" has uninitialized histogram pointers" << std::endl;
289 string ch_name = channel.GetName();
315 Arg_t arg{
name.c_str(),
name.c_str(), std::forward<Args_t>(args)...};
337 std::vector<std::string>
const &
ch_names,
347 for (std::size_t i = 1; i <
chs.size(); ++i) {
354 std::vector<std::string>
missing;
355 std::vector<std::string> extra;
365 extra.erase(std::remove_if(extra.begin(), extra.end(),
isAllowed), extra.end());
367 if (!
missing.empty() || !extra.empty()) {
369 errMsg <<
"ERROR: Inconsistent datasets across channel workspaces.\n"
370 <<
"Workspace for channel \"" <<
ch_names[i] <<
"\" does not match "
371 <<
"the datasets in channel \"" <<
ch_names[0] <<
"\".\n";
374 errMsg <<
" Missing datasets:\n";
380 if (!extra.empty()) {
381 errMsg <<
" Extra datasets:\n";
382 for (
const auto &
name : extra) {
387 errMsg <<
"All channel workspaces must contain exactly the same datasets.\n";
388 return {
false,
errMsg.str()};
400 for (
unsigned int idx=0; idx <
fObsNameVec.size(); ++idx) {
424 cxcoutI(HistFactory) <<
"processing hist " << hist->
GetName() << std::endl;
426 cxcoutF(HistFactory) <<
"hist is empty" << std::endl;
433 std::string classname = hist->
ClassName();
434 if (classname.find(
"TH1")==0) {
histndim=1; }
435 else if (classname.find(
"TH2")==0) {
histndim=2; }
436 else if (classname.find(
"TH3")==0) {
histndim=3; }
439 prefix +=
"_Hist_alphanominal";
459 const double gaussSigma = isUniform ? 100. : 1.0;
461 cxcoutIHF <<
"Added a uniform constraint for " <<
paramName <<
" as a Gaussian constraint with a very large sigma " << std::endl;
489 const string& prefix,
494 std::vector<double> low;
495 std::vector<double> high;
499 std::string str = prefix +
"_" + std::to_string(
j);
504 lowSet.addOwned(std::make_unique<RooHistFunc>((str+
"low").c_str(),
"",
obsList,std::move(
lowDHist),0));
510 interp.setPositiveDefinite();
511 interp.setAllInterpCodes(4);
519 return proto.arg(prefix);
549 std::stringstream
range;
550 range <<
"[" <<
norm.GetVal() <<
"," <<
norm.GetLow() <<
"," <<
norm.GetHigh() <<
"]";
553 cxcoutI(HistFactory) <<
"making normFactor: " <<
norm.GetName() << std::endl;
576 cxcoutI(HistFactory) <<
"<NormFactor Name =\""<<*
nit<<
"\"> is duplicated for <Sample Name=\""
577 <<
sample.GetName() <<
"\">, but only one factor will be included. \n Instead, define something like"
579 <<
"\"> \nin your top-level XML's <Measurement> entry and use <NormFactor Name=\""<<*
nit<<
"Squared\" in your channel XML file."<< std::endl;
600 std::map<std::string, double>::iterator
itconstr;
601 for(
unsigned int i = 0; i <
systList.size(); ++i) {
604 std::string
strname = sys.GetName();
608 if (
meas.GetNoSyst().count(sys.GetName()) > 0 ) {
609 cxcoutI(HistFactory) <<
"HistoToWorkspaceFast::AddConstraintTerm - skip systematic " << sys.GetName() << std::endl;
613 if (
meas.GetGammaSyst().count(sys.GetName()) > 0 ) {
614 double relerr =
meas.GetGammaSyst().find(sys.GetName() )->second;
616 cxcoutI(HistFactory) <<
"HistoToWorkspaceFast::AddConstraintTerm - zero uncertainty assigned - skip systematic " << sys.GetName() << std::endl;
639 yvar.setConstant(
true);
644 cxcoutI(HistFactory) <<
"Added a gamma constraint for " <<
name << std::endl;
650 const bool isUniform =
meas.GetUniformSyst().count(sys.GetName()) > 0;
654 if (
meas.GetLogNormSyst().count(sys.GetName()) == 0 &&
meas.GetGammaSyst().count(sys.GetName()) == 0 ) {
659 if (
meas.GetLogNormSyst().count(sys.GetName()) > 0 ) {
661 const double relerr =
meas.GetLogNormSyst().find(sys.GetName() )->second;
664 proto,
"alphaOfBeta_" + sys.GetName(),
"x[0]*(pow(x[1],x[2])-1.)",
665 RooArgList{emplace<RooRealVar>(proto,
"tau_" + sys.GetName(), 1. / relerr),
666 emplace<RooRealVar>(proto,
"kappa_" + sys.GetName(), 1. + relerr), alpha});
668 cxcoutI(HistFactory) <<
"Added a log-normal constraint for " <<
name << std::endl;
677 lowVec.push_back(sys.GetLow());
678 highVec.push_back(sys.GetHigh());
690 interp.setAllInterpCodes(4);
708 throw std::logic_error(
"HistFactory didn't process the observables correctly. Please file a bug report.");
736 auto pos =
name.find(
"Hist_alpha");
737 if (pos != std::string::npos) {
738 name =
name.substr(0, pos) +
"shapes";
739 }
else if ( (pos =
name.find(
"nominal")) != std::string::npos) {
740 name =
name.substr(0, pos) +
"shapes";
751 tot.specialIntegratorConfig(
true)->method1D().setLabel(
"RooBinIntegrator") ;
752 tot.specialIntegratorConfig(
true)->method2D().setLabel(
"RooBinIntegrator") ;
753 tot.specialIntegratorConfig(
true)->methodND().setLabel(
"RooBinIntegrator") ;
757 tot.setAttribute(
"GenerateBinned");
760 if(
fCfg.binnedFitOptimization) {
761 tot.setAttribute(
"BinnedLikelihood");
774 if(
myargi->isConstant())
continue;
779 if(
myargi->isConstant())
continue;
782 if(
myargj->isConstant())
continue;
783 std::cout <<
myargi->GetName() <<
"," <<
myargj->GetName();
786 std::cout << std::endl;
800 Error(
"MakeSingleChannelWorkspace",
801 "The input Channel does not contain any sample - return a nullptr");
811 std::ostringstream stream;
812 stream <<
"The sample " << channel.
GetSamples().front().GetName()
813 <<
" in channel " << channel.
GetName() <<
" does not contain a histogram. This is the channel:\n";
814 channel.
Print(stream);
815 Error(
"MakeSingleChannelWorkspace",
"%s", stream.str().c_str());
820 std::cout <<
"MakeSingleChannelWorkspace: Channel: " << channel.
GetName()
821 <<
" has uninitialized histogram pointers" << std::endl;
845 for (
unsigned int idx=0; idx<
fObsNameVec.size(); ++idx ) {
855 throw hf_exc(
"HistFactory is limited to 1- to 3-dimensional histograms.");
858 cxcoutP(HistFactory) <<
"\n-----------------------------------------\n"
859 <<
"\tStarting to process '"
861 <<
"\n-----------------------------------------\n" << std::endl;
873 cxcoutI(HistFactory) <<
"will preprocess this line: " << func << std::endl;
888 std::vector< pair<const TH1*, std::unique_ptr<TH1>> >
statHistPairs;
904 proto.var(
"nominalLumi")->setConstant();
905 proto.defineSet(
"globalObservables",
"nominalLumi");
909 proto.var(
"Lumi")->setConstant();
958 if(
sample.GetHistoSysList().empty()) {
973 bool isUniform =
measurement.GetUniformSyst().count(
sample.GetHistoSysList()[i].GetName()) > 0;
988 if(
sample.GetStatError().GetActivate() ) {
991 cxcoutF(HistFactory) <<
"Cannot include Stat Error for histograms of more than 3 dimensions."
1000 cxcoutI(HistFactory) <<
"Sample: " <<
sample.GetName() <<
" to be included in Stat Error "
1007 if(
sample.GetStatError().GetErrorHist() ==
nullptr ) {
1009 cxcoutI(HistFactory) <<
"Making Statistical Uncertainty Hist for "
1011 <<
" Sample: " <<
sample.GetName()
1022 cxcoutI(HistFactory) <<
"Using external histogram for Stat Errors for "
1024 <<
"\tSample: " <<
sample.GetName()
1025 <<
"\tError Histogram: " <<
statErrorHist->GetName() << std::endl;
1088 if( !
sample.GetShapeFactorList().empty() ) {
1091 cxcoutF(HistFactory) <<
"Cannot include Stat Error for histograms of more than 3 dimensions."
1097 <<
" to be include a ShapeFactor."
1128 <<
" to have initial shape from hist: "
1137 <<
" to be constant" << std::endl;
1156 if( !
sample.GetShapeSysList().empty() ) {
1159 cxcoutF(HistFactory) <<
"Cannot include Stat Error for histograms of more than 3 dimensions."
1179 <<
" to include a ShapeSys." << std::endl;
1257 if( !
sample.GetNormalizeByTheory() ) {
1285 cxcoutE(HistFactory) <<
"Error: Failed to make ScaledUncertaintyHist for: "
1286 <<
channel_name +
"_StatUncert" +
"_RelErr" << std::endl;
1293 cxcoutI(HistFactory) <<
"About to create Constraint Terms from: "
1306 cxcoutI(HistFactory) <<
"Using Gaussian StatErrors in channel: " << channel.
GetName() << std::endl;
1309 cxcoutI(HistFactory) <<
"Using Poisson StatErrors in channel: " << channel.
GetName() << std::endl;
1338 for(
unsigned int i=0; i<
systToFix.size(); ++i){
1342 <<
" could not set it to constant" << std::endl;
1355 <<
" in workspace: " <<
proto.GetName() << std::endl;
1365 <<
" in workspace: " <<
proto.GetName() << std::endl;
1391 cxcoutP(HistFactory) <<
"\n-----------------------------------------\n"
1392 <<
"\timport model into workspace"
1393 <<
"\n-----------------------------------------\n" << std::endl;
1397 "product of Poissons across bins for a single channel",
1412 proto.importClassCode();
1423 if (
fCfg.createPerRegionWorkspaces) {
1436 std::unique_ptr<RooDataSet> dataset;
1437 if(!
fCfg.storeDataError){
1438 dataset = std::make_unique<RooDataSet>(
"obsData",
"",*
proto.set(
"observables"),
RooFit::WeightVar(
"weightVar"));
1445 proto.import(*dataset);
1450 if(
data.GetName().empty()) {
1451 cxcoutF(HistFactory) <<
"Error: Additional Data histogram for channel: " << channel.
GetName()
1452 <<
" has no name! The name always needs to be set for additional datasets, "
1453 <<
"either via the \"Name\" tag in the XML or via RooStats::HistFactory::Data::SetName()." << std::endl;
1459 cxcoutF(HistFactory) <<
"Error: Additional Data histogram for channel: " << channel.
GetName()
1460 <<
" with name: " <<
dataName <<
" is nullptr" << std::endl;
1467 proto.import(dataset);
1482 std::vector<std::string>
const&
obsNameVec) {
1489 Error(
"ConfigureHistFactoryDataset",
"Invalid input - return");
1500 for (
int i=1; i<=
ax->GetNbins(); ++i) {
1502 double xval =
ax->GetBinCenter(i);
1511 for(
int j=1;
j<=
ay->GetNbins(); ++
j) {
1512 double yval =
ay->GetBinCenter(
j);
1521 for(
int k=1; k<=
az->GetNbins(); ++k) {
1522 double zval =
az->GetBinCenter(k);
1543 std::vector<std::unique_ptr<RooWorkspace>> &
chs)
1549 Error(
"MakeCombinedModel",
"Input vectors are empty - return a nullptr");
1553 Error(
"MakeCombinedModel",
"Input vector of workspace has an invalid size - return a nullptr");
1565 for(
unsigned int i = 0; i<
ch_names.size(); ++i){
1568 cxcoutI(HistFactory) <<
"full list of observables:\n" <<
obsList << std::endl;
1572 for(
unsigned int i = 0; i<
ch_names.size(); ++i){
1575 throw std::invalid_argument(
"The first channel name for HistFactory cannot start with a digit. Got " +
channel_name);
1578 throw std::invalid_argument(
"Channel names for HistFactory cannot contain ','. Got " +
channel_name);
1585 if(!model) std::cout <<
"failed to find model for channel"<< std::endl;
1594 cxcoutP(HistFactory) <<
"\n-----------------------------------------\n"
1595 <<
"\tEntering combination"
1596 <<
"\n-----------------------------------------\n" << std::endl;
1597 auto combined = std::make_unique<RooWorkspace>(
"combined");
1630 if(std::string(
"asimovData") ==
data->GetName()) {
1635 std::map<std::string, RooAbsData*>
dataMap;
1636 for(
unsigned int i = 0; i <
ch_names.size(); ++i){
1647 cxcoutP(HistFactory) <<
"\n-----------------------------------------\n"
1648 <<
"\tImporting combined model"
1649 <<
"\n-----------------------------------------\n" << std::endl;
1661 cxcoutE(HistFactory) <<
"could not find variable " <<
paramName <<
" could not set its value" << std::endl;
1665 for(
unsigned int i=0; i<
fSystToFix.size(); ++i){
1668 temp->setConstant();
1669 cxcoutI(HistFactory) <<
"setting " <<
fSystToFix.at(i) <<
" constant" << std::endl;
1671 cxcoutE(HistFactory) <<
"could not find variable " <<
fSystToFix.at(i) <<
" could not set it to constant" << std::endl;
1689 cxcoutP(HistFactory) <<
"\n-----------------------------------------\n"
1690 <<
"\tcreate toy data"
1691 <<
"\n-----------------------------------------\n" << std::endl;
1705 std::cout <<
"Error: Failed to create combined asimov dataset" << std::endl;
1730 while(
Nominal->IsBinUnderflow(binNumber) ||
Nominal->IsBinOverflow(binNumber) ){
1734 double histError =
Nominal->GetBinError( binNumber );
1737 if( histError != histError ) {
1738 std::cout <<
"Warning: In histogram " <<
Nominal->GetName()
1739 <<
" bin error for bin " <<
i_bin
1740 <<
" is NAN. Not using Error!!!"
1748 if( histError < 0 ) {
1749 std::cout <<
"Warning: In histogram " <<
Nominal->GetName()
1750 <<
" bin error for bin " << binNumber
1751 <<
" is < 0. Setting Error to 0"
1757 ErrorHist->SetBinContent( binNumber, histError );
1779 cxcoutE(HistFactory) <<
"Warning: Empty Hist Vector, cannot create total uncertainty" << std::endl;
1788 for(
unsigned int i = 0; i <
HistVec.size(); ++i ) {
1791 const TH1* error =
HistVec.at(i).second.get();
1794 cxcoutE(HistFactory) <<
"Error: Provided hists have unequal bins" << std::endl;
1798 cxcoutE(HistFactory) <<
"Error: Provided hists have unequal bins" << std::endl;
1826 if( histError != histError ) {
1828 <<
" bin error for bin " << binNumber
1829 <<
" is NAN. Not using error!!";
1846 for(
int i = 0; i < numBins; ++i) {
1850 while(
ErrorHist->IsBinUnderflow(binNumber) ||
ErrorHist->IsBinOverflow(binNumber) ){
1858 cxcoutW(HistFactory) <<
"Warning: Sum of histograms for bin: " << binNumber
1859 <<
" is <= 0. Setting error to 0"
1862 ErrorHist->SetBinContent( binNumber, 0.0 );
1871 cxcoutE(HistFactory) <<
"Error: bin " << i <<
" error is NAN\n"
1886 cxcoutI(HistFactory) <<
"Making Total Uncertainty for bin " << binNumber
std::vector< double > histToVector(TH1 const &hist)
constexpr double alphaHigh
constexpr double alphaLow
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
#define R__ASSERT(e)
Checks condition e and reports a fatal error if it's false.
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 Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t result
A class which maps the current values of a RooRealVar (or a set of RooRealVars) to one of a number of...
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.
The PiecewiseInterpolation is a class that can morph distributions into each other,...
const_iterator begin() const
const_iterator end() const
Common abstract base class for objects that represent a value and a "shape" in RooFit.
virtual bool add(const RooAbsArg &var, bool silent=false)
Add the specified argument to list.
Storage_t::size_type size() const
Abstract base class for binned and unbinned datasets.
Abstract interface for all probability density functions.
Abstract base class for objects that represent a real value that may appear on the left hand side of ...
void setConstant(bool value=true)
Abstract base class for objects that represent a real value and implements functionality common to al...
Calculates the sum of a set of RooAbsReal terms, or when constructed with two sets,...
RooArgList is a container object that can hold multiple RooAbsArg objects.
RooArgSet is a container object that can hold multiple RooAbsArg objects.
Implements a RooAbsBinning in terms of an array of boundary values, posing no constraints on the choi...
Object to represent discrete states.
Container class to hold N-dimensional binned data.
Container class to hold unbinned data.
RooFitResult is a container class to hold the input and output of a PDF fit to a dataset.
Implementation of the Gamma PDF for RooFit/RooStats.
Switches the message service to a different level while the instance is alive.
A real-valued function sampled from a multidimensional histogram.
static RooMsgService & instance()
Return reference to singleton instance.
A RooAbsReal implementing a polynomial in terms of a list of RooAbsReal coefficients.
Represents the product of a given set of RooAbsReal objects.
Implements a PDF constructed from a sum of functions:
Variable that can be changed from the outside.
void setBinning(const RooAbsBinning &binning, const char *name=nullptr)
Add given binning under name 'name' with this variable.
void setBins(Int_t nBins, const char *name=nullptr)
Create a uniform binning under name 'name' for this variable.
static void SetPrintLevel(int level)
set print level (static function)
static RooAbsData * GenerateAsimovData(const RooAbsPdf &pdf, const RooArgSet &observables)
generate the asimov data for the observables (not the global ones) need to deal with the case of a si...
TODO Here, we are missing some documentation.
void ConfigureWorkspace(RooWorkspace *)
This class encapsulates all information for the statistical interpretation of one experiment.
std::vector< RooStats::HistFactory::Data > & GetAdditionalData()
retrieve vector of additional data objects
void Print(std::ostream &=std::cout)
HistFactory::StatErrorConfig & GetStatErrorConfig()
get information about threshold for statistical uncertainties and constraint term
RooStats::HistFactory::Data & GetData()
get data object
bool CheckHistograms() const
std::vector< RooStats::HistFactory::Sample > & GetSamples()
get vector of samples for this channel
std::string GetName() const
get name of channel
This class provides helper functions for creating likelihood models from histograms.
std::unique_ptr< RooProduct > CreateNormFactor(RooWorkspace &proto, std::string &channel, std::string &sigmaEpsilon, Sample &sample, bool doRatio)
void GuessObsNameVec(const TH1 *hist)
std::unique_ptr< RooWorkspace > MakeSingleChannelWorkspace(Measurement &measurement, Channel &channel)
void MakeTotalExpected(RooWorkspace &proto, const std::string &totName, const std::vector< RooProduct * > &sampleScaleFactors, std::vector< std::vector< RooAbsArg * > > &sampleHistFuncs) const
std::unique_ptr< TH1 > MakeScaledUncertaintyHist(const std::string &Name, std::vector< std::pair< const TH1 *, std::unique_ptr< TH1 > > > const &HistVec) const
std::vector< std::string > fPreprocessFunctions
RooHistFunc * MakeExpectedHistFunc(const TH1 *hist, RooWorkspace &proto, std::string prefix, const RooArgList &observables) const
Create the nominal hist function from hist, and register it in the workspace.
void SetFunctionsToPreprocess(std::vector< std::string > lines)
std::vector< std::string > fObsNameVec
RooFit::OwningPtr< RooWorkspace > MakeSingleChannelModel(Measurement &measurement, Channel &channel)
RooFit::OwningPtr< RooWorkspace > MakeCombinedModel(std::vector< std::string >, std::vector< std::unique_ptr< RooWorkspace > > &)
TH1 * MakeAbsolUncertaintyHist(const std::string &Name, const TH1 *Hist)
std::map< std::string, double > fParamValues
static void ConfigureWorkspaceForMeasurement(const std::string &ModelName, RooWorkspace *ws_single, Measurement &measurement)
void AddConstraintTerms(RooWorkspace &proto, Measurement &measurement, std::string prefix, std::string interpName, std::vector< OverallSys > &systList, std::vector< std::string > &likelihoodTermNames, std::vector< std::string > &totSystTermNames)
void ConfigureHistFactoryDataset(RooDataSet &obsData, TH1 const &nominal, RooWorkspace &proto, std::vector< std::string > const &obsNameVec)
static void PrintCovarianceMatrix(RooFitResult *result, RooArgSet *params, std::string filename)
std::vector< std::string > fSystToFix
HistoToWorkspaceFactoryFast()
RooArgList createObservables(const TH1 *hist, RooWorkspace &proto) const
Create observables of type RooRealVar. Creates 1 to 3 observables, depending on the type of the histo...
The RooStats::HistFactory::Measurement class can be used to construct a model by combining multiple R...
Configuration for an un- constrained overall systematic to scale sample normalisations.
Configuration for a constrained overall systematic to scale sample normalisations.
*Un*constrained bin-by-bin variation of affected histogram.
Constrained bin-by-bin variation of affected histogram.
double GetRelErrorThreshold() const
Constraint::Type GetConstraintType() const
ModelConfig is a simple class that holds configuration information specifying how a model should be u...
Persistable container for RooFit projects.
RooAbsPdf * pdf(RooStringView name) const
Retrieve p.d.f (RooAbsPdf) with given name. A null pointer is returned if not found.
const RooArgSet * set(RooStringView name)
Return pointer to previously defined named set with given nmame If no such set is found a null pointe...
RooAbsArg * arg(RooStringView name) const
Return RooAbsArg with given name. A null pointer is returned if none is found.
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.
Class to manage histogram axis.
Bool_t IsVariableBinSize() const
const char * GetTitle() const override
Returns title of object.
const TArrayD * GetXbins() const
TH1 is the base class of all histogram classes in ROOT.
virtual Int_t GetNbinsY() const
virtual Int_t GetNbinsZ() const
virtual Int_t GetDimension() 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.
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 const char * ClassName() const
Returns name of class to which the object belongs.
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message.
void Start(Bool_t reset=kTRUE)
Start the stopwatch.
static TString Format(const char *fmt,...)
Static method which formats a string using a printf style format descriptor and return a TString.
RooCmdArg RecycleConflictNodes(bool flag=true)
RooCmdArg Rename(const char *suffix)
RooCmdArg Conditional(const RooArgSet &pdfSet, const RooArgSet &depSet, bool depsAreCond=false)
RooConstVar & RooConst(double val)
RooCmdArg Index(RooCategory &icat)
RooCmdArg StoreError(const RooArgSet &aset)
RooCmdArg WeightVar(const char *name="weight", bool reinterpretAsWeight=false)
RooCmdArg Import(const char *state, TH1 &histo)
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.
constexpr double defaultShapeSysGammaMax
constexpr double minShapeUncertainty
constexpr double defaultShapeFactorGammaMax
constexpr double defaultStatErrorGammaMax
constexpr double defaultGammaMin
CreateGammaConstraintsOutput createGammaConstraints(RooArgList const ¶mList, std::span< const double > relSigmas, double minSigma, Constraint::Type type)
Namespace for the RooStats classes.
Configuration settings for HistFactory behavior.