示例#1
0
    def get_match_criteria(self):
        """Set the general matching criteria for GNIRS. Copied from NIRES"""
        match_criteria = {}
        for key in framematch.FrameTypeBitMask().keys():
            match_criteria[key] = {}

        match_criteria['standard']['match'] = {}
        #        match_criteria['standard']['match']['naxis0'] = '=0'
        #        match_criteria['standard']['match']['naxis1'] = '=0'

        match_criteria['bias']['match'] = {}
        #        match_criteria['bias']['match']['naxis0'] = '=0'
        #        match_criteria['bias']['match']['naxis1'] = '=0'

        match_criteria['pixelflat']['match'] = {}
        #        match_criteria['pixelflat']['match']['naxis0'] = '=0'
        #        match_criteria['pixelflat']['match']['naxis1'] = '=0'

        match_criteria['trace']['match'] = {}
        #        match_criteria['trace']['match']['naxis0'] = '=0'
        #        match_criteria['trace']['match']['naxis1'] = '=0'

        match_criteria['arc']['match'] = {}
        #        match_criteria['arc']['match']['naxis0'] = '=0'
        #        match_criteria['arc']['match']['naxis1'] = '=0'

        return match_criteria
示例#2
0
    def get_match_criteria(self):
        match_criteria = {}
        for key in framematch.FrameTypeBitMask().keys():
            match_criteria[key] = {}
        #
        match_criteria['standard']['match'] = {}
        match_criteria['standard']['match']['naxis0'] = '=0'
        match_criteria['standard']['match']['naxis1'] = '=0'
        # Bias
        match_criteria['bias']['match'] = {}
        match_criteria['bias']['match']['naxis0'] = '=0'
        match_criteria['bias']['match']['naxis1'] = '=0'
        # Pixelflat
        match_criteria['pixelflat']['match']['naxis0'] = '=0'
        match_criteria['pixelflat']['match']['naxis1'] = '=0'
        match_criteria['pixelflat']['match']['dispname'] = ''
        # Traceflat
        match_criteria['trace']['match'] = match_criteria['pixelflat'][
            'match'].copy()
        # Arc
        match_criteria['arc']['match'] = match_criteria['pixelflat'][
            'match'].copy()

        # Return
        return match_criteria
示例#3
0
def build_group_dict(fitstbl, setupIDs, all_sci_idx, all_sci_ID):
    """
    Build a dictionary with the list of exposures of each type for a
    given instrumental setup.

    Args:
        fitstbl (:class:`pypeit.metadata.PypeItMetaData`):
            The metadata table for the fits files to reduce.
        setupIDs (:obj:`list`):
            The list of setups.
        all_sci_idx (:obj:`list`):
            The indices of the science frames in the data table.
            TODO: Why is this needed?
        all_sci_ID (:obj:`list`):
            The ID number assigned to each science frame.

    Returns:
        dict: A dictionary with the list of file names associated with
        each instrument configuration.  It also provides the list of
        science and standard star targets. TODO: How are the latter
        used, if at all?
    """
    type_keys = framematch.FrameTypeBitMask().keys() + ['None']

    group_dict = {}
    for sc,setupID in enumerate(setupIDs):
        #scidx = sciexp[sc]._idx_sci[0]
        scidx = all_sci_idx[sc]
        sci_ID = all_sci_ID[sc]
        # Set group_key
        config_key = setupID[0]
        # Plan init
        if config_key not in group_dict.keys():
            group_dict[config_key] = {}
            for key in type_keys:
#                if key not in ['None', 'dark']:
#                    group_dict[config_key][key] = []
                group_dict[config_key][key] = []
                group_dict[config_key]['sciobj'] = []
                group_dict[config_key]['stdobj'] = []
        # Fill group_dict too
        for key in type_keys:
#            if key in ['None', 'dark']:
#                continue
            indices = np.where(fitstbl.find_frames(key))[0] if key in ['None', 'dark'] \
                        else np.where(fitstbl.find_frames(key, sci_ID=sci_ID))[0]
            for idx in indices:
                # Only add if new
                if fitstbl['filename'][idx] not in group_dict[config_key][key]:
                    group_dict[config_key][key].append(fitstbl['filename'][idx])
                    # TODO: How is this used?
                    if key == 'standard' and 'target' in fitstbl.keys():  # Add target name
                        group_dict[config_key]['stdobj'].append(fitstbl['target'][idx])
                # TODO: How is this used?
                if key == 'science' and 'target' in fitstbl.keys():  # Add target name
                    group_dict[config_key]['sciobj'].append(fitstbl['target'][scidx])

    return group_dict
