From 0b05b53d81cf9d64e1c857bc28433f16f7a8cfb1 Mon Sep 17 00:00:00 2001 From: Lukas Heinrich Date: Fri, 3 Mar 2023 17:48:03 +0100 Subject: [PATCH 1/3] first attempt --- src/pyhf/infer/calculators.py | 59 ++++++++++++++++++++++++----------- 1 file changed, 41 insertions(+), 18 deletions(-) diff --git a/src/pyhf/infer/calculators.py b/src/pyhf/infer/calculators.py index f9922c6d89..2686401280 100644 --- a/src/pyhf/infer/calculators.py +++ b/src/pyhf/infer/calculators.py @@ -675,6 +675,7 @@ def __init__( test_stat="qtilde", ntoys=2000, track_progress=True, + skip_failing_toys = False, ): r""" Toy-based Calculator. @@ -705,6 +706,7 @@ def __init__( ~pyhf.infer.calculators.ToyCalculator: The calculator for toy-based quantities. """ + self.skip_failing_toys = skip_failing_toys self.ntoys = ntoys self.data = data self.pdf = pdf @@ -754,6 +756,9 @@ def distributions(self, poi_test, track_progress=None): Tuple (~pyhf.infer.calculators.EmpiricalDistribution): The distributions under the hypotheses. """ + + print('skip?',self.skip_failing_toys) + tensorlib, _ = get_backend() sample_shape = (self.ntoys,) @@ -792,29 +797,47 @@ def distributions(self, poi_test, track_progress=None): signal_teststat = [] for sample in tqdm.tqdm(signal_sample, **tqdm_options, desc='Signal-like'): - signal_teststat.append( - teststat_func( - poi_test, - sample, - self.pdf, - self.init_pars, - self.par_bounds, - self.fixed_params, + try: + value = teststat_func( + poi_test, + sample, + self.pdf, + self.init_pars, + self.par_bounds, + self.fixed_params, + ) + except RuntimeError: + if self.skip_failing_toys: + value = None + else: + raise + + if (value is not None) and (tensorlib.isfinite(value)): + signal_teststat.append( + value ) - ) bkg_teststat = [] for sample in tqdm.tqdm(bkg_sample, **tqdm_options, desc='Background-like'): - bkg_teststat.append( - teststat_func( - poi_test, - sample, - self.pdf, - self.init_pars, - self.par_bounds, - self.fixed_params, + try: + value = teststat_func( + poi_test, + sample, + self.pdf, + self.init_pars, + self.par_bounds, + self.fixed_params, + ) + except RuntimeError: + if self.skip_failing_toys: + value = None + else: + raise + + if (value is not None) and (tensorlib.isfinite(value)): + bkg_teststat.append( + value ) - ) s_plus_b = EmpiricalDistribution(tensorlib.astensor(signal_teststat)) b_only = EmpiricalDistribution(tensorlib.astensor(bkg_teststat)) From c41bb4df8efa990047597cb15aefe690fcf48f0b Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Fri, 3 Mar 2023 16:50:24 +0000 Subject: [PATCH 2/3] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- src/pyhf/infer/calculators.py | 40 ++++++++++++++++------------------- 1 file changed, 18 insertions(+), 22 deletions(-) diff --git a/src/pyhf/infer/calculators.py b/src/pyhf/infer/calculators.py index 2686401280..e74f002db6 100644 --- a/src/pyhf/infer/calculators.py +++ b/src/pyhf/infer/calculators.py @@ -675,7 +675,7 @@ def __init__( test_stat="qtilde", ntoys=2000, track_progress=True, - skip_failing_toys = False, + skip_failing_toys=False, ): r""" Toy-based Calculator. @@ -757,7 +757,7 @@ def distributions(self, poi_test, track_progress=None): """ - print('skip?',self.skip_failing_toys) + print('skip?', self.skip_failing_toys) tensorlib, _ = get_backend() sample_shape = (self.ntoys,) @@ -797,14 +797,14 @@ def distributions(self, poi_test, track_progress=None): signal_teststat = [] for sample in tqdm.tqdm(signal_sample, **tqdm_options, desc='Signal-like'): - try: + try: value = teststat_func( - poi_test, - sample, - self.pdf, - self.init_pars, - self.par_bounds, - self.fixed_params, + poi_test, + sample, + self.pdf, + self.init_pars, + self.par_bounds, + self.fixed_params, ) except RuntimeError: if self.skip_failing_toys: @@ -813,20 +813,18 @@ def distributions(self, poi_test, track_progress=None): raise if (value is not None) and (tensorlib.isfinite(value)): - signal_teststat.append( - value - ) + signal_teststat.append(value) bkg_teststat = [] for sample in tqdm.tqdm(bkg_sample, **tqdm_options, desc='Background-like'): - try: + try: value = teststat_func( - poi_test, - sample, - self.pdf, - self.init_pars, - self.par_bounds, - self.fixed_params, + poi_test, + sample, + self.pdf, + self.init_pars, + self.par_bounds, + self.fixed_params, ) except RuntimeError: if self.skip_failing_toys: @@ -835,9 +833,7 @@ def distributions(self, poi_test, track_progress=None): raise if (value is not None) and (tensorlib.isfinite(value)): - bkg_teststat.append( - value - ) + bkg_teststat.append(value) s_plus_b = EmpiricalDistribution(tensorlib.astensor(signal_teststat)) b_only = EmpiricalDistribution(tensorlib.astensor(bkg_teststat)) From 89a5e54c33001ce832ae26108dbd39c4cbcd3cfb Mon Sep 17 00:00:00 2001 From: Giordon Stark Date: Fri, 5 Jul 2024 16:20:53 -0700 Subject: [PATCH 3/3] print out when toys fail --- src/pyhf/infer/calculators.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/pyhf/infer/calculators.py b/src/pyhf/infer/calculators.py index e74f002db6..63fc31aae8 100644 --- a/src/pyhf/infer/calculators.py +++ b/src/pyhf/infer/calculators.py @@ -806,9 +806,10 @@ def distributions(self, poi_test, track_progress=None): self.par_bounds, self.fixed_params, ) - except RuntimeError: + except: if self.skip_failing_toys: value = None + print(f'signal failed for: {sample}') else: raise @@ -826,9 +827,10 @@ def distributions(self, poi_test, track_progress=None): self.par_bounds, self.fixed_params, ) - except RuntimeError: + except: if self.skip_failing_toys: value = None + print(f'background failed for: {sample}') else: raise