From ac3dfec8cde21ba34d6867071a2a0ed856fcaaf3 Mon Sep 17 00:00:00 2001 From: Giovanni Date: Wed, 19 Feb 2014 10:32:56 +0100 Subject: [PATCH 1/2] Fix the ordering rule for significance so that in discrete cases it gives correct results --- src/HybridNew.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/HybridNew.cc b/src/HybridNew.cc index 2029be04d0df1..d53bd22ad81b6 100644 --- a/src/HybridNew.cc +++ b/src/HybridNew.cc @@ -291,7 +291,7 @@ bool HybridNew::runSignificance(RooWorkspace *w, RooStats::ModelConfig *mc_s, Ro } if (expectedFromGrid_) applyExpectedQuantile(*hcResult); // I don't need to flip the P-values for significances, only for limits - hcResult->SetTestStatisticData(hcResult->GetTestStatisticData()+EPS); // issue with < vs <= in discrete models + hcResult->SetTestStatisticData(hcResult->GetTestStatisticData()-EPS); // issue with < vs <= in discrete models double sig = hcResult->Significance(); double sigHi = RooStats::PValueToSignificance( (hcResult->CLb() - hcResult->CLbError()) ) - sig; double sigLo = RooStats::PValueToSignificance( (hcResult->CLb() + hcResult->CLbError()) ) - sig; From 2eb7e4fc2bc925495f24d89493a55e0454f3393f Mon Sep 17 00:00:00 2001 From: Giovanni Date: Wed, 19 Feb 2014 12:16:34 +0100 Subject: [PATCH 2/2] - need a larger EPS for LHC test statistics - fix expectedFromGrid for LHC test stat for signif in non-freq case --- src/HybridNew.cc | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/HybridNew.cc b/src/HybridNew.cc index d53bd22ad81b6..28240928a0a88 100644 --- a/src/HybridNew.cc +++ b/src/HybridNew.cc @@ -93,7 +93,7 @@ float HybridNew::adaptiveToys_ = -1; bool HybridNew::reportPVal_ = false; float HybridNew::confidenceToleranceForToyScaling_ = 0.2; float HybridNew::maxProbability_ = 0.999; -#define EPS 1e-9 +#define EPS 1e-6 HybridNew::HybridNew() : LimitAlgo("HybridNew specific options") { @@ -643,6 +643,7 @@ std::auto_ptr HybridNew::create(RooWorkspace *w, Roo RooArgSet poi(*mc_s->GetParametersOfInterest()), params(poi); RooRealVar *r = dynamic_cast(poi.first()); + double rValOriginal = ((RooAbsReal*)rVals.first())->getVal(); if (poi.getSize() == 1) { // here things are a bit more convoluted, although they could probably be cleaned up double rVal = ((RooAbsReal*)rVals.first())->getVal(); @@ -770,7 +771,14 @@ std::auto_ptr HybridNew::create(RooWorkspace *w, Roo } if (fitNuisances_ && paramsToFit.get()) { params.add(*paramsToFit); fitMu.writeTo(params); } if (fitNuisances_ && paramsToFit.get()) { paramsZero.addClone(*paramsToFit); fitZero.writeTo(paramsZero); } - setup.modelConfig.SetSnapshot(params); + if (poi.getSize() == 1 && r->getVal() != rValOriginal) { + double rTmp = r->getVal(); + r->setVal(rValOriginal); + setup.modelConfig.SetSnapshot(params); + r->setVal(rTmp); + } else { + setup.modelConfig.SetSnapshot(params); + } setup.modelConfig_bonly.SetSnapshot(paramsZero); TString paramsSnapName = TString::Format("%s_%s_snapshot", setup.modelConfig.GetName(), params.GetName()); TString paramsZSnapName = TString::Format("%s__snapshot", setup.modelConfig_bonly.GetName());