def process_vis(self, vis_range=(390, 720), min_scan=None, max_scan=None, sigma=2.3, para_angle=45): data_file = self.file wls = self.vis_wls() t = data_file['t'] d = -data_file['data_Stresing CCD'][min_scan:max_scan, ...] if 'rot' in data_file: rot = data_file['rot'][min_scan:max_scan] para_idx = (abs(np.round(rot) - para_angle) < 3) else: n_ir_cwl = data_file['wl_Remote IR 32x2'].shape[0] para_idx = np.repeat(np.array([False, True], dtype='bool'), n_ir_cwl) dpm = sigma_clip(d[para_idx, ...], axis=0, sigma=sigma, max_iter=10) dsm = sigma_clip(d[~para_idx, ...], axis=0, sigma=sigma, max_iter=10) dp = dpm.mean(0) dps = dpm.std(0) ds = dsm.mean(0) dss = dsm.std(0) para = TimeResSpec(wls, t, dp[0, :, 0, ...], freq_unit='nm', disp_freq_unit='nm') perp = TimeResSpec(wls, t, ds[0, :, 0, ...], freq_unit='nm', disp_freq_unit='nm') pol = PolTRSpec(para, perp) pol = pol.cut_freq(*vis_range, invert_sel=True) return pol.para, pol.perp, pol
def test_pol_tr(): ds = TimeResSpec(wl, t, data) ds2 = TimeResSpec(wl, t, data) ps = PolTRSpec(para=ds, perp=ds2) out = ps.bin_freqs(10) assert (out.para.wavenumbers.size == 10) assert (out.perp.wavenumbers.size == 10) assert_almost_equal(out.perp.data, out.para.data) ps.subtract_background() ps.mask_freqs([(400, 550)]) assert (ps.para.data.mask[1, ps.para.wl_idx(520)]) out = ps.cut_freq(400, 550) assert (np.all(out.para.wavelengths >= 550)) assert (np.all(out.perp.wavelengths >= 550)) ps.bin_times(6) ps.scale_and_shift(1, 0.5) ps.copy()