示例#4
0
 def get_match_criteria(self):
     match_criteria = {}
     for key in framematch.FrameTypeBitMask().keys():
         match_criteria[key] = {}
     # Standard
     # Can be over-ruled by flux calibrate = False
     match_criteria['standard']['match'] = {}
     match_criteria['standard']['match']['decker'] = ''
     match_criteria['standard']['match']['binning'] = ''
     match_criteria['standard']['match']['filter1'] = ''
     # Bias
     match_criteria['bias']['match'] = {}
     match_criteria['bias']['match']['binning'] = ''
     # Pixelflat
     match_criteria['pixelflat']['match'] = match_criteria['standard'][
         'match'].copy()
     # Traceflat
     match_criteria['trace']['match'] = match_criteria['standard'][
         'match'].copy()
     # Arc
     match_criteria['arc']['match'] = match_criteria['standard'][
         'match'].copy()
     # Return
     return match_criteria
示例#5
0
def main(args):

    import os
    import sys
    import numpy as np

    from IPython import embed

    from pypeit import pypeit
    from pypeit import pypeitsetup
    from pypeit.core import framematch
    from pypeit import msgs


    # Setup
    data_files = [os.path.join(args.full_rawpath, args.fileA),
                  os.path.join(args.full_rawpath,args.fileB)]
    ps = pypeitsetup.PypeItSetup(data_files, path='./', spectrograph_name='keck_nires')
    ps.build_fitstbl()
    # TODO -- Get the type_bits from  'science'
    bm = framematch.FrameTypeBitMask()
    file_bits = np.zeros(2, dtype=bm.minimum_dtype())
    file_bits[0] = bm.turn_on(file_bits[0], ['arc', 'science', 'tilt'])
    file_bits[1] = bm.turn_on(file_bits[0], ['arc', 'science', 'tilt'])

    ps.fitstbl.set_frame_types(file_bits)
    ps.fitstbl.set_combination_groups()
    # Extras
    ps.fitstbl['setup'] = 'A'
    # A-B
    ps.fitstbl['bkg_id'] = [2,1]

    # Calibrations
    master_dir = os.getenv('NIRES_MASTERS')
    if master_dir is None:
        msgs.error('You need to set an Environmental variable NIRES_MASTERS that points at the '
                   'Master Calibs')

    # Config the run
    cfg_lines = ['[rdx]']
    cfg_lines += ['    spectrograph = {0}'.format('keck_nires')]
    cfg_lines += ['    redux_path = {0}'.format(os.path.join(os.getcwd(),'keck_nires_A'))]
    # Calibrations
    cfg_lines += ['[baseprocess]']
    cfg_lines += ['    use_biasimage = False']
    cfg_lines += ['    use_overscan = False']
    cfg_lines += ['    use_pixelflat = False']
    cfg_lines += ['[calibrations]']
    cfg_lines += ['    master_dir = {0}'.format(master_dir)]
    cfg_lines += ['    raise_chk_error = False']
    cfg_lines += ['[scienceframe]']
    cfg_lines += ['    [[process]]']
    cfg_lines += ['        mask_cr = False']
    cfg_lines += ['[reduce]']
    cfg_lines += ['    [[extraction]]']
    cfg_lines += ['        skip_optimal = True']
    if args.box_radius is not None: # Boxcar radius
        cfg_lines += ['        boxcar_radius = {0}'.format(args.box_radius)]
    cfg_lines += ['    [[findobj]]']
    cfg_lines += ['        skip_second_find = True']

    # Write
    ofiles = ps.fitstbl.write_pypeit(configs='A', write_bkg_pairs=True, cfg_lines=cfg_lines)
    if len(ofiles) > 1:
        msgs.error("Bad things happened..")

    # Instantiate the main pipeline reduction object
    pypeIt = pypeit.PypeIt(ofiles[0], verbosity=2,
                           reuse_masters=True, overwrite=True,
                           logname='nires_proc_AB.log', show=False)
    # Run
    pypeIt.reduce_all()
    msgs.info('Data reduction complete')
    # QA HTML
    msgs.info('Generating QA HTML')
    pypeIt.build_qa()

    return 0
