Exemple #1
0
def create_integration_model(input_model, integ_info):
    """Creates an CubeModel from the computed arrays from ramp_fit.
    
    Parameters
    ----------
    input_model: RampModel
        Input RampModel for which the output CubeModel is created.
    integ_info: tuple
        The ramp fitting arrays needed for the CubeModel for each integration.
    
    Returns
    -------
    int_model: CubeModel
        The output CubeModel to be returned from the ramp fit step.
    """
    data, dq, var_poisson, var_rnoise, int_times, err = integ_info
    int_model = datamodels.CubeModel(
        data=np.zeros(data.shape, dtype=np.float32),
        dq=np.zeros(data.shape, dtype=np.uint32),
        var_poisson=np.zeros(data.shape, dtype=np.float32),
        var_rnoise=np.zeros(data.shape, dtype=np.float32),
        err=np.zeros(data.shape, dtype=np.float32))
    int_model.int_times = None
    int_model.update(input_model)  # ... and add all keys from input

    int_model.data = data
    int_model.dq = dq
    int_model.var_poisson = var_poisson
    int_model.var_rnoise = var_rnoise
    int_model.err = err
    int_model.int_times = int_times

    return int_model
Exemple #2
0
def test_tso_phot_4():

    global shape, xcenter, ycenter

    value = 17.
    background = 0.8
    radius = 5.
    radius_inner = 8.
    radius_outer = 11.
    data = mk_data_array(shape, value, background, xcenter, ycenter, radius)
    datamodel = datamodels.CubeModel(data)
    set_meta(datamodel, sub64p=False)

    int_times = include_int_times(datamodel)
    # Modify the column of integration numbers so that they extend outside
    # the range of integration numbers in the science data.  This shouldn't
    # happen, i.e. this is to test an edge case.
    int_start = datamodel.meta.exposure.integration_start
    datamodel.int_times['integration_number'] += (2 * int_start)

    catalog = tso_aperture_photometry(datamodel, xcenter, ycenter, radius + 1.,
                                      radius_inner, radius_outer)

    int_times = np.array([
        58704.62853, 58704.628655, 58704.62878, 58704.62890, 58704.6290,
        58704.6291511, 58704.629275
    ])
    assert np.allclose(catalog['MJD'], int_times, rtol=1.e-8)
Exemple #3
0
def test_tso_phot_2():

    # pupil = 'WLP8' and subarray = 'SUB64P'

    shape = (7, 64, 64)
    xcenter = 31.
    ycenter = 31.

    value = 17.
    background = 0.8
    radius = 50.
    radius_inner = None
    radius_outer = None
    data = mk_data_array(shape, value, background, xcenter, ycenter, radius)
    datamodel = datamodels.CubeModel(data)
    set_meta(datamodel, sub64p=True)

    catalog = tso_aperture_photometry(datamodel, xcenter, ycenter, radius,
                                      radius_inner, radius_outer)

    assert catalog.meta['instrument'] == datamodel.meta.instrument.name
    assert catalog.meta['filter'] == datamodel.meta.instrument.filter
    assert catalog.meta['subarray'] == datamodel.meta.subarray.name
    assert catalog.meta['pupil'] == datamodel.meta.instrument.pupil
    assert math.isclose(catalog.meta['xcenter'], xcenter, abs_tol=0.01)
    assert math.isclose(catalog.meta['ycenter'], ycenter, abs_tol=0.01)

    assert np.allclose(catalog['aperture_sum'],
                       (value + background) * shape[-1] * shape[-2],
                       rtol=1.e-6)
    assert np.allclose(catalog['aperture_sum_err'], 0., atol=1.e-7)
Exemple #4
0
def test_wcs_bbox_from_shape_3d():
    model = datamodels.CubeModel((3, 32, 2048))
    bb = wcs_bbox_from_shape(model.data.shape)
    assert bb == ((-0.5, 2047.5), (-0.5, 31.5))

    model = datamodels.IFUCubeModel((750, 45, 50))
    bb = wcs_bbox_from_shape(model.data.shape)
    assert bb == ((-0.5, 49.5), (-0.5, 44.5))
