def tst_holy(name, spec_file, lines, wv_cen, disp, score, fidx, test='semi_brute', debug=False): # Favored parameters (should match those in the defaults) siglev=20. #min_ampl=1000. min_ampl=200. min_match = 10 # Load spectrum exten = spec_file.split('.')[-1] if exten == 'json': with open(test_arc_path+spec_file,'r') as f: pypit_fit = json.load(f) # Allow for new PYPIT output if '0' in pypit_fit.keys(): pypit_fit = pypit_fit['0'] # Continue spec = np.array(pypit_fit['spec']) elif exten == 'hdf5': hdf = h5py.File(test_arc_path+spec_file,'r') spec = hdf['arcs/{:d}/spec'.format(fidx)].value elif exten == 'ascii': tbl = Table.read(test_arc_path+spec_file, format='ascii') spec = tbl['flux'].data else: pdb.set_trace() # Run outroot = outdir+name #if spec_file == 'deimos_830G_r_PYPIT.json': # debug=True if test == 'semi_brute': best_dict, final_fit = grail.semi_brute(spec, lines, wv_cen, disp, debug=debug, min_ampl=min_ampl, min_nmatch=min_match, outroot=outroot) elif test == 'general': best_dict, final_fit = grail.general(spec, lines, debug=debug, min_ampl=min_ampl, outroot=outroot) else: pdb.set_trace() # Score grade = 'PASSED' if final_fit['rms'] > score['rms']: grade = 'FAILED' warnings.warn("Solution for {:s} failed RMS!!".format(name)) if len(final_fit['xfit']) < score['nxfit']: grade = 'FAILED' warnings.warn("Solution for {:s} failed N xfit!!".format(name)) if best_dict['nmatch'] < score['nmatch']: grade = 'FAILED' warnings.warn("Solution for {:s} failed N match!!".format(name)) # Warn return grade, best_dict, final_fit
def main(pargs=None): """ Run Parameters ---------- args Returns ------- """ import numpy as np from arclines import io as arcl_io from arclines.holy import utils as arch_utils from arclines.holy.grail import semi_brute from arclines.holy import patterns as arch_patt from arclines.holy import fitting as arch_fit if pargs.outroot is None: pargs.outroot = 'tmp_matches' # Defaults min_ampl = (pargs.min_ampl if (pargs.min_ampl is not None) else 100.) # Load spectrum spec = arcl_io.load_spectrum(pargs.spectrum) # Arc lines lines = pargs.lines.split(',') # Call brute semi_brute(spec, lines, pargs.wvcen, pargs.disp, min_ampl=min_ampl, debug=pargs.debug, outroot=pargs.outroot, do_fit=pargs.fit, verbose=True) if pargs.debug: pdb.set_trace()
def test_holy(name, spec_file, lines, wv_cen, disp, score, fidx): # Favored parameters (should match those in the defaults) siglev = 20. min_ampl = 1000. min_match = 10 # Load spectrum exten = spec_file.split('.')[-1] if exten == 'json': with open(test_arc_path + spec_file, 'r') as f: pypit_fit = json.load(f) spec = np.array(pypit_fit['spec']) elif exten == 'hdf5': hdf = h5py.File(test_arc_path + spec_file, 'r') spec = hdf['arcs/{:d}/spec'.format(fidx)].value else: pdb.set_trace() # Run outroot = outdir + name best_dict, final_fit = grail.semi_brute(spec, lines, wv_cen, disp, siglev=siglev, min_ampl=min_ampl, min_nmatch=10, outroot=outroot) # Score grade = 'PASSED' if final_fit['rms'] > score['rms']: grade = 'FAILED' warnings.warn("Solution for {:s} failed RMS!!".format(name)) if len(final_fit['xfit']) < score['nxfit']: grade = 'FAILED' warnings.warn("Solution for {:s} failed N xfit!!".format(name)) if best_dict['nmatch'] < score['nmatch']: grade = 'FAILED' warnings.warn("Solution for {:s} failed N match!!".format(name)) # Warn return grade, best_dict, final_fit
def calib_with_arclines(slf, det, get_poly=False, use_method="general"): """Simple calibration algorithm for longslit wavelengths Uses slf._arcparam to guide the analysis Parameters ---------- get_poly : bool, optional Pause to record the polynomial pix = b0 + b1*lambda + b2*lambda**2 Returns ------- final_fit : dict Dict of fit info """ from arclines.holy.grail import basic, semi_brute, general # Parameters (just for convenience) aparm = slf._arcparam[det - 1] # Extract the arc msgs.work("Detecting lines") tampl, tcent, twid, w, satsnd, spec = detect_lines(slf, det, slf._msarc[det - 1]) if use_method == "semi-brute": best_dict, final_fit = semi_brute(spec, aparm['lamps'], aparm['wv_cen'], aparm['disp'], fit_parm=aparm, min_ampl=aparm['min_ampl']) elif use_method == "basic": stuff = basic(spec, aparm['lamps'], aparm['wv_cen'], aparm['disp']) status, ngd_match, match_idx, scores, final_fit = stuff else: # Now preferred best_dict, final_fit = general(spec, aparm['lamps'], fit_parm=aparm, min_ampl=aparm['min_ampl']) arqa.arc_fit_qa(slf, final_fit) # return final_fit
def main(pargs=None): """ Run Parameters ---------- args Returns ------- """ import numpy as np from matplotlib import pyplot as plt from linetools import utils as ltu from arclines import io as arcl_io from arclines.holy import utils as arch_utils from arclines.holy.grail import general, semi_brute from arclines.holy import patterns as arch_patt from arclines.holy import fitting as arch_fit if pargs.outroot is None: pargs.outroot = 'tmp_matches' # Defaults # Load spectrum spec = arcl_io.load_spectrum(pargs.spectrum) if pargs.show_spec: plt.clf() ax = plt.gca() ax.plot(spec) plt.show() # Arc lines lines = pargs.lines.split(',') # Call brute if pargs.brute: best_dict, final_fit = semi_brute(spec, lines, pargs.wvcen, pargs.disp, min_ampl=pargs.min_ampl, debug=pargs.debug, outroot=pargs.outroot, do_fit=pargs.fit, verbose=True) #best_dict, final_fit = grail.semi_brute(spec, lines, wv_cen, disp, siglev=siglev, # min_ampl=min_ampl, min_nmatch=min_match, outroot=outroot) else: best_dict, final_fit = general(spec, lines, do_fit=pargs.fit, verbose=True, debug=pargs.debug, min_ampl=pargs.min_ampl, outroot=pargs.outroot) if pargs.debug: pdb.set_trace() if pargs.fit: ltu.savejson(pargs.outroot + '_fit.json', ltu.jsonify(final_fit), easy_to_read=True, overwrite=True)