Tutorials

Examples

Launch examples in your browser with Binder:

https://img.shields.io/badge/lauch%20-binder-E66581.svg?logo=data:image/png;base64,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

Population model data format

In this section we will cover how simulation data from a population model is saved. You might find this useful if you are planning on creating your own population model and contributing it to popclass.

popclass models can be saved in the ASDF (Advanced Scientific Data Format). This Python implementation of the ASDF Standard can be found here and more information on the ASDF Standard itself can be found in [Greenfield et al., 2015].

Here is an example schema of a popclass population model file popsycle_singles_raithel18.asdf.

import asdf

f = asdf.open('popsycle_singles_sukhboldn20.asdf')
>>> f.info(max_rows=None)
root (AsdfObject)
├─asdf_library (Software)
│ ├─author (str): The ASDF Developers
│ ├─homepage (str): http://github.com/asdf-format/asdf
│ ├─name (str): asdf
│ └─version (str): 3.3.0
├─history (dict)
│ └─extensions (list)
│   └─[0] (ExtensionMetadata)
│     ├─extension_class (str): asdf.extension._manifest.ManifestExtension
│     ├─extension_uri (str): asdf://asdf-format.org/core/extensions/core-1.5.0
│     ├─manifest_software (Software)
│     │ ├─name (str): asdf_standard
│     │ └─version (str): 1.1.1
│     └─software (Software)
│       ├─name (str): asdf
│       └─version (str): 3.3.0
├─citation (list)
│ ├─[0] (str): "10.3847/1538-4357/ab5fd3"
│ ├─[1] (str): "10.3847/1538-4357/aca09d"
├─class_data (dict)
│ ├─black_hole (NDArrayType): shape=(17, 4), dtype=float64
│ ├─neutron_star (NDArrayType): shape=(21, 4), dtype=float64
│ ├─star (NDArrayType): shape=(1255, 4), dtype=float64
│ └─white_dwarf (NDArrayType): shape=(178, 4), dtype=float64
├─class_weights (dict)
│ ├─black_hole (float): 0.011556764106050306
│ ├─neutron_star (float): 0.014276002719238613
│ ├─star (float): 0.8531611148878314
│ └─white_dwarf (float): 0.12100611828687967
├─model_name (str): popsycle_singles_sukhboldn20
└─parameters (list)
  ├─[0] (str): log10tE
  ├─[1] (str): log10piE
  ├─[2] (str): log10thetaE
  └─[3] (str): f_blend_I

Here is an example of how to create a popclass population model file from a nested python dictionary with the same structure but with random mock class data.

import asdf
import numpy as np


parameters = ['log10tE', 'log10PiE', 'log10thetaE', 'f_blend_I']
class_data = {"black_hole": np.random.randn(17, 4),
              "neutron_star": np.random.randn(21,4),
              "star": np.random.randn(1255,4),
              "white dwarf": np.random.randn(178,4)}

model_name = 'popsycle_singles_sukhboldn20'
citation = ["10.3847/1538-4357/ab5fd3", "10.3847/1538-4357/aca09d"]
class_weights = {
                "black_hole": 0.011556764106050306,
                "neutron_star": 0.014276002719238613,
                "star": 0.8531611148878314,
                "white_dwarf": 0.12100611828687967
                 }

tree = {
    "class_data": class_data,
    "parameters": parameters,
    "class_weights": class_weights,
    "model_name": "popsycle_singles_imfr_sukhboldn20",
    "citation": citation
}

af = asdf.AsdfFile(tree)
af.write_to("example.asdf")

To read-in a user-generated population model:

from popclass.model import PopulationModel

file = 'path/to/file.asdf'
user_population_model = PopulationModel.from_asdf(file)

Additionally, to contribute a population model to the library, the file may be placed in popclass/data and then added to the list of AVAILABLE_MODELS in model.py. The data can then be read using from_library(). The format of the data in the asdf file must match the existing schema for the included models as described above. The model can then be read in directly from the library via

# use the above example
model_name = 'popsycle_singles_raithel18'
population_model = PopulationModel.from_library(model_name)

The models supplied by popclass include the following parameters:

  • ‘log10tE’

  • ‘log10PiE’

  • ‘log10thetaE’

  • ‘f_blend_I’

from popclass.classify import classify

classification = (population_model, inference_data, parameters=['log10tE', 'log10piE'])

This will return a dictionary of object clases with their associated probabilities.