示例#6
0
def main(pargs):

    import os
    import numpy as np

    from IPython import embed

    from pypeit import pypeit
    from pypeit import pypeitsetup
    from pypeit.core import framematch

    spec = pargs.spectrograph

    # Config the run
    cfg_lines = ['[rdx]']
    cfg_lines += ['    spectrograph = {0}'.format(spec)]
    cfg_lines += [
        '    redux_path = {0}_A'.format(os.path.join(os.getcwd(), spec))
    ]
    cfg_lines += ['    detnum = {0}'.format(pargs.det)]
    if pargs.ignore_headers:
        cfg_lines += ['    ignore_bad_headers = True']
    cfg_lines += ['[scienceframe]']
    cfg_lines += ['    [[process]]']
    cfg_lines += ['          cr_reject = False']
    if pargs.user_pixflat is not None:
        cfg_lines += ['[calibrations]']
        cfg_lines += ['    [[flatfield]]']
        cfg_lines += ['        frame = {0}'.format(pargs.user_pixflat)]
    cfg_lines += ['[reduce]']
    cfg_lines += ['    [[extraction]]']
    cfg_lines += ['         skip_optimal = True']
    if pargs.box_radius is not None:  # Boxcar radius
        cfg_lines += ['    boxcar_radius = {0}'.format(pargs.box_radius)]
    cfg_lines += ['    [[findobj]]']
    cfg_lines += ['         skip_second_find = True']

    # Data files
    data_files = [
        os.path.join(pargs.full_rawpath, pargs.arc),
        os.path.join(pargs.full_rawpath, pargs.flat),
        os.path.join(pargs.full_rawpath, pargs.science)
    ]

    # Setup
    ps = pypeitsetup.PypeItSetup(data_files,
                                 path='./',
                                 spectrograph_name=spec,
                                 cfg_lines=cfg_lines)
    ps.build_fitstbl()
    # TODO -- Get the type_bits from  'science'
    bm = framematch.FrameTypeBitMask()
    file_bits = np.zeros(3, dtype=bm.minimum_dtype())
    file_bits[0] = bm.turn_on(file_bits[0], ['arc', 'tilt'])
    file_bits[1] = bm.turn_on(
        file_bits[1],
        ['pixelflat', 'trace'] if pargs.user_pixflat is None else 'trace')
    file_bits[2] = bm.turn_on(file_bits[2], 'science')

    # PypeItSetup sorts according to MJD
    #   Deal with this
    asrt = []
    for ifile in data_files:
        bfile = os.path.basename(ifile)
        idx = ps.fitstbl['filename'].data.tolist().index(bfile)
        asrt.append(idx)
    asrt = np.array(asrt)

    # Set bits
    ps.fitstbl.set_frame_types(file_bits[asrt])
    ps.fitstbl.set_combination_groups()
    # Extras
    ps.fitstbl['setup'] = 'A'

    # Write
    ofiles = ps.fitstbl.write_pypeit('',
                                     configs=['A'],
                                     write_bkg_pairs=True,
                                     cfg_lines=cfg_lines)
    if len(ofiles) > 1:
        msgs.error("Bad things happened..")

    # Instantiate the main pipeline reduction object
    pypeIt = pypeit.PypeIt(ofiles[0],
                           verbosity=2,
                           reuse_masters=True,
                           overwrite=True,
                           logname='mos.log',
                           show=False)
    # Run
    pypeIt.reduce_all()
    msgs.info('Data reduction complete')
    # QA HTML
    msgs.info('Generating QA HTML')
    pypeIt.build_qa()

    return 0
示例#7
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()
示例#8
0
def main(pargs):

    import os
    import numpy as np

    from IPython import embed

    from pypeit import pypeit
    from pypeit import pypeitsetup
    from pypeit.core import framematch

    spec = 'keck_deimos'

    # Setup
    data_files = [
        os.path.join(pargs.full_rawpath, pargs.arc),
        os.path.join(pargs.full_rawpath, pargs.flat),
        os.path.join(pargs.full_rawpath, pargs.science)
    ]
    ps = pypeitsetup.PypeItSetup(data_files, path='./', spectrograph_name=spec)
    ps.build_fitstbl()
    # TODO -- Get the type_bits from  'science'
    bm = framematch.FrameTypeBitMask()
    bits = [
        bm.bits[iftype]
        for iftype in ['arc', 'pixelflat', 'trace', 'science', 'tilt']
    ]
    ps.fitstbl.set_frame_types(
        np.array(
            [2**bits[0] + 2**bits[4], 2**bits[1] + 2**bits[2],
             2**bits[3]]))  # 1=arc, 16=pixelflat, 32=science, trace=128
    ps.fitstbl.set_combination_groups()
    # Extras
    ps.fitstbl['setup'] = 'A'

    # Config the run
    rdx_path = '{0}_A'.format(os.path.join(os.getcwd(), spec))
    cfg_lines = ['[rdx]']
    cfg_lines += ['    spectrograph = {0}'.format(spec)]
    cfg_lines += ['    redux_path = {0}'.format(rdx_path)]
    cfg_lines += ['    detnum = {0}'.format(pargs.det)]
    cfg_lines += ['[calibrations]']
    cfg_lines += ['    [[scienceframe]]']
    cfg_lines += ['        [[process]]']
    cfg_lines += ['              cr_reject = False']
    cfg_lines += ['[scienceimage]']
    cfg_lines += ['    boxcar_only = True']
    cfg_lines += ['    skip_second_find = True']
    # Boxcar radius
    if pargs.box_radius is not None:
        cfg_lines += ['    boxcar_radius = {0}'.format(pargs.box_radius)]

    # Write
    ofiles = ps.fitstbl.write_pypeit('',
                                     configs=['A'],
                                     write_bkg_pairs=True,
                                     cfg_lines=cfg_lines)
    if len(ofiles) > 1:
        msgs.error("Bad things happened..")

    # Instantiate the main pipeline reduction object
    pypeIt = pypeit.PypeIt(ofiles[0],
                           verbosity=2,
                           reuse_masters=True,
                           overwrite=True,
                           logname='deimos.log',
                           show=False)
    # Run
    pypeIt.reduce_all()
    msgs.info('Data reduction complete')
    # QA HTML
    msgs.info('Generating QA HTML')
    pypeIt.build_qa()

    return 0