示例#1
0
def test_lris_red_multi():
    file_list = glob.glob(
        os.path.join(os.environ['PYPEIT_DEV'], 'RAW_DATA', 'keck_lris_red',
                     'multi*', '*.fits*'))
    cfg_lines = ['[rdx]', 'spectrograph = keck_lris_red']
    ps = PypeItSetup(file_list, cfg_lines=cfg_lines)
    ps.build_fitstbl()
    ps.get_frame_types(flag_unknown=True)
    cfgs = ps.fitstbl.unique_configurations(ignore_frames=['bias', 'dark'])
    ps.fitstbl.set_configurations(cfgs, ignore_frames=['bias', 'dark'])
    ps.fitstbl.set_calibration_groups(global_frames=['bias', 'dark'])
示例#2
0
def test_lris_red_multi_400():
    file_list = glob.glob(
        os.path.join(os.environ['PYPEIT_DEV'], 'RAW_DATA', 'keck_lris_red',
                     'multi_400_8500_d560', '*.fits.gz'))
    cfg_lines = ['[rdx]', 'spectrograph = keck_lris_red']
    ps = PypeItSetup(file_list, cfg_lines=cfg_lines)
    ps.build_fitstbl()
    ps.get_frame_types(flag_unknown=True)
    cfgs = ps.fitstbl.unique_configurations()
    ps.fitstbl.set_configurations(cfgs)
    ps.fitstbl.set_calibration_groups()  #global_frames=['bias', 'dark'])
    # Test
    assert np.all(ps.fitstbl['setup'] == 'A')
示例#3
0
def test_lris_red_multi_calib():
    file_list = glob.glob(
        os.path.join(os.environ['PYPEIT_DEV'], 'RAW_DATA', 'keck_lris_red',
                     'multi_400_8500_d560', '*.fits.gz'))
    cfg_lines = ['[rdx]', 'spectrograph = keck_lris_red']
    ps = PypeItSetup(file_list, cfg_lines=cfg_lines)
    ps.build_fitstbl()
    ps.get_frame_types(flag_unknown=True)
    cfgs = ps.fitstbl.unique_configurations()
    ps.fitstbl.set_configurations(cfgs)
    ps.fitstbl.set_calibration_groups()  #global_frames=['bias', 'dark'])

    cfile = data_path('test.calib')
    ps.fitstbl.write_calib(cfile)
    with open(cfile, 'r') as f:
        calib = yaml.load(f, Loader=yaml.FullLoader)

    assert np.array_equal(list(calib['A'].keys()), ['--', 1]), \
            'Calibrations dictionary read incorrectly.'

    os.remove(cfile)
示例#4
0
def main(args: argparse.Namespace):
    t = time.perf_counter()
    # need an arc frame and a flat frame
    root = args.fname.rstrip('0123456789.fits')
    paths = glob.glob(f'{root}*.fits')

    spectrograph = 'p200_dbsp_red' if 'red' in os.path.basename(
        args.fname) else 'p200_dbsp_blue'
    arm = spectrograph.split('_')[-1]

    CFG_LINES = get_cfg_lines(spectrograph)

    flatimg = ""
    arcimg = ""
    sciimg = args.fname

    calib_only = not os.path.isfile(sciimg)

    if calib_only:

        for path in paths:
            with fits.open(path) as hdul:
                if not flatimg:
                    if hdul[0].header['OBJECT'] == 'flat' or hdul[0].header[
                            'IMGTYPE'] == 'flat':
                        flatimg = path
                if not arcimg:
                    if hdul[0].header['OBJECT'] == 'arcs' or hdul[0].header[
                            'IMGTYPE'] == 'cal':
                        arcimg = path
                if flatimg and arcimg:
                    break

        if not (flatimg and arcimg):
            raise Exception(
                f"Could not find a flat and an arc frame in the same directory as {root}!"
            )
        files = [arcimg, flatimg]
    else:
        files = [sciimg]

    ps = PypeItSetup(files,
                     path="./",
                     spectrograph_name=spectrograph,
                     cfg_lines=CFG_LINES)
    ps.build_fitstbl()

    bm = framematch.FrameTypeBitMask()
    file_bits = np.zeros(len(files), dtype=bm.minimum_dtype())
    if calib_only:
        file_bits[0] = bm.turn_on(file_bits[0], ['arc', 'tilt'])
        file_bits[1] = bm.turn_on(file_bits[1],
                                  ['pixelflat', 'trace', 'illumflat'])
    else:
        file_bits[0] = bm.turn_on(file_bits[0], 'science')

    asrt = np.array([
        ps.fitstbl['filename'].data.tolist().index(os.path.basename(fname))
        for fname in files
    ])
    ps.fitstbl.set_frame_types(file_bits[asrt])
    ps.fitstbl.set_combination_groups()

    ps.fitstbl['setup'] = 'A'

    ofiles = ps.fitstbl.write_pypeit(configs='A', cfg_lines=CFG_LINES)

    pypeIt = pypeit.PypeIt(ofiles[0],
                           verbosity=0,
                           reuse_masters=True,
                           overwrite=True,
                           logname='dbsp_ql.log',
                           show=False,
                           calib_only=calib_only)
    if calib_only:
        pypeIt.calib_all()
    else:
        pypeIt.reduce_all()
    pypeIt.build_qa()

    output_spec2ds = list(filter(lambda f: os.path.isfile(os.path.join('Science', f)), [
            pypeIt.spec_output_file(i, True) \
            for i in range(len(pypeIt.fitstbl.table)) \
            if pypeIt.fitstbl.table[i]['frametype'] in ['science']
        ]))

    output_spec1ds = list(filter(lambda f: os.path.isfile(os.path.join('Science', f)), [
            pypeIt.spec_output_file(i) \
            for i in range(len(pypeIt.fitstbl.table)) \
            if pypeIt.fitstbl.table[i]['frametype'] in ['science']
        ]))

    if output_spec1ds and not calib_only:
        sensfiles = [
            resource_filename("dbsp_drp", f"data/sens_{arm}_archived.fits")
        ]
        FxCalib = fluxcalibrate.FluxCalibrate.get_instance(
            output_spec1ds, sensfiles, par=ps.par['fluxcalib'])

    print(f"Time elapsed: {time.perf_counter() - t}s.")

    if not calib_only and not args.no_show:
        p1 = Process(target=show_spec2d_helper, args=(output_spec2ds[0], ))
        p1.start()
        if output_spec1ds:
            with fits.open(output_spec1ds[0]) as hdul:
                specs = len(hdul) - 2
            parr = [None] * specs
            for i in range(specs):
                parr[i] = Process(target=show_spec1d_helper,
                                  args=(str(i), output_spec1ds[0]))
                parr[i].start()