Source code for setigen.sample_from_obs

import numpy as np
from astropy.stats import sigma_clip

from . import fil_utils
from . import split_utils


[docs]def sample_gaussian_params(x_mean_array, x_std_array, x_min_array=None): """ Sample Gaussian parameters (mean, std, min) from provided arrays. Typical usage would be for select Gaussian noise properties for injection into data frames. Parameters ---------- x_mean_array : ndarray Array of potential means x_std_array : ndarray Array of potential standard deviations x_min_array : ndarray, optional Array of potential minimum values Returns ------- x_mean Selected mean of distribution x_std Selected standard deviation of distribution x_min If x_min_array provided, selected minimum of distribution """ x_mean = np.random.choice(x_mean_array) x_std = np.random.choice(x_std_array) # Somewhat arbitrary decision to ensure that the mean is at least the # standard deviation x_mean = np.maximum(x_mean, x_std) if x_min_array is not None: x_min = np.random.choice(x_min_array) return x_mean, x_std, x_min return x_mean, x_std
[docs]def get_parameter_distributions(fil_fn, f_window, f_shift=None, exclude=0): """ Calculate parameter distributions for the mean, standard deviation, and minimum of split filterbank data from real observations. Parameters ---------- fil_fn : str Filterbank filename with .fil extension f_window : int Number of frequency samples per new filterbank file f_shift : int, optional Number of samples to shift when splitting filterbank. If None, defaults to `f_shift=f_window` so that there is no overlap between new filterbank files Returns: -------- x_mean_array Distribution of means calculated from observations. x_std_array Distribution of standard deviations calculated from observations. x_min_array Distribution of minimums calculated from observations. """ split_generator = split_utils.split_fil_generator(fil_fn, f_window, f_shift=f_shift) x_mean_array = [] x_std_array = [] x_min_array = [] for split_fil in split_generator: clipped_data = sigma_clip(fil_utils.get_data(split_fil), sigma=3, maxiters=5, masked=False) x_mean_array.append(np.mean(clipped_data)) x_std_array.append(np.std(clipped_data)) x_min_array.append(np.min(clipped_data)) x_mean_array = np.array(x_mean_array) x_std_array = np.array(x_std_array) x_min_array = np.array(x_min_array) return (x_mean_array, x_std_array, x_min_array)