Skip to main content

OpenCosmo Python Toolkit

Project description

OpenCosmo


CI PyPI - Version Conda Version GitHub License

The OpenCosmo Python Toolkit provides utilities for reading, writing and manipulating data from cosmological simulations produced by the Cosmolgical Physics and Advanced Computing (CPAC) group at Argonne National Laboratory. It can be used to work with smaller quantities data retrieved with the CosmoExplorer, as well as the much larget datasets these queries draw from. The OpenCosmo toolkit integrates with standard tools such as AstroPy, and allows you to manipulate data in a fully-consistent cosmological context.

Installation

The OpenCosmo library is available for Python 3.11 and up on Linux and MacOS (and Windows via WSL). It can be installed easily with pip:

pip install opencosmo

There's a good chance the default version of Python on your system is less than 3.11. Whether or not this is the case, we recommend installing opencosmo into a virtual environment. If you're using Conda, you can create a new environment and install opencosmo into it automatically:

conda create -n opencosmo_env conda-forge::opencosmo
conda activate opencosmo_env

or if you already have a virtual environment to use:

conda install conda-forge::opencosmo

If you plan to use opencosmo in a Jupyter notebook, you can install the ipykernel package to make the environment available as a kernel:

pip install ipykernel # can also be installed with conda
python -m ipykernel install --user --name=opencosmo

Be sure you have run the "activate" command shown above before running the ipykernel command.

Getting Started

To get started, download the "haloproperites.hdf5" from the OpenCosmo Google Drive. This file contains properties of dark-matter halos from a small hydrodynamical simulation run with HACC. You can easily open the data with the open command:

import opencosmo as oc

dataset = oc.open("haloproperties.hdf5")
print(dataset)
OpenCosmo Dataset (length=237441)
Cosmology: FlatLambdaCDM(name=None, H0=<Quantity 67.66 km / (Mpc s)>, Om0=0.3096446816186967, Tcmb0=<Quantity 0. K>, Neff=3.04, m_nu=None, Ob0=0.04897468161869667)
First 10 rows:
block fof_halo_1D_vel_disp fof_halo_center_x ... sod_halo_sfr unique_tag
             km / s               Mpc        ... solMass / yr
int32       float32             float32      ...   float32      int64
----- -------------------- ----------------- ... ------------ ----------
    0            32.088795         1.4680439 ...       -101.0      21674
    0             41.14525        0.19616994 ...       -101.0      44144
    0             73.82962         1.5071135 ...    3.1447952      48226
    0             31.17231         0.7526525 ...       -101.0      58472
    0            23.038841         5.3246417 ...       -101.0      60550
    0            37.071426         0.5153746 ...       -101.0     537760
    0            26.203058         2.1734374 ...       -101.0     542858
    0              78.7636         2.1477687 ...          0.0     548994
    0             37.12636         6.9660196 ...       -101.0     571540
    0             58.09235          6.072006 ...    1.5439711     576648

The open function returns a Dataset object, which can retrieve the relevant data from disk with a simple method call. It also holds metadata about the simulation, such as the comsology. You can easily access the data and cosmology as Astropy objects:

dataset.get_data()
dataset.cosmology

The first will return an astropy table of the data, with all associated units already applied. The second will return the astropy cosmology object that represents the cosmology the simulation was run with.

Basic Querying

Although you can access data directly, opencosmo provides tools for querying and transforming the data in a fully cosmology-aware context. For example, suppose we wanted to plot the concentration-mass relationship for the halos in our simulation above a certain mass. One way to perform this would be as follows:

dataset = dataset
    .filter(oc.col("fof_halo_mass") > 1e13)
    .take(1000, at="random")
    .select(("fof_halo_mass", "sod_halo_cdelta"))

print(dataset)
OpenCosmo Dataset (length=1000)
Cosmology: FlatLambdaCDM(name=None, H0=<Quantity 67.66 km / (Mpc s)>, Om0=0.3096446816186967, Tcmb0=<Quantity 0. K>, Neff=3.04, m_nu=None, Ob0=0.04897468161869667)
First 10 rows:
 fof_halo_mass   sod_halo_cdelta
    solMass
    float32          float32
