{"id":37073700,"url":"https://github.com/nanoporetech/qcat","last_synced_at":"2026-01-14T08:39:11.194Z","repository":{"id":55649347,"uuid":"157188701","full_name":"nanoporetech/qcat","owner":"nanoporetech","description":" qcat is a Python command-line tool for demultiplexing Oxford Nanopore reads from FASTQ files.","archived":true,"fork":false,"pushed_at":"2020-12-15T12:55:10.000Z","size":8248,"stargazers_count":81,"open_issues_count":24,"forks_count":18,"subscribers_count":18,"default_branch":"master","last_synced_at":"2025-09-29T09:18:03.191Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nanoporetech.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-11-12T09:31:31.000Z","updated_at":"2025-08-09T07:55:18.000Z","dependencies_parsed_at":"2022-08-15T05:31:10.070Z","dependency_job_id":null,"html_url":"https://github.com/nanoporetech/qcat","commit_stats":null,"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/nanoporetech/qcat","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nanoporetech%2Fqcat","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nanoporetech%2Fqcat/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nanoporetech%2Fqcat/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nanoporetech%2Fqcat/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nanoporetech","download_url":"https://codeload.github.com/nanoporetech/qcat/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nanoporetech%2Fqcat/sbom","scorecard":{"id":674090,"data":{"date":"2025-08-11","repo":{"name":"github.com/nanoporetech/qcat","commit":"5f0a5bcd927b10f95ddc70f0dd5fc222ef65f4f6"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":2.8,"checks":[{"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":"Code-Review","score":0,"reason":"Found 1/29 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":"Maintained","score":0,"reason":"project is archived","details":["Warn: Repository is archived."],"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":-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":"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":"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":"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":"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":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: Mozilla Public License 2.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":"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":"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":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: containerImage not pinned by hash: Dockerfile:1: pin your Docker image by updating ubuntu:16.04 to ubuntu:16.04@sha256:1f1a2d56de1d604801a9671f301190704c25d604a416f59e03c04f5c6ffee0d6","Info:   0 out of   1 containerImage 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":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 2 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-21T21:00:21.822Z","repository_id":55649347,"created_at":"2025-08-21T21:00:21.822Z","updated_at":"2025-08-21T21:00:21.822Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28414670,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T08:31:27.429Z","status":"ssl_error","status_checked_at":"2026-01-14T08:31:19.098Z","response_time":107,"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":[],"created_at":"2026-01-14T08:39:10.551Z","updated_at":"2026-01-14T08:39:11.186Z","avatar_url":"https://github.com/nanoporetech.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"![.](ONT_logo.png  \"Oxford Nanopore Technologies\")\n\n***Deprecation notice:*** \n\n*The demultiplexing within the Guppy basecaller should be used in preference\nto that found within this project. Guppy is rountinely updated and will\nprovide ongoing updates for new sequencing kits.*\n\n*Guppy can be downloaded from: https://community.nanoporetech.com/downloads*\n\n*This repository is now unsupported and we do not recommend its use. Please\ncontact Oxford Nanopore: support@nanoporetech.com for help with your\napplication if it is not possible to upgrade to our new resources, or we are\nmissing key features.*\n\n\n# qcat\n\n`qcat` is a Python command-line tool for demultiplexing Oxford Nanopore reads from FASTQ files. It accepts basecalled FASTQ files and splits the reads into into separate FASTQ files based on their barcode. Qcat makes the demultiplexing algorithms used in albacore/guppy and EPI2ME available to be used locally with FASTQ files. Currently qcat implements the EPI2ME algorithm. In the next version we will add the albacore/guppy algorithm.\n\n|Algorithm | Status |Description  |\n|--|--|--|\n|Guppy/Albacore | not yet available | Using this mode, qcat will produce demultiplexing results identical to Albacore. |\n| EPI2ME | available | Using this mode, qcat will produce demultiplexing results identical to EPI2ME's demultiplexing workflow |\n\nIn addition, qcat supports demultiplexing of datasets prepared using dual or combinatorial barcodes (see \"How to run qcat?\" section for more information). \n\nIf you want to demultiplex your reads during basecalling, please use [albacore](https://github.com/nanoporetech/albacore).\n\nChange log\n------------\n**v1.1.0**\n- Add RAB214\n\n**v1.0.7**\n- Fix PBC and PBK adapter trimming\n\n**v1.0.6**\n- Fixed issue with file names in dual barcoding mode\n- Resolved problem when using –tsv and -b at the same time\n- Min. read length filter added\n- Fixed YAMLLoadWarning\n\nRequirements\n------------\n* Linux or MacOS\n\nQuick start\n-----------\nFor the vast majority of datasets, it will be sufficient to run qcat using default parameters:\n```bash\n$ qcat -f \u003cfastq_file\u003e -b \u003coutput folder\u003e\n```\nAfter qcat finished, please check to summary output to verify that a barcode was assigned to most of the reads.\n\nInstallation \n------------\n**Conda (recommended)** \n\n[![Anaconda-Server Badge](https://anaconda.org/bioconda/qcat/badges/version.svg)](https://anaconda.org/bioconda/qcat)\n\nTo install qcat using conda, make sure you have [Miniconda3](https://conda.io/miniconda.html) installed and the [bioconda](https://bioconda.github.io/#install-conda) channels set up. After bioconda is set up, you can install qcat as follows:\n```bash\n$ conda install qcat\n```\n\n**PIP** \n\n[![PyPI version](https://badge.fury.io/py/qcat.svg)](https://badge.fury.io/py/qcat)\n\nIf you want to install qcat using pip, please make sure to use python3.\n```bash\n$ pip install --user qcat\n```\nTo install qcat using pip for all users on a system, run (requires root permissions):\n```bash\n$ pip install qcat\n```\n\n**Docker**\n\nIf you have [docker](https://docs.docker.com/install/) available on your computer, you can run qcat using the following command without any prior installation:\n```bash\n$ docker run -ti -v `pwd`:`pwd` -w `pwd` quay.io/biocontainers/qcat:1.0.0--py_0 qcat -f ./input_file.fastq -b ./output_folder/\n```\nWhen running qcat using the above command, the input and output folders have to be in the current working directory. If you want to read from or write to locations other than your working directory, please adjust the `-v` parameter accordingly.\n\n**Manually install from source**\n\n[![GitHub version](https://badge.fury.io/gh/nanoporetech%2Fqcat.svg)](https://badge.fury.io/gh/nanoporetech%2Fqcat)\n\nTo install qcat manually, please make sure you have python3 and git available, and install as follows:\n```bash\n$ git clone https://github.com/nanoporetech/qcat.git\n$ cd qcat\n$ python3 setup.py install\n```\n\nHow to run qcat?\n----------------\n\n**Demultiplexing multiple FASTQ files from a folder**\n```bash\n$ cat input_folder/*.fastq | qcat -b \u003coutput folder\u003e\n```\n**Demultiplexing a single FASTQ file**\n```bash\n$ qcat -f \u003cfastq_file\u003e -b \u003coutput folder\u003e\n```\n**Demultiplexing dual/combinatorial barcoding datasets**\n```bash\n$ qcat --dual -f \u003cfastq_file\u003e -b \u003coutput folder\u003e\n```\n\nWhat does the output look like?\n--------------------------------\n\n### Demultiplexing\nQcat will give you a summary of what barcodes where found and how many on the command line. For example:\n```bash\nAdapters detected in 191 of 193 reads\n         LWB001    191: |  ################### |  98.96 %\n           none      2: |                      |   1.04 %\nBarcodes detected in 191 of 193 adapters\n      barcode01    191: |  ################### |  98.96 %\n           none      2: |                      |   1.04 %\nDemultiplexing finished in 0.69s\n```\nIn addition, you will get an output folder with a single FASTQ file per barcode:\n```bash\n$ ls -R tmp/output/\nbarcode01.fastq none.fastq\n```\nThese files can be used for downstream analysis.\n\n\nFrequently asked questions\n--------------------------\n\n### Why are there different demultiplexing modes?\nCurrently Albacore and EPI2ME use different algorithms for demultiplexing. To provide maximum compatibility, qcat will support both algorithms. Eventually, both algorithms will be consolidated.  \n\n### What is the difference between porechop and qcat?\nQcat works similarity to porechop. However, porechop was recently deprecated.  \n\n### When I start qcat without any command-line parameters, it starts but does not terminate.\nWhen invoked without `-f/--fastq`, qcat will wait for input from standard in. Press Ctrl+C to stop qcat and either rerun wiht `-f/--fastq`:\n```bash\n$ qcat -f input_file.fastq -b output_folder/\n```\nor make sure to use a pipe to provide the input FASTQ file. E.g.: \n```bash\n$ cat input_file.fastq | qcat -b output_folder/\n```\n### Qcat expects a single input file, but I got several FASTQ files from basecalling.\n\nA simple option is to pipe all FASTQ files into qcat:\n```bash\n$ cat basecalled/*.fastq | qcat -b output_folder/\n```\nAlternatively, you can concatenate all FASTQ files into a single file first:\n```bash\n$ cat basecalled/*.fastq \u003e single_file.fastq\n```\nand use `-f/--fastq`:\n```bash\n$ qcat -f single_file.fastq -b output_folder/\n```\n### I want to use Albacore's algorithm for demultiplexing, but get a warning saying \"Demultiplexing mode guppy currently not supported. Falling back to epi2me.\"\n\nCurrently, Albacore's demultiplexing algorithm is only supported when running the qcat docker image. In the next version, we will support other ways of running Guppy/Albacore demultiplexing as well.\n\n### Can qcat trim adapters without barcodes?\n\nCurrently qcat only supports demultiplexing. However, in the future we plan to add a trimming only mode as well.\n\n### What is \"simple\" mode?\n\nIn simple mode qcat will only search for barcode sequences without trying to determine which barcoding kit was used. ONLY USE THIS MODE FOR TESTING/DEBUGGING PURPOSE. Albacore and EPI2ME mode will be faster and give you better results.\n\n### What barcoding kits does qcat support?\n\n| Kit  | Description  |\n|--|--|\n| Auto  | Auto detect kit |\n| RBK001  | Rapid barcoding kit |\n| RBK004 | Rapid barcoding kit v4 |\n| NBD103/NBD104 | Native barcoding kit with barcodes 1-12 |\n| NBD114  | Native barcoding kit with barcodes 13-24 |\n| NBD104/NBD114 | Native barcoding kit with barcodes 1-24 |\n| PBC001 | PCR Barcoding Kit with 12 barcodes |\n| PBC096 | PCR Barcoding Kit with 96 barcodes |\n| RPB004/RLB001  | Rapid PCR Barcoding Kit (SQK-RPB004) and Rapid Low Input by PCR Barcoding Kit |\n| PBK004/LWB001 | Low Input by PCR Barcoding Kit |\n| RAB204 | 16S Rapid Amplicon Barcoding Kit with 12 Barcodes  |\n| VMK001 | Voltrax Barcoding Kit with 4 barcodes |\n\n\nFull usage\n------------\n```\nusage: qcat [-h] [-V] [-l LOG] [--quiet] [-f FASTQ] [-b BARCODE_DIR]\n            [-o OUTPUT] [--min-score MIN_QUAL] [--detect-middle] [-t THREADS]\n            [--tsv] [--trim]\n            [-k {Auto,PBC096,RBK004,NBD104/NBD114,PBK004/LWB001,RBK001,RAB204,VMK001,PBC001,NBD114,NBD103/NBD104,DUAL,RPB004/RLB001}]\n            [--list-kits] [--guppy | --epi2me | --dual | --simple]\n            [--no-batch] [--filter-barcodes]\n            [--simple-barcodes {standard,extended}]\n\nPython command-line tool for demultiplexing Oxford Nanopore reads from FASTQ files\n\noptional arguments:\n  -h, --help            show this help message and exit\n  -V, --version         show program's version number and exit\n  -l LOG, --log LOG     Print debug information\n  --quiet               Don't print summary\n\nGeneral settings:\n  -f FASTQ, --fastq FASTQ\n                        Barcoded read file\n  -b BARCODE_DIR, --barcode_dir BARCODE_DIR\n                        If specified, qcat will demultiplex reads to this\n                        folder\n  -o OUTPUT, --output OUTPUT\n                        Output file trimmed reads will be written to (default:\n                        stdout).\n  --min-score MIN_QUAL  Minimum barcode score. Barcode calls with a lower\n                        score will be discarded. Must be between 0 and 100.\n                        (default: 60)\n  --detect-middle       Search for adapters in the whole read\n  -t THREADS, --threads THREADS\n                        Number of threads. Only works with in guppy mode\n  --tsv                 Prints a tsv file containing barcode information each\n                        read to stdout.\n  --trim                Remove adapter and barcode sequences from reads.\n  -k {Auto,PBC096,RBK004,NBD104/NBD114,PBK004/LWB001,RBK001,RAB204,VMK001,PBC001,NBD114,NBD103/NBD104,DUAL,RPB004/RLB001}, --kit {Auto,PBC096,RBK004,NBD104/NBD114,PBK004/LWB001,RBK001,RAB204,VMK001,PBC001,NBD114,NBD103/NBD104,DUAL,RPB004/RLB001}\n                        Sequencing kit. Specifying the correct kit will\n                        improve sensitivity and specificity and runtime\n                        (default: auto)\n  --list-kits           List all supported kits\n\nDemultiplexing modes:\n  --guppy               Use Guppy's demultiplexing algorithm (default: false)\n  --epi2me              Use EPI2ME's demultiplexing algorithm (default: true)\n  --dual                Use dual barcoding algorithm\n  --simple              Use simple demultiplexing algorithm. Only looks for\n                        barcodes, not for adapter sequences. Use only for\n                        testing purposes!\n\nEPI2ME options (only valid with --epi2me):\n  --no-batch            Don't use information from multiple reads for kit\n                        detection (default: false)\n  --filter-barcodes     Filter rare barcode calls when run in batch mode\n\nSimple options (only valid with --simple):\n  --simple-barcodes {standard,extended}\n                        Use 12 (standard) or 96 (extended) barcodes for\n                        demultiplexing\n```\n\n**Licence and Copyright**\n\n© 2018 Oxford Nanopore Technologies Ltd.\n\n`qcat` is distributed under the terms of the Mozilla Public License 2.0.\n\n**Research Release**\n\nResearch releases are provided as technology demonstrators to provide early\naccess to features or stimulate Community development of tools. Support for\nthis software will be minimal and is only provided directly by the developers.\nFeature requests, improvements, and discussions are welcome and can be\nimplemented by forking and pull requests. However much as we would\nlike to rectify every issue and piece of feedback users may have, the \ndevelopers may have limited resource for support of this software. Research\nreleases may be unstable and subject to rapid iteration by Oxford Nanopore\nTechnologies.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnanoporetech%2Fqcat","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnanoporetech%2Fqcat","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnanoporetech%2Fqcat/lists"}