.. _read_catalog:

******************************
Reading Catalogs for Corrfunc
******************************

All of the ``Corrfunc`` routines require some sort of
position arrays, X/Y/Z, as input. These arrays are
expected to be 1-D arrays of type ``np.array``. If
you already have have the required ``numpy`` arrays,
then you can just pass them straight to ``Corrfunc``.
If you need to read the arrays in from disk, then read
on. For the command-line interface, the input files can only
be in ASCII or fast-food format (for description of fast-food
binaries, see :ref:`fast_food_binary`). 

.. toctree::
   :maxdepth: 1

   fast_food_binary


Reading from ASCII files
========================

This is the most straight forward way -- you need an ASCII
file with columns X/Y/Z (white-space separated). 

Using ``numpy.genfromtxt``
---------------------------

.. code:: python

          import numpy as np
          fname = "myfile_containing_xyz_columns.dat"

          # For double precision calculations
          dtype = np.float  ## change to np.float32 for single precision

          X, Y, Z = np.genfromtxt(fname, dtype=dtype, unpack=True)


.. note:: :py:mod:`Corrfunc.read_catalog` uses this exact code-snippet to read in ASCII files in python. 


Reading from fast-food files
=============================

If you are using the command-line interface, then the code will **have** to
read the arrays from files. While ``Corrfunc`` natively supports both
ASCII and fast-food formats (for description of fast-food binaries, see
:ref:`fast_food_binary`), the following python utility is intended to
read both these types of files.      


Using utility: :py:mod:`Corrfunc.io.read_catalog`
-------------------------------------------------

:py:mod:`Corrfunc.io.read_catalog` can directly read ASCII files or fast-food binary
files. 

.. code:: python

          from Corrfunc.io import read_catalog

          # Read the standard theory catalog (on a box)
          # supplied with Corrfunc
          X, Y, Z = read_catalog()

          # Read some other format -> have to specify
          # filename
          fname = "myfile_containing_xyz_columns.dat"
          X, Y, Z = read_catalog(fname)



          
