diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index b290e09..237c9ed 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -1,20 +1,21 @@ { + "$schema": "https://raw.githubusercontent.com/devcontainers/spec/main/schemas/devContainer.schema.json", "name": "nfcore", - "image": "nfcore/gitpod:latest", - "remoteUser": "gitpod", - "runArgs": ["--privileged"], + "image": "nfcore/devcontainer:latest", - // Configure tool-specific properties. - "customizations": { - // Configure properties specific to VS Code. - "vscode": { - // Set *default* container specific settings.json values on container create. - "settings": { - "python.defaultInterpreterPath": "/opt/conda/bin/python" - }, + "remoteUser": "root", + "privileged": true, - // Add the IDs of extensions you want installed when the container is created. - "extensions": ["ms-python.python", "ms-python.vscode-pylance", "nf-core.nf-core-extensionpack"] - } + "remoteEnv": { + // Workspace path on the host for mounting with docker-outside-of-docker + "LOCAL_WORKSPACE_FOLDER": "${localWorkspaceFolder}" + }, + + "onCreateCommand": "./.devcontainer/setup.sh", + + "hostRequirements": { + "cpus": 4, + "memory": "16gb", + "storage": "32gb" } } diff --git a/.devcontainer/setup.sh b/.devcontainer/setup.sh new file mode 100755 index 0000000..a4d4e63 --- /dev/null +++ b/.devcontainer/setup.sh @@ -0,0 +1,13 @@ +#!/usr/bin/env bash + +# Customise the terminal command prompt +echo "export PROMPT_DIRTRIM=2" >> $HOME/.bashrc +echo "export PS1='\[\e[3;36m\]\w ->\[\e[0m\\] '" >> $HOME/.bashrc +export PROMPT_DIRTRIM=2 +export PS1='\[\e[3;36m\]\w ->\[\e[0m\\] ' + +# Update Nextflow +nextflow self-update + +# Update welcome message +echo "Welcome to the nf-core/tbanalyzer devcontainer!" > /usr/local/etc/vscode-dev-containers/first-run-notice.txt diff --git a/.editorconfig b/.editorconfig deleted file mode 100644 index 72dda28..0000000 --- a/.editorconfig +++ /dev/null @@ -1,33 +0,0 @@ -root = true - -[*] -charset = utf-8 -end_of_line = lf -insert_final_newline = true -trim_trailing_whitespace = true -indent_size = 4 -indent_style = space - -[*.{md,yml,yaml,html,css,scss,js}] -indent_size = 2 - -# These files are edited and tested upstream in nf-core/modules -[/modules/nf-core/**] -charset = unset -end_of_line = unset -insert_final_newline = unset -trim_trailing_whitespace = unset -indent_style = unset -[/subworkflows/nf-core/**] -charset = unset -end_of_line = unset -insert_final_newline = unset -trim_trailing_whitespace = unset -indent_style = unset - -[/assets/email*] -indent_size = unset - -# ignore python and markdown -[*.{py,md}] -indent_style = unset diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md deleted file mode 100644 index 9220d68..0000000 --- a/.github/CONTRIBUTING.md +++ /dev/null @@ -1,125 +0,0 @@ -# nf-core/tbanalyzer: Contributing Guidelines - -Hi there! -Many thanks for taking an interest in improving nf-core/tbanalyzer. - -We try to manage the required tasks for nf-core/tbanalyzer using GitHub issues, you probably came to this page when creating one. -Please use the pre-filled template to save time. - -However, don't be put off by this template - other more general issues and suggestions are welcome! -Contributions to the code are even more welcome ;) - -> [!NOTE] -> If you need help using or modifying nf-core/tbanalyzer then the best place to ask is on the nf-core Slack [#tbanalyzer](https://nfcore.slack.com/channels/tbanalyzer) channel ([join our Slack here](https://nf-co.re/join/slack)). - -## Contribution workflow - -If you'd like to write some code for nf-core/tbanalyzer, the standard workflow is as follows: - -1. Check that there isn't already an issue about your idea in the [nf-core/tbanalyzer issues](https://github.com/nf-core/tbanalyzer/issues) to avoid duplicating work. If there isn't one already, please create one so that others know you're working on this -2. [Fork](https://help.github.com/en/github/getting-started-with-github/fork-a-repo) the [nf-core/tbanalyzer repository](https://github.com/nf-core/tbanalyzer) to your GitHub account -3. Make the necessary changes / additions within your forked repository following [Pipeline conventions](#pipeline-contribution-conventions) -4. Use `nf-core pipelines schema build` and add any new parameters to the pipeline JSON schema (requires [nf-core tools](https://github.com/nf-core/tools) >= 1.10). -5. Submit a Pull Request against the `dev` branch and wait for the code to be reviewed and merged - -If you're not used to this workflow with git, you can start with some [docs from GitHub](https://help.github.com/en/github/collaborating-with-issues-and-pull-requests) or even their [excellent `git` resources](https://try.github.io/). - -## Tests - -You have the option to test your changes locally by running the pipeline. For receiving warnings about process selectors and other `debug` information, it is recommended to use the debug profile. Execute all the tests with the following command: - -```bash -nf-test test --profile debug,test,docker --verbose -``` - -When you create a pull request with changes, [GitHub Actions](https://github.com/features/actions) will run automatic tests. -Typically, pull-requests are only fully reviewed when these tests are passing, though of course we can help out before then. - -There are typically two types of tests that run: - -### Lint tests - -`nf-core` has a [set of guidelines](https://nf-co.re/developers/guidelines) which all pipelines must adhere to. -To enforce these and ensure that all pipelines stay in sync, we have developed a helper tool which runs checks on the pipeline code. This is in the [nf-core/tools repository](https://github.com/nf-core/tools) and once installed can be run locally with the `nf-core pipelines lint ` command. - -If any failures or warnings are encountered, please follow the listed URL for more documentation. - -### Pipeline tests - -Each `nf-core` pipeline should be set up with a minimal set of test-data. -`GitHub Actions` then runs the pipeline on this data to ensure that it exits successfully. -If there are any failures then the automated tests fail. -These tests are run both with the latest available version of `Nextflow` and also the minimum required version that is stated in the pipeline code. - -## Patch - -:warning: Only in the unlikely and regretful event of a release happening with a bug. - -- On your own fork, make a new branch `patch` based on `upstream/master`. -- Fix the bug, and bump version (X.Y.Z+1). -- A PR should be made on `master` from patch to directly this particular bug. - -## Getting help - -For further information/help, please consult the [nf-core/tbanalyzer documentation](https://nf-co.re/tbanalyzer/usage) and don't hesitate to get in touch on the nf-core Slack [#tbanalyzer](https://nfcore.slack.com/channels/tbanalyzer) channel ([join our Slack here](https://nf-co.re/join/slack)). - -## Pipeline contribution conventions - -To make the nf-core/tbanalyzer code and processing logic more understandable for new contributors and to ensure quality, we semi-standardise the way the code and other contributions are written. - -### Adding a new step - -If you wish to contribute a new step, please use the following coding standards: - -1. Define the corresponding input channel into your new process from the expected previous process channel -2. Write the process block (see below). -3. Define the output channel if needed (see below). -4. Add any new parameters to `nextflow.config` with a default (see below). -5. Add any new parameters to `nextflow_schema.json` with help text (via the `nf-core pipelines schema build` tool). -6. Add sanity checks and validation for all relevant parameters. -7. Perform local tests to validate that the new code works as expected. -8. If applicable, add a new test command in `.github/workflow/ci.yml`. -9. Update MultiQC config `assets/multiqc_config.yml` so relevant suffixes, file name clean up and module plots are in the appropriate order. If applicable, add a [MultiQC](https://https://multiqc.info/) module. -10. Add a description of the output files and if relevant any appropriate images from the MultiQC report to `docs/output.md`. - -### Default values - -Parameters should be initialised / defined with default values in `nextflow.config` under the `params` scope. - -Once there, use `nf-core pipelines schema build` to add to `nextflow_schema.json`. - -### Default processes resource requirements - -Sensible defaults for process resource requirements (CPUs / memory / time) for a process should be defined in `conf/base.config`. These should generally be specified generic with `withLabel:` selectors so they can be shared across multiple processes/steps of the pipeline. A nf-core standard set of labels that should be followed where possible can be seen in the [nf-core pipeline template](https://github.com/nf-core/tools/blob/main/nf_core/pipeline-template/conf/base.config), which has the default process as a single core-process, and then different levels of multi-core configurations for increasingly large memory requirements defined with standardised labels. - -The process resources can be passed on to the tool dynamically within the process with the `${task.cpus}` and `${task.memory}` variables in the `script:` block. - -### Naming schemes - -Please use the following naming schemes, to make it easy to understand what is going where. - -- initial process channel: `ch_output_from_` -- intermediate and terminal channels: `ch__for_` - -### Nextflow version bumping - -If you are using a new feature from core Nextflow, you may bump the minimum required version of nextflow in the pipeline with: `nf-core pipelines bump-version --nextflow . [min-nf-version]` - -### Images and figures - -For overview images and other documents we follow the nf-core [style guidelines and examples](https://nf-co.re/developers/design_guidelines). - -## GitHub Codespaces - -This repo includes a devcontainer configuration which will create a GitHub Codespaces for Nextflow development! This is an online developer environment that runs in your browser, complete with VSCode and a terminal. - -To get started: - -- Open the repo in [Codespaces](https://github.com/nf-core/tbanalyzer/codespaces) -- Tools installed - - nf-core - - Nextflow - -Devcontainer specs: - -- [DevContainer config](.devcontainer/devcontainer.json) diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index d4697bf..3b2d3d9 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -9,7 +9,6 @@ body: - [nf-core website: troubleshooting](https://nf-co.re/usage/troubleshooting) - [nf-core/tbanalyzer pipeline documentation](https://nf-co.re/tbanalyzer/usage) - - type: textarea id: description attributes: diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index be1f373..1ed4b4f 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -8,14 +8,14 @@ These are the most common things requested on pull requests (PRs). Remember that PRs should be made against the dev branch, unless you're preparing a pipeline release. -Learn more about contributing: [CONTRIBUTING.md](https://github.com/nf-core/tbanalyzer/tree/master/.github/CONTRIBUTING.md) +Learn more about contributing: [CONTRIBUTING.md](https://github.com/nf-core/tbanalyzer/tree/master/docs/CONTRIBUTING.md) --> ## PR checklist - [ ] This comment contains a description of changes (with reason). - [ ] If you've fixed a bug or added code that should be tested, add tests! -- [ ] If you've added a new tool - have you followed the pipeline conventions in the [contribution docs](https://github.com/nf-core/tbanalyzer/tree/master/.github/CONTRIBUTING.md) +- [ ] If you've added a new tool - have you followed the pipeline conventions in the [contribution docs](https://github.com/nf-core/tbanalyzer/tree/master/docs/CONTRIBUTING.md) - [ ] If necessary, also make a PR on the nf-core/tbanalyzer _branch_ on the [nf-core/test-datasets](https://github.com/nf-core/test-datasets) repository. - [ ] Make sure your code lints (`nf-core pipelines lint`). - [ ] Ensure the test suite passes (`nextflow run . -profile test,docker --outdir `). diff --git a/.github/actions/get-shards/action.yml b/.github/actions/get-shards/action.yml new file mode 100644 index 0000000..e2833ee --- /dev/null +++ b/.github/actions/get-shards/action.yml @@ -0,0 +1,69 @@ +name: "Get number of shards" +description: "Get the number of nf-test shards for the current CI job" +inputs: + max_shards: + description: "Maximum number of shards allowed" + required: true + paths: + description: "Component paths to test" + required: false + tags: + description: "Tags to pass as argument for nf-test --tag parameter" + required: false +outputs: + shard: + description: "Array of shard numbers" + value: ${{ steps.shards.outputs.shard }} + total_shards: + description: "Total number of shards" + value: ${{ steps.shards.outputs.total_shards }} +runs: + using: "composite" + steps: + - name: Install nf-test + uses: nf-core/setup-nf-test@4069fbbaabe94c08faba4ad261bfa88225ba133f # v2 + with: + version: ${{ env.NFT_VER }} + - name: Get number of shards + id: shards + shell: bash + run: | + # Run nf-test with dynamic parameter + nftest_output=$(nf-test test \ + --profile +docker \ + $(if [ -n "${{ inputs.tags }}" ]; then echo "--tag ${{ inputs.tags }}"; fi) \ + --dry-run \ + --ci \ + --changed-since HEAD^) || { + echo "nf-test command failed with exit code $?" + echo "Full output: $nftest_output" + exit 1 + } + echo "nf-test dry-run output: $nftest_output" + + # Default values for shard and total_shards + shard="[]" + total_shards=0 + + # Check if there are related tests + if echo "$nftest_output" | grep -q 'No tests to execute'; then + echo "No related tests found." + else + # Extract the number of related tests + number_of_shards=$(echo "$nftest_output" | sed -n 's|.*Executed \([0-9]*\) tests.*|\1|p') + if [[ -n "$number_of_shards" && "$number_of_shards" -gt 0 ]]; then + shards_to_run=$(( $number_of_shards < ${{ inputs.max_shards }} ? $number_of_shards : ${{ inputs.max_shards }} )) + shard=$(seq 1 "$shards_to_run" | jq -R . | jq -c -s .) + total_shards="$shards_to_run" + else + echo "Unexpected output format. Falling back to default values." + fi + fi + + # Write to GitHub Actions outputs + echo "shard=$shard" >> $GITHUB_OUTPUT + echo "total_shards=$total_shards" >> $GITHUB_OUTPUT + + # Debugging output + echo "Final shard array: $shard" + echo "Total number of shards: $total_shards" diff --git a/.github/actions/nf-test/action.yml b/.github/actions/nf-test/action.yml new file mode 100644 index 0000000..ad686e8 --- /dev/null +++ b/.github/actions/nf-test/action.yml @@ -0,0 +1,111 @@ +name: "nf-test Action" +description: "Runs nf-test with common setup steps" +inputs: + profile: + description: "Profile to use" + required: true + shard: + description: "Shard number for this CI job" + required: true + total_shards: + description: "Total number of test shards(NOT the total number of matrix jobs)" + required: true + paths: + description: "Test paths" + required: true + tags: + description: "Tags to pass as argument for nf-test --tag parameter" + required: false +runs: + using: "composite" + steps: + - name: Setup Nextflow + uses: nf-core/setup-nextflow@b4ec1bc7c16a94435159de94a05253542fddf6ef # v3 + with: + version: "${{ env.NXF_VERSION }}" + + - name: Set up Python + uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6 + with: + python-version: "3.14" + + - name: Install nf-test + uses: nf-core/setup-nf-test@4069fbbaabe94c08faba4ad261bfa88225ba133f # v2 + with: + version: "${{ env.NFT_VER }}" + install-pdiff: true + + - name: Setup apptainer + if: contains(inputs.profile, 'singularity') + uses: eWaterCycle/setup-apptainer@3f706d898c9db585b1d741b4692e66755f3a1b40 # v2 + + - name: Set up Singularity + if: contains(inputs.profile, 'singularity') + shell: bash + run: | + mkdir -p $NXF_SINGULARITY_CACHEDIR + mkdir -p $NXF_SINGULARITY_LIBRARYDIR + + - name: Conda setup + if: contains(inputs.profile, 'conda') + uses: conda-incubator/setup-miniconda@8ee1f361103df19b6f8c8655fd3967a8ecb162d5 # v4 + with: + auto-update-conda: true + conda-solver: libmamba + channels: conda-forge + channel-priority: strict + conda-remove-defaults: true + + - name: Run nf-test + shell: bash + env: + NFT_WORKDIR: ${{ env.NFT_WORKDIR }} + run: | + nf-test test \ + --profile=+${{ inputs.profile }} \ + $(if [ -n "${{ inputs.tags }}" ]; then echo "--tag ${{ inputs.tags }}"; fi) \ + --ci \ + --changed-since HEAD^ \ + --verbose \ + --tap=test.tap \ + --shard ${{ inputs.shard }}/${{ inputs.total_shards }} + + # Save the absolute path of the test.tap file to the output + echo "tap_file_path=$(realpath test.tap)" >> $GITHUB_OUTPUT + + - name: Generate test summary + if: always() + shell: bash + run: | + # Add header if it doesn't exist (using a token file to track this) + if [ ! -f ".summary_header" ]; then + echo "# 🚀 nf-test results" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "| Status | Test Name | Profile | Shard |" >> $GITHUB_STEP_SUMMARY + echo "|:------:|-----------|---------|-------|" >> $GITHUB_STEP_SUMMARY + touch .summary_header + fi + + if [ -f test.tap ]; then + while IFS= read -r line; do + if [[ $line =~ ^ok ]]; then + test_name="${line#ok }" + # Remove the test number from the beginning + test_name="${test_name#* }" + echo "| ✅ | ${test_name} | ${{ inputs.profile }} | ${{ inputs.shard }}/${{ inputs.total_shards }} |" >> $GITHUB_STEP_SUMMARY + elif [[ $line =~ ^not\ ok ]]; then + test_name="${line#not ok }" + # Remove the test number from the beginning + test_name="${test_name#* }" + echo "| ❌ | ${test_name} | ${{ inputs.profile }} | ${{ inputs.shard }}/${{ inputs.total_shards }} |" >> $GITHUB_STEP_SUMMARY + fi + done < test.tap + else + echo "| ⚠️ | No test results found | ${{ inputs.profile }} | ${{ inputs.shard }}/${{ inputs.total_shards }} |" >> $GITHUB_STEP_SUMMARY + fi + + - name: Clean up + if: always() + shell: bash + run: | + sudo rm -rf /home/ubuntu/tests/ diff --git a/.github/workflows/awsfulltest.yml b/.github/workflows/awsfulltest.yml index 202df67..7678e24 100644 --- a/.github/workflows/awsfulltest.yml +++ b/.github/workflows/awsfulltest.yml @@ -1,56 +1,67 @@ name: nf-core AWS full size tests -# This workflow is triggered on PRs opened against the master branch. +# This workflow is triggered on PRs opened against the main/master branch. # It can be additionally triggered manually with GitHub actions workflow dispatch button. # It runs the -profile 'test_full' on AWS batch on: - pull_request: - branches: - - master workflow_dispatch: pull_request_review: types: [submitted] + release: + types: [published] jobs: run-platform: name: Run AWS full tests - # run only if the PR is approved by at least 2 reviewers and against the master branch or manually triggered - if: github.repository == 'nf-core/tbanalyzer' && github.event.review.state == 'approved' && github.event.pull_request.base.ref == 'master' || github.event_name == 'workflow_dispatch' + # run only if the PR is approved by at least 2 reviewers and against the master/main branch or manually triggered + if: github.repository == 'nf-core/tbanalyzer' && github.event.review.state == 'approved' && (github.event.pull_request.base.ref == 'master' || github.event.pull_request.base.ref == 'main') || github.event_name == 'workflow_dispatch' || github.event_name == 'release' runs-on: ubuntu-latest steps: - - uses: octokit/request-action@v2.x - id: check_approvals - with: - route: GET /repos/${{ github.repository }}/pulls/${{ github.event.pull_request.number }}/reviews - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - id: test_variables - if: github.event_name != 'workflow_dispatch' + - name: Set revision variable + id: revision run: | - JSON_RESPONSE='${{ steps.check_approvals.outputs.data }}' - CURRENT_APPROVALS_COUNT=$(echo $JSON_RESPONSE | jq -c '[.[] | select(.state | contains("APPROVED")) ] | length') - test $CURRENT_APPROVALS_COUNT -ge 2 || exit 1 # At least 2 approvals are required + echo "revision=${{ (github.event_name == 'workflow_dispatch' || github.event_name == 'release') && github.sha || 'dev' }}" >> "$GITHUB_OUTPUT" + - name: Launch workflow via Seqera Platform - uses: seqeralabs/action-tower-launch@v2 + uses: seqeralabs/action-tower-launch@51565b514bff1827cf34620de25d0055759f1fc9 # v2 # TODO nf-core: You can customise AWS full pipeline tests as required # Add full size test data (but still relatively small datasets for few samples) # on the `test_full.config` test runs with only one set of parameters with: - workspace_id: ${{ secrets.TOWER_WORKSPACE_ID }} + workspace_id: ${{ vars.TOWER_WORKSPACE_ID }} access_token: ${{ secrets.TOWER_ACCESS_TOKEN }} - compute_env: ${{ secrets.TOWER_COMPUTE_ENV }} - revision: ${{ github.sha }} - workdir: s3://${{ secrets.AWS_S3_BUCKET }}/work/tbanalyzer/work-${{ github.sha }} + compute_env: ${{ vars.TOWER_COMPUTE_ENV }} + revision: ${{ steps.revision.outputs.revision }} + workdir: s3://${{ vars.AWS_S3_BUCKET }}/work/tbanalyzer/work-${{ steps.revision.outputs.revision }} + nextflow_config: | + plugins { + id 'nf-slack@0.5.0' + } + slack { + enabled = true + bot { + token = '${{ secrets.NFSLACK_BOT_TOKEN }}' + channel = 'tbanalyzer' + } + onStart { + enabled = false + } + onComplete { + message = ':white_check_mark: *tbanalyzer/test_full* completed successfully! :tada:' + } + onError { + message = ':x: *tbanalyzer/test_full* failed :crying_cat_face:' + } + } parameters: | { - "hook_url": "${{ secrets.MEGATESTS_ALERTS_SLACK_HOOK_URL }}", - "outdir": "s3://${{ secrets.AWS_S3_BUCKET }}/tbanalyzer/results-${{ github.sha }}" + "outdir": "s3://${{ vars.AWS_S3_BUCKET }}/tbanalyzer/results-${{ steps.revision.outputs.revision }}" } profiles: test_full - - uses: actions/upload-artifact@v4 + - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 with: name: Seqera Platform debug log file path: | - seqera_platform_action_*.log - seqera_platform_action_*.json + tower_action_*.log + tower_action_*.json diff --git a/.github/workflows/awstest.yml b/.github/workflows/awstest.yml index bc1eec5..e594fa7 100644 --- a/.github/workflows/awstest.yml +++ b/.github/workflows/awstest.yml @@ -12,22 +12,22 @@ jobs: steps: # Launch workflow using Seqera Platform CLI tool action - name: Launch workflow via Seqera Platform - uses: seqeralabs/action-tower-launch@v2 + uses: seqeralabs/action-tower-launch@51565b514bff1827cf34620de25d0055759f1fc9 # v2 with: - workspace_id: ${{ secrets.TOWER_WORKSPACE_ID }} + workspace_id: ${{ vars.TOWER_WORKSPACE_ID }} access_token: ${{ secrets.TOWER_ACCESS_TOKEN }} - compute_env: ${{ secrets.TOWER_COMPUTE_ENV }} + compute_env: ${{ vars.TOWER_COMPUTE_ENV }} revision: ${{ github.sha }} - workdir: s3://${{ secrets.AWS_S3_BUCKET }}/work/tbanalyzer/work-${{ github.sha }} + workdir: s3://${{ vars.AWS_S3_BUCKET }}/work/tbanalyzer/work-${{ github.sha }} parameters: | { - "outdir": "s3://${{ secrets.AWS_S3_BUCKET }}/tbanalyzer/results-test-${{ github.sha }}" + "outdir": "s3://${{ vars.AWS_S3_BUCKET }}/tbanalyzer/results-test-${{ github.sha }}" } profiles: test - - uses: actions/upload-artifact@v4 + - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 with: name: Seqera Platform debug log file path: | - seqera_platform_action_*.log - seqera_platform_action_*.json + tower_action_*.log + tower_action_*.json diff --git a/.github/workflows/branch.yml b/.github/workflows/branch.yml index f25c7af..8804f65 100644 --- a/.github/workflows/branch.yml +++ b/.github/workflows/branch.yml @@ -1,15 +1,17 @@ name: nf-core branch protection -# This workflow is triggered on PRs to master branch on the repository -# It fails when someone tries to make a PR against the nf-core `master` branch instead of `dev` +# This workflow is triggered on PRs to `main`/`master` branch on the repository +# It fails when someone tries to make a PR against the nf-core `main`/`master` branch instead of `dev` on: pull_request_target: - branches: [master] + branches: + - main + - master jobs: test: runs-on: ubuntu-latest steps: - # PRs to the nf-core repo master branch are only ok if coming from the nf-core repo `dev` or any `patch` branches + # PRs to the nf-core repo main/master branch are only ok if coming from the nf-core repo `dev` or any `patch` branches - name: Check PRs if: github.repository == 'nf-core/tbanalyzer' run: | @@ -19,10 +21,10 @@ jobs: # NOTE - this doesn't currently work if the PR is coming from a fork, due to limitations in GitHub actions secrets - name: Post PR comment if: failure() - uses: mshick/add-pr-comment@b8f338c590a895d50bcbfa6c5859251edc8952fc # v2 + uses: mshick/add-pr-comment@8e4927817251f1ff60c001f04568532b38e0b4a0 # v3 with: message: | - ## This PR is against the `master` branch :x: + ## This PR is against the `${{github.event.pull_request.base.ref}}` branch :x: * Do not close this PR * Click _Edit_ and change the `base` to `dev` @@ -32,9 +34,9 @@ jobs: Hi @${{ github.event.pull_request.user.login }}, - It looks like this pull-request is has been made against the [${{github.event.pull_request.head.repo.full_name }}](https://github.com/${{github.event.pull_request.head.repo.full_name }}) `master` branch. - The `master` branch on nf-core repositories should always contain code from the latest release. - Because of this, PRs to `master` are only allowed if they come from the [${{github.event.pull_request.head.repo.full_name }}](https://github.com/${{github.event.pull_request.head.repo.full_name }}) `dev` branch. + It looks like this pull-request is has been made against the [${{github.event.pull_request.head.repo.full_name }}](https://github.com/${{github.event.pull_request.head.repo.full_name }}) ${{github.event.pull_request.base.ref}} branch. + The ${{github.event.pull_request.base.ref}} branch on nf-core repositories should always contain code from the latest release. + Because of this, PRs to ${{github.event.pull_request.base.ref}} are only allowed if they come from the [${{github.event.pull_request.head.repo.full_name }}](https://github.com/${{github.event.pull_request.head.repo.full_name }}) `dev` branch. You do not need to close this PR, you can change the target branch to `dev` by clicking the _"Edit"_ button at the top of this page. Note that even after this, the test will continue to show as failing until you push a new commit. diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml deleted file mode 100644 index c65dfd9..0000000 --- a/.github/workflows/ci.yml +++ /dev/null @@ -1,85 +0,0 @@ -name: nf-core CI -# This workflow runs the pipeline with the minimal test dataset to check that it completes without any syntax errors -on: - push: - branches: - - dev - pull_request: - release: - types: [published] - workflow_dispatch: - -env: - NXF_ANSI_LOG: false - NXF_SINGULARITY_CACHEDIR: ${{ github.workspace }}/.singularity - NXF_SINGULARITY_LIBRARYDIR: ${{ github.workspace }}/.singularity - -concurrency: - group: "${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}" - cancel-in-progress: true - -jobs: - test: - name: "Run pipeline with test data (${{ matrix.NXF_VER }} | ${{ matrix.test_name }} | ${{ matrix.profile }})" - # Only run on push if this is the nf-core dev branch (merged PRs) - if: "${{ github.event_name != 'push' || (github.event_name == 'push' && github.repository == 'nf-core/tbanalyzer') }}" - runs-on: ubuntu-latest - strategy: - matrix: - NXF_VER: - - "24.04.2" - - "latest-everything" - profile: - - "conda" - - "docker" - - "singularity" - test_name: - - "test" - isMaster: - - ${{ github.base_ref == 'master' }} - # Exclude conda and singularity on dev - exclude: - - isMaster: false - profile: "conda" - - isMaster: false - profile: "singularity" - steps: - - name: Check out pipeline code - uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4 - - - name: Set up Nextflow - uses: nf-core/setup-nextflow@v2 - with: - version: "${{ matrix.NXF_VER }}" - - - name: Set up Apptainer - if: matrix.profile == 'singularity' - uses: eWaterCycle/setup-apptainer@main - - - name: Set up Singularity - if: matrix.profile == 'singularity' - run: | - mkdir -p $NXF_SINGULARITY_CACHEDIR - mkdir -p $NXF_SINGULARITY_LIBRARYDIR - - - name: Set up Miniconda - if: matrix.profile == 'conda' - uses: conda-incubator/setup-miniconda@a4260408e20b96e80095f42ff7f1a15b27dd94ca # v3 - with: - miniconda-version: "latest" - auto-update-conda: true - conda-solver: libmamba - channels: conda-forge,bioconda - - - name: Set up Conda - if: matrix.profile == 'conda' - run: | - echo $(realpath $CONDA)/condabin >> $GITHUB_PATH - echo $(realpath python) >> $GITHUB_PATH - - - name: Clean up Disk space - uses: jlumbroso/free-disk-space@54081f138730dfa15788a46383842cd2f914a1be # v1.3.1 - - - name: "Run pipeline with test data ${{ matrix.NXF_VER }} | ${{ matrix.test_name }} | ${{ matrix.profile }}" - run: | - nextflow run ${GITHUB_WORKSPACE} -profile ${{ matrix.test_name }},${{ matrix.profile }} --outdir ./results diff --git a/.github/workflows/clean-up.yml b/.github/workflows/clean-up.yml index 0b6b1f2..172de6f 100644 --- a/.github/workflows/clean-up.yml +++ b/.github/workflows/clean-up.yml @@ -10,7 +10,7 @@ jobs: issues: write pull-requests: write steps: - - uses: actions/stale@28ca1036281a5e5922ead5184a1bbf96e5fc984e # v9 + - uses: actions/stale@b5d41d4e1d5dceea10e7104786b73624c18a190f # v10 with: stale-issue-message: "This issue has been tagged as awaiting-changes or awaiting-feedback by an nf-core contributor. Remove stale label or add a comment otherwise this issue will be closed in 20 days." stale-pr-message: "This PR has been tagged as awaiting-changes or awaiting-feedback by an nf-core contributor. Remove stale label or add a comment if it is still useful." diff --git a/.github/workflows/download_pipeline.yml b/.github/workflows/download_pipeline.yml index 713dc3e..a7bf4fc 100644 --- a/.github/workflows/download_pipeline.yml +++ b/.github/workflows/download_pipeline.yml @@ -2,7 +2,7 @@ name: Test successful pipeline download with 'nf-core pipelines download' # Run the workflow when: # - dispatched manually -# - when a PR is opened or reopened to master branch +# - when a PR is opened or reopened to main/master branch # - the head branch of the pull request is updated, i.e. if fixes for a release are pushed last minute to dev. on: workflow_dispatch: @@ -12,32 +12,44 @@ on: required: true default: "dev" pull_request: - types: - - opened - - edited - - synchronize - branches: - - master - pull_request_target: branches: + - main - master env: NXF_ANSI_LOG: false jobs: + configure: + runs-on: ubuntu-latest + outputs: + REPO_LOWERCASE: ${{ steps.get_repo_properties.outputs.REPO_LOWERCASE }} + REPOTITLE_LOWERCASE: ${{ steps.get_repo_properties.outputs.REPOTITLE_LOWERCASE }} + REPO_BRANCH: ${{ steps.get_repo_properties.outputs.REPO_BRANCH }} + steps: + - name: Get the repository name and current branch + id: get_repo_properties + run: | + echo "REPO_LOWERCASE=${GITHUB_REPOSITORY,,}" >> "$GITHUB_OUTPUT" + echo "REPOTITLE_LOWERCASE=$(basename ${GITHUB_REPOSITORY,,})" >> "$GITHUB_OUTPUT" + echo "REPO_BRANCH=${{ github.event.inputs.testbranch || 'dev' }}" >> "$GITHUB_OUTPUT" + download: runs-on: ubuntu-latest + needs: configure steps: + - name: Check out pipeline code + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 + - name: Install Nextflow - uses: nf-core/setup-nextflow@v2 + uses: nf-core/setup-nextflow@b4ec1bc7c16a94435159de94a05253542fddf6ef # v3 - name: Disk space cleanup uses: jlumbroso/free-disk-space@54081f138730dfa15788a46383842cd2f914a1be # v1.3.1 - - uses: actions/setup-python@82c7e631bb3cdc910f68e0081d67478d79c6982d # v5 + - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6 with: - python-version: "3.12" + python-version: "3.14" architecture: "x64" - name: Setup Apptainer @@ -45,16 +57,15 @@ jobs: with: apptainer-version: 1.3.4 - - name: Install dependencies + - name: Read .nf-core.yml + id: read_yml run: | - python -m pip install --upgrade pip - pip install git+https://github.com/nf-core/tools.git@dev + echo "nf_core_version=$(yq '.nf_core_version' ${{ github.workspace }}/.nf-core.yml)" >> "$GITHUB_OUTPUT" - - name: Get the repository name and current branch set as environment variable + - name: Install dependencies run: | - echo "REPO_LOWERCASE=${GITHUB_REPOSITORY,,}" >> ${GITHUB_ENV} - echo "REPOTITLE_LOWERCASE=$(basename ${GITHUB_REPOSITORY,,})" >> ${GITHUB_ENV} - echo "REPO_BRANCH=${{ github.event.inputs.testbranch || 'dev' }}" >> ${GITHUB_ENV} + python -m pip install --upgrade pip + pip install nf-core==${{ steps.read_yml.outputs['nf_core_version'] }} - name: Make a cache directory for the container images run: | @@ -64,24 +75,27 @@ jobs: env: NXF_SINGULARITY_CACHEDIR: ./singularity_container_images run: | - nf-core pipelines download ${{ env.REPO_LOWERCASE }} \ - --revision ${{ env.REPO_BRANCH }} \ - --outdir ./${{ env.REPOTITLE_LOWERCASE }} \ + nf-core pipelines download ${{ needs.configure.outputs.REPO_LOWERCASE }} \ + --revision ${{ needs.configure.outputs.REPO_BRANCH }} \ + --outdir ./${{ needs.configure.outputs.REPOTITLE_LOWERCASE }} \ --compress "none" \ --container-system 'singularity' \ - --container-library "quay.io" -l "docker.io" -l "community.wave.seqera.io" \ + --container-library "quay.io" -l "docker.io" -l "community.wave.seqera.io/library/" \ --container-cache-utilisation 'amend' \ --download-configuration 'yes' - name: Inspect download - run: tree ./${{ env.REPOTITLE_LOWERCASE }} + run: tree ./${{ needs.configure.outputs.REPOTITLE_LOWERCASE }} + + - name: Inspect container images + run: tree ./singularity_container_images | tee ./container_initial - name: Count the downloaded number of container images id: count_initial run: | image_count=$(ls -1 ./singularity_container_images | wc -l | xargs) echo "Initial container image count: $image_count" - echo "IMAGE_COUNT_INITIAL=$image_count" >> ${GITHUB_ENV} + echo "IMAGE_COUNT_INITIAL=$image_count" >> "$GITHUB_OUTPUT" - name: Run the downloaded pipeline (stub) id: stub_run_pipeline @@ -89,31 +103,40 @@ jobs: env: NXF_SINGULARITY_CACHEDIR: ./singularity_container_images NXF_SINGULARITY_HOME_MOUNT: true - run: nextflow run ./${{ env.REPOTITLE_LOWERCASE }}/$( sed 's/\W/_/g' <<< ${{ env.REPO_BRANCH }}) -stub -profile test,singularity --outdir ./results + run: nextflow run ./${{needs.configure.outputs.REPOTITLE_LOWERCASE }}/$( sed 's/\W/_/g' <<< ${{ needs.configure.outputs.REPO_BRANCH }}) -stub -profile test,singularity --outdir ./results - name: Run the downloaded pipeline (stub run not supported) id: run_pipeline - if: ${{ job.steps.stub_run_pipeline.status == failure() }} + if: ${{ steps.stub_run_pipeline.outcome == 'failure' }} env: NXF_SINGULARITY_CACHEDIR: ./singularity_container_images NXF_SINGULARITY_HOME_MOUNT: true - run: nextflow run ./${{ env.REPOTITLE_LOWERCASE }}/$( sed 's/\W/_/g' <<< ${{ env.REPO_BRANCH }}) -profile test,singularity --outdir ./results + run: nextflow run ./${{ needs.configure.outputs.REPOTITLE_LOWERCASE }}/$( sed 's/\W/_/g' <<< ${{ needs.configure.outputs.REPO_BRANCH }}) -profile test,singularity --outdir ./results - name: Count the downloaded number of container images id: count_afterwards run: | image_count=$(ls -1 ./singularity_container_images | wc -l | xargs) echo "Post-pipeline run container image count: $image_count" - echo "IMAGE_COUNT_AFTER=$image_count" >> ${GITHUB_ENV} + echo "IMAGE_COUNT_AFTER=$image_count" >> "$GITHUB_OUTPUT" - name: Compare container image counts + id: count_comparison run: | - if [ "${{ env.IMAGE_COUNT_INITIAL }}" -ne "${{ env.IMAGE_COUNT_AFTER }}" ]; then - initial_count=${{ env.IMAGE_COUNT_INITIAL }} - final_count=${{ env.IMAGE_COUNT_AFTER }} + if [ "${{ steps.count_initial.outputs.IMAGE_COUNT_INITIAL }}" -ne "${{ steps.count_afterwards.outputs.IMAGE_COUNT_AFTER }}" ]; then + initial_count=${{ steps.count_initial.outputs.IMAGE_COUNT_INITIAL }} + final_count=${{ steps.count_afterwards.outputs.IMAGE_COUNT_AFTER }} difference=$((final_count - initial_count)) echo "$difference additional container images were \n downloaded at runtime . The pipeline has no support for offline runs!" - tree ./singularity_container_images + tree ./singularity_container_images > ./container_afterwards + diff ./container_initial ./container_afterwards exit 1 else echo "The pipeline can be downloaded successfully!" fi + + - name: Upload Nextflow logfile for debugging purposes + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 + with: + name: nextflow_logfile.txt + path: .nextflow.log* + include-hidden-files: true diff --git a/.github/workflows/fix-linting.yml b/.github/workflows/fix_linting.yml similarity index 71% rename from .github/workflows/fix-linting.yml rename to .github/workflows/fix_linting.yml index 43610fc..f65e548 100644 --- a/.github/workflows/fix-linting.yml +++ b/.github/workflows/fix_linting.yml @@ -13,13 +13,13 @@ jobs: runs-on: ubuntu-latest steps: # Use the @nf-core-bot token to check out so we can push later - - uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 with: token: ${{ secrets.nf_core_bot_auth_token }} # indication that the linting is being fixed - name: React on comment - uses: peter-evans/create-or-update-comment@71345be0265236311c031f5c7866368bd1eff043 # v4 + uses: peter-evans/create-or-update-comment@e8674b075228eee787fea43ef493e45ece1004c9 # v5 with: comment-id: ${{ github.event.comment.id }} reactions: eyes @@ -31,30 +31,26 @@ jobs: env: GITHUB_TOKEN: ${{ secrets.nf_core_bot_auth_token }} - # Install and run pre-commit - - uses: actions/setup-python@82c7e631bb3cdc910f68e0081d67478d79c6982d # v5 - with: - python-version: "3.12" - - - name: Install pre-commit - run: pip install pre-commit + - name: Install Nextflow + uses: nf-core/setup-nextflow@b4ec1bc7c16a94435159de94a05253542fddf6ef # v3 - - name: Run pre-commit - id: pre-commit - run: pre-commit run --all-files + # Install and run prek + - name: Run prek + id: prek + uses: j178/prek-action@6ad80277337ad479fe43bd70701c3f7f8aa74db3 # v2 continue-on-error: true # indication that the linting has finished - name: react if linting finished succesfully - if: steps.pre-commit.outcome == 'success' - uses: peter-evans/create-or-update-comment@71345be0265236311c031f5c7866368bd1eff043 # v4 + if: steps.prek.outcome == 'success' + uses: peter-evans/create-or-update-comment@e8674b075228eee787fea43ef493e45ece1004c9 # v5 with: comment-id: ${{ github.event.comment.id }} reactions: "+1" - name: Commit & push changes id: commit-and-push - if: steps.pre-commit.outcome == 'failure' + if: steps.prek.outcome == 'failure' run: | git config user.email "core@nf-co.re" git config user.name "nf-core-bot" @@ -67,21 +63,21 @@ jobs: - name: react if linting errors were fixed id: react-if-fixed if: steps.commit-and-push.outcome == 'success' - uses: peter-evans/create-or-update-comment@71345be0265236311c031f5c7866368bd1eff043 # v4 + uses: peter-evans/create-or-update-comment@e8674b075228eee787fea43ef493e45ece1004c9 # v5 with: comment-id: ${{ github.event.comment.id }} reactions: hooray - name: react if linting errors were not fixed if: steps.commit-and-push.outcome == 'failure' - uses: peter-evans/create-or-update-comment@71345be0265236311c031f5c7866368bd1eff043 # v4 + uses: peter-evans/create-or-update-comment@e8674b075228eee787fea43ef493e45ece1004c9 # v5 with: comment-id: ${{ github.event.comment.id }} reactions: confused - name: react if linting errors were not fixed if: steps.commit-and-push.outcome == 'failure' - uses: peter-evans/create-or-update-comment@71345be0265236311c031f5c7866368bd1eff043 # v4 + uses: peter-evans/create-or-update-comment@e8674b075228eee787fea43ef493e45ece1004c9 # v5 with: issue-number: ${{ github.event.issue.number }} body: | diff --git a/.github/workflows/linting.yml b/.github/workflows/linting.yml index a502573..8738ffc 100644 --- a/.github/workflows/linting.yml +++ b/.github/workflows/linting.yml @@ -3,9 +3,6 @@ name: nf-core linting # It runs the `nf-core pipelines lint` and markdown lint tests to ensure # that the code meets the nf-core guidelines. on: - push: - branches: - - dev pull_request: release: types: [published] @@ -14,46 +11,42 @@ jobs: pre-commit: runs-on: ubuntu-latest steps: - - uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 - - name: Set up Python 3.12 - uses: actions/setup-python@82c7e631bb3cdc910f68e0081d67478d79c6982d # v5 - with: - python-version: "3.12" - - - name: Install pre-commit - run: pip install pre-commit + - name: Install Nextflow + uses: nf-core/setup-nextflow@b4ec1bc7c16a94435159de94a05253542fddf6ef # v3 - - name: Run pre-commit - run: pre-commit run --all-files + - name: Run prek + uses: j178/prek-action@6ad80277337ad479fe43bd70701c3f7f8aa74db3 # v2 nf-core: runs-on: ubuntu-latest steps: - name: Check out pipeline code - uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4 + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 - name: Install Nextflow - uses: nf-core/setup-nextflow@v2 + uses: nf-core/setup-nextflow@b4ec1bc7c16a94435159de94a05253542fddf6ef # v3 - - uses: actions/setup-python@82c7e631bb3cdc910f68e0081d67478d79c6982d # v5 + - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6 with: - python-version: "3.12" + python-version: "3.14" architecture: "x64" + - name: Setup uv + uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0 + - name: read .nf-core.yml - uses: pietrobolcato/action-read-yaml@1.1.0 + uses: pietrobolcato/action-read-yaml@9f13718d61111b69f30ab4ac683e67a56d254e1d # 1.1.0 id: read_yml with: config: ${{ github.workspace }}/.nf-core.yml - name: Install dependencies - run: | - python -m pip install --upgrade pip - pip install nf-core==${{ steps.read_yml.outputs['nf_core_version'] }} + run: uv tool install nf-core==${{ steps.read_yml.outputs['nf_core_version'] }} - name: Run nf-core pipelines lint - if: ${{ github.base_ref != 'master' }} + if: ${{ github.base_ref != 'master' || github.base_ref != 'main' }} env: GITHUB_COMMENTS_URL: ${{ github.event.pull_request.comments_url }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} @@ -61,7 +54,7 @@ jobs: run: nf-core -l lint_log.txt pipelines lint --dir ${GITHUB_WORKSPACE} --markdown lint_results.md - name: Run nf-core pipelines lint --release - if: ${{ github.base_ref == 'master' }} + if: ${{ github.base_ref == 'master' || github.base_ref == 'main' }} env: GITHUB_COMMENTS_URL: ${{ github.event.pull_request.comments_url }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} @@ -74,7 +67,7 @@ jobs: - name: Upload linting log file artifact if: ${{ always() }} - uses: actions/upload-artifact@65462800fd760344b1a7b4382951275a0abb4808 # v4 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 with: name: linting-logs path: | diff --git a/.github/workflows/linting_comment.yml b/.github/workflows/linting_comment.yml index 42e519b..5b0c24f 100644 --- a/.github/workflows/linting_comment.yml +++ b/.github/workflows/linting_comment.yml @@ -11,7 +11,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Download lint results - uses: dawidd6/action-download-artifact@bf251b5aa9c2f7eeb574a96ee720e24f801b7c11 # v6 + uses: dawidd6/action-download-artifact@b6e2e70617bc3265edd6dab6c906732b2f1ae151 # v21 with: workflow: linting.yml workflow_conclusion: completed @@ -21,7 +21,7 @@ jobs: run: echo "pr_number=$(cat linting-logs/PR_number.txt)" >> $GITHUB_OUTPUT - name: Post PR comment - uses: marocchino/sticky-pull-request-comment@331f8f5b4215f0445d3c07b4967662a32a2d3e31 # v2 + uses: marocchino/sticky-pull-request-comment@70d2764d1a7d5d9560b100cbea0077fc8f633987 # v3 with: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} number: ${{ steps.pr_number.outputs.pr_number }} diff --git a/.github/workflows/nf-test.yml b/.github/workflows/nf-test.yml new file mode 100644 index 0000000..efd72d6 --- /dev/null +++ b/.github/workflows/nf-test.yml @@ -0,0 +1,144 @@ +name: Run nf-test +on: + pull_request: + paths-ignore: + - "docs/**" + - "**/meta.yml" + - "**/*.md" + - "**/*.png" + - "**/*.svg" + release: + types: [published] + workflow_dispatch: + +# Cancel if a newer run is started +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + +env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + NFT_VER: "0.9.4" + NFT_WORKDIR: "~" + NXF_ANSI_LOG: false + NXF_SINGULARITY_CACHEDIR: ${{ github.workspace }}/.singularity + NXF_SINGULARITY_LIBRARYDIR: ${{ github.workspace }}/.singularity + +jobs: + nf-test-changes: + name: nf-test-changes + runs-on: # use self-hosted runners + - runs-on=${{ github.run_id }}-nf-test-changes + - runner=4cpu-linux-x64 + outputs: + shard: ${{ steps.set-shards.outputs.shard }} + total_shards: ${{ steps.set-shards.outputs.total_shards }} + steps: + - name: Clean Workspace # Purge the workspace in case it's running on a self-hosted runner + run: | + ls -la ./ + rm -rf ./* || true + rm -rf ./.??* || true + ls -la ./ + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 + with: + fetch-depth: 0 + + - name: get number of shards + id: set-shards + uses: ./.github/actions/get-shards + env: + NFT_VER: ${{ env.NFT_VER }} + with: + max_shards: 7 + + - name: debug + run: | + echo ${{ steps.set-shards.outputs.shard }} + echo ${{ steps.set-shards.outputs.total_shards }} + + nf-test: + name: "${{ matrix.profile }} | ${{ matrix.NXF_VER }} | ${{ matrix.shard }}/${{ needs.nf-test-changes.outputs.total_shards }}" + needs: [nf-test-changes] + if: ${{ needs.nf-test-changes.outputs.total_shards != '0' }} + runs-on: # use self-hosted runners + - runs-on=${{ github.run_id }}-nf-test + - runner=4cpu-linux-x64 + strategy: + fail-fast: false + matrix: + shard: ${{ fromJson(needs.nf-test-changes.outputs.shard) }} + profile: [conda, docker, singularity] + isMain: + - ${{ github.base_ref == 'master' || github.base_ref == 'main' }} + # Exclude conda and singularity on dev + exclude: + - isMain: false + profile: "conda" + - isMain: false + profile: "singularity" + NXF_VER: + - "25.10.4" + - "latest-everything" + env: + NXF_ANSI_LOG: false + TOTAL_SHARDS: ${{ needs.nf-test-changes.outputs.total_shards }} + + steps: + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 + with: + fetch-depth: 0 + + - name: Run nf-test + id: run_nf_test + uses: ./.github/actions/nf-test + continue-on-error: ${{ matrix.NXF_VER == 'latest-everything' }} + env: + NFT_WORKDIR: ${{ env.NFT_WORKDIR }} + NXF_VERSION: ${{ matrix.NXF_VER }} + with: + profile: ${{ matrix.profile }} + shard: ${{ matrix.shard }} + total_shards: ${{ env.TOTAL_SHARDS }} + + - name: Report test status + if: ${{ always() }} + run: | + if [[ "${{ steps.run_nf_test.outcome }}" == "failure" ]]; then + echo "::error::Test with ${{ matrix.NXF_VER }} failed" + # Add to workflow summary + echo "## ❌ Test failed: ${{ matrix.profile }} | ${{ matrix.NXF_VER }} | Shard ${{ matrix.shard }}/${{ env.TOTAL_SHARDS }}" >> $GITHUB_STEP_SUMMARY + if [[ "${{ matrix.NXF_VER }}" == "latest-everything" ]]; then + echo "::warning::Test with latest-everything failed but will not cause workflow failure. Please check if the error is expected or if it needs fixing." + fi + if [[ "${{ matrix.NXF_VER }}" != "latest-everything" ]]; then + exit 1 + fi + fi + + confirm-pass: + needs: [nf-test] + if: always() + runs-on: # use self-hosted runners + - runs-on=${{ github.run_id }}-confirm-pass + - runner=2cpu-linux-x64 + steps: + - name: One or more tests failed (excluding latest-everything) + if: ${{ contains(needs.*.result, 'failure') }} + run: exit 1 + + - name: One or more tests cancelled + if: ${{ contains(needs.*.result, 'cancelled') }} + run: exit 1 + + - name: All tests ok + if: ${{ contains(needs.*.result, 'success') }} + run: exit 0 + + - name: debug-print + if: always() + run: | + echo "::group::DEBUG: `needs` Contents" + echo "DEBUG: toJSON(needs) = ${{ toJSON(needs) }}" + echo "DEBUG: toJSON(needs.*.result) = ${{ toJSON(needs.*.result) }}" + echo "::endgroup::" diff --git a/.github/workflows/release-announcements.yml b/.github/workflows/release-announcements.yml index c6ba35d..78d5dbe 100644 --- a/.github/workflows/release-announcements.yml +++ b/.github/workflows/release-announcements.yml @@ -14,7 +14,11 @@ jobs: run: | echo "topics=$(curl -s https://nf-co.re/pipelines.json | jq -r '.remote_workflows[] | select(.full_name == "${{ github.repository }}") | .topics[]' | awk '{print "#"$0}' | tr '\n' ' ')" | sed 's/-//g' >> $GITHUB_OUTPUT - - uses: rzr/fediverse-action@master + - name: get description + id: get_description + run: | + echo "description=$(curl -s https://nf-co.re/pipelines.json | jq -r '.remote_workflows[] | select(.full_name == "${{ github.repository }}") | .description')" >> $GITHUB_OUTPUT + - uses: rzr/fediverse-action@563159eb8d45f70ab6aaba36ed55cd037e51f441 # master with: access-token: ${{ secrets.MASTODON_ACCESS_TOKEN }} host: "mstdn.science" # custom host if not "mastodon.social" (default) @@ -22,48 +26,15 @@ jobs: # https://docs.github.com/en/developers/webhooks-and-events/webhooks/webhook-events-and-payloads#release message: | Pipeline release! ${{ github.repository }} v${{ github.event.release.tag_name }} - ${{ github.event.release.name }}! - + ${{ steps.get_description.outputs.description }} Please see the changelog: ${{ github.event.release.html_url }} ${{ steps.get_topics.outputs.topics }} #nfcore #openscience #nextflow #bioinformatics - send-tweet: - runs-on: ubuntu-latest - - steps: - - uses: actions/setup-python@82c7e631bb3cdc910f68e0081d67478d79c6982d # v5 - with: - python-version: "3.10" - - name: Install dependencies - run: pip install tweepy==4.14.0 - - name: Send tweet - shell: python - run: | - import os - import tweepy - - client = tweepy.Client( - access_token=os.getenv("TWITTER_ACCESS_TOKEN"), - access_token_secret=os.getenv("TWITTER_ACCESS_TOKEN_SECRET"), - consumer_key=os.getenv("TWITTER_CONSUMER_KEY"), - consumer_secret=os.getenv("TWITTER_CONSUMER_SECRET"), - ) - tweet = os.getenv("TWEET") - client.create_tweet(text=tweet) - env: - TWEET: | - Pipeline release! ${{ github.repository }} v${{ github.event.release.tag_name }} - ${{ github.event.release.name }}! - - Please see the changelog: ${{ github.event.release.html_url }} - TWITTER_CONSUMER_KEY: ${{ secrets.TWITTER_CONSUMER_KEY }} - TWITTER_CONSUMER_SECRET: ${{ secrets.TWITTER_CONSUMER_SECRET }} - TWITTER_ACCESS_TOKEN: ${{ secrets.TWITTER_ACCESS_TOKEN }} - TWITTER_ACCESS_TOKEN_SECRET: ${{ secrets.TWITTER_ACCESS_TOKEN_SECRET }} - bsky-post: runs-on: ubuntu-latest steps: - - uses: zentered/bluesky-post-action@80dbe0a7697de18c15ad22f4619919ceb5ccf597 # v0.1.0 + - uses: zentered/bluesky-post-action@5a91cc2ad10a304a4e96c16182dbe4918710bcf6 # v0.4.0 with: post: | Pipeline release! ${{ github.repository }} v${{ github.event.release.tag_name }} - ${{ github.event.release.name }}! diff --git a/.github/workflows/template_version_comment.yml b/.github/workflows/template-version-comment.yml similarity index 78% rename from .github/workflows/template_version_comment.yml rename to .github/workflows/template-version-comment.yml index e8aafe4..ea30827 100644 --- a/.github/workflows/template_version_comment.yml +++ b/.github/workflows/template-version-comment.yml @@ -9,12 +9,12 @@ jobs: runs-on: ubuntu-latest steps: - name: Check out pipeline code - uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4 + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 with: ref: ${{ github.event.pull_request.head.sha }} - name: Read template version from .nf-core.yml - uses: nichmor/minimal-read-yaml@v0.0.2 + uses: nichmor/minimal-read-yaml@1f7205277e25e156e1f63815781db80a6d490b8f # v0.0.2 id: read_yml with: config: ${{ github.workspace }}/.nf-core.yml @@ -29,7 +29,7 @@ jobs: run: echo "OUTPUT=$(pip list --outdated | grep nf-core)" >> ${GITHUB_ENV} - name: Post nf-core template version comment - uses: mshick/add-pr-comment@b8f338c590a895d50bcbfa6c5859251edc8952fc # v2 + uses: mshick/add-pr-comment@8e4927817251f1ff60c001f04568532b38e0b4a0 # v3 if: | contains(env.OUTPUT, 'nf-core') with: @@ -42,5 +42,5 @@ jobs: > Your pipeline is using an old version of the nf-core template: ${{ steps.read_yml.outputs['nf_core_version'] }}. > Please update your pipeline to the latest version. > - > For more documentation on how to update your pipeline, please see the [nf-core documentation](https://github.com/nf-core/tools?tab=readme-ov-file#sync-a-pipeline-with-the-template) and [Synchronisation documentation](https://nf-co.re/docs/contributing/sync). + > For more documentation on how to update your pipeline, please see the [Synchronisation documentation](https://nf-co.re/docs/developing/template-syncs/overview). # diff --git a/.gitignore b/.gitignore index a42ce01..cc2b1a7 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,4 @@ testing/ testing* *.pyc null/ +.lineage/ diff --git a/.gitpod.yml b/.gitpod.yml deleted file mode 100644 index 4611863..0000000 --- a/.gitpod.yml +++ /dev/null @@ -1,17 +0,0 @@ -image: nfcore/gitpod:latest -tasks: - - name: Update Nextflow and setup pre-commit - command: | - pre-commit install --install-hooks - nextflow self-update - -vscode: - extensions: # based on nf-core.nf-core-extensionpack - #- esbenp.prettier-vscode # Markdown/CommonMark linting and style checking for Visual Studio Code - - EditorConfig.EditorConfig # override user/workspace settings with settings found in .editorconfig files - - Gruntfuggly.todo-tree # Display TODO and FIXME in a tree view in the activity bar - - mechatroner.rainbow-csv # Highlight columns in csv files in different colors - - nextflow.nextflow # Nextflow syntax highlighting - - oderwat.indent-rainbow # Highlight indentation level - - streetsidesoftware.code-spell-checker # Spelling checker for source code - - charliermarsh.ruff # Code linter Ruff diff --git a/.nf-core.yml b/.nf-core.yml index 8812cd6..e74c2eb 100644 --- a/.nf-core.yml +++ b/.nf-core.yml @@ -1,8 +1,20 @@ -bump_version: null -lint: null -nf_core_version: 3.0.2 -org_path: null +nf_core_version: 4.0.2 repository_type: pipeline +lint: + files_unchanged: + - .pre-commit-config.yaml + nextflow_config: + # MTBseq reference-data paths legitimately use ${projectDir}; their resolved + # absolute value can never equal a portable nextflow_schema.json default. + - config_defaults: + - params.mtbseq_ref_and_indexes_path + - params.mtbseq_resilist + - params.mtbseq_intregions + - params.mtbseq_categories + - params.mtbseq_basecalib + # The pipeline wraps non-deterministic tools (BWA/GATK via MTBseq); the default + # nf-test asserts success + key-output existence instead of content snapshots. + nf_test_content: false template: author: "@abhi18av" description: TB-GVAS aims to democratize analysis by providing a comprehensive and @@ -13,6 +25,4 @@ template: name: tbanalyzer org: nf-core outdir: . - skip_features: null version: 1.0dev -update: null diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 9e9f0e1..be89eb6 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -4,10 +4,37 @@ repos: hooks: - id: prettier additional_dependencies: - - prettier@3.2.5 - - - repo: https://github.com/editorconfig-checker/editorconfig-checker.python - rev: "3.0.3" + - prettier@3.8.3 + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v6.0.0 hooks: - - id: editorconfig-checker - alias: ec + - id: trailing-whitespace + args: [--markdown-linebreak-ext=md] + exclude: | + (?x)^( + .*ro-crate-metadata.json$| + modules/(?!local/).*| + subworkflows/(?!local/).*| + data/mtbseq-references/.*| + .*\.snap$ + )$ + - id: end-of-file-fixer + exclude: | + (?x)^( + .*ro-crate-metadata.json$| + modules/(?!local/).*| + subworkflows/(?!local/).*| + data/mtbseq-references/.*| + .*\.snap$ + )$ + - repo: https://github.com/seqeralabs/nf-lint-pre-commit + rev: v0.3.0 + hooks: + - id: nextflow-lint + files: '\.nf$|nextflow\.config$' + exclude: | + (?x)^( + modules/(?!local/).*| + subworkflows/(?!local/).* + )$ + args: ["-output", "json"] diff --git a/.prettierignore b/.prettierignore index 437d763..63cde50 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,6 +1,4 @@ email_template.html -adaptivecard.json -slackreport.json .nextflow* work/ data/ @@ -10,3 +8,7 @@ testing/ testing* *.pyc bin/ +.nf-test/ +ro-crate-metadata.json +modules/nf-core/ +subworkflows/nf-core/ diff --git a/.prettierrc.yml b/.prettierrc.yml index c81f9a7..07dbd8b 100644 --- a/.prettierrc.yml +++ b/.prettierrc.yml @@ -1 +1,6 @@ printWidth: 120 +tabWidth: 4 +overrides: + - files: "*.{md,yml,yaml,html,css,scss,js,cff}" + options: + tabWidth: 2 diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..a33b527 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "markdown.styles": ["public/vscode_markdown.css"] +} diff --git a/LICENSE b/LICENSE index aadc477..34fe9c8 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) @abhi18av +Copyright (c) The nf-core/tbanalyzer team Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index 7e1dcea..e5dd585 100644 --- a/README.md +++ b/README.md @@ -5,17 +5,19 @@ -[![GitHub Actions CI Status](https://github.com/nf-core/tbanalyzer/actions/workflows/ci.yml/badge.svg)](https://github.com/nf-core/tbanalyzer/actions/workflows/ci.yml) +[![Open in GitHub Codespaces](https://img.shields.io/badge/Open_In_GitHub_Codespaces-black?labelColor=grey&logo=github)](https://github.com/codespaces/new/nf-core/tbanalyzer) +[![GitHub Actions CI Status](https://github.com/nf-core/tbanalyzer/actions/workflows/nf-test.yml/badge.svg)](https://github.com/nf-core/tbanalyzer/actions/workflows/nf-test.yml) [![GitHub Actions Linting Status](https://github.com/nf-core/tbanalyzer/actions/workflows/linting.yml/badge.svg)](https://github.com/nf-core/tbanalyzer/actions/workflows/linting.yml)[![AWS CI](https://img.shields.io/badge/CI%20tests-full%20size-FF9900?labelColor=000000&logo=Amazon%20AWS)](https://nf-co.re/tbanalyzer/results)[![Cite with Zenodo](http://img.shields.io/badge/DOI-10.5281/zenodo.XXXXXXX-1073c8?labelColor=000000)](https://doi.org/10.5281/zenodo.XXXXXXX) [![nf-test](https://img.shields.io/badge/unit_tests-nf--test-337ab7.svg)](https://www.nf-test.com) -[![Nextflow](https://img.shields.io/badge/nextflow%20DSL2-%E2%89%A524.04.2-23aa62.svg)](https://www.nextflow.io/) +[![Nextflow](https://img.shields.io/badge/version-%E2%89%A525.10.4-green?style=flat&logo=nextflow&logoColor=white&color=%230DC09D&link=https%3A%2F%2Fnextflow.io)](https://www.nextflow.io/) +[![nf-core template version](https://img.shields.io/badge/nf--core_template-4.0.2-green?style=flat&logo=nfcore&logoColor=white&color=%2324B064&link=https%3A%2F%2Fnf-co.re)](https://github.com/nf-core/tools/releases/tag/4.0.2) [![run with conda](http://img.shields.io/badge/run%20with-conda-3EB049?labelColor=000000&logo=anaconda)](https://docs.conda.io/en/latest/) [![run with docker](https://img.shields.io/badge/run%20with-docker-0db7ed?labelColor=000000&logo=docker)](https://www.docker.com/) [![run with singularity](https://img.shields.io/badge/run%20with-singularity-1d355c.svg?labelColor=000000)](https://sylabs.io/docs/) [![Launch on Seqera Platform](https://img.shields.io/badge/Launch%20%F0%9F%9A%80-Seqera%20Platform-%234256e7)](https://cloud.seqera.io/launch?pipeline=https://github.com/nf-core/tbanalyzer) -[![Get help on Slack](http://img.shields.io/badge/slack-nf--core%20%23tbanalyzer-4A154B?labelColor=000000&logo=slack)](https://nfcore.slack.com/channels/tbanalyzer)[![Follow on Twitter](http://img.shields.io/badge/twitter-%40nf__core-1DA1F2?labelColor=000000&logo=twitter)](https://twitter.com/nf_core)[![Follow on Mastodon](https://img.shields.io/badge/mastodon-nf__core-6364ff?labelColor=FFFFFF&logo=mastodon)](https://mstdn.science/@nf_core)[![Watch on YouTube](http://img.shields.io/badge/youtube-nf--core-FF0000?labelColor=000000&logo=youtube)](https://www.youtube.com/c/nf-core) +[![Get help on Slack](http://img.shields.io/badge/slack-nf--core%20%23tbanalyzer-4A154B?labelColor=000000&logo=slack)](https://nfcore.slack.com/channels/tbanalyzer)[![Follow on Bluesky](https://img.shields.io/badge/bluesky-%40nf__core-1185fe?labelColor=000000&logo=bluesky)](https://bsky.app/profile/nf-co.re)[![Follow on Mastodon](https://img.shields.io/badge/mastodon-nf__core-6364ff?labelColor=FFFFFF&logo=mastodon)](https://mstdn.science/@nf_core)[![Watch on YouTube](http://img.shields.io/badge/youtube-nf--core-FF0000?labelColor=000000&logo=youtube)](https://www.youtube.com/c/nf-core) ## Introduction @@ -28,16 +30,13 @@ --> - - -1. Read QC ([`FastQC`](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/)) -2. Present QC for raw reads ([`MultiQC`](http://multiqc.info/)) + workflows use the "tube map" design for that. See https://nf-co.re/docs/community/brand/workflow-schematics#examples for examples. --> +1. Read QC ([`FastQC`](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/))2. Present QC for raw reads ([`MultiQC`](http://multiqc.info/)) ## Usage > [!NOTE] -> If you are new to Nextflow and nf-core, please refer to [this page](https://nf-co.re/docs/usage/installation) on how to set-up Nextflow. Make sure to [test your setup](https://nf-co.re/docs/usage/introduction#how-to-run-a-pipeline) with `-profile test` before running the workflow on actual data. +> If you are new to Nextflow and nf-core, please refer to [this page](https://nf-co.re/docs/get_started/environment_setup/overview) on how to set-up Nextflow. Make sure to [test your setup](https://nf-co.re/docs/get_started/run-your-first-pipeline) with `-profile test` before running the workflow on actual data. 4-isomerase - - - status 3 annotated CDS 5 6 +Rv1107c xseB 1234223 1233966 -3 exodeoxyribonuclease VII small subunit - - - status 3 annotated CDS 5 6 +Rv1108c xseA 1235460 1234213 -1 exodeoxyribonuclease VII large subunit - - - status 3 annotated CDS 5 6 +Rv1109c - 1236095 1235457 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1110 lytB2 1236185 1237192 2 4-hydroxy-3-methylbut-2-enyl diphosphate reductase - - - status 3 annotated CDS 5 6 +Rv1111c - 1238192 1237209 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1112 - 1238255 1239328 2 GTP-binding protein - - - status 3 annotated CDS 5 6 +Rv1113 vapB32 1239416 1239613 2 antitoxin VapB32 - - - status 3 annotated CDS 5 6 +Rv1114 vapC32 1239610 1239984 1 ribonuclease VapC32 - - - status 3 annotated CDS 5 6 +Rv1115 - 1240187 1240885 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1116 - 1241003 1241188 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1117 - 1241633 1241956 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1118c - 1242831 1241971 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1119c - 1243013 1242864 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1120c - 1243504 1243010 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1121 zwf1 1243707 1245107 3 glucose-6-phosphate 1-dehydrogenase - - - status 3 annotated CDS 5 6 +Rv1122 gnd2 1245129 1246151 3 6-phosphogluconate dehydrogenase - - - status 3 annotated CDS 5 6 +Rv1123c bpoB 1247052 1246144 -1 peroxidase BpoB - - - status 3 annotated CDS 5 6 +Rv1124 ephC 1247127 1248077 3 epoxide hydrolase EphC - - - status 3 annotated CDS 5 6 +Rv1125 - 1248082 1249326 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1126c - 1249935 1249330 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1127c ppdK 1251404 1249932 -3 pyruvate, phosphate dikinase PpdK - - - status 3 annotated CDS 5 6 +Rv1128c - 1252972 1251617 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1129c - 1254534 1253074 -1 transcriptional regulator - - - status 3 annotated CDS 5 6 +Rv1130 prpD 1254555 1256135 3 methylcitrate dehydratase PrpD - - - status 3 annotated CDS 5 6 +Rv1131 prpC 1256132 1257313 2 methylcitrate synthase PrpC - - - status 3 annotated CDS 5 6 +Rv1132 - 1257325 1259055 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1133c metE 1261346 1259067 -3 5-methyltetrahydropteroyltriglutamate-- homocysteine methyltransferase - - - status 3 annotated CDS 5 6 +Rv1134 - 1261922 1262158 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1135c PPE16 1264128 1262272 -1 PPE family protein PPE16 - - - status 3 annotated CDS 5 6 +Rv1138a - 1265034 1265438 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1138c - 1266488 1265472 -3 oxidoreductase - - - status 3 annotated CDS 5 6 +Rv1139c - 1266985 1266485 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1140 - 1267347 1268195 3 integral membrane protein - - - status 3 annotated CDS 5 6 +Rv1141c echA11 1269009 1268203 -1 enoyl-CoA hydratase EchA11 - - - status 3 annotated CDS 5 6 +Rv1142c echA10 1269958 1269152 -2 enoyl-CoA hydratase EchA10 - - - status 3 annotated CDS 5 6 +Rv1143 mcr 1270062 1271144 3 alpha-methylacyl-CoA racemase - - - status 3 annotated CDS 5 6 +Rv1144 - 1271156 1271908 2 oxidoreductase - - - status 3 annotated CDS 5 6 +Rv1145 - 1272423 1273334 3 transmembrane transport protein - - - status 3 annotated CDS 5 6 +Rv1146 - 1273355 1274767 2 transmembrane transport protein - - - status 3 annotated CDS 5 6 +Rv1147 - 1274900 1275550 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1148c - 1277748 1276300 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1149 - 1277893 1278300 1 transposase - - - status 3 annotated CDS 5 6 +Rv1151c - 1279617 1278904 -1 NAD-dependent protein deacylase - - - status 3 annotated CDS 5 6 +Rv1152 - 1279655 1280020 2 transcriptional regulator - - - status 3 annotated CDS 5 6 +Rv1153c omt 1280846 1279998 -3 O-methyltransferase - - - status 3 annotated CDS 5 6 +Rv1154c - 1281484 1280843 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1155 - 1281429 1281872 3 pyridoxine/pyridoxamine 5'-phosphate oxidase - - - status 3 annotated CDS 5 6 +Rv1155a - 1282030 1282218 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1156 - 1282306 1282893 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1157c - 1284171 1283056 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1158c - 1284862 1284179 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1159 pimE 1284992 1286287 2 polyprenol-phosphate-mannose-dependent alpha-(1-2)-phosphatidylinositol pentamannoside mannosyltransferase - - - status 3 annotated CDS 5 6 +Rv1159A - 1286568 1286284 -1 pterin-4-alpha-carbinolamine dehydratase - - - status 3 annotated CDS 5 6 +Rv1160 mutT2 1286595 1287020 3 8-oxo-dGTP diphosphatase - - - status 3 annotated CDS 5 6 +Rv1161 narG 1287328 1291026 1 nitrate reductase subunit alpha - - - status 3 annotated CDS 5 6 +Rv1162 narH 1291065 1292741 3 nitrate reductase subunit beta - - - status 3 annotated CDS 5 6 +Rv1163 narJ 1292798 1293403 2 nitrate reductase subunit delta - - - status 3 annotated CDS 5 6 +Rv1164 narI 1293406 1294146 1 nitrate reductase subunit gamma - - - status 3 annotated CDS 5 6 +Rv1165 typA 1294168 1296054 1 GTP-binding translation elongation factor - - - status 3 annotated CDS 5 6 +Rv1166 lpqW 1296152 1298059 2 monoacyl phosphatidylinositol tetramannoside-binding protein LpqW - - - status 3 annotated CDS 5 6 +Rv1167c - 1298692 1298087 -2 transcriptional regulator - - - status 3 annotated CDS 5 6 +Rv1168c PPE17 1299804 1298764 -1 PPE family protein PPE17 - - - status 3 annotated CDS 5 6 +Rv1169c lipX 1300124 1299822 -3 lipase LipX - - - status 3 annotated CDS 5 6 +Rv1170 mshB 1300304 1301215 2 1D-myo-inositol 2-acetamido-2-deoxy-alpha-D-glucopyranoside deacetylase - - - status 3 annotated CDS 5 6 +Rv1171 - 1301307 1301747 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1172c PE12 1302681 1301755 -1 PE family protein PE12 - - - status 3 annotated CDS 5 6 +Rv1173 fbiC 1302931 1305501 1 FO synthase - - - status 3 annotated CDS 5 6 +Rv1174c TB8.4 1306001 1305669 -3 low molecular weight T-cell antigen - - - status 3 annotated CDS 5 6 +Rv1175c fadH 1308226 1306202 -2 NADPH dependent 2,4-dienoyl-CoA reductase FadH - - - status 3 annotated CDS 5 6 +Rv1176c - 1308792 1308223 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1177 fdxC 1309005 1309331 3 ferredoxin FdxC - - - status 3 annotated CDS 5 6 +Rv1178 - 1309364 1310452 2 aminotransferase - - - status 3 annotated CDS 5 6 +Rv1179c - 1313299 1310480 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1180 pks3 1313725 1315191 1 polyketide beta-ketoacyl synthase - - - status 3 annotated CDS 5 6 +Rv1181 pks4 1315234 1319982 1 polyketide beta-ketoacyl synthase - - - status 3 annotated CDS 5 6 +Rv1182 papA3 1320035 1321453 2 acyltransferase PapA - - - status 3 annotated CDS 5 6 +Rv1183 mmpL10 1321520 1324528 2 transmembrane transport protein MmpL10 - - - status 3 annotated CDS 5 6 +Rv1184c - 1325611 1324532 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1185c fadD21 1327512 1325776 -1 fatty-acid--CoA ligase FadD21 - - - status 3 annotated CDS 5 6 +Rv1186c - 1329305 1327689 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1187 rocA 1329390 1331021 3 pyrroline-5-carboxylate dehydrogenase RocA - - - status 3 annotated CDS 5 6 +Rv1188 - 1331021 1332010 2 proline dehydrogenase - - - status 3 annotated CDS 5 6 +Rv1189 sigI 1332092 1332964 2 ECF RNA polymerase sigma factor SigI - - - status 3 annotated CDS 5 6 +Rv1190 - 1332980 1333858 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1191 - 1333931 1334845 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1192 - 1334927 1335754 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1193 fadD36 1335794 1337215 2 fatty-acid--CoA ligase FadD36 - - - status 3 annotated CDS 5 6 +Rv1194c - 1338513 1337248 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1195 PE13 1339003 1339302 1 PE family protein PE13 - - - status 3 annotated CDS 5 6 +Rv1196 PPE18 1339349 1340524 2 PPE family protein PPE18 - - - status 3 annotated CDS 5 6 +Rv1197 esxK 1340659 1340955 1 ESAT-6 like protein EsxK - - - status 3 annotated CDS 5 6 +Rv1198 esxL 1341006 1341290 3 ESAT-6 like protein EsxL - - - status 3 annotated CDS 5 6 +Rv1199c - 1342605 1341358 -1 insertion sequence element IS1081 transposase - - - status 3 annotated CDS 5 6 +Rv1200 - 1342942 1344219 1 integral membrane transport protein - - - status 3 annotated CDS 5 6 +Rv1201c dapD 1345169 1344216 -3 2,3,4,5-tetrahydropyridine-2,6-dicarboxylate N-succinyltransferase - - - status 3 annotated CDS 5 6 +Rv1202 dapE 1345260 1346324 3 succinyl-diaminopimelate desuccinylase DapE - - - status 3 annotated CDS 5 6 +Rv1203c - 1346905 1346321 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1204c - 1348624 1346936 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1205 - 1348719 1349282 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1206 fadD6 1349332 1351125 1 fatty-acid--CoA ligase FadD6 - - - status 3 annotated CDS 5 6 +Rv1207 folP2 1351191 1352147 3 dihydropteroate synthase - - - status 3 annotated CDS 5 6 +Rv1208 gpgS 1352144 1353118 2 glucosyl-3-phosphoglycerate synthase - - - status 3 annotated CDS 5 6 +Rv1209 - 1353157 1353525 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1210 tagA 1353522 1354136 3 DNA-3-methyladenine glycosylase I TagA - - - status 3 annotated CDS 5 6 +Rv1211 - 1354243 1354470 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1212c glgA 1355661 1354498 -1 capsular glucan synthase - - - status 3 annotated CDS 5 6 +Rv1213 glgC 1355836 1357050 1 glucose-1-phosphate adenylyltransferase - - - status 3 annotated CDS 5 6 +Rv1214c PE14 1357625 1357293 -3 PE family protein PE14 - - - status 3 annotated CDS 5 6 +Rv1215c - 1359444 1357759 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1216c - 1360146 1359472 -1 integral membrane protein - - - status 3 annotated CDS 5 6 +Rv1217c - 1361801 1360155 -3 tetronasin ABC transporter integral membrane protein - - - status 3 annotated CDS 5 6 +Rv1218c - 1362733 1361798 -2 tetronasin ABC transporter ATP-binding protein - - - status 3 annotated CDS 5 6 +Rv1219c - 1363361 1362723 -3 transcriptional regulator - - - status 3 annotated CDS 5 6 +Rv1220c - 1364150 1363503 -3 methyltransferase - - - status 3 annotated CDS 5 6 +Rv1221 sigE 1364413 1365186 1 ECF RNA polymerase sigma factor SigE - - - status 3 annotated CDS 5 6 +Rv1222 rseA 1365344 1365808 2 anti-sigma E factor RseA - - - status 3 annotated CDS 5 6 +Rv1223 htrA 1365875 1367461 2 serine protease HtrA - - - status 3 annotated CDS 5 6 +Rv1224 tatB 1367463 1367858 3 Sec-independent protein translocase protein TatB - - - status 3 annotated CDS 5 6 +Rv1225c - 1368721 1367891 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1226c - 1370295 1368832 -1 transmembrane protein - - - status 3 annotated CDS 5 6 +Rv1227c - 1370825 1370292 -3 transmembrane protein - - - status 3 annotated CDS 5 6 +Rv1228 lpqX 1370920 1371477 1 lipoprotein LpqX - - - status 3 annotated CDS 5 6 +Rv1228a - 1371529 1371702 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1229c mrp 1372949 1371777 -3 multiple resistance/pH adaptation protein - - - status 3 annotated CDS 5 6 +Rv1230c - 1374197 1372962 -3 membrane protein - - - status 3 annotated CDS 5 6 +Rv1231c - 1374864 1374322 -1 membrane protein - - - status 3 annotated CDS 5 6 +Rv1232c - 1376168 1374861 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1233c - 1376826 1376230 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1234 - 1376976 1377503 3 transmembrane protein - - - status 3 annotated CDS 5 6 +Rv1235 lpqY 1377524 1378930 2 trehalose ABC transporter substrate-binding lipoprotein LpqY - - - status 3 annotated CDS 5 6 +Rv1236 sugA 1378927 1379850 1 sugar ABC transporter permease SugA - - - status 3 annotated CDS 5 6 +Rv1237 sugB 1379855 1380679 2 sugar ABC transporter permease SugB - - - status 3 annotated CDS 5 6 +Rv1238 sugC 1380684 1381865 3 sugar ABC transporter ATP-binding protein SugC - - - status 3 annotated CDS 5 6 +Rv1239c corA 1383042 1381942 -1 magnesium and cobalt transport transmembrane protein CorA - - - status 3 annotated CDS 5 6 +Rv1240 mdh 1383213 1384202 3 malate dehydrogenase - - - status 3 annotated CDS 5 6 +Rv1241 vapB33 1384278 1384538 3 antitoxin VapB33 - - - status 3 annotated CDS 5 6 +Rv1242 vapC33 1384535 1384966 2 ribonuclease VapC33 - - - status 3 annotated CDS 5 6 +Rv1243c PE_PGRS23 1386677 1384989 -3 PE-PGRS family protein PE_PGRS23 - - - status 3 annotated CDS 5 6 +Rv1244 lpqZ 1386857 1387717 2 lipoprotein LpqZ - - - status 3 annotated CDS 5 6 +Rv1245c - 1388628 1387798 -1 short-chain type dehydrogenase/reductase - - - status 3 annotated CDS 5 6 +Rv1246c relE 1388978 1388685 -3 toxin RelE - - - status 3 annotated CDS 5 6 +Rv1247c relB 1389244 1388975 -2 antitoxin RelB - - - status 3 annotated CDS 5 6 +Rv1248c - 1393052 1389357 -3 multifunctional 2-oxoglutarate dehydrogenase E1 component /2-oxoglutarate dehydrogenase dihydrolipoyllysine-residue succinyltransferase - - - status 3 annotated CDS 5 6 +Rv1249c - 1393982 1393194 -3 membrane protein - - - status 3 annotated CDS 5 6 +Rv1250 - 1394179 1395918 1 MFS-type drug transporter - - - status 3 annotated CDS 5 6 +Rv1251c - 1399240 1395821 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1252c lprE 1399904 1399296 -3 lipoprotein LprE - - - status 3 annotated CDS 5 6 +Rv1253 deaD 1399970 1401661 2 ATP-dependent RNA helicase DeaD - - - status 3 annotated CDS 5 6 +Rv1254 - 1401658 1402809 1 acyltransferase - - - status 3 annotated CDS 5 6 +Rv1255c - 1403386 1402778 -2 HTH-type transcriptional regulator - - - status 3 annotated CDS 5 6 +Rv1256c cyp130 1404603 1403386 -1 cytochrome P450 Cyp130 - - - status 3 annotated CDS 5 6 +Rv1257c - 1406084 1404717 -3 oxidoreductase - - - status 3 annotated CDS 5 6 +Rv1258c - 1407340 1406081 -2 multidrug-efflux transporter - - - status 3 annotated CDS 5 6 +Rv1259 udgB 1407339 1408238 3 uracil DNA glycosylase - - - status 3 annotated CDS 5 6 +Rv1260 - 1408240 1409358 1 oxidoreductase - - - status 3 annotated CDS 5 6 +Rv1261c - 1409933 1409484 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1262c - 1410372 1409938 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1263 amiB2 1410431 1411819 2 amidase AmiB - - - status 3 annotated CDS 5 6 +Rv1264 - 1411894 1413087 1 adenylyl cyclase - - - status 3 annotated CDS 5 6 +Rv1265 - 1413260 1413940 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1266c pknH 1415840 1413960 -3 serine/threonine-protein kinase PknH - - - status 3 annotated CDS 5 6 +Rv1267c embR 1417347 1416181 -1 transcriptional regulator EmbR - - - status 3 annotated CDS 5 6 +Rv1268c - 1418356 1417658 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1269c - 1418953 1418579 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1270c lprA 1419748 1419014 -2 lipoprotein LprA - - - status 3 annotated CDS 5 6 +Rv1271c - 1420302 1419961 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1272c - 1422305 1420410 -3 drug ABC transporter ATP-binding protein - - - status 3 annotated CDS 5 6 +Rv1273c - 1424050 1422302 -2 drug ABC transporter ATP-binding protein - - - status 3 annotated CDS 5 6 +Rv1274 lprB 1424197 1424754 1 lipoprotein LprB - - - status 3 annotated CDS 5 6 +Rv1275 lprC 1424751 1425293 3 lipoprotein LprC - - - status 3 annotated CDS 5 6 +Rv1276c - 1425914 1425438 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1277 - 1426164 1427417 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1278 - 1427414 1430041 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1279 - 1430062 1431648 1 GMC-type oxidoreductase - - - status 3 annotated CDS 5 6 +Rv1280c oppA 1433440 1431665 -2 oligopeptide ABC transporter substrate-binding lipoprotein OppA - - - status 3 annotated CDS 5 6 +Rv1281c oppD 1435271 1433433 -3 oligopeptide ABC transporter ATP-binding protein OppD - - - status 3 annotated CDS 5 6 +Rv1282c oppC 1436143 1435268 -2 oligopeptide ABC transporter permease OppC - - - status 3 annotated CDS 5 6 +Rv1283c oppB 1437117 1436140 -1 oligopeptide ABC transporter permease OppB - - - status 3 annotated CDS 5 6 +Rv1284 canA 1437324 1437815 3 beta-carbonic anhydrase - - - status 3 annotated CDS 5 6 +Rv1285 cysD 1437909 1438907 3 sulfate adenylyltransferase subunit 2 - - - status 3 annotated CDS 5 6 +Rv1286 - 1438907 1440751 2 bifunctional sulfate adenyltransferase subunit 1 CysN/adenylylsulfate kinase CysC - - - status 3 annotated CDS 5 6 +Rv1287 - 1440805 1441290 1 HTH-type transcriptional regulator - - - status 3 annotated CDS 5 6 +Rv1288 - 1441348 1442718 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1289 - 1442767 1443399 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1290A - 1445058 1445372 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1290c - 1445047 1443482 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1291c - 1445834 1445499 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1292 argS 1446379 1448031 1 arginine--tRNA ligase - - - status 3 annotated CDS 5 6 +Rv1293 lysA 1448028 1449371 3 diaminopimelate decarboxylase - - - status 3 annotated CDS 5 6 +Rv1294 thrA 1449375 1450700 3 homoserine dehydrogenase - - - status 3 annotated CDS 5 6 +Rv1295 thrC 1450697 1451779 2 threonine synthase - - - status 3 annotated CDS 5 6 +Rv1296 thrB 1451997 1452947 3 homoserine kinase - - - status 3 annotated CDS 5 6 +Rv1297 rho 1453204 1455012 1 transcription termination factor Rho - - - status 3 annotated CDS 5 6 +Rv1298 rpmE 1455163 1455405 1 50S ribosomal protein L31 - - - status 3 annotated CDS 5 6 +Rv1299 prfA 1455495 1456568 3 peptide chain release factor PrfA - - - status 3 annotated CDS 5 6 +Rv1300 hemK 1456565 1457542 2 release factor glutamine methyltransferase - - - status 3 annotated CDS 5 6 +Rv1301 - 1457558 1458211 2 threonylcarbamoyl-AMP synthase - - - status 3 annotated CDS 5 6 +Rv1302 rfe 1458295 1459509 1 decaprenyl-phosphateN-acetylglucosaminephosphotransferase - - - status 3 annotated CDS 5 6 +Rv1303 - 1459766 1460251 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1304 atpB 1460244 1460996 3 ATP synthase subunit A - - - status 3 annotated CDS 5 6 +Rv1305 atpE 1461045 1461290 3 ATP synthase subunit C - - - status 3 annotated CDS 5 6 +Rv1306 atpF 1461321 1461836 3 ATP synthase subunit B - - - status 3 annotated CDS 5 6 +Rv1307 atpH 1461843 1463183 3 ATP synthase subunit b/delta - - - status 3 annotated CDS 5 6 +Rv1308 atpA 1463228 1464877 2 ATP synthase subunit alpha - - - status 3 annotated CDS 5 6 +Rv1309 atpG 1464884 1465801 2 ATP synthase subunit gamma - - - status 3 annotated CDS 5 6 +Rv1310 atpD 1465841 1467301 2 ATP synthase subunit beta - - - status 3 annotated CDS 5 6 +Rv1311 atpC 1467315 1467680 3 ATP synthase subunit epsilon - - - status 3 annotated CDS 5 6 +Rv1312 - 1467688 1468131 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1313c - 1469505 1468171 -1 insertion sequence element IS1557 transposase - - - status 3 annotated CDS 5 6 +Rv1314c - 1470252 1469671 -1 cob(I)yrinic acid a,c-diamide adenosyltransferase - - - status 3 annotated CDS 5 6 +Rv1315 murA 1470321 1471577 3 UDP-N-acetylglucosamine 1-carboxyvinyltransferase - - - status 3 annotated CDS 5 6 +Rv1316c ogt 1477631 1477134 -3 methylated-DNA--protein-cysteinemethyltransferase - - - status 3 annotated CDS 5 6 +Rv1317c alkA 1479118 1477628 -2 bifunctional regulatory protein/DNA repair enzyme AlkA - - - status 3 annotated CDS 5 6 +Rv1318c - 1480824 1479199 -1 adenylate cyclase - - - status 3 annotated CDS 5 6 +Rv1319c - 1482501 1480894 -1 adenylate cyclase - - - status 3 annotated CDS 5 6 +Rv1320c - 1484217 1482514 -1 adenylate cyclase - - - status 3 annotated CDS 5 6 +Rv1321 - 1484279 1484959 2 endonuclease NucS - - - status 3 annotated CDS 5 6 +Rv1322 - 1484982 1485278 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1322A - 1485771 1485313 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1323 fadA4 1485862 1487031 1 acetyl-CoA acetyltransferase - - - status 3 annotated CDS 5 6 +Rv1324 - 1487161 1488075 1 thioredoxin - - - status 3 annotated CDS 5 6 +Rv1325c PE_PGRS24 1489965 1488154 -1 PE-PGRS family protein PE_PGRS24 - - - status 3 annotated CDS 5 6 +Rv1326c glgB 1492312 1490117 -2 1,4-alpha-glucan branching protein - - - status 3 annotated CDS 5 6 +Rv1327c glgE 1494425 1492320 -3 alpha-1,4-glucan:maltose-1-phosphate maltosyltransferase - - - status 3 annotated CDS 5 6 +Rv1328 glgP 1494564 1497155 3 glycogen phosphorylase - - - status 3 annotated CDS 5 6 +Rv1329c dinG 1499189 1497195 -3 ATP-dependent helicase DinG - - - status 3 annotated CDS 5 6 +Rv1330c pncB1 1500559 1499213 -2 nicotinic acid phosphoribosyltransferase PncB1 - - - status 3 annotated CDS 5 6 +Rv1331 - 1500661 1500966 1 ATP-dependent Clp protease adapter protein ClpS - - - status 3 annotated CDS 5 6 +Rv1332 - 1500926 1501582 2 transcriptional regulator - - - status 3 annotated CDS 5 6 +Rv1333 - 1501599 1502633 3 hydrolase - - - status 3 annotated CDS 5 6 +Rv1334 mec 1502641 1503081 1 CysO-cysteine peptidase - - - status 3 annotated CDS 5 6 +Rv1335 cysO 1503103 1503384 1 sulfur carrier protein CysO - - - status 3 annotated CDS 5 6 +Rv1336 cysM 1503394 1504365 1 O-phosphoserine sulfhydrylase - - - status 3 annotated CDS 5 6 +Rv1337 - 1504356 1505078 3 integral membrane protein - - - status 3 annotated CDS 5 6 +Rv1338 murI 1505075 1505890 2 glutamate racemase - - - status 3 annotated CDS 5 6 +Rv1339 - 1505917 1506738 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1340 rphA 1506755 1507534 2 ribonuclease PH - - - status 3 annotated CDS 5 6 +Rv1341 - 1507573 1508187 1 non-canonical purine NTP pyrophosphatase - - - status 3 annotated CDS 5 6 +Rv1342c - 1508546 1508184 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1343c lprD 1508923 1508543 -2 lipoprotein LprD - - - status 3 annotated CDS 5 6 +Rv1344 mbtL 1508968 1509288 1 acyl carrier protein MbtL - - - status 3 annotated CDS 5 6 +Rv1345 mbtM 1509281 1510846 2 long-chain-fatty-acid--ACP ligase MbtM - - - status 3 annotated CDS 5 6 +Rv1346 mbtN 1510846 1512006 1 acyl-ACP dehydrogenase MbtN - - - status 3 annotated CDS 5 6 +Rv1347c mbtK 1512605 1511973 -3 lysine N-acetyltransferase MbtK - - - status 3 annotated CDS 5 6 +Rv1348 irtA 1513047 1515626 3 iron ABC transporter ATP-binding protein/permease IrtA - - - status 3 annotated CDS 5 6 +Rv1349 irtB 1515623 1517362 2 iron ABC transporter ATP-binding protein/permease IrtB - - - status 3 annotated CDS 5 6 +Rv1350 fabG2 1517491 1518234 1 3-oxoacyl-ACP reductase FabG - - - status 3 annotated CDS 5 6 +Rv1351 - 1518231 1518560 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1352 - 1518763 1519134 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1353c - 1519985 1519200 -3 HTH-type transcriptional regulator - - - status 3 annotated CDS 5 6 +Rv1354c - 1521876 1520005 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1355c moeY 1524032 1521885 -3 molybdopterin biosynthesis protein MoeY - - - status 3 annotated CDS 5 6 +Rv1356c - 1524820 1524029 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1357c - 1526216 1525293 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1358 - 1526612 1530091 2 transcriptional regulator - - - status 3 annotated CDS 5 6 +Rv1359 - 1530173 1530925 2 transcriptional regulator - - - status 3 annotated CDS 5 6 +Rv1360 - 1531348 1532370 1 oxidoreductase - - - status 3 annotated CDS 5 6 +Rv1361c PPE19 1533633 1532443 -1 PPE family protein PPE19 - - - status 3 annotated CDS 5 6 +Rv1362c - 1534610 1533948 -3 membrane protein - - - status 3 annotated CDS 5 6 +Rv1363c - 1535392 1534607 -2 membrane protein - - - status 3 annotated CDS 5 6 +Rv1364c - 1537644 1535683 -1 sigma factor regulatory protein - - - status 3 annotated CDS 5 6 +Rv1365c rsfA 1538169 1537783 -1 anti-sigma-F factor antagonist RsfA - - - status 3 annotated CDS 5 6 +Rv1366 - 1538390 1539211 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1366A - 1539180 1539440 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1367c - 1540645 1539512 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1368 lprF 1541020 1541805 1 lipoprotein LprF - - - status 3 annotated CDS 5 6 +Rv1371 - 1543359 1544828 3 membrane protein - - - status 3 annotated CDS 5 6 +Rv1372 - 1544825 1546006 2 alpha-pyrone synthesis polyketide synthase-like protein - - - status 3 annotated CDS 5 6 +Rv1373 - 1546012 1546992 1 glycolipid sulfotransferase - - - status 3 annotated CDS 5 6 +Rv1374c - 1547530 1547072 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1375 - 1547832 1549151 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1376 - 1549148 1550641 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1377c - 1551217 1550579 -2 transferase - - - status 3 annotated CDS 5 6 +Rv1378c - 1552655 1551228 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1379 pyrR 1552654 1553235 1 bifunctional pyrimidine operon regulatory protein/uracil phosphoribosyltransferase - - - status 3 annotated CDS 5 6 +Rv1380 pyrB 1553232 1554191 3 aspartate carbamoyltransferase - - - status 3 annotated CDS 5 6 +Rv1381 pyrC 1554188 1555480 2 dihydroorotase - - - status 3 annotated CDS 5 6 +Rv1382 - 1555477 1555974 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1383 carA 1555971 1557101 3 carbamoyl-phosphate synthase small subunit - - - status 3 annotated CDS 5 6 +Rv1384 carB 1557101 1560448 2 carbamoyl-phosphate synthase large subunit - - - status 3 annotated CDS 5 6 +Rv1385 pyrF 1560445 1561269 1 orotidine 5'-phosphate decarboxylase - - - status 3 annotated CDS 5 6 +Rv1386 PE15 1561464 1561772 3 PE family protein PE15 - - - status 3 annotated CDS 5 6 +Rv1387 PPE20 1561769 1563388 2 PPE family protein PPE20 - - - status 3 annotated CDS 5 6 +Rv1388 mihF 1563694 1564266 1 integration host factor MihF - - - status 3 annotated CDS 5 6 +Rv1389 gmk 1564401 1565027 3 guanylate kinase - - - status 3 annotated CDS 5 6 +Rv1390 rpoZ 1565093 1565425 2 DNA-directed RNA polymerase subunit omega - - - status 3 annotated CDS 5 6 +Rv1391 dfp 1565441 1566697 2 bifunctional phosphopantothenoylcysteine decarboxylase/phosphopantothenate--cysteine ligase - - - status 3 annotated CDS 5 6 +Rv1392 metK 1566825 1568036 3 S-adenosylmethionine synthetase - - - status 3 annotated CDS 5 6 +Rv1393c - 1569587 1568109 -3 monoxygenase - - - status 3 annotated CDS 5 6 +Rv1394c cyp132 1570969 1569584 -2 cytochrome P450 Cyp132 - - - status 3 annotated CDS 5 6 +Rv1395 - 1571047 1572081 1 HTH-type transcriptional regulator - - - status 3 annotated CDS 5 6 +Rv1396c PE_PGRS25 1573857 1572127 -1 PE-PGRS family protein PE_PGRS25 - - - status 3 annotated CDS 5 6 +Rv1397c vapC10 1574513 1574112 -3 ribonuclease VapC10 - - - status 3 annotated CDS 5 6 +Rv1398c vapB10 1574767 1574510 -2 antitoxin VapB10 - - - status 3 annotated CDS 5 6 +Rv1399c nlhH 1575809 1574850 -3 carboxylesterase NlhH - - - status 3 annotated CDS 5 6 +Rv1400c lipI 1576796 1575834 -3 lipase - - - status 3 annotated CDS 5 6 +Rv1401 - 1576930 1577532 1 membrane protein - - - status 3 annotated CDS 5 6 +Rv1402 priA 1577613 1579580 3 primosomal protein N' - - - status 3 annotated CDS 5 6 +Rv1403c - 1580422 1579598 -2 methyltransferase - - - status 3 annotated CDS 5 6 +Rv1404 - 1580591 1581073 2 transcriptional regulator - - - status 3 annotated CDS 5 6 +Rv1405c - 1581969 1581145 -1 methyltransferase - - - status 3 annotated CDS 5 6 +Rv1406 fmt 1582166 1583104 2 methionyl-tRNA formyltransferase - - - status 3 annotated CDS 5 6 +Rv1407 fmu 1583101 1584474 1 methyltransferase - - - status 3 annotated CDS 5 6 +Rv1408 rpe 1584499 1585197 1 ribulose-phosphate 3-epimerase - - - status 3 annotated CDS 5 6 +Rv1409 ribG 1585194 1586213 3 bifunctional riboflavin biosynthesis diaminohydroxyphosphoribosylaminopyrimidine deaminase/5-amino-6-(5-phosphoribosylamino) uracil reductase - - - status 3 annotated CDS 5 6 +Rv1410c - 1587766 1586210 -2 aminoglycosides/tetracycline-transport integral membrane protein - - - status 3 annotated CDS 5 6 +Rv1411c lprG 1588482 1587772 -1 lipoprotein LprG - - - status 3 annotated CDS 5 6 +Rv1412 ribC 1588567 1589172 1 riboflavin synthase - - - status 3 annotated CDS 5 6 +Rv1413 - 1589386 1589901 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1414 - 1589891 1590292 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1415 ribA2 1590397 1591674 1 bifunctional riboflavin biosynthesis GTP cyclohydrolase II/3,4-dihydroxy-2-butanone 4-phosphate synthase - - - status 3 annotated CDS 5 6 +Rv1416 ribH 1591671 1592153 3 6,7-dimethyl-8-ribityllumazine synthase - - - status 3 annotated CDS 5 6 +Rv1417 - 1592150 1592614 2 membrane protein - - - status 3 annotated CDS 5 6 +Rv1418 lprH 1592639 1593325 2 lipoprotein LprH - - - status 3 annotated CDS 5 6 +Rv1419 - 1593505 1593978 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1420 uvrC 1594042 1595982 1 excinuclease ABC subunit UvrC - - - status 3 annotated CDS 5 6 +Rv1421 - 1595979 1596884 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1422 - 1596881 1597909 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1423 whiA 1597906 1598883 1 transcriptional regulator WhiA - - - status 3 annotated CDS 5 6 +Rv1424c - 1599654 1598893 -1 membrane protein - - - status 3 annotated CDS 5 6 +Rv1425 - 1599658 1601037 1 diacyglycerol O-acyltransferase - - - status 3 annotated CDS 5 6 +Rv1426c lipO 1602321 1601059 -1 esterase LipO - - - status 3 annotated CDS 5 6 +Rv1427c fadD12 1603928 1602321 -3 long-chain-fatty-acid--CoA ligase FadD12 - - - status 3 annotated CDS 5 6 +Rv1428c - 1604759 1603932 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1429 - 1604878 1606146 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1430 PE16 1606386 1607972 3 PE family protein PE16 - - - status 3 annotated CDS 5 6 +Rv1431 - 1608083 1609852 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1432 - 1609849 1611270 1 dehydrogenase - - - status 3 annotated CDS 5 6 +Rv1433 - 1611434 1612249 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1434 - 1612256 1612393 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1435c - 1612950 1612342 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1436 gap 1613307 1614326 3 glyceraldehyde 3-phosphate dehydrogenase - - - status 3 annotated CDS 5 6 +Rv1437 pgk 1614329 1615567 2 phosphoglycerate kinase - - - status 3 annotated CDS 5 6 +Rv1438 tpi 1615564 1616349 1 triosephosphate isomerase - - - status 3 annotated CDS 5 6 +Rv1439c - 1617386 1616961 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1440 secG 1617837 1618070 3 protein-export membrane protein SecG - - - status 3 annotated CDS 5 6 +Rv1441c PE_PGRS26 1619684 1618209 -3 PE-PGRS family protein PE_PGRS26 - - - status 3 annotated CDS 5 6 +Rv1442 bisC 1619791 1622091 1 biotin sulfoxide reductase BisC - - - status 3 annotated CDS 5 6 +Rv1443c - 1622692 1622207 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1444c - 1623697 1623287 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1445c devB 1624457 1623714 -3 6-phosphogluconolactonase - - - status 3 annotated CDS 5 6 +Rv1446c opcA 1625365 1624454 -2 OXPP cycle protein OpcA - - - status 3 annotated CDS 5 6 +Rv1447c zwf2 1626962 1625418 -3 glucose-6-phosphate 1-dehydrogenase - - - status 3 annotated CDS 5 6 +Rv1448c tal 1628080 1626959 -2 transaldolase - - - status 3 annotated CDS 5 6 +Rv1449c tkt 1630199 1628097 -3 transketolase - - - status 3 annotated CDS 5 6 +Rv1450c PE_PGRS27 1634627 1630638 -3 PE-PGRS family protein PE_PGRS27 - - - status 3 annotated CDS 5 6 +Rv1451 - 1635029 1635955 2 protoheme IX farnesyltransferase - - - status 3 annotated CDS 5 6 +Rv1452c PE_PGRS28 1638229 1636004 -2 PE-PGRS family protein PE_PGRS28 - - - status 3 annotated CDS 5 6 +Rv1453 - 1638381 1639646 3 transcriptional activator protein - - - status 3 annotated CDS 5 6 +Rv1454c qor 1640660 1639674 -3 quinone reductase - - - status 3 annotated CDS 5 6 +Rv1455 - 1640680 1641543 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1456c - 1642425 1641493 -1 antibiotic ABC transporter permease - - - status 3 annotated CDS 5 6 +Rv1457c - 1643322 1642537 -1 antibiotic ABC transporter permease - - - status 3 annotated CDS 5 6 +Rv1458c - 1644260 1643319 -3 antibiotic ABC transporter ATP-binding protein - - - status 3 annotated CDS 5 6 +Rv1459c - 1646138 1644363 -3 alpha-(1->6)-mannopyranosyltransferase - - - status 3 annotated CDS 5 6 +Rv1460 - 1646186 1646992 2 transcriptional regulator - - - status 3 annotated CDS 5 6 +Rv1461 - 1646989 1649529 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1462 - 1649526 1650719 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1463 - 1650716 1651516 2 ABC transporter ATP-binding protein - - - status 3 annotated CDS 5 6 +Rv1464 csd 1651518 1652771 3 cysteine desulfurase - - - status 3 annotated CDS 5 6 +Rv1465 - 1652768 1653256 2 nitrogen fixation related protein - - - status 3 annotated CDS 5 6 +Rv1466 - 1653231 1653578 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1467c fadE15 1655502 1653673 -1 acyl-CoA dehydrogenase FadE15 - - - status 3 annotated CDS 5 6 +Rv1468c PE_PGRS29 1656721 1655609 -2 PE-PGRS family protein PE_PGRS29 - - - status 3 annotated CDS 5 6 +Rv1469 ctpD 1656963 1658936 3 cobalt/nickel-exporting P-type ATPase - - - status 3 annotated CDS 5 6 +Rv1470 trxA 1658980 1659354 1 thioredoxin TrxA - - - status 3 annotated CDS 5 6 +Rv1471 trxB1 1659370 1659741 1 thioredoxin - - - status 3 annotated CDS 5 6 +Rv1472 echA12 1659763 1660620 1 enoyl-CoA hydratase EchA12 - - - status 3 annotated CDS 5 6 +Rv1473 - 1660656 1662284 3 macrolide ABC transporter ATP-binding protein - - - status 3 annotated CDS 5 6 +Rv1473A - 1662381 1662572 3 transcriptional regulator - - - status 3 annotated CDS 5 6 +Rv1474c - 1663204 1662641 -2 transcriptional regulator - - - status 3 annotated CDS 5 6 +Rv1475c acn 1666046 1663215 -3 iron-regulated aconitate hydratase - - - status 3 annotated CDS 5 6 +Rv1476 - 1666204 1666764 1 membrane protein - - - status 3 annotated CDS 5 6 +Rv1477 ripA 1666990 1668408 1 peptidoglycan endopeptidase RipA - - - status 3 annotated CDS 5 6 +Rv1478 - 1668419 1669144 2 peptidoglycan endopeptidase RipB - - - status 3 annotated CDS 5 6 +Rv1479 moxR1 1669283 1670416 2 transcriptional regulator MoxR1 - - - status 3 annotated CDS 5 6 +Rv1480 - 1670413 1671366 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1481 - 1671377 1672384 2 membrane protein - - - status 3 annotated CDS 5 6 +Rv1482c - 1673299 1672457 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1483 fabG1 1673440 1674183 1 3-oxoacyl-ACP reductase FabG - - - status 3 annotated CDS 5 6 +Rv1484 inhA 1674202 1675011 1 NADH-dependent enoyl-[ACP] reductase - - - status 3 annotated CDS 5 6 +Rv1485 hemZ 1675017 1676051 3 ferrochelatase - - - status 3 annotated CDS 5 6 +Rv1486c - 1676883 1676017 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1487 - 1676941 1677375 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1488 - 1677397 1678542 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1489 - 1678552 1678908 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1489A - 1678942 1679172 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1490 - 1679322 1680629 3 membrane protein - - - status 3 annotated CDS 5 6 +Rv1491c - 1681966 1681208 -2 TVP38/TMEM64 family membrane protein - - - status 3 annotated CDS 5 6 +Rv1492 mutA 1682157 1684004 3 methylmalonyl-CoA mutase small subunit - - - status 3 annotated CDS 5 6 +Rv1493 mutB 1684005 1686257 3 methylmalonyl-CoA mutase large subunit - - - status 3 annotated CDS 5 6 +Rv1494 mazE4 1686271 1686573 1 antitoxin MazE4 - - - status 3 annotated CDS 5 6 +Rv1495 mazF4 1686570 1686887 3 mRNA interferase MazF4 - - - status 3 annotated CDS 5 6 +Rv1496 - 1686884 1687888 2 transport system kinase - - - status 3 annotated CDS 5 6 +Rv1497 lipL 1687941 1689230 3 esterase LipL - - - status 3 annotated CDS 5 6 +Rv1498A - 1690346 1690134 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1498c - 1689920 1689303 -3 methyltransferase - - - status 3 annotated CDS 5 6 +Rv1499 - 1690407 1690805 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1500 - 1690850 1691878 2 glycosyltransferase - - - status 3 annotated CDS 5 6 +Rv1501 - 1691890 1692711 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1502 - 1692924 1693823 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1505c - 1695946 1695281 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1506c - 1696443 1695943 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1507A - 1697356 1697859 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1507c - 1697422 1696727 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1508A - 1699866 1700228 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1508c - 1699894 1698095 -2 membrane protein - - - status 3 annotated CDS 5 6 +Rv1509 - 1700212 1701093 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1510 - 1701295 1702593 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1511 gmdA 1703074 1704096 1 GDP-D-mannose dehydratase GmdA - - - status 3 annotated CDS 5 6 +Rv1512 epiA 1704093 1705061 3 nucleotide-sugar epimerase EpiA - - - status 3 annotated CDS 5 6 +Rv1513 - 1705058 1705789 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1514c - 1706595 1705807 -1 glycosyltransferase - - - status 3 annotated CDS 5 6 +Rv1515c - 1707526 1706630 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1516c - 1708539 1707529 -1 sugar transferase - - - status 3 annotated CDS 5 6 +Rv1517 - 1708871 1709635 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1518 - 1709644 1710603 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1519 - 1710733 1711002 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1520 - 1711028 1712068 2 sugar transferase - - - status 3 annotated CDS 5 6 +Rv1521 fadD25 1712302 1714053 1 fatty-acid--CoA ligase FadD25 - - - status 3 annotated CDS 5 6 +Rv1522c mmpL12 1717612 1714172 -2 transmembrane transport protein MmpL12 - - - status 3 annotated CDS 5 6 +Rv1523 - 1717653 1718696 3 methyltransferase - - - status 3 annotated CDS 5 6 +Rv1524 - 1718726 1719970 2 glycosyltransferase - - - status 3 annotated CDS 5 6 +Rv1525 wbbL2 1720017 1720802 3 rhamnosyl transferase WbbL - - - status 3 annotated CDS 5 6 +Rv1526c - 1722060 1720780 -1 glycosyltransferase - - - status 3 annotated CDS 5 6 +Rv1527c pks5 1728409 1722083 -2 polyketide synthase - - - status 3 annotated CDS 5 6 +Rv1528c papA4 1729450 1728953 -2 polyketide synthase associated protein PapA - - - status 3 annotated CDS 5 6 +Rv1529 fadD24 1729502 1731256 2 fatty-acid--CoA ligase FadD24 - - - status 3 annotated CDS 5 6 +Rv1530 adh 1731373 1732476 1 alcohol dehydrogenase - - - status 3 annotated CDS 5 6 +Rv1531 - 1732473 1733039 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1532c - 1733550 1733116 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1533 - 1733610 1734737 3 monooxygenase - - - status 3 annotated CDS 5 6 +Rv1534 - 1734734 1735411 2 transcriptional regulator - - - status 3 annotated CDS 5 6 +Rv1535 - 1735976 1736212 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1536 ileS 1736519 1739644 2 isoleucine--tRNA ligase - - - status 3 annotated CDS 5 6 +Rv1537 dinX 1739856 1741247 3 DNA polymerase IV - - - status 3 annotated CDS 5 6 +Rv1538c ansA 1742192 1741212 -3 L-aparaginase - - - status 3 annotated CDS 5 6 +Rv1539 lspA 1742244 1742852 3 lipoprotein signal peptidase - - - status 3 annotated CDS 5 6 +Rv1540 - 1742845 1743771 1 RNA pseudouridine synthase - - - status 3 annotated CDS 5 6 +Rv1541c lprI 1744371 1743778 -1 lipoprotein LprI - - - status 3 annotated CDS 5 6 +Rv1542c glbN 1744836 1744426 -1 hemoglobin GlbN - - - status 3 annotated CDS 5 6 +Rv1543 - 1745064 1746089 3 oxidoreductase - - - status 3 annotated CDS 5 6 +Rv1544 - 1746094 1746897 1 ketoacyl reductase - - - status 3 annotated CDS 5 6 +Rv1545 - 1746919 1747146 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1546 - 1747195 1747626 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1547 dnaE1 1747694 1751248 2 DNA polymerase III subunit alpha - - - status 3 annotated CDS 5 6 +Rv1548c PPE21 1753333 1751297 -2 PPE family protein PPE21 - - - status 3 annotated CDS 5 6 +Rv1550 fadD11 1753716 1755431 3 fatty-acid--CoA ligase FadD11 - - - status 3 annotated CDS 5 6 +Rv1551 plsB1 1755445 1757310 1 acyltransferase PlsB - - - status 3 annotated CDS 5 6 +Rv1552 frdA 1757681 1759432 2 fumarate reductase flavoprotein subunit - - - status 3 annotated CDS 5 6 +Rv1553 frdB 1759435 1760178 1 fumarate reductase iron-sulfur subunit - - - status 3 annotated CDS 5 6 +Rv1554 frdC 1760175 1760555 3 fumarate reductase membrane anchor subunit - - - status 3 annotated CDS 5 6 +Rv1555 frdD 1760552 1760929 2 fumarate reductase membrane anchor subunit - - - status 3 annotated CDS 5 6 +Rv1556 - 1760997 1761605 3 HTH-type transcriptional regulator - - - status 3 annotated CDS 5 6 +Rv1557 mmpL6 1761744 1762937 3 transmembrane transport protein MmpL6 - - - status 3 annotated CDS 5 6 +Rv1558 - 1762947 1763393 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1559 ilvA 1763428 1764717 1 threonine dehydratase IlvA - - - status 3 annotated CDS 5 6 +Rv1560 vapB11 1764755 1764973 2 antitoxin VapB11 - - - status 3 annotated CDS 5 6 +Rv1561 vapC11 1764979 1765383 1 ribonuclease VapC11 - - - status 3 annotated CDS 5 6 +Rv1562c treZ 1767142 1765400 -2 malto-oligosyltrehalose trehalohydrolase - - - status 3 annotated CDS 5 6 +Rv1563c treY 1769432 1767135 -3 maltooligosyl trehalose synthase - - - status 3 annotated CDS 5 6 +Rv1564c treX 1771601 1769436 -3 maltooligosyl trehalose synthase - - - status 3 annotated CDS 5 6 +Rv1565c - 1773829 1771640 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1566c - 1774620 1773928 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1567c - 1775144 1774860 -3 membrane protein - - - status 3 annotated CDS 5 6 +Rv1568 bioA 1775392 1776705 1 adenosylmethionine-8-amino-7-oxononanoate aminotransferase - - - status 3 annotated CDS 5 6 +Rv1569 bioF1 1776702 1777862 3 8-amino-7-oxononanoate synthase - - - status 3 annotated CDS 5 6 +Rv1570 bioD 1777859 1778539 2 ATP-dependent dethiobiotin synthetase BioD - - - status 3 annotated CDS 5 6 +Rv1571 - 1778539 1779048 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1573 - 1779314 1779724 2 phage protein - - - status 3 annotated CDS 5 6 +Rv1574 - 1779930 1780241 3 phage protein - - - status 3 annotated CDS 5 6 +Rv1575 - 1780199 1780699 2 phage protein - - - status 3 annotated CDS 5 6 +Rv1576c - 1782064 1780643 -2 phage capsid protein - - - status 3 annotated CDS 5 6 +Rv1577c - 1782584 1782072 -3 phage prohead protease - - - status 3 annotated CDS 5 6 +Rv1578c - 1783228 1782758 -2 phage protein - - - status 3 annotated CDS 5 6 +Rv1579c - 1783623 1783309 -1 phage protein - - - status 3 annotated CDS 5 6 +Rv1580c - 1783892 1783620 -3 phage protein - - - status 3 annotated CDS 5 6 +Rv1581c - 1784301 1783906 -1 phage protein - - - status 3 annotated CDS 5 6 +Rv1582c - 1785912 1784497 -1 phage protein - - - status 3 annotated CDS 5 6 +Rv1583c - 1786310 1785912 -3 phage protein - - - status 3 annotated CDS 5 6 +Rv1584c - 1786528 1786307 -2 phage protein - - - status 3 annotated CDS 5 6 +Rv1585c - 1787099 1786584 -3 phage protein - - - status 3 annotated CDS 5 6 +Rv1586c - 1788505 1787096 -2 phage integrase - - - status 3 annotated CDS 5 6 +Rv1587c - 1789163 1788162 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1588c - 1789836 1789168 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1589 bioB 1790284 1791333 1 biotin synthetase - - - status 3 annotated CDS 5 6 +Rv1590 - 1791334 1791573 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1591 - 1791570 1792235 3 transmembrane protein - - - status 3 annotated CDS 5 6 +Rv1592c - 1793740 1792400 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1593c - 1794707 1793997 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1594 nadA 1794756 1795805 3 quinolinate synthetase A - - - status 3 annotated CDS 5 6 +Rv1595 nadB 1795805 1797388 2 L-aspartate oxidase - - - status 3 annotated CDS 5 6 +Rv1596 nadC 1797388 1798245 1 nicotinate-nucleotide pyrophosphatase - - - status 3 annotated CDS 5 6 +Rv1597 - 1798294 1799052 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1598c - 1799483 1799073 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1599 hisD 1799583 1800899 3 histidinol dehydrogenase - - - status 3 annotated CDS 5 6 +Rv1600 hisC1 1800896 1802038 2 histidinol-phosphate aminotransferase - - - status 3 annotated CDS 5 6 +Rv1601 hisB 1802035 1802667 1 imidazole glycerol-phosphate dehydratase - - - status 3 annotated CDS 5 6 +Rv1602 hisH 1802664 1803284 3 imidazole glycerol phosphate synthase subunit HisH - - - status 3 annotated CDS 5 6 +Rv1603 hisA 1803294 1804031 3 phosphoribosyl isomerase A - - - status 3 annotated CDS 5 6 +Rv1604 impA 1804039 1804851 1 inositol-monophosphatase ImpA - - - status 3 annotated CDS 5 6 +Rv1605 hisF 1804853 1805656 2 imidazole glycerol phosphate synthase subunit HisF - - - status 3 annotated CDS 5 6 +Rv1606 hisI 1805653 1806000 1 phosphoribosyl-AMP cyclohydrolase - - - status 3 annotated CDS 5 6 +Rv1607 chaA 1806181 1807263 1 ionic transporter integral membrane protein ChaA - - - status 3 annotated CDS 5 6 +Rv1608c bcpB 1807762 1807298 -2 peroxiredoxin - - - status 3 annotated CDS 5 6 +Rv1609 trpE 1807903 1809453 1 anthranilate synthase component I - - - status 3 annotated CDS 5 6 +Rv1610 - 1809443 1810150 2 membrane protein - - - status 3 annotated CDS 5 6 +Rv1611 trpC 1810240 1811058 1 indole-3-glycerol phosphate synthase - - - status 3 annotated CDS 5 6 +Rv1612 trpB 1811127 1812359 3 tryptophan synthase subunit beta - - - status 3 annotated CDS 5 6 +Rv1613 trpA 1812359 1813171 2 tryptophan synthase subunit alpha - - - status 3 annotated CDS 5 6 +Rv1614 lgt 1813171 1814577 1 prolipoprotein diacylglyceryl transferase - - - status 3 annotated CDS 5 6 +Rv1615 - 1815253 1815693 1 membrane protein - - - status 3 annotated CDS 5 6 +Rv1616 - 1815683 1816081 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1617 pykA 1816189 1817607 1 pyruvate kinase - - - status 3 annotated CDS 5 6 +Rv1618 tesB1 1817615 1818517 2 acyl-CoA thioesterase TesB - - - status 3 annotated CDS 5 6 +Rv1619 - 1818575 1820029 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1620c cydC 1821693 1819963 -1 cytochrome biosyntheisis ABC transporter ATP-binding protein/permease CydC - - - status 3 annotated CDS 5 6 +Rv1621c cydD 1823273 1821690 -3 cytochrome biosyntheisis ABC transporter ATP-binding protein/permease CydD - - - status 3 annotated CDS 5 6 +Rv1622c cydB 1824400 1823360 -2 cytochrome D ubiquinol oxidase subunit II CydB - - - status 3 annotated CDS 5 6 +Rv1623c cydA 1825887 1824430 -1 cytochrome D ubiquinol oxidase subunit I CydA - - - status 3 annotated CDS 5 6 +Rv1624c - 1826585 1825998 -3 membrane protein - - - status 3 annotated CDS 5 6 +Rv1625c cya 1827945 1826614 -1 adenylyl cyclase - - - status 3 annotated CDS 5 6 +Rv1626 - 1828180 1828797 1 two-component system transcriptional regulator - - - status 3 annotated CDS 5 6 +Rv1627c - 1830073 1828865 -2 nonspecific lipid-transfer protein - - - status 3 annotated CDS 5 6 +Rv1628c - 1830561 1830070 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1629 polA 1830665 1833379 2 DNA polymerase I - - - status 3 annotated CDS 5 6 +Rv1630 rpsA 1833542 1834987 2 30S ribosomal protein S1 - - - status 3 annotated CDS 5 6 +Rv1631 coaE 1835013 1836236 3 dephospho-CoA kinase CoaE - - - status 3 annotated CDS 5 6 +Rv1632c - 1836830 1836387 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1633 uvrB 1837075 1839171 1 excinuclease ABC subunit UvrB - - - status 3 annotated CDS 5 6 +Rv1634 - 1839168 1840583 3 multidrug-efflux transporter - - - status 3 annotated CDS 5 6 +Rv1635c - 1842242 1840572 -3 mannosyltransferase - - - status 3 annotated CDS 5 6 +Rv1636 TB15.3 1842451 1842891 1 iron-regulated universal stress protein - - - status 3 annotated CDS 5 6 +Rv1637c - 1843692 1842898 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1638 uvrA 1843741 1846659 1 excinuclease ABC subunit UvrA - - - status 3 annotated CDS 5 6 +Rv1638A - 1846973 1846716 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1639c - 1848458 1846989 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1640c lysX 1852035 1848517 -1 bifunctional lysine--tRNA ligase/phosphatidylglycerol lysyltransferase - - - status 3 annotated CDS 5 6 +Rv1641 infC 1852273 1852878 1 initiation factor IF-3 - - - status 3 annotated CDS 5 6 +Rv1642 rpmI 1852928 1853122 2 50S ribosomal protein L35 - - - status 3 annotated CDS 5 6 +Rv1643 rplT 1853184 1853573 3 50S ribosomal protein L20 - - - status 3 annotated CDS 5 6 +Rv1644 tsnR 1853606 1854388 2 23S rRNA methyltransferase TsnR - - - status 3 annotated CDS 5 6 +Rv1645c - 1855454 1854399 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1646 PE17 1855764 1856696 3 PE family protein PE17 - - - status 3 annotated CDS 5 6 +Rv1647 - 1856774 1857724 2 adenylate cyclase - - - status 3 annotated CDS 5 6 +Rv1648 - 1857731 1858537 2 transmembrane protein - - - status 3 annotated CDS 5 6 +Rv1649 pheS 1858733 1859758 2 phenylalanine--tRNA ligase subunit alpha - - - status 3 annotated CDS 5 6 +Rv1650 pheT 1859758 1862253 1 phenylalanine--tRNA ligase subunit beta - - - status 3 annotated CDS 5 6 +Rv1651c PE_PGRS30 1865382 1862347 -1 PE-PGRS family protein PE_PGRS30 - - - status 3 annotated CDS 5 6 +Rv1652 argC 1865576 1866634 2 N-acetyl-gamma-glutamyl-phoshate reductase - - - status 3 annotated CDS 5 6 +Rv1653 argJ 1866631 1867845 1 bifunctional glutamate N-acetyltransferase/amino-acid acetyltransferase - - - status 3 annotated CDS 5 6 +Rv1654 argB 1867842 1868726 3 acetylglutamate kinase - - - status 3 annotated CDS 5 6 +Rv1655 argD 1868723 1869925 2 acetylornithine aminotransferase - - - status 3 annotated CDS 5 6 +Rv1656 argF 1869922 1870845 1 ornithine carbamoyltransferase - - - status 3 annotated CDS 5 6 +Rv1657 argR 1870842 1871354 3 arginine repressor - - - status 3 annotated CDS 5 6 +Rv1658 argG 1871363 1872559 2 argininosuccinate synthase - - - status 3 annotated CDS 5 6 +Rv1659 argH 1872639 1874051 3 argininosuccinate lyase - - - status 3 annotated CDS 5 6 +Rv1660 pks10 1874160 1875221 3 chalcone synthase - - - status 3 annotated CDS 5 6 +Rv1661 pks7 1875304 1881684 1 polyketide synthase - - - status 3 annotated CDS 5 6 +Rv1662 pks8 1881704 1886512 2 polyketide synthase - - - status 3 annotated CDS 5 6 +Rv1663 pks17 1886512 1888020 1 polyketide synthase - - - status 3 annotated CDS 5 6 +Rv1664 pks9 1888026 1891079 3 polyketide synthase - - - status 3 annotated CDS 5 6 +Rv1665 pks11 1891226 1892287 2 chalcone synthase - - - status 3 annotated CDS 5 6 +Rv1666c cyp139 1893562 1892270 -2 cytochrome P450 Cyp139 - - - status 3 annotated CDS 5 6 +Rv1669 - 1895725 1896087 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1670 - 1896120 1896467 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1671 - 1896475 1896867 1 membrane protein - - - status 3 annotated CDS 5 6 +Rv1672c - 1898207 1896876 -3 integral membrane transport protein - - - status 3 annotated CDS 5 6 +Rv1673c - 1899232 1898300 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1674c - 1899916 1899260 -2 transcriptional regulator - - - status 3 annotated CDS 5 6 +Rv1675c cmr 1900975 1900241 -2 HTH-type transcriptional regulator Cmr - - - status 3 annotated CDS 5 6 +Rv1676 - 1901047 1901751 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1677 dsbF 1901748 1902296 3 lipoprotein DsbF - - - status 3 annotated CDS 5 6 +Rv1678 - 1902397 1903299 1 integral membrane protein - - - status 3 annotated CDS 5 6 +Rv1679 fadE16 1903299 1904420 3 acyl-CoA dehydrogenase FadE16 - - - status 3 annotated CDS 5 6 +Rv1680 - 1904429 1905253 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1681 moeX 1905250 1906242 1 molybdopterin biosynthesis protein MoeX - - - status 3 annotated CDS 5 6 +Rv1682 - 1906403 1907320 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1683 - 1907594 1910593 2 bifunctional long-chain acyl-CoA synthase/lipase - - - status 3 annotated CDS 5 6 +Rv1684 - 1910586 1910810 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1685c - 1911399 1910776 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1686c - 1912081 1911401 -2 ABC transporter permease - - - status 3 annotated CDS 5 6 +Rv1687c - 1912920 1912153 -1 ABC transporter ATP-binding protein - - - status 3 annotated CDS 5 6 +Rv1688 mpg 1912979 1913590 2 3-methyladenine DNA glycosylase - - - status 3 annotated CDS 5 6 +Rv1689 tyrS 1913602 1914876 1 tyrosine--tRNA ligase - - - status 3 annotated CDS 5 6 +Rv1690 lprJ 1915527 1915910 3 lipoprotein LprJ - - - status 3 annotated CDS 5 6 +Rv1691 - 1915949 1916701 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1692 - 1916698 1917759 1 phosphatase - - - status 3 annotated CDS 5 6 +Rv1693 - 1917756 1917932 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1694 tlyA 1917940 1918746 1 16S/23S rRNA (cytidine-2'-O)-methyltransferase TlyA - - - status 3 annotated CDS 5 6 +Rv1695 ppnK 1918746 1919669 3 inorganic polyphosphate/ATP-NAD kinase - - - status 3 annotated CDS 5 6 +Rv1696 recN 1919683 1921446 1 DNA repair protein RecN - - - status 3 annotated CDS 5 6 +Rv1697 - 1921542 1922723 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1698 mctB 1922745 1923689 3 copper transporter MctB - - - status 3 annotated CDS 5 6 +Rv1699 pyrG 1923829 1925589 1 CTP synthase - - - status 3 annotated CDS 5 6 +Rv1700 - 1925582 1926205 2 NUDIX hydrolase - - - status 3 annotated CDS 5 6 +Rv1701 - 1926202 1927137 1 tyrosine recombinase XerD - - - status 3 annotated CDS 5 6 +Rv1702c - 1928575 1927211 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1703c - 1929880 1929131 -2 methyltransferase - - - status 3 annotated CDS 5 6 +Rv1704c cycA 1931456 1929786 -3 D-serine/alanine/glycine transporter protein CycA - - - status 3 annotated CDS 5 6 +Rv1705c PPE22 1932654 1931497 -1 PPE family protein PPE22 - - - status 3 annotated CDS 5 6 +Rv1706A - 1934649 1934482 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1706c PPE23 1933878 1932694 -1 PPE family protein PPE23 - - - status 3 annotated CDS 5 6 +Rv1707 - 1934882 1936342 2 transmembrane protein - - - status 3 annotated CDS 5 6 +Rv1708 - 1936360 1937316 1 initiation inhibitor protein - - - status 3 annotated CDS 5 6 +Rv1709 scpA 1937313 1938149 3 segregation and condensation protein ScpA - - - status 3 annotated CDS 5 6 +Rv1710 scpB 1938146 1938841 2 segregation and condensation protein ScpB - - - status 3 annotated CDS 5 6 +Rv1711 - 1938838 1939602 1 RNA pseudouridine synthase - - - status 3 annotated CDS 5 6 +Rv1712 cmk 1939599 1940291 3 cytidylate kinase - - - status 3 annotated CDS 5 6 +Rv1713 engA 1940288 1941679 2 GTPase Der - - - status 3 annotated CDS 5 6 +Rv1714 - 1941853 1942665 1 oxidoreductase - - - status 3 annotated CDS 5 6 +Rv1715 fadB3 1942659 1943573 3 3-hydroxybutyryl-CoA dehydrogenase FadB - - - status 3 annotated CDS 5 6 +Rv1716 - 1943576 1944406 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1717 - 1944406 1944756 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1718 - 1944809 1945627 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1719 - 1945641 1946420 3 transcriptional regulator - - - status 3 annotated CDS 5 6 +Rv1720c vapC12 1947419 1947030 -3 ribonuclease VapC12 - - - status 3 annotated CDS 5 6 +Rv1721c vapB12 1947643 1947416 -2 antitoxin VapB12 - - - status 3 annotated CDS 5 6 +Rv1722 - 1947861 1949345 3 carboxylase - - - status 3 annotated CDS 5 6 +Rv1723 - 1949342 1950589 2 hydrolase - - - status 3 annotated CDS 5 6 +Rv1724c - 1951051 1950632 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1725c - 1951751 1951041 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1726 - 1951852 1953237 1 oxidoreductase - - - status 3 annotated CDS 5 6 +Rv1727 - 1953270 1953839 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1728c - 1954634 1953864 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1729c - 1955569 1954631 -2 S-adenosylmethionine-dependentmethyltransferase - - - status 3 annotated CDS 5 6 +Rv1730c - 1957245 1955692 -1 penicillin-binding protein - - - status 3 annotated CDS 5 6 +Rv1731 gabD2 1957677 1959233 3 succinate-semialdehyde dehydrogenase - - - status 3 annotated CDS 5 6 +Rv1732c - 1959791 1959243 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1733c - 1960487 1959855 -3 transmembrane protein - - - status 3 annotated CDS 5 6 +Rv1734c - 1961016 1960774 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1735a - 1962129 1961887 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1735c - 1961788 1961291 -2 membrane protein - - - status 3 annotated CDS 5 6 +Rv1736c narX 1964186 1962228 -3 nitrate reductase-like protein NarX - - - status 3 annotated CDS 5 6 +Rv1737c narK2 1965370 1964183 -2 nitrate/nitrite transporter - - - status 3 annotated CDS 5 6 +Rv1738 - 1965657 1965941 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1739c - 1967637 1965955 -1 sulfate ABC transporter permease - - - status 3 annotated CDS 5 6 +Rv1740 vapB34 1967705 1967917 2 antitoxin VapB34 - - - status 3 annotated CDS 5 6 +Rv1741 vapC34 1967917 1968165 1 ribonuclease VapC34 - - - status 3 annotated CDS 5 6 +Rv1742 - 1968173 1968910 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1743 pknE 1969004 1970704 2 serine/threonine-protein kinase PknE - - - status 3 annotated CDS 5 6 +Rv1744c - 1971390 1970989 -1 membrane protein - - - status 3 annotated CDS 5 6 +Rv1745c idi 1971991 1971380 -2 isopentenyl-diphosphate delta-isomerase - - - status 3 annotated CDS 5 6 +Rv1746 pknF 1972138 1973568 1 serine/threonine-protein kinase PknF - - - status 3 annotated CDS 5 6 +Rv1747 - 1973630 1976227 2 ABC transporter ATP-binding protein/permease - - - status 3 annotated CDS 5 6 +Rv1748 - 1976600 1977331 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1749c - 1977885 1977328 -1 integral membrane protein - - - status 3 annotated CDS 5 6 +Rv1750c fadD1 1979567 1977969 -3 fatty-acid--CoA ligase FadD1 - - - status 3 annotated CDS 5 6 +Rv1751 - 1979621 1981003 2 oxidoreductase - - - status 3 annotated CDS 5 6 +Rv1752 - 1981130 1981579 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1753c PPE24 1984775 1981614 -3 PPE family protein PPE24 - - - status 3 annotated CDS 5 6 +Rv1754c - 1986670 1984979 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1758 cut1 1989042 1989566 3 cutinase - - - status 3 annotated CDS 5 6 +Rv1759c wag22 1992577 1989833 -2 PE-PGRS family protein Wag22 - - - status 3 annotated CDS 5 6 +Rv1760 - 1993153 1994661 1 diacylglycerol acyltransferase - - - status 3 annotated CDS 5 6 +Rv1761c - 1995054 1994671 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1762c - 1995842 1995054 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1765c - 1998515 1997418 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1766 - 1999737 2000006 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1767 - 2000074 2000433 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1768 PE_PGRS31 2000614 2002470 1 PE-PGRS family protein PE_PGRS31 - - - status 3 annotated CDS 5 6 +Rv1769 - 2002626 2003870 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1770 - 2003878 2005164 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1771 - 2005161 2006447 3 L-gulono-1,4-lactone dehydrogenase - - - status 3 annotated CDS 5 6 +Rv1772 - 2006636 2006947 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1773c - 2007766 2007020 -2 transcriptional regulator - - - status 3 annotated CDS 5 6 +Rv1774 - 2007832 2009172 1 oxidoreductase - - - status 3 annotated CDS 5 6 +Rv1775 - 2009172 2009990 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1776c - 2010555 2009995 -1 transcriptional regulator - - - status 3 annotated CDS 5 6 +Rv1777 cyp144 2010656 2011960 2 cytochrome P450 Cyp144 - - - status 3 annotated CDS 5 6 +Rv1778c - 2012530 2012081 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1779c - 2014479 2012686 -1 integral membrane protein - - - status 3 annotated CDS 5 6 +Rv1780 - 2014699 2015262 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1781c malQ 2017476 2015302 -1 4-alpha-glucanotransferase - - - status 3 annotated CDS 5 6 +Rv1782 eccB5 2017740 2019260 3 ESX-5 type VII secretion system protein EccB5 - - - status 3 annotated CDS 5 6 +Rv1783 eccC5 2019257 2023432 2 ESX-5 type VII secretion system protein EccC5 - - - status 3 annotated CDS 5 6 +Rv1785c cyp143 2024628 2023447 -1 cytochrome P450 Cyp143 - - - status 3 annotated CDS 5 6 +Rv1786 - 2024828 2025031 2 ferredoxin - - - status 3 annotated CDS 5 6 +Rv1787 PPE25 2025301 2026398 1 PPE family protein PPE25 - - - status 3 annotated CDS 5 6 +Rv1788 PE18 2026477 2026776 1 PE family protein PE18 - - - status 3 annotated CDS 5 6 +Rv1789 PPE26 2026790 2027971 2 PPE family protein PPE26 - - - status 3 annotated CDS 5 6 +Rv1790 PPE27 2028425 2029477 2 PPE family protein PPE27 - - - status 3 annotated CDS 5 6 +Rv1791 PE19 2029904 2030203 2 PE family protein PE19 - - - status 3 annotated CDS 5 6 +Rv1793 esxN 2030694 2030978 3 ESAT-6 like protein EsxN - - - status 3 annotated CDS 5 6 +Rv1794 - 2031066 2031968 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1795 eccD5 2032240 2033751 1 ESX-5 type VII secretion system protein EccD - - - status 3 annotated CDS 5 6 +Rv1796 mycP5 2033729 2035486 2 membrane-anchored mycosin MycP - - - status 3 annotated CDS 5 6 +Rv1797 eccE5 2035483 2036703 1 ESX-5 type VII secretion system protein EccE - - - status 3 annotated CDS 5 6 +Rv1798 eccA5 2036700 2038532 3 ESX-5 type VII secretion system protein EccA - - - status 3 annotated CDS 5 6 +Rv1799 lppT 2039159 2039350 2 lipoprotein LppT - - - status 3 annotated CDS 5 6 +Rv1800 PPE28 2039453 2041420 2 PPE family protein PPE28 - - - status 3 annotated CDS 5 6 +Rv1801 PPE29 2042001 2043272 3 PPE family protein PPE29 - - - status 3 annotated CDS 5 6 +Rv1802 PPE30 2043384 2044775 3 PPE family protein PPE30 - - - status 3 annotated CDS 5 6 +Rv1803c PE_PGRS32 2046842 2044923 -3 PE-PGRS family protein PE_PGRS32 - - - status 3 annotated CDS 5 6 +Rv1804c - 2047349 2047023 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1805c - 2048034 2047687 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1806 PE20 2048072 2048371 2 PE family protein PE20 - - - status 3 annotated CDS 5 6 +Rv1808 PPE32 2049921 2051150 3 PPE family protein PPE32 - - - status 3 annotated CDS 5 6 +Rv1809 PPE33 2051282 2052688 2 PPE family protein PPE33 - - - status 3 annotated CDS 5 6 +Rv1810 - 2052933 2053289 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1811 mgtC 2053443 2054147 3 Mg2+ transport P-type ATPase MgtC - - - status 3 annotated CDS 5 6 +Rv1812c - 2055359 2054157 -3 dehydrogenase - - - status 3 annotated CDS 5 6 +Rv1813c - 2056112 2055681 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1814 erg3 2056521 2057423 3 membrane-bound C-5 sterol desaturase - - - status 3 annotated CDS 5 6 +Rv1815 - 2057528 2058193 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1816 - 2058256 2058960 1 HTH-type transcriptional regulator - - - status 3 annotated CDS 5 6 +Rv1817 - 2059595 2061058 2 flavoprotein - - - status 3 annotated CDS 5 6 +Rv1818c PE_PGRS33 2062674 2061178 -1 PE-PGRS family protein PE_PGRS33 - - - status 3 annotated CDS 5 6 +Rv1819c bacA 2064728 2062809 -3 vitamin B12 transport ATP-binding protein BacA - - - status 3 annotated CDS 5 6 +Rv1820 ilvG 2064799 2066442 1 acetolactate synthase large subunit IlvG - - - status 3 annotated CDS 5 6 +Rv1821 secA2 2066457 2068883 3 protein translocase subunit SecA - - - status 3 annotated CDS 5 6 +Rv1822 pgsA2 2069080 2069709 1 CDP-diacylglycerol--glycerol-3-phosphate 3-phosphatidyltransferase - - - status 3 annotated CDS 5 6 +Rv1823 - 2069702 2070625 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1824 - 2070654 2071019 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1825 - 2071036 2071914 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1826 gcvH 2071952 2072356 2 glycine cleavage system protein H - - - status 3 annotated CDS 5 6 +Rv1827 garA 2072596 2073084 1 glycogen accumulation regulator GarA - - - status 3 annotated CDS 5 6 +Rv1828 - 2073081 2073824 3 HTH-type transcriptional regulator - - - status 3 annotated CDS 5 6 +Rv1829 - 2073943 2074437 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1830 - 2074841 2075518 2 HTH-type transcriptional regulator - - - status 3 annotated CDS 5 6 +Rv1831 - 2075571 2075828 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1832 gcvB 2075877 2078702 3 glycine dehydrogenase - - - status 3 annotated CDS 5 6 +Rv1833c - 2079789 2078929 -1 haloalkane dehalogenase - - - status 3 annotated CDS 5 6 +Rv1834 lipZ 2079830 2080696 2 hydrolase - - - status 3 annotated CDS 5 6 +Rv1835c - 2082587 2080701 -3 serine esterase - - - status 3 annotated CDS 5 6 +Rv1836c - 2084636 2082603 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1837c glcB 2086981 2084756 -2 malate synthase - - - status 3 annotated CDS 5 6 +Rv1838c vapC13 2087652 2087257 -1 ribonuclease VapC13 - - - status 3 annotated CDS 5 6 +Rv1839c vapB13 2087912 2087649 -3 antitoxin VapB13 - - - status 3 annotated CDS 5 6 +Rv1840c PE_PGRS34 2089518 2087971 -1 PE-PGRS family protein PE_PGRS34 - - - status 3 annotated CDS 5 6 +Rv1841c - 2090718 2089681 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1842c - 2092085 2090718 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1843c guaB1 2093698 2092259 -2 inosine-5'-monophosphate dehydrogenase - - - status 3 annotated CDS 5 6 +Rv1844c gnd1 2095188 2093731 -1 6-phosphogluconate dehydrogenase - - - status 3 annotated CDS 5 6 +Rv1845c blaR 2096168 2095218 -3 sensor-transducer protein BlaR - - - status 3 annotated CDS 5 6 +Rv1846c blaI 2096599 2096183 -2 transcriptional repressor BlaI - - - status 3 annotated CDS 5 6 +Rv1847 - 2096877 2097299 3 esterase - - - status 3 annotated CDS 5 6 +Rv1848 ureA 2097348 2097650 3 urease subunit gamma - - - status 3 annotated CDS 5 6 +Rv1849 ureB 2097647 2097961 2 urease subunit beta - - - status 3 annotated CDS 5 6 +Rv1850 ureC 2097961 2099694 1 urease subunit alpha - - - status 3 annotated CDS 5 6 +Rv1851 ureF 2099694 2100329 3 urease accessory protein UreF - - - status 3 annotated CDS 5 6 +Rv1852 ureG 2100340 2101014 1 urease accessory protein UreG - - - status 3 annotated CDS 5 6 +Rv1853 ureD 2101022 2101648 2 urease accessory protein UreD - - - status 3 annotated CDS 5 6 +Rv1854c ndh 2103042 2101651 -1 NADH dehydrogenase - - - status 3 annotated CDS 5 6 +Rv1855c - 2104107 2103184 -1 oxidoreductase - - - status 3 annotated CDS 5 6 +Rv1856c - 2104823 2104146 -3 oxidoreductase - - - status 3 annotated CDS 5 6 +Rv1857 modA 2104985 2105770 2 molybdate ABC transporter substrate-binding lipoprotein ModA - - - status 3 annotated CDS 5 6 +Rv1858 modB 2105773 2106567 1 molybdenum ABC transporter permease ModB - - - status 3 annotated CDS 5 6 +Rv1859 modC 2106574 2107683 1 molybdenum ABC transporter ATP-binding protein ModC - - - status 3 annotated CDS 5 6 +Rv1860 apa 2107736 2108713 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1861 - 2109165 2109470 3 transmembrane protein - - - status 3 annotated CDS 5 6 +Rv1862 adhA 2109544 2110584 1 alcohol dehydrogenase A - - - status 3 annotated CDS 5 6 +Rv1863c - 2111361 2110591 -1 integral membrane protein - - - status 3 annotated CDS 5 6 +Rv1864c - 2112109 2111354 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1865c - 2112966 2112106 -1 short-chain type dehydrogenase - - - status 3 annotated CDS 5 6 +Rv1866 - 2113140 2115476 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1867 - 2115764 2117248 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1868 - 2117347 2119446 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1869c - 2120695 2119460 -2 reductase - - - status 3 annotated CDS 5 6 +Rv1870c - 2121430 2120795 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1871c - 2121884 2121495 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1872c lldD2 2123151 2121907 -1 L-lactate dehydrogenase - - - status 3 annotated CDS 5 6 +Rv1873 - 2123174 2123611 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1874 - 2123684 2124370 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1875 - 2124381 2124824 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1876 bfrA 2125340 2125819 2 bacterioferritin BfrA - - - status 3 annotated CDS 5 6 +Rv1877 - 2125904 2127967 2 MFS-type transporter - - - status 3 annotated CDS 5 6 +Rv1878 glnA3 2128022 2129374 2 glutamine synthetase GlnA - - - status 3 annotated CDS 5 6 +Rv1879 - 2129377 2130513 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1880c cyp140 2131857 2130541 -1 cytochrome P450 Cyp140 - - - status 3 annotated CDS 5 6 +Rv1881c lppE 2132329 2131907 -2 lipoprotein LppE - - - status 3 annotated CDS 5 6 +Rv1882c - 2133203 2132370 -3 short-chain type dehydrogenase/reductase - - - status 3 annotated CDS 5 6 +Rv1883c - 2133692 2133231 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1884c rpfC 2134261 2133731 -2 resuscitation-promoting factor RpfC - - - status 3 annotated CDS 5 6 +Rv1885c - 2134872 2134273 -1 chorismate mutase - - - status 3 annotated CDS 5 6 +Rv1886c fbpB 2135867 2134890 -3 diacylglycerol acyltransferase/mycolyltransferase Ag85B - - - status 3 annotated CDS 5 6 +Rv1887 - 2136258 2137400 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1890c - 2139687 2139076 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1891 - 2139741 2140148 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1892 - 2140165 2140476 1 membrane protein - - - status 3 annotated CDS 5 6 +Rv1893 - 2140486 2140704 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1894c - 2141869 2140739 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1895 - 2142521 2143675 2 zinc-binding alcohol dehydrogenase - - - status 3 annotated CDS 5 6 +Rv1896c - 2144446 2143535 -2 S-adenosyl-L-methionine-dependentmethyltransferase - - - status 3 annotated CDS 5 6 +Rv1897c - 2144882 2144451 -3 D-tyrosyl-tRNA(Tyr) deacylase - - - status 3 annotated CDS 5 6 +Rv1898 - 2144940 2145248 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1899c lppD 2146245 2145214 -1 lipoprotein LppD - - - status 3 annotated CDS 5 6 +Rv1900c lipJ 2147633 2146245 -3 lignin peroxidase LipJ - - - status 3 annotated CDS 5 6 +Rv1901 cinA 2147662 2148954 1 competence damage-inducible protein CinA - - - status 3 annotated CDS 5 6 +Rv1902c nanT 2150274 2149006 -1 sialic acid-transport integral membrane protein NanT - - - status 3 annotated CDS 5 6 +Rv1903 - 2150364 2150768 3 membrane protein - - - status 3 annotated CDS 5 6 +Rv1904 - 2150954 2151385 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1905c aao 2152395 2151433 -1 D-amino acid oxidase - - - status 3 annotated CDS 5 6 +Rv1906c - 2152895 2152425 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1907c - 2153882 2153235 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1908c katG 2156111 2153889 -3 catalase-peroxidase - - - status 3 annotated CDS 5 6 +Rv1909c furA 2156592 2156149 -1 ferric uptake regulation protein FurA - - - status 3 annotated CDS 5 6 +Rv1910c - 2157299 2156706 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1911c lppC 2157987 2157382 -1 lipoprotein LppC - - - status 3 annotated CDS 5 6 +Rv1912c fadB5 2159091 2158087 -1 oxidoreductase FadB - - - status 3 annotated CDS 5 6 +Rv1913 - 2159191 2159943 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1914c - 2160328 2159921 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1915 aceAa 2160463 2161566 1 isocitrate lyase AceAa - - - status 3 annotated CDS 5 6 +Rv1916 aceAb 2161566 2162762 3 isocitrate lyase AceAb - - - status 3 annotated CDS 5 6 +Rv1917c PPE34 2167311 2162932 -1 PPE family protein PPE34 - - - status 3 annotated CDS 5 6 +Rv1918c PPE35 2170612 2167649 -2 PPE family protein PPE35 - - - status 3 annotated CDS 5 6 +Rv1919c - 2171525 2171061 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1920 - 2171623 2172486 1 membrane protein - - - status 3 annotated CDS 5 6 +Rv1921c lppF 2173795 2172524 -2 lipoprotein LppF - - - status 3 annotated CDS 5 6 +Rv1922 - 2174067 2175182 3 lipoprotein - - - status 3 annotated CDS 5 6 +Rv1923 lipD 2175173 2176513 2 lipase LipD - - - status 3 annotated CDS 5 6 +Rv1924c - 2176930 2176550 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1925 fadD31 2177087 2178949 2 fatty-acid--CoA ligase FadD31 - - - status 3 annotated CDS 5 6 +Rv1926c mpt63 2179436 2178957 -3 immunogenic protein Mpt63 - - - status 3 annotated CDS 5 6 +Rv1927 - 2179673 2180446 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1928c - 2181217 2180450 -2 short-chain type dehydrogenase/reductase - - - status 3 annotated CDS 5 6 +Rv1929c - 2181906 2181262 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1930c - 2182442 2181918 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1931c - 2183239 2182460 -2 transcriptional regulator - - - status 3 annotated CDS 5 6 +Rv1932 tpx 2183372 2183869 2 thiol peroxidase - - - status 3 annotated CDS 5 6 +Rv1933c fadE18 2184957 2183866 -1 acyl-CoA dehydrogenase FadE18 - - - status 3 annotated CDS 5 6 +Rv1934c fadE17 2186188 2184959 -2 acyl-CoA dehydrogenase FadE17 - - - status 3 annotated CDS 5 6 +Rv1935c echA13 2187159 2186203 -1 enoyl-CoA hydratase EchA13 - - - status 3 annotated CDS 5 6 +Rv1936 - 2187384 2188493 3 monooxygenase - - - status 3 annotated CDS 5 6 +Rv1937 - 2188496 2191015 2 oxygenase - - - status 3 annotated CDS 5 6 +Rv1938 ephB 2191027 2192097 1 epoxide hydrolase EphB - - - status 3 annotated CDS 5 6 +Rv1939 - 2192094 2192609 3 oxidoreductase - - - status 3 annotated CDS 5 6 +Rv1940 ribA1 2192606 2193667 2 riboflavin biosynthesis protein RibA - - - status 3 annotated CDS 5 6 +Rv1941 - 2193664 2194434 1 short-chain type dehydrogenase/reductase - - - status 3 annotated CDS 5 6 +Rv1942c mazF5 2194973 2194644 -3 toxin MazF5 - - - status 3 annotated CDS 5 6 +Rv1943c mazE5 2195347 2194970 -2 antitoxin MazE5 - - - status 3 annotated CDS 5 6 +Rv1944c - 2195934 2195344 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1945 - 2195989 2197353 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1946c lppG 2197960 2197508 -2 lipoprotein - - - status 3 annotated CDS 5 6 +Rv1947 - 2198024 2198425 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1948c - 2199064 2198714 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1950c - 2200189 2199998 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1951c - 2200486 2200190 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1952 vapB14 2200726 2200941 1 antitoxin VapB14 - - - status 3 annotated CDS 5 6 +Rv1953 vapC14 2200938 2201249 3 ribonuclease VapC14 - - - status 3 annotated CDS 5 6 +Rv1954c - 2201744 2201223 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1955 higB 2201719 2202096 1 toxin HigB - - - status 3 annotated CDS 5 6 +Rv1956 higA 2202138 2202587 3 antitoxin HigA - - - status 3 annotated CDS 5 6 +Rv1957 - 2202584 2203129 2 SecB-like chaperone - - - status 3 annotated CDS 5 6 +Rv1958c - 2203632 2203018 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1959c parE1 2203977 2203681 -1 toxin ParE1 - - - status 3 annotated CDS 5 6 +Rv1960c parD1 2204225 2203974 -3 antitoxin ParD1 - - - status 3 annotated CDS 5 6 +Rv1961 - 2204212 2204706 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1962A vapB35 2205549 2205277 -1 antitoxin VapB35 - - - status 3 annotated CDS 5 6 +Rv1962c vapC35 2205273 2204866 -1 ribonuclease VapC35 - - - status 3 annotated CDS 5 6 +Rv1963c mce3R 2206802 2205582 -3 transcriptional repressor Mce3R - - - status 3 annotated CDS 5 6 +Rv1964 yrbE3A 2207700 2208497 3 integral membrane protein - - - status 3 annotated CDS 5 6 +Rv1965 yrbE3B 2208507 2209322 3 integral membrane protein - - - status 3 annotated CDS 5 6 +Rv1966 mce3A 2209327 2210604 1 Mce family protein Mce3A - - - status 3 annotated CDS 5 6 +Rv1967 mce3B 2210601 2211629 3 Mce family protein Mce3B - - - status 3 annotated CDS 5 6 +Rv1968 mce3C 2211626 2212858 2 Mce family protein Mce3C - - - status 3 annotated CDS 5 6 +Rv1969 mce3D 2212855 2214126 1 Mce family protein Mce3D - - - status 3 annotated CDS 5 6 +Rv1970 lprM 2214123 2215256 3 Mce family lipoprotein LprM - - - status 3 annotated CDS 5 6 +Rv1971 mce3F 2215257 2216570 3 Mce family protein Mce3F - - - status 3 annotated CDS 5 6 +Rv1972 - 2216592 2217167 3 Mce associated membrane protein - - - status 3 annotated CDS 5 6 +Rv1973 - 2217164 2217646 2 Mce associated membrane protein - - - status 3 annotated CDS 5 6 +Rv1974 - 2217659 2218036 2 membrane protein - - - status 3 annotated CDS 5 6 +Rv1975 - 2218052 2218717 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1976c - 2219251 2218844 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1977 - 2219754 2220800 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1978 - 2220908 2221756 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1979c - 2223164 2221719 -3 permease - - - status 3 annotated CDS 5 6 +Rv1980c mpt64 2224029 2223343 -1 immunogenic protein Mpt64 - - - status 3 annotated CDS 5 6 +Rv1981c nrdF1 2225188 2224220 -2 ribonucleoside-diphosphate reductase subunit beta NrdF1 - - - status 3 annotated CDS 5 6 +Rv1982A vapB36 2226101 2225841 -3 antitoxin VapB36 - - - status 3 annotated CDS 5 6 +Rv1982c vapC36 2225832 2225413 -1 ribonuclease VapC36 - - - status 3 annotated CDS 5 6 +Rv1983 PE_PGRS35 2226244 2227920 1 PE-PGRS family protein PE_PGRS35 - - - status 3 annotated CDS 5 6 +Rv1984c cfp21 2228561 2227908 -3 cutinase - - - status 3 annotated CDS 5 6 +Rv1985c - 2229902 2228991 -3 HTH-type transcriptional regulator - - - status 3 annotated CDS 5 6 +Rv1986 - 2230011 2230610 3 amino acid transporter - - - status 3 annotated CDS 5 6 +Rv1987 - 2231026 2231454 1 chitinase - - - status 3 annotated CDS 5 6 +Rv1988 erm(37) 2231680 2232219 1 23S rRNA methyltransferase - - - status 3 annotated CDS 5 6 +Rv1989c - 2233299 2232739 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1990c - 2233637 2233296 -3 transcriptional regulator - - - status 3 annotated CDS 5 6 +Rv1991A mazE6 2234891 2234643 -3 antitoxin MazE6 - - - status 3 annotated CDS 5 6 +Rv1991c mazF6 2234649 2234305 -1 mRNA interferase MazF6 - - - status 3 annotated CDS 5 6 +Rv1992c ctpG 2237306 2234991 -3 cation transporter ATPase G - - - status 3 annotated CDS 5 6 +Rv1993c - 2237575 2237303 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1994c cmtR 2237984 2237628 -3 HTH-type transcriptional regulator CmtR - - - status 3 annotated CDS 5 6 +Rv1995 - 2238141 2238908 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1996 - 2239004 2239957 2 universal stress protein - - - status 3 annotated CDS 5 6 +Rv1997 ctpF 2240159 2242876 2 cation transporter ATPase F - - - status 3 annotated CDS 5 6 +Rv1998c - 2243721 2242945 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv1999c - 2245138 2243816 -2 transporter - - - status 3 annotated CDS 5 6 +Rv2000 - 2245209 2246822 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2001 - 2246832 2247584 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2002 fabG3 2247660 2248442 3 20-beta-hydroxysteroid dehydrogenase - - - status 3 annotated CDS 5 6 +Rv2003c - 2249420 2248563 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2004c - 2250974 2249478 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2005c - 2251883 2250996 -3 universal stress protein - - - status 3 annotated CDS 5 6 +Rv2006 otsB1 2252002 2255985 1 trehalose-6-phosphate phosphatase OtsB - - - status 3 annotated CDS 5 6 +Rv2007c fdxA 2256428 2256084 -3 ferredoxin - - - status 3 annotated CDS 5 6 +Rv2008c - 2257942 2256617 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2009 vapB15 2258030 2258272 2 antitoxin VapB15 - - - status 3 annotated CDS 5 6 +Rv2010 vapC15 2258273 2258671 2 ribonuclease VapC15 - - - status 3 annotated CDS 5 6 +Rv2011c - 2259285 2258854 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2012 - 2259326 2259820 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2015c - 2263072 2261816 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2016 - 2263426 2264001 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2017 - 2263998 2265038 3 transcriptional regulator - - - status 3 annotated CDS 5 6 +Rv2018 - 2265280 2265999 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2019 - 2265989 2266405 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2021c - 2267110 2266805 -2 transcriptional regulator - - - status 3 annotated CDS 5 6 +Rv2022c - 2267724 2267119 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2023c - 2268108 2267749 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2024c - 2270240 2268693 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2025c - 2271748 2270750 -2 cation efflux system protein - - - status 3 annotated CDS 5 6 +Rv2026c - 2272747 2271863 -2 universal stress protein - - - status 3 annotated CDS 5 6 +Rv2027c dosT 2274508 2272787 -2 two component sensor histidine kinase DosT - - - status 3 annotated CDS 5 6 +Rv2028c - 2275408 2274569 -2 universal stress protein - - - status 3 annotated CDS 5 6 +Rv2029c pfkB 2276424 2275405 -1 6-phosphofructokinase PfkB - - - status 3 annotated CDS 5 6 +Rv2030c - 2278486 2276441 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2031c hspX 2278932 2278498 -1 alpha-crystallin - - - status 3 annotated CDS 5 6 +Rv2032 acg 2279129 2280124 2 NAD(P)H nitroreductase - - - status 3 annotated CDS 5 6 +Rv2033c - 2281082 2280240 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2034 - 2281294 2281617 1 ArsR family HTH-type transcriptional repressor - - - status 3 annotated CDS 5 6 +Rv2035 - 2281614 2282102 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2036 - 2282099 2282740 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2037c - 2283721 2282747 -2 transmembrane protein - - - status 3 annotated CDS 5 6 +Rv2038c - 2284796 2283723 -3 sugar ABC transporter ATP-binding protein - - - status 3 annotated CDS 5 6 +Rv2039c - 2285641 2284799 -2 sugar ABC transporter permease - - - status 3 annotated CDS 5 6 +Rv2040c - 2286530 2285628 -3 sugar ABC transporter permease - - - status 3 annotated CDS 5 6 +Rv2041c - 2287846 2286527 -2 sugar ABC transporter substrate-binding lipoprotein - - - status 3 annotated CDS 5 6 +Rv2042c - 2288681 2287884 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2043c pncA 2289241 2288681 -2 pyrazinamidase/nicotinamidase PncA - - - status 3 annotated CDS 5 6 +Rv2044c - 2289599 2289282 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2045c lipT 2291220 2289685 -1 carboxylesterase LipT - - - status 3 annotated CDS 5 6 +Rv2046 lppI 2291269 2291925 1 lipoprotein LppI - - - status 3 annotated CDS 5 6 +Rv2047c - 2294526 2291962 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2048c pks12 2306986 2294531 -2 polyketide synthase - - - status 3 annotated CDS 5 6 +Rv2049c - 2307517 2307293 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2050 - 2307821 2308156 2 RNA polymerase-binding protein RbpA - - - status 3 annotated CDS 5 6 +Rv2051c ppm1 2310755 2308131 -3 polyprenol-monophosphomannose synthase - - - status 3 annotated CDS 5 6 +Rv2052c - 2312517 2310913 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2053c fxsA 2313049 2312522 -2 transmembrane protein FxsA - - - status 3 annotated CDS 5 6 +Rv2054 - 2313125 2313838 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2055c rpsR2 2314353 2314087 -1 30S ribosomal protein S18 - - - status 3 annotated CDS 5 6 +Rv2056c rpsN2 2314659 2314354 -1 30S ribosomal protein S14 - - - status 3 annotated CDS 5 6 +Rv2057c rpmG1 2314825 2314661 -2 50S ribosomal protein L33 - - - status 3 annotated CDS 5 6 +Rv2058c rpmB2 2315061 2314825 -1 50S ribosomal protein L28 - - - status 3 annotated CDS 5 6 +Rv2059 - 2315174 2316709 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2060 - 2316279 2316680 3 integral membrane protein - - - status 3 annotated CDS 5 6 +Rv2061c - 2317085 2316681 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2062c cobN 2320753 2317169 -2 cobalamin biosynthesis protein CobN - - - status 3 annotated CDS 5 6 +Rv2063 mazE7 2320831 2321064 1 antitoxin MazE7 - - - status 3 annotated CDS 5 6 +Rv2063A mazF7 2321057 2321467 2 mRNA interferase MazF7 - - - status 3 annotated CDS 5 6 +Rv2064 cobG 2321451 2322542 3 precorrin-3B synthase - - - status 3 annotated CDS 5 6 +Rv2065 cobH 2322552 2323178 3 precorrin-8X methylmutase - - - status 3 annotated CDS 5 6 +Rv2066 cobIJ 2323175 2324701 2 bifunctional S-adenosyl-L-methionine-precorrin-2 methyl transferase/precorrin-3 methylase - - - status 3 annotated CDS 5 6 +Rv2067c - 2325870 2324647 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2068c blaC 2326809 2325886 -1 beta-lactamase - - - status 3 annotated CDS 5 6 +Rv2069 sigC 2326944 2327501 3 ECF RNA polymerase sigma factor SigC - - - status 3 annotated CDS 5 6 +Rv2070c cobK 2328225 2327491 -1 precorrin-6A reductase - - - status 3 annotated CDS 5 6 +Rv2071c cobM 2328977 2328222 -3 precorrin-4 C(11)-methyltransferase - - - status 3 annotated CDS 5 6 +Rv2072c cobL 2330146 2328974 -2 precorrin-6Y C(5,15)-methyltransferase - - - status 3 annotated CDS 5 6 +Rv2073c - 2330963 2330214 -3 oxidoreductase - - - status 3 annotated CDS 5 6 +Rv2074 - 2330993 2331406 2 pyridoxamine 5'-phosphate oxidase - - - status 3 annotated CDS 5 6 +Rv2075c - 2332879 2331416 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2076c - 2333288 2333037 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2077A - 2334594 2334295 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2077c - 2334294 2333323 -1 transmembrane protein - - - status 3 annotated CDS 5 6 +Rv2078 - 2335059 2335373 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2079 - 2335355 2337325 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2080 lppJ 2337306 2337869 3 lipoprotein LppJ - - - status 3 annotated CDS 5 6 +Rv2081c - 2338505 2338065 -3 transmembrane protein - - - status 3 annotated CDS 5 6 +Rv2082 - 2338709 2340874 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2083 - 2340871 2341815 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2084 - 2341808 2342944 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2085 - 2343027 2343332 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2086 - 2343311 2343916 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2088 pknJ 2344411 2346180 1 transmembrane serine/threonine-protein kinase PknJ - - - status 3 annotated CDS 5 6 +Rv2089c pepE 2347324 2346197 -2 dipeptidase PepE - - - status 3 annotated CDS 5 6 +Rv2090 - 2347373 2348554 2 5'-3' exonuclease - - - status 3 annotated CDS 5 6 +Rv2091c - 2349292 2348558 -2 membrane protein - - - status 3 annotated CDS 5 6 +Rv2092c helY 2352054 2349334 -1 ATP-dependent DNA helicase HelY - - - status 3 annotated CDS 5 6 +Rv2093c tatC 2353029 2352103 -1 Sec-independent protein translocase transmembrane protein TatC - - - status 3 annotated CDS 5 6 +Rv2094c tatA 2353297 2353046 -2 Sec-independent protein translocase membrane-bound protein TatA - - - status 3 annotated CDS 5 6 +Rv2095c pafC 2354315 2353365 -3 proteasome accessory factor C - - - status 3 annotated CDS 5 6 +Rv2096c pafB 2355310 2354312 -2 proteasome accessory factor B - - - status 3 annotated CDS 5 6 +Rv2097c pafA 2356677 2355319 -1 proteasome accessory factor PafA - - - status 3 annotated CDS 5 6 +Rv2100 - 2358389 2360041 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2101 helZ 2360240 2363281 2 helicase HelZ - - - status 3 annotated CDS 5 6 +Rv2102 - 2363391 2364107 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2103c vapC37 2364520 2364086 -2 ribonuclease VapC37 - - - status 3 annotated CDS 5 6 +Rv2104a - 2365054 2364797 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2104c vapB37 2364781 2364527 -2 antitoxin VapB37 - - - status 3 annotated CDS 5 6 +Rv2107 PE22 2367359 2367655 2 PE family protein PE22 - - - status 3 annotated CDS 5 6 +Rv2108 PPE36 2367711 2368442 3 PPE family protein PPE36 - - - status 3 annotated CDS 5 6 +Rv2109c prcA 2369729 2368983 -3 proteasome subunit alpha - - - status 3 annotated CDS 5 6 +Rv2110c prcB 2370601 2369726 -2 proteasome subunit beta - - - status 3 annotated CDS 5 6 +Rv2111c pup 2370792 2370598 -1 ubiquitin-like protein Pup - - - status 3 annotated CDS 5 6 +Rv2112c dop 2372569 2370905 -2 pup deamidase/depupylase - - - status 3 annotated CDS 5 6 +Rv2113 - 2372630 2373823 2 integral membrane protein - - - status 3 annotated CDS 5 6 +Rv2114 - 2373834 2374457 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2115c mpa 2376290 2374461 -3 proteasome-associated ATPase - - - status 3 annotated CDS 5 6 +Rv2116 lppK 2376571 2377140 1 lipoprotein LppK - - - status 3 annotated CDS 5 6 +Rv2117 - 2377148 2377441 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2118c - 2378312 2377470 -3 tRNA (adenine(58)-N(1))-methyltransferase - - - status 3 annotated CDS 5 6 +Rv2119 - 2378386 2379222 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2120c - 2379727 2379245 -2 integral membrane protein - - - status 3 annotated CDS 5 6 +Rv2121c hisG 2380660 2379806 -2 ATP phosphoribosyltransferase - - - status 3 annotated CDS 5 6 +Rv2122c hisE 2380944 2380663 -1 phosphoribosyl-ATP pyrophosphatase - - - status 3 annotated CDS 5 6 +Rv2123 PPE37 2381071 2382492 1 PPE family protein PPE37 - - - status 3 annotated CDS 5 6 +Rv2124c metH 2386067 2382489 -3 methionine synthase - - - status 3 annotated CDS 5 6 +Rv2125 - 2386293 2387171 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2126c PE_PGRS37 2387972 2387202 -3 PE-PGRS family protein PE_PGRS37 - - - status 3 annotated CDS 5 6 +Rv2127 ansP1 2388616 2390085 1 L-asparagine permease - - - status 3 annotated CDS 5 6 +Rv2128 - 2390085 2390288 3 transmembrane protein - - - status 3 annotated CDS 5 6 +Rv2129c - 2391189 2390308 -1 oxidoreductase - - - status 3 annotated CDS 5 6 +Rv2130c mshC 2392459 2391215 -2 cysteine:1D-myo-inosityl 2-amino-2-deoxy--D-glucopyranoside ligase - - - status 3 annotated CDS 5 6 +Rv2131c cysQ 2393320 2392517 -2 3'-phosphoadenosine 5'-phosphate phosphatase - - - status 3 annotated CDS 5 6 +Rv2132 - 2393411 2393641 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2133c - 2394639 2393851 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2134c - 2395237 2394650 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2135c - 2396011 2395301 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2136c - 2396838 2396008 -1 undecaprenyl-diphosphatase - - - status 3 annotated CDS 5 6 +Rv2137c - 2397315 2396902 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2138 lppL 2397330 2398406 3 lipoprotein LppL - - - status 3 annotated CDS 5 6 +Rv2139 pyrD 2398720 2399793 1 dihydroorotate dehydrogenase - - - status 3 annotated CDS 5 6 +Rv2140c TB18.6 2400328 2399798 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2141c - 2401722 2400376 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2142A parD2 2402722 2402507 -2 antitoxin ParD2 - - - status 3 annotated CDS 5 6 +Rv2142c parE2 2402510 2402193 -3 toxin ParE2 - - - status 3 annotated CDS 5 6 +Rv2143 - 2402977 2404035 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2144c - 2404521 2404165 -1 transmembrane protein - - - status 3 annotated CDS 5 6 +Rv2145c wag31 2405398 2404616 -2 cell wall synthesis protein Wag31 - - - status 3 annotated CDS 5 6 +Rv2146c - 2405956 2405666 -2 transmembrane protein - - - status 3 annotated CDS 5 6 +Rv2147c - 2406843 2406118 -1 cell division protein SepF - - - status 3 annotated CDS 5 6 +Rv2148c - 2407616 2406840 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2149c yfiH 2408374 2407622 -2 laccase domain-containing protein - - - status 3 annotated CDS 5 6 +Rv2150c ftsZ 2409524 2408385 -3 cell division protein FtsZ - - - status 3 annotated CDS 5 6 +Rv2151c ftsQ 2410641 2409697 -1 cell division protein FtsQ - - - status 3 annotated CDS 5 6 +Rv2152c murC 2412122 2410638 -3 UDP-N-acetylmuramate--alanine ligase - - - status 3 annotated CDS 5 6 +Rv2153c murG 2413351 2412119 -2 UDP-N-acetylglucosamine--N-acetylmuramyl- (pentapeptide) pyrophosphoryl-undecaprenol-N-acetylglucosamine transferase - - - status 3 annotated CDS 5 6 +Rv2154c ftsW 2414922 2413348 -1 lipid II flippase FtsW - - - status 3 annotated CDS 5 6 +Rv2155c murD 2416394 2414934 -3 UDP-N-acetylmuramoylalanine--D-glutamate ligase - - - status 3 annotated CDS 5 6 +Rv2156c murX 2417475 2416396 -1 phospho-N-acetylmuramoyl-pentappeptidetransferase - - - status 3 annotated CDS 5 6 +Rv2157c murF 2419004 2417472 -3 UDP-N-acetylmuramoyl-tripeptide--D-alanyl-D- alanine ligase - - - status 3 annotated CDS 5 6 +Rv2158c murE 2420608 2419001 -2 UDP-N-acetylmuramoylalanyl-D-glutamate--2, 6-diaminopimelate ligase - - - status 3 annotated CDS 5 6 +Rv2159c - 2421665 2420631 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2161c - 2423137 2422271 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2162c PE_PGRS38 2424838 2423240 -2 PE-PGRS family protein PE_PGRS38 - - - status 3 annotated CDS 5 6 +Rv2163c pbpB 2427087 2425048 -1 penicillin-binding membrane protein PbpB - - - status 3 annotated CDS 5 6 +Rv2164c - 2428238 2427084 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2165c - 2429425 2428235 -2 rRNA small subunit methyltransferase H - - - status 3 annotated CDS 5 6 +Rv2166c - 2429858 2429427 -3 transcriptional regulator MraZ - - - status 3 annotated CDS 5 6 +Rv2169c - 2431969 2431565 -2 transmembrane protein - - - status 3 annotated CDS 5 6 +Rv2170 - 2432235 2432855 3 GCN5-like N-acetyltransferase - - - status 3 annotated CDS 5 6 +Rv2171 lppM 2432951 2433634 2 lipoprotein LppM - - - status 3 annotated CDS 5 6 +Rv2172c - 2434536 2433631 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2173 idsA2 2434847 2435905 2 geranylgeranyl pyrophosphate synthetase IdsA - - - status 3 annotated CDS 5 6 +Rv2174 mptA 2435909 2437459 2 alpha(1->6)-mannopyranosyltransferase A - - - status 3 annotated CDS 5 6 +Rv2175c - 2437886 2437446 -3 DNA-binding protein - - - status 3 annotated CDS 5 6 +Rv2176 pknL 2437941 2439140 3 serine/threonine-protein kinase PknL - - - status 3 annotated CDS 5 6 +Rv2177c - 2439947 2439282 -3 transposase - - - status 3 annotated CDS 5 6 +Rv2178c aroG 2441720 2440332 -3 phospho-2-dehydro-3-deoxyheptonate aldolase AroG - - - status 3 annotated CDS 5 6 +Rv2179c - 2442317 2441811 -3 3'-5' exoribonuclease - - - status 3 annotated CDS 5 6 +Rv2180c - 2443214 2442327 -3 integral membrane protein - - - status 3 annotated CDS 5 6 +Rv2181 - 2443302 2444585 3 alpha-(1-2)-phosphatidylinositol mannoside mannosyltransferase - - - status 3 annotated CDS 5 6 +Rv2182c - 2445329 2444586 -3 1-acylglycerol-3-phosphate O-acyltransferase - - - status 3 annotated CDS 5 6 +Rv2183c - 2445810 2445415 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2184c - 2446946 2445807 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2185c TB16.3 2447500 2447066 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2186c - 2447994 2447605 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2187 fadD15 2448160 2449962 1 long-chain-fatty-acid--CoA ligase FadD15 - - - status 3 annotated CDS 5 6 +Rv2188c pimB 2451150 2449993 -1 alpha-(1-6)-phosphatidylinositol monomannoside mannosyltransferase - - - status 3 annotated CDS 5 6 +Rv2189c - 2452020 2451247 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2190c - 2453272 2452115 -2 endopeptidase - - - status 3 annotated CDS 5 6 +Rv2191 - 2453819 2455756 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2192c trpD 2456743 2455631 -2 anthranilate phosphoribosyltransferase - - - status 3 annotated CDS 5 6 +Rv2193 ctaE 2456901 2457512 3 cytochrome C oxidase subunit III - - - status 3 annotated CDS 5 6 +Rv2194 qcrC 2457553 2458395 1 ubiquinol-cytochrome C reductase cytochrome subunit C - - - status 3 annotated CDS 5 6 +Rv2195 qcrA 2458392 2459681 3 ubiquinol-cytochrome C reductase rieske iron-sulfur subunit - - - status 3 annotated CDS 5 6 +Rv2196 qcrB 2459678 2461327 2 ubiquinol-cytochrome C reductase cytochrome subunit B - - - status 3 annotated CDS 5 6 +Rv2197c - 2462148 2461504 -1 transmembrane protein - - - status 3 annotated CDS 5 6 +Rv2198c mmpS3 2463047 2462148 -3 membrane protein MmpS3 - - - status 3 annotated CDS 5 6 +Rv2199c - 2463652 2463233 -2 cytochrome c oxidase polypeptide 4 - - - status 3 annotated CDS 5 6 +Rv2200c ctaC 2464751 2463660 -3 cytochrome C oxidase subunit II - - - status 3 annotated CDS 5 6 +Rv2201 asnB 2464997 2466955 2 asparagine synthetase - - - status 3 annotated CDS 5 6 +Rv2202c adoK 2468027 2467053 -3 adenosine kinase - - - status 3 annotated CDS 5 6 +Rv2203 - 2468231 2468923 2 membrane protein - - - status 3 annotated CDS 5 6 +Rv2204c - 2469287 2468931 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2205c - 2470463 2469387 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2206 - 2470622 2471332 2 transmembrane protein - - - status 3 annotated CDS 5 6 +Rv2207 cobT 2471411 2472496 2 nicotinate-nucleotide-dimethylbenzimidazolphosphoribosyltransferase - - - status 3 annotated CDS 5 6 +Rv2208 cobS 2472493 2473242 1 cobalamin synthase - - - status 3 annotated CDS 5 6 +Rv2209 - 2473400 2474938 2 integral membrane protein - - - status 3 annotated CDS 5 6 +Rv2210c ilvE 2475970 2474864 -2 branched-chain amino acid aminotransferase - - - status 3 annotated CDS 5 6 +Rv2211c gcvT 2477181 2476042 -1 aminomethyltransferase - - - status 3 annotated CDS 5 6 +Rv2212 - 2477190 2478326 3 adenylyl cyclase - - - status 3 annotated CDS 5 6 +Rv2213 pepB 2478338 2479885 2 cytosol aminopeptidase - - - status 3 annotated CDS 5 6 +Rv2214c ephD 2481701 2479923 -3 oxidoreductase EphD - - - status 3 annotated CDS 5 6 +Rv2215 dlaT 2481965 2483626 2 pyruvate dehydrogenase E2 component dihydrolipoamide acyltransferase - - - status 3 annotated CDS 5 6 +Rv2216 - 2483626 2484531 1 epimerase family protein - - - status 3 annotated CDS 5 6 +Rv2217 lipB 2484584 2485276 2 octanoyltransferase - - - status 3 annotated CDS 5 6 +Rv2218 lipA 2485273 2486208 1 lipoyl synthase - - - status 3 annotated CDS 5 6 +Rv2219 - 2486235 2486987 3 transmembrane protein - - - status 3 annotated CDS 5 6 +Rv2219A - 2487416 2486994 -3 membrane protein - - - status 3 annotated CDS 5 6 +Rv2220 glnA1 2487615 2489051 3 glutamine synthetase - - - status 3 annotated CDS 5 6 +Rv2221c glnE 2492353 2489369 -2 glutamate-ammonia-ligase adenylyltransferase - - - status 3 annotated CDS 5 6 +Rv2222c glnA2 2493742 2492402 -2 glutamine synthetase - - - status 3 annotated CDS 5 6 +Rv2223c - 2495399 2493837 -3 carboxylesterase B - - - status 3 annotated CDS 5 6 +Rv2224c caeA 2497023 2495461 -1 carboxylesterase A - - - status 3 annotated CDS 5 6 +Rv2224d - 2497446 2497225 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2225 panB 2497742 2498587 2 3-methyl-2-oxobutanoate hydroxymethyltransferase - - - status 3 annotated CDS 5 6 +Rv2226 - 2498832 2500373 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2227 - 2500931 2501632 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2228c - 2502738 2501644 -1 multifunctional RNASE H/alpha-ribazole phosphatase/acid phosphatase - - - status 3 annotated CDS 5 6 +Rv2229c - 2503472 2502735 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2230c - 2504608 2503469 -2 GTP cyclohydrolase - - - status 3 annotated CDS 5 6 +Rv2231A vapC16 2506161 2505736 -1 ribonuclease VapC16 - - - status 3 annotated CDS 5 6 +Rv2231B vapB16 2506383 2506207 -1 antitoxin VapB16 - - - status 3 annotated CDS 5 6 +Rv2231c cobC 2505699 2504605 -1 aminotransferase - - - status 3 annotated CDS 5 6 +Rv2232 ptkA 2506278 2507153 3 protein tyrosine kinase transcriptional regulator PtkA - - - status 3 annotated CDS 5 6 +Rv2234 ptpA 2507146 2507637 1 protein-tyrosine-phosphatase - - - status 3 annotated CDS 5 6 +Rv2235 - 2507637 2508452 3 transmembrane protein - - - status 3 annotated CDS 5 6 +Rv2236c cobD 2509375 2508434 -2 cobalamin biosynthesis transmembrane protein CobD - - - status 3 annotated CDS 5 6 +Rv2237 - 2509489 2510256 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2237A - 2510587 2510351 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2238c ahpE 2511176 2510715 -3 peroxiredoxin - - - status 3 annotated CDS 5 6 +Rv2239c - 2511652 2511176 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2240c - 2512280 2511690 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2241 aceE 2512539 2515244 3 pyruvate dehydrogenase E1 component - - - status 3 annotated CDS 5 6 +Rv2242 - 2515304 2516548 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2243 fabD 2516787 2517695 3 malonyl CoA-acyl carrier protein transacylase - - - status 3 annotated CDS 5 6 +Rv2244 acpM 2517771 2518118 3 meromycolate extension acyl carrier protein - - - status 3 annotated CDS 5 6 +Rv2245 kasA 2518115 2519365 2 3-oxoacyl-ACP synthase 1 - - - status 3 annotated CDS 5 6 +Rv2246 kasB 2519396 2520712 2 3-oxoacyl-ACP synthase 2 - - - status 3 annotated CDS 5 6 +Rv2247 accD6 2520743 2522164 2 acetyl-/propionyl-CoA carboxylase subunit beta - - - status 3 annotated CDS 5 6 +Rv2248 - 2522360 2523175 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2249c glpD1 2524791 2523241 -1 glycerol-3-phosphate dehydrogenase - - - status 3 annotated CDS 5 6 +Rv2250c - 2525354 2524785 -3 HTH-type transcriptional regulator - - - status 3 annotated CDS 5 6 +Rv2251 - 2525565 2526992 3 flavoprotein - - - status 3 annotated CDS 5 6 +Rv2252 - 2526989 2527918 2 diacylglycerol kinase - - - status 3 annotated CDS 5 6 +Rv2253 - 2527984 2528487 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2254c - 2528975 2528520 -3 integral membrane protein - - - status 3 annotated CDS 5 6 +Rv2256a - 2529174 2528980 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2256c - 2529874 2529341 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2257c - 2530822 2530004 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2258c - 2531897 2530836 -3 transcriptional regulator - - - status 3 annotated CDS 5 6 +Rv2259 mscR 2532245 2533330 2 S-nitrosomycothiol reductase MscR - - - status 3 annotated CDS 5 6 +Rv2260 - 2533330 2533965 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2263 - 2535641 2536594 2 oxidoreductase - - - status 3 annotated CDS 5 6 +Rv2264c - 2538350 2536572 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2265 - 2538700 2539929 1 integral membrane protein - - - status 3 annotated CDS 5 6 +Rv2266 cyp124 2540104 2541390 1 cytochrome P450 Cyp124 - - - status 3 annotated CDS 5 6 +Rv2267c - 2542810 2541644 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2268c cyp128 2544276 2542807 -1 cytochrome P450 Cyp128 - - - status 3 annotated CDS 5 6 +Rv2269c - 2544621 2544289 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2270 lppN 2544698 2545225 2 lipoprotein LppN - - - status 3 annotated CDS 5 6 +Rv2271 - 2545332 2545631 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2272 - 2545737 2546105 3 transmembrane protein - - - status 3 annotated CDS 5 6 +Rv2273 - 2546102 2546431 2 transmembrane protein - - - status 3 annotated CDS 5 6 +Rv2274A mazE8 2547087 2546839 -1 antitoxin MazE8 - - - status 3 annotated CDS 5 6 +Rv2274c mazF8 2546805 2546488 -1 toxin MazF8 - - - status 3 annotated CDS 5 6 +Rv2275 - 2546883 2547752 3 cyclo(L-tyrosyl-L-tyrosyl) synthase - - - status 3 annotated CDS 5 6 +Rv2276 cyp121 2547749 2548939 2 cytochrome P450 Cyp121 - - - status 3 annotated CDS 5 6 +Rv2277c - 2550029 2549124 -3 glycerolphosphodiesterase - - - status 3 annotated CDS 5 6 +Rv2281 pitB 2553173 2554831 2 phosphate permease - - - status 3 annotated CDS 5 6 +Rv2282c - 2555876 2554938 -3 LysR family HTH-type transcriptional regulator - - - status 3 annotated CDS 5 6 +Rv2283 - 2555941 2556135 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2284 lipM 2556145 2557440 1 esterase LipM - - - status 3 annotated CDS 5 6 +Rv2285 - 2557473 2558810 3 diacylglycerol acyltransferase - - - status 3 annotated CDS 5 6 +Rv2286c - 2559569 2558877 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2287 yjcE 2559703 2561331 1 Na(+)/H(+) transporter - - - status 3 annotated CDS 5 6 +Rv2288 - 2561328 2561705 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2289 cdh 2561675 2562457 2 CDP-diacylglycerol pyrophosphatase - - - status 3 annotated CDS 5 6 +Rv2290 lppO 2562599 2563114 2 lipoprotein LppO - - - status 3 annotated CDS 5 6 +Rv2291 sseB 2563174 2564028 1 thiosulfate sulfurtransferase SseB - - - status 3 annotated CDS 5 6 +Rv2292c - 2564253 2564029 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2293c - 2565032 2564292 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2294 - 2565327 2566550 3 cystathionine beta-lyase - - - status 3 annotated CDS 5 6 +Rv2295 - 2566772 2567410 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2296 - 2567504 2568406 2 haloalkane dehalogenase - - - status 3 annotated CDS 5 6 +Rv2297 - 2568438 2568890 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2298 - 2569082 2570053 2 oxidoreductase - - - status 3 annotated CDS 5 6 +Rv2299c htpG 2572002 2570059 -1 chaperone protein HtpG - - - status 3 annotated CDS 5 6 +Rv2300c - 2573008 2572076 -2 metallo-hydrolase - - - status 3 annotated CDS 5 6 +Rv2301 cut2 2573015 2573707 2 cutinase - - - status 3 annotated CDS 5 6 +Rv2302 - 2573813 2574055 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2303c - 2575019 2574096 -3 antibiotic-resistance protein - - - status 3 annotated CDS 5 6 +Rv2304c - 2575225 2575016 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2305 - 2575809 2577098 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2307A - 2579419 2579228 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2307B - 2579935 2579504 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2307D - 2580210 2580028 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2307c - 2578696 2577851 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2308 - 2580419 2581135 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2308a - 2581145 2581477 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2309A - 2583045 2583332 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2310 - 2583435 2583779 3 excisionase - - - status 3 annotated CDS 5 6 +Rv2311 - 2583884 2584408 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2312 - 2584486 2584755 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2313c - 2585906 2585052 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2314c - 2587290 2585917 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2315c - 2588804 2587287 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2316 uspA 2588838 2589710 3 sugar ABC transporter permease UspA - - - status 3 annotated CDS 5 6 +Rv2317 uspB 2589697 2590521 1 sugar ABC transporter permease UspB - - - status 3 annotated CDS 5 6 +Rv2318 uspC 2590518 2591840 3 sugar ABC transporter substrate-binding lipoprotein UspC - - - status 3 annotated CDS 5 6 +Rv2319c - 2592726 2591848 -1 universal stress protein - - - status 3 annotated CDS 5 6 +Rv2320c rocE 2594153 2592723 -3 cationic amino acid transporter permease RocE - - - status 3 annotated CDS 5 6 +Rv2323c - 2596269 2595361 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2324 - 2596334 2596780 2 AsnC family transcriptional regulator - - - status 3 annotated CDS 5 6 +Rv2325c - 2597857 2597009 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2326c - 2599947 2597854 -1 ABC transporter ATP-binding protein - - - status 3 annotated CDS 5 6 +Rv2327 - 2599988 2600479 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2328 PE23 2600731 2601879 1 PE family protein PE23 - - - status 3 annotated CDS 5 6 +Rv2329c narK1 2603461 2601914 -2 nitrate/nitrite transporter - - - status 3 annotated CDS 5 6 +Rv2330c lppP 2604222 2603695 -1 lipoprotein LppP - - - status 3 annotated CDS 5 6 +Rv2331 - 2604297 2604683 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2331A - 2604740 2605078 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2332 mez 2605108 2606754 1 malate oxidoreductase - - - status 3 annotated CDS 5 6 +Rv2333c stp 2608321 2606708 -2 multidrug resistance protein - - - status 3 annotated CDS 5 6 +Rv2334 cysK1 2608796 2609728 2 O-acetylserine sulfhydrylase - - - status 3 annotated CDS 5 6 +Rv2335 cysE 2609732 2610421 2 serine acetyltransferase - - - status 3 annotated CDS 5 6 +Rv2336 - 2610837 2611805 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2337c - 2612987 2611869 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2338c moeW 2614063 2613107 -2 molybdopterin biosynthesis protein MoeW - - - status 3 annotated CDS 5 6 +Rv2339 mmpL9 2614693 2617581 1 transmembrane transport protein MmpL9 - - - status 3 annotated CDS 5 6 +Rv2340c PE_PGRS39 2618908 2617667 -2 PE-PGRS family protein PE_PGRS39 - - - status 3 annotated CDS 5 6 +Rv2341 lppQ 2619597 2620016 3 lipoprotein LppQ - - - status 3 annotated CDS 5 6 +Rv2342 - 2620272 2620529 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2343c dnaG 2622452 2620533 -3 DNA primase - - - status 3 annotated CDS 5 6 +Rv2344c dgt 2623752 2622457 -1 deoxyguanosine triphosphate triphosphohydrolase - - - status 3 annotated CDS 5 6 +Rv2345 - 2623821 2625803 3 transmembrane protein - - - status 3 annotated CDS 5 6 +Rv2346c esxO 2626172 2625888 -3 ESAT-6 like protein EsxO - - - status 3 annotated CDS 5 6 +Rv2347c esxP 2626519 2626223 -2 ESAT-6 like protein EsxP - - - status 3 annotated CDS 5 6 +Rv2348c - 2626980 2626654 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2349c plcC 2628698 2627172 -3 phospholipase C - - - status 3 annotated CDS 5 6 +Rv2350c plcB 2630319 2628781 -1 membrane-associated phospholipase B - - - status 3 annotated CDS 5 6 +Rv2351c plcA 2632075 2630537 -2 membrane-associated phospholipase A - - - status 3 annotated CDS 5 6 +Rv2352c PPE38 2634098 2632923 -3 PPE family protein PPE38 - - - status 3 annotated CDS 5 6 +Rv2353c PPE39 2635592 2634528 -3 PPE family protein PPE39 - - - status 3 annotated CDS 5 6 +Rv2357c glyS 2641064 2639673 -3 glycine--tRNA ligase - - - status 3 annotated CDS 5 6 +Rv2358 smtB 2641246 2641653 1 HTH-type transcriptional regulator SmtB - - - status 3 annotated CDS 5 6 +Rv2359 zur 2641650 2642042 3 zinc uptake regulation protein - - - status 3 annotated CDS 5 6 +Rv2360c - 2642578 2642150 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2361c - 2643468 2642578 -1 decaprenyl diphosphate synthase - - - status 3 annotated CDS 5 6 +Rv2362c recO 2644258 2643461 -2 DNA repair protein RecO - - - status 3 annotated CDS 5 6 +Rv2363 amiA2 2644320 2645774 3 amidase - - - status 3 annotated CDS 5 6 +Rv2364c era 2646673 2645771 -2 GTPase Era - - - status 3 annotated CDS 5 6 +Rv2365c - 2647088 2646747 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2366c - 2648367 2647060 -1 transmembrane protein - - - status 3 annotated CDS 5 6 +Rv2367c - 2648912 2648364 -3 endoribonuclease - - - status 3 annotated CDS 5 6 +Rv2368c phoH1 2649974 2648916 -3 phosphate starvation-inducible protein PhoH - - - status 3 annotated CDS 5 6 +Rv2369c - 2650248 2649946 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2370c - 2651558 2650245 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2371 PE_PGRS40 2651753 2651938 2 PE-PGRS family protein PE_PGRS40 - - - status 3 annotated CDS 5 6 +Rv2372c - 2652825 2652037 -1 rRNA small subunit methyltransferase E - - - status 3 annotated CDS 5 6 +Rv2373c dnaJ2 2653987 2652839 -2 chaperone protein DnaJ - - - status 3 annotated CDS 5 6 +Rv2374c hrcA 2655093 2654062 -1 heat-inducible transcription repressor HrcA - - - status 3 annotated CDS 5 6 +Rv2375 - 2655265 2655582 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2376c cfp2 2656115 2655609 -3 low molecular weight antigen MTB12 - - - status 3 annotated CDS 5 6 +Rv2377c - 2656430 2656215 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2378c mbtG 2657703 2656408 -1 L-lysine N6-monooxygenase - - - status 3 annotated CDS 5 6 +Rv2379c mbtF 2662085 2657700 -3 peptide synthetase - - - status 3 annotated CDS 5 6 +Rv2380c mbtE 2667115 2662067 -2 peptide synthetase - - - status 3 annotated CDS 5 6 +Rv2381c mbtD 2670269 2667255 -3 polyketide synthetase - - - status 3 annotated CDS 5 6 +Rv2382c mbtC 2671603 2670269 -2 polyketide synthetase - - - status 3 annotated CDS 5 6 +Rv2383c mbtB 2675837 2671593 -3 phenyloxazoline synthase - - - status 3 annotated CDS 5 6 +Rv2384 mbtA 2675936 2677633 2 bifunctional salicyl-AMP ligase/salicyl-S-ArCP synthetase - - - status 3 annotated CDS 5 6 +Rv2385 mbtJ 2677729 2678649 1 acetyl hydrolase - - - status 3 annotated CDS 5 6 +Rv2386a - 2680458 2680667 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2386c mbtI 2680005 2678653 -1 salicylate synthase - - - status 3 annotated CDS 5 6 +Rv2387 - 2680765 2682018 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2388c hemN 2683142 2682015 -3 oxygen-independent coproporphyrinogen III oxidase - - - status 3 annotated CDS 5 6 +Rv2389c rpfD 2683712 2683248 -3 resuscitation-promoting factor RpfD - - - status 3 annotated CDS 5 6 +Rv2390c - 2684266 2683709 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2391 sirA 2684679 2686370 3 sulfite reductase - - - status 3 annotated CDS 5 6 +Rv2392 cysH 2686367 2687131 2 phosphoadenosine phosphosulfate reductase - - - status 3 annotated CDS 5 6 +Rv2393 che1 2687128 2687973 1 ferrochelatase - - - status 3 annotated CDS 5 6 +Rv2394 ggtB 2688010 2689941 1 gamma-glutamyltranspeptidase precursor GgtB - - - status 3 annotated CDS 5 6 +Rv2395 - 2690072 2692075 2 integral membrane protein - - - status 3 annotated CDS 5 6 +Rv2395A aprA 2692224 2692439 3 acid and phagosome regulated protein AprA - - - status 3 annotated CDS 5 6 +Rv2395B aprB 2692551 2692715 3 acid and phagosome regulated protein AprB - - - status 3 annotated CDS 5 6 +Rv2396 PE_PGRS41 2692799 2693884 2 acid and phagosome regulated protein AprC - - - status 3 annotated CDS 5 6 +Rv2397c cysA1 2694964 2693909 -2 sulfate ABC transporter ATP-binding protein CysA - - - status 3 annotated CDS 5 6 +Rv2398c cysW 2695799 2694981 -3 sulfate ABC transporter permease CysW - - - status 3 annotated CDS 5 6 +Rv2399c cysT 2696647 2695796 -2 sulfate ABC transporter permease CysT - - - status 3 annotated CDS 5 6 +Rv2400c subI 2697714 2696644 -1 sulfate ABC transporter substrate-binding lipoprotein SubI - - - status 3 annotated CDS 5 6 +Rv2401 - 2697728 2698057 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2401A - 2698245 2698042 -1 membrane protein - - - status 3 annotated CDS 5 6 +Rv2402 - 2698529 2700457 2 trehalase - - - status 3 annotated CDS 5 6 +Rv2403c lppR 2701290 2700535 -1 lipoprotein LppR - - - status 3 annotated CDS 5 6 +Rv2404c lepA 2703248 2701287 -3 GTP-binding protein LepA - - - status 3 annotated CDS 5 6 +Rv2405 - 2703269 2703838 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2406c - 2704437 2704009 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2407 - 2704697 2705518 2 ribonuclease Z - - - status 3 annotated CDS 5 6 +Rv2408 PE24 2705762 2706736 2 PE family protein PE24 - - - status 3 annotated CDS 5 6 +Rv2409c - 2707333 2706494 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2410c - 2708310 2707333 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2411c - 2709965 2708310 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2412 rpsT 2710075 2710335 1 30S ribosomal protein S20 - - - status 3 annotated CDS 5 6 +Rv2413c - 2711301 2710351 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2414c - 2712876 2711332 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2415c - 2713784 2712891 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2416c eis 2715332 2714124 -3 enhanced intracellular survival protein - - - status 3 annotated CDS 5 6 +Rv2417c - 2716314 2715472 -1 DegV domain-containing protein - - - status 3 annotated CDS 5 6 +Rv2418c - 2717138 2716395 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2419c gpgP 2717799 2717128 -1 glucosyl-3-phosphoglycerate phosphatase - - - status 3 annotated CDS 5 6 +Rv2420c - 2718176 2717796 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2421c nadD 2718808 2718173 -2 nicotinate-nucleotide adenylyltransferase - - - status 3 annotated CDS 5 6 +Rv2422 - 2719083 2719355 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2423 - 2719597 2720643 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2424c - 2721777 2720776 -1 transposase - - - status 3 annotated CDS 5 6 +Rv2425c - 2723308 2721866 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2426c - 2724183 2723308 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2427c proA 2725477 2724230 -2 gamma-glutamyl phosphate reductase - - - status 3 annotated CDS 5 6 +Rv2428 ahpC 2726193 2726780 3 alkyl hydroperoxide reductase subunit AhpC - - - status 3 annotated CDS 5 6 +Rv2429 ahpD 2726806 2727339 1 alkyl hydroperoxide reductase AphD - - - status 3 annotated CDS 5 6 +Rv2430c PPE41 2727920 2727336 -3 PPE family protein PPE41 - - - status 3 annotated CDS 5 6 +Rv2431c PE25 2728266 2727967 -1 PE family protein PE25 - - - status 3 annotated CDS 5 6 +Rv2432c - 2728847 2728437 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2433c - 2729134 2728844 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2434c - 2730560 2729115 -3 transmembrane protein - - - status 3 annotated CDS 5 6 +Rv2435c - 2732749 2730557 -2 cyclase - - - status 3 annotated CDS 5 6 +Rv2436 rbsK 2733230 2734144 2 ribokinase RbsK - - - status 3 annotated CDS 5 6 +Rv2437 - 2734376 2734795 2 transmembrane protein - - - status 3 annotated CDS 5 6 +Rv2438A - 2736709 2736987 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2438c nadE 2736831 2734792 -1 glutamine-dependent NAD(+) synthetase - - - status 3 annotated CDS 5 6 +Rv2439c proB 2738247 2737117 -1 glutamate 5-kinase protein - - - status 3 annotated CDS 5 6 +Rv2440c obg 2739686 2738247 -3 GTPase Obg - - - status 3 annotated CDS 5 6 +Rv2441c rpmA 2740032 2739772 -1 50S ribosomal protein L27 - - - status 3 annotated CDS 5 6 +Rv2442c rplU 2740361 2740047 -3 50S ribosomal protein L21 - - - status 3 annotated CDS 5 6 +Rv2443 dctA 2740709 2742184 2 C4-dicarboxylate-transport transmembrane protein DctA - - - status 3 annotated CDS 5 6 +Rv2444c rne 2744984 2742123 -3 ribonuclease E - - - status 3 annotated CDS 5 6 +Rv2445c ndkA 2745724 2745314 -2 nucleoside diphosphate kinase - - - status 3 annotated CDS 5 6 +Rv2446c - 2746138 2745767 -2 integral membrane protein - - - status 3 annotated CDS 5 6 +Rv2447c folC 2747598 2746135 -1 folylpolyglutamate synthase FolC - - - status 3 annotated CDS 5 6 +Rv2448c valS 2750225 2747595 -3 valine--tRNA ligase - - - status 3 annotated CDS 5 6 +Rv2449c - 2751572 2750313 -3 trans-acting enoyl reductase - - - status 3 annotated CDS 5 6 +Rv2450c rpfE 2752180 2751662 -2 resuscitation-promoting factor RpfE - - - status 3 annotated CDS 5 6 +Rv2451 - 2752262 2752660 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2452c - 2752994 2752848 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2453c mobA 2753623 2753018 -2 molybdenum cofactor guanylyltransferase - - - status 3 annotated CDS 5 6 +Rv2454c - 2754746 2753625 -3 2-oxoglutarate oxidoreductase subunit KorB - - - status 3 annotated CDS 5 6 +Rv2455c - 2756704 2754743 -2 2-oxoglutarate oxidoreductase subunit KorA - - - status 3 annotated CDS 5 6 +Rv2456c - 2758192 2756936 -2 MFS-type transporter - - - status 3 annotated CDS 5 6 +Rv2457c clpX 2759488 2758208 -2 ATP-dependent CLP protease ATP-binding subunit ClpX - - - status 3 annotated CDS 5 6 +Rv2458 mmuM 2759779 2760687 1 homocysteine S-methyltransferase MmuM - - - status 3 annotated CDS 5 6 +Rv2459 - 2760854 2762380 2 MFS-type transporter - - - status 3 annotated CDS 5 6 +Rv2460c clpP2 2763175 2762531 -2 ATP-dependent CLP protease proteolytic subunit 2 - - - status 3 annotated CDS 5 6 +Rv2461c clpP1 2763774 2763172 -1 ATP-dependent CLP protease proteolytic subunit 1 - - - status 3 annotated CDS 5 6 +Rv2462c tig 2765291 2763891 -3 trigger factor - - - status 3 annotated CDS 5 6 +Rv2463 lipP 2765655 2766839 3 esterase/lipase LipP - - - status 3 annotated CDS 5 6 +Rv2464c - 2767665 2766859 -1 DNA glycosylase - - - status 3 annotated CDS 5 6 +Rv2465c rpiB 2768159 2767671 -3 ribose-5-phosphate isomerase B - - - status 3 annotated CDS 5 6 +Rv2466c - 2768884 2768261 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2467 pepN 2768986 2771571 1 aminopeptidase PepN - - - status 3 annotated CDS 5 6 +Rv2468A - 2772331 2772098 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2468c - 2772147 2771644 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2469c - 2773035 2772367 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2470 glbO 2773178 2773564 2 hemoglobin GlbO - - - status 3 annotated CDS 5 6 +Rv2471 aglA 2773564 2775204 1 alpha-glucosidase AglA - - - status 3 annotated CDS 5 6 +Rv2472 - 2775272 2775565 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2473 - 2775568 2776284 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2474c - 2776969 2776316 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2475c - 2777391 2776975 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2476c gdh 2782262 2777388 -3 NAD-dependent glutamate dehydrogenase - - - status 3 annotated CDS 5 6 +Rv2477c - 2784042 2782366 -1 macrolide ABC transporter ATP-binding protein - - - status 3 annotated CDS 5 6 +Rv2478c - 2784608 2784123 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2481c - 2786898 2786575 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2482c plsB2 2789283 2786914 -1 glycerol-3-phosphate acyltransferase - - - status 3 annotated CDS 5 6 +Rv2483c plsC 2791022 2789280 -3 bifunctional L-3-phosphoserine phosphatase/1-acyl-sn-glycerol-3-phosphate acyltransferase - - - status 3 annotated CDS 5 6 +Rv2484c - 2792494 2791019 -2 diacyglycerol O-acyltransferase - - - status 3 annotated CDS 5 6 +Rv2485c lipQ 2793988 2792723 -2 carboxylesterase LipQ - - - status 3 annotated CDS 5 6 +Rv2486 echA14 2794350 2795120 3 enoyl-CoA hydratase EchA14 - - - status 3 annotated CDS 5 6 +Rv2487c PE_PGRS42 2797385 2795301 -3 PE-PGRS family protein PE_PGRS42 - - - status 3 annotated CDS 5 6 +Rv2488c - 2800880 2797467 -3 LuxR family transcriptional regulator - - - status 3 annotated CDS 5 6 +Rv2489c - 2801145 2800846 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2490a - 2806529 2806323 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2490c PE_PGRS43 2806236 2801254 -1 PE-PGRS family protein PE_PGRS43 - - - status 3 annotated CDS 5 6 +Rv2491 - 2806665 2807288 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2492 - 2807278 2808030 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2493 vapB38 2808083 2808304 2 antitoxin VapB38 - - - status 3 annotated CDS 5 6 +Rv2494 vapC38 2808310 2808735 1 ribonuclease VapC38 - - - status 3 annotated CDS 5 6 +Rv2495c bkdC 2809939 2808758 -2 branched-chain keto acid dehydrogenase E2 component - - - status 3 annotated CDS 5 6 +Rv2496c bkdB 2810982 2809936 -1 branched-chain keto acid dehydrogenase E1 component subunit beta - - - status 3 annotated CDS 5 6 +Rv2497c bkdA 2812096 2810993 -2 branched-chain keto acid dehydrogenase E1 component subunit alpha - - - status 3 annotated CDS 5 6 +Rv2498c citE 2813176 2812355 -2 citrate (pro-3S)-lyase subunit beta - - - status 3 annotated CDS 5 6 +Rv2499c - 2813730 2813173 -1 oxidase regulatory-like protein - - - status 3 annotated CDS 5 6 +Rv2500c fadE19 2814911 2813727 -3 acyl-CoA dehydrogenase FadE19 - - - status 3 annotated CDS 5 6 +Rv2501c accA1 2816880 2814916 -1 acetyl-/propionyl-CoA carboxylase subunit alpha - - - status 3 annotated CDS 5 6 +Rv2502c accD1 2818474 2816885 -2 acetyl-/propionyl-CoA carboxylase subunit beta - - - status 3 annotated CDS 5 6 +Rv2503c scoB 2819127 2818471 -1 succinyl-CoA:3-ketoacid-CoA transferase subunit B - - - status 3 annotated CDS 5 6 +Rv2504c scoA 2819870 2819124 -3 succinyl-CoA:3-ketoacid-CoA transferase subunit A - - - status 3 annotated CDS 5 6 +Rv2505c fadD35 2821596 2819953 -1 fatty-acid--CoA ligase FadD35 - - - status 3 annotated CDS 5 6 +Rv2506 - 2821712 2822359 2 TetR family transcriptional regulator - - - status 3 annotated CDS 5 6 +Rv2507 - 2822438 2823259 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2508c - 2824593 2823256 -1 integral membrane protein - - - status 3 annotated CDS 5 6 +Rv2509 - 2824678 2825484 1 short-chain type dehydrogenase/reductase - - - status 3 annotated CDS 5 6 +Rv2510c - 2827089 2825488 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2511 orn 2827157 2827804 2 oligoribonuclease - - - status 3 annotated CDS 5 6 +Rv2512a - 2829954 2830139 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2512c - 2829803 2828556 -3 insertion sequence element IS1081 transposase - - - status 3 annotated CDS 5 6 +Rv2513 - 2830161 2830583 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2514c - 2831338 2830877 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2515c - 2832591 2831344 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2516c - 2833513 2832710 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2517c - 2833761 2833510 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2518c ldtB 2835335 2834109 -3 L,D-transpeptidase LdtB - - - status 3 annotated CDS 5 6 +Rv2519 PE26 2835785 2837263 2 PE family protein PE26 - - - status 3 annotated CDS 5 6 +Rv2520c - 2837615 2837388 -3 membrane protein - - - status 3 annotated CDS 5 6 +Rv2521 bcp 2837684 2838157 2 peroxiredoxin - - - status 3 annotated CDS 5 6 +Rv2522c - 2839541 2838129 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2523c acpS 2839930 2839538 -2 holo-ACP synthase - - - status 3 annotated CDS 5 6 +Rv2524c fas 2849332 2840123 -2 fatty acid synthase - - - status 3 annotated CDS 5 6 +Rv2525c - 2850574 2849852 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2526 vapB17 2851091 2851318 2 antitoxin VapB17 - - - status 3 annotated CDS 5 6 +Rv2527 vapC17 2851315 2851716 1 ribonuclease VapC17 - - - status 3 annotated CDS 5 6 +Rv2528c mrr 2852671 2851751 -2 restriction system protein - - - status 3 annotated CDS 5 6 +Rv2529 - 2852875 2854266 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2530A vapB39 2854907 2854683 -3 antitoxin VapB39 - - - status 3 annotated CDS 5 6 +Rv2530c vapC39 2854686 2854267 -1 ribonuclease VapC39 - - - status 3 annotated CDS 5 6 +Rv2531c - 2857781 2854938 -3 amino acid decarboxylase - - - status 3 annotated CDS 5 6 +Rv2532c - 2858254 2857853 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2533c nusB 2858724 2858254 -1 N utilization substance protein B - - - status 3 annotated CDS 5 6 +Rv2534c efp 2859290 2858727 -3 elongation factor P - - - status 3 annotated CDS 5 6 +Rv2535c pepQ 2860418 2859300 -3 cytoplasmic peptidase PepQ - - - status 3 annotated CDS 5 6 +Rv2536 - 2860452 2861144 3 transmembrane protein - - - status 3 annotated CDS 5 6 +Rv2537c aroD 2861591 2861148 -3 3-dehydroquinate dehydratase - - - status 3 annotated CDS 5 6 +Rv2538c aroB 2862676 2861588 -2 3-dehydroquinate synthase - - - status 3 annotated CDS 5 6 +Rv2539c aroK 2863203 2862673 -1 shikimate kinase - - - status 3 annotated CDS 5 6 +Rv2540c aroF 2864412 2863207 -1 chorismate synthase - - - status 3 annotated CDS 5 6 +Rv2541 - 2864427 2864834 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2542 - 2865130 2866341 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2543 lppA 2866468 2867127 1 lipoprotein LppA - - - status 3 annotated CDS 5 6 +Rv2544 lppB 2867124 2867786 3 lipoprotein LppB - - - status 3 annotated CDS 5 6 +Rv2545 vapB18 2867783 2868061 2 antitoxin VapB18 - - - status 3 annotated CDS 5 6 +Rv2546 vapC18 2868154 2868567 1 ribonuclease VapC18 - - - status 3 annotated CDS 5 6 +Rv2547 vapB19 2868606 2868863 3 antitoxin VapB19 - - - status 3 annotated CDS 5 6 +Rv2548 vapC19 2868860 2869237 2 ribonuclease VapC19 - - - status 3 annotated CDS 5 6 +Rv2548A - 2869627 2869253 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2549c vapC20 2870122 2869727 -2 ribonuclease VapC20 - - - status 3 annotated CDS 5 6 +Rv2550c vapB20 2870364 2870119 -1 antitoxin VapB20 - - - status 3 annotated CDS 5 6 +Rv2551c - 2871194 2870775 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2552c aroE 2872015 2871206 -2 shikimate 5-dehydrogenase - - - status 3 annotated CDS 5 6 +Rv2553c - 2873265 2872012 -1 membrane protein - - - status 3 annotated CDS 5 6 +Rv2554c - 2873770 2873258 -2 Holliday junction resolvase - - - status 3 annotated CDS 5 6 +Rv2555c alaS 2876485 2873771 -2 alanine--tRNA ligase - - - status 3 annotated CDS 5 6 +Rv2556c - 2876965 2876576 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2557 - 2877072 2877746 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2558 - 2877831 2878541 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2559c - 2879929 2878571 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2560 - 2880075 2881052 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2563 - 2882290 2883339 1 glutamine ABC transporter permease - - - status 3 annotated CDS 5 6 +Rv2564 glnQ 2883342 2884334 3 glutamine ABC transporter ATP-binding protein - - - status 3 annotated CDS 5 6 +Rv2565 - 2884611 2886362 3 NTE family protein - - - status 3 annotated CDS 5 6 +Rv2566 - 2886373 2889795 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2567 - 2889795 2892449 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2568c - 2893471 2892446 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2569c - 2894408 2893464 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2570 - 2894512 2894901 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2571c - 2895960 2894893 -1 transmembrane protein - - - status 3 annotated CDS 5 6 +Rv2572c aspS 2897803 2896013 -2 aspartate--tRNA ligase - - - status 3 annotated CDS 5 6 +Rv2573 - 2898043 2898783 1 2-dehydropantoate 2-reductase - - - status 3 annotated CDS 5 6 +Rv2574 - 2898806 2899309 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2575 - 2899339 2900220 1 membrane protein - - - status 3 annotated CDS 5 6 +Rv2576c - 2900690 2900226 -3 membrane protein - - - status 3 annotated CDS 5 6 +Rv2577 - 2900918 2902507 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2578c - 2903531 2902509 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2579 dhaA 2903639 2904541 2 haloalkane dehalogenase - - - status 3 annotated CDS 5 6 +Rv2580c hisS 2906092 2904821 -2 histidine--tRNA ligase - - - status 3 annotated CDS 5 6 +Rv2581c - 2906763 2906089 -1 glyoxalase II - - - status 3 annotated CDS 5 6 +Rv2582 ppiB 2906814 2907740 3 peptidyl-prolyl cis-trans isomerase B - - - status 3 annotated CDS 5 6 +Rv2583c relA 2910198 2907826 -1 bifunctional (p)ppGpp synthase/hydrolase RelA - - - status 3 annotated CDS 5 6 +Rv2584c apt 2910900 2910229 -1 adenine phosphoribosyltransferase - - - status 3 annotated CDS 5 6 +Rv2585c - 2912677 2911004 -2 lipoprotein - - - status 3 annotated CDS 5 6 +Rv2586c secF 2914011 2912683 -1 protein translocase subunit SecF - - - status 3 annotated CDS 5 6 +Rv2587c secD 2915736 2914015 -1 protein translocase subunit SecD - - - status 3 annotated CDS 5 6 +Rv2588c yajC 2916193 2915846 -2 membrane protein secretion factor YajC - - - status 3 annotated CDS 5 6 +Rv2589 gabT 2916360 2917709 3 4-aminobutyrate aminotransferase - - - status 3 annotated CDS 5 6 +Rv2590 fadD9 2917871 2921377 2 fatty-acid--CoA ligase FadD9 - - - status 3 annotated CDS 5 6 +Rv2591 PE_PGRS44 2921551 2923182 1 PE-PGRS family protein PE_PGRS44 - - - status 3 annotated CDS 5 6 +Rv2592c ruvB 2924233 2923199 -2 Holliday junction ATP-dependent DNA helicase RuvB - - - status 3 annotated CDS 5 6 +Rv2593c ruvA 2924820 2924230 -1 Holliday junction ATP-dependent DNA helicase RuvA - - - status 3 annotated CDS 5 6 +Rv2594c ruvC 2925383 2924817 -3 crossover junction endodeoxyribonuclease RuvC - - - status 3 annotated CDS 5 6 +Rv2595 vapB40 2925492 2925737 3 antitoxin VapB40 - - - status 3 annotated CDS 5 6 +Rv2596 vapC40 2925734 2926138 2 ribonuclease VapC40 - - - status 3 annotated CDS 5 6 +Rv2597 - 2926355 2926975 2 membrane protein - - - status 3 annotated CDS 5 6 +Rv2598 - 2926986 2927480 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2599 - 2927477 2927908 2 membrane protein - - - status 3 annotated CDS 5 6 +Rv2600 - 2927990 2928391 2 integral membrane protein - - - status 3 annotated CDS 5 6 +Rv2601 speE 2928388 2929959 1 spermidine synthase - - - status 3 annotated CDS 5 6 +Rv2601A vapB41 2930070 2930357 3 antitoxin VapB41 - - - status 3 annotated CDS 5 6 +Rv2602 vapC41 2930344 2930784 1 ribonuclease VapC41 - - - status 3 annotated CDS 5 6 +Rv2603c - 2931560 2930805 -3 transcriptional regulator - - - status 3 annotated CDS 5 6 +Rv2604c snoP 2932289 2931693 -3 glutamine amidotransferase SnoP - - - status 3 annotated CDS 5 6 +Rv2605c tesB2 2933142 2932297 -1 acyl-CoA thioesterase TesB - - - status 3 annotated CDS 5 6 +Rv2606c snzP 2934070 2933171 -2 pyridoxine biosynthesis protein - - - status 3 annotated CDS 5 6 +Rv2607 pdxH 2934198 2934872 3 pyridoxine/pyridoxamine 5'-phosphate oxidase - - - status 3 annotated CDS 5 6 +Rv2608 PPE42 2935046 2936788 2 PPE family protein PPE42 - - - status 3 annotated CDS 5 6 +Rv2609c - 2937865 2936810 -2 membrane protein - - - status 3 annotated CDS 5 6 +Rv2610c pimA 2939001 2937865 -1 alpha-(1-2)-phosphatidylinositol mannosyltransferase - - - status 3 annotated CDS 5 6 +Rv2611c - 2939962 2939012 -2 phosphatidylinositol mannoside acyltransferase - - - status 3 annotated CDS 5 6 +Rv2612c pgsA1 2940612 2939959 -1 CDP-diacylglycerol--inositol 3-phosphatidyltransferase - - - status 3 annotated CDS 5 6 +Rv2613c - 2941196 2940609 -3 AP-4-A phosphorylase - - - status 3 annotated CDS 5 6 +Rv2614A - 2943376 2943603 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2614c thrS 2943267 2941189 -1 threonine--tRNA ligase - - - status 3 annotated CDS 5 6 +Rv2615c PE_PGRS45 2944985 2943600 -3 PE-PGRS family protein PE_PGRS45 - - - status 3 annotated CDS 5 6 +Rv2616 - 2945330 2945830 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2617c - 2946287 2945847 -3 transmembrane protein - - - status 3 annotated CDS 5 6 +Rv2618 - 2946434 2947111 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2619c - 2947449 2947096 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2620c - 2947887 2947462 -1 transmembrane protein - - - status 3 annotated CDS 5 6 +Rv2621c - 2948558 2947884 -3 transcriptional regulator - - - status 3 annotated CDS 5 6 +Rv2622 - 2948636 2949457 2 methyltransferase - - - status 3 annotated CDS 5 6 +Rv2623 TB31.7 2949593 2950486 2 universal stress protein - - - status 3 annotated CDS 5 6 +Rv2624c - 2951307 2950489 -1 universal stress protein - - - status 3 annotated CDS 5 6 +Rv2625c - 2952503 2951322 -3 zinc metalloprotease Rip3 - - - status 3 annotated CDS 5 6 +Rv2626c hrp1 2952993 2952562 -1 hypoxic response protein - - - status 3 annotated CDS 5 6 +Rv2627c - 2954748 2953507 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2628 - 2955058 2955420 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2629 - 2955767 2956891 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2630 - 2956893 2957432 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2631 - 2957572 2958870 1 RNA-splicing ligase RtcB - - - status 3 annotated CDS 5 6 +Rv2632c - 2959190 2958909 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2633c - 2959820 2959335 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2634c PE_PGRS46 2962441 2960105 -2 PE-PGRS family protein PE_PGRS46 - - - status 3 annotated CDS 5 6 +Rv2635 - 2962470 2962712 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2636 - 2962713 2963390 3 O-phosphotransferase - - - status 3 annotated CDS 5 6 +Rv2637 dedA 2963586 2964242 3 transmembrane protein DedA - - - status 3 annotated CDS 5 6 +Rv2638 - 2964405 2964851 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2639c - 2965358 2965026 -3 integral membrane protein - - - status 3 annotated CDS 5 6 +Rv2640c - 2965837 2965478 -2 ArsR family transcriptional regulator - - - status 3 annotated CDS 5 6 +Rv2641 cadI 2965939 2966397 1 cadmium inducible protein CadI - - - status 3 annotated CDS 5 6 +Rv2642 - 2966533 2966913 1 ArsR family transcriptional regulator - - - status 3 annotated CDS 5 6 +Rv2643 arsC 2966910 2968406 3 arsenic-transport integral membrane protein ArsC - - - status 3 annotated CDS 5 6 +Rv2644c - 2968850 2968533 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2645 - 2970123 2970554 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2646 - 2970551 2971549 2 integrase - - - status 3 annotated CDS 5 6 +Rv2647 - 2971563 2972027 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2650c - 2975234 2973795 -3 prophage protein - - - status 3 annotated CDS 5 6 +Rv2651c - 2975775 2975242 -1 prophage protease - - - status 3 annotated CDS 5 6 +Rv2652c - 2976554 2975928 -3 prophage protein - - - status 3 annotated CDS 5 6 +Rv2653c - 2976909 2976586 -1 toxin - - - status 3 annotated CDS 5 6 +Rv2654c - 2977234 2976989 -2 antitoxin - - - status 3 annotated CDS 5 6 +Rv2655c - 2978658 2977231 -1 prophage protein - - - status 3 annotated CDS 5 6 +Rv2656c - 2979052 2978660 -2 prophage protein - - - status 3 annotated CDS 5 6 +Rv2657c - 2979309 2979049 -1 prophage protein - - - status 3 annotated CDS 5 6 +Rv2658c - 2979688 2979326 -2 prophage protein - - - status 3 annotated CDS 5 6 +Rv2659c - 2980818 2979691 -1 prophage integrase - - - status 3 annotated CDS 5 6 +Rv2660c - 2981190 2980963 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2661c - 2981576 2981187 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2662 - 2981482 2981754 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2663 - 2981853 2982086 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2664 - 2982097 2982351 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2665 - 2982699 2982980 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2667 clpC2 2983896 2984654 3 ATP-dependent protease ATP-binding subunit ClpC - - - status 3 annotated CDS 5 6 +Rv2668 - 2984733 2985254 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2669 - 2985283 2985753 1 GCN5-like N-acetyltransferase - - - status 3 annotated CDS 5 6 +Rv2670c - 2986840 2985731 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2671 ribD 2986839 2987615 3 bifunctionaldiaminohydroxyphosphoribosylaminopyrimidine deaminase/5-amino-6-(5-phosphoribosylamino)uracil reductase - - - status 3 annotated CDS 5 6 +Rv2672 - 2987682 2989268 3 protease - - - status 3 annotated CDS 5 6 +Rv2673 aftC 2989291 2990592 1 alpha-(1->3)-arabinofuranosyltransferase - - - status 3 annotated CDS 5 6 +Rv2674 msrB 2990706 2991116 3 peptide methionine sulfoxide reductase MsrB - - - status 3 annotated CDS 5 6 +Rv2675c - 2991936 2991184 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2676c - 2992628 2991933 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2677c hemY 2993992 2992634 -2 protoporphyrinogen oxidase - - - status 3 annotated CDS 5 6 +Rv2678c hemE 2995062 2993989 -1 uroporphyrinogen decarboxylase - - - status 3 annotated CDS 5 6 +Rv2679 echA15 2995115 2995945 2 enoyl-CoA hydratase EchA15 - - - status 3 annotated CDS 5 6 +Rv2680 - 2996105 2996737 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2681 - 2996739 2998055 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2682c dxs1 2999968 2998052 -2 1-deoxy-D-xylulose 5-phosphate synthase - - - status 3 annotated CDS 5 6 +Rv2683 - 3000112 3000609 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2684 arsA 3000614 3001903 2 arsenic-transport integral membrane protein ArsA - - - status 3 annotated CDS 5 6 +Rv2685 arsB1 3001983 3003269 3 arsenic-transport integral membrane protein ArsB - - - status 3 annotated CDS 5 6 +Rv2686c - 3004038 3003280 -1 antibiotic ABC transporter permease - - - status 3 annotated CDS 5 6 +Rv2687c - 3004748 3004035 -3 antibiotic ABC transporter permease - - - status 3 annotated CDS 5 6 +Rv2688c - 3005650 3004745 -2 antibiotic ABC transporter ATP-binding protein - - - status 3 annotated CDS 5 6 +Rv2689c - 3007062 3005845 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2690c - 3009209 3007236 -3 integral membrane protein - - - status 3 annotated CDS 5 6 +Rv2691 ceoB 3009344 3010027 2 TRK system potassium uptake protein CeoB - - - status 3 annotated CDS 5 6 +Rv2692 ceoC 3010024 3010686 1 TRK system potassium uptake protein CeoC - - - status 3 annotated CDS 5 6 +Rv2693c - 3011368 3010697 -2 integral membrane protein - - - status 3 annotated CDS 5 6 +Rv2694c - 3011767 3011399 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2695 - 3011916 3012623 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2696c - 3013608 3012829 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2697c dut 3014147 3013683 -3 deoxyuridine 5'-triphosphate nucleotidohydrolase - - - status 3 annotated CDS 5 6 +Rv2698 - 3014173 3014658 1 transmembrane protein - - - status 3 annotated CDS 5 6 +Rv2699c - 3014965 3014663 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2700 - 3015203 3015853 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2701c suhB 3016735 3015863 -2 inositol-1-monophosphatase SuhB - - - status 3 annotated CDS 5 6 +Rv2702 ppgK 3016858 3017655 1 polyphosphate glucokinase - - - status 3 annotated CDS 5 6 +Rv2703 sigA 3017835 3019421 3 RNA polymerase sigma factor SigA - - - status 3 annotated CDS 5 6 +Rv2704 - 3019458 3019886 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2705c - 3020203 3019814 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2706c - 3020457 3020200 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2707 - 3020573 3021547 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2708c - 3021796 3021548 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2709 - 3021839 3022285 2 transmembrane protein - - - status 3 annotated CDS 5 6 +Rv2710 sigB 3022461 3023432 3 RNA polymerase sigma factor SigB - - - status 3 annotated CDS 5 6 +Rv2711 ideR 3023565 3024257 3 iron-dependent repressor and activator IdeR - - - status 3 annotated CDS 5 6 +Rv2712c - 3025328 3024270 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2713 sthA 3025441 3026847 1 pyridine nucleotide transhydrogenase - - - status 3 annotated CDS 5 6 +Rv2714 - 3027065 3028039 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2715 - 3028098 3029123 3 hydrolase - - - status 3 annotated CDS 5 6 +Rv2716 - 3029172 3029858 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2717c - 3030361 3029867 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2718c nrdR 3030877 3030413 -2 transcriptional regulator NrdR - - - status 3 annotated CDS 5 6 +Rv2719c - 3031537 3031040 -2 membrane protein - - - status 3 annotated CDS 5 6 +Rv2720 lexA 3031788 3032498 3 repressor LexA - - - status 3 annotated CDS 5 6 +Rv2721c - 3034619 3032520 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2722 - 3034635 3034883 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2723 - 3034909 3036102 1 integral membrane protein - - - status 3 annotated CDS 5 6 +Rv2724c fadE20 3037291 3036131 -2 acyl-CoA dehydrogenase FadE20 - - - status 3 annotated CDS 5 6 +Rv2725c hflX 3038914 3037427 -2 GTP-binding protein HflX - - - status 3 annotated CDS 5 6 +Rv2726c dapF 3039800 3038931 -3 diaminopimelate epimerase - - - status 3 annotated CDS 5 6 +Rv2727c miaA 3040769 3039825 -3 tRNA delta(2)-isopentenylpyrophosphate transferase - - - status 3 annotated CDS 5 6 +Rv2728c - 3041461 3040766 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2729c - 3042475 3041570 -2 integral membrane protein - - - status 3 annotated CDS 5 6 +Rv2730 - 3042542 3043018 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2731 - 3043026 3044378 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2732c - 3044989 3044375 -2 transmembrane protein - - - status 3 annotated CDS 5 6 +Rv2733c - 3046524 3044986 -1 (dimethylallyl)adenosine tRNA methylthiotransferase - - - status 3 annotated CDS 5 6 +Rv2734 - 3046821 3047675 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2735c - 3048552 3047560 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2736c recX 3049086 3048562 -1 regulatory protein RecX - - - status 3 annotated CDS 5 6 +Rv2737c recA 3051424 3049052 -2 recombinase A - - - status 3 annotated CDS 5 6 +Rv2738c - 3052012 3051806 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2739c - 3053189 3052023 -3 transferase - - - status 3 annotated CDS 5 6 +Rv2740 ephG 3053233 3053682 1 epoxide hydrolase - - - status 3 annotated CDS 5 6 +Rv2741 PE_PGRS47 3053914 3055491 1 PE-PGRS family protein PE_PGRS47 - - - status 3 annotated CDS 5 6 +Rv2742c - 3056348 3055515 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2743c - 3057232 3056420 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2744c 35kd_ag 3058063 3057251 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2745c clgR 3058531 3058193 -2 transcriptional regulator ClgR - - - status 3 annotated CDS 5 6 +Rv2746c pgsA3 3059231 3058602 -3 CDP-diacylglycerol--glycerol-3-phosphate 3-phosphatidyltransferase - - - status 3 annotated CDS 5 6 +Rv2747 argA 3059262 3059786 3 L-glutamate alpha-N-acetyltranferase - - - status 3 annotated CDS 5 6 +Rv2748c ftsK 3062506 3059855 -2 DNA translocase FtsK - - - status 3 annotated CDS 5 6 +Rv2749 - 3062505 3062819 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2750 - 3062816 3063634 2 dehydrogenase - - - status 3 annotated CDS 5 6 +Rv2751 - 3063638 3064528 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2752c - 3066191 3064515 -3 ribonuclease J - - - status 3 annotated CDS 5 6 +Rv2753c dapA 3067124 3066222 -3 4-hydroxy-tetrahydrodipicolinate synthase - - - status 3 annotated CDS 5 6 +Rv2754c thyX 3067945 3067193 -2 thymidylate synthase ThyX - - - status 3 annotated CDS 5 6 +Rv2756c hsdM 3070083 3068461 -1 type I restriction/modification system DNA methylase HsdM - - - status 3 annotated CDS 5 6 +Rv2757c vapC21 3070586 3070170 -3 ribonuclease VapC21 - - - status 3 annotated CDS 5 6 +Rv2758c vapB21 3070849 3070583 -2 antitoxin VapB21 - - - status 3 annotated CDS 5 6 +Rv2759c vapC42 3071270 3070875 -3 ribonuclease VapC42 - - - status 3 annotated CDS 5 6 +Rv2760c vapB42 3071536 3071267 -2 antitoxin VapB42 - - - status 3 annotated CDS 5 6 +Rv2761c hsdS 3072640 3071546 -2 type I restriction/modification system specificity determinant HsdS - - - status 3 annotated CDS 5 6 +Rv2762c - 3073056 3072637 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2763c dfrA 3073609 3073130 -2 dihydrofolate reductase - - - status 3 annotated CDS 5 6 +Rv2764c thyA 3074471 3073680 -3 thymidylate synthase ThyA - - - status 3 annotated CDS 5 6 +Rv2765 - 3074636 3075373 2 hydrolase - - - status 3 annotated CDS 5 6 +Rv2766c - 3076370 3075588 -3 short-chain type dehydrogenase/reductase - - - status 3 annotated CDS 5 6 +Rv2767c - 3076720 3076367 -2 membrane protein - - - status 3 annotated CDS 5 6 +Rv2768c PPE43 3078078 3076894 -1 PPE family protein PPE43 - - - status 3 annotated CDS 5 6 +Rv2769c PE27 3078985 3078158 -2 PE family protein PE27 - - - status 3 annotated CDS 5 6 +Rv2770c PPE44 3080457 3079309 -1 PPE family protein PPE44 - - - status 3 annotated CDS 5 6 +Rv2771c - 3081033 3080581 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2772c - 3081592 3081119 -2 transmembrane protein - - - status 3 annotated CDS 5 6 +Rv2773c dapB 3082341 3081604 -1 4-hydroxy-tetrahydrodipicolinate reductase - - - status 3 annotated CDS 5 6 +Rv2774c - 3082756 3082352 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2775 - 3082909 3083370 1 GCN5-like N-acetyltransferase - - - status 3 annotated CDS 5 6 +Rv2776c - 3084303 3083374 -1 oxidoreductase - - - status 3 annotated CDS 5 6 +Rv2777c - 3085555 3084485 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2778c - 3086183 3085713 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2779c - 3086754 3086215 -1 Lrp/AsnC family transcriptional regulator - - - status 3 annotated CDS 5 6 +Rv2780 ald 3086820 3087935 3 L-alanine dehydrogenase - - - status 3 annotated CDS 5 6 +Rv2781c - 3088984 3087950 -2 oxidoreductase - - - status 3 annotated CDS 5 6 +Rv2782c pepR 3090361 3089045 -2 zinc protease - - - status 3 annotated CDS 5 6 +Rv2783c gpsI 3092597 3090339 -3 bifunctional guanosine pentaphosphate synthetase/polyribonucleotide nucleotidyltransferase - - - status 3 annotated CDS 5 6 +Rv2784c lppU 3093466 3092951 -2 lipoprotein LppU - - - status 3 annotated CDS 5 6 +Rv2785c rpsO 3093748 3093479 -2 30S ribosomal protein S15 - - - status 3 annotated CDS 5 6 +Rv2786c ribF 3094900 3093905 -2 bifunctional riboflavin kinase /FMN adenylyltransferase - - - status 3 annotated CDS 5 6 +Rv2787 - 3095111 3096874 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2788 sirR 3096959 3097645 2 transcriptional repressor SirR - - - status 3 annotated CDS 5 6 +Rv2789c fadE21 3098938 3097706 -2 acyl-CoA dehydrogenase FadE21 - - - status 3 annotated CDS 5 6 +Rv2790c ltp1 3100169 3098964 -3 lipid-transfer protein - - - status 3 annotated CDS 5 6 +Rv2791c - 3101581 3100202 -2 transposase - - - status 3 annotated CDS 5 6 +Rv2792c - 3102162 3101581 -1 resolvase - - - status 3 annotated CDS 5 6 +Rv2793c truB 3103260 3102364 -1 tRNA pseudouridine synthase B - - - status 3 annotated CDS 5 6 +Rv2794c pptT 3103940 3103257 -3 phosphopantetheinyl transferase - - - status 3 annotated CDS 5 6 +Rv2795c - 3104911 3103937 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2796c lppV 3105619 3105056 -2 lipoprotein LppV - - - status 3 annotated CDS 5 6 +Rv2797c - 3107307 3105619 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2798c - 3107637 3107311 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2799 - 3107768 3108397 2 membrane protein - - - status 3 annotated CDS 5 6 +Rv2800 - 3108416 3110065 2 hydrolase - - - status 3 annotated CDS 5 6 +Rv2801A mazE9 3110737 3110507 -2 antitoxin MazE9 - - - status 3 annotated CDS 5 6 +Rv2801c mazF9 3110523 3110167 -1 mRNA interferase MazF9 - - - status 3 annotated CDS 5 6 +Rv2802c - 3111823 3110780 -2 arginine/hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2803 - 3111822 3112289 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2804c - 3113094 3112465 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2805 - 3112867 3113271 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2806 - 3113268 3113459 3 membrane protein - - - status 3 annotated CDS 5 6 +Rv2807 - 3113658 3114812 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2808 - 3115046 3115303 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2809 - 3115408 3115719 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2811 - 3116139 3116747 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2812 - 3116818 3118227 1 transposase - - - status 3 annotated CDS 5 6 +Rv2813 - 3118224 3119036 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2816c - 3123966 3123625 -1 CRISPR-associated endoribonuclease Cas2 - - - status 3 annotated CDS 5 6 +Rv2817c - 3124983 3123967 -1 CRISPR-associated endonuclease Cas1 - - - status 3 annotated CDS 5 6 +Rv2818c - 3126144 3124996 -1 CRISPR-associated protein Csm6 - - - status 3 annotated CDS 5 6 +Rv2819c - 3127367 3126240 -3 CRISPR type III-associated RAMP protein Csm5 - - - status 3 annotated CDS 5 6 +Rv2820c - 3128272 3127364 -2 CRISPR type III-associated RAMP protein Csm4 - - - status 3 annotated CDS 5 6 +Rv2821c - 3128963 3128253 -3 CRISPR type III-associated RAMP protein Csm3 - - - status 3 annotated CDS 5 6 +Rv2822c - 3129347 3128973 -3 CRISPR type III-associated protein Csm2 - - - status 3 annotated CDS 5 6 +Rv2823c - 3131773 3129344 -2 CRISPR-associated protein Cas10/Csm1 - - - status 3 annotated CDS 5 6 +Rv2824c - 3132714 3131770 -1 CRISPR-associated endoribonuclease Cas6 - - - status 3 annotated CDS 5 6 +Rv2825c - 3133539 3132892 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2826c - 3134593 3133709 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2827c - 3135483 3134596 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2828A - 3136599 3136330 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2828c - 3136333 3135788 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2829c vapC22 3137012 3136620 -3 ribonuclease VapC22 - - - status 3 annotated CDS 5 6 +Rv2830c vapB22 3137224 3137009 -2 antitoxin VapB22 - - - status 3 annotated CDS 5 6 +Rv2831 echA16 3137271 3138020 3 enoyl-CoA hydratase EchA16 - - - status 3 annotated CDS 5 6 +Rv2832c ugpC 3139181 3138099 -3 sn-glycerol-3-phosphate ABC transporter ATP-binding protein UgpC - - - status 3 annotated CDS 5 6 +Rv2833c ugpB 3140484 3139174 -1 sn-glycerol-3-phosphate ABC transporter substrate-binding lipoprotein UgpB - - - status 3 annotated CDS 5 6 +Rv2834c ugpE 3141314 3140487 -3 sn-glycerol-3-phosphate ABC transporter permease UgpE - - - status 3 annotated CDS 5 6 +Rv2835c ugpA 3142222 3141311 -2 sn-glycerol-3-phosphate ABC transporter permease UgpA - - - status 3 annotated CDS 5 6 +Rv2836c dinF 3143628 3142309 -1 DNA-damage-inducible protein DinF - - - status 3 annotated CDS 5 6 +Rv2837c - 3144645 3143635 -1 bifunctional oligoribonuclease/PAP phosphatase NrnA - - - status 3 annotated CDS 5 6 +Rv2838c rbfA 3145171 3144620 -2 ribosome-binding factor RbfA - - - status 3 annotated CDS 5 6 +Rv2839c infB 3147873 3145171 -1 translation initiation factor IF-2 - - - status 3 annotated CDS 5 6 +Rv2840c - 3148258 3147959 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2841c nusA 3149428 3148385 -2 transcription termination/antitermination protein NusA - - - status 3 annotated CDS 5 6 +Rv2842c - 3149976 3149425 -1 ribosome maturation factor RimP - - - status 3 annotated CDS 5 6 +Rv2843 - 3150171 3150716 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2844 - 3150713 3151201 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2845c proS 3152950 3151202 -2 proline--tRNA ligase - - - status 3 annotated CDS 5 6 +Rv2846c efpA 3154631 3153039 -3 MFS-type transporter EfpA - - - status 3 annotated CDS 5 6 +Rv2847c cysG 3155871 3154654 -1 multifunctional uroporphyrin-III C-methyltransferase/precorrin-2 oxidase/ferrochelatase - - - status 3 annotated CDS 5 6 +Rv2848c cobB 3157521 3156148 -1 cobyrinic acid A,C-diamide synthase - - - status 3 annotated CDS 5 6 +Rv2849c cobO 3158144 3157521 -3 cob(I)alamin adenosyltransferase - - - status 3 annotated CDS 5 6 +Rv2850c - 3160054 3158165 -2 magnesium chelatase - - - status 3 annotated CDS 5 6 +Rv2851c - 3160521 3160051 -1 GCN5-like N-acetyltransferase - - - status 3 annotated CDS 5 6 +Rv2852c mqo 3162061 3160580 -2 malate:quinone oxidoreductase - - - status 3 annotated CDS 5 6 +Rv2853 PE_PGRS48 3162268 3164115 1 PE-PGRS family protein PE_PGRS48 - - - status 3 annotated CDS 5 6 +Rv2854 - 3164152 3165192 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2855 mtr 3165205 3166584 1 mycothione reductase - - - status 3 annotated CDS 5 6 +Rv2856 nicT 3166684 3167802 1 nickel-transport integral membrane protein NicT - - - status 3 annotated CDS 5 6 +Rv2857c - 3169359 3168583 -1 short-chain type dehydrogenase/reductase - - - status 3 annotated CDS 5 6 +Rv2858c aldC 3170723 3169356 -3 aldehyde dehydrogenase AldC - - - status 3 annotated CDS 5 6 +Rv2859c - 3171646 3170720 -2 glutamine amidotransferase - - - status 3 annotated CDS 5 6 +Rv2860c glnA4 3173000 3171627 -3 glutamine synthetase - - - status 3 annotated CDS 5 6 +Rv2861c mapB 3174017 3173160 -3 methionine aminopeptidase - - - status 3 annotated CDS 5 6 +Rv2862A vapB23 3174747 3174995 3 antitoxin VapB23 - - - status 3 annotated CDS 5 6 +Rv2862c - 3174643 3174059 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2863 vapC23 3174992 3175372 2 ribonuclease VapC23 - - - status 3 annotated CDS 5 6 +Rv2864c - 3177265 3175454 -2 penicillin-binding lipoprotein - - - status 3 annotated CDS 5 6 +Rv2865 relF 3177537 3177818 3 antitoxin RelF - - - status 3 annotated CDS 5 6 +Rv2866 relG 3177822 3178085 3 toxin RelG - - - status 3 annotated CDS 5 6 +Rv2867c - 3179312 3178458 -3 GCN5-like N-acetyltransferase - - - status 3 annotated CDS 5 6 +Rv2868c gcpE 3180531 3179368 -1 4-hydroxy-3-methylbut-2-en-1-yl diphosphate synthase - - - status 3 annotated CDS 5 6 +Rv2869c rip 3181762 3180548 -2 zinc metalloprotease - - - status 3 annotated CDS 5 6 +Rv2870c dxr 3183011 3181770 -3 1-deoxy-D-xylulose 5-phosphate reductoisomerase - - - status 3 annotated CDS 5 6 +Rv2871 vapB43 3183138 3183395 3 antitoxin VapB43 - - - status 3 annotated CDS 5 6 +Rv2872 vapC43 3183382 3183825 1 ribonuclease VapC43 - - - status 3 annotated CDS 5 6 +Rv2873 mpt83 3183905 3184567 2 cell surface lipoprotein - - - status 3 annotated CDS 5 6 +Rv2874 dipZ 3184847 3186934 2 integral membrane C-type cytochrome biogenesis protein DipZ - - - status 3 annotated CDS 5 6 +Rv2875 mpt70 3187030 3187611 1 major secreted immunogenic protein Mpt70 - - - status 3 annotated CDS 5 6 +Rv2876 - 3187663 3187977 1 transmembrane protein - - - status 3 annotated CDS 5 6 +Rv2877c - 3188871 3188008 -1 integral membrane protein - - - status 3 annotated CDS 5 6 +Rv2878c mpt53 3189397 3188876 -2 soluble secreted antigen Mpt53 - - - status 3 annotated CDS 5 6 +Rv2881c cdsA 3191621 3190701 -3 phosphatidate cytidylyltransferase - - - status 3 annotated CDS 5 6 +Rv2882c frr 3192201 3191644 -1 ribosome recycling factor - - - status 3 annotated CDS 5 6 +Rv2883c pyrH 3193158 3192373 -1 uridylate kinase - - - status 3 annotated CDS 5 6 +Rv2884 - 3193393 3194151 1 transcriptional regulator - - - status 3 annotated CDS 5 6 +Rv2885c - 3195548 3194166 -3 transposase - - - status 3 annotated CDS 5 6 +Rv2886c - 3196432 3195545 -2 resolvase - - - status 3 annotated CDS 5 6 +Rv2887 - 3196431 3196850 3 HTH-type transcriptional regulator - - - status 3 annotated CDS 5 6 +Rv2888c amiC 3198285 3196864 -1 amidase AmiC - - - status 3 annotated CDS 5 6 +Rv2889c tsf 3199107 3198292 -1 elongation factor EF-Ts - - - status 3 annotated CDS 5 6 +Rv2890c rpsB 3199982 3199119 -3 30S ribosomal protein S2 - - - status 3 annotated CDS 5 6 +Rv2891 - 3200266 3201015 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2892c PPE45 3202020 3200794 -1 PPE family protein PPE45 - - - status 3 annotated CDS 5 6 +Rv2893 - 3202420 3203397 1 oxidoreductase - - - status 3 annotated CDS 5 6 +Rv2894c xerC 3204290 3203394 -3 tyrosine recombinase XerC - - - status 3 annotated CDS 5 6 +Rv2895c viuB 3205232 3204381 -3 mycobactin utilization protein ViuB - - - status 3 annotated CDS 5 6 +Rv2896c - 3206434 3205265 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2897c - 3207942 3206431 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2898c - 3208328 3207942 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2899c fdhD 3209406 3208576 -1 formate dehydrogenase accessory protein FdhD - - - status 3 annotated CDS 5 6 +Rv2900c fdhF 3211745 3209406 -3 formate dehydrogenase subunit alpha FdhF - - - status 3 annotated CDS 5 6 +Rv2901c - 3212108 3211803 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2902c rnhB 3212956 3212162 -2 ribonuclease HII - - - status 3 annotated CDS 5 6 +Rv2903c lepB 3213854 3212970 -3 signal peptidase - - - status 3 annotated CDS 5 6 +Rv2904c rplS 3214253 3213912 -3 50S ribosomal protein L19 - - - status 3 annotated CDS 5 6 +Rv2905 lppW 3214628 3215572 2 lipoprotein LppW - - - status 3 annotated CDS 5 6 +Rv2906c trmD 3216357 3215665 -1 tRNA (guanine-N1)-methyltransferase - - - status 3 annotated CDS 5 6 +Rv2907c rimM 3216891 3216361 -1 16S rRNA processing protein RimM - - - status 3 annotated CDS 5 6 +Rv2908c - 3217147 3216905 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2909c rpsP 3217643 3217155 -3 30S ribosomal protein S16 - - - status 3 annotated CDS 5 6 +Rv2910c - 3218270 3217827 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2911 dacB2 3218339 3219214 2 penicillin-binding protein DacB2 - - - status 3 annotated CDS 5 6 +Rv2912c - 3219861 3219274 -1 TetR family HTH-type transcriptional regulator - - - status 3 annotated CDS 5 6 +Rv2913c - 3221698 3219863 -2 D-amino acid aminohydrolase - - - status 3 annotated CDS 5 6 +Rv2914c pknI 3223524 3221767 -1 serine/threonine-protein kinase PknI - - - status 3 annotated CDS 5 6 +Rv2915c - 3224680 3223568 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2916c ffh 3226285 3224708 -2 signal recognition particle protein - - - status 3 annotated CDS 5 6 +Rv2917 - 3226363 3228243 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2918c glnD 3230680 3228254 -2 bifunctional uridylyltransferase/uridylyl-removing enzyme - - - status 3 annotated CDS 5 6 +Rv2919c glnB 3231076 3230738 -2 nitrogen regulatory protein P-II - - - status 3 annotated CDS 5 6 +Rv2920c amt 3232506 3231073 -1 ammonium transporter integral membrane protein - - - status 3 annotated CDS 5 6 +Rv2921c ftsY 3234139 3232871 -2 signal recognition particle receptor FtsY - - - status 3 annotated CDS 5 6 +Rv2922A acyP 3238099 3237818 -2 acylphosphatase - - - status 3 annotated CDS 5 6 +Rv2922c smc 3237806 3234189 -3 chromosome partition protein Smc - - - status 3 annotated CDS 5 6 +Rv2923c - 3238499 3238086 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2924c fpg 3239470 3238601 -2 formamidopyrimidine-DNA glycosylase - - - status 3 annotated CDS 5 6 +Rv2925c rnc 3240551 3239829 -3 ribonuclease III - - - status 3 annotated CDS 5 6 +Rv2926c - 3241171 3240548 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2927c - 3241959 3241222 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2928 tesA 3242198 3242983 2 thioesterase TesA - - - status 3 annotated CDS 5 6 +Rv2929 - 3242970 3243281 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2930 fadD26 3243697 3245448 1 fatty-acid--CoA ligase FadD26 - - - status 3 annotated CDS 5 6 +Rv2931 ppsA 3245445 3251075 3 phthiocerol synthesis polyketide synthase type I PpsA - - - status 3 annotated CDS 5 6 +Rv2932 ppsB 3251072 3255688 2 phthiocerol synthesis polyketide synthase type I PpsB - - - status 3 annotated CDS 5 6 +Rv2933 ppsC 3255685 3262251 1 phthiocerol synthesis polyketide synthase type I PpsC - - - status 3 annotated CDS 5 6 +Rv2934 ppsD 3262248 3267731 3 phthiocerol synthesis polyketide synthase type I PpsD - - - status 3 annotated CDS 5 6 +Rv2935 ppsE 3267737 3272203 2 phthiocerol synthesis polyketide synthase type I PpsE - - - status 3 annotated CDS 5 6 +Rv2936 drrA 3272214 3273209 3 daunorubicin ABC transporter ATP-binding protein DrrA - - - status 3 annotated CDS 5 6 +Rv2937 drrB 3273206 3274075 2 daunorubicin ABC transporter permease DrrB - - - status 3 annotated CDS 5 6 +Rv2938 drrC 3274072 3274902 1 daunorubicin ABC transporter permease DrrC - - - status 3 annotated CDS 5 6 +Rv2939 papA5 3274949 3276217 2 phthiocerol/phthiodiolone dimycocerosyl transferase - - - status 3 annotated CDS 5 6 +Rv2940c mas 3282715 3276380 -2 multifunctional mycocerosic acid synthase - - - status 3 annotated CDS 5 6 +Rv2941 fadD28 3283335 3285077 3 long-chain-fatty-acid--AMP ligase FadD28 - - - status 3 annotated CDS 5 6 +Rv2942 mmpL7 3285070 3287832 1 transmembrane transport protein MmpL7 - - - status 3 annotated CDS 5 6 +Rv2943 - 3288464 3289705 2 insertion sequence element IS1533 transposase - - - status 3 annotated CDS 5 6 +Rv2943A - 3289705 3290235 1 transposase - - - status 3 annotated CDS 5 6 +Rv2944 - 3289790 3290506 2 insertion sequence element IS1533 transposase - - - status 3 annotated CDS 5 6 +Rv2945c lppX 3291325 3290624 -2 lipoprotein LppX - - - status 3 annotated CDS 5 6 +Rv2946c pks1 3296353 3291503 -2 polyketide synthase - - - status 3 annotated CDS 5 6 +Rv2947c pks15 3297840 3296350 -1 polyketide synthase - - - status 3 annotated CDS 5 6 +Rv2948c fadD22 3299954 3297837 -3 p-hydroxybenzoyl--AMP ligase - - - status 3 annotated CDS 5 6 +Rv2949c - 3300570 3299971 -1 chorismate pyruvate-lyase - - - status 3 annotated CDS 5 6 +Rv2950c fadD29 3302455 3300596 -2 long-chain-fatty-acid--AMP ligase FadD29 - - - status 3 annotated CDS 5 6 +Rv2951c - 3304248 3303103 -1 phthiodiolone/phenolphthiodiolone dimycocerosates ketoreductase - - - status 3 annotated CDS 5 6 +Rv2952 - 3304441 3305253 1 phthiotriol/phenolphthiotriol dimycocerosates methyltransferase - - - status 3 annotated CDS 5 6 +Rv2953 - 3305279 3306535 2 trans-acting enoyl reductase - - - status 3 annotated CDS 5 6 +Rv2954c - 3307391 3306666 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2955c - 3308545 3307580 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2956 - 3308668 3309399 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2957 - 3309470 3310297 2 PGL/p-HBAD biosynthesis glycosyltransferase - - - status 3 annotated CDS 5 6 +Rv2958c - 3312000 3310714 -1 PGL/p-HBAD biosynthesis glycosyltransferase - - - status 3 annotated CDS 5 6 +Rv2959c - 3312838 3312101 -2 rhamnosyl O-methyltransferase - - - status 3 annotated CDS 5 6 +Rv2960c - 3313201 3312953 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2961 - 3313283 3313672 2 transposase - - - status 3 annotated CDS 5 6 +Rv2962c - 3315122 3313773 -3 PGL/p-HBAD biosynthesis rhamnosyltransferase - - - status 3 annotated CDS 5 6 +Rv2963 - 3315236 3316456 2 integral membrane protein - - - status 3 annotated CDS 5 6 +Rv2964 purU 3316529 3317461 2 formyltetrahydrofolate deformylase - - - status 3 annotated CDS 5 6 +Rv2965c kdtB 3318815 3318330 -3 phosphopantetheine adenylyltransferase - - - status 3 annotated CDS 5 6 +Rv2966c - 3319467 3318901 -1 methyltransferase - - - status 3 annotated CDS 5 6 +Rv2967c pca 3323046 3319663 -1 pyruvate carboxylase - - - status 3 annotated CDS 5 6 +Rv2968c - 3323703 3323071 -1 integral membrane protein - - - status 3 annotated CDS 5 6 +Rv2969c - 3324476 3323709 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2970A - 3325934 3326104 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2970c lipN 3325703 3324573 -3 lipase/esterase LipN - - - status 3 annotated CDS 5 6 +Rv2971 - 3326101 3326949 1 oxidoreductase - - - status 3 annotated CDS 5 6 +Rv2972c - 3327736 3327023 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2973c recG 3329946 3327733 -1 ATP-dependent DNA helicase RecG - - - status 3 annotated CDS 5 6 +Rv2974c - 3331361 3329949 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2975a - 3331854 3332048 3 50S ribosomal protein L28 - - - status 3 annotated CDS 5 6 +Rv2975c - 3331612 3331358 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2976c ung 3332754 3332071 -1 uracil-DNA glycosylase - - - status 3 annotated CDS 5 6 +Rv2977c thiL 3333788 3332787 -3 thiamine-monophosphate kinase - - - status 3 annotated CDS 5 6 +Rv2978c - 3335164 3333785 -2 transposase - - - status 3 annotated CDS 5 6 +Rv2979c - 3335748 3335164 -1 resolvase - - - status 3 annotated CDS 5 6 +Rv2980 - 3335960 3336505 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2981c ddlA 3337917 3336796 -1 D-alanine--D-alanine ligase - - - status 3 annotated CDS 5 6 +Rv2982c gpdA2 3338999 3337995 -3 glycerol-3-phosphate dehydrogenase - - - status 3 annotated CDS 5 6 +Rv2983 - 3339118 3339762 1 2-phospho-L-lactate guanylyltransferase - - - status 3 annotated CDS 5 6 +Rv2984 ppk1 3339854 3342082 2 polyphosphate kinase - - - status 3 annotated CDS 5 6 +Rv2985 mutT1 3342165 3343118 3 8-oxo-dGTP diphosphatase - - - status 3 annotated CDS 5 6 +Rv2986c hupB 3343820 3343176 -3 DNA-binding protein HU - - - status 3 annotated CDS 5 6 +Rv2987c leuD 3344629 3344033 -2 3-isopropylmalate dehydratase small subunit - - - status 3 annotated CDS 5 6 +Rv2988c leuC 3346075 3344654 -2 3-isopropylmalate dehydratase large subunit - - - status 3 annotated CDS 5 6 +Rv2989 - 3346147 3346848 1 transcriptional regulator - - - status 3 annotated CDS 5 6 +Rv2990c - 3347719 3346859 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2991 - 3347982 3348473 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2992c gltS 3350277 3348805 -1 glutamate--tRNA ligase - - - status 3 annotated CDS 5 6 +Rv2993c - 3350993 3350274 -3 2-hydroxyhepta-2,4-diene-1,7-dioate isomerase - - - status 3 annotated CDS 5 6 +Rv2994 - 3351269 3352606 2 MFS-type transporter - - - status 3 annotated CDS 5 6 +Rv2995c leuB 3353468 3352458 -3 3-isopropylmalate dehydrogenase - - - status 3 annotated CDS 5 6 +Rv2996c serA1 3355069 3353483 -2 D-3-phosphoglycerate dehydrogenase - - - status 3 annotated CDS 5 6 +Rv2997 - 3355099 3356541 1 dehydrogenase - - - status 3 annotated CDS 5 6 +Rv2998 - 3356815 3357276 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv2999 lppY 3357602 3358567 2 lipoprotein LppY - - - status 3 annotated CDS 5 6 +Rv3000 - 3358612 3359271 1 transmembrane protein - - - status 3 annotated CDS 5 6 +Rv3001c ilvC 3360586 3359585 -2 ketol-acid reductoisomerase - - - status 3 annotated CDS 5 6 +Rv3002c ilvN 3361130 3360624 -3 acetolactate synthase small subunit - - - status 3 annotated CDS 5 6 +Rv3003c ilvB1 3362986 3361130 -2 acetolactate synthase large subunit IlvB - - - status 3 annotated CDS 5 6 +Rv3004 cfp6 3363348 3363686 3 low molecular weight protein antigen 6 - - - status 3 annotated CDS 5 6 +Rv3005c - 3364532 3363693 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3006 lppZ 3364709 3365830 2 lipoprotein LppZ - - - status 3 annotated CDS 5 6 +Rv3007c - 3366450 3365836 -1 oxidoreductase - - - status 3 annotated CDS 5 6 +Rv3008 - 3366644 3367267 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3009c gatB 3368793 3367264 -1 aspartyl/glutamyl-tRNA(Asn/Gln) amidotransferase subunit B - - - status 3 annotated CDS 5 6 +Rv3010c pfkA 3369854 3368823 -3 6-phosphofructokinase - - - status 3 annotated CDS 5 6 +Rv3011c gatA 3371434 3369950 -2 glutamyl-tRNA(GLN) amidotransferase subunit A - - - status 3 annotated CDS 5 6 +Rv3012c gatC 3371730 3371431 -1 glutamyl-tRNA(GLN) amidotransferase subunit C - - - status 3 annotated CDS 5 6 +Rv3013 - 3371815 3372471 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3014c ligA 3374620 3372545 -2 DNA ligase A - - - status 3 annotated CDS 5 6 +Rv3015c - 3375664 3374651 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3016 lpqA 3375758 3376387 2 lipoprotein LpqA - - - status 3 annotated CDS 5 6 +Rv3017c esxQ 3376852 3376490 -2 ESAT-6 like protein EsxQ - - - status 3 annotated CDS 5 6 +Rv3018c PPE46 3378243 3376939 -1 PPE family protein PPE46 - - - status 3 annotated CDS 5 6 +Rv3019c esxR 3379001 3378711 -3 ESAT-6 like protein EsxR - - - status 3 annotated CDS 5 6 +Rv3020c esxS 3379329 3379036 -1 ESAT-6 like protein EsxS - - - status 3 annotated CDS 5 6 +Rv3022A PE29 3380993 3380679 -3 PE family protein PE29 - - - status 3 annotated CDS 5 6 +Rv3023c - 3382622 3381375 -3 transposase - - - status 3 annotated CDS 5 6 +Rv3024c trmU 3383888 3382785 -3 tRNA-specific 2-thiouridylase - - - status 3 annotated CDS 5 6 +Rv3025c iscS 3385066 3383885 -2 cysteine desulfurase - - - status 3 annotated CDS 5 6 +Rv3026c - 3386077 3385163 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3027c - 3386919 3386074 -1 GCN5-like N-acetyltransferase - - - status 3 annotated CDS 5 6 +Rv3028c fixB 3388031 3387075 -3 electron transfer flavoprotein subunit alpha - - - status 3 annotated CDS 5 6 +Rv3029c fixA 3388870 3388070 -2 electron transfer flavoprotein subunit beta - - - status 3 annotated CDS 5 6 +Rv3030 - 3389101 3389925 1 S-adenosylmethionine-dependentmethyltransferase - - - status 3 annotated CDS 5 6 +Rv3031 - 3389922 3391502 3 1,4-alpha-glucan branching protein - - - status 3 annotated CDS 5 6 +Rv3032 - 3391534 3392778 1 glycogen synthase - - - status 3 annotated CDS 5 6 +Rv3032A - 3392812 3393201 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3033 - 3393380 3393928 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3034c - 3394921 3394019 -2 acetyltransferase - - - status 3 annotated CDS 5 6 +Rv3035 - 3395379 3396461 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3036c TB22.2 3397141 3396458 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3037c - 3398290 3397214 -2 S-adenosylmethionine-dependentmethyltransferase - - - status 3 annotated CDS 5 6 +Rv3038c - 3399408 3398425 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3039c echA17 3400183 3399419 -2 enoyl-CoA hydratase EchA17 - - - status 3 annotated CDS 5 6 +Rv3040c - 3401058 3400192 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3041c - 3401918 3401055 -3 ABC transporter ATP-binding protein - - - status 3 annotated CDS 5 6 +Rv3042c serB2 3403162 3401933 -2 phosphoserine phosphatase SerB - - - status 3 annotated CDS 5 6 +Rv3043c ctaD 3404921 3403200 -3 cytochrome C oxidase cytochrome 1 - - - status 3 annotated CDS 5 6 +Rv3044 fecB 3405136 3406215 1 FeIII-dicitrate-binding periplasmic lipoprotein - - - status 3 annotated CDS 5 6 +Rv3045 adhC 3406285 3407325 1 NADP-dependent alcohol dehydrogenase - - - status 3 annotated CDS 5 6 +Rv3046c - 3407688 3407314 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3047c - 3408306 3408022 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3048c nrdF2 3409378 3408404 -2 ribonucleoside-diphosphate reductase subunit beta NrdF2 - - - status 3 annotated CDS 5 6 +Rv3049c - 3411083 3409509 -3 monooxygenase - - - status 3 annotated CDS 5 6 +Rv3050c - 3411957 3411217 -1 AsnC family transcriptional regulator - - - status 3 annotated CDS 5 6 +Rv3051c nrdE 3414166 3412085 -2 ribonucleoside-diphosphate reductase subunit alpha - - - status 3 annotated CDS 5 6 +Rv3052c nrdI 3414684 3414232 -1 NrdI protein - - - status 3 annotated CDS 5 6 +Rv3053c nrdH 3414958 3414719 -2 glutaredoxin electron transport protein NrdH - - - status 3 annotated CDS 5 6 +Rv3054c - 3415989 3415435 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3055 - 3416081 3416695 2 TetR family transcriptional regulator - - - status 3 annotated CDS 5 6 +Rv3056 dinP 3416705 3417745 2 DNA polymerase IV 2 - - - status 3 annotated CDS 5 6 +Rv3057c - 3418662 3417799 -1 short chain alcohol dehydrogenase/reductase - - - status 3 annotated CDS 5 6 +Rv3058c - 3419376 3418726 -1 TetR family transcriptional regulator - - - status 3 annotated CDS 5 6 +Rv3059 cyp136 3419492 3420970 2 cytochrome P450 Cyp136 - - - status 3 annotated CDS 5 6 +Rv3060c - 3423213 3421741 -1 GntR family transcriptional regulator - - - status 3 annotated CDS 5 6 +Rv3061c fadE22 3425427 3423262 -1 acyl-CoA dehydrogenase FadE22 - - - status 3 annotated CDS 5 6 +Rv3062 ligB 3425584 3427107 1 DNA ligase - - - status 3 annotated CDS 5 6 +Rv3063 cstA 3427243 3429519 1 carbon starvation protein A - - - status 3 annotated CDS 5 6 +Rv3064c - 3430250 3429825 -3 integral membrane protein - - - status 3 annotated CDS 5 6 +Rv3065 mmr 3430387 3430710 1 multidrug resistance protein Mmr - - - status 3 annotated CDS 5 6 +Rv3066 - 3430707 3431315 3 DeoR family transcriptional regulator - - - status 3 annotated CDS 5 6 +Rv3067 - 3431428 3431838 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3068c pgmA 3433622 3431979 -3 phosphoglucomutase PgmA - - - status 3 annotated CDS 5 6 +Rv3069 - 3433692 3434090 3 fluoride ion transporter CrcB - - - status 3 annotated CDS 5 6 +Rv3070 - 3434087 3434467 2 fluoride ion transporter CrcB - - - status 3 annotated CDS 5 6 +Rv3071 - 3434464 3435573 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3072c - 3436322 3435798 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3073c - 3436685 3436329 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3074 - 3436779 3438053 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3075c - 3438973 3438050 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3076 - 3439072 3439548 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3077 - 3439541 3441352 2 hydrolase - - - status 3 annotated CDS 5 6 +Rv3078 hab 3441353 3441754 2 hydroxylaminobenzene mutase - - - status 3 annotated CDS 5 6 +Rv3079c - 3442597 3441770 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3080c pknK 3445988 3442656 -3 serine/threonine-protein kinase PknK - - - status 3 annotated CDS 5 6 +Rv3081 - 3446040 3447278 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3082c virS 3448426 3447404 -2 HTH-type transcriptional regulator VirS - - - status 3 annotated CDS 5 6 +Rv3083 - 3448504 3449991 1 FAD-containing monooxygenase MymA - - - status 3 annotated CDS 5 6 +Rv3084 lipR 3449997 3450923 3 acetyl-hydrolase LipR - - - status 3 annotated CDS 5 6 +Rv3085 - 3450920 3451750 2 oxidoreductase SadH - - - status 3 annotated CDS 5 6 +Rv3086 adhD 3451781 3452887 2 alcohol dehydrogenase D - - - status 3 annotated CDS 5 6 +Rv3087 - 3452925 3454343 3 diacyglycerol O-acyltransferase - - - status 3 annotated CDS 5 6 +Rv3088 tgs4 3454340 3455764 2 diacyglycerol O-acyltransferase - - - status 3 annotated CDS 5 6 +Rv3089 fadD13 3455761 3457272 1 long chain-fatty-acid--CoA ligase FadD13 - - - status 3 annotated CDS 5 6 +Rv3090 - 3458211 3459098 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3091 - 3459116 3460807 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3092c - 3461734 3460814 -2 integral membrane protein - - - status 3 annotated CDS 5 6 +Rv3093c - 3462764 3461760 -3 oxidoreductase - - - status 3 annotated CDS 5 6 +Rv3094c - 3463891 3462761 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3095 - 3463973 3464449 2 HTH-type transcriptional regulator - - - status 3 annotated CDS 5 6 +Rv3096 - 3464547 3465686 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3097c lipY 3467091 3465778 -1 triacylglycerol lipase Lip - - - status 3 annotated CDS 5 6 +Rv3098A - 3467606 3467926 2 PemK-like protein - - - status 3 annotated CDS 5 6 +Rv3098c - 3467662 3467210 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3099c - 3469264 3468413 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3100c smpB 3469783 3469301 -2 SsrA-binding protein - - - status 3 annotated CDS 5 6 +Rv3101c ftsX 3470679 3469786 -1 cell division protein FtsX - - - status 3 annotated CDS 5 6 +Rv3102c ftsE 3471369 3470680 -1 cell division ATP-binding protein FtsE - - - status 3 annotated CDS 5 6 +Rv3103c - 3471850 3471413 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3104c - 3472778 3471852 -3 transmembrane protein - - - status 3 annotated CDS 5 6 +Rv3105c prfB 3473904 3472768 -1 peptide chain release factor PrfB - - - status 3 annotated CDS 5 6 +Rv3106 fprA 3474007 3475377 1 NADPH-ferredoxin reductase FprA - - - status 3 annotated CDS 5 6 +Rv3107c agpS 3476961 3475378 -1 alkyldihydroxyacetonephosphate synthase - - - status 3 annotated CDS 5 6 +Rv3108 - 3477060 3477500 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3109 moaA1 3477649 3478728 1 cyclic pyranopterin monophosphate synthase - - - status 3 annotated CDS 5 6 +Rv3110 moaB1 3478779 3479174 3 pterin-4-alpha-carbinolamine dehydratase - - - status 3 annotated CDS 5 6 +Rv3111 moaC1 3479171 3479683 2 cyclic pyranopterin monophosphate synthase accessory protein - - - status 3 annotated CDS 5 6 +Rv3112 moaD1 3479700 3479951 3 molybdenum cofactor biosynthesis protein MoaD - - - status 3 annotated CDS 5 6 +Rv3113 - 3480074 3480742 2 phosphatase - - - status 3 annotated CDS 5 6 +Rv3114 - 3480759 3481289 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3115 - 3481451 3482698 2 transposase - - - status 3 annotated CDS 5 6 +Rv3116 moeB2 3482776 3483945 1 molybdenum cofactor biosynthesis protein MoeB - - - status 3 annotated CDS 5 6 +Rv3117 cysA3 3483974 3484807 2 thiosulfate sulfurtransferase - - - status 3 annotated CDS 5 6 +Rv3118 - 3484809 3485111 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3119 moaE1 3485132 3485575 2 molybdopterin synthase catalytic subunit 1 - - - status 3 annotated CDS 5 6 +Rv3120 - 3485572 3486174 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3121 cyp141 3486509 3487711 2 cytochrome P450 Cyp141 - - - status 3 annotated CDS 5 6 +Rv3122 - 3488089 3488559 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3123 - 3488569 3489063 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3124 moaR1 3489506 3490375 2 transcriptional regulator MoaR - - - status 3 annotated CDS 5 6 +Rv3125c PPE49 3491651 3490476 -3 PPE family protein PPE49 - - - status 3 annotated CDS 5 6 +Rv3126c - 3492122 3491808 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3127 - 3492147 3493181 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3130c tgs1 3496366 3494975 -2 diacyglycerol O-acyltransferase - - - status 3 annotated CDS 5 6 +Rv3131 - 3496551 3497549 3 NAD(P)H nitroreductase - - - status 3 annotated CDS 5 6 +Rv3132c devS 3499265 3497529 -3 two component sensor histidine kinase DevS - - - status 3 annotated CDS 5 6 +Rv3133c devR 3499915 3499262 -2 two component transcriptional regulator DevR - - - status 3 annotated CDS 5 6 +Rv3134c - 3500749 3499943 -2 universal stress protein - - - status 3 annotated CDS 5 6 +Rv3135 PPE50 3501334 3501732 1 PPE family protein PPE50 - - - status 3 annotated CDS 5 6 +Rv3136 PPE51 3501794 3502936 2 PPE family protein PPE51 - - - status 3 annotated CDS 5 6 +Rv3136A - 3503277 3502945 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3137 - 3503393 3504175 2 histidinol-phosphatase - - - status 3 annotated CDS 5 6 +Rv3138 pflA 3504195 3505283 3 pyruvate formate lyase activating protein PflA - - - status 3 annotated CDS 5 6 +Rv3139 fadE24 3505363 3506769 1 acyl-CoA dehydrogenase FadE24 - - - status 3 annotated CDS 5 6 +Rv3140 fadE23 3506790 3507995 3 acyl-CoA dehydrogenase FadE23 - - - status 3 annotated CDS 5 6 +Rv3141 fadB4 3508095 3509066 3 NADPH quinone oxidoreductase FadB - - - status 3 annotated CDS 5 6 +Rv3142c - 3509546 3509118 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3143 - 3509654 3510055 2 response regulator - - - status 3 annotated CDS 5 6 +Rv3144c PPE52 3511317 3510088 -1 PPE family protein PPE52 - - - status 3 annotated CDS 5 6 +Rv3145 nuoA 3511682 3512068 2 NADH-quinone oxidoreductase subunit A - - - status 3 annotated CDS 5 6 +Rv3146 nuoB 3512077 3512631 1 NADH-quinone oxidoreductase subunit B - - - status 3 annotated CDS 5 6 +Rv3147 nuoC 3512628 3513338 3 NADH-quinone oxidoreductase subunit C - - - status 3 annotated CDS 5 6 +Rv3148 nuoD 3513338 3514660 2 NADH-quinone oxidoreductase subunit D - - - status 3 annotated CDS 5 6 +Rv3149 nuoE 3514657 3515415 1 NADH-quinone oxidoreductase subunit E - - - status 3 annotated CDS 5 6 +Rv3150 nuoF 3515412 3516749 3 NADH-quinone oxidoreductase subunit F - - - status 3 annotated CDS 5 6 +Rv3151 nuoG 3516746 3519166 2 NADH-quinone oxidoreductase subunit G - - - status 3 annotated CDS 5 6 +Rv3152 nuoH 3519282 3520514 3 NADH-quinone oxidoreductase subunit H - - - status 3 annotated CDS 5 6 +Rv3153 nuoI 3520507 3521142 1 NADH-quinone oxidoreductase subunit I - - - status 3 annotated CDS 5 6 +Rv3154 nuoJ 3521139 3521927 3 NADH-quinone oxidoreductase subunit J - - - status 3 annotated CDS 5 6 +Rv3155 nuoK 3521924 3522223 2 NADH-quinone oxidoreductase subunit K - - - status 3 annotated CDS 5 6 +Rv3156 nuoL 3522234 3524135 3 NADH-quinone oxidoreductase subunit L - - - status 3 annotated CDS 5 6 +Rv3157 nuoM 3524132 3525793 2 NADH-quinone oxidoreductase subunit M - - - status 3 annotated CDS 5 6 +Rv3158 nuoN 3525790 3527385 1 NADH-quinone oxidoreductase subunit N - - - status 3 annotated CDS 5 6 +Rv3159c PPE53 3529163 3527391 -3 PPE family protein PPE53 - - - status 3 annotated CDS 5 6 +Rv3160c - 3529979 3529338 -3 TetR family transcriptional regulator - - - status 3 annotated CDS 5 6 +Rv3161c - 3531138 3529990 -1 dioxygenase - - - status 3 annotated CDS 5 6 +Rv3162c - 3531645 3531208 -1 integral membrane protein - - - status 3 annotated CDS 5 6 +Rv3163c - 3532913 3531642 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3164c moxR3 3533905 3532943 -2 methanol dehydrogenase transcriptional regulator MoxR - - - status 3 annotated CDS 5 6 +Rv3165c - 3534395 3533913 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3166c - 3535351 3534392 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3167c - 3536057 3535431 -3 TetR family transcriptional regulator - - - status 3 annotated CDS 5 6 +Rv3168 - 3536102 3537238 2 aminoglycoside phosphotransferase - - - status 3 annotated CDS 5 6 +Rv3169 - 3537238 3538362 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3170 aofH 3538505 3539851 2 flavin-containing monoamine oxidase - - - status 3 annotated CDS 5 6 +Rv3171c hpx 3540745 3539846 -2 non-heme haloperoxidase Hpx - - - status 3 annotated CDS 5 6 +Rv3172c - 3541364 3540882 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3173c - 3542045 3541443 -3 TetR/Acr family transcriptional regulator - - - status 3 annotated CDS 5 6 +Rv3174 - 3542138 3542845 2 short-chain dehydrogenase/reductase - - - status 3 annotated CDS 5 6 +Rv3175 - 3542860 3544347 1 amidase - - - status 3 annotated CDS 5 6 +Rv3176c mesT 3545300 3544344 -3 epoxide hydrolase MesT - - - status 3 annotated CDS 5 6 +Rv3177 - 3545447 3546307 2 peroxidase - - - status 3 annotated CDS 5 6 +Rv3178 - 3546438 3546797 3 nitroreductase - - - status 3 annotated CDS 5 6 +Rv3178a - 3547037 3547330 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3179 - 3547618 3548907 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3180c - 3549688 3549254 -2 ribonuclease VapC45 - - - status 3 annotated CDS 5 6 +Rv3181c - 3550143 3549691 -1 antitoxin VapB45 - - - status 3 annotated CDS 5 6 +Rv3182 - 3550374 3550718 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3183 - 3550715 3551044 2 transcriptional regulator - - - status 3 annotated CDS 5 6 +Rv3188 - 3554298 3554645 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3189 - 3554642 3555262 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3190A - 3556855 3557064 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3190c - 3556687 3555422 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3191c - 3558345 3557311 -1 transposase - - - status 3 annotated CDS 5 6 +Rv3192 - 3559563 3560024 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3193c - 3563172 3560194 -1 transmembrane protein - - - status 3 annotated CDS 5 6 +Rv3194c - 3564286 3563264 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3195 - 3564364 3565782 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3196 - 3565788 3566687 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3196A - 3566896 3566696 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3197 - 3567024 3568367 3 ABC transporter ATP-binding protein - - - status 3 annotated CDS 5 6 +Rv3197A whiB7 3568679 3568401 -3 transcriptional regulator WhiB7 - - - status 3 annotated CDS 5 6 +Rv3198A - 3571335 3571589 3 glutaredoxin protein - - - status 3 annotated CDS 5 6 +Rv3198c uvrD2 3571211 3569109 -3 ATP-dependent DNA helicase UvrD - - - status 3 annotated CDS 5 6 +Rv3199c nudC 3572543 3571602 -3 NADH pyrophosphatase - - - status 3 annotated CDS 5 6 +Rv3200c - 3573669 3572602 -1 transmembrane cation transporter - - - status 3 annotated CDS 5 6 +Rv3201c - 3577036 3573731 -2 ATP-dependent DNA helicase - - - status 3 annotated CDS 5 6 +Rv3202a - 3580286 3580495 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3202c - 3580200 3577033 -1 ATP-dependent DNA helicase - - - status 3 annotated CDS 5 6 +Rv3203 lipV 3580638 3581312 3 lipase LipV - - - status 3 annotated CDS 5 6 +Rv3204 - 3581315 3581620 2 DNA-methyltransferase - - - status 3 annotated CDS 5 6 +Rv3205c - 3582505 3581627 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3206c moeB1 3583710 3582532 -1 adenylyltransferase/sulfurtransferase - - - status 3 annotated CDS 5 6 +Rv3207c - 3584658 3583801 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3208 - 3585004 3585690 1 TetR family transcriptional regulator - - - status 3 annotated CDS 5 6 +Rv3208A TB9.4 3585949 3585677 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3209 - 3586274 3586834 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3210c - 3587539 3586844 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3211 rhlE 3587798 3589381 2 ATP-dependent RNA helicase RhlE - - - status 3 annotated CDS 5 6 +Rv3212 - 3589394 3590617 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3213c - 3591492 3590692 -1 SOJ/ParA-like protein - - - status 3 annotated CDS 5 6 +Rv3214 gpm2 3591646 3592257 1 phosphoglycerate mutase - - - status 3 annotated CDS 5 6 +Rv3215 entC 3592254 3593372 3 isochorismate synthase - - - status 3 annotated CDS 5 6 +Rv3217c - 3594235 3593804 -2 integral membrane protein - - - status 3 annotated CDS 5 6 +Rv3218 - 3594468 3595433 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3219 whiB1 3595713 3595967 3 transcriptional regulator WhiB1 - - - status 3 annotated CDS 5 6 +Rv3220c - 3597534 3596029 -1 two component sensor kinase - - - status 3 annotated CDS 5 6 +Rv3221A rshA 3598356 3598051 -1 anti-sigma factor RshA - - - status 3 annotated CDS 5 6 +Rv3221c TB7.3 3597766 3597551 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3222c - 3598904 3598353 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3223c sigH 3599551 3598901 -2 ECF RNA polymerase sigma factor SigH - - - status 3 annotated CDS 5 6 +Rv3224 - 3599851 3600699 1 iron-regulated short-chain dehydrogenase/reductase - - - status 3 annotated CDS 5 6 +Rv3225c - 3602440 3601016 -2 GCN5-like N-acetyltransferase - - - status 3 annotated CDS 5 6 +Rv3226c - 3603322 3602564 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3227 aroA 3603377 3604729 2 3-phosphoshikimate 1-carboxyvinyltransferase - - - status 3 annotated CDS 5 6 +Rv3228 - 3604726 3605718 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3229c desA3 3607034 3605751 -3 stearoyl-CoA 9-desaturase - - - status 3 annotated CDS 5 6 +Rv3230c - 3608254 3607112 -2 stearoyl-CoA 9-desaturase electron transfer protein - - - status 3 annotated CDS 5 6 +Rv3231c - 3608873 3608364 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3232c ppk2 3609757 3608870 -2 polyphosphate kinase - - - status 3 annotated CDS 5 6 +Rv3234c tgs3 3611189 3610374 -3 diacyglycerol O-acyltransferase - - - status 3 annotated CDS 5 6 +Rv3235 - 3611300 3611941 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3236c - 3613116 3611959 -1 integral membrane transport protein - - - status 3 annotated CDS 5 6 +Rv3237c - 3613603 3613121 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3238c - 3614398 3613664 -2 integral membrane protein - - - status 3 annotated CDS 5 6 +Rv3239c - 3617603 3614457 -3 transmembrane transport protein - - - status 3 annotated CDS 5 6 +Rv3240c secA1 3620531 3617682 -3 protein translocase subunit SecA - - - status 3 annotated CDS 5 6 +Rv3241c - 3621254 3620610 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3242c - 3622211 3621570 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3243c - 3623091 3622249 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3244c lpqB 3624910 3623159 -2 lipoprotein LpqB - - - status 3 annotated CDS 5 6 +Rv3245c mtrB 3626613 3624910 -1 two component sensory histidine kinase MtrB - - - status 3 annotated CDS 5 6 +Rv3246c mtrA 3627349 3626663 -2 two component DNA-binding response regulator MtrA - - - status 3 annotated CDS 5 6 +Rv3247c tmk 3628063 3627419 -2 thymidylate kinase - - - status 3 annotated CDS 5 6 +Rv3248c sahH 3629647 3628160 -2 adenosylhomocysteinase - - - status 3 annotated CDS 5 6 +Rv3249c - 3630387 3629752 -1 TetR family transcriptional regulator - - - status 3 annotated CDS 5 6 +Rv3250c rubB 3630566 3630384 -3 rubredoxin RubB - - - status 3 annotated CDS 5 6 +Rv3251c rubA 3630738 3630571 -1 rubredoxin RubA - - - status 3 annotated CDS 5 6 +Rv3252c alkB 3631988 3630738 -3 transmembrane alkane 1-monooxygenase AlkB - - - status 3 annotated CDS 5 6 +Rv3253c - 3633584 3632097 -3 cationic amino acid transport integral membrane protein - - - status 3 annotated CDS 5 6 +Rv3254 - 3633675 3635063 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3255c manA 3636267 3635041 -1 mannose-6-phosphate isomerase - - - status 3 annotated CDS 5 6 +Rv3256c - 3637315 3636275 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3257c pmmA 3638709 3637312 -1 phosphomannomutase PmmA - - - status 3 annotated CDS 5 6 +Rv3258c - 3639302 3638811 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3259 - 3639425 3639844 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3260c whiB2 3640141 3639872 -2 transcriptional regulator WhiB2 - - - status 3 annotated CDS 5 6 +Rv3261 fbiA 3640543 3641538 1 2-phospho-L-lactate transferase - - - status 3 annotated CDS 5 6 +Rv3262 fbiB 3641535 3642881 3 coenzyme F420:L-glutamate ligase - - - status 3 annotated CDS 5 6 +Rv3263 - 3643177 3644838 1 DNA methylase - - - status 3 annotated CDS 5 6 +Rv3264c manB 3645977 3644898 -3 D-alpha-D-mannose-1-phosphate guanylyltransferase ManB - - - status 3 annotated CDS 5 6 +Rv3265c wbbL1 3646884 3645979 -1 N-acetylglucosaminyl-diphospho-decaprenolL-rhamnosyltransferase - - - status 3 annotated CDS 5 6 +Rv3266c rmlD 3647809 3646895 -2 dTDP-4-dehydrorhamnose reductase - - - status 3 annotated CDS 5 6 +Rv3267 - 3647885 3649381 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3268 - 3649420 3650109 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3269 - 3650234 3650515 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3270 ctpC 3650526 3652682 3 manganese/zinc-exporting P-type ATPase - - - status 3 annotated CDS 5 6 +Rv3271c - 3653347 3652679 -2 integral membrane protein - - - status 3 annotated CDS 5 6 +Rv3272 - 3653448 3654632 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3273 - 3654637 3656931 1 transmembrane carbonic anhydrase - - - status 3 annotated CDS 5 6 +Rv3274c fadE25 3658089 3656920 -1 acyl-CoA dehydrogenase FadE25 - - - status 3 annotated CDS 5 6 +Rv3275c purE 3658638 3658114 -1 N5-carboxyaminoimidazole ribonucleotide mutase - - - status 3 annotated CDS 5 6 +Rv3276c purK 3659924 3658635 -3 N5-carboxyaminoimidazole ribonucleotide synthase - - - status 3 annotated CDS 5 6 +Rv3277 - 3659878 3660696 1 transmembrane protein - - - status 3 annotated CDS 5 6 +Rv3278c - 3661169 3660651 -3 transmembrane protein - - - status 3 annotated CDS 5 6 +Rv3279c birA 3662012 3661212 -3 bifunctional biotin operon repressor/biotin--[acetyl-CoA-carboxylase] synthetase - - - status 3 annotated CDS 5 6 +Rv3280 accD5 3662062 3663708 1 propionyl-CoA carboxylase subunit beta - - - status 3 annotated CDS 5 6 +Rv3281 accE5 3663689 3664222 2 bifunctional protein acetyl-/propionyl-CoAcarboxylase subunit epsilon AccE - - - status 3 annotated CDS 5 6 +Rv3282 - 3664219 3664887 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3283 sseA 3664928 3665821 2 thiosulfate sulfurtransferase SseA - - - status 3 annotated CDS 5 6 +Rv3284 - 3665818 3666249 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3285 accA3 3666357 3668159 3 bifunctional protein acetyl-/propionyl-CoA carboxylase subunit alpha AccA - - - status 3 annotated CDS 5 6 +Rv3286c sigF 3668954 3668169 -3 RNA polymerase sigma factor SigF - - - status 3 annotated CDS 5 6 +Rv3287c rsbW 3669388 3668951 -2 anti-sigma factor RsbW - - - status 3 annotated CDS 5 6 +Rv3288c usfY 3669999 3669586 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3289c - 3670411 3670034 -2 transmembrane protein - - - status 3 annotated CDS 5 6 +Rv3290c lat 3671794 3670445 -2 L-lysine-epsilon aminotransferase - - - status 3 annotated CDS 5 6 +Rv3291c lrpA 3672297 3671845 -1 transcriptional regulator LrpA - - - status 3 annotated CDS 5 6 +Rv3292 - 3672328 3673575 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3293 pcd 3673602 3675086 3 piperideine-6-carboxylic acid dehydrogenase - - - status 3 annotated CDS 5 6 +Rv3294c - 3675995 3675186 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3295 - 3676066 3676731 1 TetR family transcriptional regulator - - - status 3 annotated CDS 5 6 +Rv3296 lhr 3676775 3681316 2 ATP-dependent helicase - - - status 3 annotated CDS 5 6 +Rv3297 nei 3681320 3682087 2 endonuclease VIII - - - status 3 annotated CDS 5 6 +Rv3298c lpqC 3683024 3682110 -3 esterase LpqC - - - status 3 annotated CDS 5 6 +Rv3299c atsB 3685963 3683051 -2 arylsulfatase AtsB - - - status 3 annotated CDS 5 6 +Rv3300c - 3686900 3685983 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3301c phoY1 3687577 3686912 -2 phosphate transport system transcriptional regulator PhoY - - - status 3 annotated CDS 5 6 +Rv3302c glpD2 3689442 3687685 -1 glycerol-3-phosphate dehydrogenase - - - status 3 annotated CDS 5 6 +Rv3303c lpdA 3690938 3689457 -3 NAD(P)H quinone reductase LpdA - - - status 3 annotated CDS 5 6 +Rv3304 - 3691141 3691620 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3305c amiA1 3692808 3691639 -1 N-acyl-L-amino acid amidohydrolase AmiA - - - status 3 annotated CDS 5 6 +Rv3306c amiB1 3693989 3692805 -3 amidase AmiB - - - status 3 annotated CDS 5 6 +Rv3307 deoD 3694054 3694860 1 purine nucleoside phosphorylase - - - status 3 annotated CDS 5 6 +Rv3308 pmmB 3694864 3696468 1 phosphomannomutase PmmB - - - status 3 annotated CDS 5 6 +Rv3309c upp 3697093 3696470 -2 uracil phosphoribosyltransferase - - - status 3 annotated CDS 5 6 +Rv3310 sapM 3697198 3698097 1 acid phosphatase - - - status 3 annotated CDS 5 6 +Rv3311 - 3698121 3699383 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3312A - 3701016 3700705 -1 pilin - - - status 3 annotated CDS 5 6 +Rv3312b - 3700526 3700356 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3312c - 3700330 3699404 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3313c add 3702184 3701087 -2 adenosine deaminase - - - status 3 annotated CDS 5 6 +Rv3314c deoA 3703467 3702184 -1 thymidine phosphorylase - - - status 3 annotated CDS 5 6 +Rv3315c cdd 3703865 3703464 -3 cytidine deaminase - - - status 3 annotated CDS 5 6 +Rv3316 sdhC 3704102 3704440 2 succinate dehydrogenase cytochrome B-556 subunit - - - status 3 annotated CDS 5 6 +Rv3317 sdhD 3704437 3704871 1 succinate dehydrogenase hydrophobic membrane anchor subunit - - - status 3 annotated CDS 5 6 +Rv3318 sdhA 3705000 3706772 3 succinate dehydrogenase flavoprotein subunit - - - status 3 annotated CDS 5 6 +Rv3319 sdhB 3706772 3707563 2 succinate dehydrogenase iron-sulphur protein subunit - - - status 3 annotated CDS 5 6 +Rv3320c vapC44 3708070 3707642 -2 ribonuclease VapC44 - - - status 3 annotated CDS 5 6 +Rv3321c vapB44 3708316 3708074 -2 antitoxin VapB44 - - - status 3 annotated CDS 5 6 +Rv3322c - 3709052 3708438 -3 methyltransferase - - - status 3 annotated CDS 5 6 +Rv3323c moaX 3709714 3709049 -2 MoaD-MoaE fusion protein MoaX - - - status 3 annotated CDS 5 6 +Rv3324c moaC3 3710248 3709715 -2 cyclic pyranopterin monophosphate synthase accessory protein - - - status 3 annotated CDS 5 6 +Rv3327 - 3711749 3713461 2 transposase fusion protein - - - status 3 annotated CDS 5 6 +Rv3328c sigJ 3714332 3713394 -3 ECF RNA polymerase sigma factor SigJ - - - status 3 annotated CDS 5 6 +Rv3329 - 3714392 3715708 2 aminotransferase - - - status 3 annotated CDS 5 6 +Rv3330 dacB1 3715777 3716994 1 penicillin-binding protein DacB - - - status 3 annotated CDS 5 6 +Rv3331 sugI 3717090 3718598 3 sugar-transport integral membrane protein SugI - - - status 3 annotated CDS 5 6 +Rv3332 nagA 3718595 3719746 2 N-acetylglucosamine-6-phosphate deacetylase NagA - - - status 3 annotated CDS 5 6 +Rv3333c - 3720782 3719937 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3334 - 3721257 3721697 3 MerR family transcriptional regulator - - - status 3 annotated CDS 5 6 +Rv3335c - 3722600 3721731 -3 integral membrane protein - - - status 3 annotated CDS 5 6 +Rv3336c trpS 3723631 3722621 -2 tryptophan--tRNA ligase - - - status 3 annotated CDS 5 6 +Rv3339c icd1 3725844 3724615 -1 isocitrate dehydrogenase - - - status 3 annotated CDS 5 6 +Rv3340 metC 3726127 3727476 1 O-acetylhomoserine sulfhydrylase - - - status 3 annotated CDS 5 6 +Rv3341 metA 3727488 3728627 3 homoserine O-acetyltransferase - - - status 3 annotated CDS 5 6 +Rv3342 - 3728624 3729355 2 methyltransferase - - - status 3 annotated CDS 5 6 +Rv3343c PPE54 3736935 3729364 -1 PPE family protein PPE54 - - - status 3 annotated CDS 5 6 +Rv3344c PE_PGRS49 3738000 3736984 -1 PE-PGRS family protein PE_PGRS49 - - - status 3 annotated CDS 5 6 +Rv3345c PE_PGRS50 3742774 3738158 -2 PE-PGRS family protein PE_PGRS50 - - - status 3 annotated CDS 5 6 +Rv3346c - 3743455 3743198 -2 transmembrane protein - - - status 3 annotated CDS 5 6 +Rv3347c PPE55 3753184 3743711 -2 PPE family protein PPE55 - - - status 3 annotated CDS 5 6 +Rv3348 - 3753765 3754256 3 transposase - - - status 3 annotated CDS 5 6 +Rv3349c - 3755237 3754293 -3 transposase - - - status 3 annotated CDS 5 6 +Rv3350c PPE56 3767102 3755952 -3 PPE family protein PPE56 - - - status 3 annotated CDS 5 6 +Rv3351c - 3768140 3767346 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3352c - 3768593 3768222 -3 oxidoreductase - - - status 3 annotated CDS 5 6 +Rv3353c - 3768996 3768736 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3354 - 3769111 3769500 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3355c - 3769807 3769514 -2 integral membrane protein - - - status 3 annotated CDS 5 6 +Rv3356c folD 3770649 3769804 -1 bifunctional methylenetetrahydrofolate dehydrogenase/methenyltetrahydrofolate cyclohydrolase - - - status 3 annotated CDS 5 6 +Rv3357 relJ 3770773 3771048 1 antitoxin RelJ - - - status 3 annotated CDS 5 6 +Rv3358 relK 3771045 3771302 3 toxin RelK - - - status 3 annotated CDS 5 6 +Rv3359 - 3771344 3772534 2 oxidoreductase - - - status 3 annotated CDS 5 6 +Rv3360 - 3772651 3773019 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3361c - 3773567 3773016 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3362c - 3774155 3773574 -3 ATP/GTP-binding protein - - - status 3 annotated CDS 5 6 +Rv3363c - 3774504 3774136 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3364c - 3774874 3774482 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3365c - 3777501 3774871 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3366 spoU 3777737 3778201 2 tRNA/rRNA methylase SpoU - - - status 3 annotated CDS 5 6 +Rv3367 PE_PGRS51 3778568 3780334 2 PE-PGRS family protein PE_PGRS51 - - - status 3 annotated CDS 5 6 +Rv3368c - 3780979 3780335 -2 oxidoreductase - - - status 3 annotated CDS 5 6 +Rv3369 - 3780978 3781412 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3370c dnaE2 3784740 3781501 -1 error-prone DNA polymerase - - - status 3 annotated CDS 5 6 +Rv3371 - 3784932 3786272 3 diacyglycerol O-acyltransferase - - - status 3 annotated CDS 5 6 +Rv3372 otsB2 3786314 3787489 2 trehalose 6-phosphate phosphatase - - - status 3 annotated CDS 5 6 +Rv3373 echA18 3787726 3788367 1 enoyl-CoA hydratase - - - status 3 annotated CDS 5 6 +Rv3375 amiD 3788621 3790048 2 amidase - - - status 3 annotated CDS 5 6 +Rv3376 - 3790156 3790809 1 phosphatase - - - status 3 annotated CDS 5 6 +Rv3377c - 3792353 3790848 -3 type B diterpene cyclase - - - status 3 annotated CDS 5 6 +Rv3378c - 3793248 3792358 -1 diterpene synthase - - - status 3 annotated CDS 5 6 +Rv3379c dxs2 3794867 3793257 -3 1-deoxy-D-xylulose 5-phosphate synthase - - - status 3 annotated CDS 5 6 +Rv3382c - 3797437 3796448 -2 4-hydroxy-3-methylbut-2-enyl diphosphate reductase - - - status 3 annotated CDS 5 6 +Rv3383c idsB 3798489 3797437 -1 polyprenyl synthetase IdsB - - - status 3 annotated CDS 5 6 +Rv3384c vapC46 3799635 3799243 -1 ribonuclease VapC46 - - - status 3 annotated CDS 5 6 +Rv3385c vapB46 3799943 3799635 -3 antitoxin VapB46 - - - status 3 annotated CDS 5 6 +Rv3386 - 3800092 3800796 1 transposase - - - status 3 annotated CDS 5 6 +Rv3387 - 3800786 3801463 2 transposase - - - status 3 annotated CDS 5 6 +Rv3388 PE_PGRS52 3801653 3803848 2 PE-PGRS family protein PE_PGRS52 - - - status 3 annotated CDS 5 6 +Rv3389c htdY 3804791 3803919 -3 3-hydroxyacyl-thioester dehydratase HtdY - - - status 3 annotated CDS 5 6 +Rv3390 lpqD 3804865 3805575 1 lipoprotein LpqD - - - status 3 annotated CDS 5 6 +Rv3391 acrA1 3805621 3807573 1 acyl-CoA-reductase AcrA - - - status 3 annotated CDS 5 6 +Rv3392c cmaA1 3808437 3807574 -1 cyclopropane mycolic acid synthase CmaA - - - status 3 annotated CDS 5 6 +Rv3393 iunH 3808461 3809387 3 nucleoside hydrolase - - - status 3 annotated CDS 5 6 +Rv3394c - 3811025 3809442 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3395A - 3811719 3812345 3 membrane protein - - - status 3 annotated CDS 5 6 +Rv3395c - 3811636 3811022 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3396c guaA 3814078 3812501 -2 GMP synthase - - - status 3 annotated CDS 5 6 +Rv3397c phyA 3814998 3814090 -1 phytoene synthase - - - status 3 annotated CDS 5 6 +Rv3398c idsA1 3816106 3815027 -2 multifunctional dimethylallyltransferase/geranyltranstransferase/farnesylt ranstransferase - - - status 3 annotated CDS 5 6 +Rv3399 - 3816129 3817175 3 S-adenosylmethionine-dependentmethyltransferase - - - status 3 annotated CDS 5 6 +Rv3400 - 3817239 3818027 3 hydrolase - - - status 3 annotated CDS 5 6 +Rv3401 - 3818042 3820402 2 glycosyl hydrolase - - - status 3 annotated CDS 5 6 +Rv3402c - 3821891 3820653 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3403c - 3823863 3822262 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3404c - 3824584 3823880 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3405c - 3825268 3824702 -2 HTH-type transcriptional regulator - - - status 3 annotated CDS 5 6 +Rv3406 - 3825330 3826217 3 dioxygenase - - - status 3 annotated CDS 5 6 +Rv3407 vapB47 3826252 3826551 1 antitoxin VapB47 - - - status 3 annotated CDS 5 6 +Rv3408 vapC47 3826548 3826958 3 ribonuclease VapC47 - - - status 3 annotated CDS 5 6 +Rv3409c choD 3828727 3826991 -2 cholesterol oxidase - - - status 3 annotated CDS 5 6 +Rv3410c guaB3 3829910 3828783 -3 oxidoreductase - - - status 3 annotated CDS 5 6 +Rv3411c guaB2 3831519 3829930 -1 inosine-5'-monophosphate dehydrogenase - - - status 3 annotated CDS 5 6 +Rv3412 - 3831726 3832136 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3413c - 3833045 3832146 -3 anti-sigma-D factor RsdA - - - status 3 annotated CDS 5 6 +Rv3414c sigD 3833676 3833038 -1 ECF RNA polymerase sigma factor SigD - - - status 3 annotated CDS 5 6 +Rv3415c - 3834521 3833694 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3416 whiB3 3834892 3835200 1 redox-responsive transcriptional regulator WhiB3 - - - status 3 annotated CDS 5 6 +Rv3417c groEL1 3836891 3835272 -3 chaperonin GroEL - - - status 3 annotated CDS 5 6 +Rv3418c groES 3837288 3836986 -1 chaperonin GroES - - - status 3 annotated CDS 5 6 +Rv3419c gcp 3838589 3837555 -3 O-sialoglycoprotein endopeptidase - - - status 3 annotated CDS 5 6 +Rv3420c rimI 3839062 3838586 -2 ribosomal-protein-alanine acetyltransferase RimI - - - status 3 annotated CDS 5 6 +Rv3421c - 3839694 3839059 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3422c - 3840197 3839691 -3 tRNA threonylcarbamoyladenosine biosynthesis protein - - - status 3 annotated CDS 5 6 +Rv3423c alr 3841420 3840194 -2 alanine racemase - - - status 3 annotated CDS 5 6 +Rv3424c - 3842076 3841714 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3425 PPE57 3842239 3842769 1 PPE family protein PPE57 - - - status 3 annotated CDS 5 6 +Rv3426 PPE58 3843036 3843734 3 PPE family protein PPE58 - - - status 3 annotated CDS 5 6 +Rv3427c - 3844640 3843885 -3 transposase - - - status 3 annotated CDS 5 6 +Rv3428c - 3845970 3844738 -1 transposase - - - status 3 annotated CDS 5 6 +Rv3429 PPE59 3847165 3847701 1 PPE family protein PPE59 - - - status 3 annotated CDS 5 6 +Rv3430a - 3848999 3848844 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3430c - 3848805 3847642 -1 transposase - - - status 3 annotated CDS 5 6 +Rv3432c gadB 3851754 3850372 -1 glutamate decarboxylase GadB - - - status 3 annotated CDS 5 6 +Rv3433c - 3853213 3851792 -2 bifunctional ADP-dependent (S)-NAD(P)H-hydrate dehydratase/NAD(P)H-hydrate epimerase - - - status 3 annotated CDS 5 6 +Rv3434c - 3853928 3853215 -3 transmembrane protein - - - status 3 annotated CDS 5 6 +Rv3435c - 3854793 3853939 -1 transmembrane protein - - - status 3 annotated CDS 5 6 +Rv3436c glmS 3856889 3855015 -3 glucosamine--fructose-6-phosphate aminotransferase - - - status 3 annotated CDS 5 6 +Rv3437 - 3856911 3857387 3 transmembrane protein - - - status 3 annotated CDS 5 6 +Rv3438 - 3857397 3858239 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3439c - 3859662 3858259 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3440c - 3859976 3859665 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3441c mrsA 3861370 3860024 -2 phosphoglucosamine mutase - - - status 3 annotated CDS 5 6 +Rv3442c rpsI 3861950 3861495 -3 30S ribosomal protein S9 - - - status 3 annotated CDS 5 6 +Rv3443c rplM 3862390 3861947 -2 50S ribosomal protein L13 - - - status 3 annotated CDS 5 6 +Rv3444c esxT 3862926 3862624 -1 ESAT-6 like protein EsxT - - - status 3 annotated CDS 5 6 +Rv3445c esxU 3863264 3862947 -3 ESAT-6 like protein EsxU - - - status 3 annotated CDS 5 6 +Rv3446c - 3864531 3863317 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3447c eccC4 3868238 3864528 -3 ESX-4 secretion system protein EccC4 - - - status 3 annotated CDS 5 6 +Rv3448 eccD4 3868352 3869755 2 ESX-4 secretion system protein EccD4 - - - status 3 annotated CDS 5 6 +Rv3449 mycP4 3869752 3871119 1 membrane-anchored mycosin - - - status 3 annotated CDS 5 6 +Rv3450c eccB4 3872496 3871084 -1 ESX-4 secretion system protein EccB4 - - - status 3 annotated CDS 5 6 +Rv3451 cut3 3872617 3873405 1 cutinase - - - status 3 annotated CDS 5 6 +Rv3452 cut4 3873452 3874132 2 cutinase - - - status 3 annotated CDS 5 6 +Rv3455c truA 3876822 3876052 -1 tRNA pseudouridine synthase A - - - status 3 annotated CDS 5 6 +Rv3456c rplQ 3877432 3876890 -2 50S ribosomal protein L17 - - - status 3 annotated CDS 5 6 +Rv3457c rpoA 3878507 3877464 -3 DNA-directed RNA polymerase subunit alpha - - - status 3 annotated CDS 5 6 +Rv3458c rpsD 3879264 3878659 -1 30S ribosomal protein S4 - - - status 3 annotated CDS 5 6 +Rv3459c rpsK 3879692 3879273 -3 30S ribosomal protein S11 - - - status 3 annotated CDS 5 6 +Rv3460c rpsM 3880070 3879696 -3 30S ribosomal protein S13 - - - status 3 annotated CDS 5 6 +Rv3461c rpmJ 3880399 3880286 -2 50S ribosomal protein L36 - - - status 3 annotated CDS 5 6 +Rv3462c infA 3880653 3880432 -1 translation initiation factor IF-1 - - - status 3 annotated CDS 5 6 +Rv3463 - 3880907 3881764 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3464 rmlB 3881837 3882832 2 dTDP-glucose 4,6-dehydratase - - - status 3 annotated CDS 5 6 +Rv3465 rmlC 3882834 3883442 3 dTDP-4-dehydrorhamnose 3,5-epimerase - - - status 3 annotated CDS 5 6 +Rv3466 - 3883525 3884193 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3467 - 3883964 3884917 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3468c - 3886069 3884975 -2 dTDP-glucose 4,6-dehydratase - - - status 3 annotated CDS 5 6 +Rv3469c mhpE 3887083 3886073 -2 4-hydroxy-2-oxovalerate aldolase MhpE - - - status 3 annotated CDS 5 6 +Rv3470c ilvB2 3888802 3887144 -2 acetolactate synthase large subunit - - - status 3 annotated CDS 5 6 +Rv3471c - 3889341 3888808 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3472 - 3889362 3889868 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3473c bpoA 3890733 3889948 -1 peroxidase BpoA - - - status 3 annotated CDS 5 6 +Rv3477 PE31 3894093 3894389 3 PE family protein PE31 - - - status 3 annotated CDS 5 6 +Rv3478 PPE60 3894426 3895607 3 PE family protein PPE60 - - - status 3 annotated CDS 5 6 +Rv3479 - 3895820 3898885 2 transmembrane protein - - - status 3 annotated CDS 5 6 +Rv3480c - 3900402 3898909 -1 diacyglycerol O-acyltransferase - - - status 3 annotated CDS 5 6 +Rv3481c - 3901182 3900493 -1 integral membrane protein - - - status 3 annotated CDS 5 6 +Rv3482c - 3902106 3901324 -1 membrane protein - - - status 3 annotated CDS 5 6 +Rv3483c - 3902812 3902150 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3484 - 3903078 3904616 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3485c - 3905566 3904622 -2 short-chain type dehydrogenase/reductase - - - status 3 annotated CDS 5 6 +Rv3486 - 3905772 3906221 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3487c lipF 3907007 3906174 -3 carboxylesterase LipF - - - status 3 annotated CDS 5 6 +Rv3488 - 3907667 3907990 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3489 - 3908072 3908236 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3490 otsA 3908236 3909738 1 trehalose-phosphate synthase - - - status 3 annotated CDS 5 6 +Rv3491 - 3909890 3910468 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3492c - 3910947 3910465 -1 Mce associated protein - - - status 3 annotated CDS 5 6 +Rv3493c - 3911675 3910947 -3 Mce associated protein - - - status 3 annotated CDS 5 6 +Rv3494c mce4F 3913369 3911675 -2 Mce family protein Mce4 - - - status 3 annotated CDS 5 6 +Rv3495c lprN 3914534 3913380 -3 Mce family lipoprotein LprN - - - status 3 annotated CDS 5 6 +Rv3496c mce4D 3915886 3914531 -2 Mce family protein Mce4D - - - status 3 annotated CDS 5 6 +Rv3497c mce4C 3916956 3915883 -1 Mce family protein Mce4C - - - status 3 annotated CDS 5 6 +Rv3498c mce4B 3917998 3916946 -2 Mce family protein Mce4B - - - status 3 annotated CDS 5 6 +Rv3499c mce4A 3919200 3917998 -1 Mce family protein Mce4A - - - status 3 annotated CDS 5 6 +Rv3500c yrbE4B 3920062 3919220 -2 integral membrane protein - - - status 3 annotated CDS 5 6 +Rv3501c yrbE4A 3920861 3920097 -3 integral membrane protein - - - status 3 annotated CDS 5 6 +Rv3502c - 3922040 3921087 -3 short-chain type dehydrogenase/reductase - - - status 3 annotated CDS 5 6 +Rv3503c fdxD 3922256 3922065 -3 ferredoxin FdxD - - - status 3 annotated CDS 5 6 +Rv3504 fadE26 3922471 3923673 1 acyl-CoA dehydrogenase FadE26 - - - status 3 annotated CDS 5 6 +Rv3505 fadE27 3923698 3924819 1 acyl-CoA dehydrogenase FadE27 - - - status 3 annotated CDS 5 6 +Rv3506 fadD17 3924890 3926398 2 long-chain-fatty-acid--CoA ligase FadD17 - - - status 3 annotated CDS 5 6 +Rv3507 PE_PGRS53 3926569 3930714 1 PE-PGRS family protein PE_PGRS53 - - - status 3 annotated CDS 5 6 +Rv3508 PE_PGRS54 3931005 3936710 3 PE-PGRS family protein PE_PGRS54 - - - status 3 annotated CDS 5 6 +Rv3509c ilvX 3938424 3936877 -1 acetohydroxyacid synthase large subunit - - - status 3 annotated CDS 5 6 +Rv3510c - 3939257 3938421 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3511 PE_PGRS55 3939617 3941761 2 PE-PGRS family protein PE_PGRS55 - - - status 3 annotated CDS 5 6 +Rv3512 PE_PGRS56 3943812 3944963 3 PE-PGRS family protein PE_PGRS56 - - - status 3 annotated CDS 5 6 +Rv3513c fadD18 3945748 3945092 -2 fatty-acid--CoA ligase FadD18 - - - status 3 annotated CDS 5 6 +Rv3514 PE_PGRS57 3945794 3950263 2 PE-PGRS family protein PE_PGRS57 - - - status 3 annotated CDS 5 6 +Rv3515c fadD19 3952470 3950824 -1 long-chain-fatty-acid--CoA ligase FadD19 - - - status 3 annotated CDS 5 6 +Rv3516 echA19 3952544 3953335 2 enoyl-CoA hydratase EchA19 - - - status 3 annotated CDS 5 6 +Rv3517 - 3953431 3954270 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3518c cyp142 3955521 3954325 -1 cytochrome P450 monooxygenase Cyp142 - - - status 3 annotated CDS 5 6 +Rv3519 - 3955550 3956260 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3520c - 3957368 3956325 -3 coenzyme F420-dependent oxidoreductase - - - status 3 annotated CDS 5 6 +Rv3521 - 3957521 3958432 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3522 ltp4 3958448 3959512 2 lipid transfer protein - - - status 3 annotated CDS 5 6 +Rv3523 ltp3 3959529 3960713 3 lipid carrier protein - - - status 3 annotated CDS 5 6 +Rv3524 - 3960755 3961786 2 membrane protein - - - status 3 annotated CDS 5 6 +Rv3525c - 3962324 3961800 -3 siderophore-binding protein - - - status 3 annotated CDS 5 6 +Rv3526 kshA 3962439 3963599 3 3-ketosteroid-9-alpha-hydroxylase oxygenase subunit - - - status 3 annotated CDS 5 6 +Rv3527 - 3963605 3964054 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3528c - 3965192 3964479 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3529c - 3967038 3965884 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3530c - 3967820 3967038 -3 oxidoreductase - - - status 3 annotated CDS 5 6 +Rv3531c - 3968944 3967817 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3532 PPE61 3969343 3970563 1 PPE family protein PPE61 - - - status 3 annotated CDS 5 6 +Rv3533c PPE62 3972453 3970705 -1 PPE family protein PPE62 - - - status 3 annotated CDS 5 6 +Rv3534c hsaF 3973592 3972552 -3 4-hydroxy-2-oxovalerate aldolase - - - status 3 annotated CDS 5 6 +Rv3535c hsaG 3974500 3973589 -2 acetaldehyde dehydrogenase - - - status 3 annotated CDS 5 6 +Rv3536c hsaE 3975296 3974511 -3 hydratase - - - status 3 annotated CDS 5 6 +Rv3537 kstD 3975369 3977060 3 3-oxosteroid 1-dehydrogenase - - - status 3 annotated CDS 5 6 +Rv3538 - 3977062 3977922 1 dehydrogenase - - - status 3 annotated CDS 5 6 +Rv3539 PPE63 3978059 3979498 2 PPE family protein PPE63 - - - status 3 annotated CDS 5 6 +Rv3540c ltp2 3980659 3979499 -2 lipid transfer protein - - - status 3 annotated CDS 5 6 +Rv3541c - 3981048 3980659 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3542c - 3981980 3981045 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3543c fadE29 3983140 3981977 -2 acyl-CoA dehydrogenase FadE29 - - - status 3 annotated CDS 5 6 +Rv3544c fadE28 3984144 3983125 -1 acyl-CoA dehydrogenase FadE28 - - - status 3 annotated CDS 5 6 +Rv3545c cyp125 3985445 3984144 -3 steroid C26-monooxygenase - - - status 3 annotated CDS 5 6 +Rv3546 fadA5 3985557 3986732 3 acetyl-CoA acetyltransferase FadA - - - status 3 annotated CDS 5 6 +Rv3547 ddn 3986844 3987299 3 deazaflavin-dependent nitroreductase - - - status 3 annotated CDS 5 6 +Rv3548c - 3988296 3987382 -1 short-chain type dehydrogenase/reductase - - - status 3 annotated CDS 5 6 +Rv3549c - 3989098 3988319 -2 short-chain type dehydrogenase/reductase - - - status 3 annotated CDS 5 6 +Rv3550 echA20 3989153 3989896 2 enoyl-CoA hydratase EchA20 - - - status 3 annotated CDS 5 6 +Rv3551 - 3989896 3990774 1 CoA-transferase subunit alpha - - - status 3 annotated CDS 5 6 +Rv3552 - 3990771 3991523 3 CoA-transferase subunit beta - - - status 3 annotated CDS 5 6 +Rv3553 - 3991621 3992688 1 oxidoreductase - - - status 3 annotated CDS 5 6 +Rv3554 fdxB 3992685 3994742 3 electron transfer protein FdxB - - - status 3 annotated CDS 5 6 +Rv3555c - 3995699 3994830 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3556c fadA6 3996964 3995804 -2 acetyl-CoA acetyltransferase FadA - - - status 3 annotated CDS 5 6 +Rv3557c - 3997631 3997029 -3 HTH-type transcriptional regulator KstR2 - - - status 3 annotated CDS 5 6 +Rv3558 PPE64 3997980 3999638 3 PPE family protein PPE64 - - - status 3 annotated CDS 5 6 +Rv3559c - 4000435 3999647 -2 oxidoreductase - - - status 3 annotated CDS 5 6 +Rv3560c fadE30 4001589 4000432 -1 acyl-CoA dehydrogenase FadE30 - - - status 3 annotated CDS 5 6 +Rv3561 fadD3 4001637 4003160 3 fatty-acid--CoA ligase FadD3 - - - status 3 annotated CDS 5 6 +Rv3562 fadE31 4003161 4004294 3 acyl-CoA dehydrogenase FadE31 - - - status 3 annotated CDS 5 6 +Rv3563 fadE32 4004291 4005250 2 acyl-CoA dehydrogenase FadE32 - - - status 3 annotated CDS 5 6 +Rv3564 fadE33 4005247 4006203 1 acyl-CoA dehydrogenase FadE33 - - - status 3 annotated CDS 5 6 +Rv3565 aspB 4006200 4007366 3 aspartate aminotransferase AspB - - - status 3 annotated CDS 5 6 +Rv3566A - 4008433 4008167 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3566c nat 4008182 4007331 -3 arylamine N-acetyltransferase - - - status 3 annotated CDS 5 6 +Rv3567c hsaB 4009282 4008719 -2 flavin-dependent monooxygenase reductase subunit HsaB - - - status 3 annotated CDS 5 6 +Rv3568c hsaC 4010199 4009297 -1 extradiol dioxygenase - - - status 3 annotated CDS 5 6 +Rv3569c hsaD 4011071 4010196 -3 4,5:9,10-diseco-3-hydroxy-5,9, 17-trioxoandrosta-1(10),2-diene-4-oate hydrolase - - - status 3 annotated CDS 5 6 +Rv3570c hsaA 4012270 4011086 -2 flavin-dependent monooxygenase oxygenase subunit HsaA - - - status 3 annotated CDS 5 6 +Rv3571 kshB 4012417 4013493 1 3-ketosteroid-9-alpha-hydroxylase reductase subunit - - - status 3 annotated CDS 5 6 +Rv3572 - 4013511 4014041 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3573c fadE34 4016212 4014077 -2 acyl-CoA dehydrogenase FadE34 - - - status 3 annotated CDS 5 6 +Rv3574 kstR 4016484 4017083 3 HTH-type transcriptional regulator KstR - - - status 3 annotated CDS 5 6 +Rv3575c - 4018168 4017089 -2 LacI family transcriptional regulator - - - status 3 annotated CDS 5 6 +Rv3576 lppH 4018358 4019071 2 lipoprotein LppH - - - status 3 annotated CDS 5 6 +Rv3577 - 4019262 4020128 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3578 arsB2 4020142 4021383 1 arsenic transport integral membrane protein ArsB - - - status 3 annotated CDS 5 6 +Rv3579c - 4022393 4021425 -3 tRNA/rRNA methyltransferase - - - status 3 annotated CDS 5 6 +Rv3580c cysS1 4023803 4022394 -3 cysteine--tRNA ligase - - - status 3 annotated CDS 5 6 +Rv3581c ispF 4024347 4023868 -1 2C-methyl-D-erythritol 2,4-cyclodiphosphate synthase - - - status 3 annotated CDS 5 6 +Rv3582c ispD 4025039 4024344 -3 2-C-methyl-D-erythritol 4-phosphate cytidylyltransferase - - - status 3 annotated CDS 5 6 +Rv3583c - 4025544 4025056 -1 RNA polymerase-binding transcription factor CarD - - - status 3 annotated CDS 5 6 +Rv3584 lpqE 4025830 4026378 1 lipoprotein LpqE - - - status 3 annotated CDS 5 6 +Rv3585 radA 4026444 4027886 3 DNA repair protein RadA - - - status 3 annotated CDS 5 6 +Rv3586 - 4027891 4028967 1 DNA integrity scanning protein DisA - - - status 3 annotated CDS 5 6 +Rv3587c - 4029762 4028968 -1 membrane protein - - - status 3 annotated CDS 5 6 +Rv3588c canB 4030494 4029871 -1 carbonic anhydrase - - - status 3 annotated CDS 5 6 +Rv3589 mutY 4030493 4031407 2 adenine glycosylase - - - status 3 annotated CDS 5 6 +Rv3590c PE_PGRS58 4033158 4031404 -1 PE-PGRS family protein PE_PGRS58 - - - status 3 annotated CDS 5 6 +Rv3591c - 4034042 4033269 -3 hydrolase - - - status 3 annotated CDS 5 6 +Rv3592 - 4034057 4034374 2 heme-degrading monooxygenase - - - status 3 annotated CDS 5 6 +Rv3593 lpqF 4034352 4035710 3 lipoprotein LpqF - - - status 3 annotated CDS 5 6 +Rv3594 - 4035857 4036684 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3595c PE_PGRS59 4038050 4036731 -3 PE-PGRS family protein PE_PGRS59 - - - status 3 annotated CDS 5 6 +Rv3596c clpC1 4040704 4038158 -2 ATP-dependent protease ATP-binding subunit ClpC - - - status 3 annotated CDS 5 6 +Rv3597c lsr2 4041319 4040981 -2 iron-regulated H-NS-like protein - - - status 3 annotated CDS 5 6 +Rv3598c lysS 4042940 4041423 -3 lysine--tRNA ligase - - - status 3 annotated CDS 5 6 +Rv3600c - 4043859 4043041 -1 type III pantothenate kinase - - - status 3 annotated CDS 5 6 +Rv3601c panD 4044281 4043862 -3 aspartate 1-decarboxylase - - - status 3 annotated CDS 5 6 +Rv3602c panC 4045210 4044281 -2 pantothenate synthetase - - - status 3 annotated CDS 5 6 +Rv3603c - 4046118 4045207 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3604c - 4047496 4046303 -2 transmembrane protein - - - status 3 annotated CDS 5 6 +Rv3605c - 4048181 4047705 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3606c folK 4048747 4048181 -2 2-amino-4-hydroxy-6- hydroxymethyldihydropteridinepyrophosphokinase - - - status 3 annotated CDS 5 6 +Rv3607c folB 4049145 4048744 -1 dihydroneopterin aldolase - - - status 3 annotated CDS 5 6 +Rv3608c folP1 4049980 4049138 -2 dihydropteroate synthase - - - status 3 annotated CDS 5 6 +Rv3609c folE 4050585 4049977 -1 GTP cyclohydrolase I - - - status 3 annotated CDS 5 6 +Rv3610c ftsH 4052883 4050601 -1 zinc metalloprotease FtsH - - - status 3 annotated CDS 5 6 +Rv3612c - 4053847 4053518 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3613c - 4054042 4053881 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3614c espD 4054696 4054142 -2 ESX-1 secretion-associated protein EspD - - - status 3 annotated CDS 5 6 +Rv3615c espC 4055123 4054812 -3 ESX-1 secretion-associated protein EspC - - - status 3 annotated CDS 5 6 +Rv3616c espA 4056375 4055197 -1 ESX-1 secretion-associated protein EspA - - - status 3 annotated CDS 5 6 +Rv3617 ephA 4057733 4058701 2 epoxide hydrolase EphA - - - status 3 annotated CDS 5 6 +Rv3618 - 4058698 4059885 1 monooxygenase - - - status 3 annotated CDS 5 6 +Rv3619c esxV 4060268 4059984 -3 ESAT-6 like protein EsxV - - - status 3 annotated CDS 5 6 +Rv3620c esxW 4060591 4060295 -2 ESAT-6 like protein EsxW - - - status 3 annotated CDS 5 6 +Rv3621c PPE65 4061889 4060648 -1 PPE family protein PPE65 - - - status 3 annotated CDS 5 6 +Rv3622c PE32 4062198 4061899 -1 PE family protein PE32 - - - status 3 annotated CDS 5 6 +Rv3623 lpqG 4062527 4063249 2 lipoprotein LpqG - - - status 3 annotated CDS 5 6 +Rv3624c hpt 4063904 4063254 -3 hypoxanthine-guanine phosphoribosyltransferase - - - status 3 annotated CDS 5 6 +Rv3625c mesJ 4064872 4063901 -2 tRNA(Ile)-lysidine synthase - - - status 3 annotated CDS 5 6 +Rv3626c - 4065903 4064851 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3627c - 4067285 4065900 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3628 ppa 4067423 4067911 2 inorganic pyrophosphatase - - - status 3 annotated CDS 5 6 +Rv3629c - 4069054 4067957 -2 integral membrane protein - - - status 3 annotated CDS 5 6 +Rv3630 - 4069175 4070470 2 integral membrane protein - - - status 3 annotated CDS 5 6 +Rv3631 - 4070514 4071239 3 transferase - - - status 3 annotated CDS 5 6 +Rv3632 - 4071236 4071580 2 membrane protein - - - status 3 annotated CDS 5 6 +Rv3633 - 4071791 4072666 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3634c galE1 4073611 4072667 -2 UDP-glucose 4-epimerase - - - status 3 annotated CDS 5 6 +Rv3635 - 4073634 4075409 3 transmembrane protein - - - status 3 annotated CDS 5 6 +Rv3638 - 4076984 4077730 2 transposase - - - status 3 annotated CDS 5 6 +Rv3639c - 4078450 4077884 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3640c - 4079749 4078520 -2 transposase - - - status 3 annotated CDS 5 6 +Rv3641c fic 4080560 4079925 -3 cell filamentation protein Fic - - - status 3 annotated CDS 5 6 +Rv3642c - 4080765 4080571 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3643 - 4081160 4081351 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3644c - 4082721 4081516 -1 DNA polymerase - - - status 3 annotated CDS 5 6 +Rv3645 - 4082807 4084456 2 transmembrane protein - - - status 3 annotated CDS 5 6 +Rv3646c topA 4087257 4084453 -1 DNA topoisomerase I - - - status 3 annotated CDS 5 6 +Rv3647c - 4088188 4087610 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3648c cspA 4088531 4088328 -3 cold shock protein A - - - status 3 annotated CDS 5 6 +Rv3649 - 4088781 4091096 3 helicase - - - status 3 annotated CDS 5 6 +Rv3650 PE33 4091233 4091517 1 PE family protein PE33 - - - status 3 annotated CDS 5 6 +Rv3651 - 4091841 4092878 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3652 PE_PGRS60 4093632 4093946 3 PE-PGRS family-related protein PE_PGRS60 - - - status 3 annotated CDS 5 6 +Rv3653 PE_PGRS61 4093940 4094527 2 PE-PGRS family-related protein PE_PGRS61 - - - status 3 annotated CDS 5 6 +Rv3654c - 4094983 4094660 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3655c - 4095300 4094923 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3656c - 4095530 4095324 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3657c - 4096115 4095540 -3 membrane protein - - - status 3 annotated CDS 5 6 +Rv3658c - 4096939 4096139 -2 transmembrane protein - - - status 3 annotated CDS 5 6 +Rv3659c - 4097994 4096936 -1 conjugal transfer protein - - - status 3 annotated CDS 5 6 +Rv3660c - 4099148 4098096 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3661 - 4099647 4100510 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3662c - 4102035 4101265 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3663c dppD 4103678 4102032 -3 dipeptide ABC transporter ATP-binding protein DppD - - - status 3 annotated CDS 5 6 +Rv3664c dppC 4104475 4103675 -2 dipeptide ABC transporter permease DppC - - - status 3 annotated CDS 5 6 +Rv3665c dppB 4105457 4104531 -3 dipeptide ABC transporter permease DppB - - - status 3 annotated CDS 5 6 +Rv3666c dppA 4107084 4105459 -1 dipeptide ABC transporter substrate-binding lipoprotein DppA - - - status 3 annotated CDS 5 6 +Rv3667 acs 4107792 4109747 3 acetyl-CoAsynthetase - - - status 3 annotated CDS 5 6 +Rv3668c - 4110481 4109783 -2 protease - - - status 3 annotated CDS 5 6 +Rv3669 - 4110827 4111345 2 transmembrane protein - - - status 3 annotated CDS 5 6 +Rv3670 ephE 4111346 4112329 2 epoxide hydrolase EphE - - - status 3 annotated CDS 5 6 +Rv3671c - 4113515 4112322 -3 serine protease - - - status 3 annotated CDS 5 6 +Rv3672c - 4114342 4113521 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3673c - 4115157 4114474 -1 membrane-anchored thioredoxin-like protein - - - status 3 annotated CDS 5 6 +Rv3674c nth 4115894 4115157 -3 endonuclease III - - - status 3 annotated CDS 5 6 +Rv3675 - 4116002 4116379 2 membrane protein - - - status 3 annotated CDS 5 6 +Rv3676 crp 4116478 4117152 1 cAMP receptor protein - - - status 3 annotated CDS 5 6 +Rv3677c - 4118052 4117258 -1 beta lactamase - - - status 3 annotated CDS 5 6 +Rv3678A - 4118691 4118530 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3678c - 4118514 4118059 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3679 - 4118776 4119798 1 anion transporter ATPase - - - status 3 annotated CDS 5 6 +Rv3680 - 4119795 4120955 3 anion transporter ATPase - - - status 3 annotated CDS 5 6 +Rv3681c whiB4 4121554 4121198 -2 transcriptional regulator WhiB4 - - - status 3 annotated CDS 5 6 +Rv3682 ponA2 4121916 4124348 3 bifunctional penicillin-insensitive transglycosylase/penicillin-sensitive transpeptidase - - - status 3 annotated CDS 5 6 +Rv3683 - 4124417 4125376 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3684 - 4125439 4126479 1 lyase - - - status 3 annotated CDS 5 6 +Rv3685c cyp137 4128725 4127295 -3 cytochrome P450 Cyp137 - - - status 3 annotated CDS 5 6 +Rv3686c - 4129083 4128751 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3687c rsfB 4129691 4129323 -3 anti-anti-sigma factor RsfB - - - status 3 annotated CDS 5 6 +Rv3688c - 4130357 4129893 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3689 - 4130357 4131712 2 transmembrane protein - - - status 3 annotated CDS 5 6 +Rv3690 - 4131739 4132392 1 membrane protein - - - status 3 annotated CDS 5 6 +Rv3691 - 4132518 4133519 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3692 moxR2 4133516 4134592 2 methanol dehydrogenase transcriptional regulator MoxR - - - status 3 annotated CDS 5 6 +Rv3693 - 4134726 4136048 3 membrane protein - - - status 3 annotated CDS 5 6 +Rv3694c - 4137114 4136122 -1 transmembrane protein - - - status 3 annotated CDS 5 6 +Rv3695 - 4137206 4138138 2 membrane protein - - - status 3 annotated CDS 5 6 +Rv3696c glpK 4139755 4138202 -2 glycerol kinase - - - status 3 annotated CDS 5 6 +Rv3697A vapB48 4140463 4140239 -2 antitoxin VapB48 - - - status 3 annotated CDS 5 6 +Rv3697c vapC48 4140242 4139805 -3 ribonuclease VapC48 - - - status 3 annotated CDS 5 6 +Rv3698 - 4140493 4142022 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3699 - 4142044 4142745 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3700c egtE 4143920 4142748 -3 pyridoxal-phosphate-dependent protein EgtE - - - status 3 annotated CDS 5 6 +Rv3701c egtD 4144916 4143951 -3 histidine-specific methyltransferase EtgD - - - status 3 annotated CDS 5 6 +Rv3702c egtC 4145614 4144913 -2 amidohydrolase EgtC - - - status 3 annotated CDS 5 6 +Rv3703c etgB 4146891 4145614 -1 iron(II)-dependent oxidoreductase EgtB - - - status 3 annotated CDS 5 6 +Rv3704c gshA 4148186 4146888 -3 glutamate--cysteine ligase - - - status 3 annotated CDS 5 6 +Rv3705A - 4149480 4149091 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3705c - 4148962 4148318 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3706c - 4149911 4149591 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3707c - 4151040 4150030 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3708c asd 4152217 4151180 -2 aspartate-semialdehyde dehydrogenase - - - status 3 annotated CDS 5 6 +Rv3709c ask 4153483 4152218 -2 aspartokinase - - - status 3 annotated CDS 5 6 +Rv3710 leuA 4153740 4155674 3 2-isopropylmalate synthase - - - status 3 annotated CDS 5 6 +Rv3711c dnaQ 4156729 4155740 -2 DNA polymerase III subunit epsilon - - - status 3 annotated CDS 5 6 +Rv3712 - 4156981 4158222 1 ligase - - - status 3 annotated CDS 5 6 +Rv3713 cobQ2 4158227 4158922 2 cobyric acid synthase CobQ - - - status 3 annotated CDS 5 6 +Rv3714c - 4159821 4158931 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3715c recR 4160500 4159889 -2 recombination protein RecR - - - status 3 annotated CDS 5 6 +Rv3716c - 4160913 4160512 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3717 - 4161048 4161773 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3718c - 4162258 4161815 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3719 - 4162306 4163718 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3720 - 4163736 4164998 3 fatty acid synthase - - - status 3 annotated CDS 5 6 +Rv3721c dnaZX 4166731 4164995 -2 DNA polymerase III subunit gamma/tau - - - status 3 annotated CDS 5 6 +Rv3722c - 4168128 4166821 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3723 - 4168536 4169300 3 transmembrane protein - - - status 3 annotated CDS 5 6 +Rv3725 - 4170214 4171143 1 oxidoreductase - - - status 3 annotated CDS 5 6 +Rv3726 - 4171421 4172614 2 dehydrogenase - - - status 3 annotated CDS 5 6 +Rv3727 - 4172955 4174763 3 oxidoreductase - - - status 3 annotated CDS 5 6 +Rv3728 - 4174873 4178070 1 membrane protein - - - status 3 annotated CDS 5 6 +Rv3729 - 4178285 4180615 2 transferase - - - status 3 annotated CDS 5 6 +Rv3730c - 4181720 4180680 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3731 ligC 4181758 4182834 1 DNA ligase C - - - status 3 annotated CDS 5 6 +Rv3732 - 4182934 4183992 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3733c - 4184512 4184012 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3734c tgs2 4185890 4184526 -3 diacyglycerol O-acyltransferase - - - status 3 annotated CDS 5 6 +Rv3735 - 4186089 4186577 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3736 - 4186634 4187695 2 AraC/XylS family transcriptional regulator - - - status 3 annotated CDS 5 6 +Rv3737 - 4187699 4189288 2 transmembrane protein - - - status 3 annotated CDS 5 6 +Rv3738c PPE66 4190232 4189285 -1 PPE family protein PPE66 - - - status 3 annotated CDS 5 6 +Rv3739c PPE67 4190517 4190284 -1 PPE family protein PPE67 - - - status 3 annotated CDS 5 6 +Rv3740c - 4192179 4190833 -1 diacyglycerol O-acyltransferase - - - status 3 annotated CDS 5 6 +Rv3741c - 4192853 4192179 -3 oxidoreductase - - - status 3 annotated CDS 5 6 +Rv3742c - 4193245 4192850 -2 oxidoreductase - - - status 3 annotated CDS 5 6 +Rv3743c ctpJ 4195373 4193391 -3 cation transporter ATPase J - - - status 3 annotated CDS 5 6 +Rv3744 nmtR 4195440 4195802 3 HTH-type transcriptional regulator NmtR - - - status 3 annotated CDS 5 6 +Rv3745c - 4196098 4195886 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3746c PE34 4196506 4196171 -2 PE family protein PE34 - - - status 3 annotated CDS 5 6 +Rv3747 - 4196724 4197107 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3748 - 4197236 4197595 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3749c - 4198137 4197628 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3750c - 4198597 4198205 -2 excisionase - - - status 3 annotated CDS 5 6 +Rv3752c - 4199705 4199247 -3 cytidine/deoxycytidylate deaminase - - - status 3 annotated CDS 5 6 +Rv3753c - 4200221 4199721 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3754 tyrA 4200421 4201326 1 prephenate dehydrogenase TyrA - - - status 3 annotated CDS 5 6 +Rv3755c - 4201888 4201289 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3756c proZ 4202613 4201894 -1 glycine betaine/carnitine/choline/L-proline ABC transporter permease ProZ - - - status 3 annotated CDS 5 6 +Rv3757c proW 4203299 4202610 -3 glycine betaine/carnitine/choline/L-proline ABC transporter permease ProW - - - status 3 annotated CDS 5 6 +Rv3758c proV 4204417 4203287 -2 glycine betaine/carnitine/choline/L-proline ABC transporter ATP-binding protein ProV - - - status 3 annotated CDS 5 6 +Rv3759c proX 4205373 4204426 -1 glycine betaine/carnitine/choline/L-proline ABC transporter substrate-binding lipoprotein ProX - - - status 3 annotated CDS 5 6 +Rv3760 - 4205538 4205840 3 membrane protein - - - status 3 annotated CDS 5 6 +Rv3761c fadE36 4206917 4205862 -3 acyl-CoA dehydrogenase FadE36 - - - status 3 annotated CDS 5 6 +Rv3762c - 4208876 4206996 -3 hydrolase - - - status 3 annotated CDS 5 6 +Rv3763 lpqH 4209047 4209526 2 lipoprotein LpqH - - - status 3 annotated CDS 5 6 +Rv3764c tcrY 4211009 4209582 -3 two component sensor kinase TcrY - - - status 3 annotated CDS 5 6 +Rv3765c tcrX 4211784 4211080 -1 two component transcriptional regulator TcrX - - - status 3 annotated CDS 5 6 +Rv3766 - 4212293 4212982 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3767c - 4213940 4212996 -3 S-adenosylmethionine-dependentmethyltransferase - - - status 3 annotated CDS 5 6 +Rv3768 - 4214070 4214429 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3769 - 4214615 4214887 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3770c - 4215775 4215200 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3771c - 4216730 4216404 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3772 hisC2 4217134 4218195 1 histidinol-phosphate aminotransferase - - - status 3 annotated CDS 5 6 +Rv3773c - 4218825 4218241 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3774 echA21 4218849 4219673 3 enoyl-CoA hydratase EchA21 - - - status 3 annotated CDS 5 6 +Rv3775 lipE 4219685 4220932 2 lipase LipE - - - status 3 annotated CDS 5 6 +Rv3776 - 4221089 4222648 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3777 - 4222694 4223680 2 oxidoreductase - - - status 3 annotated CDS 5 6 +Rv3778c - 4224895 4223699 -2 aminotransferase - - - status 3 annotated CDS 5 6 +Rv3779 - 4224985 4226985 1 transmembrane protein - - - status 3 annotated CDS 5 6 +Rv3780 - 4226989 4227525 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3781 rfbE 4227529 4228350 1 O-antigen/lipopolysaccharide ABC transporter ATP-binding protein RfbE - - - status 3 annotated CDS 5 6 +Rv3782 glfT1 4228347 4229261 3 galactofuranosyl transferase GlfT - - - status 3 annotated CDS 5 6 +Rv3783 rfbD 4229258 4230100 2 O-antigen/lipopolysaccharide ABC transporter permease RfbD - - - status 3 annotated CDS 5 6 +Rv3784 - 4230256 4231236 1 dTDP-glucose 4,6-dehydratase - - - status 3 annotated CDS 5 6 +Rv3785 - 4231320 4232393 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3786c - 4233597 4232374 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3787c - 4234536 4233610 -1 S-adenosyl-L-methionine-dependentmethyltransferase - - - status 3 annotated CDS 5 6 +Rv3788 - 4234780 4235265 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3789 - 4235374 4235739 1 GtrA family protein - - - status 3 annotated CDS 5 6 +Rv3790 dprE1 4235779 4237164 1 decaprenylphosphoryl-beta-D-ribose oxidase - - - status 3 annotated CDS 5 6 +Rv3791 dprE2 4237165 4237929 1 decaprenylphosphoryl-D-2-keto erythropentose reductase - - - status 3 annotated CDS 5 6 +Rv3792 aftA 4237932 4239863 3 arabinofuranosyltransferase - - - status 3 annotated CDS 5 6 +Rv3793 embC 4239863 4243147 2 arabinosyltransferase C - - - status 3 annotated CDS 5 6 +Rv3794 embA 4243233 4246517 3 arabinosyltransferase A - - - status 3 annotated CDS 5 6 +Rv3795 embB 4246514 4249810 2 arabinosyltransferase B - - - status 3 annotated CDS 5 6 +Rv3796 - 4249878 4251005 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3797 fadE35 4251085 4252866 1 acyl-CoA dehydrogenase FadE35 - - - status 3 annotated CDS 5 6 +Rv3798 - 4252993 4254327 1 insertion sequence element IS1557 transposase - - - status 3 annotated CDS 5 6 +Rv3799c accD4 4255948 4254380 -2 propionyl-CoA carboxylase subunit beta AccD - - - status 3 annotated CDS 5 6 +Rv3800c pks13 4261146 4255945 -1 polyketide synthase - - - status 3 annotated CDS 5 6 +Rv3801c fadD32 4263066 4261153 -1 long-chain-fatty-acid--AMP ligase FadD32 - - - status 3 annotated CDS 5 6 +Rv3802c - 4264365 4263355 -1 membrane protein - - - status 3 annotated CDS 5 6 +Rv3803c fbpD 4265462 4264563 -3 MPT51/MPB51 antigen - - - status 3 annotated CDS 5 6 +Rv3804c fbpA 4266658 4265642 -2 diacylglycerol acyltransferase/mycolyltransferase Ag85A - - - status 3 annotated CDS 5 6 +Rv3805c aftB 4268836 4266953 -2 terminal beta-(1->2)-arabinofuranosyltransferase - - - status 3 annotated CDS 5 6 +Rv3806c ubiA 4269833 4268925 -3 decaprenyl-phosphate phosphoribosyltransferase - - - status 3 annotated CDS 5 6 +Rv3807c - 4270337 4269840 -3 decaprenylphosphoryl-5-phosphoribose phosphatase - - - status 3 annotated CDS 5 6 +Rv3808c glfT2 4272279 4270366 -1 galactofuranosyl transferase GlfT - - - status 3 annotated CDS 5 6 +Rv3809c glf 4273475 4272276 -3 UDP-galactopyranose mutase - - - status 3 annotated CDS 5 6 +Rv3810 pirG 4273739 4274593 2 cell surface protein - - - status 3 annotated CDS 5 6 +Rv3811 - 4274798 4276417 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3812 PE_PGRS62 4276571 4278085 2 PE-PGRS family protein PE_PGRS62 - - - status 3 annotated CDS 5 6 +Rv3813c - 4279215 4278394 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3814c - 4280015 4279230 -3 acyltransferase - - - status 3 annotated CDS 5 6 +Rv3815c - 4280788 4280033 -2 acyltransferase - - - status 3 annotated CDS 5 6 +Rv3816c - 4281571 4280792 -2 acyltransferase - - - status 3 annotated CDS 5 6 +Rv3817 - 4281647 4282402 2 phosphotransferase - - - status 3 annotated CDS 5 6 +Rv3818 - 4282449 4283999 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3819 - 4283996 4284331 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3820c papA2 4285825 4284419 -2 trehalose-2-sulfate acyltransferase - - - status 3 annotated CDS 5 6 +Rv3821 - 4285973 4286686 2 integral membrane protein - - - status 3 annotated CDS 5 6 +Rv3822 - 4286721 4287935 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3823c mmpL8 4291529 4288260 -3 integral membrane transport protein MmpL8 - - - status 3 annotated CDS 5 6 +Rv3824c papA1 4293174 4291639 -1 acyltransferase PapA - - - status 3 annotated CDS 5 6 +Rv3825c pks2 4299605 4293225 -3 phthioceranic/hydroxyphthioceranic acid synthase - - - status 3 annotated CDS 5 6 +Rv3826 fadD23 4299812 4301566 2 long-chain-fatty-acid--CoA ligase FadD23 - - - status 3 annotated CDS 5 6 +Rv3827c - 4302789 4301563 -1 transposase - - - status 3 annotated CDS 5 6 +Rv3828c - 4303397 4302786 -3 resolvase - - - status 3 annotated CDS 5 6 +Rv3829c - 4305008 4303398 -3 dehydrogenase - - - status 3 annotated CDS 5 6 +Rv3830c - 4305685 4305056 -2 TetR family transcriptional regulator - - - status 3 annotated CDS 5 6 +Rv3831 - 4305757 4306239 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3832c - 4306811 4306236 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3833 - 4306867 4307658 1 AraC family transcriptional regulator - - - status 3 annotated CDS 5 6 +Rv3834c serS 4308914 4307655 -3 serine--tRNA ligase - - - status 3 annotated CDS 5 6 +Rv3835 - 4309047 4310396 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3836 - 4310401 4310814 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3837c - 4311707 4311009 -3 phosphoglycerate mutase - - - status 3 annotated CDS 5 6 +Rv3838c pheA 4312669 4311704 -2 prephenate dehydratase - - - status 3 annotated CDS 5 6 +Rv3839 - 4312765 4313541 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3840 - 4313567 4313980 2 transcriptional regulator - - - status 3 annotated CDS 5 6 +Rv3841 bfrB 4314178 4314723 1 bacterioferritin BfrB - - - status 3 annotated CDS 5 6 +Rv3842c glpQ1 4315562 4314738 -3 glycerophosphoryl diester phosphodiesterase - - - status 3 annotated CDS 5 6 +Rv3843c - 4316596 4315568 -2 transmembrane protein - - - status 3 annotated CDS 5 6 +Rv3844 - 4318775 4319266 2 transposase - - - status 3 annotated CDS 5 6 +Rv3845 - 4319281 4319640 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3846 sodA 4320704 4321327 2 superoxide dismutase - - - status 3 annotated CDS 5 6 +Rv3847 - 4321538 4322071 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3848 - 4322326 4323234 1 transmembrane protein - - - status 3 annotated CDS 5 6 +Rv3849 espR 4323499 4323897 1 ESX-1 transcriptional regulator EspR - - - status 3 annotated CDS 5 6 +Rv3850 - 4324015 4324671 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3851 - 4324683 4324967 3 membrane protein - - - status 3 annotated CDS 5 6 +Rv3852 hns 4325074 4325478 1 histone-like protein Hns - - - status 3 annotated CDS 5 6 +Rv3853 rraA 4325495 4325968 2 RNase E regulator RraA - - - status 3 annotated CDS 5 6 +Rv3854c ethA 4327473 4326004 -1 monooxygenase EthA - - - status 3 annotated CDS 5 6 +Rv3855 ethR 4327549 4328199 1 HTH-type transcriptional repressor EthR - - - status 3 annotated CDS 5 6 +Rv3856c - 4329408 4328401 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3857c - 4329614 4329417 -3 membrane protein - - - status 3 annotated CDS 5 6 +Rv3858c gltD 4331505 4330039 -1 glutamate synthase small subunit - - - status 3 annotated CDS 5 6 +Rv3859c gltB 4336081 4331498 -2 glutamate synthase large subunit - - - status 3 annotated CDS 5 6 +Rv3860 - 4336777 4337949 1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3861 - 4337946 4338272 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3862c whiB6 4338521 4338171 -3 transcriptional regulator WhiB6 - - - status 3 annotated CDS 5 6 +Rv3863 - 4338849 4340027 3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3864 espE 4340270 4341478 2 ESX-1 secretion-associated protein EspE - - - status 3 annotated CDS 5 6 +Rv3865 espF 4341566 4341877 2 ESX-1 secretion-associated protein EspF - - - status 3 annotated CDS 5 6 +Rv3866 espG1 4341880 4342731 1 ESX-1 secretion-associated protein EspG - - - status 3 annotated CDS 5 6 +Rv3867 espH 4342770 4343321 3 ESX-1 secretion-associated protein EspH - - - status 3 annotated CDS 5 6 +Rv3868 eccA1 4343314 4345035 1 ESX-1 secretion system protein EccA1 - - - status 3 annotated CDS 5 6 +Rv3869 eccB1 4345039 4346481 1 ESX-1 secretion system protein EccB - - - status 3 annotated CDS 5 6 +Rv3870 eccCa1 4346481 4348724 3 ESX-1 secretion system protein EccCa - - - status 3 annotated CDS 5 6 +Rv3871 eccCb1 4348827 4350602 3 ESX-1 secretion system protein EccCb - - - status 3 annotated CDS 5 6 +Rv3872 PE35 4350745 4351044 1 PE family protein PE35 - - - status 3 annotated CDS 5 6 +Rv3873 PPE68 4351075 4352181 1 PPE family protein PPE68 - - - status 3 annotated CDS 5 6 +Rv3874 esxB 4352274 4352576 3 ESAT-6-like protein EsxB - - - status 3 annotated CDS 5 6 +Rv3875 esxA 4352609 4352896 2 ESAT-6 protein EsxA - - - status 3 annotated CDS 5 6 +Rv3876 espI 4353010 4355010 1 ESX-1 secretion-associated protein EspI - - - status 3 annotated CDS 5 6 +Rv3877 eccD1 4355007 4356542 3 ESX-1 secretion system protein EccD1 - - - status 3 annotated CDS 5 6 +Rv3878 espJ 4356693 4357535 3 ESX-1 secretion-associated protein EspJ - - - status 3 annotated CDS 5 6 +Rv3879c espK 4359782 4357593 -3 ESX-1 secretion-associated protein EspK - - - status 3 annotated CDS 5 6 +Rv3880c espL 4360546 4360199 -2 ESX-1 secretion-associated protein EspL - - - status 3 annotated CDS 5 6 +Rv3881c espB 4361925 4360543 -1 ESX-1 secretion-associated protein EspB - - - status 3 annotated CDS 5 6 +Rv3882c eccE1 4363420 4362032 -2 ESX-1 secretion system protein EccE1 - - - status 3 annotated CDS 5 6 +Rv3883c mycP1 4364757 4363417 -1 membrane-anchored mycosin - - - status 3 annotated CDS 5 6 +Rv3884c eccA2 4366838 4364979 -3 ESX-2 secretion system protein EccA - - - status 3 annotated CDS 5 6 +Rv3885c eccE2 4368521 4366908 -3 ESX-2 secretion system protein EccE - - - status 3 annotated CDS 5 6 +Rv3886c mycP2 4370170 4368518 -2 membrane-anchored mycosin - - - status 3 annotated CDS 5 6 +Rv3887c eccD2 4371684 4370155 -1 ESX-2 secretion system protein EccD - - - status 3 annotated CDS 5 6 +Rv3888c - 4372706 4371681 -3 membrane protein - - - status 3 annotated CDS 5 6 +Rv3889c espG2 4373630 4372800 -3 ESX-2 secretion-associated protein EspG2 - - - status 3 annotated CDS 5 6 +Rv3890c esxC 4374013 4373726 -2 ESAT-6 like protein EsxC - - - status 3 annotated CDS 5 6 +Rv3891c esxD 4374372 4374049 -1 ESAT-6 like protein EsxD - - - status 3 annotated CDS 5 6 +Rv3892c PPE69 4375683 4374484 -1 PPE family protein PPE69 - - - status 3 annotated CDS 5 6 +Rv3893c PE36 4375995 4375762 -1 PE family protein PE36 - - - status 3 annotated CDS 5 6 +Rv3894c eccC2 4380452 4376262 -3 ESX-2 type VII secretion system protein EccC - - - status 3 annotated CDS 5 6 +Rv3895c eccB2 4381940 4380453 -3 ESX-2 secretion system protein EccB - - - status 3 annotated CDS 5 6 +Rv3896c - 4382851 4381943 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3897c - 4383640 4383008 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3898c - 4383985 4383653 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3899c - 4385379 4384147 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3900c - 4386308 4385373 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3901c - 4386814 4386365 -2 membrane protein - - - status 3 annotated CDS 5 6 +Rv3902c - 4387895 4387365 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3903c - 4390432 4387892 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3904c esxE 4390709 4390437 -3 ESAT-6 like protein EsxE - - - status 3 annotated CDS 5 6 +Rv3905c esxF 4391031 4390720 -1 ESAT-6 like protein EsxF - - - status 3 annotated CDS 5 6 +Rv3906c - 4391606 4391097 -3 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3907c pcnA 4393073 4391631 -3 poly(A) polymerase PcnA - - - status 3 annotated CDS 5 6 +Rv3908 mutT4 4393449 4394195 3 mutator protein MutT - - - status 3 annotated CDS 5 6 +Rv3909 - 4394192 4396600 2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3910 - 4396597 4400151 1 peptidoglycan biosynthesis protein - - - status 3 annotated CDS 5 6 +Rv3911 sigM 4400186 4400854 2 ECF RNA polymerase sigma factor SigM - - - status 3 annotated CDS 5 6 +Rv3912 - 4400870 4401634 2 anti-sigma-M factor RsmA - - - status 3 annotated CDS 5 6 +Rv3913 trxB2 4401728 4402735 2 thioredoxin reductase - - - status 3 annotated CDS 5 6 +Rv3914 trxC 4402732 4403082 1 thioredoxin TrxC - - - status 3 annotated CDS 5 6 +Rv3915 - 4403192 4404412 2 peptidoglycan hydrolase - - - status 3 annotated CDS 5 6 +Rv3916c - 4405167 4404433 -1 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3917c parB 4406491 4405457 -2 chromosome partitioning protein ParB - - - status 3 annotated CDS 5 6 +Rv3918c parA 4407531 4406488 -1 chromosome partitioning protein ParA - - - status 3 annotated CDS 5 6 +Rv3919c gid 4408202 4407528 -3 rRNA small subunit methyltransferase G - - - status 3 annotated CDS 5 6 +Rv3920c - 4408897 4408334 -2 hypothetical protein - - - status 3 annotated CDS 5 6 +Rv3921c - 4410069 4408969 -1 membrane protein insertase YidC - - - status 3 annotated CDS 5 6 +Rv3922c - 4410415 4410053 -2 membrane protein insertion efficiency factor - - - status 3 annotated CDS 5 6 +Rv3923c rnpA 4410789 4410412 -1 ribonuclease P protein component - - - status 3 annotated CDS 5 6 +Rv3924c rpmH 4410929 4410786 -3 50S ribosomal protein L34 - - - status 3 annotated CDS 5 6 +Rvnr01 - 1471846 1473382 1 rRNA rRNA - - status 3 annotated rRNA 5 6 +Rvnr02 - 1473658 1476795 1 rRNA rRNA - - status 3 annotated rRNA 5 6 +Rvnr03 - 1476899 1477013 1 rRNA rRNA - - status 3 annotated rRNA 5 6 +Rvnt01 - 10887 10960 1 tRNA - - - status 3 annotated tRNA 5 6 +Rvnt02 - 11112 11184 1 tRNA - - - status 3 annotated tRNA 5 6 +Rvnt03 - 25644 25726 1 tRNA - - - status 3 annotated tRNA 5 6 +Rvnt04 - 386274 386204 -1 tRNA - - - status 3 annotated tRNA 5 6 +Rvnt05 - 658109 658189 1 tRNA - - - status 3 annotated tRNA 5 6 +Rvnt06 - 731494 731566 1 tRNA - - - status 3 annotated tRNA 5 6 +Rvnt07 - 731603 731676 1 tRNA - - - status 3 annotated tRNA 5 6 +Rvnt08 - 733524 733596 1 tRNA - - - status 3 annotated tRNA 5 6 +Rvnt09 - 850713 850642 -1 tRNA - - - status 3 annotated tRNA 5 6 +Rvnt10 - 923875 923803 -1 tRNA - - - status 3 annotated tRNA 5 6 +Rvnt11 - 923999 924072 1 tRNA - - - status 3 annotated tRNA 5 6 +Rvnt12 - 924110 924183 1 tRNA - - - status 3 annotated tRNA 5 6 +Rvnt13 - 924213 924286 1 tRNA - - - status 3 annotated tRNA 5 6 +Rvnt14 - 1025393 1025321 -1 tRNA - - - status 3 annotated tRNA 5 6 +Rvnt15 - 1113511 1113583 1 tRNA - - - status 3 annotated tRNA 5 6 +Rvnt16 - 1138147 1138076 -1 tRNA - - - status 3 annotated tRNA 5 6 +Rvnt17 - 1177396 1177469 1 tRNA - - - status 3 annotated tRNA 5 6 +Rvnt18 - 1446265 1446193 -1 tRNA - - - status 3 annotated tRNA 5 6 +Rvnt19 - 1512728 1512811 1 tRNA - - - status 3 annotated tRNA 5 6 +Rvnt20 - 1828088 1828015 -1 tRNA - - - status 3 annotated tRNA 5 6 +Rvnt21 - 1946613 1946686 1 tRNA - - - status 3 annotated tRNA 5 6 +Rvnt22 - 2401987 2402072 1 tRNA - - - status 3 annotated tRNA 5 6 +Rvnt23 - 2510669 2510598 -1 tRNA - - - status 3 annotated tRNA 5 6 +Rvnt24 - 2581837 2581764 -1 tRNA - - - status 3 annotated tRNA 5 6 +Rvnt25 - 2619479 2619407 -1 tRNA - - - status 3 annotated tRNA 5 6 +Rvnt26 - 2765404 2765331 -1 tRNA - - - status 3 annotated tRNA 5 6 +Rvnt27 - 2765541 2765611 1 tRNA - - - status 3 annotated tRNA 5 6 +Rvnt28 - 2794176 2794249 1 tRNA - - - status 3 annotated tRNA 5 6 +Rvnt29 - 2827854 2827926 1 tRNA - - - status 3 annotated tRNA 5 6 +Rvnt30 - 2835494 2835566 1 tRNA - - - status 3 annotated tRNA 5 6 +Rvnt31 - 2969568 2969497 -1 tRNA - - - status 3 annotated tRNA 5 6 +Rvnt32 - 2969753 2969825 1 tRNA - - - status 3 annotated tRNA 5 6 +Rvnt33 - 2969855 2969925 1 tRNA - - - status 3 annotated tRNA 5 6 +Rvnt34 - 2969942 2970013 1 tRNA - - - status 3 annotated tRNA 5 6 +Rvnt35 - 3348619 3348547 -1 tRNA - - - status 3 annotated tRNA 5 6 +Rvnt36 - 3348730 3348659 -1 tRNA - - - status 3 annotated tRNA 5 6 +Rvnt37 - 3431912 3431840 -1 tRNA - - - status 3 annotated tRNA 5 6 +Rvnt38 - 3559443 3559370 -1 tRNA - - - status 3 annotated tRNA 5 6 +Rvnt39 - 4081437 4081365 -1 tRNA - - - status 3 annotated tRNA 5 6 +Rvnt40 - 4126541 4126614 1 tRNA - - - status 3 annotated tRNA 5 6 +Rvnt41 - 4168345 4168430 1 tRNA - - - status 3 annotated tRNA 5 6 +Rvnt42 - 4199217 4199131 -1 tRNA - - - status 3 annotated tRNA 5 6 +Rvnt43 - 4216937 4216865 -1 tRNA - - - status 3 annotated tRNA 5 6 +Rvnt44 - 4217056 4216968 -1 tRNA - - - status 3 annotated tRNA 5 6 +Rvnt45 - 4222667 4222581 -1 tRNA - - - status 3 annotated tRNA 5 6 diff --git a/data/mtbseq-references/res/MTB_Base_Calibration_List.vcf b/data/mtbseq-references/res/MTB_Base_Calibration_List.vcf new file mode 100644 index 0000000..b4072bf --- /dev/null +++ b/data/mtbseq-references/res/MTB_Base_Calibration_List.vcf @@ -0,0 +1,383 @@ +##fileformat=VCFv4.1 +##reference=file:///home/vschleusener/Masterarbeit/bwa-mem/M._tuberculosis_H37Rv_corr.fasta +##contig= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +#CHROM POS ID REF ALT QUAL FILTER INFO +M.tuberculosis_H37Rv 6575 . c t . . REG=coding;SVTYPE=SNP;GENE=Rv0005:gyrB:5123:7267;AMINO=Arg485Cys;RES=fluoroquinolones_(FQ) +M.tuberculosis_H37Rv 6576 . g a . . REG=coding;SVTYPE=SNP;GENE=Rv0005:gyrB:5123:7267;AMINO=Arg485His;RES=fluoroquinolones_(FQ) +M.tuberculosis_H37Rv 6579 . c t . . REG=coding;SVTYPE=SNP;GENE=Rv0005:gyrB:5123:7267;AMINO=Ser486Phe;RES=fluoroquinolones_(FQ) +M.tuberculosis_H37Rv 6579 . c a . . REG=coding;SVTYPE=SNP;GENE=Rv0005:gyrB:5123:7267;AMINO=Ser486Tyr;RES=fluoroquinolones_(FQ) +M.tuberculosis_H37Rv 6620 . g a . . REG=coding;SVTYPE=SNP;GENE=Rv0005:gyrB:5123:7267;AMINO=Asp500Asn;RES=fluoroquinolones_(FQ) +M.tuberculosis_H37Rv 6734 . g a . . REG=coding;SVTYPE=SNP;GENE=Rv0005:gyrB:5123:7267;AMINO=Asn538Asp;RES=fluoroquinolones_(FQ) +M.tuberculosis_H37Rv 6738 . c a . . REG=coding;SVTYPE=SNP;GENE=Rv0005:gyrB:5123:7267;AMINO=Thr539Asn;RES=fluoroquinolones_(FQ) +M.tuberculosis_H37Rv 6738 . c t . . REG=coding;SVTYPE=SNP;GENE=Rv0005:gyrB:5123:7267;AMINO=Thr539Ile;RES=fluoroquinolones_(FQ) +M.tuberculosis_H37Rv 6742 . a t . . REG=coding;SVTYPE=SNP;GENE=Rv0005:gyrB:5123:7267;AMINO=Glu540Asp;RES=fluoroquinolones_(FQ) +M.tuberculosis_H37Rv 6749 . g a . . REG=coding;SVTYPE=SNP;GENE=Rv0005:gyrB:5123:7267;AMINO=Ala543Thr;RES=fluoroquinolones_(FQ) +M.tuberculosis_H37Rv 6768 . g c . . REG=coding;SVTYPE=SNP;GENE=Rv0005:gyrB:5123:7267;AMINO=Glu549Ala;RES=fluoroquinolones_(FQ) +M.tuberculosis_H37Rv 7539 . a g . . REG=coding;SVTYPE=SNP;GENE=Rv0006:gyrA:7302:9818;AMINO=Thr80Ala;RES=phylo_(Uganda_I+II)_ +M.tuberculosis_H37Rv 7563 . g t . . REG=coding;SVTYPE=SNP;GENE=Rv0006:gyrA:7302:9818;AMINO=Gly88Cys;RES=fluoroquinolones_(FQ) +M.tuberculosis_H37Rv 7566 . g a . . REG=coding;SVTYPE=SNP;GENE=Rv0006:gyrA:7302:9818;AMINO=Asp89Asn;RES=fluoroquinolones_(FQ) +M.tuberculosis_H37Rv 7570 . c t . . REG=coding;SVTYPE=SNP;GENE=Rv0006:gyrA:7302:9818;AMINO=Ala90Val;RES=fluoroquinolones_(FQ) +M.tuberculosis_H37Rv 7572 . t c . . REG=coding;SVTYPE=SNP;GENE=Rv0006:gyrA:7302:9818;AMINO=Ser91Pro;RES=fluoroquinolones_(FQ) +M.tuberculosis_H37Rv 7581 . g c . . REG=coding;SVTYPE=SNP;GENE=Rv0006:gyrA:7302:9818;AMINO=Asp94His;RES=fluoroquinolones_(FQ) +M.tuberculosis_H37Rv 7581 . g a . . REG=coding;SVTYPE=SNP;GENE=Rv0006:gyrA:7302:9818;AMINO=Asp94Asn;RES=fluoroquinolones_(FQ) +M.tuberculosis_H37Rv 7581 . g t . . REG=coding;SVTYPE=SNP;GENE=Rv0006:gyrA:7302:9818;AMINO=Asp94Tyr;RES=fluoroquinolones_(FQ) +M.tuberculosis_H37Rv 7582 . a g . . REG=coding;SVTYPE=SNP;GENE=Rv0006:gyrA:7302:9818;AMINO=Asp94Gly;RES=fluoroquinolones_(FQ) +M.tuberculosis_H37Rv 7582 . a c . . REG=coding;SVTYPE=SNP;GENE=Rv0006:gyrA:7302:9818;AMINO=Asp94Ala;RES=fluoroquinolones_(FQ) +M.tuberculosis_H37Rv 7582 . a t . . REG=coding;SVTYPE=SNP;GENE=Rv0006:gyrA:7302:9818;AMINO=Asp94Val;RES=fluoroquinolones_(FQ) +M.tuberculosis_H37Rv 7585 . g c . . REG=coding;SVTYPE=SNP;GENE=Rv0006:gyrA:7302:9818;AMINO=Ser95Thr;RES=phylo_(not_H37Rv_ATCC) +M.tuberculosis_H37Rv 156593 . t c . . REG=coding;SVTYPE=SNP;GENE=Rv0129c:fbpC:157600:156578;AMINO=Ala336Ala;RES=phylo_(M._canettii) +M.tuberculosis_H37Rv 157129 . g a . . REG=coding;SVTYPE=SNP;GENE=Rv0129c:fbpC:157600:156578;AMINO=Gly158Ser;RES=phylo_(Delhi/CAS) +M.tuberculosis_H37Rv 157292 . g a . . REG=coding;SVTYPE=SNP;GENE=Rv0129c:fbpC:157600:156578;AMINO=Glu103Glu;RES=phylo_(LAM) +M.tuberculosis_H37Rv 273265 . g t . . REG=coding;SVTYPE=SNP;GENE=Rv0228:0:273055:274278;AMINO=Ala71Cys;RES=phylo_(West_African_2) +M.tuberculosis_H37Rv 412339 . c g . . REG=coding;SVTYPE=SNP;GENE=Rv0342:iniA:410838:412760;AMINO=Ser501Trp;RES=ethambutol_(EMB) +M.tuberculosis_H37Rv 413498 . c g . . REG=coding;SVTYPE=SNP;GENE=Rv0343:iniC:412757:414238;AMINO=Pro248Ala;RES=ethambutol_(EMB) +M.tuberculosis_H37Rv 413807 . c t . . REG=coding;SVTYPE=SNP;GENE=Rv0343:iniC:412757:414238;AMINO=Gln351STOP;RES=ethambutol_(EMB) +M.tuberculosis_H37Rv 491591 . a t . . REG=coding;SVTYPE=SNP;GENE=Rv0407:fgd1:490783:491793;AMINO=Lys270Met;RES=phylo_(Haarlem) +M.tuberculosis_H37Rv 491595 . c t . . REG=coding;SVTYPE=SNP;GENE=Rv0407:fgd1:490783:491793;AMINO=Ala271Ala;RES=phylo_(West_African_1a) +M.tuberculosis_H37Rv 491668 . a g . . REG=coding;SVTYPE=SNP;GENE=Rv0407:fgd1:490783:491793;AMINO=Lys296Glu;RES=phylo_(West_African_2) +M.tuberculosis_H37Rv 491742 . t c . . REG=coding;SVTYPE=SNP;GENE=Rv0407:fgd1:490783:491793;AMINO=Phe320Phe;RES=phylo_(M._africanum,_M._bovis,_M._canettii,_M._caprae,_M._microti,_M._pinipedii,_Beijing,_Delhi/CAS,_EAI) +M.tuberculosis_H37Rv 495108 . c a . . REG=coding;SVTYPE=SNP;GENE=Rv0410c:pknG:497314:495062;AMINO=Thr736Lys;RES=phylo_(West_African_2) +M.tuberculosis_H37Rv 495322 . g a . . REG=coding;SVTYPE=SNP;GENE=Rv0410c:pknG:497314:495062;AMINO=Ala665Thr;RES=phylo_(West_African_1a,_West_African_1b) +M.tuberculosis_H37Rv 495473 . g a . . REG=coding;SVTYPE=SNP;GENE=Rv0410c:pknG:497314:495062;AMINO=Ser614Ser;RES=phylo_(EAI) +M.tuberculosis_H37Rv 497108 . g a . . REG=coding;SVTYPE=SNP;GENE=Rv0410c:pknG:497314:495062;AMINO=Pro69Pro;RES=phylo_(M._bovis,_M._caprae) +M.tuberculosis_H37Rv 575665 . g c . . REG=coding;SVTYPE=SNP;GENE=Rv0486:mshA:575348:576790;AMINO=Gly106Gly;RES=phylo_(M._canettii) +M.tuberculosis_H37Rv 575679 . a g . . REG=coding;SVTYPE=SNP;GENE=Rv0486:mshA:575348:576790;AMINO=Asn111Ser;RES=phylo_(Haarlem) +M.tuberculosis_H37Rv 575729 . c t . . REG=coding;SVTYPE=SNP;GENE=Rv0486:mshA:575348:576790;AMINO=Gln128STOP;RES=ethionamid_(ETH) +M.tuberculosis_H37Rv 575907 . c t . . REG=coding;SVTYPE=SNP;GENE=Rv0486:mshA:575348:576790;AMINO=Ala187Val;RES=phylo_(Beijing) +M.tuberculosis_H37Rv 576077 . c t . . REG=coding;SVTYPE=SNP;GENE=Rv0486:mshA:575348:576790;AMINO=Leu244Leu;RES=phylo_(Tur) +M.tuberculosis_H37Rv 576164 . c t . . REG=coding;SVTYPE=SNP;GENE=Rv0486:mshA:575348:576790;AMINO=Arg273Cys;RES=ethionamid_(ETH) +M.tuberculosis_H37Rv 576242 . g t . . REG=coding;SVTYPE=SNP;GENE=Rv0486:mshA:575348:576790;AMINO=Gly299Cys;RES=ethionamid_(ETH) +M.tuberculosis_H37Rv 576338 . c t . . REG=coding;SVTYPE=SNP;GENE=Rv0486:mshA:575348:576790;AMINO=Gln331STOP;RES=ethionamid_(ETH) +M.tuberculosis_H37Rv 576414 . g a . . REG=coding;SVTYPE=SNP;GENE=Rv0486:mshA:575348:576790;AMINO=Gly356Asp;RES=ethionamid_(ETH) +M.tuberculosis_H37Rv 576429 . a c . . REG=coding;SVTYPE=SNP;GENE=Rv0486:mshA:575348:576790;AMINO=Glu361Ala;RES=ethionamid_(ETH) +M.tuberculosis_H37Rv 648756 . c t . . REG=coding;SVTYPE=SNP;GENE=Rv0557:mgtA:648536:649672;AMINO=Thr74Ile;RES=phylo_(West_African_1a,_West_African_1b) +M.tuberculosis_H37Rv 648856 . t c . . REG=coding;SVTYPE=SNP;GENE=Rv0557:mgtA:648536:649672;AMINO=Gly107Gly;RES=phylo_(not_Euro-American) +M.tuberculosis_H37Rv 648990 . g c . . REG=coding;SVTYPE=SNP;GENE=Rv0557:mgtA:648536:649672;AMINO=Arg152Pro;RES=phylo_(Haarlem) +M.tuberculosis_H37Rv 648992 . c g . . REG=coding;SVTYPE=SNP;GENE=Rv0557:mgtA:648536:649672;AMINO=Leu153Val;RES=phylo_(S-type) +M.tuberculosis_H37Rv 649067 . c g . . REG=coding;SVTYPE=SNP;GENE=Rv0557:mgtA:648536:649672;AMINO=Arg178Gly;RES=phylo_(Cameroon) +M.tuberculosis_H37Rv 649345 . c t . . REG=coding;SVTYPE=SNP;GENE=Rv0557:mgtA:648536:649672;AMINO=Ala270Ala;RES=phylo_(EAI) +M.tuberculosis_H37Rv 649446 . g a . . REG=coding;SVTYPE=SNP;GENE=Rv0557:pimB:648536:649672;AMINO=Gly304Asp;RES=phylo_(West_African_1a,_West_African_1b) +M.tuberculosis_H37Rv 649585 . g a . . REG=coding;SVTYPE=SNP;GENE=Rv0557:mgtA:648536:649672;AMINO=Val350Val;RES=phylo_(M._caprae) +M.tuberculosis_H37Rv 649601 . c t . . REG=coding;SVTYPE=SNP;GENE=Rv0557:mgtA:648536:649672;AMINO=Pro356Ser;RES=phylo_(M._canettii) +M.tuberculosis_H37Rv 760314 . g t . . REG=coding;SVTYPE=SNP;GENE=Rv0667:rpoB:759807:763325;AMINO=Val170Phe;RES=rifampicin_(RMP) +M.tuberculosis_H37Rv 761004 . a g . . REG=coding;SVTYPE=SNP;GENE=Rv0667:rpoB:759807:763325;AMINO=Thr400Ala;RES=rifampicin_(RMP) +M.tuberculosis_H37Rv 761093 . g c . . REG=coding;SVTYPE=SNP;GENE=Rv0667:rpoB:759807:763325;AMINO=Gln429His;RES=rifampicin_(RMP) +M.tuberculosis_H37Rv 761095 . t c . . REG=coding;SVTYPE=SNP;GENE=Rv0667:rpoB:759807:763325;AMINO=Leu430Pro;RES=rifampicin_(RMP) +M.tuberculosis_H37Rv 761100 . c a . . REG=coding;SVTYPE=SNP;GENE=Rv0667:rpoB:759807:763325;AMINO=Gln432Lys;RES=rifampicin_(RMP) +M.tuberculosis_H37Rv 761101 . a c . . REG=coding;SVTYPE=SNP;GENE=Rv0667:rpoB:759807:763325;AMINO=Gln432Pro;RES=rifampicin_(RMP) +M.tuberculosis_H37Rv 761101 . a t . . REG=coding;SVTYPE=SNP;GENE=Rv0667:rpoB:759807:763325;AMINO=Gln432Leu;RES=rifampicin_(RMP) +M.tuberculosis_H37Rv 761106 . a c . . REG=coding;SVTYPE=SNP;GENE=Rv0667:rpoB:759807:763325;AMINO=Met434Leu;RES=rifampicin_(RMP) +M.tuberculosis_H37Rv 761108 . g t . . REG=coding;SVTYPE=SNP;GENE=Rv0667:rpoB:759807:763325;AMINO=Met434Ile;RES=rifampicin_(RMP) +M.tuberculosis_H37Rv 761109 . ga tt . . REG=coding;SVTYPE=SNP;GENE=Rv0667:rpoB:759807:763325;AMINO=Asp435Phe;RES=rifampicin_(RMP) +M.tuberculosis_H37Rv 761109 . g t . . REG=coding;SVTYPE=SNP;GENE=Rv0667:rpoB:759807:763325;AMINO=Asp435Tyr;RES=rifampicin_(RMP) +M.tuberculosis_H37Rv 761110 . a t . . REG=coding;SVTYPE=SNP;GENE=Rv0667:rpoB:759807:763325;AMINO=Asp435Val;RES=rifampicin_(RMP) +M.tuberculosis_H37Rv 761116 . a g . . REG=coding;SVTYPE=SNP;GENE=Rv0667:rpoB:759807:763325;AMINO=Asn437Ser;RES=rifampicin_(RMP) +M.tuberculosis_H37Rv 761120 . c g . . REG=coding;SVTYPE=SNP;GENE=Rv0667:rpoB:759807:763325;AMINO=Asn438Lys;RES=rifampicin_(RMP) +M.tuberculosis_H37Rv 761127 . tc ca . . REG=coding;SVTYPE=SNP;GENE=Rv0667:rpoB:759807:763325;AMINO=Ser441Gln;RES=rifampicin_(RMP) +M.tuberculosis_H37Rv 761128 . c t . . REG=coding;SVTYPE=SNP;GENE=Rv0667:rpoB:759807:763325;AMINO=Ser441Leu;RES=rifampicin_(RMP) +M.tuberculosis_H37Rv 761128 . c g . . REG=coding;SVTYPE=SNP;GENE=Rv0667:rpoB:759807:763325;AMINO=Ser441Trp;RES=rifampicin_(RMP) +M.tuberculosis_H37Rv 761139 . c g . . REG=coding;SVTYPE=SNP;GENE=Rv0667:rpoB:759807:763325;AMINO=His445Asp;RES=rifampicin_(RMP) +M.tuberculosis_H37Rv 761139 . ca tg . . REG=coding;SVTYPE=SNP;GENE=Rv0667:rpoB:759807:763325;AMINO=His445Cys;RES=rifampicin_(RMP) +M.tuberculosis_H37Rv 761139 . c a . . REG=coding;SVTYPE=SNP;GENE=Rv0667:rpoB:759807:763325;AMINO=His445Asn;RES=rifampicin_(RMP) +M.tuberculosis_H37Rv 761139 . c t . . REG=coding;SVTYPE=SNP;GENE=Rv0667:rpoB:759807:763325;AMINO=His445Tyr;RES=rifampicin_(RMP) +M.tuberculosis_H37Rv 761140 . a c . . REG=coding;SVTYPE=SNP;GENE=Rv0667:rpoB:759807:763325;AMINO=His445Pro;RES=rifampicin_(RMP) +M.tuberculosis_H37Rv 761140 . a g . . REG=coding;SVTYPE=SNP;GENE=Rv0667:rpoB:759807:763325;AMINO=His445Arg;RES=rifampicin_(RMP) +M.tuberculosis_H37Rv 761140 . a t . . REG=coding;SVTYPE=SNP;GENE=Rv0667:rpoB:759807:763325;AMINO=His445Leu;RES=rifampicin_(RMP) +M.tuberculosis_H37Rv 761141 . c a . . REG=coding;SVTYPE=SNP;GENE=Rv0667:rpoB:759807:763325;AMINO=His445Gln;RES=rifampicin_(RMP) +M.tuberculosis_H37Rv 761154 . c t . . REG=coding;SVTYPE=SNP;GENE=Rv0667:rpoB:759807:763325;AMINO=Ser450Ala;RES=rifampicin_(RMP) +M.tuberculosis_H37Rv 761155 . c g . . REG=coding;SVTYPE=SNP;GENE=Rv0667:rpoB:759807:763325;AMINO=Ser450Trp;RES=rifampicin_(RMP) +M.tuberculosis_H37Rv 761155 . c t . . REG=coding;SVTYPE=SNP;GENE=Rv0667:rpoB:759807:763325;AMINO=Ser450Leu;RES=rifampicin_(RMP) +M.tuberculosis_H37Rv 761161 . t c . . REG=coding;SVTYPE=SNP;GENE=Rv0667:rpoB:759807:763325;AMINO=Leu452Pro;RES=rifampicin_(RMP) +M.tuberculosis_H37Rv 761277 . a t . . REG=coding;SVTYPE=SNP;GENE=Rv0667:rpoB:759807:763325;AMINO=Ile491Phe;RES=rifampicin_(RMP) +M.tuberculosis_H37Rv 781687 . a g . . REG=coding;SVTYPE=SNP;GENE=Rv0682:rpsL:781560:781934;AMINO=Lys43Arg;RES=streptomycin_(SM)_amikacin_(AMK)_kanamycin_(KAN)_capreomycin_(CPR) +M.tuberculosis_H37Rv 781821 . a c . . REG=coding;SVTYPE=SNP;GENE=Rv0682:rpsL:781560:781934;AMINO=Lys88Gln;RES=streptomycin_(SM)_amikacin_(AMK)_kanamycin_(KAN)_capreomycin_(CPR) +M.tuberculosis_H37Rv 781822 . a g . . REG=coding;SVTYPE=SNP;GENE=Rv0682:rpsL:781560:781934;AMINO=Lys88Arg;RES=streptomycin_(SM)_amikacin_(AMK)_kanamycin_(KAN)_capreomycin_(CPR) +M.tuberculosis_H37Rv 801268 . t c . . REG=coding;SVTYPE=SNP;GENE=Rv0701:rplC:800809:801462;AMINO=Cys154Arg;RES=linezolid_(LZD) +M.tuberculosis_H37Rv 1128814 . g a . . REG=coding;SVTYPE=SNP;GENE=Rv1009:rpfB:1128091:1129179;AMINO=Glu242Lys;RES=phylo_(EAI_Manila) +M.tuberculosis_H37Rv 1128825 . c t . . REG=coding;SVTYPE=SNP;GENE=Rv1009:rpfB:1128091:1129179;AMINO=Gly245Gly;RES=phylo_(M._microti,_M._pinipedii) +M.tuberculosis_H37Rv 1128915 . g c . . REG=coding;SVTYPE=SNP;GENE=Rv1009:rpfB:1128091:1129179;AMINO=Glu275Asp;RES=phylo_(M._canettii) +M.tuberculosis_H37Rv 1128935 . g a . . REG=coding;SVTYPE=SNP;GENE=Rv1009:rpfB:1128091:1129179;AMINO=Gly282Glu;RES=phylo_(M._bovis,_M._caprae) +M.tuberculosis_H37Rv 1129124 . t a . . REG=coding;SVTYPE=SNP;GENE=Rv1009:rpfB:1128091:1129179;AMINO=Leu345Gln;RES=phylo_(M._canettii) +M.tuberculosis_H37Rv 1129128 . t c . . REG=coding;SVTYPE=SNP;GENE=Rv1009:rpfB:1128091:1129179;AMINO=Arg346Arg;RES=phylo_(M._canettii) +M.tuberculosis_H37Rv 1129160 . c t . . REG=coding;SVTYPE=SNP;GENE=Rv1009:rpfB:1128091:1129179;AMINO=Ala357Val;RES=phylo_(M._bovis) +M.tuberculosis_H37Rv 1129165 . g a . . REG=coding;SVTYPE=SNP;GENE=Rv1009:rpfB:1128091:1129179;AMINO=Ala359Thr;RES=phylo_(TUR) +M.tuberculosis_H37Rv 1416212 . a g . . REG=coding;SVTYPE=SNP;GENE=Rv1267c:embR:1417347:1416181;AMINO=Gln379Arg;RES=ethambutol_(EMB) +M.tuberculosis_H37Rv 1417019 . g a . . REG=coding;SVTYPE=SNP;GENE=Rv1267c:embR:1417347:1416181;AMINO=Cys110Tyr;RES=ethambutol_(EMB) +M.tuberculosis_H37Rv 1461251 . g t . . REG=coding;SVTYPE=SNP;GENE=Rv1305:atpE:1461045:1461290;AMINO=Ala69Ala;RES=phylo_(West_African_2) +M.tuberculosis_H37Rv 1471851 . t g . . REG=ribosomal;SVTYPE=SNP;GENE=Rvnr01:rrs:1471846:1473382;AMINO=---;RES=phylo_(M._canettii) +M.tuberculosis_H37Rv 1473079 . g a . . REG=ribosomal;SVTYPE=SNP;GENE=Rvnr01:rrs:1471846:1473382;AMINO=---;RES=phylo_(M._microti) +M.tuberculosis_H37Rv 1473094 . t c . . REG=ribosomal;SVTYPE=SNP;GENE=Rvnr01:rrs:1471846:1473382;AMINO=---;RES=phylo_(M._pinipedii) +M.tuberculosis_H37Rv 1473246 . a g . . REG=ribosomal;SVTYPE=SNP;GENE=Rvnr01:rrs:1471846:1473382;AMINO=---;RES=streptomycin_(SM)_amikacin_(AMK)_kanamycin_(KAN)_capreomycin_(CPR) +M.tuberculosis_H37Rv 1473247 . c t . . REG=ribosomal;SVTYPE=SNP;GENE=Rvnr01:rrs:1471846:1473382;AMINO=---;RES=streptomycin_(SM)_amikacin_(AMK)_kanamycin_(KAN)_capreomycin_(CPR) +M.tuberculosis_H37Rv 1473329 . g t . . REG=ribosomal;SVTYPE=SNP;GENE=Rvnr01:rrs:1471846:1473382;AMINO=---;RES=streptomycin_(SM)_amikacin_(AMK)_kanamycin_(KAN)_capreomycin_(CPR) +M.tuberculosis_H37Rv 1475956 . g t . . REG=ribosomal;SVTYPE=SNP;GENE=Rvnr02:rrl:1473658:1476795;AMINO=---;RES=linezolid_(LZD) +M.tuberculosis_H37Rv 1476471 . g t . . REG=ribosomal;SVTYPE=SNP;GENE=Rvnr02:rrl:1473658:1476795;AMINO=---;RES=linezolid_(LZD) +M.tuberculosis_H37Rv 1673338 . g a . . REG=intergenic;SVTYPE=SNP;GENE=Rv1484:fabG1:1673440:1674183;AMINO=---;RES=phylo_(West_African_1a,_West_African_1b) +M.tuberculosis_H37Rv 1673393 . g c . . REG=intergenic;SVTYPE=SNP;GENE=Rv1484:fabG1:1673440:1674183;AMINO=---;RES=isoniazid_(INH) +M.tuberculosis_H37Rv 1673406 . c t . . REG=intergenic;SVTYPE=SNP;GENE=Rv1484:fabG1:1673440:1674183;AMINO=---;RES=isoniazid_(INH) +M.tuberculosis_H37Rv 1673423 . g t . . REG=intergenic;SVTYPE=SNP;GENE=Rv1484:fabG1:1673440:1674183;AMINO=---;RES=isoniazid_(INH) +M.tuberculosis_H37Rv 1673424 . a g . . REG=intergenic;SVTYPE=SNP;GENE=Rv1484:fabG1:1673440:1674183;AMINO=---;RES=isoniazid_(INH) +M.tuberculosis_H37Rv 1673425 . c t . . REG=intergenic;SVTYPE=SNP;GENE=Rv1484:fabG1:1673440:1674183;AMINO=---;RES=isoniazid_(INH) +M.tuberculosis_H37Rv 1673431 . g a . . REG=intergenic;SVTYPE=SNP;GENE=Rv1484:fabG1:1673440:1674183;AMINO=---;RES=isoniazid_(INH) +M.tuberculosis_H37Rv 1673432 . t a . . REG=intergenic;SVTYPE=SNP;GENE=Rv1484:fabG1:1673440:1674183;AMINO=---;RES=isoniazid_(INH) +M.tuberculosis_H37Rv 1673432 . t c . . REG=intergenic;SVTYPE=SNP;GENE=Rv1484:fabG1:1673440:1674183;AMINO=---;RES=isoniazid_(INH) +M.tuberculosis_H37Rv 1674434 . t c . . REG=coding;SVTYPE=SNP;GENE=Rv1484:inhA:1674202:1675011;AMINO=Val78Ala;RES=phylo_(West_African_2) +M.tuberculosis_H37Rv 1674520 . c t . . REG=coding;SVTYPE=SNP;GENE=Rv1484:inhA:1674202:1675011;AMINO=Pro107Ser;RES=phylo_(M._pinipedii) +M.tuberculosis_H37Rv 1674782 . t c . . REG=coding;SVTYPE=SNP;GENE=Rv1484:inhA:1674202:1675011;AMINO=Ile194Thr;RES=isoniazid_(INH) +M.tuberculosis_H37Rv 1674816 . t c . . REG=coding;SVTYPE=SNP;GENE=Rv1484:inhA:1674202:1675011;AMINO=Gly205Gly;RES=phylo_(M._canettii) +M.tuberculosis_H37Rv 1816848 . g t . . REG=coding;SVTYPE=SNP;GENE=Rv1617:pykA:1816189:1817607;AMINO=Glu220Asp;RES=phylo_(M._africanum,_M._caprae,_M._microti,_M._pinipedii) +M.tuberculosis_H37Rv 1833554 . a g . . REG=coding;SVTYPE=SNP;GENE=Rv1630:rpsA:1833542:1834987;AMINO=Thr5Ala;RES=phylo_(M._canettii) +M.tuberculosis_H37Rv 1833568 . g c . . REG=coding;SVTYPE=SNP;GENE=Rv1630:rpsA:1833542:1834987;AMINO=Pro9Pro;RES=phylo_(M._canettii) +M.tuberculosis_H37Rv 1833909 . a c . . REG=coding;SVTYPE=SNP;GENE=Rv1630:rpsA:1833542:1834987;AMINO=Asp123Ala;RES=pyrazinamide_(PZA) +M.tuberculosis_H37Rv 1834169 . a g . . REG=coding;SVTYPE=SNP;GENE=Rv1630:rpsA:1833542:1834987;AMINO=Thr210Ala;RES=phylo_(M._canettii) +M.tuberculosis_H37Rv 1834177 . a c . . REG=coding;SVTYPE=SNP;GENE=Rv1630:rpsA:1833542:1834987;AMINO=Arg212Arg;RES=phylo_(Beijing) +M.tuberculosis_H37Rv 1834325 . g a . . REG=coding;SVTYPE=SNP;GENE=Rv1630:rpsA:1833542:1834987;AMINO=Val262Met;RES=pyrazinamide_(PZA) +M.tuberculosis_H37Rv 1834859 . g a . . REG=coding;SVTYPE=SNP;GENE=Rv1630:rpsA:1833542:1834987;AMINO=Ala440Thr;RES=phylo_(M._bovis,_M._caprae) +M.tuberculosis_H37Rv 1834912 . a g . . REG=coding;SVTYPE=SNP;GENE=Rv1630:rpsA:1833542:1834987;AMINO=Glu457Glu;RES=phylo_(M._canettii) +M.tuberculosis_H37Rv 1917946 . c t . . REG=coding;SVTYPE=SNP;GENE=Rv1694:tlyA:1917940:1918746;AMINO=Arg3STOP;RES=streptomycin_(SM)_amikacin_(AMK)_kanamycin_(KAN)_capreomycin_(CPR) +M.tuberculosis_H37Rv 1917979 . c t . . REG=coding;SVTYPE=SNP;GENE=Rv1694:tlyA:1917940:1918746;AMINO=Arg14Trp;RES=streptomycin_(SM)_amikacin_(AMK)_kanamycin_(KAN)_capreomycin_(CPR) +M.tuberculosis_H37Rv 1917991 . c t . . REG=coding;SVTYPE=SNP;GENE=Rv1694:tlyA:1917940:1918746;AMINO=Arg18STOP;RES=streptomycin_(SM)_amikacin_(AMK)_kanamycin_(KAN)_capreomycin_(CPR) +M.tuberculosis_H37Rv 1918003 . c t . . REG=coding;SVTYPE=SNP;GENE=Rv1694:tlyA:1917940:1918746;AMINO=Gln22STOP;RES=streptomycin_(SM)_amikacin_(AMK)_kanamycin_(KAN)_capreomycin_(CPR) +M.tuberculosis_H37Rv 1918125 . g a . . REG=coding;SVTYPE=SNP;GENE=Rv1694:tlyA:1917940:1918746;AMINO=Trp62STOP;RES=streptomycin_(SM)_amikacin_(AMK)_kanamycin_(KAN)_capreomycin_(CPR) +M.tuberculosis_H37Rv 1918135 . g c . . REG=coding;SVTYPE=SNP;GENE=Rv1694:tlyA:1917940:1918746;AMINO=Gly66Arg;RES=streptomycin_(SM)_amikacin_(AMK)_kanamycin_(KAN)_capreomycin_(CPR) +M.tuberculosis_H37Rv 1918135 . g c . . REG=coding;SVTYPE=SNP;GENE=Rv1694:tlyA:1917940:1918746;AMINO=Gly66Arg;RES=streptomycin_(SM)_amikacin_(AMK)_kanamycin_(KAN)_capreomycin_(CPR) +M.tuberculosis_H37Rv 1918136 . g a . . REG=coding;SVTYPE=SNP;GENE=Rv1694:tlyA:1917940:1918746;AMINO=Gly66Glu;RES=streptomycin_(SM)_amikacin_(AMK)_kanamycin_(KAN)_capreomycin_(CPR) +M.tuberculosis_H37Rv 1918139 . c a . . REG=coding;SVTYPE=SNP;GENE=Rv1694:tlyA:1917940:1918746;AMINO=Ala67Glu;RES=streptomycin_(SM)_amikacin_(AMK)_kanamycin_(KAN)_capreomycin_(CPR) +M.tuberculosis_H37Rv 1918144 . a g . . REG=coding;SVTYPE=SNP;GENE=Rv1694:tlyA:1917940:1918746;AMINO=Lys69Glu;RES=streptomycin_(SM)_amikacin_(AMK)_kanamycin_(KAN)_capreomycin_(CPR) +M.tuberculosis_H37Rv 1918202 . a g . . REG=coding;SVTYPE=SNP;GENE=Rv1694:tlyA:1917940:1918746;AMINO=Asp88Gly;RES=streptomycin_(SM)_amikacin_(AMK)_kanamycin_(KAN)_capreomycin_(CPR) +M.tuberculosis_H37Rv 1918211 . c a . . REG=coding;SVTYPE=SNP;GENE=Rv1694:tlyA:1917940:1918746;AMINO=Ala91Glu;RES=streptomycin_(SM)_amikacin_(AMK)_kanamycin_(KAN)_capreomycin_(CPR) +M.tuberculosis_H37Rv 1918213 . t c . . REG=coding;SVTYPE=SNP;GENE=Rv1694:tlyA:1917940:1918746;AMINO=Ser92Pro;RES=streptomycin_(SM)_amikacin_(AMK)_kanamycin_(KAN)_capreomycin_(CPR) +M.tuberculosis_H37Rv 1918219 . g t . . REG=coding;SVTYPE=SNP;GENE=Rv1694:tlyA:1917940:1918746;AMINO=Gly94Cys;RES=streptomycin_(SM)_amikacin_(AMK)_kanamycin_(KAN)_capreomycin_(CPR) +M.tuberculosis_H37Rv 1918219 . g a . . REG=coding;SVTYPE=SNP;GENE=Rv1694:tlyA:1917940:1918746;AMINO=Gly94Ser;RES=streptomycin_(SM)_amikacin_(AMK)_kanamycin_(KAN)_capreomycin_(CPR) +M.tuberculosis_H37Rv 1918220 . g a . . REG=coding;SVTYPE=SNP;GENE=Rv1694:tlyA:1917940:1918746;AMINO=Gly94Asp;RES=streptomycin_(SM)_amikacin_(AMK)_kanamycin_(KAN)_capreomycin_(CPR) +M.tuberculosis_H37Rv 1918292 . t c . . REG=coding;SVTYPE=SNP;GENE=Rv1694:tlyA:1917940:1918746;AMINO=Leu118Pro;RES=streptomycin_(SM)_amikacin_(AMK)_kanamycin_(KAN)_capreomycin_(CPR) +M.tuberculosis_H37Rv 1918292 . t g . . REG=coding;SVTYPE=SNP;GENE=Rv1694:tlyA:1917940:1918746;AMINO=Leu118Arg;RES=streptomycin_(SM)_amikacin_(AMK)_kanamycin_(KAN)_capreomycin_(CPR) +M.tuberculosis_H37Rv 1918322 . t a . . REG=coding;SVTYPE=SNP;GENE=Rv1694:tlyA:1917940:1918746;AMINO=Val128Glu;RES=streptomycin_(SM)_amikacin_(AMK)_kanamycin_(KAN)_capreomycin_(CPR) +M.tuberculosis_H37Rv 1918388 . t c . . REG=coding;SVTYPE=SNP;GENE=Rv1694:tlyA:1917940:1918746;AMINO=Leu150Pro;RES=streptomycin_(SM)_amikacin_(AMK)_kanamycin_(KAN)_capreomycin_(CPR) +M.tuberculosis_H37Rv 1918418 . t g . . REG=coding;SVTYPE=SNP;GENE=Rv1694:tlyA:1917940:1918746;AMINO=Leu160Trp;RES=streptomycin_(SM)_amikacin_(AMK)_kanamycin_(KAN)_capreomycin_(CPR) +M.tuberculosis_H37Rv 1918478 . t g . . REG=coding;SVTYPE=SNP;GENE=Rv1694:tlyA:1917940:1918746;AMINO=Leu180Arg;RES=streptomycin_(SM)_amikacin_(AMK)_kanamycin_(KAN)_capreomycin_(CPR) +M.tuberculosis_H37Rv 1918478 . t c . . REG=coding;SVTYPE=SNP;GENE=Rv1694:tlyA:1917940:1918746;AMINO=Leu180Pro;RES=streptomycin_(SM)_amikacin_(AMK)_kanamycin_(KAN)_capreomycin_(CPR) +M.tuberculosis_H37Rv 1918487 . c t . . REG=coding;SVTYPE=SNP;GENE=Rv1694:tlyA:1917940:1918746;AMINO=Pro183Leu;RES=streptomycin_(SM)_amikacin_(AMK)_kanamycin_(KAN)_capreomycin_(CPR) +M.tuberculosis_H37Rv 1918489 . c a . . REG=coding;SVTYPE=SNP;GENE=Rv1694:tlyA:1917940:1918746;AMINO=Gln184Lys;RES=streptomycin_(SM)_amikacin_(AMK)_kanamycin_(KAN)_capreomycin_(CPR) +M.tuberculosis_H37Rv 1918489 . c t . . REG=coding;SVTYPE=SNP;GENE=Rv1694:tlyA:1917940:1918746;AMINO=Gln184STOP;RES=streptomycin_(SM)_amikacin_(AMK)_kanamycin_(KAN)_capreomycin_(CPR) +M.tuberculosis_H37Rv 1918494 . t g . . REG=coding;SVTYPE=SNP;GENE=Rv1694:tlyA:1917940:1918746;AMINO=Phe185Leu;RES=streptomycin_(SM)_amikacin_(AMK)_kanamycin_(KAN)_capreomycin_(CPR) +M.tuberculosis_H37Rv 1918651 . g a . . REG=coding;SVTYPE=SNP;GENE=Rv1694:tlyA:1917940:1918746;AMINO=Glu238Lys;RES=streptomycin_(SM)_amikacin_(AMK)_kanamycin_(KAN)_capreomycin_(CPR) +M.tuberculosis_H37Rv 1918661 . t c . . REG=coding;SVTYPE=SNP;GENE=Rv1694:tlyA:1917940:1918746;AMINO=Leu241Pro;RES=streptomycin_(SM)_amikacin_(AMK)_kanamycin_(KAN)_capreomycin_(CPR) +M.tuberculosis_H37Rv 2053454 . g a . . REG=coding;SVTYPE=SNP;GENE=Rv1811:mgtC:2053443:2054147;AMINO=Leu4Leu;RES=phylo_(Ural) +M.tuberculosis_H37Rv 2053487 . c t . . REG=coding;SVTYPE=SNP;GENE=Rv1811:mgtC:2053443:2054147;AMINO=Val15Val;RES=phylo_(M._canettii) +M.tuberculosis_H37Rv 2053682 . c t . . REG=coding;SVTYPE=SNP;GENE=Rv1811:mgtC:2053443:2054147;AMINO=Ile80Ile;RES=phylo_(LAM) +M.tuberculosis_H37Rv 2053726 . c t . . REG=coding;SVTYPE=SNP;GENE=Rv1811:mgtC:2053443:2054147;AMINO=Thr95Met;RES=phylo_(West_African_1b) +M.tuberculosis_H37Rv 2053762 . c t . . REG=coding;SVTYPE=SNP;GENE=Rv1811:mgtC:2053443:2054147;AMINO=Ala107Val;RES=phylo_(West_African_2) +M.tuberculosis_H37Rv 2053987 . g a . . REG=coding;SVTYPE=SNP;GENE=Rv1811:mgtC:2053443:2054147;AMINO=Arg182His;RES=phylo_(Haarlem) +M.tuberculosis_H37Rv 2102240 . g a . . REG=coding;SVTYPE=SNP;GENE=Rv1854c:ndh:2103042:2101651;AMINO=Arg268His;RES=isoniazid_(INH) +M.tuberculosis_H37Rv 2102715 . a g . . REG=coding;SVTYPE=SNP;GENE=Rv1854c:ndh:2103042:2101651;AMINO=Thr110Ala;RES=isoniazid_(INH) +M.tuberculosis_H37Rv 2134258 . c t . . REG=coding;SVTYPE=SNP;GENE=Rv1884c:rpfC:2134261:2133731;AMINO=His2Tyr;RES=phylo_(M._canettii) +M.tuberculosis_H37Rv 2154445 . c a . . REG=coding;SVTYPE=SNP;GENE=Rv1908c:katG:2156111:2153889;AMINO=Ala556Glu;RES=isoniazid_(INH) +M.tuberculosis_H37Rv 2154682 . g a . . REG=coding;SVTYPE=SNP;GENE=Rv1908c:katG:2156111:2153889;AMINO=Trp477STOP;RES=isoniazid_(INH) +M.tuberculosis_H37Rv 2154700 . a g . . REG=coding;SVTYPE=SNP;GENE=Rv1908c:katG:2156111:2153889;AMINO=Gln471Arg;RES=isoniazid_(INH) +M.tuberculosis_H37Rv 2154724 . g t . . REG=coding;SVTYPE=SNP;GENE=Rv1908c:katG:2156111:2153889;AMINO=Arg463Leu;RES=phylo_(not_Euro-American,_M._africanum,_M._bovis,_M_._canettii,_M._caprae,_M._Microti,_M._pinipedii,_Beijing,_Delhi/CAS,_EAI) +M.tuberculosis_H37Rv 2155167 . gc ca . . REG=coding;SVTYPE=SNP;GENE=Rv1908c:katG:2156111:2153889;AMINO=Ser315Thr;RES=isoniazid_(INH) +M.tuberculosis_H37Rv 2155168 . g c . . REG=coding;SVTYPE=SNP;GENE=Rv1908c:katG:2156111:2153889;AMINO=Ser315Thr;RES=isoniazid_(INH) +M.tuberculosis_H37Rv 2155168 . g a . . REG=coding;SVTYPE=SNP;GENE=Rv1908c:katG:2156111:2153889;AMINO=Ser315Asn;RES=isoniazid_(INH) +M.tuberculosis_H37Rv 2155168 . g t . . REG=coding;SVTYPE=SNP;GENE=Rv1908c:katG:2156111:2153889;AMINO=Ser315Ile;RES=isoniazid_(INH) +M.tuberculosis_H37Rv 2155169 . a g . . REG=coding;SVTYPE=SNP;GENE=Rv1908c:katG:2156111:2153889;AMINO=Ser315Gly;RES=isoniazid_(INH) +M.tuberculosis_H37Rv 2155206 . c g . . REG=coding;SVTYPE=SNP;GENE=Rv1908c:katG:2156111:2153889;AMINO=Ser302Arg;RES=isoniazid_(INH) +M.tuberculosis_H37Rv 2155211 . a t . . REG=coding;SVTYPE=SNP;GENE=Rv1908c:katG:2156111:2153889;AMINO=Lys301STOP;RES=isoniazid_(INH) +M.tuberculosis_H37Rv 2155212 . g c . . REG=coding;SVTYPE=SNP;GENE=Rv1908c:katG:2156111:2153889;AMINO=Trp300Cys;RES=isoniazid_(INH) +M.tuberculosis_H37Rv 2155222 . g t . . REG=coding;SVTYPE=SNP;GENE=Rv1908c:katG:2156111:2153889;AMINO=Gly297Val;RES=isoniazid_(INH) +M.tuberculosis_H37Rv 2155234 . t c . . REG=coding;SVTYPE=SNP;GENE=Rv1908c:katG:2156111:2153889;AMINO=Leu293Pro;RES=isoniazid_(INH) +M.tuberculosis_H37Rv 2155241 . g a . . REG=coding;SVTYPE=SNP;GENE=Rv1908c:katG:2156111:2153889;AMINO=Ala291Thr;RES=isoniazid_(INH) +M.tuberculosis_H37Rv 2155306 . g a . . REG=coding;SVTYPE=SNP;GENE=Rv1908c:katG:2156111:2153889;AMINO=Gly269Asp;RES=isoniazid_(INH) +M.tuberculosis_H37Rv 2155688 . g a . . REG=coding;SVTYPE=SNP;GENE=Rv1908c:katG:2156111:2153889;AMINO=Asp142Asn;RES=isoniazid_(INH) +M.tuberculosis_H37Rv 2155699 . a g . . REG=coding;SVTYPE=SNP;GENE=Rv1908c:katG:2156111:2153889;AMINO=Asn138Ser;RES=isoniazid_(INH) +M.tuberculosis_H37Rv 2223896 . t c . . REG=coding;SVTYPE=SNP;GENE=Rv1980c:mpt64:2224029:2223343;AMINO=Met45Thr;RES=phylo_(M._canettii) +M.tuberculosis_H37Rv 2223902 . t a . . REG=coding;SVTYPE=SNP;GENE=Rv1980c:mpt64:2224029:2223343;AMINO=Ile43Asn;RES=phylo_(West_African_1a,_West_African_1b) +M.tuberculosis_H37Rv 2279228 . g t . . REG=coding;SVTYPE=SNP;GENE=Rv2032:acg:2279129:2280124;AMINO=Ala34Ser;RES=phylo_(M._caprae) +M.tuberculosis_H37Rv 2279314 . g c . . REG=coding;SVTYPE=SNP;GENE=Rv2032:acg:2279129:2280124;AMINO=Gly62Gly;RES=phylo_(M._canettii) +M.tuberculosis_H37Rv 2280081 . c t . . REG=coding;SVTYPE=SNP;GENE=Rv2032:acg:2279129:2280124;AMINO=Pro318Leu;RES=phylo_(M._bovis,_M._caprae) +M.tuberculosis_H37Rv 2288686 . c t . . REG=coding;SVTYPE=SNP;GENE=Rv2043c:pncA:2289241:2288681;AMINO=Thr186Ile;RES=pyrazinamide_(PZA) +M.tuberculosis_H37Rv 2288717 . g a . . REG=coding;SVTYPE=SNP;GENE=Rv2043c:pncA:2289241:2288681;AMINO=Met175Ile;RES=pyrazinamide_(PZA) +M.tuberculosis_H37Rv 2288718 . t c . . REG=coding;SVTYPE=SNP;GENE=Rv2043c:pncA:2289241:2288681;AMINO=Met175Thr;RES=pyrazinamide_(PZA) +M.tuberculosis_H37Rv 2288727 . t c . . REG=coding;SVTYPE=SNP;GENE=Rv2043c:pncA:2289241:2288681;AMINO=Leu172Pro;RES=pyrazinamide_(PZA) +M.tuberculosis_H37Rv 2288730 . c t . . REG=coding;SVTYPE=SNP;GENE=Rv2043c:pncA:2289241:2288681;AMINO=Ala171Val;RES=pyrazinamide_(PZA) +M.tuberculosis_H37Rv 2288754 . t c . . REG=coding;SVTYPE=SNP;GENE=Rv2043c:pncA:2289241:2288681;AMINO=Val163Ala;RES=pyrazinamide_(PZA) +M.tuberculosis_H37Rv 2288757 . g a . . REG=coding;SVTYPE=SNP;GENE=Rv2043c:pncA:2289241:2288681;AMINO=Gly162Asp;RES=pyrazinamide_(PZA) +M.tuberculosis_H37Rv 2288766 . t g . . REG=coding;SVTYPE=SNP;GENE=Rv2043c:pncA:2289241:2288681;AMINO=Leu159Arg;RES=pyrazinamide_(PZA) +M.tuberculosis_H37Rv 2288767 . c g . . REG=coding;SVTYPE=SNP;GENE=Rv2043c:pncA:2289241:2288681;AMINO=Leu159Val;RES=pyrazinamide_(PZA) +M.tuberculosis_H37Rv 2288782 . a g . . REG=coding;SVTYPE=SNP;GENE=Rv2043c:pncA:2289241:2288681;AMINO=Arg154Gly;RES=pyrazinamide_(PZA) +M.tuberculosis_H37Rv 2288790 . t c . . REG=coding;SVTYPE=SNP;GENE=Rv2043c:pncA:2289241:2288681;AMINO=Leu151Ser;RES=pyrazinamide_(PZA) +M.tuberculosis_H37Rv 2288805 . c a . . REG=coding;SVTYPE=SNP;GENE=Rv2043c:pncA:2289241:2288681;AMINO=Ala146Glu;RES=pyrazinamide_(PZA) +M.tuberculosis_H37Rv 2288815 . g a . . REG=coding;SVTYPE=SNP;GENE=Rv2043c:pncA:2289241:2288681;AMINO=Ala143Thr;RES=pyrazinamide_(PZA) +M.tuberculosis_H37Rv 2288820 . a c . . REG=coding;SVTYPE=SNP;GENE=Rv2043c:pncA:2289241:2288681;AMINO=Gln141Pro;RES=pyrazinamide_(PZA) +M.tuberculosis_H37Rv 2288821 . c t . . REG=coding;SVTYPE=SNP;GENE=Rv2043c:pncA:2289241:2288681;AMINO=Gln141STOP;RES=pyrazinamide_(PZA) +M.tuberculosis_H37Rv 2288832 . a g . . REG=coding;SVTYPE=SNP;GENE=Rv2043c:pncA:2289241:2288681;AMINO=His137Cys;RES=pyrazinamide_(PZA) +M.tuberculosis_H37Rv 2288844 . t c . . REG=coding;SVTYPE=SNP;GENE=Rv2043c:pncA:2289241:2288681;AMINO=Ile133Thr;RES=pyrazinamide_(PZA) +M.tuberculosis_H37Rv 2288848 . g a . . REG=coding;SVTYPE=SNP;GENE=Rv2043c:pncA:2289241:2288681;AMINO=Gly132Ser;RES=pyrazinamide_(PZA) +M.tuberculosis_H37Rv 2288859 . t g . . REG=coding;SVTYPE=SNP;GENE=Rv2043c:pncA:2289241:2288681;AMINO=Val128Gly;RES=pyrazinamide_(PZA) +M.tuberculosis_H37Rv 2288860 . g t . . REG=coding;SVTYPE=SNP;GENE=Rv2043c:pncA:2289241:2288681;AMINO=Val128Phe;RES=pyrazinamide_(PZA) +M.tuberculosis_H37Rv 2288868 . t g . . REG=coding;SVTYPE=SNP;GENE=Rv2043c:pncA:2289241:2288681;AMINO=Val125Gly;RES=pyrazinamide_(PZA) +M.tuberculosis_H37Rv 2288883 . t a . . REG=coding;SVTYPE=SNP;GENE=Rv2043c:pncA:2289241:2288681;AMINO=Leu120Gln;RES=pyrazinamide_(PZA) +M.tuberculosis_H37Rv 2288883 . t c . . REG=coding;SVTYPE=SNP;GENE=Rv2043c:pncA:2289241:2288681;AMINO=Leu120Arg;RES=pyrazinamide_(PZA) +M.tuberculosis_H37Rv 2288885 . g a . . REG=coding;SVTYPE=SNP;GENE=Rv2043c:pncA:2289241:2288681;AMINO=Trp119STOP;RES=pyrazinamide_(PZA) +M.tuberculosis_H37Rv 2288885 . g t . . REG=coding;SVTYPE=SNP;GENE=Rv2043c:pncA:2289241:2288681;AMINO=Trp119Cys;RES=pyrazinamide_(PZA) +M.tuberculosis_H37Rv 2288902 . a c . . REG=coding;SVTYPE=SNP;GENE=Rv2043c:pncA:2289241:2288681;AMINO=Thr114Pro;RES=pyrazinamide_(PZA) +M.tuberculosis_H37Rv 2288944 . a c . . REG=coding;SVTYPE=SNP;GENE=Rv2043c:pncA:2289241:2288681;AMINO=Thr100Pro;RES=pyrazinamide_(PZA) +M.tuberculosis_H37Rv 2288953 . g a . . REG=coding;SVTYPE=SNP;GENE=Rv2043c:pncA:2289241:2288681;AMINO=Gly97Ser;RES=pyrazinamide_(PZA) +M.tuberculosis_H37Rv 2288953 . g t . . REG=coding;SVTYPE=SNP;GENE=Rv2043c:pncA:2289241:2288681;AMINO=Gly97Cys;RES=pyrazinamide_(PZA) +M.tuberculosis_H37Rv 2288961 . t g . . REG=coding;SVTYPE=SNP;GENE=Rv2043c:pncA:2289241:2288681;AMINO=Phe94Cys;RES=pyrazinamide_(PZA) +M.tuberculosis_H37Rv 2288988 . t c . . REG=coding;SVTYPE=SNP;GENE=Rv2043c:pncA:2289241:2288681;AMINO=Leu85Pro;RES=pyrazinamide_(PZA) +M.tuberculosis_H37Rv 2288998 . c g . . REG=coding;SVTYPE=SNP;GENE=Rv2043c:pncA:2289241:2288681;AMINO=His82Asp;RES=pyrazinamide_(PZA) +M.tuberculosis_H37Rv 2289001 . t g . . REG=coding;SVTYPE=SNP;GENE=Rv2043c:pncA:2289241:2288681;AMINO=Phe81Val;RES=pyrazinamide_(PZA) +M.tuberculosis_H37Rv 2289016 . a c . . REG=coding;SVTYPE=SNP;GENE=Rv2043c:pncA:2289241:2288681;AMINO=Thr76Pro;RES=pyrazinamide_(PZA) +M.tuberculosis_H37Rv 2289029 . t a . . REG=coding;SVTYPE=SNP;GENE=Rv2043c:pncA:2289241:2288681;AMINO=His71Gln;RES=pyrazinamide_(PZA) +M.tuberculosis_H37Rv 2289031 . c t . . REG=coding;SVTYPE=SNP;GENE=Rv2043c:pncA:2289241:2288681;AMINO=His71Tyr;RES=pyrazinamide_(PZA) +M.tuberculosis_H37Rv 2289040 . t c . . REG=coding;SVTYPE=SNP;GENE=Rv2043c:pncA:2289241:2288681;AMINO=Trp68Arg;RES=pyrazinamide_(PZA) +M.tuberculosis_H37Rv 2289047 . c t . . REG=coding;SVTYPE=SNP;GENE=Rv2043c:pncA:2289241:2288681;AMINO=Ser65Ser;RES=phylo_(Delhi/CAS) +M.tuberculosis_H37Rv 2289054 . a g . . REG=coding;SVTYPE=SNP;GENE=Rv2043c:pncA:2289241:2288681;AMINO=Asp63Gly;RES=pyrazinamide_(PZA) +M.tuberculosis_H37Rv 2289057 . c t . . REG=coding;SVTYPE=SNP;GENE=Rv2043c:pncA:2289241:2288681;AMINO=Pro62Leu;RES=pyrazinamide_(PZA) +M.tuberculosis_H37Rv 2289072 . a g . . REG=coding;SVTYPE=SNP;GENE=Rv2043c:pncA:2289241:2288681;AMINO=His57Arg;RES=pyrazinamide_(PZA) +M.tuberculosis_H37Rv 2289073 . c t . . REG=coding;SVTYPE=SNP;GENE=Rv2043c:pncA:2289241:2288681;AMINO=His57Tyr;RES=pyrazinamide_(PZA) +M.tuberculosis_H37Rv 2289073 . c g . . REG=coding;SVTYPE=SNP;GENE=Rv2043c:pncA:2289241:2288681;AMINO=His57Asp;RES=phylo_(M._bovis) +M.tuberculosis_H37Rv 2289081 . c a . . REG=coding;SVTYPE=SNP;GENE=Rv2043c:pncA:2289241:2288681;AMINO=Pro54Gln;RES=pyrazinamide_(PZA) +M.tuberculosis_H37Rv 2289081 . c t . . REG=coding;SVTYPE=SNP;GENE=Rv2043c:pncA:2289241:2288681;AMINO=Pro54Leu;RES=pyrazinamide_(PZA) +M.tuberculosis_H37Rv 2289081 . c g . . REG=coding;SVTYPE=SNP;GENE=Rv2043c:pncA:2289241:2288681;AMINO=Pro54Arg;RES=pyrazinamide_(PZA) +M.tuberculosis_H37Rv 2289091 . c g . . REG=coding;SVTYPE=SNP;GENE=Rv2043c:pncA:2289241:2288681;AMINO=His51Asp;RES=pyrazinamide_(PZA) +M.tuberculosis_H37Rv 2289096 . a g . . REG=coding;SVTYPE=SNP;GENE=Rv2043c:pncA:2289241:2288681;AMINO=Asp49Gly;RES=pyrazinamide_(PZA) +M.tuberculosis_H37Rv 2289099 . a g . . REG=coding;SVTYPE=SNP;GENE=Rv2043c:pncA:2289241:2288681;AMINO=Lys48Thr;RES=pyrazinamide_(PZA) +M.tuberculosis_H37Rv 2289100 . a g . . REG=coding;SVTYPE=SNP;GENE=Rv2043c:pncA:2289241:2288681;AMINO=Lys48Glu;RES=pyrazinamide_(PZA) +M.tuberculosis_H37Rv 2289104 . a g . . REG=coding;SVTYPE=SNP;GENE=Rv2043c:pncA:2289241:2288681;AMINO=Ala46Ala;RES=phylo_(M._canettii) +M.tuberculosis_H37Rv 2289108 . t c . . REG=coding;SVTYPE=SNP;GENE=Rv2043c:pncA:2289241:2288681;AMINO=Val45Ala;RES=pyrazinamide_(PZA) +M.tuberculosis_H37Rv 2289150 . t g . . REG=coding;SVTYPE=SNP;GENE=Rv2043c:pncA:2289241:2288681;AMINO=Ile31Ser;RES=pyrazinamide_(PZA) +M.tuberculosis_H37Rv 2289180 . t g . . REG=coding;SVTYPE=SNP;GENE=Rv2043c:pncA:2289241:2288681;AMINO=Val21Gly;RES=pyrazinamide_(PZA) +M.tuberculosis_H37Rv 2289204 . t c . . REG=coding;SVTYPE=SNP;GENE=Rv2043c:pncA:2289241:2288681;AMINO=Phe13Ser;RES=pyrazinamide_(PZA) +M.tuberculosis_H37Rv 2289208 . g a . . REG=coding;SVTYPE=SNP;GENE=Rv2043c:pncA:2289241:2288681;AMINO=Asp12Asn;RES=pyrazinamide_(PZA) +M.tuberculosis_H37Rv 2289213 . a c . . REG=coding;SVTYPE=SNP;GENE=Rv2043c:pncA:2289241:2288681;AMINO=Gln10Pro;RES=pyrazinamide_(PZA) +M.tuberculosis_H37Rv 2289213 . a g . . REG=coding;SVTYPE=SNP;GENE=Rv2043c:pncA:2289241:2288681;AMINO=Gln10Arg;RES=pyrazinamide_(PZA) +M.tuberculosis_H37Rv 2289218 . c a . . REG=coding;SVTYPE=SNP;GENE=Rv2043c:pncA:2289241:2288681;AMINO=Asp8Glu;RES=pyrazinamide_(PZA) +M.tuberculosis_H37Rv 2289239 . g a . . REG=coding;SVTYPE=SNP;GENE=Rv2043c:pncA:2289241:2288681;AMINO=Met1Ile;RES=pyrazinamide_(PZA) +M.tuberculosis_H37Rv 2289252 . a g . . REG=intergenic;SVTYPE=SNP;GENE=Rv2043c:pncA:2289241:2288681;AMINO=---;RES=pyrazinamide_(PZA) +M.tuberculosis_H37Rv 2715342 . g a . . REG=intergenic;SVTYPE=SNP;GENE=Rv2416c:eis:2715332:2714124;AMINO=---;RES=streptomycin_(SM)_amikacin_(AMK)_kanamycin_(KAN)_capreomycin_(CPR) +M.tuberculosis_H37Rv 2715346 . c t . . REG=intergenic;SVTYPE=SNP;GENE=Rv2416c:eis:2715332:2714124;AMINO=---;RES=streptomycin_(SM)_amikacin_(AMK)_kanamycin_(KAN)_capreomycin_(CPR) +M.tuberculosis_H37Rv 2726100 . g t . . REG=intergenic;SVTYPE=SNP;GENE=Rv2428:ahpC:2726193:2726780;AMINO=---;RES=isoniazid_(INH) +M.tuberculosis_H37Rv 2726105 . g a . . REG=intergenic;SVTYPE=SNP;GENE=Rv2428:ahpC:2726193:2726780;AMINO=---;RES=phylo_(Delhi/CAS) +M.tuberculosis_H37Rv 2726105 . g a . . REG=intergenic;SVTYPE=SNP;GENE=Rv2428:ahpC:2726193:2726780;AMINO=---;RES=phylo_(Delhi/CAS) +M.tuberculosis_H37Rv 2726112 . c t . . REG=intergenic;SVTYPE=SNP;GENE=Rv2428:ahpC:2726193:2726780;AMINO=---;RES=isoniazid_(INH) +M.tuberculosis_H37Rv 2726136 . c t . . REG=intergenic;SVTYPE=SNP;GENE=Rv2428:ahpC:2726193:2726780;AMINO=---;RES=isoniazid_(INH) +M.tuberculosis_H37Rv 2726145 . g a . . REG=intergenic;SVTYPE=SNP;GENE=Rv2428:ahpC:2726193:2726780;AMINO=---;RES=isoniazid_(INH) +M.tuberculosis_H37Rv 2751764 . g a . . REG=coding;SVTYPE=SNP;GENE=Rv2450c:rpfE:2752180:2751662;AMINO=Gly139Gly;RES=phylo_(M._canettii) +M.tuberculosis_H37Rv 2751866 . g a . . REG=coding;SVTYPE=SNP;GENE=Rv2450c:rpfE:2752180:2751662;AMINO=Ala105Ala;RES=phylo_(M._canettii) +M.tuberculosis_H37Rv 2752122 . c g . . REG=coding;SVTYPE=SNP;GENE=Rv2450c:rpfE:2752180:2751662;AMINO=Thr20Arg;RES=phylo_(Beijing) +M.tuberculosis_H37Rv 2752132 . t c . . REG=coding;SVTYPE=SNP;GENE=Rv2450c:rpfE:2752180:2751662;AMINO=Leu17Leu;RES=phylo_(West_African_1a,_West_African_1b) +M.tuberculosis_H37Rv 2936944 . c g . . REG=coding;SVTYPE=SNP;GENE=Rv2609c:0:2937865:2936810;AMINO=Gln308Glu;RES=phylo_(M._canettii) +M.tuberculosis_H37Rv 2939177 . t c . . REG=coding;SVTYPE=SNP;GENE=Rv2611c:0:2939962:2939012;AMINO=Tyr262Tyr;RES=phylo_(West_African_2) +M.tuberculosis_H37Rv 2939577 . t g . . REG=coding;SVTYPE=SNP;GENE=Rv2611c:0:2939962:2939012;AMINO=Leu129Arg;RES=phylo_(M._canettii) +M.tuberculosis_H37Rv 2939716 . t c . . REG=coding;SVTYPE=SNP;GENE=Rv2611c:0:2939962:2939012;AMINO=Cys83Arg;RES=phylo_(M._canettii) +M.tuberculosis_H37Rv 2940461 . t c . . REG=coding;SVTYPE=SNP;GENE=Rv2612c:pgsA1:2940612:2939959;AMINO=Met51Thr;RES=phylo_(M._canettii) +M.tuberculosis_H37Rv 2940562 . c t . . REG=coding;SVTYPE=SNP;GENE=Rv2612c:pgsA1:2940612:2939959;AMINO=Thr17Thr;RES=phylo_(M._canettii) +M.tuberculosis_H37Rv 2940608 . g a . . REG=coding;SVTYPE=SNP;GENE=Rv2612c:pgsA1:2940612:2939959;AMINO=Ser2Asn;RES=phylo_(EAI) +M.tuberculosis_H37Rv 2940930 . c t . . REG=coding;SVTYPE=SNP;GENE=Rv2613c:0:2941196:2940609;AMINO=Pro89Pro;RES=phylo_(M._canettii) +M.tuberculosis_H37Rv 2941179 . c t . . REG=coding;SVTYPE=SNP;GENE=Rv2613c:0:2941196:2940609;AMINO=Arg6Arg;RES=phylo_(Delhi/CAS) +M.tuberculosis_H37Rv 2955135 . a c . . REG=coding;SVTYPE=SNP;GENE=Rv2628:0:2955058:2955420;AMINO=Ile26Ile;RES=phylo_(M._canettii) +M.tuberculosis_H37Rv 2955202 . t g . . REG=coding;SVTYPE=SNP;GENE=Rv2628:0:2955058:2955420;AMINO=Ser49Ala;RES=phylo_(M._canettii) +M.tuberculosis_H37Rv 2955233 . c t . . REG=coding;SVTYPE=SNP;GENE=Rv2628:0:2955058:2955420;AMINO=Ser59Leu;RES=phylo_(M.africanum,_M._bovis,_M._canettii,_M._caprae,_M._microti,_M._pinipedii,_EAI) +M.tuberculosis_H37Rv 2955305 . t g . . REG=coding;SVTYPE=SNP;GENE=Rv2628:0:2955058:2955420;AMINO=Leu83Trp;RES=phylo_(M._microti,_M._pinipedii) +M.tuberculosis_H37Rv 2955310 . a g . . REG=coding;SVTYPE=SNP;GENE=Rv2628:0:2955058:2955420;AMINO=Thr85Ala;RES=phylo_(M._canettii) +M.tuberculosis_H37Rv 2955343 . g a . . REG=coding;SVTYPE=SNP;GENE=Rv2628:0:2955058:2955420;AMINO=Ala96Thr;RES=phylo_(West_African_1a,_West_African_1b) +M.tuberculosis_H37Rv 2955957 . a c . . REG=coding;SVTYPE=SNP;GENE=Rv2629:0:2955767:2956891;AMINO=Asp64Ala;RES=phylo_(Beijing) +M.tuberculosis_H37Rv 2956731 . c t . . REG=coding;SVTYPE=SNP;GENE=Rv2629:0:2955767:2956891;AMINO=Pro322Leu;RES=phylo_(Ghana) +M.tuberculosis_H37Rv 3073808 . c g . . REG=coding;SVTYPE=SNP;GENE=Rv2764c:thyA:3074471:3073680;AMINO=Arg222Gly;RES=para-aminosalicylic_acid_(PAS) +M.tuberculosis_H37Rv 3073868 . a g . . REG=coding;SVTYPE=SNP;GENE=Rv2764c:thyA:3074471:3073680;AMINO=Thr202Ala;RES=phylo_(LAM) +M.tuberculosis_H37Rv 3645524 . g a . . REG=coding;SVTYPE=SNP;GENE=Rv3264c:manB:3645977:3644898;AMINO=Asp152Asn;RES=ethambutol_(EMB) +M.tuberculosis_H37Rv 3646959 . c a . . REG=coding;SVTYPE=SNP;GENE=Rv3266c:rmlD:3647809:3646895;AMINO=Thr284Lys;RES=ethambutol_(EMB) +M.tuberculosis_H37Rv 3647041 . t c . . REG=coding;SVTYPE=SNP;GENE=Rv3266c:rmlD:3647809:3646895;AMINO=Ser257Pro;RES=ethambutol_(EMB) +M.tuberculosis_H37Rv 3986987 . g t . . REG=coding;SVTYPE=SNP;GENE=Rv3547:ddn:3986844:3987299;AMINO=Leu48Leu;RES=phylo_(West_African_1a,_West_African_1b) +M.tuberculosis_H37Rv 3987050 . c t . . REG=coding;SVTYPE=SNP;GENE=Rv3547:ddn:3986844:3987299;AMINO=Asp69Asp;RES=phylo_(M._canettii) +M.tuberculosis_H37Rv 3987111 . c g . . REG=coding;SVTYPE=SNP;GENE=Rv3547:ddn:3986844:3987299;AMINO=Leu90Val;RES=phylo_(M._microti,_M._pinipedii) +M.tuberculosis_H37Rv 3987180 . g a . . REG=coding;SVTYPE=SNP;GENE=Rv3547:ddn:3986844:3987299;AMINO=Asp113Asn;RES=phylo_(West_African_1a,_West_African_1b) +M.tuberculosis_H37Rv 3987287 . t c . . REG=coding;SVTYPE=SNP;GENE=Rv3547:ddn:3986844:3987299;AMINO=Val148Val;RES=phylo_(M._canettii) +M.tuberculosis_H37Rv 4240671 . c t . . REG=coding;SVTYPE=SNP;GENE=Rv3793:embC:4239863:4243147;AMINO=Thr270Ile;RES=phylo_(M._africanum,_M._bovis,_M._canettii,_M.caprae,_M._Microti,_M._pinipedii,_EAI) +M.tuberculosis_H37Rv 4241078 . a g . . REG=coding;SVTYPE=SNP;GENE=Rv3793:embC:4239863:4243147;AMINO=Ile406Val;RES=ethambutol_(EMB) +M.tuberculosis_H37Rv 4242075 . g a . . REG=coding;SVTYPE=SNP;GENE=Rv3793:embC:4239863:4243147;AMINO=Arg738Gln;RES=phylo_(Delhi/CAS) +M.tuberculosis_H37Rv 4242803 . g c . . REG=coding;SVTYPE=SNP;GENE=Rv3793:embC:4239863:4243147;AMINO=Val981Leu;RES=phylo_(Ghana,_Haarlem,_X-Type) +M.tuberculosis_H37Rv 4242970 . c t . . REG=coding;SVTYPE=SNP;GENE=Rv3793:embC:4239863:4243147;AMINO=Thr1036Thr;RES=phylo_(M._bovis,_M._caprae) +M.tuberculosis_H37Rv 4243221 . c t . . REG=intergenic;SVTYPE=SNP;GENE=Rv3794:embA:4243233:4246517;AMINO=---;RES=ethambutol_(EMB) +M.tuberculosis_H37Rv 4243225 . c a . . REG=intergenic;SVTYPE=SNP;GENE=Rv3794:embA:4243233:4246517;AMINO=---;RES=ethambutol_(EMB) +M.tuberculosis_H37Rv 4243242 . g a . . REG=coding;SVTYPE=SNP;GENE=Rv3794:embA:4243233:4246517;AMINO=Asp4Asn;RES=ethambutol_(EMB) +M.tuberculosis_H37Rv 4243245 . g a . . REG=coding;SVTYPE=SNP;GENE=Rv3794:embA:4243233:4246517;AMINO=Gly5Ser;RES=ethambutol_(EMB) +M.tuberculosis_H37Rv 4243377 . a c . . REG=coding;SVTYPE=SNP;GENE=Rv3794:embA:4243233:4246517;AMINO=Ser49Arg;RES=phylo_(M._canettii) +M.tuberculosis_H37Rv 4243460 . c t . . REG=coding;SVTYPE=SNP;GENE=Rv3794:embA:4243233:4246517;AMINO=Cys76Cys;RES=phylo_(Beijing) +M.tuberculosis_H37Rv 4243690 . t c . . REG=coding;SVTYPE=SNP;GENE=Rv3794:embA:4243233:4246517;AMINO=Met153Thr;RES=phylo_(M._canettii) +M.tuberculosis_H37Rv 4243833 . g a . . REG=coding;SVTYPE=SNP;GENE=Rv3794:embA:4243233:4246517;AMINO=Ala201Thr;RES=ethambutol_(EMB) +M.tuberculosis_H37Rv 4244193 . g a . . REG=coding;SVTYPE=SNP;GENE=Rv3794:embA:4243233:4246517;AMINO=Gly321Ser;RES=ethambutol_(EMB) +M.tuberculosis_H37Rv 4244281 . g a . . REG=coding;SVTYPE=SNP;GENE=Rv3794:embA:4243233:4246517;AMINO=Gly350Asp;RES=ethambutol_(EMB) +M.tuberculosis_H37Rv 4244617 . c t . . REG=coding;SVTYPE=SNP;GENE=Rv3794:embA:4243233:4246517;AMINO=Ala462Val;RES=ethambutol_(EMB) +M.tuberculosis_H37Rv 4245147 . c t . . REG=coding;SVTYPE=SNP;GENE=Rv3794:embA:4243233:4246517;AMINO=Pro639Ser;RES=ethambutol_(EMB) +M.tuberculosis_H37Rv 4245730 . a c . . REG=coding;SVTYPE=SNP;GENE=Rv3794:embA:4243233:4246517;AMINO=Asp833Ala;RES=ethambutol_(EMB) +M.tuberculosis_H37Rv 4245969 . c t . . REG=coding;SVTYPE=SNP;GENE=Rv3794:embA:4243233:4246517;AMINO=Pro913Ser;RES=ethambutol_(EMB) +M.tuberculosis_H37Rv 4246734 . t g . . REG=coding;SVTYPE=SNP;GENE=Rv3795:embB:4246514:4249810;AMINO=Leu74Arg;RES=ethambutol_(EMB) +M.tuberculosis_H37Rv 4247402 . t g . . REG=coding;SVTYPE=SNP;GENE=Rv3795:embB:4246514:4249810;AMINO=Ser297Ala;RES=ethambutol_(EMB) +M.tuberculosis_H37Rv 4247429 . a g . . REG=coding;SVTYPE=SNP;GENE=Rv3795:embB:4246514:4249810;AMINO=Met306Val;RES=ethambutol_(EMB) +M.tuberculosis_H37Rv 4247429 . a c . . REG=coding;SVTYPE=SNP;GENE=Rv3795:embB:4246514:4249810;AMINO=Met306Leu;RES=ethambutol_(EMB) +M.tuberculosis_H37Rv 4247430 . t c . . REG=coding;SVTYPE=SNP;GENE=Rv3795:embB:4246514:4249810;AMINO=Met306Thr;RES=ethambutol_(EMB) +M.tuberculosis_H37Rv 4247431 . g a . . REG=coding;SVTYPE=SNP;GENE=Rv3795:embB:4246514:4249810;AMINO=Met306Ile;RES=ethambutol_(EMB) +M.tuberculosis_H37Rv 4247431 . g c . . REG=coding;SVTYPE=SNP;GENE=Rv3795:embB:4246514:4249810;AMINO=Met306Ile;RES=ethambutol_(EMB) +M.tuberculosis_H37Rv 4247431 . g t . . REG=coding;SVTYPE=SNP;GENE=Rv3795:embB:4246514:4249810;AMINO=Met306Ile;RES=ethambutol_(EMB) +M.tuberculosis_H37Rv 4247469 . a c . . REG=coding;SVTYPE=SNP;GENE=Rv3795:embB:4246514:4249810;AMINO=Tyr319Ser;RES=ethambutol_(EMB) +M.tuberculosis_H37Rv 4247495 . g t . . REG=coding;SVTYPE=SNP;GENE=Rv3795:embB:4246514:4249810;AMINO=Asp328Tyr;RES=ethambutol_(EMB) +M.tuberculosis_H37Rv 4247496 . a g . . REG=coding;SVTYPE=SNP;GENE=Rv3795:embB:4246514:4249810;AMINO=Asp328Gly;RES=ethambutol_(EMB) +M.tuberculosis_H37Rv 4247496 . at tg . . REG=coding;SVTYPE=SNP;GENE=Rv3795:embB:4246514:4249810;AMINO=Asp328Val;RES=ethambutol_(EMB) +M.tuberculosis_H37Rv 4247507 . t c . . REG=coding;SVTYPE=SNP;GENE=Rv3795:embB:4246514:4249810;AMINO=Trp332Arg;RES=ethambutol_(EMB) +M.tuberculosis_H37Rv 4247513 . c t . . REG=coding;SVTYPE=SNP;GENE=Rv3795:embB:4246514:4249810;AMINO=Tyr334His;RES=ethambutol_(EMB) +M.tuberculosis_H37Rv 4247573 . g a . . REG=coding;SVTYPE=SNP;GENE=Rv3795:embB:4246514:4249810;AMINO=Asp354Asn;RES=ethambutol_(EMB) +M.tuberculosis_H37Rv 4247590 . a g . . REG=coding;SVTYPE=SNP;GENE=Rv3795:embB:4246514:4249810;AMINO=Leu359Leu;RES=phylo_(M._canettii) +M.tuberculosis_H37Rv 4247646 . a c . . REG=coding;SVTYPE=SNP;GENE=Rv3795:embB:4246514:4249810;AMINO=Glu378Ala;RES=phylo_(M._africanum,_M._bovis,_M._canettii,_M._caprae,_M._Microti,_M._pinipedii,_EAI) +M.tuberculosis_H37Rv 4247717 . c g . . REG=coding;SVTYPE=SNP;GENE=Rv3795:embB:4246514:4249810;AMINO=Leu402Val;RES=ethambutol_(EMB) +M.tuberculosis_H37Rv 4247723 . c t . . REG=coding;SVTYPE=SNP;GENE=Rv3795:embB:4246514:4249810;AMINO=Pro404Ser;RES=ethambutol_(EMB) +M.tuberculosis_H37Rv 4247729 . g a . . REG=coding;SVTYPE=SNP;GENE=Rv3795:embB:4246514:4249810;AMINO=Gly406Ser;RES=ethambutol_(EMB) +M.tuberculosis_H37Rv 4247730 . g c . . REG=coding;SVTYPE=SNP;GENE=Rv3795:embB:4246514:4249810;AMINO=Gly406Ala;RES=ethambutol_(EMB) +M.tuberculosis_H37Rv 4247730 . g a . . REG=coding;SVTYPE=SNP;GENE=Rv3795:embB:4246514:4249810;AMINO=Gly406Asp;RES=ethambutol_(EMB) +M.tuberculosis_H37Rv 4247815 . c t . . REG=coding;SVTYPE=SNP;GENE=Rv3795:embB:4246514:4249810;AMINO=Ala434Ala;RES=phylo_(M._canettii) +M.tuberculosis_H37Rv 4247863 . c g . . REG=coding;SVTYPE=SNP;GENE=Rv3795:embB:4246514:4249810;AMINO=Ile450Met;RES=ethambutol_(EMB) +M.tuberculosis_H37Rv 4247873 . g a . . REG=coding;SVTYPE=SNP;GENE=Rv3795:embB:4246514:4249810;AMINO=Ala454Thr;RES=ethambutol_(EMB) +M.tuberculosis_H37Rv 4248002 . c a . . REG=coding;SVTYPE=SNP;GENE=Rv3795:embB:4246514:4249810;AMINO=Gln497Lys;RES=ethambutol_(EMB) +M.tuberculosis_H37Rv 4248003 . a g . . REG=coding;SVTYPE=SNP;GENE=Rv3795:embB:4246514:4249810;AMINO=Gln497Arg;RES=ethambutol_(EMB) +M.tuberculosis_H37Rv 4248195 . a g . . REG=coding;SVTYPE=SNP;GENE=Rv3795:embB:4246514:4249810;AMINO=Lys561Arg;RES=phylo_(M._canettii) +M.tuberculosis_H37Rv 4248206 . a g . . REG=coding;SVTYPE=SNP;GENE=Rv3795:embB:4246514:4249810;AMINO=Ser565Gly;RES=phylo_(M._canettii) +M.tuberculosis_H37Rv 4248439 . c t . . REG=coding;SVTYPE=SNP;GENE=Rv3795:embB:4246514:4249810;AMINO=Thr642Thr;RES=phylo_(M._canettii) +M.tuberculosis_H37Rv 4248747 . g a . . REG=coding;SVTYPE=SNP;GENE=Rv3795:embB:4246514:4249810;AMINO=Gly745Asp;RES=ethambutol_(EMB) +M.tuberculosis_H37Rv 4249518 . a g . . REG=coding;SVTYPE=SNP;GENE=Rv3795:embB:4246514:4249810;AMINO=His1002Arg;RES=ethambutol_(EMB) +M.tuberculosis_H37Rv 4326087 . c a . . REG=coding;SVTYPE=SNP;GENE=Rv3854c:ethA:4327473:4326004;AMINO=Arg463Ser;RES=ethionamid_(ETH) +M.tuberculosis_H37Rv 4326236 . g a . . REG=coding;SVTYPE=SNP;GENE=Rv3854c:ethA:4327473:4326004;AMINO=Gly413Asp;RES=ethionamid_(ETH) +M.tuberculosis_H37Rv 4326300 . a g . . REG=coding;SVTYPE=SNP;GENE=Rv3854c:ethA:4327473:4326004;AMINO=Thr392Ala;RES=ethionamid_(ETH) +M.tuberculosis_H37Rv 4326320 . g a . . REG=coding;SVTYPE=SNP;GENE=Rv3854c:ethA:4327473:4326004;AMINO=Gly385Asp;RES=ethionamid_(ETH) +M.tuberculosis_H37Rv 4326333 . g c . . REG=coding;SVTYPE=SNP;GENE=Rv3854c:ethA:4327473:4326004;AMINO=Ala381Pro;RES=ethionamid_(ETH) +M.tuberculosis_H37Rv 4326449 . c a . . REG=coding;SVTYPE=SNP;GENE=Rv3854c:ethA:4327473:4326004;AMINO=Thr342Lys;RES=ethionamid_(ETH) +M.tuberculosis_H37Rv 4326461 . t g . . REG=coding;SVTYPE=SNP;GENE=Rv3854c:ethA:4327473:4326004;AMINO=Ile338Ser;RES=ethionamid_(ETH) +M.tuberculosis_H37Rv 4326738 . c t . . REG=coding;SVTYPE=SNP;GENE=Rv3854c:ethA:4327473:4326004;AMINO=Gln246STOP;RES=ethionamid_(ETH) +M.tuberculosis_H37Rv 4326807 . g a . . REG=coding;SVTYPE=SNP;GENE=Rv3854c:ethA:4327473:4326004;AMINO=Glu223Lys;RES=ethionamid_(ETH) +M.tuberculosis_H37Rv 4326917 . c a . . REG=coding;SVTYPE=SNP;GENE=Rv3854c:ethA:4327473:4326004;AMINO=Thr186Lys;RES=ethionamid_(ETH) +M.tuberculosis_H37Rv 4327224 . t g . . REG=coding;SVTYPE=SNP;GENE=Rv3854c:ethA:4327473:4326004;AMINO=Tyr84Asp;RES=ethionamid_(ETH) +M.tuberculosis_H37Rv 4327301 . a c . . REG=coding;SVTYPE=SNP;GENE=Rv3854c:ethA:4327473:4326004;AMINO=Asp58Ala;RES=ethionamid_(ETH) +M.tuberculosis_H37Rv 4327307 . a c . . REG=coding;SVTYPE=SNP;GENE=Rv3854c:ethA:4327473:4326004;AMINO=Asp56Ala;RES=ethionamid_(ETH) +M.tuberculosis_H37Rv 4327322 . c t . . REG=coding;SVTYPE=SNP;GENE=Rv3854c:ethA:4327473:4326004;AMINO=Pro51Leu;RES=ethionamid_(ETH) +M.tuberculosis_H37Rv 4327346 . g a . . REG=coding;SVTYPE=SNP;GENE=Rv3854c:ethA:4327473:4326004;AMINO=Gly43Asp;RES=ethionamid_(ETH) +M.tuberculosis_H37Rv 4327347 . g t . . REG=coding;SVTYPE=SNP;GENE=Rv3854c:ethA:4327473:4326004;AMINO=Gly43Cys;RES=ethionamid_(ETH) +M.tuberculosis_H37Rv 4407588 . a g . . REG=coding;SVTYPE=SNP;GENE=Rv3919c:gidB:4408202:4407528;AMINO=Ala205Ala;RES=phylo_(M._africanum,_M._bovis,_M._canettii,_M._caprae,_M._Microti,_M._pinipedii,_Beijing,_Delhi/CAS,_EAI) +M.tuberculosis_H37Rv 4407604 . c a . . REG=coding;SVTYPE=SNP;GENE=Rv3919c:gidB:4408202:4407528;AMINO=Ala200Glu;RES=streptomycin_(SM)_amikacin_(AMK)_kanamycin_(KAN)_capreomycin_(CPR) +M.tuberculosis_H37Rv 4407790 . c t . . REG=coding;SVTYPE=SNP;GENE=Rv3919c:gidB:4408202:4407528;AMINO=Ala138Val;RES=streptomycin_(SM)_amikacin_(AMK)_kanamycin_(KAN)_capreomycin_(CPR) +M.tuberculosis_H37Rv 4407873 . g t . . REG=coding;SVTYPE=SNP;GENE=Rv3919c:gidB:4408202:4407528;AMINO=Val110Val;RES=phylo_(EAI) +M.tuberculosis_H37Rv 4407904 . c t . . REG=coding;SVTYPE=SNP;GENE=Rv3919c:gidB:4408202:4407528;AMINO=Ser100Phe;RES=streptomycin_(SM)_amikacin_(AMK)_kanamycin_(KAN)_capreomycin_(CPR) +M.tuberculosis_H37Rv 4407927 . a c . . REG=coding;SVTYPE=SNP;GENE=Rv3919c:gidB:4408202:4407528;AMINO=Glu92Asp;RES=phylo_(Beijing) +M.tuberculosis_H37Rv 4407931 . t c . . REG=coding;SVTYPE=SNP;GENE=Rv3919c:gidB:4408202:4407528;AMINO=Leu91Pro;RES=streptomycin_(SM)_amikacin_(AMK)_kanamycin_(KAN)_capreomycin_(CPR) +M.tuberculosis_H37Rv 4407940 . t c . . REG=coding;SVTYPE=SNP;GENE=Rv3919c:gidB:4408202:4407528;AMINO=Val88Ala;RES=streptomycin_(SM)_amikacin_(AMK)_kanamycin_(KAN)_capreomycin_(CPR) +M.tuberculosis_H37Rv 4407992 . g a . . REG=coding;SVTYPE=SNP;GENE=Rv3919c:gidB:4408202:4407528;AMINO=Gly71Arg;RES=streptomycin_(SM)_amikacin_(AMK)_kanamycin_(KAN)_capreomycin_(CPR) +M.tuberculosis_H37Rv 4408009 . t g . . REG=coding;SVTYPE=SNP;GENE=Rv3919c:gidB:4408202:4407528;AMINO=Val65Gly;RES=streptomycin_(SM)_amikacin_(AMK)_kanamycin_(KAN)_capreomycin_(CPR) +M.tuberculosis_H37Rv 4408102 . g c . . REG=coding;SVTYPE=SNP;GENE=Rv3919c:gidB:4408202:4407528;AMINO=Gly34Ala;RES=streptomycin_(SM)_amikacin_(AMK)_kanamycin_(KAN)_capreomycin_(CPR) +M.tuberculosis_H37Rv 4408156 . t g . . REG=coding;SVTYPE=SNP;GENE=Rv3919c:gidB:4408202:4407528;AMINO=Leu16Leu;RES=phylo_(LAM) +M.tuberculosis_H37Rv 4408185 . c t . . REG=coding;SVTYPE=SNP;GENE=Rv3919c:gidB:4408202:4407528;AMINO=Pro6Pro;RES=phylo_(M._canettii) +M.tuberculosis_H37Rv 4408213 . c t . . REG=intergenic;SVTYPE=SNP;GENE=Rv3919c:gidB:4408202:4407528;AMINO=---;RES=phylo_(Ural) diff --git a/data/mtbseq-references/res/MTB_Base_Calibration_List.vcf.idx b/data/mtbseq-references/res/MTB_Base_Calibration_List.vcf.idx new file mode 100644 index 0000000..3f8817c Binary files /dev/null and b/data/mtbseq-references/res/MTB_Base_Calibration_List.vcf.idx differ diff --git a/data/mtbseq-references/res/MTB_Extended_Resistance_Mediating.txt b/data/mtbseq-references/res/MTB_Extended_Resistance_Mediating.txt new file mode 100644 index 0000000..d851a00 --- /dev/null +++ b/data/mtbseq-references/res/MTB_Extended_Resistance_Mediating.txt @@ -0,0 +1,43 @@ +H37Rv gene start stop type Rv number coding strand associated antibiotic resistance comment length region analyzed in reference collection +gyrB upstream 4998 5239 intergenic - forward fluoroquinolones (FQ) - 242 - +gyrB 5240 7267 CDS Rv0005 forward fluoroquinolones (FQ) - 2028 - +gyrA upstream 7268 7301 intergenic - forward fluoroquinolones (FQ) - 34 - +gyrA 7302 9818 CDS Rv0006 forward fluoroquinolones (FQ) - 2517 - +mshA upstream 575301 575347 intergenic - forward ethionamide (ETH) - 47 - +mshA 575348 576790 CDS Rv0486 forward ethionamide (ETH) - 1443 - +rpoB upstream 759310 759806 intergenic - forward rifampicin (RMP) - 497 - +rpoB 759807 763325 CDS Rv0667 forward rifampicin (RMP) - 3519 - +rpsL upstream 781312 781559 intergenic - forward streptomycin (SM) - 248 - +rpsL 781560 781934 CDS Rv0682 forward streptomycin (SM) - 375 - +rplC upstream 800793 800808 intergenic - forward linezolid (LZD) - 16 - +rplC 800809 801462 CDS Rv0701 forward linezolid (LZD) - 654 - +rrs upstream 1471743 1471845 intergenic - forward streptomycin (SM) - 103 - +rrs 1471846 1473382 rRNA Rvnr01 forward streptomycin (SM) - 1537 - +rrl upstream 1473383 1473657 intergenic - forward linezolid (LZD) - 275 - +rrl 1473658 1476795 rRNA Rvnr02 forward linezolid (LZD) - 3138 - +fabG1 upstream 1673300 1673439 intergenic - forward isoniazid (INH) - 140 - +fabG1 1673440 1674183 CDS Rv1483 forward isoniazid (INH) - 744 - +inhA upstream 1674184 1674201 intergenic - forward isoniazid (INH) ethionamide (ETH) - 18 - +inhA 1674202 1675011 CDS Rv1484 forward isoniazid (INH) ethionamide (ETH) - 810 - +rpsA upstream 1833380 1833541 intergenic - forward pyrazinamide (PZA) - 162 - +rpsA 1833542 1834987 CDS Rv1630 forward pyrazinamide (PZA) - 1446 - +tlyA 1917940 1918746 CDS Rv1694 forward capreomycin (CPR) - 807 - +ndh 2101651 2103042 CDS Rv1854c reverse isoniazid (INH) ethionamide (ETH) - 1392 - +ndh upstream 2103043 2103183 intergenic - reverse isoniazid (INH) ethionamide (ETH) - 141 - +katG 2153889 2156111 CDS Rv1908c reverse isoniazid (INH) - 2223 - +katG upstream 2156112 2156148 intergenic - reverse isoniazid (INH) - 37 - +pncA 2288681 2289241 CDS Rv2043c reverse pyrazinamide (PZA) - 561 - +pncA upstream 2289242 2289281 intergenic - reverse pyrazinamide (PZA) - 40 - +eis 2714124 2715332 CDS Rv2416c reverse kanamycin (KAN) - 1209 - +eis upstream 2715333 2715471 intergenic - reverse kanamycin (KAN) - 139 - +ahpC upstream 2726088 2726192 intergenic - forward isoniazid (INH) - 105 - +ahpC 2726193 2726780 CDS Rv2428 forward isoniazid (INH) - 588 - +thyA 3073680 3074471 CDS Rv2764c reverse para-aminosalicylic acid (PAS) - 792 - +thyA upstream 3074472 3074635 intergenic - reverse para-aminosalicylic acid (PAS) - 164 - +aftA,embC 4237932 4243147 CDS Rv3792,Rv3793 forward ethambutol (EMB) - 5216 - +embA upstream 4243148 4243232 intergenic - forward ethambutol (EMB) - 85 - +embA,embB 4243233 4249810 CDS Rv3794,Rv3795 forward ethambutol (EMB) - 6578 - +ethA 4326004 4327473 CDS Rv3854c reverse ethionamide (ETH) - 1470 - +ethA upstream 4327474 4327548 intergenic - reverse ethionamide (ETH) - 75 - +gidB 4407528 4408202 CDS Rv3919c reverse streptomycin (SM) - 675 - +gidB upstream 4408203 4408333 intergenic - reverse streptomycin (SM) - 131 - diff --git a/data/mtbseq-references/res/MTB_Resistance_Mediating.txt b/data/mtbseq-references/res/MTB_Resistance_Mediating.txt new file mode 100644 index 0000000..4783771 --- /dev/null +++ b/data/mtbseq-references/res/MTB_Resistance_Mediating.txt @@ -0,0 +1,614 @@ +Variant position genome start Variant position genome stop Var. type Number WT base Var. base Region Gene ID Gene Name Gene start Gene stop Gene length Dir. WT AA Codon nr. Codon nr. E. coli Var. AA AA change Codon change Variant position gene start Variant position gene stop Antibiotic Reference PMID High Confidence SNP +6575 6575 SNP 1 c t coding Rv0005 gyrB 5240 7267 2028 + Arg 446 - Cys Arg446Cys cgt/tgt 1336 1336 fluoroquinolones (FQ) 19470506 +6620 6620 SNP 1 g c coding Rv0005 gyrB 5240 7267 2028 + Asp 461 - His Asp461His gac/cac 1381 1381 fluoroquinolones (FQ) 24055765 yes +6620 6620 SNP 1 g a coding Rv0005 gyrB 5240 7267 2028 + Asp 461 - Asn Asp461Asn gac/aac 1381 1381 fluoroquinolones (FQ) 19721073 yes +6621 6621 SNP 1 a c coding Rv0005 gyrB 5240 7267 2028 + Asp 461 - Ala Asp461Ala gac/gcc 1382 1382 fluoroquinolones (FQ) 24055765 yes +6734 6734 SNP 1 a g coding Rv0005 gyrB 5240 7267 2028 + Asn 499 - Asp Asn499Asp aac/gac 1495 1495 fluoroquinolones (FQ) 17412727 yes +6735 6735 SNP 1 a c coding Rv0005 gyrB 5240 7267 2028 + Asn 499 - Thr Asn499Thr aac/acc 1496 1496 fluoroquinolones (FQ) 24055765 yes +6736 6736 SNP 1 c g coding Rv0005 gyrB 5240 7267 2028 + Asn 499 - Lys Asn499Lys aac/aag 1497 1497 fluoroquinolones (FQ) 24055765 yes +6737 6737 SNP 1 a c coding Rv0005 gyrB 5240 7267 2028 + Thr 500 - Pro Thr500Pro acc/ccc 1498 1498 fluoroquinolones (FQ) 24055765 yes +6738 6738 SNP 1 c a coding Rv0005 gyrB 5240 7267 2028 + Thr 500 - Asn Thr500Asn acc/aac 1499 1499 fluoroquinolones (FQ) 24055765 yes +6741 6741 SNP 1 a t coding Rv0005 gyrB 5240 7267 2028 + Glu 501 - Val Glu501Val gaa/gta 1502 1502 fluoroquinolones (FQ) 19721073 yes +6742 6742 SNP 1 a t coding Rv0005 gyrB 5240 7267 2028 + Glu 501 - Asp Glu501Asp gaa/gat 1503 1503 fluoroquinolones (FQ) 19721073 yes +6749 6749 SNP 1 g a coding Rv0005 gyrB 5240 7267 2028 + Ala 504 - Thr Ala504Thr gcg/acg 1510 1510 fluoroquinolones (FQ) 19470506 +6750 6750 SNP 1 c t coding Rv0005 gyrB 5240 7267 2028 + Ala 504 - Val Ala504Val gcg/gtg 1511 1511 fluoroquinolones (FQ) 24055765 yes +7563 7563 SNP 1 g t coding Rv0006 gyrA 7302 9818 2517 + Gly 88 - Cys Gly88Cys ggc/tgc 262 262 fluoroquinolones (FQ) 24055765 yes +7564 7564 SNP 1 g c coding Rv0006 gyrA 7302 9818 2517 + Gly 88 - Ala Gly88Ala ggc/gcc 263 263 fluoroquinolones (FQ) 24055765 yes +7566 7566 SNP 1 g a coding Rv0006 gyrA 7302 9818 2517 + Asp 89 - Asn Asp89Asn gac/aac 265 265 fluoroquinolones (FQ) 19687244 +7570 7570 SNP 1 c t coding Rv0006 gyrA 7302 9818 2517 + Ala 90 - Val Ala90Val gcg/gtg 269 269 fluoroquinolones (FQ) 21300839 yes +7572 7572 SNP 1 t c coding Rv0006 gyrA 7302 9818 2517 + Ser 91 - Pro Ser91Pro tcg/ccg 271 271 fluoroquinolones (FQ) 21562102 yes +7581 7581 SNP 1 g c coding Rv0006 gyrA 7302 9818 2517 + Asp 94 - His Asp94His gac/cac 280 280 fluoroquinolones (FQ) 21562102 yes +7581 7581 SNP 1 g a coding Rv0006 gyrA 7302 9818 2517 + Asp 94 - Asn Asp94Asn gac/aac 280 280 fluoroquinolones (FQ) 21562102 yes +7581 7581 SNP 1 g t coding Rv0006 gyrA 7302 9818 2517 + Asp 94 - Tyr Asp94Tyr gac/tac 280 280 fluoroquinolones (FQ) 21562102 yes +7582 7582 SNP 1 a g coding Rv0006 gyrA 7302 9818 2517 + Asp 94 - Gly Asp94Gly gac/ggc 281 281 fluoroquinolones (FQ) 21300839 yes +7582 7582 SNP 1 a c coding Rv0006 gyrA 7302 9818 2517 + Asp 94 - Ala Asp94Ala gac/gcc 281 281 fluoroquinolones (FQ) 21300839 yes +7582 7582 SNP 1 a t coding Rv0006 gyrA 7302 9818 2517 + Asp 94 - Val Asp94Val gac/gtc 281 281 fluoroquinolones (FQ) 17434825 +575729 575729 SNP 1 c t coding Rv0486 mshA 575348 576790 1443 + Gln 128 - STOP Gln128STOP cag/tag 382 382 ethionamide (ETH) 18651841 +576164 576164 SNP 1 c t coding Rv0486 mshA 575348 576790 1443 + Arg 273 - Cys Arg273Cys cgc/tgc 817 817 ethionamide (ETH) 18651841 +576242 576242 SNP 1 g t coding Rv0486 mshA 575348 576790 1443 + Gly 299 - Cys Gly299Cys ggc/tgc 895 895 ethionamide (ETH) 18651841 +576338 576338 SNP 1 c t coding Rv0486 mshA 575348 576790 1443 + Gln 331 - STOP Gln331STOP cag/tag 991 991 ethionamide (ETH) 18651841 +576414 576414 SNP 1 g a coding Rv0486 mshA 575348 576790 1443 + Gly 356 - Asp Gly356Asp ggc/gac 1067 1067 ethionamide (ETH) 18651841 +576429 576429 SNP 1 a c coding Rv0486 mshA 575348 576790 1443 + Glu 361 - Ala Glu361Ala gag/gcg 1082 1082 ethionamide (ETH) 18651841 +760314 760314 SNP 1 g t coding Rv0667 rpoB 759807 763325 3519 + Val 170 146 Phe Val170Phe gtc/ttc 508 508 rifampicin (RMP) 11136757 yes +761004 761004 SNP 1 a g coding Rv0667 rpoB 759807 763325 3519 + Thr 400 481 Ala Thr400Ala acc/gcc 1198 1198 rifampicin (RMP) 22646308 +761093 761093 SNP 1 g c coding Rv0667 rpoB 759807 763325 3519 + Gln 429 510 His Gln429His cag/cac 1287 1287 rifampicin (RMP) 15184414 +761095 761095 SNP 1 t c coding Rv0667 rpoB 759807 763325 3519 + Leu 430 511 Pro Leu430Pro ctg/ccg 1289 1289 rifampicin (RMP) 8027320 +761095 761095 SNP 1 t g coding Rv0667 rpoB 759807 763325 3519 + Leu 430 511 Arg Leu430Arg ctg/cgg 1289 1289 rifampicin (RMP) 8027320 +761098 761098 SNP 1 g t coding Rv0667 rpoB 759807 763325 3519 + Ser 431 512 Ile Ser431Ile agc/atc 1292 1292 rifampicin (RMP) 24055765 +761098 761098 SNP 1 g c coding Rv0667 rpoB 759807 763325 3519 + Ser 431 512 Thr Ser431Thr agc/acc 1292 1292 rifampicin (RMP) 8027320 +761100 761100 SNP 1 c a coding Rv0667 rpoB 759807 763325 3519 + Gln 432 513 Lys Gln432Lys caa/aaa 1294 1294 rifampicin (RMP) 11136757 +761101 761101 SNP 1 a c coding Rv0667 rpoB 759807 763325 3519 + Gln 432 513 Pro Gln432Pro caa/cca 1295 1295 rifampicin (RMP) 9003625 +761101 761101 SNP 1 a t coding Rv0667 rpoB 759807 763325 3519 + Gln 432 513 Leu Gln432Leu caa/cta 1295 1295 rifampicin (RMP) 16672384 yes +761108 761108 SNP 1 g t coding Rv0667 rpoB 759807 763325 3519 + Met 434 515 Ile Met434Ile atg/att 1302 1302 rifampicin (RMP) 15184414 +761109 761109 SNP 1 g t coding Rv0667 rpoB 759807 763325 3519 + Asp 435 516 Tyr Asp435Tyr gac/tac 1303 1303 rifampicin (RMP) 11880449 yes +761110 761110 SNP 1 a g coding Rv0667 rpoB 759807 763325 3519 + Asp 435 516 Gly Asp435Gly gac/ggc 1304 1304 rifampicin (RMP) 24055765 yes +761110 761110 SNP 1 a t coding Rv0667 rpoB 759807 763325 3519 + Asp 435 516 Val Asp435Val gac/gtc 1304 1304 rifampicin (RMP) 21300839 yes +761111 761111 SNP 1 c g coding Rv0667 rpoB 759807 763325 3519 + Asp 435 516 Glu Asp435Glu gac/gag 1305 1305 rifampicin (RMP) 8027320 +761117 761120 Del 3 caac c coding Rv0667 rpoB 759807 763325 3519 + Asn 438 519 - Asn438- aac/_ 1312 1314 rifampicin (RMP) 11136757 +761120 761120 SNP 1 c g coding Rv0667 rpoB 759807 763325 3519 + Asn 438 519 Lys Asn438Lys aac/aag 1314 1314 rifampicin (RMP) 19721079 +761128 761128 SNP 1 c t coding Rv0667 rpoB 759807 763325 3519 + Ser 441 522 Leu Ser441Leu tcg/ttg 1322 1322 rifampicin (RMP) 7759399 +761128 761128 SNP 1 c g coding Rv0667 rpoB 759807 763325 3519 + Ser 441 522 Trp Ser441Trp tcg/tgg 1322 1322 rifampicin (RMP) 15814606 +761139 761139 SNP 1 c a coding Rv0667 rpoB 759807 763325 3519 + His 445 526 Asn His445Asn cac/aac 1333 1333 rifampicin (RMP) 14729930 yes +761139 761139 SNP 1 c g coding Rv0667 rpoB 759807 763325 3519 + His 445 526 Asp His445Asp cac/gac 1333 1333 rifampicin (RMP) 21300839 yes +761139 761139 SNP 1 c t coding Rv0667 rpoB 759807 763325 3519 + His 445 526 Tyr His445Tyr cac/tac 1333 1333 rifampicin (RMP) 21300839 yes +761140 761140 SNP 1 a c coding Rv0667 rpoB 759807 763325 3519 + His 445 526 Pro His445Pro cac/ccc 1334 1334 rifampicin (RMP) 7759399 yes +761140 761140 SNP 1 a g coding Rv0667 rpoB 759807 763325 3519 + His 445 526 Arg His445Arg cac/cgc 1334 1334 rifampicin (RMP) 9003625 yes +761140 761140 SNP 1 a t coding Rv0667 rpoB 759807 763325 3519 + His 445 526 Leu His445Leu cac/ctc 1334 1334 rifampicin (RMP) 10921994 +761141 761141 SNP 1 c a coding Rv0667 rpoB 759807 763325 3519 + His 445 526 Gln His445Gln cac/caa 1335 1335 rifampicin (RMP) 8027320 +761154 761154 SNP 1 t g coding Rv0667 rpoB 759807 763325 3519 + Ser 450 531 Ala Ser450Ala tcg/gcg 1348 1348 rifampicin (RMP) 11136757 +761155 761155 SNP 1 c g coding Rv0667 rpoB 759807 763325 3519 + Ser 450 531 Trp Ser450Trp tcg/tgg 1349 1349 rifampicin (RMP) 7759399 yes +761155 761155 SNP 1 c t coding Rv0667 rpoB 759807 763325 3519 + Ser 450 531 Leu Ser450Leu tcg/ttg 1349 1349 rifampicin (RMP) 21300839 yes +761161 761161 SNP 1 t c coding Rv0667 rpoB 759807 763325 3519 + Leu 452 533 Pro Leu452Pro ctg/ccg 1355 1355 rifampicin (RMP) 8913484 yes +761277 761277 SNP 1 a t coding Rv0667 rpoB 759807 763325 3519 + Ile 491 572 Phe Ile491Phe atc/ttc 1471 1471 rifampicin (RMP) 10565894 yes +781687 781687 SNP 1 a g coding Rv0682 rpsL 781560 781934 375 + Lys 43 - Arg Lys43Arg aag/agg 128 128 streptomycin (SM) 22646308 yes +781821 781821 SNP 1 a c coding Rv0682 rpsL 781560 781934 375 + Lys 88 - Gln Lys88Gln aag/cag 262 262 streptomycin (SM) 8849220 +781822 781822 SNP 1 a g coding Rv0682 rpsL 781560 781934 375 + Lys 88 - Arg Lys88Arg aag/agg 263 263 streptomycin (SM) 22646308 yes +801268 801268 SNP 1 t c coding Rv0701 rplC 800809 801462 654 + Cys 154 - Arg Cys154Arg tgt/cgt 460 460 linezolid (LZD) 22371899 +1472337 1472337 SNP 1 c t ribosomal Rvnr01 rrs 1471846 1473382 1537 + - - - - --- - 492 492 streptomycin (SM) 9160326 +1472358 1472358 SNP 1 c t ribosomal Rvnr01 rrs 1471846 1473382 1537 + - - - - --- - 513 513 streptomycin (SM) 7540819 +1472359 1472359 SNP 1 a c ribosomal Rvnr01 rrs 1471846 1473382 1537 + - - - - --- - 514 514 streptomycin (SM) 9160326 +1472362 1472362 SNP 1 c t ribosomal Rvnr01 rrs 1471846 1473382 1537 + - - - - --- - 517 517 streptomycin (SM) 9160326 +1472750 1472750 SNP 1 c a ribosomal Rvnr01 rrs 1471846 1473382 1537 + - - - - --- - 905 905 streptomycin (SM) 7540819 +1472751 1472751 SNP 1 a g ribosomal Rvnr01 rrs 1471846 1473382 1537 + - - - - --- - 906 906 streptomycin (SM) 9160326 +1472752 1472752 SNP 1 a t ribosomal Rvnr01 rrs 1471846 1473382 1537 + - - - - --- - 907 907 streptomycin (SM) 9160326 +1473246 1473246 SNP 1 a g ribosomal Rvnr01 rrs 1471846 1473382 1537 + - - - - --- - 1401 1401 amikacin (AMK) kanamycin (KAN) capreomycin (CPR) 21300839 yes +1473247 1473247 SNP 1 c t ribosomal Rvnr01 rrs 1471846 1473382 1537 + - - - - --- - 1402 1402 amikacin (AMK) kanamycin (KAN) capreomycin (CPR) 16048924 yes +1473329 1473329 SNP 1 g t ribosomal Rvnr01 rrs 1471846 1473382 1537 + - - - - --- - 1484 1484 amikacin (AMK) kanamycin (KAN) capreomycin (CPR) 21562102 yes +1475956 1475956 SNP 1 g t ribosomal Rvnr02 rrl 1473658 1476795 3138 + - - - - --- - 2299 2299 linezolid (LZD) 18070973 +1476471 1476471 SNP 1 g t ribosomal Rvnr02 rrl 1473658 1476795 3138 + - - - - --- - 2814 2814 linezolid (LZD) 18070973 +1673423 1673423 SNP 1 g t intergenic Rv1483 fabG1 1673440 1674183 744 + - - - - --- - -17 -17 isoniazid (INH) 14638486 +1673424 1673424 SNP 1 a g intergenic Rv1483 fabG1 1673440 1674183 744 + - - - - --- - -16 -16 isoniazid (INH) 19494067 +1673425 1673425 SNP 1 c t intergenic Rv1483 fabG1 1673440 1674183 744 + - - - - --- - -15 -15 isoniazid (INH) 21300839 yes +1673432 1673432 SNP 1 t a intergenic Rv1483 fabG1 1673440 1674183 744 + - - - - --- - -8 -8 isoniazid (INH) 19494067 yes +1673432 1673432 SNP 1 t c intergenic Rv1483 fabG1 1673440 1674183 744 + - - - - --- - -8 -8 isoniazid (INH) 21300839 yes +1674481 1674481 SNP 1 t g coding Rv1484 inhA 1674202 1675011 810 + Ser 94 - Ala Ser94Ala tcg/gcg 280 280 isoniazid (INH) ethionamide (ETH) 24055765 yes +1674782 1674782 SNP 1 t c coding Rv1484 inhA 1674202 1675011 810 + Ile 194 - Thr Ile194Thr atc/acc 581 581 isoniazid (INH) ethionamide (ETH) 21110864 +1833909 1833909 SNP 1 a c coding Rv1630 rpsA 1833542 1834987 1446 + Asp 123 - Ala Asp123Ala gac/gcc 368 368 pyrazinamide (PZA) 21835980 +1834325 1834325 SNP 1 g a coding Rv1630 rpsA 1833542 1834987 1446 + Val 262 - Met Val262Met gtg/atg 784 784 pyrazinamide (PZA) 21835980 +1834852 1834855 Del 3 cgcc c coding Rv1630 rpsA 1833542 1834987 1446 + Ala 438 - - Ala438- gcc/_ 1312 1314 pyrazinamide (PZA) 21835980 +1917946 1917946 SNP 1 c t coding Rv1694 tlyA 1917940 1918746 807 + Arg 3 - STOP Arg3STOP cga/tga 7 7 capreomycin (CPR) 15673735 +1917979 1917979 SNP 1 c t coding Rv1694 tlyA 1917940 1918746 807 + Arg 14 - Trp Arg14Trp cgg/tgg 40 40 capreomycin (CPR) 15673735 +1917991 1917991 SNP 1 c t coding Rv1694 tlyA 1917940 1918746 807 + Arg 18 - STOP Arg18STOP cga/tga 52 52 capreomycin (CPR) 15673735 +1918003 1918003 SNP 1 c t coding Rv1694 tlyA 1917940 1918746 807 + Gln 22 - STOP Gln22STOP cag/tag 64 64 capreomycin (CPR) 15673735 +1918139 1918139 SNP 1 c a coding Rv1694 tlyA 1917940 1918746 807 + Ala 67 - Glu Ala67Glu gcg/gag 200 200 capreomycin (CPR) 15673735 +1918144 1918144 SNP 1 a g coding Rv1694 tlyA 1917940 1918746 807 + Lys 69 - Glu Lys69Glu aaa/gaa 205 205 capreomycin (CPR) 15673735 +1918211 1918211 SNP 1 c a coding Rv1694 tlyA 1917940 1918746 807 + Ala 91 - Glu Ala91Glu gca/gaa 272 272 capreomycin (CPR) 15673735 +1918292 1918292 SNP 1 t c coding Rv1694 tlyA 1917940 1918746 807 + Leu 118 - Pro Leu118Pro ctg/ccg 353 353 capreomycin (CPR) 15673735 +1918322 1918322 SNP 1 t a coding Rv1694 tlyA 1917940 1918746 807 + Val 128 - Glu Val128Glu gtg/gag 383 383 capreomycin (CPR) 15673735 +1918388 1918388 SNP 1 t c coding Rv1694 tlyA 1917940 1918746 807 + Leu 150 - Pro Leu150Pro ctg/ccg 449 449 capreomycin (CPR) 15673735 +1918487 1918487 SNP 1 c t coding Rv1694 tlyA 1917940 1918746 807 + Pro 183 - Leu Pro183Leu ccg/ctg 548 548 capreomycin (CPR) 15673735 +1918489 1918489 SNP 1 c a coding Rv1694 tlyA 1917940 1918746 807 + Gln 184 - Lys Gln184Lys cag/aag 550 550 capreomycin (CPR) 15673735 +1918489 1918489 SNP 1 c t coding Rv1694 tlyA 1917940 1918746 807 + Gln 184 - STOP Gln184STOP cag/tag 550 550 capreomycin (CPR) 15673735 +1918494 1918494 SNP 1 t g coding Rv1694 tlyA 1917940 1918746 807 + Phe 185 - Leu Phe185Leu ttt/ttg 555 555 capreomycin (CPR) 15673735 +1918651 1918651 SNP 1 g a coding Rv1694 tlyA 1917940 1918746 807 + Glu 238 - Lys Glu238Lys gag/aag 712 712 capreomycin (CPR) 15673735 +2102240 2102240 SNP 1 g a coding Rv1854c ndh 2103042 2101651 1392 - Arg 268 - His Arg268His cgc/cac 803 803 isoniazid (INH) ethionamide (ETH) 11408244 +2102715 2102715 SNP 1 a g coding Rv1854c ndh 2103042 2101651 1392 - Thr 110 - Ala Thr110Ala acc/gcc 328 328 isoniazid (INH) ethionamide (ETH) 11408244 +2155167 2155167 SNP 1 c g coding Rv1908c katG 2156111 2153889 2223 - Ser 315 - Arg Ser315Arg agc/agg 945 945 isoniazid (INH) 16870753 +2155167 2155167 SNP 1 c a coding Rv1908c katG 2156111 2153889 2223 - Ser 315 - Arg Ser315Arg agc/aga 945 945 isoniazid (INH) 17403134 +2155168 2155168 SNP 1 g c coding Rv1908c katG 2156111 2153889 2223 - Ser 315 - Thr Ser315Thr agc/acc 944 944 isoniazid (INH) 8878604 yes +2155168 2155168 SNP 1 g a coding Rv1908c katG 2156111 2153889 2223 - Ser 315 - Asn Ser315Asn agc/aac 944 944 isoniazid (INH) 9210694 yes +2155168 2155168 SNP 1 g t coding Rv1908c katG 2156111 2153889 2223 - Ser 315 - Ile Ser315Ile agc/atc 944 944 isoniazid (INH) 9210694 yes +2155169 2155169 SNP 1 a g coding Rv1908c katG 2156111 2153889 2223 - Ser 315 - Gly Ser315Gly agc/ggc 943 943 isoniazid (INH) 8878604 yes +2155206 2155206 SNP 1 c g coding Rv1908c katG 2156111 2153889 2223 - Ser 302 - Arg Ser302Arg agc/agg 906 906 isoniazid (INH) 22646308 +2155212 2155212 SNP 1 g c coding Rv1908c katG 2156111 2153889 2223 - Trp 300 - Cys Trp300Cys tgg/tgc 900 900 isoniazid (INH) 22646308 +2155214 2155214 SNP 1 t g coding Rv1908c katG 2156111 2153889 2223 - Trp 300 - Gly Trp300Gly tgg/ggg 898 898 isoniazid (INH) 24055765 yes +2155222 2155222 SNP 1 g t coding Rv1908c katG 2156111 2153889 2223 - Gly 297 - Val Gly297Val ggc/gtc 890 890 isoniazid (INH) 11796356 +2155289 2155289 SNP 1 a c coding Rv1908c katG 2156111 2153889 2223 - Thr 275 - Pro Thr275Pro acc/ccc 823 823 isoniazid (INH) 24055765 yes +2155699 2155699 SNP 1 a g coding Rv1908c katG 2156111 2153889 2223 - Asn 138 - Ser Asn138Ser aac/agc 413 413 isoniazid (INH) 16870753 +2288683 2288683 SNP 1 t c coding Rv2043c pncA 2289241 2288681 561 - STOP 187 - Arg STOP187Arg tga/cga 559 559 pyrazinamide (PZA) 25336456 yes +2288697 2288697 SNP 1 t c coding Rv2043c pncA 2289241 2288681 561 - Leu 182 - Ser Leu182Ser ttg/tcg 545 545 pyrazinamide (PZA) 25336456 yes +2288703 2288703 SNP 1 t c coding Rv2043c pncA 2289241 2288681 561 - Val 180 - Ala Val180Ala gtc/gcc 539 539 pyrazinamide (PZA) 25336456 yes +2288703 2288703 SNP 1 t g coding Rv2043c pncA 2289241 2288681 561 - Val 180 - Gly Val180Gly gtc/ggc 539 539 pyrazinamide (PZA) 25336456 yes +2288704 2288704 SNP 1 g t coding Rv2043c pncA 2289241 2288681 561 - Val 180 - Phe Val180Phe gtc/ttc 538 538 pyrazinamide (PZA) 11641519 +2288718 2288718 SNP 1 t c coding Rv2043c pncA 2289241 2288681 561 - Met 175 - Thr Met175Thr atg/acg 524 524 pyrazinamide (PZA) 25336456 yes +2288719 2288719 SNP 1 a g coding Rv2043c pncA 2289241 2288681 561 - Met 175 - Val Met175Val atg/gtg 523 523 pyrazinamide (PZA) 25336456 yes +2288727 2288727 SNP 1 t c coding Rv2043c pncA 2289241 2288681 561 - Leu 172 - Pro Leu172Pro ctg/ccg 515 515 pyrazinamide (PZA) 22646308 +2288730 2288730 SNP 1 c t coding Rv2043c pncA 2289241 2288681 561 - Ala 171 - Val Ala171Val gcg/gtg 512 512 pyrazinamide (PZA) 10471589 +2288740 2288740 SNP 1 a c coding Rv2043c pncA 2289241 2288681 561 - Thr 168 - Pro Thr168Pro acc/ccc 502 502 pyrazinamide (PZA) 25336456 yes +2288752 2288752 SNP 1 t c coding Rv2043c pncA 2289241 2288681 561 - Ser 164 - Pro Ser164Pro tcg/ccg 490 490 pyrazinamide (PZA) 25336456 yes +2288754 2288754 SNP 1 t c coding Rv2043c pncA 2289241 2288681 561 - Val 163 - Ala Val163Ala gtg/gcg 488 488 pyrazinamide (PZA) 25336456 yes +2288757 2288757 SNP 1 g a coding Rv2043c pncA 2289241 2288681 561 - Gly 162 - Asp Gly162Asp ggt/gat 485 485 pyrazinamide (PZA) 22646308 +2288761 2288761 SNP 1 g c coding Rv2043c pncA 2289241 2288681 561 - Ala 161 - Pro Ala161Pro gcg/ccg 481 481 pyrazinamide (PZA) 25336456 yes +2288764 2288764 SNP 1 a c coding Rv2043c pncA 2289241 2288681 561 - Thr 160 - Pro Thr160Pro aca/cca 478 478 pyrazinamide (PZA) 25336456 yes +2288766 2288766 SNP 1 t g coding Rv2043c pncA 2289241 2288681 561 - Leu 159 - Arg Leu159Arg ctg/cgg 476 476 pyrazinamide (PZA) 11641519 +2288772 2288772 SNP 1 t c coding Rv2043c pncA 2289241 2288681 561 - Val 157 - Ala Val157Ala gtg/gcg 470 470 pyrazinamide (PZA) 25336456 yes +2288772 2288772 SNP 1 t g coding Rv2043c pncA 2289241 2288681 561 - Val 157 - Gly Val157Gly gtg/ggg 470 470 pyrazinamide (PZA) 25336456 yes +2288778 2288778 SNP 1 t g coding Rv2043c pncA 2289241 2288681 561 - Val 155 - Gly Val155Gly gtg/ggg 464 464 pyrazinamide (PZA) 25336456 yes +2288779 2288779 SNP 1 g a coding Rv2043c pncA 2289241 2288681 561 - Val 155 - Met Val155Met gtg/atg 463 463 pyrazinamide (PZA) 25336456 yes +2288782 2288782 SNP 1 a g coding Rv2043c pncA 2289241 2288681 561 - Arg 154 - Gly Arg154Gly agg/ggg 460 460 pyrazinamide (PZA) 21300839 +2288805 2288805 SNP 1 c a coding Rv2043c pncA 2289241 2288681 561 - Ala 146 - Glu Ala146Glu gcg/gag 437 437 pyrazinamide (PZA) 22646308 +2288805 2288805 SNP 1 c t coding Rv2043c pncA 2289241 2288681 561 - Ala 146 - Val Ala146Val gcg/gtg 437 437 pyrazinamide (PZA) 25336456 yes +2288806 2288806 SNP 1 g c coding Rv2043c pncA 2289241 2288681 561 - Ala 146 - Pro Ala146Pro gcg/ccg 436 436 pyrazinamide (PZA) 25336456 yes +2288806 2288806 SNP 1 g a coding Rv2043c pncA 2289241 2288681 561 - Ala 146 - Thr Ala146Thr gcg/acg 436 436 pyrazinamide (PZA) 11641519 +2288817 2288817 SNP 1 c a coding Rv2043c pncA 2289241 2288681 561 - Thr 142 - Lys Thr142Lys acg/aag 425 425 pyrazinamide (PZA) 25336456 yes +2288817 2288817 SNP 1 c t coding Rv2043c pncA 2289241 2288681 561 - Thr 142 - Met Thr142Met acg/atg 425 425 pyrazinamide (PZA) 25336456 yes +2288818 2288818 SNP 1 a g coding Rv2043c pncA 2289241 2288681 561 - Thr 142 - Ala Thr142Ala acg/gcg 424 424 pyrazinamide (PZA) 25336456 yes +2288820 2288820 SNP 1 a c coding Rv2043c pncA 2289241 2288681 561 - Gln 141 - Pro Gln141Pro cag/ccg 422 422 pyrazinamide (PZA) 8640557 +2288821 2288821 SNP 1 c t coding Rv2043c pncA 2289241 2288681 561 - Gln 141 - STOP Gln141STOP cag/tag 421 421 pyrazinamide (PZA) 11641519 +2288823 2288823 SNP 1 g c coding Rv2043c pncA 2289241 2288681 561 - Arg 140 - Pro Arg140Pro cgc/ccc 419 419 pyrazinamide (PZA) 25336456 yes +2288826 2288826 SNP 1 t g coding Rv2043c pncA 2289241 2288681 561 - Val 139 - Gly Val139Gly gtg/ggg 416 416 pyrazinamide (PZA) 25336456 yes +2288827 2288827 SNP 1 g c coding Rv2043c pncA 2289241 2288681 561 - Val 139 - Leu Val139Leu gtg/ctg 415 415 pyrazinamide (PZA) 25336456 yes +2288828 2288828 SNP 1 t g coding Rv2043c pncA 2289241 2288681 561 - Cys 138 - Trp Cys138Trp tgt/tgg 414 414 pyrazinamide (PZA) 25336456 yes +2288830 2288830 SNP 1 t c coding Rv2043c pncA 2289241 2288681 561 - Cys 138 - Arg Cys138Arg tgt/cgt 412 412 pyrazinamide (PZA) 25336456 yes +2288832 2288832 SNP 1 a g coding Rv2043c pncA 2289241 2288681 561 - His 137 - Arg His137Arg cat/cgt 410 410 pyrazinamide (PZA) 25336456 yes +2288832 2288832 SNP 1 a c coding Rv2043c pncA 2289241 2288681 561 - His 137 - Pro His137Pro cat/cct 410 410 pyrazinamide (PZA) 25336456 yes +2288833 2288833 SNP 1 c g coding Rv2043c pncA 2289241 2288681 561 - His 137 - Asp His137Asp cat/gat 409 409 pyrazinamide (PZA) 25336456 yes +2288836 2288836 SNP 1 g a coding Rv2043c pncA 2289241 2288681 561 - Asp 136 - Asn Asp136Asn gat/aat 406 406 pyrazinamide (PZA) 11641519 +2288836 2288836 SNP 1 g t coding Rv2043c pncA 2289241 2288681 561 - Asp 136 - Tyr Asp136Tyr gat/tat 406 406 pyrazinamide (PZA) 11641519 +2288838 2288838 SNP 1 c a coding Rv2043c pncA 2289241 2288681 561 - Thr 135 - Asn Thr135Asn acc/aac 404 404 pyrazinamide (PZA) 25336456 yes +2288839 2288839 SNP 1 a c coding Rv2043c pncA 2289241 2288681 561 - Thr 135 - Pro Thr135Pro acc/ccc 403 403 pyrazinamide (PZA) 25336456 yes +2288841 2288841 SNP 1 c t coding Rv2043c pncA 2289241 2288681 561 - Ala 134 - Val Ala134Val gcc/gtc 401 401 pyrazinamide (PZA) 25336456 yes +2288844 2288844 SNP 1 t c coding Rv2043c pncA 2289241 2288681 561 - Ile 133 - Thr Ile133Thr att/act 398 398 pyrazinamide (PZA) 10390239 +2288847 2288847 SNP 1 g c coding Rv2043c pncA 2289241 2288681 561 - Gly 132 - Ala Gly132Ala ggt/gct 395 395 pyrazinamide (PZA) 25336456 yes +2288847 2288847 SNP 1 g a coding Rv2043c pncA 2289241 2288681 561 - Gly 132 - Asp Gly132Asp ggt/gat 395 395 pyrazinamide (PZA) 25336456 yes +2288848 2288848 SNP 1 g t coding Rv2043c pncA 2289241 2288681 561 - Gly 132 - Cys Gly132Cys ggt/tgt 394 394 pyrazinamide (PZA) 25336456 yes +2288848 2288848 SNP 1 g a coding Rv2043c pncA 2289241 2288681 561 - Gly 132 - Ser Gly132Ser ggt/agt 394 394 pyrazinamide (PZA) 9055989 +2288853 2288853 SNP 1 t c coding Rv2043c pncA 2289241 2288681 561 - Val 130 - Ala Val130Ala gtg/gcg 389 389 pyrazinamide (PZA) 25336456 yes +2288853 2288853 SNP 1 t g coding Rv2043c pncA 2289241 2288681 561 - Val 130 - Gly Val130Gly gtg/ggg 389 389 pyrazinamide (PZA) 25336456 yes +2288857 2288857 SNP 1 g t coding Rv2043c pncA 2289241 2288681 561 - Asp 129 - Tyr Asp129Tyr gat/tat 385 385 pyrazinamide (PZA) 25336456 yes +2288859 2288859 SNP 1 t g coding Rv2043c pncA 2289241 2288681 561 - Val 128 - Gly Val128Gly gtc/ggc 383 383 pyrazinamide (PZA) 15616332 +2288868 2288868 SNP 1 t g coding Rv2043c pncA 2289241 2288681 561 - Val 125 - Gly Val125Gly gtc/ggc 374 374 pyrazinamide (PZA) 25336456 yes +2288869 2288869 SNP 1 g t coding Rv2043c pncA 2289241 2288681 561 - Val 125 - Phe Val125Phe gtc/ttc 373 373 pyrazinamide (PZA) 25336456 yes +2288874 2288874 SNP 1 g c coding Rv2043c pncA 2289241 2288681 561 - Arg 123 - Pro Arg123Pro cgc/ccc 368 368 pyrazinamide (PZA) 25336456 yes +2288880 2288880 SNP 1 g c coding Rv2043c pncA 2289241 2288681 561 - Arg 121 - Pro Arg121Pro cgg/ccg 362 362 pyrazinamide (PZA) 25336456 yes +2288883 2288883 SNP 1 t g coding Rv2043c pncA 2289241 2288681 561 - Leu 120 - Arg Leu120Arg ctg/cgg 359 359 pyrazinamide (PZA) 21300839 +2288883 2288883 SNP 1 t a coding Rv2043c pncA 2289241 2288681 561 - Leu 120 - Gln Leu120Gln ctg/cag 359 359 pyrazinamide (PZA) 25336456 yes +2288883 2288883 SNP 1 t c coding Rv2043c pncA 2289241 2288681 561 - Leu 120 - Pro Leu120Pro ctg/ccg 359 359 pyrazinamide (PZA) 25336456 yes +2288885 2288885 SNP 1 g a coding Rv2043c pncA 2289241 2288681 561 - Trp 119 - STOP Trp119STOP tgg/tga 357 357 pyrazinamide (PZA) 11641519 +2288886 2288886 SNP 1 g c coding Rv2043c pncA 2289241 2288681 561 - Trp 119 - Ser Trp119Ser tgg/tcg 356 356 pyrazinamide (PZA) 25336456 yes +2288886 2288886 SNP 1 g a coding Rv2043c pncA 2289241 2288681 561 - Trp 119 - STOP Trp119STOP tgg/tag 356 356 pyrazinamide (PZA) 25336456 yes +2288887 2288887 SNP 1 t c coding Rv2043c pncA 2289241 2288681 561 - Trp 119 - Arg Trp119Arg tgg/cgg 355 355 pyrazinamide (PZA) 25336456 yes +2288887 2288887 SNP 1 t g coding Rv2043c pncA 2289241 2288681 561 - Trp 119 - Gly Trp119Gly tgg/ggg 355 355 pyrazinamide (PZA) 25336456 yes +2288895 2288895 SNP 1 t g coding Rv2043c pncA 2289241 2288681 561 - Leu 116 - Arg Leu116Arg ctg/cgg 347 347 pyrazinamide (PZA) 25336456 yes +2288895 2288895 SNP 1 t c coding Rv2043c pncA 2289241 2288681 561 - Leu 116 - Pro Leu116Pro ctg/ccg 347 347 pyrazinamide (PZA) 25336456 yes +2288902 2288902 SNP 1 a c coding Rv2043c pncA 2289241 2288681 561 - Thr 114 - Pro Thr114Pro acg/ccg 340 340 pyrazinamide (PZA) 9692180 +2288920 2288920 SNP 1 g a coding Rv2043c pncA 2289241 2288681 561 - Gly 108 - Arg Gly108Arg gga/aga 322 322 pyrazinamide (PZA) 25336456 yes +2288920 2288920 SNP 1 g c coding Rv2043c pncA 2289241 2288681 561 - Gly 108 - Arg Gly108Arg gga/cga 322 322 pyrazinamide (PZA) 25336456 yes +2288928 2288928 SNP 1 g a coding Rv2043c pncA 2289241 2288681 561 - Gly 105 - Asp Gly105Asp ggc/gac 314 314 pyrazinamide (PZA) 25336456 yes +2288930 2288930 SNP 1 c a coding Rv2043c pncA 2289241 2288681 561 - Ser 104 - Arg Ser104Arg agc/aga 312 312 pyrazinamide (PZA) 25336456 yes +2288931 2288931 SNP 1 g t coding Rv2043c pncA 2289241 2288681 561 - Ser 104 - Ile Ser104Ile agc/atc 311 311 pyrazinamide (PZA) 25336456 yes +2288933 2288933 SNP 1 c g coding Rv2043c pncA 2289241 2288681 561 - Tyr 103 - STOP Tyr103STOP tac/tag 309 309 pyrazinamide (PZA) 25336456 yes +2288934 2288934 SNP 1 a g coding Rv2043c pncA 2289241 2288681 561 - Tyr 103 - Cys Tyr103Cys tac/tgc 308 308 pyrazinamide (PZA) 25336456 yes +2288934 2288934 SNP 1 a c coding Rv2043c pncA 2289241 2288681 561 - Tyr 103 - Ser Tyr103Ser tac/tcc 308 308 pyrazinamide (PZA) 11641519 +2288935 2288935 SNP 1 t g coding Rv2043c pncA 2289241 2288681 561 - Tyr 103 - Asp Tyr103Asp tac/gac 307 307 pyrazinamide (PZA) 25336456 yes +2288938 2288938 SNP 1 g a coding Rv2043c pncA 2289241 2288681 561 - Ala 102 - Thr Ala102Thr gcg/acg 304 304 pyrazinamide (PZA) 25336456 yes +2288944 2288944 SNP 1 a g coding Rv2043c pncA 2289241 2288681 561 - Thr 100 - Ala Thr100Ala acc/gcc 298 298 pyrazinamide (PZA) 25336456 yes +2288944 2288944 SNP 1 a c coding Rv2043c pncA 2289241 2288681 561 - Thr 100 - Pro Thr100Pro acc/ccc 298 298 pyrazinamide (PZA) 25336456 yes +2288945 2288945 SNP 1 c a coding Rv2043c pncA 2289241 2288681 561 - Tyr 99 - STOP Tyr99STOP tac/taa 297 297 pyrazinamide (PZA) 25336456 yes +2288952 2288952 SNP 1 g c coding Rv2043c pncA 2289241 2288681 561 - Gly 97 - Ala Gly97Ala ggt/gct 290 290 pyrazinamide (PZA) 25336456 yes +2288952 2288952 SNP 1 g a coding Rv2043c pncA 2289241 2288681 561 - Gly 97 - Asp Gly97Asp ggt/gat 290 290 pyrazinamide (PZA) 25336456 yes +2288953 2288953 SNP 1 g a coding Rv2043c pncA 2289241 2288681 561 - Gly 97 - Ser Gly97Ser ggt/agt 289 289 pyrazinamide (PZA) 10681313 +2288954 2288954 SNP 1 g a coding Rv2043c pncA 2289241 2288681 561 - Lys 96 - Asn Lys96Asn aag/aac 288 288 pyrazinamide (PZA) 25336456 yes +2288955 2288955 SNP 1 a g coding Rv2043c pncA 2289241 2288681 561 - Lys 96 - Arg Lys96Arg aag/agg 287 287 pyrazinamide (PZA) 25336456 yes +2288955 2288955 SNP 1 a c coding Rv2043c pncA 2289241 2288681 561 - Lys 96 - Thr Lys96Thr aag/acg 287 287 pyrazinamide (PZA) 25336456 yes +2288956 2288956 SNP 1 a c coding Rv2043c pncA 2289241 2288681 561 - Lys 96 - Gln Lys96Gln aag/cag 286 286 pyrazinamide (PZA) 25336456 yes +2288956 2288956 SNP 1 a g coding Rv2043c pncA 2289241 2288681 561 - Lys 96 - Glu Lys96Glu aag/gag 286 286 pyrazinamide (PZA) 22646308 +2288957 2288957 SNP 1 c g coding Rv2043c pncA 2289241 2288681 561 - Tyr 95 - STOP Tyr95STOP tac/tag 285 285 pyrazinamide (PZA) 25336456 yes +2288960 2288960 SNP 1 c a coding Rv2043c pncA 2289241 2288681 561 - Phe 94 - Leu Phe94Leu ttc/tta 282 282 pyrazinamide (PZA) 25336456 yes +2288960 2288960 SNP 1 c g coding Rv2043c pncA 2289241 2288681 561 - Phe 94 - Leu Phe94Leu ttc/ttg 282 282 pyrazinamide (PZA) 25336456 yes +2288961 2288961 SNP 1 t g coding Rv2043c pncA 2289241 2288681 561 - Phe 94 - Cys Phe94Cys ttc/tgc 281 281 pyrazinamide (PZA) 25336456 yes +2288961 2288961 SNP 1 t c coding Rv2043c pncA 2289241 2288681 561 - Phe 94 - Ser Phe94Ser ttc/tcc 281 281 pyrazinamide (PZA) 25336456 yes +2288962 2288962 SNP 1 t c coding Rv2043c pncA 2289241 2288681 561 - Phe 94 - Leu Phe94Leu ttc/ctc 280 280 pyrazinamide (PZA) 25336456 yes +2288971 2288971 SNP 1 g t coding Rv2043c pncA 2289241 2288681 561 - Glu 91 - STOP Glu91STOP gag/tag 271 271 pyrazinamide (PZA) 25336456 yes +2288982 2288982 SNP 1 c t coding Rv2043c pncA 2289241 2288681 561 - Thr 87 - Met Thr87Met acg/atg 260 260 pyrazinamide (PZA) 10390238 +2288988 2288988 SNP 1 t g coding Rv2043c pncA 2289241 2288681 561 - Leu 85 - Arg Leu85Arg ctg/cgg 254 254 pyrazinamide (PZA) 25336456 yes +2288988 2288988 SNP 1 t c coding Rv2043c pncA 2289241 2288681 561 - Leu 85 - Pro Leu85Pro ctg/ccg 254 254 pyrazinamide (PZA) 9055989 +2288997 2288997 SNP 1 a g coding Rv2043c pncA 2289241 2288681 561 - His 82 - Arg His82Arg cat/cgt 245 245 pyrazinamide (PZA) 25336456 yes +2288998 2288998 SNP 1 c g coding Rv2043c pncA 2289241 2288681 561 - His 82 - Asp His82Asp cat/gat 244 244 pyrazinamide (PZA) 25336456 yes +2289000 2289000 SNP 1 t g coding Rv2043c pncA 2289241 2288681 561 - Phe 81 - Cys Phe81Cys ttc/tgc 242 242 pyrazinamide (PZA) 25336456 yes +2289000 2289000 SNP 1 t c coding Rv2043c pncA 2289241 2288681 561 - Phe 81 - Ser Phe81Ser ttc/tcc 242 242 pyrazinamide (PZA) 25336456 yes +2289001 2289001 SNP 1 t g coding Rv2043c pncA 2289241 2288681 561 - Phe 81 - Val Phe81Val ttc/gtc 241 241 pyrazinamide (PZA) 25336456 yes +2289016 2289016 SNP 1 a c coding Rv2043c pncA 2289241 2288681 561 - Thr 76 - Pro Thr76Pro act/cct 226 226 pyrazinamide (PZA) 9056006 +2289028 2289028 SNP 1 t c coding Rv2043c pncA 2289241 2288681 561 - Cys 72 - Arg Cys72Arg tgc/cgc 214 214 pyrazinamide (PZA) 25336456 yes +2289029 2289029 SNP 1 t a coding Rv2043c pncA 2289241 2288681 561 - His 71 - Gln His71Gln cat/caa 213 213 pyrazinamide (PZA) 25336456 yes +2289030 2289030 SNP 1 a g coding Rv2043c pncA 2289241 2288681 561 - His 71 - Arg His71Arg cat/cgt 212 212 pyrazinamide (PZA) 25336456 yes +2289031 2289031 SNP 1 c t coding Rv2043c pncA 2289241 2288681 561 - His 71 - Tyr His71Tyr cat/tat 211 211 pyrazinamide (PZA) 16848344 +2289036 2289036 SNP 1 c t coding Rv2043c pncA 2289241 2288681 561 - Pro 69 - Leu Pro69Leu cca/cta 206 206 pyrazinamide (PZA) 10390238 +2289038 2289038 SNP 1 g c coding Rv2043c pncA 2289241 2288681 561 - Trp 68 - Cys Trp68Cys tgg/tgc 204 204 pyrazinamide (PZA) 25336456 yes +2289038 2289038 SNP 1 g t coding Rv2043c pncA 2289241 2288681 561 - Trp 68 - Cys Trp68Cys tgg/tgt 204 204 pyrazinamide (PZA) 25336456 yes +2289039 2289039 SNP 1 g c coding Rv2043c pncA 2289241 2288681 561 - Trp 68 - Ser Trp68Ser tgg/tcg 203 203 pyrazinamide (PZA) 11641519 +2289039 2289039 SNP 1 g a coding Rv2043c pncA 2289241 2288681 561 - Trp 68 - STOP Trp68STOP tgg/tag 203 203 pyrazinamide (PZA) 25336456 yes +2289040 2289040 SNP 1 t c coding Rv2043c pncA 2289241 2288681 561 - Trp 68 - Arg Trp68Arg tgg/cgg 202 202 pyrazinamide (PZA) 11641519 +2289040 2289040 SNP 1 t g coding Rv2043c pncA 2289241 2288681 561 - Trp 68 - Gly Trp68Gly tgg/ggg 202 202 pyrazinamide (PZA) 11641519 +2289043 2289043 SNP 1 t c coding Rv2043c pncA 2289241 2288681 561 - Ser 67 - Pro Ser67Pro tcg/ccg 199 199 pyrazinamide (PZA) 25336456 yes +2289049 - Ins 1 a at coding Rv2043c pncA 2289241 2288681 561 - Ser 65 - - Ser65- tcc/atcc 193 193 pyrazinamide (PZA) 22646308 +2289050 2289050 SNP 1 t g coding Rv2043c pncA 2289241 2288681 561 - Tyr 64 - STOP Tyr64STOP tat/tag 192 192 pyrazinamide (PZA) 25336456 yes +2289052 2289052 SNP 1 t g coding Rv2043c pncA 2289241 2288681 561 - Tyr 64 - Asp Tyr64Asp tat/gat 190 190 pyrazinamide (PZA) 11641519 +2289054 2289054 SNP 1 a g coding Rv2043c pncA 2289241 2288681 561 - Asp 63 - Gly Asp63Gly gac/ggc 188 188 pyrazinamide (PZA) 9692180 +2289057 2289057 SNP 1 c t coding Rv2043c pncA 2289241 2288681 561 - Pro 62 - Leu Pro62Leu ccg/ctg 185 185 pyrazinamide (PZA) 25336456 yes +2289061 2289061 SNP 1 a c coding Rv2043c pncA 2289241 2288681 561 - Thr 61 - Pro Thr61Pro aca/cca 181 181 pyrazinamide (PZA) 10390238 +2289068 2289068 SNP 1 c a coding Rv2043c pncA 2289241 2288681 561 - Phe 58 - Leu Phe58Leu ttc/tta 174 174 pyrazinamide (PZA) 25336456 yes +2289068 2289068 SNP 1 c g coding Rv2043c pncA 2289241 2288681 561 - Phe 58 - Leu Phe58Leu ttc/ttg 174 174 pyrazinamide (PZA) 25336456 yes +2289070 2289070 SNP 1 t c coding Rv2043c pncA 2289241 2288681 561 - Phe 58 - Leu Phe58Leu ttc/ctc 172 172 pyrazinamide (PZA) 25336456 yes +2289071 2289071 SNP 1 c g coding Rv2043c pncA 2289241 2288681 561 - His 57 - Gln His57Gln cac/ag 171 171 pyrazinamide (PZA) 25336456 yes +2289072 2289072 SNP 1 a g coding Rv2043c pncA 2289241 2288681 561 - His 57 - Arg His57Arg cac/cgc 170 170 pyrazinamide (PZA) 25336456 yes +2289072 2289072 SNP 1 a c coding Rv2043c pncA 2289241 2288681 561 - His 57 - Pro His57Pro cac/ccc 170 170 pyrazinamide (PZA) 25336456 yes +2289073 2289073 SNP 1 c g coding Rv2043c pncA 2289241 2288681 561 - His 57 - Asp His57Asp cac/gac 169 169 pyrazinamide (PZA) 19861002 +2289073 2289073 SNP 1 c t coding Rv2043c pncA 2289241 2288681 561 - His 57 - Tyr His57Tyr cac/tac 169 169 pyrazinamide (PZA) 16848344 +2289081 2289081 SNP 1 c g coding Rv2043c pncA 2289241 2288681 561 - Pro 54 - Arg Pro54Arg ccg/cgg 161 161 pyrazinamide (PZA) 25336456 yes +2289081 2289081 SNP 1 c a coding Rv2043c pncA 2289241 2288681 561 - Pro 54 - Gln Pro54Gln ccg/cag 161 161 pyrazinamide (PZA) 25336456 yes +2289081 2289081 SNP 1 c t coding Rv2043c pncA 2289241 2288681 561 - Pro 54 - Leu Pro54Leu ccg/ctg 161 161 pyrazinamide (PZA) 16848344 +2289082 2289082 SNP 1 c t coding Rv2043c pncA 2289241 2288681 561 - Pro 54 - Ser Pro54Ser ccg/tcg 160 160 pyrazinamide (PZA) 25336456 yes +2289089 2289089 SNP 1 c a coding Rv2043c pncA 2289241 2288681 561 - His 51 - Gln His51Gln cac/caa 153 153 pyrazinamide (PZA) 25336456 yes +2289090 2289090 SNP 1 a g coding Rv2043c pncA 2289241 2288681 561 - His 51 - Arg His51Arg cac/cgc 152 152 pyrazinamide (PZA) 25336456 yes +2289090 2289090 SNP 1 a c coding Rv2043c pncA 2289241 2288681 561 - His 51 - Pro His51Pro cac/ccc 152 152 pyrazinamide (PZA) 25336456 yes +2289091 2289091 SNP 1 c t coding Rv2043c pncA 2289241 2288681 561 - His 51 - Tyr His51Tyr cac/tac 151 151 pyrazinamide (PZA) 25336456 yes +2289096 2289096 SNP 1 a c coding Rv2043c pncA 2289241 2288681 561 - Asp 49 - Ala Asp49Ala gac/gcc 146 146 pyrazinamide (PZA) 11641519 +2289096 2289096 SNP 1 a g coding Rv2043c pncA 2289241 2288681 561 - Asp 49 - Gly Asp49Gly gac/ggc 146 146 pyrazinamide (PZA) 10390239 +2289097 2289097 SNP 1 g a coding Rv2043c pncA 2289241 2288681 561 - Asp 49 - Asn Asp49Asn gac/aac 145 145 pyrazinamide (PZA) 25336456 yes +2289100 2289100 SNP 1 a g coding Rv2043c pncA 2289241 2288681 561 - Lys 48 - Glu Lys48Glu aag/gag 142 142 pyrazinamide (PZA) 25336456 yes +2289100 2289100 SNP 1 a t coding Rv2043c pncA 2289241 2288681 561 - Lys 48 - STOP Lys48STOP aag/tag 142 142 pyrazinamide (PZA) 25336456 yes +2289103 2289103 SNP 1 a g coding Rv2043c pncA 2289241 2288681 561 - Thr 47 - Ala Thr47Ala acc/gcc 139 139 pyrazinamide (PZA) 22646308 +2289103 2289103 SNP 1 a c coding Rv2043c pncA 2289241 2288681 561 - Thr 47 - Pro Thr47Pro acc/ccc 139 139 pyrazinamide (PZA) 25336456 yes +2289108 2289108 SNP 1 t g coding Rv2043c pncA 2289241 2288681 561 - Val 45 - Gly Val45Gly gtg/ggg 134 134 pyrazinamide (PZA) 11641519 +2289111 2289111 SNP 1 t g coding Rv2043c pncA 2289241 2288681 561 - Val 44 - Gly Val44Gly gtc/ggc 131 131 pyrazinamide (PZA) 25336456 yes +2289133 2289133 SNP 1 g t coding Rv2043c pncA 2289241 2288681 561 - Glu 37 - top Glu37top gaa/taa 109 109 pyrazinamide (PZA) 25336456 yes +2289138 2289138 SNP 1 t c coding Rv2043c pncA 2289241 2288681 561 - Leu 35 - Pro Leu35Pro ctg/ccg 104 104 pyrazinamide (PZA) 25336456 yes +2289140 2289140 SNP 1 c g coding Rv2043c pncA 2289241 2288681 561 - Tyr 34 - STOP Tyr34STOP tac/tag 102 102 pyrazinamide (PZA) 25336456 yes +2289150 2289150 SNP 1 t g coding Rv2043c pncA 2289241 2288681 561 - Ile 31 - Ser Ile31Ser atc/agc 92 92 pyrazinamide (PZA) 25336456 yes +2289159 2289159 SNP 1 c a coding Rv2043c pncA 2289241 2288681 561 - Ala 28 - Asp Ala28Asp gcc/gac 83 83 pyrazinamide (PZA) 11641519 +2289162 2289162 SNP 1 t c coding Rv2043c pncA 2289241 2288681 561 - Leu 27 - Pro Leu27Pro ctg/ccg 80 80 pyrazinamide (PZA) 25336456 yes +2289171 2289171 SNP 1 g a coding Rv2043c pncA 2289241 2288681 561 - Gly 24 - Asp Gly24Asp ggc/gac 71 71 pyrazinamide (PZA) 25336456 yes +2289180 2289180 SNP 1 t g coding Rv2043c pncA 2289241 2288681 561 - Val 21 - Gly Val21Gly gta/gga 62 62 pyrazinamide (PZA) 25336456 yes +2289186 2289186 SNP 1 t c coding Rv2043c pncA 2289241 2288681 561 - Leu 19 - Pro Leu19Pro ctg/ccg 56 56 pyrazinamide (PZA) 25336456 yes +2289193 2289193 SNP 1 g a coding Rv2043c pncA 2289241 2288681 561 - Gly 17 - Ser Gly17Ser ggc/agc 49 49 pyrazinamide (PZA) 25336456 yes +2289200 2289200 SNP 1 c a coding Rv2043c pncA 2289241 2288681 561 - Cys 14 - STOP Cys14STOP tgc/tga 42 42 pyrazinamide (PZA) 25336456 yes +2289201 2289201 SNP 1 g a coding Rv2043c pncA 2289241 2288681 561 - Cys 14 - Tyr Cys14Tyr tgc/tac 41 41 pyrazinamide (PZA) 11641519 +2289202 2289202 SNP 1 t c coding Rv2043c pncA 2289241 2288681 561 - Cys 14 - Arg Cys14Arg tgc/cgc 40 40 pyrazinamide (PZA) 25336456 yes +2289203 2289203 SNP 1 c g coding Rv2043c pncA 2289241 2288681 561 - Phe 13 - Leu Phe13Leu ttc/ttg 39 39 pyrazinamide (PZA) 25336456 yes +2289204 2289204 SNP 1 t c coding Rv2043c pncA 2289241 2288681 561 - Phe 13 - Ser Phe13Ser ttc/tcc 38 38 pyrazinamide (PZA) 10390238 +2289206 2289206 SNP 1 c g coding Rv2043c pncA 2289241 2288681 561 - Asp 12 - Glu Asp12Glu gac/gag 36 36 pyrazinamide (PZA) 25336456 yes +2289207 2289207 SNP 1 a c coding Rv2043c pncA 2289241 2288681 561 - Asp 12 - Ala Asp12Ala gac/gcc 35 35 pyrazinamide (PZA) 25336456 yes +2289208 2289208 SNP 1 g a coding Rv2043c pncA 2289241 2288681 561 - Asp 12 - Asn Asp12Asn gac/aac 34 34 pyrazinamide (PZA) 9055989 +2289213 2289213 SNP 1 a g coding Rv2043c pncA 2289241 2288681 561 - Gln 10 - Arg Gln10Arg cag/cgg 29 29 pyrazinamide (PZA) 10681313 +2289213 2289213 SNP 1 a c coding Rv2043c pncA 2289241 2288681 561 - Gln 10 - Pro Gln10Pro cag/ccg 29 29 pyrazinamide (PZA) 21300839 +2289214 2289214 SNP 1 c a coding Rv2043c pncA 2289241 2288681 561 - Gln 10 - Lys Gln10Lys cag/aag 28 28 pyrazinamide (PZA) 25336456 yes +2289216 2289216 SNP 1 t c coding Rv2043c pncA 2289241 2288681 561 - Val 9 - Ala Val9Ala gtg/gcg 26 26 pyrazinamide (PZA) 11641519 +2289216 2289216 SNP 1 t g coding Rv2043c pncA 2289241 2288681 561 - Val 9 - Gly Val9Gly gtg/ggg 26 26 pyrazinamide (PZA) 11641519 +2289218 2289218 SNP 1 c a coding Rv2043c pncA 2289241 2288681 561 - Asp 8 - Glu Asp8Glu gac/gaa 24 24 pyrazinamide (PZA) 25336456 yes +2289219 2289219 SNP 1 a c coding Rv2043c pncA 2289241 2288681 561 - Asp 8 - Ala Asp8Ala gac/gcc 23 23 pyrazinamide (PZA) 25336456 yes +2289219 2289219 SNP 1 a g coding Rv2043c pncA 2289241 2288681 561 - Asp 8 - Gly Asp8Gly gac/ggc 23 23 pyrazinamide (PZA) 11641519 +2289220 2289220 SNP 1 g a coding Rv2043c pncA 2289241 2288681 561 - Asp 8 - Asn Asp8Asn gac/aac 22 22 pyrazinamide (PZA) 25336456 yes +2289222 2289222 SNP 1 t a coding Rv2043c pncA 2289241 2288681 561 - Val 7 - Asp Val7Asp gtc/gac 20 20 pyrazinamide (PZA) 11641519 +2289222 2289222 SNP 1 t g coding Rv2043c pncA 2289241 2288681 561 - Val 7 - Gly Val7Gly gtc/ggc 20 20 pyrazinamide (PZA) 25336456 yes +2289223 2289223 SNP 1 g t coding Rv2043c pncA 2289241 2288681 561 - Val 7 - Phe Val7Phe gtc/ttc 19 19 pyrazinamide (PZA) 25336456 yes +2289225 2289225 SNP 1 t c coding Rv2043c pncA 2289241 2288681 561 - Ile 6 - Thr Ile6Thr atc/acc 17 17 pyrazinamide (PZA) 25336456 yes +2289226 - Ins 1 t tg coding Rv2043c pncA 2289241 2288681 561 - Ile 6 - - Ile6- atc/catc 16 16 pyrazinamide (PZA) 22646308 +2289231 2289231 SNP 1 t c coding Rv2043c pncA 2289241 2288681 561 - Leu 4 - Ser Leu4Ser ttg/tcg 11 11 pyrazinamide (PZA) 25336456 yes +2289231 2289231 SNP 1 t g coding Rv2043c pncA 2289241 2288681 561 - Leu 4 - Trp Leu4Trp ttg/tgg 11 11 pyrazinamide (PZA) 11641519 +2289234 2289234 SNP 1 c a coding Rv2043c pncA 2289241 2288681 561 - Ala 3 - Glu Ala3Glu gcg/gag 8 8 pyrazinamide (PZA) 25336456 yes +2289235 2289235 SNP 1 g c coding Rv2043c pncA 2289241 2288681 561 - Ala 3 - Pro Ala3Pro gcg/ccg 7 7 pyrazinamide (PZA) 10390238 +2289239 2289239 SNP 1 g t coding Rv2043c pncA 2289241 2288681 561 - Met 1 - Ile Met1Ile atg/att 3 3 pyrazinamide (PZA) 11641519 +2289239 2289239 SNP 1 g a coding Rv2043c pncA 2289241 2288681 561 - Met 1 - Ile Met1Ile atg/ata 3 3 pyrazinamide (PZA) 25336456 yes +2289240 2289240 SNP 1 t a coding Rv2043c pncA 2289241 2288681 561 - Met 1 - Lys Met1Lys atg/aag 2 2 pyrazinamide (PZA) 25336456 yes +2289240 2289240 SNP 1 t c coding Rv2043c pncA 2289241 2288681 561 - Met 1 - Thr Met1Thr atg/acg 2 2 pyrazinamide (PZA) 25336456 yes +2289248 2289248 SNP 1 t c intergenic Rv2043c pncA 2289241 2288681 561 - - - - - --- - -7 -7 pyrazinamide (PZA) 25336456 yes +2289248 2289248 SNP 1 t g intergenic Rv2043c pncA 2289241 2288681 561 - - - - - --- - -7 -7 pyrazinamide (PZA) 25336456 yes +2289252 2289252 SNP 1 a g intergenic Rv2043c pncA 2289241 2288681 561 - - - - - --- - -11 -11 pyrazinamide (PZA) 22646308 yes +2289252 2289252 SNP 1 a c intergenic Rv2043c pncA 2289241 2288681 561 - - - - - --- - -11 -11 pyrazinamide (PZA) 25336456 yes +2289252 2289252 SNP 1 a t intergenic Rv2043c pncA 2289241 2288681 561 - - - - - --- - -11 -11 pyrazinamide (PZA) 25336456 yes +2715342 2715342 SNP 1 g a intergenic Rv2416c eis 2715332 2714124 1209 - - - - - --- - -10 -10 kanamycin (KAN) 21300839 +2715346 2715346 SNP 1 c t intergenic Rv2416c eis 2715332 2714124 1209 - - - - - --- - -14 -14 kanamycin (KAN) 21300839 +2726136 2726136 SNP 1 c t intergenic Rv2428 ahpC 2726193 2726780 588 + - - - - --- - -57 -57 isoniazid (INH) 22646308 +2726145 2726145 SNP 1 g a intergenic Rv2428 ahpC 2726193 2726780 588 + - - - - --- - -48 -48 isoniazid (INH) 12654653 +3073808 3073808 SNP 1 c g coding Rv2764c thyA 3074471 3073680 792 - Arg 222 - Gly Arg222Gly cgc/ggc 664 664 para-aminosalicylic acid (PAS) 15225321 +4241078 4241078 SNP 1 a g coding Rv3793 embC 4239863 4243147 3285 + Ile 406 - Val Ile406Val atc/gtc 1216 1216 ethambutol (EMB) 20427375 +4243221 4243221 SNP 1 c t intergenic Rv3794 embA 4243233 4246517 3285 + - - - - --- - -12 -12 ethambutol (EMB) 20427375 +4243225 4243225 SNP 1 c a intergenic Rv3794 embA 4243233 4246517 3285 + - - - - --- - -8 -8 ethambutol (EMB) 20427375 +4243242 4243242 SNP 1 g a coding Rv3794 embA 4243233 4246517 3285 + Asp 4 - Asn Asp4Asn gac/aac 10 10 ethambutol (EMB) 10639358 +4243245 4243245 SNP 1 g a coding Rv3794 embA 4243233 4246517 3285 + Gly 5 - Ser Gly5Ser ggt/agt 13 13 ethambutol (EMB) 10639358 +4243833 4243833 SNP 1 g a coding Rv3794 embA 4243233 4246517 3285 + Ala 201 - Thr Ala201Thr gcg/acg 601 601 ethambutol (EMB) 10639358 +4244193 4244193 SNP 1 g a coding Rv3794 embA 4243233 4246517 3285 + Gly 321 - Ser Gly321Ser ggc/agc 961 961 ethambutol (EMB) 10639358 +4244281 4244281 SNP 1 g a coding Rv3794 embA 4243233 4246517 3285 + Gly 350 - Asp Gly350Asp ggc/gac 1049 1049 ethambutol (EMB) 10639358 +4244617 4244617 SNP 1 c t coding Rv3794 embA 4243233 4246517 3285 + Ala 462 - Val Ala462Val gcg/gtg 1385 1385 ethambutol (EMB) 10639358 +4245730 4245730 SNP 1 a c coding Rv3794 embA 4243233 4246517 3285 + Asp 833 - Ala Asp833Ala gac/gcc 2498 2498 ethambutol (EMB) 10639358 +4246734 4246734 SNP 1 t g coding Rv3795 embB 4246514 4249810 3297 + Leu 74 - Arg Leu74Arg ctg/cgg 221 221 ethambutol (EMB) 20427375 +4247402 4247402 SNP 1 t g coding Rv3795 embB 4246514 4249810 3297 + Ser 297 - Ala Ser297Ala tcg/gcg 889 889 ethambutol (EMB) 10639358 +4247429 4247429 SNP 1 a g coding Rv3795 embB 4246514 4249810 3297 + Met 306 - Val Met306Val atg/gtg 916 916 ethambutol (EMB) 21300839 yes +4247429 4247429 SNP 1 a c coding Rv3795 embB 4246514 4249810 3297 + Met 306 - Leu Met306Leu atg/ctg 916 916 ethambutol (EMB) 9257740 yes +4247430 4247430 SNP 1 t c coding Rv3795 embB 4246514 4249810 3297 + Met 306 - Thr Met306Thr atg/acg 917 917 ethambutol (EMB) 11854934 yes +4247431 4247431 SNP 1 g a coding Rv3795 embB 4246514 4249810 3297 + Met 306 - Ile Met306Ile atg/ata 918 918 ethambutol (EMB) 21300839 yes +4247431 4247431 SNP 1 g c coding Rv3795 embB 4246514 4249810 3297 + Met 306 - Ile Met306Ile atg/atc 918 918 ethambutol (EMB) 21300839 yes +4247431 4247431 SNP 1 g t coding Rv3795 embB 4246514 4249810 3297 + Met 306 - Ile Met306Ile atg/att 918 918 ethambutol (EMB) 21300839 yes +4247469 4247469 SNP 1 a c coding Rv3795 embB 4246514 4249810 3297 + Tyr 319 - Ser Tyr319Ser tat/tct 956 956 ethambutol (EMB) 16641474 +4247495 4247495 SNP 1 g t coding Rv3795 embB 4246514 4249810 3297 + Asp 328 - Tyr Asp328Tyr gat/tat 982 982 ethambutol (EMB) 10639358 +4247496 4247496 SNP 1 a g coding Rv3795 embB 4246514 4249810 3297 + Asp 328 - Gly Asp328Gly gat/ggt 983 983 ethambutol (EMB) 10639358 +4247507 4247507 SNP 1 t c coding Rv3795 embB 4246514 4249810 3297 + Trp 332 - Arg Trp332Arg tgg/cgg 994 994 ethambutol (EMB) 22646308 +4247513 4247513 SNP 1 t c coding Rv3795 embB 4246514 4249810 3297 + Tyr 334 - His Tyr334His tac/cac 1000 1000 ethambutol (EMB) 16641474 +4247573 4247573 SNP 1 g a coding Rv3795 embB 4246514 4249810 3297 + Asp 354 - Asn Asp354Asn gac/aac 1060 1060 ethambutol (EMB) 20427375 +4247717 4247717 SNP 1 c g coding Rv3795 embB 4246514 4249810 3297 + Leu 402 - Val Leu402Val ctg/gtg 1204 1204 ethambutol (EMB) 20427375 +4247723 4247723 SNP 1 c t coding Rv3795 embB 4246514 4249810 3297 + Pro 404 - Ser Pro404Ser ccg/tcg 1210 1210 ethambutol (EMB) 20427375 +4247729 4247729 SNP 1 g a coding Rv3795 embB 4246514 4249810 3297 + Gly 406 - Ser Gly406Ser ggc/agc 1216 1216 ethambutol (EMB) 20427375 yes +4247729 4247729 SNP 1 g t coding Rv3795 embB 4246514 4249810 3297 + Gly 406 - Cys Gly406Cys ggc/tgc 1216 1216 ethambutol (EMB) 24055765 yes +4247730 4247730 SNP 1 g c coding Rv3795 embB 4246514 4249810 3297 + Gly 406 - Ala Gly406Ala ggc/gcc 1217 1217 ethambutol (EMB) 20427375 yes +4247730 4247730 SNP 1 g a coding Rv3795 embB 4246514 4249810 3297 + Gly 406 - Asp Gly406Asp ggc/gac 1217 1217 ethambutol (EMB) 20427375 yes +4247863 4247863 SNP 1 c g coding Rv3795 embB 4246514 4249810 3297 + Ile 450 - Met Ile450Met atc/atg 1350 1350 ethambutol (EMB) 20427375 +4247873 4247873 SNP 1 g a coding Rv3795 embB 4246514 4249810 3297 + Ala 454 - Thr Ala454Thr gcg/acg 1360 1360 ethambutol (EMB) 20427375 +4248002 4248002 SNP 1 c a coding Rv3795 embB 4246514 4249810 3297 + Gln 497 - Lys Gln497Lys cag/aag 1489 1489 ethambutol (EMB) 20427375 +4248003 4248003 SNP 1 a g coding Rv3795 embB 4246514 4249810 3297 + Gln 497 - Arg Gln497Arg cag/cgg 1490 1490 ethambutol (EMB) 20427375 yes +4248747 4248747 SNP 1 g a coding Rv3795 embB 4246514 4249810 3297 + Gly 745 - Asp Gly745Asp ggc/gac 2234 2234 ethambutol (EMB) 10639358 +4249518 4249518 SNP 1 a g coding Rv3795 embB 4246514 4249810 3297 + His 1002 - Arg His1002Arg cac/cgc 3005 3005 ethambutol (EMB) 22646308 +4326087 4326087 SNP 1 c a coding Rv3854c ethA 4327473 4326004 1470 - Arg 463 - Ser Arg463Ser cgt/agt 1387 1387 ethionamide (ETH) 14638486 +4326236 4326236 SNP 1 g a coding Rv3854c ethA 4327473 4326004 1470 - Gly 413 - Asp Gly413Asp ggt/gat 1238 1238 ethionamide (ETH) 14638486 +4326300 4326300 SNP 1 a g coding Rv3854c ethA 4327473 4326004 1470 - Thr 392 - Ala Thr392Ala acg/gcg 1174 1174 ethionamide (ETH) 14638486 +4326320 4326320 SNP 1 g a coding Rv3854c ethA 4327473 4326004 1470 - Gly 385 - Asp Gly385Asp ggc/gac 1154 1154 ethionamide (ETH) 14638486 +4326333 4326333 SNP 1 g c coding Rv3854c ethA 4327473 4326004 1470 - Ala 381 - Pro Ala381Pro gcc/ccc 1141 1141 ethionamide (ETH) 10944230 +4326449 4326449 SNP 1 c a coding Rv3854c ethA 4327473 4326004 1470 - Thr 342 - Lys Thr342Lys acg/aag 1025 1025 ethionamide (ETH) 10944230 +4326461 4326461 SNP 1 t g coding Rv3854c ethA 4327473 4326004 1470 - Ile 338 - Ser Ile338Ser atc/agc 1013 1013 ethionamide (ETH) 14638486 +4326738 4326738 SNP 1 c t coding Rv3854c ethA 4327473 4326004 1470 - Gln 246 - STOP Gln246STOP cag/tag 736 736 ethionamide (ETH) 14638486 +4326807 4326807 SNP 1 g a coding Rv3854c ethA 4327473 4326004 1470 - Glu 223 - Lys Glu223Lys gag/aag 667 667 ethionamide (ETH) 14638486 +4326917 4326917 SNP 1 c a coding Rv3854c ethA 4327473 4326004 1470 - Thr 186 - Lys Thr186Lys acg/aag 557 557 ethionamide (ETH) 10944230 +4327224 4327224 SNP 1 t g coding Rv3854c ethA 4327473 4326004 1470 - Tyr 84 - Asp Tyr84Asp tac/gac 250 250 ethionamide (ETH) 10944230 +4327301 4327301 SNP 1 a c coding Rv3854c ethA 4327473 4326004 1470 - Asp 58 - Ala Asp58Ala gac/gcc 173 173 ethionamide (ETH) 10944230 +4327307 4327307 SNP 1 a c coding Rv3854c ethA 4327473 4326004 1470 - Asp 56 - Ala Asp56Ala gac/gcc 167 167 ethionamide (ETH) 14638486 +4327322 4327322 SNP 1 c t coding Rv3854c ethA 4327473 4326004 1470 - Pro 51 - Leu Pro51Leu ccc/ctc 152 152 ethionamide (ETH) 10944230 +4327346 4327346 SNP 1 g a coding Rv3854c ethA 4327473 4326004 1470 - Gly 43 - Asp Gly43Asp ggc/gac 128 128 ethionamide (ETH) 14638486 +4327347 4327347 SNP 1 g t coding Rv3854c ethA 4327473 4326004 1470 - Gly 43 - Cys Gly43Cys ggc/tgc 127 127 ethionamide (ETH) 10944230 +4407604 4407604 SNP 1 c a coding Rv3919c gidB 4408202 4407528 675 - Ala 200 - Glu Ala200Glu gcg/gag 599 599 streptomycin (SM) 22646308 +4407790 4407790 SNP 1 c t coding Rv3919c gidB 4408202 4407528 675 - Ala 138 - Val Ala138Val gcg/gtg 413 413 streptomycin (SM) 22646308 +4407824 4407824 SNP 1 c t coding Rv3919c gidB 4408202 4407528 675 - Gln 127 - STOP Gln127STOP caa/taa 379 379 streptomycin (SM) 22646308 +4407931 4407931 SNP 1 t c coding Rv3919c gidB 4408202 4407528 675 - Leu 91 - Pro Leu91Pro cta/cca 272 272 streptomycin (SM) 22646308 +4407940 4407940 SNP 1 t c coding Rv3919c gidB 4408202 4407528 675 - Val 88 - Ala Val88Ala gta/gca 263 263 streptomycin (SM) 22646308 +4407992 4407992 SNP 1 g a coding Rv3919c gidB 4408202 4407528 675 - Gly 71 - Arg Gly71Arg gga/aga 211 211 streptomycin (SM) 22646308 +4408009 4408009 SNP 1 t g coding Rv3919c gidB 4408202 4407528 675 - Val 65 - Gly Val65Gly gtc/ggc 194 194 streptomycin (SM) 22646308 +4408102 4408102 SNP 1 g c coding Rv3919c gidB 4408202 4407528 675 - Gly 34 - Ala Gly34Ala ggg/gcg 101 101 streptomycin (SM) 22646308 +156593 156593 SNP 1 t c coding Rv0129c fbpC 157600 156578 1023 - Ala 336 - Ala Ala336Ala gct/gcc 1008 1008 phylo (M. canettii) 22768315 +157129 157129 SNP 1 g a coding Rv0129c fbpC 157600 156578 1023 - Gly 158 - Ser Gly158Ser ggc/agc 472 472 phylo (Delhi/CAS) 22768315 +157292 157292 SNP 1 g a coding Rv0129c fbpC 157600 156578 1023 - Glu 103 - Glu Glu103Glu gag/gaa 309 309 phylo (LAM) 22768315 +273265 273265 SNP 1 g t coding Rv0228 - 273055 274278 1224 + Gly 71 - Cys Gly71Cys ggc/tgc 211 211 phylo (West African 2) 22768315 +491591 491591 SNP 1 a t coding Rv0407 fgd1 490783 491793 1011 + Lys 270 - Met Lys270Met aag/atg 809 809 phylo (Haarlem) 22768315 +491668 491668 SNP 1 a g coding Rv0407 fgd1 490783 491793 1011 + Lys 296 - Glu Lys296Glu aag/gag 886 886 phylo (West African 2) 22768315 +491742 491742 SNP 1 t c coding Rv0407 fgd1 490783 491793 1011 + Phe 320 - Phe Phe320Phe ttt/ttc 960 960 phylo (not Euro-American, M. africanum, M. bovis, M. canettii, M. caprae, M. microti, M. pinipedii, Beijing, Delhi/CAS, EAI) 22768315 +495108 495108 SNP 1 c a coding Rv0410c pknG 497314 495062 2253 - Thr 736 - Lys Thr736Lys acg/aag 2207 2207 phylo (West African 2) 22768315 +495322 495322 SNP 1 g a coding Rv0410c pknG 497314 495062 2253 - Ala 665 - Thr Ala665Thr gcc/acc 1993 1993 phylo (West African 1a, West African 1b) 22768315 +495473 495473 SNP 1 g a coding Rv0410c pknG 497314 495062 2253 - Ser 614 - Ser Ser614Ser tcg/tca 1842 1842 phylo (EAI) 22768315 +497108 497108 SNP 1 g a coding Rv0410c pknG 497314 495062 2253 - Pro 69 - Pro Pro69Pro ccg/cca 207 207 phylo (M. bovis, M. caprae) 22768315 +648756 648756 SNP 1 c t coding Rv0557 mgtA 648536 649672 1137 + Thr 74 - Ile Thr74Ile acg/atg 221 221 phylo (West African 1a, West African 1b) 22768315 +648856 648856 SNP 1 t c coding Rv0557 mgtA 648536 649672 1137 + Gly 107 - Gly Gly107Gly ggt/ggc 321 321 phylo (not Euro-American, M. africanum, M. bovis, M. canettii, M. caprae, M. microti, M. pinipedii, Beijing, Delhi/CAS, EAI) 22768315 +648990 648990 SNP 1 g c coding Rv0557 mgtA 648536 649672 1137 + Arg 152 - Pro Arg152Pro cgc/ccc 455 455 phylo (Haarlem) 22768315 +648992 648992 SNP 1 c g coding Rv0557 mgtA 648536 649672 1137 + Leu 153 - Val Leu153Val ctg/gtg 457 457 phylo (S-type) 22768315 +649067 649067 SNP 1 c g coding Rv0557 mgtA 648536 649672 1137 + Arg 178 - Gly Arg178Gly cgg/ggg 532 532 phylo (Cameroon) 22768315 +649345 649345 SNP 1 c t coding Rv0557 mgtA 648536 649672 1137 + Ala 270 - Ala Ala270Ala gcc/gct 810 810 phylo (EAI) 22768315 +649446 649446 SNP 1 g a coding Rv0557 pimB 648536 649672 1137 + Gly 304 - Asp Gly304Asp ggc/gac 911 911 phylo (West African 1a, West African 1b) 22768315 +649585 649585 SNP 1 g a coding Rv0557 mgtA 648536 649672 1137 + Val 350 - Val Val350Val gtg/gta 1050 1050 phylo (M. caprae) 22768315 +649601 649601 SNP 1 c t coding Rv0557 mgtA 648536 649672 1137 + Pro 356 - Ser Pro356Ser ccg/tcg 1066 1066 phylo (M. canettii) 22768315 +1128814 1128814 SNP 1 g a coding Rv1009 rpfB 1128091 1129179 1089 + Glu 242 - Lys Glu242Lys gag/aag 724 724 phylo (EAI Manila) 22768315 +1128825 1128825 SNP 1 c t coding Rv1009 rpfB 1128091 1129179 1089 + Gly 245 - Gly Gly245Gly ggc/ggt 735 735 phylo (M. microti, M. pinipedii) 22768315 +1128915 1128915 SNP 1 g c coding Rv1009 rpfB 1128091 1129179 1089 + Glu 275 - Asp Glu275Asp gag/gac 825 825 phylo (M. canettii) 22768315 +1128935 1128935 SNP 1 g a coding Rv1009 rpfB 1128091 1129179 1089 + Gly 282 - Glu Gly282Glu gga/gaa 845 845 phylo (M. bovis, M. caprae) 22768315 +1129124 1129124 SNP 1 t a coding Rv1009 rpfB 1128091 1129179 1089 + Leu 345 - Gln Leu345Gln ctg/cag 1034 1034 phylo (M. canettii) 22768315 +1129128 1129128 SNP 1 t c coding Rv1009 rpfB 1128091 1129179 1089 + Arg 346 - Arg Arg346Arg cgt/cgc 1038 1038 phylo (M. canettii) 22768315 +1129160 1129160 SNP 1 c t coding Rv1009 rpfB 1128091 1129179 1089 + Ala 357 - Val Ala357Val gca/gta 1070 1070 phylo (M. bovis) 22768315 +1129165 1129165 SNP 1 g a coding Rv1009 rpfB 1128091 1129179 1089 + Ala 359 - Thr Ala359Thr gcg/acg 1075 1075 phylo (TUR) 22768315 +1816848 1816848 SNP 1 g t coding Rv1617 pykA 1816189 1817607 1419 + Glu 220 - Asp Glu220Asp gag/gat 660 660 phylo (M. africanum, M. caprae, M. microti, M. pinipedii) 22768315 +2053454 2053454 SNP 1 g a coding Rv1811 mgtC 2053443 2054147 705 + Leu 4 - Leu Leu4Leu ctg/cta 12 12 phylo (Ural) 22768315 +2053487 2053487 SNP 1 c t coding Rv1811 mgtC 2053443 2054147 705 + Val 15 - Val Val15Val gtc/gtt 45 45 phylo (M. canettii) 22768315 +2053682 2053682 SNP 1 c t coding Rv1811 mgtC 2053443 2054147 705 + Ile 80 - Ile Ile80Ile atc/att 240 240 phylo (LAM) 22768315 +2053726 2053726 SNP 1 c t coding Rv1811 mgtC 2053443 2054147 705 + Thr 95 - Met Thr95Met acg/atg 284 284 phylo (West African 1b) 22768315 +2053762 2053762 SNP 1 c t coding Rv1811 mgtC 2053443 2054147 705 + Ala 107 - Val Ala107Val gcc/gtc 320 320 phylo (West African 2) 22768315 +2053987 2053987 SNP 1 g a coding Rv1811 mgtC 2053443 2054147 705 + Arg 182 - His Arg182His cgc/cac 545 545 phylo (Haarlem) 22768315 +2134258 2134258 SNP 1 c t coding Rv1884c rpfC 2134261 2133731 531 - His 2 - Tyr His2Tyr cat/tat 4 4 phylo (M. canettii) 22768315 +2223896 2223896 SNP 1 t c coding Rv1980c mpt64 2224029 2223343 687 - Met 45 - Thr Met45Thr atg/acg 134 134 phylo (M. canettii) 22768315 +2223902 2223902 SNP 1 t a coding Rv1980c mpt64 2224029 2223343 687 - Ile 43 - Asn Ile43Asn att/aat 128 128 phylo (West African 1a, West African 1b) 22768315 +2279228 2279228 SNP 1 g t coding Rv2032 acg 2279129 2280124 996 + Ala 34 - Ser Ala34Ser gcc/tcc 100 100 phylo (M. caprae) 22768315 +2279314 2279314 SNP 1 g c coding Rv2032 acg 2279129 2280124 996 + Gly 62 - Gly Gly62Gly ggg/ggc 186 186 phylo (M. canettii) 22768315 +2280081 2280081 SNP 1 c t coding Rv2032 acg 2279129 2280124 996 + Pro 318 - Leu Pro318Leu cca/cta 953 953 phylo (M. bovis, M. caprae) 22768315 +2726105 2726105 SNP 1 g a intergenic Rv2428 ahpC 2726193 2726780 588 + - - - - --- - -88 -88 phylo (Delhi/CAS, 3) 22768315 +2751764 2751764 SNP 1 g a coding Rv2450c rpfE 2752180 2751662 519 - Gly 139 - Gly Gly139Gly ggg/gga 417 417 phylo (M. canettii) 22768315 +2751866 2751866 SNP 1 g a coding Rv2450c rpfE 2752180 2751662 519 - Ala 105 - Ala Ala105Ala gcg/gca 315 315 phylo (M. canettii) 22768315 +2752122 2752122 SNP 1 c g coding Rv2450c rpfE 2752180 2751662 519 - Thr 20 - Arg Thr20Arg acg/agg 59 59 phylo (Beijing) 22768315 +2752132 2752132 SNP 1 t c coding Rv2450c rpfE 2752180 2751662 519 - Leu 17 - Leu Leu17Leu ttg/ctg 49 49 phylo (West African 1a, West African 1b) 22768315 +2936944 2936944 SNP 1 c g coding Rv2609c - 2937865 2936810 1056 - Gln 308 - Glu Gln308Glu cag/gag 922 922 phylo (M. canettii) 22768315 +2939177 2939177 SNP 1 t c coding Rv2611c - 2939962 2939012 951 - Tyr 262 - Tyr Tyr262Tyr tat/tac 786 786 phylo (West African 2) 22768315 +2939577 2939577 SNP 1 t g coding Rv2611c - 2939962 2939012 951 - Leu 129 - Arg Leu129Arg ctc/cgc 386 386 phylo (M. canettii) 22768315 +2939716 2939716 SNP 1 t c coding Rv2611c - 2939962 2939012 951 - Cys 83 - Arg Cys83Arg tgc/cgc 247 247 phylo (M. canettii) 22768315 +2940461 2940461 SNP 1 t c coding Rv2612c pgsA1 2940612 2939959 654 - Met 51 - Thr Met51Thr atg/acg 152 152 phylo (M. canettii) 22768315 +2940562 2940562 SNP 1 c t coding Rv2612c pgsA1 2940612 2939959 654 - Thr 17 - Thr Thr17Thr acc/act 51 51 phylo (M. canettii) 22768315 +2940608 2940608 SNP 1 g a coding Rv2612c pgsA1 2940612 2939959 654 - Ser 2 - Asn Ser2Asn agc/aac 5 5 phylo (EAI) 22768315 +2940930 2940930 SNP 1 c t coding Rv2613c - 2941196 2940609 588 - Pro 89 - Pro Pro89Pro ccc/cct 267 267 phylo (M. canettii) 22768315 +2941179 2941179 SNP 1 c t coding Rv2613c - 2941196 2940609 588 - Arg 6 - Arg Arg6Arg cgc/cgt 18 18 phylo (Delhi/CAS) 22768315 +2955135 2955135 SNP 1 a c coding Rv2628 - 2955058 2955420 363 + Ile 26 - Ile Ile26Ile ata/atc 78 78 phylo (M. canettii) 22768315 +2955202 2955202 SNP 1 t g coding Rv2628 - 2955058 2955420 363 + Ser 49 - Ala Ser49Ala tcc/gcc 145 145 phylo (M. canettii) 22768315 +2955233 2955233 SNP 1 c t coding Rv2628 - 2955058 2955420 363 + Ser 59 - Leu Ser59Leu tcg/ttg 176 176 phylo (M.africanum, M. bovis, M. canettii, M. caprae, M. microti, M. pinipedii, EAI) 22768315 +2955305 2955305 SNP 1 t g coding Rv2628 - 2955058 2955420 363 + Leu 83 - Trp Leu83Trp ttg/tgg 248 248 phylo (M. microti, M. pinipedii) 22768315 +2955310 2955310 SNP 1 a g coding Rv2628 - 2955058 2955420 363 + Thr 85 - Ala Thr85Ala acc/gcc 253 253 phylo (M. canettii) 22768315 +2955343 2955343 SNP 1 g a coding Rv2628 - 2955058 2955420 363 + Ala 96 - Thr Ala96Thr gcg/acg 286 286 phylo (West African 1a, West African 1b) 22768315 +2955957 2955957 SNP 1 a c coding Rv2629 - 2955767 2956891 1125 + Asp 64 - Ala Asp64Ala gat/gct 191 191 phylo (Beijing) 22768315 +2956731 2956731 SNP 1 c t coding Rv2629 - 2955767 2956891 1125 + Pro 322 - Leu Pro322Leu ccg/ctg 965 965 phylo (Ghana) 22768315 +3296371 - Ins 7 g gccgcggc coding Rv2947c pks15 3297840 3296350 1491 - Gly 490 - - Gly490- ggc/gggccgcggc 1470 1470 phylo (not Euro-American, M. africanum, M. bovis, M. canettii, M. caprae, M. microti, M. pinipedii, Beijing, Delhi/CAS, EAI) 18578864 +3986987 3986987 SNP 1 g t coding Rv3547 ddn 3986844 3987299 456 + Leu 48 - Leu Leu48Leu ctg/ctt 144 144 phylo (West African 1a, West African 1b) 22768315 +3987050 3987050 SNP 1 c t coding Rv3547 ddn 3986844 3987299 456 + Asp 69 - Asp Asp69Asp gac/gat 207 207 phylo (M. canettii) 22768315 +3987111 3987111 SNP 1 c g coding Rv3547 ddn 3986844 3987299 456 + Leu 90 - Val Leu90Val ctc/gtc 268 268 phylo (M. microti, M. pinipedii) 22768315 +3987180 3987180 SNP 1 g a coding Rv3547 ddn 3986844 3987299 456 + Asp 113 - Asn Asp113Asn gac/aac 337 337 phylo (West African 1a, West African 1b) 22768315 +3987287 3987287 SNP 1 t c coding Rv3547 ddn 3986844 3987299 456 + Val 148 - Val Val148Val gtt/gtc 444 444 phylo (M. canettii) 22768315 +7539 7539 SNP 1 a g coding Rv0006 gyrA 7302 9818 2517 + Thr 80 - Ala Thr80Ala acc/gcc 238 238 phylo (Uganda I+II, 4,6,1) 24458512 +7585 7585 SNP 1 g c coding Rv0006 gyrA 7302 9818 2517 + Ser 95 - Thr Ser95Thr agc/acc 284 284 phylo (not H37Rv) 24458512 +491595 491595 SNP 1 c t coding Rv0407 fgd1 490783 491793 1011 + Ala 271 - Ala Ala271Ala gcc/gct 813 813 phylo (West African 1a) 24458512 +575665 575665 SNP 1 g c coding Rv0486 mshA 575348 576790 1443 + Gly 106 - Gly Gly106Gly ggg/ggc 318 318 phylo (M. canettii) 24458512 +575679 575679 SNP 1 a g coding Rv0486 mshA 575348 576790 1443 + Asn 111 - Ser Asn111Ser aac/agc 332 332 phylo (Haarlem) 24458512 +575907 575907 SNP 1 c t coding Rv0486 mshA 575348 576790 1443 + Ala 187 - Val Ala187Val gca/gta 560 560 phylo (Beijing) 24458512 +576077 576077 SNP 1 c t coding Rv0486 mshA 575348 576790 1443 + Leu 244 - Leu Leu244Leu ctg/ttg 730 730 phylo (Tur) 24458512 +1461251 1461251 SNP 1 g t coding Rv1305 atpE 1461045 1461290 246 + Ala 69 - Ala Ala69Ala gcg/gct 207 207 phylo (West African 2) 24458512 +1471848 - Ins 1 t tt ribosomal Rvnr01 rrs 1471846 1473382 1537 + - - - - --- - 4 4 phylo (M. canettii) 24458512 +1471851 1471851 SNP 1 t g ribosomal Rvnr01 rrs 1471846 1473382 1537 + - - - - --- - 6 6 phylo (M. canettii) 24458512 +1473079 1473079 SNP 1 g a ribosomal Rvnr01 rrs 1471846 1473382 1537 + - - - - --- - 1234 1234 phylo (M. microti) 24458512 +1473094 1473094 SNP 1 t c ribosomal Rvnr01 rrs 1471846 1473382 1537 + - - - - --- - 1249 1249 phylo (M. pinipedii) 24458512 +1673338 1673338 SNP 1 g a intergenic Rv1483 fabG1 1673440 1674183 744 + - - - - --- - -102 -102 phylo (West African 1a, West African 1b) 24458512 +1674434 1674434 SNP 1 t c coding Rv1484 inhA 1674202 1675011 810 + Val 78 - Ala Val78Ala gtg/gcg 233 233 phylo (West African 2, 6) 24458512 +1674520 1674520 SNP 1 c t coding Rv1484 inhA 1674202 1675011 810 + Pro 107 - Ser Pro107Ser ccg/tcg 319 319 phylo (M. pinipedii) 24458512 +1674816 1674816 SNP 1 t c coding Rv1484 inhA 1674202 1675011 810 + Gly 205 - Gly Gly205Gly ggt/ggc 615 615 phylo (M. canettii) 24458512 +1833554 1833554 SNP 1 a g coding Rv1630 rpsA 1833542 1834987 1446 + Thr 5 - Ala Thr5Ala acc/gcc 13 13 phylo (M. canettii) 24458512 +1833568 1833568 SNP 1 g c coding Rv1630 rpsA 1833542 1834987 1446 + Pro 9 - Pro Pro9Pro ccg/ccc 27 27 phylo (M. canettii) 24458512 +1834169 1834169 SNP 1 a g coding Rv1630 rpsA 1833542 1834987 1446 + Thr 210 - Ala Thr210Ala acc/gcc 628 628 phylo (M. canettii) 24458512 +1834177 1834177 SNP 1 a c coding Rv1630 rpsA 1833542 1834987 1446 + Arg 212 - Arg Arg212Arg cga/cgc 636 636 phylo (Beijing, 2) 24458512 +1834859 1834859 SNP 1 g a coding Rv1630 rpsA 1833542 1834987 1446 + Ala 440 - Thr Ala440Thr gcg/acg 1318 1318 phylo (M. bovis, M. caprae) 24458512 +1834912 1834912 SNP 1 a g coding Rv1630 rpsA 1833542 1834987 1446 + Glu 457 - Glu Glu457Glu gaa/gag 1371 1371 phylo (M. canettii) 24458512 +2154724 2154724 SNP 1 g t coding Rv1908c katG 2156111 2153889 2223 - Arg 463 - Leu Arg463Leu cgg/ctg 1388 1388 phylo (not Euro-American, M. africanum, M. bovis, M . canettii, M. caprae, M. Microti, M. pinipedii, Beijing, Delhi/CAS, EAI, 4) 9275218 +2289047 2289047 SNP 1 c t coding Rv2043c pncA 2289241 2288681 561 - Ser 65 - Ser Ser65Ser tcc/tct 195 195 phylo (Delhi/CAS) 24458512 +2289073 2289073 SNP 1 c g coding Rv2043c pncA 2289241 2288681 561 - His 57 - Asp His57Asp cac/gac 169 169 phylo (M. bovis) 24458512 +2289104 2289104 SNP 1 a g coding Rv2043c pncA 2289241 2288681 561 - Ala 46 - Ala Ala46Ala gca/gcg 138 138 phylo (M. canettii) 24458512 +3073868 3073868 SNP 1 a g coding Rv2764c thyA 3074471 3073680 792 - Thr 202 - Ala Thr202Ala acc/gcc 604 604 phylo (LAM) 24458512 +3326554 3326554 SNP 1 a c coding Rv2971 - 3326101 3326949 849 + Asn 152 - His Asn152His aac/cac 454 454 phylo (not Euro-American, M. africanum, M. bovis, M . canettii, M. caprae, M. Microti, M. pinipedii, Beijing, Delhi/CAS, EAI) 22911768 +4240671 4240671 SNP 1 c t coding Rv3793 embC 4239863 4243147 3285 + Thr 270 - Ile Thr270Ile acc/atc 809 809 phylo (M. africanum, M. bovis, M. canettii, M.caprae, M. Microti, M. pinipedii, EAI) 24458512 +4242075 4242075 SNP 1 g a coding Rv3793 embC 4239863 4243147 3285 + Arg 738 - Gln Arg738Gln cgg/cag 2213 2213 phylo (Delhi/CAS, 3) 20427375 +4242803 4242803 SNP 1 g c coding Rv3793 embC 4239863 4243147 3285 + Val 981 - Leu Val981Leu gtg/ctg 2941 2941 phylo (Ghana, Haarlem, X-Type, 4,1) 22646308 +4242970 4242970 SNP 1 c t coding Rv3793 embC 4239863 4243147 3285 + Thr 1036 Thr Thr1036Thr acc/act 3108 3108 phylo (M. bovis, M. caprae) 24458512 +4243377 4243377 SNP 1 a c coding Rv3794 embA 4243233 4246517 3285 + Ser 49 - Arg Ser49Arg agc/cgc 145 145 phylo (M. canettii) 24458512 +4243460 4243460 SNP 1 c t coding Rv3794 embA 4243233 4246517 3285 + Cys 76 - Cys Cys76Cys tgc/tgt 228 228 phylo (Beijing, 2,2) 20427375 +4243690 4243690 SNP 1 t c coding Rv3794 embA 4243233 4246517 3285 + Met 153 - Thr Met153Thr atg/acg 458 458 phylo (M. canettii) 24458512 +4247590 4247590 SNP 1 a g coding Rv3795 embB 4246514 4249810 3297 + Leu 359 - Leu Leu359Leu cta/ctg 1077 1077 phylo (M. canettii) 24458512 +4247646 4247646 SNP 1 a c coding Rv3795 embB 4246514 4249810 3297 + Glu 378 - Ala Glu378Ala gag/gcg 1133 1133 phylo (M. africanum, M. bovis, M. canettii, M. caprae, M. Microti, M. pinipedii, EAI) 24458512 +4247815 4247815 SNP 1 c t coding Rv3795 embB 4246514 4249810 3297 + Ala 434 - Ala Ala434Ala gcc/gct 1302 1302 phylo (M. canettii) 24458512 +4248195 4248195 SNP 1 a g coding Rv3795 embB 4246514 4249810 3297 + Lys 561 - Arg Lys561Arg aag/agg 1682 1682 phylo (M. canettii) 24458512 +4248206 4248206 SNP 1 a g coding Rv3795 embB 4246514 4249810 3297 + Ser 565 - Gly Ser565Gly agc/ggc 1693 1693 phylo (M. canettii) 24458512 +4248439 4248439 SNP 1 c t coding Rv3795 embB 4246514 4249810 3297 + Thr 642 - Thr Thr642Thr acc/act 1926 1926 phylo (M. canettii) 24458512 +4407588 4407588 SNP 1 a g coding Rv3919c gidB 4408202 4407528 675 - Ala 205 - Ala Ala205Ala gca/gcg 615 615 phylo (M. africanum, M. bovis, M. canettii, M. caprae, M. Microti, M. pinipedii, Beijing, Delhi/CAS, EAI, 4) 24458512 +4407873 4407873 SNP 1 g t coding Rv3919c gidB 4408202 4407528 675 - Val 110 - Val Val110Val gtg/gtt 330 330 phylo (EAI, 1) 24458512 +4407927 4407927 SNP 1 a c coding Rv3919c gidB 4408202 4407528 675 - Glu 92 - Asp Glu92Asp gaa/gac 276 276 phylo (Beijing, 2,2) 24458512 +4408156 4408156 SNP 1 t g coding Rv3919c gidB 4408202 4407528 675 - Leu 16 - Arg Leu16Arg ctt/cgt 47 47 phylo (LAM, 4,3) 22646308 +4408185 4408185 SNP 1 c t coding Rv3919c gidB 4408202 4407528 675 - Pro 6 - Pro Pro6Pro ccc/cct 18 18 phylo (M. canettii) 24458512 +4408213 4408213 SNP 1 c t intergenic Rv3919c gidB 4408202 4407528 675 - - - - - --- - -11 -11 phylo (Ural) 24458512 +5520 5520 SNP 1 c t coding Rv0005 gyrB 5240 7267 2028 + Pro 94 - Leu Pro94Leu ccg/ctg 281 281 phylo (4,3,2,1) 25176035 +6112 6112 SNP 1 g c coding Rv0005 gyrB 5240 7267 2028 + Met 291 - Ile Met291Ile atg/atc 873 873 phylo (1) 25176035 +6124 6124 SNP 1 c t coding Rv0005 gyrB 5240 7267 2028 + Ala 295 - Ala Ala295Ala gcc/gct 885 885 phylo (1,1,2) 25176035 +7222 7222 SNP 1 c t coding Rv0005 gyrB 5240 7267 2028 + Ser 661 - Ser Ser661Ser agc/agt 1983 1983 phylo (4,3,2,1) 25176035 +7892 7892 SNP 1 g a coding Rv0006 gyrA 7302 9818 2517 + Leu 197 - Leu Leu197Leu ctg/cta 591 591 phylo (4,5) 25176035 +8040 8040 SNP 1 g a coding Rv0006 gyrA 7302 9818 2517 + Gly 247 - Ser Gly247Ser ggc/agc 739 739 phylo (4,3,3) 25176035 +8452 8452 SNP 1 c t coding Rv0006 gyrA 7302 9818 2517 + Ala 384 - Val Ala384Val gca/gta 1151 1151 phylo (1) 25176035 +8876 8876 SNP 1 c t coding Rv0006 gyrA 7302 9818 2517 + Tyr 525 - Tyr Tyr525Tyr tac/tat 1575 1575 phylo (7) 25176035 +9260 9260 SNP 1 g c coding Rv0006 gyrA 7302 9818 2517 + Leu 653 - Leu Leu653Leu ctg/ctc 1959 1959 phylo (1,2,1) 25176035 +9566 9566 SNP 1 c t coding Rv0006 gyrA 7302 9818 2517 + Tyr 755 - Tyr Tyr755Tyr tac/tat 2265 2265 phylo (5) 25176035 +9611 9611 SNP 1 c t coding Rv0006 gyrA 7302 9818 2517 + Asp 770 - Asp Asp770Asp gac/gat 2310 2310 phylo (3,1,2,2) 25176035 +62657 62657 SNP 1 g a coding Rv0058 dnaB 60396 63020 2625 + Pro 754 - Pro Pro754Pro ccg/cca 2262 2262 phylo (4,1) 25176035 +107794 107794 SNP 1 c t coding Rv0098 fcoT 107600 108151 552 + Ala 65 - Ala Ala65Ala gcc/gct 195 195 phylo (4,1,2,1) 25176035 +346693 346693 SNP 1 g t coding Rv0284 eccC3 345635 349627 3993 + Ser 353 - Ser Ser353Ser tcg/tct 1059 1059 phylo (2,2,2) 25176035 +355181 355181 SNP 1 g a coding Rv0291 mycP3 354498 355883 1386 + Lys 228 - Lys Lys228Lys aag/aaa 684 684 phylo (4,4,1,1) 25176035 +403364 403364 SNP 1 c t coding Rv0338c - 405841 403193 2649 - Pro 826 - Pro Pro826Pro ccc/cct 2478 2478 phylo (4,3,3) 25176035 +497491 497491 SNP 1 c t coding Rv0411c glnH 498300 497314 987 - Asp 270 - Asp Asp270Asp gac/gat 810 810 phylo (2) 25176035 +514245 514245 SNP 1 g a coding Rv0425c ctpH 515321 510702 4620 - Val 359 - Val Val359Val gtg/gta 1077 1077 phylo (4,1,1) 25176035 +541048 541048 SNP 1 a c coding Rv0450c mmpL4 541491 538588 2904 - Ser 148 - Ser Ser148Ser tca/tcc 444 444 phylo (4,1,1,2) 25176035 +615614 615614 SNP 1 c a coding Rv0524 hemL 614835 616223 1389 + Ala 260 - Ala Ala260Ala gcc/gca 780 780 phylo (4,3,1) 25176035 +615938 615938 SNP 1 g a coding Rv0524 hemL 614835 616223 1389 + Glu 368 - Glu Glu368Glu gag/gaa 1104 1104 phylo (1) 25176035 +762434 762434 SNP 1 t g coding Rv0667 rpoB 759807 763325 3519 + Gly 876 - Gly Gly876Gly ggt/ggg 2628 2628 phylo (3) 25176035 +763031 763031 SNP 1 t c coding Rv0667 rpoB 759807 763325 3519 + Ala 1075 - Ala Ala1075Ala gct/gcc 3225 3225 phylo (4) 25176035 +763884 763884 SNP 1 c t coding Rv0668 rpoC 763370 767320 3951 + Ala 172 - Val Ala172Val gcc/gtc 515 515 phylo (1) 25176035 +763886 763886 SNP 1 c a coding Rv0668 rpoC 763370 767320 3951 + Arg 173 - Arg Arg173Arg cgg/agg 517 517 phylo (1) 25176035 +764013 764013 SNP 1 a c coding Rv0668 rpoC 763370 767320 3951 + Glu 215 - Ala Glu215Ala gag/gcg 644 644 phylo (7) 25176035 +764995 764995 SNP 1 c g coding Rv0668 rpoC 763370 767320 3951 + Ala 542 - Ala Ala542Ala gcc/gcg 1626 1626 phylo (4,3) 25176035 +765150 765150 SNP 1 g a coding Rv0668 rpoC 763370 767320 3951 + Gly 594 - Glu Gly594Glu ggg/gag 1781 1781 phylo (4,1) 25176035 +765171 765171 SNP 1 c t coding Rv0668 rpoC 763370 767320 3951 + Pro 601 - Leu Pro601Leu ccg/ctg 1802 1802 phylo (1,1) 25176035 +765230 765230 SNP 1 g a coding Rv0668 rpoC 763370 767320 3951 + Ala 621 - Thr Ala621Thr gcg/acg 1861 1861 phylo (1,1,3) 25176035 +766955 766955 SNP 1 g a coding Rv0668 rpoC 763370 767320 3951 + Glu 1196 - Lys Glu1196Lys gag/aag 3586 3586 phylo (7) 25176035 +783601 783601 SNP 1 a c coding Rv0684 fusA1 782485 784590 2106 + Arg 373 - Arg Arg373Arg agg/cgg 1117 1117 phylo (4,2,1) 25176035 +797736 797736 SNP 1 c t coding Rv0697 - 796933 798372 1440 + Leu 268 - Leu Leu268Leu ctc/ctt 804 804 phylo (2,2,1) 25176035 +874787 874787 SNP 1 g a coding Rv0782 ptrBb 874732 876390 1659 + Arg 19 - Gln Arg19Gln cgg/cag 56 56 phylo (4,6,1,1) 25176035 +891756 891756 SNP 1 t c coding Rv0798c cfp29 892269 891472 798 - Leu 172 - Leu Leu172Leu ttg/ctg 514 514 phylo (4,1,2) 25176035 +931123 931123 SNP 1 t c coding Rv0835 lpqQ 930953 931597 645 + Tyr 57 - Tyr Tyr57Tyr tat/tac 171 171 phylo (not 4) 25176035 +1084911 1084911 SNP 1 c t coding Rv0973c accA2 1085750 1083747 2004 - Tyr 280 - Tyr Tyr280Tyr tac/tat 840 840 phylo (3,1,1) 25176035 +1132368 1132368 SNP 1 c t coding Rv1013 pks16 1131625 1133259 1635 + Thr 248 - Thr Thr248Thr acc/act 744 744 phylo (4,3,4,2) 25176035 +1137518 1137518 SNP 1 c t coding Rv1018c glmU 1138060 1136573 1488 - Asn 181 - Asn Asn181Asn aac/aat 543 543 phylo (7) 25176035 +1237818 1237818 SNP 1 g c coding Rv1111c - 1238192 1237209 984 - Leu 125 - Leu Leu125Leu ctg/ctc 375 375 phylo (3,1,2,1) 25176035 +1416410 1416410 SNP 1 t g coding Rv1267c embR 1417347 1416181 1167 - Leu 313 - Arg Leu313Arg ctg/cgg 938 938 phylo (4,6,1,2) 25176035 +1416702 1416702 SNP 1 t c coding Rv1267c embR 1417347 1416181 1167 - Tyr 216 - His Tyr216His tac/cac 646 646 phylo (4,6,2,1) 25176035 +1416977 1416977 SNP 1 a g coding Rv1267c embR 1417347 1416181 1167 - His 124 - Arg His124Arg cac/cgc 371 371 phylo (7) 25176035 +1417019 1417019 SNP 1 g a coding Rv1267c embR 1417347 1416181 1167 - Cys 110 - Tyr Cys110Tyr tgc/tac 329 329 phylo (1) 25176035 +1455780 1455780 SNP 1 t c coding Rv1299 prfA 1455495 1456568 1074 + Leu 96 - Leu Leu96Leu ttg/ctg 286 286 phylo (4,2,2,1) 25176035 +1472337 1472337 SNP 1 c t ribosomal Rvnr01 rrs 1471846 1473382 1537 + - - - - --- - 492 492 phylo (4,3,2) 25176035 +1487796 1487796 SNP 1 c a coding Rv1324 - 1487161 1488075 915 + Ile 212 - Ile Ile212Ile atc/ata 636 636 phylo (4,2,2) 25176035 +1491275 1491275 SNP 1 c t coding Rv1326c glgB 1492312 1490117 2196 - His 346 - His His346His cac/cat 1038 1038 phylo (1,1,3) 25176035 +1501468 1501468 SNP 1 g c coding Rv1332 - 1500926 1501582 657 + Pro 181 - Pro Pro181Pro ccg/ccc 543 543 phylo (4,6,1,2) 25176035 +1502120 1502120 SNP 1 c a coding Rv1333 - 1501599 1502633 1035 + Thr 174 - Thr Thr174Thr acc/aca 522 522 phylo (4,3,4,2,1) 25176035 +1719757 1719757 SNP 1 g t coding Rv1524 - 1718726 1719970 1245 + Pro 344 - Pro Pro344Pro ccg/cct 1032 1032 phylo (4,5) 25176035 +1759252 1759252 SNP 1 g t coding Rv1552 frdA 1757681 1759432 1752 + Ser 524 - Ser Ser524Ser tcg/tct 1572 1572 phylo (not 4,9) 25176035 +1799921 1799921 SNP 1 c a coding Rv1599 hisD 1799583 1800899 1317 + Gly 113 - Gly Gly113Gly ggc/gga 339 339 phylo (5) 25176035 +1816587 1816587 SNP 1 c g coding Rv1617 pykA 1816189 1817607 1419 + Val 133 - Val Val133Val gtc/gtg 399 399 phylo (6) 25176035 +1834916 1834916 SNP 1 a c coding Rv1630 rpsA 1833542 1834987 1446 + Thr 459 - Pro Thr459Pro acc/ccc 1375 1375 phylo (7) 25176035 +1850119 1850119 SNP 1 g a coding Rv1640c lysX 1852035 1848517 3519 - Thr 639 - Thr Thr639Thr acg/aca 1917 1917 phylo (4,1,1,1) 25176035 +1881090 1881090 SNP 1 c t coding Rv1661 pks7 1875304 1881684 6381 + Gly 1929 - Gly Gly1929Gly ggc/ggt 5787 5787 phylo (2,1) 25176035 +1882180 1882180 SNP 1 c t coding Rv1662 pks8 1881704 1886512 4809 + Ala 159 - Ala Ala159Ala gcc/gct 477 477 phylo (BOV_AFRI) 25176035 +1918281 1918281 SNP 1 a c coding Rv1694 tlyA 1917940 1918746 807 + Gly 114 - Gly Gly114Gly gga/ggc 342 342 phylo (7) 25176035 +2101921 2101921 SNP 1 g a coding Rv1854c ndh 2103042 2101651 1392 - Ser 374 - Ser Ser374Ser tcg/tca 1122 1122 phylo (5) 25176035 +2102218 2102218 SNP 1 c t coding Rv1854c ndh 2103042 2101651 1392 - Val 275 - Val Val275Val gtc/gtt 825 825 phylo (7) 25176035 +2102990 2102990 SNP 1 t c coding Rv1854c ndh 2103042 2101651 1392 - Val 18 - Ala Val18Ala gtg/gcg 53 53 phylo (4,4,1) 25176035 +2155503 2155503 SNP 1 c t coding Rv1908c katG 2156111 2153889 2223 - Thr 203 - Thr Thr203Thr acc/act 609 609 phylo (BOV_AFRI) 25176035 +2411730 2411730 SNP 1 c g coding Rv2152c murC 2412122 2410638 1485 - Ser 131 - Ser Ser131Ser tcc/tcg 393 393 phylo (4,2) 25176035 +2505085 2505085 SNP 1 c t coding Rv2231c cobC 2505699 2504605 1095 - Ala 205 - Ala Ala205Ala gcc/gct 615 615 phylo (2,2) 25176035 +2518919 2518919 SNP 1 g a coding Rv2245 kasA 2518115 2519365 1251 + Gly 269 - Ser Gly269Ser ggt/agt 805 805 phylo (4,3,3) 25176035 +2622402 2622402 SNP 1 c t coding Rv2343c dnaG 2622452 2620533 1920 - Ala 17 - Ala Ala17Ala gcc/gct 51 51 phylo (1,1,2) 25176035 +2694560 2694560 SNP 1 c g coding Rv2397c cysA1 2694964 2693909 1056 - Leu 135 - Leu Leu135Leu ctc/ctg 405 405 phylo (4,4,1,2) 25176035 +2831482 2831482 SNP 1 t c coding Rv2515c - 2832591 2831344 1248 - Gly 370 - Gly Gly370Gly ggt/ggc 1110 1110 phylo (BOV) 25176035 +2874344 2874344 SNP 1 c t coding Rv2555c alaS 2876485 2873771 2715 - Arg 714 - Arg Arg714Arg cgc/cgt 2142 2142 phylo (3,1,2,2) 25176035 +2875883 2875883 SNP 1 g a coding Rv2555c alaS 2876485 2873771 2715 - Leu 201 - Leu Leu201Leu ctg/cta 603 603 phylo (4,6,2,2) 25176035 +3021283 3021283 SNP 1 g a coding Rv2707 - 3020573 3021547 975 + Arg 237 - Arg Arg237Arg cgg/cga 711 711 phylo (1,1,1) 25176035 +3216553 3216553 SNP 1 c t coding Rv2907c rimM 3216891 3216361 531 - Val 113 - Val Val113Val gtc/gtt 339 339 phylo (1,1,1,1) 25176035 +3273107 3273107 SNP 1 c a coding Rv2936 drrA 3272214 3273209 996 + Ala 298 - Ala Ala298Ala gcc/gca 894 894 phylo (3) 25176035 +3388166 3388166 SNP 1 g c coding Rv3029c fixA 3388870 3388070 801 - Thr 235 - Thr Thr235Thr acg/acc 705 705 phylo (4,3,2,1) 25176035 +3466426 3466426 SNP 1 c t coding Rv3097c lipY 3467091 3465778 1314 - Val 222 - Val Val222Val gtc/gtt 666 666 phylo (4,6) 25176035 +3470377 3470377 SNP 1 g a coding Rv3101c ftsX 3470679 3469786 894 - Gln 101 - Gln Gln101Gln cag/caa 303 303 phylo (1,2,2) 25176035 +3479545 3479545 SNP 1 c a coding Rv3111 moaC1 3479171 3479683 513 + Ala 125 - Ala Ala125Ala gcc/gca 375 375 phylo (1,2,1) 25176035 +3513538 3513538 SNP 1 a t coding Rv3148 nuoD 3513338 3514660 1323 + Glu 67 - Asp Glu67Asp gaa/gat 201 201 phylo (2,1) 25176035 +3514512 3514512 SNP 1 g c coding Rv3148 nuoD 3513338 3514660 1323 + Gly 392 - Ala Gly392Ala ggt/gct 1175 1175 phylo (4,3,4,2) 25176035 +3570528 3570528 SNP 1 g c coding Rv3198c uvrD2 3571211 3569109 2103 - Arg 228 - Arg Arg228Arg cgg/cgc 684 684 phylo (4,6,2,1) 25176035 +3722702 3722702 SNP 1 c g coding Rv3336c trpS 3723631 3722621 1011 - Leu 310 - Leu Leu310Leu ctc/ctg 930 930 phylo (3,1,2) 25176035 +3836274 3836274 SNP 1 c t coding Rv3417c groEL1 3836891 3835272 1620 - Phe 206 - Phe Phe206Phe ttc/ttt 618 618 phylo (2,2,1,2) 25176035 +3836739 3836739 SNP 1 c t coding Rv3417c groEL1 3836891 3835272 1620 - Asp 51 - Asp Asp51Asp gac/gat 153 153 phylo (4,8) 25176035 +3977226 3977226 SNP 1 g a coding Rv3538 - 3977062 3977922 861 + Leu 55 - Leu Leu55Leu ttg/tta 165 165 phylo (4,3,4) 25176035 +4125058 4125058 SNP 1 g c coding Rv3683 - 4124417 4125376 960 + Arg 214 - Arg Arg214Arg cgg/cgc 642 642 phylo (4,6,2) 25176035 +4151558 4151558 SNP 1 c t coding Rv3708c asd 4152217 4151180 1038 - Gly 220 - Gly Gly220Gly ggc/ggt 660 660 phylo (4,4,1) 25176035 +4229087 4229087 SNP 1 c t coding Rv3782 glfT1 4228347 4229261 915 + Asn 247 - Asn Asn247Asn aac/aat 741 741 phylo (4,1,1,3) 25176035 +4238120 4238120 SNP 1 g a coding Rv3792 aftA 4237932 4239863 1932 + Gln 63 - Gln Gln63Gln cag/caa 189 189 phylo (1,2,2) 25176035 +4238778 4238778 SNP 1 g a coding Rv3792 aftA 4237932 4239863 1932 + Val 283 - Met Val283Met gtg/atg 847 847 phylo (7) 25176035 +4238963 4238963 SNP 1 c t coding Rv3792 aftA 4237932 4239863 1932 + His 344 - His His344His cac/cat 1032 1032 phylo (4,4) 25176035 +4239298 4239298 SNP 1 c t coding Rv3792 aftA 4237932 4239863 1932 + Ala 456 - Val Ala456Val gcc/gtc 1367 1367 phylo (4,1,2,1) 25176035 +4239843 4239843 SNP 1 a c coding Rv3792 aftA 4237932 4239863 1932 + Lys 638 - Gln Lys638Gln aag/cag 1912 1912 phylo (5) 25176035 +4240153 4240153 SNP 1 g a coding Rv3793 embC 4239863 4243147 3285 + Ser 97 - Ser Ser97Ser tcg/tca 291 291 phylo (7) 25176035 +4240897 4240897 SNP 1 c g coding Rv3793 embC 4239863 4243147 3285 + Arg 345 - Arg Arg345Arg cgc/cgg 1035 1035 phylo (4,1,1,1) 25176035 +4241042 4241042 SNP 1 a g coding Rv3793 embC 4239863 4243147 3285 + Asn 394 - Asp Asn394Asp aac/gac 1180 1180 phylo (1) 25176035 +4241562 4241562 SNP 1 g a coding Rv3793 embC 4239863 4243147 3285 + Arg 567 - His Arg567His cgc/cac 1700 1700 phylo (3,1,1) 25176035 +4242643 4242643 SNP 1 c t coding Rv3793 embC 4239863 4243147 3285 + Arg 927 - Arg Arg927Arg cgc/cgt 2781 2781 phylo (4,9) 25176035 +4242883 4242883 SNP 1 c t coding Rv3793 embC 4239863 4243147 3285 + Pro 1007 - Pro Pro1007Pro ccc/cct 3021 3021 phylo (4,6,2,1) 25176035 +4243848 4243848 SNP 1 g a coding Rv3794 embA 4243233 4246517 3285 + Val 206 - Met Val206Met gtg/atg 616 616 phylo (1,1) 25176035 +4244420 4244420 SNP 1 g c coding Rv3794 embA 4243233 4246517 3285 + Val 396 - Val Val396Val gtg/gtc 1188 1188 phylo (1,2,1) 25176035 +4245055 4245055 SNP 1 c a coding Rv3794 embA 4243233 4246517 3285 + Thr 608 - Asn Thr608Asn acc/aac 1823 1823 phylo (4,6,1,2) 25176035 +4245969 4245969 SNP 1 c t coding Rv3794 embA 4243233 4246517 3285 + Pro 913 - Ser Pro913Ser ccg/tcg 2737 2737 phylo (1) 25176035 +4246088 4246088 SNP 1 a g coding Rv3794 embA 4243233 4246517 3285 + Gln 952 - Gln Gln952Gln caa/cag 2856 2856 phylo (2,1) 25176035 +4246508 4246508 SNP 1 g a coding Rv3794 embA 4243233 4246517 3285 + Ala 1092 - Ala Ala1092Ala gcg/gca 3276 3276 phylo (4,4,2) 25176035 +4246864 4246864 SNP 1 c t coding Rv3795 embB 4246514 4249810 3297 + Val 117 - Val Val117Val gtc/gtt 351 351 phylo (BOV_AFRI) 25176035 +4246930 4246930 SNP 1 g c coding Rv3795 embB 4246514 4249810 3297 + Gln 139 - His Gln139His cag/cac 417 417 phylo (4,1,1,2) 25176035 +4248073 4248073 SNP 1 c t coding Rv3795 embB 4246514 4249810 3297 + Thr 520 - Thr Thr520Thr acc/act 1560 1560 phylo (7) 25176035 +4248115 4248115 SNP 1 c t coding Rv3795 embB 4246514 4249810 3297 + Asp 534 - Asp Asp534Asp gac/gat 1602 1602 phylo (2,2,1,1) 25176035 +4249012 4249012 SNP 1 g a coding Rv3795 embB 4246514 4249810 3297 + Leu 833 - Leu Leu833Leu ctg/cta 2499 2499 phylo (4,4,1,2) 25176035 +4249732 4249732 SNP 1 c g coding Rv3795 embB 4246514 4249810 3297 + Ala 1073 - Ala Ala1073Ala gcc/gcg 3219 3219 phylo (4,7) 25176035 +4260268 4260268 SNP 1 c g coding Rv3800c pks13 4261146 4255945 5202 - Ala 293 - Ala Ala293Ala gcc/gcg 879 879 phylo (4,6,1) 25176035 +4268928 4268928 SNP 1 c t coding Rv3806c ubiA 4269833 4268925 909 - Gly 302 - Gly Gly302Gly ggc/ggt 906 906 phylo (4,4,2) 25176035 +4269351 4269351 SNP 1 c t coding Rv3806c ubiA 4269833 4268925 909 - Ala 161 - Ala Ala161Ala gcc/gct 483 483 phylo (BOV_AFRI) 25176035 +4269375 4269375 SNP 1 g a coding Rv3806c ubiA 4269833 4268925 909 - Val 153 - Val Val153Val gtg/gta 459 459 phylo (4,4,2) 25176035 +4307886 4307886 SNP 1 c t coding Rv3834c serS 4308914 4307655 1260 - Arg 343 - Arg Arg343Arg cgc/cgt 1029 1029 phylo (4,4) 25176035 +4316114 4316114 SNP 1 c t coding Rv3843c - 4316596 4315568 1029 - Ala 161 - Ala Ala161Ala gcc/gct 483 483 phylo (4,3,2) 25176035 +4326176 4326176 SNP 1 a c coding Rv3854c ethA 4327473 4326004 1470 - Glu 433 - Ala Glu433Ala gag/gcg 1298 1298 phylo (3,1,2,2) 25176035 +4326439 4326439 SNP 1 c a coding Rv3854c ethA 4327473 4326004 1470 - Asn 345 - Lys Asn345Lys aac/aaa 1035 1035 phylo (1,2,2) 25176035 +4326739 4326739 SNP 1 c g coding Rv3854c ethA 4327473 4326004 1470 - Arg 245 - Arg Arg245Arg cgc/cgg 735 735 phylo (4,6,2,2) 25176035 +4328004 4328004 SNP 1 g a coding Rv3855 ethR 4327549 4328199 651 + Val 152 - Val Val152Val gtg/gta 456 456 phylo (4,6,2,2) 25176035 +4398141 4398141 SNP 1 g a coding Rv3910 - 4396597 4400151 3555 + Ser 515 - Ser Ser515Ser tcg/tca 1545 1545 phylo (4,3,4,1) 25176035 +4404247 4404247 SNP 1 g a coding Rv3915 - 4403192 4404412 1221 + Leu 352 - Leu Leu352Leu ctg/cta 1056 1056 phylo (1,1) 25176035 +4407780 4407780 SNP 1 g a coding Rv3919c gid 4408202 4407528 675 - Ala 141 - Ala Ala141Ala gcg/gca 423 423 phylo (1,1,3) 25176035 diff --git a/docs/CONTRIBUTING.md b/docs/CONTRIBUTING.md new file mode 100644 index 0000000..6694fda --- /dev/null +++ b/docs/CONTRIBUTING.md @@ -0,0 +1,185 @@ +--- +title: Contributing +markdownPlugin: checklist +--- + +# `nf-core/tbanalyzer`: Contributing guidelines + +Hi there! +Thanks for taking an interest in improving nf-core/tbanalyzer. + +This page describes the recommended nf-core way to contribute to both nf-core/tbanalyzer and nf-core pipelines in general, including: + +- [General contribution guidelines](#general-contribution-guidelines): common procedures or guides across all nf-core pipelines. +- [Pipeline-specific contribution guidelines](#pipeline-specific-contribution-guidelines): procedures or guides specific to the development conventions of nf-core/tbanalyzer. + +> [!NOTE] +> If you need help using or modifying nf-core/tbanalyzer, ask on the nf-core Slack [#tbanalyzer](https://nfcore.slack.com/channels/tbanalyzer) channel ([join our Slack here](https://nf-co.re/join/slack)). + +## General contribution guidelines + +### Contribution quick start + +To contribute code to any nf-core pipeline: + +- [ ] Ensure you have Nextflow, nf-core tools, and nf-test installed. See the [nf-core/tools repository](https://github.com/nf-core/tools) for instructions. +- [ ] Check whether a GitHub [issue](https://github.com/nf-core/tbanalyzer/issues) about your idea already exists. If an issue does not exist, create one so that others are aware you are working on it. +- [ ] [Fork](https://help.github.com/en/github/getting-started-with-github/fork-a-repo) the [nf-core/tbanalyzer repository](https://github.com/nf-core/tbanalyzer) to your GitHub account. +- [ ] Create a branch on your forked repository and make your changes following [pipeline conventions](#pipeline-contribution-conventions) (if applicable). +- [ ] To fix major bugs, name your branch `patch` and follow the [patch release](#patch-release) process. +- [ ] Update relevant documentation within the `docs/` folder, use nf-core/tools to update `nextflow_schema.json`, and update `CITATIONS.md`. +- [ ] Run and/or update tests. See [Testing](#testing) for more information. +- [ ] [Lint](#lint-tests) your code with nf-core/tools. +- [ ] Submit a pull request (PR) against the `dev` branch and request a review. + +If you are not used to this workflow with Git, see the [GitHub documentation](https://help.github.com/en/github/collaborating-with-issues-and-pull-requests) or [Git resources](https://try.github.io/) for more information. + +## Use of AI and LLMs + +The nf-core stance on the use of AI and LLMs is that humans are still ultimately responsible for their submitted code, regardless of the tools they use. + +If you’re using AI tools, try to stick by these guidelines: + +- Keep PRs as small and focussed as possible +- Avoid any unnecessary changes, such as moving or refactoring code (unless that is the explicit intention of the PR) +- Review all generated code yourself before opening a PR, and ensure that you understand it +- Engage with the community review process and expect to make revisions + +For more detail, see the the [blog post](https://nf-co.re/blog/2026/statement-on-ai) for a statement from the nf-core/core team. + +### Getting help + +For further information and help, see the [nf-core/tbanalyzer documentation](https://nf-co.re/tbanalyzer/usage) or ask on the nf-core [#tbanalyzer](https://nfcore.slack.com/channels/tbanalyzer) Slack channel ([join our Slack here](https://nf-co.re/join/slack)). + +### GitHub Codespaces + +You can contribute to nf-core/tbanalyzer without installing a local development environment on your machine by using [GitHub Codespaces](https://github.com/codespaces). + +[GitHub Codespaces](https://github.com/codespaces) is an online developer environment that runs in your browser, complete with VS Code and a terminal. +Most nf-core repositories include a devcontainer configuration, which creates a GitHub Codespaces environment specifically for Nextflow development. +The environment includes pre-installed nf-core tools, Nextflow, and a few other helpful utilities via a Docker container. + +To get started, open the repository in [Codespaces](https://github.com/nf-core/tbanalyzer/codespaces). + +### Testing + +Once you have made your changes, run the pipeline with nf-test to test them locally. +For additional information, use the `--verbose` flag to view the Nextflow console log output. + +```bash +nf-test test --tag test --profile +docker --verbose +``` + +If you have added new functionality, ensure you update the test assertions in the `.nf.test` files in the `tests/` directory. +Update the snapshots with the following command: + +```bash +nf-test test --tag test --profile +docker --verbose --update-snapshots +``` + +When you create a pull request with changes, GitHub Actions will run automatic tests. +Pull requests are typically reviewed when these tests are passing. + +Two types of tests are typically run: + +#### Lint tests + +nf-core has a [set of guidelines](https://nf-co.re/docs/specifications/overview) which all pipelines must follow. +To enforce these, run linting with nf-core/tools: + +```bash +nf-core pipelines lint +``` + +If you encounter failures or warnings, follow the linked documentation printed to screen. +For more information about linting tests, see [nf-core/tools API documentation](https://nf-co.re/docs/nf-core-tools/api_reference/latest/pipeline_lint_tests/actions_awsfulltest). + +#### Pipeline tests + +Each nf-core pipeline should be set up with a minimal set of test data. +GitHub Actions runs the pipeline on this data to ensure it runs through and exits successfully. +If there are any failures then the automated tests fail. +These tests are run with the latest available version of Nextflow and the minimum required version specified in the pipeline code. + +### Patch release + +> [!WARNING] +> Only in the unlikely event of a release that contains a critical bug. + +- [ ] Create a new branch `patch` on your fork based on `upstream/main` or `upstream/master`. +- [ ] Fix the bug and use nf-core/tools to bump the version to the next semantic version, for example, `1.2.3` → `1.2.4`. +- [ ] Open a Pull Request from `patch` directly to `main`/`master` with the changes. + +### Pipeline contribution conventions + +nf-core semi-standardises how you write code and other contributions to make the nf-core/tbanalyzer code and processing logic more understandable for new contributors and to ensure quality. + +#### Add a new pipeline step + +To contribute a new step to the pipeline, follow the general nf-core coding procedure. +Please also refer to the [pipeline-specific contribution guidelines](#pipeline-specific-contribution-guidelines): + +- [ ] Define the corresponding [input channel](#channel-naming-schemes) into your new process from the expected previous process channel. +- [ ] Install a module with nf-core/tools, or write a local module (see [default processes resource requirements](#default-processes-resource-requirements)), and add it to the target `.nf`. +- [ ] Define the output channel if needed. Mix the version output channel into `ch_versions` and relevant files into `ch_multiqc`. +- [ ] Add new or updated parameters to `nextflow.config` with a [default value](#default-parameter-values). +- [ ] Add new or updated parameters and relevant help text to `nextflow_schema.json` with [nf-core/tools](#default-parameter-values). +- [ ] Add validation for relevant parameters to the pipeline utilisation section of `utils_nfcore_\_pipeline/main.nf` subworkflow. +- [ ] Perform local tests to validate that the new code works as expected. + - [ ] If applicable, add a new test in the `tests` directory. +- [ ] Update `usage.md`, `output.md`, and `citation.md` as appropriate. +- [ ] [Lint](lint) the code with nf-core/tools. +- [ ] Update any diagrams or pipeline images as necessary. +- [ ] Update MultiQC config `assets/multiqc_config.yml` so relevant suffixes, file name cleanup, and module plots are in the appropriate order. +- [ ] If applicable, create a [MultiQC](https://seqera.io/multiqc/) module. +- [ ] Add a description of the output files and, if relevant, images from the MultiQC report to `docs/output.md`. + +To update the minimum required Nextflow version, see the [Nextflow version bumping](#nextflow-version-bumping) section below. For more information about pipeline contributions, see [pipeline-specific contribution guidelines](#pipeline-specific-contribution-guidelines). + +#### Channel naming schemes + +Use the following naming schemes for channels to make the channel flow easier to understand: + +- Initial process channel: `ch_output_from_` +- Intermediate and terminal channels: `ch__for_` + +#### Default parameter values + +Parameters should be initialised and defined with default values within the `params` scope in `nextflow.config`. +They should also be documented in the pipeline JSON schema. + +To update `nextflow_schema.json`, run: + +```bash +nf-core pipelines schema build +``` + +The schema builder interface that loads in your browser should automatically update the defaults in the parameter documentation. + +#### Default processes resource requirements + +If you write a local module, specify a default set of resource requirements for the process. + +Sensible defaults for process resource requirements (CPUs, memory, time) should be defined in `conf/base.config`. +Specify these with generic `withLabel:` selectors, so they can be shared across multiple processes and steps of the pipeline. + +nf-core provides a set of standard labels that you should follow where possible, as seen in the [nf-core pipeline template](https://github.com/nf-core/tools/blob/main/nf_core/pipeline-template/conf/base.config). +These labels define resource defaults for single-core processes, modules that require a GPU, and different levels of multi-core configurations with increasing memory requirements. + +Values assigned within these labels can be dynamically passed to a tool using the the `${task.cpus}` and `${task.memory}` Nextflow variables in the `script:` block of a module (see an example in the [modules repository](https://github.com/nf-core/modules/blob/bd1b6a40f55933d94b8c9ca94ec8c1ea0eaf4b82/modules/nf-core/samtools/bam2fq/main.nf#L30)). + +#### Nextflow version bumping + +If you use a new feature from core Nextflow, bump the minimum required Nextflow version in the pipeline with: + +```bash +nf-core pipelines bump-version --nextflow . +``` + +#### Images and figures guidelines + +If you update images or graphics, follow the nf-core [style guidelines](https://nf-co.re/docs/community/brand/workflow-schematics). + +## Pipeline specific contribution guidelines + + diff --git a/docs/images/nf-core-tbanalyzer_logo_dark.png b/docs/images/nf-core-tbanalyzer_logo_dark.png index 7279924..a8bbdfc 100644 Binary files a/docs/images/nf-core-tbanalyzer_logo_dark.png and b/docs/images/nf-core-tbanalyzer_logo_dark.png differ diff --git a/docs/images/nf-core-tbanalyzer_logo_light.png b/docs/images/nf-core-tbanalyzer_logo_light.png index 65f6698..98003dd 100644 Binary files a/docs/images/nf-core-tbanalyzer_logo_light.png and b/docs/images/nf-core-tbanalyzer_logo_light.png differ diff --git a/docs/usage.md b/docs/usage.md index 97c7d5a..a016208 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -75,9 +75,8 @@ If you wish to repeatedly use the same parameters for multiple runs, rather than Pipeline settings can be provided in a `yaml` or `json` file via `-params-file `. -:::warning -Do not use `-c ` to specify parameters as this will result in errors. Custom config files specified with `-c` must only be used for [tuning process resource specifications](https://nf-co.re/docs/usage/configuration#tuning-workflow-resources), other infrastructural tweaks (such as output directories), or module arguments (args). -::: +> [!WARNING] +> Do not use `-c ` to specify parameters as this will result in errors. Custom config files specified with `-c` must only be used for [tuning process resource specifications](https://nf-co.re/docs/running/run-pipelines#configuring-pipelines), other infrastructural tweaks (such as output directories), or module arguments (args). The above pipeline run specified with a params file in yaml format: @@ -106,23 +105,21 @@ nextflow pull nf-core/tbanalyzer ### Reproducibility -It is a good idea to specify a pipeline version when running the pipeline on your data. This ensures that a specific version of the pipeline code and software are used when you run your pipeline. If you keep using the same tag, you'll be running the same version of the pipeline, even if there have been changes to the code since. +It is a good idea to specify the pipeline version when running the pipeline on your data. This ensures that a specific version of the pipeline code and software are used when you run your pipeline. If you keep using the same tag, you'll be running the same version of the pipeline, even if there have been changes to the code since. First, go to the [nf-core/tbanalyzer releases page](https://github.com/nf-core/tbanalyzer/releases) and find the latest pipeline version - numeric only (eg. `1.3.1`). Then specify this when running the pipeline with `-r` (one hyphen) - eg. `-r 1.3.1`. Of course, you can switch to another version by changing the number after the `-r` flag. This version number will be logged in reports when you run the pipeline, so that you'll know what you used when you look back in the future. For example, at the bottom of the MultiQC reports. -To further assist in reproducbility, you can use share and re-use [parameter files](#running-the-pipeline) to repeat pipeline runs with the same settings without having to write out a command with every single parameter. +To further assist in reproducibility, you can use share and reuse [parameter files](#running-the-pipeline) to repeat pipeline runs with the same settings without having to write out a command with every single parameter. -:::tip -If you wish to share such profile (such as upload as supplementary material for academic publications), make sure to NOT include cluster specific paths to files, nor institutional specific profiles. -::: +> [!TIP] +> If you wish to share such profile (such as upload as supplementary material for academic publications), make sure to NOT include cluster specific paths to files, nor institutional specific profiles. ## Core Nextflow arguments -:::note -These options are part of Nextflow and use a _single_ hyphen (pipeline parameters use a double-hyphen). -::: +> [!NOTE] +> These options are part of Nextflow and use a _single_ hyphen (pipeline parameters use a double-hyphen) ### `-profile` @@ -130,16 +127,15 @@ Use this parameter to choose a configuration profile. Profiles can give configur Several generic profiles are bundled with the pipeline which instruct the pipeline to use software packaged using different methods (Docker, Singularity, Podman, Shifter, Charliecloud, Apptainer, Conda) - see below. -:::info -We highly recommend the use of Docker or Singularity containers for full pipeline reproducibility, however when this is not possible, Conda is also supported. -::: +> [!IMPORTANT] +> We highly recommend the use of Docker or Singularity containers for full pipeline reproducibility, however when this is not possible, Conda is also supported. -The pipeline also dynamically loads configurations from [https://github.com/nf-core/configs](https://github.com/nf-core/configs) when it runs, making multiple config profiles for various institutional clusters available at run time. For more information and to see if your system is available in these configs please see the [nf-core/configs documentation](https://github.com/nf-core/configs#documentation). +The pipeline also dynamically loads configurations from [https://github.com/nf-core/configs](https://github.com/nf-core/configs) when it runs, making multiple config profiles for various institutional clusters available at run time. For more information and to check if your system is supported, please see the [nf-core/configs documentation](https://github.com/nf-core/configs#documentation). Note that multiple profiles can be loaded, for example: `-profile test,docker` - the order of arguments is important! They are loaded in sequence, so later profiles can overwrite earlier profiles. -If `-profile` is not specified, the pipeline will run locally and expect all software to be installed and available on the `PATH`. This is _not_ recommended, since it can lead to different results on different machines dependent on the computer enviroment. +If `-profile` is not specified, the pipeline will run locally and expect all software to be installed and available on the `PATH`. This is _not_ recommended, since it can lead to different results on different machines dependent on the computer environment. - `test` - A profile with a complete configuration for automated testing @@ -153,7 +149,7 @@ If `-profile` is not specified, the pipeline will run locally and expect all sof - `shifter` - A generic configuration profile to be used with [Shifter](https://nersc.gitlab.io/development/shifter/how-to-use/) - `charliecloud` - - A generic configuration profile to be used with [Charliecloud](https://hpc.github.io/charliecloud/) + - A generic configuration profile to be used with [Charliecloud](https://charliecloud.io/) - `apptainer` - A generic configuration profile to be used with [Apptainer](https://apptainer.org/) - `wave` @@ -175,21 +171,21 @@ Specify the path to a specific config file (this is a core Nextflow command). Se ### Resource requests -Whilst the default requirements set within the pipeline will hopefully work for most people and with most input data, you may find that you want to customise the compute resources that the pipeline requests. Each step in the pipeline has a default set of requirements for number of CPUs, memory and time. For most of the steps in the pipeline, if the job exits with any of the error codes specified [here](https://github.com/nf-core/rnaseq/blob/4c27ef5610c87db00c3c5a3eed10b1d161abf575/conf/base.config#L18) it will automatically be resubmitted with higher requests (2 x original, then 3 x original). If it still fails after the third attempt then the pipeline execution is stopped. +Whilst the default requirements set within the pipeline will hopefully work for most people and with most input data, you may find that you want to customise the compute resources that the pipeline requests. Each step in the pipeline has a default set of requirements for number of CPUs, memory and time. For most of the pipeline steps, if the job exits with any of the error codes specified [here](https://github.com/nf-core/rnaseq/blob/4c27ef5610c87db00c3c5a3eed10b1d161abf575/conf/base.config#L18) it will automatically be resubmitted with higher resources request (2 x original, then 3 x original). If it still fails after the third attempt then the pipeline execution is stopped. -To change the resource requests, please see the [max resources](https://nf-co.re/docs/usage/configuration#max-resources) and [tuning workflow resources](https://nf-co.re/docs/usage/configuration#tuning-workflow-resources) section of the nf-core website. +To change the resource requests, please see the [max resources](https://nf-co.re/docs/running/configuration/nextflow-for-your-system#set-max-resources) and [customise process resources](https://nf-co.re/docs/running/configuration/nextflow-for-your-system#customize-process-resources) section of the nf-core website. ### Custom Containers -In some cases you may wish to change which container or conda environment a step of the pipeline uses for a particular tool. By default nf-core pipelines use containers and software from the [biocontainers](https://biocontainers.pro/) or [bioconda](https://bioconda.github.io/) projects. However in some cases the pipeline specified version maybe out of date. +In some cases, you may wish to change the container or conda environment used by a pipeline steps for a particular tool. By default, nf-core pipelines use containers and software from the [biocontainers](https://biocontainers.pro/) or [bioconda](https://bioconda.github.io/) projects. However, in some cases the pipeline specified version maybe out of date. -To use a different container from the default container or conda environment specified in a pipeline, please see the [updating tool versions](https://nf-co.re/docs/usage/configuration#updating-tool-versions) section of the nf-core website. +To use a different container from the default container or conda environment specified in a pipeline, please see the [updating tool versions](https://nf-co.re/docs/running/configuration/nextflow-for-your-system#update-tool-versions) section of the nf-core website. ### Custom Tool Arguments A pipeline might not always support every possible argument or option of a particular tool used in pipeline. Fortunately, nf-core pipelines provide some freedom to users to insert additional parameters that the pipeline does not include by default. -To learn how to provide additional arguments to a particular tool of the pipeline, please see the [customising tool arguments](https://nf-co.re/docs/usage/configuration#customising-tool-arguments) section of the nf-core website. +To learn how to provide additional arguments to a particular tool of the pipeline, please see the [customising tool arguments](https://nf-co.re/docs/running/configuration/nextflow-for-your-system#modifying-tool-arguments) section of the nf-core website. ### nf-core/configs diff --git a/main.nf b/main.nf index e7e9c5f..2ee90de 100644 --- a/main.nf +++ b/main.nf @@ -16,6 +16,7 @@ */ include { TBANALYZER } from './workflows/tbanalyzer' +include { MTBSEQ_NF } from './workflows/mtbseqnf' include { PIPELINE_INITIALISATION } from './subworkflows/local/utils_nfcore_tbanalyzer_pipeline' include { PIPELINE_COMPLETION } from './subworkflows/local/utils_nfcore_tbanalyzer_pipeline' include { getGenomeAttribute } from './subworkflows/local/utils_nfcore_tbanalyzer_pipeline' @@ -47,14 +48,32 @@ workflow NFCORE_TBANALYZER { main: + multiqc_report = Channel.empty() + + // SELECT MODE: + + // MTBSEQ run mode + if (params.mode == "mtbseq") { + MTBSEQ_NF ( + samplesheet + ) + multiqc_report = MTBSEQ_NF.out.multiqc_report + } + else { + error("Unknown --mode '${params.mode}'. Supported modes: 'mtbseq'.") + } + + // WORKFLOW: Run generic pipeline (TBANALYZER mode — not yet wired into mode dispatch) // - // WORKFLOW: Run pipeline - // - TBANALYZER ( - samplesheet - ) + //TBANALYZER ( + // samplesheet, + // params.multiqc_config, + // params.multiqc_logo, + // params.multiqc_methods_description, + // params.outdir, + //) emit: - multiqc_report = TBANALYZER.out.multiqc_report // channel: /path/to/multiqc_report.html + multiqc_report = multiqc_report // channel: /path/to/multiqc_report.html } /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -74,7 +93,10 @@ workflow { params.monochrome_logs, args, params.outdir, - params.input + params.input, + params.help, + params.help_full, + params.show_hidden ) // @@ -92,7 +114,6 @@ workflow { params.plaintext_email, params.outdir, params.monochrome_logs, - params.hook_url, NFCORE_TBANALYZER.out.multiqc_report ) } diff --git a/modules.json b/modules.json index c52667c..e667653 100644 --- a/modules.json +++ b/modules.json @@ -5,14 +5,144 @@ "https://github.com/nf-core/modules.git": { "modules": { "nf-core": { + "bcftools/merge": { + "branch": "master", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "installed_by": ["modules"] + }, + "bcftools/view": { + "branch": "master", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "installed_by": ["modules"] + }, + "bwamem2/index": { + "branch": "master", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "installed_by": ["modules"] + }, + "bwamem2/mem": { + "branch": "master", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "installed_by": ["modules"] + }, + "delly/call": { + "branch": "master", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "installed_by": ["modules"] + }, "fastqc": { + "branch": "master", + "git_sha": "6d46786420b4d7bc88eba026eb389c0c5535d120", + "installed_by": ["modules"] + }, + "gatk4/applybqsr": { + "branch": "master", + "git_sha": "6b3bf38285d94cc1ea3cd9fa93310d54b04c3819", + "installed_by": ["modules"] + }, + "gatk4/applyvqsr": { + "branch": "master", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "installed_by": ["modules"] + }, + "gatk4/indexfeaturefile": { + "branch": "master", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "installed_by": ["modules"] + }, + "gatk4/markduplicates": { + "branch": "master", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "installed_by": ["modules"] + }, + "gatk4/selectvariants": { + "branch": "master", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "installed_by": ["modules"] + }, + "gatk4/variantrecalibrator": { + "branch": "master", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "installed_by": ["modules"] + }, + "gatk4/variantstotable": { + "branch": "master", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "installed_by": ["modules"] + }, + "iqtree": { + "branch": "master", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "installed_by": ["modules"] + }, + "ismapper": { + "branch": "master", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "installed_by": ["modules"] + }, + "lofreq/call": { + "branch": "master", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "installed_by": ["modules"] + }, + "lofreq/filter": { + "branch": "master", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "installed_by": ["modules"] + }, + "lofreq/indelqual": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "multiqc": { "branch": "master", - "git_sha": "cf17ca47590cc578dfb47db1c2a44ef86f89976d", + "git_sha": "008f9d3e61209bf995edac3ba531f54e269e1215", + "installed_by": ["modules"] + }, + "samtools/index": { + "branch": "master", + "git_sha": "b13f07be4c508d6ff6312d354d09f2493243e208", + "installed_by": ["modules"] + }, + "samtools/merge": { + "branch": "master", + "git_sha": "b13f07be4c508d6ff6312d354d09f2493243e208", + "installed_by": ["modules"] + }, + "samtools/stats": { + "branch": "master", + "git_sha": "b13f07be4c508d6ff6312d354d09f2493243e208", + "installed_by": ["modules"] + }, + "snpdists": { + "branch": "master", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "installed_by": ["modules"] + }, + "snpeff/download": { + "branch": "master", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "installed_by": ["modules"] + }, + "snpeff/snpeff": { + "branch": "master", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "installed_by": ["modules"] + }, + "snpsites": { + "branch": "master", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "installed_by": ["modules"] + }, + "tabix/bgzip": { + "branch": "master", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "installed_by": ["modules"] + }, + "tbprofiler/profile": { + "branch": "master", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] } } @@ -21,17 +151,17 @@ "nf-core": { "utils_nextflow_pipeline": { "branch": "master", - "git_sha": "3aa0aec1d52d492fe241919f0c6100ebf0074082", + "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", "installed_by": ["subworkflows"] }, "utils_nfcore_pipeline": { "branch": "master", - "git_sha": "1b6b9a3338d011367137808b49b923515080e3ba", + "git_sha": "a3fb7351b1fdb2b1de282b765816bbea190e86a8", "installed_by": ["subworkflows"] }, "utils_nfschema_plugin": { "branch": "master", - "git_sha": "bbd5a41f4535a8defafe6080e00ea74c45f4f96c", + "git_sha": "fdc08b8b1ae74f56686ce21f7ea11ad11990ce57", "installed_by": ["subworkflows"] } } diff --git a/modules/local/mtbseq/tbamend/environment.yml b/modules/local/mtbseq/tbamend/environment.yml new file mode 100644 index 0000000..cc92718 --- /dev/null +++ b/modules/local/mtbseq/tbamend/environment.yml @@ -0,0 +1,7 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::mtbseq=1.1.0 diff --git a/modules/local/mtbseq/tbamend/main.nf b/modules/local/mtbseq/tbamend/main.nf new file mode 100644 index 0000000..780aff9 --- /dev/null +++ b/modules/local/mtbseq/tbamend/main.nf @@ -0,0 +1,76 @@ +process TBAMEND { + tag "cohort" + label 'process_single' + + conda "${moduleDir}/environment.yml" + + + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/mtbseq:1.1.0--hdfd78af_0' : + 'biocontainers/mtbseq:1.1.0--hdfd78af_0' }" + + input: + path("Joint/*") + path(samplesheet_tsv) + env('USER') + tuple path(ref_resistance_list), path(ref_interesting_regions), path(ref_gene_categories), path(ref_base_quality_recalibration) + + output: + path("Amend/*"), emit: samples_amended + + script: + + def args = task.ext.args ?: "--project mtbseqnf --mincovf 4 --mincovr 4 --minphred 4 --minfreq 75 --unambig 95 --window 12 --distance 12" + + """ + mkdir Amend + + MTBseq --step TBamend \\ + --threads ${task.cpus} \\ + --samples ${samplesheet_tsv} \\ + --resilist ${ref_resistance_list} \\ + --intregions ${ref_interesting_regions} \\ + --categories ${ref_gene_categories} \\ + --basecalib ${ref_base_quality_recalibration} \\ + ${args} \\ + 1>>.command.out \\ + 2>>.command.err \\ + || true # NOTE This is a hack to overcome the exit status 1 thrown by mtbseq + + + """ + + stub: + """ + sleep \$[ ( \$RANDOM % 10 ) + 1 ]s + + echo " MTBseq --step TBamend \ + --threads ${task.cpus} \ + --samples ${samplesheet_tsv} \ + --project mtbseqnf \ + --mincovf 4 \ + --mincovr 4 \ + --minphred 4 \ + --minfreq 75 \ + --unambig 95 \ + --window 12 \ + --distance 12 \ + --resilist ${ref_resistance_list} \ + --intregions ${ref_interesting_regions} \ + --categories ${ref_gene_categories} \ + --basecalib ${ref_base_quality_recalibration} " + + + mkdir Amend + touch Amend/mtbseqnf_joint_cf4_cr4_fr75_ph4_samples5_amended.tab + touch Amend/mtbseqnf_joint_cf4_cr4_fr75_ph4_samples5_amended_u95_phylo.tab + touch Amend/mtbseqnf_joint_cf4_cr4_fr75_ph4_samples5_amended_u95_phylo.fasta + touch Amend/mtbseqnf_joint_cf4_cr4_fr75_ph4_samples5_amended_u95_phylo.plainIDs.fasta + touch Amend/mtbseqnf_joint_cf4_cr4_fr75_ph4_samples5_amended_u95_phylo_w12.tab + touch Amend/mtbseqnf_joint_cf4_cr4_fr75_ph4_samples5_amended_u95_phylo_w12.fasta + touch Amend/mtbseqnf_joint_cf4_cr4_fr75_ph4_samples5_amended_u95_phylo_w12.plainIDs.fasta + touch Amend/mtbseqnf_joint_cf4_cr4_fr75_ph4_samples5_amended_u95_phylo_w12_removed.tab + + """ + +} diff --git a/modules/local/mtbseq/tbamend/meta.yml b/modules/local/mtbseq/tbamend/meta.yml new file mode 100644 index 0000000..e69de29 diff --git a/modules/local/mtbseq/tbbwa/environment.yml b/modules/local/mtbseq/tbbwa/environment.yml new file mode 100644 index 0000000..cc92718 --- /dev/null +++ b/modules/local/mtbseq/tbbwa/environment.yml @@ -0,0 +1,7 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::mtbseq=1.1.0 diff --git a/modules/local/mtbseq/tbbwa/main.nf b/modules/local/mtbseq/tbbwa/main.nf new file mode 100644 index 0000000..2a1c9ee --- /dev/null +++ b/modules/local/mtbseq/tbbwa/main.nf @@ -0,0 +1,67 @@ +process TBBWA { + tag "${meta.id}" + label 'process_medium' + + conda "${moduleDir}/environment.yml" + + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/mtbseq:1.1.0--hdfd78af_0' : + 'biocontainers/mtbseq:1.1.0--hdfd78af_0' }" + + + + + input: + tuple val(meta), path("${meta.id}_${meta.library}_R?.fastq.gz") + env('USER') + tuple path(ref_resistance_list), path(ref_interesting_regions), path(ref_gene_categories), path(ref_base_quality_recalibration) + + output: + path("Bam/${meta.id}_${meta.library}*.{bam,bai,bamlog}") + tuple val(meta), path("Bam/${meta.id}_${meta.library}*.{bam,bai}"), emit: bam_tuple + path("Bam/${meta.id}_${meta.library}*.bam"), emit: bam + + script: + def args = task.ext.args ?: "--project mtbseqnf" + + """ + mkdir Bam + + MTBseq --step TBbwa \\ + --threads ${task.cpus} \\ + --resilist ${ref_resistance_list} \\ + --intregions ${ref_interesting_regions} \\ + --categories ${ref_gene_categories} \\ + --basecalib ${ref_base_quality_recalibration} \\ + ${args} \\ + 1>>.command.out \\ + 2>>.command.err \\ + || true # NOTE This is a hack to overcome the exit status 1 thrown by mtbseq + + + """ + + stub: + + """ + echo " MTBseq --step TBbwa \ + --threads ${task.cpus} \ + --project mtbseqnf \ + --resilist ${ref_resistance_list} \ + --intregions ${ref_interesting_regions} \ + --categories ${ref_gene_categories} \ + --basecalib ${ref_base_quality_recalibration} " + + sleep \$[ ( \$RANDOM % 10 ) + 1 ]s + + touch ${task.process}_${meta.id}_out.log + touch ${task.process}_${meta.id}_err.log + + mkdir Bam + touch Bam/${meta.id}_${meta.library}.bam + touch Bam/${meta.id}_${meta.library}.bai + touch Bam/${meta.id}_${meta.library}.bamlog + + """ + +} diff --git a/modules/local/mtbseq/tbbwa/meta.yml b/modules/local/mtbseq/tbbwa/meta.yml new file mode 100644 index 0000000..e69de29 diff --git a/modules/local/mtbseq/tbfull/environment.yml b/modules/local/mtbseq/tbfull/environment.yml new file mode 100644 index 0000000..cc92718 --- /dev/null +++ b/modules/local/mtbseq/tbfull/environment.yml @@ -0,0 +1,7 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::mtbseq=1.1.0 diff --git a/modules/local/mtbseq/tbfull/main.nf b/modules/local/mtbseq/tbfull/main.nf new file mode 100644 index 0000000..bb54b0e --- /dev/null +++ b/modules/local/mtbseq/tbfull/main.nf @@ -0,0 +1,105 @@ +process TBFULL { + tag "cohort" + label 'process_tbfull' + label 'error_retry' + + + conda "${moduleDir}/environment.yml" + + + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/mtbseq:1.1.0--hdfd78af_0' : + 'biocontainers/mtbseq:1.1.0--hdfd78af_0' }" + + + + input: + path("*") + env('USER') + tuple path(ref_resistance_list), path(ref_interesting_regions), path(ref_gene_categories), path(ref_base_quality_recalibration) + + output: + path("Called") + path("Position_Tables") + path("Classification") + path("Statistics") + path("Statistics/Mapping_and_Variant_Statistics.tab"), emit: statistics + path("Classification/Strain_Classification.tab"), emit: classification + path("Called/*gatk_position_variants*.tab"), emit: position_variants + path("Position_Tables/*.gatk_position_table.tab"), emit: position_tables + path "versions.yml", emit: versions + + script: + def args = task.ext.args ?: "--project mtbseqnf --minbqual 13 --mincovf 4 --mincovr 4 --minphred 4 --minfreq 75 --unambig 95 --window 12 --distance 12" + + """ + + MTBseq --step TBfull \\ + --thread ${task.cpus} \\ + --intregions ${ref_interesting_regions} \\ + --categories ${ref_gene_categories} \\ + --basecalib ${ref_base_quality_recalibration} \\ + --resilist ${ref_resistance_list} \\ + ${args} \\ + 1>>.command.out \\ + 2>>.command.err \\ + || true # NOTE This is a hack to overcome the exit status 1 thrown by mtbseq + + + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + MTBseq: \$(MTBseq --version | cut -d " " -f 2) + END_VERSIONS + + """ + + stub: + """ + sleep \$[ ( \$RANDOM % 10 ) + 1 ]s + + echo " MTBseq --step TBfull \ + --thread ${task.cpus} \ + --project mtbseqnf \ + --minbqual 13 \ + --mincovf 4 \ + --mincovr 4 \ + --minphred 4 \ + --minfreq 75 \ + --unambig 95 \ + --window 12 \ + --distance 12 \ + --resilist ${ref_resistance_list} \ + --intregions ${ref_interesting_regions} \ + --categories ${ref_gene_categories} \ + --basecalib ${ref_base_quality_recalibration} " + + + mkdir GATK_Bam + touch GATK_Bam/stub.gatk.bam + touch GATK_Bam/stub.gatk.bai + touch GATK_Bam/stub.gatk.bamlog + touch GATK_Bam/stub.gatk.grp + touch GATK_Bam/stub.gatk.intervals + mkdir Bam + touch Bam/stub.bam + touch Bam/stub.bai + touch Bam/stub.bamlog + mkdir Called + touch Called/stub.gatk_position_uncovered_cf4_cr4_fr75_ph4_outmode000.tab + touch Called/stub.gatk_position_variants_cf4_cr4_fr75_ph4_outmode000.tab + mkdir Mpileup + touch Mpileup/stub.gatk.mpileup + touch Mpileup/stub.gatk.mpileuplog + mkdir Classification + touch Classification/Strain_Classification.tab + mkdir Position_Tables + touch Position_Tables/stub.gatk_position_table.tab + mkdir Statistics + touch Statistics/Mapping_and_Variant_Statistics.tab + + printf '"%s":\\n MTBseq: 1.1.0\\n' "${task.process}" > versions.yml + + """ + +} diff --git a/modules/local/mtbseq/tbfull/meta.yml b/modules/local/mtbseq/tbfull/meta.yml new file mode 100644 index 0000000..e69de29 diff --git a/modules/local/mtbseq/tbgroups/environment.yml b/modules/local/mtbseq/tbgroups/environment.yml new file mode 100644 index 0000000..cc92718 --- /dev/null +++ b/modules/local/mtbseq/tbgroups/environment.yml @@ -0,0 +1,7 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::mtbseq=1.1.0 diff --git a/modules/local/mtbseq/tbgroups/main.nf b/modules/local/mtbseq/tbgroups/main.nf new file mode 100644 index 0000000..1023e3a --- /dev/null +++ b/modules/local/mtbseq/tbgroups/main.nf @@ -0,0 +1,73 @@ +process TBGROUPS { + tag "cohort" + label 'process_single' + + conda "${moduleDir}/environment.yml" + + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/mtbseq:1.1.0--hdfd78af_0' : + 'biocontainers/mtbseq:1.1.0--hdfd78af_0' }" + + + input: + path("Amend/*") + path(samplesheet_tsv) + env('USER') + tuple path(ref_resistance_list), path(ref_interesting_regions), path(ref_gene_categories), path(ref_base_quality_recalibration) + + output: + path("Groups/*") + path("Groups/*.matrix"), emit: distance_matrix + path("Groups/*.groups"), emit: groups + path "versions.yml", emit: versions + + + + + script: + def args = task.ext.args ?: "--project mtbseqnf --distance 12" + """ + mkdir Groups + + MTBseq --step TBgroups \\ + --threads ${task.cpus} \\ + --samples ${samplesheet_tsv} \\ + --resilist ${ref_resistance_list} \\ + --intregions ${ref_interesting_regions} \\ + --categories ${ref_gene_categories} \\ + --basecalib ${ref_base_quality_recalibration} \\ + ${args} \\ + 1>>.command.out \\ + 2>>.command.err \\ + || true # NOTE This is a hack to overcome the exit status 1 thrown by mtbseq + + + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + MTBseq: \$(MTBseq --version | cut -d " " -f 2) + END_VERSIONS + """ + + stub: + """ + echo "MTBseq --step TBgroups \ + --threads ${task.cpus} \ + --samples ${samplesheet_tsv} \ + --project mtbseqnf \ + --resilist ${ref_resistance_list} \ + --intregions ${ref_interesting_regions} \ + --categories ${ref_gene_categories} \ + --distance 12 \ + --basecalib ${ref_base_quality_recalibration}" + + sleep \$[ ( \$RANDOM % 10 ) + 1 ]s + + mkdir Groups + touch Groups/mtbseqnf_joint_cf4_cr4_fr75_ph4_samples5_amended_u95_phylo_w12.matrix + touch Groups/mtbseqnf_joint_cf4_cr4_fr75_ph4_samples35_amended_u95_phylo_w12_d12.groups + + printf '"%s":\\n MTBseq: 1.1.0\\n' "${task.process}" > versions.yml + + """ +} diff --git a/modules/local/mtbseq/tbgroups/meta.yml b/modules/local/mtbseq/tbgroups/meta.yml new file mode 100644 index 0000000..e69de29 diff --git a/modules/local/mtbseq/tbjoin/environment.yml b/modules/local/mtbseq/tbjoin/environment.yml new file mode 100644 index 0000000..cc92718 --- /dev/null +++ b/modules/local/mtbseq/tbjoin/environment.yml @@ -0,0 +1,7 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::mtbseq=1.1.0 diff --git a/modules/local/mtbseq/tbjoin/main.nf b/modules/local/mtbseq/tbjoin/main.nf new file mode 100644 index 0000000..338fee8 --- /dev/null +++ b/modules/local/mtbseq/tbjoin/main.nf @@ -0,0 +1,70 @@ +process TBJOIN { + tag "cohort" + label 'process_high_memory' + + conda "${moduleDir}/environment.yml" + + + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/mtbseq:1.1.0--hdfd78af_0' : + 'biocontainers/mtbseq:1.1.0--hdfd78af_0' }" + + + + input: + path("Called/*") + path("Position_Tables/*") + path(samplesheet_tsv) + env('USER') + tuple path(ref_resistance_list), path(ref_interesting_regions), path(ref_gene_categories), path(ref_base_quality_recalibration) + + output: + path("Joint/*_joint*samples*.{tab,log}") + path("Joint/*_joint*samples*.tab"), emit: joint_samples + + script: + def args = task.ext.args ?: "--project mtbseqnf --mincovf 4 --mincovr 4 --minphred 4 --minfreq 75 --distance 12" + """ + mkdir Joint + + MTBseq --step TBjoin \\ + --threads ${task.cpus} \\ + --samples ${samplesheet_tsv} \\ + --resilist ${ref_resistance_list} \\ + --intregions ${ref_interesting_regions} \\ + --categories ${ref_gene_categories} \\ + --basecalib ${ref_base_quality_recalibration} \\ + ${args} \\ + 1>>.command.out \\ + 2>>.command.err \\ + || true # NOTE This is a hack to overcome the exit status 1 thrown by mtbseq + + + """ + + stub: + + """ + sleep \$[ ( \$RANDOM % 10 ) + 1 ]s + + echo "MTBseq --step TBjoin \ + --threads ${task.cpus} \ + --samples ${samplesheet_tsv} \ + --project mtbseqnf \ + --mincovf 4 \ + --mincovr 4 \ + --minphred 4 \ + --minfreq 75 \ + --resilist ${ref_resistance_list} \ + --intregions ${ref_interesting_regions} \ + --categories ${ref_gene_categories} \ + --basecalib ${ref_base_quality_recalibration}" + + + mkdir Joint + touch Joint/mtbseqnf_joint_cf4_cr4_fr75_ph4_samples5.tab + touch Joint/mtbseqnf_joint_cf4_cr4_fr75_ph4_samples5.log + + """ + +} diff --git a/modules/local/mtbseq/tbjoin/meta.yml b/modules/local/mtbseq/tbjoin/meta.yml new file mode 100644 index 0000000..e69de29 diff --git a/modules/local/mtbseq/tblist/environment.yml b/modules/local/mtbseq/tblist/environment.yml new file mode 100644 index 0000000..cc92718 --- /dev/null +++ b/modules/local/mtbseq/tblist/environment.yml @@ -0,0 +1,7 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::mtbseq=1.1.0 diff --git a/modules/local/mtbseq/tblist/main.nf b/modules/local/mtbseq/tblist/main.nf new file mode 100644 index 0000000..ad86da8 --- /dev/null +++ b/modules/local/mtbseq/tblist/main.nf @@ -0,0 +1,65 @@ +process TBLIST { + tag "${meta.id}" + label 'process_single_high_memory' + + conda "${moduleDir}/environment.yml" + + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/mtbseq:1.1.0--hdfd78af_0' : + 'biocontainers/mtbseq:1.1.0--hdfd78af_0' }" + + + input: + tuple val(meta), path("Mpileup/${meta.id}_${meta.library}*.gatk.mpileup") + env('USER') + tuple path(ref_resistance_list), path(ref_interesting_regions), path(ref_gene_categories), path(ref_base_quality_recalibration) + + output: + path("Position_Tables/${meta.id}_${meta.library}*.gatk_position_table.tab"), emit: tbjoin_input + tuple val(meta), path("Position_Tables/${meta.id}_${meta.library}*.gatk_position_table.tab"), emit: position_table_tuple + path("Position_Tables/${meta.id}_${meta.library}*.gatk_position_table.tab"), emit: position_table + + script: + def args = task.ext.args ?: "--project mtbseqnf --minbqual 13" + """ + mkdir Position_Tables + + MTBseq --step TBlist \\ + --threads ${task.cpus} \\ + --resilist ${ref_resistance_list} \\ + --intregions ${ref_interesting_regions} \\ + --categories ${ref_gene_categories} \\ + --basecalib ${ref_base_quality_recalibration} \\ + ${args} \\ + 1>>.command.out \\ + 2>>.command.err \\ + || true # NOTE This is a hack to overcome the exit status 1 thrown by mtbseq + + + + """ + + stub: + + """ + sleep \$[ ( \$RANDOM % 10 ) + 1 ]s + + echo "MTBseq --step TBlist \ + --threads ${task.cpus} \ + --project mtbseqnf \ + --minbqual 13 \ + --resilist ${ref_resistance_list} \ + --intregions ${ref_interesting_regions} \ + --categories ${ref_gene_categories} \ + --basecalib ${ref_base_quality_recalibration}" + + + touch ${task.process}_${meta.id}_out.log + touch ${task.process}_${meta.id}_err.log + + mkdir Position_Tables + touch Position_Tables/${meta.id}_${meta.library}.gatk_position_table.tab + + """ + +} diff --git a/modules/local/mtbseq/tblist/meta.yml b/modules/local/mtbseq/tblist/meta.yml new file mode 100644 index 0000000..e69de29 diff --git a/modules/local/mtbseq/tbpile/environment.yml b/modules/local/mtbseq/tbpile/environment.yml new file mode 100644 index 0000000..cc92718 --- /dev/null +++ b/modules/local/mtbseq/tbpile/environment.yml @@ -0,0 +1,7 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::mtbseq=1.1.0 diff --git a/modules/local/mtbseq/tbpile/main.nf b/modules/local/mtbseq/tbpile/main.nf new file mode 100644 index 0000000..07b6d86 --- /dev/null +++ b/modules/local/mtbseq/tbpile/main.nf @@ -0,0 +1,61 @@ +process TBPILE { + tag "${meta.id}" + label 'process_single' + stageInMode 'copy' + + conda "${moduleDir}/environment.yml" + + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/mtbseq:1.1.0--hdfd78af_0' : + 'biocontainers/mtbseq:1.1.0--hdfd78af_0' }" + + + + input: + tuple val(meta), path("GATK_Bam/*") + env('USER') + tuple path(ref_resistance_list), path(ref_interesting_regions), path(ref_gene_categories), path(ref_base_quality_recalibration) + + output: + path("Mpileup/${meta.id}_${meta.library}*.gatk.{mpileup,mpileuplog}") + tuple val(meta), path("Mpileup/${meta.id}_${meta.library}*.gatk.mpileup"), emit: mpileup + + script: + def args = task.ext.args ?: "--project mtbseqnf" + + """ + mkdir Mpileup + + MTBseq --step TBpile \\ + --threads ${task.cpus} \\ + --resilist ${ref_resistance_list} \\ + --intregions ${ref_interesting_regions} \\ + --categories ${ref_gene_categories} \\ + --basecalib ${ref_base_quality_recalibration} \\ + ${args} \\ + 1>>.command.out \\ + 2>>.command.err \\ + || true # NOTE This is a hack to overcome the exit status 1 thrown by mtbseq + + """ + + stub: + + """ + echo "MTBseq --step TBpile \ + --threads ${task.cpus} \ + --project mtbseqnf \ + --resilist ${ref_resistance_list} \ + --intregions ${ref_interesting_regions} \ + --categories ${ref_gene_categories} \ + --basecalib ${ref_base_quality_recalibration}" + + sleep \$[ ( \$RANDOM % 10 ) + 1 ]s + + mkdir Mpileup + touch Mpileup/${meta.id}_${meta.library}.gatk.mpileup + touch Mpileup/${meta.id}_${meta.library}.gatk.mpileuplog + + """ + +} diff --git a/modules/local/mtbseq/tbpile/meta.yml b/modules/local/mtbseq/tbpile/meta.yml new file mode 100644 index 0000000..e69de29 diff --git a/modules/local/mtbseq/tbrefine/environment.yml b/modules/local/mtbseq/tbrefine/environment.yml new file mode 100644 index 0000000..cc92718 --- /dev/null +++ b/modules/local/mtbseq/tbrefine/environment.yml @@ -0,0 +1,7 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::mtbseq=1.1.0 diff --git a/modules/local/mtbseq/tbrefine/main.nf b/modules/local/mtbseq/tbrefine/main.nf new file mode 100644 index 0000000..ab1b392 --- /dev/null +++ b/modules/local/mtbseq/tbrefine/main.nf @@ -0,0 +1,60 @@ +process TBREFINE { + tag "${meta.id}" + label 'process_medium' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/mtbseq:1.1.0--hdfd78af_0' : + 'biocontainers/mtbseq:1.1.0--hdfd78af_0' }" + + + + input: + tuple val(meta), path("Bam/") + env('USER') + tuple path(ref_resistance_list), path(ref_interesting_regions), path(ref_gene_categories), path(ref_base_quality_recalibration) + + output: + tuple val(meta), path("GATK_Bam/${meta.id}_${meta.library}*gatk.{bam,bai,bamlog,grp,intervals}"), emit: gatk_bam + + script: + def args = task.ext.args ?: "--project mtbseqnf" + + """ + mkdir GATK_Bam + + MTBseq --step TBrefine \\ + --threads ${task.cpus} \\ + --resilist ${ref_resistance_list} \\ + --intregions ${ref_interesting_regions} \\ + --categories ${ref_gene_categories} \\ + --basecalib ${ref_base_quality_recalibration} \\ + ${args} \\ + 1>>.command.out \\ + 2>>.command.err \\ + || true # NOTE This is a hack to overcome the exit status 1 thrown by mtbseq + + """ + + stub: + + """ + sleep \$[ ( \$RANDOM % 10 ) + 1 ]s + + echo " MTBseq --step TBrefine \ + --threads ${task.cpus} \ + --project mtbseqnf \ + --resilist ${ref_resistance_list} \ + --intregions ${ref_interesting_regions} \ + --categories ${ref_gene_categories} \ + --basecalib ${ref_base_quality_recalibration}" + + + mkdir GATK_Bam + touch GATK_Bam/${meta.id}_${meta.library}.gatk.bam + touch GATK_Bam/${meta.id}_${meta.library}.gatk.bai + touch GATK_Bam/${meta.id}_${meta.library}.gatk.bamlog + touch GATK_Bam/${meta.id}_${meta.library}.gatk.grp + touch GATK_Bam/${meta.id}_${meta.library}.gatk.intervals + """ +} diff --git a/modules/local/mtbseq/tbrefine/meta.yml b/modules/local/mtbseq/tbrefine/meta.yml new file mode 100644 index 0000000..e69de29 diff --git a/modules/local/mtbseq/tbstats/environment.yml b/modules/local/mtbseq/tbstats/environment.yml new file mode 100644 index 0000000..cc92718 --- /dev/null +++ b/modules/local/mtbseq/tbstats/environment.yml @@ -0,0 +1,7 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::mtbseq=1.1.0 diff --git a/modules/local/mtbseq/tbstats/main.nf b/modules/local/mtbseq/tbstats/main.nf new file mode 100644 index 0000000..21a9d58 --- /dev/null +++ b/modules/local/mtbseq/tbstats/main.nf @@ -0,0 +1,58 @@ +process TBSTATS { + tag "cohort" + label 'process_single_high_memory' + + conda "${moduleDir}/environment.yml" + + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/mtbseq:1.1.0--hdfd78af_0' : + 'biocontainers/mtbseq:1.1.0--hdfd78af_0' }" + + + + input: + path("Bam/*") + path("Position_Tables/*") + env('USER') + tuple path(ref_resistance_list), path(ref_interesting_regions), path(ref_gene_categories), path(ref_base_quality_recalibration) + + output: + path("Statistics/Mapping_and_Variant_Statistics.tab"), emit: statistics + + script: + def args = task.ext.args ?: "--project mtbseqnf" + + """ + mkdir Statistics + + MTBseq --step TBstats \\ + --threads ${task.cpus} \\ + --resilist ${ref_resistance_list} \\ + --intregions ${ref_interesting_regions} \\ + --categories ${ref_gene_categories} \\ + --basecalib ${ref_base_quality_recalibration} \\ + ${args} \\ + 1>>.command.out \\ + 2>>.command.err \\ + || true # NOTE This is a hack to overcome the exit status 1 thrown by mtbseq + + """ + + stub: + + """ + sleep \$[ ( \$RANDOM % 10 ) + 1 ]s + + echo "MTBseq --step TBstats \ + --threads ${task.cpus} \ + --project mtbseqnf \ + --resilist ${ref_resistance_list} \ + --intregions ${ref_interesting_regions} \ + --categories ${ref_gene_categories} \ + --basecalib ${ref_base_quality_recalibration}" + + mkdir Statistics + touch Statistics/Mapping_and_Variant_Statistics.tab + """ + +} diff --git a/modules/local/mtbseq/tbstats/meta.yml b/modules/local/mtbseq/tbstats/meta.yml new file mode 100644 index 0000000..e69de29 diff --git a/modules/local/mtbseq/tbstrains/environment.yml b/modules/local/mtbseq/tbstrains/environment.yml new file mode 100644 index 0000000..cc92718 --- /dev/null +++ b/modules/local/mtbseq/tbstrains/environment.yml @@ -0,0 +1,7 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::mtbseq=1.1.0 diff --git a/modules/local/mtbseq/tbstrains/main.nf b/modules/local/mtbseq/tbstrains/main.nf new file mode 100644 index 0000000..0f9442a --- /dev/null +++ b/modules/local/mtbseq/tbstrains/main.nf @@ -0,0 +1,62 @@ +process TBSTRAINS { + tag "cohort" + label 'process_single' + + conda "${moduleDir}/environment.yml" + + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/mtbseq:1.1.0--hdfd78af_0' : + 'biocontainers/mtbseq:1.1.0--hdfd78af_0' }" + + + input: + path("Position_Tables/*") + env('USER') + tuple path(ref_resistance_list), path(ref_interesting_regions), path(ref_gene_categories), path(ref_base_quality_recalibration) + + output: + path("Classification/Strain_Classification.tab"), emit: classification + + script: + def args = task.ext.args ?: "--project mtbseqnf --mincovf 4 --mincovr 4 --minphred 4 --minfreq 75" + + """ + mkdir Classification + + MTBseq --step TBstrains \\ + --threads ${task.cpus} \\ + --resilist ${ref_resistance_list} \\ + --intregions ${ref_interesting_regions} \\ + --categories ${ref_gene_categories} \\ + --basecalib ${ref_base_quality_recalibration} \\ + ${args} \\ + 1>>.command.out \\ + 2>>.command.err \\ + || true # NOTE This is a hack to overcome the exit status 1 thrown by mtbseq + + + """ + + stub: + + """ + sleep \$[ ( \$RANDOM % 10 ) + 1 ]s + + echo "MTBseq --step TBstrains \ + --threads ${task.cpus} \ + --project mtbseqnf \ + --mincovf 4 \ + --mincovr 4 \ + --minphred 4 \ + --minfreq 75 \ + --resilist ${ref_resistance_list} \ + --intregions ${ref_interesting_regions} \ + --categories ${ref_gene_categories} \ + --basecalib ${ref_base_quality_recalibration}" + + mkdir Classification + touch Classification/Strain_Classification.tab + + """ + +} diff --git a/modules/local/mtbseq/tbstrains/meta.yml b/modules/local/mtbseq/tbstrains/meta.yml new file mode 100644 index 0000000..e69de29 diff --git a/modules/local/mtbseq/tbvariants/environment.yml b/modules/local/mtbseq/tbvariants/environment.yml new file mode 100644 index 0000000..cc92718 --- /dev/null +++ b/modules/local/mtbseq/tbvariants/environment.yml @@ -0,0 +1,7 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::mtbseq=1.1.0 diff --git a/modules/local/mtbseq/tbvariants/main.nf b/modules/local/mtbseq/tbvariants/main.nf new file mode 100644 index 0000000..3ae6990 --- /dev/null +++ b/modules/local/mtbseq/tbvariants/main.nf @@ -0,0 +1,64 @@ +process TBVARIANTS { + tag "${meta.id}" + label 'process_single' + + conda "${moduleDir}/environment.yml" + + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/mtbseq:1.1.0--hdfd78af_0' : + 'biocontainers/mtbseq:1.1.0--hdfd78af_0' }" + + + input: + tuple val(meta), path("Position_Tables/*") + env('USER') + tuple path(ref_resistance_list), path(ref_interesting_regions), path(ref_gene_categories), path(ref_base_quality_recalibration) + + output: + path("Called/${meta.id}_${meta.library}*gatk_position_{uncovered,variants}*.tab") + path("Called/${meta.id}_${meta.library}*gatk_position_variants*.tab"), emit: tbjoin_input + + script: + def args = task.ext.args ?: "--project mtbseqnf --mincovf 4 --mincovr 4 --minphred 4 --minfreq 75" + + """ + mkdir Called + + MTBseq --step TBvariants \\ + --threads ${task.cpus} \\ + --resilist ${ref_resistance_list} \\ + --intregions ${ref_interesting_regions} \\ + --categories ${ref_gene_categories} \\ + --basecalib ${ref_base_quality_recalibration} \\ + ${args} \\ + 1>>.command.out \\ + 2>>.command.err \\ + || true # NOTE This is a hack to overcome the exit status 1 thrown by mtbseq + + """ + + stub: + + """ + sleep \$[ ( \$RANDOM % 10 ) + 1 ]s + + echo "MTBseq --step TBvariants \ + --threads ${task.cpus} \ + --project mtbseqnf \ + --mincovf 4 \ + --mincovr 4 \ + --minphred 4 \ + --minfreq 75 \ + --resilist ${ref_resistance_list} \ + --intregions ${ref_interesting_regions} \ + --categories ${ref_gene_categories} \ + --basecalib ${ref_base_quality_recalibration}" + + + mkdir Called + touch Called/${meta.id}_${meta.library}.gatk_position_uncovered_cf4_cr4_fr75_ph4_outmode000.tab + touch Called/${meta.id}_${meta.library}.gatk_position_variants_cf4_cr4_fr75_ph4_outmode000.tab + + """ + +} diff --git a/modules/local/mtbseq/tbvariants/meta.yml b/modules/local/mtbseq/tbvariants/meta.yml new file mode 100644 index 0000000..e69de29 diff --git a/modules/local/utils/rename_files/environment.yml b/modules/local/utils/rename_files/environment.yml new file mode 100644 index 0000000..cc92718 --- /dev/null +++ b/modules/local/utils/rename_files/environment.yml @@ -0,0 +1,7 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::mtbseq=1.1.0 diff --git a/modules/local/utils/rename_files/main.nf b/modules/local/utils/rename_files/main.nf new file mode 100644 index 0000000..cbbddf0 --- /dev/null +++ b/modules/local/utils/rename_files/main.nf @@ -0,0 +1,31 @@ +process RENAME_FILES { + tag "${meta.id}" + label 'process_single' + + conda "${moduleDir}/environment.yml" + + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/mtbseq:1.1.0--hdfd78af_0' : + 'biocontainers/mtbseq:1.1.0--hdfd78af_0' }" + + input: + tuple val(meta), path(reads) + + output: + path("${meta.id}_${meta.library}_R?.fastq.gz") , emit: files + tuple val(meta), path("${meta.id}_${meta.library}_R?.fastq.gz"), emit: meta_and_files + + script: + """ + echo "Renaming ${reads} files as per MTBseq requirements." + + cp ${reads[0]} ${meta.id}_${meta.library}_R1.fastq.gz + cp ${reads[1]} ${meta.id}_${meta.library}_R2.fastq.gz + """ + + stub: + """ + touch ${meta.id}_${meta.library}_R1.fastq.gz + touch ${meta.id}_${meta.library}_R2.fastq.gz + """ +} diff --git a/modules/local/utils/rename_files/meta.yml b/modules/local/utils/rename_files/meta.yml new file mode 100644 index 0000000..e69de29 diff --git a/modules/magma/modules/local/gatk4.nf b/modules/magma/modules/local/gatk4.nf new file mode 100644 index 0000000..49b92ca --- /dev/null +++ b/modules/magma/modules/local/gatk4.nf @@ -0,0 +1,91 @@ +// TODO nf-core: If in doubt look at other nf-core/modules to see how we are doing things! :) +// https://github.com/nf-core/modules/tree/master/modules/nf-core/ +// You can also ask for help via your pull request or on the #modules channel on the nf-core Slack workspace: +// https://nf-co.re/join +// TODO nf-core: A module file SHOULD only define input and output files as command-line parameters. +// All other parameters MUST be provided using the "task.ext" directive, see here: +// https://www.nextflow.io/docs/latest/process.html#ext +// where "task.ext" is a string. +// Any parameters that need to be evaluated in the context of a particular sample +// e.g. single-end/paired-end data MUST also be defined and evaluated appropriately. +// TODO nf-core: Software that can be piped together SHOULD be added to separate module files +// unless there is a run-time, storage advantage in implementing in this way +// e.g. it's ok to have a single module for bwa to output BAM instead of SAM: +// bwa mem | samtools view -B -T ref.fasta +// TODO nf-core: Optional inputs are not currently supported by Nextflow. However, using an empty +// list (`[]`) instead of a file can be used to work around this issue. + +process GATK4 { + tag "$meta.id" + label 'process_high_memory' + + // TODO nf-core: List required Conda package(s). + // Software MUST be pinned to channel (i.e. "bioconda"), version (i.e. "1.10"). + // For Conda, the build (i.e. "h9402c20_2") must be EXCLUDED to support installation on different operating systems. + // TODO nf-core: See section in main README for further information regarding finding and adding container addresses to the section below. + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/gatk4:4.5.0.0--py36hdfd78af_0': + 'biocontainers/gatk4:4.5.0.0--py36hdfd78af_0' }" + + input: + // TODO nf-core: Where applicable all sample-specific information e.g. "id", "single_end", "read_group" + // MUST be provided as an input via a Groovy Map called "meta". + // This information may not be required in some instances e.g. indexing reference genome files: + // https://github.com/nf-core/modules/blob/master/modules/nf-core/bwa/index/main.nf + // TODO nf-core: Where applicable please provide/convert compressed files as input/output + // e.g. "*.fastq.gz" and NOT "*.fastq", "*.bam" and NOT "*.sam" etc. + tuple val(meta), path(bam) + + output: + // TODO nf-core: Named file extensions MUST be emitted for ALL output channels + tuple val(meta), path("*.bam"), emit: bam + // TODO nf-core: List additional required output channels/values here + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + // TODO nf-core: Where possible, a command MUST be provided to obtain the version number of the software e.g. 1.10 + // If the software is unable to output a version number on the command-line then it can be manually specified + // e.g. https://github.com/nf-core/modules/blob/master/modules/nf-core/homer/annotatepeaks/main.nf + // Each software used MUST provide the software name and version number in the YAML version file (versions.yml) + // TODO nf-core: It MUST be possible to pass additional parameters to the tool as a command-line string via the "task.ext.args" directive + // TODO nf-core: If the tool supports multi-threading then you MUST provide the appropriate parameter + // using the Nextflow "task" variable e.g. "--threads $task.cpus" + // TODO nf-core: Please replace the example samtools command below with your module's command + // TODO nf-core: Please indent the command appropriately (4 spaces!!) to help with readability ;) + """ + samtools \\ + sort \\ + $args \\ + -@ $task.cpus \\ + -o ${prefix}.bam \\ + -T $prefix \\ + $bam + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + gatk4: \$(samtools --version |& sed '1!d ; s/samtools //') + END_VERSIONS + """ + + stub: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + // TODO nf-core: A stub section should mimic the execution of the original module as best as possible + // Have a look at the following examples: + // Simple example: https://github.com/nf-core/modules/blob/818474a292b4860ae8ff88e149fbcda68814114d/modules/nf-core/bcftools/annotate/main.nf#L47-L63 + // Complex example: https://github.com/nf-core/modules/blob/818474a292b4860ae8ff88e149fbcda68814114d/modules/nf-core/bedtools/split/main.nf#L38-L54 + """ + touch ${prefix}.bam + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + gatk4: \$(samtools --version |& sed '1!d ; s/samtools //') + END_VERSIONS + """ +} diff --git a/modules/nf-core/bcftools/merge/environment.yml b/modules/nf-core/bcftools/merge/environment.yml new file mode 100644 index 0000000..5c00b11 --- /dev/null +++ b/modules/nf-core/bcftools/merge/environment.yml @@ -0,0 +1,5 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::bcftools=1.20 diff --git a/modules/nf-core/bcftools/merge/main.nf b/modules/nf-core/bcftools/merge/main.nf new file mode 100644 index 0000000..facb14e --- /dev/null +++ b/modules/nf-core/bcftools/merge/main.nf @@ -0,0 +1,74 @@ +process BCFTOOLS_MERGE { + tag "$meta.id" + label 'process_medium' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/bcftools:1.20--h8b25389_0': + 'biocontainers/bcftools:1.20--h8b25389_0' }" + + input: + tuple val(meta), path(vcfs), path(tbis) + tuple val(meta2), path(fasta) + tuple val(meta3), path(fai) + tuple val(meta4), path(bed) + + output: + tuple val(meta), path("*.{bcf,vcf}{,.gz}"), emit: vcf + tuple val(meta), path("*.{csi,tbi}") , emit: index, optional: true + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + + def input = (vcfs.collect().size() > 1) ? vcfs.sort{ it.name } : vcfs + def regions = bed ? "--regions-file $bed" : "" + def extension = args.contains("--output-type b") || args.contains("-Ob") ? "bcf.gz" : + args.contains("--output-type u") || args.contains("-Ou") ? "bcf" : + args.contains("--output-type z") || args.contains("-Oz") ? "vcf.gz" : + args.contains("--output-type v") || args.contains("-Ov") ? "vcf" : + "vcf" + + """ + bcftools merge \\ + $args \\ + $regions \\ + --threads $task.cpus \\ + --output ${prefix}.${extension} \\ + $input + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + bcftools: \$(bcftools --version 2>&1 | head -n1 | sed 's/^.*bcftools //; s/ .*\$//') + END_VERSIONS + """ + + stub: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def extension = args.contains("--output-type b") || args.contains("-Ob") ? "bcf.gz" : + args.contains("--output-type u") || args.contains("-Ou") ? "bcf" : + args.contains("--output-type z") || args.contains("-Oz") ? "vcf.gz" : + args.contains("--output-type v") || args.contains("-Ov") ? "vcf" : + "vcf" + def index = args.contains("--write-index=tbi") || args.contains("-W=tbi") ? "tbi" : + args.contains("--write-index=csi") || args.contains("-W=csi") ? "csi" : + args.contains("--write-index") || args.contains("-W") ? "csi" : + "" + def create_cmd = extension.endsWith(".gz") ? "echo '' | gzip >" : "touch" + def create_index = extension.endsWith(".gz") && index.matches("csi|tbi") ? "touch ${prefix}.${extension}.${index}" : "" + + """ + ${create_cmd} ${prefix}.${extension} + ${create_index} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + bcftools: \$(bcftools --version 2>&1 | head -n1 | sed 's/^.*bcftools //; s/ .*\$//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/bcftools/merge/meta.yml b/modules/nf-core/bcftools/merge/meta.yml new file mode 100644 index 0000000..2cf09a1 --- /dev/null +++ b/modules/nf-core/bcftools/merge/meta.yml @@ -0,0 +1,96 @@ +name: bcftools_merge +description: Merge VCF files +keywords: + - variant calling + - merge + - VCF +tools: + - merge: + description: | + Merge VCF files. + homepage: http://samtools.github.io/bcftools/bcftools.html + documentation: http://www.htslib.org/doc/bcftools.html + doi: 10.1093/bioinformatics/btp352 + licence: ["MIT"] + identifier: biotools:bcftools +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - vcfs: + type: file + description: | + List containing 2 or more vcf files + e.g. [ 'file1.vcf', 'file2.vcf' ] + - tbis: + type: file + description: | + List containing the tbi index files corresponding to the vcfs input files + e.g. [ 'file1.vcf.tbi', 'file2.vcf.tbi' ] + - - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - fasta: + type: file + description: "(Optional) The fasta reference file (only necessary for the `--gvcf + FILE` parameter)" + pattern: "*.{fasta,fa}" + - - meta3: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - fai: + type: file + description: "(Optional) The fasta reference file index (only necessary for + the `--gvcf FILE` parameter)" + pattern: "*.fai" + - - meta4: + type: map + description: | + Groovy Map containing bed information + e.g. [ id:'genome' ] + - bed: + type: file + description: "(Optional) The bed regions to merge on" + pattern: "*.bed" +output: + - vcf: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.{bcf,vcf}{,.gz}": + type: file + description: merged output file + pattern: "*.{vcf,vcf.gz,bcf,bcf.gz}" + - index: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.{csi,tbi}": + type: file + description: index of merged output + pattern: "*.{csi,tbi}" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@joseespinosa" + - "@drpatelh" + - "@nvnieuwk" + - "@ramprasadn" +maintainers: + - "@joseespinosa" + - "@drpatelh" + - "@nvnieuwk" + - "@ramprasadn" diff --git a/modules/nf-core/bcftools/merge/tests/bcf.config b/modules/nf-core/bcftools/merge/tests/bcf.config new file mode 100644 index 0000000..4467d07 --- /dev/null +++ b/modules/nf-core/bcftools/merge/tests/bcf.config @@ -0,0 +1,3 @@ +process { + ext.args = '--output-type u --no-version' +} diff --git a/modules/nf-core/bcftools/merge/tests/bcf_gz.config b/modules/nf-core/bcftools/merge/tests/bcf_gz.config new file mode 100644 index 0000000..280de8d --- /dev/null +++ b/modules/nf-core/bcftools/merge/tests/bcf_gz.config @@ -0,0 +1,3 @@ +process { + ext.args = '--output-type b --no-version' +} diff --git a/modules/nf-core/bcftools/merge/tests/main.nf.test b/modules/nf-core/bcftools/merge/tests/main.nf.test new file mode 100644 index 0000000..3995fc1 --- /dev/null +++ b/modules/nf-core/bcftools/merge/tests/main.nf.test @@ -0,0 +1,853 @@ +nextflow_process { + + name "Test Process BCFTOOLS_MERGE" + script "../main.nf" + process "BCFTOOLS_MERGE" + + tag "modules" + tag "modules_nfcore" + tag "bcftools" + tag "bcftools/merge" + + test("sarscov2 - [vcf, tbi], [], [], []") { + + config "./nextflow.config" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz', checkIfExists: true) + ], + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz.tbi', checkIfExists: true), + ] + ] + input[1] = [[],[]] + input[2] = [[],[]] + input[3] = [[],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert process.out.vcf.get(0).get(1).endsWith("vcf") }, + { assert snapshot( + path(process.out.vcf.get(0).get(1)).vcf.variantsMD5, + process.out.versions, + ).match() } + ) + } + + } + + test("sarscov2 - [vcf, tbi], [], [], [] - vcf output") { + + config "./vcf.config" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz', checkIfExists: true) + ], + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz.tbi', checkIfExists: true), + ] + ] + input[1] = [[],[]] + input[2] = [[],[]] + input[3] = [[],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert process.out.vcf.get(0).get(1).endsWith("vcf") }, + { assert snapshot( + path(process.out.vcf.get(0).get(1)).md5, + process.out.versions, + ).match() } + ) + } + + } + + test("sarscov2 - [vcf, tbi], [], [], [] - vcf.gz output") { + + config "./vcf_gz.config" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz', checkIfExists: true) + ], + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz.tbi', checkIfExists: true), + ] + ] + input[1] = [[],[]] + input[2] = [[],[]] + input[3] = [[],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert process.out.vcf.get(0).get(1).endsWith("vcf.gz") }, + { assert snapshot( + path(process.out.vcf.get(0).get(1)).vcf.variantsMD5, + process.out.versions, + ).match() } + ) + } + + } + + test("sarscov2 - [vcf, tbi], [], [], [] - bcf output") { + + config "./bcf.config" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz', checkIfExists: true) + ], + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz.tbi', checkIfExists: true), + ] + ] + input[1] = [[],[]] + input[2] = [[],[]] + input[3] = [[],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert process.out.vcf.get(0).get(1).endsWith("bcf") }, + { assert snapshot( + file(process.out.vcf.get(0).get(1)).name, + process.out.versions, + ).match() } + ) + } + + } + + test("sarscov2 - [vcf, tbi], [], [], [] - bcf.gz output") { + + config "./bcf_gz.config" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz', checkIfExists: true) + ], + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz.tbi', checkIfExists: true), + ] + ] + input[1] = [[],[]] + input[2] = [[],[]] + input[3] = [[],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert process.out.vcf.get(0).get(1).endsWith("bcf.gz") }, + { assert snapshot( + file(process.out.vcf.get(0).get(1)).name, + process.out.versions, + ).match() } + ) + } + + } + + test("sarscov2 - [vcf, tbi], [], [], [] - vcf.gz output - index") { + + config "./vcf_gz_index.config" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz', checkIfExists: true) + ], + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz.tbi', checkIfExists: true), + ] + ] + input[1] = [[],[]] + input[2] = [[],[]] + input[3] = [[],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert process.out.vcf.get(0).get(1).endsWith("vcf.gz") }, + { assert process.out.index.get(0).get(1).endsWith("csi") }, + { assert snapshot( + path(process.out.vcf.get(0).get(1)).vcf.variantsMD5, + file(process.out.index.get(0).get(1)).name, + process.out.versions, + ).match() } + ) + } + + } + + test("sarscov2 - [vcf, tbi], [], [], [] - vcf.gz output - csi index") { + + config "./vcf_gz_index_csi.config" + + when { + + process { + """ + input[0] = [ + [ id:'test' ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz', checkIfExists: true) + ], + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz.tbi', checkIfExists: true), + ] + ] + input[1] = [[],[]] + input[2] = [[],[]] + input[3] = [[],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert process.out.vcf.get(0).get(1).endsWith("vcf.gz") }, + { assert process.out.index.get(0).get(1).endsWith("csi") }, + { assert snapshot( + path(process.out.vcf.get(0).get(1)).vcf.variantsMD5, + file(process.out.index.get(0).get(1)).name, + process.out.versions, + ).match() } + ) + } + + } + + test("sarscov2 - [vcf, tbi], [], [], [] - vcf.gz output - tbi index") { + + config "./vcf_gz_index_tbi.config" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz', checkIfExists: true) + ], + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz.tbi', checkIfExists: true), + ] + ] + input[1] = [[],[]] + input[2] = [[],[]] + input[3] = [[],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert process.out.vcf.get(0).get(1).endsWith("vcf.gz") }, + { assert process.out.index.get(0).get(1).endsWith("tbi") }, + { assert snapshot( + path(process.out.vcf.get(0).get(1)).vcf.variantsMD5, + file(process.out.index.get(0).get(1)).name, + process.out.versions, + ).match() } + ) + } + + } + + test("sarscov2 - [vcf, tbi], [], [], bed") { + + config "./nextflow.config" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz', checkIfExists: true) + ], + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz.tbi', checkIfExists: true), + ] + ] + input[1] = [[],[]] + input[2] = [[],[]] + input[3] = [ + [ id:'test' ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/bed/test.bed', checkIfExists: true) ] + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert process.out.vcf.get(0).get(1).endsWith("vcf") }, + { assert snapshot( + path(process.out.vcf.get(0).get(1)).md5, + process.out.versions, + ).match() } + ) + } + + } + + test("homo_sapiens - [vcf, tbi], fasta, fai, bed - vcf.gz output") { + + config "./nextflow.gvcf.config" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test.genome.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test2.genome.vcf.gz', checkIfExists: true) + ], + [ + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test.genome.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test2.genome.vcf.gz.tbi', checkIfExists: true), + ] + ] + input[1] = [ + [ id:'test' ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] + ] + input[2] = [ + [ id:'test' ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) ] + ] + input[3] = [ + [ id:'test' ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.bed', checkIfExists: true) ] + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert process.out.vcf.get(0).get(1).endsWith("vcf.gz") }, + { assert snapshot( + path(process.out.vcf.get(0).get(1)).vcf.variantsMD5, + process.out.versions, + ).match() } + ) + } + + } + + test("sarscov2 - [vcf, tbi], [], [], [] - one sample") { + + config "./nextflow.config" + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz', checkIfExists: true) + ], + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi', checkIfExists: true) + ] + ] + input[1] = [[],[]] + input[2] = [[],[]] + input[3] = [[],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert process.out.vcf.get(0).get(1).endsWith("vcf") }, + { assert snapshot( + path(process.out.vcf.get(0).get(1)).md5, + process.out.versions, + ).match() } + ) + } + + } + + test("sarscov2 - [vcf, tbi], [], [], [] - stub") { + + options "-stub" + config "./nextflow.config" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz', checkIfExists: true) + ], + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz.tbi', checkIfExists: true), + ] + ] + input[1] = [[],[]] + input[2] = [[],[]] + input[3] = [[],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert process.out.vcf.get(0).get(1).endsWith("vcf") }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("sarscov2 - [vcf, tbi], [], [], [] - vcf output - stub") { + + options "-stub" + config "./vcf.config" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz', checkIfExists: true) + ], + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz.tbi', checkIfExists: true), + ] + ] + input[1] = [[],[]] + input[2] = [[],[]] + input[3] = [[],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert process.out.vcf.get(0).get(1).endsWith("vcf") }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("sarscov2 - [vcf, tbi], [], [], [] - vcf.gz output - stub") { + + options "-stub" + config "./vcf_gz.config" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz', checkIfExists: true) + ], + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz.tbi', checkIfExists: true), + ] + ] + input[1] = [[],[]] + input[2] = [[],[]] + input[3] = [[],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert process.out.vcf.get(0).get(1).endsWith("vcf.gz") }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("sarscov2 - [vcf, tbi], [], [], [] - bcf output - stub") { + + options "-stub" + config "./bcf.config" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz', checkIfExists: true) + ], + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz.tbi', checkIfExists: true), + ] + ] + input[1] = [[],[]] + input[2] = [[],[]] + input[3] = [[],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert process.out.vcf.get(0).get(1).endsWith("bcf") }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("sarscov2 - [vcf, tbi], [], [], [] - bcf.gz output - stub") { + + options "-stub" + config "./bcf_gz.config" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz', checkIfExists: true) + ], + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz.tbi', checkIfExists: true), + ] + ] + input[1] = [[],[]] + input[2] = [[],[]] + input[3] = [[],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert process.out.vcf.get(0).get(1).endsWith("bcf.gz") }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("sarscov2 - [vcf, tbi], [], [], [] - vcf.gz output - index - stub") { + + options "-stub" + config "./vcf_gz_index.config" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz', checkIfExists: true) + ], + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz.tbi', checkIfExists: true), + ] + ] + input[1] = [[],[]] + input[2] = [[],[]] + input[3] = [[],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert process.out.vcf.get(0).get(1).endsWith("vcf.gz") }, + { assert process.out.index.get(0).get(1).endsWith("csi") }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("sarscov2 - [vcf, tbi], [], [], [] - vcf.gz output - csi index - stub") { + + options "-stub" + config "./vcf_gz_index_csi.config" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz', checkIfExists: true) + ], + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz.tbi', checkIfExists: true), + ] + ] + input[1] = [[],[]] + input[2] = [[],[]] + input[3] = [[],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert process.out.vcf.get(0).get(1).endsWith("vcf.gz") }, + { assert process.out.index.get(0).get(1).endsWith("csi") }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("sarscov2 - [vcf, tbi], [], [], [] - vcf.gz output - tbi index - stub") { + + options "-stub" + config "./vcf_gz_index_tbi.config" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz', checkIfExists: true) + ], + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz.tbi', checkIfExists: true), + ] + ] + input[1] = [[],[]] + input[2] = [[],[]] + input[3] = [[],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert process.out.vcf.get(0).get(1).endsWith("vcf.gz") }, + { assert process.out.index.get(0).get(1).endsWith("tbi") }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("sarscov2 - [vcf, tbi], [], [], bed - stub") { + + options "-stub" + config "./nextflow.config" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz', checkIfExists: true) + ], + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz.tbi', checkIfExists: true), + ] + ] + input[1] = [[],[]] + input[2] = [[],[]] + input[3] = [ + [ id:'test' ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/bed/test.bed', checkIfExists: true) ] + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert process.out.vcf.get(0).get(1).endsWith("vcf") }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("homo_sapiens - [vcf, tbi], fasta, fai, bed - vcf.gz output - stub") { + + options "-stub" + config "./nextflow.gvcf.config" + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test.genome.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test2.genome.vcf.gz', checkIfExists: true) + ], + [ + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test.genome.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test2.genome.vcf.gz.tbi', checkIfExists: true), + ] + ] + input[1] = [ + [ id:'test' ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] + ] + input[2] = [ + [ id:'test' ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) ] + ] + input[3] = [ + [ id:'test' ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.bed', checkIfExists: true) ] + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert process.out.vcf.get(0).get(1).endsWith("vcf.gz") }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("sarscov2 - [vcf, tbi], [], [], [] - one sample - stub") { + + options "-stub" + config "./nextflow.config" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz', checkIfExists: true) + ], + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi', checkIfExists: true) + ] + ] + input[1] = [[],[]] + input[2] = [[],[]] + input[3] = [[],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert process.out.vcf.get(0).get(1).endsWith("vcf") }, + { assert snapshot(process.out).match() } + ) + } + + } +} diff --git a/modules/nf-core/bcftools/merge/tests/main.nf.test.snap b/modules/nf-core/bcftools/merge/tests/main.nf.test.snap new file mode 100644 index 0000000..b3b6255 --- /dev/null +++ b/modules/nf-core/bcftools/merge/tests/main.nf.test.snap @@ -0,0 +1,607 @@ +{ + "sarscov2 - [vcf, tbi], [], [], [] - vcf.gz output - tbi index": { + "content": [ + "e0de448dc8e712956a03ce68d79a0b3a", + "test.vcf.gz.tbi", + [ + "versions.yml:md5,d2c0a30d9a4cc6df89a464ae82e0c38a" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-09-05T12:34:16.977726522" + }, + "sarscov2 - [vcf, tbi], [], [], [] - vcf output - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.vcf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + + ], + "2": [ + "versions.yml:md5,d2c0a30d9a4cc6df89a464ae82e0c38a" + ], + "index": [ + + ], + "vcf": [ + [ + { + "id": "test" + }, + "test.vcf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,d2c0a30d9a4cc6df89a464ae82e0c38a" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-05T13:17:34.532910365" + }, + "sarscov2 - [vcf, tbi], [], [], bed": { + "content": [ + "febdcfb851dcfc83d8248520830aef10", + [ + "versions.yml:md5,d2c0a30d9a4cc6df89a464ae82e0c38a" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-05T13:29:48.630057872" + }, + "sarscov2 - [vcf, tbi], [], [], [] - vcf.gz output - index - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + [ + { + "id": "test" + }, + "test.vcf.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,d2c0a30d9a4cc6df89a464ae82e0c38a" + ], + "index": [ + [ + { + "id": "test" + }, + "test.vcf.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "vcf": [ + [ + { + "id": "test" + }, + "test.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,d2c0a30d9a4cc6df89a464ae82e0c38a" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-05T13:17:59.983157569" + }, + "sarscov2 - [vcf, tbi], [], [], [] - vcf output": { + "content": [ + "57bb84274f336465d0a0946b532093b0", + [ + "versions.yml:md5,d2c0a30d9a4cc6df89a464ae82e0c38a" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-05T13:29:05.528412678" + }, + "sarscov2 - [vcf, tbi], [], [], [] - bcf.gz output - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.bcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + + ], + "2": [ + "versions.yml:md5,d2c0a30d9a4cc6df89a464ae82e0c38a" + ], + "index": [ + + ], + "vcf": [ + [ + { + "id": "test" + }, + "test.bcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,d2c0a30d9a4cc6df89a464ae82e0c38a" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-09-05T11:58:46.619657457" + }, + "sarscov2 - [vcf, tbi], [], [], [] - vcf.gz output - tbi index - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + [ + { + "id": "test" + }, + "test.vcf.gz.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,d2c0a30d9a4cc6df89a464ae82e0c38a" + ], + "index": [ + [ + { + "id": "test" + }, + "test.vcf.gz.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "vcf": [ + [ + { + "id": "test" + }, + "test.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,d2c0a30d9a4cc6df89a464ae82e0c38a" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-05T13:18:12.848227353" + }, + "sarscov2 - [vcf, tbi], [], [], [] - vcf.gz output - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + + ], + "2": [ + "versions.yml:md5,d2c0a30d9a4cc6df89a464ae82e0c38a" + ], + "index": [ + + ], + "vcf": [ + [ + { + "id": "test" + }, + "test.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,d2c0a30d9a4cc6df89a464ae82e0c38a" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-09-05T11:23:15.794389239" + }, + "sarscov2 - [vcf, tbi], [], [], [] - vcf.gz output - csi index": { + "content": [ + "e0de448dc8e712956a03ce68d79a0b3a", + "test.vcf.gz.csi", + [ + "versions.yml:md5,d2c0a30d9a4cc6df89a464ae82e0c38a" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-09-05T11:57:16.850641473" + }, + "sarscov2 - [vcf, tbi], [], [], [] - vcf.gz output": { + "content": [ + "e0de448dc8e712956a03ce68d79a0b3a", + [ + "versions.yml:md5,d2c0a30d9a4cc6df89a464ae82e0c38a" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-09-05T11:56:27.949031071" + }, + "sarscov2 - [vcf, tbi], [], [], bed - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.vcf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + + ], + "2": [ + "versions.yml:md5,d2c0a30d9a4cc6df89a464ae82e0c38a" + ], + "index": [ + + ], + "vcf": [ + [ + { + "id": "test" + }, + "test.vcf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,d2c0a30d9a4cc6df89a464ae82e0c38a" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-05T13:18:19.273064822" + }, + "sarscov2 - [vcf, tbi], [], [], [] - bcf output": { + "content": [ + "test.bcf", + [ + "versions.yml:md5,d2c0a30d9a4cc6df89a464ae82e0c38a" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-09-05T11:56:38.567500859" + }, + "sarscov2 - [vcf, tbi], [], [], [] - bcf output - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.bcf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + + ], + "2": [ + "versions.yml:md5,d2c0a30d9a4cc6df89a464ae82e0c38a" + ], + "index": [ + + ], + "vcf": [ + [ + { + "id": "test" + }, + "test.bcf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,d2c0a30d9a4cc6df89a464ae82e0c38a" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-05T13:17:47.356328326" + }, + "sarscov2 - [vcf, tbi], [], [], [] - one sample - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.vcf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + + ], + "2": [ + "versions.yml:md5,d2c0a30d9a4cc6df89a464ae82e0c38a" + ], + "index": [ + + ], + "vcf": [ + [ + { + "id": "test" + }, + "test.vcf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,d2c0a30d9a4cc6df89a464ae82e0c38a" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-05T15:13:18.708495878" + }, + "homo_sapiens - [vcf, tbi], fasta, fai, bed - vcf.gz output - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + + ], + "2": [ + "versions.yml:md5,d2c0a30d9a4cc6df89a464ae82e0c38a" + ], + "index": [ + + ], + "vcf": [ + [ + { + "id": "test" + }, + "test.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,d2c0a30d9a4cc6df89a464ae82e0c38a" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-05T13:56:45.706125286" + }, + "sarscov2 - [vcf, tbi], [], [], [] - vcf.gz output - index": { + "content": [ + "e0de448dc8e712956a03ce68d79a0b3a", + "test.vcf.gz.csi", + [ + "versions.yml:md5,d2c0a30d9a4cc6df89a464ae82e0c38a" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-09-05T12:33:43.639646108" + }, + "homo_sapiens - [vcf, tbi], fasta, fai, bed - vcf.gz output": { + "content": [ + "645b7f7f9131bfe350a9ec3cf82c17fe", + [ + "versions.yml:md5,d2c0a30d9a4cc6df89a464ae82e0c38a" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-05T13:55:44.299812124" + }, + "sarscov2 - [vcf, tbi], [], [], [] - one sample": { + "content": [ + "2a374cf02f0c32cf607646167e7f153b", + [ + "versions.yml:md5,d2c0a30d9a4cc6df89a464ae82e0c38a" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-05T15:37:38.491844702" + }, + "sarscov2 - [vcf, tbi], [], [], [] - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.vcf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + + ], + "2": [ + "versions.yml:md5,d2c0a30d9a4cc6df89a464ae82e0c38a" + ], + "index": [ + + ], + "vcf": [ + [ + { + "id": "test" + }, + "test.vcf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,d2c0a30d9a4cc6df89a464ae82e0c38a" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-05T13:17:28.188178904" + }, + "sarscov2 - [vcf, tbi], [], [], [] - vcf.gz output - csi index - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + [ + { + "id": "test" + }, + "test.vcf.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,d2c0a30d9a4cc6df89a464ae82e0c38a" + ], + "index": [ + [ + { + "id": "test" + }, + "test.vcf.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "vcf": [ + [ + { + "id": "test" + }, + "test.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,d2c0a30d9a4cc6df89a464ae82e0c38a" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-05T13:18:06.430943593" + }, + "sarscov2 - [vcf, tbi], [], [], []": { + "content": [ + "e0de448dc8e712956a03ce68d79a0b3a", + [ + "versions.yml:md5,d2c0a30d9a4cc6df89a464ae82e0c38a" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-09-05T12:31:03.893007442" + }, + "sarscov2 - [vcf, tbi], [], [], [] - bcf.gz output": { + "content": [ + "test.bcf.gz", + [ + "versions.yml:md5,d2c0a30d9a4cc6df89a464ae82e0c38a" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-09-05T11:56:56.416361069" + } +} \ No newline at end of file diff --git a/modules/nf-core/bcftools/merge/tests/nextflow.config b/modules/nf-core/bcftools/merge/tests/nextflow.config new file mode 100644 index 0000000..c3f0b71 --- /dev/null +++ b/modules/nf-core/bcftools/merge/tests/nextflow.config @@ -0,0 +1,5 @@ +process { + withName: BCFTOOLS_MERGE { + ext.args = '--force-samples --force-single --no-version' + } +} diff --git a/modules/nf-core/bcftools/merge/tests/nextflow.gvcf.config b/modules/nf-core/bcftools/merge/tests/nextflow.gvcf.config new file mode 100644 index 0000000..8c457b7 --- /dev/null +++ b/modules/nf-core/bcftools/merge/tests/nextflow.gvcf.config @@ -0,0 +1,5 @@ +process { + withName: BCFTOOLS_MERGE { + ext.args = { "--force-samples --no-version --output-type z --gvcf $fasta" } + } +} diff --git a/modules/nf-core/bcftools/merge/tests/tags.yml b/modules/nf-core/bcftools/merge/tests/tags.yml new file mode 100644 index 0000000..1464d0c --- /dev/null +++ b/modules/nf-core/bcftools/merge/tests/tags.yml @@ -0,0 +1,2 @@ +bcftools/merge: + - "modules/nf-core/bcftools/merge/**" diff --git a/modules/nf-core/bcftools/merge/tests/vcf.config b/modules/nf-core/bcftools/merge/tests/vcf.config new file mode 100644 index 0000000..759222e --- /dev/null +++ b/modules/nf-core/bcftools/merge/tests/vcf.config @@ -0,0 +1,3 @@ +process { + ext.args = '--output-type v --no-version' +} diff --git a/modules/nf-core/bcftools/merge/tests/vcf_gz.config b/modules/nf-core/bcftools/merge/tests/vcf_gz.config new file mode 100644 index 0000000..8b6ad8b --- /dev/null +++ b/modules/nf-core/bcftools/merge/tests/vcf_gz.config @@ -0,0 +1,3 @@ +process { + ext.args = '--output-type z --no-version' +} diff --git a/modules/nf-core/bcftools/merge/tests/vcf_gz_index.config b/modules/nf-core/bcftools/merge/tests/vcf_gz_index.config new file mode 100644 index 0000000..9f1e9b1 --- /dev/null +++ b/modules/nf-core/bcftools/merge/tests/vcf_gz_index.config @@ -0,0 +1,3 @@ +process { + ext.args = "--output-type z --write-index --no-version" +} diff --git a/modules/nf-core/bcftools/merge/tests/vcf_gz_index_csi.config b/modules/nf-core/bcftools/merge/tests/vcf_gz_index_csi.config new file mode 100644 index 0000000..8308ee1 --- /dev/null +++ b/modules/nf-core/bcftools/merge/tests/vcf_gz_index_csi.config @@ -0,0 +1,3 @@ +process { + ext.args = "--output-type z --write-index=csi --no-version" +} diff --git a/modules/nf-core/bcftools/merge/tests/vcf_gz_index_tbi.config b/modules/nf-core/bcftools/merge/tests/vcf_gz_index_tbi.config new file mode 100644 index 0000000..9be4075 --- /dev/null +++ b/modules/nf-core/bcftools/merge/tests/vcf_gz_index_tbi.config @@ -0,0 +1,3 @@ +process { + ext.args = "--output-type z --write-index=tbi --no-version" +} diff --git a/modules/nf-core/bcftools/view/environment.yml b/modules/nf-core/bcftools/view/environment.yml new file mode 100644 index 0000000..5c00b11 --- /dev/null +++ b/modules/nf-core/bcftools/view/environment.yml @@ -0,0 +1,5 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::bcftools=1.20 diff --git a/modules/nf-core/bcftools/view/main.nf b/modules/nf-core/bcftools/view/main.nf new file mode 100644 index 0000000..7fe4303 --- /dev/null +++ b/modules/nf-core/bcftools/view/main.nf @@ -0,0 +1,76 @@ +process BCFTOOLS_VIEW { + tag "$meta.id" + label 'process_medium' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/bcftools:1.20--h8b25389_0': + 'biocontainers/bcftools:1.20--h8b25389_0' }" + + input: + tuple val(meta), path(vcf), path(index) + path(regions) + path(targets) + path(samples) + + output: + tuple val(meta), path("*.{vcf,vcf.gz,bcf,bcf.gz}"), emit: vcf + tuple val(meta), path("*.tbi") , emit: tbi, optional: true + tuple val(meta), path("*.csi") , emit: csi, optional: true + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def regions_file = regions ? "--regions-file ${regions}" : "" + def targets_file = targets ? "--targets-file ${targets}" : "" + def samples_file = samples ? "--samples-file ${samples}" : "" + def extension = args.contains("--output-type b") || args.contains("-Ob") ? "bcf.gz" : + args.contains("--output-type u") || args.contains("-Ou") ? "bcf" : + args.contains("--output-type z") || args.contains("-Oz") ? "vcf.gz" : + args.contains("--output-type v") || args.contains("-Ov") ? "vcf" : + "vcf" + """ + bcftools view \\ + --output ${prefix}.${extension} \\ + ${regions_file} \\ + ${targets_file} \\ + ${samples_file} \\ + $args \\ + --threads $task.cpus \\ + ${vcf} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + bcftools: \$(bcftools --version 2>&1 | head -n1 | sed 's/^.*bcftools //; s/ .*\$//') + END_VERSIONS + """ + + stub: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def extension = args.contains("--output-type b") || args.contains("-Ob") ? "bcf.gz" : + args.contains("--output-type u") || args.contains("-Ou") ? "bcf" : + args.contains("--output-type z") || args.contains("-Oz") ? "vcf.gz" : + args.contains("--output-type v") || args.contains("-Ov") ? "vcf" : + "vcf" + def index = args.contains("--write-index=tbi") || args.contains("-W=tbi") ? "tbi" : + args.contains("--write-index=csi") || args.contains("-W=csi") ? "csi" : + args.contains("--write-index") || args.contains("-W") ? "csi" : + "" + def create_cmd = extension.endsWith(".gz") ? "echo '' | gzip >" : "touch" + def create_index = extension.endsWith(".gz") && index.matches("csi|tbi") ? "touch ${prefix}.${extension}.${index}" : "" + + """ + ${create_cmd} ${prefix}.${extension} + ${create_index} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + bcftools: \$(bcftools --version 2>&1 | head -n1 | sed 's/^.*bcftools //; s/ .*\$//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/bcftools/view/meta.yml b/modules/nf-core/bcftools/view/meta.yml new file mode 100644 index 0000000..aa7785f --- /dev/null +++ b/modules/nf-core/bcftools/view/meta.yml @@ -0,0 +1,88 @@ +name: bcftools_view +description: View, subset and filter VCF or BCF files by position and filtering expression. + Convert between VCF and BCF +keywords: + - variant calling + - view + - bcftools + - VCF +tools: + - view: + description: | + View, subset and filter VCF or BCF files by position and filtering expression. Convert between VCF and BCF + homepage: http://samtools.github.io/bcftools/bcftools.html + documentation: http://www.htslib.org/doc/bcftools.html + doi: 10.1093/bioinformatics/btp352 + licence: ["MIT"] + identifier: biotools:bcftools +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - vcf: + type: file + description: | + The vcf file to be inspected. + e.g. 'file.vcf' + - index: + type: file + description: | + The tab index for the VCF file to be inspected. + e.g. 'file.tbi' + - - regions: + type: file + description: | + Optionally, restrict the operation to regions listed in this file. + e.g. 'file.vcf' + - - targets: + type: file + description: | + Optionally, restrict the operation to regions listed in this file (doesn't rely upon index files) + e.g. 'file.vcf' + - - samples: + type: file + description: | + Optional, file of sample names to be included or excluded. + e.g. 'file.tsv' +output: + - vcf: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.{vcf,vcf.gz,bcf,bcf.gz}": + type: file + description: VCF normalized output file + pattern: "*.{vcf,vcf.gz,bcf,bcf.gz}" + - tbi: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.tbi": + type: file + description: Alternative VCF file index + pattern: "*.tbi" + - csi: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.csi": + type: file + description: Default VCF file index + pattern: "*.csi" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@abhi18av" +maintainers: + - "@abhi18av" diff --git a/modules/nf-core/bcftools/view/tests/main.nf.test b/modules/nf-core/bcftools/view/tests/main.nf.test new file mode 100644 index 0000000..1e60c50 --- /dev/null +++ b/modules/nf-core/bcftools/view/tests/main.nf.test @@ -0,0 +1,298 @@ +nextflow_process { + + name "Test Process BCFTOOLS_VIEW" + script "../main.nf" + process "BCFTOOLS_VIEW" + + tag "modules" + tag "modules_nfcore" + tag "bcftools" + tag "bcftools/view" + + test("sarscov2 - [vcf, tbi], [], [], []") { + + config "./nextflow.config" + + when { + process { + """ + input[0] = [ + [ id:'out', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz.tbi', checkIfExists: true) + ] + input[1] = [] + input[2] = [] + input[3] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.vcf, + process.out.versions + ).match() } + ) + } + + } + + test("sarscov2 - [vcf, tbi], [], [], [] - vcf_gz_index") { + + config "./vcf_gz_index.config" + + when { + process { + """ + input[0] = [ + [ id:'out', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz.tbi', checkIfExists: true) + ] + input[1] = [] + input[2] = [] + input[3] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.vcf, + process.out.csi.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.tbi.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.versions + ).match() }, + { assert process.out.csi[0][1].endsWith(".csi") } + ) + } + + } + + test("sarscov2 - [vcf, tbi], [], [], [] - vcf_gz_index_csi") { + + config "./vcf_gz_index_csi.config" + + when { + process { + """ + input[0] = [ + [ id:'out', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz.tbi', checkIfExists: true) + ] + input[1] = [] + input[2] = [] + input[3] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.vcf, + process.out.csi.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.tbi.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.versions + ).match() }, + { assert process.out.csi[0][1].endsWith(".csi") } + ) + } + + } + + test("sarscov2 - [vcf, tbi], [], [], [] - vcf_gz_index_tbi") { + + config "./vcf_gz_index_tbi.config" + + when { + process { + """ + input[0] = [ + [ id:'out', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz.tbi', checkIfExists: true) + ] + input[1] = [] + input[2] = [] + input[3] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.vcf, + process.out.csi.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.tbi.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.versions + ).match() }, + { assert process.out.tbi[0][1].endsWith(".tbi") } + ) + } + + } + + test("sarscov2 - [vcf, tbi], vcf, tsv, []") { + + config "./nextflow.config" + + when { + process { + """ + input[0] = [ + [ id:'out', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz.tbi', checkIfExists: true) + ] + input[1] = file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz', checkIfExists: true) + input[2] = file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.targets.tsv.gz', checkIfExists: true) + input[3] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.vcf, + process.out.versions + ).match() } + ) + } + + } + + test("sarscov2 - [vcf, tbi], [], [], [] - stub") { + + config "./nextflow.config" + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'out', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz.tbi', checkIfExists: true) + ] + input[1] = [] + input[2] = [] + input[3] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + file(process.out.vcf[0][1]).name, + process.out.versions + ).match() } + ) + } + + } + + test("sarscov2 - [vcf, tbi], [], [], [] - vcf_gz_index - stub") { + + config "./vcf_gz_index.config" + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'out', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz.tbi', checkIfExists: true) + ] + input[1] = [] + input[2] = [] + input[3] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() }, + { assert process.out.csi[0][1].endsWith(".csi") } + ) + } + + } + + test("sarscov2 - [vcf, tbi], [], [], [] - vcf_gz_index_csi - stub") { + + config "./vcf_gz_index_csi.config" + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'out', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz.tbi', checkIfExists: true) + ] + input[1] = [] + input[2] = [] + input[3] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() }, + { assert process.out.csi[0][1].endsWith(".csi") } + ) + } + + } + + test("sarscov2 - [vcf, tbi], [], [], [] - vcf_gz_index_tbi - stub") { + + config "./vcf_gz_index_tbi.config" + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'out', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz.tbi', checkIfExists: true) + ] + input[1] = [] + input[2] = [] + input[3] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() }, + { assert process.out.tbi[0][1].endsWith(".tbi") } + ) + } + + } + +} \ No newline at end of file diff --git a/modules/nf-core/bcftools/view/tests/main.nf.test.snap b/modules/nf-core/bcftools/view/tests/main.nf.test.snap new file mode 100644 index 0000000..fec22e3 --- /dev/null +++ b/modules/nf-core/bcftools/view/tests/main.nf.test.snap @@ -0,0 +1,333 @@ +{ + "sarscov2 - [vcf, tbi], [], [], [] - vcf_gz_index_csi - stub": { + "content": [ + { + "0": [ + [ + { + "id": "out", + "single_end": false + }, + "out_vcf.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + + ], + "2": [ + [ + { + "id": "out", + "single_end": false + }, + "out_vcf.vcf.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + "versions.yml:md5,241125d00357804552689c37bbabe1f5" + ], + "csi": [ + [ + { + "id": "out", + "single_end": false + }, + "out_vcf.vcf.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "tbi": [ + + ], + "vcf": [ + [ + { + "id": "out", + "single_end": false + }, + "out_vcf.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,241125d00357804552689c37bbabe1f5" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-05T12:14:38.717458272" + }, + "sarscov2 - [vcf, tbi], [], [], [] - vcf_gz_index_tbi": { + "content": [ + [ + [ + { + "id": "out", + "single_end": false + }, + "out_vcf.vcf.gz:md5,8e722884ffb75155212a3fc053918766" + ] + ], + [ + + ], + [ + [ + { + "id": "out", + "single_end": false + }, + "out_vcf.vcf.gz.tbi" + ] + ], + [ + "versions.yml:md5,241125d00357804552689c37bbabe1f5" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-05T12:13:44.760671384" + }, + "sarscov2 - [vcf, tbi], [], [], [] - vcf_gz_index - stub": { + "content": [ + { + "0": [ + [ + { + "id": "out", + "single_end": false + }, + "out_vcf.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + + ], + "2": [ + [ + { + "id": "out", + "single_end": false + }, + "out_vcf.vcf.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + "versions.yml:md5,241125d00357804552689c37bbabe1f5" + ], + "csi": [ + [ + { + "id": "out", + "single_end": false + }, + "out_vcf.vcf.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "tbi": [ + + ], + "vcf": [ + [ + { + "id": "out", + "single_end": false + }, + "out_vcf.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,241125d00357804552689c37bbabe1f5" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-04T16:06:21.669668533" + }, + "sarscov2 - [vcf, tbi], [], [], [] - vcf_gz_index_tbi - stub": { + "content": [ + { + "0": [ + [ + { + "id": "out", + "single_end": false + }, + "out_vcf.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + [ + { + "id": "out", + "single_end": false + }, + "out_vcf.vcf.gz.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + + ], + "3": [ + "versions.yml:md5,241125d00357804552689c37bbabe1f5" + ], + "csi": [ + + ], + "tbi": [ + [ + { + "id": "out", + "single_end": false + }, + "out_vcf.vcf.gz.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "vcf": [ + [ + { + "id": "out", + "single_end": false + }, + "out_vcf.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,241125d00357804552689c37bbabe1f5" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-05T12:14:53.026083914" + }, + "sarscov2 - [vcf, tbi], vcf, tsv, []": { + "content": [ + [ + [ + { + "id": "out", + "single_end": false + }, + "out.vcf:md5,1bcbd0eff25d316ba915d06463aab17b" + ] + ], + [ + "versions.yml:md5,241125d00357804552689c37bbabe1f5" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-05-31T15:15:14.663512924" + }, + "sarscov2 - [vcf, tbi], [], [], [] - stub": { + "content": [ + "out.vcf", + [ + "versions.yml:md5,241125d00357804552689c37bbabe1f5" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-05-31T15:15:19.723448323" + }, + "sarscov2 - [vcf, tbi], [], [], [] - vcf_gz_index": { + "content": [ + [ + [ + { + "id": "out", + "single_end": false + }, + "out_vcf.vcf.gz:md5,8e722884ffb75155212a3fc053918766" + ] + ], + [ + [ + { + "id": "out", + "single_end": false + }, + "out_vcf.vcf.gz.csi" + ] + ], + [ + + ], + [ + "versions.yml:md5,241125d00357804552689c37bbabe1f5" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-05T08:24:36.358469315" + }, + "sarscov2 - [vcf, tbi], [], [], []": { + "content": [ + [ + [ + { + "id": "out", + "single_end": false + }, + "out.vcf:md5,8e722884ffb75155212a3fc053918766" + ] + ], + [ + "versions.yml:md5,241125d00357804552689c37bbabe1f5" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-05-31T15:15:09.588867653" + }, + "sarscov2 - [vcf, tbi], [], [], [] - vcf_gz_index_csi": { + "content": [ + [ + [ + { + "id": "out", + "single_end": false + }, + "out_vcf.vcf.gz:md5,8e722884ffb75155212a3fc053918766" + ] + ], + [ + [ + { + "id": "out", + "single_end": false + }, + "out_vcf.vcf.gz.csi" + ] + ], + [ + + ], + [ + "versions.yml:md5,241125d00357804552689c37bbabe1f5" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-05T12:13:33.834986869" + } +} \ No newline at end of file diff --git a/modules/nf-core/bcftools/view/tests/nextflow.config b/modules/nf-core/bcftools/view/tests/nextflow.config new file mode 100644 index 0000000..932e3ba --- /dev/null +++ b/modules/nf-core/bcftools/view/tests/nextflow.config @@ -0,0 +1,3 @@ +process { + ext.args = '--no-version --output-type v' +} diff --git a/modules/nf-core/bcftools/view/tests/tags.yml b/modules/nf-core/bcftools/view/tests/tags.yml new file mode 100644 index 0000000..43b1f0a --- /dev/null +++ b/modules/nf-core/bcftools/view/tests/tags.yml @@ -0,0 +1,2 @@ +bcftools/view: + - "modules/nf-core/bcftools/view/**" diff --git a/modules/nf-core/bcftools/view/tests/vcf_gz_index.config b/modules/nf-core/bcftools/view/tests/vcf_gz_index.config new file mode 100644 index 0000000..7dd696e --- /dev/null +++ b/modules/nf-core/bcftools/view/tests/vcf_gz_index.config @@ -0,0 +1,4 @@ +process { + ext.prefix = { "${meta.id}_vcf" } + ext.args = "--output-type z --write-index --no-version" +} diff --git a/modules/nf-core/bcftools/view/tests/vcf_gz_index_csi.config b/modules/nf-core/bcftools/view/tests/vcf_gz_index_csi.config new file mode 100644 index 0000000..aebffb6 --- /dev/null +++ b/modules/nf-core/bcftools/view/tests/vcf_gz_index_csi.config @@ -0,0 +1,4 @@ +process { + ext.prefix = { "${meta.id}_vcf" } + ext.args = "--output-type z --write-index=csi --no-version" +} diff --git a/modules/nf-core/bcftools/view/tests/vcf_gz_index_tbi.config b/modules/nf-core/bcftools/view/tests/vcf_gz_index_tbi.config new file mode 100644 index 0000000..b192ae7 --- /dev/null +++ b/modules/nf-core/bcftools/view/tests/vcf_gz_index_tbi.config @@ -0,0 +1,4 @@ +process { + ext.prefix = { "${meta.id}_vcf" } + ext.args = "--output-type z --write-index=tbi --no-version" +} diff --git a/modules/nf-core/bwamem2/index/environment.yml b/modules/nf-core/bwamem2/index/environment.yml new file mode 100644 index 0000000..15cee23 --- /dev/null +++ b/modules/nf-core/bwamem2/index/environment.yml @@ -0,0 +1,5 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::bwa-mem2=2.2.1 diff --git a/modules/nf-core/bwamem2/index/main.nf b/modules/nf-core/bwamem2/index/main.nf new file mode 100644 index 0000000..b768828 --- /dev/null +++ b/modules/nf-core/bwamem2/index/main.nf @@ -0,0 +1,52 @@ +process BWAMEM2_INDEX { + tag "$fasta" + label 'process_single' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/bwa-mem2:2.2.1--he513fc3_0' : + 'biocontainers/bwa-mem2:2.2.1--he513fc3_0' }" + + input: + tuple val(meta), path(fasta) + + output: + tuple val(meta), path("bwamem2"), emit: index + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def prefix = task.ext.prefix ?: "${fasta}" + def args = task.ext.args ?: '' + """ + mkdir bwamem2 + bwa-mem2 \\ + index \\ + $args \\ + $fasta -p bwamem2/${prefix} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + bwamem2: \$(echo \$(bwa-mem2 version 2>&1) | sed 's/.* //') + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${fasta}" + + """ + mkdir bwamem2 + touch bwamem2/${prefix}.0123 + touch bwamem2/${prefix}.ann + touch bwamem2/${prefix}.pac + touch bwamem2/${prefix}.amb + touch bwamem2/${prefix}.bwt.2bit.64 + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + bwamem2: \$(echo \$(bwa-mem2 version 2>&1) | sed 's/.* //') + END_VERSIONS + """ +} diff --git a/modules/nf-core/bwamem2/index/meta.yml b/modules/nf-core/bwamem2/index/meta.yml new file mode 100644 index 0000000..74f54ef --- /dev/null +++ b/modules/nf-core/bwamem2/index/meta.yml @@ -0,0 +1,45 @@ +name: bwamem2_index +description: Create BWA-mem2 index for reference genome +keywords: + - index + - fasta + - genome + - reference +tools: + - bwamem2: + description: | + BWA-mem2 is a software package for mapping DNA sequences against + a large reference genome, such as the human genome. + homepage: https://github.com/bwa-mem2/bwa-mem2 + documentation: https://github.com/bwa-mem2/bwa-mem2#usage + licence: ["MIT"] + identifier: "" +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - fasta: + type: file + description: Input genome fasta file +output: + - index: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bwamem2: + type: file + description: BWA genome index files + pattern: "*.{0123,amb,ann,bwt.2bit.64,pac}" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@maxulysse" +maintainers: + - "@maxulysse" diff --git a/modules/nf-core/bwamem2/index/tests/main.nf.test b/modules/nf-core/bwamem2/index/tests/main.nf.test new file mode 100644 index 0000000..dbf1113 --- /dev/null +++ b/modules/nf-core/bwamem2/index/tests/main.nf.test @@ -0,0 +1,31 @@ +nextflow_process { + + name "Test Process BWAMEM2_INDEX" + tag "modules_nfcore" + tag "modules" + tag "bwamem2" + tag "bwamem2/index" + script "../main.nf" + process "BWAMEM2_INDEX" + + test("BWAMEM2 index") { + + when { + process { + """ + input[0] = [ + [id: 'test'], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } +} diff --git a/modules/nf-core/bwamem2/index/tests/main.nf.test.snap b/modules/nf-core/bwamem2/index/tests/main.nf.test.snap new file mode 100644 index 0000000..69b268e --- /dev/null +++ b/modules/nf-core/bwamem2/index/tests/main.nf.test.snap @@ -0,0 +1,47 @@ +{ + "BWAMEM2 index": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + [ + "genome.fasta.0123:md5,b02870de80106104abcb03cd9463e7d8", + "genome.fasta.amb:md5,3a68b8b2287e07dd3f5f95f4344ba76e", + "genome.fasta.ann:md5,c32e11f6c859f166c7525a9c1d583567", + "genome.fasta.bwt.2bit.64:md5,d097a1b82dee375d41a1ea69895a9216", + "genome.fasta.pac:md5,983e3d2cd6f36e2546e6d25a0da78d66" + ] + ] + ], + "1": [ + "versions.yml:md5,9ffd13d12e7108ed15c58566bc4717d6" + ], + "index": [ + [ + { + "id": "test" + }, + [ + "genome.fasta.0123:md5,b02870de80106104abcb03cd9463e7d8", + "genome.fasta.amb:md5,3a68b8b2287e07dd3f5f95f4344ba76e", + "genome.fasta.ann:md5,c32e11f6c859f166c7525a9c1d583567", + "genome.fasta.bwt.2bit.64:md5,d097a1b82dee375d41a1ea69895a9216", + "genome.fasta.pac:md5,983e3d2cd6f36e2546e6d25a0da78d66" + ] + ] + ], + "versions": [ + "versions.yml:md5,9ffd13d12e7108ed15c58566bc4717d6" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.02.0" + }, + "timestamp": "2024-03-18T12:59:39.132616" + } +} \ No newline at end of file diff --git a/modules/nf-core/bwamem2/index/tests/tags.yml b/modules/nf-core/bwamem2/index/tests/tags.yml new file mode 100644 index 0000000..3953018 --- /dev/null +++ b/modules/nf-core/bwamem2/index/tests/tags.yml @@ -0,0 +1,2 @@ +bwamem2/index: + - modules/nf-core/bwamem2/index/** diff --git a/modules/nf-core/bwamem2/mem/environment.yml b/modules/nf-core/bwamem2/mem/environment.yml new file mode 100644 index 0000000..7e0b5a3 --- /dev/null +++ b/modules/nf-core/bwamem2/mem/environment.yml @@ -0,0 +1,8 @@ +channels: + - conda-forge + - bioconda + +dependencies: + - bwa-mem2=2.2.1 + - htslib=1.19.1 + - samtools=1.19.2 diff --git a/modules/nf-core/bwamem2/mem/main.nf b/modules/nf-core/bwamem2/mem/main.nf new file mode 100644 index 0000000..729428c --- /dev/null +++ b/modules/nf-core/bwamem2/mem/main.nf @@ -0,0 +1,86 @@ +process BWAMEM2_MEM { + tag "$meta.id" + label 'process_high' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/mulled-v2-e5d375990341c5aef3c9aff74f96f66f65375ef6:2d15960ccea84e249a150b7f5d4db3a42fc2d6c3-0' : + 'biocontainers/mulled-v2-e5d375990341c5aef3c9aff74f96f66f65375ef6:2d15960ccea84e249a150b7f5d4db3a42fc2d6c3-0' }" + + input: + tuple val(meta), path(reads) + tuple val(meta2), path(index) + tuple val(meta3), path(fasta) + val sort_bam + + output: + tuple val(meta), path("*.sam") , emit: sam , optional:true + tuple val(meta), path("*.bam") , emit: bam , optional:true + tuple val(meta), path("*.cram") , emit: cram, optional:true + tuple val(meta), path("*.crai") , emit: crai, optional:true + tuple val(meta), path("*.csi") , emit: csi , optional:true + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def args2 = task.ext.args2 ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def samtools_command = sort_bam ? 'sort' : 'view' + + def extension_pattern = /(--output-fmt|-O)+\s+(\S+)/ + def extension_matcher = (args2 =~ extension_pattern) + def extension = extension_matcher.getCount() > 0 ? extension_matcher[0][2].toLowerCase() : "bam" + def reference = fasta && extension=="cram" ? "--reference ${fasta}" : "" + if (!fasta && extension=="cram") error "Fasta reference is required for CRAM output" + + """ + INDEX=`find -L ./ -name "*.amb" | sed 's/\\.amb\$//'` + + bwa-mem2 \\ + mem \\ + $args \\ + -t $task.cpus \\ + \$INDEX \\ + $reads \\ + | samtools $samtools_command $args2 -@ $task.cpus ${reference} -o ${prefix}.${extension} - + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + bwamem2: \$(echo \$(bwa-mem2 version 2>&1) | sed 's/.* //') + samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') + END_VERSIONS + """ + + stub: + + def args = task.ext.args ?: '' + def args2 = task.ext.args2 ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def samtools_command = sort_bam ? 'sort' : 'view' + def extension_pattern = /(--output-fmt|-O)+\s+(\S+)/ + def extension_matcher = (args2 =~ extension_pattern) + def extension = extension_matcher.getCount() > 0 ? extension_matcher[0][2].toLowerCase() : "bam" + def reference = fasta && extension=="cram" ? "--reference ${fasta}" : "" + if (!fasta && extension=="cram") error "Fasta reference is required for CRAM output" + + def create_index = "" + if (extension == "cram") { + create_index = "touch ${prefix}.crai" + } else if (extension == "bam") { + create_index = "touch ${prefix}.csi" + } + + """ + touch ${prefix}.${extension} + ${create_index} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + bwamem2: \$(echo \$(bwa-mem2 version 2>&1) | sed 's/.* //') + samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/bwamem2/mem/meta.yml b/modules/nf-core/bwamem2/mem/meta.yml new file mode 100644 index 0000000..c6333ca --- /dev/null +++ b/modules/nf-core/bwamem2/mem/meta.yml @@ -0,0 +1,115 @@ +name: bwamem2_mem +description: Performs fastq alignment to a fasta reference using BWA +keywords: + - mem + - bwa + - alignment + - map + - fastq + - bam + - sam +tools: + - bwa: + description: | + BWA-mem2 is a software package for mapping DNA sequences against + a large reference genome, such as the human genome. + homepage: https://github.com/bwa-mem2/bwa-mem2 + documentation: http://www.htslib.org/doc/samtools.html + arxiv: arXiv:1303.3997 + licence: ["MIT"] + identifier: "" +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - reads: + type: file + description: | + List of input FastQ files of size 1 and 2 for single-end and paired-end data, + respectively. + - - meta2: + type: map + description: | + Groovy Map containing reference/index information + e.g. [ id:'test' ] + - index: + type: file + description: BWA genome index files + pattern: "Directory containing BWA index *.{0132,amb,ann,bwt.2bit.64,pac}" + - - meta3: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - fasta: + type: file + description: Reference genome in FASTA format + pattern: "*.{fa,fasta,fna}" + - - sort_bam: + type: boolean + description: use samtools sort (true) or samtools view (false) + pattern: "true or false" +output: + - sam: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.sam": + type: file + description: Output SAM file containing read alignments + pattern: "*.{sam}" + - bam: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.bam": + type: file + description: Output BAM file containing read alignments + pattern: "*.{bam}" + - cram: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.cram": + type: file + description: Output CRAM file containing read alignments + pattern: "*.{cram}" + - crai: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.crai": + type: file + description: Index file for CRAM file + pattern: "*.{crai}" + - csi: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.csi": + type: file + description: Index file for BAM file + pattern: "*.{csi}" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@maxulysse" + - "@matthdsm" +maintainers: + - "@maxulysse" + - "@matthdsm" diff --git a/modules/nf-core/bwamem2/mem/tests/main.nf.test b/modules/nf-core/bwamem2/mem/tests/main.nf.test new file mode 100644 index 0000000..9e0ab14 --- /dev/null +++ b/modules/nf-core/bwamem2/mem/tests/main.nf.test @@ -0,0 +1,179 @@ +nextflow_process { + + name "Test Process BWAMEM2_MEM" + script "../main.nf" + process "BWAMEM2_MEM" + + tag "modules" + tag "modules_nfcore" + tag "bwamem2" + tag "bwamem2/mem" + tag "bwamem2/index" + + setup { + run("BWAMEM2_INDEX") { + script "../../index/main.nf" + process { + """ + input[0] = Channel.of([ + [:], // meta map + [file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)] + ]) + """ + } + } + } + + test("sarscov2 - fastq, index, fasta, false") { + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:true ], // meta map + [file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true)] + ]) + input[1] = BWAMEM2_INDEX.out.index + input[2] = Channel.of([[:], [file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)]]) + input[3] = false + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + bam(process.out.bam[0][1]).getHeaderMD5(), + bam(process.out.bam[0][1]).getReadsMD5(), + process.out.versions + ).match() } + ) + } + + } + + test("sarscov2 - fastq, index, fasta, true") { + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:true ], // meta map + [file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true)] + ]) + input[1] = BWAMEM2_INDEX.out.index + input[2] = Channel.of([[:], [file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)]]) + input[3] = true + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + bam(process.out.bam[0][1]).getHeaderMD5(), + bam(process.out.bam[0][1]).getReadsMD5(), + process.out.versions + ).match() } + ) + } + + } + + test("sarscov2 - [fastq1, fastq2], index, fasta, false") { + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) + ] + ]) + input[1] = BWAMEM2_INDEX.out.index + input[2] = Channel.of([[:], [file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)]]) + input[3] = false + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + bam(process.out.bam[0][1]).getHeaderMD5(), + bam(process.out.bam[0][1]).getReadsMD5(), + process.out.versions + ).match() } + ) + } + + } + + test("sarscov2 - [fastq1, fastq2], index, fasta, true") { + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) + ] + ]) + input[1] = BWAMEM2_INDEX.out.index + input[2] = Channel.of([[:], [file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)]]) + input[3] = true + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + bam(process.out.bam[0][1]).getHeaderMD5(), + bam(process.out.bam[0][1]).getReadsMD5(), + process.out.versions + ).match() } + ) + } + + } + + test("sarscov2 - [fastq1, fastq2], index, fasta, true - stub") { + + options "-stub" + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) + ] + ]) + input[1] = BWAMEM2_INDEX.out.index + input[2] = Channel.of([[:], [file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)]]) + input[3] = true + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + +} diff --git a/modules/nf-core/bwamem2/mem/tests/main.nf.test.snap b/modules/nf-core/bwamem2/mem/tests/main.nf.test.snap new file mode 100644 index 0000000..69bc361 --- /dev/null +++ b/modules/nf-core/bwamem2/mem/tests/main.nf.test.snap @@ -0,0 +1,129 @@ +{ + "sarscov2 - [fastq1, fastq2], index, fasta, false": { + "content": [ + "eefa0f44493fd0504e734efd2f1f4a9e", + "57aeef88ed701a8ebc8e2f0a381b2a6", + [ + "versions.yml:md5,1c1a9566f189ec077b5179bbf453c51a" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-02T12:23:37.929675" + }, + "sarscov2 - [fastq1, fastq2], index, fasta, true - stub": { + "content": [ + { + "0": [ + + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + + ], + "3": [ + + ], + "4": [ + [ + { + "id": "test", + "single_end": false + }, + "test.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "5": [ + "versions.yml:md5,1c1a9566f189ec077b5179bbf453c51a" + ], + "bam": [ + [ + { + "id": "test", + "single_end": false + }, + "test.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "crai": [ + + ], + "cram": [ + + ], + "csi": [ + [ + { + "id": "test", + "single_end": false + }, + "test.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "sam": [ + + ], + "versions": [ + "versions.yml:md5,1c1a9566f189ec077b5179bbf453c51a" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-02T12:12:06.693567" + }, + "sarscov2 - [fastq1, fastq2], index, fasta, true": { + "content": [ + "7aba324f82d5b4e926a5dd7b46029cb4", + "af8628d9df18b2d3d4f6fd47ef2bb872", + [ + "versions.yml:md5,1c1a9566f189ec077b5179bbf453c51a" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-02T12:23:53.488374" + }, + "sarscov2 - fastq, index, fasta, false": { + "content": [ + "bc02b41697b3a8f1021b02becec24052", + "798439cbd7fd81cbcc5078022dc5479d", + [ + "versions.yml:md5,1c1a9566f189ec077b5179bbf453c51a" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-02T12:23:05.644682" + }, + "sarscov2 - fastq, index, fasta, true": { + "content": [ + "e41d67320815d29ba5f6e9d1ae21902a", + "94fcf617f5b994584c4e8d4044e16b4f", + [ + "versions.yml:md5,1c1a9566f189ec077b5179bbf453c51a" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-02T12:23:21.837763" + } +} \ No newline at end of file diff --git a/modules/nf-core/bwamem2/mem/tests/tags.yml b/modules/nf-core/bwamem2/mem/tests/tags.yml new file mode 100644 index 0000000..134efb2 --- /dev/null +++ b/modules/nf-core/bwamem2/mem/tests/tags.yml @@ -0,0 +1,2 @@ +bwamem2/mem: + - "modules/nf-core/bwamem2/mem/**" diff --git a/modules/nf-core/delly/call/environment.yml b/modules/nf-core/delly/call/environment.yml new file mode 100644 index 0000000..5598247 --- /dev/null +++ b/modules/nf-core/delly/call/environment.yml @@ -0,0 +1,5 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::delly=1.2.6 diff --git a/modules/nf-core/delly/call/main.nf b/modules/nf-core/delly/call/main.nf new file mode 100644 index 0000000..7c21973 --- /dev/null +++ b/modules/nf-core/delly/call/main.nf @@ -0,0 +1,69 @@ +process DELLY_CALL { + tag "$meta.id" + label 'process_medium' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/delly:1.2.6--hb7e2ac5_1' : + 'biocontainers/delly:1.2.6--hb7e2ac5_1' }" + + input: + tuple val(meta), path(input), path(input_index), path(vcf), path(vcf_index), path(exclude_bed) + tuple val(meta2), path(fasta) + tuple val(meta3), path(fai) + + output: + tuple val(meta), path("*.{bcf,vcf.gz}") , emit: bcf + tuple val(meta), path("*.{csi,tbi}") , emit: csi + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def args2 = task.ext.args2 ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def suffix = task.ext.suffix ?: "bcf" + + def exclude = exclude_bed ? "--exclude ${exclude_bed}" : "" + + def bcf_output = suffix == "bcf" ? "--outfile ${prefix}.bcf" : "" + def vcf_output = suffix == "vcf" ? "| bgzip ${args2} --threads ${task.cpus} --stdout > ${prefix}.vcf.gz && tabix ${prefix}.vcf.gz" : "" + + def genotype = vcf ? "--vcffile ${vcf}" : "" + + """ + delly \\ + call \\ + ${args} \\ + ${bcf_output} \\ + --genome ${fasta} \\ + ${genotype} \\ + ${exclude} \\ + ${input} \\ + ${vcf_output} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + delly: \$( echo \$(delly --version 2>&1) | sed 's/^.*Delly version: v//; s/ using.*\$//') + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + def suffix = task.ext.suffix ?: "bcf" + + def bcf_output = suffix == "bcf" ? "touch ${prefix}.bcf && touch ${prefix}.bcf.csi" : "" + def vcf_output = suffix == "vcf" ? "echo '' | gzip > ${prefix}.vcf.gz && touch ${prefix}.vcf.gz.tbi" : "" + + """ + ${bcf_output} + ${vcf_output} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + delly: \$( echo \$(delly --version 2>&1) | sed 's/^.*Delly version: v//; s/ using.*\$//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/delly/call/meta.yml b/modules/nf-core/delly/call/meta.yml new file mode 100644 index 0000000..ef7c238 --- /dev/null +++ b/modules/nf-core/delly/call/meta.yml @@ -0,0 +1,97 @@ +name: delly_call +description: Call structural variants +keywords: + - genome + - structural + - variants + - bcf +tools: + - delly: + description: Structural variant discovery by integrated paired-end and split-read + analysis + homepage: https://github.com/dellytools/delly + documentation: https://github.com/dellytools/delly/blob/master/README.md + doi: "10.1093/bioinformatics/bts378" + licence: ["BSD-3-Clause"] + identifier: "" +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - input: + type: file + description: BAM/CRAM file from alignment must be sorted, indexed, and duplicate + marked + pattern: "*.{bam,cram}" + - input_index: + type: file + description: Index of the BAM/CRAM file + pattern: "*.{bai,crai}" + - vcf: + type: file + description: A BCF/VCF file to genotype with Delly. If this is supplied, the + variant calling will be skipped + pattern: "*.{vcf.gz,bcf}" + - vcf_index: + type: file + description: The index of the BCF/VCF file + pattern: "*.{tbi,csi}" + - exclude_bed: + type: file + description: An optional bed file containing regions to exclude from the called + VCF + pattern: "*.bed" + - - meta2: + type: map + description: | + Groovy Map containing fasta information + e.g. [ id:'test', single_end:false ] + - fasta: + type: file + description: The reference fasta file + pattern: "*.{fasta,fa}" + - - meta3: + type: map + description: | + Groovy Map containing fasta index information + e.g. [ id:'test', single_end:false ] + - fai: + type: file + description: Index of reference fasta file to identify split-reads + pattern: "*.fai" +output: + - bcf: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.{bcf,vcf.gz}": + type: file + description: Called variants in BCF/VCF format. Specify either "bcf" or "vcf" + in ext.suffix to define the output type + pattern: "*.{bcf,vcf.gz}" + - csi: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.{csi,tbi}": + type: file + description: A generated csi index that matches the bcf output (not generated + for vcf files) + pattern: "*.{bcf.csi}" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@projectoriented" + - "@nvnieuwk" +maintainers: + - "@projectoriented" + - "@nvnieuwk" diff --git a/modules/nf-core/delly/call/tests/main.nf.test b/modules/nf-core/delly/call/tests/main.nf.test new file mode 100644 index 0000000..80cad20 --- /dev/null +++ b/modules/nf-core/delly/call/tests/main.nf.test @@ -0,0 +1,187 @@ +nextflow_process { + + name "Test Process DELLY_CALL" + script "../main.nf" + process "DELLY_CALL" + + tag "modules" + tag "modules_nfcore" + tag "delly" + tag "delly/call" + + test("homo_sapiens - bam, bai, [], [], [], fasta, fai") { + + config "./vcf.config" + + when { + process { + """ + input[0] = [ + [ id:'test'], // meta map + file(params.modules_testdata_base_path + "genomics/homo_sapiens/illumina/bam/test2.paired_end.recalibrated.sorted.bam", checkIfExists:true), + file(params.modules_testdata_base_path + "genomics/homo_sapiens/illumina/bam/test2.paired_end.recalibrated.sorted.bam.bai", checkIfExists:true), + [], + [], + [] + ] + input[1] = [ + [ id:'fasta' ], + file(params.modules_testdata_base_path + "genomics/homo_sapiens/genome/chr21/sequence/genome.fasta", checkIfExists:true) + ] + input[2] = [ + [ id:'fai' ], + file(params.modules_testdata_base_path + "genomics/homo_sapiens/genome/chr21/sequence/genome.fasta.fai", checkIfExists:true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match("bam") } + ) + } + + } + + test("homo_sapiens - cram, crai, [], [], [], fasta, fai") { + + when { + process { + """ + input[0] = [ + [ id:'test'], // meta map + file(params.modules_testdata_base_path + "genomics/homo_sapiens/illumina/cram/test2.paired_end.recalibrated.sorted.cram", checkIfExists:true), + file(params.modules_testdata_base_path + "genomics/homo_sapiens/illumina/cram/test2.paired_end.recalibrated.sorted.cram.crai", checkIfExists:true), + [], + [], + [] + ] + input[1] = [ + [ id:'fasta' ], + file(params.modules_testdata_base_path + "genomics/homo_sapiens/genome/chr21/sequence/genome.fasta", checkIfExists:true) + ] + input[2] = [ + [ id:'fai' ], + file(params.modules_testdata_base_path + "genomics/homo_sapiens/genome/chr21/sequence/genome.fasta.fai", checkIfExists:true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match("cram") } + ) + } + + } + + test("homo_sapiens - cram, crai, [], [], bed, fasta, fai") { + + when { + process { + """ + input[0] = [ + [ id:'test'], // meta map + file(params.modules_testdata_base_path + "genomics/homo_sapiens/illumina/cram/test2.paired_end.recalibrated.sorted.cram", checkIfExists:true), + file(params.modules_testdata_base_path + "genomics/homo_sapiens/illumina/cram/test2.paired_end.recalibrated.sorted.cram.crai", checkIfExists:true), + [], + [], + file(params.modules_testdata_base_path + "genomics/homo_sapiens/genome/chr21/sequence/multi_intervals.bed", checkIfExists:true) + ] + input[1] = [ + [ id:'fasta' ], + file(params.modules_testdata_base_path + "genomics/homo_sapiens/genome/chr21/sequence/genome.fasta", checkIfExists:true) + ] + input[2] = [ + [ id:'fai' ], + file(params.modules_testdata_base_path + "genomics/homo_sapiens/genome/chr21/sequence/genome.fasta.fai", checkIfExists:true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match("bed") } + ) + } + + } + + test("homo_sapiens - cram, crai, vcf, tbi, [], fasta, fai") { + + when { + process { + """ + input[0] = [ + [ id:'test'], // meta map + file(params.modules_testdata_base_path + "genomics/homo_sapiens/illumina/cram/test2.paired_end.recalibrated.sorted.cram", checkIfExists:true), + file(params.modules_testdata_base_path + "genomics/homo_sapiens/illumina/cram/test2.paired_end.recalibrated.sorted.cram.crai", checkIfExists:true), + file(params.modules_testdata_base_path + "genomics/homo_sapiens/illumina/gatk/haplotypecaller_calls/test_haplotcaller.cnn.vcf.gz", checkIfExists:true), + file(params.modules_testdata_base_path + "genomics/homo_sapiens/illumina/gatk/haplotypecaller_calls/test_haplotcaller.cnn.vcf.gz.tbi", checkIfExists:true), + [] + ] + input[1] = [ + [ id:'fasta' ], + file(params.modules_testdata_base_path + "genomics/homo_sapiens/genome/chr21/sequence/genome.fasta", checkIfExists:true) + ] + input[2] = [ + [ id:'fai' ], + file(params.modules_testdata_base_path + "genomics/homo_sapiens/genome/chr21/sequence/genome.fasta.fai", checkIfExists:true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match("genotype") } + ) + } + + } + + test("homo_sapiens - bam, bai, [], [], [], fasta, fai - stub") { + + config "./vcf.config" + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'test'], // meta map + file(params.modules_testdata_base_path + "genomics/homo_sapiens/illumina/bam/test2.paired_end.recalibrated.sorted.bam", checkIfExists:true), + file(params.modules_testdata_base_path + "genomics/homo_sapiens/illumina/bam/test2.paired_end.recalibrated.sorted.bam.bai", checkIfExists:true), + [], + [], + [] + ] + input[1] = [ + [ id:'fasta' ], + file(params.modules_testdata_base_path + "genomics/homo_sapiens/genome/chr21/sequence/genome.fasta", checkIfExists:true) + ] + input[2] = [ + [ id:'fai' ], + file(params.modules_testdata_base_path + "genomics/homo_sapiens/genome/chr21/sequence/genome.fasta.fai", checkIfExists:true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match("stub") } + ) + } + + } + +} diff --git a/modules/nf-core/delly/call/tests/main.nf.test.snap b/modules/nf-core/delly/call/tests/main.nf.test.snap new file mode 100644 index 0000000..c89636d --- /dev/null +++ b/modules/nf-core/delly/call/tests/main.nf.test.snap @@ -0,0 +1,247 @@ +{ + "bed": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.bcf:md5,592702d7765f246cd0f7f32f23b607b9" + ] + ], + "1": [ + [ + { + "id": "test" + }, + "test.bcf.csi:md5,c198abfc14584c5ac69c004057927e0b" + ] + ], + "2": [ + "versions.yml:md5,cf72d737ee881a7cd7eab87abf93b94c" + ], + "bcf": [ + [ + { + "id": "test" + }, + "test.bcf:md5,592702d7765f246cd0f7f32f23b607b9" + ] + ], + "csi": [ + [ + { + "id": "test" + }, + "test.bcf.csi:md5,c198abfc14584c5ac69c004057927e0b" + ] + ], + "versions": [ + "versions.yml:md5,cf72d737ee881a7cd7eab87abf93b94c" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.03.0" + }, + "timestamp": "2024-05-06T11:38:15.181069181" + }, + "cram": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.bcf:md5,592702d7765f246cd0f7f32f23b607b9" + ] + ], + "1": [ + [ + { + "id": "test" + }, + "test.bcf.csi:md5,c198abfc14584c5ac69c004057927e0b" + ] + ], + "2": [ + "versions.yml:md5,cf72d737ee881a7cd7eab87abf93b94c" + ], + "bcf": [ + [ + { + "id": "test" + }, + "test.bcf:md5,592702d7765f246cd0f7f32f23b607b9" + ] + ], + "csi": [ + [ + { + "id": "test" + }, + "test.bcf.csi:md5,c198abfc14584c5ac69c004057927e0b" + ] + ], + "versions": [ + "versions.yml:md5,cf72d737ee881a7cd7eab87abf93b94c" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.03.0" + }, + "timestamp": "2024-05-06T11:38:01.798279112" + }, + "stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + [ + { + "id": "test" + }, + "test.vcf.gz.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,cf72d737ee881a7cd7eab87abf93b94c" + ], + "bcf": [ + [ + { + "id": "test" + }, + "test.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "csi": [ + [ + { + "id": "test" + }, + "test.vcf.gz.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,cf72d737ee881a7cd7eab87abf93b94c" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.03.0" + }, + "timestamp": "2024-05-06T11:38:44.135939928" + }, + "bam": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.vcf.gz:md5,021dae61db384dae43a46386a66d1408" + ] + ], + "1": [ + [ + { + "id": "test" + }, + "test.vcf.gz.tbi:md5,4cb176febbc8c26d717a6c6e67b9c905" + ] + ], + "2": [ + "versions.yml:md5,cf72d737ee881a7cd7eab87abf93b94c" + ], + "bcf": [ + [ + { + "id": "test" + }, + "test.vcf.gz:md5,021dae61db384dae43a46386a66d1408" + ] + ], + "csi": [ + [ + { + "id": "test" + }, + "test.vcf.gz.tbi:md5,4cb176febbc8c26d717a6c6e67b9c905" + ] + ], + "versions": [ + "versions.yml:md5,cf72d737ee881a7cd7eab87abf93b94c" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.03.0" + }, + "timestamp": "2024-05-06T11:37:45.689766253" + }, + "genotype": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.bcf:md5,592702d7765f246cd0f7f32f23b607b9" + ] + ], + "1": [ + [ + { + "id": "test" + }, + "test.bcf.csi:md5,c198abfc14584c5ac69c004057927e0b" + ] + ], + "2": [ + "versions.yml:md5,cf72d737ee881a7cd7eab87abf93b94c" + ], + "bcf": [ + [ + { + "id": "test" + }, + "test.bcf:md5,592702d7765f246cd0f7f32f23b607b9" + ] + ], + "csi": [ + [ + { + "id": "test" + }, + "test.bcf.csi:md5,c198abfc14584c5ac69c004057927e0b" + ] + ], + "versions": [ + "versions.yml:md5,cf72d737ee881a7cd7eab87abf93b94c" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.03.0" + }, + "timestamp": "2024-05-06T11:38:29.129594523" + } +} \ No newline at end of file diff --git a/modules/nf-core/delly/call/tests/tags.yml b/modules/nf-core/delly/call/tests/tags.yml new file mode 100644 index 0000000..bab4f0b --- /dev/null +++ b/modules/nf-core/delly/call/tests/tags.yml @@ -0,0 +1,2 @@ +delly/call: + - "modules/nf-core/delly/call/**" diff --git a/modules/nf-core/delly/call/tests/vcf.config b/modules/nf-core/delly/call/tests/vcf.config new file mode 100644 index 0000000..22e9331 --- /dev/null +++ b/modules/nf-core/delly/call/tests/vcf.config @@ -0,0 +1,5 @@ +process { + withName: "DELLY_CALL" { + ext.suffix = "vcf" + } +} \ No newline at end of file diff --git a/modules/nf-core/fastqc/.conda-lock/linux_amd64-bd-5cb1a2fa2f18c7c2_1.txt b/modules/nf-core/fastqc/.conda-lock/linux_amd64-bd-5cb1a2fa2f18c7c2_1.txt new file mode 100644 index 0000000..7770ccd --- /dev/null +++ b/modules/nf-core/fastqc/.conda-lock/linux_amd64-bd-5cb1a2fa2f18c7c2_1.txt @@ -0,0 +1,822 @@ + +version: 6 +environments: +default: +channels: +- url: https://conda.anaconda.org/conda-forge/ +- url: https://conda.anaconda.org/bioconda/ +- url: https://conda.anaconda.org/bioconda/ +options: +pypi-prerelease-mode: if-necessary-or-explicit +packages: +linux-64: +- conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/alsa-lib-1.2.15.3-hb03c661_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/cairo-1.18.4-he90730b_1.conda +- conda: https://conda.anaconda.org/bioconda/noarch/fastqc-0.12.1-hdfd78af_0.tar.bz2 +- conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 +- conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 +- conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 +- conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.17.1-h27c8c51_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 +- conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/giflib-5.2.2-hd590300_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/graphite2-1.3.14-hecca717_2.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-13.2.1-h6083320_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.3-h33c6efd_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.22.2-ha1258a1_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.18-h0c24ade_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.1.0-hdb68285_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libcups-2.3.3-h7a8fb5f_6.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.25-h17f619e_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.4-hecca717_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype-2.14.3-ha770c72_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype6-2.14.3-h73754d4_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_18.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_18.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.86.4-h6548e54_1.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_18.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h3b78370_2.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.1.2-hb03c661_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.2-hb03c661_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.55-h421ea60_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_18.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.1-h9d88235_1.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.3-h5347b49_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.6.0-hd42ef1d_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.17.0-h8a09558_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.2-h25fd6f3_2.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/openjdk-25.0.2-ha668962_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.1-h35e630c_1.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.47-haa7fec5_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/perl-5.32.1-7_hd590300_perl5.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/pixman-0.46.4-h54a6638_1.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/procps-ng-4.0.6-h18c060e_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-hb9d3cd8_1002.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libice-1.1.2-hb9d3cd8_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libsm-1.2.6-he73a12e_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.13-he1eb515_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.12-hb03c661_1.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.5-hb03c661_1.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxext-1.3.7-hb03c661_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxfixes-6.0.2-hb03c661_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxi-1.8.2-hb9d3cd8_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrandr-1.5.5-hb03c661_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrender-0.9.12-hb9d3cd8_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxt-1.3.1-hb9d3cd8_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxtst-1.2.5-hb9d3cd8_3.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda +packages: +- conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda +build_number: 20 +sha256: 1dd3fffd892081df9726d7eb7e0dea6198962ba775bd88842135a4ddb4deb3c9 +md5: a9f577daf3de00bca7c3c76c0ecbd1de +depends: +- __glibc >=2.17,<3.0.a0 +- libgomp >=7.5.0 +constrains: +- openmp_impl <0.0a0 +license: BSD-3-Clause +license_family: BSD +size: 28948 +timestamp: 1770939786096 +- conda: https://conda.anaconda.org/conda-forge/linux-64/alsa-lib-1.2.15.3-hb03c661_0.conda +sha256: d88aa7ae766cf584e180996e92fef2aa7d8e0a0a5ab1d4d49c32390c1b5fff31 +md5: dcdc58c15961dbf17a0621312b01f5cb +depends: +- __glibc >=2.17,<3.0.a0 +- libgcc >=14 +license: LGPL-2.1-or-later +license_family: GPL +size: 584660 +timestamp: 1768327524772 +- conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda +sha256: 0b75d45f0bba3e95dc693336fa51f40ea28c980131fec438afb7ce6118ed05f6 +md5: d2ffd7602c02f2b316fd921d39876885 +depends: +- __glibc >=2.17,<3.0.a0 +- libgcc >=14 +license: bzip2-1.0.6 +license_family: BSD +size: 260182 +timestamp: 1771350215188 +- conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda +sha256: 67cc7101b36421c5913a1687ef1b99f85b5d6868da3abbf6ec1a4181e79782fc +md5: 4492fd26db29495f0ba23f146cd5638d +depends: +- __unix +license: ISC +size: 147413 +timestamp: 1772006283803 +- conda: https://conda.anaconda.org/conda-forge/linux-64/cairo-1.18.4-he90730b_1.conda +sha256: 06525fa0c4e4f56e771a3b986d0fdf0f0fc5a3270830ee47e127a5105bde1b9a +md5: bb6c4808bfa69d6f7f6b07e5846ced37 +depends: +- __glibc >=2.17,<3.0.a0 +- fontconfig >=2.15.0,<3.0a0 +- fonts-conda-ecosystem +- icu >=78.1,<79.0a0 +- libexpat >=2.7.3,<3.0a0 +- libfreetype >=2.14.1 +- libfreetype6 >=2.14.1 +- libgcc >=14 +- libglib >=2.86.3,<3.0a0 +- libpng >=1.6.53,<1.7.0a0 +- libstdcxx >=14 +- libxcb >=1.17.0,<2.0a0 +- libzlib >=1.3.1,<2.0a0 +- pixman >=0.46.4,<1.0a0 +- xorg-libice >=1.1.2,<2.0a0 +- xorg-libsm >=1.2.6,<2.0a0 +- xorg-libx11 >=1.8.12,<2.0a0 +- xorg-libxext >=1.3.6,<2.0a0 +- xorg-libxrender >=0.9.12,<0.10.0a0 +license: LGPL-2.1-only or MPL-1.1 +size: 989514 +timestamp: 1766415934926 +- conda: https://conda.anaconda.org/bioconda/noarch/fastqc-0.12.1-hdfd78af_0.tar.bz2 +sha256: 7cc26225d590540ae95cd24940ff42f2da7479dd4cd22ae9ab9298665d06790c +md5: c9f6a4b12229f7331f79c9a00dd6e240 +depends: +- font-ttf-dejavu-sans-mono +- fontconfig +- openjdk >=8.0.144 +- perl +license: GPL >=3 +size: 11664291 +timestamp: 1677946722445 +- conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 +sha256: 58d7f40d2940dd0a8aa28651239adbf5613254df0f75789919c4e6762054403b +md5: 0c96522c6bdaed4b1566d11387caaf45 +license: BSD-3-Clause +license_family: BSD +size: 397370 +timestamp: 1566932522327 +- conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 +sha256: c52a29fdac682c20d252facc50f01e7c2e7ceac52aa9817aaf0bb83f7559ec5c +md5: 34893075a5c9e55cdafac56607368fc6 +license: OFL-1.1 +license_family: Other +size: 96530 +timestamp: 1620479909603 +- conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 +sha256: 00925c8c055a2275614b4d983e1df637245e19058d79fc7dd1a93b8d9fb4b139 +md5: 4d59c254e01d9cde7957100457e2d5fb +license: OFL-1.1 +license_family: Other +size: 700814 +timestamp: 1620479612257 +- conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.conda +sha256: 2821ec1dc454bd8b9a31d0ed22a7ce22422c0aef163c59f49dfdf915d0f0ca14 +md5: 49023d73832ef61042f6a237cb2687e7 +license: LicenseRef-Ubuntu-Font-Licence-Version-1.0 +license_family: Other +size: 1620504 +timestamp: 1727511233259 +- conda: https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.17.1-h27c8c51_0.conda +sha256: aa4a44dba97151221100a637c7f4bde619567afade9c0265f8e1c8eed8d7bd8c +md5: 867127763fbe935bab59815b6e0b7b5c +depends: +- __glibc >=2.17,<3.0.a0 +- libexpat >=2.7.4,<3.0a0 +- libfreetype >=2.14.1 +- libfreetype6 >=2.14.1 +- libgcc >=14 +- libuuid >=2.41.3,<3.0a0 +- libzlib >=1.3.1,<2.0a0 +license: MIT +license_family: MIT +size: 270705 +timestamp: 1771382710863 +- conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 +sha256: a997f2f1921bb9c9d76e6fa2f6b408b7fa549edd349a77639c9fe7a23ea93e61 +md5: fee5683a3f04bd15cbd8318b096a27ab +depends: +- fonts-conda-forge +license: BSD-3-Clause +license_family: BSD +size: 3667 +timestamp: 1566974674465 +- conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda +sha256: 54eea8469786bc2291cc40bca5f46438d3e062a399e8f53f013b6a9f50e98333 +md5: a7970cd949a077b7cb9696379d338681 +depends: +- font-ttf-ubuntu +- font-ttf-inconsolata +- font-ttf-dejavu-sans-mono +- font-ttf-source-code-pro +license: BSD-3-Clause +license_family: BSD +size: 4059 +timestamp: 1762351264405 +- conda: https://conda.anaconda.org/conda-forge/linux-64/giflib-5.2.2-hd590300_0.conda +sha256: aac402a8298f0c0cc528664249170372ef6b37ac39fdc92b40601a6aed1e32ff +md5: 3bf7b9fd5a7136126e0234db4b87c8b6 +depends: +- libgcc-ng >=12 +license: MIT +license_family: MIT +size: 77248 +timestamp: 1712692454246 +- conda: https://conda.anaconda.org/conda-forge/linux-64/graphite2-1.3.14-hecca717_2.conda +sha256: 25ba37da5c39697a77fce2c9a15e48cf0a84f1464ad2aafbe53d8357a9f6cc8c +md5: 2cd94587f3a401ae05e03a6caf09539d +depends: +- __glibc >=2.17,<3.0.a0 +- libgcc >=14 +- libstdcxx >=14 +license: LGPL-2.0-or-later +license_family: LGPL +size: 99596 +timestamp: 1755102025473 +- conda: https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-13.2.1-h6083320_0.conda +sha256: 477f2c553f72165020d3c56740ba354be916c2f0b76fd9f535e83d698277d5ec +md5: 14470902326beee192e33719a2e8bb7f +depends: +- __glibc >=2.17,<3.0.a0 +- cairo >=1.18.4,<2.0a0 +- graphite2 >=1.3.14,<2.0a0 +- icu >=78.3,<79.0a0 +- libexpat >=2.7.4,<3.0a0 +- libfreetype >=2.14.2 +- libfreetype6 >=2.14.2 +- libgcc >=14 +- libglib >=2.86.4,<3.0a0 +- libstdcxx >=14 +- libzlib >=1.3.2,<2.0a0 +license: MIT +license_family: MIT +size: 2384060 +timestamp: 1774276284520 +- conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.3-h33c6efd_0.conda +sha256: fbf86c4a59c2ed05bbffb2ba25c7ed94f6185ec30ecb691615d42342baa1a16a +md5: c80d8a3b84358cb967fa81e7075fbc8a +depends: +- __glibc >=2.17,<3.0.a0 +- libgcc >=14 +- libstdcxx >=14 +license: MIT +license_family: MIT +size: 12723451 +timestamp: 1773822285671 +- conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda +sha256: 0960d06048a7185d3542d850986d807c6e37ca2e644342dd0c72feefcf26c2a4 +md5: b38117a3c920364aff79f870c984b4a3 +depends: +- __glibc >=2.17,<3.0.a0 +- libgcc >=13 +license: LGPL-2.1-or-later +size: 134088 +timestamp: 1754905959823 +- conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.22.2-ha1258a1_0.conda +sha256: 3e307628ca3527448dd1cb14ad7bb9d04d1d28c7d4c5f97ba196ae984571dd25 +md5: fb53fb07ce46a575c5d004bbc96032c2 +depends: +- __glibc >=2.17,<3.0.a0 +- keyutils >=1.6.3,<2.0a0 +- libedit >=3.1.20250104,<3.2.0a0 +- libedit >=3.1.20250104,<4.0a0 +- libgcc >=14 +- libstdcxx >=14 +- openssl >=3.5.5,<4.0a0 +license: MIT +license_family: MIT +size: 1386730 +timestamp: 1769769569681 +- conda: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.18-h0c24ade_0.conda +sha256: 836ec4b895352110335b9fdcfa83a8dcdbe6c5fb7c06c4929130600caea91c0a +md5: 6f2e2c8f58160147c4d1c6f4c14cbac4 +depends: +- __glibc >=2.17,<3.0.a0 +- libgcc >=14 +- libjpeg-turbo >=3.1.2,<4.0a0 +- libtiff >=4.7.1,<4.8.0a0 +license: MIT +license_family: MIT +size: 249959 +timestamp: 1768184673131 +- conda: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.1.0-hdb68285_0.conda +sha256: f84cb54782f7e9cea95e810ea8fef186e0652d0fa73d3009914fa2c1262594e1 +md5: a752488c68f2e7c456bcbd8f16eec275 +depends: +- __glibc >=2.17,<3.0.a0 +- libgcc >=14 +- libstdcxx >=14 +license: Apache-2.0 +license_family: Apache +size: 261513 +timestamp: 1773113328888 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libcups-2.3.3-h7a8fb5f_6.conda +sha256: 205c4f19550f3647832ec44e35e6d93c8c206782bdd620c1d7cf66237580ff9c +md5: 49c553b47ff679a6a1e9fc80b9c5a2d4 +depends: +- __glibc >=2.17,<3.0.a0 +- krb5 >=1.22.2,<1.23.0a0 +- libgcc >=14 +- libstdcxx >=14 +- libzlib >=1.3.1,<2.0a0 +license: Apache-2.0 +license_family: Apache +size: 4518030 +timestamp: 1770902209173 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.25-h17f619e_0.conda +sha256: aa8e8c4be9a2e81610ddf574e05b64ee131fab5e0e3693210c9d6d2fba32c680 +md5: 6c77a605a7a689d17d4819c0f8ac9a00 +depends: +- __glibc >=2.17,<3.0.a0 +- libgcc >=14 +license: MIT +license_family: MIT +size: 73490 +timestamp: 1761979956660 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda +sha256: d789471216e7aba3c184cd054ed61ce3f6dac6f87a50ec69291b9297f8c18724 +md5: c277e0a4d549b03ac1e9d6cbbe3d017b +depends: +- ncurses +- __glibc >=2.17,<3.0.a0 +- libgcc >=13 +- ncurses >=6.5,<7.0a0 +license: BSD-2-Clause +license_family: BSD +size: 134676 +timestamp: 1738479519902 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.4-hecca717_0.conda +sha256: d78f1d3bea8c031d2f032b760f36676d87929b18146351c4464c66b0869df3f5 +md5: e7f7ce06ec24cfcfb9e36d28cf82ba57 +depends: +- __glibc >=2.17,<3.0.a0 +- libgcc >=14 +constrains: +- expat 2.7.4.* +license: MIT +license_family: MIT +size: 76798 +timestamp: 1771259418166 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda +sha256: 31f19b6a88ce40ebc0d5a992c131f57d919f73c0b92cd1617a5bec83f6e961e6 +md5: a360c33a5abe61c07959e449fa1453eb +depends: +- __glibc >=2.17,<3.0.a0 +- libgcc >=14 +license: MIT +license_family: MIT +size: 58592 +timestamp: 1769456073053 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype-2.14.3-ha770c72_0.conda +sha256: 38f014a7129e644636e46064ecd6b1945e729c2140e21d75bb476af39e692db2 +md5: e289f3d17880e44b633ba911d57a321b +depends: +- libfreetype6 >=2.14.3 +license: GPL-2.0-only OR FTL +size: 8049 +timestamp: 1774298163029 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype6-2.14.3-h73754d4_0.conda +sha256: 16f020f96da79db1863fcdd8f2b8f4f7d52f177dd4c58601e38e9182e91adf1d +md5: fb16b4b69e3f1dcfe79d80db8fd0c55d +depends: +- __glibc >=2.17,<3.0.a0 +- libgcc >=14 +- libpng >=1.6.55,<1.7.0a0 +- libzlib >=1.3.2,<2.0a0 +constrains: +- freetype >=2.14.3 +license: GPL-2.0-only OR FTL +size: 384575 +timestamp: 1774298162622 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_18.conda +sha256: faf7d2017b4d718951e3a59d081eb09759152f93038479b768e3d612688f83f5 +md5: 0aa00f03f9e39fb9876085dee11a85d4 +depends: +- __glibc >=2.17,<3.0.a0 +- _openmp_mutex >=4.5 +constrains: +- libgcc-ng ==15.2.0=*_18 +- libgomp 15.2.0 he0feb66_18 +license: GPL-3.0-only WITH GCC-exception-3.1 +license_family: GPL +size: 1041788 +timestamp: 1771378212382 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_18.conda +sha256: e318a711400f536c81123e753d4c797a821021fb38970cebfb3f454126016893 +md5: d5e96b1ed75ca01906b3d2469b4ce493 +depends: +- libgcc 15.2.0 he0feb66_18 +license: GPL-3.0-only WITH GCC-exception-3.1 +license_family: GPL +size: 27526 +timestamp: 1771378224552 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.86.4-h6548e54_1.conda +sha256: a27e44168a1240b15659888ce0d9b938ed4bdb49e9ea68a7c1ff27bcea8b55ce +md5: bb26456332b07f68bf3b7622ed71c0da +depends: +- __glibc >=2.17,<3.0.a0 +- libffi >=3.5.2,<3.6.0a0 +- libgcc >=14 +- libiconv >=1.18,<2.0a0 +- libzlib >=1.3.1,<2.0a0 +- pcre2 >=10.47,<10.48.0a0 +constrains: +- glib 2.86.4 *_1 +license: LGPL-2.1-or-later +size: 4398701 +timestamp: 1771863239578 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_18.conda +sha256: 21337ab58e5e0649d869ab168d4e609b033509de22521de1bfed0c031bfc5110 +md5: 239c5e9546c38a1e884d69effcf4c882 +depends: +- __glibc >=2.17,<3.0.a0 +license: GPL-3.0-only WITH GCC-exception-3.1 +license_family: GPL +size: 603262 +timestamp: 1771378117851 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h3b78370_2.conda +sha256: c467851a7312765447155e071752d7bf9bf44d610a5687e32706f480aad2833f +md5: 915f5995e94f60e9a4826e0b0920ee88 +depends: +- __glibc >=2.17,<3.0.a0 +- libgcc >=14 +license: LGPL-2.1-only +size: 790176 +timestamp: 1754908768807 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.1.2-hb03c661_0.conda +sha256: cc9aba923eea0af8e30e0f94f2ad7156e2984d80d1e8e7fe6be5a1f257f0eb32 +md5: 8397539e3a0bbd1695584fb4f927485a +depends: +- __glibc >=2.17,<3.0.a0 +- libgcc >=14 +constrains: +- jpeg <0.0.0a +license: IJG AND BSD-3-Clause AND Zlib +size: 633710 +timestamp: 1762094827865 +- conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.2-hb03c661_0.conda +sha256: 755c55ebab181d678c12e49cced893598f2bab22d582fbbf4d8b83c18be207eb +md5: c7c83eecbb72d88b940c249af56c8b17 +depends: +- __glibc >=2.17,<3.0.a0 +- libgcc >=14 +constrains: +- xz 5.8.2.* +license: 0BSD +size: 113207 +timestamp: 1768752626120 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.55-h421ea60_0.conda +sha256: 36ade759122cdf0f16e2a2562a19746d96cf9c863ffaa812f2f5071ebbe9c03c +md5: 5f13ffc7d30ffec87864e678df9957b4 +depends: +- libgcc >=14 +- __glibc >=2.17,<3.0.a0 +- libzlib >=1.3.1,<2.0a0 +license: zlib-acknowledgement +size: 317669 +timestamp: 1770691470744 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_18.conda +sha256: 78668020064fdaa27e9ab65cd2997e2c837b564ab26ce3bf0e58a2ce1a525c6e +md5: 1b08cd684f34175e4514474793d44bcb +depends: +- __glibc >=2.17,<3.0.a0 +- libgcc 15.2.0 he0feb66_18 +constrains: +- libstdcxx-ng ==15.2.0=*_18 +license: GPL-3.0-only WITH GCC-exception-3.1 +license_family: GPL +size: 5852330 +timestamp: 1771378262446 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.1-h9d88235_1.conda +sha256: e5f8c38625aa6d567809733ae04bb71c161a42e44a9fa8227abe61fa5c60ebe0 +md5: cd5a90476766d53e901500df9215e927 +depends: +- __glibc >=2.17,<3.0.a0 +- lerc >=4.0.0,<5.0a0 +- libdeflate >=1.25,<1.26.0a0 +- libgcc >=14 +- libjpeg-turbo >=3.1.0,<4.0a0 +- liblzma >=5.8.1,<6.0a0 +- libstdcxx >=14 +- libwebp-base >=1.6.0,<2.0a0 +- libzlib >=1.3.1,<2.0a0 +- zstd >=1.5.7,<1.6.0a0 +license: HPND +size: 435273 +timestamp: 1762022005702 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.3-h5347b49_0.conda +sha256: 1a7539cfa7df00714e8943e18de0b06cceef6778e420a5ee3a2a145773758aee +md5: db409b7c1720428638e7c0d509d3e1b5 +depends: +- __glibc >=2.17,<3.0.a0 +- libgcc >=14 +license: BSD-3-Clause +license_family: BSD +size: 40311 +timestamp: 1766271528534 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.6.0-hd42ef1d_0.conda +sha256: 3aed21ab28eddffdaf7f804f49be7a7d701e8f0e46c856d801270b470820a37b +md5: aea31d2e5b1091feca96fcfe945c3cf9 +depends: +- __glibc >=2.17,<3.0.a0 +- libgcc >=14 +constrains: +- libwebp 1.6.0 +license: BSD-3-Clause +license_family: BSD +size: 429011 +timestamp: 1752159441324 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.17.0-h8a09558_0.conda +sha256: 666c0c431b23c6cec6e492840b176dde533d48b7e6fb8883f5071223433776aa +md5: 92ed62436b625154323d40d5f2f11dd7 +depends: +- __glibc >=2.17,<3.0.a0 +- libgcc >=13 +- pthread-stubs +- xorg-libxau >=1.0.11,<2.0a0 +- xorg-libxdmcp +license: MIT +license_family: MIT +size: 395888 +timestamp: 1727278577118 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda +sha256: 6ae68e0b86423ef188196fff6207ed0c8195dd84273cb5623b85aa08033a410c +md5: 5aa797f8787fe7a17d1b0821485b5adc +depends: +- libgcc-ng >=12 +license: LGPL-2.1-or-later +size: 100393 +timestamp: 1702724383534 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.2-h25fd6f3_2.conda +sha256: 55044c403570f0dc26e6364de4dc5368e5f3fc7ff103e867c487e2b5ab2bcda9 +md5: d87ff7921124eccd67248aa483c23fec +depends: +- __glibc >=2.17,<3.0.a0 +constrains: +- zlib 1.3.2 *_2 +license: Zlib +license_family: Other +size: 63629 +timestamp: 1774072609062 +- conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda +sha256: 3fde293232fa3fca98635e1167de6b7c7fda83caf24b9d6c91ec9eefb4f4d586 +md5: 47e340acb35de30501a76c7c799c41d7 +depends: +- __glibc >=2.17,<3.0.a0 +- libgcc >=13 +license: X11 AND BSD-3-Clause +size: 891641 +timestamp: 1738195959188 +- conda: https://conda.anaconda.org/conda-forge/linux-64/openjdk-25.0.2-ha668962_0.conda +sha256: 3825a4c84676a8a5cc23b397a2911e4efa4a805daf2af764153bd904e142ec41 +md5: a41092b0177362dbe5eb2a18501e86c0 +depends: +- xorg-libx11 +- xorg-libxext +- xorg-libxi +- xorg-libxrender +- xorg-libxtst +- libstdcxx >=14 +- libgcc >=14 +- __glibc >=2.17,<3.0.a0 +- libfreetype >=2.14.1 +- libfreetype6 >=2.14.1 +- xorg-libxrender >=0.9.12,<0.10.0a0 +- libjpeg-turbo >=3.1.2,<4.0a0 +- giflib >=5.2.2,<5.3.0a0 +- xorg-libxrandr >=1.5.5,<2.0a0 +- harfbuzz >=12.3.2 +- fontconfig >=2.17.1,<3.0a0 +- fonts-conda-ecosystem +- xorg-libxtst >=1.2.5,<2.0a0 +- xorg-libxi >=1.8.2,<2.0a0 +- lcms2 >=2.18,<3.0a0 +- alsa-lib >=1.2.15.3,<1.3.0a0 +- libpng >=1.6.55,<1.7.0a0 +- xorg-libxt >=1.3.1,<2.0a0 +- libzlib >=1.3.1,<2.0a0 +- xorg-libxext >=1.3.7,<2.0a0 +- xorg-libx11 >=1.8.13,<2.0a0 +- libcups >=2.3.3,<2.4.0a0 +license: GPL-2.0-or-later WITH Classpath-exception-2.0 +license_family: GPL +size: 122465031 +timestamp: 1771443671180 +- conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.1-h35e630c_1.conda +sha256: 44c877f8af015332a5d12f5ff0fb20ca32f896526a7d0cdb30c769df1144fb5c +md5: f61eb8cd60ff9057122a3d338b99c00f +depends: +- __glibc >=2.17,<3.0.a0 +- ca-certificates +- libgcc >=14 +license: Apache-2.0 +license_family: Apache +size: 3164551 +timestamp: 1769555830639 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.47-haa7fec5_0.conda +sha256: 5e6f7d161356fefd981948bea5139c5aa0436767751a6930cb1ca801ebb113ff +md5: 7a3bff861a6583f1889021facefc08b1 +depends: +- __glibc >=2.17,<3.0.a0 +- bzip2 >=1.0.8,<2.0a0 +- libgcc >=14 +- libzlib >=1.3.1,<2.0a0 +license: BSD-3-Clause +license_family: BSD +size: 1222481 +timestamp: 1763655398280 +- conda: https://conda.anaconda.org/conda-forge/linux-64/perl-5.32.1-7_hd590300_perl5.conda +build_number: 7 +sha256: 9ec32b6936b0e37bcb0ed34f22ec3116e75b3c0964f9f50ecea5f58734ed6ce9 +md5: f2cfec9406850991f4e3d960cc9e3321 +depends: +- libgcc-ng >=12 +- libxcrypt >=4.4.36 +license: GPL-1.0-or-later OR Artistic-1.0-Perl +size: 13344463 +timestamp: 1703310653947 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pixman-0.46.4-h54a6638_1.conda +sha256: 43d37bc9ca3b257c5dd7bf76a8426addbdec381f6786ff441dc90b1a49143b6a +md5: c01af13bdc553d1a8fbfff6e8db075f0 +depends: +- libgcc >=14 +- libstdcxx >=14 +- libgcc >=14 +- __glibc >=2.17,<3.0.a0 +license: MIT +license_family: MIT +size: 450960 +timestamp: 1754665235234 +- conda: https://conda.anaconda.org/conda-forge/linux-64/procps-ng-4.0.6-h18c060e_0.conda +sha256: 4ce2e1ee31a6217998f78c31ce7dc0a3e0557d9238b51d49dd20c52d467a126d +md5: f2c23a77b25efcad57d377b34bd84941 +depends: +- __glibc >=2.17,<3.0.a0 +- libgcc >=14 +- ncurses >=6.5,<7.0a0 +license: GPL-2.0-or-later AND LGPL-2.0-or-later +license_family: GPL +size: 593603 +timestamp: 1769710381284 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-hb9d3cd8_1002.conda +sha256: 9c88f8c64590e9567c6c80823f0328e58d3b1efb0e1c539c0315ceca764e0973 +md5: b3c17d95b5a10c6e64a21fa17573e70e +depends: +- __glibc >=2.17,<3.0.a0 +- libgcc >=13 +license: MIT +license_family: MIT +size: 8252 +timestamp: 1726802366959 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libice-1.1.2-hb9d3cd8_0.conda +sha256: c12396aabb21244c212e488bbdc4abcdef0b7404b15761d9329f5a4a39113c4b +md5: fb901ff28063514abb6046c9ec2c4a45 +depends: +- __glibc >=2.17,<3.0.a0 +- libgcc >=13 +license: MIT +license_family: MIT +size: 58628 +timestamp: 1734227592886 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libsm-1.2.6-he73a12e_0.conda +sha256: 277841c43a39f738927145930ff963c5ce4c4dacf66637a3d95d802a64173250 +md5: 1c74ff8c35dcadf952a16f752ca5aa49 +depends: +- __glibc >=2.17,<3.0.a0 +- libgcc >=13 +- libuuid >=2.38.1,<3.0a0 +- xorg-libice >=1.1.2,<2.0a0 +license: MIT +license_family: MIT +size: 27590 +timestamp: 1741896361728 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.13-he1eb515_0.conda +sha256: 516d4060139dbb4de49a4dcdc6317a9353fb39ebd47789c14e6fe52de0deee42 +md5: 861fb6ccbc677bb9a9fb2468430b9c6a +depends: +- __glibc >=2.17,<3.0.a0 +- libgcc >=14 +- libxcb >=1.17.0,<2.0a0 +license: MIT +license_family: MIT +size: 839652 +timestamp: 1770819209719 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.12-hb03c661_1.conda +sha256: 6bc6ab7a90a5d8ac94c7e300cc10beb0500eeba4b99822768ca2f2ef356f731b +md5: b2895afaf55bf96a8c8282a2e47a5de0 +depends: +- __glibc >=2.17,<3.0.a0 +- libgcc >=14 +license: MIT +license_family: MIT +size: 15321 +timestamp: 1762976464266 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.5-hb03c661_1.conda +sha256: 25d255fb2eef929d21ff660a0c687d38a6d2ccfbcbf0cc6aa738b12af6e9d142 +md5: 1dafce8548e38671bea82e3f5c6ce22f +depends: +- __glibc >=2.17,<3.0.a0 +- libgcc >=14 +license: MIT +license_family: MIT +size: 20591 +timestamp: 1762976546182 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxext-1.3.7-hb03c661_0.conda +sha256: 79c60fc6acfd3d713d6340d3b4e296836a0f8c51602327b32794625826bd052f +md5: 34e54f03dfea3e7a2dcf1453a85f1085 +depends: +- __glibc >=2.17,<3.0.a0 +- libgcc >=14 +- xorg-libx11 >=1.8.12,<2.0a0 +license: MIT +license_family: MIT +size: 50326 +timestamp: 1769445253162 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxfixes-6.0.2-hb03c661_0.conda +sha256: 83c4c99d60b8784a611351220452a0a85b080668188dce5dfa394b723d7b64f4 +md5: ba231da7fccf9ea1e768caf5c7099b84 +depends: +- __glibc >=2.17,<3.0.a0 +- libgcc >=14 +- xorg-libx11 >=1.8.12,<2.0a0 +license: MIT +license_family: MIT +size: 20071 +timestamp: 1759282564045 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxi-1.8.2-hb9d3cd8_0.conda +sha256: 1a724b47d98d7880f26da40e45f01728e7638e6ec69f35a3e11f92acd05f9e7a +md5: 17dcc85db3c7886650b8908b183d6876 +depends: +- __glibc >=2.17,<3.0.a0 +- libgcc >=13 +- xorg-libx11 >=1.8.10,<2.0a0 +- xorg-libxext >=1.3.6,<2.0a0 +- xorg-libxfixes >=6.0.1,<7.0a0 +license: MIT +license_family: MIT +size: 47179 +timestamp: 1727799254088 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrandr-1.5.5-hb03c661_0.conda +sha256: 80ed047a5cb30632c3dc5804c7716131d767089f65877813d4ae855ee5c9d343 +md5: e192019153591938acf7322b6459d36e +depends: +- __glibc >=2.17,<3.0.a0 +- libgcc >=14 +- xorg-libx11 >=1.8.12,<2.0a0 +- xorg-libxext >=1.3.6,<2.0a0 +- xorg-libxrender >=0.9.12,<0.10.0a0 +license: MIT +license_family: MIT +size: 30456 +timestamp: 1769445263457 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrender-0.9.12-hb9d3cd8_0.conda +sha256: 044c7b3153c224c6cedd4484dd91b389d2d7fd9c776ad0f4a34f099b3389f4a1 +md5: 96d57aba173e878a2089d5638016dc5e +depends: +- __glibc >=2.17,<3.0.a0 +- libgcc >=13 +- xorg-libx11 >=1.8.10,<2.0a0 +license: MIT +license_family: MIT +size: 33005 +timestamp: 1734229037766 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxt-1.3.1-hb9d3cd8_0.conda +sha256: a8afba4a55b7b530eb5c8ad89737d60d60bc151a03fbef7a2182461256953f0e +md5: 279b0de5f6ba95457190a1c459a64e31 +depends: +- __glibc >=2.17,<3.0.a0 +- libgcc >=13 +- xorg-libice >=1.1.1,<2.0a0 +- xorg-libsm >=1.2.4,<2.0a0 +- xorg-libx11 >=1.8.10,<2.0a0 +license: MIT +license_family: MIT +size: 379686 +timestamp: 1731860547604 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxtst-1.2.5-hb9d3cd8_3.conda +sha256: 752fdaac5d58ed863bbf685bb6f98092fe1a488ea8ebb7ed7b606ccfce08637a +md5: 7bbe9a0cc0df0ac5f5a8ad6d6a11af2f +depends: +- __glibc >=2.17,<3.0.a0 +- libgcc >=13 +- xorg-libx11 >=1.8.10,<2.0a0 +- xorg-libxext >=1.3.6,<2.0a0 +- xorg-libxi >=1.7.10,<2.0a0 +license: MIT +license_family: MIT +size: 32808 +timestamp: 1727964811275 +- conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda +sha256: 68f0206ca6e98fea941e5717cec780ed2873ffabc0e1ed34428c061e2c6268c7 +md5: 4a13eeac0b5c8e5b8ab496e6c4ddd829 +depends: +- __glibc >=2.17,<3.0.a0 +- libzlib >=1.3.1,<2.0a0 +license: BSD-3-Clause +license_family: BSD +size: 601375 +timestamp: 1764777111296 diff --git a/modules/nf-core/fastqc/.conda-lock/linux_arm64-bd-e455e32f745abe68_1.txt b/modules/nf-core/fastqc/.conda-lock/linux_arm64-bd-e455e32f745abe68_1.txt new file mode 100644 index 0000000..cdc434c --- /dev/null +++ b/modules/nf-core/fastqc/.conda-lock/linux_arm64-bd-e455e32f745abe68_1.txt @@ -0,0 +1,769 @@ + +version: 6 +environments: +default: +channels: +- url: https://conda.anaconda.org/conda-forge/ +- url: https://conda.anaconda.org/bioconda/ +- url: https://conda.anaconda.org/bioconda/ +options: +pypi-prerelease-mode: if-necessary-or-explicit +packages: +linux-aarch64: +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-20_gnu.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/alsa-lib-1.2.15.3-he30d5cf_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h4777abc_9.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cairo-1.18.4-h0b6afd8_1.conda +- conda: https://conda.anaconda.org/bioconda/noarch/fastqc-0.12.1-hdfd78af_0.tar.bz2 +- conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 +- conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 +- conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 +- conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/fontconfig-2.17.1-hba86a56_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 +- conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/giflib-5.2.2-h31becfc_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/graphite2-1.3.14-hfae3067_2.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/harfbuzz-13.2.1-h1134a53_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-78.3-hcab7f73_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/keyutils-1.6.3-h86ecc28_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/krb5-1.22.2-hfd895c2_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/lcms2-2.18-h9d5b58d_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/lerc-4.1.0-h52b7260_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcups-2.3.3-h4f2b762_6.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libdeflate-1.25-h1af38f5_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libedit-3.1.20250104-pl5321h976ea20_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.7.4-hfae3067_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.5.2-h376a255_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libfreetype-2.14.3-h8af1aa0_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libfreetype6-2.14.3-hdae7a39_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-15.2.0-h8acb6b2_18.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-15.2.0-he9431aa_18.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libglib-2.86.4-hf53f6bf_1.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-15.2.0-h8acb6b2_18.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libiconv-1.18-h90929bb_2.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libjpeg-turbo-3.1.2-he30d5cf_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblzma-5.8.2-he30d5cf_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libpng-1.6.55-h1abf092_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-15.2.0-hef695bb_18.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libtiff-4.7.1-hdb009f0_1.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.41.3-h1022ec0_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libwebp-base-1.6.0-ha2e29f5_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxcb-1.17.0-h262b8f6_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxcrypt-4.4.36-h31becfc_1.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.2-hdc9db2a_2.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-ha32ae93_3.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openjdk-25.0.2-h488f50d_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.6.1-h546c87b_1.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pcre2-10.47-hf841c20_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/perl-5.32.1-7_h31becfc_perl5.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pixman-0.46.4-h7ac5ae9_1.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/procps-ng-4.0.6-h1779866_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pthread-stubs-0.4-h86ecc28_1002.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libice-1.1.2-h86ecc28_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libsm-1.2.6-h0808dbd_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libx11-1.8.13-h63a1b12_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxau-1.0.12-he30d5cf_1.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxdmcp-1.1.5-he30d5cf_1.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxext-1.3.7-he30d5cf_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxfixes-6.0.2-he30d5cf_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxi-1.8.2-h57736b2_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxrandr-1.5.5-he30d5cf_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxrender-0.9.12-h86ecc28_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxt-1.3.1-h57736b2_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxtst-1.2.5-h57736b2_3.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstd-1.5.7-h85ac4a6_6.conda +packages: +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-20_gnu.conda +build_number: 20 +sha256: a2527b1d81792a0ccd2c05850960df119c2b6d8f5fdec97f2db7d25dc23b1068 +md5: 468fd3bb9e1f671d36c2cbc677e56f1d +depends: +- libgomp >=7.5.0 +constrains: +- openmp_impl <0.0a0 +license: BSD-3-Clause +license_family: BSD +size: 28926 +timestamp: 1770939656741 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/alsa-lib-1.2.15.3-he30d5cf_0.conda +sha256: ea2233e2db9908c2e5f29d3ca420a546b4583253f4f70abb5494cdd676866d42 +md5: 4a98cbc4ade694520227402ff8880630 +depends: +- libgcc >=14 +license: LGPL-2.1-or-later +license_family: GPL +size: 615729 +timestamp: 1768327548407 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h4777abc_9.conda +sha256: b3495077889dde6bb370938e7db82be545c73e8589696ad0843a32221520ad4c +md5: 840d8fc0d7b3209be93080bc20e07f2d +depends: +- libgcc >=14 +license: bzip2-1.0.6 +license_family: BSD +size: 192412 +timestamp: 1771350241232 +- conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda +sha256: 67cc7101b36421c5913a1687ef1b99f85b5d6868da3abbf6ec1a4181e79782fc +md5: 4492fd26db29495f0ba23f146cd5638d +depends: +- __unix +license: ISC +size: 147413 +timestamp: 1772006283803 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cairo-1.18.4-h0b6afd8_1.conda +sha256: 675db823f3d6fb6bf747fab3b0170ba99b269a07cf6df1e49fff2f9972be9cd1 +md5: 043c13ed3a18396994be9b4fab6572ad +depends: +- fontconfig >=2.15.0,<3.0a0 +- fonts-conda-ecosystem +- icu >=78.1,<79.0a0 +- libexpat >=2.7.3,<3.0a0 +- libfreetype >=2.14.1 +- libfreetype6 >=2.14.1 +- libgcc >=14 +- libglib >=2.86.3,<3.0a0 +- libpng >=1.6.53,<1.7.0a0 +- libstdcxx >=14 +- libxcb >=1.17.0,<2.0a0 +- libzlib >=1.3.1,<2.0a0 +- pixman >=0.46.4,<1.0a0 +- xorg-libice >=1.1.2,<2.0a0 +- xorg-libsm >=1.2.6,<2.0a0 +- xorg-libx11 >=1.8.12,<2.0a0 +- xorg-libxext >=1.3.6,<2.0a0 +- xorg-libxrender >=0.9.12,<0.10.0a0 +license: LGPL-2.1-only or MPL-1.1 +size: 927045 +timestamp: 1766416003626 +- conda: https://conda.anaconda.org/bioconda/noarch/fastqc-0.12.1-hdfd78af_0.tar.bz2 +sha256: 7cc26225d590540ae95cd24940ff42f2da7479dd4cd22ae9ab9298665d06790c +md5: c9f6a4b12229f7331f79c9a00dd6e240 +depends: +- font-ttf-dejavu-sans-mono +- fontconfig +- openjdk >=8.0.144 +- perl +license: GPL >=3 +size: 11664291 +timestamp: 1677946722445 +- conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 +sha256: 58d7f40d2940dd0a8aa28651239adbf5613254df0f75789919c4e6762054403b +md5: 0c96522c6bdaed4b1566d11387caaf45 +license: BSD-3-Clause +license_family: BSD +size: 397370 +timestamp: 1566932522327 +- conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 +sha256: c52a29fdac682c20d252facc50f01e7c2e7ceac52aa9817aaf0bb83f7559ec5c +md5: 34893075a5c9e55cdafac56607368fc6 +license: OFL-1.1 +license_family: Other +size: 96530 +timestamp: 1620479909603 +- conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 +sha256: 00925c8c055a2275614b4d983e1df637245e19058d79fc7dd1a93b8d9fb4b139 +md5: 4d59c254e01d9cde7957100457e2d5fb +license: OFL-1.1 +license_family: Other +size: 700814 +timestamp: 1620479612257 +- conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.conda +sha256: 2821ec1dc454bd8b9a31d0ed22a7ce22422c0aef163c59f49dfdf915d0f0ca14 +md5: 49023d73832ef61042f6a237cb2687e7 +license: LicenseRef-Ubuntu-Font-Licence-Version-1.0 +license_family: Other +size: 1620504 +timestamp: 1727511233259 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/fontconfig-2.17.1-hba86a56_0.conda +sha256: 835aff8615dd8d8fff377679710ce81b8a2c47b6404e21a92fb349fda193a15c +md5: 0fed1ff55f4938a65907f3ecf62609db +depends: +- libexpat >=2.7.4,<3.0a0 +- libfreetype >=2.14.1 +- libfreetype6 >=2.14.1 +- libgcc >=14 +- libuuid >=2.41.3,<3.0a0 +- libzlib >=1.3.1,<2.0a0 +license: MIT +license_family: MIT +size: 279044 +timestamp: 1771382728182 +- conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 +sha256: a997f2f1921bb9c9d76e6fa2f6b408b7fa549edd349a77639c9fe7a23ea93e61 +md5: fee5683a3f04bd15cbd8318b096a27ab +depends: +- fonts-conda-forge +license: BSD-3-Clause +license_family: BSD +size: 3667 +timestamp: 1566974674465 +- conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda +sha256: 54eea8469786bc2291cc40bca5f46438d3e062a399e8f53f013b6a9f50e98333 +md5: a7970cd949a077b7cb9696379d338681 +depends: +- font-ttf-ubuntu +- font-ttf-inconsolata +- font-ttf-dejavu-sans-mono +- font-ttf-source-code-pro +license: BSD-3-Clause +license_family: BSD +size: 4059 +timestamp: 1762351264405 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/giflib-5.2.2-h31becfc_0.conda +sha256: a79dc3bd54c4fb1f249942ee2d5b601a76ecf9614774a4cff9af49adfa458db2 +md5: 2f809afaf0ba1ea4135dce158169efac +depends: +- libgcc-ng >=12 +license: MIT +license_family: MIT +size: 82124 +timestamp: 1712692444545 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/graphite2-1.3.14-hfae3067_2.conda +sha256: c9b1781fe329e0b77c5addd741e58600f50bef39321cae75eba72f2f381374b7 +md5: 4aa540e9541cc9d6581ab23ff2043f13 +depends: +- libgcc >=14 +- libstdcxx >=14 +license: LGPL-2.0-or-later +license_family: LGPL +size: 102400 +timestamp: 1755102000043 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/harfbuzz-13.2.1-h1134a53_0.conda +sha256: e22f485fddaaea3ff4b6cae98e0197b9dccd2ed2770337ad6ff38a92afe04e59 +md5: 05d65a2cf410adc331c9ea61f59f1013 +depends: +- cairo >=1.18.4,<2.0a0 +- graphite2 >=1.3.14,<2.0a0 +- icu >=78.3,<79.0a0 +- libexpat >=2.7.4,<3.0a0 +- libfreetype >=2.14.2 +- libfreetype6 >=2.14.2 +- libgcc >=14 +- libglib >=2.86.4,<3.0a0 +- libstdcxx >=14 +- libzlib >=1.3.2,<2.0a0 +license: MIT +license_family: MIT +size: 2345732 +timestamp: 1774281448329 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-78.3-hcab7f73_0.conda +sha256: 49ba6aed2c6b482bb0ba41078057555d29764299bc947b990708617712ef6406 +md5: 546da38c2fa9efacf203e2ad3f987c59 +depends: +- libgcc >=14 +- libstdcxx >=14 +license: MIT +license_family: MIT +size: 12837286 +timestamp: 1773822650615 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/keyutils-1.6.3-h86ecc28_0.conda +sha256: 5ce830ca274b67de11a7075430a72020c1fb7d486161a82839be15c2b84e9988 +md5: e7df0aab10b9cbb73ab2a467ebfaf8c7 +depends: +- libgcc >=13 +license: LGPL-2.1-or-later +size: 129048 +timestamp: 1754906002667 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/krb5-1.22.2-hfd895c2_0.conda +sha256: b53999d888dda53c506b264e8c02b5f5c8e022c781eda0718f007339e6bc90ba +md5: d9ca108bd680ea86a963104b6b3e95ca +depends: +- keyutils >=1.6.3,<2.0a0 +- libedit >=3.1.20250104,<3.2.0a0 +- libedit >=3.1.20250104,<4.0a0 +- libgcc >=14 +- libstdcxx >=14 +- openssl >=3.5.5,<4.0a0 +license: MIT +license_family: MIT +size: 1517436 +timestamp: 1769773395215 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/lcms2-2.18-h9d5b58d_0.conda +sha256: 379ef5e91a587137391a6149755d0e929f1a007d2dcb211318ac670a46c8596f +md5: bb960f01525b5e001608afef9d47b79c +depends: +- libgcc >=14 +- libjpeg-turbo >=3.1.2,<4.0a0 +- libtiff >=4.7.1,<4.8.0a0 +license: MIT +license_family: MIT +size: 293039 +timestamp: 1768184778398 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/lerc-4.1.0-h52b7260_0.conda +sha256: 8957fd460c1c132c8031f65fd5f56ec3807fd71b7cab2c5e2b0937b13404ab36 +md5: d13423b06447113a90b5b1366d4da171 +depends: +- libgcc >=14 +- libstdcxx >=14 +license: Apache-2.0 +license_family: Apache +size: 240444 +timestamp: 1773114901155 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcups-2.3.3-h4f2b762_6.conda +sha256: 41b04f995c9f63af8c4065a35931e46cbc2fdd6b9bf7e4c19f90d53cbb2bc8e5 +md5: 67828c963b17db7dc989fe5d509ef04a +depends: +- krb5 >=1.22.2,<1.23.0a0 +- libgcc >=14 +- libstdcxx >=14 +- libzlib >=1.3.1,<2.0a0 +license: Apache-2.0 +license_family: Apache +size: 4553739 +timestamp: 1770903929794 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libdeflate-1.25-h1af38f5_0.conda +sha256: 48814b73bd462da6eed2e697e30c060ae16af21e9fbed30d64feaf0aad9da392 +md5: a9138815598fe6b91a1d6782ca657b0c +depends: +- libgcc >=14 +license: MIT +license_family: MIT +size: 71117 +timestamp: 1761979776756 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libedit-3.1.20250104-pl5321h976ea20_0.conda +sha256: c0b27546aa3a23d47919226b3a1635fccdb4f24b94e72e206a751b33f46fd8d6 +md5: fb640d776fc92b682a14e001980825b1 +depends: +- ncurses +- libgcc >=13 +- ncurses >=6.5,<7.0a0 +license: BSD-2-Clause +license_family: BSD +size: 148125 +timestamp: 1738479808948 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.7.4-hfae3067_0.conda +sha256: 995ce3ad96d0f4b5ed6296b051a0d7b6377718f325bc0e792fbb96b0e369dad7 +md5: 57f3b3da02a50a1be2a6fe847515417d +depends: +- libgcc >=14 +constrains: +- expat 2.7.4.* +license: MIT +license_family: MIT +size: 76564 +timestamp: 1771259530958 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.5.2-h376a255_0.conda +sha256: 3df4c539449aabc3443bbe8c492c01d401eea894603087fca2917aa4e1c2dea9 +md5: 2f364feefb6a7c00423e80dcb12db62a +depends: +- libgcc >=14 +license: MIT +license_family: MIT +size: 55952 +timestamp: 1769456078358 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libfreetype-2.14.3-h8af1aa0_0.conda +sha256: 752e4f66283d7deb4c6fd47d88df644d8daa2aaa825a54f3bf350a625190192a +md5: a229e22d4d8814a07702b0919d8e6701 +depends: +- libfreetype6 >=2.14.3 +license: GPL-2.0-only OR FTL +size: 8125 +timestamp: 1774301094057 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libfreetype6-2.14.3-hdae7a39_0.conda +sha256: 8e6b27fe4eec4c2fa7b7769a21973734c8dba1de80086fb0213e58375ac09f4c +md5: b99ed99e42dafb27889483b3098cace7 +depends: +- libgcc >=14 +- libpng >=1.6.55,<1.7.0a0 +- libzlib >=1.3.2,<2.0a0 +constrains: +- freetype >=2.14.3 +license: GPL-2.0-only OR FTL +size: 422941 +timestamp: 1774301093473 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-15.2.0-h8acb6b2_18.conda +sha256: 43df385bedc1cab11993c4369e1f3b04b4ca5d0ea16cba6a0e7f18dbc129fcc9 +md5: 552567ea2b61e3a3035759b2fdb3f9a6 +depends: +- _openmp_mutex >=4.5 +constrains: +- libgcc-ng ==15.2.0=*_18 +- libgomp 15.2.0 h8acb6b2_18 +license: GPL-3.0-only WITH GCC-exception-3.1 +license_family: GPL +size: 622900 +timestamp: 1771378128706 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-15.2.0-he9431aa_18.conda +sha256: 83bb0415f59634dccfa8335d4163d1f6db00a27b36666736f9842b650b92cf2f +md5: 4feebd0fbf61075a1a9c2e9b3936c257 +depends: +- libgcc 15.2.0 h8acb6b2_18 +license: GPL-3.0-only WITH GCC-exception-3.1 +license_family: GPL +size: 27568 +timestamp: 1771378136019 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libglib-2.86.4-hf53f6bf_1.conda +sha256: afc503dbd04a5bf2709aa9d8318a03a8c4edb389f661ff280c3494bfef4341ec +md5: 4ac4372fc4d7f20630a91314cdac8afd +depends: +- libffi >=3.5.2,<3.6.0a0 +- libgcc >=14 +- libiconv >=1.18,<2.0a0 +- libzlib >=1.3.1,<2.0a0 +- pcre2 >=10.47,<10.48.0a0 +constrains: +- glib 2.86.4 *_1 +license: LGPL-2.1-or-later +size: 4512186 +timestamp: 1771863220969 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-15.2.0-h8acb6b2_18.conda +sha256: fc716f11a6a8525e27a5d332ef6a689210b0d2a4dd1133edc0f530659aa9faa6 +md5: 4faa39bf919939602e594253bd673958 +license: GPL-3.0-only WITH GCC-exception-3.1 +license_family: GPL +size: 588060 +timestamp: 1771378040807 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libiconv-1.18-h90929bb_2.conda +sha256: 1473451cd282b48d24515795a595801c9b65b567fe399d7e12d50b2d6cdb04d9 +md5: 5a86bf847b9b926f3a4f203339748d78 +depends: +- libgcc >=14 +license: LGPL-2.1-only +size: 791226 +timestamp: 1754910975665 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libjpeg-turbo-3.1.2-he30d5cf_0.conda +sha256: 84064c7c53a64291a585d7215fe95ec42df74203a5bf7615d33d49a3b0f08bb6 +md5: 5109d7f837a3dfdf5c60f60e311b041f +depends: +- libgcc >=14 +constrains: +- jpeg <0.0.0a +license: IJG AND BSD-3-Clause AND Zlib +size: 691818 +timestamp: 1762094728337 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblzma-5.8.2-he30d5cf_0.conda +sha256: 843c46e20519651a3e357a8928352b16c5b94f4cd3d5481acc48be2e93e8f6a3 +md5: 96944e3c92386a12755b94619bae0b35 +depends: +- libgcc >=14 +constrains: +- xz 5.8.2.* +license: 0BSD +size: 125916 +timestamp: 1768754941722 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libpng-1.6.55-h1abf092_0.conda +sha256: c7378c6b79de4d571d00ad1caf0a4c19d43c9c94077a761abb6ead44d891f907 +md5: be4088903b94ea297975689b3c3aeb27 +depends: +- libgcc >=14 +- libzlib >=1.3.1,<2.0a0 +license: zlib-acknowledgement +size: 340156 +timestamp: 1770691477245 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-15.2.0-hef695bb_18.conda +sha256: 31fdb9ffafad106a213192d8319b9f810e05abca9c5436b60e507afb35a6bc40 +md5: f56573d05e3b735cb03efeb64a15f388 +depends: +- libgcc 15.2.0 h8acb6b2_18 +constrains: +- libstdcxx-ng ==15.2.0=*_18 +license: GPL-3.0-only WITH GCC-exception-3.1 +license_family: GPL +size: 5541411 +timestamp: 1771378162499 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libtiff-4.7.1-hdb009f0_1.conda +sha256: 7ff79470db39e803e21b8185bc8f19c460666d5557b1378d1b1e857d929c6b39 +md5: 8c6fd84f9c87ac00636007c6131e457d +depends: +- lerc >=4.0.0,<5.0a0 +- libdeflate >=1.25,<1.26.0a0 +- libgcc >=14 +- libjpeg-turbo >=3.1.0,<4.0a0 +- liblzma >=5.8.1,<6.0a0 +- libstdcxx >=14 +- libwebp-base >=1.6.0,<2.0a0 +- libzlib >=1.3.1,<2.0a0 +- zstd >=1.5.7,<1.6.0a0 +license: HPND +size: 488407 +timestamp: 1762022048105 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.41.3-h1022ec0_0.conda +sha256: c37a8e89b700646f3252608f8368e7eb8e2a44886b92776e57ad7601fc402a11 +md5: cf2861212053d05f27ec49c3784ff8bb +depends: +- libgcc >=14 +license: BSD-3-Clause +license_family: BSD +size: 43453 +timestamp: 1766271546875 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libwebp-base-1.6.0-ha2e29f5_0.conda +sha256: b03700a1f741554e8e5712f9b06dd67e76f5301292958cd3cb1ac8c6fdd9ed25 +md5: 24e92d0942c799db387f5c9d7b81f1af +depends: +- libgcc >=14 +constrains: +- libwebp 1.6.0 +license: BSD-3-Clause +license_family: BSD +size: 359496 +timestamp: 1752160685488 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxcb-1.17.0-h262b8f6_0.conda +sha256: 461cab3d5650ac6db73a367de5c8eca50363966e862dcf60181d693236b1ae7b +md5: cd14ee5cca2464a425b1dbfc24d90db2 +depends: +- libgcc >=13 +- pthread-stubs +- xorg-libxau >=1.0.11,<2.0a0 +- xorg-libxdmcp +license: MIT +license_family: MIT +size: 397493 +timestamp: 1727280745441 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxcrypt-4.4.36-h31becfc_1.conda +sha256: 6b46c397644091b8a26a3048636d10b989b1bf266d4be5e9474bf763f828f41f +md5: b4df5d7d4b63579d081fd3a4cf99740e +depends: +- libgcc-ng >=12 +license: LGPL-2.1-or-later +size: 114269 +timestamp: 1702724369203 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.2-hdc9db2a_2.conda +sha256: eb111e32e5a7313a5bf799c7fb2419051fa2fe7eff74769fac8d5a448b309f7f +md5: 502006882cf5461adced436e410046d1 +constrains: +- zlib 1.3.2 *_2 +license: Zlib +license_family: Other +size: 69833 +timestamp: 1774072605429 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-ha32ae93_3.conda +sha256: 91cfb655a68b0353b2833521dc919188db3d8a7f4c64bea2c6a7557b24747468 +md5: 182afabe009dc78d8b73100255ee6868 +depends: +- libgcc >=13 +license: X11 AND BSD-3-Clause +size: 926034 +timestamp: 1738196018799 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openjdk-25.0.2-h488f50d_0.conda +sha256: 6fd2c872b275fa5d42a61a4b6dc28a819cde29f9048adb547363597432e0720e +md5: 27fdd5d67e235c20d23b2d66406497d3 +depends: +- xorg-libx11 +- xorg-libxext +- xorg-libxi +- xorg-libxrender +- xorg-libxtst +- libstdcxx >=14 +- libgcc >=14 +- libzlib >=1.3.1,<2.0a0 +- xorg-libxtst >=1.2.5,<2.0a0 +- libpng >=1.6.55,<1.7.0a0 +- alsa-lib >=1.2.15.3,<1.3.0a0 +- xorg-libx11 >=1.8.13,<2.0a0 +- xorg-libxi >=1.8.2,<2.0a0 +- xorg-libxrandr >=1.5.5,<2.0a0 +- lcms2 >=2.18,<3.0a0 +- xorg-libxrender >=0.9.12,<0.10.0a0 +- libcups >=2.3.3,<2.4.0a0 +- libfreetype >=2.14.1 +- libfreetype6 >=2.14.1 +- harfbuzz >=12.3.2 +- xorg-libxext >=1.3.7,<2.0a0 +- giflib >=5.2.2,<5.3.0a0 +- xorg-libxt >=1.3.1,<2.0a0 +- libjpeg-turbo >=3.1.2,<4.0a0 +- fontconfig >=2.17.1,<3.0a0 +- fonts-conda-ecosystem +license: GPL-2.0-or-later WITH Classpath-exception-2.0 +license_family: GPL +size: 106988620 +timestamp: 1771443741031 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.6.1-h546c87b_1.conda +sha256: 7f8048c0e75b2620254218d72b4ae7f14136f1981c5eb555ef61645a9344505f +md5: 25f5885f11e8b1f075bccf4a2da91c60 +depends: +- ca-certificates +- libgcc >=14 +license: Apache-2.0 +license_family: Apache +size: 3692030 +timestamp: 1769557678657 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pcre2-10.47-hf841c20_0.conda +sha256: 04df2cee95feba440387f33f878e9f655521e69f4be33a0cd637f07d3d81f0f9 +md5: 1a30c42e32ca0ea216bd0bfe6f842f0b +depends: +- bzip2 >=1.0.8,<2.0a0 +- libgcc >=14 +- libzlib >=1.3.1,<2.0a0 +license: BSD-3-Clause +license_family: BSD +size: 1166552 +timestamp: 1763655534263 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/perl-5.32.1-7_h31becfc_perl5.conda +build_number: 7 +sha256: d78296134263b5bf476cad838ded65451e7162db756f9997c5d06b08122572ed +md5: 17d019cb2a6c72073c344e98e40dfd61 +depends: +- libgcc-ng >=12 +- libxcrypt >=4.4.36 +license: GPL-1.0-or-later OR Artistic-1.0-Perl +size: 13338804 +timestamp: 1703310557094 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pixman-0.46.4-h7ac5ae9_1.conda +sha256: e6b0846a998f2263629cfeac7bca73565c35af13251969f45d385db537a514e4 +md5: 1587081d537bd4ae77d1c0635d465ba5 +depends: +- libgcc >=14 +- libstdcxx >=14 +- libgcc >=14 +license: MIT +license_family: MIT +size: 357913 +timestamp: 1754665583353 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/procps-ng-4.0.6-h1779866_0.conda +sha256: e9cbcbc94e151ada3d6dc365380aaaf591f65012c16d9a2abaea4b9b90adc402 +md5: ab7288cc39545556d1bc5e71ab2df9a9 +depends: +- libgcc >=14 +- ncurses >=6.5,<7.0a0 +license: GPL-2.0-or-later AND LGPL-2.0-or-later +license_family: GPL +size: 636733 +timestamp: 1769712412683 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pthread-stubs-0.4-h86ecc28_1002.conda +sha256: 977dfb0cb3935d748521dd80262fe7169ab82920afd38ed14b7fee2ea5ec01ba +md5: bb5a90c93e3bac3d5690acf76b4a6386 +depends: +- libgcc >=13 +license: MIT +license_family: MIT +size: 8342 +timestamp: 1726803319942 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libice-1.1.2-h86ecc28_0.conda +sha256: a2ba1864403c7eb4194dacbfe2777acf3d596feae43aada8d1b478617ce45031 +md5: c8d8ec3e00cd0fd8a231789b91a7c5b7 +depends: +- libgcc >=13 +license: MIT +license_family: MIT +size: 60433 +timestamp: 1734229908988 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libsm-1.2.6-h0808dbd_0.conda +sha256: b86a819cd16f90c01d9d81892155126d01555a20dabd5f3091da59d6309afd0a +md5: 2d1409c50882819cb1af2de82e2b7208 +depends: +- libgcc >=13 +- libuuid >=2.38.1,<3.0a0 +- xorg-libice >=1.1.2,<2.0a0 +license: MIT +license_family: MIT +size: 28701 +timestamp: 1741897678254 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libx11-1.8.13-h63a1b12_0.conda +sha256: cf886160e2ff580d77f7eb8ec1a77c41c2c5b05343e329bc35f0ddf40b8d92ab +md5: 22dd10425ef181e80e130db50675d615 +depends: +- libgcc >=14 +- libxcb >=1.17.0,<2.0a0 +license: MIT +license_family: MIT +size: 869058 +timestamp: 1770819244991 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxau-1.0.12-he30d5cf_1.conda +sha256: e9f6e931feeb2f40e1fdbafe41d3b665f1ab6cb39c5880a1fcf9f79a3f3c84a5 +md5: 1c246e1105000c3660558459e2fd6d43 +depends: +- libgcc >=14 +license: MIT +license_family: MIT +size: 16317 +timestamp: 1762977521691 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxdmcp-1.1.5-he30d5cf_1.conda +sha256: 128d72f36bcc8d2b4cdbec07507542e437c7d67f677b7d77b71ed9eeac7d6df1 +md5: bff06dcde4a707339d66d45d96ceb2e2 +depends: +- libgcc >=14 +license: MIT +license_family: MIT +size: 21039 +timestamp: 1762979038025 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxext-1.3.7-he30d5cf_0.conda +sha256: db2188bc0d844d4e9747bac7f6c1d067e390bd769c5ad897c93f1df759dc5dba +md5: fb42b683034619915863d68dd9df03a3 +depends: +- libgcc >=14 +- xorg-libx11 >=1.8.12,<2.0a0 +license: MIT +license_family: MIT +size: 52409 +timestamp: 1769446753771 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxfixes-6.0.2-he30d5cf_0.conda +sha256: 8cb9c88e25c57e47419e98f04f9ef3154ad96b9f858c88c570c7b91216a64d0e +md5: e8b4056544341daf1d415eaeae7a040c +depends: +- libgcc >=14 +- xorg-libx11 >=1.8.12,<2.0a0 +license: MIT +license_family: MIT +size: 20704 +timestamp: 1759284028146 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxi-1.8.2-h57736b2_0.conda +sha256: 7b587407ecb9ccd2bbaf0fb94c5dbdde4d015346df063e9502dc0ce2b682fb5e +md5: eeee3bdb31c6acde2b81ad1b8c287087 +depends: +- libgcc >=13 +- xorg-libx11 >=1.8.9,<2.0a0 +- xorg-libxext >=1.3.6,<2.0a0 +- xorg-libxfixes >=6.0.1,<7.0a0 +license: MIT +license_family: MIT +size: 48197 +timestamp: 1727801059062 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxrandr-1.5.5-he30d5cf_0.conda +sha256: 9f5196665a8d72f4f119c40dcc4bafeb0b540b102cc7b8b299c2abf599e7919f +md5: 1f64c613f0b8d67e9fb0e165d898fb6b +depends: +- libgcc >=14 +- xorg-libx11 >=1.8.12,<2.0a0 +- xorg-libxext >=1.3.6,<2.0a0 +- xorg-libxrender >=0.9.12,<0.10.0a0 +license: MIT +license_family: MIT +size: 31122 +timestamp: 1769445286951 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxrender-0.9.12-h86ecc28_0.conda +sha256: ffd77ee860c9635a28cfda46163dcfe9224dc6248c62404c544ae6b564a0be1f +md5: ae2c2dd0e2d38d249887727db2af960e +depends: +- libgcc >=13 +- xorg-libx11 >=1.8.10,<2.0a0 +license: MIT +license_family: MIT +size: 33649 +timestamp: 1734229123157 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxt-1.3.1-h57736b2_0.conda +sha256: 7c109792b60720809a580612aba7f8eb2a0bd425b9fc078748a9d6ffc97cbfa8 +md5: a9e4852c8e0b68ee783e7240030b696f +depends: +- libgcc >=13 +- xorg-libice >=1.1.1,<2.0a0 +- xorg-libsm >=1.2.4,<2.0a0 +- xorg-libx11 >=1.8.9,<2.0a0 +license: MIT +license_family: MIT +size: 384752 +timestamp: 1731860572314 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxtst-1.2.5-h57736b2_3.conda +sha256: 6eaffce5a34fc0a16a21ddeaefb597e792a263b1b0c387c1ce46b0a967d558e1 +md5: c05698071b5c8e0da82a282085845860 +depends: +- libgcc >=13 +- xorg-libx11 >=1.8.9,<2.0a0 +- xorg-libxext >=1.3.6,<2.0a0 +- xorg-libxi >=1.7.10,<2.0a0 +license: MIT +license_family: MIT +size: 33786 +timestamp: 1727964907993 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstd-1.5.7-h85ac4a6_6.conda +sha256: 569990cf12e46f9df540275146da567d9c618c1e9c7a0bc9d9cfefadaed20b75 +md5: c3655f82dcea2aa179b291e7099c1fcc +depends: +- libzlib >=1.3.1,<2.0a0 +license: BSD-3-Clause +license_family: BSD +size: 614429 +timestamp: 1764777145593 diff --git a/modules/nf-core/fastqc/environment.yml b/modules/nf-core/fastqc/environment.yml index 691d4c7..f9f54ee 100644 --- a/modules/nf-core/fastqc/environment.yml +++ b/modules/nf-core/fastqc/environment.yml @@ -1,3 +1,5 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json channels: - conda-forge - bioconda diff --git a/modules/nf-core/fastqc/main.nf b/modules/nf-core/fastqc/main.nf index d8989f4..1085126 100644 --- a/modules/nf-core/fastqc/main.nf +++ b/modules/nf-core/fastqc/main.nf @@ -1,19 +1,19 @@ process FASTQC { - tag "$meta.id" - label 'process_medium' + tag "${meta.id}" + label 'process_low' conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/fastqc:0.12.1--hdfd78af_0' : - 'biocontainers/fastqc:0.12.1--hdfd78af_0' }" + container "${workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container + ? 'https://depot.galaxyproject.org/singularity/fastqc:0.12.1--hdfd78af_0' + : 'quay.io/biocontainers/fastqc:0.12.1--hdfd78af_0'}" input: - tuple val(meta), path(reads) + tuple val(meta), path(reads, stageAs: '?/*') output: tuple val(meta), path("*.html"), emit: html - tuple val(meta), path("*.zip") , emit: zip - path "versions.yml" , emit: versions + tuple val(meta), path("*.zip"), emit: zip + tuple val("${task.process}"), val('fastqc'), eval('fastqc --version | sed "/FastQC v/!d; s/.*v//"'), emit: versions_fastqc, topic: versions when: task.ext.when == null || task.ext.when @@ -22,32 +22,30 @@ process FASTQC { def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" // Make list of old name and new name pairs to use for renaming in the bash while loop - def old_new_pairs = reads instanceof Path || reads.size() == 1 ? [[ reads, "${prefix}.${reads.extension}" ]] : reads.withIndex().collect { entry, index -> [ entry, "${prefix}_${index + 1}.${entry.extension}" ] } + def old_new_pairs = reads instanceof Path || reads.size() == 1 ? [[reads, "${prefix}.${reads.extension}"]] : reads.withIndex().collect { entry, index -> [entry, "${prefix}_${index + 1}.${entry.extension}"] } def rename_to = old_new_pairs*.join(' ').join(' ') - def renamed_files = old_new_pairs.collect{ old_name, new_name -> new_name }.join(' ') + def renamed_files = old_new_pairs.collect { _old_name, new_name -> new_name }.join(' ') // The total amount of allocated RAM by FastQC is equal to the number of threads defined (--threads) time the amount of RAM defined (--memory) // https://github.com/s-andrews/FastQC/blob/1faeea0412093224d7f6a07f777fad60a5650795/fastqc#L211-L222 - // Dividing the task.memory by task.cpu allows to stick to requested amount of RAM in the label - def memory_in_mb = MemoryUnit.of("${task.memory}").toUnit('MB') / task.cpus + // Dividing the task.memory by task.cpus allows to stick to requested amount of RAM in the label + def memory_in_mb = task.memory + ? (task.memory.toUnit('MB') / task.cpus).intValue() + : null // FastQC memory value allowed range (100 - 10000) def fastqc_memory = memory_in_mb > 10000 ? 10000 : (memory_in_mb < 100 ? 100 : memory_in_mb) + def fastqc_memory_arg = fastqc_memory ? "--memory ${fastqc_memory}" : '' """ - printf "%s %s\\n" $rename_to | while read old_name new_name; do + printf "%s %s\\n" ${rename_to} | while read old_name new_name; do [ -f "\${new_name}" ] || ln -s \$old_name \$new_name done fastqc \\ - $args \\ - --threads $task.cpus \\ - --memory $fastqc_memory \\ - $renamed_files - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - fastqc: \$( fastqc --version | sed '/FastQC v/!d; s/.*v//' ) - END_VERSIONS + ${args} \\ + --threads ${task.cpus} \\ + ${fastqc_memory_arg} \\ + ${renamed_files} """ stub: @@ -55,10 +53,5 @@ process FASTQC { """ touch ${prefix}.html touch ${prefix}.zip - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - fastqc: \$( fastqc --version | sed '/FastQC v/!d; s/.*v//' ) - END_VERSIONS """ } diff --git a/modules/nf-core/fastqc/meta.yml b/modules/nf-core/fastqc/meta.yml index 4827da7..2f6cfef 100644 --- a/modules/nf-core/fastqc/meta.yml +++ b/modules/nf-core/fastqc/meta.yml @@ -11,6 +11,7 @@ tools: FastQC gives general quality metrics about your reads. It provides information about the quality score distribution across your reads, the per base sequence content (%A/C/G/T). + You get information about adapter contamination and other overrepresented sequences. homepage: https://www.bioinformatics.babraham.ac.uk/projects/fastqc/ @@ -28,9 +29,10 @@ input: description: | List of input FastQ files of size 1 and 2 for single-end and paired-end data, respectively. + ontologies: [] output: - - html: - - meta: + html: + - - meta: type: map description: | Groovy Map containing sample information @@ -39,8 +41,9 @@ output: type: file description: FastQC report pattern: "*_{fastqc.html}" - - zip: - - meta: + ontologies: [] + zip: + - - meta: type: map description: | Groovy Map containing sample information @@ -49,11 +52,29 @@ output: type: file description: FastQC report archive pattern: "*_{fastqc.zip}" - - versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" + ontologies: [] + versions_fastqc: + - - ${task.process}: + type: string + description: The process the versions were collected from + - fastqc: + type: string + description: The tool name + - fastqc --version | sed "/FastQC v/!d; s/.*v//": + type: eval + description: The expression to obtain the version of the tool + +topics: + versions: + - - ${task.process}: + type: string + description: The process the versions were collected from + - fastqc: + type: string + description: The tool name + - fastqc --version | sed "/FastQC v/!d; s/.*v//": + type: eval + description: The expression to obtain the version of the tool authors: - "@drpatelh" - "@grst" @@ -64,3 +85,27 @@ maintainers: - "@grst" - "@ewels" - "@FelixKrueger" +containers: + docker: + linux/arm64: + name: community.wave.seqera.io/library/fastqc:0.12.1--e455e32f745abe68 + build_id: bd-e455e32f745abe68_1 + scan_id: sc-f102f736465af88c_1 + linux/amd64: + name: community.wave.seqera.io/library/fastqc:0.12.1--5cb1a2fa2f18c7c2 + build_id: bd-5cb1a2fa2f18c7c2_1 + scan_id: sc-0c0466326b6b77d2_1 + singularity: + linux/amd64: + name: oras://community.wave.seqera.io/library/fastqc:0.12.1--5c4bd442468d75dd + build_id: bd-5c4bd442468d75dd_1 + https: https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/f2/f20b021476d1d87658820f971ebecc1e8cdbde0f338eb0d9cea2b0a8fc54a54b/data + linux/arm64: + name: oras://community.wave.seqera.io/library/fastqc:0.12.1--127a87fc06499035 + build_id: bd-127a87fc06499035_1 + https: https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/46/46daf2dad0169afd2ae047c3e50ed3776259f664bf07e5e06b045dc23449e994/data + conda: + linux/amd64: + lock_file: modules/nf-core/fastqc/.conda-lock/linux_amd64-bd-5cb1a2fa2f18c7c2_1.txt + linux/arm64: + lock_file: modules/nf-core/fastqc/.conda-lock/linux_arm64-bd-e455e32f745abe68_1.txt diff --git a/modules/nf-core/fastqc/tests/main.nf.test b/modules/nf-core/fastqc/tests/main.nf.test index e9d79a0..66c44da 100644 --- a/modules/nf-core/fastqc/tests/main.nf.test +++ b/modules/nf-core/fastqc/tests/main.nf.test @@ -30,7 +30,7 @@ nextflow_process { { assert process.out.html[0][1] ==~ ".*/test_fastqc.html" }, { assert process.out.zip[0][1] ==~ ".*/test_fastqc.zip" }, { assert path(process.out.html[0][1]).text.contains("File typeConventional base calls") }, - { assert snapshot(process.out.versions).match() } + { assert snapshot(sanitizeOutput(process.out).findAll { key, val -> key != 'html' && key != 'zip' }).match() } ) } } @@ -58,7 +58,7 @@ nextflow_process { { assert process.out.zip[0][1][1] ==~ ".*/test_2_fastqc.zip" }, { assert path(process.out.html[0][1][0]).text.contains("File typeConventional base calls") }, { assert path(process.out.html[0][1][1]).text.contains("File typeConventional base calls") }, - { assert snapshot(process.out.versions).match() } + { assert snapshot(sanitizeOutput(process.out).findAll { key, val -> key != 'html' && key != 'zip' }).match() } ) } } @@ -82,7 +82,7 @@ nextflow_process { { assert process.out.html[0][1] ==~ ".*/test_fastqc.html" }, { assert process.out.zip[0][1] ==~ ".*/test_fastqc.zip" }, { assert path(process.out.html[0][1]).text.contains("File typeConventional base calls") }, - { assert snapshot(process.out.versions).match() } + { assert snapshot(sanitizeOutput(process.out).findAll { key, val -> key != 'html' && key != 'zip' }).match() } ) } } @@ -106,7 +106,7 @@ nextflow_process { { assert process.out.html[0][1] ==~ ".*/test_fastqc.html" }, { assert process.out.zip[0][1] ==~ ".*/test_fastqc.zip" }, { assert path(process.out.html[0][1]).text.contains("File typeConventional base calls") }, - { assert snapshot(process.out.versions).match() } + { assert snapshot(sanitizeOutput(process.out).findAll { key, val -> key != 'html' && key != 'zip' }).match() } ) } } @@ -142,7 +142,7 @@ nextflow_process { { assert path(process.out.html[0][1][1]).text.contains("File typeConventional base calls") }, { assert path(process.out.html[0][1][2]).text.contains("File typeConventional base calls") }, { assert path(process.out.html[0][1][3]).text.contains("File typeConventional base calls") }, - { assert snapshot(process.out.versions).match() } + { assert snapshot(sanitizeOutput(process.out).findAll { key, val -> key != 'html' && key != 'zip' }).match() } ) } } @@ -166,7 +166,7 @@ nextflow_process { { assert process.out.html[0][1] ==~ ".*/mysample_fastqc.html" }, { assert process.out.zip[0][1] ==~ ".*/mysample_fastqc.zip" }, { assert path(process.out.html[0][1]).text.contains("File typeConventional base calls") }, - { assert snapshot(process.out.versions).match() } + { assert snapshot(sanitizeOutput(process.out).findAll { key, val -> key != 'html' && key != 'zip' }).match() } ) } } diff --git a/modules/nf-core/fastqc/tests/main.nf.test.snap b/modules/nf-core/fastqc/tests/main.nf.test.snap index d5db309..c8ee120 100644 --- a/modules/nf-core/fastqc/tests/main.nf.test.snap +++ b/modules/nf-core/fastqc/tests/main.nf.test.snap @@ -1,15 +1,21 @@ { "sarscov2 custom_prefix": { "content": [ - [ - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" - ] + { + "versions_fastqc": [ + [ + "FASTQC", + "fastqc", + "0.12.1" + ] + ] + } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" + "nf-test": "0.9.2", + "nextflow": "25.10.0" }, - "timestamp": "2024-07-22T11:02:16.374038" + "timestamp": "2025-10-28T16:39:14.518503" }, "sarscov2 single-end [fastq] - stub": { "content": [ @@ -33,7 +39,11 @@ ] ], "2": [ - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + [ + "FASTQC", + "fastqc", + "0.12.1" + ] ], "html": [ [ @@ -44,8 +54,12 @@ "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "versions": [ - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + "versions_fastqc": [ + [ + "FASTQC", + "fastqc", + "0.12.1" + ] ], "zip": [ [ @@ -59,10 +73,10 @@ } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" + "nf-test": "0.9.2", + "nextflow": "25.10.0" }, - "timestamp": "2024-07-22T11:02:24.993809" + "timestamp": "2025-10-28T16:39:19.309008" }, "sarscov2 custom_prefix - stub": { "content": [ @@ -86,7 +100,11 @@ ] ], "2": [ - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + [ + "FASTQC", + "fastqc", + "0.12.1" + ] ], "html": [ [ @@ -97,8 +115,12 @@ "mysample.html:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "versions": [ - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + "versions_fastqc": [ + [ + "FASTQC", + "fastqc", + "0.12.1" + ] ], "zip": [ [ @@ -112,58 +134,82 @@ } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" + "nf-test": "0.9.2", + "nextflow": "25.10.0" }, - "timestamp": "2024-07-22T11:03:10.93942" + "timestamp": "2025-10-28T16:39:44.94888" }, "sarscov2 interleaved [fastq]": { "content": [ - [ - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" - ] + { + "versions_fastqc": [ + [ + "FASTQC", + "fastqc", + "0.12.1" + ] + ] + } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" + "nf-test": "0.9.2", + "nextflow": "25.10.0" }, - "timestamp": "2024-07-22T11:01:42.355718" + "timestamp": "2025-10-28T16:38:45.168496" }, "sarscov2 paired-end [bam]": { "content": [ - [ - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" - ] + { + "versions_fastqc": [ + [ + "FASTQC", + "fastqc", + "0.12.1" + ] + ] + } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" + "nf-test": "0.9.2", + "nextflow": "25.10.0" }, - "timestamp": "2024-07-22T11:01:53.276274" + "timestamp": "2025-10-28T16:38:53.268919" }, "sarscov2 multiple [fastq]": { "content": [ - [ - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" - ] + { + "versions_fastqc": [ + [ + "FASTQC", + "fastqc", + "0.12.1" + ] + ] + } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" + "nf-test": "0.9.2", + "nextflow": "25.10.0" }, - "timestamp": "2024-07-22T11:02:05.527626" + "timestamp": "2025-10-28T16:39:05.050305" }, "sarscov2 paired-end [fastq]": { "content": [ - [ - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" - ] + { + "versions_fastqc": [ + [ + "FASTQC", + "fastqc", + "0.12.1" + ] + ] + } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" + "nf-test": "0.9.2", + "nextflow": "25.10.0" }, - "timestamp": "2024-07-22T11:01:31.188871" + "timestamp": "2025-10-28T16:38:37.2373" }, "sarscov2 paired-end [fastq] - stub": { "content": [ @@ -187,7 +233,11 @@ ] ], "2": [ - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + [ + "FASTQC", + "fastqc", + "0.12.1" + ] ], "html": [ [ @@ -198,8 +248,12 @@ "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "versions": [ - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + "versions_fastqc": [ + [ + "FASTQC", + "fastqc", + "0.12.1" + ] ], "zip": [ [ @@ -213,10 +267,10 @@ } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" + "nf-test": "0.9.2", + "nextflow": "25.10.0" }, - "timestamp": "2024-07-22T11:02:34.273566" + "timestamp": "2025-10-28T16:39:24.450398" }, "sarscov2 multiple [fastq] - stub": { "content": [ @@ -240,7 +294,11 @@ ] ], "2": [ - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + [ + "FASTQC", + "fastqc", + "0.12.1" + ] ], "html": [ [ @@ -251,8 +309,12 @@ "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "versions": [ - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + "versions_fastqc": [ + [ + "FASTQC", + "fastqc", + "0.12.1" + ] ], "zip": [ [ @@ -266,22 +328,28 @@ } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" + "nf-test": "0.9.2", + "nextflow": "25.10.0" }, - "timestamp": "2024-07-22T11:03:02.304411" + "timestamp": "2025-10-28T16:39:39.758762" }, "sarscov2 single-end [fastq]": { "content": [ - [ - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" - ] + { + "versions_fastqc": [ + [ + "FASTQC", + "fastqc", + "0.12.1" + ] + ] + } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" + "nf-test": "0.9.2", + "nextflow": "25.10.0" }, - "timestamp": "2024-07-22T11:01:19.095607" + "timestamp": "2025-10-28T16:38:29.555068" }, "sarscov2 interleaved [fastq] - stub": { "content": [ @@ -305,7 +373,11 @@ ] ], "2": [ - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + [ + "FASTQC", + "fastqc", + "0.12.1" + ] ], "html": [ [ @@ -316,8 +388,12 @@ "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "versions": [ - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + "versions_fastqc": [ + [ + "FASTQC", + "fastqc", + "0.12.1" + ] ], "zip": [ [ @@ -331,10 +407,10 @@ } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" + "nf-test": "0.9.2", + "nextflow": "25.10.0" }, - "timestamp": "2024-07-22T11:02:44.640184" + "timestamp": "2025-10-28T16:39:29.193136" }, "sarscov2 paired-end [bam] - stub": { "content": [ @@ -358,7 +434,11 @@ ] ], "2": [ - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + [ + "FASTQC", + "fastqc", + "0.12.1" + ] ], "html": [ [ @@ -369,8 +449,12 @@ "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "versions": [ - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + "versions_fastqc": [ + [ + "FASTQC", + "fastqc", + "0.12.1" + ] ], "zip": [ [ @@ -384,9 +468,9 @@ } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" + "nf-test": "0.9.2", + "nextflow": "25.10.0" }, - "timestamp": "2024-07-22T11:02:53.550742" + "timestamp": "2025-10-28T16:39:34.144919" } } \ No newline at end of file diff --git a/modules/nf-core/fastqc/tests/tags.yml b/modules/nf-core/fastqc/tests/tags.yml deleted file mode 100644 index 7834294..0000000 --- a/modules/nf-core/fastqc/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -fastqc: - - modules/nf-core/fastqc/** diff --git a/modules/nf-core/gatk4/applybqsr/environment.yml b/modules/nf-core/gatk4/applybqsr/environment.yml new file mode 100644 index 0000000..55993f4 --- /dev/null +++ b/modules/nf-core/gatk4/applybqsr/environment.yml @@ -0,0 +1,5 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::gatk4=4.5.0.0 diff --git a/modules/nf-core/gatk4/applybqsr/main.nf b/modules/nf-core/gatk4/applybqsr/main.nf new file mode 100644 index 0000000..4e91c31 --- /dev/null +++ b/modules/nf-core/gatk4/applybqsr/main.nf @@ -0,0 +1,64 @@ +process GATK4_APPLYBQSR { + tag "$meta.id" + label 'process_low' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/gatk4:4.5.0.0--py36hdfd78af_0': + 'biocontainers/gatk4:4.5.0.0--py36hdfd78af_0' }" + + input: + tuple val(meta), path(input), path(input_index), path(bqsr_table), path(intervals) + path fasta + path fai + path dict + + output: + tuple val(meta), path("*.bam") , emit: bam, optional: true + tuple val(meta), path("*.cram"), emit: cram, optional: true + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def interval_command = intervals ? "--intervals $intervals" : "" + + def avail_mem = 3072 + if (!task.memory) { + log.info '[GATK ApplyBQSR] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.' + } else { + avail_mem = (task.memory.mega*0.8).intValue() + } + """ + gatk --java-options "-Xmx${avail_mem}M -XX:-UsePerfData" \\ + ApplyBQSR \\ + --input $input \\ + --output ${prefix}.${input.getExtension()} \\ + --reference $fasta \\ + --bqsr-recal-file $bqsr_table \\ + $interval_command \\ + --tmp-dir . \\ + $args + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + gatk4: \$(echo \$(gatk --version 2>&1) | sed 's/^.*(GATK) v//; s/ .*\$//') + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + def input_extension = input.getExtension() + def output_extension = input_extension == 'bam' ? 'bam' : 'cram' + """ + touch ${prefix}.${output_extension} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + gatk4: \$(echo \$(gatk --version 2>&1) | sed 's/^.*(GATK) v//; s/ .*\$//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/gatk4/applybqsr/meta.yml b/modules/nf-core/gatk4/applybqsr/meta.yml new file mode 100644 index 0000000..65d9c9e --- /dev/null +++ b/modules/nf-core/gatk4/applybqsr/meta.yml @@ -0,0 +1,83 @@ +name: gatk4_applybqsr +description: Apply base quality score recalibration (BQSR) to a bam file +keywords: + - bam + - base quality score recalibration + - bqsr + - cram + - gatk4 +tools: + - gatk4: + description: | + Developed in the Data Sciences Platform at the Broad Institute, the toolkit offers a wide variety of tools + with a primary focus on variant discovery and genotyping. Its powerful processing engine + and high-performance computing features make it capable of taking on projects of any size. + homepage: https://gatk.broadinstitute.org/hc/en-us + documentation: https://gatk.broadinstitute.org/hc/en-us/categories/360002369672s + doi: 10.1158/1538-7445.AM2017-3590 + licence: ["Apache-2.0"] + identifier: "" +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - input: + type: file + description: BAM/CRAM file from alignment + pattern: "*.{bam,cram}" + - input_index: + type: file + description: BAI/CRAI file from alignment + pattern: "*.{bai,crai}" + - bqsr_table: + type: file + description: Recalibration table from gatk4_baserecalibrator + - intervals: + type: file + description: Bed file with the genomic regions included in the library (optional) + - - fasta: + type: file + description: The reference fasta file + pattern: "*.fasta" + - - fai: + type: file + description: Index of reference fasta file + pattern: "*.fasta.fai" + - - dict: + type: file + description: GATK sequence dictionary + pattern: "*.dict" +output: + - bam: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.bam": + type: file + description: Recalibrated BAM file + pattern: "*.{bam}" + - cram: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.cram": + type: file + description: Recalibrated CRAM file + pattern: "*.{cram}" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@yocra3" + - "@FriederikeHanssen" +maintainers: + - "@yocra3" + - "@FriederikeHanssen" diff --git a/modules/nf-core/gatk4/applybqsr/tests/main.nf.test b/modules/nf-core/gatk4/applybqsr/tests/main.nf.test new file mode 100644 index 0000000..acb41ce --- /dev/null +++ b/modules/nf-core/gatk4/applybqsr/tests/main.nf.test @@ -0,0 +1,154 @@ +nextflow_process { + + name "Test Process GATK4_APPLYBQSR" + script "../main.nf" + process "GATK4_APPLYBQSR" + + tag "modules" + tag "modules_nfcore" + tag "gatk4" + tag "gatk4/applybqsr" + + test("sarscov2 - bam") { + + when { + process { + """ + input[0] = [ + [ id:'test' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/gatk/test.baserecalibrator.table', checkIfExists: true), + [] + ] + input[1] = file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + input[2] = file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true) + input[3] = file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.dict', checkIfExists: true) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("sarscov2 - bam - intervals") { + + when { + process { + """ + input[0] = [ + [ id:'test' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/gatk/test.baserecalibrator.table', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/bed/test.bed', checkIfExists: true) + ] + input[1] = file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + input[2] = file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true) + input[3] = file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.dict', checkIfExists: true) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("sarscov2 - cram") { + + when { + process { + """ + input[0] = [ + [ id:'test' ], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram.crai', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/test.baserecalibrator.table', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.bed', checkIfExists: true) + ] + input[1] = file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + input[2] = file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) + input[3] = file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.dict', checkIfExists: true) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out.versions).match() }, + { assert snapshot(file(process.out.cram[0][1]).name).match("test.cram") } + ) + } + } + + test("sarscov2 - cram - stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'test' ], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram.crai', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/test.baserecalibrator.table', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.bed', checkIfExists: true) + ] + input[1] = file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + input[2] = file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) + input[3] = file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.dict', checkIfExists: true) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() }, + ) + } + } + + test("sarscov2 - bam - stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'test' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/gatk/test.baserecalibrator.table', checkIfExists: true), + [] + ] + input[1] = file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + input[2] = file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true) + input[3] = file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.dict', checkIfExists: true) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + +} diff --git a/modules/nf-core/gatk4/applybqsr/tests/main.nf.test.snap b/modules/nf-core/gatk4/applybqsr/tests/main.nf.test.snap new file mode 100644 index 0000000..19b37d0 --- /dev/null +++ b/modules/nf-core/gatk4/applybqsr/tests/main.nf.test.snap @@ -0,0 +1,180 @@ +{ + "sarscov2 - bam - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + + ], + "2": [ + "versions.yml:md5,bb2a060a0280c812fba3c74b1707b350" + ], + "bam": [ + [ + { + "id": "test" + }, + "test.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "cram": [ + + ], + "versions": [ + "versions.yml:md5,bb2a060a0280c812fba3c74b1707b350" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-20T10:25:00.314573" + }, + "sarscov2 - bam - intervals": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.bam:md5,096d269e17f4ae53f765013479240db8" + ] + ], + "1": [ + + ], + "2": [ + "versions.yml:md5,bb2a060a0280c812fba3c74b1707b350" + ], + "bam": [ + [ + { + "id": "test" + }, + "test.bam:md5,096d269e17f4ae53f765013479240db8" + ] + ], + "cram": [ + + ], + "versions": [ + "versions.yml:md5,bb2a060a0280c812fba3c74b1707b350" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.0" + }, + "timestamp": "2024-02-13T16:21:48.144461" + }, + "sarscov2 - cram": { + "content": [ + [ + "versions.yml:md5,bb2a060a0280c812fba3c74b1707b350" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.0" + }, + "timestamp": "2024-02-13T16:22:09.308602" + }, + "test.cram": { + "content": [ + "test.cram" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.0" + }, + "timestamp": "2023-12-09T03:10:46.70859771" + }, + "sarscov2 - cram - stub": { + "content": [ + { + "0": [ + + ], + "1": [ + [ + { + "id": "test" + }, + "test.cram:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,bb2a060a0280c812fba3c74b1707b350" + ], + "bam": [ + + ], + "cram": [ + [ + { + "id": "test" + }, + "test.cram:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,bb2a060a0280c812fba3c74b1707b350" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-20T10:24:52.761169" + }, + "sarscov2 - bam": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.bam:md5,022271b9ce0a07579282a2a5c1186513" + ] + ], + "1": [ + + ], + "2": [ + "versions.yml:md5,bb2a060a0280c812fba3c74b1707b350" + ], + "bam": [ + [ + { + "id": "test" + }, + "test.bam:md5,022271b9ce0a07579282a2a5c1186513" + ] + ], + "cram": [ + + ], + "versions": [ + "versions.yml:md5,bb2a060a0280c812fba3c74b1707b350" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.0" + }, + "timestamp": "2024-02-13T16:21:28.719225" + } +} \ No newline at end of file diff --git a/modules/nf-core/gatk4/applybqsr/tests/tags.yml b/modules/nf-core/gatk4/applybqsr/tests/tags.yml new file mode 100644 index 0000000..8da9292 --- /dev/null +++ b/modules/nf-core/gatk4/applybqsr/tests/tags.yml @@ -0,0 +1,2 @@ +gatk4/applybqsr: + - "modules/nf-core/gatk4/applybqsr/**" diff --git a/modules/nf-core/gatk4/applyvqsr/environment.yml b/modules/nf-core/gatk4/applyvqsr/environment.yml new file mode 100644 index 0000000..55993f4 --- /dev/null +++ b/modules/nf-core/gatk4/applyvqsr/environment.yml @@ -0,0 +1,5 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::gatk4=4.5.0.0 diff --git a/modules/nf-core/gatk4/applyvqsr/main.nf b/modules/nf-core/gatk4/applyvqsr/main.nf new file mode 100644 index 0000000..047321b --- /dev/null +++ b/modules/nf-core/gatk4/applyvqsr/main.nf @@ -0,0 +1,63 @@ +process GATK4_APPLYVQSR { + tag "$meta.id" + label 'process_low' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/gatk4:4.5.0.0--py36hdfd78af_0': + 'biocontainers/gatk4:4.5.0.0--py36hdfd78af_0' }" + + input: + tuple val(meta), path(vcf), path(vcf_tbi), path(recal), path(recal_index), path(tranches) + path fasta + path fai + path dict + + output: + tuple val(meta), path("*.vcf.gz"), emit: vcf + tuple val(meta), path("*.tbi") , emit: tbi + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def reference_command = fasta ? "--reference $fasta" : '' + + def avail_mem = 3072 + if (!task.memory) { + log.info '[GATK ApplyVQSR] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.' + } else { + avail_mem = (task.memory.mega*0.8).intValue() + } + """ + gatk --java-options "-Xmx${avail_mem}M -XX:-UsePerfData" \\ + ApplyVQSR \\ + --variant ${vcf} \\ + --output ${prefix}.vcf.gz \\ + $reference_command \\ + --tranches-file $tranches \\ + --recal-file $recal \\ + --tmp-dir . \\ + $args + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + gatk4: \$(echo \$(gatk --version 2>&1) | sed 's/^.*(GATK) v//; s/ .*\$//') + END_VERSIONS + """ + + stub: + prefix = task.ext.prefix ?: "${meta.id}" + """ + echo "" | gzip > ${prefix}.vcf.gz + touch ${prefix}.vcf.gz.tbi + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + gatk4: \$(echo \$(gatk --version 2>&1) | sed 's/^.*(GATK) v//; s/ .*\$//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/gatk4/applyvqsr/meta.yml b/modules/nf-core/gatk4/applyvqsr/meta.yml new file mode 100644 index 0000000..ceedff6 --- /dev/null +++ b/modules/nf-core/gatk4/applyvqsr/meta.yml @@ -0,0 +1,91 @@ +name: gatk4_applyvqsr +description: | + Apply a score cutoff to filter variants based on a recalibration table. + AplyVQSR performs the second pass in a two-stage process called Variant Quality Score Recalibration (VQSR). + Specifically, it applies filtering to the input variants based on the recalibration table produced + in the first step by VariantRecalibrator and a target sensitivity value. +keywords: + - gatk4 + - variant quality score recalibration + - vcf + - vqsr +tools: + - gatk4: + description: | + Developed in the Data Sciences Platform at the Broad Institute, the toolkit offers a wide variety of tools + with a primary focus on variant discovery and genotyping. Its powerful processing engine + and high-performance computing features make it capable of taking on projects of any size. + homepage: https://gatk.broadinstitute.org/hc/en-us + documentation: https://gatk.broadinstitute.org/hc/en-us/categories/360002369672s + doi: 10.1158/1538-7445.AM2017-3590 + licence: ["Apache-2.0"] + identifier: "" +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test'] + - vcf: + type: file + description: VCF file to be recalibrated, this should be the same file as used + for the first stage VariantRecalibrator. + pattern: "*.vcf" + - vcf_tbi: + type: file + description: tabix index for the input vcf file. + pattern: "*.vcf.tbi" + - recal: + type: file + description: Recalibration file produced when the input vcf was run through + VariantRecalibrator in stage 1. + pattern: "*.recal" + - recal_index: + type: file + description: Index file for the recalibration file. + pattern: ".recal.idx" + - tranches: + type: file + description: Tranches file produced when the input vcf was run through VariantRecalibrator + in stage 1. + pattern: ".tranches" + - - fasta: + type: file + description: The reference fasta file + pattern: "*.fasta" + - - fai: + type: file + description: Index of reference fasta file + pattern: "*.fasta.fai" + - - dict: + type: file + description: GATK sequence dictionary + pattern: "*.dict" +output: + - vcf: + - meta: + type: file + description: compressed vcf file containing the recalibrated variants. + pattern: "*.vcf.gz" + - "*.vcf.gz": + type: file + description: compressed vcf file containing the recalibrated variants. + pattern: "*.vcf.gz" + - tbi: + - meta: + type: file + description: Index of recalibrated vcf file. + pattern: "*vcf.gz.tbi" + - "*.tbi": + type: file + description: Index of recalibrated vcf file. + pattern: "*vcf.gz.tbi" + - versions: + - versions.yml: + type: file + description: File containing software versions. + pattern: "versions.yml" +authors: + - "@GCJMackenzie" +maintainers: + - "@GCJMackenzie" diff --git a/modules/nf-core/gatk4/applyvqsr/tests/allelspecificity.config b/modules/nf-core/gatk4/applyvqsr/tests/allelspecificity.config new file mode 100644 index 0000000..ac368bd --- /dev/null +++ b/modules/nf-core/gatk4/applyvqsr/tests/allelspecificity.config @@ -0,0 +1,5 @@ +process { + withName: GATK4_APPLYVQSR { + ext.args = '--mode SNP --truth-sensitivity-filter-level 99.0 -AS' + } +} diff --git a/modules/nf-core/gatk4/applyvqsr/tests/main.nf.test b/modules/nf-core/gatk4/applyvqsr/tests/main.nf.test new file mode 100644 index 0000000..104eb7f --- /dev/null +++ b/modules/nf-core/gatk4/applyvqsr/tests/main.nf.test @@ -0,0 +1,106 @@ +nextflow_process { + + name "Test Process GATK4_APPLYVQSR" + script "../main.nf" + process "GATK4_APPLYVQSR" + + tag "modules" + tag "modules_nfcore" + tag "gatk4" + tag "gatk4/applyvqsr" + + test("human - vcf") { + + config "./no-allelspecificity.config" + + when { + process { + """ + input[0] = [ [ id:'test'], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/haplotypecaller_calls/test2_haplotc.ann.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/haplotypecaller_calls/test2_haplotc.ann.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/variantrecalibrator/test2.recal', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/variantrecalibrator/test2.recal.idx', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/variantrecalibrator/test2.tranches', checkIfExists: true) + ] + input[1] = file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.fasta', checkIfExists: true) + input[2] = file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.fasta.fai', checkIfExists: true) + input[3] = file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.dict', checkIfExists: true) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out.versions).match("versions") }, + { assert path(process.out.vcf.get(0).get(1)).linesGzip.contains("##fileformat=VCFv4.2") }, + { assert snapshot(file(process.out.tbi.get(0).get(1)).name).match() } + ) + } + + } + + test("human - vcf - allele-specific") { + + config "./allelspecificity.config" + + when { + process { + """ + input[0] = [ [ id:'test'], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/haplotypecaller_calls/test2_haplotc.ann.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/haplotypecaller_calls/test2_haplotc.ann.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/variantrecalibrator/test2_allele_specific.recal', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/variantrecalibrator/test2_allele_specific.recal.idx', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/variantrecalibrator/test2_allele_specific.tranches', checkIfExists: true) + ] + input[1] = file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.fasta', checkIfExists: true) + input[2] = file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.fasta.fai', checkIfExists: true) + input[3] = file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.dict', checkIfExists: true) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out.versions).match("versions_allelspecific") }, + { assert path(process.out.vcf.get(0).get(1)).linesGzip.contains("##fileformat=VCFv4.2") }, + { assert snapshot(file(process.out.tbi.get(0).get(1)).name).match() } + ) + } + + } + + test("human - vcf - stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ [ id:'test'], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/haplotypecaller_calls/test2_haplotc.ann.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/haplotypecaller_calls/test2_haplotc.ann.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/variantrecalibrator/test2.recal', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/variantrecalibrator/test2.recal.idx', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/variantrecalibrator/test2.tranches', checkIfExists: true) + ] + input[1] = file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.fasta', checkIfExists: true) + input[2] = file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.fasta.fai', checkIfExists: true) + input[3] = file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.dict', checkIfExists: true) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + +} diff --git a/modules/nf-core/gatk4/applyvqsr/tests/main.nf.test.snap b/modules/nf-core/gatk4/applyvqsr/tests/main.nf.test.snap new file mode 100644 index 0000000..ad2fe8b --- /dev/null +++ b/modules/nf-core/gatk4/applyvqsr/tests/main.nf.test.snap @@ -0,0 +1,95 @@ +{ + "human - vcf": { + "content": [ + "test.vcf.gz.tbi" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.0" + }, + "timestamp": "2024-05-15T13:31:50.727658" + }, + "human - vcf - allele-specific": { + "content": [ + "test.vcf.gz.tbi" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.0" + }, + "timestamp": "2024-05-15T13:29:42.331816" + }, + "versions": { + "content": [ + [ + "versions.yml:md5,4a6890d486a62ce6f2edfd2f8961da4f" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.0" + }, + "timestamp": "2024-05-15T13:00:49.353138" + }, + "human - vcf - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + [ + { + "id": "test" + }, + "test.vcf.gz.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,4a6890d486a62ce6f2edfd2f8961da4f" + ], + "tbi": [ + [ + { + "id": "test" + }, + "test.vcf.gz.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "vcf": [ + [ + { + "id": "test" + }, + "test.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,4a6890d486a62ce6f2edfd2f8961da4f" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.0" + }, + "timestamp": "2024-05-15T13:01:24.370421" + }, + "versions_allelspecific": { + "content": [ + [ + "versions.yml:md5,4a6890d486a62ce6f2edfd2f8961da4f" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.0" + }, + "timestamp": "2024-05-15T13:01:08.104194" + } +} \ No newline at end of file diff --git a/modules/nf-core/gatk4/applyvqsr/tests/no-allelspecificity.config b/modules/nf-core/gatk4/applyvqsr/tests/no-allelspecificity.config new file mode 100644 index 0000000..c08c918 --- /dev/null +++ b/modules/nf-core/gatk4/applyvqsr/tests/no-allelspecificity.config @@ -0,0 +1,5 @@ +process { + withName: GATK4_APPLYVQSR { + ext.args = '--mode SNP --truth-sensitivity-filter-level 99.0' + } +} diff --git a/modules/nf-core/gatk4/applyvqsr/tests/tags.yml b/modules/nf-core/gatk4/applyvqsr/tests/tags.yml new file mode 100644 index 0000000..c657063 --- /dev/null +++ b/modules/nf-core/gatk4/applyvqsr/tests/tags.yml @@ -0,0 +1,2 @@ +gatk4/applyvqsr: + - "modules/nf-core/gatk4/applyvqsr/**" diff --git a/modules/nf-core/gatk4/indexfeaturefile/environment.yml b/modules/nf-core/gatk4/indexfeaturefile/environment.yml new file mode 100644 index 0000000..55993f4 --- /dev/null +++ b/modules/nf-core/gatk4/indexfeaturefile/environment.yml @@ -0,0 +1,5 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::gatk4=4.5.0.0 diff --git a/modules/nf-core/gatk4/indexfeaturefile/main.nf b/modules/nf-core/gatk4/indexfeaturefile/main.nf new file mode 100644 index 0000000..b1a2698 --- /dev/null +++ b/modules/nf-core/gatk4/indexfeaturefile/main.nf @@ -0,0 +1,41 @@ +process GATK4_INDEXFEATUREFILE { + tag "$meta.id" + label 'process_low' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/gatk4:4.5.0.0--py36hdfd78af_0': + 'biocontainers/gatk4:4.5.0.0--py36hdfd78af_0' }" + + input: + tuple val(meta), path(feature_file) + + output: + tuple val(meta), path("*.{tbi,idx}"), emit: index + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + + def avail_mem = 3072 + if (!task.memory) { + log.info '[GATK IndexFeatureFile] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.' + } else { + avail_mem = (task.memory.mega*0.8).intValue() + } + """ + gatk --java-options "-Xmx${avail_mem}M -XX:-UsePerfData" \\ + IndexFeatureFile \\ + --input $feature_file \\ + --tmp-dir . \\ + $args + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + gatk4: \$(echo \$(gatk --version 2>&1) | sed 's/^.*(GATK) v//; s/ .*\$//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/gatk4/indexfeaturefile/meta.yml b/modules/nf-core/gatk4/indexfeaturefile/meta.yml new file mode 100644 index 0000000..cfc717d --- /dev/null +++ b/modules/nf-core/gatk4/indexfeaturefile/meta.yml @@ -0,0 +1,46 @@ +name: gatk4_indexfeaturefile +description: Creates an index for a feature file, e.g. VCF or BED file. +keywords: + - feature + - gatk4 + - index + - indexfeaturefile +tools: + - gatk4: + description: Genome Analysis Toolkit (GATK4) + homepage: https://gatk.broadinstitute.org/hc/en-us + documentation: https://gatk.broadinstitute.org/hc/en-us/categories/360002369672s + tool_dev_url: https://github.com/broadinstitute/gatk + doi: "10.1158/1538-7445.AM2017-3590" + licence: ["BSD-3-clause"] + identifier: "" +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - feature_file: + type: file + description: VCF/BED file + pattern: "*.{vcf,vcf.gz,bed,bed.gz}" +output: + - index: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.{tbi,idx}": + type: file + description: Index for VCF/BED file + pattern: "*.{tbi,idx}" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@santiagorevale" +maintainers: + - "@santiagorevale" diff --git a/modules/nf-core/gatk4/indexfeaturefile/tests/main.nf.test b/modules/nf-core/gatk4/indexfeaturefile/tests/main.nf.test new file mode 100644 index 0000000..994606f --- /dev/null +++ b/modules/nf-core/gatk4/indexfeaturefile/tests/main.nf.test @@ -0,0 +1,105 @@ +// nf-core modules test gatk4/indexfeaturefile +nextflow_process { + + name "Test Process GATK4_INDEXFEATUREFILE" + script "../main.nf" + process "GATK4_INDEXFEATUREFILE" + + tag "modules" + tag "modules_nfcore" + tag "gatk4" + tag "gatk4/indexfeaturefile" + + test("test_gatk4_indexfeaturefile_bed") { + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.bed', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out.versions).match() }, + { assert snapshot(file(process.out.index.get(0).get(1)).name).match("geneome.bed.idx") }, + ) + } + + } + + test("test_gatk4_indexfeaturefile_bed_gz") { + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.bed.gz', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() }, + { assert snapshot(file(process.out.index.get(0).get(1)).name).match("genome.bed.gz.tbi") }, + ) + } + + } + + test("test_gatk4_indexfeaturefile_vcf") { + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test.genome.vcf', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out.versions).match() }, + { assert snapshot(file(process.out.index.get(0).get(1)).name).match("test.genome.vcf.idx") }, + ) + } + + } + + test("test_gatk4_indexfeaturefile_vcf_gz") { + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test.genome.vcf.gz', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() }, + { assert snapshot(file(process.out.index.get(0).get(1)).name).match("test.genome.vcf.gz.tbi") }, + ) + } + + } + +} diff --git a/modules/nf-core/gatk4/indexfeaturefile/tests/main.nf.test.snap b/modules/nf-core/gatk4/indexfeaturefile/tests/main.nf.test.snap new file mode 100644 index 0000000..fc19333 --- /dev/null +++ b/modules/nf-core/gatk4/indexfeaturefile/tests/main.nf.test.snap @@ -0,0 +1,132 @@ +{ + "genome.bed.gz.tbi": { + "content": [ + "genome.bed.gz.tbi" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.2" + }, + "timestamp": "2024-05-22T18:57:03.068725" + }, + "test_gatk4_indexfeaturefile_vcf": { + "content": [ + [ + "versions.yml:md5,e01e4575236d930ace929eec9c4c80dd" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.2" + }, + "timestamp": "2024-05-22T18:57:20.602472" + }, + "geneome.bed.idx": { + "content": [ + "genome.bed.idx" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.2" + }, + "timestamp": "2024-05-22T18:56:46.988441" + }, + "test.genome.vcf.gz.tbi": { + "content": [ + "test.genome.vcf.gz.tbi" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.2" + }, + "timestamp": "2024-05-22T18:57:51.898472" + }, + "test_gatk4_indexfeaturefile_bed_gz": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "genome.bed.gz.tbi:md5,4bc51e2351a6e83f20e13be75861f941" + ] + ], + "1": [ + "versions.yml:md5,e01e4575236d930ace929eec9c4c80dd" + ], + "index": [ + [ + { + "id": "test" + }, + "genome.bed.gz.tbi:md5,4bc51e2351a6e83f20e13be75861f941" + ] + ], + "versions": [ + "versions.yml:md5,e01e4575236d930ace929eec9c4c80dd" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.2" + }, + "timestamp": "2024-05-22T18:57:03.058351" + }, + "test_gatk4_indexfeaturefile_vcf_gz": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.genome.vcf.gz.tbi:md5,fedd68eaddf8d31257853d9da8325bd3" + ] + ], + "1": [ + "versions.yml:md5,e01e4575236d930ace929eec9c4c80dd" + ], + "index": [ + [ + { + "id": "test" + }, + "test.genome.vcf.gz.tbi:md5,fedd68eaddf8d31257853d9da8325bd3" + ] + ], + "versions": [ + "versions.yml:md5,e01e4575236d930ace929eec9c4c80dd" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.2" + }, + "timestamp": "2024-05-22T18:57:51.861697" + }, + "test.genome.vcf.idx": { + "content": [ + "test.genome.vcf.idx" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.2" + }, + "timestamp": "2024-05-22T18:57:20.624337" + }, + "test_gatk4_indexfeaturefile_bed": { + "content": [ + [ + "versions.yml:md5,e01e4575236d930ace929eec9c4c80dd" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.2" + }, + "timestamp": "2024-05-22T18:56:46.885162" + } +} \ No newline at end of file diff --git a/modules/nf-core/gatk4/indexfeaturefile/tests/tags.yml b/modules/nf-core/gatk4/indexfeaturefile/tests/tags.yml new file mode 100644 index 0000000..041bd3d --- /dev/null +++ b/modules/nf-core/gatk4/indexfeaturefile/tests/tags.yml @@ -0,0 +1,2 @@ +gatk4/indexfeaturefile: + - "modules/nf-core/gatk4/indexfeaturefile/**" diff --git a/modules/nf-core/gatk4/markduplicates/environment.yml b/modules/nf-core/gatk4/markduplicates/environment.yml new file mode 100644 index 0000000..3c73c17 --- /dev/null +++ b/modules/nf-core/gatk4/markduplicates/environment.yml @@ -0,0 +1,8 @@ +channels: + - conda-forge + - bioconda + +dependencies: + - bioconda::gatk4=4.5.0.0 + - bioconda::htslib=1.19.1 + - bioconda::samtools=1.19.2 diff --git a/modules/nf-core/gatk4/markduplicates/main.nf b/modules/nf-core/gatk4/markduplicates/main.nf new file mode 100644 index 0000000..baadefe --- /dev/null +++ b/modules/nf-core/gatk4/markduplicates/main.nf @@ -0,0 +1,85 @@ +process GATK4_MARKDUPLICATES { + tag "$meta.id" + label 'process_medium' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/mulled-v2-d9e7bad0f7fbc8f4458d5c3ab7ffaaf0235b59fb:7cc3d06cbf42e28c5e2ebfc7c858654c7340a9d5-0': + 'biocontainers/mulled-v2-d9e7bad0f7fbc8f4458d5c3ab7ffaaf0235b59fb:7cc3d06cbf42e28c5e2ebfc7c858654c7340a9d5-0' }" + + input: + tuple val(meta), path(bam) + path fasta + path fasta_fai + + output: + tuple val(meta), path("*cram"), emit: cram, optional: true + tuple val(meta), path("*bam"), emit: bam, optional: true + tuple val(meta), path("*.crai"), emit: crai, optional: true + tuple val(meta), path("*.bai"), emit: bai, optional: true + tuple val(meta), path("*.metrics"), emit: metrics + path "versions.yml", emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + prefix = task.ext.prefix ?: "${meta.id}.bam" + + // If the extension is CRAM, then change it to BAM + prefix_bam = prefix.tokenize('.')[-1] == 'cram' ? "${prefix.substring(0, prefix.lastIndexOf('.'))}.bam" : prefix + + def input_list = bam.collect{"--INPUT $it"}.join(' ') + def reference = fasta ? "--REFERENCE_SEQUENCE ${fasta}" : "" + + def avail_mem = 3072 + if (!task.memory) { + log.info '[GATK MarkDuplicates] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.' + } else { + avail_mem = (task.memory.mega*0.8).intValue() + } + + // Using samtools and not Markduplicates to compress to CRAM speeds up computation: + // https://medium.com/@acarroll.dna/looking-at-trade-offs-in-compression-levels-for-genomics-tools-eec2834e8b94 + """ + gatk --java-options "-Xmx${avail_mem}M -XX:-UsePerfData" \\ + MarkDuplicates \\ + $input_list \\ + --OUTPUT ${prefix_bam} \\ + --METRICS_FILE ${prefix}.metrics \\ + --TMP_DIR . \\ + ${reference} \\ + $args + + # If cram files are wished as output, the run samtools for conversion + if [[ ${prefix} == *.cram ]]; then + samtools view -Ch -T ${fasta} -o ${prefix} ${prefix_bam} + rm ${prefix_bam} + samtools index ${prefix} + fi + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + gatk4: \$(echo \$(gatk --version 2>&1) | sed 's/^.*(GATK) v//; s/ .*\$//') + samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') + END_VERSIONS + """ + + stub: + prefix = task.ext.prefix ?: "${meta.id}.bam" + prefix_no_suffix = task.ext.prefix ? prefix.tokenize('.')[0] : "${meta.id}" + """ + touch ${prefix_no_suffix}.bam + touch ${prefix_no_suffix}.cram + touch ${prefix_no_suffix}.cram.crai + touch ${prefix_no_suffix}.bai + touch ${prefix}.metrics + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + gatk4: \$(echo \$(gatk --version 2>&1) | sed 's/^.*(GATK) v//; s/ .*\$//') + samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/gatk4/markduplicates/meta.yml b/modules/nf-core/gatk4/markduplicates/meta.yml new file mode 100644 index 0000000..4772c5f --- /dev/null +++ b/modules/nf-core/gatk4/markduplicates/meta.yml @@ -0,0 +1,102 @@ +name: gatk4_markduplicates +description: This tool locates and tags duplicate reads in a BAM or SAM file, where + duplicate reads are defined as originating from a single fragment of DNA. +keywords: + - bam + - gatk4 + - markduplicates + - sort +tools: + - gatk4: + description: Developed in the Data Sciences Platform at the Broad Institute, the + toolkit offers a wide variety of tools with a primary focus on variant discovery + and genotyping. Its powerful processing engine and high-performance computing + features make it capable of taking on projects of any size. + homepage: https://gatk.broadinstitute.org/hc/en-us + documentation: https://gatk.broadinstitute.org/hc/en-us/articles/360037052812-MarkDuplicates-Picard- + tool_dev_url: https://github.com/broadinstitute/gatk + doi: 10.1158/1538-7445.AM2017-3590 + licence: ["MIT"] + identifier: "" +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: Sorted BAM file + pattern: "*.{bam}" + - - fasta: + type: file + description: Fasta file + pattern: "*.{fasta}" + - - fasta_fai: + type: file + description: Fasta index file + pattern: "*.{fai}" +output: + - cram: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*cram": + type: file + description: Marked duplicates CRAM file + pattern: "*.{cram}" + - bam: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*bam": + type: file + description: Marked duplicates BAM file + pattern: "*.{bam}" + - crai: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.crai": + type: file + description: CRAM index file + pattern: "*.{cram.crai}" + - bai: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.bai": + type: file + description: BAM index file + pattern: "*.{bam.bai}" + - metrics: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.metrics": + type: file + description: Duplicate metrics file generated by GATK + pattern: "*.{metrics.txt}" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@ajodeh-juma" + - "@FriederikeHanssen" + - "@maxulysse" +maintainers: + - "@ajodeh-juma" + - "@FriederikeHanssen" + - "@maxulysse" diff --git a/modules/nf-core/gatk4/markduplicates/tests/bam.config b/modules/nf-core/gatk4/markduplicates/tests/bam.config new file mode 100644 index 0000000..0bbfbac --- /dev/null +++ b/modules/nf-core/gatk4/markduplicates/tests/bam.config @@ -0,0 +1,8 @@ +process { + + withName: GATK4_MARKDUPLICATES { + ext.args = '--CREATE_INDEX true' + ext.prefix = { "${meta.id}.bam" } + } + +} diff --git a/modules/nf-core/gatk4/markduplicates/tests/cram.config b/modules/nf-core/gatk4/markduplicates/tests/cram.config new file mode 100644 index 0000000..04a9b07 --- /dev/null +++ b/modules/nf-core/gatk4/markduplicates/tests/cram.config @@ -0,0 +1,8 @@ +process { + + withName: GATK4_MARKDUPLICATES { + ext.args = '--CREATE_INDEX true' + ext.prefix = { "${meta.id}.cram" } + } + +} diff --git a/modules/nf-core/gatk4/markduplicates/tests/main.nf.test b/modules/nf-core/gatk4/markduplicates/tests/main.nf.test new file mode 100644 index 0000000..bbcf74d --- /dev/null +++ b/modules/nf-core/gatk4/markduplicates/tests/main.nf.test @@ -0,0 +1,126 @@ +nextflow_process { + + name "Test Process GATK4_MARKDUPLICATES" + script "../main.nf" + process "GATK4_MARKDUPLICATES" + + tag "modules" + tag "modules_nfcore" + tag "gatk4" + tag "gatk4/markduplicates" + + test("sarscov2 - bam") { + config "./bam.config" + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true) + ] + input[1] = [] + input[2] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out.bam).match("bam") }, + { assert snapshot(process.out.bai).match("bai") }, + { assert snapshot(process.out.versions).match("versions") }, + { assert snapshot(file(process.out.metrics[0][1]).name).match("test.metrics") } + ) + } + } + + test("homo_sapiens - multiple bam") { + config "./bam.config" + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], + [ + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test2.paired_end.sorted.bam', checkIfExists: true) + ] + ] + input[1] = [] + input[2] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out.bam).match("multi bam") }, + { assert snapshot(process.out.bai).match("multi bai") }, + { assert snapshot(process.out.versions).match("multi versions") }, + { assert snapshot(file(process.out.metrics[0][1]).name).match("multi test.metrics") } + ) + } + + } + + test("homo_sapiens - multiple cram") { + config "./cram.config" + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test2.paired_end.sorted.bam', checkIfExists: true) + ] + ] + input[1] = file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + input[2] = file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(file(process.out.cram[0][1]).name).match("multi cram")}, + { assert snapshot(file(process.out.crai[0][1]).name).match("multi crai") }, + { assert snapshot(process.out.versions).match("multi cram versions") }, + { assert snapshot(file(process.out.metrics[0][1]).name).match("multi cram test.metrics") } + ) + } + + } + + test("stub") { + config "./bam.config" + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], + [] + ] + input[1] = [] + input[2] = [] + """ + } + } + + then { + assertAll( + { assert process.success } + ) + } + + } + +} diff --git a/modules/nf-core/gatk4/markduplicates/tests/main.nf.test.snap b/modules/nf-core/gatk4/markduplicates/tests/main.nf.test.snap new file mode 100644 index 0000000..336bb37 --- /dev/null +++ b/modules/nf-core/gatk4/markduplicates/tests/main.nf.test.snap @@ -0,0 +1,160 @@ +{ + "multi bam": { + "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "test.bam:md5,8a808b1a94d2627c4d659a2151c4cb9f" + ] + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.0" + }, + "timestamp": "2024-02-13T15:21:36.059923" + }, + "multi crai": { + "content": [ + "test.cram.crai" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.0" + }, + "timestamp": "2023-12-12T17:43:37.780426007" + }, + "multi bai": { + "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "test.bai:md5,38b99c5f771895ecf5324c3186b9d452" + ] + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.0" + }, + "timestamp": "2024-02-13T15:21:36.09642" + }, + "versions": { + "content": [ + [ + "versions.yml:md5,c58bf16c6e3786cc4d17bb7249f9ffe5" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.0" + }, + "timestamp": "2024-02-13T15:21:08.710549" + }, + "multi test.metrics": { + "content": [ + "test.bam.metrics" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.0" + }, + "timestamp": "2023-12-12T17:43:11.732892667" + }, + "bai": { + "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "test.bai:md5,26001bcdbce12e9f07557d8f7b8d360e" + ] + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.0" + }, + "timestamp": "2023-12-12T17:42:39.651888758" + }, + "multi cram versions": { + "content": [ + [ + "versions.yml:md5,c58bf16c6e3786cc4d17bb7249f9ffe5" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.0" + }, + "timestamp": "2024-02-13T15:21:56.966376" + }, + "multi versions": { + "content": [ + [ + "versions.yml:md5,c58bf16c6e3786cc4d17bb7249f9ffe5" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.0" + }, + "timestamp": "2024-02-13T15:21:36.138095" + }, + "multi cram test.metrics": { + "content": [ + "test.cram.metrics" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.0" + }, + "timestamp": "2023-12-12T17:43:37.798977444" + }, + "multi cram": { + "content": [ + "test.cram" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.0" + }, + "timestamp": "2023-12-12T17:43:37.771137858" + }, + "bam": { + "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "test.bam:md5,75d914ba8804eaf2acf02ab432197ec9" + ] + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.0" + }, + "timestamp": "2024-02-13T15:21:08.645892" + }, + "test.metrics": { + "content": [ + "test.bam.metrics" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.0" + }, + "timestamp": "2023-12-12T17:42:39.672508385" + } +} \ No newline at end of file diff --git a/modules/nf-core/gatk4/markduplicates/tests/tags.yml b/modules/nf-core/gatk4/markduplicates/tests/tags.yml new file mode 100644 index 0000000..8632e32 --- /dev/null +++ b/modules/nf-core/gatk4/markduplicates/tests/tags.yml @@ -0,0 +1,2 @@ +gatk4/markduplicates: + - "modules/nf-core/gatk4/markduplicates/**" diff --git a/modules/nf-core/gatk4/selectvariants/environment.yml b/modules/nf-core/gatk4/selectvariants/environment.yml new file mode 100644 index 0000000..55993f4 --- /dev/null +++ b/modules/nf-core/gatk4/selectvariants/environment.yml @@ -0,0 +1,5 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::gatk4=4.5.0.0 diff --git a/modules/nf-core/gatk4/selectvariants/main.nf b/modules/nf-core/gatk4/selectvariants/main.nf new file mode 100644 index 0000000..c342ee9 --- /dev/null +++ b/modules/nf-core/gatk4/selectvariants/main.nf @@ -0,0 +1,58 @@ +process GATK4_SELECTVARIANTS { + tag "$meta.id" + label 'process_medium' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/gatk4:4.5.0.0--py36hdfd78af_0': + 'biocontainers/gatk4:4.5.0.0--py36hdfd78af_0' }" + + input: + tuple val(meta), path(vcf), path(vcf_idx), path (intervals) + + output: + tuple val(meta), path("*.vcf.gz") , emit: vcf + tuple val(meta), path("*.vcf.gz.tbi") , emit: tbi + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def interval = intervals ? "--intervals ${intervals}" : "" + + def avail_mem = 3072 + if (!task.memory) { + log.info '[GATK SelectVariants] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.' + } else { + avail_mem = (task.memory.mega*0.8).intValue() + } + """ + gatk --java-options "-Xmx${avail_mem}M -XX:-UsePerfData" \\ + SelectVariants \\ + --variant $vcf \\ + --output ${prefix}.vcf.gz \\ + $interval \\ + --tmp-dir . \\ + $args + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + gatk4: \$(echo \$(gatk --version 2>&1) | sed 's/^.*(GATK) v//; s/ .*\$//') + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.vcf.gz + touch ${prefix}.vcf.gz.tbi + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + gatk4: \$(echo \$(gatk --version 2>&1) | sed 's/^.*(GATK) v//; s/ .*\$//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/gatk4/selectvariants/meta.yml b/modules/nf-core/gatk4/selectvariants/meta.yml new file mode 100644 index 0000000..5fd9c6f --- /dev/null +++ b/modules/nf-core/gatk4/selectvariants/meta.yml @@ -0,0 +1,68 @@ +name: gatk4_selectvariants +description: Select a subset of variants from a VCF file +keywords: + - gatk4 + - selectvariants + - vcf +tools: + - gatk4: + description: | + Developed in the Data Sciences Platform at the Broad Institute, the toolkit offers a wide variety of tools + with a primary focus on variant discovery and genotyping. Its powerful processing engine + and high-performance computing features make it capable of taking on projects of any size. + homepage: https://gatk.broadinstitute.org/hc/en-us + documentation: https://gatk.broadinstitute.org/hc/en-us/articles/360036362532-SelectVariants + tool_dev_url: https://github.com/broadinstitute/gatk + doi: 10.1158/1538-7445.AM2017-3590 + licence: ["Apache-2.0"] + identifier: "" +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test'] + - vcf: + type: list + description: VCF(.gz) file + pattern: "*.{vcf,vcf.gz}" + - vcf_idx: + type: list + description: VCF file index + pattern: "*.{idx,tbi}" + - intervals: + type: file + description: One or more genomic intervals over which to operate + pattern: ".intervals" +output: + - vcf: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.vcf.gz": + type: file + description: Compressed VCF file + pattern: "*.selectvariants.vcf.gz" + - tbi: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.vcf.gz.tbi": + type: file + description: Tabix index file + pattern: "*.vcf.gz.tbi" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@mjcipriano" + - "@ramprasadn" +maintainers: + - "@mjcipriano" + - "@ramprasadn" diff --git a/modules/nf-core/gatk4/selectvariants/tests/main.nf.test b/modules/nf-core/gatk4/selectvariants/tests/main.nf.test new file mode 100644 index 0000000..d8a97d2 --- /dev/null +++ b/modules/nf-core/gatk4/selectvariants/tests/main.nf.test @@ -0,0 +1,64 @@ +nextflow_process { + + name "Test Process GATK4_SELECTVARIANTS" + script "modules/nf-core/gatk4/selectvariants/main.nf" + process "GATK4_SELECTVARIANTS" + tag "modules" + tag "modules_nfcore" + tag "gatk4" + tag "gatk4/selectvariants" + + test("selectvariants - vcf input") { + + when { + params { + // define parameters here. Example: + // outdir = "tests/results" + } + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test.genome.vcf', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test.genome.vcf.idx', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.interval_list', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + {assert process.success}, + {assert path(process.out.vcf.get(0).get(1)).linesGzip.contains("##fileformat=VCFv4.2")} + ) + } + + + } + + test("selectvariants - gz input") { + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test.genome.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test.genome.vcf.gz.tbi', checkIfExists: true), + [] + ] + """ + } + } + + then { + assertAll( + {assert process.success}, + {assert path(process.out.vcf.get(0).get(1)).linesGzip.contains("##fileformat=VCFv4.2")} + ) + } + + } + +} diff --git a/modules/nf-core/gatk4/selectvariants/tests/tags.yml b/modules/nf-core/gatk4/selectvariants/tests/tags.yml new file mode 100644 index 0000000..d9fb50f --- /dev/null +++ b/modules/nf-core/gatk4/selectvariants/tests/tags.yml @@ -0,0 +1,2 @@ +gatk4/selectvariants: + - "modules/nf-core/gatk4/selectvariants/**" diff --git a/modules/nf-core/gatk4/variantrecalibrator/environment.yml b/modules/nf-core/gatk4/variantrecalibrator/environment.yml new file mode 100644 index 0000000..55993f4 --- /dev/null +++ b/modules/nf-core/gatk4/variantrecalibrator/environment.yml @@ -0,0 +1,5 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::gatk4=4.5.0.0 diff --git a/modules/nf-core/gatk4/variantrecalibrator/main.nf b/modules/nf-core/gatk4/variantrecalibrator/main.nf new file mode 100644 index 0000000..24844ce --- /dev/null +++ b/modules/nf-core/gatk4/variantrecalibrator/main.nf @@ -0,0 +1,71 @@ +process GATK4_VARIANTRECALIBRATOR { + tag "$meta.id" + label 'process_low' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/gatk4:4.5.0.0--py36hdfd78af_0': + 'biocontainers/gatk4:4.5.0.0--py36hdfd78af_0' }" + + input: + tuple val(meta), path(vcf), path(tbi) // input vcf and tbi of variants to recalibrate + path resource_vcf // resource vcf + path resource_tbi // resource tbi + val labels // string (or list of strings) containing dedicated resource labels already formatted with '--resource:' tag + path fasta + path fai + path dict + + output: + tuple val(meta), path("*.recal") , emit: recal + tuple val(meta), path("*.idx") , emit: idx + tuple val(meta), path("*.tranches"), emit: tranches + tuple val(meta), path("*plots.R") , emit: plots, optional:true + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def reference_command = fasta ? "--reference $fasta " : '' + def labels_command = labels.join(' ') + + def avail_mem = 3072 + if (!task.memory) { + log.info '[GATK VariantRecalibrator] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.' + } else { + avail_mem = (task.memory.mega*0.8).intValue() + } + """ + gatk --java-options "-Xmx${avail_mem}M -XX:-UsePerfData" \\ + VariantRecalibrator \\ + --variant $vcf \\ + --output ${prefix}.recal \\ + --tranches-file ${prefix}.tranches \\ + $reference_command \\ + --tmp-dir . \\ + $labels_command \\ + $args + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + gatk4: \$(echo \$(gatk --version 2>&1) | sed 's/^.*(GATK) v//; s/ .*\$//') + END_VERSIONS + """ + + stub: + prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.recal + touch ${prefix}.idx + touch ${prefix}.tranches + touch ${prefix}plots.R + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + gatk4: \$(echo \$(gatk --version 2>&1) | sed 's/^.*(GATK) v//; s/ .*\$//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/gatk4/variantrecalibrator/meta.yml b/modules/nf-core/gatk4/variantrecalibrator/meta.yml new file mode 100644 index 0000000..72fcfd6 --- /dev/null +++ b/modules/nf-core/gatk4/variantrecalibrator/meta.yml @@ -0,0 +1,112 @@ +name: gatk4_variantrecalibrator +description: | + Build a recalibration model to score variant quality for filtering purposes. + It is highly recommended to follow GATK best practices when using this module, + the gaussian mixture model requires a large number of samples to be used for the + tool to produce optimal results. For example, 30 samples for exome data. For more details see + https://gatk.broadinstitute.org/hc/en-us/articles/4402736812443-Which-training-sets-arguments-should-I-use-for-running-VQSR- +keywords: + - gatk4 + - recalibration model + - variantrecalibrator +tools: + - gatk4: + description: | + Developed in the Data Sciences Platform at the Broad Institute, the toolkit offers a wide variety of tools + with a primary focus on variant discovery and genotyping. Its powerful processing engine + and high-performance computing features make it capable of taking on projects of any size. + homepage: https://gatk.broadinstitute.org/hc/en-us + documentation: https://gatk.broadinstitute.org/hc/en-us/categories/360002369672s + doi: 10.1158/1538-7445.AM2017-3590 + identifier: "" +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test' ] + - vcf: + type: file + description: input vcf file containing the variants to be recalibrated + pattern: "*.vcf.gz" + - tbi: + type: file + description: tbi file matching with -vcf + pattern: "*.vcf.gz.tbi" + - - resource_vcf: + type: file + description: all resource vcf files that are used with the corresponding '--resource' + label + pattern: "*.vcf.gz" + - - resource_tbi: + type: file + description: all resource tbi files that are used with the corresponding '--resource' + label + pattern: "*.vcf.gz.tbi" + - - labels: + type: string + description: necessary arguments for GATK VariantRecalibrator. Specified to + directly match the resources provided. More information can be found at + https://gatk.broadinstitute.org/hc/en-us/articles/5358906115227-VariantRecalibrator + - - fasta: + type: file + description: The reference fasta file + pattern: "*.fasta" + - - fai: + type: file + description: Index of reference fasta file + pattern: "fasta.fai" + - - dict: + type: file + description: GATK sequence dictionary + pattern: "*.dict" +output: + - recal: + - meta: + type: file + description: Output recal file used by ApplyVQSR + pattern: "*.recal" + - "*.recal": + type: file + description: Output recal file used by ApplyVQSR + pattern: "*.recal" + - idx: + - meta: + type: file + description: Index file for the recal output file + pattern: "*.idx" + - "*.idx": + type: file + description: Index file for the recal output file + pattern: "*.idx" + - tranches: + - meta: + type: file + description: Output tranches file used by ApplyVQSR + pattern: "*.tranches" + - "*.tranches": + type: file + description: Output tranches file used by ApplyVQSR + pattern: "*.tranches" + - plots: + - meta: + type: file + description: Optional output rscript file to aid in visualization of the input + data and learned model. + pattern: "*plots.R" + - "*plots.R": + type: file + description: Optional output rscript file to aid in visualization of the input + data and learned model. + pattern: "*plots.R" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@GCJMackenzie" + - "@nickhsmith" +maintainers: + - "@GCJMackenzie" + - "@nickhsmith" diff --git a/modules/nf-core/gatk4/variantstotable/environment.yml b/modules/nf-core/gatk4/variantstotable/environment.yml new file mode 100644 index 0000000..aa7d804 --- /dev/null +++ b/modules/nf-core/gatk4/variantstotable/environment.yml @@ -0,0 +1,6 @@ +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::gatk4=4.5.0.0 diff --git a/modules/nf-core/gatk4/variantstotable/main.nf b/modules/nf-core/gatk4/variantstotable/main.nf new file mode 100644 index 0000000..5a189be --- /dev/null +++ b/modules/nf-core/gatk4/variantstotable/main.nf @@ -0,0 +1,63 @@ +process GATK4_VARIANTSTOTABLE { + tag "$meta.id" + label 'process_medium' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/gatk4:4.5.0.0--py36hdfd78af_0': + 'biocontainers/gatk4:4.5.0.0--py36hdfd78af_0' }" + + input: + tuple val(meta), path(vcf), path(tbi), path(arguments_file), path(include_intervals), path(exclude_intervals) + tuple val(meta2), path(fasta) + tuple val(meta3), path(fai) + tuple val(meta4), path(dict) + + output: + tuple val(meta), path("*.tsv"), emit: table + path "versions.yml", emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?:'' + def prefix = task.ext.prefix ?: "${meta.id}" + def arguments_file_arg = arguments_file ? "--arguments_file ${arguments_file}" : "" + def include_intervals_arg = include_intervals ? "-L ${include_intervals}" : "" + def exclude_intervals_arg = exclude_intervals ? "-XL ${exclude_intervals}" : "" + + def avail_mem = 3072 + if (!task.memory) { + log.info '[GATK VariantsToTable] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.' + } else { + avail_mem = (task.memory.mega*0.8).intValue() + } + """ + gatk --java-options "-Xmx${avail_mem}M -XX:-UsePerfData" \\ + VariantsToTable \\ + ${args} \\ + --variant $vcf \\ + --output ${prefix}.tsv \\ + --reference $fasta \\ + --tmp-dir . \\ + $arguments_file_arg \\ + $include_intervals \\ + $exclude_intervals + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + gatk4: \$(echo \$(gatk --version 2>&1) | sed 's/^.*(GATK) v//; s/ .*\$//') + END_VERSIONS + """ + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.tsv + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + gatk4: \$(echo \$(gatk --version 2>&1) | sed 's/^.*(GATK) v//; s/ .*\$//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/gatk4/variantstotable/meta.yml b/modules/nf-core/gatk4/variantstotable/meta.yml new file mode 100644 index 0000000..28ee570 --- /dev/null +++ b/modules/nf-core/gatk4/variantstotable/meta.yml @@ -0,0 +1,90 @@ +name: gatk4_variantstotable +description: Extract fields from a VCF file to a tab-delimited table +keywords: + - filter + - gatk4 + - table + - vcf +tools: + - gatk4: + description: | + Developed in the Data Sciences Platform at the Broad Institute, the toolkit offers a wide variety of tools + with a primary focus on variant discovery and genotyping. Its powerful processing engine + and high-performance computing features make it capable of taking on projects of any size. + homepage: https://gatk.broadinstitute.org/hc/en-us + documentation: https://gatk.broadinstitute.org/hc/en-us/categories/360002369672s + doi: 10.1158/1538-7445.AM2017-3590 + licence: ["Apache-2.0"] + identifier: "" +input: + - - meta: + type: map + description: | + Groovy Map containing VCF information. Attribute `gatk_args` can be used to add arguments to gatk. + e.g. [ id:'test', gatk_args:'-F CHROM -F POS -F TYPE -GF AD'] + - vcf: + type: file + description: VCF file + pattern: "*.{vcf,vcf.gz}" + - tbi: + type: file + description: Index of VCF file. + pattern: "*.{idx,tbi}" + - arguments_file: + type: file + description: "optional GATK arguments file" + pattern: "*.{txt,list,args,arguments}" + - include_intervals: + type: file + description: "optional GATK region file" + pattern: "*.{bed,bed.gz,interval,interval_list}" + - exclude_intervals: + type: file + description: "optional GATK exclude region file" + pattern: "*.{bed,bed.gz,interval,interval_list}" + - - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - fasta: + type: file + description: Fasta file of reference genome + pattern: "*.fasta" + - - meta3: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - fai: + type: file + description: Index of fasta file + pattern: "*.fasta.fai" + - - meta4: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - dict: + type: file + description: Sequence dictionary of fastea file + pattern: "*.dict" +output: + - table: + - meta: + type: file + description: GATK output + pattern: "*.tsv" + - "*.tsv": + type: file + description: GATK output + pattern: "*.tsv" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@lindenb" +maintainers: + - "@lindenb" diff --git a/modules/nf-core/gatk4/variantstotable/tests/main.nf.test b/modules/nf-core/gatk4/variantstotable/tests/main.nf.test new file mode 100644 index 0000000..e6eb820 --- /dev/null +++ b/modules/nf-core/gatk4/variantstotable/tests/main.nf.test @@ -0,0 +1,91 @@ +nextflow_process { + + name "Test Process GATK4_VARIANTSTOTABLE" + script "../main.nf" + process "GATK4_VARIANTSTOTABLE" + config './nextflow.config' + + tag "modules" + tag "modules_nfcore" + tag "gatk4" + tag "gatk4/variantstotable" + + test("test1_gatk4_variant_to_table") { + + when { + process { + """ + input[0] = [ + [ id:'test'], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test.genome.vcf', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test.genome.vcf.idx', checkIfExists: true), + [], + [], + [] + ] + input[1] = [ + [ id:'genome' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ] + input[2] = [ + [ id:'genome' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) + ] + input[3] = [ + [ id:'genome' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.dict', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + + test("test1_gatk4_variant_to_table - stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'test'], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test.genome.vcf', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test.genome.vcf.idx', checkIfExists: true), + [], + [], + [] + ] + input[1] = [ + [ id:'genome' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ] + input[2] = [ + [ id:'genome' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) + ] + input[3] = [ + [ id:'genome' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.dict', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + +} diff --git a/modules/nf-core/gatk4/variantstotable/tests/main.nf.test.snap b/modules/nf-core/gatk4/variantstotable/tests/main.nf.test.snap new file mode 100644 index 0000000..6560ddd --- /dev/null +++ b/modules/nf-core/gatk4/variantstotable/tests/main.nf.test.snap @@ -0,0 +1,69 @@ +{ + "test1_gatk4_variant_to_table": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.tsv:md5,fd8256465233e335beb509b0a8b43536" + ] + ], + "1": [ + "versions.yml:md5,82324614419a32fa266b86ad8d4e6daa" + ], + "table": [ + [ + { + "id": "test" + }, + "test.tsv:md5,fd8256465233e335beb509b0a8b43536" + ] + ], + "versions": [ + "versions.yml:md5,82324614419a32fa266b86ad8d4e6daa" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.2" + }, + "timestamp": "2024-05-22T22:43:27.609784" + }, + + "test1_gatk4_variant_to_table - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + "versions.yml:md5,82324614419a32fa266b86ad8d4e6daa" + ], + "table": [ + [ + { + "id": "test" + }, + "test.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,82324614419a32fa266b86ad8d4e6daa" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.2" + }, + "timestamp": "2024-05-22T22:43:27.609784" + } +} diff --git a/modules/nf-core/gatk4/variantstotable/tests/nextflow.config b/modules/nf-core/gatk4/variantstotable/tests/nextflow.config new file mode 100644 index 0000000..0c5fde3 --- /dev/null +++ b/modules/nf-core/gatk4/variantstotable/tests/nextflow.config @@ -0,0 +1,6 @@ +process { + + withName: GATK4_VARIANTSTOTABLE { + ext.args = "-F CHROM -F POS -F TYPE -GF AD" + } +} diff --git a/modules/nf-core/gatk4/variantstotable/tests/tags.yml b/modules/nf-core/gatk4/variantstotable/tests/tags.yml new file mode 100644 index 0000000..1f2c45b --- /dev/null +++ b/modules/nf-core/gatk4/variantstotable/tests/tags.yml @@ -0,0 +1,2 @@ +gatk4/variantstotable: + - "modules/nf-core/gatk4/variantstotable/**" diff --git a/modules/nf-core/iqtree/environment.yml b/modules/nf-core/iqtree/environment.yml new file mode 100644 index 0000000..702c050 --- /dev/null +++ b/modules/nf-core/iqtree/environment.yml @@ -0,0 +1,5 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::iqtree=2.3.4 diff --git a/modules/nf-core/iqtree/main.nf b/modules/nf-core/iqtree/main.nf new file mode 100644 index 0000000..75f6ac7 --- /dev/null +++ b/modules/nf-core/iqtree/main.nf @@ -0,0 +1,131 @@ +process IQTREE { + tag "$meta.id" + label 'process_medium' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/iqtree:2.3.4--h21ec9f0_0' : + 'biocontainers/iqtree:2.3.4--h21ec9f0_0' }" + + input: + tuple val(meta), path(alignment), path(tree) + path(tree_te) + path(lmclust) + path(mdef) + path(partitions_equal) + path(partitions_proportional) + path(partitions_unlinked) + path(guide_tree) + path(sitefreq_in) + path(constraint_tree) + path(trees_z) + path(suptree) + path(trees_rf) + + output: + tuple val(meta), path("*.treefile") , emit: phylogeny , optional: true + tuple val(meta), path("*.iqtree") , emit: report , optional: true + tuple val(meta), path("*.mldist") , emit: mldist , optional: true + tuple val(meta), path("*.lmap.svg") , emit: lmap_svg , optional: true + tuple val(meta), path("*.lmap.eps") , emit: lmap_eps , optional: true + tuple val(meta), path("*.lmap.quartetlh"), emit: lmap_quartetlh, optional: true + tuple val(meta), path("*.sitefreq") , emit: sitefreq_out , optional: true + tuple val(meta), path("*.ufboot") , emit: bootstrap , optional: true + tuple val(meta), path("*.state") , emit: state , optional: true + tuple val(meta), path("*.contree") , emit: contree , optional: true + tuple val(meta), path("*.nex") , emit: nex , optional: true + tuple val(meta), path("*.splits") , emit: splits , optional: true + tuple val(meta), path("*.suptree") , emit: suptree , optional: true + tuple val(meta), path("*.alninfo") , emit: alninfo , optional: true + tuple val(meta), path("*.partlh") , emit: partlh , optional: true + tuple val(meta), path("*.siteprob") , emit: siteprob , optional: true + tuple val(meta), path("*.sitelh") , emit: sitelh , optional: true + tuple val(meta), path("*.treels") , emit: treels , optional: true + tuple val(meta), path("*.rate ") , emit: rate , optional: true + tuple val(meta), path("*.mlrate") , emit: mlrate , optional: true + tuple val(meta), path("GTRPMIX.nex") , emit: exch_matrix , optional: true + tuple val(meta), path("*.log") , emit: log + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def alignment_arg = alignment ? "-s $alignment" : '' + def tree_arg = tree ? "-t $tree" : '' + def tree_te_arg = tree_te ? "-te $tree_te" : '' + def lmclust_arg = lmclust ? "-lmclust $lmclust" : '' + def mdef_arg = mdef ? "-mdef $mdef" : '' + def partitions_equal_arg = partitions_equal ? "-q $partitions_equal" : '' + def partitions_proportional_arg = partitions_proportional ? "-spp $partitions_proportional" : '' + def partitions_unlinked_arg = partitions_unlinked ? "-sp $partitions_unlinked" : '' + def guide_tree_arg = guide_tree ? "-ft $guide_tree" : '' + def sitefreq_in_arg = sitefreq_in ? "-fs $sitefreq_in" : '' + def constraint_tree_arg = constraint_tree ? "-g $constraint_tree" : '' + def trees_z_arg = trees_z ? "-z $trees_z" : '' + def suptree_arg = suptree ? "-sup $suptree" : '' + def trees_rf_arg = trees_rf ? "-rf $trees_rf" : '' + def prefix = task.ext.prefix ?: meta.id + def memory = task.memory.toString().replaceAll(' ', '') + """ + iqtree \\ + $args \\ + $alignment_arg \\ + $tree_arg \\ + $tree_te_arg \\ + $lmclust_arg \\ + $mdef_arg \\ + $partitions_equal_arg \\ + $partitions_proportional_arg \\ + $partitions_unlinked_arg \\ + $guide_tree_arg \\ + $sitefreq_in_arg \\ + $constraint_tree_arg \\ + $trees_z_arg \\ + $suptree_arg \\ + $trees_rf\\ + -pre $prefix \\ + -nt AUTO \\ + -ntmax $task.cpus \\ + -mem $memory \\ + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + iqtree: \$(echo \$(iqtree -version 2>&1) | sed 's/^IQ-TREE multicore version //;s/ .*//') + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: meta.id + """ + touch "${prefix}.treefile" + touch "${prefix}.iqtree" + touch "${prefix}.mldist" + touch "${prefix}.lmap.svg" + touch "${prefix}.lmap.eps" + touch "${prefix}.lmap.quartetlh" + touch "${prefix}.sitefreq" + touch "${prefix}.ufboot" + touch "${prefix}.state" + touch "${prefix}.contree" + touch "${prefix}.nex" + touch "${prefix}.splits" + touch "${prefix}.suptree" + touch "${prefix}.alninfo" + touch "${prefix}.partlh" + touch "${prefix}.siteprob" + touch "${prefix}.sitelh" + touch "${prefix}.treels" + touch "${prefix}.rate" + touch "${prefix}.mlrate" + touch "GTRPMIX.nex" + touch "${prefix}.log" + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + iqtree: \$(echo \$(iqtree -version 2>&1) | sed 's/^IQ-TREE multicore version //;s/ .*//') + END_VERSIONS + """ + +} diff --git a/modules/nf-core/iqtree/meta.yml b/modules/nf-core/iqtree/meta.yml new file mode 100644 index 0000000..b20bdd8 --- /dev/null +++ b/modules/nf-core/iqtree/meta.yml @@ -0,0 +1,358 @@ +name: iqtree +description: Produces a Newick format phylogeny from a multiple sequence alignment + using the maxium likelihood algorithm. Capable of bacterial genome size alignments. +keywords: + - phylogeny + - newick + - maximum likelihood +tools: + - iqtree: + description: Efficient phylogenomic software by maximum likelihood. + homepage: http://www.iqtree.org + documentation: http://www.iqtree.org/doc + tool_dev_url: https://github.com/iqtree/iqtree2 + doi: 10.1093/molbev/msaa015 + licence: ["GPL v2-or-later"] + identifier: biotools:iqtree +input: + - - meta: + type: map + description: | + Groovy map containing sample information for the + alignment/tree file, e.g. [ id: 'test' ] + - alignment: + type: file + description: Input alignment file in PHYLIP, FASTA, NEXUS, CLUSTAL or MSF format + (-s) + pattern: "*.{fasta,fas,fa,mfa,phy,aln,nex,nexus,msf}" + - tree: + type: file + description: "File containing one or multiple phylogenetic trees (-t): - Single + tree used e.g. as starting tree for tree search - Set of trees used e.g. for + distance computation, consensus tree construction" + pattern: "*.{tre,tree,treefile,newick,nwk,nex,nexus}" + - - tree_te: + type: file + description: "File containing single phylogenetic tree (-te) Use cases: - fixed + user tree to skip tree search - ancestral sequence reconstruction" + pattern: "*.{tre,tree,treefile,newick,nwk,nex,nexus}" + - - lmclust: + type: file + description: NEXUS file containing taxon clusters for quartet mapping analysis + (-lmclust) + pattern: "*.nex{us}" + - - mdef: + type: file + description: NEXUS model file defining new models (-mdef) + pattern: "*.nex{us}" + - - partitions_equal: + type: file + description: Partition file for edge-equal partition model, all partitions share + same set of branch lengths (-q) + pattern: "*.{nex,nexus,tre,tree,treefile}" + - - partitions_proportional: + type: file + description: Partition file for edge-equal partition model, all partitions share + same set of branch lengths (-spp) + pattern: "*.{nex,nexus,tre,tree,treefile}" + - - partitions_unlinked: + type: file + description: Partition file for edge-equal partition model, all partitions share + same set of branch lengths (-sp) + pattern: "*.{nex,nexus,tre,tree,treefile}" + - - guide_tree: + type: file + description: File containing guide tree for inference of site frequency profiles + (-ft) + pattern: "*.{nex,nexus,tre,tree,treefile}" + - - sitefreq_in: + type: file + description: Site frequency file (-fs) + pattern: "*.sitefreq" + - - constraint_tree: + type: file + description: File containing opological constraint tree in NEWICK format. The + constraint tree can be a multifurcating tree and need not to include all taxa. + (-g) + pattern: "*.{nwk,newick}" + - - trees_z: + type: file + description: File containing a set of trees for which log-likelihoods should + be computed (-z) + - - suptree: + type: file + description: File containing input “target” tree, support values are extracted + from trees passed via -t, and mapped onto the target tree (-sup) + - - trees_rf: + type: file + description: "File containing a second tree set (-rf). Used for computing the + distance to the primary tree set (`tree`)" + pattern: "*.{tre,tree,treefile,newick,nwk,nex,nexus}" +output: + - phylogeny: + - meta: + type: file + description: A phylogeny in Newick format + pattern: "*.{treefile}" + - "*.treefile": + type: file + description: A phylogeny in Newick format + pattern: "*.{treefile}" + - report: + - meta: + type: file + description: | + Main report file containing computational + results as well as a textual visualization + of the final tree + pattern: "*.{iqtree}" + - "*.iqtree": + type: file + description: | + Main report file containing computational + results as well as a textual visualization + of the final tree + pattern: "*.{iqtree}" + - mldist: + - meta: + type: file + description: | + File containing the pairwise maximum + likelihood distances as a matrix + pattern: "*.{mldist}" + - "*.mldist": + type: file + description: | + File containing the pairwise maximum + likelihood distances as a matrix + pattern: "*.{mldist}" + - lmap_svg: + - meta: + type: file + description: | + File containing likelihood mapping analysis + results in .svg format (-lmap/-lmclust) + pattern: "*.lmap.svg" + - "*.lmap.svg": + type: file + description: | + File containing likelihood mapping analysis + results in .svg format (-lmap/-lmclust) + pattern: "*.lmap.svg" + - lmap_eps: + - meta: + type: file + description: | + File containing likelihood mapping analysis + results in .eps format (-lmap/-lmclust) + pattern: "*.lmap.eps" + - "*.lmap.eps": + type: file + description: | + File containing likelihood mapping analysis + results in .eps format (-lmap/-lmclust) + pattern: "*.lmap.eps" + - lmap_quartetlh: + - meta: + type: file + description: | + File containing quartet log-likelihoods (-wql) + pattern: "*.lmap.quartetlh" + - "*.lmap.quartetlh": + type: file + description: | + File containing quartet log-likelihoods (-wql) + pattern: "*.lmap.quartetlh" + - sitefreq_out: + - meta: + type: file + description: | + File containing site frequency profiles (-ft) + pattern: "*.sitefreq" + - "*.sitefreq": + type: file + description: | + File containing site frequency profiles (-ft) + pattern: "*.sitefreq" + - bootstrap: + - meta: + type: file + description: | + File containing all bootstrap trees (-wbt/-wbtl) + pattern: "*.ufboot" + - "*.ufboot": + type: file + description: | + File containing all bootstrap trees (-wbt/-wbtl) + pattern: "*.ufboot" + - state: + - meta: + type: file + description: | + File containing ancestral sequences for all + nodes of the tree by empirical Bayesian method (-asr) + pattern: "*.{state}" + - "*.state": + type: file + description: | + File containing ancestral sequences for all + nodes of the tree by empirical Bayesian method (-asr) + pattern: "*.{state}" + - contree: + - meta: + type: file + description: | + File containing consensus tree (-con/-bb) + pattern: "*.{contree}" + - "*.contree": + type: file + description: | + File containing consensus tree (-con/-bb) + pattern: "*.{contree}" + - nex: + - meta: + type: file + description: | + File containing consensus network (-net/-bb) + pattern: "*.{nex}" + - "*.nex": + type: file + description: | + File containing consensus network (-net/-bb) + pattern: "*.{nex}" + - splits: + - meta: + type: file + description: | + File containing consensus network in star-dot format (-wsplits) + pattern: "*.{splits}" + - "*.splits": + type: file + description: | + File containing consensus network in star-dot format (-wsplits) + pattern: "*.{splits}" + - suptree: + - meta: + type: file + description: | + File containing tree with assigned support + values based on supplied "target" tree (-sup) + pattern: "*.{suptree}" + - "*.suptree": + type: file + description: | + File containing tree with assigned support + values based on supplied "target" tree (-sup) + pattern: "*.{suptree}" + - alninfo: + - meta: + type: file + description: | + File containing alignment site statistics (-alninfo) + pattern: "*.{alninfo}" + - "*.alninfo": + type: file + description: | + File containing alignment site statistics (-alninfo) + pattern: "*.{alninfo}" + - partlh: + - meta: + type: file + description: | + File containing partition log-likelihoods (-wpl) + pattern: "*.{partlh}" + - "*.partlh": + type: file + description: | + File containing partition log-likelihoods (-wpl) + pattern: "*.{partlh}" + - siteprob: + - meta: + type: file + description: | + File containing site posterior probabilities (-wspr/-wspm/-wspmr) + pattern: "*.{siteprob}" + - "*.siteprob": + type: file + description: | + File containing site posterior probabilities (-wspr/-wspm/-wspmr) + pattern: "*.{siteprob}" + - sitelh: + - meta: + type: file + description: | + File containing site log-likelihoods (-wsl/-wslr/-wslm/-wslmr) + pattern: "*.{sitelh}" + - "*.sitelh": + type: file + description: | + File containing site log-likelihoods (-wsl/-wslr/-wslm/-wslmr) + pattern: "*.{sitelh}" + - treels: + - meta: + type: file + description: | + File containing all locally optimal trees (-wt) + pattern: "*.{treels}" + - "*.treels": + type: file + description: | + File containing all locally optimal trees (-wt) + pattern: "*.{treels}" + - rate: + - meta: + type: file + description: | + File containing inferred site-specific + evolutionary rates (-wsr) + pattern: "*.{rate}" + - "*.rate ": + type: file + description: | + File containing inferred site-specific + evolutionary rates (-wsr) + pattern: "*.{rate}" + - mlrate: + - meta: + type: file + description: | + File containing site-specific subtitution + rates determined by maximum likelihood (--mlrate) + pattern: "*.{mlrate}" + - "*.mlrate": + type: file + description: | + File containing site-specific subtitution + rates determined by maximum likelihood (--mlrate) + pattern: "*.{mlrate}" + - exch_matrix: + - meta: + type: file + description: File containing the exchangeability matrix obtained from the optimization + (--link-exchange-rates) + pattern: "GTRPMIX.nex" + - GTRPMIX.nex: + type: file + description: File containing the exchangeability matrix obtained from the optimization + (--link-exchange-rates) + pattern: "GTRPMIX.nex" + - log: + - meta: + type: file + description: Log file of entire run + pattern: "*.{log}" + - "*.log": + type: file + description: Log file of entire run + pattern: "*.{log}" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@avantonder" + - "@aunderwo" +maintainers: + - "@avantonder" + - "@aunderwo" diff --git a/modules/nf-core/iqtree/tests/iqtree_bootstrap.config b/modules/nf-core/iqtree/tests/iqtree_bootstrap.config new file mode 100644 index 0000000..28cc662 --- /dev/null +++ b/modules/nf-core/iqtree/tests/iqtree_bootstrap.config @@ -0,0 +1,5 @@ +process { + withName: "IQTREE" { + ext.args = "-bb 1000 -wbt -wsplits -m LG" + } +} diff --git a/modules/nf-core/iqtree/tests/iqtree_optional.config b/modules/nf-core/iqtree/tests/iqtree_optional.config new file mode 100644 index 0000000..104861f --- /dev/null +++ b/modules/nf-core/iqtree/tests/iqtree_optional.config @@ -0,0 +1,5 @@ +process { + withName: "IQTREE" { + ext.args = "-m C10 -asr -alninfo -wpl -wspr -wsl -wsr --mlrate -lmap 150 -wql --mlrate" + } +} diff --git a/modules/nf-core/iqtree/tests/iqtree_treels.config b/modules/nf-core/iqtree/tests/iqtree_treels.config new file mode 100644 index 0000000..adfe8fb --- /dev/null +++ b/modules/nf-core/iqtree/tests/iqtree_treels.config @@ -0,0 +1,5 @@ +process { + withName: "IQTREE" { + ext.args = "-m LG -wt" + } +} diff --git a/modules/nf-core/iqtree/tests/main.nf.test b/modules/nf-core/iqtree/tests/main.nf.test new file mode 100644 index 0000000..b5f2fb4 --- /dev/null +++ b/modules/nf-core/iqtree/tests/main.nf.test @@ -0,0 +1,323 @@ +nextflow_process { + + name "Test Process IQTREE" + script "../main.nf" + process "IQTREE" + + tag "modules" + tag "modules_nfcore" + tag "iqtree" + + test("setoxin - basic") { + + when { + process { + """ + input[0] = [ [ id: "test" ], + file("https://raw.githubusercontent.com/nf-core/test-datasets/multiplesequencealign/testdata/setoxin.ref", checkIfExists:true), + [] ] + input[1] = [] + input[2] = [] + input[3] = [] + input[4] = [] + input[5] = [] + input[6] = [] + input[7] = [] + input[8] = [] + input[9] = [] + input[10] = [] + input[11] = [] + input[12] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert path(process.out.phylogeny.get(0).get(1)).readLines().first().contains("1apf") }, + { assert process.out.lmap_svg == []}, + { assert process.out.lmap_eps == []}, + { assert process.out.lmap_quartetlh == []}, + { assert process.out.sitefreq_out == []}, + { assert process.out.bootstrap == []}, + { assert process.out.state == []}, + { assert process.out.contree == []}, + { assert process.out.nex == []}, + { assert process.out.splits == []}, + { assert process.out.suptree == []}, + { assert process.out.alninfo == []}, + { assert process.out.partlh == []}, + { assert process.out.siteprob == []}, + { assert process.out.sitelh == []}, + { assert process.out.treels == []}, + { assert process.out.rate == []}, + { assert process.out.mlrate == []}, + { assert process.out.exch_matrix == []}, + { assert snapshot( path(process.out.mldist.get(0).get(1)).readLines().first(), + path(process.out.report.get(0).get(1)).readLines().first(), + path(process.out.log.get(0).get(1)).readLines().first(), + process.out.versions ).match() } + ) + } + } + +test("setoxin - treels") { + + config "./iqtree_treels.config" + + when { + process { + """ + input[0] = [ [ id: "test" ], + file("https://raw.githubusercontent.com/nf-core/test-datasets/multiplesequencealign/testdata/setoxin.ref", checkIfExists:true), + [] ] + input[1] = [] + input[2] = [] + input[3] = [] + input[4] = [] + input[5] = [] + input[6] = [] + input[7] = [] + input[8] = [] + input[9] = [] + input[10] = [] + input[11] = [] + input[12] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert path(process.out.phylogeny.get(0).get(1)).readLines().first().contains("1apf") }, + { assert path(process.out.treels.get(0).get(1)).readLines().first().contains("1apf") }, + { assert process.out.lmap_svg == []}, + { assert process.out.lmap_eps == []}, + { assert process.out.lmap_quartetlh == []}, + { assert process.out.sitefreq_out == []}, + { assert process.out.bootstrap == []}, + { assert process.out.state == []}, + { assert process.out.contree == []}, + { assert process.out.nex == []}, + { assert process.out.splits == []}, + { assert process.out.suptree == []}, + { assert process.out.alninfo == []}, + { assert process.out.partlh == []}, + { assert process.out.siteprob == []}, + { assert process.out.sitelh == []}, + { assert process.out.rate == []}, + { assert process.out.mlrate == []}, + { assert process.out.exch_matrix == []}, + { assert snapshot( path(process.out.mldist.get(0).get(1)).readLines().first(), + path(process.out.report.get(0).get(1)).readLines().first(), + path(process.out.log.get(0).get(1)).readLines().first(), + process.out.versions ).match() } + ) + } + } + + + test("setoxin - bootstrap") { + + config "./iqtree_bootstrap.config" + + when { + process { + """ + input[0] = [ [ id: "test" ], + file("https://raw.githubusercontent.com/nf-core/test-datasets/multiplesequencealign/testdata/setoxin.ref", checkIfExists:true), + [] ] + input[1] = [] + input[2] = [] + input[3] = [] + input[4] = [] + input[5] = [] + input[6] = [] + input[7] = [] + input[8] = [] + input[9] = [] + input[10] = [] + input[11] = [] + input[12] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert path(process.out.phylogeny.get(0).get(1)).readLines().first().contains("1apf") }, + { assert path(process.out.bootstrap.get(0).get(1)).readLines().first().contains("1apf") }, + { assert path(process.out.contree.get(0).get(1)).readLines().first().contains("1apf") }, + { assert path(process.out.splits.get(0).get(1)).readLines().first().contains("*") }, + { assert process.out.lmap_svg == []}, + { assert process.out.lmap_eps == []}, + { assert process.out.lmap_quartetlh == []}, + { assert process.out.sitefreq_out == []}, + { assert process.out.state == []}, + { assert process.out.suptree == []}, + { assert process.out.alninfo == []}, + { assert process.out.partlh == []}, + { assert process.out.siteprob == []}, + { assert process.out.sitelh == []}, + { assert process.out.treels == []}, + { assert process.out.rate == []}, + { assert process.out.mlrate == []}, + { assert process.out.exch_matrix == []}, + { assert snapshot( path(process.out.nex.get(0).get(1)).readLines()[0..12], + path(process.out.mldist.get(0).get(1)).readLines().first(), + path(process.out.report.get(0).get(1)).readLines().first(), + path(process.out.log.get(0).get(1)).readLines().first(), + process.out.versions ).match() } + ) + } + } + + test("hydrogenase - sup") { + + when { + process { + """ + input[0] = [ [ id: "test" ], + [], + file("https://raw.githubusercontent.com/nf-core/test-datasets/phyloplace/testdata/PF14720_seed.ft.LGCAT.newick", checkIfExists:true)] + input[1] = [] + input[2] = [] + input[3] = [] + input[4] = [] + input[5] = [] + input[6] = [] + input[7] = [] + input[8] = [] + input[9] = [] + input[10] = [] + input[11] = Channel.of( + file("https://raw.githubusercontent.com/nf-core/test-datasets/phyloplace/testdata/PF14720_seed.ft.LGCAT.newick", checkIfExists:true) + .text) + .collectFile(name: 'hydrogenase.newick') + input[12] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert path(process.out.log.get(0).get(1)).readLines().first().contains("IQ-TREE") }, + { assert process.out.phylogeny == []}, + { assert process.out.report == []}, + { assert process.out.mldist == []}, + { assert process.out.lmap_svg == []}, + { assert process.out.lmap_eps == []}, + { assert process.out.lmap_quartetlh == []}, + { assert process.out.sitefreq_out == []}, + { assert process.out.bootstrap == []}, + { assert process.out.state == []}, + { assert process.out.contree == []}, + { assert process.out.nex == []}, + { assert process.out.splits == []}, + { assert process.out.alninfo == []}, + { assert process.out.partlh == []}, + { assert process.out.siteprob == []}, + { assert process.out.sitelh == []}, + { assert process.out.treels == []}, + { assert process.out.rate == []}, + { assert process.out.mlrate == []}, + { assert process.out.exch_matrix == []}, + { assert snapshot( path(process.out.log.get(0).get(1)).readLines().first(), + process.out.suptree, + process.out.versions ).match() } + ) + } + } + + test("hydrogenase - optional") { + + config "./iqtree_optional.config" + + when { + process { + """ + input[0] = [ [ id: "test" ], + file("https://raw.githubusercontent.com/nf-core/test-datasets/phyloplace/testdata/PF14720_seed.alnfaa", checkIfExists:true), + [] ] + input[1] = file("https://raw.githubusercontent.com/nf-core/test-datasets/phyloplace/testdata/PF14720_seed.ft.LGCAT.newick", checkIfExists:true) + input[2] = [] + input[3] = [] + input[4] = [] + input[5] = [] + input[6] = [] + input[7] = [] + input[8] = [] + input[9] = [] + input[10] = [] + input[11] = [] + input[12] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert path(process.out.phylogeny.get(0).get(1)).readLines().first().contains("E1QGS5_DESB2/226-309") }, + { assert process.out.mldist == []}, + { assert process.out.sitefreq_out == []}, + { assert process.out.bootstrap == []}, + { assert process.out.contree == []}, + { assert process.out.nex == []}, + { assert process.out.suptree == []}, + { assert process.out.partlh == []}, + { assert process.out.exch_matrix == []}, + { assert snapshot( path(process.out.lmap_eps.get(0).get(1)).readLines()[0..4], + path(process.out.lmap_svg.get(0).get(1)).readLines()[0..5], + path(process.out.lmap_quartetlh.get(0).get(1)).readLines().first(), + path(process.out.mlrate.get(0).get(1)).readLines()[0..5], + path(process.out.report.get(0).get(1)).readLines().first(), + path(process.out.log.get(0).get(1)).readLines().first(), + process.out.treels, + process.out.alninfo, + process.out.siteprob, + process.out.sitelh, + process.out.rate, + process.out.state, + process.out.splits, + process.out.versions ).match() } + ) + } + } + + test("stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ [ id: "test" ] , [], []] + input[1] = [] + input[2] = [] + input[3] = [] + input[4] = [] + input[5] = [] + input[6] = [] + input[7] = [] + input[8] = [] + input[9] = [] + input[10] = [] + input[11] = [] + input[12] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( process.out ).match() } + ) + } + } +} \ No newline at end of file diff --git a/modules/nf-core/iqtree/tests/main.nf.test.snap b/modules/nf-core/iqtree/tests/main.nf.test.snap new file mode 100644 index 0000000..723acaa --- /dev/null +++ b/modules/nf-core/iqtree/tests/main.nf.test.snap @@ -0,0 +1,527 @@ +{ + "setoxin - bootstrap": { + "content": [ + [ + "#nexus", + "", + "BEGIN Taxa;", + "DIMENSIONS ntax=5;", + "TAXLABELS", + "[1] '1apf'", + "[2] '1ahl'", + "[3] '1atx'", + "[4] '1sh1'", + "[5] '1bds'", + ";", + "END; [Taxa]", + "" + ], + "5", + "IQ-TREE 2.3.4 COVID-edition built May 23 2024", + "IQ-TREE multicore version 2.3.4 COVID-edition for Linux x86 64-bit built May 23 2024", + [ + "versions.yml:md5,928c30ebaa6b4f3b8d350ecd918786ee" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-05-28T15:47:18.605423192" + }, + "hydrogenase - sup": { + "content": [ + "IQ-TREE multicore version 2.3.4 COVID-edition for Linux x86 64-bit built May 23 2024", + [ + [ + { + "id": "test" + }, + "test.suptree:md5,4ad04b2105448a802d5eff346af67786" + ] + ], + [ + "versions.yml:md5,928c30ebaa6b4f3b8d350ecd918786ee" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-05-28T15:47:30.839068046" + }, + "setoxin - treels": { + "content": [ + "5", + "IQ-TREE 2.3.4 COVID-edition built May 23 2024", + "IQ-TREE multicore version 2.3.4 COVID-edition for Linux x86 64-bit built May 23 2024", + [ + "versions.yml:md5,928c30ebaa6b4f3b8d350ecd918786ee" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-05-28T15:46:58.744510775" + }, + "setoxin - basic": { + "content": [ + "5", + "IQ-TREE 2.3.4 COVID-edition built May 23 2024", + "IQ-TREE multicore version 2.3.4 COVID-edition for Linux x86 64-bit built May 23 2024", + [ + "versions.yml:md5,928c30ebaa6b4f3b8d350ecd918786ee" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-05-28T15:46:43.62067871" + }, + "hydrogenase - optional": { + "content": [ + [ + "%!PS-Adobe-3.0 EPSF-3.0", + "%%BoundingBox: 60 210 550 650", + "%%Pages: 1", + "%%Creator: IQ-TREE/TREE-PUZZLE", + "%%Title: Likelihood Mapping Analysis" + ], + [ + "", + "", + " versions.yml + "${task.process}": + ismapper: \$( echo \$( ismap --version 2>&1 ) | sed 's/^.*ismap //' ) + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + mkdir -p results/${prefix} + + touch results/${prefix}/${prefix}_left_final.fastq + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + ismapper: \$( echo \$( ismap --version 2>&1 ) | sed 's/^.*ismap //' ) + END_VERSIONS + """ +} diff --git a/modules/nf-core/ismapper/meta.yml b/modules/nf-core/ismapper/meta.yml new file mode 100644 index 0000000..bb413e7 --- /dev/null +++ b/modules/nf-core/ismapper/meta.yml @@ -0,0 +1,54 @@ +name: ismapper +description: Identify insertion sites positions in bacterial genomes +keywords: + - fastq + - insertion + - bacteria +tools: + - ismapper: + description: A mapping-based tool for identification of the site and orientation + of IS insertions in bacterial genomes. + homepage: https://github.com/jhawkey/IS_mapper + documentation: https://github.com/jhawkey/IS_mapper + tool_dev_url: https://github.com/jhawkey/IS_mapper + doi: "10.1186/s12864-015-1860-2" + licence: ["BSD-3-Clause"] + identifier: "" +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - reads: + type: file + description: A set of paired-end FASTQ files + pattern: "*.{fastq.gz,fq.gz}" + - reference: + type: file + description: Reference genome in GenBank format + pattern: "*.{gbk}" + - query: + type: file + description: Insertion sequences to query in FASTA format + pattern: "*.{fasta,fa}" +output: + - results: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - results/*: + type: directory + description: Directory containing ISMapper result files + pattern: "*/*" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@rpetit3" +maintainers: + - "@rpetit3" diff --git a/modules/nf-core/ismapper/tests/main.nf.test b/modules/nf-core/ismapper/tests/main.nf.test new file mode 100644 index 0000000..961f887 --- /dev/null +++ b/modules/nf-core/ismapper/tests/main.nf.test @@ -0,0 +1,88 @@ +import groovy.io.FileType + +nextflow_process { + + name "Test Process ISMAPPER" + script "../main.nf" + process "ISMAPPER" + + tag "modules" + tag "modules_nfcore" + tag "ismapper" + + test("test-ismapper") { + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) + ], + file("https://github.com/jhawkey/IS_mapper/raw/master/test/inputs/S_suis_P17.gbk", checkIfExists: true), + file("https://github.com/jhawkey/IS_mapper/raw/master/test/inputs/ISSsu3.fasta", checkIfExists: true) + ] + + """ + } + } + + then { + assertAll( + { assert process.success }, + { + def all_files = [] + + file(process.out.results[0][1]).eachFileRecurse (FileType.FILES) { file -> + all_files << file + } + + def all_file_names = all_files.collect { it.name }.toSorted() + + def stable_file_names = [ + 'test__AM946016.1_table.txt' + ] + + def stable_files = all_files.findAll { it.name in stable_file_names }.toSorted() + + assert snapshot( + all_file_names, + stable_files, + process.out.versions[0] + ).match() + } + ) + } + } + + test("test-ismapper-stub") { + options '-stub' + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) + ], + file("https://github.com/jhawkey/IS_mapper/raw/master/test/inputs/S_suis_P17.gbk", checkIfExists: true), + file("https://github.com/jhawkey/IS_mapper/raw/master/test/inputs/ISSsu3.fasta", checkIfExists: true) + ] + + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + +} diff --git a/modules/nf-core/ismapper/tests/main.nf.test.snap b/modules/nf-core/ismapper/tests/main.nf.test.snap new file mode 100644 index 0000000..51318d3 --- /dev/null +++ b/modules/nf-core/ismapper/tests/main.nf.test.snap @@ -0,0 +1,67 @@ +{ + "test-ismapper": { + "content": [ + [ + "test_ISSsu3_left_final.fastq", + "test_ISSsu3_right_final.fastq", + "test__AM946016.1_closest.bed", + "test__AM946016.1_intersect.bed", + "test__AM946016.1_table.txt", + "test_left_AM946016.1_finalcov.bed", + "test_left_AM946016.1_merged.sorted.bed", + "test_left_AM946016.1_unpaired.bed", + "test_right_AM946016.1_finalcov.bed", + "test_right_AM946016.1_merged.sorted.bed", + "test_right_AM946016.1_unpaired.bed" + ], + [ + "test__AM946016.1_table.txt:md5,9e05cda3990cb841db2bfb6e6e04a1f5" + ], + "versions.yml:md5,bbe2280116459026bfc2304b2b6c0f5f" + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-02T14:33:02.03683" + }, + "test-ismapper-stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_left_final.fastq:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "1": [ + "versions.yml:md5,bbe2280116459026bfc2304b2b6c0f5f" + ], + "results": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_left_final.fastq:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "versions": [ + "versions.yml:md5,bbe2280116459026bfc2304b2b6c0f5f" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-02T14:31:56.815545" + } +} \ No newline at end of file diff --git a/modules/nf-core/lofreq/call/environment.yml b/modules/nf-core/lofreq/call/environment.yml new file mode 100644 index 0000000..011ce6c --- /dev/null +++ b/modules/nf-core/lofreq/call/environment.yml @@ -0,0 +1,5 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::lofreq=2.1.5 diff --git a/modules/nf-core/lofreq/call/main.nf b/modules/nf-core/lofreq/call/main.nf new file mode 100644 index 0000000..bfe8f21 --- /dev/null +++ b/modules/nf-core/lofreq/call/main.nf @@ -0,0 +1,50 @@ +process LOFREQ_CALL { + tag "$meta.id" + label 'process_low' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/lofreq:2.1.5--py38h588ecb2_4' : + 'biocontainers/lofreq:2.1.5--py38h588ecb2_4' }" + + input: + tuple val(meta), path(bam), path(intervals) + path fasta + + output: + tuple val(meta), path("*.vcf.gz"), emit: vcf + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def options_intervals = intervals ? "-l ${intervals}" : "" + """ + lofreq \\ + call \\ + $args \\ + $options_intervals \\ + -f $fasta \\ + -o ${prefix}.vcf.gz \\ + $bam + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + lofreq: \$(echo \$(lofreq version 2>&1) | sed 's/^version: //; s/ *commit.*\$//') + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + echo | gzip > ${prefix}.vcf.gz + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + lofreq: \$(echo \$(lofreq version 2>&1) | sed 's/^version: //; s/ *commit.*\$//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/lofreq/call/meta.yml b/modules/nf-core/lofreq/call/meta.yml new file mode 100644 index 0000000..d2895b8 --- /dev/null +++ b/modules/nf-core/lofreq/call/meta.yml @@ -0,0 +1,53 @@ +name: lofreq_call +description: Lofreq subcommand to call low frequency variants from alignments +keywords: + - variant calling + - low frequency variant calling + - lofreq + - lofreq/call +tools: + - lofreq: + description: A fast and sensitive variant-caller for inferring SNVs and indels + from next-generation sequencing data + homepage: https://csb5.github.io/lofreq/ + documentation: https://csb5.github.io/lofreq/commands/ + doi: "10.1093/nar/gks918 " + licence: ["MIT"] + identifier: biotools:lofreq +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: BAM input file + pattern: "*.{bam}" + - intervals: + type: file + description: BED file containing target regions for variant calling + pattern: "*.{bed}" + - - fasta: + type: file + description: The reference fasta file +output: + - vcf: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.vcf.gz": + type: file + description: VCF output file + pattern: "*.{vcf}" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@bjohnnyd" +maintainers: + - "@bjohnnyd" diff --git a/modules/nf-core/lofreq/call/tests/main.nf.test b/modules/nf-core/lofreq/call/tests/main.nf.test new file mode 100644 index 0000000..208df18 --- /dev/null +++ b/modules/nf-core/lofreq/call/tests/main.nf.test @@ -0,0 +1,94 @@ + +nextflow_process { + + name "Test Process LOFREQ_CALL" + script "../main.nf" + process "LOFREQ_CALL" + + tag "modules" + tag "modules_nfcore" + tag "lofreq" + tag "lofreq/call" + + test("test-lofreq-call") { + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.bam', checkIfExists: true), + [] + ] + input[1] = file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + path(process.out.vcf[0][1]).vcf.summary, + process.out.versions + ).match() + } + ) + } + } + + test("test-lofreq-call-intervals") { + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/bed/test.bed', checkIfExists: true) + ] + input[1] = file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + path(process.out.vcf[0][1]).vcf.summary, + process.out.versions + ).match() + } + ) + } + } + + test("test-lofreq-call-intervals-stub") { + options '-stub' + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/bed/test.bed', checkIfExists: true) + ] + input[1] = file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + +} diff --git a/modules/nf-core/lofreq/call/tests/main.nf.test.snap b/modules/nf-core/lofreq/call/tests/main.nf.test.snap new file mode 100644 index 0000000..4689298 --- /dev/null +++ b/modules/nf-core/lofreq/call/tests/main.nf.test.snap @@ -0,0 +1,63 @@ +{ + "test-lofreq-call": { + "content": [ + "VcfFile [chromosomes=[], sampleCount=0, variantCount=0, phased=true, phasedAutodetect=true]", + [ + "versions.yml:md5,15df54aa4144c3622e5033b9cc762407" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-30T21:57:46.175949" + }, + "test-lofreq-call-intervals-stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + "versions.yml:md5,15df54aa4144c3622e5033b9cc762407" + ], + "vcf": [ + [ + { + "id": "test", + "single_end": false + }, + "test.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,15df54aa4144c3622e5033b9cc762407" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-30T21:56:44.869711" + }, + "test-lofreq-call-intervals": { + "content": [ + "VcfFile [chromosomes=[], sampleCount=0, variantCount=0, phased=true, phasedAutodetect=true]", + [ + "versions.yml:md5,15df54aa4144c3622e5033b9cc762407" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-30T21:57:50.722934" + } +} \ No newline at end of file diff --git a/modules/nf-core/lofreq/filter/environment.yml b/modules/nf-core/lofreq/filter/environment.yml new file mode 100644 index 0000000..011ce6c --- /dev/null +++ b/modules/nf-core/lofreq/filter/environment.yml @@ -0,0 +1,5 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::lofreq=2.1.5 diff --git a/modules/nf-core/lofreq/filter/main.nf b/modules/nf-core/lofreq/filter/main.nf new file mode 100644 index 0000000..a5b6495 --- /dev/null +++ b/modules/nf-core/lofreq/filter/main.nf @@ -0,0 +1,46 @@ +process LOFREQ_FILTER { + tag "$meta.id" + label 'process_low' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/lofreq:2.1.5--py38h588ecb2_4' : + 'biocontainers/lofreq:2.1.5--py38h588ecb2_4' }" + + input: + tuple val(meta), path(vcf) + + output: + tuple val(meta), path("*.gz"), emit: vcf + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + """ + lofreq \\ + filter \\ + $args \\ + -i $vcf \\ + -o ${prefix}.vcf.gz + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + lofreq: \$(echo \$(lofreq version 2>&1) | sed 's/^version: //; s/ *commit.*\$//') + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + echo "" | gzip > ${prefix}.vcf.gz + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + lofreq: \$(echo \$(lofreq version 2>&1) | sed 's/^version: //; s/ *commit.*\$//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/lofreq/filter/meta.yml b/modules/nf-core/lofreq/filter/meta.yml new file mode 100644 index 0000000..f73d440 --- /dev/null +++ b/modules/nf-core/lofreq/filter/meta.yml @@ -0,0 +1,48 @@ +name: lofreq_filter +description: Lofreq subcommand to remove variants with low coverage or strand bias + potential +keywords: + - variant calling + - low frequency variant calling + - filtering + - lofreq + - lofreq/filter +tools: + - lofreq: + description: A fast and sensitive variant-caller for inferring SNVs and indels + from next-generation sequencing data + homepage: https://csb5.github.io/lofreq/ + documentation: https://csb5.github.io/lofreq/commands/ + doi: "10.1093/nar/gks918 " + licence: ["MIT"] + identifier: biotools:lofreq +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - vcf: + type: file + description: VCF input file + pattern: "*.{vcf}" +output: + - vcf: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.gz": + type: file + description: VCF filtered output file + pattern: "*.{vcf}" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@bjohnnyd" +maintainers: + - "@bjohnnyd" diff --git a/modules/nf-core/lofreq/filter/tests/main.nf.test b/modules/nf-core/lofreq/filter/tests/main.nf.test new file mode 100644 index 0000000..bff32a8 --- /dev/null +++ b/modules/nf-core/lofreq/filter/tests/main.nf.test @@ -0,0 +1,74 @@ +nextflow_process { + + name "Test Process LOFREQ_FILTER" + script "../main.nf" + process "LOFREQ_FILTER" + + tag "modules" + tag "modules_nfcore" + tag "lofreq" + tag "lofreq/filter" + + test("sarscov2 - vcf") { + when { + process { + """ + input[0] = [ + [ id:'testvcf' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("sarscov2 - vcf.gz") { + when { + process { + """ + input[0] = [ + [ id:'testvcf' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("sarscov2 - vcf - stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ [ id:'testvcf' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + +} \ No newline at end of file diff --git a/modules/nf-core/lofreq/filter/tests/main.nf.test.snap b/modules/nf-core/lofreq/filter/tests/main.nf.test.snap new file mode 100644 index 0000000..74f46e7 --- /dev/null +++ b/modules/nf-core/lofreq/filter/tests/main.nf.test.snap @@ -0,0 +1,101 @@ +{ + "sarscov2 - vcf.gz": { + "content": [ + { + "0": [ + [ + { + "id": "testvcf" + }, + "testvcf.vcf.gz:md5,f5d1d25be974a4dc1cbb7103a4c0c33c" + ] + ], + "1": [ + "versions.yml:md5,efcc2f31cb8b2b23438358460b0643b1" + ], + "vcf": [ + [ + { + "id": "testvcf" + }, + "testvcf.vcf.gz:md5,f5d1d25be974a4dc1cbb7103a4c0c33c" + ] + ], + "versions": [ + "versions.yml:md5,efcc2f31cb8b2b23438358460b0643b1" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.1" + }, + "timestamp": "2024-07-24T10:06:37.482906518" + }, + "sarscov2 - vcf": { + "content": [ + { + "0": [ + [ + { + "id": "testvcf" + }, + "testvcf.vcf.gz:md5,f5d1d25be974a4dc1cbb7103a4c0c33c" + ] + ], + "1": [ + "versions.yml:md5,efcc2f31cb8b2b23438358460b0643b1" + ], + "vcf": [ + [ + { + "id": "testvcf" + }, + "testvcf.vcf.gz:md5,f5d1d25be974a4dc1cbb7103a4c0c33c" + ] + ], + "versions": [ + "versions.yml:md5,efcc2f31cb8b2b23438358460b0643b1" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.1" + }, + "timestamp": "2024-07-24T10:06:31.229732594" + }, + "sarscov2 - vcf - stub": { + "content": [ + { + "0": [ + [ + { + "id": "testvcf" + }, + "testvcf.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + "versions.yml:md5,efcc2f31cb8b2b23438358460b0643b1" + ], + "vcf": [ + [ + { + "id": "testvcf" + }, + "testvcf.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,efcc2f31cb8b2b23438358460b0643b1" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.1" + }, + "timestamp": "2024-07-24T10:06:46.494604414" + } +} \ No newline at end of file diff --git a/modules/nf-core/lofreq/filter/tests/tags.yml b/modules/nf-core/lofreq/filter/tests/tags.yml new file mode 100644 index 0000000..27d8337 --- /dev/null +++ b/modules/nf-core/lofreq/filter/tests/tags.yml @@ -0,0 +1,2 @@ +lofreq/filter: + - "modules/nf-core/lofreq/filter/**" diff --git a/modules/nf-core/lofreq/indelqual/environment.yml b/modules/nf-core/lofreq/indelqual/environment.yml new file mode 100644 index 0000000..011ce6c --- /dev/null +++ b/modules/nf-core/lofreq/indelqual/environment.yml @@ -0,0 +1,5 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::lofreq=2.1.5 diff --git a/modules/nf-core/lofreq/indelqual/main.nf b/modules/nf-core/lofreq/indelqual/main.nf new file mode 100644 index 0000000..d73a8d6 --- /dev/null +++ b/modules/nf-core/lofreq/indelqual/main.nf @@ -0,0 +1,48 @@ +process LOFREQ_INDELQUAL { + tag "$meta.id" + label 'process_low' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/lofreq:2.1.5--py38h588ecb2_4' : + 'biocontainers/lofreq:2.1.5--py38h588ecb2_4' }" + + input: + tuple val(meta), path(bam) + tuple val(meta2), path(fasta) + + output: + tuple val(meta), path("*.bam"), emit: bam + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + """ + lofreq indelqual \\ + $args \\ + -f $fasta \\ + -o ${prefix}.bam \\ + $bam + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + lofreq: \$(echo \$(lofreq version 2>&1) | sed 's/^version: //; s/ *commit.*\$//') + END_VERSIONS + """ + + stub: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.bam + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + lofreq: \$(echo \$(lofreq version 2>&1) | sed 's/^version: //; s/ *commit.*\$//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/lofreq/indelqual/meta.yml b/modules/nf-core/lofreq/indelqual/meta.yml new file mode 100644 index 0000000..00788b1 --- /dev/null +++ b/modules/nf-core/lofreq/indelqual/meta.yml @@ -0,0 +1,57 @@ +name: lofreq_indelqual +description: Inserts indel qualities in a BAM file +keywords: + - variant calling + - variants + - bam + - indel + - qualities +tools: + - lofreq: + description: Lofreq is a fast and sensitive variant-caller for inferring SNVs + and indels from next-generation sequencing data. It's indelqual programme inserts + indel qualities in a BAM file + homepage: https://csb5.github.io/lofreq/ + doi: "10.1093/nar/gks918" + licence: ["MIT"] + identifier: biotools:lofreq +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: BAM file + pattern: "*.{bam}" + - - meta2: + type: map + description: | + Groovy Map containing sample information about the reference fasta + e.g. [ id:'reference' ] + - fasta: + type: file + description: Reference genome FASTA file + pattern: "*.{fasta,fa}" +output: + - bam: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.bam": + type: file + description: BAM file with indel qualities inserted into it + pattern: "*.{bam}" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@kaurravneet4123" +maintainers: + - "@kaurravneet4123" + - "@krannich479" diff --git a/modules/nf-core/lofreq/indelqual/tests/main.nf.test b/modules/nf-core/lofreq/indelqual/tests/main.nf.test new file mode 100644 index 0000000..3771f22 --- /dev/null +++ b/modules/nf-core/lofreq/indelqual/tests/main.nf.test @@ -0,0 +1,71 @@ +nextflow_process { + + name "Test Process LOFREQ_INDELQUAL" + script "../main.nf" + process "LOFREQ_INDELQUAL" + config "./nextflow.config" + + tag "modules" + tag "modules_nfcore" + tag "lofreq" + tag "lofreq/indelqual" + + test("sarscov2 - bam") { + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true) + ] + input[1] = [ + [ id:'ref' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { + def bam = file(process.out.bam.get(0).get(1)) + assert bam.exists() + }, + { assert snapshot(process.out.versions).match("versions") } + ) + } + + } + + test("sarscov2 - bam - stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true) + ] + input[1] = [ + [ id:'ref' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + +} diff --git a/modules/nf-core/lofreq/indelqual/tests/main.nf.test.snap b/modules/nf-core/lofreq/indelqual/tests/main.nf.test.snap new file mode 100644 index 0000000..4090efd --- /dev/null +++ b/modules/nf-core/lofreq/indelqual/tests/main.nf.test.snap @@ -0,0 +1,49 @@ +{ + "sarscov2 - bam - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.indelqual.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + "versions.yml:md5,822d596299afbb3ae6db66bfa9b77b3e" + ], + "bam": [ + [ + { + "id": "test", + "single_end": false + }, + "test.indelqual.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,822d596299afbb3ae6db66bfa9b77b3e" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.1" + }, + "timestamp": "2024-07-19T13:31:30.184343961" + }, + "versions": { + "content": [ + [ + "versions.yml:md5,822d596299afbb3ae6db66bfa9b77b3e" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.1" + }, + "timestamp": "2024-07-19T13:30:40.688426508" + } +} \ No newline at end of file diff --git a/modules/nf-core/lofreq/indelqual/tests/nextflow.config b/modules/nf-core/lofreq/indelqual/tests/nextflow.config new file mode 100644 index 0000000..b2eaec1 --- /dev/null +++ b/modules/nf-core/lofreq/indelqual/tests/nextflow.config @@ -0,0 +1,6 @@ +process { + withName: LOFREQ_INDELQUAL { + ext.args = '--dindel' + ext.prefix = { "${meta.id}.indelqual" } + } +} diff --git a/modules/nf-core/lofreq/indelqual/tests/tags.yml b/modules/nf-core/lofreq/indelqual/tests/tags.yml new file mode 100644 index 0000000..4bb53a0 --- /dev/null +++ b/modules/nf-core/lofreq/indelqual/tests/tags.yml @@ -0,0 +1,2 @@ +lofreq/indelqual: + - "modules/nf-core/lofreq/indelqual/**" diff --git a/modules/nf-core/multiqc/.conda-lock/linux_amd64-bd-c1f4a7982b743963_1.txt b/modules/nf-core/multiqc/.conda-lock/linux_amd64-bd-c1f4a7982b743963_1.txt new file mode 100644 index 0000000..7619030 --- /dev/null +++ b/modules/nf-core/multiqc/.conda-lock/linux_amd64-bd-c1f4a7982b743963_1.txt @@ -0,0 +1,1552 @@ + +version: 6 +environments: +default: +channels: +- url: https://conda.anaconda.org/conda-forge/ +- url: https://conda.anaconda.org/bioconda/ +- url: https://conda.anaconda.org/bioconda/ +options: +pypi-prerelease-mode: if-necessary-or-explicit +packages: +linux-64: +- conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/attrs-26.1.0-pyhcf101f3_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/backports.zstd-1.3.0-py314h680f03e_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.2.0-py314h3de4e8d_1.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.2.25-pyhd8ed1ab_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.6-pyhd8ed1ab_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/coloredlogs-15.0.1-pyhd8ed1ab_4.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/colormath-3.0.0-pyhd8ed1ab_4.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.14.3-py314hd8ed1ab_101.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/expat-2.7.4-hecca717_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 +- conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 +- conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 +- conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.17.1-h27c8c51_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/humanfriendly-10.0-pyh707e725_8.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/humanize-4.15.0-pyhd8ed1ab_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.3-h33c6efd_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.11-pyhd8ed1ab_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.8.0-pyhcf101f3_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.26.0-pyhcf101f3_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2025.9.1-pyhcf101f3_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/kaleido-core-0.2.1-h3644ca4_0.tar.bz2 +- conda: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.18-h0c24ade_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_102.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.1.0-hdb68285_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.11.0-5_h4a7cf45_openblas.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.11.0-5_h0358290_openblas.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.25-h17f619e_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.4-hecca717_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype-2.14.3-ha770c72_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype6-2.14.3-h73754d4_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_18.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_18.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-15.2.0-h69a702a_18.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.2.0-h68bc16d_18.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_18.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.1.2-hb03c661_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.11.0-5_h47877c9_openblas.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.2-hb03c661_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb03c661_1.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.30-pthreads_h94d23a6_4.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.55-h421ea60_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.52.0-hf4e2dac_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_18.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.1-h9d88235_1.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.3-h5347b49_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.6.0-hd42ef1d_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.17.0-h8a09558_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.2-h25fd6f3_2.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/markdown-3.10.2-pyhcf101f3_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.0.0-pyhd8ed1ab_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.3-py314h67df5f8_1.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/mathjax-2.7.7-ha770c72_3.tar.bz2 +- conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda +- conda: https://conda.anaconda.org/bioconda/noarch/multiqc-1.33-pyhdfd78af_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/narwhals-2.18.1-pyhcf101f3_1.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/natsort-8.4.0-pyhcf101f3_2.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.6.1-pyhcf101f3_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/nspr-4.38-h29cc59b_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/nss-3.118-h445c969_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.4.3-py314h2b28147_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.4-h55fea9a_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.1-h35e630c_1.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/pillow-12.1.1-py314h8ec4b1a_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/plotly-6.6.0-pyhd8ed1ab_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/polars-1.39.3-pyh58ad624_1.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/polars-lts-cpu-1.34.0.deprecated-hc364b38_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/polars-runtime-32-1.39.3-py310hffdcd12_1.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/polars-runtime-compat-1.39.3-py310hbcd5346_1.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/procps-ng-4.0.6-h18c060e_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-hb9d3cd8_1002.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/pyaml-env-1.2.2-pyhd8ed1ab_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.12.5-pyhcf101f3_1.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/pydantic-core-2.41.5-py314h2e6c369_1.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.14.3-h32b2ec7_101_cp314.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/python-dotenv-1.2.2-pyhcf101f3_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.14.3-h4df99d1_101.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/python-kaleido-0.2.1-pyhd8ed1ab_0.tar.bz2 +- conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.3-py314h67df5f8_1.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.37.0-pyhcf101f3_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/regex-2026.2.28-py314h5bd0f2a_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.5-pyhcf101f3_1.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.3.3-pyhcf101f3_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/rich-click-1.9.7-pyh8f84b5b_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/rpds-py-0.30.0-py314h2e6c369_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/spectra-0.0.11-pyhd8ed1ab_2.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.52.0-h04a0ce9_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/tiktoken-0.12.0-py314h67fec18_3.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.67.3-pyh8f84b5b_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/typeguard-4.5.1-pyhd8ed1ab_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/typing-inspection-0.4.2-pyhd8ed1ab_1.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.6.3-pyhd8ed1ab_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.12-hb03c661_1.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.5-hb03c661_1.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h280c20c_3.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-ng-2.3.3-hceb46e0_1.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda +packages: +- conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda +build_number: 20 +sha256: 1dd3fffd892081df9726d7eb7e0dea6198962ba775bd88842135a4ddb4deb3c9 +md5: a9f577daf3de00bca7c3c76c0ecbd1de +depends: +- __glibc >=2.17,<3.0.a0 +- libgomp >=7.5.0 +constrains: +- openmp_impl <0.0a0 +license: BSD-3-Clause +license_family: BSD +size: 28948 +timestamp: 1770939786096 +- conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda +sha256: a3967b937b9abf0f2a99f3173fa4630293979bd1644709d89580e7c62a544661 +md5: aaa2a381ccc56eac91d63b6c1240312f +depends: +- cpython +- python-gil +license: MIT +license_family: MIT +size: 8191 +timestamp: 1744137672556 +- conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda +sha256: e0ea1ba78fbb64f17062601edda82097fcf815012cf52bb704150a2668110d48 +md5: 2934f256a8acfe48f6ebb4fce6cde29c +depends: +- python >=3.9 +- typing-extensions >=4.0.0 +license: MIT +license_family: MIT +size: 18074 +timestamp: 1733247158254 +- conda: https://conda.anaconda.org/conda-forge/noarch/attrs-26.1.0-pyhcf101f3_0.conda +sha256: 1b6124230bb4e571b1b9401537ecff575b7b109cc3a21ee019f65e083b8399ab +md5: c6b0543676ecb1fb2d7643941fe375f2 +depends: +- python >=3.10 +- python +license: MIT +license_family: MIT +size: 64927 +timestamp: 1773935801332 +- conda: https://conda.anaconda.org/conda-forge/noarch/backports.zstd-1.3.0-py314h680f03e_0.conda +noarch: generic +sha256: c31ab719d256bc6f89926131e88ecd0f0c5d003fe8481852c6424f4ec6c7eb29 +md5: a2ac7763a9ac75055b68f325d3255265 +depends: +- python >=3.14 +license: BSD-3-Clause AND MIT AND EPL-2.0 +size: 7514 +timestamp: 1767044983590 +- conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.2.0-py314h3de4e8d_1.conda +sha256: 3ad3500bff54a781c29f16ce1b288b36606e2189d0b0ef2f67036554f47f12b0 +md5: 8910d2c46f7e7b519129f486e0fe927a +depends: +- __glibc >=2.17,<3.0.a0 +- libgcc >=14 +- libstdcxx >=14 +- python >=3.14,<3.15.0a0 +- python_abi 3.14.* *_cp314 +constrains: +- libbrotlicommon 1.2.0 hb03c661_1 +license: MIT +license_family: MIT +size: 367376 +timestamp: 1764017265553 +- conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda +sha256: 0b75d45f0bba3e95dc693336fa51f40ea28c980131fec438afb7ce6118ed05f6 +md5: d2ffd7602c02f2b316fd921d39876885 +depends: +- __glibc >=2.17,<3.0.a0 +- libgcc >=14 +license: bzip2-1.0.6 +license_family: BSD +size: 260182 +timestamp: 1771350215188 +- conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda +sha256: 67cc7101b36421c5913a1687ef1b99f85b5d6868da3abbf6ec1a4181e79782fc +md5: 4492fd26db29495f0ba23f146cd5638d +depends: +- __unix +license: ISC +size: 147413 +timestamp: 1772006283803 +- conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.2.25-pyhd8ed1ab_0.conda +sha256: a6b118fd1ed6099dc4fc03f9c492b88882a780fadaef4ed4f93dc70757713656 +md5: 765c4d97e877cdbbb88ff33152b86125 +depends: +- python >=3.10 +license: ISC +size: 151445 +timestamp: 1772001170301 +- conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.6-pyhd8ed1ab_0.conda +sha256: d86dfd428b2e3c364fa90e07437c8405d635aa4ef54b25ab51d9c712be4112a5 +md5: 49ee13eb9b8f44d63879c69b8a40a74b +depends: +- python >=3.10 +license: MIT +license_family: MIT +size: 58510 +timestamp: 1773660086450 +- conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda +sha256: 38cfe1ee75b21a8361c8824f5544c3866f303af1762693a178266d7f198e8715 +md5: ea8a6c3256897cc31263de9f455e25d9 +depends: +- python >=3.10 +- __unix +- python +license: BSD-3-Clause +license_family: BSD +size: 97676 +timestamp: 1764518652276 +- conda: https://conda.anaconda.org/conda-forge/noarch/coloredlogs-15.0.1-pyhd8ed1ab_4.conda +sha256: 8021c76eeadbdd5784b881b165242db9449783e12ce26d6234060026fd6a8680 +md5: b866ff7007b934d564961066c8195983 +depends: +- humanfriendly >=9.1 +- python >=3.9 +license: MIT +license_family: MIT +size: 43758 +timestamp: 1733928076798 +- conda: https://conda.anaconda.org/conda-forge/noarch/colormath-3.0.0-pyhd8ed1ab_4.conda +sha256: 59c9e29800b483b390467f90e82b0da3a4fbf0612efe1c90813fca232780e160 +md5: 071cf7b0ce333c81718b054066c15102 +depends: +- networkx >=2.0 +- numpy +- python >=3.9 +license: BSD-3-Clause +license_family: BSD +size: 39326 +timestamp: 1735759976140 +- conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.14.3-py314hd8ed1ab_101.conda +noarch: generic +sha256: 91b06300879df746214f7363d6c27c2489c80732e46a369eb2afc234bcafb44c +md5: 3bb89e4f795e5414addaa531d6b1500a +depends: +- python >=3.14,<3.15.0a0 +- python_abi * *_cp314 +license: Python-2.0 +size: 50078 +timestamp: 1770674447292 +- conda: https://conda.anaconda.org/conda-forge/linux-64/expat-2.7.4-hecca717_0.conda +sha256: 0cc345e4dead417996ce9a1f088b28d858f03d113d43c1963d29194366dcce27 +md5: a0535741a4934b3e386051065c58761a +depends: +- __glibc >=2.17,<3.0.a0 +- libexpat 2.7.4 hecca717_0 +- libgcc >=14 +license: MIT +license_family: MIT +size: 145274 +timestamp: 1771259434699 +- conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 +sha256: 58d7f40d2940dd0a8aa28651239adbf5613254df0f75789919c4e6762054403b +md5: 0c96522c6bdaed4b1566d11387caaf45 +license: BSD-3-Clause +license_family: BSD +size: 397370 +timestamp: 1566932522327 +- conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 +sha256: c52a29fdac682c20d252facc50f01e7c2e7ceac52aa9817aaf0bb83f7559ec5c +md5: 34893075a5c9e55cdafac56607368fc6 +license: OFL-1.1 +license_family: Other +size: 96530 +timestamp: 1620479909603 +- conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 +sha256: 00925c8c055a2275614b4d983e1df637245e19058d79fc7dd1a93b8d9fb4b139 +md5: 4d59c254e01d9cde7957100457e2d5fb +license: OFL-1.1 +license_family: Other +size: 700814 +timestamp: 1620479612257 +- conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.conda +sha256: 2821ec1dc454bd8b9a31d0ed22a7ce22422c0aef163c59f49dfdf915d0f0ca14 +md5: 49023d73832ef61042f6a237cb2687e7 +license: LicenseRef-Ubuntu-Font-Licence-Version-1.0 +license_family: Other +size: 1620504 +timestamp: 1727511233259 +- conda: https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.17.1-h27c8c51_0.conda +sha256: aa4a44dba97151221100a637c7f4bde619567afade9c0265f8e1c8eed8d7bd8c +md5: 867127763fbe935bab59815b6e0b7b5c +depends: +- __glibc >=2.17,<3.0.a0 +- libexpat >=2.7.4,<3.0a0 +- libfreetype >=2.14.1 +- libfreetype6 >=2.14.1 +- libgcc >=14 +- libuuid >=2.41.3,<3.0a0 +- libzlib >=1.3.1,<2.0a0 +license: MIT +license_family: MIT +size: 270705 +timestamp: 1771382710863 +- conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda +sha256: 54eea8469786bc2291cc40bca5f46438d3e062a399e8f53f013b6a9f50e98333 +md5: a7970cd949a077b7cb9696379d338681 +depends: +- font-ttf-ubuntu +- font-ttf-inconsolata +- font-ttf-dejavu-sans-mono +- font-ttf-source-code-pro +license: BSD-3-Clause +license_family: BSD +size: 4059 +timestamp: 1762351264405 +- conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda +sha256: 84c64443368f84b600bfecc529a1194a3b14c3656ee2e832d15a20e0329b6da3 +md5: 164fc43f0b53b6e3a7bc7dce5e4f1dc9 +depends: +- python >=3.10 +- hyperframe >=6.1,<7 +- hpack >=4.1,<5 +- python +license: MIT +license_family: MIT +size: 95967 +timestamp: 1756364871835 +- conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda +sha256: 6ad78a180576c706aabeb5b4c8ceb97c0cb25f1e112d76495bff23e3779948ba +md5: 0a802cb9888dd14eeefc611f05c40b6e +depends: +- python >=3.9 +license: MIT +license_family: MIT +size: 30731 +timestamp: 1737618390337 +- conda: https://conda.anaconda.org/conda-forge/noarch/humanfriendly-10.0-pyh707e725_8.conda +sha256: fa2071da7fab758c669e78227e6094f6b3608228740808a6de5d6bce83d9e52d +md5: 7fe569c10905402ed47024fc481bb371 +depends: +- __unix +- python >=3.9 +license: MIT +license_family: MIT +size: 73563 +timestamp: 1733928021866 +- conda: https://conda.anaconda.org/conda-forge/noarch/humanize-4.15.0-pyhd8ed1ab_0.conda +sha256: 6c4343b376d0b12a4c75ab992640970d36c933cad1fd924f6a1181fa91710e80 +md5: daddf757c3ecd6067b9af1df1f25d89e +depends: +- python >=3.10 +license: MIT +license_family: MIT +size: 67994 +timestamp: 1766267728652 +- conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda +sha256: 77af6f5fe8b62ca07d09ac60127a30d9069fdc3c68d6b256754d0ffb1f7779f8 +md5: 8e6923fc12f1fe8f8c4e5c9f343256ac +depends: +- python >=3.9 +license: MIT +license_family: MIT +size: 17397 +timestamp: 1737618427549 +- conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.3-h33c6efd_0.conda +sha256: fbf86c4a59c2ed05bbffb2ba25c7ed94f6185ec30ecb691615d42342baa1a16a +md5: c80d8a3b84358cb967fa81e7075fbc8a +depends: +- __glibc >=2.17,<3.0.a0 +- libgcc >=14 +- libstdcxx >=14 +license: MIT +license_family: MIT +size: 12723451 +timestamp: 1773822285671 +- conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.11-pyhd8ed1ab_0.conda +sha256: ae89d0299ada2a3162c2614a9d26557a92aa6a77120ce142f8e0109bbf0342b0 +md5: 53abe63df7e10a6ba605dc5f9f961d36 +depends: +- python >=3.10 +license: BSD-3-Clause +license_family: BSD +size: 50721 +timestamp: 1760286526795 +- conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.8.0-pyhcf101f3_0.conda +sha256: 82ab2a0d91ca1e7e63ab6a4939356667ef683905dea631bc2121aa534d347b16 +md5: 080594bf4493e6bae2607e65390c520a +depends: +- python >=3.10 +- zipp >=3.20 +- python +license: Apache-2.0 +license_family: APACHE +size: 34387 +timestamp: 1773931568510 +- conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda +sha256: fc9ca7348a4f25fed2079f2153ecdcf5f9cf2a0bc36c4172420ca09e1849df7b +md5: 04558c96691bed63104678757beb4f8d +depends: +- markupsafe >=2.0 +- python >=3.10 +- python +license: BSD-3-Clause +license_family: BSD +size: 120685 +timestamp: 1764517220861 +- conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.26.0-pyhcf101f3_0.conda +sha256: db973a37d75db8e19b5f44bbbdaead0c68dde745407f281e2a7fe4db74ec51d7 +md5: ada41c863af263cc4c5fcbaff7c3e4dc +depends: +- attrs >=22.2.0 +- jsonschema-specifications >=2023.3.6 +- python >=3.10 +- referencing >=0.28.4 +- rpds-py >=0.25.0 +- python +license: MIT +license_family: MIT +size: 82356 +timestamp: 1767839954256 +- conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2025.9.1-pyhcf101f3_0.conda +sha256: 0a4f3b132f0faca10c89fdf3b60e15abb62ded6fa80aebfc007d05965192aa04 +md5: 439cd0f567d697b20a8f45cb70a1005a +depends: +- python >=3.10 +- referencing >=0.31.0 +- python +license: MIT +license_family: MIT +size: 19236 +timestamp: 1757335715225 +- conda: https://conda.anaconda.org/conda-forge/linux-64/kaleido-core-0.2.1-h3644ca4_0.tar.bz2 +sha256: 7f243680ca03eba7457b7a48f93a9440ba8181a8eac20a3eb5ef165ab6c96664 +md5: b3723b235b0758abaae8c82ce4d80146 +depends: +- __glibc >=2.17,<3.0.a0 +- expat >=2.2.10,<3.0.0a0 +- fontconfig +- fonts-conda-forge +- libgcc-ng >=9.3.0 +- mathjax 2.7.* +- nspr >=4.29,<5.0a0 +- nss >=3.62,<4.0a0 +- sqlite >=3.34.0,<4.0a0 +license: MIT +license_family: MIT +size: 62099926 +timestamp: 1615199463039 +- conda: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.18-h0c24ade_0.conda +sha256: 836ec4b895352110335b9fdcfa83a8dcdbe6c5fb7c06c4929130600caea91c0a +md5: 6f2e2c8f58160147c4d1c6f4c14cbac4 +depends: +- __glibc >=2.17,<3.0.a0 +- libgcc >=14 +- libjpeg-turbo >=3.1.2,<4.0a0 +- libtiff >=4.7.1,<4.8.0a0 +license: MIT +license_family: MIT +size: 249959 +timestamp: 1768184673131 +- conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_102.conda +sha256: 3d584956604909ff5df353767f3a2a2f60e07d070b328d109f30ac40cd62df6c +md5: 18335a698559cdbcd86150a48bf54ba6 +depends: +- __glibc >=2.17,<3.0.a0 +- zstd >=1.5.7,<1.6.0a0 +constrains: +- binutils_impl_linux-64 2.45.1 +license: GPL-3.0-only +license_family: GPL +size: 728002 +timestamp: 1774197446916 +- conda: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.1.0-hdb68285_0.conda +sha256: f84cb54782f7e9cea95e810ea8fef186e0652d0fa73d3009914fa2c1262594e1 +md5: a752488c68f2e7c456bcbd8f16eec275 +depends: +- __glibc >=2.17,<3.0.a0 +- libgcc >=14 +- libstdcxx >=14 +license: Apache-2.0 +license_family: Apache +size: 261513 +timestamp: 1773113328888 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.11.0-5_h4a7cf45_openblas.conda +build_number: 5 +sha256: 18c72545080b86739352482ba14ba2c4815e19e26a7417ca21a95b76ec8da24c +md5: c160954f7418d7b6e87eaf05a8913fa9 +depends: +- libopenblas >=0.3.30,<0.3.31.0a0 +- libopenblas >=0.3.30,<1.0a0 +constrains: +- mkl <2026 +- liblapack 3.11.0 5*_openblas +- libcblas 3.11.0 5*_openblas +- blas 2.305 openblas +- liblapacke 3.11.0 5*_openblas +license: BSD-3-Clause +license_family: BSD +size: 18213 +timestamp: 1765818813880 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.11.0-5_h0358290_openblas.conda +build_number: 5 +sha256: 0cbdcc67901e02dc17f1d19e1f9170610bd828100dc207de4d5b6b8ad1ae7ad8 +md5: 6636a2b6f1a87572df2970d3ebc87cc0 +depends: +- libblas 3.11.0 5_h4a7cf45_openblas +constrains: +- liblapacke 3.11.0 5*_openblas +- blas 2.305 openblas +- liblapack 3.11.0 5*_openblas +license: BSD-3-Clause +license_family: BSD +size: 18194 +timestamp: 1765818837135 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.25-h17f619e_0.conda +sha256: aa8e8c4be9a2e81610ddf574e05b64ee131fab5e0e3693210c9d6d2fba32c680 +md5: 6c77a605a7a689d17d4819c0f8ac9a00 +depends: +- __glibc >=2.17,<3.0.a0 +- libgcc >=14 +license: MIT +license_family: MIT +size: 73490 +timestamp: 1761979956660 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.4-hecca717_0.conda +sha256: d78f1d3bea8c031d2f032b760f36676d87929b18146351c4464c66b0869df3f5 +md5: e7f7ce06ec24cfcfb9e36d28cf82ba57 +depends: +- __glibc >=2.17,<3.0.a0 +- libgcc >=14 +constrains: +- expat 2.7.4.* +license: MIT +license_family: MIT +size: 76798 +timestamp: 1771259418166 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda +sha256: 31f19b6a88ce40ebc0d5a992c131f57d919f73c0b92cd1617a5bec83f6e961e6 +md5: a360c33a5abe61c07959e449fa1453eb +depends: +- __glibc >=2.17,<3.0.a0 +- libgcc >=14 +license: MIT +license_family: MIT +size: 58592 +timestamp: 1769456073053 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype-2.14.3-ha770c72_0.conda +sha256: 38f014a7129e644636e46064ecd6b1945e729c2140e21d75bb476af39e692db2 +md5: e289f3d17880e44b633ba911d57a321b +depends: +- libfreetype6 >=2.14.3 +license: GPL-2.0-only OR FTL +size: 8049 +timestamp: 1774298163029 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype6-2.14.3-h73754d4_0.conda +sha256: 16f020f96da79db1863fcdd8f2b8f4f7d52f177dd4c58601e38e9182e91adf1d +md5: fb16b4b69e3f1dcfe79d80db8fd0c55d +depends: +- __glibc >=2.17,<3.0.a0 +- libgcc >=14 +- libpng >=1.6.55,<1.7.0a0 +- libzlib >=1.3.2,<2.0a0 +constrains: +- freetype >=2.14.3 +license: GPL-2.0-only OR FTL +size: 384575 +timestamp: 1774298162622 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_18.conda +sha256: faf7d2017b4d718951e3a59d081eb09759152f93038479b768e3d612688f83f5 +md5: 0aa00f03f9e39fb9876085dee11a85d4 +depends: +- __glibc >=2.17,<3.0.a0 +- _openmp_mutex >=4.5 +constrains: +- libgcc-ng ==15.2.0=*_18 +- libgomp 15.2.0 he0feb66_18 +license: GPL-3.0-only WITH GCC-exception-3.1 +license_family: GPL +size: 1041788 +timestamp: 1771378212382 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_18.conda +sha256: e318a711400f536c81123e753d4c797a821021fb38970cebfb3f454126016893 +md5: d5e96b1ed75ca01906b3d2469b4ce493 +depends: +- libgcc 15.2.0 he0feb66_18 +license: GPL-3.0-only WITH GCC-exception-3.1 +license_family: GPL +size: 27526 +timestamp: 1771378224552 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-15.2.0-h69a702a_18.conda +sha256: d2c9fad338fd85e4487424865da8e74006ab2e2475bd788f624d7a39b2a72aee +md5: 9063115da5bc35fdc3e1002e69b9ef6e +depends: +- libgfortran5 15.2.0 h68bc16d_18 +constrains: +- libgfortran-ng ==15.2.0=*_18 +license: GPL-3.0-only WITH GCC-exception-3.1 +license_family: GPL +size: 27523 +timestamp: 1771378269450 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.2.0-h68bc16d_18.conda +sha256: 539b57cf50ec85509a94ba9949b7e30717839e4d694bc94f30d41c9d34de2d12 +md5: 646855f357199a12f02a87382d429b75 +depends: +- __glibc >=2.17,<3.0.a0 +- libgcc >=15.2.0 +constrains: +- libgfortran 15.2.0 +license: GPL-3.0-only WITH GCC-exception-3.1 +license_family: GPL +size: 2482475 +timestamp: 1771378241063 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_18.conda +sha256: 21337ab58e5e0649d869ab168d4e609b033509de22521de1bfed0c031bfc5110 +md5: 239c5e9546c38a1e884d69effcf4c882 +depends: +- __glibc >=2.17,<3.0.a0 +license: GPL-3.0-only WITH GCC-exception-3.1 +license_family: GPL +size: 603262 +timestamp: 1771378117851 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.1.2-hb03c661_0.conda +sha256: cc9aba923eea0af8e30e0f94f2ad7156e2984d80d1e8e7fe6be5a1f257f0eb32 +md5: 8397539e3a0bbd1695584fb4f927485a +depends: +- __glibc >=2.17,<3.0.a0 +- libgcc >=14 +constrains: +- jpeg <0.0.0a +license: IJG AND BSD-3-Clause AND Zlib +size: 633710 +timestamp: 1762094827865 +- conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.11.0-5_h47877c9_openblas.conda +build_number: 5 +sha256: c723b6599fcd4c6c75dee728359ef418307280fa3e2ee376e14e85e5bbdda053 +md5: b38076eb5c8e40d0106beda6f95d7609 +depends: +- libblas 3.11.0 5_h4a7cf45_openblas +constrains: +- blas 2.305 openblas +- liblapacke 3.11.0 5*_openblas +- libcblas 3.11.0 5*_openblas +license: BSD-3-Clause +license_family: BSD +size: 18200 +timestamp: 1765818857876 +- conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.2-hb03c661_0.conda +sha256: 755c55ebab181d678c12e49cced893598f2bab22d582fbbf4d8b83c18be207eb +md5: c7c83eecbb72d88b940c249af56c8b17 +depends: +- __glibc >=2.17,<3.0.a0 +- libgcc >=14 +constrains: +- xz 5.8.2.* +license: 0BSD +size: 113207 +timestamp: 1768752626120 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb03c661_1.conda +sha256: fe171ed5cf5959993d43ff72de7596e8ac2853e9021dec0344e583734f1e0843 +md5: 2c21e66f50753a083cbe6b80f38268fa +depends: +- __glibc >=2.17,<3.0.a0 +- libgcc >=14 +license: BSD-2-Clause +license_family: BSD +size: 92400 +timestamp: 1769482286018 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.30-pthreads_h94d23a6_4.conda +sha256: 199d79c237afb0d4780ccd2fbf829cea80743df60df4705202558675e07dd2c5 +md5: be43915efc66345cccb3c310b6ed0374 +depends: +- __glibc >=2.17,<3.0.a0 +- libgcc >=14 +- libgfortran +- libgfortran5 >=14.3.0 +constrains: +- openblas >=0.3.30,<0.3.31.0a0 +license: BSD-3-Clause +license_family: BSD +size: 5927939 +timestamp: 1763114673331 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.55-h421ea60_0.conda +sha256: 36ade759122cdf0f16e2a2562a19746d96cf9c863ffaa812f2f5071ebbe9c03c +md5: 5f13ffc7d30ffec87864e678df9957b4 +depends: +- libgcc >=14 +- __glibc >=2.17,<3.0.a0 +- libzlib >=1.3.1,<2.0a0 +license: zlib-acknowledgement +size: 317669 +timestamp: 1770691470744 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.52.0-hf4e2dac_0.conda +sha256: d716847b7deca293d2e49ed1c8ab9e4b9e04b9d780aea49a97c26925b28a7993 +md5: fd893f6a3002a635b5e50ceb9dd2c0f4 +depends: +- __glibc >=2.17,<3.0.a0 +- icu >=78.2,<79.0a0 +- libgcc >=14 +- libzlib >=1.3.1,<2.0a0 +license: blessing +size: 951405 +timestamp: 1772818874251 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_18.conda +sha256: 78668020064fdaa27e9ab65cd2997e2c837b564ab26ce3bf0e58a2ce1a525c6e +md5: 1b08cd684f34175e4514474793d44bcb +depends: +- __glibc >=2.17,<3.0.a0 +- libgcc 15.2.0 he0feb66_18 +constrains: +- libstdcxx-ng ==15.2.0=*_18 +license: GPL-3.0-only WITH GCC-exception-3.1 +license_family: GPL +size: 5852330 +timestamp: 1771378262446 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.1-h9d88235_1.conda +sha256: e5f8c38625aa6d567809733ae04bb71c161a42e44a9fa8227abe61fa5c60ebe0 +md5: cd5a90476766d53e901500df9215e927 +depends: +- __glibc >=2.17,<3.0.a0 +- lerc >=4.0.0,<5.0a0 +- libdeflate >=1.25,<1.26.0a0 +- libgcc >=14 +- libjpeg-turbo >=3.1.0,<4.0a0 +- liblzma >=5.8.1,<6.0a0 +- libstdcxx >=14 +- libwebp-base >=1.6.0,<2.0a0 +- libzlib >=1.3.1,<2.0a0 +- zstd >=1.5.7,<1.6.0a0 +license: HPND +size: 435273 +timestamp: 1762022005702 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.3-h5347b49_0.conda +sha256: 1a7539cfa7df00714e8943e18de0b06cceef6778e420a5ee3a2a145773758aee +md5: db409b7c1720428638e7c0d509d3e1b5 +depends: +- __glibc >=2.17,<3.0.a0 +- libgcc >=14 +license: BSD-3-Clause +license_family: BSD +size: 40311 +timestamp: 1766271528534 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.6.0-hd42ef1d_0.conda +sha256: 3aed21ab28eddffdaf7f804f49be7a7d701e8f0e46c856d801270b470820a37b +md5: aea31d2e5b1091feca96fcfe945c3cf9 +depends: +- __glibc >=2.17,<3.0.a0 +- libgcc >=14 +constrains: +- libwebp 1.6.0 +license: BSD-3-Clause +license_family: BSD +size: 429011 +timestamp: 1752159441324 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.17.0-h8a09558_0.conda +sha256: 666c0c431b23c6cec6e492840b176dde533d48b7e6fb8883f5071223433776aa +md5: 92ed62436b625154323d40d5f2f11dd7 +depends: +- __glibc >=2.17,<3.0.a0 +- libgcc >=13 +- pthread-stubs +- xorg-libxau >=1.0.11,<2.0a0 +- xorg-libxdmcp +license: MIT +license_family: MIT +size: 395888 +timestamp: 1727278577118 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.2-h25fd6f3_2.conda +sha256: 55044c403570f0dc26e6364de4dc5368e5f3fc7ff103e867c487e2b5ab2bcda9 +md5: d87ff7921124eccd67248aa483c23fec +depends: +- __glibc >=2.17,<3.0.a0 +constrains: +- zlib 1.3.2 *_2 +license: Zlib +license_family: Other +size: 63629 +timestamp: 1774072609062 +- conda: https://conda.anaconda.org/conda-forge/noarch/markdown-3.10.2-pyhcf101f3_0.conda +sha256: 20e0892592a3e7c683e3d66df704a9425d731486a97c34fc56af4da1106b2b6b +md5: ba0a9221ce1063f31692c07370d062f3 +depends: +- importlib-metadata >=4.4 +- python >=3.10 +- python +license: BSD-3-Clause +license_family: BSD +size: 85893 +timestamp: 1770694658918 +- conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.0.0-pyhd8ed1ab_0.conda +sha256: 7b1da4b5c40385791dbc3cc85ceea9fad5da680a27d5d3cb8bfaa185e304a89e +md5: 5b5203189eb668f042ac2b0826244964 +depends: +- mdurl >=0.1,<1 +- python >=3.10 +license: MIT +license_family: MIT +size: 64736 +timestamp: 1754951288511 +- conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.3-py314h67df5f8_1.conda +sha256: c279be85b59a62d5c52f5dd9a4cd43ebd08933809a8416c22c3131595607d4cf +md5: 9a17c4307d23318476d7fbf0fedc0cde +depends: +- __glibc >=2.17,<3.0.a0 +- libgcc >=14 +- python >=3.14,<3.15.0a0 +- python_abi 3.14.* *_cp314 +constrains: +- jinja2 >=3.0.0 +license: BSD-3-Clause +license_family: BSD +size: 27424 +timestamp: 1772445227915 +- conda: https://conda.anaconda.org/conda-forge/linux-64/mathjax-2.7.7-ha770c72_3.tar.bz2 +sha256: 02fef69bde69db264a12f21386612262f545b6e3e68d8f1ccec19f3eaae58edf +md5: 86e69bd82c2a2c6fd29f5ab7e02b3691 +license: Apache-2.0 +license_family: Apache +size: 22281629 +timestamp: 1662784498331 +- conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda +sha256: 78c1bbe1723449c52b7a9df1af2ee5f005209f67e40b6e1d3c7619127c43b1c7 +md5: 592132998493b3ff25fd7479396e8351 +depends: +- python >=3.9 +license: MIT +license_family: MIT +size: 14465 +timestamp: 1733255681319 +- conda: https://conda.anaconda.org/bioconda/noarch/multiqc-1.33-pyhdfd78af_0.conda +sha256: f005760b13093362fc9c997d603dd487de32ab2e821a3cbce52a42bcb8136517 +md5: 698a8a27c2b9d8a542c70cb47099a75e +depends: +- click +- coloredlogs +- humanize +- importlib-metadata +- jinja2 >=3.0.0 +- jsonschema +- markdown +- natsort +- numpy +- packaging +- pillow >=10.2.0 +- plotly >=5.18 +- polars-lts-cpu +- pyaml-env +- pydantic >=2.7.1 +- python >=3.8,!=3.14.1 +- python-dotenv +- python-kaleido 0.2.1 +- pyyaml >=4 +- requests +- rich >=10 +- rich-click +- spectra >=0.0.10 +- tiktoken +- tqdm +- typeguard +license: GPL-3.0-or-later +license_family: GPL3 +size: 4198799 +timestamp: 1765300743879 +- conda: https://conda.anaconda.org/conda-forge/noarch/narwhals-2.18.1-pyhcf101f3_1.conda +sha256: 541fd4390a0687228b8578247f1536a821d9261389a65585af9d1a6f2a14e1e0 +md5: 30bec5e8f4c3969e2b1bd407c5e52afb +depends: +- python >=3.10 +- python +license: MIT +size: 280459 +timestamp: 1774380620329 +- conda: https://conda.anaconda.org/conda-forge/noarch/natsort-8.4.0-pyhcf101f3_2.conda +sha256: aeb1548eb72e4f198e72f19d242fb695b35add2ac7b2c00e0d83687052867680 +md5: e941e85e273121222580723010bd4fa2 +depends: +- python >=3.9 +- python +license: MIT +license_family: MIT +size: 39262 +timestamp: 1770905275632 +- conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda +sha256: 3fde293232fa3fca98635e1167de6b7c7fda83caf24b9d6c91ec9eefb4f4d586 +md5: 47e340acb35de30501a76c7c799c41d7 +depends: +- __glibc >=2.17,<3.0.a0 +- libgcc >=13 +license: X11 AND BSD-3-Clause +size: 891641 +timestamp: 1738195959188 +- conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.6.1-pyhcf101f3_0.conda +sha256: f6a82172afc50e54741f6f84527ef10424326611503c64e359e25a19a8e4c1c6 +md5: a2c1eeadae7a309daed9d62c96012a2b +depends: +- python >=3.11 +- python +constrains: +- numpy >=1.25 +- scipy >=1.11.2 +- matplotlib-base >=3.8 +- pandas >=2.0 +license: BSD-3-Clause +license_family: BSD +size: 1587439 +timestamp: 1765215107045 +- conda: https://conda.anaconda.org/conda-forge/linux-64/nspr-4.38-h29cc59b_0.conda +sha256: e3664264bd936c357523b55c71ed5a30263c6ba278d726a75b1eb112e6fb0b64 +md5: e235d5566c9cc8970eb2798dd4ecf62f +depends: +- __glibc >=2.17,<3.0.a0 +- libgcc >=14 +- libstdcxx >=14 +license: MPL-2.0 +license_family: MOZILLA +size: 228588 +timestamp: 1762348634537 +- conda: https://conda.anaconda.org/conda-forge/linux-64/nss-3.118-h445c969_0.conda +sha256: 44dd98ffeac859d84a6dcba79a2096193a42fc10b29b28a5115687a680dd6aea +md5: 567fbeed956c200c1db5782a424e58ee +depends: +- __glibc >=2.17,<3.0.a0 +- libgcc >=14 +- libsqlite >=3.51.0,<4.0a0 +- libstdcxx >=14 +- libzlib >=1.3.1,<2.0a0 +- nspr >=4.38,<5.0a0 +license: MPL-2.0 +license_family: MOZILLA +size: 2057773 +timestamp: 1763485556350 +- conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.4.3-py314h2b28147_0.conda +sha256: f2ba8cb0d86a6461a6bcf0d315c80c7076083f72c6733c9290086640723f79ec +md5: 36f5b7eb328bdc204954a2225cf908e2 +depends: +- python +- libstdcxx >=14 +- libgcc >=14 +- __glibc >=2.17,<3.0.a0 +- python_abi 3.14.* *_cp314 +- libcblas >=3.9.0,<4.0a0 +- liblapack >=3.9.0,<4.0a0 +- libblas >=3.9.0,<4.0a0 +constrains: +- numpy-base <0a0 +license: BSD-3-Clause +license_family: BSD +size: 8927860 +timestamp: 1773839233468 +- conda: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.4-h55fea9a_0.conda +sha256: 3900f9f2dbbf4129cf3ad6acf4e4b6f7101390b53843591c53b00f034343bc4d +md5: 11b3379b191f63139e29c0d19dee24cd +depends: +- __glibc >=2.17,<3.0.a0 +- libgcc >=14 +- libpng >=1.6.50,<1.7.0a0 +- libstdcxx >=14 +- libtiff >=4.7.1,<4.8.0a0 +- libzlib >=1.3.1,<2.0a0 +license: BSD-2-Clause +license_family: BSD +size: 355400 +timestamp: 1758489294972 +- conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.1-h35e630c_1.conda +sha256: 44c877f8af015332a5d12f5ff0fb20ca32f896526a7d0cdb30c769df1144fb5c +md5: f61eb8cd60ff9057122a3d338b99c00f +depends: +- __glibc >=2.17,<3.0.a0 +- ca-certificates +- libgcc >=14 +license: Apache-2.0 +license_family: Apache +size: 3164551 +timestamp: 1769555830639 +- conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda +sha256: c1fc0f953048f743385d31c468b4a678b3ad20caffdeaa94bed85ba63049fd58 +md5: b76541e68fea4d511b1ac46a28dcd2c6 +depends: +- python >=3.8 +- python +license: Apache-2.0 +license_family: APACHE +size: 72010 +timestamp: 1769093650580 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pillow-12.1.1-py314h8ec4b1a_0.conda +sha256: 9e6ec8f3213e8b7d64b0ad45f84c51a2c9eba4398efda31e196c9a56186133ee +md5: 79678378ae235e24b3aa83cee1b38207 +depends: +- python +- libgcc >=14 +- __glibc >=2.17,<3.0.a0 +- libwebp-base >=1.6.0,<2.0a0 +- zlib-ng >=2.3.3,<2.4.0a0 +- python_abi 3.14.* *_cp314 +- tk >=8.6.13,<8.7.0a0 +- libjpeg-turbo >=3.1.2,<4.0a0 +- libxcb >=1.17.0,<2.0a0 +- openjpeg >=2.5.4,<3.0a0 +- lcms2 >=2.18,<3.0a0 +- libtiff >=4.7.1,<4.8.0a0 +- libfreetype >=2.14.1 +- libfreetype6 >=2.14.1 +license: HPND +size: 1073026 +timestamp: 1770794002408 +- conda: https://conda.anaconda.org/conda-forge/noarch/plotly-6.6.0-pyhd8ed1ab_0.conda +sha256: c418d325359fc7a0074cea7f081ef1bce26e114d2da8a0154c5d27ecc87a08e7 +md5: 3e9427ee186846052e81fadde8ebe96a +depends: +- narwhals >=1.15.1 +- packaging +- python >=3.10 +constrains: +- ipywidgets >=7.6 +license: MIT +license_family: MIT +size: 5251872 +timestamp: 1772628857717 +- conda: https://conda.anaconda.org/conda-forge/noarch/polars-1.39.3-pyh58ad624_1.conda +sha256: d332c2d5002fc440ae37ed9679ffc21b552f18d20232390005d1dd3bce0888d3 +md5: d5a4e013a30dd8dfde9ab39f45aaf9c1 +depends: +- polars-runtime-32 ==1.39.3 +- python >=3.10 +- python +constrains: +- numpy >=1.16.0 +- pyarrow >=7.0.0 +- fastexcel >=0.9 +- openpyxl >=3.0.0 +- xlsx2csv >=0.8.0 +- connectorx >=0.3.2 +- deltalake >=1.0.0 +- pyiceberg >=0.7.1 +- altair >=5.4.0 +- great_tables >=0.8.0 +- polars-runtime-32 ==1.39.3 +- polars-runtime-64 ==1.39.3 +- polars-runtime-compat ==1.39.3 +license: MIT +license_family: MIT +size: 533495 +timestamp: 1774207987966 +- conda: https://conda.anaconda.org/conda-forge/noarch/polars-lts-cpu-1.34.0.deprecated-hc364b38_0.conda +sha256: e466fb31f67ba9bde18deafeb34263ca5eb25807f39ead0e9d753a8e82c4c4f4 +md5: ef0340e75068ac8ff96462749b5c98e7 +depends: +- polars >=1.34.0 +- polars-runtime-compat >=1.34.0 +license: MIT +license_family: MIT +size: 3902 +timestamp: 1760206808444 +- conda: https://conda.anaconda.org/conda-forge/linux-64/polars-runtime-32-1.39.3-py310hffdcd12_1.conda +noarch: python +sha256: 9744f8086bb0832998f5b01076f57ddc9efbe460e493b14303c3567dc4f401e7 +md5: f9327f9f2cfc4215f55b613e64afd3ba +depends: +- python +- libstdcxx >=14 +- libgcc >=14 +- __glibc >=2.17,<3.0.a0 +- _python_abi3_support 1.* +- cpython >=3.10 +constrains: +- __glibc >=2.17 +license: MIT +license_family: MIT +size: 37570276 +timestamp: 1774207987966 +- conda: https://conda.anaconda.org/conda-forge/linux-64/polars-runtime-compat-1.39.3-py310hbcd5346_1.conda +noarch: python +sha256: bf0b932713f0f27924f42159c98426e0073bb6145ed796eaa4cec79ca05363c7 +md5: 4b9b312453eebd6fbdbbe2a88fa1b5c4 +depends: +- python +- libgcc >=14 +- libstdcxx >=14 +- __glibc >=2.17,<3.0.a0 +- _python_abi3_support 1.* +- cpython >=3.10 +constrains: +- __glibc >=2.17 +license: MIT +license_family: MIT +size: 37224264 +timestamp: 1774207985377 +- conda: https://conda.anaconda.org/conda-forge/linux-64/procps-ng-4.0.6-h18c060e_0.conda +sha256: 4ce2e1ee31a6217998f78c31ce7dc0a3e0557d9238b51d49dd20c52d467a126d +md5: f2c23a77b25efcad57d377b34bd84941 +depends: +- __glibc >=2.17,<3.0.a0 +- libgcc >=14 +- ncurses >=6.5,<7.0a0 +license: GPL-2.0-or-later AND LGPL-2.0-or-later +license_family: GPL +size: 593603 +timestamp: 1769710381284 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-hb9d3cd8_1002.conda +sha256: 9c88f8c64590e9567c6c80823f0328e58d3b1efb0e1c539c0315ceca764e0973 +md5: b3c17d95b5a10c6e64a21fa17573e70e +depends: +- __glibc >=2.17,<3.0.a0 +- libgcc >=13 +license: MIT +license_family: MIT +size: 8252 +timestamp: 1726802366959 +- conda: https://conda.anaconda.org/conda-forge/noarch/pyaml-env-1.2.2-pyhd8ed1ab_0.conda +sha256: 58994e0d2ea8584cb399546e6f6896d771995e6121d1a7b6a2c9948388358932 +md5: e17be1016bcc3516827b836cd3e4d9dc +depends: +- python >=3.9 +- pyyaml >=5.0,<=7.0 +license: MIT +license_family: MIT +size: 14645 +timestamp: 1736766960536 +- conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.12.5-pyhcf101f3_1.conda +sha256: 868569d9505b7fe246c880c11e2c44924d7613a8cdcc1f6ef85d5375e892f13d +md5: c3946ed24acdb28db1b5d63321dbca7d +depends: +- typing-inspection >=0.4.2 +- typing_extensions >=4.14.1 +- python >=3.10 +- typing-extensions >=4.6.1 +- annotated-types >=0.6.0 +- pydantic-core ==2.41.5 +- python +license: MIT +license_family: MIT +size: 340482 +timestamp: 1764434463101 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pydantic-core-2.41.5-py314h2e6c369_1.conda +sha256: 7e0ae379796e28a429f8e48f2fe22a0f232979d65ec455e91f8dac689247d39f +md5: 432b0716a1dfac69b86aa38fdd59b7e6 +depends: +- python +- typing-extensions >=4.6.0,!=4.7.0 +- libgcc >=14 +- __glibc >=2.17,<3.0.a0 +- python_abi 3.14.* *_cp314 +constrains: +- __glibc >=2.17 +license: MIT +license_family: MIT +size: 1943088 +timestamp: 1762988995556 +- conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda +sha256: 5577623b9f6685ece2697c6eb7511b4c9ac5fb607c9babc2646c811b428fd46a +md5: 6b6ece66ebcae2d5f326c77ef2c5a066 +depends: +- python >=3.9 +license: BSD-2-Clause +license_family: BSD +size: 889287 +timestamp: 1750615908735 +- conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda +sha256: ba3b032fa52709ce0d9fd388f63d330a026754587a2f461117cac9ab73d8d0d8 +md5: 461219d1a5bd61342293efa2c0c90eac +depends: +- __unix +- python >=3.9 +license: BSD-3-Clause +license_family: BSD +size: 21085 +timestamp: 1733217331982 +- conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.14.3-h32b2ec7_101_cp314.conda +build_number: 101 +sha256: cb0628c5f1732f889f53a877484da98f5a0e0f47326622671396fb4f2b0cd6bd +md5: c014ad06e60441661737121d3eae8a60 +depends: +- __glibc >=2.17,<3.0.a0 +- bzip2 >=1.0.8,<2.0a0 +- ld_impl_linux-64 >=2.36.1 +- libexpat >=2.7.3,<3.0a0 +- libffi >=3.5.2,<3.6.0a0 +- libgcc >=14 +- liblzma >=5.8.2,<6.0a0 +- libmpdec >=4.0.0,<5.0a0 +- libsqlite >=3.51.2,<4.0a0 +- libuuid >=2.41.3,<3.0a0 +- libzlib >=1.3.1,<2.0a0 +- ncurses >=6.5,<7.0a0 +- openssl >=3.5.5,<4.0a0 +- python_abi 3.14.* *_cp314 +- readline >=8.3,<9.0a0 +- tk >=8.6.13,<8.7.0a0 +- tzdata +- zstd >=1.5.7,<1.6.0a0 +license: Python-2.0 +size: 36702440 +timestamp: 1770675584356 +python_site_packages_path: lib/python3.14/site-packages +- conda: https://conda.anaconda.org/conda-forge/noarch/python-dotenv-1.2.2-pyhcf101f3_0.conda +sha256: 74e417a768f59f02a242c25e7db0aa796627b5bc8c818863b57786072aeb85e5 +md5: 130584ad9f3a513cdd71b1fdc1244e9c +depends: +- python >=3.10 +license: BSD-3-Clause +license_family: BSD +size: 27848 +timestamp: 1772388605021 +- conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.14.3-h4df99d1_101.conda +sha256: 233aebd94c704ac112afefbb29cf4170b7bc606e22958906f2672081bc50638a +md5: 235765e4ea0d0301c75965985163b5a1 +depends: +- cpython 3.14.3.* +- python_abi * *_cp314 +license: Python-2.0 +size: 50062 +timestamp: 1770674497152 +- conda: https://conda.anaconda.org/conda-forge/noarch/python-kaleido-0.2.1-pyhd8ed1ab_0.tar.bz2 +sha256: e17bf63a30aec33432f1ead86e15e9febde9fc40a7f869c0e766be8d2db44170 +md5: 310259a5b03ff02289d7705f39e2b1d2 +depends: +- kaleido-core 0.2.1.* +- python >=3.5 +license: MIT +license_family: MIT +size: 18320 +timestamp: 1615204747600 +- conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda +build_number: 8 +sha256: ad6d2e9ac39751cc0529dd1566a26751a0bf2542adb0c232533d32e176e21db5 +md5: 0539938c55b6b1a59b560e843ad864a4 +constrains: +- python 3.14.* *_cp314 +license: BSD-3-Clause +license_family: BSD +size: 6989 +timestamp: 1752805904792 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.3-py314h67df5f8_1.conda +sha256: b318fb070c7a1f89980ef124b80a0b5ccf3928143708a85e0053cde0169c699d +md5: 2035f68f96be30dc60a5dfd7452c7941 +depends: +- __glibc >=2.17,<3.0.a0 +- libgcc >=14 +- python >=3.14,<3.15.0a0 +- python_abi 3.14.* *_cp314 +- yaml >=0.2.5,<0.3.0a0 +license: MIT +license_family: MIT +size: 202391 +timestamp: 1770223462836 +- conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda +sha256: 12ffde5a6f958e285aa22c191ca01bbd3d6e710aa852e00618fa6ddc59149002 +md5: d7d95fc8287ea7bf33e0e7116d2b95ec +depends: +- __glibc >=2.17,<3.0.a0 +- libgcc >=14 +- ncurses >=6.5,<7.0a0 +license: GPL-3.0-only +license_family: GPL +size: 345073 +timestamp: 1765813471974 +- conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.37.0-pyhcf101f3_0.conda +sha256: 0577eedfb347ff94d0f2fa6c052c502989b028216996b45c7f21236f25864414 +md5: 870293df500ca7e18bedefa5838a22ab +depends: +- attrs >=22.2.0 +- python >=3.10 +- rpds-py >=0.7.0 +- typing_extensions >=4.4.0 +- python +license: MIT +license_family: MIT +size: 51788 +timestamp: 1760379115194 +- conda: https://conda.anaconda.org/conda-forge/linux-64/regex-2026.2.28-py314h5bd0f2a_0.conda +sha256: e085e336f1446f5263a3ec9747df8c719b6996753901181add50dc4fdd8bb2e8 +md5: 3c8b6a8c4d0ff5a264e9831eac4941f4 +depends: +- __glibc >=2.17,<3.0.a0 +- libgcc >=14 +- python >=3.14,<3.15.0a0 +- python_abi 3.14.* *_cp314 +license: Apache-2.0 AND CNRI-Python +license_family: PSF +size: 411924 +timestamp: 1772255161535 +- conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.5-pyhcf101f3_1.conda +sha256: 7813c38b79ae549504b2c57b3f33394cea4f2ad083f0994d2045c2e24cb538c5 +md5: c65df89a0b2e321045a9e01d1337b182 +depends: +- python >=3.10 +- certifi >=2017.4.17 +- charset-normalizer >=2,<4 +- idna >=2.5,<4 +- urllib3 >=1.21.1,<3 +- python +constrains: +- chardet >=3.0.2,<6 +license: Apache-2.0 +license_family: APACHE +size: 63602 +timestamp: 1766926974520 +- conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.3.3-pyhcf101f3_0.conda +sha256: b06ce84d6a10c266811a7d3adbfa1c11f13393b91cc6f8a5b468277d90be9590 +md5: 7a6289c50631d620652f5045a63eb573 +depends: +- markdown-it-py >=2.2.0 +- pygments >=2.13.0,<3.0.0 +- python >=3.10 +- typing_extensions >=4.0.0,<5.0.0 +- python +license: MIT +license_family: MIT +size: 208472 +timestamp: 1771572730357 +- conda: https://conda.anaconda.org/conda-forge/noarch/rich-click-1.9.7-pyh8f84b5b_0.conda +sha256: aa3fcb167321bae51998de2e94d199109c9024f25a5a063cb1c28d8f1af33436 +md5: 0c20a8ebcddb24a45da89d5e917e6cb9 +depends: +- python >=3.10 +- rich >=12 +- click >=8 +- typing-extensions >=4 +- __unix +- python +license: MIT +license_family: MIT +size: 64356 +timestamp: 1769850479089 +- conda: https://conda.anaconda.org/conda-forge/linux-64/rpds-py-0.30.0-py314h2e6c369_0.conda +sha256: e53b0cbf3b324eaa03ca1fe1a688fdf4ab42cea9c25270b0a7307d8aaaa4f446 +md5: c1c368b5437b0d1a68f372ccf01cb133 +depends: +- python +- libgcc >=14 +- __glibc >=2.17,<3.0.a0 +- python_abi 3.14.* *_cp314 +constrains: +- __glibc >=2.17 +license: MIT +license_family: MIT +size: 376121 +timestamp: 1764543122774 +- conda: https://conda.anaconda.org/conda-forge/noarch/spectra-0.0.11-pyhd8ed1ab_2.conda +sha256: 7c65782d2511738e62c70462e89d65da4fa54d5a7e47c46667bcd27a59f81876 +md5: 472239e4eb7b5a84bb96b3ed7e3a596a +depends: +- colormath >=3.0.0 +- python >=3.9 +license: MIT +license_family: MIT +size: 22284 +timestamp: 1735770589188 +- conda: https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.52.0-h04a0ce9_0.conda +sha256: c9af81e7830d9c4b67a7f48e512d060df2676b29cac59e3b31f09dbfcee29c58 +md5: 7d9d7efe9541d4bb71b5934e8ee348ea +depends: +- __glibc >=2.17,<3.0.a0 +- icu >=78.2,<79.0a0 +- libgcc >=14 +- libsqlite 3.52.0 hf4e2dac_0 +- libzlib >=1.3.1,<2.0a0 +- ncurses >=6.5,<7.0a0 +- readline >=8.3,<9.0a0 +license: blessing +size: 203641 +timestamp: 1772818888368 +- conda: https://conda.anaconda.org/conda-forge/linux-64/tiktoken-0.12.0-py314h67fec18_3.conda +sha256: 7e395d67fd249d901beb1ae269057763c0d8c3ee5f7a348694bdb16d158a37d9 +md5: d705f9d8a1185a2b01cced191177a028 +depends: +- __glibc >=2.17,<3.0.a0 +- libgcc >=14 +- libstdcxx >=14 +- python >=3.14,<3.15.0a0 +- python_abi 3.14.* *_cp314 +- regex >=2022.1.18 +- requests >=2.26.0 +constrains: +- __glibc >=2.17 +license: MIT +license_family: MIT +size: 939648 +timestamp: 1764028306357 +- conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda +sha256: cafeec44494f842ffeca27e9c8b0c27ed714f93ac77ddadc6aaf726b5554ebac +md5: cffd3bdd58090148f4cfcd831f4b26ab +depends: +- __glibc >=2.17,<3.0.a0 +- libgcc >=14 +- libzlib >=1.3.1,<2.0a0 +constrains: +- xorg-libx11 >=1.8.12,<2.0a0 +license: TCL +license_family: BSD +size: 3301196 +timestamp: 1769460227866 +- conda: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.67.3-pyh8f84b5b_0.conda +sha256: 9ef8e47cf00e4d6dcc114eb32a1504cc18206300572ef14d76634ba29dfe1eb6 +md5: e5ce43272193b38c2e9037446c1d9206 +depends: +- python >=3.10 +- __unix +- python +license: MPL-2.0 and MIT +size: 94132 +timestamp: 1770153424136 +- conda: https://conda.anaconda.org/conda-forge/noarch/typeguard-4.5.1-pyhd8ed1ab_0.conda +sha256: 39d8ae33c43cdb8f771373e149b0b4fae5a08960ac58dcca95b2f1642bb17448 +md5: 260af1b0a94f719de76b4e14094e9a3b +depends: +- importlib-metadata >=3.6 +- python >=3.10 +- typing-extensions >=4.10.0 +- typing_extensions >=4.14.0 +constrains: +- pytest >=7 +license: MIT +license_family: MIT +size: 36838 +timestamp: 1771532971545 +- conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda +sha256: 7c2df5721c742c2a47b2c8f960e718c930031663ac1174da67c1ed5999f7938c +md5: edd329d7d3a4ab45dcf905899a7a6115 +depends: +- typing_extensions ==4.15.0 pyhcf101f3_0 +license: PSF-2.0 +license_family: PSF +size: 91383 +timestamp: 1756220668932 +- conda: https://conda.anaconda.org/conda-forge/noarch/typing-inspection-0.4.2-pyhd8ed1ab_1.conda +sha256: 70db27de58a97aeb7ba7448366c9853f91b21137492e0b4430251a1870aa8ff4 +md5: a0a4a3035667fc34f29bfbd5c190baa6 +depends: +- python >=3.10 +- typing_extensions >=4.12.0 +license: MIT +license_family: MIT +size: 18923 +timestamp: 1764158430324 +- conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda +sha256: 032271135bca55aeb156cee361c81350c6f3fb203f57d024d7e5a1fc9ef18731 +md5: 0caa1af407ecff61170c9437a808404d +depends: +- python >=3.10 +- python +license: PSF-2.0 +license_family: PSF +size: 51692 +timestamp: 1756220668932 +- conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda +sha256: 1d30098909076af33a35017eed6f2953af1c769e273a0626a04722ac4acaba3c +md5: ad659d0a2b3e47e38d829aa8cad2d610 +license: LicenseRef-Public-Domain +size: 119135 +timestamp: 1767016325805 +- conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.6.3-pyhd8ed1ab_0.conda +sha256: af641ca7ab0c64525a96fd9ad3081b0f5bcf5d1cbb091afb3f6ed5a9eee6111a +md5: 9272daa869e03efe68833e3dc7a02130 +depends: +- backports.zstd >=1.0.0 +- brotli-python >=1.2.0 +- h2 >=4,<5 +- pysocks >=1.5.6,<2.0,!=1.5.7 +- python >=3.10 +license: MIT +license_family: MIT +size: 103172 +timestamp: 1767817860341 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.12-hb03c661_1.conda +sha256: 6bc6ab7a90a5d8ac94c7e300cc10beb0500eeba4b99822768ca2f2ef356f731b +md5: b2895afaf55bf96a8c8282a2e47a5de0 +depends: +- __glibc >=2.17,<3.0.a0 +- libgcc >=14 +license: MIT +license_family: MIT +size: 15321 +timestamp: 1762976464266 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.5-hb03c661_1.conda +sha256: 25d255fb2eef929d21ff660a0c687d38a6d2ccfbcbf0cc6aa738b12af6e9d142 +md5: 1dafce8548e38671bea82e3f5c6ce22f +depends: +- __glibc >=2.17,<3.0.a0 +- libgcc >=14 +license: MIT +license_family: MIT +size: 20591 +timestamp: 1762976546182 +- conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h280c20c_3.conda +sha256: 6d9ea2f731e284e9316d95fa61869fe7bbba33df7929f82693c121022810f4ad +md5: a77f85f77be52ff59391544bfe73390a +depends: +- libgcc >=14 +- __glibc >=2.17,<3.0.a0 +license: MIT +license_family: MIT +size: 85189 +timestamp: 1753484064210 +- conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda +sha256: b4533f7d9efc976511a73ef7d4a2473406d7f4c750884be8e8620b0ce70f4dae +md5: 30cd29cb87d819caead4d55184c1d115 +depends: +- python >=3.10 +- python +license: MIT +license_family: MIT +size: 24194 +timestamp: 1764460141901 +- conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-ng-2.3.3-hceb46e0_1.conda +sha256: ea4e50c465d70236408cb0bfe0115609fd14db1adcd8bd30d8918e0291f8a75f +md5: 2aadb0d17215603a82a2a6b0afd9a4cb +depends: +- __glibc >=2.17,<3.0.a0 +- libgcc >=14 +- libstdcxx >=14 +license: Zlib +license_family: Other +size: 122618 +timestamp: 1770167931827 +- conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda +sha256: 68f0206ca6e98fea941e5717cec780ed2873ffabc0e1ed34428c061e2c6268c7 +md5: 4a13eeac0b5c8e5b8ab496e6c4ddd829 +depends: +- __glibc >=2.17,<3.0.a0 +- libzlib >=1.3.1,<2.0a0 +license: BSD-3-Clause +license_family: BSD +size: 601375 +timestamp: 1764777111296 diff --git a/modules/nf-core/multiqc/.conda-lock/linux_amd64-bd-db7c73dae76bc9e6_1.txt b/modules/nf-core/multiqc/.conda-lock/linux_amd64-bd-db7c73dae76bc9e6_1.txt new file mode 100644 index 0000000..a55a4d4 --- /dev/null +++ b/modules/nf-core/multiqc/.conda-lock/linux_amd64-bd-db7c73dae76bc9e6_1.txt @@ -0,0 +1,126 @@ + +# This file may be used to create an environment using: +# $ conda create --name --file +# platform: linux-64 +@EXPLICIT +https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_18.conda#239c5e9546c38a1e884d69effcf4c882 +https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda#a9f577daf3de00bca7c3c76c0ecbd1de +https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_18.conda#0aa00f03f9e39fb9876085dee11a85d4 +https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda#d2ffd7602c02f2b316fd921d39876885 +https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.2-h25fd6f3_2.conda#d87ff7921124eccd67248aa483c23fec +https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda#4a13eeac0b5c8e5b8ab496e6c4ddd829 +https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_102.conda#18335a698559cdbcd86150a48bf54ba6 +https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.5-hecca717_0.conda#49f570f3bc4c874a06ea69b7225753af +https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda#a360c33a5abe61c07959e449fa1453eb +https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.3-hb03c661_0.conda#b88d90cad08e6bc8ad540cb310a761fb +https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb03c661_1.conda#2c21e66f50753a083cbe6b80f38268fa +https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_18.conda#1b08cd684f34175e4514474793d44bcb +https://conda.anaconda.org/conda-forge/linux-64/icu-78.3-h33c6efd_0.conda#c80d8a3b84358cb967fa81e7075fbc8a +https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.53.0-hf4e2dac_0.conda#810d83373448da85c3f673fbcb7ad3a3 +https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.42-h5347b49_0.conda#38ffe67b78c9d4de527be8315e5ada2c +https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda#47e340acb35de30501a76c7c799c41d7 +https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.4.22-hbd8a1cb_0.conda#e18ad67cf881dcadee8b8d9e2f8e5f73 +https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.2-h35e630c_0.conda#da1b85b6a87e141f5140bb9924cecab0 +https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda#0539938c55b6b1a59b560e843ad864a4 +https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda#d7d95fc8287ea7bf33e0e7116d2b95ec +https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda#cffd3bdd58090148f4cfcd831f4b26ab +https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda#ad659d0a2b3e47e38d829aa8cad2d610 +https://conda.anaconda.org/conda-forge/linux-64/python-3.14.4-habeac84_100_cp314.conda#a443f87920815d41bfe611296e507995 +https://conda.anaconda.org/conda-forge/noarch/cpython-3.14.4-py314hd8ed1ab_100.conda#f111d4cfaf1fe9496f386bc98ae94452 +https://conda.anaconda.org/conda-forge/noarch/python-gil-3.14.4-h4df99d1_100.conda#e4e60721757979d01d3964122f674959 +https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda#aaa2a381ccc56eac91d63b6c1240312f +https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda#0caa1af407ecff61170c9437a808404d +https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda#edd329d7d3a4ab45dcf905899a7a6115 +https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda#2934f256a8acfe48f6ebb4fce6cde29c +https://conda.anaconda.org/conda-forge/noarch/attrs-26.1.0-pyhcf101f3_0.conda#c6b0543676ecb1fb2d7643941fe375f2 +https://conda.anaconda.org/conda-forge/noarch/backports.zstd-1.3.0-py314h680f03e_0.conda#a2ac7763a9ac75055b68f325d3255265 +https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.2.0-py314h3de4e8d_1.conda#8910d2c46f7e7b519129f486e0fe927a +https://conda.anaconda.org/conda-forge/noarch/certifi-2026.4.22-pyhd8ed1ab_0.conda#929471569c93acefb30282a22060dcd5 +https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.7-pyhd8ed1ab_0.conda#a9167b9571f3baa9d448faa2139d1089 +https://conda.anaconda.org/conda-forge/noarch/click-8.3.2-pyhc90fa1f_0.conda#4d18bc3af7cfcea97bd817164672a08c +https://conda.anaconda.org/conda-forge/noarch/humanfriendly-10.0-pyh707e725_8.conda#7fe569c10905402ed47024fc481bb371 +https://conda.anaconda.org/conda-forge/noarch/coloredlogs-15.0.1-pyhd8ed1ab_4.conda#b866ff7007b934d564961066c8195983 +https://conda.anaconda.org/conda-forge/noarch/networkx-3.6.1-pyhcf101f3_0.conda#a2c1eeadae7a309daed9d62c96012a2b +https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.2.0-h68bc16d_18.conda#646855f357199a12f02a87382d429b75 +https://conda.anaconda.org/conda-forge/linux-64/libgfortran-15.2.0-h69a702a_18.conda#9063115da5bc35fdc3e1002e69b9ef6e +https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.32-pthreads_h94d23a6_0.conda#89d61bc91d3f39fda0ca10fcd3c68594 +https://conda.anaconda.org/conda-forge/linux-64/libblas-3.11.0-6_h4a7cf45_openblas.conda#6d6d225559bfa6e2f3c90ee9c03d4e2e +https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.11.0-6_h0358290_openblas.conda#36ae340a916635b97ac8a0655ace2a35 +https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.11.0-6_h47877c9_openblas.conda#881d801569b201c2e753f03c84b85e15 +https://conda.anaconda.org/conda-forge/linux-64/numpy-2.4.3-py314h2b28147_0.conda#36f5b7eb328bdc204954a2225cf908e2 +https://conda.anaconda.org/conda-forge/noarch/colormath-3.0.0-pyhd8ed1ab_4.conda#071cf7b0ce333c81718b054066c15102 +https://conda.anaconda.org/conda-forge/linux-64/expat-2.7.5-hecca717_0.conda#7de50d165039df32d38be74c1b34a910 +https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2#0c96522c6bdaed4b1566d11387caaf45 +https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2#34893075a5c9e55cdafac56607368fc6 +https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2#4d59c254e01d9cde7957100457e2d5fb +https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.conda#49023d73832ef61042f6a237cb2687e7 +https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.58-h421ea60_0.conda#eba48a68a1a2b9d3c0d9511548db85db +https://conda.anaconda.org/conda-forge/linux-64/libfreetype6-2.14.3-h73754d4_0.conda#fb16b4b69e3f1dcfe79d80db8fd0c55d +https://conda.anaconda.org/conda-forge/linux-64/libfreetype-2.14.3-ha770c72_0.conda#e289f3d17880e44b633ba911d57a321b +https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.17.1-h27c8c51_0.conda#867127763fbe935bab59815b6e0b7b5c +https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda#a7970cd949a077b7cb9696379d338681 +https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda#0a802cb9888dd14eeefc611f05c40b6e +https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda#8e6923fc12f1fe8f8c4e5c9f343256ac +https://conda.anaconda.org/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda#164fc43f0b53b6e3a7bc7dce5e4f1dc9 +https://conda.anaconda.org/conda-forge/noarch/humanize-4.15.0-pyhd8ed1ab_0.conda#daddf757c3ecd6067b9af1df1f25d89e +https://conda.anaconda.org/conda-forge/noarch/idna-3.13-pyhcf101f3_0.conda#fb7130c190f9b4ec91219840a05ba3ac +https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.1-pyhcf101f3_0.conda#e1c36c6121a7c9c76f2f148f1e83b983 +https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.8.0-pyhcf101f3_0.conda#080594bf4493e6bae2607e65390c520a +https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.3-py314h67df5f8_1.conda#9a17c4307d23318476d7fbf0fedc0cde +https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda#04558c96691bed63104678757beb4f8d +https://conda.anaconda.org/conda-forge/linux-64/rpds-py-0.30.0-py314h2e6c369_0.conda#c1c368b5437b0d1a68f372ccf01cb133 +https://conda.anaconda.org/conda-forge/noarch/referencing-0.37.0-pyhcf101f3_0.conda#870293df500ca7e18bedefa5838a22ab +https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2025.9.1-pyhcf101f3_0.conda#439cd0f567d697b20a8f45cb70a1005a +https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.26.0-pyhcf101f3_0.conda#ada41c863af263cc4c5fcbaff7c3e4dc +https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_18.conda#d5e96b1ed75ca01906b3d2469b4ce493 +https://conda.anaconda.org/conda-forge/linux-64/mathjax-2.7.7-ha770c72_3.tar.bz2#86e69bd82c2a2c6fd29f5ab7e02b3691 +https://conda.anaconda.org/conda-forge/linux-64/nspr-4.38-h29cc59b_0.conda#e235d5566c9cc8970eb2798dd4ecf62f +https://conda.anaconda.org/conda-forge/linux-64/nss-3.118-h445c969_0.conda#567fbeed956c200c1db5782a424e58ee +https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.53.0-h04a0ce9_0.conda#dc540e5bd5616d83a1ec46af8315ff98 +https://conda.anaconda.org/conda-forge/linux-64/kaleido-core-0.2.1-h3644ca4_0.tar.bz2#b3723b235b0758abaae8c82ce4d80146 +https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.1.4.1-hb03c661_0.conda#6178c6f2fb254558238ef4e6c56fb782 +https://conda.anaconda.org/conda-forge/linux-64/lerc-4.1.0-hdb68285_0.conda#a752488c68f2e7c456bcbd8f16eec275 +https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.25-h17f619e_0.conda#6c77a605a7a689d17d4819c0f8ac9a00 +https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.6.0-hd42ef1d_0.conda#aea31d2e5b1091feca96fcfe945c3cf9 +https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.1-h9d88235_1.conda#cd5a90476766d53e901500df9215e927 +https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.18-h0c24ade_0.conda#6f2e2c8f58160147c4d1c6f4c14cbac4 +https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-hb9d3cd8_1002.conda#b3c17d95b5a10c6e64a21fa17573e70e +https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.12-hb03c661_1.conda#b2895afaf55bf96a8c8282a2e47a5de0 +https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.5-hb03c661_1.conda#1dafce8548e38671bea82e3f5c6ce22f +https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.17.0-h8a09558_0.conda#92ed62436b625154323d40d5f2f11dd7 +https://conda.anaconda.org/conda-forge/noarch/markdown-3.10.2-pyhcf101f3_0.conda#ba0a9221ce1063f31692c07370d062f3 +https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda#592132998493b3ff25fd7479396e8351 +https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.0.0-pyhd8ed1ab_0.conda#5b5203189eb668f042ac2b0826244964 +https://conda.anaconda.org/conda-forge/noarch/natsort-8.4.0-pyhcf101f3_2.conda#e941e85e273121222580723010bd4fa2 +https://conda.anaconda.org/conda-forge/noarch/packaging-26.1-pyhc364b38_0.conda#b8ae38639d323d808da535fb71e31be8 +https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.4-h55fea9a_0.conda#11b3379b191f63139e29c0d19dee24cd +https://conda.anaconda.org/conda-forge/linux-64/zlib-ng-2.3.3-hceb46e0_1.conda#2aadb0d17215603a82a2a6b0afd9a4cb +https://conda.anaconda.org/conda-forge/linux-64/pillow-12.2.0-py314h8ec4b1a_0.conda#76c4757c0ec9d11f969e8eb44899307b +https://conda.anaconda.org/conda-forge/noarch/narwhals-2.20.0-pyhcf101f3_0.conda#6cac1a50359219d786453c6fef819f98 +https://conda.anaconda.org/conda-forge/noarch/plotly-6.6.0-pyhd8ed1ab_0.conda#3e9427ee186846052e81fadde8ebe96a +https://conda.anaconda.org/conda-forge/linux-64/polars-runtime-32-1.40.0-py310hffdcd12_0.conda#8eacf9ff4d4e1ca1b52f8f3ba3e0c993 +https://conda.anaconda.org/conda-forge/noarch/polars-1.40.0-pyh58ad624_0.conda#fd16be490f5403adfbf27dd4901bbe34 +https://conda.anaconda.org/conda-forge/linux-64/polars-runtime-compat-1.40.0-py310hbcd5346_0.conda#03a6899e17bb731c8e21b08212f1a64c +https://conda.anaconda.org/conda-forge/noarch/polars-lts-cpu-1.34.0.deprecated-hc364b38_0.conda#ef0340e75068ac8ff96462749b5c98e7 +https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h280c20c_3.conda#a77f85f77be52ff59391544bfe73390a +https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.3-py314h67df5f8_1.conda#2035f68f96be30dc60a5dfd7452c7941 +https://conda.anaconda.org/conda-forge/noarch/pyaml-env-1.2.2-pyhd8ed1ab_0.conda#e17be1016bcc3516827b836cd3e4d9dc +https://conda.anaconda.org/conda-forge/linux-64/pydantic-core-2.46.3-py314h2e6c369_0.conda#1f3fd537f929b8d3236f9f0f0e7f7a32 +https://conda.anaconda.org/conda-forge/noarch/typing-inspection-0.4.2-pyhd8ed1ab_1.conda#a0a4a3035667fc34f29bfbd5c190baa6 +https://conda.anaconda.org/conda-forge/noarch/pydantic-2.13.3-pyhcf101f3_0.conda#f690e6f204efd2e5c06b57518a383d98 +https://conda.anaconda.org/conda-forge/noarch/python-dotenv-1.2.2-pyhcf101f3_0.conda#130584ad9f3a513cdd71b1fdc1244e9c +https://conda.anaconda.org/conda-forge/noarch/python-kaleido-0.2.1-pyhd8ed1ab_0.tar.bz2#310259a5b03ff02289d7705f39e2b1d2 +https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda#461219d1a5bd61342293efa2c0c90eac +https://conda.anaconda.org/conda-forge/noarch/urllib3-2.6.3-pyhd8ed1ab_0.conda#9272daa869e03efe68833e3dc7a02130 +https://conda.anaconda.org/conda-forge/noarch/requests-2.33.1-pyhcf101f3_0.conda#10afbb4dbf06ff959ad25a92ccee6e59 +https://conda.anaconda.org/conda-forge/noarch/pygments-2.20.0-pyhd8ed1ab_0.conda#16c18772b340887160c79a6acc022db0 +https://conda.anaconda.org/conda-forge/noarch/rich-15.0.0-pyhcf101f3_0.conda#0242025a3c804966bf71aa04eee82f66 +https://conda.anaconda.org/conda-forge/noarch/rich-click-1.9.7-pyh8f84b5b_0.conda#0c20a8ebcddb24a45da89d5e917e6cb9 +https://conda.anaconda.org/conda-forge/noarch/spectra-0.0.11-pyhd8ed1ab_2.conda#472239e4eb7b5a84bb96b3ed7e3a596a +https://conda.anaconda.org/conda-forge/linux-64/regex-2026.4.4-py314h5bd0f2a_0.conda#4ffb42385183c854564f1f9adcf80a63 +https://conda.anaconda.org/conda-forge/linux-64/tiktoken-0.12.0-py314h67fec18_3.conda#d705f9d8a1185a2b01cced191177a028 +https://conda.anaconda.org/conda-forge/noarch/tqdm-4.67.3-pyh8f84b5b_0.conda#e5ce43272193b38c2e9037446c1d9206 +https://conda.anaconda.org/conda-forge/noarch/typeguard-4.5.1-pyhd8ed1ab_0.conda#260af1b0a94f719de76b4e14094e9a3b +https://conda.anaconda.org/bioconda/noarch/multiqc-1.34-pyhdfd78af_0.conda#a7111ab9a6a6146b40cbce16655ac873 +https://conda.anaconda.org/conda-forge/noarch/pip-26.0.1-pyh145f28c_0.conda#09a970fbf75e8ed1aa633827ded6aa4f +https://conda.anaconda.org/conda-forge/linux-64/procps-ng-4.0.6-h18c060e_0.conda#f2c23a77b25efcad57d377b34bd84941 diff --git a/modules/nf-core/multiqc/.conda-lock/linux_arm64-bd-40bf3b435e89dc22_1.txt b/modules/nf-core/multiqc/.conda-lock/linux_arm64-bd-40bf3b435e89dc22_1.txt new file mode 100644 index 0000000..a58231a --- /dev/null +++ b/modules/nf-core/multiqc/.conda-lock/linux_arm64-bd-40bf3b435e89dc22_1.txt @@ -0,0 +1,1502 @@ + +version: 6 +environments: +default: +channels: +- url: https://conda.anaconda.org/conda-forge/ +- url: https://conda.anaconda.org/bioconda/ +- url: https://conda.anaconda.org/bioconda/ +options: +pypi-prerelease-mode: if-necessary-or-explicit +packages: +linux-aarch64: +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-20_gnu.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/attrs-26.1.0-pyhcf101f3_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/backports.zstd-1.3.0-py314h680f03e_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/brotli-python-1.2.0-py314h352cb57_1.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h4777abc_9.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.2.25-pyhd8ed1ab_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.6-pyhd8ed1ab_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/coloredlogs-15.0.1-pyhd8ed1ab_4.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/colormath-3.0.0-pyhd8ed1ab_4.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.14.3-py314hd8ed1ab_101.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/expat-2.7.4-hfae3067_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 +- conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 +- conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 +- conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/fontconfig-2.17.1-hba86a56_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/humanfriendly-10.0-pyh707e725_8.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/humanize-4.15.0-pyhd8ed1ab_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-78.3-hcab7f73_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.11-pyhd8ed1ab_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.8.0-pyhcf101f3_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.26.0-pyhcf101f3_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2025.9.1-pyhcf101f3_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/kaleido-core-0.2.1-he5a581e_0.tar.bz2 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/lcms2-2.18-h9d5b58d_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.45.1-default_h1979696_102.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/lerc-4.1.0-h52b7260_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libblas-3.11.0-5_haddc8a3_openblas.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcblas-3.11.0-5_hd72aa62_openblas.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libdeflate-1.25-h1af38f5_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.7.4-hfae3067_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.5.2-h376a255_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libfreetype-2.14.3-h8af1aa0_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libfreetype6-2.14.3-hdae7a39_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-15.2.0-h8acb6b2_18.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-15.2.0-he9431aa_18.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgfortran-15.2.0-he9431aa_18.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgfortran5-15.2.0-h1b7bec0_18.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-15.2.0-h8acb6b2_18.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libjpeg-turbo-3.1.2-he30d5cf_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblapack-3.11.0-5_h88aeb00_openblas.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblzma-5.8.2-he30d5cf_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libmpdec-4.0.0-he30d5cf_1.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenblas-0.3.30-pthreads_h9d3fd7e_4.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libpng-1.6.55-h1abf092_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.52.0-h10b116e_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-15.2.0-hef695bb_18.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libtiff-4.7.1-hdb009f0_1.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.41.3-h1022ec0_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libwebp-base-1.6.0-ha2e29f5_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxcb-1.17.0-h262b8f6_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.2-hdc9db2a_2.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/markdown-3.10.2-pyhcf101f3_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.0.0-pyhd8ed1ab_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/markupsafe-3.0.3-py314hb76de3f_1.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/mathjax-2.7.7-h8af1aa0_3.tar.bz2 +- conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda +- conda: https://conda.anaconda.org/bioconda/noarch/multiqc-1.33-pyhdfd78af_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/narwhals-2.18.1-pyhcf101f3_1.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/natsort-8.4.0-pyhcf101f3_2.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-ha32ae93_3.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.6.1-pyhcf101f3_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/nspr-4.38-h3ad9384_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/nss-3.118-h544fa81_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/numpy-2.4.3-py314haac167e_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openjpeg-2.5.4-h5da879a_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.6.1-h546c87b_1.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pillow-12.1.1-py314hac3e5ec_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/plotly-6.6.0-pyhd8ed1ab_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/polars-1.39.3-pyh58ad624_1.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/polars-lts-cpu-1.34.0.deprecated-hc364b38_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/polars-runtime-32-1.39.3-py310hff09b76_1.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/polars-runtime-compat-1.39.3-py310hf00a4a2_1.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/procps-ng-4.0.6-h1779866_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pthread-stubs-0.4-h86ecc28_1002.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/pyaml-env-1.2.2-pyhd8ed1ab_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.12.5-pyhcf101f3_1.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pydantic-core-2.41.5-py314h451b6cc_1.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.14.3-hb06a95a_101_cp314.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/python-dotenv-1.2.2-pyhcf101f3_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.14.3-h4df99d1_101.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/python-kaleido-0.2.1-pyhd8ed1ab_0.tar.bz2 +- conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pyyaml-6.0.3-py314h807365f_1.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/readline-8.3-hb682ff5_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.37.0-pyhcf101f3_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/regex-2026.2.28-py314h51f160d_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.5-pyhcf101f3_1.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.3.3-pyhcf101f3_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/rich-click-1.9.7-pyh8f84b5b_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/rpds-py-0.30.0-py314h02b7a91_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/spectra-0.0.11-pyhd8ed1ab_2.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/sqlite-3.52.0-hf1c7be2_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tiktoken-0.12.0-py314h6a36e60_3.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-noxft_h0dc03b3_103.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.67.3-pyh8f84b5b_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/typeguard-4.5.1-pyhd8ed1ab_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/typing-inspection-0.4.2-pyhd8ed1ab_1.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.6.3-pyhd8ed1ab_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxau-1.0.12-he30d5cf_1.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxdmcp-1.1.5-he30d5cf_1.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/yaml-0.2.5-h80f16a2_3.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zlib-ng-2.3.3-ha7cb516_1.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstd-1.5.7-h85ac4a6_6.conda +packages: +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-20_gnu.conda +build_number: 20 +sha256: a2527b1d81792a0ccd2c05850960df119c2b6d8f5fdec97f2db7d25dc23b1068 +md5: 468fd3bb9e1f671d36c2cbc677e56f1d +depends: +- libgomp >=7.5.0 +constrains: +- openmp_impl <0.0a0 +license: BSD-3-Clause +license_family: BSD +size: 28926 +timestamp: 1770939656741 +- conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda +sha256: a3967b937b9abf0f2a99f3173fa4630293979bd1644709d89580e7c62a544661 +md5: aaa2a381ccc56eac91d63b6c1240312f +depends: +- cpython +- python-gil +license: MIT +license_family: MIT +size: 8191 +timestamp: 1744137672556 +- conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda +sha256: e0ea1ba78fbb64f17062601edda82097fcf815012cf52bb704150a2668110d48 +md5: 2934f256a8acfe48f6ebb4fce6cde29c +depends: +- python >=3.9 +- typing-extensions >=4.0.0 +license: MIT +license_family: MIT +size: 18074 +timestamp: 1733247158254 +- conda: https://conda.anaconda.org/conda-forge/noarch/attrs-26.1.0-pyhcf101f3_0.conda +sha256: 1b6124230bb4e571b1b9401537ecff575b7b109cc3a21ee019f65e083b8399ab +md5: c6b0543676ecb1fb2d7643941fe375f2 +depends: +- python >=3.10 +- python +license: MIT +license_family: MIT +size: 64927 +timestamp: 1773935801332 +- conda: https://conda.anaconda.org/conda-forge/noarch/backports.zstd-1.3.0-py314h680f03e_0.conda +noarch: generic +sha256: c31ab719d256bc6f89926131e88ecd0f0c5d003fe8481852c6424f4ec6c7eb29 +md5: a2ac7763a9ac75055b68f325d3255265 +depends: +- python >=3.14 +license: BSD-3-Clause AND MIT AND EPL-2.0 +size: 7514 +timestamp: 1767044983590 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/brotli-python-1.2.0-py314h352cb57_1.conda +sha256: 5a5b0cdcd7ed89c6a8fb830924967f6314a2b71944bc1ebc2c105781ba97aa75 +md5: a1b5c571a0923a205d663d8678df4792 +depends: +- libgcc >=14 +- libstdcxx >=14 +- python >=3.14,<3.15.0a0 +- python >=3.14,<3.15.0a0 *_cp314 +- python_abi 3.14.* *_cp314 +constrains: +- libbrotlicommon 1.2.0 he30d5cf_1 +license: MIT +license_family: MIT +size: 373193 +timestamp: 1764017486851 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h4777abc_9.conda +sha256: b3495077889dde6bb370938e7db82be545c73e8589696ad0843a32221520ad4c +md5: 840d8fc0d7b3209be93080bc20e07f2d +depends: +- libgcc >=14 +license: bzip2-1.0.6 +license_family: BSD +size: 192412 +timestamp: 1771350241232 +- conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda +sha256: 67cc7101b36421c5913a1687ef1b99f85b5d6868da3abbf6ec1a4181e79782fc +md5: 4492fd26db29495f0ba23f146cd5638d +depends: +- __unix +license: ISC +size: 147413 +timestamp: 1772006283803 +- conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.2.25-pyhd8ed1ab_0.conda +sha256: a6b118fd1ed6099dc4fc03f9c492b88882a780fadaef4ed4f93dc70757713656 +md5: 765c4d97e877cdbbb88ff33152b86125 +depends: +- python >=3.10 +license: ISC +size: 151445 +timestamp: 1772001170301 +- conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.6-pyhd8ed1ab_0.conda +sha256: d86dfd428b2e3c364fa90e07437c8405d635aa4ef54b25ab51d9c712be4112a5 +md5: 49ee13eb9b8f44d63879c69b8a40a74b +depends: +- python >=3.10 +license: MIT +license_family: MIT +size: 58510 +timestamp: 1773660086450 +- conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda +sha256: 38cfe1ee75b21a8361c8824f5544c3866f303af1762693a178266d7f198e8715 +md5: ea8a6c3256897cc31263de9f455e25d9 +depends: +- python >=3.10 +- __unix +- python +license: BSD-3-Clause +license_family: BSD +size: 97676 +timestamp: 1764518652276 +- conda: https://conda.anaconda.org/conda-forge/noarch/coloredlogs-15.0.1-pyhd8ed1ab_4.conda +sha256: 8021c76eeadbdd5784b881b165242db9449783e12ce26d6234060026fd6a8680 +md5: b866ff7007b934d564961066c8195983 +depends: +- humanfriendly >=9.1 +- python >=3.9 +license: MIT +license_family: MIT +size: 43758 +timestamp: 1733928076798 +- conda: https://conda.anaconda.org/conda-forge/noarch/colormath-3.0.0-pyhd8ed1ab_4.conda +sha256: 59c9e29800b483b390467f90e82b0da3a4fbf0612efe1c90813fca232780e160 +md5: 071cf7b0ce333c81718b054066c15102 +depends: +- networkx >=2.0 +- numpy +- python >=3.9 +license: BSD-3-Clause +license_family: BSD +size: 39326 +timestamp: 1735759976140 +- conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.14.3-py314hd8ed1ab_101.conda +noarch: generic +sha256: 91b06300879df746214f7363d6c27c2489c80732e46a369eb2afc234bcafb44c +md5: 3bb89e4f795e5414addaa531d6b1500a +depends: +- python >=3.14,<3.15.0a0 +- python_abi * *_cp314 +license: Python-2.0 +size: 50078 +timestamp: 1770674447292 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/expat-2.7.4-hfae3067_0.conda +sha256: 5f087bef054c681edcaae84a8c2230585b938691e371ff92957a30707b7fcdf7 +md5: b304307db639831ad7caabd2eac6fca6 +depends: +- libexpat 2.7.4 hfae3067_0 +- libgcc >=14 +license: MIT +license_family: MIT +size: 137701 +timestamp: 1771259543650 +- conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 +sha256: 58d7f40d2940dd0a8aa28651239adbf5613254df0f75789919c4e6762054403b +md5: 0c96522c6bdaed4b1566d11387caaf45 +license: BSD-3-Clause +license_family: BSD +size: 397370 +timestamp: 1566932522327 +- conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 +sha256: c52a29fdac682c20d252facc50f01e7c2e7ceac52aa9817aaf0bb83f7559ec5c +md5: 34893075a5c9e55cdafac56607368fc6 +license: OFL-1.1 +license_family: Other +size: 96530 +timestamp: 1620479909603 +- conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 +sha256: 00925c8c055a2275614b4d983e1df637245e19058d79fc7dd1a93b8d9fb4b139 +md5: 4d59c254e01d9cde7957100457e2d5fb +license: OFL-1.1 +license_family: Other +size: 700814 +timestamp: 1620479612257 +- conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.conda +sha256: 2821ec1dc454bd8b9a31d0ed22a7ce22422c0aef163c59f49dfdf915d0f0ca14 +md5: 49023d73832ef61042f6a237cb2687e7 +license: LicenseRef-Ubuntu-Font-Licence-Version-1.0 +license_family: Other +size: 1620504 +timestamp: 1727511233259 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/fontconfig-2.17.1-hba86a56_0.conda +sha256: 835aff8615dd8d8fff377679710ce81b8a2c47b6404e21a92fb349fda193a15c +md5: 0fed1ff55f4938a65907f3ecf62609db +depends: +- libexpat >=2.7.4,<3.0a0 +- libfreetype >=2.14.1 +- libfreetype6 >=2.14.1 +- libgcc >=14 +- libuuid >=2.41.3,<3.0a0 +- libzlib >=1.3.1,<2.0a0 +license: MIT +license_family: MIT +size: 279044 +timestamp: 1771382728182 +- conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda +sha256: 54eea8469786bc2291cc40bca5f46438d3e062a399e8f53f013b6a9f50e98333 +md5: a7970cd949a077b7cb9696379d338681 +depends: +- font-ttf-ubuntu +- font-ttf-inconsolata +- font-ttf-dejavu-sans-mono +- font-ttf-source-code-pro +license: BSD-3-Clause +license_family: BSD +size: 4059 +timestamp: 1762351264405 +- conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda +sha256: 84c64443368f84b600bfecc529a1194a3b14c3656ee2e832d15a20e0329b6da3 +md5: 164fc43f0b53b6e3a7bc7dce5e4f1dc9 +depends: +- python >=3.10 +- hyperframe >=6.1,<7 +- hpack >=4.1,<5 +- python +license: MIT +license_family: MIT +size: 95967 +timestamp: 1756364871835 +- conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda +sha256: 6ad78a180576c706aabeb5b4c8ceb97c0cb25f1e112d76495bff23e3779948ba +md5: 0a802cb9888dd14eeefc611f05c40b6e +depends: +- python >=3.9 +license: MIT +license_family: MIT +size: 30731 +timestamp: 1737618390337 +- conda: https://conda.anaconda.org/conda-forge/noarch/humanfriendly-10.0-pyh707e725_8.conda +sha256: fa2071da7fab758c669e78227e6094f6b3608228740808a6de5d6bce83d9e52d +md5: 7fe569c10905402ed47024fc481bb371 +depends: +- __unix +- python >=3.9 +license: MIT +license_family: MIT +size: 73563 +timestamp: 1733928021866 +- conda: https://conda.anaconda.org/conda-forge/noarch/humanize-4.15.0-pyhd8ed1ab_0.conda +sha256: 6c4343b376d0b12a4c75ab992640970d36c933cad1fd924f6a1181fa91710e80 +md5: daddf757c3ecd6067b9af1df1f25d89e +depends: +- python >=3.10 +license: MIT +license_family: MIT +size: 67994 +timestamp: 1766267728652 +- conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda +sha256: 77af6f5fe8b62ca07d09ac60127a30d9069fdc3c68d6b256754d0ffb1f7779f8 +md5: 8e6923fc12f1fe8f8c4e5c9f343256ac +depends: +- python >=3.9 +license: MIT +license_family: MIT +size: 17397 +timestamp: 1737618427549 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-78.3-hcab7f73_0.conda +sha256: 49ba6aed2c6b482bb0ba41078057555d29764299bc947b990708617712ef6406 +md5: 546da38c2fa9efacf203e2ad3f987c59 +depends: +- libgcc >=14 +- libstdcxx >=14 +license: MIT +license_family: MIT +size: 12837286 +timestamp: 1773822650615 +- conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.11-pyhd8ed1ab_0.conda +sha256: ae89d0299ada2a3162c2614a9d26557a92aa6a77120ce142f8e0109bbf0342b0 +md5: 53abe63df7e10a6ba605dc5f9f961d36 +depends: +- python >=3.10 +license: BSD-3-Clause +license_family: BSD +size: 50721 +timestamp: 1760286526795 +- conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.8.0-pyhcf101f3_0.conda +sha256: 82ab2a0d91ca1e7e63ab6a4939356667ef683905dea631bc2121aa534d347b16 +md5: 080594bf4493e6bae2607e65390c520a +depends: +- python >=3.10 +- zipp >=3.20 +- python +license: Apache-2.0 +license_family: APACHE +size: 34387 +timestamp: 1773931568510 +- conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda +sha256: fc9ca7348a4f25fed2079f2153ecdcf5f9cf2a0bc36c4172420ca09e1849df7b +md5: 04558c96691bed63104678757beb4f8d +depends: +- markupsafe >=2.0 +- python >=3.10 +- python +license: BSD-3-Clause +license_family: BSD +size: 120685 +timestamp: 1764517220861 +- conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.26.0-pyhcf101f3_0.conda +sha256: db973a37d75db8e19b5f44bbbdaead0c68dde745407f281e2a7fe4db74ec51d7 +md5: ada41c863af263cc4c5fcbaff7c3e4dc +depends: +- attrs >=22.2.0 +- jsonschema-specifications >=2023.3.6 +- python >=3.10 +- referencing >=0.28.4 +- rpds-py >=0.25.0 +- python +license: MIT +license_family: MIT +size: 82356 +timestamp: 1767839954256 +- conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2025.9.1-pyhcf101f3_0.conda +sha256: 0a4f3b132f0faca10c89fdf3b60e15abb62ded6fa80aebfc007d05965192aa04 +md5: 439cd0f567d697b20a8f45cb70a1005a +depends: +- python >=3.10 +- referencing >=0.31.0 +- python +license: MIT +license_family: MIT +size: 19236 +timestamp: 1757335715225 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/kaleido-core-0.2.1-he5a581e_0.tar.bz2 +sha256: d3c7f4797566e6f983d16c2a87063a18e4b2d819a66230190a21584d70042755 +md5: 4f0d284f5d11e04277b552eb1c172c7f +depends: +- __glibc >=2.17,<3.0.a0 +- expat >=2.2.10,<3.0.0a0 +- fontconfig +- fonts-conda-forge +- libgcc-ng >=9.3.0 +- mathjax 2.7.* +- nspr >=4.29,<5.0a0 +- nss >=3.62,<4.0a0 +- sqlite >=3.34.0,<4.0a0 +license: MIT +license_family: MIT +size: 65750397 +timestamp: 1615199465742 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/lcms2-2.18-h9d5b58d_0.conda +sha256: 379ef5e91a587137391a6149755d0e929f1a007d2dcb211318ac670a46c8596f +md5: bb960f01525b5e001608afef9d47b79c +depends: +- libgcc >=14 +- libjpeg-turbo >=3.1.2,<4.0a0 +- libtiff >=4.7.1,<4.8.0a0 +license: MIT +license_family: MIT +size: 293039 +timestamp: 1768184778398 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.45.1-default_h1979696_102.conda +sha256: 7abd913d81a9bf00abb699e8987966baa2065f5132e37e815f92d90fc6bba530 +md5: a21644fc4a83da26452a718dc9468d5f +depends: +- zstd >=1.5.7,<1.6.0a0 +constrains: +- binutils_impl_linux-aarch64 2.45.1 +license: GPL-3.0-only +license_family: GPL +size: 875596 +timestamp: 1774197520746 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/lerc-4.1.0-h52b7260_0.conda +sha256: 8957fd460c1c132c8031f65fd5f56ec3807fd71b7cab2c5e2b0937b13404ab36 +md5: d13423b06447113a90b5b1366d4da171 +depends: +- libgcc >=14 +- libstdcxx >=14 +license: Apache-2.0 +license_family: Apache +size: 240444 +timestamp: 1773114901155 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libblas-3.11.0-5_haddc8a3_openblas.conda +build_number: 5 +sha256: 700f3c03d0fba8e687a345404a45fbabe781c1cf92242382f62cef2948745ec4 +md5: 5afcea37a46f76ec1322943b3c4dfdc0 +depends: +- libopenblas >=0.3.30,<0.3.31.0a0 +- libopenblas >=0.3.30,<1.0a0 +constrains: +- mkl <2026 +- libcblas 3.11.0 5*_openblas +- liblapack 3.11.0 5*_openblas +- liblapacke 3.11.0 5*_openblas +- blas 2.305 openblas +license: BSD-3-Clause +license_family: BSD +size: 18369 +timestamp: 1765818610617 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcblas-3.11.0-5_hd72aa62_openblas.conda +build_number: 5 +sha256: 3fad5c9de161dccb4e42c8b1ae8eccb33f4ed56bccbcced9cbb0956ae7869e61 +md5: 0b2f1143ae2d0aa4c991959d0daaf256 +depends: +- libblas 3.11.0 5_haddc8a3_openblas +constrains: +- liblapack 3.11.0 5*_openblas +- liblapacke 3.11.0 5*_openblas +- blas 2.305 openblas +license: BSD-3-Clause +license_family: BSD +size: 18371 +timestamp: 1765818618899 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libdeflate-1.25-h1af38f5_0.conda +sha256: 48814b73bd462da6eed2e697e30c060ae16af21e9fbed30d64feaf0aad9da392 +md5: a9138815598fe6b91a1d6782ca657b0c +depends: +- libgcc >=14 +license: MIT +license_family: MIT +size: 71117 +timestamp: 1761979776756 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.7.4-hfae3067_0.conda +sha256: 995ce3ad96d0f4b5ed6296b051a0d7b6377718f325bc0e792fbb96b0e369dad7 +md5: 57f3b3da02a50a1be2a6fe847515417d +depends: +- libgcc >=14 +constrains: +- expat 2.7.4.* +license: MIT +license_family: MIT +size: 76564 +timestamp: 1771259530958 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.5.2-h376a255_0.conda +sha256: 3df4c539449aabc3443bbe8c492c01d401eea894603087fca2917aa4e1c2dea9 +md5: 2f364feefb6a7c00423e80dcb12db62a +depends: +- libgcc >=14 +license: MIT +license_family: MIT +size: 55952 +timestamp: 1769456078358 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libfreetype-2.14.3-h8af1aa0_0.conda +sha256: 752e4f66283d7deb4c6fd47d88df644d8daa2aaa825a54f3bf350a625190192a +md5: a229e22d4d8814a07702b0919d8e6701 +depends: +- libfreetype6 >=2.14.3 +license: GPL-2.0-only OR FTL +size: 8125 +timestamp: 1774301094057 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libfreetype6-2.14.3-hdae7a39_0.conda +sha256: 8e6b27fe4eec4c2fa7b7769a21973734c8dba1de80086fb0213e58375ac09f4c +md5: b99ed99e42dafb27889483b3098cace7 +depends: +- libgcc >=14 +- libpng >=1.6.55,<1.7.0a0 +- libzlib >=1.3.2,<2.0a0 +constrains: +- freetype >=2.14.3 +license: GPL-2.0-only OR FTL +size: 422941 +timestamp: 1774301093473 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-15.2.0-h8acb6b2_18.conda +sha256: 43df385bedc1cab11993c4369e1f3b04b4ca5d0ea16cba6a0e7f18dbc129fcc9 +md5: 552567ea2b61e3a3035759b2fdb3f9a6 +depends: +- _openmp_mutex >=4.5 +constrains: +- libgcc-ng ==15.2.0=*_18 +- libgomp 15.2.0 h8acb6b2_18 +license: GPL-3.0-only WITH GCC-exception-3.1 +license_family: GPL +size: 622900 +timestamp: 1771378128706 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-15.2.0-he9431aa_18.conda +sha256: 83bb0415f59634dccfa8335d4163d1f6db00a27b36666736f9842b650b92cf2f +md5: 4feebd0fbf61075a1a9c2e9b3936c257 +depends: +- libgcc 15.2.0 h8acb6b2_18 +license: GPL-3.0-only WITH GCC-exception-3.1 +license_family: GPL +size: 27568 +timestamp: 1771378136019 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgfortran-15.2.0-he9431aa_18.conda +sha256: 7dcd7dff2505d56fd5272a6e712ec912f50a46bf07dc6873a7e853694304e6e4 +md5: 41f261f5e4e2e8cbd236c2f1f15dae1b +depends: +- libgfortran5 15.2.0 h1b7bec0_18 +constrains: +- libgfortran-ng ==15.2.0=*_18 +license: GPL-3.0-only WITH GCC-exception-3.1 +license_family: GPL +size: 27587 +timestamp: 1771378169244 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgfortran5-15.2.0-h1b7bec0_18.conda +sha256: 85347670dfb4a8d4c13cd7cae54138dcf2b1606b6bede42eef5507bf5f9660c6 +md5: 574d88ce3348331e962cfa5ed451b247 +depends: +- libgcc >=15.2.0 +constrains: +- libgfortran 15.2.0 +license: GPL-3.0-only WITH GCC-exception-3.1 +license_family: GPL +size: 1486341 +timestamp: 1771378148102 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-15.2.0-h8acb6b2_18.conda +sha256: fc716f11a6a8525e27a5d332ef6a689210b0d2a4dd1133edc0f530659aa9faa6 +md5: 4faa39bf919939602e594253bd673958 +license: GPL-3.0-only WITH GCC-exception-3.1 +license_family: GPL +size: 588060 +timestamp: 1771378040807 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libjpeg-turbo-3.1.2-he30d5cf_0.conda +sha256: 84064c7c53a64291a585d7215fe95ec42df74203a5bf7615d33d49a3b0f08bb6 +md5: 5109d7f837a3dfdf5c60f60e311b041f +depends: +- libgcc >=14 +constrains: +- jpeg <0.0.0a +license: IJG AND BSD-3-Clause AND Zlib +size: 691818 +timestamp: 1762094728337 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblapack-3.11.0-5_h88aeb00_openblas.conda +build_number: 5 +sha256: 692222d186d3ffbc99eaf04b5b20181fd26aee1edec1106435a0a755c57cce86 +md5: 88d1e4133d1182522b403e9ba7435f04 +depends: +- libblas 3.11.0 5_haddc8a3_openblas +constrains: +- liblapacke 3.11.0 5*_openblas +- blas 2.305 openblas +- libcblas 3.11.0 5*_openblas +license: BSD-3-Clause +license_family: BSD +size: 18392 +timestamp: 1765818627104 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblzma-5.8.2-he30d5cf_0.conda +sha256: 843c46e20519651a3e357a8928352b16c5b94f4cd3d5481acc48be2e93e8f6a3 +md5: 96944e3c92386a12755b94619bae0b35 +depends: +- libgcc >=14 +constrains: +- xz 5.8.2.* +license: 0BSD +size: 125916 +timestamp: 1768754941722 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libmpdec-4.0.0-he30d5cf_1.conda +sha256: 57c0dd12d506e84541c4e877898bd2a59cca141df493d34036f18b2751e0a453 +md5: 7b9813e885482e3ccb1fa212b86d7fd0 +depends: +- libgcc >=14 +license: BSD-2-Clause +license_family: BSD +size: 114056 +timestamp: 1769482343003 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenblas-0.3.30-pthreads_h9d3fd7e_4.conda +sha256: 794a7270ea049ec931537874cd8d2de0ef4b3cef71c055cfd8b4be6d2f4228b0 +md5: 11d7d57b7bdd01da745bbf2b67020b2e +depends: +- libgcc >=14 +- libgfortran +- libgfortran5 >=14.3.0 +constrains: +- openblas >=0.3.30,<0.3.31.0a0 +license: BSD-3-Clause +license_family: BSD +size: 4959359 +timestamp: 1763114173544 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libpng-1.6.55-h1abf092_0.conda +sha256: c7378c6b79de4d571d00ad1caf0a4c19d43c9c94077a761abb6ead44d891f907 +md5: be4088903b94ea297975689b3c3aeb27 +depends: +- libgcc >=14 +- libzlib >=1.3.1,<2.0a0 +license: zlib-acknowledgement +size: 340156 +timestamp: 1770691477245 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.52.0-h10b116e_0.conda +sha256: 1ddaf91b44fae83856276f4cb7ce544ffe41d4b55c1e346b504c6b45f19098d6 +md5: 77891484f18eca74b8ad83694da9815e +depends: +- icu >=78.2,<79.0a0 +- libgcc >=14 +- libzlib >=1.3.1,<2.0a0 +license: blessing +size: 952296 +timestamp: 1772818881550 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-15.2.0-hef695bb_18.conda +sha256: 31fdb9ffafad106a213192d8319b9f810e05abca9c5436b60e507afb35a6bc40 +md5: f56573d05e3b735cb03efeb64a15f388 +depends: +- libgcc 15.2.0 h8acb6b2_18 +constrains: +- libstdcxx-ng ==15.2.0=*_18 +license: GPL-3.0-only WITH GCC-exception-3.1 +license_family: GPL +size: 5541411 +timestamp: 1771378162499 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libtiff-4.7.1-hdb009f0_1.conda +sha256: 7ff79470db39e803e21b8185bc8f19c460666d5557b1378d1b1e857d929c6b39 +md5: 8c6fd84f9c87ac00636007c6131e457d +depends: +- lerc >=4.0.0,<5.0a0 +- libdeflate >=1.25,<1.26.0a0 +- libgcc >=14 +- libjpeg-turbo >=3.1.0,<4.0a0 +- liblzma >=5.8.1,<6.0a0 +- libstdcxx >=14 +- libwebp-base >=1.6.0,<2.0a0 +- libzlib >=1.3.1,<2.0a0 +- zstd >=1.5.7,<1.6.0a0 +license: HPND +size: 488407 +timestamp: 1762022048105 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.41.3-h1022ec0_0.conda +sha256: c37a8e89b700646f3252608f8368e7eb8e2a44886b92776e57ad7601fc402a11 +md5: cf2861212053d05f27ec49c3784ff8bb +depends: +- libgcc >=14 +license: BSD-3-Clause +license_family: BSD +size: 43453 +timestamp: 1766271546875 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libwebp-base-1.6.0-ha2e29f5_0.conda +sha256: b03700a1f741554e8e5712f9b06dd67e76f5301292958cd3cb1ac8c6fdd9ed25 +md5: 24e92d0942c799db387f5c9d7b81f1af +depends: +- libgcc >=14 +constrains: +- libwebp 1.6.0 +license: BSD-3-Clause +license_family: BSD +size: 359496 +timestamp: 1752160685488 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxcb-1.17.0-h262b8f6_0.conda +sha256: 461cab3d5650ac6db73a367de5c8eca50363966e862dcf60181d693236b1ae7b +md5: cd14ee5cca2464a425b1dbfc24d90db2 +depends: +- libgcc >=13 +- pthread-stubs +- xorg-libxau >=1.0.11,<2.0a0 +- xorg-libxdmcp +license: MIT +license_family: MIT +size: 397493 +timestamp: 1727280745441 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.2-hdc9db2a_2.conda +sha256: eb111e32e5a7313a5bf799c7fb2419051fa2fe7eff74769fac8d5a448b309f7f +md5: 502006882cf5461adced436e410046d1 +constrains: +- zlib 1.3.2 *_2 +license: Zlib +license_family: Other +size: 69833 +timestamp: 1774072605429 +- conda: https://conda.anaconda.org/conda-forge/noarch/markdown-3.10.2-pyhcf101f3_0.conda +sha256: 20e0892592a3e7c683e3d66df704a9425d731486a97c34fc56af4da1106b2b6b +md5: ba0a9221ce1063f31692c07370d062f3 +depends: +- importlib-metadata >=4.4 +- python >=3.10 +- python +license: BSD-3-Clause +license_family: BSD +size: 85893 +timestamp: 1770694658918 +- conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.0.0-pyhd8ed1ab_0.conda +sha256: 7b1da4b5c40385791dbc3cc85ceea9fad5da680a27d5d3cb8bfaa185e304a89e +md5: 5b5203189eb668f042ac2b0826244964 +depends: +- mdurl >=0.1,<1 +- python >=3.10 +license: MIT +license_family: MIT +size: 64736 +timestamp: 1754951288511 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/markupsafe-3.0.3-py314hb76de3f_1.conda +sha256: 383c188496d13a55658c06e61e7d4cdff2c9f9d5a0648769fca8250bece7e0ef +md5: e5de3c36dd548b35ff2a8aa49208dcb3 +depends: +- libgcc >=14 +- python >=3.14,<3.15.0a0 +- python_abi 3.14.* *_cp314 +constrains: +- jinja2 >=3.0.0 +license: BSD-3-Clause +license_family: BSD +size: 27913 +timestamp: 1772446407659 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/mathjax-2.7.7-h8af1aa0_3.tar.bz2 +sha256: 8fd4c79d6eda3d4cba73783114305a53a154ada4d1e334d4e02cb3521429599b +md5: 7b08314a6867a9d5648a1c3265e9eb8e +license: Apache-2.0 +license_family: Apache +size: 22257008 +timestamp: 1662784555011 +- conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda +sha256: 78c1bbe1723449c52b7a9df1af2ee5f005209f67e40b6e1d3c7619127c43b1c7 +md5: 592132998493b3ff25fd7479396e8351 +depends: +- python >=3.9 +license: MIT +license_family: MIT +size: 14465 +timestamp: 1733255681319 +- conda: https://conda.anaconda.org/bioconda/noarch/multiqc-1.33-pyhdfd78af_0.conda +sha256: f005760b13093362fc9c997d603dd487de32ab2e821a3cbce52a42bcb8136517 +md5: 698a8a27c2b9d8a542c70cb47099a75e +depends: +- click +- coloredlogs +- humanize +- importlib-metadata +- jinja2 >=3.0.0 +- jsonschema +- markdown +- natsort +- numpy +- packaging +- pillow >=10.2.0 +- plotly >=5.18 +- polars-lts-cpu +- pyaml-env +- pydantic >=2.7.1 +- python >=3.8,!=3.14.1 +- python-dotenv +- python-kaleido 0.2.1 +- pyyaml >=4 +- requests +- rich >=10 +- rich-click +- spectra >=0.0.10 +- tiktoken +- tqdm +- typeguard +license: GPL-3.0-or-later +license_family: GPL3 +size: 4198799 +timestamp: 1765300743879 +- conda: https://conda.anaconda.org/conda-forge/noarch/narwhals-2.18.1-pyhcf101f3_1.conda +sha256: 541fd4390a0687228b8578247f1536a821d9261389a65585af9d1a6f2a14e1e0 +md5: 30bec5e8f4c3969e2b1bd407c5e52afb +depends: +- python >=3.10 +- python +license: MIT +size: 280459 +timestamp: 1774380620329 +- conda: https://conda.anaconda.org/conda-forge/noarch/natsort-8.4.0-pyhcf101f3_2.conda +sha256: aeb1548eb72e4f198e72f19d242fb695b35add2ac7b2c00e0d83687052867680 +md5: e941e85e273121222580723010bd4fa2 +depends: +- python >=3.9 +- python +license: MIT +license_family: MIT +size: 39262 +timestamp: 1770905275632 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-ha32ae93_3.conda +sha256: 91cfb655a68b0353b2833521dc919188db3d8a7f4c64bea2c6a7557b24747468 +md5: 182afabe009dc78d8b73100255ee6868 +depends: +- libgcc >=13 +license: X11 AND BSD-3-Clause +size: 926034 +timestamp: 1738196018799 +- conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.6.1-pyhcf101f3_0.conda +sha256: f6a82172afc50e54741f6f84527ef10424326611503c64e359e25a19a8e4c1c6 +md5: a2c1eeadae7a309daed9d62c96012a2b +depends: +- python >=3.11 +- python +constrains: +- numpy >=1.25 +- scipy >=1.11.2 +- matplotlib-base >=3.8 +- pandas >=2.0 +license: BSD-3-Clause +license_family: BSD +size: 1587439 +timestamp: 1765215107045 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/nspr-4.38-h3ad9384_0.conda +sha256: 78a06e89285fef242e272998b292c1e621e3ee3dd4fba62ec014e503c7ec118f +md5: 6dd4f07147774bf720075a210f8026b9 +depends: +- libgcc >=14 +- libstdcxx >=14 +license: MPL-2.0 +license_family: MOZILLA +size: 235140 +timestamp: 1762350120355 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/nss-3.118-h544fa81_0.conda +sha256: 48942696889367ffd448f8dccfc080fb7e130b9938a4a3b6b20ef8e6af856463 +md5: 4540f9570d12db2150f42ba036154552 +depends: +- libgcc >=14 +- libsqlite >=3.51.0,<4.0a0 +- libstdcxx >=14 +- libzlib >=1.3.1,<2.0a0 +- nspr >=4.38,<5.0a0 +license: MPL-2.0 +license_family: MOZILLA +size: 2061869 +timestamp: 1763490303490 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/numpy-2.4.3-py314haac167e_0.conda +sha256: a6d42fd88afc57c3b0a57b21a12eff7492dfc419bb61ee3f74e9ba6261dabc88 +md5: 25d896c331481145720a21e5145fad65 +depends: +- python +- libgcc >=14 +- python 3.14.* *_cp314 +- libstdcxx >=14 +- libcblas >=3.9.0,<4.0a0 +- liblapack >=3.9.0,<4.0a0 +- python_abi 3.14.* *_cp314 +- libblas >=3.9.0,<4.0a0 +constrains: +- numpy-base <0a0 +license: BSD-3-Clause +license_family: BSD +size: 8008045 +timestamp: 1773839355275 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openjpeg-2.5.4-h5da879a_0.conda +sha256: bd1bc8bdde5e6c5cbac42d462b939694e40b59be6d0698f668515908640c77b8 +md5: cea962410e327262346d48d01f05936c +depends: +- libgcc >=14 +- libpng >=1.6.50,<1.7.0a0 +- libstdcxx >=14 +- libtiff >=4.7.1,<4.8.0a0 +- libzlib >=1.3.1,<2.0a0 +license: BSD-2-Clause +license_family: BSD +size: 392636 +timestamp: 1758489353577 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.6.1-h546c87b_1.conda +sha256: 7f8048c0e75b2620254218d72b4ae7f14136f1981c5eb555ef61645a9344505f +md5: 25f5885f11e8b1f075bccf4a2da91c60 +depends: +- ca-certificates +- libgcc >=14 +license: Apache-2.0 +license_family: Apache +size: 3692030 +timestamp: 1769557678657 +- conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda +sha256: c1fc0f953048f743385d31c468b4a678b3ad20caffdeaa94bed85ba63049fd58 +md5: b76541e68fea4d511b1ac46a28dcd2c6 +depends: +- python >=3.8 +- python +license: Apache-2.0 +license_family: APACHE +size: 72010 +timestamp: 1769093650580 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pillow-12.1.1-py314hac3e5ec_0.conda +sha256: 1ca2d1616baad9bccb7ebc425ef2dcd6cebe742fbe91edf226fb606ad371ca0f +md5: d3c959c7efe560b2d7da459d69121fe9 +depends: +- python +- python 3.14.* *_cp314 +- libgcc >=14 +- zlib-ng >=2.3.3,<2.4.0a0 +- libwebp-base >=1.6.0,<2.0a0 +- tk >=8.6.13,<8.7.0a0 +- libfreetype >=2.14.1 +- libfreetype6 >=2.14.1 +- libtiff >=4.7.1,<4.8.0a0 +- lcms2 >=2.18,<3.0a0 +- python_abi 3.14.* *_cp314 +- openjpeg >=2.5.4,<3.0a0 +- libjpeg-turbo >=3.1.2,<4.0a0 +- libxcb >=1.17.0,<2.0a0 +license: HPND +size: 1051828 +timestamp: 1770794010335 +- conda: https://conda.anaconda.org/conda-forge/noarch/plotly-6.6.0-pyhd8ed1ab_0.conda +sha256: c418d325359fc7a0074cea7f081ef1bce26e114d2da8a0154c5d27ecc87a08e7 +md5: 3e9427ee186846052e81fadde8ebe96a +depends: +- narwhals >=1.15.1 +- packaging +- python >=3.10 +constrains: +- ipywidgets >=7.6 +license: MIT +license_family: MIT +size: 5251872 +timestamp: 1772628857717 +- conda: https://conda.anaconda.org/conda-forge/noarch/polars-1.39.3-pyh58ad624_1.conda +sha256: d332c2d5002fc440ae37ed9679ffc21b552f18d20232390005d1dd3bce0888d3 +md5: d5a4e013a30dd8dfde9ab39f45aaf9c1 +depends: +- polars-runtime-32 ==1.39.3 +- python >=3.10 +- python +constrains: +- numpy >=1.16.0 +- pyarrow >=7.0.0 +- fastexcel >=0.9 +- openpyxl >=3.0.0 +- xlsx2csv >=0.8.0 +- connectorx >=0.3.2 +- deltalake >=1.0.0 +- pyiceberg >=0.7.1 +- altair >=5.4.0 +- great_tables >=0.8.0 +- polars-runtime-32 ==1.39.3 +- polars-runtime-64 ==1.39.3 +- polars-runtime-compat ==1.39.3 +license: MIT +license_family: MIT +size: 533495 +timestamp: 1774207987966 +- conda: https://conda.anaconda.org/conda-forge/noarch/polars-lts-cpu-1.34.0.deprecated-hc364b38_0.conda +sha256: e466fb31f67ba9bde18deafeb34263ca5eb25807f39ead0e9d753a8e82c4c4f4 +md5: ef0340e75068ac8ff96462749b5c98e7 +depends: +- polars >=1.34.0 +- polars-runtime-compat >=1.34.0 +license: MIT +license_family: MIT +size: 3902 +timestamp: 1760206808444 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/polars-runtime-32-1.39.3-py310hff09b76_1.conda +noarch: python +sha256: c070be507c5a90df397a47ae0299660be437d5546d68f1bc0fa4402c9f07d59e +md5: 3c1a7c6b4ba8b9fb773ace9723f8a5db +depends: +- python +- libgcc >=14 +- libstdcxx >=14 +- _python_abi3_support 1.* +- cpython >=3.10 +constrains: +- __glibc >=2.17 +license: MIT +license_family: MIT +size: 34785466 +timestamp: 1774207998285 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/polars-runtime-compat-1.39.3-py310hf00a4a2_1.conda +noarch: python +sha256: 683315f1a49e47ce72bf9462419733b40b588b2b3106552d95fd4cd994e174de +md5: dd3464e2132dc3a783e76e5078870c76 +depends: +- python +- libgcc >=14 +- libstdcxx >=14 +- _python_abi3_support 1.* +- cpython >=3.10 +constrains: +- __glibc >=2.17 +license: MIT +license_family: MIT +size: 34652491 +timestamp: 1774207996879 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/procps-ng-4.0.6-h1779866_0.conda +sha256: e9cbcbc94e151ada3d6dc365380aaaf591f65012c16d9a2abaea4b9b90adc402 +md5: ab7288cc39545556d1bc5e71ab2df9a9 +depends: +- libgcc >=14 +- ncurses >=6.5,<7.0a0 +license: GPL-2.0-or-later AND LGPL-2.0-or-later +license_family: GPL +size: 636733 +timestamp: 1769712412683 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pthread-stubs-0.4-h86ecc28_1002.conda +sha256: 977dfb0cb3935d748521dd80262fe7169ab82920afd38ed14b7fee2ea5ec01ba +md5: bb5a90c93e3bac3d5690acf76b4a6386 +depends: +- libgcc >=13 +license: MIT +license_family: MIT +size: 8342 +timestamp: 1726803319942 +- conda: https://conda.anaconda.org/conda-forge/noarch/pyaml-env-1.2.2-pyhd8ed1ab_0.conda +sha256: 58994e0d2ea8584cb399546e6f6896d771995e6121d1a7b6a2c9948388358932 +md5: e17be1016bcc3516827b836cd3e4d9dc +depends: +- python >=3.9 +- pyyaml >=5.0,<=7.0 +license: MIT +license_family: MIT +size: 14645 +timestamp: 1736766960536 +- conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.12.5-pyhcf101f3_1.conda +sha256: 868569d9505b7fe246c880c11e2c44924d7613a8cdcc1f6ef85d5375e892f13d +md5: c3946ed24acdb28db1b5d63321dbca7d +depends: +- typing-inspection >=0.4.2 +- typing_extensions >=4.14.1 +- python >=3.10 +- typing-extensions >=4.6.1 +- annotated-types >=0.6.0 +- pydantic-core ==2.41.5 +- python +license: MIT +license_family: MIT +size: 340482 +timestamp: 1764434463101 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pydantic-core-2.41.5-py314h451b6cc_1.conda +sha256: f8acb2d03ebe80fed0032b9a989fc9acfb6735e3cd3f8c704b72728cb31868f6 +md5: 28f5027a1e04d67aa13fac1c5ba79693 +depends: +- python +- typing-extensions >=4.6.0,!=4.7.0 +- libgcc >=14 +- python 3.14.* *_cp314 +- python_abi 3.14.* *_cp314 +constrains: +- __glibc >=2.17 +license: MIT +license_family: MIT +size: 1828339 +timestamp: 1762989038561 +- conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda +sha256: 5577623b9f6685ece2697c6eb7511b4c9ac5fb607c9babc2646c811b428fd46a +md5: 6b6ece66ebcae2d5f326c77ef2c5a066 +depends: +- python >=3.9 +license: BSD-2-Clause +license_family: BSD +size: 889287 +timestamp: 1750615908735 +- conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda +sha256: ba3b032fa52709ce0d9fd388f63d330a026754587a2f461117cac9ab73d8d0d8 +md5: 461219d1a5bd61342293efa2c0c90eac +depends: +- __unix +- python >=3.9 +license: BSD-3-Clause +license_family: BSD +size: 21085 +timestamp: 1733217331982 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.14.3-hb06a95a_101_cp314.conda +build_number: 101 +sha256: 87e9dff5646aba87cecfbc08789634c855871a7325169299d749040b0923a356 +md5: 205011b36899ff0edf41b3db0eda5a44 +depends: +- bzip2 >=1.0.8,<2.0a0 +- ld_impl_linux-aarch64 >=2.36.1 +- libexpat >=2.7.3,<3.0a0 +- libffi >=3.5.2,<3.6.0a0 +- libgcc >=14 +- liblzma >=5.8.2,<6.0a0 +- libmpdec >=4.0.0,<5.0a0 +- libsqlite >=3.51.2,<4.0a0 +- libuuid >=2.41.3,<3.0a0 +- libzlib >=1.3.1,<2.0a0 +- ncurses >=6.5,<7.0a0 +- openssl >=3.5.5,<4.0a0 +- python_abi 3.14.* *_cp314 +- readline >=8.3,<9.0a0 +- tk >=8.6.13,<8.7.0a0 +- tzdata +- zstd >=1.5.7,<1.6.0a0 +license: Python-2.0 +size: 37305578 +timestamp: 1770674395875 +python_site_packages_path: lib/python3.14/site-packages +- conda: https://conda.anaconda.org/conda-forge/noarch/python-dotenv-1.2.2-pyhcf101f3_0.conda +sha256: 74e417a768f59f02a242c25e7db0aa796627b5bc8c818863b57786072aeb85e5 +md5: 130584ad9f3a513cdd71b1fdc1244e9c +depends: +- python >=3.10 +license: BSD-3-Clause +license_family: BSD +size: 27848 +timestamp: 1772388605021 +- conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.14.3-h4df99d1_101.conda +sha256: 233aebd94c704ac112afefbb29cf4170b7bc606e22958906f2672081bc50638a +md5: 235765e4ea0d0301c75965985163b5a1 +depends: +- cpython 3.14.3.* +- python_abi * *_cp314 +license: Python-2.0 +size: 50062 +timestamp: 1770674497152 +- conda: https://conda.anaconda.org/conda-forge/noarch/python-kaleido-0.2.1-pyhd8ed1ab_0.tar.bz2 +sha256: e17bf63a30aec33432f1ead86e15e9febde9fc40a7f869c0e766be8d2db44170 +md5: 310259a5b03ff02289d7705f39e2b1d2 +depends: +- kaleido-core 0.2.1.* +- python >=3.5 +license: MIT +license_family: MIT +size: 18320 +timestamp: 1615204747600 +- conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda +build_number: 8 +sha256: ad6d2e9ac39751cc0529dd1566a26751a0bf2542adb0c232533d32e176e21db5 +md5: 0539938c55b6b1a59b560e843ad864a4 +constrains: +- python 3.14.* *_cp314 +license: BSD-3-Clause +license_family: BSD +size: 6989 +timestamp: 1752805904792 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pyyaml-6.0.3-py314h807365f_1.conda +sha256: 496b5e65dfdd0aaaaa5de0dcaaf3bceea00fcb4398acf152f89e567c82ec1046 +md5: 9ae2c92975118058bd720e9ba2bb7c58 +depends: +- libgcc >=14 +- python >=3.14,<3.15.0a0 +- python >=3.14,<3.15.0a0 *_cp314 +- python_abi 3.14.* *_cp314 +- yaml >=0.2.5,<0.3.0a0 +license: MIT +license_family: MIT +size: 195678 +timestamp: 1770223441816 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/readline-8.3-hb682ff5_0.conda +sha256: fe695f9d215e9a2e3dd0ca7f56435ab4df24f5504b83865e3d295df36e88d216 +md5: 3d49cad61f829f4f0e0611547a9cda12 +depends: +- libgcc >=14 +- ncurses >=6.5,<7.0a0 +license: GPL-3.0-only +license_family: GPL +size: 357597 +timestamp: 1765815673644 +- conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.37.0-pyhcf101f3_0.conda +sha256: 0577eedfb347ff94d0f2fa6c052c502989b028216996b45c7f21236f25864414 +md5: 870293df500ca7e18bedefa5838a22ab +depends: +- attrs >=22.2.0 +- python >=3.10 +- rpds-py >=0.7.0 +- typing_extensions >=4.4.0 +- python +license: MIT +license_family: MIT +size: 51788 +timestamp: 1760379115194 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/regex-2026.2.28-py314h51f160d_0.conda +sha256: 2080ecea825e1ef91a2422cc0bc63e85db9e38908ed17657fb8f41de7a6eee71 +md5: 818aa2c9f6b3c808da5e7be22a9a424c +depends: +- libgcc >=14 +- python >=3.14,<3.15.0a0 +- python >=3.14,<3.15.0a0 *_cp314 +- python_abi 3.14.* *_cp314 +license: Apache-2.0 AND CNRI-Python +license_family: PSF +size: 408097 +timestamp: 1772255205521 +- conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.5-pyhcf101f3_1.conda +sha256: 7813c38b79ae549504b2c57b3f33394cea4f2ad083f0994d2045c2e24cb538c5 +md5: c65df89a0b2e321045a9e01d1337b182 +depends: +- python >=3.10 +- certifi >=2017.4.17 +- charset-normalizer >=2,<4 +- idna >=2.5,<4 +- urllib3 >=1.21.1,<3 +- python +constrains: +- chardet >=3.0.2,<6 +license: Apache-2.0 +license_family: APACHE +size: 63602 +timestamp: 1766926974520 +- conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.3.3-pyhcf101f3_0.conda +sha256: b06ce84d6a10c266811a7d3adbfa1c11f13393b91cc6f8a5b468277d90be9590 +md5: 7a6289c50631d620652f5045a63eb573 +depends: +- markdown-it-py >=2.2.0 +- pygments >=2.13.0,<3.0.0 +- python >=3.10 +- typing_extensions >=4.0.0,<5.0.0 +- python +license: MIT +license_family: MIT +size: 208472 +timestamp: 1771572730357 +- conda: https://conda.anaconda.org/conda-forge/noarch/rich-click-1.9.7-pyh8f84b5b_0.conda +sha256: aa3fcb167321bae51998de2e94d199109c9024f25a5a063cb1c28d8f1af33436 +md5: 0c20a8ebcddb24a45da89d5e917e6cb9 +depends: +- python >=3.10 +- rich >=12 +- click >=8 +- typing-extensions >=4 +- __unix +- python +license: MIT +license_family: MIT +size: 64356 +timestamp: 1769850479089 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/rpds-py-0.30.0-py314h02b7a91_0.conda +sha256: a587240f16eac7c6a80f9585cef679cd1cb9a287b8dfcdd36dcef1f7e7db15dc +md5: e7f6ed9e60043bb5cbcc527764897f0d +depends: +- python +- libgcc >=14 +- python_abi 3.14.* *_cp314 +constrains: +- __glibc >=2.17 +license: MIT +license_family: MIT +size: 376332 +timestamp: 1764543345455 +- conda: https://conda.anaconda.org/conda-forge/noarch/spectra-0.0.11-pyhd8ed1ab_2.conda +sha256: 7c65782d2511738e62c70462e89d65da4fa54d5a7e47c46667bcd27a59f81876 +md5: 472239e4eb7b5a84bb96b3ed7e3a596a +depends: +- colormath >=3.0.0 +- python >=3.9 +license: MIT +license_family: MIT +size: 22284 +timestamp: 1735770589188 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/sqlite-3.52.0-hf1c7be2_0.conda +sha256: 4f8523f5341f0d9e1547085206c6c1f71f9fc7c277443ca363a8cf98add8fc01 +md5: d9634079df93a65ee045b3c75f35cae1 +depends: +- icu >=78.2,<79.0a0 +- libgcc >=14 +- libsqlite 3.52.0 h10b116e_0 +- libzlib >=1.3.1,<2.0a0 +- ncurses >=6.5,<7.0a0 +- readline >=8.3,<9.0a0 +license: blessing +size: 209416 +timestamp: 1772818891689 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tiktoken-0.12.0-py314h6a36e60_3.conda +sha256: c1da41c79262b27efa168407cfecc47b20270e5fc071a8307f95a2c85fb94170 +md5: 55bf7b559202236157b14323b40f19e6 +depends: +- libgcc >=14 +- libstdcxx >=14 +- python >=3.14,<3.15.0a0 +- python_abi 3.14.* *_cp314 +- regex >=2022.1.18 +- requests >=2.26.0 +constrains: +- __glibc >=2.17 +license: MIT +license_family: MIT +size: 914402 +timestamp: 1764030357702 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-noxft_h0dc03b3_103.conda +sha256: e25c314b52764219f842b41aea2c98a059f06437392268f09b03561e4f6e5309 +md5: 7fc6affb9b01e567d2ef1d05b84aa6ed +depends: +- libgcc >=14 +- libzlib >=1.3.1,<2.0a0 +constrains: +- xorg-libx11 >=1.8.12,<2.0a0 +license: TCL +license_family: BSD +size: 3368666 +timestamp: 1769464148928 +- conda: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.67.3-pyh8f84b5b_0.conda +sha256: 9ef8e47cf00e4d6dcc114eb32a1504cc18206300572ef14d76634ba29dfe1eb6 +md5: e5ce43272193b38c2e9037446c1d9206 +depends: +- python >=3.10 +- __unix +- python +license: MPL-2.0 and MIT +size: 94132 +timestamp: 1770153424136 +- conda: https://conda.anaconda.org/conda-forge/noarch/typeguard-4.5.1-pyhd8ed1ab_0.conda +sha256: 39d8ae33c43cdb8f771373e149b0b4fae5a08960ac58dcca95b2f1642bb17448 +md5: 260af1b0a94f719de76b4e14094e9a3b +depends: +- importlib-metadata >=3.6 +- python >=3.10 +- typing-extensions >=4.10.0 +- typing_extensions >=4.14.0 +constrains: +- pytest >=7 +license: MIT +license_family: MIT +size: 36838 +timestamp: 1771532971545 +- conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda +sha256: 7c2df5721c742c2a47b2c8f960e718c930031663ac1174da67c1ed5999f7938c +md5: edd329d7d3a4ab45dcf905899a7a6115 +depends: +- typing_extensions ==4.15.0 pyhcf101f3_0 +license: PSF-2.0 +license_family: PSF +size: 91383 +timestamp: 1756220668932 +- conda: https://conda.anaconda.org/conda-forge/noarch/typing-inspection-0.4.2-pyhd8ed1ab_1.conda +sha256: 70db27de58a97aeb7ba7448366c9853f91b21137492e0b4430251a1870aa8ff4 +md5: a0a4a3035667fc34f29bfbd5c190baa6 +depends: +- python >=3.10 +- typing_extensions >=4.12.0 +license: MIT +license_family: MIT +size: 18923 +timestamp: 1764158430324 +- conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda +sha256: 032271135bca55aeb156cee361c81350c6f3fb203f57d024d7e5a1fc9ef18731 +md5: 0caa1af407ecff61170c9437a808404d +depends: +- python >=3.10 +- python +license: PSF-2.0 +license_family: PSF +size: 51692 +timestamp: 1756220668932 +- conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda +sha256: 1d30098909076af33a35017eed6f2953af1c769e273a0626a04722ac4acaba3c +md5: ad659d0a2b3e47e38d829aa8cad2d610 +license: LicenseRef-Public-Domain +size: 119135 +timestamp: 1767016325805 +- conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.6.3-pyhd8ed1ab_0.conda +sha256: af641ca7ab0c64525a96fd9ad3081b0f5bcf5d1cbb091afb3f6ed5a9eee6111a +md5: 9272daa869e03efe68833e3dc7a02130 +depends: +- backports.zstd >=1.0.0 +- brotli-python >=1.2.0 +- h2 >=4,<5 +- pysocks >=1.5.6,<2.0,!=1.5.7 +- python >=3.10 +license: MIT +license_family: MIT +size: 103172 +timestamp: 1767817860341 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxau-1.0.12-he30d5cf_1.conda +sha256: e9f6e931feeb2f40e1fdbafe41d3b665f1ab6cb39c5880a1fcf9f79a3f3c84a5 +md5: 1c246e1105000c3660558459e2fd6d43 +depends: +- libgcc >=14 +license: MIT +license_family: MIT +size: 16317 +timestamp: 1762977521691 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxdmcp-1.1.5-he30d5cf_1.conda +sha256: 128d72f36bcc8d2b4cdbec07507542e437c7d67f677b7d77b71ed9eeac7d6df1 +md5: bff06dcde4a707339d66d45d96ceb2e2 +depends: +- libgcc >=14 +license: MIT +license_family: MIT +size: 21039 +timestamp: 1762979038025 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/yaml-0.2.5-h80f16a2_3.conda +sha256: 66265e943f32ce02396ad214e27cb35f5b0490b3bd4f064446390f9d67fa5d88 +md5: 032d8030e4a24fe1f72c74423a46fb88 +depends: +- libgcc >=14 +license: MIT +license_family: MIT +size: 88088 +timestamp: 1753484092643 +- conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda +sha256: b4533f7d9efc976511a73ef7d4a2473406d7f4c750884be8e8620b0ce70f4dae +md5: 30cd29cb87d819caead4d55184c1d115 +depends: +- python >=3.10 +- python +license: MIT +license_family: MIT +size: 24194 +timestamp: 1764460141901 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zlib-ng-2.3.3-ha7cb516_1.conda +sha256: 638a3a41a4fbfed52d3c60c8ef5a3693b3f12a5b1a3f58fa29f5698d0a0702e2 +md5: f731af71c723065d91b4c01bb822641b +depends: +- libgcc >=14 +- libstdcxx >=14 +license: Zlib +license_family: Other +size: 121046 +timestamp: 1770167944449 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstd-1.5.7-h85ac4a6_6.conda +sha256: 569990cf12e46f9df540275146da567d9c618c1e9c7a0bc9d9cfefadaed20b75 +md5: c3655f82dcea2aa179b291e7099c1fcc +depends: +- libzlib >=1.3.1,<2.0a0 +license: BSD-3-Clause +license_family: BSD +size: 614429 +timestamp: 1764777145593 diff --git a/modules/nf-core/multiqc/.conda-lock/linux_arm64-bd-d167b8012595a136_1.txt b/modules/nf-core/multiqc/.conda-lock/linux_arm64-bd-d167b8012595a136_1.txt new file mode 100644 index 0000000..f787dbe --- /dev/null +++ b/modules/nf-core/multiqc/.conda-lock/linux_arm64-bd-d167b8012595a136_1.txt @@ -0,0 +1,125 @@ + +# This file may be used to create an environment using: +# $ conda create --name --file +# platform: linux-aarch64 +@EXPLICIT +https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-15.2.0-h8acb6b2_18.conda#4faa39bf919939602e594253bd673958 +https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-20_gnu.conda#468fd3bb9e1f671d36c2cbc677e56f1d +https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-15.2.0-h8acb6b2_18.conda#552567ea2b61e3a3035759b2fdb3f9a6 +https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h4777abc_9.conda#840d8fc0d7b3209be93080bc20e07f2d +https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.2-hdc9db2a_2.conda#502006882cf5461adced436e410046d1 +https://conda.anaconda.org/conda-forge/linux-aarch64/zstd-1.5.7-h85ac4a6_6.conda#c3655f82dcea2aa179b291e7099c1fcc +https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.45.1-default_h1979696_102.conda#a21644fc4a83da26452a718dc9468d5f +https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.7.5-hfae3067_0.conda#05d1e0b30acd816a192c03dc6e164f4d +https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.5.2-h376a255_0.conda#2f364feefb6a7c00423e80dcb12db62a +https://conda.anaconda.org/conda-forge/linux-aarch64/liblzma-5.8.3-he30d5cf_0.conda#76298a9e6d71ee6e832a8d0d7373b261 +https://conda.anaconda.org/conda-forge/linux-aarch64/libmpdec-4.0.0-he30d5cf_1.conda#7b9813e885482e3ccb1fa212b86d7fd0 +https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.53.0-h022381a_0.conda#86db4036fd08bf34e991bf48a8af405d +https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.42-h1022ec0_0.conda#a0b5de740d01c390bdbb46d7503c9fab +https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-ha32ae93_3.conda#182afabe009dc78d8b73100255ee6868 +https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.4.22-hbd8a1cb_0.conda#e18ad67cf881dcadee8b8d9e2f8e5f73 +https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.6.2-h546c87b_0.conda#3b129669089e4d6a5c6871dbb4669b99 +https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda#0539938c55b6b1a59b560e843ad864a4 +https://conda.anaconda.org/conda-forge/linux-aarch64/readline-8.3-hb682ff5_0.conda#3d49cad61f829f4f0e0611547a9cda12 +https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-noxft_h0dc03b3_103.conda#7fc6affb9b01e567d2ef1d05b84aa6ed +https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda#ad659d0a2b3e47e38d829aa8cad2d610 +https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.14.4-hfd9ac0a_100_cp314.conda#3cfbe780f0f51cc8cba41db9f8a28bfe +https://conda.anaconda.org/conda-forge/noarch/cpython-3.14.4-py314hd8ed1ab_100.conda#f111d4cfaf1fe9496f386bc98ae94452 +https://conda.anaconda.org/conda-forge/noarch/python-gil-3.14.4-h4df99d1_100.conda#e4e60721757979d01d3964122f674959 +https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda#aaa2a381ccc56eac91d63b6c1240312f +https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda#0caa1af407ecff61170c9437a808404d +https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda#edd329d7d3a4ab45dcf905899a7a6115 +https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda#2934f256a8acfe48f6ebb4fce6cde29c +https://conda.anaconda.org/conda-forge/noarch/attrs-26.1.0-pyhcf101f3_0.conda#c6b0543676ecb1fb2d7643941fe375f2 +https://conda.anaconda.org/conda-forge/noarch/backports.zstd-1.3.0-py314h680f03e_0.conda#a2ac7763a9ac75055b68f325d3255265 +https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-15.2.0-hef695bb_18.conda#f56573d05e3b735cb03efeb64a15f388 +https://conda.anaconda.org/conda-forge/linux-aarch64/brotli-python-1.2.0-py314h352cb57_1.conda#a1b5c571a0923a205d663d8678df4792 +https://conda.anaconda.org/conda-forge/noarch/certifi-2026.4.22-pyhd8ed1ab_0.conda#929471569c93acefb30282a22060dcd5 +https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.7-pyhd8ed1ab_0.conda#a9167b9571f3baa9d448faa2139d1089 +https://conda.anaconda.org/conda-forge/noarch/click-8.3.2-pyhc90fa1f_0.conda#4d18bc3af7cfcea97bd817164672a08c +https://conda.anaconda.org/conda-forge/noarch/humanfriendly-10.0-pyh707e725_8.conda#7fe569c10905402ed47024fc481bb371 +https://conda.anaconda.org/conda-forge/noarch/coloredlogs-15.0.1-pyhd8ed1ab_4.conda#b866ff7007b934d564961066c8195983 +https://conda.anaconda.org/conda-forge/noarch/networkx-3.6.1-pyhcf101f3_0.conda#a2c1eeadae7a309daed9d62c96012a2b +https://conda.anaconda.org/conda-forge/linux-aarch64/libgfortran5-15.2.0-h1b7bec0_18.conda#574d88ce3348331e962cfa5ed451b247 +https://conda.anaconda.org/conda-forge/linux-aarch64/libgfortran-15.2.0-he9431aa_18.conda#41f261f5e4e2e8cbd236c2f1f15dae1b +https://conda.anaconda.org/conda-forge/linux-aarch64/libopenblas-0.3.32-pthreads_h9d3fd7e_0.conda#5d2ce5cf40443d055ec6d33840192265 +https://conda.anaconda.org/conda-forge/linux-aarch64/libblas-3.11.0-6_haddc8a3_openblas.conda#652bb20bb4618cacd11e17ae070f47ce +https://conda.anaconda.org/conda-forge/linux-aarch64/libcblas-3.11.0-6_hd72aa62_openblas.conda#939e300b110db241a96a1bed438c315b +https://conda.anaconda.org/conda-forge/linux-aarch64/liblapack-3.11.0-6_h88aeb00_openblas.conda#e23a27b52fb320687239e2c5ae4d7540 +https://conda.anaconda.org/conda-forge/linux-aarch64/numpy-2.4.3-py314haac167e_0.conda#25d896c331481145720a21e5145fad65 +https://conda.anaconda.org/conda-forge/noarch/colormath-3.0.0-pyhd8ed1ab_4.conda#071cf7b0ce333c81718b054066c15102 +https://conda.anaconda.org/conda-forge/linux-aarch64/expat-2.7.5-hfae3067_0.conda#d2bb0c889d94f2fdc5856392c3002976 +https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2#0c96522c6bdaed4b1566d11387caaf45 +https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2#34893075a5c9e55cdafac56607368fc6 +https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2#4d59c254e01d9cde7957100457e2d5fb +https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.conda#49023d73832ef61042f6a237cb2687e7 +https://conda.anaconda.org/conda-forge/linux-aarch64/libpng-1.6.58-h1abf092_0.conda#f51503ac45a4888bce71af9027a2ecc9 +https://conda.anaconda.org/conda-forge/linux-aarch64/libfreetype6-2.14.3-hdae7a39_0.conda#b99ed99e42dafb27889483b3098cace7 +https://conda.anaconda.org/conda-forge/linux-aarch64/libfreetype-2.14.3-h8af1aa0_0.conda#a229e22d4d8814a07702b0919d8e6701 +https://conda.anaconda.org/conda-forge/linux-aarch64/fontconfig-2.17.1-hba86a56_0.conda#0fed1ff55f4938a65907f3ecf62609db +https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda#a7970cd949a077b7cb9696379d338681 +https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda#0a802cb9888dd14eeefc611f05c40b6e +https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda#8e6923fc12f1fe8f8c4e5c9f343256ac +https://conda.anaconda.org/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda#164fc43f0b53b6e3a7bc7dce5e4f1dc9 +https://conda.anaconda.org/conda-forge/noarch/humanize-4.15.0-pyhd8ed1ab_0.conda#daddf757c3ecd6067b9af1df1f25d89e +https://conda.anaconda.org/conda-forge/noarch/idna-3.13-pyhcf101f3_0.conda#fb7130c190f9b4ec91219840a05ba3ac +https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.1-pyhcf101f3_0.conda#e1c36c6121a7c9c76f2f148f1e83b983 +https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.8.0-pyhcf101f3_0.conda#080594bf4493e6bae2607e65390c520a +https://conda.anaconda.org/conda-forge/linux-aarch64/markupsafe-3.0.3-py314hb76de3f_1.conda#e5de3c36dd548b35ff2a8aa49208dcb3 +https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda#04558c96691bed63104678757beb4f8d +https://conda.anaconda.org/conda-forge/linux-aarch64/rpds-py-0.30.0-py314h02b7a91_0.conda#e7f6ed9e60043bb5cbcc527764897f0d +https://conda.anaconda.org/conda-forge/noarch/referencing-0.37.0-pyhcf101f3_0.conda#870293df500ca7e18bedefa5838a22ab +https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2025.9.1-pyhcf101f3_0.conda#439cd0f567d697b20a8f45cb70a1005a +https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.26.0-pyhcf101f3_0.conda#ada41c863af263cc4c5fcbaff7c3e4dc +https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-15.2.0-he9431aa_18.conda#4feebd0fbf61075a1a9c2e9b3936c257 +https://conda.anaconda.org/conda-forge/linux-aarch64/mathjax-2.7.7-h8af1aa0_3.tar.bz2#7b08314a6867a9d5648a1c3265e9eb8e +https://conda.anaconda.org/conda-forge/linux-aarch64/nspr-4.38-h3ad9384_0.conda#6dd4f07147774bf720075a210f8026b9 +https://conda.anaconda.org/conda-forge/linux-aarch64/nss-3.118-h544fa81_0.conda#4540f9570d12db2150f42ba036154552 +https://conda.anaconda.org/conda-forge/linux-aarch64/sqlite-3.53.0-he8854b5_0.conda#ad8164bdeece883b825c50639c0c4725 +https://conda.anaconda.org/conda-forge/linux-aarch64/kaleido-core-0.2.1-he5a581e_0.tar.bz2#4f0d284f5d11e04277b552eb1c172c7f +https://conda.anaconda.org/conda-forge/linux-aarch64/libjpeg-turbo-3.1.4.1-he30d5cf_0.conda#a85ba48648f6868016f2741fd9170250 +https://conda.anaconda.org/conda-forge/linux-aarch64/lerc-4.1.0-h52b7260_0.conda#d13423b06447113a90b5b1366d4da171 +https://conda.anaconda.org/conda-forge/linux-aarch64/libdeflate-1.25-h1af38f5_0.conda#a9138815598fe6b91a1d6782ca657b0c +https://conda.anaconda.org/conda-forge/linux-aarch64/libwebp-base-1.6.0-ha2e29f5_0.conda#24e92d0942c799db387f5c9d7b81f1af +https://conda.anaconda.org/conda-forge/linux-aarch64/libtiff-4.7.1-hdb009f0_1.conda#8c6fd84f9c87ac00636007c6131e457d +https://conda.anaconda.org/conda-forge/linux-aarch64/lcms2-2.18-h9d5b58d_0.conda#bb960f01525b5e001608afef9d47b79c +https://conda.anaconda.org/conda-forge/linux-aarch64/pthread-stubs-0.4-h86ecc28_1002.conda#bb5a90c93e3bac3d5690acf76b4a6386 +https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxau-1.0.12-he30d5cf_1.conda#1c246e1105000c3660558459e2fd6d43 +https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxdmcp-1.1.5-he30d5cf_1.conda#bff06dcde4a707339d66d45d96ceb2e2 +https://conda.anaconda.org/conda-forge/linux-aarch64/libxcb-1.17.0-h262b8f6_0.conda#cd14ee5cca2464a425b1dbfc24d90db2 +https://conda.anaconda.org/conda-forge/noarch/markdown-3.10.2-pyhcf101f3_0.conda#ba0a9221ce1063f31692c07370d062f3 +https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda#592132998493b3ff25fd7479396e8351 +https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.0.0-pyhd8ed1ab_0.conda#5b5203189eb668f042ac2b0826244964 +https://conda.anaconda.org/conda-forge/noarch/natsort-8.4.0-pyhcf101f3_2.conda#e941e85e273121222580723010bd4fa2 +https://conda.anaconda.org/conda-forge/noarch/packaging-26.1-pyhc364b38_0.conda#b8ae38639d323d808da535fb71e31be8 +https://conda.anaconda.org/conda-forge/linux-aarch64/openjpeg-2.5.4-h5da879a_0.conda#cea962410e327262346d48d01f05936c +https://conda.anaconda.org/conda-forge/linux-aarch64/zlib-ng-2.3.3-ha7cb516_1.conda#f731af71c723065d91b4c01bb822641b +https://conda.anaconda.org/conda-forge/linux-aarch64/pillow-12.2.0-py314hac3e5ec_0.conda#87d58d103b47c4a8567b3d7666647684 +https://conda.anaconda.org/conda-forge/noarch/narwhals-2.20.0-pyhcf101f3_0.conda#6cac1a50359219d786453c6fef819f98 +https://conda.anaconda.org/conda-forge/noarch/plotly-6.6.0-pyhd8ed1ab_0.conda#3e9427ee186846052e81fadde8ebe96a +https://conda.anaconda.org/conda-forge/linux-aarch64/polars-runtime-32-1.40.0-py310hff09b76_0.conda#d5628a33ce7652511e38fc98643dc910 +https://conda.anaconda.org/conda-forge/noarch/polars-1.40.0-pyh58ad624_0.conda#fd16be490f5403adfbf27dd4901bbe34 +https://conda.anaconda.org/conda-forge/linux-aarch64/polars-runtime-compat-1.40.0-py310hf00a4a2_0.conda#a82af0fcbb72db253dc89a7a45279372 +https://conda.anaconda.org/conda-forge/noarch/polars-lts-cpu-1.34.0.deprecated-hc364b38_0.conda#ef0340e75068ac8ff96462749b5c98e7 +https://conda.anaconda.org/conda-forge/linux-aarch64/yaml-0.2.5-h80f16a2_3.conda#032d8030e4a24fe1f72c74423a46fb88 +https://conda.anaconda.org/conda-forge/linux-aarch64/pyyaml-6.0.3-py314h807365f_1.conda#9ae2c92975118058bd720e9ba2bb7c58 +https://conda.anaconda.org/conda-forge/noarch/pyaml-env-1.2.2-pyhd8ed1ab_0.conda#e17be1016bcc3516827b836cd3e4d9dc +https://conda.anaconda.org/conda-forge/linux-aarch64/pydantic-core-2.46.3-py314h451b6cc_0.conda#1a2cb55be9a153ad6203bff6b787c240 +https://conda.anaconda.org/conda-forge/noarch/typing-inspection-0.4.2-pyhd8ed1ab_1.conda#a0a4a3035667fc34f29bfbd5c190baa6 +https://conda.anaconda.org/conda-forge/noarch/pydantic-2.13.3-pyhcf101f3_0.conda#f690e6f204efd2e5c06b57518a383d98 +https://conda.anaconda.org/conda-forge/noarch/python-dotenv-1.2.2-pyhcf101f3_0.conda#130584ad9f3a513cdd71b1fdc1244e9c +https://conda.anaconda.org/conda-forge/noarch/python-kaleido-0.2.1-pyhd8ed1ab_0.tar.bz2#310259a5b03ff02289d7705f39e2b1d2 +https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda#461219d1a5bd61342293efa2c0c90eac +https://conda.anaconda.org/conda-forge/noarch/urllib3-2.6.3-pyhd8ed1ab_0.conda#9272daa869e03efe68833e3dc7a02130 +https://conda.anaconda.org/conda-forge/noarch/requests-2.33.1-pyhcf101f3_0.conda#10afbb4dbf06ff959ad25a92ccee6e59 +https://conda.anaconda.org/conda-forge/noarch/pygments-2.20.0-pyhd8ed1ab_0.conda#16c18772b340887160c79a6acc022db0 +https://conda.anaconda.org/conda-forge/noarch/rich-15.0.0-pyhcf101f3_0.conda#0242025a3c804966bf71aa04eee82f66 +https://conda.anaconda.org/conda-forge/noarch/rich-click-1.9.7-pyh8f84b5b_0.conda#0c20a8ebcddb24a45da89d5e917e6cb9 +https://conda.anaconda.org/conda-forge/noarch/spectra-0.0.11-pyhd8ed1ab_2.conda#472239e4eb7b5a84bb96b3ed7e3a596a +https://conda.anaconda.org/conda-forge/linux-aarch64/regex-2026.4.4-py314h51f160d_0.conda#88a3dbd279e6b1faf0cddb8397866864 +https://conda.anaconda.org/conda-forge/linux-aarch64/tiktoken-0.12.0-py314h6a36e60_3.conda#55bf7b559202236157b14323b40f19e6 +https://conda.anaconda.org/conda-forge/noarch/tqdm-4.67.3-pyh8f84b5b_0.conda#e5ce43272193b38c2e9037446c1d9206 +https://conda.anaconda.org/conda-forge/noarch/typeguard-4.5.1-pyhd8ed1ab_0.conda#260af1b0a94f719de76b4e14094e9a3b +https://conda.anaconda.org/bioconda/noarch/multiqc-1.34-pyhdfd78af_0.conda#a7111ab9a6a6146b40cbce16655ac873 +https://conda.anaconda.org/conda-forge/noarch/pip-26.0.1-pyh145f28c_0.conda#09a970fbf75e8ed1aa633827ded6aa4f +https://conda.anaconda.org/conda-forge/linux-aarch64/procps-ng-4.0.6-h1779866_0.conda#ab7288cc39545556d1bc5e71ab2df9a9 diff --git a/modules/nf-core/multiqc/environment.yml b/modules/nf-core/multiqc/environment.yml index 6f5b867..37e7612 100644 --- a/modules/nf-core/multiqc/environment.yml +++ b/modules/nf-core/multiqc/environment.yml @@ -1,5 +1,7 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json channels: - conda-forge - bioconda dependencies: - - bioconda::multiqc=1.25.1 + - bioconda::multiqc=1.34 diff --git a/modules/nf-core/multiqc/main.nf b/modules/nf-core/multiqc/main.nf index cc0643e..e80e8cd 100644 --- a/modules/nf-core/multiqc/main.nf +++ b/modules/nf-core/multiqc/main.nf @@ -1,24 +1,21 @@ process MULTIQC { + tag "${meta.id}" label 'process_single' conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/multiqc:1.25.1--pyhdfd78af_0' : - 'biocontainers/multiqc:1.25.1--pyhdfd78af_0' }" + container "${workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container + ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/1b/1bef8af6be88c5733461959c46ac8ef73d18f65277f62a1695d0e1633054f9c2/data' + : 'community.wave.seqera.io/library/multiqc:1.34--db7c73dae76bc9e6'}" input: - path multiqc_files, stageAs: "?/*" - path(multiqc_config) - path(extra_multiqc_config) - path(multiqc_logo) - path(replace_names) - path(sample_names) + tuple val(meta), path(multiqc_files, stageAs: "?/*"), path(multiqc_config, stageAs: "?/*"), path(multiqc_logo), path(replace_names), path(sample_names) output: - path "*multiqc_report.html", emit: report - path "*_data" , emit: data - path "*_plots" , optional:true, emit: plots - path "versions.yml" , emit: versions + tuple val(meta), path("*.html"), emit: report + tuple val(meta), path("*_data"), emit: data + tuple val(meta), path("*_plots"), emit: plots, optional: true + // MultiQC should not push its versions to the `versions` topic. Its input depends on the versions topic to be resolved thus outputting to the topic will let the pipeline hang forever + tuple val("${task.process}"), val('multiqc'), eval('multiqc --version | sed "s/.* //g"'), emit: versions when: task.ext.when == null || task.ext.when @@ -26,38 +23,28 @@ process MULTIQC { script: def args = task.ext.args ?: '' def prefix = task.ext.prefix ? "--filename ${task.ext.prefix}.html" : '' - def config = multiqc_config ? "--config $multiqc_config" : '' - def extra_config = extra_multiqc_config ? "--config $extra_multiqc_config" : '' + def config = multiqc_config ? multiqc_config instanceof List ? "--config ${multiqc_config.join(' --config ')}" : "--config ${multiqc_config}" : "" def logo = multiqc_logo ? "--cl-config 'custom_logo: \"${multiqc_logo}\"'" : '' def replace = replace_names ? "--replace-names ${replace_names}" : '' def samples = sample_names ? "--sample-names ${sample_names}" : '' """ multiqc \\ --force \\ - $args \\ - $config \\ - $prefix \\ - $extra_config \\ - $logo \\ - $replace \\ - $samples \\ + ${args} \\ + ${config} \\ + ${prefix} \\ + ${logo} \\ + ${replace} \\ + ${samples} \\ . - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - multiqc: \$( multiqc --version | sed -e "s/multiqc, version //g" ) - END_VERSIONS """ stub: """ mkdir multiqc_data + touch multiqc_data/.stub mkdir multiqc_plots + touch multiqc_plots/.stub touch multiqc_report.html - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - multiqc: \$( multiqc --version | sed -e "s/multiqc, version //g" ) - END_VERSIONS """ } diff --git a/modules/nf-core/multiqc/meta.yml b/modules/nf-core/multiqc/meta.yml index b16c187..2facc62 100644 --- a/modules/nf-core/multiqc/meta.yml +++ b/modules/nf-core/multiqc/meta.yml @@ -1,6 +1,6 @@ name: multiqc -description: Aggregate results from bioinformatics analyses across many samples into - a single report +description: Aggregate results from bioinformatics analyses across many samples + into a single report keywords: - QC - bioinformatics tools @@ -12,60 +12,91 @@ tools: It's a general use tool, perfect for summarising the output from numerous bioinformatics tools. homepage: https://multiqc.info/ documentation: https://multiqc.info/docs/ - licence: ["GPL-3.0-or-later"] + licence: + - "GPL-3.0-or-later" identifier: biotools:multiqc input: - - - multiqc_files: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'sample1', single_end:false ] + - multiqc_files: type: file description: | List of reports / files recognised by MultiQC, for example the html and zip output of FastQC - - - multiqc_config: + ontologies: [] + - multiqc_config: type: file description: Optional config yml for MultiQC pattern: "*.{yml,yaml}" - - - extra_multiqc_config: - type: file - description: Second optional config yml for MultiQC. Will override common sections - in multiqc_config. - pattern: "*.{yml,yaml}" - - - multiqc_logo: + ontologies: + - edam: http://edamontology.org/format_3750 + - multiqc_logo: type: file description: Optional logo file for MultiQC pattern: "*.{png}" - - - replace_names: + ontologies: [] + - replace_names: type: file description: | Optional two-column sample renaming file. First column a set of patterns, second column a set of corresponding replacements. Passed via MultiQC's `--replace-names` option. pattern: "*.{tsv}" - - - sample_names: + ontologies: + - edam: http://edamontology.org/format_3475 + - sample_names: type: file description: | Optional TSV file with headers, passed to the MultiQC --sample_names argument. pattern: "*.{tsv}" + ontologies: + - edam: http://edamontology.org/format_3475 output: - - report: - - "*multiqc_report.html": + report: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'sample1', single_end:false ] + - "*.html": type: file description: MultiQC report file - pattern: "multiqc_report.html" - - data: + pattern: ".html" + ontologies: [] + data: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'sample1', single_end:false ] - "*_data": type: directory description: MultiQC data dir pattern: "multiqc_data" - - plots: + plots: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'sample1', single_end:false ] - "*_plots": type: file description: Plots created by MultiQC - pattern: "*_data" - - versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" + pattern: "*_plots" + ontologies: [] + versions: + - - ${task.process}: + type: string + description: The process the versions were collected from + - multiqc: + type: string + description: The tool name + - multiqc --version | sed "s/.* //g": + type: eval + description: The expression to obtain the version of the tool authors: - "@abhi18av" - "@bunop" @@ -76,3 +107,27 @@ maintainers: - "@bunop" - "@drpatelh" - "@jfy133" +containers: + conda: + linux/amd64: + lock_file: modules/nf-core/multiqc/.conda-lock/linux_amd64-bd-db7c73dae76bc9e6_1.txt + linux/arm64: + lock_file: modules/nf-core/multiqc/.conda-lock/linux_arm64-bd-d167b8012595a136_1.txt + docker: + linux/amd64: + name: community.wave.seqera.io/library/multiqc:1.34--db7c73dae76bc9e6 + build_id: bd-db7c73dae76bc9e6_1 + scan_id: sc-66fc7138dbf1cf48_1 + linux/arm64: + name: community.wave.seqera.io/library/multiqc:1.34--d167b8012595a136 + build_id: bd-d167b8012595a136_1 + scan_id: sc-ac701dfa631a2af9_1 + singularity: + linux/amd64: + name: oras://community.wave.seqera.io/library/multiqc:1.34--4fc8657c816047c0 + build_id: bd-4fc8657c816047c0_1 + https: https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/1b/1bef8af6be88c5733461959c46ac8ef73d18f65277f62a1695d0e1633054f9c2/data + linux/arm64: + name: oras://community.wave.seqera.io/library/multiqc:1.34--7fbd82d945c06726 + build_id: bd-7fbd82d945c06726_1 + https: https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/9a/9a1fec9662a152683e6fcae440d0ce20920b3b89dc62d1e3a52e73f92eba0969/data diff --git a/modules/nf-core/multiqc/tests/custom_prefix.config b/modules/nf-core/multiqc/tests/custom_prefix.config new file mode 100644 index 0000000..b30b135 --- /dev/null +++ b/modules/nf-core/multiqc/tests/custom_prefix.config @@ -0,0 +1,5 @@ +process { + withName: 'MULTIQC' { + ext.prefix = "custom_prefix" + } +} diff --git a/modules/nf-core/multiqc/tests/main.nf.test b/modules/nf-core/multiqc/tests/main.nf.test index 33316a7..4cbdb95 100644 --- a/modules/nf-core/multiqc/tests/main.nf.test +++ b/modules/nf-core/multiqc/tests/main.nf.test @@ -15,25 +15,84 @@ nextflow_process { when { process { """ - input[0] = Channel.of(file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastqc/test_fastqc.zip', checkIfExists: true)) - input[1] = [] - input[2] = [] - input[3] = [] - input[4] = [] - input[5] = [] + input[0] = channel.of([ + [ id: 'FASTQC' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastqc/test_fastqc.zip', checkIfExists: true), + [], + [], + [], + [] + ]) """ } } then { - assertAll( - { assert process.success }, - { assert process.out.report[0] ==~ ".*/multiqc_report.html" }, - { assert process.out.data[0] ==~ ".*/multiqc_data" }, - { assert snapshot(process.out.versions).match("multiqc_versions_single") } - ) + assert process.success + assert snapshot( + sanitizeOutput(process.out).collectEntries { key, val -> + if (key == "data") { + return [key, val.collect { [path(it[1]).list().collect { file(it.toString()).name }] }] + } + else if (key == "plots") { + return [key, val.collect { [ + "pdf", + path("${it[1]}/pdf").list().collect { file(it.toString()).name }, + "png", + path("${it[1]}/png").list().collect { file(it.toString()).name }, + "svg", + path("${it[1]}/svg").list().collect { file(it.toString()).name }] }] + } + else if (key == "report") { + return [key, file(val[0][1].toString()).name] + } + return [key, val] + } + ).match() + } + } + + test("sarscov2 single-end [fastqc] - custom prefix") { + config "./custom_prefix.config" + + when { + process { + """ + input[0] = channel.of([ + [ id: 'FASTQC' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastqc/test_fastqc.zip', checkIfExists: true), + [], + [], + [], + [] + ]) + """ + } } + then { + assert process.success + assert snapshot( + sanitizeOutput(process.out).collectEntries { key, val -> + if (key == "data") { + return [key, val.collect { [path(it[1]).list().collect { file(it.toString()).name }] }] + } + else if (key == "plots") { + return [key, val.collect { [ + "pdf", + path("${it[1]}/pdf").list().collect { file(it.toString()).name }, + "png", + path("${it[1]}/png").list().collect { file(it.toString()).name }, + "svg", + path("${it[1]}/svg").list().collect { file(it.toString()).name }] }] + } + else if (key == "report") { + return [key, file(val[0][1].toString()).name] + } + return [key, val] + } + ).match() + } } test("sarscov2 single-end [fastqc] [config]") { @@ -41,23 +100,85 @@ nextflow_process { when { process { """ - input[0] = Channel.of(file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastqc/test_fastqc.zip', checkIfExists: true)) - input[1] = Channel.of(file("https://github.com/nf-core/tools/raw/dev/nf_core/pipeline-template/assets/multiqc_config.yml", checkIfExists: true)) - input[2] = [] - input[3] = [] - input[4] = [] - input[5] = [] + input[0] = channel.of([ + [ id: 'FASTQC' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastqc/test_fastqc.zip', checkIfExists: true), + file("https://raw.githubusercontent.com/nf-core/seqinspector/1.0.0/assets/multiqc_config.yml", checkIfExists: true), + [], + [], + [] + ]) """ } } then { - assertAll( - { assert process.success }, - { assert process.out.report[0] ==~ ".*/multiqc_report.html" }, - { assert process.out.data[0] ==~ ".*/multiqc_data" }, - { assert snapshot(process.out.versions).match("multiqc_versions_config") } - ) + assert process.success + assert snapshot( + sanitizeOutput(process.out).collectEntries { key, val -> + if (key == "data") { + return [key, val.collect { [path(it[1]).list().collect { file(it.toString()).name }] }] + } + else if (key == "plots") { + return [key, val.collect { [ + "pdf", + path("${it[1]}/pdf").list().collect { file(it.toString()).name }, + "png", + path("${it[1]}/png").list().collect { file(it.toString()).name }, + "svg", + path("${it[1]}/svg").list().collect { file(it.toString()).name }] }] + } + else if (key == "report") { + return [key, file(val[0][1].toString()).name] + } + return [key, val] + } + ).match() + } + } + + test("sarscov2 single-end [fastqc] [multiple configs]") { + + when { + process { + """ + input[0] = channel.of([ + [ id: 'FASTQC' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastqc/test_fastqc.zip', checkIfExists: true), + [ + file("https://raw.githubusercontent.com/nf-core/seqinspector/1.0.0/assets/multiqc_config.yml", checkIfExists: true), + file("https://raw.githubusercontent.com/nf-core/seqinspector/1.0.0/assets/multiqc_config.yml", checkIfExists: true) + ], + [], + [], + [] + ]) + """ + } + } + + then { + assert process.success + assert snapshot( + sanitizeOutput(process.out).collectEntries { key, val -> + if (key == "data") { + return [key, val.collect { [path(it[1]).list().collect { file(it.toString()).name }] }] + } + else if (key == "plots") { + return [key, val.collect { [ + "pdf", + path("${it[1]}/pdf").list().collect { file(it.toString()).name }, + "png", + path("${it[1]}/png").list().collect { file(it.toString()).name }, + "svg", + path("${it[1]}/svg").list().collect { file(it.toString()).name }] }] + } + else if (key == "report") { + return [key, file(val[0][1].toString()).name] + } + return [key, val] + } + ).match() } } @@ -68,25 +189,23 @@ nextflow_process { when { process { """ - input[0] = Channel.of(file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastqc/test_fastqc.zip', checkIfExists: true)) - input[1] = [] - input[2] = [] - input[3] = [] - input[4] = [] - input[5] = [] + input[0] = channel.of([ + [ id: 'FASTQC' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastqc/test_fastqc.zip', checkIfExists: true), + [], + [], + [], + [] + ]) """ } } then { + assert process.success assertAll( - { assert process.success }, - { assert snapshot(process.out.report.collect { file(it).getName() } + - process.out.data.collect { file(it).getName() } + - process.out.plots.collect { file(it).getName() } + - process.out.versions ).match("multiqc_stub") } + { assert snapshot(sanitizeOutput(process.out)).match() } ) } - } } diff --git a/modules/nf-core/multiqc/tests/main.nf.test.snap b/modules/nf-core/multiqc/tests/main.nf.test.snap index 2fcbb5f..7c2f370 100644 --- a/modules/nf-core/multiqc/tests/main.nf.test.snap +++ b/modules/nf-core/multiqc/tests/main.nf.test.snap @@ -1,41 +1,422 @@ { - "multiqc_versions_single": { + "sarscov2 single-end [fastqc] [multiple configs]": { "content": [ - [ - "versions.yml:md5,41f391dcedce7f93ca188f3a3ffa0916" - ] + { + "data": [ + [ + [ + "fastqc-status-check-heatmap.txt", + "fastqc_overrepresented_sequences_plot.txt", + "fastqc_per_base_n_content_plot.txt", + "fastqc_per_base_sequence_quality_plot.txt", + "fastqc_per_sequence_gc_content_plot_Counts.txt", + "fastqc_per_sequence_gc_content_plot_Percentages.txt", + "fastqc_per_sequence_quality_scores_plot.txt", + "fastqc_sequence_counts_plot.txt", + "fastqc_sequence_duplication_levels_plot.txt", + "fastqc_sequence_length_distribution_plot.txt", + "fastqc_top_overrepresented_sequences_table.txt", + "llms-full.txt", + "multiqc.log", + "multiqc.parquet", + "multiqc_citations.txt", + "multiqc_data.json", + "multiqc_fastqc.txt", + "multiqc_general_stats.txt", + "multiqc_sources.txt" + ] + ] + ], + "plots": [ + [ + "pdf", + [ + "fastqc-status-check-heatmap.pdf", + "fastqc_overrepresented_sequences_plot.pdf", + "fastqc_per_base_n_content_plot.pdf", + "fastqc_per_base_sequence_quality_plot.pdf", + "fastqc_per_sequence_gc_content_plot_Counts.pdf", + "fastqc_per_sequence_gc_content_plot_Percentages.pdf", + "fastqc_per_sequence_quality_scores_plot.pdf", + "fastqc_sequence_counts_plot-cnt.pdf", + "fastqc_sequence_counts_plot-pct.pdf", + "fastqc_sequence_duplication_levels_plot.pdf", + "fastqc_sequence_length_distribution_plot.pdf", + "fastqc_top_overrepresented_sequences_table.pdf" + ], + "png", + [ + "fastqc-status-check-heatmap.png", + "fastqc_overrepresented_sequences_plot.png", + "fastqc_per_base_n_content_plot.png", + "fastqc_per_base_sequence_quality_plot.png", + "fastqc_per_sequence_gc_content_plot_Counts.png", + "fastqc_per_sequence_gc_content_plot_Percentages.png", + "fastqc_per_sequence_quality_scores_plot.png", + "fastqc_sequence_counts_plot-cnt.png", + "fastqc_sequence_counts_plot-pct.png", + "fastqc_sequence_duplication_levels_plot.png", + "fastqc_sequence_length_distribution_plot.png", + "fastqc_top_overrepresented_sequences_table.png" + ], + "svg", + [ + "fastqc-status-check-heatmap.svg", + "fastqc_overrepresented_sequences_plot.svg", + "fastqc_per_base_n_content_plot.svg", + "fastqc_per_base_sequence_quality_plot.svg", + "fastqc_per_sequence_gc_content_plot_Counts.svg", + "fastqc_per_sequence_gc_content_plot_Percentages.svg", + "fastqc_per_sequence_quality_scores_plot.svg", + "fastqc_sequence_counts_plot-cnt.svg", + "fastqc_sequence_counts_plot-pct.svg", + "fastqc_sequence_duplication_levels_plot.svg", + "fastqc_sequence_length_distribution_plot.svg", + "fastqc_top_overrepresented_sequences_table.svg" + ] + ] + ], + "report": "multiqc_report.html", + "versions": [ + [ + "MULTIQC", + "multiqc", + "1.34" + ] + ] + } ], + "timestamp": "2026-03-17T16:15:42.577775492", "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" - }, - "timestamp": "2024-10-02T17:51:46.317523" + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } }, - "multiqc_stub": { + "sarscov2 single-end [fastqc]": { "content": [ - [ - "multiqc_report.html", - "multiqc_data", - "multiqc_plots", - "versions.yml:md5,41f391dcedce7f93ca188f3a3ffa0916" - ] + { + "data": [ + [ + [ + "fastqc-status-check-heatmap.txt", + "fastqc_overrepresented_sequences_plot.txt", + "fastqc_per_base_n_content_plot.txt", + "fastqc_per_base_sequence_quality_plot.txt", + "fastqc_per_sequence_gc_content_plot_Counts.txt", + "fastqc_per_sequence_gc_content_plot_Percentages.txt", + "fastqc_per_sequence_quality_scores_plot.txt", + "fastqc_sequence_counts_plot.txt", + "fastqc_sequence_duplication_levels_plot.txt", + "fastqc_sequence_length_distribution_plot.txt", + "fastqc_top_overrepresented_sequences_table.txt", + "llms-full.txt", + "multiqc.log", + "multiqc.parquet", + "multiqc_citations.txt", + "multiqc_data.json", + "multiqc_fastqc.txt", + "multiqc_general_stats.txt", + "multiqc_software_versions.txt", + "multiqc_sources.txt" + ] + ] + ], + "plots": [ + [ + "pdf", + [ + "fastqc-status-check-heatmap.pdf", + "fastqc_overrepresented_sequences_plot.pdf", + "fastqc_per_base_n_content_plot.pdf", + "fastqc_per_base_sequence_quality_plot.pdf", + "fastqc_per_sequence_gc_content_plot_Counts.pdf", + "fastqc_per_sequence_gc_content_plot_Percentages.pdf", + "fastqc_per_sequence_quality_scores_plot.pdf", + "fastqc_sequence_counts_plot-cnt.pdf", + "fastqc_sequence_counts_plot-pct.pdf", + "fastqc_sequence_duplication_levels_plot.pdf", + "fastqc_sequence_length_distribution_plot.pdf", + "fastqc_top_overrepresented_sequences_table.pdf" + ], + "png", + [ + "fastqc-status-check-heatmap.png", + "fastqc_overrepresented_sequences_plot.png", + "fastqc_per_base_n_content_plot.png", + "fastqc_per_base_sequence_quality_plot.png", + "fastqc_per_sequence_gc_content_plot_Counts.png", + "fastqc_per_sequence_gc_content_plot_Percentages.png", + "fastqc_per_sequence_quality_scores_plot.png", + "fastqc_sequence_counts_plot-cnt.png", + "fastqc_sequence_counts_plot-pct.png", + "fastqc_sequence_duplication_levels_plot.png", + "fastqc_sequence_length_distribution_plot.png", + "fastqc_top_overrepresented_sequences_table.png" + ], + "svg", + [ + "fastqc-status-check-heatmap.svg", + "fastqc_overrepresented_sequences_plot.svg", + "fastqc_per_base_n_content_plot.svg", + "fastqc_per_base_sequence_quality_plot.svg", + "fastqc_per_sequence_gc_content_plot_Counts.svg", + "fastqc_per_sequence_gc_content_plot_Percentages.svg", + "fastqc_per_sequence_quality_scores_plot.svg", + "fastqc_sequence_counts_plot-cnt.svg", + "fastqc_sequence_counts_plot-pct.svg", + "fastqc_sequence_duplication_levels_plot.svg", + "fastqc_sequence_length_distribution_plot.svg", + "fastqc_top_overrepresented_sequences_table.svg" + ] + ] + ], + "report": "multiqc_report.html", + "versions": [ + [ + "MULTIQC", + "multiqc", + "1.34" + ] + ] + } ], + "timestamp": "2026-03-17T16:21:17.072841555", "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" - }, - "timestamp": "2024-10-02T17:52:20.680978" + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } }, - "multiqc_versions_config": { + "sarscov2 single-end [fastqc] - stub": { "content": [ - [ - "versions.yml:md5,41f391dcedce7f93ca188f3a3ffa0916" - ] + { + "data": [ + [ + { + "id": "FASTQC" + }, + [ + ".stub:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "plots": [ + [ + { + "id": "FASTQC" + }, + [ + ".stub:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "report": [ + [ + { + "id": "FASTQC" + }, + "multiqc_report.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + [ + "MULTIQC", + "multiqc", + "1.34" + ] + ] + } ], + "timestamp": "2026-02-26T15:14:39.789193051", "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" - }, - "timestamp": "2024-10-02T17:52:09.185842" + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } + }, + "sarscov2 single-end [fastqc] [config]": { + "content": [ + { + "data": [ + [ + [ + "fastqc-status-check-heatmap.txt", + "fastqc_overrepresented_sequences_plot.txt", + "fastqc_per_base_n_content_plot.txt", + "fastqc_per_base_sequence_quality_plot.txt", + "fastqc_per_sequence_gc_content_plot_Counts.txt", + "fastqc_per_sequence_gc_content_plot_Percentages.txt", + "fastqc_per_sequence_quality_scores_plot.txt", + "fastqc_sequence_counts_plot.txt", + "fastqc_sequence_duplication_levels_plot.txt", + "fastqc_sequence_length_distribution_plot.txt", + "fastqc_top_overrepresented_sequences_table.txt", + "llms-full.txt", + "multiqc.log", + "multiqc.parquet", + "multiqc_citations.txt", + "multiqc_data.json", + "multiqc_fastqc.txt", + "multiqc_general_stats.txt", + "multiqc_sources.txt" + ] + ] + ], + "plots": [ + [ + "pdf", + [ + "fastqc-status-check-heatmap.pdf", + "fastqc_overrepresented_sequences_plot.pdf", + "fastqc_per_base_n_content_plot.pdf", + "fastqc_per_base_sequence_quality_plot.pdf", + "fastqc_per_sequence_gc_content_plot_Counts.pdf", + "fastqc_per_sequence_gc_content_plot_Percentages.pdf", + "fastqc_per_sequence_quality_scores_plot.pdf", + "fastqc_sequence_counts_plot-cnt.pdf", + "fastqc_sequence_counts_plot-pct.pdf", + "fastqc_sequence_duplication_levels_plot.pdf", + "fastqc_sequence_length_distribution_plot.pdf", + "fastqc_top_overrepresented_sequences_table.pdf" + ], + "png", + [ + "fastqc-status-check-heatmap.png", + "fastqc_overrepresented_sequences_plot.png", + "fastqc_per_base_n_content_plot.png", + "fastqc_per_base_sequence_quality_plot.png", + "fastqc_per_sequence_gc_content_plot_Counts.png", + "fastqc_per_sequence_gc_content_plot_Percentages.png", + "fastqc_per_sequence_quality_scores_plot.png", + "fastqc_sequence_counts_plot-cnt.png", + "fastqc_sequence_counts_plot-pct.png", + "fastqc_sequence_duplication_levels_plot.png", + "fastqc_sequence_length_distribution_plot.png", + "fastqc_top_overrepresented_sequences_table.png" + ], + "svg", + [ + "fastqc-status-check-heatmap.svg", + "fastqc_overrepresented_sequences_plot.svg", + "fastqc_per_base_n_content_plot.svg", + "fastqc_per_base_sequence_quality_plot.svg", + "fastqc_per_sequence_gc_content_plot_Counts.svg", + "fastqc_per_sequence_gc_content_plot_Percentages.svg", + "fastqc_per_sequence_quality_scores_plot.svg", + "fastqc_sequence_counts_plot-cnt.svg", + "fastqc_sequence_counts_plot-pct.svg", + "fastqc_sequence_duplication_levels_plot.svg", + "fastqc_sequence_length_distribution_plot.svg", + "fastqc_top_overrepresented_sequences_table.svg" + ] + ] + ], + "report": "multiqc_report.html", + "versions": [ + [ + "MULTIQC", + "multiqc", + "1.34" + ] + ] + } + ], + "timestamp": "2026-03-17T16:15:30.372239611", + "meta": { + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } + }, + "sarscov2 single-end [fastqc] - custom prefix": { + "content": [ + { + "data": [ + [ + [ + "fastqc-status-check-heatmap.txt", + "fastqc_overrepresented_sequences_plot.txt", + "fastqc_per_base_n_content_plot.txt", + "fastqc_per_base_sequence_quality_plot.txt", + "fastqc_per_sequence_gc_content_plot_Counts.txt", + "fastqc_per_sequence_gc_content_plot_Percentages.txt", + "fastqc_per_sequence_quality_scores_plot.txt", + "fastqc_sequence_counts_plot.txt", + "fastqc_sequence_duplication_levels_plot.txt", + "fastqc_sequence_length_distribution_plot.txt", + "fastqc_top_overrepresented_sequences_table.txt", + "llms-full.txt", + "multiqc.log", + "multiqc.parquet", + "multiqc_citations.txt", + "multiqc_data.json", + "multiqc_fastqc.txt", + "multiqc_general_stats.txt", + "multiqc_software_versions.txt", + "multiqc_sources.txt" + ] + ] + ], + "plots": [ + [ + "pdf", + [ + "fastqc-status-check-heatmap.pdf", + "fastqc_overrepresented_sequences_plot.pdf", + "fastqc_per_base_n_content_plot.pdf", + "fastqc_per_base_sequence_quality_plot.pdf", + "fastqc_per_sequence_gc_content_plot_Counts.pdf", + "fastqc_per_sequence_gc_content_plot_Percentages.pdf", + "fastqc_per_sequence_quality_scores_plot.pdf", + "fastqc_sequence_counts_plot-cnt.pdf", + "fastqc_sequence_counts_plot-pct.pdf", + "fastqc_sequence_duplication_levels_plot.pdf", + "fastqc_sequence_length_distribution_plot.pdf", + "fastqc_top_overrepresented_sequences_table.pdf" + ], + "png", + [ + "fastqc-status-check-heatmap.png", + "fastqc_overrepresented_sequences_plot.png", + "fastqc_per_base_n_content_plot.png", + "fastqc_per_base_sequence_quality_plot.png", + "fastqc_per_sequence_gc_content_plot_Counts.png", + "fastqc_per_sequence_gc_content_plot_Percentages.png", + "fastqc_per_sequence_quality_scores_plot.png", + "fastqc_sequence_counts_plot-cnt.png", + "fastqc_sequence_counts_plot-pct.png", + "fastqc_sequence_duplication_levels_plot.png", + "fastqc_sequence_length_distribution_plot.png", + "fastqc_top_overrepresented_sequences_table.png" + ], + "svg", + [ + "fastqc-status-check-heatmap.svg", + "fastqc_overrepresented_sequences_plot.svg", + "fastqc_per_base_n_content_plot.svg", + "fastqc_per_base_sequence_quality_plot.svg", + "fastqc_per_sequence_gc_content_plot_Counts.svg", + "fastqc_per_sequence_gc_content_plot_Percentages.svg", + "fastqc_per_sequence_quality_scores_plot.svg", + "fastqc_sequence_counts_plot-cnt.svg", + "fastqc_sequence_counts_plot-pct.svg", + "fastqc_sequence_duplication_levels_plot.svg", + "fastqc_sequence_length_distribution_plot.svg", + "fastqc_top_overrepresented_sequences_table.svg" + ] + ] + ], + "report": "custom_prefix.html", + "versions": [ + [ + "MULTIQC", + "multiqc", + "1.34" + ] + ] + } + ], + "timestamp": "2026-03-17T16:15:18.189023981", + "meta": { + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } } } \ No newline at end of file diff --git a/modules/nf-core/multiqc/tests/nextflow.config b/modules/nf-core/multiqc/tests/nextflow.config index c537a6a..374dfef 100644 --- a/modules/nf-core/multiqc/tests/nextflow.config +++ b/modules/nf-core/multiqc/tests/nextflow.config @@ -1,5 +1,6 @@ process { withName: 'MULTIQC' { ext.prefix = null + ext.args = '-p' } } diff --git a/modules/nf-core/multiqc/tests/tags.yml b/modules/nf-core/multiqc/tests/tags.yml deleted file mode 100644 index bea6c0d..0000000 --- a/modules/nf-core/multiqc/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -multiqc: - - modules/nf-core/multiqc/** diff --git a/modules/nf-core/samtools/index/environment.yml b/modules/nf-core/samtools/index/environment.yml new file mode 100644 index 0000000..62054fc --- /dev/null +++ b/modules/nf-core/samtools/index/environment.yml @@ -0,0 +1,8 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::htslib=1.21 + - bioconda::samtools=1.21 diff --git a/modules/nf-core/samtools/index/main.nf b/modules/nf-core/samtools/index/main.nf new file mode 100644 index 0000000..3117561 --- /dev/null +++ b/modules/nf-core/samtools/index/main.nf @@ -0,0 +1,49 @@ +process SAMTOOLS_INDEX { + tag "$meta.id" + label 'process_low' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/samtools:1.21--h50ea8bc_0' : + 'biocontainers/samtools:1.21--h50ea8bc_0' }" + + input: + tuple val(meta), path(input) + + output: + tuple val(meta), path("*.bai") , optional:true, emit: bai + tuple val(meta), path("*.csi") , optional:true, emit: csi + tuple val(meta), path("*.crai"), optional:true, emit: crai + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + """ + samtools \\ + index \\ + -@ ${task.cpus-1} \\ + $args \\ + $input + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') + END_VERSIONS + """ + + stub: + def args = task.ext.args ?: '' + def extension = file(input).getExtension() == 'cram' ? + "crai" : args.contains("-c") ? "csi" : "bai" + """ + touch ${input}.${extension} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/samtools/index/meta.yml b/modules/nf-core/samtools/index/meta.yml new file mode 100644 index 0000000..db8df0d --- /dev/null +++ b/modules/nf-core/samtools/index/meta.yml @@ -0,0 +1,71 @@ +name: samtools_index +description: Index SAM/BAM/CRAM file +keywords: + - index + - bam + - sam + - cram +tools: + - samtools: + description: | + SAMtools is a set of utilities for interacting with and post-processing + short DNA sequence read alignments in the SAM, BAM and CRAM formats, written by Heng Li. + These files are generated as output by short read aligners like BWA. + homepage: http://www.htslib.org/ + documentation: http://www.htslib.org/doc/samtools.html + doi: 10.1093/bioinformatics/btp352 + licence: ["MIT"] + identifier: biotools:samtools +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - input: + type: file + description: input file +output: + - bai: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.bai": + type: file + description: BAM/CRAM/SAM index file + pattern: "*.{bai,crai,sai}" + - csi: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.csi": + type: file + description: CSI index file + pattern: "*.{csi}" + - crai: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.crai": + type: file + description: BAM/CRAM/SAM index file + pattern: "*.{bai,crai,sai}" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@drpatelh" + - "@ewels" + - "@maxulysse" +maintainers: + - "@drpatelh" + - "@ewels" + - "@maxulysse" diff --git a/modules/nf-core/samtools/index/tests/csi.nextflow.config b/modules/nf-core/samtools/index/tests/csi.nextflow.config new file mode 100644 index 0000000..0ed260e --- /dev/null +++ b/modules/nf-core/samtools/index/tests/csi.nextflow.config @@ -0,0 +1,7 @@ +process { + + withName: SAMTOOLS_INDEX { + ext.args = '-c' + } + +} diff --git a/modules/nf-core/samtools/index/tests/main.nf.test b/modules/nf-core/samtools/index/tests/main.nf.test new file mode 100644 index 0000000..ca34fb5 --- /dev/null +++ b/modules/nf-core/samtools/index/tests/main.nf.test @@ -0,0 +1,140 @@ +nextflow_process { + + name "Test Process SAMTOOLS_INDEX" + script "../main.nf" + process "SAMTOOLS_INDEX" + tag "modules" + tag "modules_nfcore" + tag "samtools" + tag "samtools/index" + + test("bai") { + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true) + ]) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("crai") { + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.recalibrated.sorted.cram', checkIfExists: true) + ]) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("csi") { + config "./csi.nextflow.config" + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true) + ]) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot( + file(process.out.csi[0][1]).name, + process.out.versions + ).match() } + ) + } + } + + test("bai - stub") { + options "-stub" + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true) + ]) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("crai - stub") { + options "-stub" + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.recalibrated.sorted.cram', checkIfExists: true) + ]) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("csi - stub") { + options "-stub" + config "./csi.nextflow.config" + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true) + ]) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } +} diff --git a/modules/nf-core/samtools/index/tests/main.nf.test.snap b/modules/nf-core/samtools/index/tests/main.nf.test.snap new file mode 100644 index 0000000..72d65e8 --- /dev/null +++ b/modules/nf-core/samtools/index/tests/main.nf.test.snap @@ -0,0 +1,250 @@ +{ + "csi - stub": { + "content": [ + { + "0": [ + + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.paired_end.sorted.bam.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + + ], + "3": [ + "versions.yml:md5,5e09a6fdf76de396728f877193d72315" + ], + "bai": [ + + ], + "crai": [ + + ], + "csi": [ + [ + { + "id": "test", + "single_end": false + }, + "test.paired_end.sorted.bam.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,5e09a6fdf76de396728f877193d72315" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-16T08:21:25.261127166" + }, + "crai - stub": { + "content": [ + { + "0": [ + + ], + "1": [ + + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test.paired_end.recalibrated.sorted.cram.crai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + "versions.yml:md5,5e09a6fdf76de396728f877193d72315" + ], + "bai": [ + + ], + "crai": [ + [ + { + "id": "test", + "single_end": false + }, + "test.paired_end.recalibrated.sorted.cram.crai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "csi": [ + + ], + "versions": [ + "versions.yml:md5,5e09a6fdf76de396728f877193d72315" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-16T08:21:12.653194876" + }, + "bai - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.paired_end.sorted.bam.bai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + + ], + "2": [ + + ], + "3": [ + "versions.yml:md5,5e09a6fdf76de396728f877193d72315" + ], + "bai": [ + [ + { + "id": "test", + "single_end": false + }, + "test.paired_end.sorted.bam.bai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "crai": [ + + ], + "csi": [ + + ], + "versions": [ + "versions.yml:md5,5e09a6fdf76de396728f877193d72315" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-16T08:21:01.854932651" + }, + "csi": { + "content": [ + "test.paired_end.sorted.bam.csi", + [ + "versions.yml:md5,5e09a6fdf76de396728f877193d72315" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-16T08:20:51.485364222" + }, + "crai": { + "content": [ + { + "0": [ + + ], + "1": [ + + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test.paired_end.recalibrated.sorted.cram.crai:md5,14bc3bd5c89cacc8f4541f9062429029" + ] + ], + "3": [ + "versions.yml:md5,5e09a6fdf76de396728f877193d72315" + ], + "bai": [ + + ], + "crai": [ + [ + { + "id": "test", + "single_end": false + }, + "test.paired_end.recalibrated.sorted.cram.crai:md5,14bc3bd5c89cacc8f4541f9062429029" + ] + ], + "csi": [ + + ], + "versions": [ + "versions.yml:md5,5e09a6fdf76de396728f877193d72315" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-16T08:20:40.518873972" + }, + "bai": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.paired_end.sorted.bam.bai:md5,704c10dd1326482448ca3073fdebc2f4" + ] + ], + "1": [ + + ], + "2": [ + + ], + "3": [ + "versions.yml:md5,5e09a6fdf76de396728f877193d72315" + ], + "bai": [ + [ + { + "id": "test", + "single_end": false + }, + "test.paired_end.sorted.bam.bai:md5,704c10dd1326482448ca3073fdebc2f4" + ] + ], + "crai": [ + + ], + "csi": [ + + ], + "versions": [ + "versions.yml:md5,5e09a6fdf76de396728f877193d72315" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-16T08:20:21.184050361" + } +} \ No newline at end of file diff --git a/modules/nf-core/samtools/index/tests/tags.yml b/modules/nf-core/samtools/index/tests/tags.yml new file mode 100644 index 0000000..e0f58a7 --- /dev/null +++ b/modules/nf-core/samtools/index/tests/tags.yml @@ -0,0 +1,2 @@ +samtools/index: + - modules/nf-core/samtools/index/** diff --git a/modules/nf-core/samtools/merge/environment.yml b/modules/nf-core/samtools/merge/environment.yml new file mode 100644 index 0000000..62054fc --- /dev/null +++ b/modules/nf-core/samtools/merge/environment.yml @@ -0,0 +1,8 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::htslib=1.21 + - bioconda::samtools=1.21 diff --git a/modules/nf-core/samtools/merge/main.nf b/modules/nf-core/samtools/merge/main.nf new file mode 100644 index 0000000..34da4c7 --- /dev/null +++ b/modules/nf-core/samtools/merge/main.nf @@ -0,0 +1,61 @@ +process SAMTOOLS_MERGE { + tag "$meta.id" + label 'process_low' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/samtools:1.21--h50ea8bc_0' : + 'biocontainers/samtools:1.21--h50ea8bc_0' }" + + input: + tuple val(meta), path(input_files, stageAs: "?/*") + tuple val(meta2), path(fasta) + tuple val(meta3), path(fai) + + output: + tuple val(meta), path("${prefix}.bam") , optional:true, emit: bam + tuple val(meta), path("${prefix}.cram"), optional:true, emit: cram + tuple val(meta), path("*.csi") , optional:true, emit: csi + tuple val(meta), path("*.crai") , optional:true, emit: crai + path "versions.yml" , emit: versions + + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + prefix = task.ext.prefix ?: "${meta.id}" + def file_type = input_files instanceof List ? input_files[0].getExtension() : input_files.getExtension() + def reference = fasta ? "--reference ${fasta}" : "" + """ + samtools \\ + merge \\ + --threads ${task.cpus-1} \\ + $args \\ + ${reference} \\ + ${prefix}.${file_type} \\ + $input_files + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') + END_VERSIONS + """ + + stub: + def args = task.ext.args ?: '' + prefix = task.ext.suffix ? "${meta.id}${task.ext.suffix}" : "${meta.id}" + def file_type = input_files instanceof List ? input_files[0].getExtension() : input_files.getExtension() + def index_type = file_type == "bam" ? "csi" : "crai" + def index = args.contains("--write-index") ? "touch ${prefix}.${index_type}" : "" + """ + touch ${prefix}.${file_type} + ${index} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/samtools/merge/meta.yml b/modules/nf-core/samtools/merge/meta.yml new file mode 100644 index 0000000..235aa21 --- /dev/null +++ b/modules/nf-core/samtools/merge/meta.yml @@ -0,0 +1,104 @@ +name: samtools_merge +description: Merge BAM or CRAM file +keywords: + - merge + - bam + - sam + - cram +tools: + - samtools: + description: | + SAMtools is a set of utilities for interacting with and post-processing + short DNA sequence read alignments in the SAM, BAM and CRAM formats, written by Heng Li. + These files are generated as output by short read aligners like BWA. + homepage: http://www.htslib.org/ + documentation: http://www.htslib.org/doc/samtools.html + doi: 10.1093/bioinformatics/btp352 + licence: ["MIT"] + identifier: biotools:samtools +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - input_files: + type: file + description: BAM/CRAM file + pattern: "*.{bam,cram,sam}" + - - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - fasta: + type: file + description: Reference file the CRAM was created with (optional) + pattern: "*.{fasta,fa}" + - - meta3: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - fai: + type: file + description: Index of the reference file the CRAM was created with (optional) + pattern: "*.fai" +output: + - bam: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.bam: + type: file + description: BAM file + pattern: "*.{bam}" + - cram: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.cram: + type: file + description: CRAM file + pattern: "*.{cram}" + - csi: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.csi": + type: file + description: BAM index file (optional) + pattern: "*.csi" + - crai: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.crai": + type: file + description: CRAM index file (optional) + pattern: "*.crai" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@drpatelh" + - "@yuukiiwa " + - "@maxulysse" + - "@FriederikeHanssen" + - "@ramprasadn" +maintainers: + - "@drpatelh" + - "@yuukiiwa " + - "@maxulysse" + - "@FriederikeHanssen" + - "@ramprasadn" diff --git a/modules/nf-core/samtools/merge/tests/index.config b/modules/nf-core/samtools/merge/tests/index.config new file mode 100644 index 0000000..8c5668c --- /dev/null +++ b/modules/nf-core/samtools/merge/tests/index.config @@ -0,0 +1,3 @@ +process { + ext.args = "--write-index" +} \ No newline at end of file diff --git a/modules/nf-core/samtools/merge/tests/main.nf.test b/modules/nf-core/samtools/merge/tests/main.nf.test new file mode 100644 index 0000000..40b36e8 --- /dev/null +++ b/modules/nf-core/samtools/merge/tests/main.nf.test @@ -0,0 +1,137 @@ +nextflow_process { + + name "Test Process SAMTOOLS_MERGE" + script "../main.nf" + process "SAMTOOLS_MERGE" + + tag "modules" + tag "modules_nfcore" + tag "samtools" + tag "samtools/merge" + + test("bams") { + + config "./index.config" + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.methylated.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.single_end.sorted.bam', checkIfExists: true) ] + ]) + input[1] = [[],[]] + input[2] = [[],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(file(process.out.bam[0][1]).name).match("bams_bam") }, + { assert snapshot(process.out.cram).match("bams_cram") }, + { assert snapshot(file(process.out.csi[0][1]).name).match("bams_csi") }, + { assert snapshot(process.out.crai).match("bams_crai") }, + { assert snapshot(process.out.versions).match("bams_versions") } + ) + } + } + + test("crams") { + + config "./index.config" + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.recalibrated.sorted.cram', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test2.paired_end.recalibrated.sorted.cram', checkIfExists: true) ] + ]) + input[1] = Channel.of([ + [ id:'genome' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ]) + input[2] = Channel.of([ + [ id:'genome' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) + ]) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(file(process.out.cram[0][1]).name).match("crams_cram") }, + { assert snapshot(process.out.bam).match("crams_bam") }, + { assert snapshot(file(process.out.crai[0][1]).name).match("crams_crai") }, + { assert snapshot(process.out.csi).match("crams_csi") }, + { assert snapshot(process.out.versions).match("crams_versions") } + ) + } + } + + test("bam") { + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.methylated.sorted.bam', checkIfExists: true) ] + ]) + input[1] = [[],[]] + input[2] = [[],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(file(process.out.bam[0][1]).name).match("bam_bam") }, + { assert snapshot(process.out.cram).match("bam_cram") }, + { assert snapshot(process.out.crai).match("bam_crai") }, + { assert snapshot(process.out.csi).match("bam_csi") }, + { assert snapshot(process.out.versions).match("bam_versions") } + ) + } + } + + test("bams_stub") { + + config "./index.config" + options "-stub" + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.methylated.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.single_end.sorted.bam', checkIfExists: true) ] + ]) + input[1] = [[],[]] + input[2] = [[],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(file(process.out.bam[0][1]).name).match("bams_stub_bam") }, + { assert snapshot(process.out.cram).match("bams_stub_cram") }, + { assert snapshot(file(process.out.csi[0][1]).name).match("bams_stub_csi") }, + { assert snapshot(process.out.crai).match("bams_stub_crai") }, + { assert snapshot(process.out.versions).match("bams_stub_versions") } + ) + } + } +} diff --git a/modules/nf-core/samtools/merge/tests/main.nf.test.snap b/modules/nf-core/samtools/merge/tests/main.nf.test.snap new file mode 100644 index 0000000..0a41e01 --- /dev/null +++ b/modules/nf-core/samtools/merge/tests/main.nf.test.snap @@ -0,0 +1,228 @@ +{ + "crams_cram": { + "content": [ + "test.cram" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T18:50:00.647389" + }, + "bams_stub_cram": { + "content": [ + [ + + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T18:50:19.937013" + }, + "bams_crai": { + "content": [ + [ + + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T18:49:24.928616" + }, + "bams_bam": { + "content": [ + "test.bam" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T18:49:24.923289" + }, + "bams_cram": { + "content": [ + [ + + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T18:49:24.925716" + }, + "crams_csi": { + "content": [ + [ + + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T18:50:00.655959" + }, + "bam_bam": { + "content": [ + "test.bam" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T18:50:10.319539" + }, + "bam_versions": { + "content": [ + [ + "versions.yml:md5,d51d18a97513e370e43f0c891c51dfc4" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-16T09:16:30.476887194" + }, + "bams_csi": { + "content": [ + "test.bam.csi" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T18:49:24.92719" + }, + "bams_stub_csi": { + "content": [ + "test.csi" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T18:50:19.940498" + }, + "bam_crai": { + "content": [ + [ + + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T18:50:10.328852" + }, + "bams_stub_versions": { + "content": [ + [ + "versions.yml:md5,d51d18a97513e370e43f0c891c51dfc4" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-16T09:16:52.203823961" + }, + "bam_cram": { + "content": [ + [ + + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T18:50:10.324219" + }, + "bams_stub_bam": { + "content": [ + "test.bam" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T18:50:19.933153" + }, + "bams_versions": { + "content": [ + [ + "versions.yml:md5,d51d18a97513e370e43f0c891c51dfc4" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-16T08:29:57.524363148" + }, + "crams_bam": { + "content": [ + [ + + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T18:50:00.650652" + }, + "crams_versions": { + "content": [ + [ + "versions.yml:md5,d51d18a97513e370e43f0c891c51dfc4" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-16T09:16:06.977096207" + }, + "bam_csi": { + "content": [ + [ + + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T18:50:10.33292" + }, + "crams_crai": { + "content": [ + "test.cram.crai" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T18:50:00.653512" + }, + "bams_stub_crai": { + "content": [ + [ + + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T18:50:19.943839" + } +} \ No newline at end of file diff --git a/modules/nf-core/samtools/merge/tests/tags.yml b/modules/nf-core/samtools/merge/tests/tags.yml new file mode 100644 index 0000000..b869abc --- /dev/null +++ b/modules/nf-core/samtools/merge/tests/tags.yml @@ -0,0 +1,2 @@ +samtools/merge: + - "modules/nf-core/samtools/merge/**" diff --git a/modules/nf-core/samtools/stats/environment.yml b/modules/nf-core/samtools/stats/environment.yml new file mode 100644 index 0000000..62054fc --- /dev/null +++ b/modules/nf-core/samtools/stats/environment.yml @@ -0,0 +1,8 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::htslib=1.21 + - bioconda::samtools=1.21 diff --git a/modules/nf-core/samtools/stats/main.nf b/modules/nf-core/samtools/stats/main.nf new file mode 100644 index 0000000..493525a --- /dev/null +++ b/modules/nf-core/samtools/stats/main.nf @@ -0,0 +1,49 @@ +process SAMTOOLS_STATS { + tag "$meta.id" + label 'process_single' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/samtools:1.21--h50ea8bc_0' : + 'biocontainers/samtools:1.21--h50ea8bc_0' }" + + input: + tuple val(meta), path(input), path(input_index) + tuple val(meta2), path(fasta) + + output: + tuple val(meta), path("*.stats"), emit: stats + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def reference = fasta ? "--reference ${fasta}" : "" + """ + samtools \\ + stats \\ + --threads ${task.cpus} \\ + ${reference} \\ + ${input} \\ + > ${prefix}.stats + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.stats + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/samtools/stats/meta.yml b/modules/nf-core/samtools/stats/meta.yml new file mode 100644 index 0000000..77b020f --- /dev/null +++ b/modules/nf-core/samtools/stats/meta.yml @@ -0,0 +1,66 @@ +name: samtools_stats +description: Produces comprehensive statistics from SAM/BAM/CRAM file +keywords: + - statistics + - counts + - bam + - sam + - cram +tools: + - samtools: + description: | + SAMtools is a set of utilities for interacting with and post-processing + short DNA sequence read alignments in the SAM, BAM and CRAM formats, written by Heng Li. + These files are generated as output by short read aligners like BWA. + homepage: http://www.htslib.org/ + documentation: http://www.htslib.org/doc/samtools.html + doi: 10.1093/bioinformatics/btp352 + licence: ["MIT"] + identifier: biotools:samtools +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - input: + type: file + description: BAM/CRAM file from alignment + pattern: "*.{bam,cram}" + - input_index: + type: file + description: BAI/CRAI file from alignment + pattern: "*.{bai,crai}" + - - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - fasta: + type: file + description: Reference file the CRAM was created with (optional) + pattern: "*.{fasta,fa}" +output: + - stats: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.stats": + type: file + description: File containing samtools stats output + pattern: "*.{stats}" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@drpatelh" + - "@FriederikeHanssen" + - "@ramprasadn" +maintainers: + - "@drpatelh" + - "@FriederikeHanssen" + - "@ramprasadn" diff --git a/modules/nf-core/samtools/stats/tests/main.nf.test b/modules/nf-core/samtools/stats/tests/main.nf.test new file mode 100644 index 0000000..5bc8930 --- /dev/null +++ b/modules/nf-core/samtools/stats/tests/main.nf.test @@ -0,0 +1,113 @@ +nextflow_process { + + name "Test Process SAMTOOLS_STATS" + script "../main.nf" + process "SAMTOOLS_STATS" + + tag "modules" + tag "modules_nfcore" + tag "samtools" + tag "samtools/stats" + + test("bam") { + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true) + ]) + input[1] = [[],[]] + """ + } + } + + then { + assertAll( + {assert process.success}, + {assert snapshot(process.out).match()} + ) + } + } + + test("cram") { + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.recalibrated.sorted.cram', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.recalibrated.sorted.cram.crai', checkIfExists: true) + ]) + input[1] = Channel.of([ + [ id:'genome' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.fasta', checkIfExists: true) + ]) + """ + } + } + + then { + assertAll( + {assert process.success}, + {assert snapshot(process.out).match()} + ) + } + } + + test("bam - stub") { + + options "-stub" + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true) + ]) + input[1] = [[],[]] + """ + } + } + + then { + assertAll( + {assert process.success}, + {assert snapshot(process.out).match()} + ) + } + } + + test("cram - stub") { + + options "-stub" + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.recalibrated.sorted.cram', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.recalibrated.sorted.cram.crai', checkIfExists: true) + ]) + input[1] = Channel.of([ + [ id:'genome' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.fasta', checkIfExists: true) + ]) + """ + } + } + + then { + assertAll( + {assert process.success}, + {assert snapshot(process.out).match()} + ) + } + } +} diff --git a/modules/nf-core/samtools/stats/tests/main.nf.test.snap b/modules/nf-core/samtools/stats/tests/main.nf.test.snap new file mode 100644 index 0000000..df507be --- /dev/null +++ b/modules/nf-core/samtools/stats/tests/main.nf.test.snap @@ -0,0 +1,142 @@ +{ + "cram": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.stats:md5,a27fe55e49a341f92379bb20a65c6a06" + ] + ], + "1": [ + "versions.yml:md5,15b91d8c0e0440332e0fe4df80957043" + ], + "stats": [ + [ + { + "id": "test", + "single_end": false + }, + "test.stats:md5,a27fe55e49a341f92379bb20a65c6a06" + ] + ], + "versions": [ + "versions.yml:md5,15b91d8c0e0440332e0fe4df80957043" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-16T09:29:16.767396182" + }, + "bam - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.stats:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + "versions.yml:md5,15b91d8c0e0440332e0fe4df80957043" + ], + "stats": [ + [ + { + "id": "test", + "single_end": false + }, + "test.stats:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,15b91d8c0e0440332e0fe4df80957043" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-16T09:29:29.721580274" + }, + "cram - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.stats:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + "versions.yml:md5,15b91d8c0e0440332e0fe4df80957043" + ], + "stats": [ + [ + { + "id": "test", + "single_end": false + }, + "test.stats:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,15b91d8c0e0440332e0fe4df80957043" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-16T09:29:53.567964304" + }, + "bam": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.stats:md5,d53a2584376d78942839e9933a34d11b" + ] + ], + "1": [ + "versions.yml:md5,15b91d8c0e0440332e0fe4df80957043" + ], + "stats": [ + [ + { + "id": "test", + "single_end": false + }, + "test.stats:md5,d53a2584376d78942839e9933a34d11b" + ] + ], + "versions": [ + "versions.yml:md5,15b91d8c0e0440332e0fe4df80957043" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-16T09:28:50.73610604" + } +} \ No newline at end of file diff --git a/modules/nf-core/samtools/stats/tests/tags.yml b/modules/nf-core/samtools/stats/tests/tags.yml new file mode 100644 index 0000000..7c28e30 --- /dev/null +++ b/modules/nf-core/samtools/stats/tests/tags.yml @@ -0,0 +1,2 @@ +samtools/stats: + - modules/nf-core/samtools/stats/** diff --git a/modules/nf-core/snpdists/environment.yml b/modules/nf-core/snpdists/environment.yml new file mode 100644 index 0000000..71c52aa --- /dev/null +++ b/modules/nf-core/snpdists/environment.yml @@ -0,0 +1,5 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::snp-dists=0.8.2 diff --git a/modules/nf-core/snpdists/main.nf b/modules/nf-core/snpdists/main.nf new file mode 100644 index 0000000..9e8e2b6 --- /dev/null +++ b/modules/nf-core/snpdists/main.nf @@ -0,0 +1,33 @@ +process SNPDISTS { + tag "$meta.id" + label 'process_low' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/snp-dists:0.8.2--h5bf99c6_0' : + 'biocontainers/snp-dists:0.8.2--h5bf99c6_0' }" + + input: + tuple val(meta), path(alignment) + + output: + tuple val(meta), path("*.tsv"), emit: tsv + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + """ + snp-dists \\ + $args \\ + $alignment > ${prefix}.tsv + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + snpdists: \$(snp-dists -v 2>&1 | sed 's/snp-dists //;') + END_VERSIONS + """ +} diff --git a/modules/nf-core/snpdists/meta.yml b/modules/nf-core/snpdists/meta.yml new file mode 100644 index 0000000..612638f --- /dev/null +++ b/modules/nf-core/snpdists/meta.yml @@ -0,0 +1,45 @@ +name: snpdists +description: Pairwise SNP distance matrix from a FASTA sequence alignment +keywords: + - snp + - dist + - distance + - matrix +tools: + - snpdists: + description: Convert a FASTA alignment to SNP distance matrix + homepage: https://github.com/tseemann/snp-dists + documentation: https://github.com/tseemann/snp-dists + tool_dev_url: https://github.com/tseemann/snp-dists + licence: ["GPL v3"] + identifier: "" +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - alignment: + type: file + description: The input FASTA sequence alignment file + pattern: "*.{fasta,fasta.gz}" +output: + - tsv: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.tsv": + type: file + description: The output TSV file containing SNP distance matrix + pattern: "*.tsv" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@abhi18av" +maintainers: + - "@abhi18av" diff --git a/modules/nf-core/snpdists/tests/main.nf.test b/modules/nf-core/snpdists/tests/main.nf.test new file mode 100644 index 0000000..f1d7c7f --- /dev/null +++ b/modules/nf-core/snpdists/tests/main.nf.test @@ -0,0 +1,32 @@ + +nextflow_process { + + name "Test Process SNPDISTS" + script "../main.nf" + process "SNPDISTS" + + tag "modules" + tag "modules_nfcore" + tag "snpdists" + + test("test-snpdists") { + + when { + process { + """ + input[0] = [ [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/alignment/informative_sites.fas', checkIfExists: true) ] + + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + +} diff --git a/modules/nf-core/snpdists/tests/main.nf.test.snap b/modules/nf-core/snpdists/tests/main.nf.test.snap new file mode 100644 index 0000000..b38ede9 --- /dev/null +++ b/modules/nf-core/snpdists/tests/main.nf.test.snap @@ -0,0 +1,37 @@ +{ + "test-snpdists": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.tsv:md5,0018e5ec43990eb16abe2411fff4e47e" + ] + ], + "1": [ + "versions.yml:md5,62490c6d1f42c5d2eebeea9fcf78f619" + ], + "tsv": [ + [ + { + "id": "test", + "single_end": false + }, + "test.tsv:md5,0018e5ec43990eb16abe2411fff4e47e" + ] + ], + "versions": [ + "versions.yml:md5,62490c6d1f42c5d2eebeea9fcf78f619" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-28T17:00:19.004853" + } +} \ No newline at end of file diff --git a/modules/nf-core/snpeff/download/environment.yml b/modules/nf-core/snpeff/download/environment.yml new file mode 100644 index 0000000..f2ad925 --- /dev/null +++ b/modules/nf-core/snpeff/download/environment.yml @@ -0,0 +1,5 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::snpeff=5.1 diff --git a/modules/nf-core/snpeff/download/main.nf b/modules/nf-core/snpeff/download/main.nf new file mode 100644 index 0000000..e422593 --- /dev/null +++ b/modules/nf-core/snpeff/download/main.nf @@ -0,0 +1,54 @@ +process SNPEFF_DOWNLOAD { + tag "$meta.id" + label 'process_medium' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/snpeff:5.1--hdfd78af_2' : + 'biocontainers/snpeff:5.1--hdfd78af_2' }" + + input: + tuple val(meta), val(snpeff_db) + + output: + tuple val(meta), path('snpeff_cache'), emit: cache + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def avail_mem = 6144 + if (!task.memory) { + log.info '[snpEff] Available memory not known - defaulting to 6GB. Specify process memory requirements to change this.' + } else { + avail_mem = (task.memory.mega*0.8).intValue() + } + """ + snpEff \\ + -Xmx${avail_mem}M \\ + download ${snpeff_db} \\ + -dataDir \${PWD}/snpeff_cache \\ + ${args} + + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + snpeff: \$(echo \$(snpEff -version 2>&1) | cut -f 2 -d ' ') + END_VERSIONS + """ + + stub: + """ + mkdir -p snpeff_cache/${snpeff_db} + + touch snpeff_cache/${snpeff_db}/sequence.I.bin + touch snpeff_cache/${snpeff_db}/sequence.bin + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + snpeff: \$(echo \$(snpEff -version 2>&1) | cut -f 2 -d ' ') + END_VERSIONS + """ +} diff --git a/modules/nf-core/snpeff/download/meta.yml b/modules/nf-core/snpeff/download/meta.yml new file mode 100644 index 0000000..a3211fc --- /dev/null +++ b/modules/nf-core/snpeff/download/meta.yml @@ -0,0 +1,49 @@ +name: snpeff_download +description: Genetic variant annotation and functional effect prediction toolbox +keywords: + - annotation + - effect prediction + - snpeff + - variant + - vcf +tools: + - snpeff: + description: | + SnpEff is a variant annotation and effect prediction tool. + It annotates and predicts the effects of genetic variants on genes and proteins (such as amino acid changes). + homepage: https://pcingola.github.io/SnpEff/ + documentation: https://pcingola.github.io/SnpEff/se_introduction/ + licence: ["MIT"] + identifier: biotools:snpeff +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - genome: + type: file + description: Reference genome in FASTA format + pattern: "*.{fasta,fna,fa}" + - cache_version: + type: string + description: Version of the snpEff cache to download +output: + - cache: + - meta: + type: file + description: | + snpEff cache + - snpeff_cache: + type: file + description: | + snpEff cache + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@maxulysse" +maintainers: + - "@maxulysse" diff --git a/modules/nf-core/snpeff/download/tests/main.nf.test b/modules/nf-core/snpeff/download/tests/main.nf.test new file mode 100644 index 0000000..ef547c6 --- /dev/null +++ b/modules/nf-core/snpeff/download/tests/main.nf.test @@ -0,0 +1,51 @@ + +nextflow_process { + + name "Test Process SNPEFF_DOWNLOAD" + script "../main.nf" + process "SNPEFF_DOWNLOAD" + + tag "modules" + tag "modules_nfcore" + tag "snpeff" + tag "snpeff/download" + + test("test-snpeff-download") { + + when { + process { + """ + input[0] = [ [ id:"WBcel235.105" ], "WBcel235.105" ] + + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("test-snpeff-download-stub") { + options '-stub' + when { + process { + """ + input[0] = [ [ id:"WBcel235.105" ], "WBcel235.105" ] + + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + +} diff --git a/modules/nf-core/snpeff/download/tests/main.nf.test.snap b/modules/nf-core/snpeff/download/tests/main.nf.test.snap new file mode 100644 index 0000000..5bccdd8 --- /dev/null +++ b/modules/nf-core/snpeff/download/tests/main.nf.test.snap @@ -0,0 +1,100 @@ +{ + "test-snpeff-download-stub": { + "content": [ + { + "0": [ + [ + { + "id": "WBcel235.105" + }, + [ + [ + "sequence.I.bin:md5,d41d8cd98f00b204e9800998ecf8427e", + "sequence.bin:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ] + ], + "1": [ + "versions.yml:md5,5fc7ed9f548eccf5fac9fdefc12ef56e" + ], + "cache": [ + [ + { + "id": "WBcel235.105" + }, + [ + [ + "sequence.I.bin:md5,d41d8cd98f00b204e9800998ecf8427e", + "sequence.bin:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ] + ], + "versions": [ + "versions.yml:md5,5fc7ed9f548eccf5fac9fdefc12ef56e" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-19T12:48:45.183665736" + }, + "test-snpeff-download": { + "content": [ + { + "0": [ + [ + { + "id": "WBcel235.105" + }, + [ + [ + "sequence.I.bin:md5,2fd1694bd91cf7952cbad8cfed161e53", + "sequence.II.bin:md5,bacedbdea89508e108223767fa260a4c", + "sequence.III.bin:md5,444118a9fb9d0a03c37e86094d8e52a9", + "sequence.IV.bin:md5,ff756628faa0b71cd65495668c3d82b5", + "sequence.V.bin:md5,d6ad5476162ac45829f719dd4ee3f4e7", + "sequence.X.bin:md5,b79bec6cc8f96b8373dac56bab5d0a6c", + "sequence.bin:md5,ec2bc2ae81755ab90fcf1848bc7ce41f", + "snpEffectPredictor.bin:md5,1d99251d0405f0a42913ed8b5b2c2fa7" + ] + ] + ] + ], + "1": [ + "versions.yml:md5,5fc7ed9f548eccf5fac9fdefc12ef56e" + ], + "cache": [ + [ + { + "id": "WBcel235.105" + }, + [ + [ + "sequence.I.bin:md5,2fd1694bd91cf7952cbad8cfed161e53", + "sequence.II.bin:md5,bacedbdea89508e108223767fa260a4c", + "sequence.III.bin:md5,444118a9fb9d0a03c37e86094d8e52a9", + "sequence.IV.bin:md5,ff756628faa0b71cd65495668c3d82b5", + "sequence.V.bin:md5,d6ad5476162ac45829f719dd4ee3f4e7", + "sequence.X.bin:md5,b79bec6cc8f96b8373dac56bab5d0a6c", + "sequence.bin:md5,ec2bc2ae81755ab90fcf1848bc7ce41f", + "snpEffectPredictor.bin:md5,1d99251d0405f0a42913ed8b5b2c2fa7" + ] + ] + ] + ], + "versions": [ + "versions.yml:md5,5fc7ed9f548eccf5fac9fdefc12ef56e" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-29T14:27:47.123555" + } +} \ No newline at end of file diff --git a/modules/nf-core/snpeff/snpeff/environment.yml b/modules/nf-core/snpeff/snpeff/environment.yml new file mode 100644 index 0000000..f2ad925 --- /dev/null +++ b/modules/nf-core/snpeff/snpeff/environment.yml @@ -0,0 +1,5 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::snpeff=5.1 diff --git a/modules/nf-core/snpeff/snpeff/main.nf b/modules/nf-core/snpeff/snpeff/main.nf new file mode 100644 index 0000000..28d1382 --- /dev/null +++ b/modules/nf-core/snpeff/snpeff/main.nf @@ -0,0 +1,62 @@ +process SNPEFF_SNPEFF { + tag "$meta.id" + label 'process_medium' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/snpeff:5.1--hdfd78af_2' : + 'biocontainers/snpeff:5.1--hdfd78af_2' }" + + input: + tuple val(meta), path(vcf) + val db + tuple val(meta2), path(cache) + + output: + tuple val(meta), path("*.ann.vcf"), emit: vcf + tuple val(meta), path("*.csv"), emit: report + tuple val(meta), path("*.html"), emit: summary_html + tuple val(meta), path("*.genes.txt"), emit: genes_txt + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def avail_mem = 6144 + if (!task.memory) { + log.info '[snpEff] Available memory not known - defaulting to 6GB. Specify process memory requirements to change this.' + } else { + avail_mem = (task.memory.mega*0.8).intValue() + } + def prefix = task.ext.prefix ?: "${meta.id}" + def cache_command = cache ? "-dataDir \${PWD}/${cache}" : "" + """ + snpEff \\ + -Xmx${avail_mem}M \\ + $db \\ + $args \\ + -csvStats ${prefix}.csv \\ + $cache_command \\ + $vcf \\ + > ${prefix}.ann.vcf + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + snpeff: \$(echo \$(snpEff -version 2>&1) | cut -f 2 -d ' ') + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.ann.vcf + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + snpeff: \$(echo \$(snpEff -version 2>&1) | cut -f 2 -d ' ') + END_VERSIONS + """ + +} diff --git a/modules/nf-core/snpeff/snpeff/meta.yml b/modules/nf-core/snpeff/snpeff/meta.yml new file mode 100644 index 0000000..ef3d495 --- /dev/null +++ b/modules/nf-core/snpeff/snpeff/meta.yml @@ -0,0 +1,90 @@ +name: snpeff_snpeff +description: Genetic variant annotation and functional effect prediction toolbox +keywords: + - annotation + - effect prediction + - snpeff + - variant + - vcf +tools: + - snpeff: + description: | + SnpEff is a variant annotation and effect prediction tool. + It annotates and predicts the effects of genetic variants on genes and proteins (such as amino acid changes). + homepage: https://pcingola.github.io/SnpEff/ + documentation: https://pcingola.github.io/SnpEff/se_introduction/ + licence: ["MIT"] + identifier: biotools:snpeff +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - vcf: + type: file + description: | + vcf to annotate + - - db: + type: string + description: | + which db to annotate with + - - meta2: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - cache: + type: file + description: | + path to snpEff cache (optional) +output: + - vcf: + - meta: + type: file + description: | + annotated vcf + pattern: "*.ann.vcf" + - "*.ann.vcf": + type: file + description: | + annotated vcf + pattern: "*.ann.vcf" + - report: + - meta: + type: file + description: snpEff report csv file + pattern: "*.csv" + - "*.csv": + type: file + description: snpEff report csv file + pattern: "*.csv" + - summary_html: + - meta: + type: file + description: snpEff summary statistics in html file + pattern: "*.html" + - "*.html": + type: file + description: snpEff summary statistics in html file + pattern: "*.html" + - genes_txt: + - meta: + type: file + description: txt (tab separated) file having counts of the number of variants + affecting each transcript and gene + pattern: "*.genes.txt" + - "*.genes.txt": + type: file + description: txt (tab separated) file having counts of the number of variants + affecting each transcript and gene + pattern: "*.genes.txt" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@maxulysse" +maintainers: + - "@maxulysse" diff --git a/modules/nf-core/snpeff/snpeff/tests/main.nf.test b/modules/nf-core/snpeff/snpeff/tests/main.nf.test new file mode 100644 index 0000000..2be0b7d --- /dev/null +++ b/modules/nf-core/snpeff/snpeff/tests/main.nf.test @@ -0,0 +1,51 @@ +nextflow_process { + + name "Test Process SNPEFF_SNPEFF" + script "../main.nf" + process "SNPEFF_SNPEFF" + config "./nextflow.config" + tag "modules" + tag "modules_nfcore" + tag "modules_snpeff" + tag "snpeff" + tag "snpeff/download" + tag "snpeff/snpeff" + + test("test_SNPEFF_SNPEFF") { + + setup { + run("SNPEFF_DOWNLOAD") { + script "../../download/main.nf" + process { + """ + input[0] = Channel.of([[id:params.snpeff_db], params.snpeff_db]) + """ + } + } + } + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf', checkIfExists: true) + ]) + input[1] = params.snpeff_db + input[2] = SNPEFF_DOWNLOAD.out.cache + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert path(process.out.report[0][1]).exists() }, + { assert path(process.out.summary_html[0][1]).exists() }, + { assert path(process.out.vcf[0][1]).exists() }, + { assert snapshot(process.out.genes_txt).match("genes_txt") }, + { assert snapshot(process.out.versions).match("versions") } + ) + } + } +} diff --git a/modules/nf-core/snpeff/snpeff/tests/main.nf.test.snap b/modules/nf-core/snpeff/snpeff/tests/main.nf.test.snap new file mode 100644 index 0000000..0891b84 --- /dev/null +++ b/modules/nf-core/snpeff/snpeff/tests/main.nf.test.snap @@ -0,0 +1,31 @@ +{ + "versions": { + "content": [ + [ + "versions.yml:md5,25d44a118d558b331d51ec00be0d997c" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.02.0" + }, + "timestamp": "2024-03-18T17:37:18.879477" + }, + "genes_txt": { + "content": [ + [ + [ + { + "id": "test" + }, + "test.genes.txt:md5,130536bf0237d7f3f746d32aaa32840a" + ] + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.02.0" + }, + "timestamp": "2024-03-18T17:37:18.874822" + } +} \ No newline at end of file diff --git a/modules/nf-core/snpeff/snpeff/tests/nextflow.config b/modules/nf-core/snpeff/snpeff/tests/nextflow.config new file mode 100644 index 0000000..a950a04 --- /dev/null +++ b/modules/nf-core/snpeff/snpeff/tests/nextflow.config @@ -0,0 +1,3 @@ +params { + snpeff_db = "WBcel235.105" +} diff --git a/modules/nf-core/snpeff/snpeff/tests/tags.yml b/modules/nf-core/snpeff/snpeff/tests/tags.yml new file mode 100644 index 0000000..427b588 --- /dev/null +++ b/modules/nf-core/snpeff/snpeff/tests/tags.yml @@ -0,0 +1,2 @@ +snpeff/snpeff: + - "modules/nf-core/snpeff/snpeff/**" diff --git a/modules/nf-core/snpsites/environment.yml b/modules/nf-core/snpsites/environment.yml new file mode 100644 index 0000000..642d9a7 --- /dev/null +++ b/modules/nf-core/snpsites/environment.yml @@ -0,0 +1,5 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::snp-sites=2.5.1 diff --git a/modules/nf-core/snpsites/main.nf b/modules/nf-core/snpsites/main.nf new file mode 100644 index 0000000..c0cc608 --- /dev/null +++ b/modules/nf-core/snpsites/main.nf @@ -0,0 +1,50 @@ +process SNPSITES { + label 'process_medium' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/snp-sites:2.5.1--hed695b0_0' : + 'biocontainers/snp-sites:2.5.1--hed695b0_0' }" + + input: + path alignment + + output: + path "*.fas" , emit: fasta + path "*.sites.txt" , emit: constant_sites + path "versions.yml" , emit: versions + env CONSTANT_SITES, emit: constant_sites_string + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + """ + snp-sites \\ + $alignment \\ + $args \\ + > filtered_alignment.fas + + echo \$(snp-sites -C $alignment) > constant.sites.txt + + CONSTANT_SITES=\$(cat constant.sites.txt) + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + snpsites: \$(snp-sites -V 2>&1 | sed 's/snp-sites //') + END_VERSIONS + """ + stub: + """ + touch filtered_alignment.fas + touch constant.sites.txt + CONSTANT_SITES=\$(cat constant.sites.txt) + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + snpsites: \$(snp-sites -V 2>&1 | sed 's/snp-sites //') + END_VERSIONS + """ + +} diff --git a/modules/nf-core/snpsites/meta.yml b/modules/nf-core/snpsites/meta.yml new file mode 100644 index 0000000..eafac8e --- /dev/null +++ b/modules/nf-core/snpsites/meta.yml @@ -0,0 +1,43 @@ +name: snpsites +description: Rapidly extracts SNPs from a multi-FASTA alignment. +keywords: + - SNPs + - invariant + - constant +tools: + - snpsites: + description: Rapidly extracts SNPs from a multi-FASTA alignment. + homepage: https://www.sanger.ac.uk/tool/snp-sites/ + documentation: https://github.com/sanger-pathogens/snp-sites + licence: ["GPL-3.0-or-later"] + identifier: "" +input: + - - alignment: + type: file + description: fasta alignment file + pattern: "*.{fasta,fas,fa,aln}" +output: + - fasta: + - "*.fas": + type: file + description: Variant fasta file + pattern: "*.{fas}" + - constant_sites: + - "*.sites.txt": + type: file + description: Text file containing counts of constant sites + pattern: "*.{sites.txt}" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" + - constant_sites_string: + - CONSTANT_SITES: + type: integer + description: Value with the number of constant sites + pattern: "*.{sites.txt}" +authors: + - "@avantonder" +maintainers: + - "@avantonder" diff --git a/modules/nf-core/snpsites/tests/main.nf.test b/modules/nf-core/snpsites/tests/main.nf.test new file mode 100644 index 0000000..60ae4b9 --- /dev/null +++ b/modules/nf-core/snpsites/tests/main.nf.test @@ -0,0 +1,49 @@ +nextflow_process { + + name "Test Process SNPSITES" + script "../main.nf" + process "SNPSITES" + + tag "modules" + tag "modules_nfcore" + tag "snpsites" + + test("sarscov2 - all_sites_fas") { + + when { + process { + """ + input[0] = file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/alignment/all_sites.fas', checkIfExists: true) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("sarscov2 - all_sites_fas - stub") { + options "-stub" + when { + process { + """ + input[0] = file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/alignment/all_sites.fas', checkIfExists: true) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + +} diff --git a/modules/nf-core/snpsites/tests/main.nf.test.snap b/modules/nf-core/snpsites/tests/main.nf.test.snap new file mode 100644 index 0000000..71522e3 --- /dev/null +++ b/modules/nf-core/snpsites/tests/main.nf.test.snap @@ -0,0 +1,72 @@ +{ + "sarscov2 - all_sites_fas - stub": { + "content": [ + { + "0": [ + "filtered_alignment.fas:md5,d41d8cd98f00b204e9800998ecf8427e" + ], + "1": [ + "constant.sites.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ], + "2": [ + "versions.yml:md5,af6942a02036a7ff2eadb6ecf344c619" + ], + "3": [ + "" + ], + "constant_sites": [ + "constant.sites.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ], + "constant_sites_string": [ + "" + ], + "fasta": [ + "filtered_alignment.fas:md5,d41d8cd98f00b204e9800998ecf8427e" + ], + "versions": [ + "versions.yml:md5,af6942a02036a7ff2eadb6ecf344c619" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-05-08T15:20:57.589176616" + }, + "sarscov2 - all_sites_fas": { + "content": [ + { + "0": [ + "filtered_alignment.fas:md5,f96c7513003e878e16fa9eac9fcda0f4" + ], + "1": [ + "constant.sites.txt:md5,8b9b226e3787f7baaefce07405af22c9" + ], + "2": [ + "versions.yml:md5,af6942a02036a7ff2eadb6ecf344c619" + ], + "3": [ + "8789,5363,5747,9456" + ], + "constant_sites": [ + "constant.sites.txt:md5,8b9b226e3787f7baaefce07405af22c9" + ], + "constant_sites_string": [ + "8789,5363,5747,9456" + ], + "fasta": [ + "filtered_alignment.fas:md5,f96c7513003e878e16fa9eac9fcda0f4" + ], + "versions": [ + "versions.yml:md5,af6942a02036a7ff2eadb6ecf344c619" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-05-08T15:15:41.760289537" + } +} \ No newline at end of file diff --git a/modules/nf-core/snpsites/tests/tags.yml b/modules/nf-core/snpsites/tests/tags.yml new file mode 100644 index 0000000..d33ff71 --- /dev/null +++ b/modules/nf-core/snpsites/tests/tags.yml @@ -0,0 +1,2 @@ +snpsites: + - "modules/nf-core/snpsites/**" diff --git a/modules/nf-core/tabix/bgzip/environment.yml b/modules/nf-core/tabix/bgzip/environment.yml new file mode 100644 index 0000000..017c259 --- /dev/null +++ b/modules/nf-core/tabix/bgzip/environment.yml @@ -0,0 +1,7 @@ +channels: + - conda-forge + - bioconda + +dependencies: + - bioconda::htslib=1.20 + - bioconda::tabix=1.11 diff --git a/modules/nf-core/tabix/bgzip/main.nf b/modules/nf-core/tabix/bgzip/main.nf new file mode 100644 index 0000000..67991c7 --- /dev/null +++ b/modules/nf-core/tabix/bgzip/main.nf @@ -0,0 +1,55 @@ +process TABIX_BGZIP { + tag "$meta.id" + label 'process_single' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/htslib:1.20--h5efdd21_2' : + 'biocontainers/htslib:1.20--h5efdd21_2' }" + + input: + tuple val(meta), path(input) + + output: + tuple val(meta), path("${output}") , emit: output + tuple val(meta), path("${output}.gzi"), emit: gzi, optional: true + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + prefix = task.ext.prefix ?: "${meta.id}" + in_bgzip = ["gz", "bgz", "bgzf"].contains(input.getExtension()) + extension = in_bgzip ? input.getBaseName().tokenize(".")[-1] : input.getExtension() + output = in_bgzip ? "${prefix}.${extension}" : "${prefix}.${extension}.gz" + command = in_bgzip ? '-d' : '' + // Name the index according to $prefix, unless a name has been requested + if ((args.matches("(^| )-i\\b") || args.matches("(^| )--index(\$| )")) && !args.matches("(^| )-I\\b") && !args.matches("(^| )--index-name\\b")) { + args = args + " -I ${output}.gzi" + } + """ + bgzip $command -c $args -@${task.cpus} $input > ${output} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + tabix: \$(echo \$(tabix -h 2>&1) | sed 's/^.*Version: //; s/ .*\$//') + END_VERSIONS + """ + + stub: + prefix = task.ext.prefix ?: "${meta.id}" + in_bgzip = ["gz", "bgz", "bgzf"].contains(input.getExtension()) + output = in_bgzip ? input.getBaseName() : "${prefix}.${input.getExtension()}.gz" + + """ + echo "" | gzip > ${output} + touch ${output}.gzi + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + tabix: \$(echo \$(tabix -h 2>&1) | sed 's/^.*Version: //; s/ .*\$//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/tabix/bgzip/meta.yml b/modules/nf-core/tabix/bgzip/meta.yml new file mode 100644 index 0000000..131e92c --- /dev/null +++ b/modules/nf-core/tabix/bgzip/meta.yml @@ -0,0 +1,61 @@ +name: tabix_bgzip +description: Compresses/decompresses files +keywords: + - compress + - decompress + - bgzip + - tabix +tools: + - bgzip: + description: | + Bgzip compresses or decompresses files in a similar manner to, and compatible with, gzip. + homepage: https://www.htslib.org/doc/tabix.html + documentation: http://www.htslib.org/doc/bgzip.html + doi: 10.1093/bioinformatics/btp352 + licence: ["MIT"] + identifier: biotools:tabix +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - input: + type: file + description: file to compress or to decompress +output: + - output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${output}: + type: file + description: Output compressed/decompressed file + pattern: "*." + - gzi: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${output}.gzi: + type: file + description: Optional gzip index file for compressed inputs + pattern: "*.gzi" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@joseespinosa" + - "@drpatelh" + - "@maxulysse" + - "@nvnieuwk" +maintainers: + - "@joseespinosa" + - "@drpatelh" + - "@maxulysse" + - "@nvnieuwk" diff --git a/modules/nf-core/tabix/bgzip/tests/bgzip_compress.config b/modules/nf-core/tabix/bgzip/tests/bgzip_compress.config new file mode 100644 index 0000000..6b6ff55 --- /dev/null +++ b/modules/nf-core/tabix/bgzip/tests/bgzip_compress.config @@ -0,0 +1,5 @@ +process { + withName: TABIX_BGZIP { + ext.args = ' -i' + } +} diff --git a/modules/nf-core/tabix/bgzip/tests/main.nf.test b/modules/nf-core/tabix/bgzip/tests/main.nf.test new file mode 100644 index 0000000..d784aa0 --- /dev/null +++ b/modules/nf-core/tabix/bgzip/tests/main.nf.test @@ -0,0 +1,111 @@ +nextflow_process { + + name "Test Process TABIX_BGZIP" + script "modules/nf-core/tabix/bgzip/main.nf" + process "TABIX_BGZIP" + + tag "modules" + tag "modules_nfcore" + tag "tabix" + tag "tabix/bgzip" + + test("sarscov2_vcf_bgzip_compress") { + when { + process { + """ + input[0] = [ + [ id:'bgzip_test' ], + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf', checkIfExists: true) ] + ] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() }, + { assert snapshot( + file(process.out.output[0][1]).name + ).match("bgzip_test") + } + ) + } + } + + test("homo_genome_bedgz_compress") { + when { + process { + """ + input[0] = [ + [ id:'bedgz_test' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.bed.gz', checkIfExists: true) ] + ] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() }, + { assert snapshot( + file(process.out.output[0][1]).name + ).match("bedgz_test") + } + ) + } + } + + test("sarscov2_vcf_bgzip_compress_stub") { + options '-stub' + config "./bgzip_compress.config" + + when { + process { + """ + input[0] = [ + [ id:"test_stub" ], + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf', checkIfExists: true) ] + ] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() }, + { assert snapshot( + file(process.out.output[0][1]).name + ).match("test_stub") + } + ) + } + } + + test("sarscov2_vcf_bgzip_compress_gzi") { + config "./bgzip_compress.config" + when { + process { + """ + input[0] = [ + [ id:"gzi_compress_test" ], + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf', checkIfExists: true) ] + ] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() }, + { assert snapshot( + file(process.out.gzi[0][1]).name + ).match("gzi_compress_test") + } + ) + } + } +} diff --git a/modules/nf-core/tabix/bgzip/tests/main.nf.test.snap b/modules/nf-core/tabix/bgzip/tests/main.nf.test.snap new file mode 100644 index 0000000..0748143 --- /dev/null +++ b/modules/nf-core/tabix/bgzip/tests/main.nf.test.snap @@ -0,0 +1,218 @@ +{ + "gzi_compress_test": { + "content": [ + "gzi_compress_test.vcf.gz.gzi" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-02-19T14:52:29.328146" + }, + "homo_genome_bedgz_compress": { + "content": [ + { + "0": [ + [ + { + "id": "bedgz_test" + }, + "bedgz_test.bed:md5,87a15eb9c2ff20ccd5cd8735a28708f7" + ] + ], + "1": [ + + ], + "2": [ + "versions.yml:md5,753c29916d45debdde52f4ac7c745f61" + ], + "gzi": [ + + ], + "output": [ + [ + { + "id": "bedgz_test" + }, + "bedgz_test.bed:md5,87a15eb9c2ff20ccd5cd8735a28708f7" + ] + ], + "versions": [ + "versions.yml:md5,753c29916d45debdde52f4ac7c745f61" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-19T11:28:34.159992362" + }, + "test_stub": { + "content": [ + "test_stub.vcf.gz" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-02-19T14:52:20.811489" + }, + "sarscov2_vcf_bgzip_compress": { + "content": [ + { + "0": [ + [ + { + "id": "bgzip_test" + }, + "bgzip_test.vcf.gz:md5,8e722884ffb75155212a3fc053918766" + ] + ], + "1": [ + + ], + "2": [ + "versions.yml:md5,753c29916d45debdde52f4ac7c745f61" + ], + "gzi": [ + + ], + "output": [ + [ + { + "id": "bgzip_test" + }, + "bgzip_test.vcf.gz:md5,8e722884ffb75155212a3fc053918766" + ] + ], + "versions": [ + "versions.yml:md5,753c29916d45debdde52f4ac7c745f61" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-19T11:28:22.087769106" + }, + "sarscov2_vcf_bgzip_compress_gzi": { + "content": [ + { + "0": [ + [ + { + "id": "gzi_compress_test" + }, + "gzi_compress_test.vcf.gz:md5,8e722884ffb75155212a3fc053918766" + ] + ], + "1": [ + [ + { + "id": "gzi_compress_test" + }, + "gzi_compress_test.vcf.gz.gzi:md5,26fd00d4e26141cd11561f6e7d4a2ad0" + ] + ], + "2": [ + "versions.yml:md5,753c29916d45debdde52f4ac7c745f61" + ], + "gzi": [ + [ + { + "id": "gzi_compress_test" + }, + "gzi_compress_test.vcf.gz.gzi:md5,26fd00d4e26141cd11561f6e7d4a2ad0" + ] + ], + "output": [ + [ + { + "id": "gzi_compress_test" + }, + "gzi_compress_test.vcf.gz:md5,8e722884ffb75155212a3fc053918766" + ] + ], + "versions": [ + "versions.yml:md5,753c29916d45debdde52f4ac7c745f61" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-19T11:28:57.15091665" + }, + "bgzip_test": { + "content": [ + "bgzip_test.vcf.gz" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-02-19T14:52:03.768295" + }, + "bedgz_test": { + "content": [ + "bedgz_test.bed" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-02-19T14:52:12.453855" + }, + "sarscov2_vcf_bgzip_compress_stub": { + "content": [ + { + "0": [ + [ + { + "id": "test_stub" + }, + "test_stub.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + [ + { + "id": "test_stub" + }, + "test_stub.vcf.gz.gzi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,753c29916d45debdde52f4ac7c745f61" + ], + "gzi": [ + [ + { + "id": "test_stub" + }, + "test_stub.vcf.gz.gzi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "output": [ + [ + { + "id": "test_stub" + }, + "test_stub.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,753c29916d45debdde52f4ac7c745f61" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-19T11:28:45.219404786" + } +} \ No newline at end of file diff --git a/modules/nf-core/tabix/bgzip/tests/tags.yml b/modules/nf-core/tabix/bgzip/tests/tags.yml new file mode 100644 index 0000000..de0eec8 --- /dev/null +++ b/modules/nf-core/tabix/bgzip/tests/tags.yml @@ -0,0 +1,2 @@ +tabix/bgzip: + - "modules/nf-core/tabix/bgzip/**" diff --git a/modules/nf-core/tabix/bgzip/tests/vcf_none.config b/modules/nf-core/tabix/bgzip/tests/vcf_none.config new file mode 100644 index 0000000..f3a3c46 --- /dev/null +++ b/modules/nf-core/tabix/bgzip/tests/vcf_none.config @@ -0,0 +1,5 @@ +process { + withName: TABIX_BGZIP { + ext.args = '' + } +} diff --git a/modules/nf-core/tbprofiler/profile/environment.yml b/modules/nf-core/tbprofiler/profile/environment.yml new file mode 100644 index 0000000..3185d0c --- /dev/null +++ b/modules/nf-core/tbprofiler/profile/environment.yml @@ -0,0 +1,5 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::tb-profiler=3.0.8 diff --git a/modules/nf-core/tbprofiler/profile/main.nf b/modules/nf-core/tbprofiler/profile/main.nf new file mode 100644 index 0000000..4d5f432 --- /dev/null +++ b/modules/nf-core/tbprofiler/profile/main.nf @@ -0,0 +1,41 @@ +process TBPROFILER_PROFILE { + tag "$meta.id" + label 'process_medium' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/tb-profiler:3.0.8--pypyh5e36f6f_0' : + 'biocontainers/tb-profiler:3.0.8--pypyh5e36f6f_0' }" + + input: + tuple val(meta), path(reads) + + output: + tuple val(meta), path("bam/*.bam") , emit: bam + tuple val(meta), path("results/*.csv") , emit: csv, optional: true + tuple val(meta), path("results/*.json"), emit: json + tuple val(meta), path("results/*.txt") , emit: txt, optional: true + tuple val(meta), path("vcf/*.vcf.gz") , emit: vcf + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + prefix = task.ext.prefix ?: "${meta.id}" + def input_reads = meta.single_end ? "--read1 $reads" : "--read1 ${reads[0]} --read2 ${reads[1]}" + """ + tb-profiler \\ + profile \\ + $args \\ + --prefix ${prefix} \\ + --threads $task.cpus \\ + $input_reads + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + tbprofiler: \$( echo \$(tb-profiler --version 2>&1) | sed 's/TBProfiler version //') + END_VERSIONS + """ +} diff --git a/modules/nf-core/tbprofiler/profile/meta.yml b/modules/nf-core/tbprofiler/profile/meta.yml new file mode 100644 index 0000000..98989dd --- /dev/null +++ b/modules/nf-core/tbprofiler/profile/meta.yml @@ -0,0 +1,86 @@ +name: tbprofiler_profile +description: A tool to detect resistance and lineages of M. tuberculosis genomes +keywords: + - Mycobacterium tuberculosis + - resistance + - serotype +tools: + - tbprofiler: + description: Profiling tool for Mycobacterium tuberculosis to detect drug resistance + and lineage from WGS data + homepage: https://github.com/jodyphelan/TBProfiler + documentation: https://jodyphelan.gitbook.io/tb-profiler/ + tool_dev_url: https://github.com/jodyphelan/TBProfiler + doi: "10.1186/s13073-019-0650-x" + licence: ["GPL v3"] + identifier: "" +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - reads: + type: file + description: FASTQ file + pattern: "*.{fastq.gz,fq.gz}" +output: + - bam: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam/*.bam: + type: file + description: BAM file with alignment details + pattern: "*.bam" + - csv: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - results/*.csv: + type: file + description: Optional CSV formated result file of resistance and strain type + pattern: "*.csv" + - json: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - results/*.json: + type: file + description: JSON formated result file of resistance and strain type + pattern: "*.json" + - txt: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - results/*.txt: + type: file + description: Optional text file of resistance and strain type + pattern: "*.txt" + - vcf: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - vcf/*.vcf.gz: + type: file + description: VCF with variant info again refernce genomes + pattern: "*.vcf" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@rpetit3" +maintainers: + - "@rpetit3" diff --git a/modules/nf-core/tbprofiler/profile/tests/main.nf.test b/modules/nf-core/tbprofiler/profile/tests/main.nf.test new file mode 100644 index 0000000..6bd9c8b --- /dev/null +++ b/modules/nf-core/tbprofiler/profile/tests/main.nf.test @@ -0,0 +1,78 @@ + +nextflow_process { + + name "Test Process TBPROFILER_PROFILE" + script "../main.nf" + process "TBPROFILER_PROFILE" + + tag "modules" + tag "modules_nfcore" + tag "tbprofiler" + tag "tbprofiler/profile" + + test("test-tbprofiler-profile-illumina") { + config "./nextflow.illumina.config" + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) + ] + ] + + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + bam(process.out.bam[0][1]).getReadsMD5(), + process.out.csv, + file(process.out.json[0][1]).name, // unstable + process.out.txt, + path(process.out.vcf[0][1]).vcf.summary, + process.out.versions + ).match() + } + ) + } + } + + test("test-tbprofiler-profile-nanopore") { + config "./nextflow.nanopore.config" + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:true ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/nanopore/fastq/test.fastq.gz', checkIfExists: true) + ] + + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + bam(process.out.bam[0][1]).getReadsMD5(), + process.out.csv, + file(process.out.json[0][1]).name, // unstable + process.out.txt, + path(process.out.vcf[0][1]).vcf.summary, + process.out.versions + ).match() + } + ) + } + } + +} diff --git a/modules/nf-core/tbprofiler/profile/tests/main.nf.test.snap b/modules/nf-core/tbprofiler/profile/tests/main.nf.test.snap new file mode 100644 index 0000000..8c59c20 --- /dev/null +++ b/modules/nf-core/tbprofiler/profile/tests/main.nf.test.snap @@ -0,0 +1,44 @@ +{ + "test-tbprofiler-profile-illumina": { + "content": [ + "643637f42d74111b557bded525fecf95", + [ + + ], + "test.results.json", + [ + + ], + "VcfFile [chromosomes=[], sampleCount=1, variantCount=0, phased=true, phasedAutodetect=true]", + [ + "versions.yml:md5,7e204ef6bca3bc02ae72295e980040c2" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-29T13:48:51.627166" + }, + "test-tbprofiler-profile-nanopore": { + "content": [ + "46da99abc50c7fa4a7fbbf853dca9e11", + [ + + ], + "test.results.json", + [ + + ], + "VcfFile [chromosomes=[], sampleCount=1, variantCount=0, phased=true, phasedAutodetect=true]", + [ + "versions.yml:md5,7e204ef6bca3bc02ae72295e980040c2" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-29T13:49:17.330177" + } +} \ No newline at end of file diff --git a/modules/nf-core/tbprofiler/profile/tests/nextflow.illumina.config b/modules/nf-core/tbprofiler/profile/tests/nextflow.illumina.config new file mode 100644 index 0000000..d941b4b --- /dev/null +++ b/modules/nf-core/tbprofiler/profile/tests/nextflow.illumina.config @@ -0,0 +1,5 @@ +process { + withName: TBPROFILER_PROFILE { + ext.args = '--platform illumina' + } +} diff --git a/modules/nf-core/tbprofiler/profile/tests/nextflow.nanopore.config b/modules/nf-core/tbprofiler/profile/tests/nextflow.nanopore.config new file mode 100644 index 0000000..9316e10 --- /dev/null +++ b/modules/nf-core/tbprofiler/profile/tests/nextflow.nanopore.config @@ -0,0 +1,5 @@ +process { + withName: TBPROFILER_PROFILE { + ext.args = '--platform nanopore' + } +} diff --git a/nextflow.config b/nextflow.config index 6c1d3f6..d1453b6 100644 --- a/nextflow.config +++ b/nextflow.config @@ -13,6 +13,9 @@ params { // Input options input = null + // Analysis mode: selects which bundled MTBC pipeline to run + mode = 'mtbseq' + // References genome = null igenomes_base = 's3://ngi-igenomes/igenomes/' @@ -32,12 +35,12 @@ params { email_on_fail = null plaintext_email = false monochrome_logs = false - hook_url = null help = false help_full = false show_hidden = false version = false pipelines_testdata_base_path = 'https://raw.githubusercontent.com/nf-core/test-datasets/' + trace_report_suffix = new java.util.Date().format( 'yyyy-MM-dd_HH-mm-ss') // Config options config_profile_name = null @@ -52,9 +55,21 @@ params { validate_params = true } +// Backwards compatibility for publishDir syntax +outputDir = params.outdir +workflow.output.mode = params.publish_dir_mode + // Load base.config by default for all pipelines includeConfig 'conf/base.config' + + +// Load settings specific to the mode running +includeConfig params.mode == 'mtbseq' ? 'conf/mtbseq_base.config' : 'conf/empty.config' + + + + profiles { debug { dumpHashes = true @@ -92,7 +107,18 @@ profiles { apptainer.enabled = false docker.runOptions = '-u $(id -u):$(id -g)' } - arm { + arm64 { + process.arch = 'arm64' + // TODO https://github.com/nf-core/modules/issues/6694 + // For now if you're using arm64 you have to use wave for the sake of the maintainers + // wave profile + apptainer.ociAutoPull = true + singularity.ociAutoPull = true + wave.enabled = true + wave.freeze = true + wave.strategy = 'conda,container' + } + emulate_amd64 { docker.runOptions = '-u $(id -u):$(id -g) --platform=linux/amd64' } singularity { @@ -149,21 +175,28 @@ profiles { wave.freeze = true wave.strategy = 'conda,container' } - gitpod { - executor.name = 'local' - executor.cpus = 4 - executor.memory = 8.GB + gpu { + docker.runOptions = '-u $(id -u):$(id -g) --gpus all' + apptainer.runOptions = '--nv' + singularity.runOptions = '--nv' } - test { includeConfig 'conf/test.config' } - test_full { includeConfig 'conf/test_full.config' } + test { includeConfig 'conf/test.config' } + test_full { includeConfig 'conf/test_full.config' } + test_mtbseq { includeConfig 'conf/mtbseq_test.config'} + test_mtbseq_parallel {includeConfig 'conf/mtbseq_parallel_test.config'} + } -// Load nf-core custom profiles from different Institutions -includeConfig !System.getenv('NXF_OFFLINE') && params.custom_config_base ? "${params.custom_config_base}/nfcore_custom.config" : "/dev/null" +// Load nf-core custom profiles from different institutions + +// If params.custom_config_base is set AND either the NXF_OFFLINE environment variable is not set or params.custom_config_base is a local path, the nfcore_custom.config file from the specified base path is included. +// Load nf-core/tbanalyzer custom profiles from different institutions. +includeConfig params.custom_config_base && (!System.getenv('NXF_OFFLINE') || !params.custom_config_base.startsWith('http')) ? "${params.custom_config_base}/nfcore_custom.config" : "/dev/null" + // Load nf-core/tbanalyzer custom profiles from different institutions. // TODO nf-core: Optionally, you can add a pipeline-specific nf-core config at https://github.com/nf-core/configs -// includeConfig !System.getenv('NXF_OFFLINE') && params.custom_config_base ? "${params.custom_config_base}/pipeline/tbanalyzer.config" : "/dev/null" +// includeConfig params.custom_config_base && (!System.getenv('NXF_OFFLINE') || !params.custom_config_base.startsWith('http')) ? "${params.custom_config_base}/pipeline/tbanalyzer.config" : "/dev/null" // Set default registry for Apptainer, Docker, Podman, Charliecloud and Singularity independent of -profile // Will not be used unless Apptainer / Docker / Podman / Charliecloud / Singularity are enabled @@ -189,82 +222,64 @@ env { } // Set bash options -process.shell = """\ -bash - -set -e # Exit if a tool returns a non-zero status/exit code -set -u # Treat unset variables and parameters as an error -set -o pipefail # Returns the status of the last command to exit with a non-zero status or zero if all successfully execute -set -C # No clobber - prevent output redirection from overwriting files. -""" +process.shell = [ + "bash", + "-C", // No clobber - prevent output redirection from overwriting files. + "-e", // Exit if a tool returns a non-zero status/exit code + "-u", // Treat unset variables and parameters as an error + "-o", // Returns the status of the last command to exit.. + "pipefail" // ..with a non-zero status or zero if all successfully execute +] // Disable process selector warnings by default. Use debug profile to enable warnings. nextflow.enable.configProcessNamesValidation = false -def trace_timestamp = new java.util.Date().format( 'yyyy-MM-dd_HH-mm-ss') timeline { enabled = true - file = "${params.outdir}/pipeline_info/execution_timeline_${trace_timestamp}.html" + file = "${params.outdir}/pipeline_info/execution_timeline_${params.trace_report_suffix}.html" } report { enabled = true - file = "${params.outdir}/pipeline_info/execution_report_${trace_timestamp}.html" + file = "${params.outdir}/pipeline_info/execution_report_${params.trace_report_suffix}.html" } trace { enabled = true - file = "${params.outdir}/pipeline_info/execution_trace_${trace_timestamp}.txt" + file = "${params.outdir}/pipeline_info/execution_trace_${params.trace_report_suffix}.txt" } dag { enabled = true - file = "${params.outdir}/pipeline_info/pipeline_dag_${trace_timestamp}.html" + file = "${params.outdir}/pipeline_info/pipeline_dag_${params.trace_report_suffix}.html" } manifest { name = 'nf-core/tbanalyzer' - author = """@abhi18av""" + contributors = [ + [ + name: 'Abhinav Sharma', + affiliation: '', + email: '', + github: 'https://github.com/abhi18av', + contribution: ['author'], + orcid: '', + ], + ] homePage = 'https://github.com/nf-core/tbanalyzer' description = """TB-GVAS aims to democratize analysis by providing a comprehensive and user-friendly toolkit for genomic characterization of Mycobacterium tuberculosis (Mtb) pathogens at the species and strain levels""" mainScript = 'main.nf' - nextflowVersion = '!>=24.04.2' + defaultBranch = 'master' + nextflowVersion = '!>=25.10.4' version = '1.0dev' doi = '' } // Nextflow plugins plugins { - id 'nf-schema@2.1.1' // Validation of pipeline parameters and creation of an input channel from a sample sheet + id 'nf-schema@2.5.1' // Validation of pipeline parameters and creation of an input channel from a sample sheet } validation { defaultIgnoreParams = ["genomes"] - help { - enabled = true - command = "nextflow run $manifest.name -profile --input samplesheet.csv --outdir " - fullParameter = "help_full" - showHiddenParameter = "show_hidden" - beforeText = """ --\033[2m----------------------------------------------------\033[0m- - \033[0;32m,--.\033[0;30m/\033[0;32m,-.\033[0m -\033[0;34m ___ __ __ __ ___ \033[0;32m/,-._.--~\'\033[0m -\033[0;34m |\\ | |__ __ / ` / \\ |__) |__ \033[0;33m} {\033[0m -\033[0;34m | \\| | \\__, \\__/ | \\ |___ \033[0;32m\\`-._,-`-,\033[0m - \033[0;32m`._,._,\'\033[0m -\033[0;35m ${manifest.name} ${manifest.version}\033[0m --\033[2m----------------------------------------------------\033[0m- -""" - afterText = """${manifest.doi ? "* The pipeline\n" : ""}${manifest.doi.tokenize(",").collect { " https://doi.org/${it.trim().replace('https://doi.org/','')}"}.join("\n")}${manifest.doi ? "\n" : ""} -* The nf-core framework - https://doi.org/10.1038/s41587-020-0439-x - -* Software dependencies - https://github.com/${manifest.name}/blob/master/CITATIONS.md -""" - } - summary { - beforeText = validation.help.beforeText - afterText = validation.help.afterText - } + monochromeLogs = params.monochrome_logs } - // Load modules.config for DSL2 module specific options includeConfig 'conf/modules.config' diff --git a/nextflow_schema.json b/nextflow_schema.json index ca7abcb..290f36e 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -43,6 +43,31 @@ } } }, + "execution_modes": { + "title": "Execution modes", + "type": "object", + "description": "Select which part of the MTBseq workflow to run.", + "fa_icon": "fas fa-cogs", + "properties": { + "mode": { + "type": "string", + "default": "mtbseq", + "enum": ["mtbseq"], + "description": "Which bundled MTBC analysis pipeline to run.", + "fa_icon": "fas fa-cogs" + }, + "mtbseq_only_qc": { + "type": "boolean", + "description": "Run read QC only and stop before the MTBseq analysis.", + "fa_icon": "fas fa-check-circle" + }, + "mtbseq_parallel": { + "type": "boolean", + "description": "Run the per-sample MTBseq steps as separate parallel processes instead of the single TBfull step.", + "fa_icon": "fas fa-project-diagram" + } + } + }, "reference_genome_options": { "title": "Reference genome options", "type": "object", @@ -74,7 +99,6 @@ }, "igenomes_base": { "type": "string", - "format": "directory-path", "description": "The base path to the igenomes reference files", "fa_icon": "fas fa-ban", "hidden": true, @@ -180,13 +204,6 @@ "fa_icon": "fas fa-palette", "hidden": true }, - "hook_url": { - "type": "string", - "description": "Incoming hook URL for messaging service", - "fa_icon": "fas fa-people-group", - "help_text": "Incoming hook URL for messaging service. Currently, MS Teams and Slack are supported.", - "hidden": true - }, "multiqc_config": { "type": "string", "format": "file-path", @@ -218,6 +235,159 @@ "description": "Base URL or local path to location of pipeline test dataset files", "default": "https://raw.githubusercontent.com/nf-core/test-datasets/", "hidden": true + }, + "trace_report_suffix": { + "type": "string", + "fa_icon": "far calendar", + "description": "Suffix to add to the trace report filename. Default is the date and time in the format yyyy-MM-dd_HH-mm-ss.", + "hidden": true + }, + "help": { + "type": ["boolean", "string"], + "description": "Display the help message." + }, + "help_full": { + "type": "boolean", + "description": "Display the full detailed help message." + }, + "show_hidden": { + "type": "boolean", + "description": "Display hidden parameters in the help message (only works when --help or --help_full are provided)." + } + } + }, + "mtbseq_options": { + "title": "MTBseq options", + "type": "object", + "description": "MTBseq variant-calling and reference settings. These are exposed as parameters so they can be swept via a -params-file for parameter optimization.", + "fa_icon": "fas fa-dna", + "properties": { + "mtbseq_path": { + "type": "string", + "default": "MTBseq", + "description": "Name/path of the MTBseq executable inside the container. Rarely needs changing.", + "fa_icon": "fas fa-terminal", + "hidden": true + }, + "mtbseq_cohort_tsv": { + "type": "string", + "format": "file-path", + "description": "Optional cohort TSV (sample/library per line) for the joint analysis. Derived from the samplesheet when not provided.", + "fa_icon": "fas fa-file-alt" + }, + "mtbseq_snp_vars": { + "type": "boolean", + "description": "Add an additional filter that excludes all variants except SNPs.", + "fa_icon": "fas fa-filter" + }, + "mtbseq_lowfreq_vars": { + "type": "boolean", + "description": "Call low-frequency / subpopulation variants distinct from wild type. Output from this detection mode must not be used for phylogenetic analysis.", + "fa_icon": "fas fa-filter" + }, + "mtbseq_minbqual": { + "type": "integer", + "default": 13, + "minimum": 0, + "description": "Minimum base quality used for the mpileup creation.", + "fa_icon": "fas fa-sliders-h" + }, + "mtbseq_mincovf": { + "type": "integer", + "default": 4, + "minimum": 0, + "description": "Minimum forward read coverage threshold. Alleles with lower forward coverage are not considered.", + "fa_icon": "fas fa-sliders-h" + }, + "mtbseq_project": { + "type": "string", + "default": "mtbseqnf", + "description": "Project/analysis name used by MTBseq to label output files.", + "fa_icon": "fas fa-tag" + }, + "mtbseq_minphred": { + "type": "integer", + "default": 4, + "minimum": 0, + "description": "Minimum number of reads indicating an allele with a phred score of at least 20.", + "fa_icon": "fas fa-sliders-h" + }, + "mtbseq_minfreq": { + "type": "integer", + "default": 75, + "minimum": 0, + "maximum": 100, + "description": "Minimum allele frequency (percentage) for an allele to be called.", + "fa_icon": "fas fa-percent" + }, + "mtbseq_unambig": { + "type": "integer", + "default": 95, + "minimum": 0, + "maximum": 100, + "description": "Minimum percentage of samples with unambiguous information for a position.", + "fa_icon": "fas fa-percent" + }, + "mtbseq_window": { + "type": "integer", + "default": 12, + "minimum": 0, + "description": "Window size in which multiple variants within the same sample cause the positions to be excluded.", + "fa_icon": "fas fa-sliders-h" + }, + "mtbseq_distance": { + "type": "integer", + "default": 12, + "minimum": 0, + "description": "SNP distance used to classify samples into groups via agglomerative clustering.", + "fa_icon": "fas fa-sliders-h" + }, + "mtbseq_mincovr": { + "type": "integer", + "default": 4, + "minimum": 0, + "description": "Minimum reverse read coverage threshold. Alleles with lower reverse coverage are not considered.", + "fa_icon": "fas fa-sliders-h" + }, + "mtbseq_user": { + "type": "string", + "default": "root", + "hidden": true + }, + "mtbseq_ref_and_indexes_path": { + "type": "string", + "format": "directory-path", + "default": "data/mtbseq-references/ref/", + "description": "Directory holding the reference genome and its BWA indexes.", + "fa_icon": "fas fa-folder-open" + }, + "mtbseq_resilist": { + "type": "string", + "format": "file-path", + "default": "data/mtbseq-references/res/MTB_Resistance_Mediating.txt", + "description": "List of known resistance-associated variant positions for resistance prediction.", + "fa_icon": "fas fa-file-alt" + }, + "mtbseq_intregions": { + "type": "string", + "format": "file-path", + "default": "data/mtbseq-references/res/MTB_Extended_Resistance_Mediating.txt", + "description": "List of interesting regions used for annotation of detected variants.", + "fa_icon": "fas fa-file-alt" + }, + "mtbseq_categories": { + "type": "string", + "format": "file-path", + "default": "data/mtbseq-references/cat/MTB_Gene_Categories.txt", + "description": "Gene categories file annotating essential/non-essential genes and repetitive regions (excluded from phylogeny).", + "fa_icon": "fas fa-file-alt" + }, + "mtbseq_basecalib": { + "type": "string", + "format": "file-path", + "default": "data/mtbseq-references/res/MTB_Base_Calibration_List.vcf", + "description": "VCF of known SNPs used for base quality recalibration.", + "fa_icon": "fas fa-file-alt" } } } @@ -226,6 +396,9 @@ { "$ref": "#/$defs/input_output_options" }, + { + "$ref": "#/$defs/execution_modes" + }, { "$ref": "#/$defs/reference_genome_options" }, @@ -234,6 +407,9 @@ }, { "$ref": "#/$defs/generic_options" + }, + { + "$ref": "#/$defs/mtbseq_options" } ] } diff --git a/nf-test.config b/nf-test.config new file mode 100644 index 0000000..f7aaeb4 --- /dev/null +++ b/nf-test.config @@ -0,0 +1,38 @@ +config { + // location for all nf-test tests + testsDir = "." + + // nf-test directory including temporary files for each test + workDir = System.getenv("NFT_WORKDIR") ?: ".nf-test" + + // location of an optional nextflow.config file specific for executing tests + configFile = "tests/nextflow.config" + + // ignore tests coming from the nf-core/modules repo + ignore = [ + 'modules/nf-core/**/tests/*', + 'subworkflows/nf-core/**/tests/*', + ] + + // run all test with defined profile(s) from the main nextflow.config + profile = "test" + + // list of filenames or patterns that should be trigger a full test run + triggers = [ + '.github/actions/nf-test/action.yml', + '.github/workflows/nf-test.yml', + 'assets/schema_input.json', + 'bin/*', + 'conf/test.config', + 'nextflow.config', + 'nextflow_schema.json', + 'nf-test.config', + 'tests/.nftignore', + 'tests/nextflow.config', + ] + + // load the necessary plugins + plugins { + load "nft-utils@0.0.3" + } +} diff --git a/ro-crate-metadata.json b/ro-crate-metadata.json new file mode 100644 index 0000000..3465508 --- /dev/null +++ b/ro-crate-metadata.json @@ -0,0 +1,323 @@ +{ + "@context": [ + "https://w3id.org/ro/crate/1.1/context", + { + "GithubService": "https://w3id.org/ro/terms/test#GithubService", + "JenkinsService": "https://w3id.org/ro/terms/test#JenkinsService", + "PlanemoEngine": "https://w3id.org/ro/terms/test#PlanemoEngine", + "TestDefinition": "https://w3id.org/ro/terms/test#TestDefinition", + "TestInstance": "https://w3id.org/ro/terms/test#TestInstance", + "TestService": "https://w3id.org/ro/terms/test#TestService", + "TestSuite": "https://w3id.org/ro/terms/test#TestSuite", + "TravisService": "https://w3id.org/ro/terms/test#TravisService", + "definition": "https://w3id.org/ro/terms/test#definition", + "engineVersion": "https://w3id.org/ro/terms/test#engineVersion", + "instance": "https://w3id.org/ro/terms/test#instance", + "resource": "https://w3id.org/ro/terms/test#resource", + "runsOn": "https://w3id.org/ro/terms/test#runsOn" + } + ], + "@graph": [ + { + "@id": "./", + "@type": "Dataset", + "creativeWorkStatus": "InProgress", + "datePublished": "2026-06-10T11:31:05+00:00", + "description": "

\n \n \n \"nf-core/tbanalyzer\"\n \n

\n\n[![Open in GitHub Codespaces](https://img.shields.io/badge/Open_In_GitHub_Codespaces-black?labelColor=grey&logo=github)](https://github.com/codespaces/new/nf-core/tbanalyzer)\n[![GitHub Actions CI Status](https://github.com/nf-core/tbanalyzer/actions/workflows/nf-test.yml/badge.svg)](https://github.com/nf-core/tbanalyzer/actions/workflows/nf-test.yml)\n[![GitHub Actions Linting Status](https://github.com/nf-core/tbanalyzer/actions/workflows/linting.yml/badge.svg)](https://github.com/nf-core/tbanalyzer/actions/workflows/linting.yml)[![AWS CI](https://img.shields.io/badge/CI%20tests-full%20size-FF9900?labelColor=000000&logo=Amazon%20AWS)](https://nf-co.re/tbanalyzer/results)[![Cite with Zenodo](http://img.shields.io/badge/DOI-10.5281/zenodo.XXXXXXX-1073c8?labelColor=000000)](https://doi.org/10.5281/zenodo.XXXXXXX)\n[![nf-test](https://img.shields.io/badge/unit_tests-nf--test-337ab7.svg)](https://www.nf-test.com)\n\n[![Nextflow](https://img.shields.io/badge/version-%E2%89%A525.10.4-green?style=flat&logo=nextflow&logoColor=white&color=%230DC09D&link=https%3A%2F%2Fnextflow.io)](https://www.nextflow.io/)\n[![nf-core template version](https://img.shields.io/badge/nf--core_template-4.0.2-green?style=flat&logo=nfcore&logoColor=white&color=%2324B064&link=https%3A%2F%2Fnf-co.re)](https://github.com/nf-core/tools/releases/tag/4.0.2)\n[![run with conda](http://img.shields.io/badge/run%20with-conda-3EB049?labelColor=000000&logo=anaconda)](https://docs.conda.io/en/latest/)\n[![run with docker](https://img.shields.io/badge/run%20with-docker-0db7ed?labelColor=000000&logo=docker)](https://www.docker.com/)\n[![run with singularity](https://img.shields.io/badge/run%20with-singularity-1d355c.svg?labelColor=000000)](https://sylabs.io/docs/)\n[![Launch on Seqera Platform](https://img.shields.io/badge/Launch%20%F0%9F%9A%80-Seqera%20Platform-%234256e7)](https://cloud.seqera.io/launch?pipeline=https://github.com/nf-core/tbanalyzer)\n\n[![Get help on Slack](http://img.shields.io/badge/slack-nf--core%20%23tbanalyzer-4A154B?labelColor=000000&logo=slack)](https://nfcore.slack.com/channels/tbanalyzer)[![Follow on Bluesky](https://img.shields.io/badge/bluesky-%40nf__core-1185fe?labelColor=000000&logo=bluesky)](https://bsky.app/profile/nf-co.re)[![Follow on Mastodon](https://img.shields.io/badge/mastodon-nf__core-6364ff?labelColor=FFFFFF&logo=mastodon)](https://mstdn.science/@nf_core)[![Watch on YouTube](http://img.shields.io/badge/youtube-nf--core-FF0000?labelColor=000000&logo=youtube)](https://www.youtube.com/c/nf-core)\n\n## Introduction\n\n**nf-core/tbanalyzer** is a bioinformatics pipeline that ...\n\n\n\n\n1. Read QC ([`FastQC`](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/))2. Present QC for raw reads ([`MultiQC`](http://multiqc.info/))\n\n## Usage\n\n> [!NOTE]\n> If you are new to Nextflow and nf-core, please refer to [this page](https://nf-co.re/docs/get_started/environment_setup/overview) on how to set-up Nextflow. Make sure to [test your setup](https://nf-co.re/docs/get_started/run-your-first-pipeline) with `-profile test` before running the workflow on actual data.\n\n\n\nNow, you can run the pipeline using:\n\n\n\n```bash\nnextflow run nf-core/tbanalyzer \\\n -profile \\\n --input samplesheet.csv \\\n --outdir \n```\n\n> [!WARNING]\n> Please provide pipeline parameters via the CLI or Nextflow `-params-file` option. Custom config files including those provided by the `-c` Nextflow option can be used to provide any configuration _**except for parameters**_; see [docs](https://nf-co.re/docs/running/run-pipelines#using-parameter-files).\n\nFor more details and further functionality, please refer to the [usage documentation](https://nf-co.re/tbanalyzer/usage) and the [parameter documentation](https://nf-co.re/tbanalyzer/parameters).\n\n## Pipeline output\n\nTo see the results of an example test run with a full size dataset refer to the [results](https://nf-co.re/tbanalyzer/results) tab on the nf-core website pipeline page.\nFor more details about the output files and reports, please refer to the\n[output documentation](https://nf-co.re/tbanalyzer/output).\n\n## Credits\n\nnf-core/tbanalyzer was originally written by @abhi18av.\n\nWe thank the following people for their extensive assistance in the development of this pipeline:\n\n\n\n## Contributions and Support\n\nIf you would like to contribute to this pipeline, please see the [contributing guidelines](docs/CONTRIBUTING.md).\n\nFor further information or help, don't hesitate to get in touch on the [Slack `#tbanalyzer` channel](https://nfcore.slack.com/channels/tbanalyzer) (you can join with [this invite](https://nf-co.re/join/slack)).\n\n## Citations\n\n\n\n\n\n\nAn extensive list of references for the tools used by the pipeline can be found in the [`CITATIONS.md`](CITATIONS.md) file.\n\nYou can cite the `nf-core` publication as follows:\n\n> **The nf-core framework for community-curated bioinformatics pipelines.**\n>\n> Philip Ewels, Alexander Peltzer, Sven Fillinger, Harshil Patel, Johannes Alneberg, Andreas Wilm, Maxime Ulysse Garcia, Paolo Di Tommaso & Sven Nahnsen.\n>\n> _Nat Biotechnol._ 2020 Feb 13. doi: [10.1038/s41587-020-0439-x](https://dx.doi.org/10.1038/s41587-020-0439-x).\n", + "hasPart": [ + { + "@id": "main.nf" + }, + { + "@id": "assets/" + }, + { + "@id": "conf/" + }, + { + "@id": "docs/" + }, + { + "@id": "docs/images/" + }, + { + "@id": "modules/" + }, + { + "@id": "modules/nf-core/" + }, + { + "@id": "workflows/" + }, + { + "@id": "subworkflows/" + }, + { + "@id": "nextflow.config" + }, + { + "@id": "README.md" + }, + { + "@id": "nextflow_schema.json" + }, + { + "@id": "CHANGELOG.md" + }, + { + "@id": "LICENSE" + }, + { + "@id": "CODE_OF_CONDUCT.md" + }, + { + "@id": "CITATIONS.md" + }, + { + "@id": "modules.json" + }, + { + "@id": "docs/usage.md" + }, + { + "@id": "docs/output.md" + }, + { + "@id": ".nf-core.yml" + }, + { + "@id": ".pre-commit-config.yaml" + }, + { + "@id": ".prettierignore" + } + ], + "isBasedOn": "https://github.com/nf-core/tbanalyzer", + "license": "MIT", + "mainEntity": { + "@id": "main.nf" + }, + "mentions": [ + { + "@id": "#bc000875-ee39-4c93-a01d-d60b0f3f12c7" + } + ], + "name": "nf-core/tbanalyzer" + }, + { + "@id": "ro-crate-metadata.json", + "@type": "CreativeWork", + "about": { + "@id": "./" + }, + "conformsTo": [ + { + "@id": "https://w3id.org/ro/crate/1.1" + }, + { + "@id": "https://w3id.org/workflowhub/workflow-ro-crate/1.0" + } + ] + }, + { + "@id": "main.nf", + "@type": [ + "File", + "SoftwareSourceCode", + "ComputationalWorkflow" + ], + "contributor": [ + { + "@id": "#b3a6b00e-5bfd-43ed-93e1-5ffcf2ec7c51" + } + ], + "dateCreated": "", + "dateModified": "2026-06-10T13:31:05Z", + "dct:conformsTo": "https://bioschemas.org/profiles/ComputationalWorkflow/1.0-RELEASE/", + "keywords": [ + "nf-core", + "nextflow", + "mycobacterium-tuberculosis", + "mycobacterium-tuberculosis-complex" + ], + "license": [ + "MIT" + ], + "name": [ + "nf-core/tbanalyzer" + ], + "programmingLanguage": { + "@id": "https://w3id.org/workflowhub/workflow-ro-crate#nextflow" + }, + "sdPublisher": { + "@id": "https://nf-co.re/" + }, + "url": [ + "https://github.com/nf-core/tbanalyzer", + "https://nf-co.re/tbanalyzer/dev/" + ], + "version": [ + "1.0dev" + ] + }, + { + "@id": "https://w3id.org/workflowhub/workflow-ro-crate#nextflow", + "@type": "ComputerLanguage", + "identifier": { + "@id": "https://www.nextflow.io/" + }, + "name": "Nextflow", + "url": { + "@id": "https://www.nextflow.io/" + }, + "version": "!>=25.10.4" + }, + { + "@id": "#bc000875-ee39-4c93-a01d-d60b0f3f12c7", + "@type": "TestSuite", + "instance": [ + { + "@id": "#bcdabf33-820e-4a17-8eaa-02956bff9006" + } + ], + "mainEntity": { + "@id": "main.nf" + }, + "name": "Test suite for nf-core/tbanalyzer" + }, + { + "@id": "#bcdabf33-820e-4a17-8eaa-02956bff9006", + "@type": "TestInstance", + "name": "GitHub Actions workflow for testing nf-core/tbanalyzer", + "resource": "repos/nf-core/tbanalyzer/actions/workflows/nf-test.yml", + "runsOn": { + "@id": "https://w3id.org/ro/terms/test#GithubService" + }, + "url": "https://api.github.com" + }, + { + "@id": "https://w3id.org/ro/terms/test#GithubService", + "@type": "TestService", + "name": "Github Actions", + "url": { + "@id": "https://github.com" + } + }, + { + "@id": "assets/", + "@type": "Dataset", + "description": "Additional files" + }, + { + "@id": "conf/", + "@type": "Dataset", + "description": "Configuration files" + }, + { + "@id": "docs/", + "@type": "Dataset", + "description": "Markdown files for documenting the pipeline" + }, + { + "@id": "docs/images/", + "@type": "Dataset", + "description": "Images for the documentation files" + }, + { + "@id": "modules/", + "@type": "Dataset", + "description": "Modules used by the pipeline" + }, + { + "@id": "modules/nf-core/", + "@type": "Dataset", + "description": "nf-core modules" + }, + { + "@id": "workflows/", + "@type": "Dataset", + "description": "Main pipeline workflows to be executed in main.nf" + }, + { + "@id": "subworkflows/", + "@type": "Dataset", + "description": "Smaller subworkflows" + }, + { + "@id": "nextflow.config", + "@type": "File", + "description": "Main Nextflow configuration file" + }, + { + "@id": "README.md", + "@type": "File", + "description": "Basic pipeline usage information" + }, + { + "@id": "nextflow_schema.json", + "@type": "File", + "description": "JSON schema for pipeline parameter specification" + }, + { + "@id": "CHANGELOG.md", + "@type": "File", + "description": "Information on changes made to the pipeline" + }, + { + "@id": "LICENSE", + "@type": "File", + "description": "The license - should be MIT" + }, + { + "@id": "CODE_OF_CONDUCT.md", + "@type": "File", + "description": "The nf-core code of conduct" + }, + { + "@id": "CITATIONS.md", + "@type": "File", + "description": "Citations needed when using the pipeline" + }, + { + "@id": "modules.json", + "@type": "File", + "description": "Version information for modules from nf-core/modules" + }, + { + "@id": "docs/usage.md", + "@type": "File", + "description": "Usage documentation" + }, + { + "@id": "docs/output.md", + "@type": "File", + "description": "Output documentation" + }, + { + "@id": ".nf-core.yml", + "@type": "File", + "description": "nf-core configuration file, configuring template features and linting rules" + }, + { + "@id": ".pre-commit-config.yaml", + "@type": "File", + "description": "Configuration file for pre-commit hooks" + }, + { + "@id": ".prettierignore", + "@type": "File", + "description": "Ignore file for prettier" + }, + { + "@id": "https://nf-co.re/", + "@type": "Organization", + "name": "nf-core", + "url": "https://nf-co.re/" + }, + { + "@id": "#b3a6b00e-5bfd-43ed-93e1-5ffcf2ec7c51", + "@type": "Person", + "name": "@abhi18av" + } + ] +} \ No newline at end of file diff --git a/subworkflows/local/mtbseq/main.nf b/subworkflows/local/mtbseq/main.nf new file mode 100644 index 0000000..9b533b4 --- /dev/null +++ b/subworkflows/local/mtbseq/main.nf @@ -0,0 +1,108 @@ +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + IMPORT MODULES / SUBWORKFLOWS / FUNCTIONS +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +*/ + +include { QUALITY_CHECK } from './quality_check' +include { PARALLEL_MODE } from './parallel_mode' + +include { TBFULL } from '../../../modules/local/mtbseq/tbfull/main' +include { TBJOIN } from '../../../modules/local/mtbseq/tbjoin/main' +include { TBAMEND } from '../../../modules/local/mtbseq/tbamend/main' +include { TBGROUPS } from '../../../modules/local/mtbseq/tbgroups/main' + +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + RUN MTBSEQ ANALYSIS +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +*/ + +// +// Self-contained MTBseq analysis core: QC + (serial or parallel) MTBseq workflow. +// Emits MultiQC-ready files and software versions so that the calling pipeline +// (the nf-core/tbanalyzer meta-pipeline) owns the MultiQC / reporting steps. +// +workflow MTBSEQ { + + take: + ch_samplesheet // channel: samplesheet read in from --input + + main: + + ch_versions = Channel.empty() + ch_multiqc_files = Channel.empty() + + ch_reference_files = Channel.value([params.mtbseq_resilist, + params.mtbseq_intregions, + params.mtbseq_categories, + params.mtbseq_basecalib]) + + QUALITY_CHECK(ch_samplesheet) + + ch_multiqc_files = ch_multiqc_files.mix(QUALITY_CHECK.out.multiqc_files) + + if(!params.mtbseq_only_qc) { + + if( params.mtbseq_parallel ) { + + ch_reads = QUALITY_CHECK.out.reads_and_meta_ch + + ch_reads.dump(tag: 'ch_reads') + + PARALLEL_MODE(ch_reads, + QUALITY_CHECK.out.derived_cohort_tsv, + ch_reference_files) + + ch_versions = ch_versions.mix(PARALLEL_MODE.out.versions) + ch_multiqc_files = ch_multiqc_files.mix(PARALLEL_MODE.out.multiqc_files) + + } else { + + //NOTE: Defaults to the normal analysis as implemented in MTBseq + + ch_reads = QUALITY_CHECK.out.reads_ch.collect() + + ch_reads.dump(tag: 'ch_reads') + + TBFULL( ch_reads, + params.mtbseq_user, + ch_reference_files ) + + // COHORT STEPS + + TBJOIN( TBFULL.out.position_variants.collect(sort:true), + TBFULL.out.position_tables.collect(sort:true), + QUALITY_CHECK.out.derived_cohort_tsv, + params.mtbseq_user, + ch_reference_files) + + TBAMEND(TBJOIN.out.joint_samples, + QUALITY_CHECK.out.derived_cohort_tsv, + params.mtbseq_user, + ch_reference_files) + + TBGROUPS(TBAMEND.out.samples_amended, + QUALITY_CHECK.out.derived_cohort_tsv, + params.mtbseq_user, + ch_reference_files) + + ch_versions = ch_versions.mix(TBFULL.out.versions) + ch_multiqc_files = ch_multiqc_files.mix(TBFULL.out.classification) + .mix(TBFULL.out.statistics) + .mix(TBGROUPS.out.distance_matrix.first()) + .mix(TBGROUPS.out.groups.first()) + + } + } + + emit: + multiqc_files = ch_multiqc_files // channel: [ files for MultiQC ] + versions = ch_versions // channel: [ path(versions.yml) ] +} + +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + THE END +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +*/ diff --git a/subworkflows/local/mtbseq/parallel_mode.nf b/subworkflows/local/mtbseq/parallel_mode.nf new file mode 100644 index 0000000..0b36a39 --- /dev/null +++ b/subworkflows/local/mtbseq/parallel_mode.nf @@ -0,0 +1,70 @@ +include { TBBWA } from '../../../modules/local/mtbseq/tbbwa/main' +include { TBREFINE } from '../../../modules/local/mtbseq/tbrefine/main' +include { TBPILE } from '../../../modules/local/mtbseq/tbpile/main' +include { TBLIST } from '../../../modules/local/mtbseq/tblist/main' +include { TBVARIANTS } from '../../../modules/local/mtbseq/tbvariants/main' +include { TBSTATS } from '../../../modules/local/mtbseq/tbstats/main' +include { TBSTRAINS } from '../../../modules/local/mtbseq/tbstrains/main' +include { TBJOIN } from '../../../modules/local/mtbseq/tbjoin/main' +include { TBAMEND } from '../../../modules/local/mtbseq/tbamend/main' +include { TBGROUPS } from '../../../modules/local/mtbseq/tbgroups/main' + + + +workflow PARALLEL_MODE { + take: + reads_ch + derived_cohort_tsv + references_ch + + main: + + ch_versions = Channel.empty() + ch_multiqc_files = Channel.empty() + + TBBWA(reads_ch, params.mtbseq_user, references_ch) + TBREFINE(TBBWA.out.bam_tuple, params.mtbseq_user, references_ch) + TBPILE(TBREFINE.out.gatk_bam, params.mtbseq_user, references_ch) + TBLIST(TBPILE.out.mpileup, params.mtbseq_user, references_ch) + TBVARIANTS(TBLIST.out.position_table_tuple, params.mtbseq_user, references_ch) + + // NOTE: These are part of per-sample-analysis but they need the output from + // all other processes to compute the metrics for the cohort. + TBSTATS(TBBWA.out.bam.collect(), + TBLIST.out.position_table.collect(), + params.mtbseq_user, + references_ch) + + TBSTRAINS(TBLIST.out.position_table.collect(), + params.mtbseq_user, + references_ch) + + // COHORT STEPS + + + TBJOIN(TBVARIANTS.out.tbjoin_input.collect(sort:true), + TBLIST.out.position_table.collect(sort:true), + derived_cohort_tsv, + params.mtbseq_user, + references_ch) + + TBAMEND(TBJOIN.out.joint_samples, + derived_cohort_tsv, + params.mtbseq_user, + references_ch) + + TBGROUPS(TBAMEND.out.samples_amended, + derived_cohort_tsv, + params.mtbseq_user, + references_ch) + + ch_versions = ch_versions.mix(TBGROUPS.out.versions.first()) + ch_multiqc_files = ch_multiqc_files.mix(TBSTRAINS.out.classification) + .mix(TBSTATS.out.statistics) + .mix(TBGROUPS.out.distance_matrix.first()) + .mix(TBGROUPS.out.groups.first()) + + emit: + versions = ch_versions + multiqc_files = ch_multiqc_files.collect() +} diff --git a/subworkflows/local/mtbseq/quality_check.nf b/subworkflows/local/mtbseq/quality_check.nf new file mode 100644 index 0000000..59f76a2 --- /dev/null +++ b/subworkflows/local/mtbseq/quality_check.nf @@ -0,0 +1,39 @@ +include { FASTQC } from '../../../modules/nf-core/fastqc/main' +include { RENAME_FILES } from '../../../modules/local/utils/rename_files/main.nf' + + + +workflow QUALITY_CHECK { + take: + ch_samplesheet + + main: + + samples_tsv_file = Channel.empty() + + RENAME_FILES (ch_samplesheet) + + FASTQC (RENAME_FILES.out.meta_and_files) + + + if (!params.mtbseq_cohort_tsv) { + + samples_tsv_file = ch_samplesheet + .map {it -> it[0].id+"\t"+it[0].library} + .collectFile(name: "derived_cohort.tsv", newLine: true, sort: true, storeDir: "${params.outdir}/misc", cache: true) + + + } else { + samples_tsv_file = Channel.fromPath( params.mtbseq_cohort_tsv ) + } + + + emit: + reads_and_meta_ch = RENAME_FILES.out.meta_and_files + reads_ch = RENAME_FILES.out.files + multiqc_files = FASTQC.out.zip.collect{it[1]} + derived_cohort_tsv = samples_tsv_file + // NOTE: software versions are emitted via the `versions` topic (nf-core 4.x), + // collected centrally in the MTBSEQ_NF workflow. + +} diff --git a/subworkflows/local/utils_nfcore_tbanalyzer_pipeline/magma/magma.nf b/subworkflows/local/utils_nfcore_tbanalyzer_pipeline/magma/magma.nf new file mode 100644 index 0000000..e69de29 diff --git a/subworkflows/local/utils_nfcore_tbanalyzer_pipeline/main.nf b/subworkflows/local/utils_nfcore_tbanalyzer_pipeline/main.nf index 26cec21..ed5ba44 100644 --- a/subworkflows/local/utils_nfcore_tbanalyzer_pipeline/main.nf +++ b/subworkflows/local/utils_nfcore_tbanalyzer_pipeline/main.nf @@ -11,9 +11,9 @@ include { UTILS_NFSCHEMA_PLUGIN } from '../../nf-core/utils_nfschema_plugin' include { paramsSummaryMap } from 'plugin/nf-schema' include { samplesheetToList } from 'plugin/nf-schema' +include { paramsHelp } from 'plugin/nf-schema' include { completionEmail } from '../../nf-core/utils_nfcore_pipeline' include { completionSummary } from '../../nf-core/utils_nfcore_pipeline' -include { imNotification } from '../../nf-core/utils_nfcore_pipeline' include { UTILS_NFCORE_PIPELINE } from '../../nf-core/utils_nfcore_pipeline' include { UTILS_NEXTFLOW_PIPELINE } from '../../nf-core/utils_nextflow_pipeline' @@ -32,10 +32,13 @@ workflow PIPELINE_INITIALISATION { nextflow_cli_args // array: List of positional nextflow CLI args outdir // string: The output directory where the results will be saved input // string: Path to input samplesheet + help // boolean: Display help message and exit + help_full // boolean: Show the full help message + show_hidden // boolean: Show hidden parameters in the help message main: - ch_versions = Channel.empty() + ch_versions = channel.empty() // // Print version and exit if required and dump pipeline parameters to JSON file @@ -50,10 +53,42 @@ workflow PIPELINE_INITIALISATION { // // Validate parameters and generate parameter summary to stdout // + + def before_text = "" + def after_text = "" + before_text = """ +-\033[2m----------------------------------------------------\033[0m- + \033[0;32m,--.\033[0;30m/\033[0;32m,-.\033[0m +\033[0;34m ___ __ __ __ ___ \033[0;32m/,-._.--~\'\033[0m +\033[0;34m |\\ | |__ __ / ` / \\ |__) |__ \033[0;33m} {\033[0m +\033[0;34m | \\| | \\__, \\__/ | \\ |___ \033[0;32m\\`-._,-`-,\033[0m + \033[0;32m`._,._,\'\033[0m +\033[0;35m nf-core/tbanalyzer ${workflow.manifest.version}\033[0m +-\033[2m----------------------------------------------------\033[0m- +""" + after_text = """${workflow.manifest.doi ? "\n* The pipeline\n" : ""}${workflow.manifest.doi.tokenize(",").collect { doi -> " https://doi.org/${doi.trim().replace('https://doi.org/','')}"}.join("\n")}${workflow.manifest.doi ? "\n" : ""} +* The nf-core framework + https://doi.org/10.1038/s41587-020-0439-x + +* Software dependencies + https://github.com/nf-core/tbanalyzer/blob/master/CITATIONS.md +""" + if (monochrome_logs) { + before_text = before_text.replaceAll(/\033\[[0-9;]*m/, '') + } + + command = "nextflow run ${workflow.manifest.name} -profile --input samplesheet.csv --outdir " + UTILS_NFSCHEMA_PLUGIN ( workflow, validate_params, - null + null, + help, + help_full, + show_hidden, + before_text, + after_text, + command ) // @@ -72,8 +107,8 @@ workflow PIPELINE_INITIALISATION { // Create channel from input file provided through params.input // - Channel - .fromList(samplesheetToList(params.input, "${projectDir}/assets/schema_input.json")) + channel + .fromList(samplesheetToList(input, "${projectDir}/assets/schema_input.json")) .map { meta, fastq_1, fastq_2 -> if (!fastq_2) { @@ -111,11 +146,11 @@ workflow PIPELINE_COMPLETION { plaintext_email // boolean: Send plain-text email instead of HTML outdir // path: Path to output directory where results will be published monochrome_logs // boolean: Disable ANSI colour codes in log output - hook_url // string: hook URL for notifications multiqc_report // string: Path to MultiQC report main: summary_params = paramsSummaryMap(workflow, parameters_schema: "nextflow_schema.json") + def multiqc_reports = multiqc_report.toList() // // Completion email and summary @@ -129,18 +164,16 @@ workflow PIPELINE_COMPLETION { plaintext_email, outdir, monochrome_logs, - multiqc_report.toList() + multiqc_reports.getVal(), ) } completionSummary(monochrome_logs) - if (hook_url) { - imNotification(summary_params, hook_url) - } + } workflow.onError { - log.error "Pipeline failed. Please refer to troubleshooting docs: https://nf-co.re/docs/usage/troubleshooting" + log.error "Pipeline failed. Please refer to troubleshooting docs for common issues: https://nf-co.re/docs/running/troubleshooting" } } @@ -225,7 +258,7 @@ def toolBibliographyText() { } def methodsDescriptionText(mqc_methods_yaml) { - // Convert to a named map so can be used as with familar NXF ${workflow} variable syntax in the MultiQC YML file + // Convert to a named map so can be used as with familiar NXF ${workflow} variable syntax in the MultiQC YML file def meta = [:] meta.workflow = workflow.toMap() meta["manifest_map"] = workflow.manifest.toMap() @@ -260,4 +293,3 @@ def methodsDescriptionText(mqc_methods_yaml) { return description_html.toString() } - diff --git a/subworkflows/nf-core/utils_nextflow_pipeline/main.nf b/subworkflows/nf-core/utils_nextflow_pipeline/main.nf index 0fcbf7b..d6e593e 100644 --- a/subworkflows/nf-core/utils_nextflow_pipeline/main.nf +++ b/subworkflows/nf-core/utils_nextflow_pipeline/main.nf @@ -92,10 +92,12 @@ def checkCondaChannels() { channels = config.channels } catch (NullPointerException e) { + log.debug(e) log.warn("Could not verify conda channel configuration.") return null } catch (IOException e) { + log.debug(e) log.warn("Could not verify conda channel configuration.") return null } diff --git a/subworkflows/nf-core/utils_nextflow_pipeline/tests/main.workflow.nf.test b/subworkflows/nf-core/utils_nextflow_pipeline/tests/main.workflow.nf.test index ca964ce..02dbf09 100644 --- a/subworkflows/nf-core/utils_nextflow_pipeline/tests/main.workflow.nf.test +++ b/subworkflows/nf-core/utils_nextflow_pipeline/tests/main.workflow.nf.test @@ -52,10 +52,12 @@ nextflow_workflow { } then { - assertAll( - { assert workflow.success }, - { assert workflow.stdout.contains("nextflow_workflow v9.9.9") } - ) + expect { + with(workflow) { + assert success + assert "nextflow_workflow v9.9.9" in stdout + } + } } } diff --git a/subworkflows/nf-core/utils_nextflow_pipeline/tests/tags.yml b/subworkflows/nf-core/utils_nextflow_pipeline/tests/tags.yml deleted file mode 100644 index f847611..0000000 --- a/subworkflows/nf-core/utils_nextflow_pipeline/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -subworkflows/utils_nextflow_pipeline: - - subworkflows/nf-core/utils_nextflow_pipeline/** diff --git a/subworkflows/nf-core/utils_nfcore_pipeline/main.nf b/subworkflows/nf-core/utils_nfcore_pipeline/main.nf index 5cb7baf..afca543 100644 --- a/subworkflows/nf-core/utils_nfcore_pipeline/main.nf +++ b/subworkflows/nf-core/utils_nfcore_pipeline/main.nf @@ -17,7 +17,7 @@ workflow UTILS_NFCORE_PIPELINE { checkProfileProvided(nextflow_cli_args) emit: - valid_config + valid_config = valid_config } /* @@ -56,21 +56,6 @@ def checkProfileProvided(nextflow_cli_args) { } } -// -// Citation string for pipeline -// -def workflowCitation() { - def temp_doi_ref = "" - def manifest_doi = workflow.manifest.doi.tokenize(",") - // Handling multiple DOIs - // Removing `https://doi.org/` to handle pipelines using DOIs vs DOI resolvers - // Removing ` ` since the manifest.doi is a string and not a proper list - manifest_doi.each { doi_ref -> - temp_doi_ref += " https://doi.org/${doi_ref.replace('https://doi.org/', '').replace(' ', '')}\n" - } - return "If you use ${workflow.manifest.name} for your analysis please cite:\n\n" + "* The pipeline\n" + temp_doi_ref + "\n" + "* The nf-core framework\n" + " https://doi.org/10.1038/s41587-020-0439-x\n\n" + "* Software dependencies\n" + " https://github.com/${workflow.manifest.name}/blob/master/CITATIONS.md" -} - // // Generate workflow version string // @@ -113,7 +98,7 @@ def workflowVersionToYAML() { // Get channel of software versions used in pipeline in YAML format // def softwareVersionsToYAML(ch_versions) { - return ch_versions.unique().map { version -> processVersionsFromYAML(version) }.unique().mix(Channel.of(workflowVersionToYAML())) + return ch_versions.unique().map { version -> processVersionsFromYAML(version) }.unique().mix(channel.of(workflowVersionToYAML())) } // @@ -150,33 +135,6 @@ def paramsSummaryMultiqc(summary_params) { return yaml_file_text } -// -// nf-core logo -// -def nfCoreLogo(monochrome_logs=true) { - def colors = logColours(monochrome_logs) as Map - String.format( - """\n - ${dashedLine(monochrome_logs)} - ${colors.green},--.${colors.black}/${colors.green},-.${colors.reset} - ${colors.blue} ___ __ __ __ ___ ${colors.green}/,-._.--~\'${colors.reset} - ${colors.blue} |\\ | |__ __ / ` / \\ |__) |__ ${colors.yellow}} {${colors.reset} - ${colors.blue} | \\| | \\__, \\__/ | \\ |___ ${colors.green}\\`-._,-`-,${colors.reset} - ${colors.green}`._,._,\'${colors.reset} - ${colors.purple} ${workflow.manifest.name} ${getWorkflowVersion()}${colors.reset} - ${dashedLine(monochrome_logs)} - """.stripIndent() - ) -} - -// -// Return dashed line -// -def dashedLine(monochrome_logs=true) { - def colors = logColours(monochrome_logs) as Map - return "-${colors.dim}----------------------------------------------------${colors.reset}-" -} - // // ANSII colours used for terminal logging // @@ -245,28 +203,24 @@ def logColours(monochrome_logs=true) { return colorcodes } -// -// Attach the multiqc report to email -// -def attachMultiqcReport(multiqc_report) { - def mqc_report = null - try { - if (workflow.success) { - mqc_report = multiqc_report.getVal() - if (mqc_report.getClass() == ArrayList && mqc_report.size() >= 1) { - if (mqc_report.size() > 1) { - log.warn("[${workflow.manifest.name}] Found multiple reports from process 'MULTIQC', will use only one") - } - mqc_report = mqc_report[0] - } +// Return a single report from an object that may be a Path or List +// +def getSingleReport(multiqc_reports) { + if (multiqc_reports instanceof Path) { + return multiqc_reports + } else if (multiqc_reports instanceof List) { + if (multiqc_reports.size() == 0) { + log.warn("[${workflow.manifest.name}] No reports found from process 'MULTIQC'") + return null + } else if (multiqc_reports.size() == 1) { + return multiqc_reports.first() + } else { + log.warn("[${workflow.manifest.name}] Found multiple reports from process 'MULTIQC', will use only one") + return multiqc_reports.first() } + } else { + return null } - catch (Exception all) { - if (multiqc_report) { - log.warn("[${workflow.manifest.name}] Could not attach MultiQC report to summary email") - } - } - return mqc_report } // @@ -320,7 +274,7 @@ def completionEmail(summary_params, email, email_on_fail, plaintext_email, outdi email_fields['summary'] = summary << misc_fields // On success try attach the multiqc report - def mqc_report = attachMultiqcReport(multiqc_report) + def mqc_report = getSingleReport(multiqc_report) // Check if we are only sending emails on failure def email_address = email @@ -340,7 +294,7 @@ def completionEmail(summary_params, email, email_on_fail, plaintext_email, outdi def email_html = html_template.toString() // Render the sendmail template - def max_multiqc_email_size = (params.containsKey('max_multiqc_email_size') ? params.max_multiqc_email_size : 0) as nextflow.util.MemoryUnit + def max_multiqc_email_size = (params.containsKey('max_multiqc_email_size') ? params.max_multiqc_email_size : 0) as MemoryUnit def smail_fields = [email: email_address, subject: subject, email_txt: email_txt, email_html: email_html, projectDir: "${workflow.projectDir}", mqcFile: mqc_report, mqcMaxSize: max_multiqc_email_size.toBytes()] def sf = new File("${workflow.projectDir}/assets/sendmail_template.txt") def sendmail_template = engine.createTemplate(sf).make(smail_fields) @@ -351,14 +305,17 @@ def completionEmail(summary_params, email, email_on_fail, plaintext_email, outdi if (email_address) { try { if (plaintext_email) { -new org.codehaus.groovy.GroovyException('Send plaintext e-mail, not HTML') } + new org.codehaus.groovy.GroovyException('Send plaintext e-mail, not HTML') + } // Try to send HTML e-mail using sendmail def sendmail_tf = new File(workflow.launchDir.toString(), ".sendmail_tmp.html") sendmail_tf.withWriter { w -> w << sendmail_html } ['sendmail', '-t'].execute() << sendmail_html log.info("-${colors.purple}[${workflow.manifest.name}]${colors.green} Sent summary e-mail to ${email_address} (sendmail)-") } - catch (Exception all) { + catch (Exception msg) { + log.debug(msg.toString()) + log.debug("Trying with mail instead of sendmail") // Catch failures and try with plaintext def mail_cmd = ['mail', '-s', subject, '--content-type=text/html', email_address] mail_cmd.execute() << email_html @@ -396,67 +353,3 @@ def completionSummary(monochrome_logs=true) { log.info("-${colors.purple}[${workflow.manifest.name}]${colors.red} Pipeline completed with errors${colors.reset}-") } } - -// -// Construct and send a notification to a web server as JSON e.g. Microsoft Teams and Slack -// -def imNotification(summary_params, hook_url) { - def summary = [:] - summary_params - .keySet() - .sort() - .each { group -> - summary << summary_params[group] - } - - def misc_fields = [:] - misc_fields['start'] = workflow.start - misc_fields['complete'] = workflow.complete - misc_fields['scriptfile'] = workflow.scriptFile - misc_fields['scriptid'] = workflow.scriptId - if (workflow.repository) { - misc_fields['repository'] = workflow.repository - } - if (workflow.commitId) { - misc_fields['commitid'] = workflow.commitId - } - if (workflow.revision) { - misc_fields['revision'] = workflow.revision - } - misc_fields['nxf_version'] = workflow.nextflow.version - misc_fields['nxf_build'] = workflow.nextflow.build - misc_fields['nxf_timestamp'] = workflow.nextflow.timestamp - - def msg_fields = [:] - msg_fields['version'] = getWorkflowVersion() - msg_fields['runName'] = workflow.runName - msg_fields['success'] = workflow.success - msg_fields['dateComplete'] = workflow.complete - msg_fields['duration'] = workflow.duration - msg_fields['exitStatus'] = workflow.exitStatus - msg_fields['errorMessage'] = (workflow.errorMessage ?: 'None') - msg_fields['errorReport'] = (workflow.errorReport ?: 'None') - msg_fields['commandLine'] = workflow.commandLine.replaceFirst(/ +--hook_url +[^ ]+/, "") - msg_fields['projectDir'] = workflow.projectDir - msg_fields['summary'] = summary << misc_fields - - // Render the JSON template - def engine = new groovy.text.GStringTemplateEngine() - // Different JSON depending on the service provider - // Defaults to "Adaptive Cards" (https://adaptivecards.io), except Slack which has its own format - def json_path = hook_url.contains("hooks.slack.com") ? "slackreport.json" : "adaptivecard.json" - def hf = new File("${workflow.projectDir}/assets/${json_path}") - def json_template = engine.createTemplate(hf).make(msg_fields) - def json_message = json_template.toString() - - // POST - def post = new URL(hook_url).openConnection() - post.setRequestMethod("POST") - post.setDoOutput(true) - post.setRequestProperty("Content-Type", "application/json") - post.getOutputStream().write(json_message.getBytes("UTF-8")) - def postRC = post.getResponseCode() - if (!postRC.equals(200)) { - log.warn(post.getErrorStream().getText()) - } -} diff --git a/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.function.nf.test b/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.function.nf.test index 1dc317f..f117040 100644 --- a/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.function.nf.test +++ b/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.function.nf.test @@ -41,26 +41,14 @@ nextflow_function { } } - test("Test Function workflowCitation") { - - function "workflowCitation" - - then { - assertAll( - { assert function.success }, - { assert snapshot(function.result).match() } - ) - } - } - - test("Test Function nfCoreLogo") { + test("Test Function without logColours") { - function "nfCoreLogo" + function "logColours" when { function { """ - input[0] = false + input[0] = true """ } } @@ -73,9 +61,8 @@ nextflow_function { } } - test("Test Function dashedLine") { - - function "dashedLine" + test("Test Function with logColours") { + function "logColours" when { function { @@ -93,14 +80,13 @@ nextflow_function { } } - test("Test Function without logColours") { - - function "logColours" + test("Test Function getSingleReport with a single file") { + function "getSingleReport" when { function { """ - input[0] = true + input[0] = file(params.modules_testdata_base_path + '/generic/tsv/test.tsv', checkIfExists: true) """ } } @@ -108,18 +94,22 @@ nextflow_function { then { assertAll( { assert function.success }, - { assert snapshot(function.result).match() } + { assert function.result.contains("test.tsv") } ) } } - test("Test Function with logColours") { - function "logColours" + test("Test Function getSingleReport with multiple files") { + function "getSingleReport" when { function { """ - input[0] = false + input[0] = [ + file(params.modules_testdata_base_path + '/generic/tsv/test.tsv', checkIfExists: true), + file(params.modules_testdata_base_path + '/generic/tsv/network.tsv', checkIfExists: true), + file(params.modules_testdata_base_path + '/generic/tsv/expression.tsv', checkIfExists: true) + ] """ } } @@ -127,7 +117,9 @@ nextflow_function { then { assertAll( { assert function.success }, - { assert snapshot(function.result).match() } + { assert function.result.contains("test.tsv") }, + { assert !function.result.contains("network.tsv") }, + { assert !function.result.contains("expression.tsv") } ) } } diff --git a/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.function.nf.test.snap b/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.function.nf.test.snap index 1037232..02c6701 100644 --- a/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.function.nf.test.snap +++ b/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.function.nf.test.snap @@ -17,26 +17,6 @@ }, "timestamp": "2024-02-28T12:02:59.729647" }, - "Test Function nfCoreLogo": { - "content": [ - "\n\n-\u001b[2m----------------------------------------------------\u001b[0m-\n \u001b[0;32m,--.\u001b[0;30m/\u001b[0;32m,-.\u001b[0m\n\u001b[0;34m ___ __ __ __ ___ \u001b[0;32m/,-._.--~'\u001b[0m\n\u001b[0;34m |\\ | |__ __ / ` / \\ |__) |__ \u001b[0;33m} {\u001b[0m\n\u001b[0;34m | \\| | \\__, \\__/ | \\ |___ \u001b[0;32m\\`-._,-`-,\u001b[0m\n \u001b[0;32m`._,._,'\u001b[0m\n\u001b[0;35m nextflow_workflow v9.9.9\u001b[0m\n-\u001b[2m----------------------------------------------------\u001b[0m-\n" - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-02-28T12:03:10.562934" - }, - "Test Function workflowCitation": { - "content": [ - "If you use nextflow_workflow for your analysis please cite:\n\n* The pipeline\n https://doi.org/10.5281/zenodo.5070524\n\n* The nf-core framework\n https://doi.org/10.1038/s41587-020-0439-x\n\n* Software dependencies\n https://github.com/nextflow_workflow/blob/master/CITATIONS.md" - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-02-28T12:03:07.019761" - }, "Test Function without logColours": { "content": [ { @@ -95,16 +75,6 @@ }, "timestamp": "2024-02-28T12:03:17.969323" }, - "Test Function dashedLine": { - "content": [ - "-\u001b[2m----------------------------------------------------\u001b[0m-" - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-02-28T12:03:14.366181" - }, "Test Function with logColours": { "content": [ { diff --git a/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.nf.test b/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.nf.test new file mode 100644 index 0000000..8940d32 --- /dev/null +++ b/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.nf.test @@ -0,0 +1,29 @@ +nextflow_workflow { + + name "Test Workflow UTILS_NFCORE_PIPELINE" + script "../main.nf" + config "subworkflows/nf-core/utils_nfcore_pipeline/tests/nextflow.config" + workflow "UTILS_NFCORE_PIPELINE" + tag "subworkflows" + tag "subworkflows_nfcore" + tag "utils_nfcore_pipeline" + tag "subworkflows/utils_nfcore_pipeline" + + test("Should run without failures") { + + when { + workflow { + """ + input[0] = [] + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { assert snapshot(workflow.out).match() } + ) + } + } +} diff --git a/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.nf.test.snap b/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.nf.test.snap new file mode 100644 index 0000000..859d103 --- /dev/null +++ b/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.nf.test.snap @@ -0,0 +1,19 @@ +{ + "Should run without failures": { + "content": [ + { + "0": [ + true + ], + "valid_config": [ + true + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-02-28T12:03:25.726491" + } +} \ No newline at end of file diff --git a/subworkflows/nf-core/utils_nfcore_pipeline/tests/tags.yml b/subworkflows/nf-core/utils_nfcore_pipeline/tests/tags.yml deleted file mode 100644 index ac8523c..0000000 --- a/subworkflows/nf-core/utils_nfcore_pipeline/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -subworkflows/utils_nfcore_pipeline: - - subworkflows/nf-core/utils_nfcore_pipeline/** diff --git a/subworkflows/nf-core/utils_nfschema_plugin/main.nf b/subworkflows/nf-core/utils_nfschema_plugin/main.nf index 4994303..1df8b76 100644 --- a/subworkflows/nf-core/utils_nfschema_plugin/main.nf +++ b/subworkflows/nf-core/utils_nfschema_plugin/main.nf @@ -4,6 +4,7 @@ include { paramsSummaryLog } from 'plugin/nf-schema' include { validateParameters } from 'plugin/nf-schema' +include { paramsHelp } from 'plugin/nf-schema' workflow UTILS_NFSCHEMA_PLUGIN { @@ -15,32 +16,58 @@ workflow UTILS_NFSCHEMA_PLUGIN { // when this input is empty it will automatically use the configured schema or // "${projectDir}/nextflow_schema.json" as default. This input should not be empty // for meta pipelines + help // boolean: show help message + help_full // boolean: show full help message + show_hidden // boolean: show hidden parameters in help message + before_text // string: text to show before the help message and parameters summary + after_text // string: text to show after the help message and parameters summary + command // string: an example command of the pipeline main: + if(help || help_full) { + help_options = [ + beforeText: before_text, + afterText: after_text, + command: command, + showHidden: show_hidden, + fullHelp: help_full, + ] + if(parameters_schema) { + help_options << [parametersSchema: parameters_schema] + } + log.info paramsHelp( + help_options, + (params.help instanceof String && params.help != "true") ? params.help : "", + ) + exit 0 + } + // // Print parameter summary to stdout. This will display the parameters // that differ from the default given in the JSON schema // + + summary_options = [:] if(parameters_schema) { - log.info paramsSummaryLog(input_workflow, parameters_schema:parameters_schema) - } else { - log.info paramsSummaryLog(input_workflow) + summary_options << [parametersSchema: parameters_schema] } + log.info before_text + log.info paramsSummaryLog(summary_options, input_workflow) + log.info after_text // // Validate the parameters using nextflow_schema.json or the schema // given via the validation.parametersSchema configuration option // if(validate_params) { + validateOptions = [:] if(parameters_schema) { - validateParameters(parameters_schema:parameters_schema) - } else { - validateParameters() + validateOptions << [parametersSchema: parameters_schema] } + validateParameters(validateOptions) } emit: dummy_emit = true } - diff --git a/subworkflows/nf-core/utils_nfschema_plugin/tests/main.nf.test b/subworkflows/nf-core/utils_nfschema_plugin/tests/main.nf.test index 842dc43..c977917 100644 --- a/subworkflows/nf-core/utils_nfschema_plugin/tests/main.nf.test +++ b/subworkflows/nf-core/utils_nfschema_plugin/tests/main.nf.test @@ -25,6 +25,12 @@ nextflow_workflow { input[0] = workflow input[1] = validate_params input[2] = "" + input[3] = false + input[4] = false + input[5] = false + input[6] = "" + input[7] = "" + input[8] = "" """ } } @@ -42,7 +48,7 @@ nextflow_workflow { params { test_data = '' - outdir = 1 + outdir = null } workflow { @@ -51,6 +57,12 @@ nextflow_workflow { input[0] = workflow input[1] = validate_params input[2] = "" + input[3] = false + input[4] = false + input[5] = false + input[6] = "" + input[7] = "" + input[8] = "" """ } } @@ -77,6 +89,12 @@ nextflow_workflow { input[0] = workflow input[1] = validate_params input[2] = "${projectDir}/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow_schema.json" + input[3] = false + input[4] = false + input[5] = false + input[6] = "" + input[7] = "" + input[8] = "" """ } } @@ -94,7 +112,7 @@ nextflow_workflow { params { test_data = '' - outdir = 1 + outdir = null } workflow { @@ -103,6 +121,12 @@ nextflow_workflow { input[0] = workflow input[1] = validate_params input[2] = "${projectDir}/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow_schema.json" + input[3] = false + input[4] = false + input[5] = false + input[6] = "" + input[7] = "" + input[8] = "" """ } } @@ -114,4 +138,36 @@ nextflow_workflow { ) } } + + test("Should create a help message") { + + when { + + params { + test_data = '' + outdir = null + } + + workflow { + """ + validate_params = true + input[0] = workflow + input[1] = validate_params + input[2] = "${projectDir}/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow_schema.json" + input[3] = true + input[4] = false + input[5] = false + input[6] = "Before" + input[7] = "After" + input[8] = "nextflow run test/test" + """ + } + } + + then { + assertAll( + { assert workflow.success } + ) + } + } } diff --git a/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow.config b/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow.config index 0907ac5..f6537cc 100644 --- a/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow.config +++ b/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow.config @@ -1,8 +1,8 @@ plugins { - id "nf-schema@2.1.0" + id "nf-schema@2.6.1" } validation { parametersSchema = "${projectDir}/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow_schema.json" monochromeLogs = true -} \ No newline at end of file +} diff --git a/tests/.nftignore b/tests/.nftignore new file mode 100644 index 0000000..e128a12 --- /dev/null +++ b/tests/.nftignore @@ -0,0 +1,12 @@ +.DS_Store +multiqc/multiqc_data/fastqc_top_overrepresented_sequences_table.txt +multiqc/multiqc_data/multiqc.parquet +multiqc/multiqc_data/multiqc.log +multiqc/multiqc_data/multiqc_data.json +multiqc/multiqc_data/multiqc_sources.txt +multiqc/multiqc_data/multiqc_software_versions.txt +multiqc/multiqc_data/llms-full.txt +multiqc/multiqc_plots/{svg,pdf,png}/*.{svg,pdf,png} +multiqc/multiqc_report.html +fastqc/*_fastqc.{html,zip} +pipeline_info/*.{html,json,txt,yml} diff --git a/tests/default.nf.test b/tests/default.nf.test new file mode 100644 index 0000000..90bf6a6 --- /dev/null +++ b/tests/default.nf.test @@ -0,0 +1,28 @@ +nextflow_pipeline { + + name "Test pipeline" + script "../main.nf" + tag "pipeline" + + test("-profile test") { + + when { + params { + outdir = "$outputDir" + } + } + + then { + assertAll( + // The pipeline wraps MTBseq (BWA/GATK), whose per-position + // calls are not bit-stable run-to-run, so we assert successful + // completion + that the key MTBseq + MultiQC outputs are produced + // rather than snapshotting variable content. + { assert workflow.success }, + { assert path("${params.outdir}/multiqc/multiqc_report.html").exists() }, + { assert path("${params.outdir}/tbfull/Classification/Strain_Classification.tab").exists() }, + { assert workflow.trace.succeeded().size() > 0 }, + ) + } + } +} diff --git a/tests/nextflow.config b/tests/nextflow.config new file mode 100644 index 0000000..88a5780 --- /dev/null +++ b/tests/nextflow.config @@ -0,0 +1,14 @@ +/* +======================================================================================== + Nextflow config file for running nf-test tests +======================================================================================== +*/ + +// TODO nf-core: Specify any additional parameters here +// Or any resources requirements +params { + modules_testdata_base_path = 'https://raw.githubusercontent.com/nf-core/test-datasets/modules/data/' + pipelines_testdata_base_path = 'https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/tbanalyzer/' +} + +aws.client.anonymous = true // fixes S3 access issues on self-hosted runners diff --git a/workflows/mtbseqnf.nf b/workflows/mtbseqnf.nf new file mode 100644 index 0000000..1f2eeb2 --- /dev/null +++ b/workflows/mtbseqnf.nf @@ -0,0 +1,95 @@ +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + IMPORT MODULES / SUBWORKFLOWS / FUNCTIONS +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +*/ + +include { MTBSEQ } from '../subworkflows/local/mtbseq' +include { MULTIQC } from '../modules/nf-core/multiqc/main' + +include { paramsSummaryMap } from 'plugin/nf-schema' +include { paramsSummaryMultiqc } from '../subworkflows/nf-core/utils_nfcore_pipeline' +include { softwareVersionsToYAML } from '../subworkflows/nf-core/utils_nfcore_pipeline' +include { methodsDescriptionText } from '../subworkflows/local/utils_nfcore_tbanalyzer_pipeline' + + + +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + RUN MAIN WORKFLOW +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +*/ + +workflow MTBSEQ_NF { + + take: + ch_samplesheet // channel: samplesheet read in from --input + + main: + + // + // SUBWORKFLOW: Run the MTBseq analysis core (QC + serial/parallel MTBseq) + // + MTBSEQ(ch_samplesheet) + + ch_versions = MTBSEQ.out.versions + ch_multiqc_files = MTBSEQ.out.multiqc_files + + // + // Collate and save software versions + // + softwareVersionsToYAML(ch_versions) + .collectFile( + storeDir: "${params.outdir}/pipeline_info", + name: 'nf_core_pipeline_software_mqc_versions.yml', + sort: true, + newLine: true + ).set { ch_collated_versions } + + // + // MODULE: MULTIQC + // + summary_params = paramsSummaryMap( + workflow, parameters_schema: "nextflow_schema.json") + ch_workflow_summary = Channel.value(paramsSummaryMultiqc(summary_params)) + ch_multiqc_files = ch_multiqc_files.mix( + ch_workflow_summary.collectFile(name: 'workflow_summary_mqc.yaml')) + ch_multiqc_custom_methods_description = params.multiqc_methods_description ? + file(params.multiqc_methods_description, checkIfExists: true) : + file("$projectDir/assets/methods_description_template.yml", checkIfExists: true) + ch_methods_description = Channel.value( + methodsDescriptionText(ch_multiqc_custom_methods_description)) + + ch_multiqc_files = ch_multiqc_files.mix(ch_collated_versions) + ch_multiqc_files = ch_multiqc_files.mix( + ch_methods_description.collectFile( + name: 'methods_description_mqc.yaml', + sort: true + ) + ) + + MULTIQC ( + ch_multiqc_files.flatten().collect().map { files -> + [ + [id: 'mtbseq'], + files, + params.multiqc_config + ? file(params.multiqc_config, checkIfExists: true) + : file("${projectDir}/assets/multiqc_config.yml", checkIfExists: true), + params.multiqc_logo ? file(params.multiqc_logo, checkIfExists: true) : [], + [], + [], + ] + } + ) + + emit: + multiqc_report = MULTIQC.out.report.map { _meta, report -> [report] }.toList() // channel: /path/to/multiqc_report.html + versions = ch_versions // channel: [ path(versions.yml) ] +} + +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + THE END +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +*/ diff --git a/workflows/tbanalyzer.nf b/workflows/tbanalyzer.nf index 939bc3d..b65c1f1 100644 --- a/workflows/tbanalyzer.nf +++ b/workflows/tbanalyzer.nf @@ -20,74 +20,78 @@ workflow TBANALYZER { take: ch_samplesheet // channel: samplesheet read in from --input + multiqc_config + multiqc_logo + multiqc_methods_description + outdir + main: - ch_versions = Channel.empty() - ch_multiqc_files = Channel.empty() + def ch_versions = channel.empty() + def ch_multiqc_files = channel.empty() // // MODULE: Run FastQC // - FASTQC ( - ch_samplesheet - ) - ch_multiqc_files = ch_multiqc_files.mix(FASTQC.out.zip.collect{it[1]}) - ch_versions = ch_versions.mix(FASTQC.out.versions.first()) + FASTQC(ch_samplesheet) + ch_multiqc_files = ch_multiqc_files.mix(FASTQC.out.zip.map{ _meta, file -> file }) // // Collate and save software versions // - softwareVersionsToYAML(ch_versions) + def topic_versions = channel.topic("versions") + .distinct() + .branch { entry -> + versions_file: entry instanceof Path + versions_tuple: true + } + + def topic_versions_string = topic_versions.versions_tuple + .map { process, tool, version -> + [ process[process.lastIndexOf(':')+1..-1], " ${tool}: ${version}" ] + } + .groupTuple(by:0) + .map { process, tool_versions -> + tool_versions.unique().sort() + "${process}:\n${tool_versions.join('\n')}" + } + + def ch_collated_versions = softwareVersionsToYAML(ch_versions.mix(topic_versions.versions_file)) + .mix(topic_versions_string) .collectFile( - storeDir: "${params.outdir}/pipeline_info", - name: 'nf_core_' + 'pipeline_software_' + 'mqc_' + 'versions.yml', + storeDir: "${outdir}/pipeline_info", + name: 'nf_core_' + 'tbanalyzer_software_' + 'mqc_' + 'versions.yml', sort: true, newLine: true - ).set { ch_collated_versions } - + ) // // MODULE: MultiQC // - ch_multiqc_config = Channel.fromPath( - "$projectDir/assets/multiqc_config.yml", checkIfExists: true) - ch_multiqc_custom_config = params.multiqc_config ? - Channel.fromPath(params.multiqc_config, checkIfExists: true) : - Channel.empty() - ch_multiqc_logo = params.multiqc_logo ? - Channel.fromPath(params.multiqc_logo, checkIfExists: true) : - Channel.empty() - - summary_params = paramsSummaryMap( - workflow, parameters_schema: "nextflow_schema.json") - ch_workflow_summary = Channel.value(paramsSummaryMultiqc(summary_params)) - ch_multiqc_files = ch_multiqc_files.mix( - ch_workflow_summary.collectFile(name: 'workflow_summary_mqc.yaml')) - ch_multiqc_custom_methods_description = params.multiqc_methods_description ? - file(params.multiqc_methods_description, checkIfExists: true) : - file("$projectDir/assets/methods_description_template.yml", checkIfExists: true) - ch_methods_description = Channel.value( - methodsDescriptionText(ch_multiqc_custom_methods_description)) - ch_multiqc_files = ch_multiqc_files.mix(ch_collated_versions) - ch_multiqc_files = ch_multiqc_files.mix( - ch_methods_description.collectFile( - name: 'methods_description_mqc.yaml', - sort: true - ) - ) - - MULTIQC ( - ch_multiqc_files.collect(), - ch_multiqc_config.toList(), - ch_multiqc_custom_config.toList(), - ch_multiqc_logo.toList(), - [], - [] + def ch_summary_params = paramsSummaryMap(workflow, parameters_schema: "nextflow_schema.json") + def ch_workflow_summary = channel.value(paramsSummaryMultiqc(ch_summary_params)) + ch_multiqc_files = ch_multiqc_files.mix(ch_workflow_summary.collectFile(name: 'workflow_summary_mqc.yaml')) + def ch_multiqc_custom_methods_description = multiqc_methods_description + ? file(multiqc_methods_description, checkIfExists: true) + : file("${projectDir}/assets/methods_description_template.yml", checkIfExists: true) + def ch_methods_description = channel.value(methodsDescriptionText(ch_multiqc_custom_methods_description)) + ch_multiqc_files = ch_multiqc_files.mix(ch_methods_description.collectFile(name: 'methods_description_mqc.yaml', sort: true)) + MULTIQC( + ch_multiqc_files.flatten().collect().map { files -> + [ + [id: 'tbanalyzer'], + files, + multiqc_config + ? file(multiqc_config, checkIfExists: true) + : file("${projectDir}/assets/multiqc_config.yml", checkIfExists: true), + multiqc_logo ? file(multiqc_logo, checkIfExists: true) : [], + [], + [], + ] + } ) - - emit:multiqc_report = MULTIQC.out.report.toList() // channel: /path/to/multiqc_report.html + emit:multiqc_report = MULTIQC.out.report.map { _meta, report -> [report] }.toList() // channel: /path/to/multiqc_report.html versions = ch_versions // channel: [ path(versions.yml) ] - } /*