Ejemplo n.º 1
0
    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
Ejemplo n.º 2
0
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
Ejemplo n.º 3
0
    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
Ejemplo n.º 4
0
    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