def load_and_reduce(filename, add_noise=False, rms_noise=0.001, nsig=3): ''' Load the cube in and derive the property arrays. ''' if add_noise: if rms_noise is None: raise TypeError("Must specify value of rms noise.") cube, hdr = getdata(filename, header=True) from scipy.stats import norm cube += norm.rvs(0.0, rms_noise, cube.shape) sc = SpectralCube(data=cube, wcs=WCS(hdr)) mask = LazyMask(np.isfinite, sc) sc = sc.with_mask(mask) else: sc = filename reduc = Mask_and_Moments(sc, scale=rms_noise) reduc.make_mask(mask=reduc.cube > nsig * reduc.scale) reduc.make_moments() reduc.make_moment_errors() return reduc.to_dict()
def reduce_and_save(filename, add_noise=False, rms_noise=0.001, output_path="", cube_output=None, nsig=3, slicewise_noise=True): ''' Load the cube in and derive the property arrays. ''' if add_noise: if rms_noise is None: raise TypeError("Must specify value of rms noise.") cube, hdr = getdata(filename, header=True) # Optionally scale noise by 1/10th of the 98th percentile in the cube if rms_noise == 'scaled': rms_noise = 0.1*np.percentile(cube[np.isfinite(cube)], 98) from scipy.stats import norm if not slicewise_noise: cube += norm.rvs(0.0, rms_noise, cube.shape) else: spec_shape = cube.shape[0] slice_shape = cube.shape[1:] for i in range(spec_shape): cube[i, :, :] += norm.rvs(0.0, rms_noise, slice_shape) sc = SpectralCube(data=cube, wcs=WCS(hdr)) mask = LazyMask(np.isfinite, sc) sc = sc.with_mask(mask) else: sc = filename reduc = Mask_and_Moments(sc, scale=rms_noise) reduc.make_mask(mask=reduc.cube > nsig * reduc.scale) reduc.make_moments() reduc.make_moment_errors() # Remove .fits from filename save_name = filename.split("/")[-1][:-4] reduc.to_fits(output_path+save_name) # Save the noisy cube too if add_noise: if cube_output is None: reduc.cube.hdu.writeto(output_path+save_name) else: reduc.cube.hdu.writeto(cube_output+save_name)
def load_and_reduce(filename, add_noise=False, rms_noise=0.001, nsig=3, slicewise_noise=True): ''' Load the cube in and derive the property arrays. ''' if add_noise: if rms_noise is None: raise TypeError("Must specify value of rms noise.") cube, hdr = getdata(filename, header=True) # Optionally scale noise by 1/10th of the 98th percentile in the cube if rms_noise == 'scaled': rms_noise = 0.1 * np.percentile(cube[np.isfinite(cube)], 98) from scipy.stats import norm if not slicewise_noise: cube += norm.rvs(0.0, rms_noise, cube.shape) else: spec_shape = cube.shape[0] slice_shape = cube.shape[1:] for i in range(spec_shape): cube[i, :, :] += norm.rvs(0.0, rms_noise, slice_shape) sc = SpectralCube(data=cube, wcs=WCS(hdr)) mask = LazyMask(np.isfinite, sc) sc = sc.with_mask(mask) else: sc = filename reduc = Mask_and_Moments(sc, scale=rms_noise) reduc.make_mask(mask=reduc.cube > nsig * reduc.scale) reduc.make_moments() reduc.make_moment_errors() return reduc.to_dict()
def load_and_reduce(filename, add_noise=False, rms_noise=0.001, nsig=3, slicewise_noise=True): ''' Load the cube in and derive the property arrays. ''' if add_noise: if rms_noise is None: raise TypeError("Must specify value of rms noise.") cube, hdr = getdata(filename, header=True) # Optionally scale noise by 1/10th of the 98th percentile in the cube if rms_noise == 'scaled': rms_noise = 0.1*np.percentile(cube[np.isfinite(cube)], 98) from scipy.stats import norm if not slicewise_noise: cube += norm.rvs(0.0, rms_noise, cube.shape) else: spec_shape = cube.shape[0] slice_shape = cube.shape[1:] for i in range(spec_shape): cube[i, :, :] += norm.rvs(0.0, rms_noise, slice_shape) sc = SpectralCube(data=cube, wcs=WCS(hdr)) mask = LazyMask(np.isfinite, sc) sc = sc.with_mask(mask) else: sc = filename reduc = Mask_and_Moments(sc, scale=rms_noise) reduc.make_mask(mask=reduc.cube > nsig * reduc.scale) reduc.make_moments() reduc.make_moment_errors() return reduc.to_dict()
def reduce_and_save(filename, add_noise=False, regrid_linewidth=False, rms_noise=0.001 * u.K, output_path="", cube_output=None, nsig=3, slicewise_noise=True): ''' Load the cube in and derive the property arrays. ''' if add_noise or regrid_linewidth: sc = SpectralCube.read(filename) if add_noise: if rms_noise is None: raise TypeError("Must specify value of rms noise.") cube = sc.filled_data[:].value # Optionally scale noise by 1/10th of the 98th percentile in the # cube if rms_noise == 'scaled': rms_noise = 0.1 * \ np.percentile(cube[np.isfinite(cube)], 98) * sc.unit from scipy.stats import norm if not slicewise_noise: cube += norm.rvs(0.0, rms_noise.value, cube.shape) else: spec_shape = cube.shape[0] slice_shape = cube.shape[1:] for i in range(spec_shape): cube[i, :, :] += norm.rvs(0.0, rms_noise.value, slice_shape) sc = SpectralCube(data=cube * sc.unit, wcs=sc.wcs, meta={"BUNIT": "K"}) mask = LazyMask(np.isfinite, sc) sc = sc.with_mask(mask) if regrid_linewidth: # Normalize the cubes to have the same linewidth # channels_per_sigma=20 scales to the largest mean line width in # SimSuite8 (~800 km/s; Design 22). So effectively everything is # "smoothed" to have this line width # Intensities are normalized by their 95% value. sc = preprocessor(sc, min_intensity=nsig * rms_noise, norm_intensity=True, norm_percentile=95, channels_per_sigma=20) else: sc = filename # Run the same signal masking procedure that was used for the # COMPLETE cubes if add_noise: # The default settings were set based on these cubes sc = make_signal_mask(sc)[0] reduc = Mask_and_Moments(sc, scale=rms_noise) if not add_noise: reduc.make_mask(mask=reduc.cube > nsig * reduc.scale) reduc.make_moments() reduc.make_moment_errors() # Remove .fits from filename save_name = os.path.splitext(os.path.basename(filename))[0] reduc.to_fits(os.path.join(output_path, save_name)) # Save the noisy cube too if add_noise or regrid_linewidth: save_name += ".fits" if cube_output is None: sc.hdu.writeto(os.path.join(output_path, save_name)) else: sc.hdu.writeto(os.path.join(cube_output, save_name))
data1, hdr1 = fits.getdata(fits1, header=True) data2, hdr2 = fits.getdata(fits2, header=True) if add_noise: data1 += np.random.normal(0.0, 0.788 / 10, data1.shape) data2 += np.random.normal(0.0, 0.788 / 10, data2.shape) cube1 = SpectralCube(data=data1, wcs=WCS(hdr1)) cube1 = cube1.with_mask(LazyMask(np.isfinite, cube1)) cube2 = SpectralCube(data=data2, wcs=WCS(hdr2)) cube2 = cube2.with_mask(LazyMask(np.isfinite, cube2)) set1 = Mask_and_Moments(cube1) mask = cube1 > 3*set1.scale set1.make_mask(mask=mask) set1.make_moments() set1.make_moment_errors() dataset1 = set1.to_dict() set2 = Mask_and_Moments(cube2) mask = cube2 > 3*set2.scale set2.make_mask(mask=mask) set2.make_moments() set2.make_moment_errors() dataset2 = set2.to_dict() # Wavelet Transform from turbustat.statistics import Wavelet_Distance