===============================
Cosmic Variance Calculator
===============================

Package to calculate cosmic variance in pencil-beam surveys
---------------------------------------------------------------------------

.. image:: https://img.shields.io/pypi/v/cosmic_variance.svg
        :target: https://pypi.python.org/pypi/cosmic_variance


Python package based on the IDL code released with the Cosmic Variance Cookbook of Moster et al. (2010). The code was written for https://arxiv.org/pdf/2403.00050.pdf, so **please cite this paper if you use this code**. 

The code is based on galaxy stellar mass bins (as described in https://arxiv.org/pdf/1001.1737.pdf), scaled to dark matter cosmic variance (as described in https://arxiv.org/pdf/astro-ph/0109130.pdf). 

This is significantly more useful than dark matter - only variance, since the empirical galaxy variance is significantly higher.

Free software: MIT license

Install and Use
-------------------

To install the package, simply run:

.. code-block:: bash

        pip install cosmic-variance

Then in your script/notebook, import the package as:

.. code-block:: python

        import cosmic_variance as cv

The main use of the package is through the get_cv function, which takes in a rectangular survey geometry with side lengths side1 and side2 (in degrees), and an array of redshift bin edges, and returns a pandas dataframe with the cosmic variance for 0.5 dex galaxy stellar mass bins for each redshift bin.

.. code-block:: python

        import cosmic_variance as cv
        import numpy as np
        # Example of using the main function, get_cv to calculate
        # cosmic variance for a single JWST pointing

        #### these arguments are required ####
        side1 = 2.2/60. # /60 to convert from arcmin to degrees
        side2 = 2*2.2/60. # /60 to convert from arcmin to degrees
        zarray = np.array([7,8,9,11,13]) # redshift bin edges, if dz is given, this array will be the center of the redshift bins

        #### these arguments are optional ####
        name = 'JWST' # name of the survey, if provided, the output file will be saved as dfs/{name}.csv along with a meta file.
        # Default is None, in which case the output will not be saved

        acc = 'low' # accuracy of the calculation, 'low' or 'high, low is default, faster and sufficient for almost all applications

        verbose = False # if True, will print out the progress of the calculation, default is False

        #If you want to use a different cosmology, you can specify it by the following in the get_cv call
        # OmegaM = 0.308, OmegaL = 0.692, OmegaBaryon = 0.022/(0.678)**2 sigma8 = 0.82, ns = 0.96, h = 0.678

        cv_df = cv.get_cv(side1, side2, zarray, name = name, acc=acc, verbose = verbose)

This will calculate the cosmic variance for a 2.2 arcmin x 4.4 arcmin survey in redshifts bin [7, 8], [8,9], [9,11], [11,13] and save the output.
