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
Exemple #3
0
    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