=========================================
Extract information from a pesummary file
=========================================

Alongside the data that is stored in a core `pesummary` metafile
(see the `core docs <../core/pesummary_file.html>`_), the gw
`pesummary` metafile stores additional information, for example the PSD and
calibration data.

Extracting skymap statistics
----------------------------

If a `ligo.skymap` skymap was successfully produced when the metafile was created,
the skymap statistics (sky localisation at 90% confidence, localization volume
at 90% confidence etc.) are stored in the metadata. These can be extracted by
running:

.. code-block:: python

    >>> ind = data.labels.index("EXP1")
    >>> kwargs = data.extra_kwargs[ind]["other"]
    >>> print(kwargs["area90"])
    '1234.0'

Extracting strain data
----------------------

If passed from the command line, the gravitational wave strain data used during
the analysis  is also stored in the PESummary metafile. You can extract it by
running:

.. code-block:: python

    >>> strain_data = data.gwdata
    >>> IFOs = strain_data.detectors
    >>> strain = strain_data[IFOs[0]]

Here :code:`strain_data` is a :code:`pesummary.gw.file.strain.StrainDataDict`
object and :code:`strain` is a :code:`pesummary.gw.file.strain.StrainData`
object. For details about these objects see the
`<Strain Data in PESummary <./strain.html>`_ tutorial.

Loading the calibration envelope for a specific run
---------------------------------------------------

If passed from the command line, the calibration envelope that was used during
the analysis is also stored in the PESummary metafile. You can extract it for
a specific run by running:

.. code-block:: python

    >>> calibration_data = data.priors["calibration"]["EXP1"]
    >>> IFOs = calibration_data.detectors
    >>> IFO = IFOs[0]
    >>> frequency = calibration_data[IFO].frequencies
    >>> median_mag = calibration_data[IFO].magnitude
    >>> mag_lower = calibration_data[IFO].magnitude_lower


For more details see the `Calibration class <calibration.html>`_ tutorial.

Loading the psd for a specific run
----------------------------------

If passed from the command line, the psds that were used during the analysis
are also stored in the PESummary metafile. You can extract it for a specific
analysis by running:

.. code-block:: python

    >>> psd = data.psd["EXP1"]
    >>> print(type(psd))
    <class 'pesummary.gw.file.psd.PSDDict'>
    >>> IFOs = psd.detectors
    >>> IFO = IFOs[0]
    >>> frequency = psd[IFO].frequencies
    >>> strains = psd[IFO].strains

For more details see the `PSD class <psd.html>`_ tutorial.

Converting file format
----------------------

As well as converting to same file formats as described in the
`core docs <../core/pesummary_file.html>`_, the `gw` package also allows
for you to convert to a `lalinference .hdf5` or a `lalinference .dat` file.
This can be done by using the following:

.. code-block:: python

    >>> data.to_lalinference(outdir="./")
    >>> data.to_lalinference(outdir="./", dat=True)

Loading all data for a specific run without PESummary
-----------------------------------------------------

Of course, you do not have to use PESummary to load in the data from a
PESummary metafile. The core `JSON` and `h5py` python libraries can be
used. The PESummary file has the following data structure:

.. literalinclude:: ../../examples/gw/pesummary_data_structure.txt