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
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
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
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
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
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
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()
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