Example #1
0
def make_datamodel():
    """Make data for white light tests"""

    model = datamodels.MultiSpecModel()
    model.meta.exposure.group_time = 0.15904
    model.meta.exposure.ngroups = 60
    model.meta.exposure.start_time = 58627.0
    model.meta.exposure.integration_start = 1
    model.meta.exposure.integration_end = 2

    # Make data arrays
    flux = np.random.rand(200) * 1e-9
    wavelength = np.arange(11, 13, step=0.01)
    error = np.random.rand(200)
    surf_bright = np.zeros(200)
    sb_error = np.zeros(200)
    dq = np.ones(200)
    background = np.zeros(200)
    berror = np.zeros(200)
    npixels = np.zeros(200)

    data = [(i, j, k, l, m, n, o, p, q) for i, j, k, l, m, n, o, p, q in zip(
        wavelength, flux, error, surf_bright, sb_error, dq, background, berror,
        npixels)]

    spec_table = np.array(data,
                          dtype=[('WAVELENGTH', 'f8'), ('FLUX', 'f8'),
                                 ('ERROR', 'f8'), ('SURF_BRIGHT', 'f8'),
                                 ('SB_ERROR', 'f8'), ('DQ', 'u4'),
                                 ('BACKGROUND', 'f8'), ('BERROR', 'f8'),
                                 ('NPIXELS', 'f8')])

    spectrum = datamodels.SpecModel()
    spectrum.spec_table = spec_table

    model.spec.append(spectrum)

    integrations = [
        (1, 58627.53891071, 58627.53896565, 58627.5390206, 0., 0., 0.),
        (2, 58627.5390206, 58627.53907555, 58627.5391305, 0., 0., 0.),
        (3, 58627.5391305, 58627.53918544, 58627.53924039, 0., 0., 0.)
    ]

    integration_table = np.array(integrations,
                                 dtype=[('integration_number', 'i4'),
                                        ('int_start_MJD_UTC', 'f8'),
                                        ('int_mid_MJD_UTC', 'f8'),
                                        ('int_end_MJD_UTC', 'f8'),
                                        ('int_start_BJD_TDB', 'f8'),
                                        ('int_mid_BJD_TDB', 'f8'),
                                        ('int_end_BJD_TDB', 'f8')])
    model.int_times = (integration_table)

    return model
Example #2
0
def user_bkg_spec_b():
    """Create "user-background" data for testing.

    `expand_to_2d` uses `np.interp` for interpolation, and the wavelength
    array that is passed to `np.interp` must be increasing.  `expand_to_2d`
    is supposed to handle the case that the wavelengths are decreasing.
    Create data for checking that the results are the same even if the
    wavelength array in `m_bkg_spec` is reversed so that the values are
    decreasing, and the corresponding flux array is also reversed to retain
    the original (wavelength, flux) relation.

    Returns
    -------
    m_bkg_spec : `~jwst.datamodels.MultiSpecModel`
    """

    # This data type is used for creating a MultiSpecModel.
    spec_dtype = datamodels.SpecModel().spec_table.dtype

    m_bkg_spec = datamodels.MultiSpecModel()
    wavelength = np.geomspace(1.5,
                              4.5,
                              num=25,
                              endpoint=True,
                              dtype=np.float64)[::-1]
    flux = np.zeros_like(wavelength)
    error = np.ones_like(wavelength)
    var_dummy = error.copy()
    surf_bright = np.linspace(13.,
                              25.,
                              num=25,
                              endpoint=True,
                              retstep=False,
                              dtype=np.float64)[::-1]
    sb_error = np.ones_like(wavelength)
    dq = np.zeros(wavelength.shape, dtype=np.uint32)
    background = np.ones_like(wavelength)
    berror = np.ones_like(wavelength)
    npixels = np.ones_like(wavelength)
    otab = np.array(list(
        zip(wavelength, flux, error, var_dummy, var_dummy, var_dummy,
            surf_bright, sb_error, var_dummy, var_dummy, var_dummy, dq,
            background, berror, var_dummy, var_dummy, var_dummy, npixels)),
                    dtype=spec_dtype)
    spec = datamodels.SpecModel(spec_table=otab)
    m_bkg_spec.spec.append(spec)

    return m_bkg_spec
Example #3
0
def user_bkg_spec_a():
    """Create "user-background" data for testing.

    Returns
    -------
    m_bkg_spec : `~jwst.datamodels.MultiSpecModel`
    """

    # This data type is used for creating a MultiSpecModel.
    spec_dtype = datamodels.SpecModel().spec_table.dtype

    # m_bkg_spec doesn't have to be a MultiSpecModel, but that's an option.
    m_bkg_spec = datamodels.MultiSpecModel()
    wavelength = np.geomspace(1.5,
                              4.5,
                              num=25,
                              endpoint=True,
                              dtype=np.float64)
    flux = np.zeros_like(wavelength)
    error = np.ones_like(wavelength)
    var_dummy = error.copy()
    surf_bright = np.linspace(13.,
                              25.,
                              num=25,
                              endpoint=True,
                              retstep=False,
                              dtype=np.float64)
    sb_error = np.ones_like(wavelength)
    dq = np.zeros(wavelength.shape, dtype=np.uint32)
    background = np.ones_like(wavelength)
    berror = np.ones_like(wavelength)
    # The npixels column should no longer be used.  Set it to a large value
    # to make it more obvious in case it actually is still used.
    npixels = np.zeros_like(wavelength) + 2000.
    otab = np.array(list(
        zip(wavelength, flux, error, var_dummy, var_dummy, var_dummy,
            surf_bright, sb_error, var_dummy, var_dummy, var_dummy, dq,
            background, berror, var_dummy, var_dummy, var_dummy, npixels)),
                    dtype=spec_dtype)
    spec = datamodels.SpecModel(spec_table=otab)
    m_bkg_spec.spec.append(spec)

    return m_bkg_spec