Exemple #5
0
def test_multi_integration_input(resample_class):
    cube = datamodels.CubeModel((5, 100, 100))
    cube.meta.instrument.name = 'MIRI'
    cube.meta.observation.date = '2018-09-07'
    cube.meta.observation.time = '10:32:20.181'

    # Resample can't handle cubes, so it should fail
    with pytest.raises(RuntimeError):
        resample_class().call(cube)
Exemple #6
0
def test_ami_analyze_calints_fail():
    """Make sure ami_analyze fails if input is CubeModel (_calints)"""
    model = datamodels.CubeModel((25, 19, 19))
    model.meta.instrument.name = "NIRISS"
    model.meta.instrument.filter = "F277W"
    model.meta.observation.date = "2019-01-01"
    model.meta.observation.time = "00:00:00"
    with pytest.raises(RuntimeError):
        AmiAnalyzeStep.call(model)
Exemple #7
0
def test_align_models():
    """ Test of align_models() in imageregistration.py """

    temp = np.arange((15), dtype=np.float32)
    temp = temp.reshape((3, 5))
    targ = np.zeros((3, 3, 5))
    targ[:] = temp
    targ[0, 1, 1] += 0.3
    targ[0, 2, 1] += 0.7
    targ[0, 0, 3] -= 0.5
    targ[0, 1, 2] -= 1.3
    targ[1, 0, 1] += 0.7
    targ[1, 2, 1] += 0.2
    targ[1, 2, 3] += 0.8
    targ[1, 2, 2] -= 1.8
    targ[2, 1, 1] += 0.9
    targ[2, 2, 2] -= 0.5
    targ[2, 1, 0] += 0.8
    targ[2, 1, 2] += 0.8

    ref = targ.copy()
    ref[1, 2, 3] -= 5.
    ref[2, 0, 3] -= 1.6

    mask = ref[0, :, :]
    mask = ref[0, :, :] * 0 + 1
    mask[1, 1] = 0
    mask[1, 2] = 0

    targ_mod = datamodels.CubeModel(data=targ)
    mask_mod = datamodels.ImageModel(data=mask)
    ref_mod = datamodels.CubeModel(data=ref)

    am_results = imageregistration.align_models(ref_mod, targ_mod, mask_mod)
    results_sub = am_results.data[:3, :2, 2, :3]

    truth_results_sub = np.array([[[10., 11.7, 12.],
                                   [10.036278, 11.138131, 10.180669]],
                                  [[10.053974, 11.1953335, 11.993213],
                                   [10.36224, 10.805556, 10.274276]],
                                  [[9.988604, 11.33026, 11.968155],
                                   [10.024722, 10.971058, 10.108071]]])

    npt.assert_allclose(results_sub, truth_results_sub, atol=1E-6)
