add one-sided and double-sided interval distinction

This commit is contained in:
Никита Тырин 2025-05-23 12:19:03 +03:00
parent 03cdfa01b0
commit 5e0ecc9cc9

View File

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