Skip to content

Commit 4c5cb6c

Browse files
author
Nick Wardle
committed
Check if either of BayesianSimple / MarkovChainMC
Throw error if either are being used with discrete parameters, as currently this won't make any sense in combine.
1 parent c5c3dc3 commit 4c5cb6c

File tree

2 files changed

+16
-4
lines changed

2 files changed

+16
-4
lines changed

interface/Combine.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ class Combine {
7171
bool mklimit(RooWorkspace *w, RooStats::ModelConfig *mc_s, RooStats::ModelConfig *mc_b, RooAbsData &data, double &limit, double &limitErr) ;
7272

7373
std::string parseRegex(std::string instr, const RooArgSet *nuisances, RooWorkspace *w) ;
74-
void addDiscreteNuisances(RooWorkspace *);
74+
bool addDiscreteNuisances(RooWorkspace *);
7575
void addNuisances(const RooArgSet *);
7676
void addFloatingParameters(const RooArgSet &);
7777
void addPOI(const RooArgSet *);

src/Combine.cc

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -804,7 +804,13 @@ void Combine::run(TString hlfFile, const std::string &dataset, double &limit, do
804804
if (freezeAllGlobalObs_ && mc_bonly && mc_bonly->GetGlobalObservables()) utils::setAllConstant(*mc_bonly->GetGlobalObservables(), true);
805805

806806
// Setup the CascadeMinimizer with discrete nuisances
807-
addDiscreteNuisances(w);
807+
bool wsHasDiscretes = addDiscreteNuisances(w);
808+
809+
// Add a check that we're not trying to use discrete profiling with Bayesian methods
810+
if ((algo->name() == "BayesianSimple" || algo->name() == "MarkovChainMC") && wsHasDiscretes){
811+
throw std::invalid_argument("Cannot currently use discrete parameters with Bayesian methods. Either remove discrete parameters or remove runtime def option ADD_DISCRETE_FALLBACK");
812+
}
813+
808814
// and give him the regular nuisances too
809815
addNuisances(nuisances);
810816
addFloatingParameters(w->allVars());
@@ -1194,17 +1200,20 @@ void Combine::addFloatingParameters(const RooArgSet &parameters){
11941200
if (! arg->isConstant()) (CascadeMinimizerGlobalConfigs::O().allFloatingParameters).add(*arg);
11951201
}
11961202
}
1197-
void Combine::addDiscreteNuisances(RooWorkspace *w){
1203+
bool Combine::addDiscreteNuisances(RooWorkspace *w){
11981204

1205+
// return value
1206+
bool hasDiscrete = false;
11991207
RooArgSet *discreteParameters = (RooArgSet*) w->genobj("discreteParams");
12001208

12011209
CascadeMinimizerGlobalConfigs::O().pdfCategories = RooArgList();
12021210
CascadeMinimizerGlobalConfigs::O().allRooMultiPdfParams = RooArgList();
1203-
1211+
// Check for the discrete parameters
12041212
if (discreteParameters != 0) {
12051213
for (RooAbsArg *arg : *discreteParameters) {
12061214
RooCategory *cat = dynamic_cast<RooCategory*>(arg);
12071215
if (cat && (!cat->isConstant() || runtimedef::get("ADD_DISCRETE_FALLBACK"))) {
1216+
hasDiscrete = true;
12081217
if (verbose){
12091218
//std::cout << "Adding discrete " << cat->GetName() << "\n";
12101219
CombineLogger::instance().log("Combine.cc",__LINE__,std::string(Form("Adding discrete %s ",cat->GetName())),__func__);
@@ -1220,6 +1229,7 @@ void Combine::addDiscreteNuisances(RooWorkspace *w){
12201229
RooCategory *cat = dynamic_cast<RooCategory*>(arg);
12211230
if (! (std::string(cat->GetName()).find("pdfindex") != std::string::npos )) continue;
12221231
if (cat/* && !cat->isConstant()*/) {
1232+
hasDiscrete = true;
12231233
if (verbose){
12241234
//std::cout << "Adding discrete " << cat->GetName() << "\n";
12251235
CombineLogger::instance().log("Combine.cc",__LINE__,std::string(Form("Adding discrete %s ",cat->GetName())),__func__);
@@ -1228,6 +1238,7 @@ void Combine::addDiscreteNuisances(RooWorkspace *w){
12281238
}
12291239
}
12301240
}
1241+
12311242
// Now lets go through the list of parameters which are associated to this discrete nuisance
12321243
RooArgSet clients;
12331244
utils::getClients(CascadeMinimizerGlobalConfigs::O().pdfCategories,(w->allPdfs()),clients);
@@ -1241,6 +1252,7 @@ void Combine::addDiscreteNuisances(RooWorkspace *w){
12411252
if (! (v->isConstant())) (CascadeMinimizerGlobalConfigs::O().allRooMultiPdfParams).add(*v) ;
12421253
}
12431254
}
1255+
return hasDiscrete;
12441256
}
12451257

12461258
template <class Var>

0 commit comments

Comments
 (0)