{"id":48319516,"url":"https://github.com/kyleaoman/martini","last_synced_at":"2026-04-05T00:36:48.441Z","repository":{"id":57412016,"uuid":"107552631","full_name":"kyleaoman/martini","owner":"kyleaoman","description":"Mock spatially resolved spectral line observations of simulated galaxies.","archived":false,"fork":false,"pushed_at":"2026-03-17T14:22:52.000Z","size":37089,"stargazers_count":23,"open_issues_count":16,"forks_count":8,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-03-18T04:51:39.372Z","etag":null,"topics":["astrophysics","radio-astronomy"],"latest_commit_sha":null,"homepage":"https://martini.readthedocs.io/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kyleaoman.png","metadata":{"files":{"readme":"README.rst","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE.md","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":"CITATION.cff","codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":"codemeta.json","zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2017-10-19T13:49:48.000Z","updated_at":"2026-03-17T14:22:57.000Z","dependencies_parsed_at":"2024-04-02T15:47:21.018Z","dependency_job_id":"54d0052a-9cad-45b2-8852-21234ee78d2b","html_url":"https://github.com/kyleaoman/martini","commit_stats":{"total_commits":361,"total_committers":3,"mean_commits":"120.33333333333333","dds":"0.22437673130193903","last_synced_commit":"c455f1789423188c8640ce65ba7380c7e7b7c1df"},"previous_names":[],"tags_count":30,"template":false,"template_full_name":null,"purl":"pkg:github/kyleaoman/martini","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kyleaoman%2Fmartini","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kyleaoman%2Fmartini/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kyleaoman%2Fmartini/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kyleaoman%2Fmartini/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kyleaoman","download_url":"https://codeload.github.com/kyleaoman/martini/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kyleaoman%2Fmartini/sbom","scorecard":{"id":575167,"data":{"date":"2025-08-11","repo":{"name":"github.com/kyleaoman/martini","commit":"bcbdd1ec78e615ed78978a08b9e4bb8751624894"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.5,"checks":[{"name":"Code-Review","score":0,"reason":"Found 0/14 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Maintained","score":2,"reason":"2 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 2","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/lint_and_test.yml:1","Warn: no topLevel permission defined: .github/workflows/python-publish.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/lint_and_test.yml:19: update your workflow using https://app.stepsecurity.io/secureworkflow/kyleaoman/martini/lint_and_test.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/lint_and_test.yml:21: update your workflow using https://app.stepsecurity.io/secureworkflow/kyleaoman/martini/lint_and_test.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/lint_and_test.yml:26: update your workflow using https://app.stepsecurity.io/secureworkflow/kyleaoman/martini/lint_and_test.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/lint_and_test.yml:30: update your workflow using https://app.stepsecurity.io/secureworkflow/kyleaoman/martini/lint_and_test.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/lint_and_test.yml:57: update your workflow using https://app.stepsecurity.io/secureworkflow/kyleaoman/martini/lint_and_test.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/lint_and_test.yml:59: update your workflow using https://app.stepsecurity.io/secureworkflow/kyleaoman/martini/lint_and_test.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/lint_and_test.yml:63: update your workflow using https://app.stepsecurity.io/secureworkflow/kyleaoman/martini/lint_and_test.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/lint_and_test.yml:87: update your workflow using https://app.stepsecurity.io/secureworkflow/kyleaoman/martini/lint_and_test.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/lint_and_test.yml:89: update your workflow using https://app.stepsecurity.io/secureworkflow/kyleaoman/martini/lint_and_test.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/lint_and_test.yml:93: update your workflow using https://app.stepsecurity.io/secureworkflow/kyleaoman/martini/lint_and_test.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/lint_and_test.yml:113: update your workflow using https://app.stepsecurity.io/secureworkflow/kyleaoman/martini/lint_and_test.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/python-publish.yml:22: update your workflow using https://app.stepsecurity.io/secureworkflow/kyleaoman/martini/python-publish.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/python-publish.yml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/kyleaoman/martini/python-publish.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/python-publish.yml:37: update your workflow using https://app.stepsecurity.io/secureworkflow/kyleaoman/martini/python-publish.yml/main?enable=pin","Warn: pipCommand not pinned by hash: .github/workflows/lint_and_test.yml:33","Warn: pipCommand not pinned by hash: .github/workflows/lint_and_test.yml:39","Warn: pipCommand not pinned by hash: .github/workflows/lint_and_test.yml:40","Warn: pipCommand not pinned by hash: .github/workflows/lint_and_test.yml:41","Warn: pipCommand not pinned by hash: .github/workflows/lint_and_test.yml:46","Warn: pipCommand not pinned by hash: .github/workflows/lint_and_test.yml:72","Warn: pipCommand not pinned by hash: .github/workflows/lint_and_test.yml:73","Warn: pipCommand not pinned by hash: .github/workflows/lint_and_test.yml:74","Warn: pipCommand not pinned by hash: .github/workflows/lint_and_test.yml:75","Warn: pipCommand not pinned by hash: .github/workflows/lint_and_test.yml:76","Warn: pipCommand not pinned by hash: .github/workflows/lint_and_test.yml:102","Warn: pipCommand not pinned by hash: .github/workflows/lint_and_test.yml:103","Warn: pipCommand not pinned by hash: .github/workflows/lint_and_test.yml:104","Warn: pipCommand not pinned by hash: .github/workflows/lint_and_test.yml:105","Warn: pipCommand not pinned by hash: .github/workflows/lint_and_test.yml:106","Warn: pipCommand not pinned by hash: .github/workflows/python-publish.yml:29","Warn: pipCommand not pinned by hash: .github/workflows/python-publish.yml:30","Warn: pipCommand not pinned by hash: .github/workflows/python-publish.yml:31","Warn: pipCommand not pinned by hash: .github/workflows/python-publish.yml:32","Info:   0 out of  10 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   4 third-party GitHubAction dependencies pinned","Info:   0 out of  19 pipCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE.md:0","Info: FSF or OSI recognized license: GNU General Public License v3.0: LICENSE.md:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Packaging","score":10,"reason":"packaging workflow detected","details":["Info: Project packages its releases by way of GitHub Actions.: .github/workflows/python-publish.yml:12"],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Branch-Protection","score":4,"reason":"branch protection is not maximal on development and all release branches","details":["Info: 'allow deletion' disabled on branch 'main'","Info: 'force pushes' disabled on branch 'main'","Warn: 'branch protection settings apply to administrators' is disabled on branch 'main'","Warn: 'stale review dismissal' is disabled on branch 'main'","Warn: required approving review count is 1 on branch 'main'","Warn: codeowners review is not required on branch 'main'","Warn: 'last push approval' is disabled on branch 'main'","Warn: 'up-to-date branches' is disabled on branch 'main'","Info: status check found to merge onto on branch 'main'","Info: PRs are required in order to make changes on branch 'main'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Vulnerabilities","score":0,"reason":"17 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-h2x6-5jx5-46hf","Warn: Project is vulnerable to: PYSEC-2018-34 / GHSA-2fc2-6r4j-p65h","Warn: Project is vulnerable to: PYSEC-2021-856 / GHSA-5545-2q6w-2gh6","Warn: Project is vulnerable to: PYSEC-2019-108 / GHSA-9fq2-x9r6-wfmf","Warn: Project is vulnerable to: PYSEC-2018-33 / GHSA-cw6w-4rcx-xphc","Warn: Project is vulnerable to: PYSEC-2021-857 / GHSA-f7c7-j99h-c22f","Warn: Project is vulnerable to: GHSA-fpfv-jqm9-f5jm","Warn: Project is vulnerable to: PYSEC-2017-1 / GHSA-frgw-fgh6-9g52","Warn: Project is vulnerable to: PYSEC-2019-156 / GHSA-xp76-357g-9wqq","Warn: Project is vulnerable to: PYSEC-2023-102","Warn: Project is vulnerable to: PYSEC-2023-114","Warn: Project is vulnerable to: PYSEC-2017-74","Warn: Project is vulnerable to: PYSEC-2014-14 / GHSA-652x-xj99-gmcc","Warn: Project is vulnerable to: GHSA-9hjg-9r4m-mvj7","Warn: Project is vulnerable to: GHSA-9wx4-h78v-vm56","Warn: Project is vulnerable to: PYSEC-2014-13 / GHSA-cfj3-7x9c-4p3h","Warn: Project is vulnerable to: PYSEC-2018-28 / GHSA-x84v-xcm2-53pg"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 21 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-20T17:28:47.088Z","repository_id":57412016,"created_at":"2025-08-20T17:28:47.088Z","updated_at":"2025-08-20T17:28:47.088Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31420402,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-05T00:25:07.052Z","status":"ssl_error","status_checked_at":"2026-04-05T00:25:05.923Z","response_time":60,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["astrophysics","radio-astronomy"],"created_at":"2026-04-05T00:36:47.723Z","updated_at":"2026-04-05T00:36:48.433Z","avatar_url":"https://github.com/kyleaoman.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":".. image:: https://github.com/kyleaoman/martini/raw/main/martini_banner.png\n\n|Python version| |PyPI version| |JOSS| |PyOpenSci| |ASCL| |Repostatus| |Zenodo| |Tests| |Documentation status| |CodeCov| |Ruff|\n\n.. |Tests| image:: https://github.com/kyleaoman/martini/actions/workflows/lint_and_test.yml/badge.svg\n    :target: https://github.com/kyleaoman/martini/actions/workflows/lint_and_test.yml\n    :alt: Tests\n.. |Documentation status| image:: https://readthedocs.org/projects/martini/badge/?version=latest\n    :target: https://martini.readthedocs.io/en/latest/?badge=latest\n    :alt: Documentation status\n.. |Python version| image:: https://img.shields.io/python/required-version-toml?tomlFilePath=https%3A%2F%2Fraw.githubusercontent.com%2Fkyleaoman%2Fmartini%2Fmain%2Fpyproject.toml\n   :alt: Python Version from PEP 621 TOML\n.. |PyPI version| image:: https://img.shields.io/pypi/v/astromartini\n   :target: https://pypi.org/project/astromartini/\n   :alt: PyPI - Version\n.. |Repostatus| image:: https://www.repostatus.org/badges/latest/active.svg\n   :alt: Project Status: Active – The project has reached a stable, usable state and is being actively developed.\n   :target: https://www.repostatus.org/#active\n.. |Zenodo| image:: https://zenodo.org/badge/DOI/10.5281/zenodo.11193206.svg\n   :alt: Zenodo DOI\n   :target: https://zenodo.org/doi/10.5281/zenodo.11193206\n.. |CodeCov| image:: https://codecov.io/gh/kyleaoman/martini/graph/badge.svg?token=05OA3Y8889 \n   :alt: Tests code coverage\n   :target: https://codecov.io/gh/kyleaoman/martini\n.. |PyOpenSci| image:: https://tinyurl.com/y22nb8up\n   :alt: PyOpenSci\n   :target: https://github.com/pyOpenSci/software-review/issues/164\n.. |ASCL| image:: https://img.shields.io/badge/ascl-1911.005-blue.svg?colorB=262255\n   :alt: ascl:1911.005\n   :target: https://ascl.net/1911.005\n.. |JOSS| image:: https://joss.theoj.org/papers/f46e9c0a37c70331703069f190c21c09/status.svg\n   :alt: JOSS doi:10.21105/joss.06860\n   :target: https://joss.theoj.org/papers/f46e9c0a37c70331703069f190c21c09\n.. |Ruff| image:: https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json\n    :target: https://github.com/astral-sh/ruff\n    :alt: Ruff\n\t   \nOverview\n========\n\n.. INTRO_START_LABEL\n\nMARTINI is a modular package for the creation of synthetic resolved HI line observations (data cubes) of smoothed-particle hydrodynamics simulations of galaxies. The various aspects of the mock-observing process are divided logically into sub-modules handling the data cube, source, beam, noise, spectral model and SPH kernel. MARTINI is object-oriented: each sub-module provides a class (or classes) which can be configured as desired. For most sub-modules, base classes are provided to allow for straightforward customization. Instances of each sub-module class are given as parameters to the Martini class; a mock observation is then constructed by calling a handful of functions to execute the desired steps in the mock-observing process.\n\n.. INTRO_END_LABEL\n\nFull documentation_ can be found on ReadTheDocs.\n\n.. _documentation: https://martini.readthedocs.io/en/latest/\n\nCiting MARTINI\n--------------\n\n.. CITING_START_LABEL\n   \nIf your use of MARTINI leads to a publication, please cite the `JOSS paper`_ (`ADS listing`_) and the `original paper`_ (`also on ADS`_). You may also cite the `MARTINI entry`_ in the ASCL_ (`indexed on ADS`_). Ideally specify the version used (`Zenodo DOI`_, git commit ID and/or version number) and link to the github repository.\n\n.. code-block:: bibtex\n\n    @ARTICLE{2024JOSS....9.6860O,\n        author = {{Oman}, Kyle A.},\n        title = \"{MARTINI: Mock Array Radio Telescope Interferometry of the Neutral ISM}\",\n        journal = {The Journal of Open Source Software},\n        keywords = {astronomy, simulations},\n        year = 2024,\n        month = jun,\n        volume = {9},\n        number = {98},\n        eid = {6860},\n        pages = {6860},\n        doi = {10.21105/joss.06860},\n        adsurl = {https://ui.adsabs.harvard.edu/abs/2024JOSS....9.6860O},\n        adsnote = {Provided by the SAO/NASA Astrophysics Data System}\n    }\n\n    @ARTICLE{\n        2019MNRAS.482..821O,\n        author = {{Oman}, Kyle A. and {Marasco}, Antonino and {Navarro}, Julio F. and {Frenk}, Carlos S. and {Schaye}, Joop and {Ben{\\'\\i}tez-Llambay}, Alejandro},\n        title = \"{Non-circular motions and the diversity of dwarf galaxy rotation curves}\",\n        journal = {\\mnras},\n        keywords = {ISM: kinematics and dynamics, galaxies: haloes, galaxies: structure, dark matter, Astrophysics - Astrophysics of Galaxies, Astrophysics - Cosmology and Nongalactic Astrophysics},\n        year = 2019,\n        month = jan,\n        volume = {482},\n        number = {1},\n        pages = {821-847},\n        doi = {10.1093/mnras/sty2687},\n        archivePrefix = {arXiv},\n        eprint = {1706.07478},\n        primaryClass = {astro-ph.GA},\n        adsurl = {https://ui.adsabs.harvard.edu/abs/2019MNRAS.482..821O},\n        adsnote = {Provided by the SAO/NASA Astrophysics Data System}\n    }\n\n    @MISC{\n        2019ascl.soft11005O,\n     \tauthor = {{Oman}, Kyle A.},\n        title = \"{MARTINI: Mock spatially resolved spectral line observations of simulated galaxies}\",\n        keywords = {Software},\n        howpublished = {Astrophysics Source Code Library, record ascl:1911.005},\n        year = 2019,\n        month = nov,\n        eid = {ascl:1911.005},\n        pages = {ascl:1911.005},\n        archivePrefix = {ascl},\n        eprint = {1911.005},\n        adsurl = {https://ui.adsabs.harvard.edu/abs/2019ascl.soft11005O},\n        adsnote = {Provided by the SAO/NASA Astrophysics Data System}\n    }\n\nWork that has used MARTINI includes: `Oman et al. (2019)`_, `Mancera Piña et al. (2019)`_, `Chauhan et al. (2019)`_, `Mancera Piña et al. (2020)`_, `Santos-Santos et al. (2020)`_, `Glowacki et al. (2021)`_, `Bilimogga et al. (2022)`_, `Glowacki et al. (2022)`_, `Roper et al. (2023)`_, `Oman et al. (2024)`_, `Elson (2024)`_, `Perron-Cormier et al. (2025)`_, `Lin et al. (2026)`_, `Rabyang \u0026 Elson (2026)`_ and `Dado et al. (2026)`_. The ALMASim_ package (`Guglielmetti et al. 2023`_) builds on some of MARTINI's functionality. If your work has used MARTINI and is not listed here, please let me know (by email_ or github issue).\n\n.. _JOSS paper: https://doi.org/10.21105/joss.06860\n.. _ADS listing: https://ui.adsabs.harvard.edu/abs/2024JOSS....9.6860O\n.. _original paper: https://doi.org/10.1093/mnras/sty2687\n.. _also on ADS: https://ui.adsabs.harvard.edu/abs/2019MNRAS.482..821O/abstract\n.. _MARTINI entry: https://ascl.net/1911.005\n.. _ASCL: https://ascl.net\n.. _indexed on ADS: https://ui.adsabs.harvard.edu/abs/2019ascl.soft11005O/abstract\n.. _Zenodo DOI: https://zenodo.org/records/11198185\n.. _Oman et al. (2019): https://doi.org/10.1093/mnras/sty2687\n.. _Mancera Piña et al. (2019): https://doi.org/10.3847/2041-8213/ab40c7\n.. _Chauhan et al. (2019): https://doi.org/10.1093/mnras/stz2069\n.. _Mancera Piña et al. (2020): https://doi.org/10.1093/mnras/staa1256\n.. _Santos-Santos et al. (2020): https://doi.org/10.1093/mnras/staa1072\n.. _Glowacki et al. (2021): https://doi.org/10.1093/mnras/stab2279\n.. _Bilimogga et al. (2022): https://doi.org/10.1093/mnras/stac1213\n.. _Glowacki et al. (2022): https://doi.org/10.1093/mnras/stac2684\n.. _Roper et al. (2023): https://doi.org/10.1093/mnras/stad549\n.. _Oman et al. (2024): https://doi.org/10.1093/mnras/stae1772\n.. _ALMASim: https://github.com/MicheleDelliVeneri/ALMASim\n.. _Guglielmetti et al. 2023: https://doi.org/10.3390/psf2023009018\n.. _Elson (2024): https://doi.org/10.1093/mnras/stae2145\n.. _Perron-Cormier et al. (2025): https://doi.org/10.3847/1538-3881/ada567\n.. _Lin et al. (2026): https://doi.org/10.3847/1538-4357/ae29b7\n.. _Rabyang \u0026 Elson (2026): https://doi.org/10.48550/arXiv.2512.04582\n.. _Dado et al. (2026): https://doi.org/10.1093/mnras/stag356\n.. _email: mailto:kyle.a.oman@durham.ac.uk\n\n.. CITING_END_LABEL\n\nInstallation Notes\n==================\n\n.. INSTALLATION_NOTES_START_LABEL\n\nMARTINI works with ``python3`` (version ``3.10`` or higher).\n\nStable releases are available via PyPI_:\n\n.. code-block::\n\n    python3 -m pip install astromartini \n\nand the numbered releases (starting from ``2.0.0``) on github. The github main branch is actively developed: things will change, bugs will happen. Any feedback is greatly appreciated via github issues or kyle.a.oman@durham.ac.uk.\n\n.. _PyPI: https://pypi.org/project/astromartini/\n.. _kyle.a.oman@durham.ac.uk: mailto:kyle.a.oman@durham.ac.uk\n\nThe easiest way to install MARTINI is from PyPI by doing ``python3 -m pip install astromartini``. Output to ``.fits`` files is supported by default; if output to ``.hdf5`` format is desired use ``python3 -m pip install \"astromartini[hdf5_output]\"`` instead. This will also handle the installation of the required dependencies. Other optional features require additional dependencies hosted on PyPI. In particular, EAGLE, Illustris/TNG, Simba and FIRE users who wish to use the custom source modules for those simulations in MARTINI can automatically install the optional dependencies with ``python3 -m pip install \"astromartini[eaglesource]\"``, ``python3 -m pip install \"astromartini[simbasource]\"``, ``python3 -m pip install \"astromartini[tngsource]\"``, or ``python3 -m pip install \"astromartini[firesource]\"``.\n\n.. INSTALLATION_NOTES_END_LABEL\n\nInstalling from github\n----------------------\n\n.. GITHUB_INSTALLATION_NOTES_START_LABEL\n\nYou can browse releases_ that correspond to versions on PyPI (starting from 2.0.0) and download the source code. Unpack the zip file if necessary. If you're feeling adventurous or looking for a feature under development you can so browse branches_ and choose one to clone. In either case you should then be able to do ``python3 -m pip install \"martini/[optional]\"``, where ``optional`` should be replaced by a comma separated list of optional dependencies. If this fails check that ``martini/`` is a path pointing to the directory containing the ``pyproject.toml`` file for MARTINI. The currently available options are:\n\n- ``parallel``: Support for parallelizing the slower parts of Martini calculations.\n- ``hdf5_output``: Supports output to hdf5 files via the h5py package. Since h5py is hosted on PyPI, this option may be used when installing via PyPI.\n- ``colibresource``: Dependencies for the |martini.sources.ColibreSource| module, which greatly simplifies reading input from Colibre snapshots. Install swiftsimio_ and swiftgalaxy_.\n- ``eaglesource``: Dependencies for the |martini.sources.EAGLESource| module, which greatly simplifies reading input from EAGLE simulation snapshots. Installs my Hdecompose_ package, providing implementations of the `Rahmati et al. (2013)`_ method for computing netural hydrogen fractions and the `Blitz \u0026 Rosolowsky (2006)`_ method for atomic/molecular fractions. Also installs `my python-only version`_ of John Helly's `read_eagle`_ package for quick extraction of particles in a simulation sub-volume. ``h5py`` is also required.\n- ``firesource``: Dependencies for the |martini.sources.FIRESource| module, which greatly simplifies reading input from FIRE simulation snapshots. Installs the gizmo-analysis_, halo-analysis_ and utilities-awetzel_ packages.\n- ``magneticumsource``: Dependencies for the |martini.sources.MagneticumSource| module, which supports the Magneticum simulations via the `g3read`_ package.\n- ``simbasource``: Dependencies for the |martini.sources.SimbaSource| module, which greatly simplifies reading input from Simba snapshots. Installs ``h5py``.\n- ``swiftgalaxysource``: Dependencies for the |martini.sources.SWIFTGalaxySource| module, which greatly simplifies reading input from SWIFT simulations. Installs swiftsimio_ and swiftgalaxy_.\n- ``tngsource``: Dependencies for the |martini.sources.TNGSource| module, which greatly simplifies reading input from IllustrisTNG (and original Illustris) snapshots. Installs my Hdecompose_ package, providing implementations of the `Rahmati et al. (2013)`_ method for computing netural hydrogen fractions and the `Blitz \u0026 Rosolowsky (2006)`_ method for atomic/molecular fractions.\n- ``all``: All of the above.\n- ``testing``: Dependencies for code validation and testing (for developers).\n- ``docs``: Dependencies for building the documentation (for developers).\n- ``dev``: A full development environment with verything included in ``all``, ``testing`` and ``docs`` (for developers).\n\nThere is also a |martini.sources.SOSource| module with additional dependencies, which provides unofficial support for several simulation datasets hosted on specific systems. This is intended mostly for my own use, but APOSTLE, C-EAGLE/Hydrangea and Auriga users may contact_ me for further information.\n  \n.. _releases: https://github.com/kyleaoman/martini/releases\n.. _branches: https://github.com/kyleaoman/martini/branches\n.. _Hdecompose: https://github.com/kyleaoman/Hdecompose\n.. _`Rahmati et al. (2013)`: https://ui.adsabs.harvard.edu/abs/2013MNRAS.430.2427R/abstract\n.. _`Blitz \u0026 Rosolowsky (2006)`: https://ui.adsabs.harvard.edu/abs/2006ApJ...650..933B/abstract\n.. _`my python-only version`: https://github.com/kyleaoman/pyread_eagle\n.. _`read_eagle`: https://github.com/jchelly/read_eagle\n.. _g3read: https://github.com/aragagnin/g3read\n.. _contact: mailto:kyle.a.oman@durham.ac.uk\n.. _gizmo-analysis: https://pypi.org/project/gizmo-analysis/\n.. _halo-analysis: https://pypi.org/project/halo-analysis/\n.. _utilities-awetzel: https://pypi.org/project/utilities-awetzel\n.. _swiftsimio: https://swiftsimio.readthedocs.io\n.. _swiftgalaxy: https://swiftgalaxy.readthedocs.io\n\n.. GITHUB_INSTALLATION_NOTES_END_LABEL\n\nGetting started\n===============\n\n.. QUICKSTART_START_LABEL\n   \nSee the help for |martini.Martini| for an example script to configure MARTINI and create a datacube. This example can be run by doing:\n\n.. code-block:: python\n\n   python -c \"from martini import demo; demo()\"\n\nMARTINI has (so far) been successfully run on the output of these simulations:\n\n* EAGLE (also APOSTLE, C-EAGLE/Hydrangea)\n* IllustrisTNG (also Illustris, Auriga)\n* Simba\n* FIRE\n* Magneticum\n* MaGICC, Marvelous-Merian (and therefore in principle other N-body shop projects)\n* Colibre (test runs)\n\nI attempt to support publicly available simulations with a customized source module. If your simulation is public and not supported, please `contact me`_. Currently custom source modules exist for:\n\n.. _contact me: mailto:kyle.a.oman@durham.ac.uk\n\n* EAGLE (|martini.sources.EAGLESource|)\n* IllustrisTNG (|martini.sources.TNGSource|; also works with Illustris)\n* FIRE (|martini.sources.FIRESource|)\n* Simba (|martini.sources.SimbaSource|)\n* Magneticum (|martini.sources.MagneticumSource|)\n* SWIFT (|martini.sources.SWIFTGalaxySource|)\n* Colibre (|martini.sources.ColibreSource|)\n\nExample notebooks_ are available for supported, publicly available simulations.\n\n.. _notebooks: https://github.com/kyleaoman/martini/tree/main/examples\n\n.. QUICKSTART_END_LABEL\n\n.. |martini.Martini| replace:: `martini.Martini \u003chttps://martini.readthedocs.io/en/latest/modules/martini.martini.html#martini.martini.Martini\u003e`__\n.. |martini.sources.EAGLESource| replace:: `martini.sources.EAGLESource \u003chttps://martini.readthedocs.io/en/latest/modules/martini.sources.eagle_source.html#martini.sources.eagle_source.EAGLESource\u003e`__\n.. |martini.sources.TNGSource| replace:: `martini.sources.TNGSource \u003chttps://martini.readthedocs.io/en/latest/modules/martini.sources.tng_source.html#martini.sources.tng_source.TNGSource\u003e`__\n.. |martini.sources.FIRESource| replace:: `martini.sources.FIRESource \u003chttps://martini.readthedocs.io/en/latest/modules/martini.sources.fire_source.html#martini.sources.fire_source.FIRESource\u003e`__\t\t\t\t\t \n.. |martini.sources.MagneticumSource| replace:: `martini.sources.MagneticumSource \u003chttps://martini.readthedocs.io/en/latest/modules/martini.sources.magneticum_source.html#martini.sources.magneticum_source.MagneticumSource\u003e`__\n.. |martini.sources.SimbaSource| replace:: `martini.sources.SimbaSource \u003chttps://martini.readthedocs.io/en/latest/modules/martini.sources.simba_source.html#martini.sources.simba_source.SimbaSource\u003e`__\n.. |martini.sources.SOSource| replace:: `martini.sources.SOSource \u003chttps://martini.readthedocs.io/en/latest/modules/martini.sources.so_source.html#martini.sources.so_source.SOSource\u003e`__\n.. |martini.sources.ColibreSource| replace:: `martini.sources.ColibreSource \u003chttps://martini.readthedocs.io/en/latest/modules/martini.sources.colibre_source.html#martini.sources.colibre_source.ColibreSource\u003e`__\n.. |martini.sources.SWIFTGalaxySource| replace:: `martini.sources.SWIFTGalaxySource \u003chttps://martini.readthedocs.io/en/latest/modules/martini.sources.swiftgalaxy_source.html#martini.sources.swiftgalaxy_source.SWIFTGalaxySource\u003e`__\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkyleaoman%2Fmartini","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkyleaoman%2Fmartini","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkyleaoman%2Fmartini/lists"}