Extract information from a PESummary file
Identifying the label for a specific run
Each run stored in the PESummary metafile will have a unique label associated with it. The list of labels (and consequently the list of runs stored in the metafile) can be found by running the following:
>>> print(data.labels)
['EXP1', 'EXP2', 'EXP3']
Loading the configuration file for a specific run
If passed from the command line, the configuration file is also stored in the PESummary metafile. You can extract it for a specific run by running:
>>> config = data.config["EXP1"]
>>> for i in config.keys():
... print("[{}]".format(i))
... for key, item in config[i].items():
... print("{}={}".format(key, item))
... print("\n")
and you can save it to a file by running:
>>> data.write_config_to_file("EXP1", outdir="./")
Loading the samples for a specific run
Your result file may store either mcmc chains or posterior samples. The resulting data structures are a bit different with different useful features. To identify if yours is storing mcmc chains or posterior samples, you may run the following:
>>> print(data.mcmc_chains)
If True, then please look at Loading the mcmc samples for a specific run below. If False, then please look at Loading the posterior samples for a specific run below.
Loading the posterior samples for a specific run
All posterior samples are stored in a pesummary.utils.samples_dict.MultiAnalysisSamplesDict object. For details about the MultiAnalysisSamplesDict class, see MultiAnalysisSamplesDict class. If, for example, you wanted to extract the posterior samples for the ‘EXP1’ analysis, this can be done with the following:
>>> print(data.samples_dict['EXP1'])
This will return a pesummary.utils.samples_dict.SamplesDict object. For details about the SamplesDict class see SamplesDict class. Of course, you may choose to use astropy or pandas to read in your posterior samples. For details about this see below.
Loading the mcmc chains for a specific run
If you wanted to load the mcmc chains stored in the result file, this can be done with the following:
>>> print(data.samples_dict)
This will return a pesummary.utils.samples_dict.MCMCSamplesDict object. For details about the MCMCSamplesDict class see MCMCSamplesDict class. To load a specific chain, you may run something like the following:
>>> print(data.samples_dict["chain_1"])
The data for each chain is stored as a pesummary.utils.samples_dict.SamplesDict object. For details about the SamplesDict class see SamplesDict class. To see how many chains are stored in the result file, you may run:
>>> print(data.samples_dict.nchains)
Extract posterior samples using astropy or pandas
Of course, you may want to read in the posterior samples into an astropy Table or a pandas dataframe. The PESummary metafile stores the data such that both can be done with ease. To load the posterior samples into an astropy Table, you may use the following:
>>> from astropy.table import Table
>>> data = Table.read("posterior_samples.h5", path="EXP1/posterior_samples")
To load in the posterior samples into a pandas dataframe, you may use the following:
>>> import pandas as pd
>>> data = pd.read_hdf("posterior_samples.h5", key="EXP1/posterior_samples")
Converting file format
You are able to convert the posterior samples stored in the PESummary metafile into multiple file formats, including a .dat and a bilby .json. This can be done by using the following:
>>> data.write(package="core", file_format="dat", outdir="./", filename="example.dat")
>>> bilby_objects = data.to_bilby()
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:
label
-> posterior_samples Dataset
-> config_file Group
-> [section] Group
-> key Dataset
-> priors Group
-> samples Dataset
-> injection_data Dataset
-> meta_data Group
-> meta_data Group
-> Dataset
-> sampler Group
-> Dataset
-> version Dataset
label2 Group
-> posterior_samples Dataset
-> config_file Group
-> [section] Group
-> key Dataset
-> priors Group
-> samples Dataset
-> injection_data Dataset
-> meta_data Group
-> meta_data Group
-> Dataset
-> sampler Group
-> Dataset
-> version Dataset
...
version Group
-> environment Dataset
-> packages Dataset
-> pesummary Dataset
history
-> gps_creation_time Dataset
-> creator Dataset
-> Dataset