def test_416_c(): """The third test case from issue #416 This used to use channels but it has been changed to add an RMF so we can filter in energy space, as it is not clear what non-integer channels should mean. """ x = np.asarray([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) y = np.asarray([0, 0, 0, 2, 1, 1, 0, 0, 0, 0]) pha = DataPHA('416', x, y) rmf = create_delta_rmf(x, x + 1, e_min=x, e_max=x + 1, name='416') pha.set_arf(rmf) pha.set_analysis('energy') # When using channels this used notice(3.5, 6.5) # but using energy space we need to use a different # range to match the ones the original channel filter # used. # pha.notice(4.5, 6.5) # this should be ~pha.mask tabstops = [True] * 3 + [False] * 3 + [True] * 4 assert ~pha.mask == pytest.approx(tabstops) pha.group_counts(3, tabStops=~pha.mask) pha.ignore_bad() grouping = [0] * 3 + [1, -1, 1] + [0] * 4 assert pha.grouping == pytest.approx(grouping) # the second grouped bin has a quality of 2 as # it only contains 1 count quality = np.zeros(10, dtype=int) quality[5] = 2 assert pha.quality == pytest.approx(quality) dep = pha.get_dep(filter=False) assert dep == pytest.approx(y) # It is not at all obvious why we get 8 bins returned # here. The ignore_bad has removed any existing # filters, but why do we get 8, not 10, values? # Well, one bin has been removed (quality=2) # and two bins have merged into 1. Hence the 8. # dep = pha.get_dep(filter=True) exp = np.zeros(8) exp[3] = 3 assert dep == pytest.approx(exp)
def test_416_a(): """The first test case from issue #416""" # if y is not a numpy array then group_counts errors out # with a strange error. Another reason why DataPHA needs # to validate input # x = np.asarray([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) y = np.asarray([0, 0, 0, 2, 1, 1, 0, 0, 0, 0]) pha = DataPHA('416', x, y) pha.notice(3.5, 6.5) mask = [False, False, False, True, True, True, False, False, False, False] assert pha.mask == pytest.approx(mask) pha.group_counts(3) # We have a simplified mask mask = [True, True] assert pha.mask == pytest.approx(mask) # the "full" mask can be retrieved with get_mask mask = [True] * 10 assert pha.get_mask() == pytest.approx(mask) grouping = [1, -1, -1, -1, -1, 1, -1, -1, -1, -1.] assert pha.grouping == pytest.approx(grouping) quality = [0, 0, 0, 0, 0, 2, 2, 2, 2, 2] assert pha.quality == pytest.approx(quality) dep = pha.get_dep(filter=True) assert dep == pytest.approx([3, 1])
def test_416_c(): """The third test case from issue #416 """ x = np.asarray([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) y = np.asarray([0, 0, 0, 2, 1, 1, 0, 0, 0, 0]) pha = DataPHA('416', x, y) pha.notice(3.5, 6.5) # this should be ~pha.mask tabstops = [True] * 3 + [False] * 3 + [True] * 4 assert ~pha.mask == pytest.approx(tabstops) pha.group_counts(3, tabStops=~pha.mask) pha.ignore_bad() grouping = [0] * 3 + [1, -1, 1] + [0] * 4 assert pha.grouping == pytest.approx(grouping) # the second grouped bin has a quality of 2 as # it only contains 1 count quality = np.zeros(10, dtype=np.int) quality[5] = 2 assert pha.quality == pytest.approx(quality) dep = pha.get_dep(filter=False) assert dep == pytest.approx(y) # It is not at all obvious why we get 8 bins returned # here. The ignore_bad has removed any existing # filters, but why do we get 8, not 10, values? # Well, one bin has been removed (quality=2) # and two bins have merged into 1. Hence the 8. # dep = pha.get_dep(filter=True) exp = np.zeros(8) exp[3] = 3 assert dep == pytest.approx(exp)
def test_416_b(caplog): """The second test case from issue #416 This is to make sure this hasn't changed. This used to use channels but it has been changed to add an RMF so we can filter in energy space, as it is not clear what non-integer channels should mean. """ x = np.asarray([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) y = np.asarray([0, 0, 0, 2, 1, 1, 0, 0, 0, 0]) pha = DataPHA('416', x, y) rmf = create_delta_rmf(x, x + 1, e_min=x, e_max=x + 1, name='416') pha.set_arf(rmf) pha.set_analysis('energy') pha.notice(3.5, 6.5) pha.group_counts(3) with caplog.at_level(logging.INFO, logger='sherpa'): pha.ignore_bad() # It's not obvious why this has switched to a boolean assert pha.mask # Mask is also interesting (currently just reporting # this behavior) mask = [True] * 5 + [False] * 5 assert pha.get_mask() == pytest.approx(mask) grouping = [1, -1, -1, -1, -1, 1, -1, -1, -1, -1.] assert pha.grouping == pytest.approx(grouping) quality = [0, 0, 0, 0, 0, 2, 2, 2, 2, 2] assert pha.quality == pytest.approx(quality) dep = pha.get_dep(filter=True) assert dep == pytest.approx([3]) # check captured log # emsg = 'filtering grouped data with quality flags, previous filters deleted' assert caplog.record_tuples == [ ('sherpa.astro.data', logging.WARNING, emsg) ]
def test_416_a(): """The first test case from issue #416 This used to use channels but it has been changed to add an RMF so we can filter in energy space, as it is not clear what non-integer channels should mean. """ # if y is not a numpy array then group_counts errors out # with a strange error. Another reason why DataPHA needs # to validate input # x = np.asarray([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) y = np.asarray([0, 0, 0, 2, 1, 1, 0, 0, 0, 0]) pha = DataPHA('416', x, y) rmf = create_delta_rmf(x, x + 1, e_min=x, e_max=x + 1, name='416') pha.set_arf(rmf) pha.set_analysis('energy') pha.notice(4.5, 6.5) mask = [False, False, False, True, True, True, False, False, False, False] assert pha.mask == pytest.approx(mask) pha.group_counts(3) # We have a simplified mask mask = [True, True] assert pha.mask == pytest.approx(mask) # the "full" mask can be retrieved with get_mask mask = [True] * 10 assert pha.get_mask() == pytest.approx(mask) grouping = [1, -1, -1, -1, -1, 1, -1, -1, -1, -1.] assert pha.grouping == pytest.approx(grouping) quality = [0, 0, 0, 0, 0, 2, 2, 2, 2, 2] assert pha.quality == pytest.approx(quality) dep = pha.get_dep(filter=True) assert dep == pytest.approx([3, 1])
def test_416_b(caplog): """The second test case from issue #416 This is to make sure this hasn't changed. """ x = np.asarray([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) y = np.asarray([0, 0, 0, 2, 1, 1, 0, 0, 0, 0]) pha = DataPHA('416', x, y) pha.notice(3.5, 6.5) pha.group_counts(3) with caplog.at_level(logging.INFO, logger='sherpa'): pha.ignore_bad() # It's not obvious why this has switched to a boolean assert pha.mask # Mask is also interesting (currently just reporting # this behavior) mask = [True] * 5 + [False] * 5 assert pha.get_mask() == pytest.approx(mask) grouping = [1, -1, -1, -1, -1, 1, -1, -1, -1, -1.] assert pha.grouping == pytest.approx(grouping) quality = [0, 0, 0, 0, 0, 2, 2, 2, 2, 2] assert pha.quality == pytest.approx(quality) dep = pha.get_dep(filter=True) assert dep == pytest.approx([3]) # check captured log # emsg = 'filtering grouped data with quality flags, previous filters deleted' assert caplog.record_tuples == [ ('sherpa.astro.data', logging.WARNING, emsg) ]