{"id":15442829,"url":"https://github.com/jlsteenwyk/orthosnap","last_synced_at":"2026-02-23T01:15:52.106Z","repository":{"id":45763327,"uuid":"343117827","full_name":"JLSteenwyk/orthosnap","owner":"JLSteenwyk","description":"a tree splitting and pruning algorithm for retrieving single-copy orthologs from gene family trees","archived":false,"fork":false,"pushed_at":"2025-02-15T23:00:08.000Z","size":117784,"stargazers_count":25,"open_issues_count":0,"forks_count":1,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-04-12T09:53:03.327Z","etag":null,"topics":["bioinformatics","evolution","evolutionary-biology","genomics","orthology","orthology-assignments","orthology-inference","phylogenetics","phylogenomics","python"],"latest_commit_sha":null,"homepage":"https://jlsteenwyk.com/orthosnap/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/JLSteenwyk.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2021-02-28T13:55:43.000Z","updated_at":"2025-02-15T22:59:44.000Z","dependencies_parsed_at":"2023-01-29T19:45:42.555Z","dependency_job_id":"67c6a5c5-9c1a-40e2-9dce-ee66e49256cb","html_url":"https://github.com/JLSteenwyk/orthosnap","commit_stats":{"total_commits":97,"total_committers":2,"mean_commits":48.5,"dds":0.04123711340206182,"last_synced_commit":"d2062c1d19f85c9810211a6d12ac4a9821fdc8e5"},"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JLSteenwyk%2Forthosnap","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JLSteenwyk%2Forthosnap/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JLSteenwyk%2Forthosnap/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JLSteenwyk%2Forthosnap/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/JLSteenwyk","download_url":"https://codeload.github.com/JLSteenwyk/orthosnap/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":249239251,"owners_count":21235824,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["bioinformatics","evolution","evolutionary-biology","genomics","orthology","orthology-assignments","orthology-inference","phylogenetics","phylogenomics","python"],"created_at":"2024-10-01T19:30:34.501Z","updated_at":"2026-02-23T01:15:51.831Z","avatar_url":"https://github.com/JLSteenwyk.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/jlsteenwyk/orthosnap\"\u003e\n    \u003cimg src=\"https://raw.githubusercontent.com/JLSteenwyk/orthosnap/master/docs/_static/img/logo.jpg\" alt=\"Logo\" width=\"400\"\u003e\n  \u003c/a\u003e\n  \u003cp align=\"center\"\u003e\n    \u003ca href=\"https://jlsteenwyk.com/orthosnap/\"\u003eDocs\u003c/a\u003e\n    ·\n    \u003ca href=\"https://github.com/jlsteenwyk/orthosnap/issues\"\u003eReport Bug\u003c/a\u003e\n    ·\n    \u003ca href=\"https://github.com/jlsteenwyk/orthosnap/issues\"\u003eRequest Feature\u003c/a\u003e\n  \u003c/p\u003e\n    \u003cp align=\"center\"\u003e\n        \u003ca href=\"https://github.com/JLSteenwyk/orthosnap/actions\" alt=\"Build\"\u003e\n            \u003cimg src=\"https://img.shields.io/github/actions/workflow/status/JLSteenwyk/orthosnap/ci.yml?branch=master\"\u003e\n        \u003c/a\u003e\n        \u003ca href=\"https://codecov.io/gh/JLSteenwyk/orthosnap\"\u003e\n          \u003cimg src=\"https://codecov.io/gh/JLSteenwyk/orthosnap/branch/master/graph/badge.svg?token=FX66FUET0L\"/\u003e\n        \u003c/a\u003e\n        \u003ca href=\"https://github.com/JLSteenwyk/orthosnap/graphs/contributors\" alt=\"Contributors\"\u003e\n            \u003cimg src=\"https://img.shields.io/github/contributors/JLSteenwyk/orthosnap\"\u003e\n        \u003c/a\u003e\n        \u003ca href=\"https://bsky.app/profile/jlsteenwyk.bsky.social\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n          \u003cimg src=\"https://img.shields.io/badge/Bluesky-0285FF?logo=bluesky\u0026logoColor=fff\"\u003e\n        \u003c/a\u003e\n        \u003cbr /\u003e\n        \u003ca href=\"https://pepy.tech/badge/orthosnap\"\u003e\n          \u003cimg src=\"https://static.pepy.tech/personalized-badge/orthosnap?period=total\u0026units=international_system\u0026left_color=grey\u0026right_color=blue\u0026left_text=PyPi%20Downloads\"\u003e\n        \u003c/a\u003e\n        \u003ca href=\"https://lbesson.mit-license.org/\" alt=\"License\"\u003e\n            \u003cimg src=\"https://img.shields.io/badge/License-MIT-blue.svg\"\u003e\n        \u003c/a\u003e\n        \u003ca href=\"https://pypi.org/project/orthosnap/\" alt=\"PyPI - Python Version\"\u003e\n            \u003cimg src=\"https://img.shields.io/pypi/pyversions/orthosnap\"\u003e\n        \u003c/a\u003e\n        \u003ca href=\"https://jlsteenwyk.com/publication_pdfs/2022_Steenwyk_etal_PLoS_Biology.pdf\"\u003e\n          \u003cimg src=\"https://zenodo.org/badge/DOI/10.1371/journal.pbio.3001827.svg\"\u003e\n        \u003c/a\u003e\n    \u003c/p\u003e\n\u003c/p\u003e\n\nOrthoSNAP is a tree splitting and pruning tool for retrieving single-copy orthologous subgroups (SNAP-OGs) from larger gene families.\n\nIf you found OrthoSNAP useful, please cite:\n*OrthoSNAP: a tree splitting and pruning algorithm for retrieving single-copy orthologs from gene family trees*. Steenwyk et al. 2022, PLOS Biology. DOI: [10.1371/journal.pbio.3001827](https://jlsteenwyk.com/publication_pdfs/2022_Steenwyk_etal_PLoS_Biology.pdf).\n\n---\n\nFull usage documentation and tutorial:\n[https://jlsteenwyk.com/orthosnap/](https://jlsteenwyk.com/orthosnap/)\n\n## What's new in v1.6.0\n\nCompared to v1.5.0 (plotting + performance improvements), v1.6.0 adds workflow-scale and reproducibility features:\n\n- `--manifest`: batch execution from TSV/CSV manifests.\n- `--validate-only`: preflight input concordance checks without extraction.\n- `--structured-output`: machine-readable run metadata (`.run.json`) and subgroup summaries (`.subgroups.tsv`).\n- `--occupancy-count` / `--occupancy-fraction`: explicit occupancy semantics.\n- `--resume`: skip rerunning completed analyses.\n- `--bootstrap-trees` + `--consensus-min-frequency` + `--consensus-trees`: consensus subgrouping across bootstrap tree uncertainty.\n\nCompared to older releases:\n\n- v1.5.0 focused on plotting and runtime optimization.\n- v1.3.2 introduced configurable delimiters.\n- v1.2.0 added inparalog handling reports.\n- v1.0.0 and earlier focused on core pruning behavior.\n\n## Installation\n\n### Install with pip (recommended)\n\n```shell\npython -m venv .venv\nsource .venv/bin/activate\npip install orthosnap\n```\n\n### Install from source\n\n```shell\ngit clone https://github.com/JLSteenwyk/orthosnap.git\ncd orthosnap\npython -m venv .venv\nsource .venv/bin/activate\nmake install\n```\n\n### Install with conda\n\n```shell\nconda install -c jlsteenwyk orthosnap\n```\n\nConda package details:\nhttps://anaconda.org/jlsteenwyk/orthosnap\n\n## Quick start\n\n```shell\northosnap -f orthogroup_of_genes.faa -t phylogeny_of_orthogroup_of_genes.tre\n```\n\nGenerate a color-coded SNAP-OG assignment plot for the full tree:\n\n```shell\northosnap -f orthogroup_of_genes.faa -t phylogeny_of_orthogroup_of_genes.tre -ps\n```\n\nChoose plot format (`png` default, `pdf` or `svg`):\n\n```shell\northosnap -f orthogroup_of_genes.faa -t phylogeny_of_orthogroup_of_genes.tre -ps -pf svg\n```\n\nShow all CLI options:\n\n```shell\northosnap -h\n```\n\nRun validation checks only (no subgroup extraction):\n\n```shell\northosnap -f orthogroup_of_genes.faa -t phylogeny_of_orthogroup_of_genes.tre --validate-only\n```\n\nWrite structured provenance outputs (`.run.json` and `.subgroups.tsv`):\n\n```shell\northosnap -f orthogroup_of_genes.faa -t phylogeny_of_orthogroup_of_genes.tre --structured-output\n```\n\nResume an interrupted or previously completed run:\n\n```shell\northosnap -f orthogroup_of_genes.faa -t phylogeny_of_orthogroup_of_genes.tre --resume\n```\n\nUse explicit occupancy semantics:\n\n```shell\northosnap -f orthogroup_of_genes.faa -t phylogeny_of_orthogroup_of_genes.tre --occupancy-count 5\northosnap -f orthogroup_of_genes.faa -t phylogeny_of_orthogroup_of_genes.tre --occupancy-fraction 0.5\n```\n\nRun many orthogroups from a manifest (TSV/CSV with `tree` and `fasta` columns):\n\n```shell\northosnap --manifest runs.tsv --structured-output -op results/\n```\n\nRun bootstrap consensus mode using a file of tree paths (one per line):\n\n```shell\northosnap -f orthogroup_of_genes.faa -t reference.treefile --bootstrap-trees bootstrap_paths.txt --consensus-min-frequency 0.5\n```\n\nAlso write consensus Newick trees:\n\n```shell\northosnap -f orthogroup_of_genes.faa -t reference.treefile --bootstrap-trees bootstrap_paths.txt --consensus-trees\n```\n\n## Support\n\nIf installation fails in a clean virtual environment, contact Jacob L. Steenwyk via:\n- Email: https://jlsteenwyk.com/contact.html\n- Twitter/X: https://twitter.com/jlsteenwyk\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjlsteenwyk%2Forthosnap","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjlsteenwyk%2Forthosnap","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjlsteenwyk%2Forthosnap/lists"}