def get_1d_halo_matter(self, kind='small_r', average='box'): """ Return the 1D real-space halo-matter correlation functions, with errors estimated from the scatter in the 10 realizations """ valid_kinds = ['small_r', 'fft'] if kind not in valid_kinds: raise ValueError("valid choices for `kind` are: %s" %str(valid_kinds)) name = '_1d_halo_matter_%s' %kind if average is not None: name += '_'+average try: return getattr(self, name) except AttributeError: basename = 'corr_1d_hm{mass}_runPB_PB{box}_{a}_%s.dat' %kind d = os.path.join(self.root, 'halo-matter/config/real') loader = io.load_correlation coords = [self.a, self.mass, self.box]; dims = ['a', 'mass', 'box'] corr = SpectraSet.from_files(loader, d, basename, coords, dims, args=('1d',)) # reindex and add the errors corr = self.reindex(corr, 'r_cen', self.dr, weights='N') # compute errors errs = {} for key in corr.ndindex(dims=['a', 'mass']): xi = corr.sel(**key) data = [] for x in xi: x = x.get() data.append(x['corr']) subkey = (key['a'], key['mass']) errs[subkey] = np.diag(np.cov(np.asarray(data).T))**0.5 if average is not None: errs[subkey] /= (len(self.box))**0.5 # average? if average is not None: corr = corr.average(axis=average) # add the errors for key in corr.ndindex(): xi = corr.loc[key].get() xi['error'] = errs[(key['a'], key['mass'])] setattr(self, name, corr) return corr
def load_data(root, box): toret = [] dtype = [('r', float), ('corr', float), ('error', float)] for kind in ['mono', 'quad']: data = np.loadtxt(os.path.join(root, '%s_Box%s_rescale.dat' %(kind, box))) C = np.loadtxt(os.path.join(root, 'covar_%s.dat' %kind)).reshape((data.shape[0], -1)) errs = np.diag(C)**0.5 data = np.concatenate([data, errs[:,None]], axis=1) meta = {'edges' : make_edges(data[:,0])} corr = Corr1dDataSet.from_nbkit(data, meta, columns=['r', 'corr', 'error']) toret.append(corr) return toret
def get_my_poles(self, space='redshift', scaled=False, average=False, tag="", subtract_shot_noise=True): """ Return the cutsky galaxy multipoles in redshift space, measured for my 84 box realizations """ if space not in ['real', 'redshift']: raise ValueError("`space` should be 'real' or 'redshift'") scaled_tag = 'scaled' if scaled else 'unscaled' name = '_my_poles_%s_%s' %(space, scaled_tag) if average: name += '_mean' if tag: tag = '_'+tag name += tag try: return getattr(self, name) except AttributeError: # form the filename and load the data d = os.path.join(self.root, 'nbodykit/poles') if space == 'redshift': basename = 'poles_my_cutskyN{box:d}_%s_no_fkp_dk005%s.dat' %(scaled_tag, tag) else: basename = 'poles_my_cutskyN{box:d}_real_%s_no_fkp_dk005%s.dat' %(scaled_tag, tag) # read in the data loader = io.load_power mapcols = {'power_0.real':'mono', 'power_2.real':'quad', 'power_4.real':'hexadec'} usecols = ['k', 'mono', 'quad', 'hexadec', 'modes'] kwargs = {'usecols':usecols, 'mapcols':mapcols} poles = SpectraSet.from_files(loader, d, basename, [self.boxes], ['box'], args=('1d',), kwargs=kwargs, ignore_missing=True) # remove null valid_boxes = [] for key, p in poles.nditer(): if not p.isnull(): valid_boxes.append(key['box']) poles = poles.sel(box=valid_boxes) # reindex poles = self.reindex(poles, 'k_cen', self.dk, weights='modes') # unstack the poles ells = [('mono',0), ('quad', 2), ('hexadec', 4)] poles = tools.unstack_multipoles(poles, ells, 'power') # compute errors errs = {} for ell in poles['ell'].values: data = [] for box in poles['box'].values: p = poles.sel(box=box, ell=ell).get() data.append(p['power']) errs[ell] = np.diag(np.cov(np.asarray(data).T))**0.5 if average: errs[ell] /= (len(self.boxes))**0.5 if subtract_shot_noise: for key in poles.ndindex(): if key['ell'] == 0: p = poles.loc[key].get() p['power'] = p['power'] - p.attrs['shot_noise'] # average? if average: poles = poles.average(axis='box') # add the errors for key in poles.ndindex(): p = poles.loc[key].get() p['error'] = errs[key['ell']] setattr(self, name, poles) return poles
def get_subbox_poles(self, which, average=False, subtract_shot_noise=True): """ Return the cutsky galaxy multipoles in redshift space, measured for the subboxes """ name = '_my_poles_subboxes_%s_Mpch' %(which) if average: name += '_mean' try: return getattr(self, name) except AttributeError: # form the filename and load the data d = self.root basename = 'poles_my_cutskyN1_subbox{box:d}_%s_Mpch_unscaled_no_fkp_dk005.dat' %which # read in the data loader = io.load_power mapcols = {'power_0.real':'mono', 'power_2.real':'quad', 'power_4.real':'hexadec'} usecols = ['k', 'mono', 'quad', 'hexadec', 'modes'] kwargs = {'usecols':usecols, 'mapcols':mapcols} if which == '300': boxes = list(range(94)) else: boxes = list(range(24)) poles = SpectraSet.from_files(loader, d, basename, [boxes], ['box'], args=('1d',), kwargs=kwargs, ignore_missing=True) # remove null valid_boxes = [] for key, p in poles.nditer(): if not p.isnull(): valid_boxes.append(key['box']) poles = poles.sel(box=valid_boxes) # reindex poles = self.reindex(poles, 'k_cen', self.dk, weights='modes') # unstack the poles ells = [('mono',0), ('quad', 2), ('hexadec', 4)] poles = tools.unstack_multipoles(poles, ells, 'power') # compute errors errs = {} for ell in poles['ell'].values: data = [] for box in poles['box'].values: p = poles.sel(box=box, ell=ell).get() data.append(p['power']) errs[ell] = np.diag(np.cov(np.asarray(data).T))**0.5 if average: errs[ell] /= (len(boxes))**0.5 if subtract_shot_noise: for key in poles.ndindex(): if key['ell'] == 0: p = poles.loc[key].get() p['power'] = p['power'] - p.attrs['shot_noise'] # average? if average: poles = poles.average(axis='box') # add the errors for key in poles.ndindex(): p = poles.loc[key].get() p['error'] = errs[key['ell']] setattr(self, name, poles) return poles