{"id":22778918,"url":"https://github.com/ayaanhossain/oligopool","last_synced_at":"2026-02-22T04:04:31.241Z","repository":{"id":258192202,"uuid":"285644682","full_name":"ayaanhossain/oligopool","owner":"ayaanhossain","description":"Oligopool Calculator - Automated design and analysis of oligo pool libraries","archived":false,"fork":false,"pushed_at":"2026-02-16T00:20:49.000Z","size":71396,"stargazers_count":6,"open_issues_count":0,"forks_count":1,"subscribers_count":3,"default_branch":"master","last_synced_at":"2026-02-16T01:42:09.735Z","etag":null,"topics":["assembly","barcode","count","design","gibson-assembly","library","motif","mpra","ngs","oligo","oligo-design","pcr","pool","primer","search","spacer","synthetic-biology","yaml"],"latest_commit_sha":null,"homepage":"","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/ayaanhossain.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2020-08-06T18:36:58.000Z","updated_at":"2026-02-16T00:20:53.000Z","dependencies_parsed_at":"2025-04-15T14:24:48.907Z","dependency_job_id":null,"html_url":"https://github.com/ayaanhossain/oligopool","commit_stats":null,"previous_names":["ayaanhossain/oligopool"],"tags_count":7,"template":false,"template_full_name":null,"purl":"pkg:github/ayaanhossain/oligopool","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ayaanhossain%2Foligopool","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ayaanhossain%2Foligopool/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ayaanhossain%2Foligopool/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ayaanhossain%2Foligopool/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ayaanhossain","download_url":"https://codeload.github.com/ayaanhossain/oligopool/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ayaanhossain%2Foligopool/sbom","scorecard":{"id":220385,"data":{"date":"2025-08-11","repo":{"name":"github.com/ayaanhossain/oligopool","commit":"801d50a371edd7451a78eec204a09641a10c95d8"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":2.8,"checks":[{"name":"Code-Review","score":0,"reason":"Found 0/30 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":-1,"reason":"no workflows found","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":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"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":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"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":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"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":"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":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"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:0","Info: FSF or OSI recognized license: GNU General Public License v3.0: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"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":"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":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: containerImage not pinned by hash: dockerfile:2: pin your Docker image by updating ubuntu:latest to ubuntu:latest@sha256:7c06e91f61fa88c08cc74f7e1b7c69ae24910d745357e0dfe1d2c0322aaf20f9","Warn: pipCommand not pinned by hash: dockerfile:26","Warn: pipCommand not pinned by hash: dockerfile:32","Info:   0 out of   1 containerImage dependencies pinned","Info:   0 out of   2 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"}}]},"last_synced_at":"2025-08-17T02:20:16.584Z","repository_id":258192202,"created_at":"2025-08-17T02:20:16.584Z","updated_at":"2025-08-17T02:20:16.584Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29704420,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-22T03:17:42.375Z","status":"ssl_error","status_checked_at":"2026-02-22T03:17:31.622Z","response_time":110,"last_error":"SSL_read: 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":["assembly","barcode","count","design","gibson-assembly","library","motif","mpra","ngs","oligo","oligo-design","pcr","pool","primer","search","spacer","synthetic-biology","yaml"],"created_at":"2024-12-11T20:07:14.679Z","updated_at":"2026-02-22T04:04:31.218Z","avatar_url":"https://github.com/ayaanhossain.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch1 align=\"center\"\u003e\n    \u003ca href=\"https://github.com/ayaanhossain/oligopool/\" style=\"text-decoration: none !important;\"\u003e\n        \u003cimg src=\"https://raw.githubusercontent.com/ayaanhossain/repfmt/main/oligopool/img/logo.svg\" alt=\"Oligopool Calculator\" width=\"460\" class=\"center\"/\u003e\n    \u003c/a\u003e\n\u003c/h1\u003e\n\n\u003ch4\u003e\u003cp align=\"center\"\u003eVersion: 2026.02.16\u003c/p\u003e\u003c/h4\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"#features\" style=\"text-decoration: none !important;\"\u003e✨ Features\u003c/a\u003e -\n  \u003ca href=\"#installation\" style=\"text-decoration: none !important;\"\u003e📦 Installation\u003c/a\u003e -\n  \u003ca href=\"#getting-started\" style=\"text-decoration: none !important;\"\u003e🚀 Getting Started\u003c/a\u003e -\n  \u003ca href=\"https://github.com/ayaanhossain/oligopool/blob/master/docs/docs.md\" style=\"text-decoration: none !important;\"\u003e📚 Docs\u003c/a\u003e -\n  \u003ca href=\"https://github.com/ayaanhossain/oligopool/blob/master/docs/api.md\" style=\"text-decoration: none !important;\"\u003e📋 API\u003c/a\u003e -\n  \u003ca href=\"#command-line-interface-cli\" style=\"text-decoration: none !important;\"\u003e💻 CLI\u003c/a\u003e -\n  \u003ca href=\"#citation\" style=\"text-decoration: none !important;\"\u003e📖 Citation\u003c/a\u003e -\n  \u003ca href=\"#license\" style=\"text-decoration: none !important;\"\u003e⚖️ License\u003c/a\u003e\n\u003c/p\u003e\n\n`Oligopool Calculator` is a Swiss-army knife for [oligo pool libraries](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC9300125/): a unified toolkit for high-throughput design, assembly, compression, and analysis of massively parallel assays, designed to integrate seamlessly with Python, the CLI, Jupyter, containers, and AI-assisted workflows.\n\nDesign modules generate primers, barcodes, motifs/anchors, and spacers; assembly modules split/pad long constructs; Degenerate Mode compresses similar sequences into IUPAC-degenerate oligos for cost-efficient synthesis (often useful for selection assays); and Analysis Mode packs and counts barcoded reads for activity quantification.\n\n`Oligopool Calculator` has been used to build libraries of tens of thousands of promoters (see [here](https://www.nature.com/articles/s41467-022-32829-5), and [here](https://www.nature.com/articles/s41587-020-0584-2)), ribozymes, and mRNA stability elements (see [here](https://www.nature.com/articles/s41467-024-54059-7)). It has been benchmarked to design pools containing millions of oligos and to process hundreds of millions of sequencing reads per hour on low-cost desktop-grade hardware.\n\nTo learn more, please check out [our paper in ACS Synthetic Biology](https://pubs.acs.org/doi/10.1021/acssynbio.4c00661).\n\n\u003ch1 align=\"center\"\u003e\n    \u003ca href=\"https://github.com/ayaanhossain/oligopool/\" style=\"text-decoration: none !important;\"\u003e\n        \u003cimg src=\"https://raw.githubusercontent.com/ayaanhossain/repfmt/refs/heads/main/oligopool/img/workflow.svg\" alt=\"Oligopool Calculator Workflow\" width=\"3840\" class=\"center\"/\u003e\n    \u003c/a\u003e\n\u003c/h1\u003e\n\n**Design and analysis of oligo pool variants using `Oligopool Calculator`.** **(a)** In `Design Mode`, `Oligopool Calculator` generates optimized `barcode`s, `primer`s, `spacer`s, and `motif`s. `Assembly Mode` can `split` longer oligos into shorter `pad`ded fragments for synthesis and assembly. `Degenerate Mode` can `compress` similar variants into IUPAC-degenerate oligos for cost-efficient synthesis or selection-based discovery workflows. **(b)** Once the library is assembled and cloned, barcoded amplicon sequencing data can be processed via `Analysis Mode` for characterization. `Analysis Mode` proceeds by first `index`ing one or more sets of barcodes, `pack`ing the reads, and then producing count matrices either using `acount` (association counting) or `xcount` (combinatorial counting).\n\n\u003ca id=\"features\"\u003e\u003c/a\u003e\n## ✨ Features\n\n- 🧬 **Design mode:** constraint-based design of barcodes, primers, motifs/anchors, and spacers with background screening and utilities (`barcode`, `primer`, `motif`, `spacer`, `background`, `merge`, `revcomp`, `join`, `final`).\n- 🔧 **Assembly mode:** fragment long oligos into overlapping pieces and add Type IIS primer pads for scarless assembly (`split`, `pad`).\n- 🧪 **Degenerate mode:** compress variant libraries with low mutational diversity into IUPAC-degenerate oligos for cost-efficient synthesis and selection-based characterization (`compress`, `expand`).\n- 📈 **Analysis mode:** fast NGS-based activity quantification with read indexing, packing, and barcode/associate counting (`index`, `pack`, `acount`, `xcount`) extensible with callback methods (via Python library).\n- ✅ **QC mode:** validate and inspect constraints and outputs (`lenstat`, `verify`, `inspect`).\n- 🔁 **Iterative \u0026 multiplexed workflows:** `patch_mode` for extending existing pools, cross-set barcode separation, and per-group primer design with cross-compatibility screening.\n- ⚡ **Performance:** scalable to very large libraries and high-throughput sequencing datasets, with published benchmarks demonstrating efficient design and analysis on commodity hardware (see paper).\n- 🔒 **Rich constraints:** IUPAC sequence constraints, motif exclusion, repeat screening, Hamming-distance barcodes, and primer thermodynamic constraints (including optional paired-primer Tm matching).\n- 📊 **DataFrame-centric:** modules operate on CSV/DataFrames and return updated tables plus `stats`; the CLI can emit JSON and supports reproducible stochastic runs (`random_seed`).\n- 💻 **CLI + library-first:** full-featured command-line interface with YAML config files, multi-step pipelines (sequential or parallel DAG), **and** a composable Python API for interactive use in scripts and Jupyter notebooks.\n- 🤖 **AI-assisted design:** agent-ready documentation for Claude, ChatGPT, and Copilot.\n\n\n\u003ca id=\"ai-assisted-design\"\u003e\u003c/a\u003e\n## 🤖 AI-Assisted Design\n\n`Oligopool Calculator` is optimized for AI-assisted workflows. Either share the [`docs/agent-skills.md`](https://github.com/ayaanhossain/oligopool/blob/master/docs/agent-skills.md) file with your agent, or share the following raw URL along with a suitable prompt, for direct parsing.\n```\nhttps://raw.githubusercontent.com/ayaanhossain/oligopool/refs/heads/master/docs/agent-skills.md\n```\nEnsure that your AI/agent explores this document thoroughly. Afterwards, you can chat about the package, your specific design goals, and have the agent plan and execute the design and analysis pipelines.\n\n\n\u003ca id=\"installation\"\u003e\u003c/a\u003e\n## 📦 Installation\n\n`Oligopool Calculator` is a `Python 3.10+`-exclusive library.\n\nOn `Linux`, `macOS`, and `Windows Subsystem for Linux`, you can install `Oligopool Calculator` from [PyPI](https://pypi.org/project/oligopool/), where it is published as the `oligopool` package.\n```bash\n$ pip install --upgrade oligopool # Installs and/or upgrades oligopool\n```\nThis also installs the command line tools: `oligopool` and `op`.\n\nOr install it directly from GitHub:\n```bash\n$ pip install git+https://github.com/ayaanhossain/oligopool.git\n```\nBoth approaches should install all dependencies automatically.\n\u003e **Note** The GitHub version will always be updated with all recent fixes. The PyPI version should be more stable.\n\nIf you are on `Windows` or simply prefer to, `Oligopool Calculator` can also be used via `Docker` (please see [the notes](https://github.com/ayaanhossain/oligopool/blob/master/docs/docker-notes.md)).\n\nSuccessful installation will look like this.\n```python\n$ python\n\u003e\u003e\u003e import oligopool as op\n\u003e\u003e\u003e op.__version__\n'2026.02.16'\n\u003e\u003e\u003e\n```\n\n\u003ca id=\"getting-started\"\u003e\u003c/a\u003e\n## 🚀 Getting Started\n\n`Oligopool Calculator` is carefully designed, easy to use, and stupid fast.\n\nYou can import the library and use its various functions either in a script or interactively inside a `Jupyter` environment. Use `help(...)` to read the docs as necessary and follow along.\n\nThe [`examples`](https://github.com/ayaanhossain/oligopool/tree/master/examples) directory includes a [design parser](https://github.com/ayaanhossain/oligopool/tree/master/examples/design-assembly-parser), a [library compressor](https://github.com/ayaanhossain/oligopool/tree/master/examples/library-compressor), an [analysis pipeline](https://github.com/ayaanhossain/oligopool/tree/master/examples/analysis-pipeline), and a complete [CLI YAML pipeline](https://github.com/ayaanhossain/oligopool/tree/master/examples/cli-yaml-pipeline).\n\nIf you want the full end-to-end walkthrough, start with the notebook: [`Oligopool Calculator` in action](https://github.com/ayaanhossain/oligopool/blob/master/examples/OligopoolCalculatorInAction.ipynb).\n\n**Documentation:**\n- [User Guide](https://github.com/ayaanhossain/oligopool/blob/master/docs/docs.md) - Comprehensive tutorials, examples, and workflows\n- [API Reference](https://github.com/ayaanhossain/oligopool/blob/master/docs/api.md) - Complete parameter documentation for all modules\n- [AI Agent Guide](https://github.com/ayaanhossain/oligopool/blob/master/docs/agent-skills.md) - Decision trees, best practices, and gotchas for AI-assisted design (Claude, ChatGPT, Copilot)\n- [Docker Guide](https://github.com/ayaanhossain/oligopool/blob/master/docs/docker-notes.md) - Run `oligopool` in a container for cross-platform consistency\n\n```python\n$ python\n\u003e\u003e\u003e\n\u003e\u003e\u003e import oligopool as op\n\u003e\u003e\u003e help(op)\n...\n    Automated design and analysis of oligo pool libraries for\n    high-throughput genomics and synthetic biology applications.\n\n    Design Mode - build synthesis-ready oligo architectures\n        barcode     orthogonal barcodes with Hamming distance guarantees\n        primer      Tm-optimized primers with off-target screening\n        motif       sequence motifs or anchors\n        spacer      neutral fill to reach target length\n        background  k-mer database for off-target screening\n        merge       collapse columns into single element\n        revcomp     reverse complement a column range\n        join        join two tables on ID with ordered insertion\n        final       concatenate into synthesis-ready oligos\n\n    Assembly Mode - fragment long oligos for assembly\n        split       fragment oligos into overlapping pieces\n        pad         Type IIS primer pads for scarless excision\n\n    Degenerate Mode - compress variant libraries for synthesis\n        compress    reduce similar variants to IUPAC-degenerate oligos\n        expand      expand IUPAC-degenerate oligos into concrete sequences\n\n    Analysis Mode - quantify variants from NGS reads\n        index       index barcodes and associated variants\n        pack        filter/merge/deduplicate FastQ reads\n        acount      association counting (barcode + variant verification)\n        xcount      combinatorial counting (single or multiple barcodes)\n\n    QC Mode - validate and inspect outputs\n        lenstat     length statistics and free-space check\n        verify      verify length, motif, and background conflicts\n        inspect     inspect background/index/pack artifacts\n\n    Advanced\n        vectorDB    LevelDB k-mer storage\n        Scry        1-NN barcode classifier\n\n    Usage\n        \u003e\u003e\u003e import oligopool as op\n        \u003e\u003e\u003e df, stats = op.barcode(input_data='variants.csv', ...)\n        \u003e\u003e\u003e help(op.barcode)  # module docs\n\n    Modules return (DataFrame, stats). Chain them iteratively; use patch_mode=True\n    to extend pools without overwriting existing designs.\n\n    CLI: `op` | `op COMMAND` | Docs: https://github.com/ayaanhossain/oligopool\n...\n```\n\n\u003ca id=\"command-line-interface-cli\"\u003e\u003c/a\u003e\n## 💻 Command Line Interface (CLI)\n\nThe `oligopool` package installs a CLI with two equivalent entry points: `oligopool` and `op`.\n\n```bash\n$ op\n$ op cite\n$ op manual\n$ op manual topics\n$ oligopool manual barcode\n```\n\nRun `op` with no arguments to see the command list, and run `op COMMAND` to see command-specific options.\n```bash\n$ op\n\noligopool v2026.02.16\nby ah\n\nOligopool Calculator is a suite of algorithms for\nautomated design and analysis of oligo pool libraries.\n\nusage: oligopool COMMAND --argument=\u003cvalue\u003e ...\n\nCOMMANDS Available:\n\n    manual      show module documentation\n    cite        show citation information\n\n    pipeline    execute multi-step pipeline from config\n\n    barcode     orthogonal barcodes with cross-set separation\n    primer      thermodynamic primers with optional Tm matching\n    motif       design or add motifs/anchors\n    spacer      neutral spacers to meet length targets\n\n    background  build k-mer background database\n\n    split       break long oligos into overlapping fragments\n    pad         add excisable primer pads for scarless assembly\n\n    merge       collapse contiguous columns\n    revcomp     reverse-complement a column range\n    join        join two oligo pool tables on ID\n\n    lenstat     compute length stats and free space\n    verify      detect length, motif, and background conflicts\n\n    final       finalize into synthesis-ready oligos\n\n    compress    compress sequences into IUPAC-degenerate oligos\n    expand      expand IUPAC oligos to concrete sequences\n\n    index       build barcode/associate index\n    pack        preprocess and deduplicate FastQ reads\n    acount      association counting (single index)\n    xcount      combinatorial counting (multiple indexes)\n\n    inspect     inspect non-CSV artifacts\n\n    complete    print or install shell completion\n\nRun \"oligopool COMMAND\" to see command-specific options.\n```\n\nInstall tab-completion to blaze through interactive CLI use (recommended).\n```bash\n$ op complete --install          # auto-detect shell (restart your shell)\n$ op complete --install bash     # or: zsh|fish\n```\n\nFor detailed CLI behavior (output basenames, suffixing, type aliases, sequence-constraint shorthand, and split output defaults), see the [CLI-Specific Notes](https://github.com/ayaanhossain/oligopool/blob/master/docs/docs.md#cli-specific-notes).\n\n### YAML Pipelines\n\nDefine entire workflows in a single YAML config file and execute with one command:\n```bash\n$ op pipeline --config pipeline.yaml\n$ op pipeline --config pipeline.yaml --dry-run  # validate first\n```\nPipelines support sequential or parallel DAG execution, where independent steps run concurrently.\n\nExample (single design output, serial chain):\n```yaml\npipeline:\n  name: \"MPRA Design (Serial)\"\n  steps:\n    - primer\n    - barcode\n    - spacer\n    - final\n\nprimer:\n  input_data: \"variants.csv\"\n  output_file: \"01_primer\"\n  primer_type: forward\n  # ...\n```\n\nExample (parallel DAG, best fit for analysis):\n```yaml\npipeline:\n  name: \"Counting DAG (Parallel)\"\n  steps:\n    - name: index_bc1\n      command: index\n    - name: index_bc2\n      command: index\n    - name: pack_reads\n      command: pack\n    - name: count\n      command: xcount\n      after: [index_bc1, index_bc2, pack_reads]\n\n# (Configs for index/pack/xcount omitted here for brevity.)\n```\n\nWorking examples live in `examples/cli-yaml-pipeline`. Full pipeline rules live in [Config Files](https://github.com/ayaanhossain/oligopool/blob/master/docs/docs.md#config-files).\n\n\u003ca id=\"citation\"\u003e\u003c/a\u003e\n## 📖 Citation\n\nIf you use `Oligopool Calculator` in your research publication, please cite our paper.\n\n```\nHossain A, Cetnar DP, LaFleur TL, McLellan JR, Salis HM.\nAutomated Design of Oligopools and Rapid Analysis of Massively Parallel Barcoded Measurements.\nACS Synth Biol. 2024;13(12):4218-4232. doi:10.1021/acssynbio.4c00661\n```\n\nBibTeX:\n```bibtex\n@article{Hossain2024Oligopool,\n  title   = {Automated Design of Oligopools and Rapid Analysis of Massively Parallel Barcoded Measurements},\n  author  = {Hossain, Ayaan and Cetnar, Daniel P. and LaFleur, Travis L. and McLellan, James R. and Salis, Howard M.},\n  journal = {ACS Synthetic Biology},\n  year    = {2024},\n  volume  = {13},\n  number  = {12},\n  pages   = {4218--4232},\n  doi     = {10.1021/acssynbio.4c00661}\n}\n```\n\nYou can read the paper online for free at [ACS Synthetic Biology](https://doi.org/10.1021/acssynbio.4c00661).\n* PMCID: `PMC11669329`\n* PMID: `39641628`\n\n\u003ca id=\"license\"\u003e\u003c/a\u003e\n## ⚖️ License\n\n`Oligopool Calculator` (c) 2026 Ayaan Hossain.\n\n`Oligopool Calculator` is an **open-source software** under the [GPL-3.0](https://opensource.org/license/gpl-3-0) license.\n\nSee [LICENSE](https://github.com/ayaanhossain/oligopool/blob/master/LICENSE) file for more details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fayaanhossain%2Foligopool","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fayaanhossain%2Foligopool","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fayaanhossain%2Foligopool/lists"}