Example #4
0
def test_dq():
    """Test that DQ exclusion works"""
    spec1 = create_spec_model(flux=1e-9)
    spec2 = create_spec_model(flux=1e-9)
    ms = datamodels.MultiSpecModel()
    ms.meta.exposure.exposure_time = 1
    ms.spec.append(spec1)
    ms.spec.append(spec2)

    # Make one pixel bad by being large.
    # Result should be large
    BAD_PIX = 5
    spec1.spec_table['FLUX'][BAD_PIX] = 1.0
    result = Combine1dStep.call(ms)
    assert np.isclose(result.spec_table['FLUX'][BAD_PIX], 0.5)

    # Now mark that pixel bad.
    # Result should not just contain the second spectrum value.
    spec1.spec_table['DQ'][BAD_PIX] = datamodels.dqflags.pixel['DO_NOT_USE']
    result_dq = Combine1dStep.call(ms)
    assert np.isclose(result_dq.spec_table['FLUX'][BAD_PIX],
                      spec2.spec_table['FLUX'][BAD_PIX])
Example #5
0
def user_bkg_spec_a():
    """Create "user-background" data for testing.

    Returns
    -------
    m_bkg_spec : `~jwst.datamodels.MultiSpecModel`
    """

    # This data type is used for creating a MultiSpecModel.
    spec_dtype = datamodels.SpecModel().spec_table.dtype

    # m_bkg_spec doesn't have to be a MultiSpecModel, but that's an option.
    m_bkg_spec = datamodels.MultiSpecModel()
    wavelength = np.geomspace(1.5,
                              4.5,
                              num=25,
                              endpoint=True,
                              dtype=np.float64)
    flux = np.linspace(13.,
                       25.,
                       num=25,
                       endpoint=True,
                       retstep=False,
                       dtype=np.float64)
    fl_error = np.ones_like(wavelength)
    dq = np.zeros(wavelength.shape, dtype=np.uint32)
    net = np.zeros_like(wavelength)
    nerror = np.ones_like(wavelength)
    background = np.ones_like(wavelength)
    berror = np.ones_like(wavelength)
    npixels = np.ones_like(wavelength)
    otab = np.array(list(
        zip(wavelength, flux, fl_error, dq, net, nerror, background, berror,
            npixels)),
                    dtype=spec_dtype)
    spec = datamodels.SpecModel(spec_table=otab)
    m_bkg_spec.spec.append(spec)

    return m_bkg_spec
Example #6
0
def make_datamodel():
    """Make data for white light tests"""

    model = datamodels.MultiSpecModel()
    model.meta.exposure.group_time = 0.15904
    model.meta.exposure.ngroups = 60
    model.meta.exposure.start_time = 58627.0
    model.meta.exposure.integration_start = 1
    model.meta.exposure.integration_end = 2

    # Make data arrays
    flux = np.random.rand(200) * 1e-9
    wavelength = np.arange(11, 13, step=0.01)
    f_var_poisson = np.random.rand(200)
    f_var_rnoise = np.random.rand(200)
    f_var_flat = np.random.rand(200)
    error = np.sqrt(f_var_poisson + f_var_rnoise + f_var_flat)

    surf_bright = np.zeros(200)
    sb_error = np.zeros(200)
    sb_var_poisson = sb_error.copy()
    sb_var_rnoise = sb_error.copy()
    sb_var_flat = sb_error.copy()
    dq = np.ones(200)
    background = np.zeros(200)
    berror = np.zeros(200)
    b_var_poisson = sb_error.copy()
    b_var_rnoise = sb_error.copy()
    b_var_flat = sb_error.copy()
    npixels = np.zeros(200)

    spec_dtype = datamodels.SpecModel(
    ).spec_table.dtype  # This data type is used for creating an output table.

    otab = np.array(list(
        zip(wavelength, flux, error, f_var_poisson, f_var_rnoise, f_var_flat,
            surf_bright, sb_error, sb_var_poisson, sb_var_rnoise, sb_var_flat,
            dq, background, berror, b_var_poisson, b_var_rnoise, b_var_flat,
            npixels), ),
                    dtype=spec_dtype)

    spec_model = datamodels.SpecModel(spec_table=otab)

    model.spec.append(spec_model)

    integrations = [
        (1, 58627.53891071, 58627.53896565, 58627.5390206, 0., 0., 0.),
        (2, 58627.5390206, 58627.53907555, 58627.5391305, 0., 0., 0.),
        (3, 58627.5391305, 58627.53918544, 58627.53924039, 0., 0., 0.)
    ]

    integration_table = np.array(integrations,
                                 dtype=[('integration_number', 'i4'),
                                        ('int_start_MJD_UTC', 'f8'),
                                        ('int_mid_MJD_UTC', 'f8'),
                                        ('int_end_MJD_UTC', 'f8'),
                                        ('int_start_BJD_TDB', 'f8'),
                                        ('int_mid_BJD_TDB', 'f8'),
                                        ('int_end_BJD_TDB', 'f8')])
    model.int_times = integration_table

    return model