def test_slit_illum_correct_different_roi(change_working_dir, input_data, request): ad, slit_illum_ad = input_data assert ad.detector_roi_setting() != slit_illum_ad.detector_roi_setting() p = GMOSLongslit([ad]) ad_out = p.slitIllumCorrect(slit_illum=slit_illum_ad)[0] for ext_out in ad_out: # Create output data data_o = np.ma.masked_array(ext_out.data, mask=ext_out.mask) # Bin columns n_rows = data_o.shape[0] fitter = fitting.LevMarLSQFitter() model = models.Chebyshev1D(c0=0.5 * n_rows, degree=2, domain=(0, n_rows)) model.c0.fixed = True nbins = 10 rows = np.arange(n_rows) for i in range(nbins): col_start = i * data_o.shape[1] // nbins col_end = (i + 1) * data_o.shape[1] // nbins cols = np.ma.mean(data_o[:, col_start:col_end], axis=1) fitted_model = fitter(model, rows, cols) # Check column is linear np.testing.assert_allclose(fitted_model.c2.value, 0, atol=0.001) # Check if slope is (almost) horizontal (< 2.5 deg) slope_angle = np.rad2deg( np.arctan(fitted_model.c1.value / (rows.size // 2))) assert np.abs(slope_angle) <= 1.0 if request.config.getoption("--do-plots"): plot_slit_illum_correct_results(ad, ad_out, fname="test_different_roi_")
def test_slit_illum_correct_without_slit_illumination(astrofaker): in_ad = astrofaker.create("GMOS-S", mode="SPECT") p = GMOSLongslit([in_ad]) with pytest.raises(NotImplementedError): p.slitIllumCorrect()
def test_dont_do_slit_illum(astrofaker): in_ad = astrofaker.create("GMOS-S", mode="SPECT") p = GMOSLongslit([in_ad]) out_ad = p.slitIllumCorrect(do_illum=False)[0] for in_ext, out_ext in zip(in_ad, out_ad): assert np.testing.assert_equal(in_ext.data, out_ext.data)