def convert_2d_to_1d(pwrspec2d_product, logbins=True, bins=None, transfer=None): """if bins is not given, just use the x axis""" nxbins = len(pwrspec2d_product['bin_x_center']) bins_kx = np.zeros(nxbins + 1) bins_kx[0: -1] = pwrspec2d_product['bin_x_left'] bins_kx[-1] = pwrspec2d_product['bin_x_right'][-1] nybins = len(pwrspec2d_product['bin_y_center']) bins_ky = np.zeros(nybins + 1) bins_ky[0: -1] = pwrspec2d_product['bin_y_left'] bins_ky[-1] = pwrspec2d_product['bin_y_right'][-1] if bins is None: bins = bins_kx entry = {} (entry['counts_histo'], entry['binavg']) = \ convert_2d_to_1d_driver(pwrspec2d_product['binavg'], pwrspec2d_product['counts_histo'], pwrspec2d_product['bin_x_center'], pwrspec2d_product['bin_y_center'], bins, transfer=transfer) bin_left, bin_center, bin_right = binning.bin_edges(bins, log=logbins) entry['bin_left'] = bin_left entry['bin_center'] = bin_center entry['bin_right'] = bin_right return entry
def convert_2d_to_1d(pwrspec2d_product, logbins=True, bins=None, transfer=None): """if bins is not given, just use the x axis""" nxbins = len(pwrspec2d_product['bin_x_center']) bins_kx = np.zeros(nxbins + 1) bins_kx[0:-1] = pwrspec2d_product['bin_x_left'] bins_kx[-1] = pwrspec2d_product['bin_x_right'][-1] nybins = len(pwrspec2d_product['bin_y_center']) bins_ky = np.zeros(nybins + 1) bins_ky[0:-1] = pwrspec2d_product['bin_y_left'] bins_ky[-1] = pwrspec2d_product['bin_y_right'][-1] if bins is None: bins = bins_kx entry = {} (entry['counts_histo'], entry['binavg']) = \ convert_2d_to_1d_driver(pwrspec2d_product['binavg'], pwrspec2d_product['counts_histo'], pwrspec2d_product['bin_x_center'], pwrspec2d_product['bin_y_center'], bins, transfer=transfer) bin_left, bin_center, bin_right = binning.bin_edges(bins, log=logbins) entry['bin_left'] = bin_left entry['bin_center'] = bin_center entry['bin_right'] = bin_right return entry
def convert_2d_to_1d(self, logbins=True, bins=None, weights_2d=None): r"""bin the 2D powers onto 1D (the _from_2d variables) optionally, weights for each treatment class can be given """ bins_1d = np.zeros(self.num_k_1d + 1) bins_1d[0: -1] = self.k_1d["left"] bins_1d[-1] = self.k_1d["right"][-1] if bins is None: bins = bins_1d if weights_2d is not None: print "using 2d weights for 2d->1d" for treatment in self.treatment_cases: if weights_2d is not None: weights_2d_treat = weights_2d[treatment] else: weights_2d_treat = None for comb in self.comb_cases: pwrcase = "%s:%s" % (comb, treatment) (self.counts_1d_from_2d[pwrcase], \ self.gauss_errors_1d_from_2d[pwrcase], \ self.pwrspec_1d_from_2d[pwrcase]) = \ pe.convert_2d_to_1d_pwrspec( self.pwrspec_2d[pwrcase], self.counts_2d[pwrcase], self.kx_2d["center"], self.ky_2d["center"], bins, weights_2d=weights_2d_treat) bin_left, bin_center, bin_right = binning.bin_edges(bins, log=logbins) self.k_1d_from_2d["left"] = bin_left self.k_1d_from_2d["center"] = bin_center self.k_1d_from_2d["right"] = bin_right self.num_k_1d_from_2d = bin_center.shape[0]
def calculate_xspec(cube1, cube2, weight1, weight2, window="blackman", unitless=True, bins=None, truncate=False, nbins=40, logbins=True, return_3d=False): print "finding the signal power spectrum" pwrspec3d_signal = cross_power_est(cube1, cube2, weight1, weight2, window=window) radius_arr = binning.radius_array(pwrspec3d_signal) # find the k_perp by not including k_nu in the distance radius_arr_perp = binning.radius_array(pwrspec3d_signal, zero_axes=[0]) # find the k_perp by not including k_RA,Dec in the distance radius_arr_parallel = binning.radius_array(pwrspec3d_signal, zero_axes=[1, 2]) if bins is None: bins = binning.suggest_bins(pwrspec3d_signal, truncate=truncate, logbins=logbins, nbins=nbins, radius_arr=radius_arr) if unitless: print "making the power spectrum unitless" pwrspec3d_signal = make_unitless(pwrspec3d_signal, radius_arr=radius_arr) print "calculating the 2D histogram" # TODO: do better independent binning; for now: bins_x = copy.deepcopy(bins) bins_y = copy.deepcopy(bins) counts_histo_2d, binavg_2d = binning.bin_an_array_2d(pwrspec3d_signal, radius_arr_perp, radius_arr_parallel, bins_x, bins_y) print "calculating the 1D histogram" counts_histo, binavg = binning.bin_an_array(pwrspec3d_signal, bins, radius_arr=radius_arr) bin_left_x, bin_center_x, bin_right_x = binning.bin_edges(bins_x, log=logbins) bin_left_y, bin_center_y, bin_right_y = binning.bin_edges(bins_y, log=logbins) bin_left, bin_center, bin_right = binning.bin_edges(bins, log=logbins) pwrspec2d_product = {} pwrspec2d_product['bin_x_left'] = bin_left_x pwrspec2d_product['bin_x_center'] = bin_center_x pwrspec2d_product['bin_x_right'] = bin_right_x pwrspec2d_product['bin_y_left'] = bin_left_y pwrspec2d_product['bin_y_center'] = bin_center_y pwrspec2d_product['bin_y_right'] = bin_right_y pwrspec2d_product['counts_histo'] = counts_histo_2d pwrspec2d_product['binavg'] = binavg_2d pwrspec1d_product = {} pwrspec1d_product['bin_left'] = bin_left pwrspec1d_product['bin_center'] = bin_center pwrspec1d_product['bin_right'] = bin_right pwrspec1d_product['counts_histo'] = counts_histo pwrspec1d_product['binavg'] = binavg if not return_3d: return pwrspec2d_product, pwrspec1d_product else: return pwrspec3d_signal, pwrspec2d_product, pwrspec1d_product
def calculate_xspec(cube1, cube2, weight1, weight2, window="blackman", unitless=True, bins=None, truncate=False, nbins=40, logbins=True, return_3d=False): print "finding the signal power spectrum" pwrspec3d_signal = cross_power_est(cube1, cube2, weight1, weight2, window=window) radius_arr = binning.radius_array(pwrspec3d_signal) if bins is None: bins = binning.suggest_bins(pwrspec3d_signal, truncate=truncate, logbins=logbins, nbins=nbins, radius_arr=radius_arr) if unitless: print "making the power spectrum unitless" pwrspec3d_signal = make_unitless(pwrspec3d_signal, radius_arr=radius_arr) print "calculating the 1D histogram" counts_histo, binavg = binning.bin_an_array(pwrspec3d_signal, bins, radius_arr=radius_arr) del radius_arr gc.collect() print "calculating the 2D histogram" # find the k_perp by not including k_nu in the distance radius_arr_perp = binning.radius_array(pwrspec3d_signal, zero_axes=[0]) # find the k_perp by not including k_RA,Dec in the distance radius_arr_parallel = binning.radius_array(pwrspec3d_signal, zero_axes=[1, 2]) # TODO: do better independent binning; for now: bins_x = copy.deepcopy(bins) bins_y = copy.deepcopy(bins) counts_histo_2d, binavg_2d = binning.bin_an_array_2d(pwrspec3d_signal, radius_arr_perp, radius_arr_parallel, bins_x, bins_y) del radius_arr_perp del radius_arr_parallel gc.collect() bin_left_x, bin_center_x, bin_right_x = binning.bin_edges(bins_x, log=logbins) bin_left_y, bin_center_y, bin_right_y = binning.bin_edges(bins_y, log=logbins) bin_left, bin_center, bin_right = binning.bin_edges(bins, log=logbins) pwrspec2d_product = {} pwrspec2d_product['bin_x_left'] = bin_left_x pwrspec2d_product['bin_x_center'] = bin_center_x pwrspec2d_product['bin_x_right'] = bin_right_x pwrspec2d_product['bin_y_left'] = bin_left_y pwrspec2d_product['bin_y_center'] = bin_center_y pwrspec2d_product['bin_y_right'] = bin_right_y pwrspec2d_product['counts_histo'] = counts_histo_2d pwrspec2d_product['binavg'] = binavg_2d pwrspec1d_product = {} pwrspec1d_product['bin_left'] = bin_left pwrspec1d_product['bin_center'] = bin_center pwrspec1d_product['bin_right'] = bin_right pwrspec1d_product['counts_histo'] = counts_histo pwrspec1d_product['binavg'] = binavg if not return_3d: return pwrspec2d_product, pwrspec1d_product else: return pwrspec3d_signal, pwrspec2d_product, pwrspec1d_product