[docs]defget_persistent_rfi(telescope:str="Parkes")->pd.DataFrame:"""Read persistent RFI file Returns: pd.Dataframe: Persistent RFI data. """withresources.as_file(resources.files("sdhdf.data.rfi"))asrfi_dir:rfi_file=rfi_dir/f"{telescope.lower()}_rfi.csv"ifnotrfi_file.exists():msg=(f"Persistent RFI file for {telescope} not found at '{rfi_file.absolute()}'.")raiseNotImplementedError(msg)returnpd.read_csv(rfi_file,sep=",",# skip_blank_lines=True,comment="#",names=["type","observatory label","receiver label","freq0 MHz","freq1 MHz","MJD0","MJD1","text string for label",],)
[docs]defbox_filter(spectrum:np.ndarray|DataArray,sigma=3,n_windows=100):""" Filter a spectrum using a box filter. """# Divide spectrum into windowsspectrum_squeezed=spectrum.squeeze()window_size=len(spectrum_squeezed)//n_windowsdat_filt=np.zeros_like(spectrum_squeezed).astype(bool)# Iterate through windowsforiinrange(n_windows):_dat=spectrum_squeezed[i*window_size:window_size+i*window_size]withwarnings.catch_warnings():warnings.simplefilter("ignore")# Use sigma clipping to remove outliers_dat_filt=sigma_clip(_dat,sigma=sigma,maxiters=None,stdfunc=mad_std,masked=True)dat_filt[i*window_size:window_size+i*window_size]=_dat_filt.maskdat_filt=dat_filt.reshape(spectrum.shape)ifisinstance(spectrum,DataArray):returnDataArray(dat_filt,dims=spectrum.dims,coords=spectrum.coords)returndat_filt