def test_wavelengths(self): if self.data_unavailable: self.skipTest("Failed to download test data.") # Read flat flat_hdu = fits.open(self.testflat) header = flat_hdu[0].header flat = flat_hdu[0].data ny = flat.shape[0] # Find fibers (necessary) xpk, ypos, cut = desiboot.find_fiber_peaks(flat) # Trace xset, xerr = desiboot.trace_crude_init(flat, xpk, ypos) xfit, fdicts = desiboot.fit_traces(xset, xerr) # Test fiber_gauss_old for coverage gauss = desiboot.fiber_gauss_old(flat, xfit, xerr) # Gaussian gauss = desiboot.fiber_gauss(flat, xfit, xerr) # Read arc arc_hdu = fits.open(self.testarc) arc = arc_hdu[0].data arc_ivar = np.ones(arc.shape) # Extract arc spectra (one per fiber) all_spec = desiboot.extract_sngfibers_gaussianpsf(arc, arc_ivar, xfit, gauss) # Line list camera = header['CAMERA'] llist = desiboot.load_arcline_list(camera) dlamb, gd_lines = desiboot.load_gdarc_lines(camera,llist) # all_wv_soln = [] for ii in range(1): spec = all_spec[:,ii] # Find Lines pixpk, flux = desiboot.find_arc_lines(spec) id_dict = {"pixpk":pixpk,"flux":flux} # Match a set of 5 gd_lines to detected lines desiboot.id_arc_lines_using_triplets(id_dict,gd_lines,dlamb) # Now the rest desiboot.id_remainder(id_dict, llist, deg=3) # Final fit wave vs. pix too final_fit, mask = dufits.iter_fit(np.array(id_dict['id_wave']), np.array(id_dict['id_pix']), 'polynomial', 3, xmin=0., xmax=1.) rms = np.sqrt(np.mean((dufits.func_val( np.array(id_dict['id_wave'])[mask==0], final_fit)- np.array(id_dict['id_pix'])[mask==0])**2)) final_fit_pix,mask2 = dufits.iter_fit(np.array(id_dict['id_pix']), np.array(id_dict['id_wave']), 'legendre',4, niter=5) # Save id_dict['final_fit'] = final_fit id_dict['rms'] = rms id_dict['final_fit_pix'] = final_fit_pix id_dict['wave_min'] = dufits.func_val(0, final_fit_pix) id_dict['wave_max'] = dufits.func_val(ny-1, final_fit_pix) id_dict['mask'] = mask all_wv_soln.append(id_dict) self.assertLess(all_wv_soln[0]['rms'], 0.25)
def test_wavelengths(self): if self.data_unavailable: self.skipTest("Failed to download test data.") # Read flat flat_hdu = fits.open(self.testflat) header = flat_hdu[0].header flat = flat_hdu[0].data ny = flat.shape[0] # Find fibers (necessary) xpk, ypos, cut = desiboot.find_fiber_peaks(flat) # Trace xset, xerr = desiboot.trace_crude_init(flat, xpk, ypos) xfit, fdicts = desiboot.fit_traces(xset, xerr) # Test fiber_gauss_old for coverage gauss = desiboot.fiber_gauss_old(flat, xfit, xerr) # Gaussian gauss = desiboot.fiber_gauss(flat, xfit, xerr) # Read arc arc_hdu = fits.open(self.testarc) arc = arc_hdu[0].data arc_ivar = np.ones(arc.shape) # Extract arc spectra (one per fiber) all_spec = desiboot.extract_sngfibers_gaussianpsf( arc, arc_ivar, xfit, gauss) # Line list camera = header['CAMERA'] llist = desiboot.load_arcline_list(camera) dlamb, gd_lines = desiboot.load_gdarc_lines(camera, llist) # all_wv_soln = [] for ii in range(1): spec = all_spec[:, ii] # Find Lines pixpk, flux = desiboot.find_arc_lines(spec) id_dict = {"pixpk": pixpk, "flux": flux} # Match a set of 5 gd_lines to detected lines desiboot.id_arc_lines_using_triplets(id_dict, gd_lines, dlamb) # Now the rest desiboot.id_remainder(id_dict, llist, deg=3) # Final fit wave vs. pix too final_fit, mask = dufits.iter_fit(np.array(id_dict['id_wave']), np.array(id_dict['id_pix']), 'polynomial', 3, xmin=0., xmax=1.) rms = np.sqrt( np.mean((dufits.func_val( np.array(id_dict['id_wave'])[mask == 0], final_fit) - np.array(id_dict['id_pix'])[mask == 0])**2)) final_fit_pix, mask2 = dufits.iter_fit(np.array(id_dict['id_pix']), np.array( id_dict['id_wave']), 'legendre', 4, niter=5) # Save id_dict['final_fit'] = final_fit id_dict['rms'] = rms id_dict['final_fit_pix'] = final_fit_pix id_dict['wave_min'] = dufits.func_val(0, final_fit_pix) id_dict['wave_max'] = dufits.func_val(ny - 1, final_fit_pix) id_dict['mask'] = mask all_wv_soln.append(id_dict) self.assertLess(all_wv_soln[0]['rms'], 0.25)