Exemple #8
0
def test_klip():
    """ Test of klip() in klip.py """

    target_model_data = np.array(
        [[[0.84456396, 0.75297576, 0.79752606, 1.2884853],
          [0.98718196, 0.83042985, 0.76917756, 0.9760479],
          [1.4539411, 1.1395805, 0.9635729, 0.92798233]],
         [[0.84456396, 0.75297576, 0.79752606, 1.2884853],
          [0.98718196, 0.83042985, 0.76917756, 0.9760479],
          [1.4539411, 1.1395805, 0.9635729, 0.92798233]]],
        dtype=np.float32)

    target_model = datamodels.CubeModel(data=target_model_data)

    refs_model_data = np.array(
        [[[[0.8174741, 0.74938107, 0.73527235, 1.3193785],
           [1.0032778, 0.8247719, 0.78944355, 0.99227476],
           [1.4609907, 1.1605016, 0.9564753, 0.9186427]],
          [[0.86789674, 0.7998908, 0.8557136, 1.2926395],
           [0.97756547, 0.7788742, 0.75892323, 0.9819151],
           [1.495664, 1.1455023, 1.002115, 0.92159164]],
          [[0.84426856, 0.7719569, 0.8088021, 1.2781427],
           [0.98734635, 0.8125992, 0.77424014, 0.9934157],
           [1.419994, 1.1546139, 0.961317, 0.95088667]]],
         [[[0.8174741, 0.74938107, 0.73527235, 1.3193785],
           [1.0032778, 0.8247719, 0.78944355, 0.99227476],
           [1.4609907, 1.1605016, 0.9564753, 0.9186427]],
          [[0.86789674, 0.7998908, 0.8557136, 1.2926395],
           [0.97756547, 0.7788742, 0.75892323, 0.9819151],
           [1.495664, 1.1455023, 1.002115, 0.92159164]],
          [[0.84426856, 0.7719569, 0.8088021, 1.2781427],
           [0.98734635, 0.8125992, 0.77424014, 0.9934157],
           [1.419994, 1.1546139, 0.961317, 0.95088667]]]],
        dtype=np.float32)

    refs_model = datamodels.QuadModel(data=refs_model_data)

    # Call the KLIP routine
    truncate = 50
    psf_sub, psf_fit = klip.klip(target_model, refs_model, truncate)

    truth_psf_sub_data = np.array(
        [[[0.00677787, -0.01639403, 0.00753349, -0.00190761],
          [-0.00016282, 0.02299659, -0.00647708, -0.00992276],
          [0.00798155, -0.00867007, -0.00287747, 0.00112234]],
         [[0.00677787, -0.01639403, 0.00753349, -0.00190761],
          [-0.00016282, 0.02299659, -0.00647708, -0.00992276],
          [0.00798155, -0.00867007, -0.00287747, 0.00112234]]])

    # psf_fit is cuurrently not used in the code, co not compared here
    npt.assert_allclose(psf_sub.data, truth_psf_sub_data, atol=1E-6)
Exemple #9
0
def test_tso_phot_5():

    global shape, xcenter, ycenter

    value = 17.
    background = 0.8
    radius = 5.
    radius_inner = 8.
    radius_outer = 11.
    data = mk_data_array(shape, value, background, xcenter, ycenter, radius)
    datamodel = datamodels.CubeModel(data)
    set_meta(datamodel, sub64p=False)
    datamodel.meta.bunit_data = 'MJy'  # unexpected data unit

    with pytest.raises(ValueError):
        tso_aperture_photometry(datamodel, xcenter, ycenter, radius + 1.,
                                radius_inner, radius_outer)
Exemple #10
0
def _generate_data():
    """Generate data of each type of input for master background step"""

    image = datamodels.ImageModel((10, 10))
    image.meta.instrument.name = 'MIRI'
    image.meta.instrument.detector = 'MIRIMAGE'
    image.meta.exposure.type = 'MIR_LRS-FIXEDSLIT'
    image.meta.observation.date = '2018-01-01'
    image.meta.observation.time = '00:00:00'
    image.meta.subarray.xstart = 1
    image.meta.subarray.ystart = 1
    image.meta.wcsinfo.v2_ref = 0
    image.meta.wcsinfo.v3_ref = 0
    image.meta.wcsinfo.roll_ref = 0
    image.meta.wcsinfo.ra_ref = 0
    image.meta.wcsinfo.dec_ref = 0
    image = AssignWcsStep.call(image)

    # hdulist = create_nirspec_fs_file(grating="G140M", filter="F100LP")
    # hdulist[1].data = np.zeros((2048, 2048))
    # fs = datamodels.ImageModel(hdulist)
    # fs = AssignWcsStep.call(fs)
    # multislit = Extract2dStep.call(fs)

    # hdulist = create_nirspec_ifu_file("OPAQUE", "G140M")
    # hdulist[1].data = np.zeros((2048, 2048))
    # ifu_image = datamodels.IFUImageModel(hdulist)
    # ifu_image = AssignWcsStep.call(ifu_image)

    container = datamodels.ModelContainer([image])

    cube = datamodels.CubeModel((2, 10, 10))

    # Return the data and a status dependent on whether the step can process it
    return [
        (image, 'COMPLETE'),
        # (multislit, 'COMPLETE'),
        # (ifu_image, 'COMPLETE'),
        (container, 'COMPLETE'),
        (cube, 'SKIPPED'),
    ]
