def test_opening_mask_ref(tmp_path): # First make test reference file file_path = tmp_path / 'testmask.asdf' utils.mk_mask(filepath=file_path) mask = datamodels.open(file_path) assert mask.meta.instrument.optical_element == 'F158' assert isinstance(mask, datamodels.MaskRefModel)
def test_err(): """Check that a 4-D ERR array is initialized and all values are zero.""" # size of integration instrument = 'WFI' ngroups = 5 xsize = 1032 ysize = 1024 csize = (ngroups, ysize, xsize) # create raw input data for step dm_ramp = testutil.mk_ramp((ngroups, ysize, xsize)) dm_ramp.meta.instrument.name = instrument # create a MaskModel elements for the dq input mask ref_data = testutil.mk_mask(csize[1:]) ref_data['meta']['instrument']['name'] = instrument # Filter out validation warnings from ref_data warnings.filterwarnings("ignore", category=ValidationWarning) # run correction step outfile = do_dqinit(dm_ramp, ref_data) # check that ERR array was created and initialized to zero errarr = outfile.err assert(errarr.ndim == 2) # check that output err array is 2-D assert(np.all(errarr == 0)) # check that values are 0
def test_groupdq(): """Check that GROUPDQ extension is added to the data and all values are initialized to zero.""" # size of integration instrument = 'WFI' ngroups = 5 xsize = 1032 ysize = 1024 csize = (ngroups, ysize, xsize) # create raw input data for step dm_ramp = testutil.mk_ramp(csize) dm_ramp.meta.instrument.name = instrument # create a MaskModel elements for the dq input mask ref_data = testutil.mk_mask(csize[1:]) ref_data['meta']['instrument']['name'] = instrument # run the correction step outfile = do_dqinit(dm_ramp, ref_data) # check that GROUPDQ was created and initialized to zero groupdq = outfile.groupdq np.testing.assert_array_equal(np.full((ngroups, ysize, xsize), 0, dtype=int), groupdq, err_msg='groupdq not initialized to zero')
def test_make_mask(): mask = utils.mk_mask(shape=(20, 20)) assert mask.meta.reftype == 'MASK' assert mask.dq.dtype == np.uint32 # Test validation mask_model = datamodels.MaskRefModel(mask) assert mask_model.validate() is None
def test_dq_im(xstart, ystart, xsize, ysize, ngroups, instrument, exp_type): """ Check that PIXELDQ is initialized with the information from the reference file. test that a flagged value in the reference file flags the PIXELDQ array""" csize = (ngroups, ysize, xsize) # create raw input data for step dm_ramp = testutil.mk_ramp(csize) dm_ramp.meta.instrument.name = instrument # create a MaskModel elements for the dq input mask dq = np.zeros(csize[1:], dtype=np.uint32) # edit reference file with known bad pixel values dq[100, 100] = 2 # Saturated pixel dq[200, 100] = 4 # Jump detected pixel dq[300, 100] = 8 # Dropout dq[400, 100] = 32 # Persistence dq[500, 100] = 1 # Do_not_use dq[100, 200] = 3 # Saturated pixel + do not use dq[200, 200] = 5 # Jump detected pixel + do not use dq[300, 200] = 9 # Dropout + do not use dq[400, 200] = 33 # Persistence + do not use # write mask model ref_data = testutil.mk_mask(csize[1:]) # Copy in maskmodel elemnts ref_data['dq'] = dq ref_data['meta']['instrument']['name'] = instrument # run do_dqinit outfile = do_dqinit(dm_ramp, ref_data) dqdata = outfile['pixeldq'] # assert that the pixels read back in match the mapping from ref data to science data assert (dqdata[100, 100] == dqflags.pixel['SATURATED']) assert (dqdata[200, 100] == dqflags.pixel['JUMP_DET']) assert (dqdata[300, 100] == dqflags.pixel['DROPOUT']) assert (dqdata[400, 100] == dqflags.pixel['PERSISTENCE']) assert (dqdata[500, 100] == dqflags.pixel['DO_NOT_USE']) assert (dqdata[100, 200] == dqflags.pixel['SATURATED'] + dqflags.pixel['DO_NOT_USE']) assert (dqdata[200, 200] == dqflags.pixel['JUMP_DET'] + dqflags.pixel['DO_NOT_USE']) assert (dqdata[300, 200] == dqflags.pixel['DROPOUT'] + dqflags.pixel['DO_NOT_USE']) assert (dqdata[400, 200] == dqflags.pixel['PERSISTENCE'] + dqflags.pixel['DO_NOT_USE'])
def test_dq_add1_groupdq(): """ Test if the dq_init code set the groupdq flag on the first group to 'do_not_use' by adding 1 to the flag, not overwriting to 1 Also test whether two flags on the same pixel are added together. """ # size of integration instrument = 'WFI' ngroups = 5 xsize = 1032 ysize = 1024 csize = (ngroups, ysize, xsize) # create raw input data for step dm_ramp = testutil.mk_ramp((ngroups, ysize, xsize)) dm_ramp.meta.instrument.name = instrument # create a MaskModel elements for the dq input mask dq = np.zeros(csize[1:], dtype=np.uint32) # write reference file with known bad pixel values dq[505, 505] = 1 # Do_not_use dq[400, 500] = 3 # do_not_use and saturated pixel # write mask model ref_data = testutil.mk_mask(csize[1:]) ref_data['meta']['instrument']['name'] = instrument # Copy in maskmodel elemnts ref_data['dq'] = dq # set a flag in the pixel dq dm_ramp.pixeldq[505, 505] = 4 # Jump detected pixel # run correction step outfile = do_dqinit(dm_ramp, ref_data) # test if pixels in pixeldq were incremented in value by 1 # check that previous dq flag is added to mask value assert (outfile.pixeldq[505, 505] == dqflags.pixel['JUMP_DET'] + dqflags.pixel['DO_NOT_USE']) # check two flags propagate correctly assert (outfile.pixeldq[400, 500] == dqflags.pixel['SATURATED'] + dqflags.pixel['DO_NOT_USE'])