def test_get_filter_is_empty(): # Need to send in numpy arrays otherwise the code fails as it # assumes a numpy array. This should be addressed upstream. # # pha = DataPHA('name', [1, 2, 3], [1, 1, 1]) pha = DataPHA('name', np.asarray([1, 2, 3]), [1, 1, 1]) assert pha.get_filter() == '1:3' pha.ignore() assert pha.get_filter() == 'No noticed bins'
def test_need_numpy_channels(): """We didn't used to convert channels to a NumPy array which broke this logic - the ignore line would error out due to an operation on self.channel """ pha = DataPHA('name', [1, 2, 3], [1, 1, 1]) assert pha.get_filter() == '1:3' pha.ignore() assert pha.get_filter() == 'No noticed bins'
def test_need_numpy_channels(): """We need to convert the input to NumPy arrrays. This should be done in the constructor to DataPHA, but for now error out if not set. """ pha = DataPHA('name', [1, 2, 3], [1, 1, 1]) assert pha.get_filter() == '1:3' # This errors out with a TypeError on 'elo = self.channel - 0.5' pha.ignore() assert pha.get_filter() == 'No noticed bins'
def test_pha_get_xerr_all_bad_energy_group(): """get_xerr handles all bad values [energy] The behavior with grouping is different, presumably because we assume we have grouping when we have a quality array. """ pha = DataPHA('name', [1, 2, 3], [1, 1, 1], grouping=[1, 1, 1], quality=[2, 2, 2]) ebins = np.asarray([3.0, 5., 8.0, 12.0]) rlo = ebins[:-1] rhi = ebins[1:] rmf = create_delta_rmf(rlo, rhi, e_min=rlo, e_max=rhi) pha.set_rmf(rmf) pha.units = 'energy' assert pha.get_xerr() == pytest.approx([2.0, 3.0, 4.0]) assert pha.grouped pha.ignore_bad() # Should this error out or not? assert pha.get_filter() == '' # with pytest.raises(DataErr) as de: # pha.get_filter() # assert str(de.value) == 'mask excludes all data' assert pha.get_xerr() == pytest.approx([])
def test_pha_get_filter_checks_ungrouped(chtype, expected, args): """Check we get the filter we expect chtype is channel, energy, or wavelength expected is the expected response args is a list of 3-tuples of (flag, loval, hival) where flag is True for notice and False for ignore; they define the filter to apply """ chans = np.arange(1, 11, dtype=int) counts = np.ones(10, dtype=int) pha = DataPHA('data', chans, counts) # Use an ARF to create a channel to energy mapping # The 0.2-2.2 keV range maps to 5.636-61.992 Angstrom # egrid = 0.2 * np.arange(1, 12) arf = DataARF('arf', egrid[:-1], egrid[1:], np.ones(10)) pha.set_arf(arf) pha.units = chtype for (flag, lo, hi) in args: if flag: pha.notice(lo, hi) else: pha.ignore(lo, hi) assert pha.get_filter(format='%.1f') == expected
def test_pha_get_xerr_all_bad_channel_no_group(): """get_xerr handles all bad values [channel] It's not obvious what it is meant to be doing here. """ pha = DataPHA('name', [1, 2, 3], [1, 1, 1], quality=[2, 2, 2]) assert pha.get_xerr() == pytest.approx([1, 1, 1]) pha.ignore_bad() assert pha.get_filter() == '' assert pha.get_xerr() == pytest.approx([1, 1, 1])
def test_pha_get_xerr_all_bad_channel_group(): """get_xerr handles all bad values [channel] The behavior with grouping is different, presumably because we assume we have grouping when we have a quality array. """ pha = DataPHA('name', [1, 2, 3], [1, 1, 1], grouping=[1, 1, 1], quality=[2, 2, 2]) assert pha.get_xerr() == pytest.approx([1, 1, 1]) assert pha.grouped pha.ignore_bad() assert pha.get_filter() == '' assert pha.get_xerr() == pytest.approx([])
def test_pha_get_xerr_all_bad_energy_no_group(): """get_xerr handles all bad values [energy] It's not obvious what it is meant to be doing here. """ pha = DataPHA('name', [1, 2, 3], [1, 1, 1], quality=[2, 2, 2]) ebins = np.asarray([3.0, 5., 8.0, 12.0]) rlo = ebins[:-1] rhi = ebins[1:] rmf = create_delta_rmf(rlo, rhi, e_min=rlo, e_max=rhi) pha.set_rmf(rmf) pha.units = 'energy' assert pha.get_xerr() == pytest.approx([2.0, 3.0, 4.0]) pha.ignore_bad() assert pha.get_filter() == '' assert pha.get_xerr() == pytest.approx([2.0, 3.0, 4.0])