You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Adding option to run expected limits for mu!=0 (#1128)
* Adding option to run expected limits for mu!=0
Added option (`--signalStrengthForExpected`) which can be set to values
for which the expected limit and bands should be calculated.
* Observed value doesn't change (still assume pb is dervied wrt mu=0)
* setting `--signalStrengthForExpected 0` should yield identical
results compared to leaving default but might be slower as this
forces a recreation of the Asimov dataset
* Add some documentation
* clang format
* Update commonstatsmethods.md with Combine info
Added note about non-support for non-zero signal strength expected limits based on toys
---------
Co-authored-by: Nick Wardle <nckw@cern.ch>
## Expected limits assuming non-zero signal strengths
94
+
95
+
The median expected limit and quantiles can be calculated under Hypotheses other than at $\mu=0$. The Asymptotic expected limits can be calculated by setting the value `--signalStrengthForExpected mu0`. The Asimov dataset produced for the calculation will be generated for $\mu=$`mu0` instead of the usual $\mu=0$. Note that setting ` --signalStrengthForExpected 0` will give the same results as not setting the option, but will be slower as this forces a recreation of the Asimov dataset.
96
+
97
+
Be aware that while expected values are derived from the Asimov created at the specified signal strength, setting this option *does not* alter the definition of $CL_s$ in that the denominator is still defined with respect to the no signal ($\mu=0$) hypothesis.
98
+
99
+
!!! info
100
+
Currently <spanstyle="font-variant:small-caps;">Combine</span> does *not* support calculating expected limits assuming non-zero signal strengths using toy-based calculations. If you are interested in adding this feature, please contact the developers.
@@ -46,6 +47,7 @@ LimitAlgo("AsymptoticLimits specific options") {
46
47
options_.add_options()
47
48
("rAbsAcc", boost::program_options::value<double>(&rAbsAccuracy_)->default_value(rAbsAccuracy_), "Absolute accuracy on r to reach to terminate the scan")
48
49
("rRelAcc", boost::program_options::value<double>(&rRelAccuracy_)->default_value(rRelAccuracy_), "Relative accuracy on r to reach to terminate the scan")
50
+
("signalStrengthForExpected", boost::program_options::value<double>(&signalStrengthForExpected_)->default_value(signalStrengthForExpected_), "Signal strength for expected limits (0=background only, default is 0)")
49
51
("run", boost::program_options::value<std::string>(&what_)->default_value(what_), "What to run: both (default), observed, expected, blind.")
50
52
("singlePoint", boost::program_options::value<double>(&rValue_), "Just compute CLs for the given value of r")
51
53
//("minimizerAlgo", boost::program_options::value<std::string>(&minimizerAlgo_)->default_value(minimizerAlgo_), "Choice of minimizer used for profiling (Minuit vs Minuit2)")
if (r->getVal()/r->getMax() > 1e-3 && !doNonStandardAsimov_) {
412
420
if (verbose) {
413
421
CombineLogger::instance().log("AsymptoticLimits.cc",__LINE__,std::string(Form("[WARNING] Best fit of asimov dataset is at %s = %f (%f times %sMax), while it should be at zero",r->GetName(), r->getVal(), r->getVal()/r->getMax(), r->GetName())),__func__);
asimovDataset_->SetName(Form("_Asymptotic_asimovDataset_%d_%g",doNonStandardAsimov_,signalStrengthForExpected_)); // in case we want to keep multiple asimov datasets in the same workspace
754
789
// w->import(*asimovData); // I'm assuming the Workspace takes ownership. Might be false.
755
790
// delete asimovData; // ^^^^^^^^----- now assuming that the workspace clones.
0 commit comments