Density-Split statistics#

Warning

Right now, the cosmodesi environement on NERSC has a version of the pyrecon package that breaks the densitysplit code.

For now, the quick fix is to use the following command on the console before calling the densitysplit code:

module swap pyrecon/mpi pyrecon/main

Overview#

TODO

Add a brief description of the densitysplit statistic. (see the article)

The DensitySplit class#

Initialization#

The DensitySplit is imported from acm.estimators.galaxy_clustering.densitysplit.

Tip

Some imports can fail at the first call of the DensitySplit class, if the acm package has not been installed with all the required dependencies (sometimes done if only one statistic is needed). A quick fix is to import the DensitySplit class trough a try/except block, that will ignore the import error and continue the code execution.

try:
    from acm.estimators.galaxy_clustering.densitysplit import DensitySplit
except ModuleNotFoundError: # On first import, some modules are not found but we still can import DensitySplit
    from acm.estimators.galaxy_clustering.densitysplit import DensitySplit

The DensitySplit class is initialized with a boxsize, a boxcenter and a cellsize arguments.

ds = DensitySplit(boxsize=1000, boxcenter=boxsize/2, cellsize=10) 

The data positions are assigned to the mesh with the assign_data method.

ds.assign_data(data_positions, wrap=True) # wrap=True will wrap the data positions around the box assuming periodic boundary conditions

The set_density_contrast method calculates the density contrast of the data positions in a given smoothing radius.

ds.set_density_contrast(smoothing_radius=10)

Tip

When calling set_density_contrast, you can pass the argument save_wisdom=True, which will save a file on disk that will speed up FFT calculations next time you run the code with the same grid settings. This is highly recommended if you plan to run this on many mocks.

The quantiles can be computed by calling the set_quantiles method. The n_quantiles argument sets the number of quantiles to compute, and the query_method argument sets the method to query the points on which the density is computed.

ds.set_quantiles(n_quantiles=3, query_method='randoms')
quantiles = ds.quantiles

Computing the statistic#

In configuration space#

The auto and cross-correlations can be computed for all the quantiles with the quantile_correlation and quantile_data_correlation methods respectively.

auto_correlation = ds.quantile_correlation(edges=(sedges, muedges), los='z')
cross_correlation = ds.quantile_data_correlation(data_positions, edges=(sedges, muedges), los='z')

Note

The objects returned by the quantile_correlation and quantile_data_correlation methods are lists of pycorr objects, i.e. the correlation function estimators. The multipoles can be obtained with :

# For quantile 0 auto-correlation
s, poles = auto_correlation[0](ells=(0, 2), return_sep=True)

See also

For more infomration on the pycorr objects, see the pycorr documentation.

See also

For more information on the DensitySplit class, see the DensitySplit documentation.

API#