def test_dq_im(xstart, ystart, xsize, ysize, nints, 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""" # create raw input data for step dm_ramp = make_rawramp(instrument, nints, ngroups, ysize, xsize, ystart, xstart, exp_type) # create a MaskModel for the dq input mask dq, dq_def = make_maskmodel(ysize, xsize) # edit reference file with known bad pixel values dq[100, 100] = 2 # Dead pixel dq[200, 100] = 4 # Hot pixel dq[300, 100] = 8 # Unreliable_slope dq[400, 100] = 16 # RC dq[500, 100] = 1 # Do_not_use dq[100, 200] = 3 # Dead pixel + do not use dq[200, 200] = 5 # Hot pixel + do not use dq[300, 200] = 9 # Unreliable slope + do not use dq[400, 200] = 17 # RC + do not use # write mask model ref_data = MaskModel(dq=dq, dq_def=dq_def) ref_data.meta.instrument.name = instrument ref_data.meta.subarray.xstart = xstart ref_data.meta.subarray.xsize = xsize ref_data.meta.subarray.ystart = ystart ref_data.meta.subarray.ysize = ysize # run do_dqinit outfile = do_dqinit(dm_ramp, ref_data) if instrument == "FGS": dqdata = outfile.dq else: 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['DEAD']) assert (dqdata[200, 100] == dqflags.pixel['HOT']) assert (dqdata[300, 100] == dqflags.pixel['UNRELIABLE_SLOPE']) assert (dqdata[400, 100] == dqflags.pixel['RC']) assert (dqdata[500, 100] == dqflags.pixel['DO_NOT_USE']) assert (dqdata[100, 200] == 1025) assert (dqdata[200, 200] == 2049) assert (dqdata[300, 200] == 16777217) assert (dqdata[400, 200] == 16385)
def test_dq_im(xstart, ystart, xsize, ysize, nints, 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""" # create raw input data for step dm_ramp = make_rawramp(instrument, nints, ngroups, ysize, xsize, ystart, xstart, exp_type) # create a MaskModel for the dq input mask dq, dq_def = make_maskmodel(ysize, xsize) # edit reference file with known bad pixel values dq[100, 100] = 2 # Dead pixel dq[200, 100] = 4 # Hot pixel dq[300, 100] = 8 # Unreliable_slope dq[400, 100] = 16 # RC dq[500, 100] = 1 # Do_not_use dq[100, 200] = 3 # Dead pixel + do not use dq[200, 200] = 5 # Hot pixel + do not use dq[300, 200] = 9 # Unreliable slope + do not use dq[400, 200] = 17 # RC + do not use # write mask model ref_data = MaskModel(dq=dq, dq_def=dq_def) ref_data.meta.instrument.name = instrument ref_data.meta.subarray.xstart = xstart ref_data.meta.subarray.xsize = xsize ref_data.meta.subarray.ystart = ystart ref_data.meta.subarray.ysize = ysize # run do_dqinit outfile = do_dqinit(dm_ramp, ref_data) if instrument == "FGS": dqdata = outfile.dq else: 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['DEAD']) assert(dqdata[200, 100] == dqflags.pixel['HOT']) assert(dqdata[300, 100] == dqflags.pixel['UNRELIABLE_SLOPE']) assert(dqdata[400, 100] == dqflags.pixel['RC']) assert(dqdata[500, 100] == dqflags.pixel['DO_NOT_USE']) assert(dqdata[100, 200] == 1025) assert(dqdata[200, 200] == 2049) assert(dqdata[300, 200] == 16777217) assert(dqdata[400, 200] == 16385)
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 nints = 1 ngroups = 5 xsize = 1032 ysize = 1024 # create raw input data for step dm_ramp = make_rampmodel(nints, ngroups, ysize, xsize) # create a MaskModel for the dq input mask dq, dq_def = make_maskmodel(ysize, xsize) # write reference file with known bad pixel values dq[505, 505] = 1 # Do_not_use dq[400, 500] = 3 # do_not_use and dead pixel # write mask model ref_data = MaskModel(dq=dq, dq_def=dq_def) ref_data.meta.instrument.name = 'MIRI' ref_data.meta.subarray.xstart = 1 ref_data.meta.subarray.xsize = xsize ref_data.meta.subarray.ystart = 1 ref_data.meta.subarray.ysize = ysize # set a flag in the pixel dq dm_ramp.pixeldq[505, 505] = 4 # run correction step outfile = do_dqinit(dm_ramp, ref_data) # test if pixels in pixeldq were incremented in value by 1 assert (outfile.pixeldq[505, 505] == 5 ) # check that previous dq flag is added to mask value assert (outfile.pixeldq[400, 500] == 1025 ) # check two flags propagate correctly
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 nints = 1 ngroups = 5 xsize = 1032 ysize = 1024 # create raw input data for step dm_ramp = make_rampmodel(nints, ngroups, ysize, xsize) # create a MaskModel for the dq input mask dq, dq_def = make_maskmodel(ysize, xsize) # write reference file with known bad pixel values dq[505, 505] = 1 # Do_not_use dq[400, 500] = 3 # do_not_use and dead pixel # write mask model ref_data = MaskModel(dq=dq, dq_def=dq_def) ref_data.meta.instrument.name = 'MIRI' ref_data.meta.subarray.xstart = 1 ref_data.meta.subarray.xsize = xsize ref_data.meta.subarray.ystart = 1 ref_data.meta.subarray.ysize = ysize # set a flag in the pixel dq dm_ramp.pixeldq[505, 505] = 4 # run correction step outfile = do_dqinit(dm_ramp, ref_data) # test if pixels in pixeldq were incremented in value by 1 assert(outfile.pixeldq[505, 505] == 5) # check that previous dq flag is added to mask value assert(outfile.pixeldq[400, 500] == 1025) # check two flags propagate correctly
def test_groupdq(): """Check that GROUPDQ extension is added to the data and all values are initialized to zero.""" # size of integration instrument = 'MIRI' nints = 1 ngroups = 5 xsize = 1032 ysize = 1024 xstart = 1 ystart = 1 # create raw input data for step dm_ramp = make_rawramp(instrument, nints, ngroups, ysize, xsize, ystart, xstart) # create a MaskModel for the dq input mask dq, dq_def = make_maskmodel(ysize, xsize) # write mask model ref_data = MaskModel(dq=dq, dq_def=dq_def) ref_data.meta.instrument.name = instrument ref_data.meta.subarray.xstart = xstart ref_data.meta.subarray.xsize = xsize ref_data.meta.subarray.ystart = ystart ref_data.meta.subarray.ysize = ysize # 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((1, ngroups, ysize, xsize), 0, dtype=int), groupdq, err_msg='groupdq not initialized to zero')
def test_err(): """Check that a 4-D ERR array is initialized and all values are zero.""" # size of integration instrument = 'MIRI' nints = 1 ngroups = 5 xsize = 1032 ysize = 1024 xstart = 1 ystart = 1 # create raw input data for step dm_ramp = make_rawramp(instrument, nints, ngroups, ysize, xsize, ystart, xstart) # create a MaskModel for the dq input mask dq, dq_def = make_maskmodel(ysize, xsize) # write mask model ref_data = MaskModel(dq=dq, dq_def=dq_def) ref_data.meta.instrument.name = instrument ref_data.meta.subarray.xstart = xstart ref_data.meta.subarray.xsize = xsize ref_data.meta.subarray.ystart = ystart ref_data.meta.subarray.ysize = ysize # 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 == 4) # check that output err array is 4-D assert (np.all(errarr == 0)) # check that values are 0
def test_err(): """Check that a 4-D ERR array is initialized and all values are zero.""" # size of integration instrument = 'MIRI' nints = 1 ngroups = 5 xsize = 1032 ysize = 1024 xstart = 1 ystart = 1 # create raw input data for step dm_ramp = make_rawramp(instrument, nints, ngroups, ysize, xsize, ystart, xstart) # create a MaskModel for the dq input mask dq, dq_def = make_maskmodel(ysize, xsize) # write mask model ref_data = MaskModel(dq=dq, dq_def=dq_def) ref_data.meta.instrument.name = instrument ref_data.meta.subarray.xstart = xstart ref_data.meta.subarray.xsize = xsize ref_data.meta.subarray.ystart = ystart ref_data.meta.subarray.ysize = ysize # 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 == 4) # check that output err array is 4-D assert(np.all(errarr == 0)) # check that values are 0
def test_dq_subarray(): """Test that the pipeline properly extracts the subarray from the reference file.""" # put dq flags in specific pixels and make sure they match in the output subarray file # create input data # create model of data with 0 value array ngroups = 50 ysize = 224 xsize = 288 fullxsize = 1032 fullysize = 1024 # create the data and groupdq arrays csize = (1, ngroups, ysize, xsize) data = np.full(csize, 1.0) pixeldq = np.zeros((ysize, xsize), dtype=int) groupdq = np.zeros(csize, dtype=int) # create a JWST datamodel for MIRI data im = MIRIRampModel(data=data, pixeldq=pixeldq, groupdq=groupdq) im.meta.instrument.name = 'MIRI' im.meta.instrument.detector = 'MIRIMAGE' im.meta.instrument.filter = 'F1500W' im.meta.instrument.band = 'N/A' im.meta.observation.date = '2016-06-01' im.meta.observation.time = '00:00:00' im.meta.exposure.type = 'MIR_IMAGE' im.meta.subarray.name = 'MASK1550' im.meta.subarray.xstart = 1 im.meta.subarray.xsize = xsize im.meta.subarray.ystart = 467 im.meta.subarray.ysize = ysize # create full size mask model dq, dq_def = make_maskmodel(fullysize, fullxsize) # place dq flags in dq array that would be in subarray # MASK1550 file has colstart=1, rowstart=467 dq[542, 100] = 2 dq[550, 100] = 1 dq[580, 80] = 4 # write mask model ref_data = MaskModel(dq=dq, dq_def=dq_def) ref_data.meta.instrument.name = 'MIRI' ref_data.meta.subarray.xstart = 1 ref_data.meta.subarray.xsize = fullxsize ref_data.meta.subarray.ystart = 1 ref_data.meta.subarray.ysize = fullysize # Filter out validation warnings from ref_data warnings.filterwarnings("ignore", category=ValidationWarning) # run correction step outfile = do_dqinit(im, ref_data) # read dq array outpixdq = outfile.pixeldq # check for dq flag in pixeldq of subarray image assert (outpixdq[76, 100] == 1024) assert (outpixdq[84, 100] == 1) assert (outpixdq[114, 80] == 2048 ) # check that pixel was flagged 'NO_SAT_CHECK'
def test_dq_subarray(): """Test that the pipeline properly extracts the subarray from the reference file.""" # put dq flags in specific pixels and make sure they match in the output subarray file # create input data # create model of data with 0 value array ngroups = 50 ysize = 224 xsize = 288 fullxsize = 1032 fullysize = 1024 # create the data and groupdq arrays csize = (1, ngroups, ysize, xsize) data = np.full(csize, 1.0) pixeldq = np.zeros((ysize, xsize), dtype=int) groupdq = np.zeros(csize, dtype=int) # create a JWST datamodel for MIRI data im = MIRIRampModel(data=data, pixeldq=pixeldq, groupdq=groupdq) im.meta.instrument.name = 'MIRI' im.meta.instrument.detector = 'MIRIMAGE' im.meta.instrument.filter = 'F1500W' im.meta.instrument.band = 'N/A' im.meta.observation.date = '2016-06-01' im.meta.observation.time = '00:00:00' im.meta.exposure.type = 'MIR_IMAGE' im.meta.subarray.name = 'MASK1550' im.meta.subarray.xstart = 1 im.meta.subarray.xsize = xsize im.meta.subarray.ystart = 467 im.meta.subarray.ysize = ysize # create full size mask model dq, dq_def = make_maskmodel(fullysize, fullxsize) # place dq flags in dq array that would be in subarray # MASK1550 file has colstart=1, rowstart=467 dq[542, 100] = 2 dq[550, 100] = 1 dq[580, 80] = 4 # write mask model ref_data = MaskModel(dq=dq, dq_def=dq_def) ref_data.meta.instrument.name = 'MIRI' ref_data.meta.subarray.xstart = 1 ref_data.meta.subarray.xsize = fullxsize ref_data.meta.subarray.ystart = 1 ref_data.meta.subarray.ysize = fullysize # Filter out validation warnings from ref_data warnings.filterwarnings("ignore", category=ValidationWarning) # run correction step outfile = do_dqinit(im, ref_data) # read dq array outpixdq = outfile.pixeldq # check for dq flag in pixeldq of subarray image assert(outpixdq[76, 100] == 1024) assert(outpixdq[84, 100] == 1) assert(outpixdq[114, 80] == 2048) # check that pixel was flagged 'NO_SAT_CHECK'