---------------- ---------------
11220446000000.0       4.5797048
17266723000000.0       7.4097505
51242150000000.0       1.8738283
70097712000000.0       4.2764015
51028305000000.0        2.678151
11960567000000.0       3.9594727
15276915000000.0        5.793542
16002001000000.0       2.4318497
47030307000000.0       3.7146702
15839942000000.0        3.245569

We could then plot the data, or perform further transformations. This is cool on its own, but the real power of opencosmo comes from its ability to work with different data types. Go ahead and download the "haloparticles" file from the OpenCosmo Google Drive and try the following:

import opencosmo as oc

data = oc.open("haloproperties.hdf5", "haloparticles.hdf5")

This will return a data collection that will allow you to query and transform the data as before, but will associate the halos with their particles.

data = data
    .filter(oc.col("fof_halo_mass") > 1e13)
    .take(1000, at="random")

for halo in data.halos():
    halo_properties = halo["halo_properties"]
    dm_particles = halo["dm_particles"]
    star_particles = halo["star_particles"]

In each iteration, "halo properties" will be a dictionary containing the properties of the halo (such as its total mass), while "dm_particles" and "star_particles" will be OpenCosmo datasets containing the dark matter and stars associated with the halo, respectively. Because these are just like the dataset object we saw eariler, we can further query and transform the particles as needed for our analysis. For more details on how to use the library, check out the full documentation.

Testing

To run tests, first download the test data from Google Drive. Set environment variable OPENCOSMO_DATA_PATH to the path where the data is stored. Then run the tests with pytest:

export OPENCOSMO_DATA_PATH=/path/to/data
# From the repository root
pytest --ignore test/parallel 

Although opencosmo does support multi-core processing via MPI, the default installation does not include the necessary dependencies to work in an MPI environment. If you need these capabilities, check out the guide in our documentation.

Contributing

We welcome bug reports and feature requests from the community. If you would like to contribute to the project, please check out the contributing guide for more information.


Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

