diff --git a/views.py b/views.py index 8e90c09..9d80b97 100644 --- a/views.py +++ b/views.py @@ -251,6 +251,7 @@ class UpperLimitView(APIView): # BAYESIAN IMPLEMENTATION VIA POISSON_CONF_INTERVAL # ************************************************************** + # double sided interval low, high = poisson_conf_interval( n=N, background=B, @@ -262,26 +263,42 @@ class UpperLimitView(APIView): bayesian_count_ul = high[0] bayesian_count_ll = low[0] + bayesian_count_UL = ( + sp.gammaincinv( + N + 1, confidence_level * sp.gammaincc(N + 1, B) + sp.gammainc(N + 1, B) + ) + - B + ) + bayesian_rate_ul = bayesian_count_ul / t / EEF # count rate limits bayesian_rate_ll = bayesian_count_ll / t / EEF + bayesian_rate_UL = bayesian_count_UL / t / EEF bayesian_flux_ul = bayesian_rate_ul * ECF # flux limits bayesian_flux_ll = bayesian_rate_ll * ECF + bayesian_flux_UL = bayesian_rate_UL * ECF # CLASSICAL IMPLEMENTATION VIA GAMMAINCCINV # **************************************************************** - classic_count_ul = sp.gammainccinv(N + 1, 1 - confidence_level) - B - classic_count_ll = sp.gammainccinv(N, confidence_level) - B + # confidence level for the double sided interval + cl2 = (1 + confidence_level) / 2 + # double sided interval + classic_count_ul = sp.gammainccinv(N + 1, 1 - cl2) - B + classic_count_ll = sp.gammainccinv(N, cl2) - B + # one sided interval + classic_count_UL = sp.gammainccinv(N + 1, 1 - confidence_level) - B if not np.isfinite(classic_count_ll) or classic_count_ll < 0: classic_count_ll = 0.0 classic_rate_ul = classic_count_ul / t / EEF # count rate limits classic_rate_ll = classic_count_ll / t / EEF + classic_rate_UL = classic_count_UL / t / EEF classic_flux_ul = classic_rate_ul * ECF # flux limits classic_flux_ll = classic_rate_ll * ECF + classic_flux_UL = classic_rate_UL * ECF # FLUX ESTIMATION # **************************************************************** @@ -392,17 +409,23 @@ class UpperLimitView(APIView): # frequentist limits "ClassicUpperLimit": classic_count_ul, "ClassicLowerLimit": classic_count_ll, + "ClassicOneSideUL": classic_count_UL, "ClassicCountRateUpperLimit": classic_rate_ul, "ClassicCountRateLowerLimit": classic_rate_ll, + "ClassicCountRateOneSideUL": classic_rate_UL, "ClassicFluxUpperLimit": classic_flux_ul, "ClassicFluxLowerLimit": classic_flux_ll, + "ClassicFluxOneSideUL": classic_flux_UL, # bayesian limits "BayesianUpperLimit": bayesian_count_ul, "BayesianLowerLimit": bayesian_count_ll, + "BayesianOneSideUL": bayesian_count_UL, "BayesianCountRateUpperLimit": bayesian_rate_ul, "BayesianCountRateLowerLimit": bayesian_rate_ll, + "BayesianCountRateOneSideUL": bayesian_rate_UL, "BayesianFluxUpperLimit": bayesian_flux_ul, "BayesianFluxLowerLimit": bayesian_flux_ll, + "BayesianFluxOneSideUL": bayesian_flux_UL, # flux 'center value' estimate "FluxEstimate": Flux, # raw data