Exemple #11
0
def test_tso_phot_3():

    global shape, xcenter, ycenter

    value = 17.
    background = 0.8
    radius = 5.
    radius_inner = 8.
    radius_outer = 11.
    data = mk_data_array(shape, value, background, xcenter, ycenter, radius)
    datamodel = datamodels.CubeModel(data)
    set_meta(datamodel, sub64p=False)

    int_times = include_int_times(datamodel)

    catalog = tso_aperture_photometry(datamodel, xcenter, ycenter, radius + 1.,
                                      radius_inner, radius_outer)

    offset = datamodel.meta.exposure.integration_start - 1
    slc = slice(offset, offset + shape[0])
    assert np.allclose(catalog['MJD'], int_times[slc], atol=1.e-8)
Exemple #12
0
def test_tso_phot_1():

    global shape, xcenter, ycenter

    # pupil = 'CLEAR' and subarray = 'FULL'

    value = 17.
    background = 0.8
    radius = 5.
    radius_inner = 8.
    radius_outer = 11.
    data = mk_data_array(shape, value, background, xcenter, ycenter, radius)
    datamodel = datamodels.CubeModel(data)
    set_meta(datamodel, sub64p=False)

    # Use a larger radius than was used for creating the data.
    catalog = tso_aperture_photometry(datamodel, xcenter, ycenter,
                                      radius + 1., radius_inner,
                                      radius_outer)

    assert catalog.meta['instrument'] == datamodel.meta.instrument.name
    assert catalog.meta['filter'] == datamodel.meta.instrument.filter
    assert catalog.meta['subarray'] == datamodel.meta.subarray.name
    assert catalog.meta['detector'] == datamodel.meta.instrument.detector
    assert catalog.meta['channel'] == datamodel.meta.instrument.channel
    assert catalog.meta['target_name'] == datamodel.meta.target.catalog_name
    assert math.isclose(catalog.meta['xcenter'], xcenter, abs_tol=0.01)
    assert math.isclose(catalog.meta['ycenter'], ycenter, abs_tol=0.01)

    assert np.allclose(catalog['aperture_sum'], 1263.4778, rtol=1.e-7)
    assert np.allclose(catalog['aperture_sum_err'], 0., atol=1.e-7)
    assert np.allclose(catalog['net_aperture_sum'], 1173., rtol=1.e-7)
    assert np.allclose(catalog['annulus_sum'], 143.256627, rtol=1.e-7)
    assert np.allclose(catalog['annulus_sum_err'], 0., atol=1.e-7)
    assert np.allclose(catalog['annulus_mean'], background, rtol=1.e-7)

    assert np.allclose(catalog['annulus_mean'], 0.8, rtol=1.e-6)
    assert np.allclose(catalog['annulus_mean_err'], 0., rtol=1.e-7)
    assert np.allclose(catalog['net_aperture_sum'], 1173., rtol=1.e-7)
    assert np.allclose(catalog['net_aperture_sum_err'], 0., atol=1.e-7)
Exemple #13
0
def test_transform_bbox_from_shape_3d():
    model = datamodels.CubeModel((3, 32, 2048))
    bb = transform_bbox_from_shape(model.data.shape)
    assert bb == ((-0.5, 31.5), (-0.5, 2047.5))