opencosmo-1.3.5-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (520.5 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ x86-64

opencosmo-1.3.5-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (514.3 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ ARM64

opencosmo-1.3.5-cp314-cp314-macosx_11_0_arm64.whl (477.7 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

opencosmo-1.3.5-cp314-cp314-macosx_10_12_x86_64.whl (483.1 kB view details)

Uploaded CPython 3.14macOS 10.12+ x86-64

opencosmo-1.3.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (520.9 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

opencosmo-1.3.5-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (513.8 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

opencosmo-1.3.5-cp313-cp313-macosx_11_0_arm64.whl (477.9 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

opencosmo-1.3.5-cp313-cp313-macosx_10_12_x86_64.whl (483.3 kB view details)

Uploaded CPython 3.13macOS 10.12+ x86-64

opencosmo-1.3.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (521.5 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

opencosmo-1.3.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (513.7 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

opencosmo-1.3.5-cp312-cp312-macosx_11_0_arm64.whl (478.1 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

opencosmo-1.3.5-cp312-cp312-macosx_10_12_x86_64.whl (483.4 kB view details)

Uploaded CPython 3.12macOS 10.12+ x86-64

File details

Details for the file opencosmo-1.3.5-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for opencosmo-1.3.5-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 2572e581a8385cb42aa33746ed54339f2ce73750a77c0e440fd8c72ff5cc46fc
MD5 bd7486b74a0cbd88136a0b55e46cb5cd
BLAKE2b-256 d9a8bb82ee5a1395a14c3ac3188d92918e6d8fd20efe873a87f2fe710b4d73ef

See more details on using hashes here.

File details

Details for the file opencosmo-1.3.5-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for opencosmo-1.3.5-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 25401d9c742ea28ff17b3202089b4ce6441a312f6d3b5edf493f6f3c691564ee
MD5 79219e2f278585c305c16cea97de511a
BLAKE2b-256 c94e0efd719be722d59d49449988280349ae31035a1d2acfd4244e5434a41860

See more details on using hashes here.

File details

Details for the file opencosmo-1.3.5-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for opencosmo-1.3.5-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 07db8114b4d2d19784ce7ca5a8a7136c4a1bbb6f962070fa81d452b3a8a68aa7
MD5 e981deee34d44b317d7c4f76d951ab57
BLAKE2b-256 46486d88c2d1140c26d289bd1b8cff4f4e73b971f9ef85c03f9640f720d065e1

See more details on using hashes here.

File details

Details for the file opencosmo-1.3.5-cp314-cp314-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for opencosmo-1.3.5-cp314-cp314-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 4396d4f8395eb10fa98226e9d73c762c57700d02d09bbc52ec1f21512bf1be50
MD5 51cfc45fb507117bd76314013ccec345
BLAKE2b-256 776dcfb16bd339c4c5534cfa8cd2e1e4005d9cdeee9bb5285c2057d173dbcfb3

See more details on using hashes here.

File details

Details for the file opencosmo-1.3.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for opencosmo-1.3.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 556fe953e9850397f3b15075dbe232b39b93440f3078476f752bc541ac0313f1
MD5 39ca873c3f482935da3e7f3e63ad668b
BLAKE2b-256 ae77e1e079f654106a7b40d9139bc601bc92663815b848d6f114dae195276d30

See more details on using hashes here.

File details

Details for the file opencosmo-1.3.5-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for opencosmo-1.3.5-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 768573ed30ad218965d340909856744699c070f691c064cf5fae24a7d53627cd
MD5 936a33c6ecf0e7ab7c156f0339453e73
BLAKE2b-256 ae6e55ad0a87a2005f40bb3e12fd87c4b21f408d4e42c36ae1f1ea56d9c1eab7

See more details on using hashes here.

File details

Details for the file opencosmo-1.3.5-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for opencosmo-1.3.5-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 198ed269dcfbe9e25a5d014d444a6239abda30aeb568cc4b52a652d9bad51bdd
MD5 66966a54dd6e651fc1e6fa415b45164f
BLAKE2b-256 2c8e2ca4c57a1553bafdc20f1a7cb07787f74a3190677735839db70c36d62bef

See more details on using hashes here.

File details

Details for the file opencosmo-1.3.5-cp313-cp313-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for opencosmo-1.3.5-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 286c7038502489d76a87ffda886511a8c3d182815742d069a7e864a911fb9b2d
MD5 428e01c7697dfd0bd309906beb64795c
BLAKE2b-256 5be2831688e232ed0d6bbcff2b3a7593a9767100b060440d07a890657756abfd

See more details on using hashes here.

File details

Details for the file opencosmo-1.3.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for opencosmo-1.3.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 8fc803bdb06c63372538576a312e6eda66d6cb78c2e65d586f63dd1cb7153050
MD5 8acdc98fd10aa427a6510df63cb48523
BLAKE2b-256 550483a04b1e5d89deff73f2384109e6db4d64eb1f98493e643deddc8e42bb35

See more details on using hashes here.

File details

Details for the file opencosmo-1.3.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for opencosmo-1.3.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 6461d32e895074c5dc075cad281ac38f1635a11481d2e2a7020a8b21fe7defec
MD5 f98074b841c68be3716d00707b021dfc
BLAKE2b-256 9327b12fa042b43984cff254665960bf21e65cd0fe500ad132014c2fafabbbdf

See more details on using hashes here.

File details

Details for the file opencosmo-1.3.5-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for opencosmo-1.3.5-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 fcca593c66cfb14607ce09ade04b561d54eddc2c6edb81dbd1f729f40ffdaf03
MD5 8d3c11666a46c20132cbb8a4da43324a
BLAKE2b-256 405fba4040ea951ab20d10568f74d9724183e1e49fcf4255b15955c6f4ffbb03

See more details on using hashes here.

File details

Details for the file opencosmo-1.3.5-cp312-cp312-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for opencosmo-1.3.5-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 7516a715ec3839042c9a45e8ad33ad1471f28ab26c10401c603fd5fa9a816703
MD5 53a1afb421bb1306f266c07285b2cb4d
BLAKE2b-256 6674e17967afc93e89c979dd224858c5a56aeee6fdb543968c44500c32a9b8f6

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page