diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 4ecfbfe3..b290e090 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -10,15 +10,7 @@ "vscode": { // Set *default* container specific settings.json values on container create. "settings": { - "python.defaultInterpreterPath": "/opt/conda/bin/python", - "python.linting.enabled": true, - "python.linting.pylintEnabled": true, - "python.formatting.autopep8Path": "/opt/conda/bin/autopep8", - "python.formatting.yapfPath": "/opt/conda/bin/yapf", - "python.linting.flake8Path": "/opt/conda/bin/flake8", - "python.linting.pycodestylePath": "/opt/conda/bin/pycodestyle", - "python.linting.pydocstylePath": "/opt/conda/bin/pydocstyle", - "python.linting.pylintPath": "/opt/conda/bin/pylint" + "python.defaultInterpreterPath": "/opt/conda/bin/python" }, // Add the IDs of extensions you want installed when the container is created. diff --git a/.editorconfig b/.editorconfig index b6b31907..72dda289 100644 --- a/.editorconfig +++ b/.editorconfig @@ -18,7 +18,16 @@ end_of_line = unset insert_final_newline = unset trim_trailing_whitespace = unset indent_style = unset -indent_size = 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 index 38618636..1a51bc53 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -9,9 +9,8 @@ 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 ;) -:::info -If you need help using or modifying nf-core/methylseq then the best place to ask is on the nf-core Slack [#methylseq](https://nfcore.slack.com/channels/methylseq) channel ([join our Slack here](https://nf-co.re/join/slack)). -::: +> [!NOTE] +> If you need help using or modifying nf-core/methylseq then the best place to ask is on the nf-core Slack [#methylseq](https://nfcore.slack.com/channels/methylseq) channel ([join our Slack here](https://nf-co.re/join/slack)). ## Contribution workflow @@ -20,15 +19,18 @@ If you'd like to write some code for nf-core/methylseq, the standard workflow is 1. Check that there isn't already an issue about your idea in the [nf-core/methylseq issues](https://github.com/nf-core/methylseq/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/methylseq repository](https://github.com/nf-core/methylseq) to your GitHub account 3. Make the necessary changes / additions within your forked repository following [Pipeline conventions](#pipeline-contribution-conventions) -4. Use `nf-core schema build` and add any new parameters to the pipeline JSON schema (requires [nf-core tools](https://github.com/nf-core/tools) >= 1.10). +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 can optionally test your changes by running the pipeline locally. Then it is recommended to use the `debug` profile to -receive warnings about process selectors and other debug info. Example: `nextflow run . -profile debug,test,docker --outdir `. +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. @@ -38,7 +40,7 @@ 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 lint ` command. +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. @@ -73,7 +75,7 @@ If you wish to contribute a new step, please use the following coding standards: 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 schema build` tool). +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`. @@ -84,13 +86,13 @@ If you wish to contribute a new step, please use the following coding standards: Parameters should be initialised / defined with default values in `nextflow.config` under the `params` scope. -Once there, use `nf-core schema build` to add to `nextflow_schema.json`. +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/master/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. +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.cpu}` and `${task.memory}` variables in the `script:` block. +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 @@ -101,7 +103,7 @@ Please use the following naming schemes, to make it easy to understand what is g ### 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 bump-version --nextflow . [min-nf-version]` +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 diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 1000a8aa..36c0c759 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -17,7 +17,7 @@ Learn more about contributing: [CONTRIBUTING.md](https://github.com/nf-core/meth - [ ] 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/methylseq/tree/master/.github/CONTRIBUTING.md) - [ ] If necessary, also make a PR on the nf-core/methylseq _branch_ on the [nf-core/test-datasets](https://github.com/nf-core/test-datasets) repository. -- [ ] Make sure your code lints (`nf-core lint`). +- [ ] Make sure your code lints (`nf-core pipelines lint`). - [ ] Ensure the test suite passes (`nextflow run . -profile test,docker --outdir `). - [ ] Check for unexpected warnings in debug mode (`nextflow run . -profile debug,test,docker --outdir `). - [ ] Usage Documentation in `docs/usage.md` is updated. diff --git a/.github/workflows/awsfulltest.yml b/.github/workflows/awsfulltest.yml index 81a346ca..c68b5424 100644 --- a/.github/workflows/awsfulltest.yml +++ b/.github/workflows/awsfulltest.yml @@ -1,22 +1,40 @@ name: nf-core AWS full size tests -# This workflow is triggered on published releases. +# This workflow is triggered on PRs opened against the master branch. # It can be additionally triggered manually with GitHub actions workflow dispatch button. # It runs the -profile 'test_full' on AWS batch on: - release: - types: [published] + pull_request: + branches: + - master workflow_dispatch: + pull_request_review: + types: [submitted] + jobs: - run-tower: + run-platform: name: Run AWS full tests - if: github.repository == 'nf-core/methylseq' + # 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/methylseq' && github.event.review.state == 'approved' && github.event.pull_request.base.ref == 'master' || github.event_name == 'workflow_dispatch' runs-on: ubuntu-latest strategy: matrix: aligner: ["bismark", "bismark_hisat", "bwameth"] steps: - - name: Launch workflow via tower + - uses: octokit/request-action@v2.x + if: github.event_name != 'workflow_dispatch' + id: check_approvals + with: + route: GET /repos/${{ github.repository }}/pulls/${{ github.event.pull_request.number }}/reviews?per_page=100 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - id: test_variables + if: github.event_name != 'workflow_dispatch' + 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 + - name: Launch workflow via Seqera Platform uses: seqeralabs/action-tower-launch@v2 with: workspace_id: ${{ secrets.TOWER_WORKSPACE_ID }} @@ -27,14 +45,14 @@ jobs: parameters: | { "hook_url": "${{ secrets.MEGATESTS_ALERTS_SLACK_HOOK_URL }}", - "outdir": "s3://${{ secrets.AWS_S3_BUCKET }}/methylseq/results-${{ github.sha }}/${{matrix.aligner}}" + "outdir": "s3://${{ secrets.AWS_S3_BUCKET }}/methylseq/results-${{ github.sha }}/${{matrix.aligner}}", "aligner": "${{ matrix.aligner }}", } profiles: test_full - - uses: actions/upload-artifact@v3 + - uses: actions/upload-artifact@v4 with: - name: Tower debug log file + name: Seqera Platform debug log file path: | - tower_action_*.log - tower_action_*.json + seqera_platform_action_*.log + seqera_platform_action_*.json diff --git a/.github/workflows/awstest.yml b/.github/workflows/awstest.yml index 635dbc04..5c96ee94 100644 --- a/.github/workflows/awstest.yml +++ b/.github/workflows/awstest.yml @@ -5,7 +5,7 @@ name: nf-core AWS test on: workflow_dispatch: jobs: - run-tower: + run-platform: name: Run AWS tests if: github.repository == 'nf-core/methylseq' runs-on: ubuntu-latest @@ -13,8 +13,8 @@ jobs: matrix: aligner: ["bismark", "bismark_hisat", "bwameth"] steps: - # Launch workflow using Tower CLI tool action - - name: Launch workflow via tower + # Launch workflow using Seqera Platform CLI tool action + - name: Launch workflow via Seqera Platform uses: seqeralabs/action-tower-launch@v2 with: workspace_id: ${{ secrets.TOWER_WORKSPACE_ID }} @@ -29,9 +29,9 @@ jobs: } profiles: test - - uses: actions/upload-artifact@v3 + - uses: actions/upload-artifact@v4 with: - name: Tower debug log file + name: Seqera Platform debug log file path: | - tower_action_*.log - tower_action_*.json + seqera_platform_action_*.log + seqera_platform_action_*.json diff --git a/.github/workflows/branch.yml b/.github/workflows/branch.yml index 32d20557..65022865 100644 --- a/.github/workflows/branch.yml +++ b/.github/workflows/branch.yml @@ -19,7 +19,7 @@ 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@v1 + uses: mshick/add-pr-comment@b8f338c590a895d50bcbfa6c5859251edc8952fc # v2 with: message: | ## This PR is against the `master` branch :x: diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a9126136..468812a9 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,124 +1,119 @@ -# This workflow runs the pipeline with the minimal test dataset to check that it completes without any syntax errors 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" + - dev pull_request: - branches: - - "dev" - - "master" release: - types: - - "published" + types: [published] + workflow_dispatch: env: NXF_ANSI_LOG: false - NFTEST_VER: "0.8.2" + NFT_VER: "0.9.0" + NFT_WORKDIR: "~" + NFT_DIFF: "pdiff" + NFT_DIFF_ARGS: "--line-numbers --width 120 --expand-tabs=2" + 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: - list: - name: List Tests - if: "${{ github.event_name != 'push' || (github.event_name == 'push' && github.repository == 'nf-core/methylseq') }}" - outputs: - # Expose matched filters as job 'modules' output variable - tests: ${{ steps.list.outputs.tests }} - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - - name: Setup Nextflow - uses: nf-core/setup-nextflow@v1 - - - name: Install nf-test - if: steps.cache-software.outputs.cache-hit != 'true' - run: | - wget -qO- https://code.askimed.com/install/nf-test | bash - sudo mv nf-test /usr/local/bin/ - - - name: List nf-test - id: list - run: | - echo "tests=$(nf-test list --silent --format=json)" >> "$GITHUB_OUTPUT" - test: - name: ${{ matrix.tags }} (${{ matrix.profile }}-${{ matrix.NXF_VER }}) + 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: needs.list.outputs.tests != '[]' - needs: [list] + if: "${{ github.event_name != 'push' || (github.event_name == 'push' && github.repository == 'nf-core/methylseq') }}" runs-on: ubuntu-latest strategy: + fail-fast: false matrix: NXF_VER: - - "23.04.0" + - "24.04.2" - "latest-everything" - profile: ["docker"] # TODO , "singularity", "conda"] - test: ["${{ fromJson(needs.list.outputs.tests) }}"] + shard: [1, 2, 3, 4, 5] + filter: [pipeline, workflow] + profile: + - "docker" + - "singularity" + test_name: + - "test" + isMaster: + - ${{ github.base_ref == 'master' }} + # Exclude conda and singularity on dev exclude: - - test: "tests/subworkflows/local/grohmm/main.nf.test@3508b8c9" - - test: "tests/subworkflows/local/grohmm/main.nf.test@716555be" - - test: "tests/subworkflows/local/grohmm/main.nf.test@306b4b15" + - isMaster: false + profile: "conda" + - isMaster: false + profile: "singularity" steps: - name: Check out pipeline code - uses: actions/checkout@v4 - - - name: Cache Nextflow installation - id: cache-software - uses: actions/cache@v3 + uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4 with: - path: | - /usr/local/bin/nf-test - /home/runner/.nf-test/nf-test.jar - key: methylseq-${{ runner.os }}-${{ matrix.NXF_VER }} + fetch-depth: 0 - - name: Install Nextflow - uses: nf-core/setup-nextflow@v1 + - name: Set up Nextflow + uses: nf-core/setup-nextflow@v2 with: version: "${{ matrix.NXF_VER }}" - - name: Install nf-test - if: steps.cache-software.outputs.cache-hit != 'true' + - name: Install pdiff to see diff between nf-test snapshots run: | - wget -qO- https://code.askimed.com/install/nf-test | bash - sudo mv nf-test /usr/local/bin/ + python -m pip install --upgrade pip + pip install pdiff + + - uses: nf-core/setup-nf-test@v1 + with: + version: ${{ env.NFT_VER }} + + - name: Set up Apptainer + if: matrix.profile == 'singularity' + uses: eWaterCycle/setup-apptainer@main - name: Set up Singularity if: matrix.profile == 'singularity' - uses: eWaterCycle/setup-singularity@v5 - with: - singularity-version: 3.7.1 + run: | + mkdir -p $NXF_SINGULARITY_CACHEDIR + mkdir -p $NXF_SINGULARITY_LIBRARYDIR - - name: Set up miniconda + - name: Set up Miniconda if: matrix.profile == 'conda' - uses: conda-incubator/setup-miniconda@v2 + uses: conda-incubator/setup-miniconda@a4260408e20b96e80095f42ff7f1a15b27dd94ca # v3 with: + miniconda-version: "latest" auto-update-conda: true - channels: conda-forge,bioconda,defaults - python-version: ${{ matrix.python-version }} + conda-solver: libmamba + channels: conda-forge,bioconda - - name: Conda clean + - name: Set up Conda if: matrix.profile == 'conda' - run: conda clean -a + run: | + echo $(realpath $CONDA)/condabin >> $GITHUB_PATH + echo $(realpath python) >> $GITHUB_PATH - - name: Run nf-test + - name: Clean up Disk space + uses: jlumbroso/free-disk-space@54081f138730dfa15788a46383842cd2f914a1be # v1.3.1 + + - name: Run Tests (Shard ${{ matrix.shard }}/${{ strategy.job-total }}) run: | nf-test test \ - --profile="test,${{ matrix.profile }}" \ - ${{ matrix.test }} \ - --junitxml=${{ matrix.test }}-${{ matrix.profile }}.xml - - - name: Publish Test Report - uses: mikepenz/action-junit-report@v3 - if: success() || failure() # run this step even if previous step failed - with: - path: ${{ matrix.test }}-${{ matrix.profile }}.xml + --ci \ + --shard ${{ matrix.shard }}/${{ strategy.job-total }} \ + --changed-since HEAD^ \ + --profile "+${{ matrix.profile }}" \ + --filter ${{ matrix.filter }} - name: Output log on failure if: failure() run: | sudo apt install bat > /dev/null - batcat --decorations=always --color=always ${{ github.workspace }}/.nf-test/tests/*/output/pipeline_info/software_versions.yml + batcat --decorations=always --color=always ${{ github.workspace }}/.nf-test/tests/*/meta/nextflow.log + + - name: Publish Test Report + uses: mikepenz/action-junit-report@v3 + if: always() # always run even if the previous step fails + with: + report_paths: test.xml diff --git a/.github/workflows/clean-up.yml b/.github/workflows/clean-up.yml index 694e90ec..0b6b1f27 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@v7 + - uses: actions/stale@28ca1036281a5e5922ead5184a1bbf96e5fc984e # v9 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 new file mode 100644 index 00000000..713dc3e7 --- /dev/null +++ b/.github/workflows/download_pipeline.yml @@ -0,0 +1,119 @@ +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 +# - 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: + inputs: + testbranch: + description: "The specific branch you wish to utilize for the test execution of nf-core pipelines download." + required: true + default: "dev" + pull_request: + types: + - opened + - edited + - synchronize + branches: + - master + pull_request_target: + branches: + - master + +env: + NXF_ANSI_LOG: false + +jobs: + download: + runs-on: ubuntu-latest + steps: + - name: Install Nextflow + uses: nf-core/setup-nextflow@v2 + + - name: Disk space cleanup + uses: jlumbroso/free-disk-space@54081f138730dfa15788a46383842cd2f914a1be # v1.3.1 + + - uses: actions/setup-python@82c7e631bb3cdc910f68e0081d67478d79c6982d # v5 + with: + python-version: "3.12" + architecture: "x64" + + - name: Setup Apptainer + uses: eWaterCycle/setup-apptainer@4bb22c52d4f63406c49e94c804632975787312b3 # v2.0.0 + with: + apptainer-version: 1.3.4 + + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install git+https://github.com/nf-core/tools.git@dev + + - name: Get the repository name and current branch set as environment variable + 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} + + - name: Make a cache directory for the container images + run: | + mkdir -p ./singularity_container_images + + - name: Download the pipeline + env: + NXF_SINGULARITY_CACHEDIR: ./singularity_container_images + run: | + nf-core pipelines download ${{ env.REPO_LOWERCASE }} \ + --revision ${{ env.REPO_BRANCH }} \ + --outdir ./${{ env.REPOTITLE_LOWERCASE }} \ + --compress "none" \ + --container-system 'singularity' \ + --container-library "quay.io" -l "docker.io" -l "community.wave.seqera.io" \ + --container-cache-utilisation 'amend' \ + --download-configuration 'yes' + + - name: Inspect download + run: tree ./${{ env.REPOTITLE_LOWERCASE }} + + - 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} + + - name: Run the downloaded pipeline (stub) + id: stub_run_pipeline + continue-on-error: true + 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 + - name: Run the downloaded pipeline (stub run not supported) + id: run_pipeline + if: ${{ job.steps.stub_run_pipeline.status == 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 + + - 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} + + - name: Compare container image counts + run: | + if [ "${{ env.IMAGE_COUNT_INITIAL }}" -ne "${{ env.IMAGE_COUNT_AFTER }}" ]; then + initial_count=${{ env.IMAGE_COUNT_INITIAL }} + final_count=${{ env.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 + exit 1 + else + echo "The pipeline can be downloaded successfully!" + fi diff --git a/.github/workflows/fix-linting.yml b/.github/workflows/fix-linting.yml index 5430f37a..c7ffc80c 100644 --- a/.github/workflows/fix-linting.yml +++ b/.github/workflows/fix-linting.yml @@ -4,7 +4,7 @@ on: types: [created] jobs: - deploy: + fix-linting: # Only run if comment is on a PR with the main repo, and if it contains the magic keywords if: > contains(github.event.comment.html_url, '/pull/') && @@ -13,10 +13,17 @@ jobs: runs-on: ubuntu-latest steps: # Use the @nf-core-bot token to check out so we can push later - - uses: actions/checkout@v4 + - uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4 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 + with: + comment-id: ${{ github.event.comment.id }} + reactions: eyes + # Action runs on the issue comment, so we don't get the PR by default # Use the gh cli to check out the PR - name: Checkout Pull Request @@ -24,32 +31,59 @@ jobs: env: GITHUB_TOKEN: ${{ secrets.nf_core_bot_auth_token }} - - uses: actions/setup-node@v4 + # Install and run pre-commit + - uses: actions/setup-python@82c7e631bb3cdc910f68e0081d67478d79c6982d # v5 + with: + python-version: "3.12" - - name: Install Prettier - run: npm install -g prettier @prettier/plugin-php + - name: Install pre-commit + run: pip install pre-commit - # Check that we actually need to fix something - - name: Run 'prettier --check' - id: prettier_status - run: | - if prettier --check ${GITHUB_WORKSPACE}; then - echo "result=pass" >> $GITHUB_OUTPUT - else - echo "result=fail" >> $GITHUB_OUTPUT - fi + - name: Run pre-commit + id: pre-commit + run: pre-commit run --all-files + continue-on-error: true - - name: Run 'prettier --write' - if: steps.prettier_status.outputs.result == 'fail' - run: prettier --write ${GITHUB_WORKSPACE} + # 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 + with: + comment-id: ${{ github.event.comment.id }} + reactions: "+1" - name: Commit & push changes - if: steps.prettier_status.outputs.result == 'fail' + id: commit-and-push + if: steps.pre-commit.outcome == 'failure' run: | git config user.email "core@nf-co.re" git config user.name "nf-core-bot" git config push.default upstream git add . git status - git commit -m "[automated] Fix linting with Prettier" + git commit -m "[automated] Fix code linting" git push + + - 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 + 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 + 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 + with: + issue-number: ${{ github.event.issue.number }} + body: | + @${{ github.actor }} I tried to fix the linting errors, but it didn't work. Please fix them manually. + See [CI log](https://github.com/nf-core/methylseq/actions/runs/${{ github.run_id }}) for more details. diff --git a/.github/workflows/linting.yml b/.github/workflows/linting.yml index 905c58e4..a502573c 100644 --- a/.github/workflows/linting.yml +++ b/.github/workflows/linting.yml @@ -1,6 +1,6 @@ name: nf-core linting # This workflow is triggered on pushes and PRs to the repository. -# It runs the `nf-core lint` and markdown lint tests to ensure +# It runs the `nf-core pipelines lint` and markdown lint tests to ensure # that the code meets the nf-core guidelines. on: push: @@ -11,87 +11,62 @@ on: types: [published] jobs: - EditorConfig: + pre-commit: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4 - - uses: actions/setup-node@v4 - - - name: Install editorconfig-checker - run: npm install -g editorconfig-checker - - - name: Run ECLint check - run: editorconfig-checker -exclude README.md $(find .* -type f | grep -v '.git\|.py\|.md\|json\|yml\|yaml\|html\|css\|work\|.nextflow\|build\|nf_core.egg-info\|log.txt\|Makefile') - - Prettier: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - - uses: actions/setup-node@v4 - - - name: Install Prettier - run: npm install -g prettier - - - name: Run Prettier --check - run: prettier --check ${GITHUB_WORKSPACE} - - PythonBlack: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - - name: Check code lints with Black - uses: psf/black@stable - - # If the above check failed, post a comment on the PR explaining the failure - - name: Post PR comment - if: failure() - uses: mshick/add-pr-comment@v1 + - name: Set up Python 3.12 + uses: actions/setup-python@82c7e631bb3cdc910f68e0081d67478d79c6982d # v5 with: - message: | - ## Python linting (`black`) is failing - - To keep the code consistent with lots of contributors, we run automated code consistency checks. - To fix this CI test, please run: - - * Install [`black`](https://black.readthedocs.io/en/stable/): `pip install black` - * Fix formatting errors in your pipeline: `black .` + python-version: "3.12" - Once you push these changes the test should pass, and you can hide this comment :+1: + - name: Install pre-commit + run: pip install pre-commit - We highly recommend setting up Black in your code editor so that this formatting is done automatically on save. Ask about it on Slack for help! - - Thanks again for your contribution! - repo-token: ${{ secrets.GITHUB_TOKEN }} - allow-repeats: false + - name: Run pre-commit + run: pre-commit run --all-files nf-core: runs-on: ubuntu-latest steps: - name: Check out pipeline code - uses: actions/checkout@v4 + uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4 - name: Install Nextflow - uses: nf-core/setup-nextflow@v1 + uses: nf-core/setup-nextflow@v2 - - uses: actions/setup-python@v4 + - uses: actions/setup-python@82c7e631bb3cdc910f68e0081d67478d79c6982d # v5 with: - python-version: "3.11" + python-version: "3.12" architecture: "x64" + - name: read .nf-core.yml + uses: pietrobolcato/action-read-yaml@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 + pip install nf-core==${{ steps.read_yml.outputs['nf_core_version'] }} + + - name: Run nf-core pipelines lint + if: ${{ github.base_ref != 'master' }} + env: + GITHUB_COMMENTS_URL: ${{ github.event.pull_request.comments_url }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + GITHUB_PR_COMMIT: ${{ github.event.pull_request.head.sha }} + run: nf-core -l lint_log.txt pipelines lint --dir ${GITHUB_WORKSPACE} --markdown lint_results.md - - name: Run nf-core lint + - name: Run nf-core pipelines lint --release + if: ${{ github.base_ref == 'master' }} env: GITHUB_COMMENTS_URL: ${{ github.event.pull_request.comments_url }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GITHUB_PR_COMMIT: ${{ github.event.pull_request.head.sha }} - run: nf-core -l lint_log.txt lint --dir ${GITHUB_WORKSPACE} --markdown lint_results.md + run: nf-core -l lint_log.txt pipelines lint --release --dir ${GITHUB_WORKSPACE} --markdown lint_results.md - name: Save PR number if: ${{ always() }} @@ -99,7 +74,7 @@ jobs: - name: Upload linting log file artifact if: ${{ always() }} - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@65462800fd760344b1a7b4382951275a0abb4808 # v4 with: name: linting-logs path: | diff --git a/.github/workflows/linting_comment.yml b/.github/workflows/linting_comment.yml index 0bbcd30f..42e519bf 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@v2 + uses: dawidd6/action-download-artifact@bf251b5aa9c2f7eeb574a96ee720e24f801b7c11 # v6 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@v2 + uses: marocchino/sticky-pull-request-comment@331f8f5b4215f0445d3c07b4967662a32a2d3e31 # v2 with: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} number: ${{ steps.pr_number.outputs.pr_number }} diff --git a/.github/workflows/release-announcements.yml b/.github/workflows/release-announcements.yml index 6ad33927..c6ba35df 100644 --- a/.github/workflows/release-announcements.yml +++ b/.github/workflows/release-announcements.yml @@ -9,6 +9,11 @@ jobs: toot: runs-on: ubuntu-latest steps: + - name: get topics and convert to hashtags + id: get_topics + 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 with: access-token: ${{ secrets.MASTODON_ACCESS_TOKEN }} @@ -20,11 +25,13 @@ jobs: 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@v4 + - uses: actions/setup-python@82c7e631bb3cdc910f68e0081d67478d79c6982d # v5 with: python-version: "3.10" - name: Install dependencies @@ -56,7 +63,7 @@ jobs: bsky-post: runs-on: ubuntu-latest steps: - - uses: zentered/bluesky-post-action@v0.0.2 + - uses: zentered/bluesky-post-action@80dbe0a7697de18c15ad22f4619919ceb5ccf597 # v0.1.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 new file mode 100644 index 00000000..e8aafe44 --- /dev/null +++ b/.github/workflows/template_version_comment.yml @@ -0,0 +1,46 @@ +name: nf-core template version comment +# This workflow is triggered on PRs to check if the pipeline template version matches the latest nf-core version. +# It posts a comment to the PR, even if it comes from a fork. + +on: pull_request_target + +jobs: + template_version: + runs-on: ubuntu-latest + steps: + - name: Check out pipeline code + uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4 + with: + ref: ${{ github.event.pull_request.head.sha }} + + - name: Read template version from .nf-core.yml + uses: nichmor/minimal-read-yaml@v0.0.2 + id: read_yml + with: + config: ${{ github.workspace }}/.nf-core.yml + + - name: Install nf-core + run: | + python -m pip install --upgrade pip + pip install nf-core==${{ steps.read_yml.outputs['nf_core_version'] }} + + - name: Check nf-core outdated + id: nf_core_outdated + 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 + if: | + contains(env.OUTPUT, 'nf-core') + with: + repo-token: ${{ secrets.NF_CORE_BOT_AUTH_TOKEN }} + allow-repeats: false + message: | + > [!WARNING] + > Newer version of the nf-core template is available. + > + > 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). + # diff --git a/.gitignore b/.gitignore index 4a37b601..fd2afe07 100644 --- a/.gitignore +++ b/.gitignore @@ -6,7 +6,6 @@ results/ testing/ testing* *.pyc -.vscode -.nf-test +null/ .nf-test.log -test-datasets/ +.nf-test/ diff --git a/.gitpod.yml b/.gitpod.yml index acf72695..1591998e 100644 --- a/.gitpod.yml +++ b/.gitpod.yml @@ -1,21 +1,23 @@ -image: nfcore/gitpod:latest +image: nfcore/gitpod:dev tasks: - name: Update Nextflow and setup pre-commit command: | pre-commit install --install-hooks nextflow self-update + - name: conda update + command: | + conda update --all --yes - name: unset JAVA_TOOL_OPTIONS command: | unset JAVA_TOOL_OPTIONS + vscode: extensions: # based on nf-core.nf-core-extensionpack - - codezombiech.gitignore # Language support for .gitignore files - # - cssho.vscode-svgviewer #Β SVG viewer - - esbenp.prettier-vscode # Markdown/CommonMark linting and style checking for Visual Studio Code - - eamodio.gitlens # Quickly glimpse into whom, why, and when a line or code block was changed + #- 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 + - 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 61d85c35..1eee6001 100644 --- a/.nf-core.yml +++ b/.nf-core.yml @@ -1,8 +1,22 @@ -repository_type: pipeline +bump_version: null lint: - files_unchanged: - - .gitattributes + actions_ci: false files_exist: - - bin/markdown_to_html.py - actions_ci: False - multiqc_config: False + - lib/nfcore_external_java_deps.jar + - conf/modules.config + modules_config: false +nf_core_version: 3.0.2 +org_path: null +repository_type: pipeline +template: + author: Phil Ewels, Sateesh Peri + description: Methylation (Bisulfite-Sequencing) Best Practice analysis pipeline, + part of the nf-core community. + force: false + is_nfcore: true + name: methylseq + org: nf-core + outdir: . + skip_features: null + version: 2.7.0 +update: null diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 0c31cdb9..9e9f0e1c 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,5 +1,13 @@ repos: - repo: https://github.com/pre-commit/mirrors-prettier - rev: "v2.7.1" + rev: "v3.1.0" hooks: - id: prettier + additional_dependencies: + - prettier@3.2.5 + + - repo: https://github.com/editorconfig-checker/editorconfig-checker.python + rev: "3.0.3" + hooks: + - id: editorconfig-checker + alias: ec diff --git a/CHANGELOG.md b/CHANGELOG.md index ecff842f..22560fce 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,34 @@ # nf-core/methylseq +## [v2.7.0](https://github.com/nf-core/methylseq/releases/tag/2.7.0) - [2024-10-25] + +### Bug fixes & refactoring + +- πŸ”„ Updated template to nf-core/tools v2.12 [#377](https://github.com/nf-core/methylseq/pull/377) +- πŸ”„ Updated template to nf-core/tools v2.13 [#380](https://github.com/nf-core/methylseq/pull/380) +- πŸ”„ Updated template to nf-core/tools v2.13.1 [#384](https://github.com/nf-core/methylseq/pull/384) +- πŸ”„ Updated template to nf-core/tools v2.14.1 [#399](https://github.com/nf-core/methylseq/pull/399) +- πŸ”„ Updated template to nf-core/tools v3.0.2 [#426](https://github.com/nf-core/methylseq/pull/426) +- πŸ› fix sample/replicate merge [#401](https://github.com/nf-core/methylseq/pull/401) +- πŸ› fix fasta reference usage [#403](https://github.com/nf-core/methylseq/pull/403) +- πŸ› fix missing type field in nextflow_schema.json (issue-#361) [#417](https://github.com/nf-core/methylseq/pull/417) +- πŸ› fix samtools sort overwrites (issue-#328) [#414](https://github.com/nf-core/methylseq/pull/414) +- πŸ› fix bwameth pipeline skipping all bwameth steps when --fasta, --fasta_index, and --bwa_meth_index are provided. (issue-#396) [#414](https://github.com/nf-core/methylseq/pull/414) +- πŸ› fix typo in samplesheet in README and usage doc (issue-#391) [#414](https://github.com/nf-core/methylseq/pull/418) +- πŸ› stage fasta separately from the index folders for bismark & bwameth. Fixes issue with using a local copy of fasta (issue-#305) [#428](https://github.com/nf-core/methylseq/pull/428) +- πŸ› fix bismark, bwameth align modules + other module updates + update snaps [#432](https://github.com/nf-core/methylseq/pull/432) + +### Pipeline Updates + +- πŸ”§ Updated nf-core modules for preseq [#390](https://github.com/nf-core/methylseq/pull/390) +- πŸ”§ Added new trimgalore length_trim param [#416](https://github.com/nf-core/methylseq/pull/416) +- πŸ”§ Updated nf-core modules [#414](https://github.com/nf-core/methylseq/pull/414) +- πŸ”§ Updated nf-core sub-workflows [#414](https://github.com/nf-core/methylseq/pull/414) +- πŸ”§ Removed `conf/modules.config` and introduce separate `nextflow.config` [#414](https://github.com/nf-core/methylseq/pull/414) +- πŸ”§ Added sub-workflow & pipeline level nf-tests [#414](https://github.com/nf-core/methylseq/pull/414) +- πŸ”§ Pipeline metro map added by @Shaun-Regenbaum , @FelixKrueger , @ewels [#438](https://github.com/nf-core/methylseq/pull/438) +- πŸ”§ Add Bismark HISAT2 index to igenomes [#444](https://github.com/nf-core/methylseq/pull/444) + ## [v2.6.0](https://github.com/nf-core/methylseq/releases/tag/2.6.0) - 2024-01-05 ### Bug fixes & refactoring diff --git a/LICENSE b/LICENSE index 1e87cfa3..6ae63b3c 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) Phil Ewels +Copyright (c) Phil Ewels, Sateesh Peri 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 0b928113..00202575 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,19 @@ -# ![nf-core/methylseq](docs/images/nf-core-methylseq_logo_light.png#gh-light-mode-only) ![nf-core/methylseq](docs/images/nf-core-methylseq_logo_dark.png#gh-dark-mode-only) - -[![GitHub Actions CI Status](https://github.com/nf-core/methylseq/workflows/nf-core%20CI/badge.svg)](https://github.com/nf-core/methylseq/actions?query=workflow%3A%22nf-core+CI%22) -[![GitHub Actions Linting Status](https://github.com/nf-core/methylseq/workflows/nf-core%20linting/badge.svg)](https://github.com/nf-core/methylseq/actions?query=workflow%3A%22nf-core+linting%22)[![AWS CI](https://img.shields.io/badge/CI%20tests-full%20size-FF9900?labelColor=000000&logo=Amazon%20AWS)](https://nf-co.re/methylseq/results)[![Cite with Zenodo](http://img.shields.io/badge/DOI-10.5281/zenodo.1343417-1073c8?labelColor=000000)](https://doi.org/10.5281/zenodo.1343417) - -[![Nextflow](https://img.shields.io/badge/nextflow%20DSL2-%E2%89%A523.04.0-23aa62.svg)](https://www.nextflow.io/) +

+ + + nf-core/methylseq + +

+ +[![GitHub Actions CI Status](https://github.com/nf-core/methylseq/actions/workflows/ci.yml/badge.svg)](https://github.com/nf-core/methylseq/actions/workflows/ci.yml) +[![GitHub Actions Linting Status](https://github.com/nf-core/methylseq/actions/workflows/linting.yml/badge.svg)](https://github.com/nf-core/methylseq/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/methylseq/results)[![Cite with Zenodo](http://img.shields.io/badge/DOI-10.5281/zenodo.1343417-1073c8?labelColor=000000)](https://doi.org/10.5281/zenodo.1343417) +[![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/) [![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 Nextflow Tower](https://img.shields.io/badge/Launch%20%F0%9F%9A%80-Nextflow%20Tower-%234256e7)](https://tower.nf/launch?pipeline=https://github.com/nf-core/methylseq) -[![nf-test](https://img.shields.io/badge/tested_with-nf--test-337ab7.svg)](https://github.com/askimed/nf-test) +[![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/methylseq) [![Get help on Slack](http://img.shields.io/badge/slack-nf--core%20%23methylseq-4A154B?labelColor=000000&logo=slack)](https://nfcore.slack.com/channels/methylseq)[![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) @@ -16,6 +21,8 @@ **nf-core/methylseq** is a bioinformatics analysis pipeline used for Methylation (Bisulfite) sequencing data. It pre-processes raw data from FastQ inputs, aligns the reads and performs extensive quality-control on the results. +![nf-core/methylseq metro map](docs/images/metromap.png) + The pipeline is built using [Nextflow](https://www.nextflow.io), a workflow tool to run tasks across multiple compute infrastructures in a very portable manner. It uses Docker / Singularity containers making installation trivial and results highly reproducible. On release, automated continuous integration tests run the pipeline on a full-sized dataset on the AWS cloud infrastructure. This ensures that the pipeline runs on AWS, has sensible resource allocation defaults set to run on real-world datasets, and permits the persistent storage of results to benchmark between pipeline releases and other analysis sources.The results obtained from the full-sized test can be viewed on the [nf-core website](https://nf-co.re/methylseq/results). @@ -23,22 +30,23 @@ On release, automated continuous integration tests run the pipeline on a full-si ## Pipeline Summary The pipeline allows you to choose between running either [Bismark](https://github.com/FelixKrueger/Bismark) or [bwa-meth](https://github.com/brentp/bwa-meth) / [MethylDackel](https://github.com/dpryan79/methyldackel). + Choose between workflows by using `--aligner bismark` (default, uses bowtie2 for alignment), `--aligner bismark_hisat` or `--aligner bwameth`. -| Step | Bismark workflow | bwa-meth workflow | -| -------------------------------------------- | ---------------- | --------------------- | -| Generate Reference Genome Index _(optional)_ | Bismark | bwa-meth | -| Merge re-sequenced FastQ files | cat | cat | -| Raw data QC | FastQC | FastQC | -| Adapter sequence trimming | Trim Galore! | Trim Galore! | -| Align Reads | Bismark | bwa-meth | -| Deduplicate Alignments | Bismark | Picard MarkDuplicates | -| Extract methylation calls | Bismark | MethylDackel | -| Sample report | Bismark | - | -| Summary Report | Bismark | - | -| Alignment QC | Qualimap | Qualimap | -| Sample complexity | Preseq | Preseq | -| Project Report | MultiQC | MultiQC | +| Step | Bismark workflow | bwa-meth workflow | +| -------------------------------------------- | ------------------------ | --------------------- | +| Generate Reference Genome Index _(optional)_ | Bismark | bwa-meth | +| Merge re-sequenced FastQ files | cat | cat | +| Raw data QC | FastQC | FastQC | +| Adapter sequence trimming | Trim Galore! | Trim Galore! | +| Align Reads | Bismark (bowtie2/hisat2) | bwa-meth | +| Deduplicate Alignments | Bismark | Picard MarkDuplicates | +| Extract methylation calls | Bismark | MethylDackel | +| Sample report | Bismark | - | +| Summary Report | Bismark | - | +| Alignment QC | Qualimap | Qualimap | +| Sample complexity | Preseq | Preseq | +| Project Report | MultiQC | MultiQC | ## Usage @@ -50,11 +58,11 @@ First, prepare a samplesheet with your input data that looks as follows: `samplesheet.csv`: ```csv -sample,fastq_1,fastq_2 -SRR389222_sub1,https://github.com/nf-core/test-datasets/raw/methylseq/testdata/SRR389222_sub1.fastq.gz -SRR389222_sub2,https://github.com/nf-core/test-datasets/raw/methylseq/testdata/SRR389222_sub2.fastq.gz -SRR389222_sub2,https://github.com/nf-core/test-datasets/raw/methylseq/testdata/SRR389222_sub3.fastq.gz -Ecoli_10K_methylated,https://github.com/nf-core/test-datasets/raw/methylseq/testdata/Ecoli_10K_methylated_R1.fastq.gz,https://github.com/nf-core/test-datasets/raw/methylseq/testdata/Ecoli_10K_methylated_R2.fastq.gz +sample,fastq_1,fastq_2,genome +SRR389222_sub1,https://github.com/nf-core/test-datasets/raw/methylseq/testdata/SRR389222_sub1.fastq.gz,, +SRR389222_sub2,https://github.com/nf-core/test-datasets/raw/methylseq/testdata/SRR389222_sub2.fastq.gz,, +SRR389222_sub3,https://github.com/nf-core/test-datasets/raw/methylseq/testdata/SRR389222_sub3.fastq.gz,, +Ecoli_10K_methylated,https://github.com/nf-core/test-datasets/raw/methylseq/testdata/Ecoli_10K_methylated_R1.fastq.gz,https://github.com/nf-core/test-datasets/raw/methylseq/testdata/Ecoli_10K_methylated_R2.fastq.gz, ``` Each row represents a fastq file (single-end) or a pair of fastq files (paired end). @@ -66,8 +74,7 @@ nextflow run nf-core/methylseq --input samplesheet.csv --outdir --genom ``` > [!WARNING] -> 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/usage/configuration#custom-configuration-files). +> 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/usage/getting_started/configuration#custom-configuration-files). For more details and further functionality, please refer to the [usage documentation](https://nf-co.re/methylseq/usage) and the [parameter documentation](https://nf-co.re/methylseq/parameters). @@ -91,6 +98,7 @@ These scripts were originally written for use at the [National Genomics Infrastr - Rickard HammarΓ©n ([@Hammarn](https://github.com/Hammarn/)) - Alexander Peltzer ([@apeltzer](https://github.com/apeltzer/)) - Patrick HΓΌther ([@phue](https://github.com/phue/)) + - Maxime U Garcia ([@maxulysse](https://github.com/maxulysse/)) ## Contributions and Support diff --git a/assets/email_template.html b/assets/email_template.html index f0081ad9..264df06c 100644 --- a/assets/email_template.html +++ b/assets/email_template.html @@ -12,7 +12,7 @@ -

nf-core/methylseq v${version}

+

nf-core/methylseq ${version}

Run Name: $runName

<% if (!success){ diff --git a/assets/email_template.txt b/assets/email_template.txt index 82ca1dc6..d8e55c6c 100644 --- a/assets/email_template.txt +++ b/assets/email_template.txt @@ -4,7 +4,7 @@ |\\ | |__ __ / ` / \\ |__) |__ } { | \\| | \\__, \\__/ | \\ |___ \\`-._,-`-, `._,._,' - nf-core/methylseq v${version} + nf-core/methylseq ${version} ---------------------------------------------------- Run Name: $runName diff --git a/assets/multiqc_config.yml b/assets/multiqc_config.yml index c6e99955..37078f04 100644 --- a/assets/multiqc_config.yml +++ b/assets/multiqc_config.yml @@ -1,7 +1,7 @@ report_comment: > - This report has been generated by the nf-core/methylseq + This report has been generated by the nf-core/methylseq analysis pipeline. For information about how to interpret these results, please see the - documentation. + documentation. report_section_order: "nf-core-methylseq-methods-description": order: -1000 @@ -11,6 +11,9 @@ report_section_order: order: -1002 export_plots: true + +disable_version_detection: true + table_columns_visible: QualiMap: avg_gc: false diff --git a/assets/nf-core-methylseq_logo_light.png b/assets/nf-core-methylseq_logo_light.png index cae5ed6a..1067bdf9 100644 Binary files a/assets/nf-core-methylseq_logo_light.png and b/assets/nf-core-methylseq_logo_light.png differ diff --git a/assets/samplesheet.csv b/assets/samplesheet.csv index aa6b7542..ee7324b3 100644 --- a/assets/samplesheet.csv +++ b/assets/samplesheet.csv @@ -2,4 +2,4 @@ sample,fastq_1,fastq_2,genome SRR389222_sub1,https://github.com/nf-core/test-datasets/raw/methylseq/testdata/SRR389222_sub1.fastq.gz,, SRR389222_sub2,https://github.com/nf-core/test-datasets/raw/methylseq/testdata/SRR389222_sub2.fastq.gz,, SRR389222_sub3,https://github.com/nf-core/test-datasets/raw/methylseq/testdata/SRR389222_sub3.fastq.gz,, -Ecoli,https://github.com/nf-core/test-datasets/raw/methylseq/testdata/Ecoli_10K_methylated_R1.fastq.gz,https://github.com/nf-core/test-datasets/raw/methylseq/testdata/Ecoli_10K_methylated_R2.fastq.gz, +Ecoli_10K_methylated,https://github.com/nf-core/test-datasets/raw/methylseq/testdata/Ecoli_10K_methylated_R1.fastq.gz,https://github.com/nf-core/test-datasets/raw/methylseq/testdata/Ecoli_10K_methylated_R2.fastq.gz, diff --git a/assets/schema_input.json b/assets/schema_input.json index 9e51e2e9..cc4330d8 100644 --- a/assets/schema_input.json +++ b/assets/schema_input.json @@ -1,5 +1,5 @@ { - "$schema": "http://json-schema.org/draft-07/schema", + "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://raw.githubusercontent.com/nf-core/methylseq/master/assets/schema_input.json", "title": "nf-core/methylseq pipeline - params.input schema", "description": "Schema for the file provided with params.input", @@ -21,20 +21,18 @@ "errorMessage": "FastQ file for reads 1 must be provided, cannot contain spaces and must have extension '.fq.gz' or '.fastq.gz'" }, "fastq_2": { - "errorMessage": "FastQ file for reads 2 cannot contain spaces and must have extension '.fq.gz' or '.fastq.gz'", "type": "string", "format": "file-path", "exists": true, - "anyOf": [ - { - "type": "string", - "pattern": "^\\S+\\.f(ast)?q\\.gz$" - }, - { - "type": "string", - "maxLength": 0 - } - ] + "pattern": "^\\S+\\.f(ast)?q\\.gz$", + "errorMessage": "FastQ file for reads 2 cannot contain spaces and must have extension '.fq.gz' or '.fastq.gz'" + }, + "genome": { + "type": "string", + "format": "file-path", + "exists": true, + "pattern": "^[a-zA-Z0-9._-]+$", + "errorMessage": "Invalid reference genome name" } }, "required": ["sample", "fastq_1"] diff --git a/bin/check_samplesheet.py b/bin/check_samplesheet.py deleted file mode 100755 index da1e666f..00000000 --- a/bin/check_samplesheet.py +++ /dev/null @@ -1,263 +0,0 @@ -#!/usr/bin/env python - - -"""Provide a command line tool to validate and transform tabular samplesheets.""" - - -import argparse -import csv -import logging -import sys -from collections import Counter -from pathlib import Path - -logger = logging.getLogger() - - -class RowChecker: - """ - Define a service that can validate and transform each given row. - - Attributes: - modified (list): A list of dicts, where each dict corresponds to a previously - validated and transformed row. The order of rows is maintained. - - """ - - VALID_FORMATS = ( - ".fq.gz", - ".fastq.gz", - ) - - def __init__( - self, - sample_col="sample", - first_col="fastq_1", - second_col="fastq_2", - single_col="single_end", - **kwargs, - ): - """ - Initialize the row checker with the expected column names. - - Args: - sample_col (str): The name of the column that contains the sample name - (default "sample"). - first_col (str): The name of the column that contains the first (or only) - FASTQ file path (default "fastq_1"). - second_col (str): The name of the column that contains the second (if any) - FASTQ file path (default "fastq_2"). - single_col (str): The name of the new column that will be inserted and - records whether the sample contains single- or paired-end sequencing - reads (default "single_end"). - - """ - super().__init__(**kwargs) - self._sample_col = sample_col - self._first_col = first_col - self._second_col = second_col - self._single_col = single_col - self._seen = set() - self.modified = [] - - def validate_and_transform(self, row): - """ - Perform all validations on the given row and insert the read pairing status. - - Args: - row (dict): A mapping from column headers (keys) to elements of that row - (values). - - """ - self._validate_sample(row) - self._validate_first(row) - self._validate_second(row) - self._validate_pair(row) - self._seen.add((row[self._sample_col], row[self._first_col])) - self.modified.append(row) - - def _validate_sample(self, row): - """Assert that the sample name exists and convert spaces to underscores.""" - if len(row[self._sample_col]) <= 0: - raise AssertionError("Sample input is required.") - # Sanitize samples slightly. - row[self._sample_col] = row[self._sample_col].replace(" ", "_") - - def _validate_first(self, row): - """Assert that the first FASTQ entry is non-empty and has the right format.""" - if len(row[self._first_col]) <= 0: - raise AssertionError("At least the first FASTQ file is required.") - self._validate_fastq_format(row[self._first_col]) - - def _validate_second(self, row): - """Assert that the second FASTQ entry has the right format if it exists.""" - if len(row[self._second_col]) > 0: - self._validate_fastq_format(row[self._second_col]) - - def _validate_pair(self, row): - """Assert that read pairs have the same file extension. Report pair status.""" - if row[self._first_col] and row[self._second_col]: - row[self._single_col] = False - first_col_suffix = Path(row[self._first_col]).suffixes[-2:] - second_col_suffix = Path(row[self._second_col]).suffixes[-2:] - if first_col_suffix != second_col_suffix: - raise AssertionError("FASTQ pairs must have the same file extensions.") - else: - row[self._single_col] = True - - def _validate_fastq_format(self, filename): - """Assert that a given filename has one of the expected FASTQ extensions.""" - if not any(filename.endswith(extension) for extension in self.VALID_FORMATS): - raise AssertionError( - f"The FASTQ file has an unrecognized extension: {filename}\n" - f"It should be one of: {', '.join(self.VALID_FORMATS)}" - ) - - def validate_unique_samples(self): - """ - Assert that the combination of sample name and FASTQ filename is unique. - - In addition to the validation, also rename all samples to have a suffix of _T{n}, where n is the - number of times the same sample exist, but with different FASTQ files, e.g., multiple runs per experiment. - - """ - if len(self._seen) != len(self.modified): - raise AssertionError("The pair of sample name and FASTQ must be unique.") - seen = Counter() - for row in self.modified: - sample = row[self._sample_col] - seen[sample] += 1 - row[self._sample_col] = f"{sample}_T{seen[sample]}" - - -def read_head(handle, num_lines=10): - """Read the specified number of lines from the current position in the file.""" - lines = [] - for idx, line in enumerate(handle): - if idx == num_lines: - break - lines.append(line) - return "".join(lines) - - -def sniff_format(handle): - """ - Detect the tabular format. - - Args: - handle (text file): A handle to a `text file`_ object. The read position is - expected to be at the beginning (index 0). - - Returns: - csv.Dialect: The detected tabular format. - - .. _text file: - https://docs.python.org/3/glossary.html#term-text-file - - """ - peek = read_head(handle) - handle.seek(0) - sniffer = csv.Sniffer() - dialect = sniffer.sniff(peek) - return dialect - - -def check_samplesheet(file_in, file_out): - """ - Check that the tabular samplesheet has the structure expected by nf-core pipelines. - - Validate the general shape of the table, expected columns, and each row. Also add - an additional column which records whether one or two FASTQ reads were found. - - Args: - file_in (pathlib.Path): The given tabular samplesheet. The format can be either - CSV, TSV, or any other format automatically recognized by ``csv.Sniffer``. - file_out (pathlib.Path): Where the validated and transformed samplesheet should - be created; always in CSV format. - - Example: - This function checks that the samplesheet follows the following structure, - see also the `viral recon samplesheet`_:: - - sample,fastq_1,fastq_2 - SAMPLE_PE,SAMPLE_PE_RUN1_1.fastq.gz,SAMPLE_PE_RUN1_2.fastq.gz - SAMPLE_PE,SAMPLE_PE_RUN2_1.fastq.gz,SAMPLE_PE_RUN2_2.fastq.gz - SAMPLE_SE,SAMPLE_SE_RUN1_1.fastq.gz, - - .. _viral recon samplesheet: - https://raw.githubusercontent.com/nf-core/test-datasets/viralrecon/samplesheet/samplesheet_test_illumina_amplicon.csv - - """ - required_columns = {"sample", "fastq_1", "fastq_2"} - # See https://docs.python.org/3.9/library/csv.html#id3 to read up on `newline=""`. - with file_in.open(newline="") as in_handle: - dialect = sniff_format(in_handle) - logger.info(f"Detected samplesheet format: '{dialect.delimiter}'") - reader = csv.DictReader(in_handle, dialect=dialect) - # Validate the existence of the expected header columns. - if not required_columns.issubset(reader.fieldnames): - req_cols = ", ".join(required_columns) - logger.critical(f"The sample sheet **must** contain these column headers: {req_cols}") - logger.critical(f"Found the following: {', '.join(reader.fieldnames)}") - sys.exit(1) - # Validate each row. - checker = RowChecker() - for i, row in enumerate(reader): - try: - checker.validate_and_transform(row) - except AssertionError as error: - logger.critical(f"{str(error)} On line {i + 2}.") - sys.exit(1) - # Ties into FastQ merging process - checker.validate_unique_samples() - header = list(reader.fieldnames) - header.insert(1, "single_end") - # See https://docs.python.org/3.9/library/csv.html#id3 to read up on `newline=""`. - with file_out.open(mode="w", newline="") as out_handle: - writer = csv.DictWriter(out_handle, header, delimiter=",") - writer.writeheader() - for row in checker.modified: - writer.writerow(row) - - -def parse_args(argv=None): - """Define and immediately parse command line arguments.""" - parser = argparse.ArgumentParser( - description="Validate and transform a tabular samplesheet.", - epilog="Example: python check_samplesheet.py samplesheet.csv samplesheet.valid.csv", - ) - parser.add_argument( - "file_in", - metavar="FILE_IN", - type=Path, - help="Tabular input samplesheet in CSV or TSV format.", - ) - parser.add_argument( - "file_out", - metavar="FILE_OUT", - type=Path, - help="Transformed output samplesheet in CSV format.", - ) - parser.add_argument( - "-l", - "--log-level", - help="The desired log level (default WARNING).", - choices=("CRITICAL", "ERROR", "WARNING", "INFO", "DEBUG"), - default="INFO", - ) - return parser.parse_args(argv) - - -def main(argv=None): - """Coordinate argument parsing and program execution.""" - args = parse_args(argv) - logging.basicConfig(level=args.log_level, format="[%(levelname)s] %(message)s") - if not args.file_in.is_file(): - logger.error(f"The given input file {args.file_in} was not found!") - sys.exit(2) - args.file_out.parent.mkdir(parents=True, exist_ok=True) - check_samplesheet(args.file_in, args.file_out) - - -if __name__ == "__main__": - sys.exit(main()) diff --git a/conf/base.config b/conf/base.config index e19bc5bb..3b0ca369 100644 --- a/conf/base.config +++ b/conf/base.config @@ -11,9 +11,10 @@ nextflow.enable.configProcessNamesValidation = false process { - cpus = { check_max( 1 * task.attempt, 'cpus' ) } - memory = { check_max( 6.GB * task.attempt, 'memory' ) } - time = { check_max( 4.h * task.attempt, 'time' ) } + + cpus = { 1 * task.attempt } + memory = { 6.GB * task.attempt } + time = { 4.h * task.attempt } errorStrategy = { task.exitStatus in ((130..145) + 104) ? 'retry' : 'finish' } maxRetries = 1 @@ -26,30 +27,30 @@ process { // adding in your local modules too. // See https://www.nextflow.io/docs/latest/config.html#config-process-selectors withLabel:process_single { - cpus = { check_max( 1 , 'cpus' ) } - memory = { check_max( 6.GB * task.attempt, 'memory' ) } - time = { check_max( 4.h * task.attempt, 'time' ) } + cpus = { 1 } + memory = { 6.GB * task.attempt } + time = { 4.h * task.attempt } } withLabel:process_low { - cpus = { check_max( 2 * task.attempt, 'cpus' ) } - memory = { check_max( 12.GB * task.attempt, 'memory' ) } - time = { check_max( 4.h * task.attempt, 'time' ) } + cpus = { 2 * task.attempt } + memory = { 12.GB * task.attempt } + time = { 4.h * task.attempt } } withLabel:process_medium { - cpus = { check_max( 6 * task.attempt, 'cpus' ) } - memory = { check_max( 36.GB * task.attempt, 'memory' ) } - time = { check_max( 8.h * task.attempt, 'time' ) } + cpus = { 6 * task.attempt } + memory = { 36.GB * task.attempt } + time = { 8.h * task.attempt } } withLabel:process_high { - cpus = { check_max( 12 * task.attempt, 'cpus' ) } - memory = { check_max( 72.GB * task.attempt, 'memory' ) } - time = { check_max( 16.h * task.attempt, 'time' ) } + cpus = { 12 * task.attempt } + memory = { 72.GB * task.attempt } + time = { 16.h * task.attempt } } withLabel:process_long { - time = { check_max( 20.h * task.attempt, 'time' ) } + time = { 20.h * task.attempt } } withLabel:process_high_memory { - memory = { check_max( 200.GB * task.attempt, 'memory' ) } + memory = { 200.GB * task.attempt } } withLabel:error_ignore { errorStrategy = 'ignore' @@ -58,19 +59,16 @@ process { errorStrategy = 'retry' maxRetries = 2 } - withName:CUSTOM_DUMPSOFTWAREVERSIONS { - cache = false - } withName: BISMARK_ALIGN { - time = { check_max( 8.d * task.attempt, 'time' ) } + time = { 8.d * task.attempt } } withName: BISMARK_DEDUPLICATE { - time = { check_max( 2.d * task.attempt, 'time' ) } + time = { 2.d * task.attempt } } withName: BISMARK_METHYLATIONEXTRACTOR { - time = { check_max( 1.d * task.attempt, 'time' ) } + time = { 1.d * task.attempt } } withName: BWAMETH_ALIGN { - time = { check_max( 6.d * task.attempt, 'time' ) } + time = { 6.d * task.attempt } } } diff --git a/conf/igenomes.config b/conf/igenomes.config index 8442ed57..3edfaa7e 100644 --- a/conf/igenomes.config +++ b/conf/igenomes.config @@ -13,10 +13,12 @@ params { genomes { 'GRCh37' { fasta = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/WholeGenomeFasta/genome.fa" + fasta_index = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/WholeGenomeFasta/genome.fa.fai" bwa = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/BWAIndex/version0.6.0/" bowtie2 = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/Bowtie2Index/" star = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/STARIndex/" bismark = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/BismarkIndex/" + bwameth = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/BwamethIndex/" gtf = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Annotation/Genes/genes.gtf" bed12 = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Annotation/Genes/genes.bed" readme = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Annotation/README.txt" @@ -25,19 +27,23 @@ params { blacklist = "${projectDir}/assets/blacklists/GRCh37-blacklist.bed" } 'GRCh38' { - fasta = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Annotation/Genes/genes.bed" - mito_name = "chrM" - macs_gsize = "2.7e9" - blacklist = "${projectDir}/assets/blacklists/hg38-blacklist.bed" + fasta = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/WholeGenomeFasta/genome.fa" + fasta_index = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/WholeGenomeFasta/genome.fa.fai" + bwa = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/BismarkIndex/" + bismark_hisat2 = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/BismarkIndex/Hisat2Index/" + bwameth = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/BwamethIndex/" + gtf = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Annotation/Genes/genes.bed" + mito_name = "chrM" + macs_gsize = "2.7e9" + blacklist = "${projectDir}/assets/blacklists/hg38-blacklist.bed" } 'CHM13' { fasta = "${params.igenomes_base}/Homo_sapiens/UCSC/CHM13/Sequence/WholeGenomeFasta/genome.fa" + fasta_index = "${params.igenomes_base}/Homo_sapiens/UCSC/CHM13/Sequence/WholeGenomeFasta/genome.fa.fai" bwa = "${params.igenomes_base}/Homo_sapiens/UCSC/CHM13/Sequence/BWAIndex/" bwamem2 = "${params.igenomes_base}/Homo_sapiens/UCSC/CHM13/Sequence/BWAmem2Index/" gtf = "${params.igenomes_base}/Homo_sapiens/NCBI/CHM13/Annotation/Genes/genes.gtf" @@ -46,6 +52,7 @@ params { } 'GRCm38' { fasta = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/WholeGenomeFasta/genome.fa" + fasta_index = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/WholeGenomeFasta/genome.fa.fai" bwa = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/BWAIndex/version0.6.0/" bowtie2 = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/Bowtie2Index/" star = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/STARIndex/" @@ -59,6 +66,7 @@ params { } 'TAIR10' { fasta = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/WholeGenomeFasta/genome.fa" + fasta_index = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/WholeGenomeFasta/genome.fa.fai" bwa = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/BWAIndex/version0.6.0/" bowtie2 = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/Bowtie2Index/" star = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/STARIndex/" @@ -70,6 +78,7 @@ params { } 'EB2' { fasta = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/WholeGenomeFasta/genome.fa" + fasta_index = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/WholeGenomeFasta/genome.fa.fai" bwa = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/BWAIndex/version0.6.0/" bowtie2 = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/Bowtie2Index/" star = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/STARIndex/" @@ -80,6 +89,7 @@ params { } 'UMD3.1' { fasta = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/WholeGenomeFasta/genome.fa" + fasta_index = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/WholeGenomeFasta/genome.fa.fai" bwa = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/BWAIndex/version0.6.0/" bowtie2 = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/Bowtie2Index/" star = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/STARIndex/" @@ -91,6 +101,7 @@ params { } 'WBcel235' { fasta = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/WholeGenomeFasta/genome.fa" + fasta_index = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/WholeGenomeFasta/genome.fa.fai" bwa = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/BWAIndex/version0.6.0/" bowtie2 = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/Bowtie2Index/" star = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/STARIndex/" @@ -102,6 +113,7 @@ params { } 'CanFam3.1' { fasta = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/WholeGenomeFasta/genome.fa" + fasta_index = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/WholeGenomeFasta/genome.fa.fai" bwa = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/BWAIndex/version0.6.0/" bowtie2 = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/Bowtie2Index/" star = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/STARIndex/" @@ -113,6 +125,7 @@ params { } 'GRCz10' { fasta = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/WholeGenomeFasta/genome.fa" + fasta_index = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/WholeGenomeFasta/genome.fa.fai" bwa = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/BWAIndex/version0.6.0/" bowtie2 = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/Bowtie2Index/" star = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/STARIndex/" @@ -123,6 +136,7 @@ params { } 'BDGP6' { fasta = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/WholeGenomeFasta/genome.fa" + fasta_index = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/WholeGenomeFasta/genome.fa.fai" bwa = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/BWAIndex/version0.6.0/" bowtie2 = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/Bowtie2Index/" star = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/STARIndex/" @@ -134,6 +148,7 @@ params { } 'EquCab2' { fasta = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/WholeGenomeFasta/genome.fa" + fasta_index = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/WholeGenomeFasta/genome.fa.fai" bwa = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/BWAIndex/version0.6.0/" bowtie2 = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/Bowtie2Index/" star = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/STARIndex/" @@ -145,6 +160,7 @@ params { } 'EB1' { fasta = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/WholeGenomeFasta/genome.fa" + fasta_index = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/WholeGenomeFasta/genome.fa.fai" bwa = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/BWAIndex/version0.6.0/" bowtie2 = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/Bowtie2Index/" star = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/STARIndex/" @@ -155,6 +171,7 @@ params { } 'Galgal4' { fasta = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/WholeGenomeFasta/genome.fa" + fasta_index = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/WholeGenomeFasta/genome.fa.fai" bwa = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/BWAIndex/version0.6.0/" bowtie2 = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/Bowtie2Index/" star = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/STARIndex/" @@ -165,6 +182,7 @@ params { } 'Gm01' { fasta = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/WholeGenomeFasta/genome.fa" + fasta_index = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/WholeGenomeFasta/genome.fa.fai" bwa = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/BWAIndex/version0.6.0/" bowtie2 = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/Bowtie2Index/" star = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/STARIndex/" @@ -175,6 +193,7 @@ params { } 'Mmul_1' { fasta = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/WholeGenomeFasta/genome.fa" + fasta_index = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/WholeGenomeFasta/genome.fa.fai" bwa = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/BWAIndex/version0.6.0/" bowtie2 = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/Bowtie2Index/" star = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/STARIndex/" @@ -186,6 +205,7 @@ params { } 'IRGSP-1.0' { fasta = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/WholeGenomeFasta/genome.fa" + fasta_index = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/WholeGenomeFasta/genome.fa.fai" bwa = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/BWAIndex/version0.6.0/" bowtie2 = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/Bowtie2Index/" star = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/STARIndex/" @@ -196,6 +216,7 @@ params { } 'CHIMP2.1.4' { fasta = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/WholeGenomeFasta/genome.fa" + fasta_index = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/WholeGenomeFasta/genome.fa.fai" bwa = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/BWAIndex/version0.6.0/" bowtie2 = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/Bowtie2Index/" star = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/STARIndex/" @@ -207,6 +228,7 @@ params { } 'Rnor_5.0' { fasta = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_5.0/Sequence/WholeGenomeFasta/genome.fa" + fasta_index = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_5.0/Sequence/WholeGenomeFasta/genome.fa.fai" bwa = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_5.0/Sequence/BWAIndex/version0.6.0/" bowtie2 = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_5.0/Sequence/Bowtie2Index/" star = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_5.0/Sequence/STARIndex/" @@ -217,6 +239,7 @@ params { } 'Rnor_6.0' { fasta = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/WholeGenomeFasta/genome.fa" + fasta_index = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/WholeGenomeFasta/genome.fa.fai" bwa = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/BWAIndex/version0.6.0/" bowtie2 = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/Bowtie2Index/" star = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/STARIndex/" @@ -227,6 +250,7 @@ params { } 'R64-1-1' { fasta = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/WholeGenomeFasta/genome.fa" + fasta_index = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/WholeGenomeFasta/genome.fa.fai" bwa = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/BWAIndex/version0.6.0/" bowtie2 = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/Bowtie2Index/" star = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/STARIndex/" @@ -238,6 +262,7 @@ params { } 'EF2' { fasta = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/WholeGenomeFasta/genome.fa" + fasta_index = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/WholeGenomeFasta/genome.fa.fai" bwa = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/BWAIndex/version0.6.0/" bowtie2 = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/Bowtie2Index/" star = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/STARIndex/" @@ -250,6 +275,7 @@ params { } 'Sbi1' { fasta = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/WholeGenomeFasta/genome.fa" + fasta_index = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/WholeGenomeFasta/genome.fa.fai" bwa = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/BWAIndex/version0.6.0/" bowtie2 = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/Bowtie2Index/" star = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/STARIndex/" @@ -260,6 +286,7 @@ params { } 'Sscrofa10.2' { fasta = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/WholeGenomeFasta/genome.fa" + fasta_index = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/WholeGenomeFasta/genome.fa.fai" bwa = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/BWAIndex/version0.6.0/" bowtie2 = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/Bowtie2Index/" star = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/STARIndex/" @@ -271,6 +298,7 @@ params { } 'AGPv3' { fasta = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/WholeGenomeFasta/genome.fa" + fasta_index = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/WholeGenomeFasta/genome.fa.fai" bwa = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/BWAIndex/version0.6.0/" bowtie2 = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/Bowtie2Index/" star = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/STARIndex/" @@ -281,6 +309,7 @@ params { } 'hg38' { fasta = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Sequence/WholeGenomeFasta/genome.fa" + fasta_index = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Sequence/WholeGenomeFasta/genome.fa.fai" bwa = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Sequence/BWAIndex/version0.6.0/" bowtie2 = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Sequence/Bowtie2Index/" star = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Sequence/STARIndex/" @@ -293,6 +322,7 @@ params { } 'hg19' { fasta = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Sequence/WholeGenomeFasta/genome.fa" + fasta_index = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Sequence/WholeGenomeFasta/genome.fa.fai" bwa = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Sequence/BWAIndex/version0.6.0/" bowtie2 = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Sequence/Bowtie2Index/" star = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Sequence/STARIndex/" @@ -306,6 +336,7 @@ params { } 'mm10' { fasta = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Sequence/WholeGenomeFasta/genome.fa" + fasta_index = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Sequence/WholeGenomeFasta/genome.fa.fai" bwa = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Sequence/BWAIndex/version0.6.0/" bowtie2 = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Sequence/Bowtie2Index/" star = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Sequence/STARIndex/" @@ -319,6 +350,7 @@ params { } 'bosTau8' { fasta = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Sequence/WholeGenomeFasta/genome.fa" + fasta_index = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Sequence/WholeGenomeFasta/genome.fa.fai" bwa = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Sequence/BWAIndex/version0.6.0/" bowtie2 = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Sequence/Bowtie2Index/" star = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Sequence/STARIndex/" @@ -329,6 +361,7 @@ params { } 'ce10' { fasta = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Sequence/WholeGenomeFasta/genome.fa" + fasta_index = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Sequence/WholeGenomeFasta/genome.fa.fai" bwa = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Sequence/BWAIndex/version0.6.0/" bowtie2 = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Sequence/Bowtie2Index/" star = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Sequence/STARIndex/" @@ -341,6 +374,7 @@ params { } 'canFam3' { fasta = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Sequence/WholeGenomeFasta/genome.fa" + fasta_index = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Sequence/WholeGenomeFasta/genome.fa.fai" bwa = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Sequence/BWAIndex/version0.6.0/" bowtie2 = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Sequence/Bowtie2Index/" star = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Sequence/STARIndex/" @@ -352,6 +386,7 @@ params { } 'danRer10' { fasta = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Sequence/WholeGenomeFasta/genome.fa" + fasta_index = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Sequence/WholeGenomeFasta/genome.fa.fai" bwa = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Sequence/BWAIndex/version0.6.0/" bowtie2 = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Sequence/Bowtie2Index/" star = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Sequence/STARIndex/" @@ -363,6 +398,7 @@ params { } 'dm6' { fasta = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Sequence/WholeGenomeFasta/genome.fa" + fasta_index = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Sequence/WholeGenomeFasta/genome.fa.fai" bwa = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Sequence/BWAIndex/version0.6.0/" bowtie2 = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Sequence/Bowtie2Index/" star = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Sequence/STARIndex/" @@ -374,6 +410,7 @@ params { } 'equCab2' { fasta = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Sequence/WholeGenomeFasta/genome.fa" + fasta_index = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Sequence/WholeGenomeFasta/genome.fa.fai" bwa = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Sequence/BWAIndex/version0.6.0/" bowtie2 = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Sequence/Bowtie2Index/" star = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Sequence/STARIndex/" @@ -385,6 +422,7 @@ params { } 'galGal4' { fasta = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Sequence/WholeGenomeFasta/genome.fa" + fasta_index = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Sequence/WholeGenomeFasta/genome.fa.fai" bwa = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Sequence/BWAIndex/version0.6.0/" bowtie2 = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Sequence/Bowtie2Index/" star = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Sequence/STARIndex/" @@ -396,6 +434,7 @@ params { } 'panTro4' { fasta = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Sequence/WholeGenomeFasta/genome.fa" + fasta_index = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Sequence/WholeGenomeFasta/genome.fa.fai" bwa = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Sequence/BWAIndex/version0.6.0/" bowtie2 = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Sequence/Bowtie2Index/" star = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Sequence/STARIndex/" @@ -407,6 +446,7 @@ params { } 'rn6' { fasta = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Sequence/WholeGenomeFasta/genome.fa" + fasta_index = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Sequence/WholeGenomeFasta/genome.fa.fai" bwa = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Sequence/BWAIndex/version0.6.0/" bowtie2 = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Sequence/Bowtie2Index/" star = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Sequence/STARIndex/" @@ -417,6 +457,7 @@ params { } 'sacCer3' { fasta = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/WholeGenomeFasta/genome.fa" + fasta_index = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/WholeGenomeFasta/genome.fa.fai" bwa = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/BWAIndex/version0.6.0/" bowtie2 = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/Bowtie2Index/" star = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/STARIndex/" @@ -427,6 +468,7 @@ params { } 'susScr3' { fasta = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Sequence/WholeGenomeFasta/genome.fa" + fasta_index = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Sequence/WholeGenomeFasta/genome.fa.fai" bwa = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Sequence/BWAIndex/version0.6.0/" bowtie2 = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Sequence/Bowtie2Index/" star = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Sequence/STARIndex/" diff --git a/conf/igenomes_ignored.config b/conf/igenomes_ignored.config new file mode 100644 index 00000000..b4034d82 --- /dev/null +++ b/conf/igenomes_ignored.config @@ -0,0 +1,9 @@ +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Nextflow config file for iGenomes paths +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Empty genomes dictionary to use when igenomes is ignored. +---------------------------------------------------------------------------------------- +*/ + +params.genomes = [:] diff --git a/conf/modules.config b/conf/modules.config deleted file mode 100755 index 5c55e852..00000000 --- a/conf/modules.config +++ /dev/null @@ -1,468 +0,0 @@ -/* -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Config file for defining DSL2 per module options and publishing paths -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Available keys to override module options: - ext.args = Additional arguments appended to command in module. - ext.args2 = Second set of arguments appended to command in module (multi-tool modules). - ext.args3 = Third set of arguments appended to command in module (multi-tool modules). - ext.prefix = File name prefix for output files. ----------------------------------------------------------------------------------------- -*/ - -process { - - publishDir = [ - path: { "${params.outdir}/${task.process.tokenize(':')[-1].tokenize('_')[0].toLowerCase()}" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - - withName: SAMPLESHEET_CHECK { - publishDir = [ - path: { "${params.outdir}/pipeline_info" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - - withName: CUSTOM_DUMPSOFTWAREVERSIONS { - publishDir = [ - path: { "${params.outdir}/pipeline_info" }, - mode: params.publish_dir_mode, - pattern: '*_versions.yml' - ] - } - - withName: FASTQC { - ext.args = '--quiet' - publishDir = [ - [ - path: { "${params.outdir}/fastqc" }, - mode: params.publish_dir_mode, - pattern: "*.html" - ], - [ - path: { "${params.outdir}/fastqc/zips" }, - mode: params.publish_dir_mode, - pattern: "*.zip" - ] - ] - } - - withName: TRIMGALORE { - ext.args = { [ - // Static args - '--fastqc', - - // Special flags - params.rrbs ? '--rrbs' : '', - params.nextseq_trim > 0 ? "--nextseq ${params.nextseq_trim}" : '', - - // Trimming - R1 - params.clip_r1 > 0 ? "--clip_r1 ${params.clip_r1}" : ( - params.pbat ? "--clip_r1 9" : ( - (params.single_cell || params.cegx) ? "--clip_r1 6" : ( - params.epignome ? "--clip_r1 8" : ( - (params.accel || params.zymo || params.em_seq) ? "--clip_r1 10" : '' - ) - ) - ) - ), - - // Trimming - R2 - meta.single_end ? '' : ( - params.clip_r2 > 0 ? "--clip_r2 ${params.clip_r2}" : ( - params.pbat ? "--clip_r2 9" : ( - (params.single_cell || params.cegx) ? "--clip_r2 6" : ( - params.epignome ? "--clip_r2 8" : ( - (params.zymo || params.em_seq) ? "--clip_r2 10" : ( - params.accel ? "--clip_r2 15" : '' - ) - ) - ) - ) - ) - ), - - // Trimming - 3' R1 - params.three_prime_clip_r1 > 0 ? "--three_prime_clip_r1 ${params.three_prime_clip_r1}" : ( - params.pbat ? "--three_prime_clip_r1 9" : ( - params.single_cell ? "--three_prime_clip_r1 6" : ( - params.cegx ? "--three_prime_clip_r1 2" : ( - params.epignome ? "--three_prime_clip_r1 8" : ( - (params.accel || params.zymo || params.em_seq) ? "--three_prime_clip_r1 10" : '' - ) - ) - ) - ) - ), - - // Trimming - 3' R2 - meta.single_end ? '' : ( - params.three_prime_clip_r2 > 0 ? "--three_prime_clip_r2 ${params.three_prime_clip_r2}" : ( - params.pbat ? "--three_prime_clip_r2 9" : ( - params.single_cell ? "--three_prime_clip_r2 6" : ( - params.cegx ? "--three_prime_clip_r2 2" : ( - params.epignome ? "--three_prime_clip_r2 8" : ( - (params.accel || params.zymo || params.em_seq) ? "--three_prime_clip_r2 10" : '' - ) - ) - ) - ) - ) - ), - ].join(' ').trim() } - publishDir = [ - [ - path: { "${params.outdir}/trimgalore/fastqc" }, - mode: params.publish_dir_mode, - pattern: "*.html" - ], - [ - path: { "${params.outdir}/trimgalore/fastqc/zips" }, - mode: params.publish_dir_mode, - pattern: "*.zip" - ], - [ - path: { "${params.outdir}/trimgalore" }, - mode: params.publish_dir_mode, - pattern: "*.fq.gz", - enabled: params.save_trimmed - ], - [ - path: { "${params.outdir}/trimgalore/logs" }, - mode: params.publish_dir_mode, - pattern: "*.txt" - ] - ] - } - - withName: BISMARK_GENOMEPREPARATION { - ext.args = [ - params.aligner == 'bismark_hisat' ? ' --hisat2' : ' --bowtie2', - params.slamseq ? ' --slam' : '' - ].join(' ').trim() - publishDir = [ - path: { "${params.outdir}/${params.aligner}/reference_genome" }, - saveAs: { it =~ /.*\.yml/ ? null : it }, - mode: params.publish_dir_mode, - enabled: params.save_reference - ] - } - - withName: BISMARK_ALIGN { - ext.args = { [ - params.aligner == 'bismark_hisat' ? ' --hisat2' : ' --bowtie2', - params.aligner == 'bismark_hisat' && params.known_splices ? " --known-splicesite-infile <(hisat2_extract_splice_sites.py ${known_splices})" : '', - params.pbat ? ' --pbat' : '', - ( params.single_cell || params.non_directional || params.zymo ) ? ' --non_directional' : '', - params.unmapped ? ' --unmapped' : '', - params.relax_mismatches ? " --score_min L,0,-${params.num_mismatches}" : '', - params.local_alignment ? " --local" : '', - !meta.single_end && params.minins ? " --minins ${params.minins}" : '', - meta.single_end ? '' : ( - params.maxins ? " --maxins ${params.maxins}" : ( - params.em_seq ? " --maxins 1000" : '' - ) - ) - ].join(' ').trim() } - publishDir = [ - [ - path: { "${params.outdir}/${params.aligner}/alignments/unmapped" }, - mode: params.publish_dir_mode, - pattern: "*.fq.gz", - enabled: params.unmapped - ], - [ - path: { "${params.outdir}/${params.aligner}/alignments" }, - mode: params.publish_dir_mode, - pattern: "*.bam", - enabled: (params.save_align_intermeds || params.skip_deduplication || params.rrbs) - ], - [ - path: { "${params.outdir}/${params.aligner}/alignments/logs" }, - mode: params.publish_dir_mode, - pattern: "*.txt" - ] - ] - } - - withName: BISMARK_DEDUPLICATE { - ext.args = '' - publishDir = [ - [ - path: { "${params.outdir}/${params.aligner}/deduplicated/logs" }, - mode: params.publish_dir_mode, - pattern: "*.txt" - ], - [ - path: { "${params.outdir}/${params.aligner}/deduplicated" }, - mode: params.publish_dir_mode, - pattern: "*.bam" - ] - ] - } - - withName: BISMARK_METHYLATIONEXTRACTOR { - ext.args = { [ - params.comprehensive ? ' --comprehensive --merge_non_CpG' : '', - params.meth_cutoff ? " --cutoff ${params.meth_cutoff}" : '', - params.nomeseq ? '--CX' : '', - params.ignore_r1 > 0 ? "--ignore ${params.ignore_r1}" : '', - params.ignore_3prime_r1 > 0 ? "--ignore_3prime ${params.ignore_3prime_r1}" : '', - meta.single_end ? '' : (params.no_overlap ? ' --no_overlap' : '--include_overlap'), - meta.single_end ? '' : (params.ignore_r2 > 0 ? "--ignore_r2 ${params.ignore_r2}" : ""), - meta.single_end ? '' : (params.ignore_3prime_r2 > 0 ? "--ignore_3prime_r2 ${params.ignore_3prime_r2}": "") - ].join(' ').trim() } - publishDir = [ - [ - path: { "${params.outdir}/${params.aligner}/methylation_calls/mbias" }, - mode: params.publish_dir_mode, - pattern: "*M-bias.txt" - ], - [ - path: { "${params.outdir}/${params.aligner}/methylation_calls/methylation_coverage" }, - mode: params.publish_dir_mode, - pattern: "*cov.gz" - ], - [ - path: { "${params.outdir}/${params.aligner}/methylation_calls/bedGraph" }, - mode: params.publish_dir_mode, - pattern: "*bedGraph.gz" - ], - [ - path: { "${params.outdir}/${params.aligner}/methylation_calls/splitting_report" }, - mode: params.publish_dir_mode, - pattern: "*splitting_report.txt" - ], - [ - path: { "${params.outdir}/${params.aligner}/methylation_calls/methylation_calls" }, - mode: params.publish_dir_mode, - pattern: "*txt.gz" - ] - ] - } - - withName: BISMARK_COVERAGE2CYTOSINE { - ext.args = params.nomeseq ? '--nome-seq' : '' - publishDir = [ - publishDir = [ - path: { "${params.outdir}/bismark/coverage2cytosine/summaries" }, - mode: params.publish_dir_mode, - pattern: "*_summary.txt" - ], - publishDir = [ - path: { "${params.outdir}/bismark/coverage2cytosine/reports" }, - mode: params.publish_dir_mode, - pattern: "*_report.txt.gz" - ], - publishDir = [ - path: { "${params.outdir}/bismark/coverage2cytosine/coverage" }, - mode: params.publish_dir_mode, - pattern: "*cov.gz" - ] - ] - } - - withName: BISMARK_REPORT { - ext.args = '' - publishDir = [ - path: "${params.outdir}/${params.aligner}/reports", - mode: params.publish_dir_mode, - pattern: "*.html" - ] - } - - - withName: BISMARK_SUMMARY { - ext.args = '' - publishDir = [ - path: "${params.outdir}/${params.aligner}/summary", - mode: params.publish_dir_mode, - pattern: "*.{html,txt}" - ] - } - - withName: BWAMETH_INDEX { - ext.args = '' - publishDir = [ - path: { "${params.outdir}/${params.aligner}/reference_genome" }, - mode: params.publish_dir_mode, - saveAs: { it.equals('versions.yml') ? null : it.tokenize("/").last() }, - enabled: params.save_reference - ] - } - - withName: BWAMETH_ALIGN { - ext.args = '' - publishDir = [ - path: { "${params.outdir}/${params.aligner}/alignments" }, - pattern: "*.bam", - mode: params.publish_dir_mode, - enabled: params.save_align_intermeds - ] - } - - withName: PICARD_MARKDUPLICATES { - ext.args = "--ASSUME_SORTED true --REMOVE_DUPLICATES false --VALIDATION_STRINGENCY LENIENT --PROGRAM_RECORD_ID 'null' --TMP_DIR tmp" - ext.prefix = { "${meta.id}.markdup.sorted" } - publishDir = [ - [ - path: { "${params.outdir}/${params.aligner}/deduplicated/picard_metrics" }, - pattern: "*.metrics.txt", - mode: params.publish_dir_mode - ], - [ - path: { "${params.outdir}/${params.aligner}/deduplicated" }, - pattern: "*.bam", - mode: params.publish_dir_mode - ] - ] - } - - withName: SAMTOOLS_SORT { - ext.prefix = { "${meta.id}.sorted" } - publishDir = [ - [ - path: { "${params.outdir}/${params.aligner}/deduplicated/" }, - mode: params.publish_dir_mode, - pattern: "*markdup*.bam", - enabled: params.save_align_intermeds - ], - [ - path: { "${params.outdir}/${params.aligner}/alignments/" }, - mode: params.publish_dir_mode, - pattern: "*.bam", - enabled: params.save_align_intermeds - ] - ] - } - - withName: SAMTOOLS_FLAGSTAT { - publishDir = [ - [ - path: { "${params.outdir}/${params.aligner}/alignments/samtools_stats/" }, - mode: params.publish_dir_mode, - pattern: "*.flagstat" - ] - ] - } - - withName: SAMTOOLS_STATS { - publishDir = [ - [ - path: { "${params.outdir}/${params.aligner}/alignments/samtools_stats/" }, - mode: params.publish_dir_mode, - pattern: "*.stats" - ] - ] - } - - withName: SAMTOOLS_FAIDX { - ext.args = "" - publishDir = [ - path: { "${params.outdir}/${params.aligner}/reference_genome" }, - mode: params.publish_dir_mode, - enabled: params.save_reference, - pattern: "*.fai" - ] - } - - withName: SAMTOOLS_INDEX_ALIGNMENTS { - ext.args = "" - publishDir = [ - [ - path: { "${params.outdir}/${params.aligner}/alignments/" }, - mode: params.publish_dir_mode, - pattern: "*.bam*", - enabled: params.save_align_intermeds - ] - ] - } - - withName: SAMTOOLS_INDEX_DEDUPLICATED { - ext.args = "" - publishDir = [ - [ - path: { "${params.outdir}/${params.aligner}/deduplicated/" }, - mode: params.publish_dir_mode, - pattern: "*.bai" - ] - ] - } - - withName: METHYLDACKEL_MBIAS { - ext.args = [ - params.comprehensive ? ' --CHG --CHH' : '', - params.ignore_flags ? " --ignoreFlags" : '' - ].join(" ").trim() - publishDir = [ - [ - path: { "${params.outdir}/methyldackel/mbias" }, - mode: params.publish_dir_mode, - pattern: "*mbias.txt" - ] - ] - } - - withName: METHYLDACKEL_EXTRACT { - ext.args = [ - params.comprehensive ? ' --CHG --CHH' : '', - params.ignore_flags ? " --ignoreFlags" : '', - params.methyl_kit ? " --methylKit" : '', - params.min_depth > 0 ? " --minDepth ${params.min_depth}" : '' - ].join(" ").trim() - publishDir = [ - [ - path: { "${params.outdir}/methyldackel" }, - mode: params.publish_dir_mode, - pattern: "*.bedGraph" - ], - [ - path: { "${params.outdir}/methyldackel" }, - mode: params.publish_dir_mode, - pattern: "*.methylKit" - ] - ] - } - - withName: QUALIMAP_BAMQC { - ext.args = [ - params.genome.toString().startsWith('GRCh') ? '-gd HUMAN' : '', - params.genome.toString().startsWith('GRCm') ? '-gd MOUSE' : '' - ].join(" ").trim() - } - - withName: PRESEQ_LCEXTRAP { - ext.args = " -verbose -bam" - publishDir = [ - [ - path: { "${params.outdir}/${params.aligner}/preseq" }, - mode: params.publish_dir_mode, - pattern: "*.txt" - ], - [ - path: { "${params.outdir}/${params.aligner}/preseq/log" }, - mode: params.publish_dir_mode, - pattern: "*.log" - ] - ] - } - - withName: 'MULTIQC' { - ext.args = { params.multiqc_title ? "--title \"$params.multiqc_title\"" : '' } - publishDir = [ - path: { "${params.outdir}/multiqc/${params.aligner}" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - -} - - - - - - diff --git a/conf/test.config b/conf/test.config index 5b23b448..ebbab61b 100644 --- a/conf/test.config +++ b/conf/test.config @@ -1,27 +1,36 @@ /* - * ------------------------------------------------- - * Nextflow config file for running tests - * ------------------------------------------------- - * Defines bundled input files and everything required - * to run a fast and simple test. Use as follows: - * nextflow run nf-core/methylseq -profile test, - */ +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Nextflow config file for running minimal tests +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Defines input files and everything required to run a fast and simple pipeline test. + + Use as follows: + nextflow run nf-core/methylseq -profile test, --outdir + +---------------------------------------------------------------------------------------- +*/ params { config_profile_name = 'Test profile' config_profile_description = 'Minimal test dataset to check pipeline function' - // Limit resources so that this can run on GitHub Actions - max_cpus = 2 - max_memory = 6.GB - max_time = 6.h - // Input data input = "${projectDir}/assets/samplesheet.csv" // Genome references - fasta = "${params.test_data_base}/reference/genome.fa" - fasta_index = "${params.test_data_base}/reference/genome.fa.fai" + fasta = "${params.pipelines_testdata_base_path}/reference/genome.fa" + fasta_index = "${params.pipelines_testdata_base_path}/reference/genome.fa.fai" +} + +process { + resourceLimits = [ + cpus: 4, + memory: '15.GB', + time: '1.h' + ] + + withName: PRESEQ_LCEXTRAP { + errorStrategy = 'ignore' + } } -includeConfig './test_data.config' diff --git a/conf/test_data.config b/conf/test_data.config deleted file mode 100644 index ae5d5abc..00000000 --- a/conf/test_data.config +++ /dev/null @@ -1,39 +0,0 @@ -params { - // Base directory for test data - test_data_base = "https://raw.githubusercontent.com/nf-core/test-datasets/methylseq" - - max_cpus = 2 - max_memory = 6.GB - max_time = 6.h - - // TODO: Add all test data to test_data.config - test_data { - 'assets' { - test_samplesheet = "${params.test_data_base}/samplesheet/samplesheet_test.csv" - } - 'workflows' { - 'methylseq' { - fasta = "${params.test_data_base}/reference/genome.fa" - fasta_index = "${params.test_data_base}/reference/genome.fa.fai" - } - } - 'sarscov2' { - 'illumina' { - test_1_fastq_gz = "https://raw.githubusercontent.com/nf-core/test-datasets/modules/data/genomics/sarscov2/illumina/fastq/test_1.fastq.gz" - test_2_fastq_gz = "https://raw.githubusercontent.com/nf-core/test-datasets/modules/data/genomics/sarscov2/illumina/fastq/test_2.fastq.gz" - test2_1_fastq_gz = "https://raw.githubusercontent.com/nf-core/test-datasets/modules/data/genomics/sarscov2/illumina/fastq/test2_1.fastq.gz" - test2_2_fastq_gz = "https://raw.githubusercontent.com/nf-core/test-datasets/modules/data/genomics/sarscov2/illumina/fastq/test2_2.fastq.gz" - contigs_fasta = "https://raw.githubusercontent.com/nf-core/test-datasets/modules/data/genomics/sarscov2/illumina/fasta/contigs.fasta" - scaffolds_fasta = "https://raw.githubusercontent.com/nf-core/test-datasets/modules/data/genomics/sarscov2/illumina/fasta/scaffolds.fasta" - test_single_end_bam = "https://raw.githubusercontent.com/nf-core/test-datasets/modules/data/genomics/sarscov2/illumina/bam/test.single_end.bam" - test_paired_end_bam = "https://raw.githubusercontent.com/nf-core/test-datasets/modules/data/genomics/sarscov2/illumina/bam/test.paired_end.bam" - test_1_fastq_gz_fastqc_zip = "https://raw.githubusercontent.com/nf-core/test-datasets/modules/data/genomics/sarscov2/illumina/fastqc/test_fastqc.zip" - } - 'genome' { - genome_fasta_gz = "https://raw.githubusercontent.com/nf-core/test-datasets/modules/data/genomics/sarscov2/genome/genome.fasta.gz" - genome_fasta = "https://raw.githubusercontent.com/nf-core/test-datasets/modules/data/genomics/sarscov2/genome/genome.fasta" - kraken2_tar_gz = "https://raw.githubusercontent.com/nf-core/test-datasets/modules/data/genomics/sarscov2/genome/db/kraken2.tar.gz" - } - } - } -} diff --git a/conf/test_full.config b/conf/test_full.config index f776b077..698d6234 100644 --- a/conf/test_full.config +++ b/conf/test_full.config @@ -15,23 +15,12 @@ params { config_profile_description = 'Full test dataset to check pipeline function' // Input data - input = "${params.test_data_base}/samplesheet/samplesheet_full.csv" + input = "${params.pipelines_testdata_base_path}/samplesheet/samplesheet_full.csv" genome = 'GRCh38' } -// ftp://ftp.sra.ebi.ac.uk/vol1/fastq/SRR796/009/SRR7961089/SRR7961089_1.fastq.gz -// ftp://ftp.sra.ebi.ac.uk/vol1/fastq/SRR796/009/SRR7961089/SRR7961089_2.fastq.gz -// ftp://ftp.sra.ebi.ac.uk/vol1/fastq/SRR796/003/SRR7961103/SRR7961103_1.fastq.gz -// ftp://ftp.sra.ebi.ac.uk/vol1/fastq/SRR796/003/SRR7961103/SRR7961103_2.fastq.gz -// ftp://ftp.sra.ebi.ac.uk/vol1/fastq/SRR796/002/SRR7961102/SRR7961102_1.fastq.gz -// ftp://ftp.sra.ebi.ac.uk/vol1/fastq/SRR796/002/SRR7961102/SRR7961102_2.fastq.gz -// ftp://ftp.sra.ebi.ac.uk/vol1/fastq/SRR796/004/SRR7961104/SRR7961104_1.fastq.gz -// ftp://ftp.sra.ebi.ac.uk/vol1/fastq/SRR796/004/SRR7961104/SRR7961104_2.fastq.gz -// ftp://ftp.sra.ebi.ac.uk/vol1/fastq/SRR796/000/SRR7961150/SRR7961150_1.fastq.gz -// ftp://ftp.sra.ebi.ac.uk/vol1/fastq/SRR796/000/SRR7961150/SRR7961150_2.fastq.gz -// ftp://ftp.sra.ebi.ac.uk/vol1/fastq/SRR796/001/SRR7961161/SRR7961161_1.fastq.gz -// ftp://ftp.sra.ebi.ac.uk/vol1/fastq/SRR796/001/SRR7961161/SRR7961161_2.fastq.gz -// ftp://ftp.sra.ebi.ac.uk/vol1/fastq/SRR796/004/SRR7961164/SRR7961164_1.fastq.gz -// ftp://ftp.sra.ebi.ac.uk/vol1/fastq/SRR796/004/SRR7961164/SRR7961164_2.fastq.gz -// ftp://ftp.sra.ebi.ac.uk/vol1/fastq/SRR796/003/SRR7961163/SRR7961163_1.fastq.gz -// ftp://ftp.sra.ebi.ac.uk/vol1/fastq/SRR796/003/SRR7961163/SRR7961163_2.fastq.gz +process { + withName: PRESEQ_LCEXTRAP { + errorStrategy = 'ignore' + } +} diff --git a/docs/images/metromap.png b/docs/images/metromap.png new file mode 100644 index 00000000..2c3912ad Binary files /dev/null and b/docs/images/metromap.png differ diff --git a/docs/images/metromap.svg b/docs/images/metromap.svg new file mode 100644 index 00000000..a6e300d7 --- /dev/null +++ b/docs/images/metromap.svg @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/images/mqc_fastqc_adapter.png b/docs/images/mqc_fastqc_adapter.png deleted file mode 100755 index 361d0e47..00000000 Binary files a/docs/images/mqc_fastqc_adapter.png and /dev/null differ diff --git a/docs/images/mqc_fastqc_counts.png b/docs/images/mqc_fastqc_counts.png deleted file mode 100755 index cb39ebb8..00000000 Binary files a/docs/images/mqc_fastqc_counts.png and /dev/null differ diff --git a/docs/images/mqc_fastqc_quality.png b/docs/images/mqc_fastqc_quality.png deleted file mode 100755 index a4b89bf5..00000000 Binary files a/docs/images/mqc_fastqc_quality.png and /dev/null differ diff --git a/docs/images/nf-core-methylseq_logo_dark.png b/docs/images/nf-core-methylseq_logo_dark.png index 1f585eee..ffcd2246 100644 Binary files a/docs/images/nf-core-methylseq_logo_dark.png and b/docs/images/nf-core-methylseq_logo_dark.png differ diff --git a/docs/images/nf-core-methylseq_logo_light.png b/docs/images/nf-core-methylseq_logo_light.png index cae5ed6a..d6e00d5c 100644 Binary files a/docs/images/nf-core-methylseq_logo_light.png and b/docs/images/nf-core-methylseq_logo_light.png differ diff --git a/docs/usage.md b/docs/usage.md index 764c5940..3e376c1e 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -8,10 +8,10 @@ - [Table of contents](#table-of-contents) - [Introduction](#introduction) - - [Bismark and bwa-meth workflow](#bismark-and-bwa-meth-workflow) +- [Bismark and bwa-meth workflow](#bismark-and-bwa-meth-workflow) - [Running the pipeline](#running-the-pipeline) - - [Updating the pipeline](#updating-the-pipeline) - - [Reproducibility](#reproducibility) +- [Updating the pipeline](#updating-the-pipeline) +- [Reproducibility](#reproducibility) ## Introduction @@ -23,54 +23,14 @@ The second workflow uses [BWA-Meth](https://github.com/brentp/bwa-meth) and [Met ## Samplesheet input -You will need to create a samplesheet with information about the samples you would like to analyse before running the pipeline. Use this parameter to specify its location. It has to be a comma-separated file with 3 columns, and a header row as shown in the examples below. +You will need to create a samplesheet with information about the samples you would like to analyse before running the pipeline. Use this parameter to specify its location. It has to be a comma-separated file with 4 columns, and a header row as shown in the examples below. ```bash --input '[path to samplesheet file]' ``` -### Multiple runs of the same sample - -The `sample` identifiers have to be the same when you have re-sequenced the same sample more than once e.g. to increase sequencing depth. The pipeline will concatenate the raw reads before performing any downstream analysis. Below is an example for the same sample sequenced across 3 lanes: - -```bash -sample,fastq_1,fastq_2 -CONTROL_REP1,AEG588A1_S1_L002_R1_001.fastq.gz,AEG588A1_S1_L002_R2_001.fastq.gz -CONTROL_REP1,AEG588A1_S1_L003_R1_001.fastq.gz,AEG588A1_S1_L003_R2_001.fastq.gz -CONTROL_REP1,AEG588A1_S1_L004_R1_001.fastq.gz,AEG588A1_S1_L004_R2_001.fastq.gz -``` - -### Full samplesheet - -The pipeline will auto-detect whether a sample is single- or paired-end using the information provided in the samplesheet. The samplesheet can have as many columns as you desire, however, there is a strict requirement for the first 4 columns to match those defined in the table below. - -A final samplesheet file consisting of both single- and paired-end data may look something like the one below. This is for 6 samples, where `TREATMENT_REP3` has been sequenced twice. - -```bash -sample,fastq_1,fastq_2 -CONTROL_REP1,AEG588A1_S1_L002_R1_001.fastq.gz,AEG588A1_S1_L002_R2_001.fastq.gz -CONTROL_REP2,AEG588A2_S2_L002_R1_001.fastq.gz,AEG588A2_S2_L002_R2_001.fastq.gz -CONTROL_REP3,AEG588A3_S3_L002_R1_001.fastq.gz,AEG588A3_S3_L002_R2_001.fastq.gz -TREATMENT_REP1,AEG588A4_S4_L003_R1_001.fastq.gz, -TREATMENT_REP2,AEG588A5_S5_L003_R1_001.fastq.gz, -TREATMENT_REP3,AEG588A6_S6_L003_R1_001.fastq.gz, -TREATMENT_REP3,AEG588A6_S6_L004_R1_001.fastq.gz, -``` - -| Column | Description | -| --------- | -------------------------------------------------------------------------------------------------------------------------- | -| `sample` | Custom sample name. This entry will be identical for multiple sequencing libraries/runs from the same sample. | -| `fastq_1` | Full path to FastQ file for Illumina short reads 1. File has to be gzipped and have the extension ".fastq.gz" or ".fq.gz". | -| `fastq_2` | Full path to FastQ file for Illumina short reads 2. File has to be gzipped and have the extension ".fastq.gz" or ".fq.gz". | - -An [example samplesheet](../assets/samplesheet.csv) has been provided with the pipeline. - -## Samplesheet input - -You will need to create a samplesheet with information about the samples you would like to analyse before running the pipeline. Use this parameter to specify its location. It has to be a comma-separated file with 3 columns, and a header row as shown in the examples below. - -```bash ---input '[path to samplesheet file]' +```csv title="header.csv" +sample,fastq_1,fastq_2,genome ``` ### Multiple runs of the same sample @@ -78,10 +38,11 @@ You will need to create a samplesheet with information about the samples you wou The `sample` identifiers have to be the same when you have re-sequenced the same sample more than once e.g. to increase sequencing depth. The pipeline will concatenate the raw reads before performing any downstream analysis. Below is an example for the same sample sequenced across 3 lanes: ```csv title="samplesheet.csv" -sample,fastq_1,fastq_2 -CONTROL_REP1,AEG588A1_S1_L002_R1_001.fastq.gz,AEG588A1_S1_L002_R2_001.fastq.gz -CONTROL_REP1,AEG588A1_S1_L003_R1_001.fastq.gz,AEG588A1_S1_L003_R2_001.fastq.gz -CONTROL_REP1,AEG588A1_S1_L004_R1_001.fastq.gz,AEG588A1_S1_L004_R2_001.fastq.gz +sample,fastq_1,fastq_2,genome +SRR389222_sub1,SRR389222_sub1.fastq.gz,, +SRR389222_sub2,SRR389222_sub2.fastq.gz,, +SRR389222_sub3,SRR389222_sub3.fastq.gz,, +Ecoli_10K_methylated,Ecoli_10K_methylated_R1.fastq.gz,Ecoli_10K_methylated_R2.fastq.gz, ``` ### Full samplesheet @@ -91,14 +52,14 @@ The pipeline will auto-detect whether a sample is single- or paired-end using th A final samplesheet file consisting of both single- and paired-end data may look something like the one below. This is for 6 samples, where `TREATMENT_REP3` has been sequenced twice. ```csv title="samplesheet.csv" -sample,fastq_1,fastq_2 -CONTROL_REP1,AEG588A1_S1_L002_R1_001.fastq.gz,AEG588A1_S1_L002_R2_001.fastq.gz -CONTROL_REP2,AEG588A2_S2_L002_R1_001.fastq.gz,AEG588A2_S2_L002_R2_001.fastq.gz -CONTROL_REP3,AEG588A3_S3_L002_R1_001.fastq.gz,AEG588A3_S3_L002_R2_001.fastq.gz -TREATMENT_REP1,AEG588A4_S4_L003_R1_001.fastq.gz, -TREATMENT_REP2,AEG588A5_S5_L003_R1_001.fastq.gz, -TREATMENT_REP3,AEG588A6_S6_L003_R1_001.fastq.gz, -TREATMENT_REP3,AEG588A6_S6_L004_R1_001.fastq.gz, +sample,fastq_1,fastq_2,genome +CONTROL_REP1,AEG588A1_S1_L002_R1_001.fastq.gz,AEG588A1_S1_L002_R2_001.fastq.gz, +CONTROL_REP2,AEG588A2_S2_L002_R1_001.fastq.gz,AEG588A2_S2_L002_R2_001.fastq.gz, +CONTROL_REP3,AEG588A3_S3_L002_R1_001.fastq.gz,AEG588A3_S3_L002_R2_001.fastq.gz, +TREATMENT_REP1,AEG588A4_S4_L003_R1_001.fastq.gz,, +TREATMENT_REP2,AEG588A5_S5_L003_R1_001.fastq.gz,, +TREATMENT_REP3,AEG588A6_S6_L003_R1_001.fastq.gz,, +TREATMENT_REP3,AEG588A6_S6_L004_R1_001.fastq.gz,, ``` | Column | Description | @@ -106,6 +67,7 @@ TREATMENT_REP3,AEG588A6_S6_L004_R1_001.fastq.gz, | `sample` | Custom sample name. This entry will be identical for multiple sequencing libraries/runs from the same sample. Spaces in sample names are automatically converted to underscores (`_`). | | `fastq_1` | Full path to FastQ file for Illumina short reads 1. File has to be gzipped and have the extension ".fastq.gz" or ".fq.gz". | | `fastq_2` | Full path to FastQ file for Illumina short reads 2. File has to be gzipped and have the extension ".fastq.gz" or ".fq.gz". | +| `genome` | Reference genome to be used (OPTIONAL) | An [example samplesheet](../assets/samplesheet.csv) has been provided with the pipeline. @@ -142,9 +104,9 @@ The above pipeline run specified with a params file in yaml format: nextflow run nf-core/methylseq -profile docker -params-file params.yaml ``` -with `params.yaml` containing: +with: -```yaml +```yaml title="params.yaml" input: './samplesheet.csv' outdir: './results/' genome: 'GRCh37' @@ -213,6 +175,8 @@ If `-profile` is not specified, the pipeline will run locally and expect all sof - A generic configuration profile to be used with [Charliecloud](https://hpc.github.io/charliecloud/) - `apptainer` - A generic configuration profile to be used with [Apptainer](https://apptainer.org/) +- `wave` + - A generic configuration profile to enable [Wave](https://seqera.io/wave/) containers. Use together with one of the above (requires Nextflow ` 24.03.0-edge` or later). - `conda` - A generic configuration profile to be used with [Conda](https://conda.io/docs/). Please only use Conda as a last resort i.e. when it's not possible to run the pipeline with Docker, Singularity, Podman, Shifter, Charliecloud, or Apptainer. @@ -289,35 +253,35 @@ The [Nextflow DSL2](https://www.nextflow.io/docs/latest/dsl2.html) implementatio 2. Find the latest version of the Biocontainer available on [Quay.io](https://quay.io/repository/biocontainers/pangolin?tag=latest&tab=tags) 3. Create the custom config accordingly: - - For Docker: +- For Docker: - ```nextflow - process { - withName: PANGOLIN { - container = 'quay.io/biocontainers/pangolin:3.0.5--pyhdfd78af_0' - } - } - ``` + ```nextflow + process { + withName: PANGOLIN { + container = 'quay.io/biocontainers/pangolin:3.0.5--pyhdfd78af_0' + } + } + ``` - - For Singularity: +- For Singularity: - ```nextflow - process { - withName: PANGOLIN { - container = 'https://depot.galaxyproject.org/singularity/pangolin:3.0.5--pyhdfd78af_0' - } - } - ``` + ```nextflow + process { + withName: PANGOLIN { + container = 'https://depot.galaxyproject.org/singularity/pangolin:3.0.5--pyhdfd78af_0' + } + } + ``` - - For Conda: +- For Conda: - ```nextflow - process { - withName: PANGOLIN { - conda = 'bioconda::pangolin=3.0.5' - } - } - ``` + ```nextflow + process { + withName: PANGOLIN { + conda = 'bioconda::pangolin=3.0.5' + } + } + ``` > **NB:** If you wish to periodically update individual tool-specific results (e.g. Pangolin) generated by the pipeline then you must ensure to keep the `work/` directory otherwise the `-resume` ability of the pipeline will be compromised and it will restart from scratch. @@ -329,14 +293,6 @@ See the main [Nextflow documentation](https://www.nextflow.io/docs/latest/config If you have any questions or issues please send us a message on [Slack](https://nf-co.re/join/slack) on the [`#configs` channel](https://nfcore.slack.com/channels/configs). -## Azure Resource Requests - -To be used with the `azurebatch` profile by specifying the `-profile azurebatch`. -We recommend providing a compute `params.vm_type` of `Standard_D16_v3` VMs by default but these options can be changed if required. - -Note that the choice of VM size depends on your quota and the overall workload during the analysis. -For a thorough list, please refer the [Azure Sizes for virtual machines in Azure](https://docs.microsoft.com/en-us/azure/virtual-machines/sizes). - ## Running in the background Nextflow handles job submissions and supervises the running jobs. The Nextflow process must run until the pipeline is finished. diff --git a/lib/NfcoreTemplate.groovy b/lib/NfcoreTemplate.groovy deleted file mode 100755 index e248e4c3..00000000 --- a/lib/NfcoreTemplate.groovy +++ /dev/null @@ -1,356 +0,0 @@ -// -// This file holds several functions used within the nf-core pipeline template. -// - -import org.yaml.snakeyaml.Yaml -import groovy.json.JsonOutput -import nextflow.extension.FilesEx - -class NfcoreTemplate { - - // - // Check AWS Batch related parameters have been specified correctly - // - public static void awsBatch(workflow, params) { - if (workflow.profile.contains('awsbatch')) { - // Check params.awsqueue and params.awsregion have been set if running on AWSBatch - assert (params.awsqueue && params.awsregion) : "Specify correct --awsqueue and --awsregion parameters on AWSBatch!" - // Check outdir paths to be S3 buckets if running on AWSBatch - assert params.outdir.startsWith('s3:') : "Outdir not on S3 - specify S3 Bucket to run on AWSBatch!" - } - } - - // - // Warn if a -profile or Nextflow config has not been provided to run the pipeline - // - public static void checkConfigProvided(workflow, log) { - if (workflow.profile == 'standard' && workflow.configFiles.size() <= 1) { - log.warn "[$workflow.manifest.name] You are attempting to run the pipeline without any custom configuration!\n\n" + - "This will be dependent on your local compute environment but can be achieved via one or more of the following:\n" + - " (1) Using an existing pipeline profile e.g. `-profile docker` or `-profile singularity`\n" + - " (2) Using an existing nf-core/configs for your Institution e.g. `-profile crick` or `-profile uppmax`\n" + - " (3) Using your own local custom config e.g. `-c /path/to/your/custom.config`\n\n" + - "Please refer to the quick start section and usage docs for the pipeline.\n " - } - } - - // - // Generate version string - // - public static String version(workflow) { - String version_string = "" - - if (workflow.manifest.version) { - def prefix_v = workflow.manifest.version[0] != 'v' ? 'v' : '' - version_string += "${prefix_v}${workflow.manifest.version}" - } - - if (workflow.commitId) { - def git_shortsha = workflow.commitId.substring(0, 7) - version_string += "-g${git_shortsha}" - } - - return version_string - } - - // - // Construct and send completion email - // - public static void email(workflow, params, summary_params, projectDir, log, multiqc_report=[]) { - - // Set up the e-mail variables - def subject = "[$workflow.manifest.name] Successful: $workflow.runName" - if (!workflow.success) { - subject = "[$workflow.manifest.name] FAILED: $workflow.runName" - } - - def summary = [:] - for (group in summary_params.keySet()) { - summary << summary_params[group] - } - - def misc_fields = [:] - misc_fields['Date Started'] = workflow.start - misc_fields['Date Completed'] = workflow.complete - misc_fields['Pipeline script file path'] = workflow.scriptFile - misc_fields['Pipeline script hash ID'] = workflow.scriptId - if (workflow.repository) misc_fields['Pipeline repository Git URL'] = workflow.repository - if (workflow.commitId) misc_fields['Pipeline repository Git Commit'] = workflow.commitId - if (workflow.revision) misc_fields['Pipeline Git branch/tag'] = workflow.revision - misc_fields['Nextflow Version'] = workflow.nextflow.version - misc_fields['Nextflow Build'] = workflow.nextflow.build - misc_fields['Nextflow Compile Timestamp'] = workflow.nextflow.timestamp - - def email_fields = [:] - email_fields['version'] = NfcoreTemplate.version(workflow) - email_fields['runName'] = workflow.runName - email_fields['success'] = workflow.success - email_fields['dateComplete'] = workflow.complete - email_fields['duration'] = workflow.duration - email_fields['exitStatus'] = workflow.exitStatus - email_fields['errorMessage'] = (workflow.errorMessage ?: 'None') - email_fields['errorReport'] = (workflow.errorReport ?: 'None') - email_fields['commandLine'] = workflow.commandLine - email_fields['projectDir'] = workflow.projectDir - email_fields['summary'] = summary << misc_fields - - // On success try attach the 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] - } - } - } catch (all) { - if (multiqc_report) { - log.warn "[$workflow.manifest.name] Could not attach MultiQC report to summary email" - } - } - - // Check if we are only sending emails on failure - def email_address = params.email - if (!params.email && params.email_on_fail && !workflow.success) { - email_address = params.email_on_fail - } - - // Render the TXT template - def engine = new groovy.text.GStringTemplateEngine() - def tf = new File("$projectDir/assets/email_template.txt") - def txt_template = engine.createTemplate(tf).make(email_fields) - def email_txt = txt_template.toString() - - // Render the HTML template - def hf = new File("$projectDir/assets/email_template.html") - def html_template = engine.createTemplate(hf).make(email_fields) - 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 smail_fields = [ email: email_address, subject: subject, email_txt: email_txt, email_html: email_html, projectDir: "$projectDir", mqcFile: mqc_report, mqcMaxSize: max_multiqc_email_size.toBytes() ] - def sf = new File("$projectDir/assets/sendmail_template.txt") - def sendmail_template = engine.createTemplate(sf).make(smail_fields) - def sendmail_html = sendmail_template.toString() - - // Send the HTML e-mail - Map colors = logColours(params.monochrome_logs) - if (email_address) { - try { - if (params.plaintext_email) { throw 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 (all) { - // Catch failures and try with plaintext - def mail_cmd = [ 'mail', '-s', subject, '--content-type=text/html', email_address ] - if ( mqc_report != null && mqc_report.size() <= max_multiqc_email_size.toBytes() ) { - mail_cmd += [ '-A', mqc_report ] - } - mail_cmd.execute() << email_html - log.info "-${colors.purple}[$workflow.manifest.name]${colors.green} Sent summary e-mail to $email_address (mail)-" - } - } - - // Write summary e-mail HTML to a file - def output_hf = new File(workflow.launchDir.toString(), ".pipeline_report.html") - output_hf.withWriter { w -> w << email_html } - FilesEx.copyTo(output_hf.toPath(), "${params.outdir}/pipeline_info/pipeline_report.html"); - output_hf.delete() - - // Write summary e-mail TXT to a file - def output_tf = new File(workflow.launchDir.toString(), ".pipeline_report.txt") - output_tf.withWriter { w -> w << email_txt } - FilesEx.copyTo(output_tf.toPath(), "${params.outdir}/pipeline_info/pipeline_report.txt"); - output_tf.delete() - } - - // - // Construct and send a notification to a web server as JSON - // e.g. Microsoft Teams and Slack - // - public static void IM_notification(workflow, params, summary_params, projectDir, log) { - def hook_url = params.hook_url - - def summary = [:] - for (group in summary_params.keySet()) { - 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'] = NfcoreTemplate.version(workflow) - 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("$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()); - } - } - - // - // Dump pipeline parameters in a json file - // - public static void dump_parameters(workflow, params) { - def timestamp = new java.util.Date().format( 'yyyy-MM-dd_HH-mm-ss') - def filename = "params_${timestamp}.json" - def temp_pf = new File(workflow.launchDir.toString(), ".${filename}") - def jsonStr = JsonOutput.toJson(params) - temp_pf.text = JsonOutput.prettyPrint(jsonStr) - - FilesEx.copyTo(temp_pf.toPath(), "${params.outdir}/pipeline_info/params_${timestamp}.json") - temp_pf.delete() - } - - // - // Print pipeline summary on completion - // - public static void summary(workflow, params, log) { - Map colors = logColours(params.monochrome_logs) - if (workflow.success) { - if (workflow.stats.ignoredCount == 0) { - log.info "-${colors.purple}[$workflow.manifest.name]${colors.green} Pipeline completed successfully${colors.reset}-" - } else { - log.info "-${colors.purple}[$workflow.manifest.name]${colors.yellow} Pipeline completed successfully, but with errored process(es) ${colors.reset}-" - } - } else { - log.info "-${colors.purple}[$workflow.manifest.name]${colors.red} Pipeline completed with errors${colors.reset}-" - } - } - - // - // ANSII Colours used for terminal logging - // - public static Map logColours(Boolean monochrome_logs) { - Map colorcodes = [:] - - // Reset / Meta - colorcodes['reset'] = monochrome_logs ? '' : "\033[0m" - colorcodes['bold'] = monochrome_logs ? '' : "\033[1m" - colorcodes['dim'] = monochrome_logs ? '' : "\033[2m" - colorcodes['underlined'] = monochrome_logs ? '' : "\033[4m" - colorcodes['blink'] = monochrome_logs ? '' : "\033[5m" - colorcodes['reverse'] = monochrome_logs ? '' : "\033[7m" - colorcodes['hidden'] = monochrome_logs ? '' : "\033[8m" - - // Regular Colors - colorcodes['black'] = monochrome_logs ? '' : "\033[0;30m" - colorcodes['red'] = monochrome_logs ? '' : "\033[0;31m" - colorcodes['green'] = monochrome_logs ? '' : "\033[0;32m" - colorcodes['yellow'] = monochrome_logs ? '' : "\033[0;33m" - colorcodes['blue'] = monochrome_logs ? '' : "\033[0;34m" - colorcodes['purple'] = monochrome_logs ? '' : "\033[0;35m" - colorcodes['cyan'] = monochrome_logs ? '' : "\033[0;36m" - colorcodes['white'] = monochrome_logs ? '' : "\033[0;37m" - - // Bold - colorcodes['bblack'] = monochrome_logs ? '' : "\033[1;30m" - colorcodes['bred'] = monochrome_logs ? '' : "\033[1;31m" - colorcodes['bgreen'] = monochrome_logs ? '' : "\033[1;32m" - colorcodes['byellow'] = monochrome_logs ? '' : "\033[1;33m" - colorcodes['bblue'] = monochrome_logs ? '' : "\033[1;34m" - colorcodes['bpurple'] = monochrome_logs ? '' : "\033[1;35m" - colorcodes['bcyan'] = monochrome_logs ? '' : "\033[1;36m" - colorcodes['bwhite'] = monochrome_logs ? '' : "\033[1;37m" - - // Underline - colorcodes['ublack'] = monochrome_logs ? '' : "\033[4;30m" - colorcodes['ured'] = monochrome_logs ? '' : "\033[4;31m" - colorcodes['ugreen'] = monochrome_logs ? '' : "\033[4;32m" - colorcodes['uyellow'] = monochrome_logs ? '' : "\033[4;33m" - colorcodes['ublue'] = monochrome_logs ? '' : "\033[4;34m" - colorcodes['upurple'] = monochrome_logs ? '' : "\033[4;35m" - colorcodes['ucyan'] = monochrome_logs ? '' : "\033[4;36m" - colorcodes['uwhite'] = monochrome_logs ? '' : "\033[4;37m" - - // High Intensity - colorcodes['iblack'] = monochrome_logs ? '' : "\033[0;90m" - colorcodes['ired'] = monochrome_logs ? '' : "\033[0;91m" - colorcodes['igreen'] = monochrome_logs ? '' : "\033[0;92m" - colorcodes['iyellow'] = monochrome_logs ? '' : "\033[0;93m" - colorcodes['iblue'] = monochrome_logs ? '' : "\033[0;94m" - colorcodes['ipurple'] = monochrome_logs ? '' : "\033[0;95m" - colorcodes['icyan'] = monochrome_logs ? '' : "\033[0;96m" - colorcodes['iwhite'] = monochrome_logs ? '' : "\033[0;97m" - - // Bold High Intensity - colorcodes['biblack'] = monochrome_logs ? '' : "\033[1;90m" - colorcodes['bired'] = monochrome_logs ? '' : "\033[1;91m" - colorcodes['bigreen'] = monochrome_logs ? '' : "\033[1;92m" - colorcodes['biyellow'] = monochrome_logs ? '' : "\033[1;93m" - colorcodes['biblue'] = monochrome_logs ? '' : "\033[1;94m" - colorcodes['bipurple'] = monochrome_logs ? '' : "\033[1;95m" - colorcodes['bicyan'] = monochrome_logs ? '' : "\033[1;96m" - colorcodes['biwhite'] = monochrome_logs ? '' : "\033[1;97m" - - return colorcodes - } - - // - // Does what is says on the tin - // - public static String dashedLine(monochrome_logs) { - Map colors = logColours(monochrome_logs) - return "-${colors.dim}----------------------------------------------------${colors.reset}-" - } - - // - // nf-core logo - // - public static String logo(workflow, monochrome_logs) { - Map colors = logColours(monochrome_logs) - String workflow_version = NfcoreTemplate.version(workflow) - 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} ${workflow_version}${colors.reset} - ${dashedLine(monochrome_logs)} - """.stripIndent() - ) - } -} diff --git a/lib/Utils.groovy b/lib/Utils.groovy deleted file mode 100644 index 8d030f4e..00000000 --- a/lib/Utils.groovy +++ /dev/null @@ -1,47 +0,0 @@ -// -// This file holds several Groovy functions that could be useful for any Nextflow pipeline -// - -import org.yaml.snakeyaml.Yaml - -class Utils { - - // - // When running with -profile conda, warn if channels have not been set-up appropriately - // - public static void checkCondaChannels(log) { - Yaml parser = new Yaml() - def channels = [] - try { - def config = parser.load("conda config --show channels".execute().text) - channels = config.channels - } catch(NullPointerException | IOException e) { - log.warn "Could not verify conda channel configuration." - return - } - - // Check that all channels are present - // This channel list is ordered by required channel priority. - def required_channels_in_order = ['conda-forge', 'bioconda', 'defaults'] - def channels_missing = ((required_channels_in_order as Set) - (channels as Set)) as Boolean - - // Check that they are in the right order - def channel_priority_violation = false - def n = required_channels_in_order.size() - for (int i = 0; i < n - 1; i++) { - channel_priority_violation |= !(channels.indexOf(required_channels_in_order[i]) < channels.indexOf(required_channels_in_order[i+1])) - } - - if (channels_missing | channel_priority_violation) { - log.warn "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + - " There is a problem with your Conda configuration!\n\n" + - " You will need to set-up the conda-forge and bioconda channels correctly.\n" + - " Please refer to https://bioconda.github.io/\n" + - " The observed channel order is \n" + - " ${channels}\n" + - " but the following channel order is required:\n" + - " ${required_channels_in_order}\n" + - "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" - } - } -} diff --git a/lib/WorkflowMain.groovy b/lib/WorkflowMain.groovy deleted file mode 100755 index 0900d434..00000000 --- a/lib/WorkflowMain.groovy +++ /dev/null @@ -1,62 +0,0 @@ -// -// This file holds several functions specific to the main.nf workflow in the nf-core/methylseq pipeline -// - -import nextflow.Nextflow - -class WorkflowMain { - - // - // Citation string for pipeline - // - public static String citation(workflow) { - return "If you use ${workflow.manifest.name} for your analysis please cite:\n\n" + - "* The pipeline\n" + - " https://doi.org/10.5281/zenodo.1343417\n\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" - } - - - // - // Validate parameters and print summary to screen - // - public static void initialise(workflow, params, log) { - - // Print workflow version and exit on --version - if (params.version) { - String workflow_version = NfcoreTemplate.version(workflow) - log.info "${workflow.manifest.name} ${workflow_version}" - System.exit(0) - } - - // Check that a -profile or Nextflow config has been provided to run the pipeline - NfcoreTemplate.checkConfigProvided(workflow, log) - - // Check that conda channels are set-up correctly - if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { - Utils.checkCondaChannels(log) - } - - // Check AWS batch settings - NfcoreTemplate.awsBatch(workflow, params) - - // Check input has been provided - if (!params.input) { - Nextflow.error("Please provide an input samplesheet to the pipeline e.g. '--input samplesheet.csv'") - } - } - // - // Get attribute from genome config file e.g. fasta - // - public static Object getGenomeAttribute(params, attribute) { - if (params.genomes && params.genome && params.genomes.containsKey(params.genome)) { - if (params.genomes[ params.genome ].containsKey(attribute)) { - return params.genomes[ params.genome ][ attribute ] - } - } - return null - } -} diff --git a/lib/WorkflowMethylseq.groovy b/lib/WorkflowMethylseq.groovy deleted file mode 100755 index d6d5d097..00000000 --- a/lib/WorkflowMethylseq.groovy +++ /dev/null @@ -1,131 +0,0 @@ -// -// This file holds several functions specific to the workflow/methylseq.nf in the nf-core/methylseq pipeline -// - -import nextflow.Nextflow -import groovy.text.SimpleTemplateEngine - -class WorkflowMethylseq { - - // - // Check and validate parameters - // - public static void initialise(params, log) { - - genomeExistsError(params, log) - - - if (!params.fasta) { - if (!params.bismark_index || params.aligner != 'bismark') { - Nextflow.error "Genome fasta file not specified with e.g. '--fasta genome.fa' or via a detectable config file." - } - } - } - - // - // Get workflow summary for MultiQC - // - public static String paramsSummaryMultiqc(workflow, summary) { - String summary_section = '' - for (group in summary.keySet()) { - def group_params = summary.get(group) // This gets the parameters of that particular group - if (group_params) { - summary_section += "

$group

\n" - summary_section += "
\n" - for (param in group_params.keySet()) { - summary_section += "
$param
${group_params.get(param) ?: 'N/A'}
\n" - } - summary_section += "
\n" - } - } - - String yaml_file_text = "id: '${workflow.manifest.name.replace('/','-')}-summary'\n" - yaml_file_text += "description: ' - this information is collected when the pipeline is started.'\n" - yaml_file_text += "section_name: '${workflow.manifest.name} Workflow Summary'\n" - yaml_file_text += "section_href: 'https://github.com/${workflow.manifest.name}'\n" - yaml_file_text += "plot_type: 'html'\n" - yaml_file_text += "data: |\n" - yaml_file_text += "${summary_section}" - return yaml_file_text - } - - // - // Generate methods description for MultiQC - // - - public static String toolCitationText(params) { - - // FIXME Can use ternary operators to dynamically construct based conditions, e.g. params["run_xyz"] ? "Tool (Foo et al. 2023)" : "", - def citation_text = [ - "Tools used in the workflow included:", - "FastQC (Andrews 2010),", - "Trim Galore! (Krueger)", - "Bismark (Krueger 2011)", - "bwa-meth (Pedersen 2014)", - "Picard (Broad Institute 2019)", - "Qualimap (Okonechnikov 2015)", - "Preseq (Daley 2013)", - "MultiQC (Ewels et al. 2016)", - "." - ].join(' ').trim() - - return citation_text - } - - public static String toolBibliographyText(params) { - - // FIXME Can use ternary operators to dynamically construct based conditions, e.g. params["run_xyz"] ? "
  • Author (2023) Pub name, Journal, DOI
  • " : "", - def reference_text = [ - "
  • Andrews S, (2010) FastQC, URL: https://www.bioinformatics.babraham.ac.uk/projects/fastqc/).", - "Ewels, P., Magnusson, M., Lundin, S., & KΓ€ller, M. (2016). MultiQC: summarize analysis results for multiple tools and samples in a single report. Bioinformatics , 32(19), 3047–3048. doi: /10.1093/bioinformatics/btw354", - "https://www.bioinformatics.babraham.ac.uk/projects/trim_galore", - "Felix Krueger, Simon R. Andrews, Bismark: a flexible aligner and methylation caller for Bisulfite-Seq applications, Bioinformatics, Volume 27, Issue 11, 1 June 2011, Pages 1571–1572, doi: /10.1093/bioinformatics/btr167", - "Pedersen, Brent S. and Eyring, Kenneth and De, Subhajyoti and Yang, Ivana V. and Schwartz, David A. Fast and accurate alignment of long bisulfite-seq reads, arXiv:1401.1129, doi: 10.48550/arXiv.1401.1129", - "Picard Tools, Broad Institute. ", - "Konstantin Okonechnikov, Ana Conesa, Fernando GarcΓ­a-Alcalde, Qualimap 2: advanced multi-sample quality control for high-throughput sequencing data, Bioinformatics, Volume 32, Issue 2, 15 January 2016, Pages 292–294, doi: 10.1093/bioinformatics/btv566", - "Daley, T., Smith, A. Predicting the molecular complexity of sequencing libraries. Nat Methods 10, 325–327 (2013). doi: 10.1038/nmeth.2375
  • ", - ].join('
  • ').trim() - - return reference_text - } - - public static String methodsDescriptionText(run_workflow, mqc_methods_yaml, params) { - // Convert to a named map so can be used as with familar NXF ${workflow} variable syntax in the MultiQC YML file - def meta = [:] - meta.workflow = run_workflow.toMap() - meta["manifest_map"] = run_workflow.manifest.toMap() - - // Pipeline DOI - meta["doi_text"] = meta.manifest_map.doi ? "(doi: ${meta.manifest_map.doi})" : "" - meta["nodoi_text"] = meta.manifest_map.doi ? "": "
  • If available, make sure to update the text to include the Zenodo DOI of version of the pipeline used.
  • " - - // Tool references - meta["tool_citations"] = "" - meta["tool_bibliography"] = "" - - meta["tool_citations"] = toolCitationText(params).replaceAll(", \\.", ".").replaceAll("\\. \\.", ".").replaceAll(", \\.", ".") - meta["tool_bibliography"] = toolBibliographyText(params) - - - def methods_text = mqc_methods_yaml.text - - def engine = new SimpleTemplateEngine() - def description_html = engine.createTemplate(methods_text).make(meta) - - return description_html - } - - // - // Exit pipeline if incorrect --genome key provided - // - private static void genomeExistsError(params, log) { - if (params.genomes && params.genome && !params.genomes.containsKey(params.genome)) { - def error_string = "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + - " Genome '${params.genome}' not found in any config files provided to the pipeline.\n" + - " Currently, the available genome keys are:\n" + - " ${params.genomes.keySet().join(", ")}\n" + - "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" - Nextflow.error(error_string) - } - } -} diff --git a/lib/nfcore_external_java_deps.jar b/lib/nfcore_external_java_deps.jar deleted file mode 100644 index 805c8bb5..00000000 Binary files a/lib/nfcore_external_java_deps.jar and /dev/null differ diff --git a/main.nf b/main.nf index 4b926ef1..5c1056c8 100644 --- a/main.nf +++ b/main.nf @@ -9,70 +9,112 @@ ---------------------------------------------------------------------------------------- */ -nextflow.enable.dsl = 2 - /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - GENOME PARAMETER VALUES + IMPORT FUNCTIONS / MODULES / SUBWORKFLOWS / WORKFLOWS ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ -params.fasta = WorkflowMain.getGenomeAttribute(params, 'fasta') -params.fasta_index = WorkflowMain.getGenomeAttribute(params, 'fasta_index') -params.bismark_index = WorkflowMain.getGenomeAttribute(params, 'bismark') -params.bwa_meth_index = WorkflowMain.getGenomeAttribute(params, 'bwa_meth') +include { METHYLSEQ } from './workflows/methylseq/' +include { PREPARE_GENOME } from './subworkflows/local/prepare_genome/' +include { PIPELINE_INITIALISATION } from './subworkflows/local/utils_nfcore_methylseq_pipeline' +include { PIPELINE_COMPLETION } from './subworkflows/local/utils_nfcore_methylseq_pipeline' +include { getGenomeAttribute } from './subworkflows/local/utils_nfcore_methylseq_pipeline' /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - VALIDATE & PRINT PARAMETER SUMMARY + GENOME PARAMETER VALUES ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ - -include { validateParameters; paramsHelp } from 'plugin/nf-validation' - -// Print help message if needed -if (params.help) { - def logo = NfcoreTemplate.logo(workflow, params.monochrome_logs) - def citation = '\n' + WorkflowMain.citation(workflow) + '\n' - def String command = "nextflow run ${workflow.manifest.name} --input samplesheet.csv --genome GRCh37 -profile docker" - log.info logo + paramsHelp(command) + citation + NfcoreTemplate.dashedLine(params.monochrome_logs) - System.exit(0) -} - -// Validate input parameters -if (params.validate_params) { - validateParameters() -} - -WorkflowMain.initialise(workflow, params, log) +params.fasta = getGenomeAttribute('fasta') +params.fasta_index = getGenomeAttribute('fasta_index') +params.bwameth_index = getGenomeAttribute('bwameth') +params.bismark_index = params.aligner == 'bismark_hisat' ? getGenomeAttribute('bismark_hisat2') : getGenomeAttribute('bismark') /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - NAMED WORKFLOW FOR PIPELINE + NAMED WORKFLOWS FOR PIPELINE ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ -include { METHYLSEQ } from './workflows/methylseq' - // -// WORKFLOW: Run main nf-core/methylseq analysis pipeline +// WORKFLOW: Run main analysis pipeline depending on type of input // workflow NFCORE_METHYLSEQ { - METHYLSEQ () -} + take: + samplesheet // channel: samplesheet read in from --input + + main: + + ch_versions = Channel.empty() + + // + // SUBWORKFLOW: Prepare any required reference genome indices + // + PREPARE_GENOME( + params.fasta, + params.fasta_index, + params.bismark_index, + params.bwameth_index, + ) + ch_versions = ch_versions.mix(PREPARE_GENOME.out.versions) + + // + // WORKFLOW: Run pipeline + // + + METHYLSEQ ( + samplesheet, + ch_versions, + PREPARE_GENOME.out.fasta, + PREPARE_GENOME.out.fasta_index, + PREPARE_GENOME.out.bismark_index, + PREPARE_GENOME.out.bwameth_index, + ) + emit: + multiqc_report = METHYLSEQ.out.multiqc_report // channel: /path/to/multiqc_report.html + versions = ch_versions // channel: [version1, version2, ...] + +} /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - RUN ALL WORKFLOWS + RUN MAIN WORKFLOW ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ -// -// WORKFLOW: Execute a single named workflow for the pipeline -// See: https://github.com/nf-core/rnaseq/issues/619 -// workflow { - NFCORE_METHYLSEQ () + + main: + // + // SUBWORKFLOW: Run initialisation tasks + // + PIPELINE_INITIALISATION ( + params.version, + params.validate_params, + params.monochrome_logs, + args, + params.outdir + ) + + // + // WORKFLOW: Run main workflow + // + NFCORE_METHYLSEQ ( + PIPELINE_INITIALISATION.out.samplesheet + ) + // + // SUBWORKFLOW: Run completion tasks + // + PIPELINE_COMPLETION ( + params.email, + params.email_on_fail, + params.plaintext_email, + params.outdir, + params.monochrome_logs, + params.hook_url, + NFCORE_METHYLSEQ.out.multiqc_report + ) } /* diff --git a/modules.json b/modules.json index bf351c59..53e3c295 100644 --- a/modules.json +++ b/modules.json @@ -7,135 +7,154 @@ "nf-core": { "bismark/align": { "branch": "master", - "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", + "git_sha": "9c4438173b1fcbf3f9004080e3af74af19d5f56e", "installed_by": ["modules"] }, "bismark/coverage2cytosine": { "branch": "master", - "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", + "git_sha": "430bcb24e43dabcafb5174c955300730e5ad23f7", "installed_by": ["modules"] }, "bismark/deduplicate": { "branch": "master", - "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", + "git_sha": "0755c617637d21b2c290b26d225debe3070aa109", "installed_by": ["modules"] }, "bismark/genomepreparation": { "branch": "master", - "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", + "git_sha": "3ab4739901f600a16ede0f491abfb6bf5d993cb2", "installed_by": ["modules"] }, "bismark/methylationextractor": { "branch": "master", - "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", + "git_sha": "0755c617637d21b2c290b26d225debe3070aa109", "installed_by": ["modules"] }, "bismark/report": { "branch": "master", - "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", + "git_sha": "0755c617637d21b2c290b26d225debe3070aa109", "installed_by": ["modules"] }, "bismark/summary": { "branch": "master", - "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", + "git_sha": "0755c617637d21b2c290b26d225debe3070aa109", "installed_by": ["modules"] }, "bwameth/align": { "branch": "master", - "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", + "git_sha": "9c4438173b1fcbf3f9004080e3af74af19d5f56e", "installed_by": ["modules"] }, "bwameth/index": { "branch": "master", - "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", + "git_sha": "a716d10039f9728f2674f45c33a95b605851ea50", "installed_by": ["modules"] }, "cat/fastq": { "branch": "master", - "git_sha": "5c460c5a4736974abde2843294f35307ee2b0e5e", + "git_sha": "a1abf90966a2a4016d3c3e41e228bfcbd4811ccc", "installed_by": ["modules"] }, - "custom/dumpsoftwareversions": { + "fastqc": { "branch": "master", - "git_sha": "37dee863936732fe7e05dc598bf6e183a8e7ef73", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, - "fastqc": { + "gunzip": { "branch": "master", - "git_sha": "65ad3e0b9a4099592e1102e92e10455dc661cf53", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "methyldackel/extract": { "branch": "master", - "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "methyldackel/mbias": { "branch": "master", - "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "multiqc": { "branch": "master", - "git_sha": "642a0d8afe373ac45244a7947fb8a6c0a5a312d4", + "git_sha": "cf17ca47590cc578dfb47db1c2a44ef86f89976d", "installed_by": ["modules"] }, "picard/markduplicates": { "branch": "master", - "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", + "git_sha": "49f4e50534fe4b64101e62ea41d5dc43b1324358", "installed_by": ["modules"] }, "preseq/lcextrap": { "branch": "master", - "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", + "git_sha": "a1abf90966a2a4016d3c3e41e228bfcbd4811ccc", "installed_by": ["modules"] }, "qualimap/bamqc": { "branch": "master", - "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "qualimap/bamqccram": { "branch": "master", - "git_sha": "603ecbd9f45300c9788f197d2a15a005685b4220", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "samtools/faidx": { "branch": "master", - "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", + "git_sha": "b13f07be4c508d6ff6312d354d09f2493243e208", "installed_by": ["modules"] }, "samtools/flagstat": { "branch": "master", - "git_sha": "570ec5bcfe19c49e16c9ca35a7a116563af6cc1c", + "git_sha": "b13f07be4c508d6ff6312d354d09f2493243e208", "installed_by": ["modules"] }, "samtools/index": { "branch": "master", - "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", + "git_sha": "b13f07be4c508d6ff6312d354d09f2493243e208", "installed_by": ["modules"] }, "samtools/sort": { "branch": "master", - "git_sha": "a0f7be95788366c1923171e358da7d049eb440f9", + "git_sha": "b7800db9b069ed505db3f9d91b8c72faea9be17b", "installed_by": ["modules"] }, "samtools/stats": { "branch": "master", - "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", + "git_sha": "b13f07be4c508d6ff6312d354d09f2493243e208", "installed_by": ["modules"] }, "trimgalore": { "branch": "master", - "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", + "git_sha": "49f4e50534fe4b64101e62ea41d5dc43b1324358", "installed_by": ["modules"] }, "untar": { "branch": "master", - "git_sha": "8fc1d24c710ebe1d5de0f2447ec9439fd3d9d66a", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] } } + }, + "subworkflows": { + "nf-core": { + "utils_nextflow_pipeline": { + "branch": "master", + "git_sha": "3aa0aec1d52d492fe241919f0c6100ebf0074082", + "installed_by": ["subworkflows"] + }, + "utils_nfcore_pipeline": { + "branch": "master", + "git_sha": "1b6b9a3338d011367137808b49b923515080e3ba", + "installed_by": ["subworkflows"] + }, + "utils_nfschema_plugin": { + "branch": "master", + "git_sha": "bbd5a41f4535a8defafe6080e00ea74c45f4f96c", + "installed_by": ["subworkflows"] + } + } } } } diff --git a/modules/nf-core/bismark/align/environment.yml b/modules/nf-core/bismark/align/environment.yml new file mode 100644 index 00000000..9bc4753b --- /dev/null +++ b/modules/nf-core/bismark/align/environment.yml @@ -0,0 +1,5 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::bismark=0.24.2 diff --git a/modules/nf-core/bismark/align/main.nf b/modules/nf-core/bismark/align/main.nf index d36f6726..d8ce3d01 100644 --- a/modules/nf-core/bismark/align/main.nf +++ b/modules/nf-core/bismark/align/main.nf @@ -2,19 +2,20 @@ process BISMARK_ALIGN { tag "$meta.id" label 'process_high' - conda "bioconda::bismark=0.24.0" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/bismark:0.24.0--hdfd78af_0' : - 'biocontainers/bismark:0.24.0--hdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/bismark:0.24.2--hdfd78af_0' : + 'biocontainers/bismark:0.24.2--hdfd78af_0' }" input: tuple val(meta), path(reads) - path index + tuple val(meta2), path(fasta) + tuple val(meta3), path(index) output: tuple val(meta), path("*bam") , emit: bam tuple val(meta), path("*report.txt"), emit: report - tuple val(meta), path("*fq.gz") , optional:true, emit: unmapped + tuple val(meta), path("*fq.gz") , emit: unmapped, optional: true path "versions.yml" , emit: versions when: @@ -54,8 +55,11 @@ process BISMARK_ALIGN { args += " --multicore ${ccore}" } } - """ + if [ ! -f $index/$fasta ]; then + ln -s \$(readlink $fasta) $index/$fasta; + fi + bismark \\ $fastq \\ --genome $index \\ @@ -67,4 +71,17 @@ process BISMARK_ALIGN { bismark: \$(echo \$(bismark -v 2>&1) | sed 's/^.*Bismark Version: v//; s/Copyright.*\$//') END_VERSIONS """ + + stub: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.bam + touch ${prefix}.report.txt + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + bismark: \$(echo \$(bismark -v 2>&1) | sed 's/^.*Bismark Version: v//; s/Copyright.*\$//') + END_VERSIONS + """ } diff --git a/modules/nf-core/bismark/align/meta.yml b/modules/nf-core/bismark/align/meta.yml index 91c17b8a..fa794b79 100644 --- a/modules/nf-core/bismark/align/meta.yml +++ b/modules/nf-core/bismark/align/meta.yml @@ -19,42 +19,74 @@ tools: documentation: https://github.com/FelixKrueger/Bismark/tree/master/Docs doi: 10.1093/bioinformatics/btr167 licence: ["GPL-3.0-or-later"] + identifier: biotools:bismark 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. - - index: - type: dir - description: Bismark genome index directory - pattern: "BismarkIndex" + - - 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 sample information + e.g. [ id:'test', single_end:false ] + - fasta: + type: file + description: | + Reference genome FASTA file + - - meta3: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - index: + type: directory + description: Bismark genome index directory + pattern: "BismarkIndex" output: - - 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}" - - unmapped: - type: file - description: Output FastQ file(s) containing unmapped reads - pattern: "*.{fq.gz}" + - 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}" - report: - type: file - description: Bismark alignment reports - pattern: "*{report.txt}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*report.txt": + type: file + description: Bismark alignment reports + pattern: "*{report.txt}" + - unmapped: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*fq.gz": + type: file + description: Output FastQ file(s) containing unmapped reads + pattern: "*.{fq.gz}" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@phue" +maintainers: + - "@phue" + - "@sateeshperi" diff --git a/modules/nf-core/bismark/align/nextflow.config b/modules/nf-core/bismark/align/nextflow.config new file mode 100644 index 00000000..7e6e83b6 --- /dev/null +++ b/modules/nf-core/bismark/align/nextflow.config @@ -0,0 +1,38 @@ +process { + withName: BISMARK_ALIGN { + ext.args = { [ + params.aligner == 'bismark_hisat' ? ' --hisat2' : ' --bowtie2', + params.aligner == 'bismark_hisat' && params.known_splices ? " --known-splicesite-infile <(hisat2_extract_splice_sites.py ${known_splices})" : '', + params.pbat ? ' --pbat' : '', + ( params.single_cell || params.non_directional || params.zymo ) ? ' --non_directional' : '', + params.unmapped ? ' --unmapped' : '', + params.relax_mismatches ? " --score_min L,0,-${params.num_mismatches}" : '', + params.local_alignment ? " --local" : '', + !meta.single_end && params.minins ? " --minins ${params.minins}" : '', + meta.single_end ? '' : ( + params.maxins ? " --maxins ${params.maxins}" : ( + params.em_seq ? " --maxins 1000" : '' + ) + ) + ].join(' ').trim() } + publishDir = [ + [ + path: { "${params.outdir}/${params.aligner}/alignments/unmapped" }, + mode: params.publish_dir_mode, + pattern: "*.fq.gz", + enabled: params.unmapped + ], + [ + path: { "${params.outdir}/${params.aligner}/alignments" }, + mode: params.publish_dir_mode, + pattern: "*.bam", + enabled: (params.save_align_intermeds || params.skip_deduplication || params.rrbs) + ], + [ + path: { "${params.outdir}/${params.aligner}/alignments/logs" }, + mode: params.publish_dir_mode, + pattern: "*.txt" + ] + ] + } +} \ No newline at end of file diff --git a/modules/nf-core/bismark/align/tests/main.nf.test b/modules/nf-core/bismark/align/tests/main.nf.test new file mode 100644 index 00000000..fcd693c8 --- /dev/null +++ b/modules/nf-core/bismark/align/tests/main.nf.test @@ -0,0 +1,182 @@ +nextflow_process { + + name "Test Process BISMARK_ALIGN" + script "../main.nf" + process "BISMARK_ALIGN" + + tag "modules" + tag "modules_nfcore" + tag "bismark" + tag "bismark/align" + tag "bismark/genomepreparation" + + setup { + run("BISMARK_GENOMEPREPARATION") { + script "../../genomepreparation/main.nf" + process { + """ + input[0] = Channel.of([ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ]) + """ + } + } + } + + test("bowtie2 single-end / sarscov2 genome [fasta]") { + config './nextflow_bowtie2.config' + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:true ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test.methylated_1.fastq.gz', checkIfExists: true) + ]) + input[1] = Channel.of([ [ id:'sarscov2'], file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) ]) + input[2] = BISMARK_GENOMEPREPARATION.out.index + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.bam.collect { bam(it[1]).getReadsMD5() }, + file(process.out.report[0][1]).readLines().contains("Number of alignments with a unique best hit from the different alignments:\t5009"), + process.out.unmapped, + process.out.versions + ).match() + } + ) + } + } + + test("bowtie2 paired-end / sarscov2 genome [fasta]") { + config './nextflow_bowtie2.config' + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:true ], + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test.methylated_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test.methylated_2.fastq.gz', checkIfExists: true) + ] + ]) + input[1] = Channel.of([ [ id:'sarscov2'], file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) ]) + input[2] = BISMARK_GENOMEPREPARATION.out.index + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.bam.collect { bam(it[1][0]).getReadsMD5() }, + file(process.out.report[0][1][0]).readLines().contains("Number of alignments with a unique best hit from the different alignments:\t5009"), + process.out.unmapped, + process.out.versions + ).match() + } + ) + } + } + + test("hisat2 single-end / sarscov2 genome [fasta]") { + config './nextflow_hisat2.config' + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:true ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test.methylated_1.fastq.gz', checkIfExists: true) + ]) + input[1] = Channel.of([ [ id:'sarscov2'], file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) ]) + input[2] = BISMARK_GENOMEPREPARATION.out.index + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.bam.collect { bam(it[1]).getReadsMD5() }, + file(process.out.report[0][1]).readLines().contains("Number of alignments with a unique best hit from the different alignments:\t5009"), + process.out.unmapped, + process.out.versions + ).match() + } + ) + } + } + + test("hisat2 paired-end / sarscov2 genome [fasta]") { + config './nextflow_hisat2.config' + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:true ], + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test.methylated_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test.methylated_2.fastq.gz', checkIfExists: true) + ] + ]) + input[1] = Channel.of([ [ id:'sarscov2'], file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) ]) + input[2] = BISMARK_GENOMEPREPARATION.out.index + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.bam.collect { bam(it[1][0]).getReadsMD5() }, + file(process.out.report[0][1][0]).readLines().contains("Number of alignments with a unique best hit from the different alignments:\t5009"), + process.out.unmapped, + process.out.versions + ).match() + } + ) + } + } + + test("minimap2 single-end / sarscov2 genome [fasta]") { + config './nextflow_minimap2.config' + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:true ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test.methylated_1.fastq.gz', checkIfExists: true) + ]) + input[1] = Channel.of([ [ id:'sarscov2'], file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) ]) + input[2] = BISMARK_GENOMEPREPARATION.out.index + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.bam.collect { bam(it[1]).getReadsMD5() }, + file(process.out.report[0][1]).readLines().contains("Number of alignments with a unique best hit from the different alignments:\t5047"), + process.out.unmapped, + process.out.versions + ).match() + } + ) + } + } +} diff --git a/modules/nf-core/bismark/align/tests/main.nf.test.snap b/modules/nf-core/bismark/align/tests/main.nf.test.snap new file mode 100644 index 00000000..3842cd6d --- /dev/null +++ b/modules/nf-core/bismark/align/tests/main.nf.test.snap @@ -0,0 +1,97 @@ +{ + "bowtie2 paired-end / sarscov2 genome [fasta]": { + "content": [ + [ + "936c0d5ce713130113e99e09a5b53afd" + ], + true, + [ + + ], + [ + "versions.yml:md5,50c4bb6313fda6a7c6212ceb5dd638f5" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-13T17:35:23.192447327" + }, + "hisat2 paired-end / sarscov2 genome [fasta]": { + "content": [ + [ + "936c0d5ce713130113e99e09a5b53afd" + ], + true, + [ + + ], + [ + "versions.yml:md5,50c4bb6313fda6a7c6212ceb5dd638f5" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-13T17:36:10.145541495" + }, + "minimap2 single-end / sarscov2 genome [fasta]": { + "content": [ + [ + "d354e6c6d6a06e36630590de8f27031a" + ], + true, + [ + + ], + [ + "versions.yml:md5,50c4bb6313fda6a7c6212ceb5dd638f5" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-13T17:36:32.094369612" + }, + "bowtie2 single-end / sarscov2 genome [fasta]": { + "content": [ + [ + "936c0d5ce713130113e99e09a5b53afd" + ], + true, + [ + + ], + [ + "versions.yml:md5,50c4bb6313fda6a7c6212ceb5dd638f5" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-13T17:34:58.431003479" + }, + "hisat2 single-end / sarscov2 genome [fasta]": { + "content": [ + [ + "936c0d5ce713130113e99e09a5b53afd" + ], + true, + [ + + ], + [ + "versions.yml:md5,50c4bb6313fda6a7c6212ceb5dd638f5" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-13T17:35:45.557280528" + } +} \ No newline at end of file diff --git a/modules/nf-core/bismark/align/tests/nextflow_bowtie2.config b/modules/nf-core/bismark/align/tests/nextflow_bowtie2.config new file mode 100644 index 00000000..cf0357e2 --- /dev/null +++ b/modules/nf-core/bismark/align/tests/nextflow_bowtie2.config @@ -0,0 +1,8 @@ +process { + withName: BISMARK_ALIGN { + ext.args = '--bowtie2' + } + withName: BISMARK_GENOMEPREPARATION { + ext.args = '--bowtie2' + } +} \ No newline at end of file diff --git a/modules/nf-core/bismark/align/tests/nextflow_hisat2.config b/modules/nf-core/bismark/align/tests/nextflow_hisat2.config new file mode 100644 index 00000000..5b962ae0 --- /dev/null +++ b/modules/nf-core/bismark/align/tests/nextflow_hisat2.config @@ -0,0 +1,8 @@ +process { + withName: BISMARK_ALIGN { + ext.args = '--hisat2' + } + withName: BISMARK_GENOMEPREPARATION { + ext.args = '--hisat2' + } +} \ No newline at end of file diff --git a/modules/nf-core/bismark/align/tests/nextflow_minimap2.config b/modules/nf-core/bismark/align/tests/nextflow_minimap2.config new file mode 100644 index 00000000..dd46fe26 --- /dev/null +++ b/modules/nf-core/bismark/align/tests/nextflow_minimap2.config @@ -0,0 +1,8 @@ +process { + withName: BISMARK_ALIGN { + ext.args = '--minimap2' + } + withName: BISMARK_GENOMEPREPARATION { + ext.args = '--minimap2' + } +} \ No newline at end of file diff --git a/modules/nf-core/bismark/coverage2cytosine/environment.yml b/modules/nf-core/bismark/coverage2cytosine/environment.yml new file mode 100644 index 00000000..9bc4753b --- /dev/null +++ b/modules/nf-core/bismark/coverage2cytosine/environment.yml @@ -0,0 +1,5 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::bismark=0.24.2 diff --git a/modules/nf-core/bismark/coverage2cytosine/main.nf b/modules/nf-core/bismark/coverage2cytosine/main.nf index f5429700..fe65c658 100644 --- a/modules/nf-core/bismark/coverage2cytosine/main.nf +++ b/modules/nf-core/bismark/coverage2cytosine/main.nf @@ -2,17 +2,18 @@ process BISMARK_COVERAGE2CYTOSINE { tag "$meta.id" label 'process_low' - conda "bioconda::bismark=0.23.0" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/bismark:0.24.0--hdfd78af_0' : - 'biocontainers/bismark:0.24.0--hdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/bismark:0.24.2--hdfd78af_0' : + 'biocontainers/bismark:0.24.2--hdfd78af_0' }" input: tuple val(meta), path(coverage_file) - path index + tuple val(meta2), path(fasta) + tuple val(meta3), path(index) output: - tuple val(meta), path("*.cov.gz"), optional: true , emit: coverage + tuple val(meta), path("*.cov.gz") , emit: coverage, optional: true tuple val(meta), path("*report.txt.gz") , emit: report tuple val(meta), path("*cytosine_context_summary.txt") , emit: summary path "versions.yml" , emit: versions @@ -23,8 +24,11 @@ process BISMARK_COVERAGE2CYTOSINE { script: def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" - """ + if [ ! -f $index/$fasta ]; then + ln -s \$(readlink $fasta) $index/$fasta; + fi + coverage2cytosine \\ $coverage_file \\ --genome $index \\ @@ -37,4 +41,18 @@ process BISMARK_COVERAGE2CYTOSINE { bismark: \$(echo \$(bismark -v 2>&1) | sed 's/^.*Bismark Version: v//; s/Copyright.*\$//') END_VERSIONS """ + + stub: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.cov.gz + touch ${prefix}.report.txt.gz + touch ${prefix}.cytosine_context_summary.txt + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + bismark: \$(echo \$(bismark -v 2>&1) | sed 's/^.*Bismark Version: v//; s/Copyright.*\$//') + END_VERSIONS + """ } diff --git a/modules/nf-core/bismark/coverage2cytosine/meta.yml b/modules/nf-core/bismark/coverage2cytosine/meta.yml index 511578c8..705b57f5 100644 --- a/modules/nf-core/bismark/coverage2cytosine/meta.yml +++ b/modules/nf-core/bismark/coverage2cytosine/meta.yml @@ -20,44 +20,73 @@ tools: documentation: https://github.com/FelixKrueger/Bismark/tree/master/Docs doi: 10.1093/bioinformatics/btr167 licence: ["GPL-3.0-or-later"] - + identifier: biotools:bismark input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - coverage_file: - type: file - description: | - A file containing methylation calls per position, in the format produced by bismark_methylation_extractor. - - index: - type: dir - description: Bismark genome index directory - pattern: "BismarkIndex" - + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - coverage_file: + type: file + description: | + A file containing methylation calls per position, in the format produced by bismark_methylation_extractor. + - - meta2: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - fasta: + type: file + description: | + Reference genome FASTA file + - - meta3: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - index: + type: directory + description: Bismark genome index directory + pattern: "BismarkIndex" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - coverage: - type: file - description: A file containing methylation calls per position. - pattern: "*.cov.gz" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.cov.gz": + type: file + description: A file containing methylation calls per position. + pattern: "*.cov.gz" - report: - type: file - description: Genomic cytosine context results. - pattern: "*report.txt.gz" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*report.txt.gz": + type: file + description: Genomic cytosine context results. + pattern: "*report.txt.gz" - summary: - type: file - description: Cyotosine context summary report. - pattern: "*cytosine_context_summary.txt" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*cytosine_context_summary.txt": + type: file + description: Cyotosine context summary report. + pattern: "*cytosine_context_summary.txt" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@ewels" +maintainers: + - "@ewels" + - "@sateeshperi" diff --git a/modules/nf-core/bismark/coverage2cytosine/nextflow.config b/modules/nf-core/bismark/coverage2cytosine/nextflow.config new file mode 100644 index 00000000..f593a1d1 --- /dev/null +++ b/modules/nf-core/bismark/coverage2cytosine/nextflow.config @@ -0,0 +1,20 @@ +process { + withName: BISMARK_COVERAGE2CYTOSINE { + ext.args = params.nomeseq ? '--nome-seq' : '' + publishDir = [ + path: { "${params.outdir}/bismark/coverage2cytosine/summaries" }, + mode: params.publish_dir_mode, + pattern: "*_summary.txt" + ] + publishDir = [ + path: { "${params.outdir}/bismark/coverage2cytosine/reports" }, + mode: params.publish_dir_mode, + pattern: "*_report.txt.gz" + ] + publishDir = [ + path: { "${params.outdir}/bismark/coverage2cytosine/coverage" }, + mode: params.publish_dir_mode, + pattern: "*cov.gz" + ] + } +} \ No newline at end of file diff --git a/modules/nf-core/bismark/coverage2cytosine/tests/main.nf.test b/modules/nf-core/bismark/coverage2cytosine/tests/main.nf.test new file mode 100644 index 00000000..ac4f7ae2 --- /dev/null +++ b/modules/nf-core/bismark/coverage2cytosine/tests/main.nf.test @@ -0,0 +1,62 @@ +nextflow_process { + + name "Test Process BISMARK_COVERAGE2CYTOSINE" + script "../main.nf" + process "BISMARK_COVERAGE2CYTOSINE" + + tag "modules" + tag "modules_nfcore" + tag "bismark" + tag "bismark/coverage2cytosine" + tag "bismark/methylationextractor" + tag "bismark/genomepreparation" + + test("sarscov2 genome [fasta] | sarscov2 paired-end methylated [bam]") { + + setup { + run("BISMARK_GENOMEPREPARATION") { + script "../../genomepreparation/main.nf" + process { + """ + input[0] = Channel.of([ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ]) + """ + } + } + + run("BISMARK_METHYLATIONEXTRACTOR") { + script "../../methylationextractor/main.nf" + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.methylated.bam', checkIfExists: true) + ]) + input[1] = BISMARK_GENOMEPREPARATION.out.index + """ + } + } + } + + when { + process { + """ + input[0] = BISMARK_METHYLATIONEXTRACTOR.out.coverage + input[1] = input[1] = Channel.of([ [ id:'sarscov2'], file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) ]) + input[2] = BISMARK_GENOMEPREPARATION.out.index + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + +} diff --git a/modules/nf-core/bismark/coverage2cytosine/tests/main.nf.test.snap b/modules/nf-core/bismark/coverage2cytosine/tests/main.nf.test.snap new file mode 100644 index 00000000..58c02986 --- /dev/null +++ b/modules/nf-core/bismark/coverage2cytosine/tests/main.nf.test.snap @@ -0,0 +1,61 @@ +{ + "sarscov2 genome [fasta] | sarscov2 paired-end methylated [bam]": { + "content": [ + { + "0": [ + + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.CpG_report.txt.gz:md5,0b83c760c7b3df21a320f054bbb865fb" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test.cytosine_context_summary.txt:md5,5ed486bfa844a5e476a7ab054a7a8d6b" + ] + ], + "3": [ + "versions.yml:md5,d68e9a778e9c156a80869e880c0518c8" + ], + "coverage": [ + + ], + "report": [ + [ + { + "id": "test", + "single_end": false + }, + "test.CpG_report.txt.gz:md5,0b83c760c7b3df21a320f054bbb865fb" + ] + ], + "summary": [ + [ + { + "id": "test", + "single_end": false + }, + "test.cytosine_context_summary.txt:md5,5ed486bfa844a5e476a7ab054a7a8d6b" + ] + ], + "versions": [ + "versions.yml:md5,d68e9a778e9c156a80869e880c0518c8" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-13T18:20:45.406703493" + } +} \ No newline at end of file diff --git a/modules/nf-core/bismark/deduplicate/environment.yml b/modules/nf-core/bismark/deduplicate/environment.yml new file mode 100644 index 00000000..9bc4753b --- /dev/null +++ b/modules/nf-core/bismark/deduplicate/environment.yml @@ -0,0 +1,5 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::bismark=0.24.2 diff --git a/modules/nf-core/bismark/deduplicate/main.nf b/modules/nf-core/bismark/deduplicate/main.nf index 7e238d77..2da9312c 100644 --- a/modules/nf-core/bismark/deduplicate/main.nf +++ b/modules/nf-core/bismark/deduplicate/main.nf @@ -2,10 +2,10 @@ process BISMARK_DEDUPLICATE { tag "$meta.id" label 'process_high' - conda "bioconda::bismark=0.24.0" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/bismark:0.24.0--hdfd78af_0' : - 'biocontainers/bismark:0.24.0--hdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/bismark:0.24.2--hdfd78af_0' : + 'biocontainers/bismark:0.24.2--hdfd78af_0' }" input: tuple val(meta), path(bam) @@ -19,9 +19,9 @@ process BISMARK_DEDUPLICATE { task.ext.when == null || task.ext.when script: - def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" - def seqtype = meta.single_end ? '-s' : '-p' + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def seqtype = meta.single_end ? '-s' : '-p' """ deduplicate_bismark \\ $args \\ @@ -33,4 +33,17 @@ process BISMARK_DEDUPLICATE { bismark: \$(echo \$(bismark -v 2>&1) | sed 's/^.*Bismark Version: v//; s/Copyright.*\$//') END_VERSIONS """ + + stub: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.deduplicated.bam + touch ${prefix}.deduplication_report.txt + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + bismark: \$(echo \$(bismark -v 2>&1) | sed 's/^.*Bismark Version: v//; s/Copyright.*\$//') + END_VERSIONS + """ } diff --git a/modules/nf-core/bismark/deduplicate/meta.yml b/modules/nf-core/bismark/deduplicate/meta.yml index a310a851..5de7c210 100644 --- a/modules/nf-core/bismark/deduplicate/meta.yml +++ b/modules/nf-core/bismark/deduplicate/meta.yml @@ -21,33 +21,45 @@ tools: documentation: https://github.com/FelixKrueger/Bismark/tree/master/Docs doi: 10.1093/bioinformatics/btr167 licence: ["GPL-3.0-or-later"] + identifier: biotools:bismark input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - bam: - type: file - description: BAM file containing read alignments - pattern: "*.{bam}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: BAM file containing read alignments + pattern: "*.{bam}" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - bam: - type: file - description: Deduplicated output BAM file containing read alignments - pattern: "*.{deduplicated.bam}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.deduplicated.bam": + type: file + description: Deduplicated output BAM file containing read alignments + pattern: "*.{deduplicated.bam}" - report: - type: file - description: Bismark deduplication reports - pattern: "*.{deduplication_report.txt}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.deduplication_report.txt": + type: file + description: Bismark deduplication reports + pattern: "*.{deduplication_report.txt}" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@phue" +maintainers: + - "@phue" + - "@sateeshperi" diff --git a/modules/nf-core/bismark/deduplicate/nextflow.config b/modules/nf-core/bismark/deduplicate/nextflow.config new file mode 100644 index 00000000..b2b51c29 --- /dev/null +++ b/modules/nf-core/bismark/deduplicate/nextflow.config @@ -0,0 +1,12 @@ +process { + withName: BISMARK_DEDUPLICATE { + ext.args = '' + publishDir = [ + [ + path: { "${params.outdir}/${params.aligner}/deduplicated/logs" }, + mode: params.publish_dir_mode, + pattern: "*.txt" + ] + ] + } +} \ No newline at end of file diff --git a/modules/nf-core/bismark/deduplicate/tests/main.nf.test b/modules/nf-core/bismark/deduplicate/tests/main.nf.test new file mode 100644 index 00000000..a82b4b73 --- /dev/null +++ b/modules/nf-core/bismark/deduplicate/tests/main.nf.test @@ -0,0 +1,39 @@ +nextflow_process { + + name "Test Process BISMARK_DEDUPLICATE" + script "../main.nf" + process "BISMARK_DEDUPLICATE" + + tag "bismark" + tag "bismark/deduplicate" + tag "modules" + tag "modules_nfcore" + + test("sarscov2 paired-end methylated [bam]") { + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.methylated.bam', checkIfExists: true) + ]) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.bam.collect { bam(it[1]).getReadsMD5() }, + process.out.report, + process.out.versions + ).match() + } + ) + } + + } + +} diff --git a/modules/nf-core/bismark/deduplicate/tests/main.nf.test.snap b/modules/nf-core/bismark/deduplicate/tests/main.nf.test.snap new file mode 100644 index 00000000..98e72559 --- /dev/null +++ b/modules/nf-core/bismark/deduplicate/tests/main.nf.test.snap @@ -0,0 +1,26 @@ +{ + "sarscov2 paired-end methylated [bam]": { + "content": [ + [ + "8036b4b920354438ddd1871c88f5088" + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.paired_end.methylated.deduplication_report.txt:md5,86aaf87bac9ccdc3cc83628f20b902dc" + ] + ], + [ + "versions.yml:md5,80ac07cad7c9ea075ffd7b75d74c39cd" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-13T18:31:09.804719461" + } +} \ No newline at end of file diff --git a/modules/nf-core/bismark/genomepreparation/environment.yml b/modules/nf-core/bismark/genomepreparation/environment.yml new file mode 100644 index 00000000..9bc4753b --- /dev/null +++ b/modules/nf-core/bismark/genomepreparation/environment.yml @@ -0,0 +1,5 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::bismark=0.24.2 diff --git a/modules/nf-core/bismark/genomepreparation/main.nf b/modules/nf-core/bismark/genomepreparation/main.nf index 8f424443..c94e9fec 100644 --- a/modules/nf-core/bismark/genomepreparation/main.nf +++ b/modules/nf-core/bismark/genomepreparation/main.nf @@ -2,17 +2,17 @@ process BISMARK_GENOMEPREPARATION { tag "$fasta" label 'process_high' - conda "bioconda::bismark=0.24.0" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/bismark:0.24.0--hdfd78af_0' : - 'biocontainers/bismark:0.24.0--hdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/bismark:0.24.2--hdfd78af_0' : + 'biocontainers/bismark:0.24.2--hdfd78af_0' }" input: - path fasta, stageAs: "BismarkIndex/*" + tuple val(meta), path(fasta, name:"BismarkIndex/") output: - path "BismarkIndex" , emit: index - path "versions.yml" , emit: versions + tuple val(meta), path("BismarkIndex"), emit: index + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when @@ -24,6 +24,37 @@ process BISMARK_GENOMEPREPARATION { $args \\ BismarkIndex + rm $fasta + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + bismark: \$(echo \$(bismark -v 2>&1) | sed 's/^.*Bismark Version: v//; s/Copyright.*\$//') + END_VERSIONS + """ + + stub: + def args = task.ext.args ?: '' + """ + rm $fasta + + mkdir -p BismarkIndex/Bisulfite_Genome/CT_conversion + touch BismarkIndex/Bisulfite_Genome/CT_conversion/BS_CT.1.bt2 + touch BismarkIndex/Bisulfite_Genome/CT_conversion/BS_CT.2.bt2 + touch BismarkIndex/Bisulfite_Genome/CT_conversion/BS_CT.3.bt2 + touch BismarkIndex/Bisulfite_Genome/CT_conversion/BS_CT.4.bt2 + touch BismarkIndex/Bisulfite_Genome/CT_conversion/BS_CT.rev.1.bt2 + touch BismarkIndex/Bisulfite_Genome/CT_conversion/BS_CT.rev.2.bt2 + touch BismarkIndex/Bisulfite_Genome/CT_conversion/genome_mfa.CT_conversion.fa + + mkdir -p BismarkIndex/Bisulfite_Genome/GA_conversion + touch BismarkIndex/Bisulfite_Genome/GA_conversion/BS_GA.1.bt2 + touch BismarkIndex/Bisulfite_Genome/GA_conversion/BS_GA.2.bt2 + touch BismarkIndex/Bisulfite_Genome/GA_conversion/BS_GA.3.bt2 + touch BismarkIndex/Bisulfite_Genome/GA_conversion/BS_GA.4.bt2 + touch BismarkIndex/Bisulfite_Genome/GA_conversion/BS_GA.rev.1.bt2 + touch BismarkIndex/Bisulfite_Genome/GA_conversion/BS_GA.rev.2.bt2 + touch BismarkIndex/Bisulfite_Genome/GA_conversion/genome_mfa.GA_conversion.fa + cat <<-END_VERSIONS > versions.yml "${task.process}": bismark: \$(echo \$(bismark -v 2>&1) | sed 's/^.*Bismark Version: v//; s/Copyright.*\$//') diff --git a/modules/nf-core/bismark/genomepreparation/meta.yml b/modules/nf-core/bismark/genomepreparation/meta.yml index 23588e1d..c1880271 100644 --- a/modules/nf-core/bismark/genomepreparation/meta.yml +++ b/modules/nf-core/bismark/genomepreparation/meta.yml @@ -21,18 +21,34 @@ tools: documentation: https://github.com/FelixKrueger/Bismark/tree/master/Docs doi: 10.1093/bioinformatics/btr167 licence: ["GPL-3.0-or-later"] + identifier: biotools:bismark input: - - fasta: - type: file - description: Input genome fasta file + - - 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: - type: dir - description: Bismark genome index directory - pattern: "BismarkIndex" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - BismarkIndex: + type: directory + description: Bismark genome index directory + pattern: "BismarkIndex" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@phue" +maintainers: + - "@phue" + - "@sateeshperi" diff --git a/modules/nf-core/bismark/genomepreparation/nextflow.config b/modules/nf-core/bismark/genomepreparation/nextflow.config new file mode 100644 index 00000000..ed506125 --- /dev/null +++ b/modules/nf-core/bismark/genomepreparation/nextflow.config @@ -0,0 +1,14 @@ +process { + withName: BISMARK_GENOMEPREPARATION { + ext.args = [ + params.aligner == 'bismark_hisat' ? ' --hisat2' : ' --bowtie2', + params.slamseq ? ' --slam' : '' + ].join(' ').trim() + publishDir = [ + path: { "${params.outdir}/${params.aligner}/reference_genome" }, + saveAs: { it =~ /.*\.yml/ ? null : it }, + mode: params.publish_dir_mode, + enabled: params.save_reference + ] + } +} \ No newline at end of file diff --git a/modules/nf-core/bismark/genomepreparation/tests/main.nf.test b/modules/nf-core/bismark/genomepreparation/tests/main.nf.test new file mode 100644 index 00000000..3ba99722 --- /dev/null +++ b/modules/nf-core/bismark/genomepreparation/tests/main.nf.test @@ -0,0 +1,56 @@ +nextflow_process { + + name "Test Process BISMARK_GENOMEPREPARATION" + script "../main.nf" + process "BISMARK_GENOMEPREPARATION" + + tag "modules" + tag "bismark/genomepreparation" + tag "bismark" + tag "modules_nfcore" + + test("sarscov2 genome [fasta]") { + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test' ], // 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() } + ) + } + } + + test("sarscov2 genome [fasta] - stub") { + + options "-stub" + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test' ], // 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/bismark/genomepreparation/tests/main.nf.test.snap b/modules/nf-core/bismark/genomepreparation/tests/main.nf.test.snap new file mode 100644 index 00000000..d56b414d --- /dev/null +++ b/modules/nf-core/bismark/genomepreparation/tests/main.nf.test.snap @@ -0,0 +1,152 @@ +{ + "sarscov2 genome [fasta] - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + [ + [ + [ + "BS_CT.1.bt2:md5,d41d8cd98f00b204e9800998ecf8427e", + "BS_CT.2.bt2:md5,d41d8cd98f00b204e9800998ecf8427e", + "BS_CT.3.bt2:md5,d41d8cd98f00b204e9800998ecf8427e", + "BS_CT.4.bt2:md5,d41d8cd98f00b204e9800998ecf8427e", + "BS_CT.rev.1.bt2:md5,d41d8cd98f00b204e9800998ecf8427e", + "BS_CT.rev.2.bt2:md5,d41d8cd98f00b204e9800998ecf8427e", + "genome_mfa.CT_conversion.fa:md5,d41d8cd98f00b204e9800998ecf8427e" + ], + [ + "BS_GA.1.bt2:md5,d41d8cd98f00b204e9800998ecf8427e", + "BS_GA.2.bt2:md5,d41d8cd98f00b204e9800998ecf8427e", + "BS_GA.3.bt2:md5,d41d8cd98f00b204e9800998ecf8427e", + "BS_GA.4.bt2:md5,d41d8cd98f00b204e9800998ecf8427e", + "BS_GA.rev.1.bt2:md5,d41d8cd98f00b204e9800998ecf8427e", + "BS_GA.rev.2.bt2:md5,d41d8cd98f00b204e9800998ecf8427e", + "genome_mfa.GA_conversion.fa:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ] + ] + ], + "1": [ + "versions.yml:md5,4d9a42530334575b18a6bde4ae72f7d6" + ], + "index": [ + [ + { + "id": "test" + }, + [ + [ + [ + "BS_CT.1.bt2:md5,d41d8cd98f00b204e9800998ecf8427e", + "BS_CT.2.bt2:md5,d41d8cd98f00b204e9800998ecf8427e", + "BS_CT.3.bt2:md5,d41d8cd98f00b204e9800998ecf8427e", + "BS_CT.4.bt2:md5,d41d8cd98f00b204e9800998ecf8427e", + "BS_CT.rev.1.bt2:md5,d41d8cd98f00b204e9800998ecf8427e", + "BS_CT.rev.2.bt2:md5,d41d8cd98f00b204e9800998ecf8427e", + "genome_mfa.CT_conversion.fa:md5,d41d8cd98f00b204e9800998ecf8427e" + ], + [ + "BS_GA.1.bt2:md5,d41d8cd98f00b204e9800998ecf8427e", + "BS_GA.2.bt2:md5,d41d8cd98f00b204e9800998ecf8427e", + "BS_GA.3.bt2:md5,d41d8cd98f00b204e9800998ecf8427e", + "BS_GA.4.bt2:md5,d41d8cd98f00b204e9800998ecf8427e", + "BS_GA.rev.1.bt2:md5,d41d8cd98f00b204e9800998ecf8427e", + "BS_GA.rev.2.bt2:md5,d41d8cd98f00b204e9800998ecf8427e", + "genome_mfa.GA_conversion.fa:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ] + ] + ], + "versions": [ + "versions.yml:md5,4d9a42530334575b18a6bde4ae72f7d6" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-18T15:50:44.009733" + }, + "sarscov2 genome [fasta]": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + [ + [ + [ + "BS_CT.1.bt2:md5,10a8854e5eeb95629f46d24b0d8da70c", + "BS_CT.2.bt2:md5,bc5d407e6fce3e1cdb4b23ab2a20f707", + "BS_CT.3.bt2:md5,4ed93abba181d8dfab2e303e33114777", + "BS_CT.4.bt2:md5,6c4f549575e5882ff3a97ae10ae2e7be", + "BS_CT.rev.1.bt2:md5,d37d586b41b6a36efb25839961d242cb", + "BS_CT.rev.2.bt2:md5,48bf400de85cd7324fbf6bf38fe2dc95", + "genome_mfa.CT_conversion.fa:md5,903b9f357eea4a5f36e21e78e0fe1dfa" + ], + [ + "BS_GA.1.bt2:md5,a6fa4068ed10872568f32568c66cb600", + "BS_GA.2.bt2:md5,fc5b634e2f5137801e3801d62ad05f74", + "BS_GA.3.bt2:md5,4ed93abba181d8dfab2e303e33114777", + "BS_GA.4.bt2:md5,b1e855685ed634daa7df8e180c9b2fc4", + "BS_GA.rev.1.bt2:md5,17f51e65f44477962226a83b369b2bc4", + "BS_GA.rev.2.bt2:md5,d36044c5dfe37af0411f60d446585bc6", + "genome_mfa.GA_conversion.fa:md5,e529375ec2039112161465b5169fcd59" + ] + ] + ] + ] + ], + "1": [ + "versions.yml:md5,4d9a42530334575b18a6bde4ae72f7d6" + ], + "index": [ + [ + { + "id": "test" + }, + [ + [ + [ + "BS_CT.1.bt2:md5,10a8854e5eeb95629f46d24b0d8da70c", + "BS_CT.2.bt2:md5,bc5d407e6fce3e1cdb4b23ab2a20f707", + "BS_CT.3.bt2:md5,4ed93abba181d8dfab2e303e33114777", + "BS_CT.4.bt2:md5,6c4f549575e5882ff3a97ae10ae2e7be", + "BS_CT.rev.1.bt2:md5,d37d586b41b6a36efb25839961d242cb", + "BS_CT.rev.2.bt2:md5,48bf400de85cd7324fbf6bf38fe2dc95", + "genome_mfa.CT_conversion.fa:md5,903b9f357eea4a5f36e21e78e0fe1dfa" + ], + [ + "BS_GA.1.bt2:md5,a6fa4068ed10872568f32568c66cb600", + "BS_GA.2.bt2:md5,fc5b634e2f5137801e3801d62ad05f74", + "BS_GA.3.bt2:md5,4ed93abba181d8dfab2e303e33114777", + "BS_GA.4.bt2:md5,b1e855685ed634daa7df8e180c9b2fc4", + "BS_GA.rev.1.bt2:md5,17f51e65f44477962226a83b369b2bc4", + "BS_GA.rev.2.bt2:md5,d36044c5dfe37af0411f60d446585bc6", + "genome_mfa.GA_conversion.fa:md5,e529375ec2039112161465b5169fcd59" + ] + ] + ] + ] + ], + "versions": [ + "versions.yml:md5,4d9a42530334575b18a6bde4ae72f7d6" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-13T08:26:20.352083082" + } +} \ No newline at end of file diff --git a/modules/nf-core/bismark/methylationextractor/environment.yml b/modules/nf-core/bismark/methylationextractor/environment.yml new file mode 100644 index 00000000..9bc4753b --- /dev/null +++ b/modules/nf-core/bismark/methylationextractor/environment.yml @@ -0,0 +1,5 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::bismark=0.24.2 diff --git a/modules/nf-core/bismark/methylationextractor/main.nf b/modules/nf-core/bismark/methylationextractor/main.nf index 2a3e5d22..3a71d35d 100644 --- a/modules/nf-core/bismark/methylationextractor/main.nf +++ b/modules/nf-core/bismark/methylationextractor/main.nf @@ -2,14 +2,14 @@ process BISMARK_METHYLATIONEXTRACTOR { tag "$meta.id" label 'process_high' - conda "bioconda::bismark=0.24.0" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/bismark:0.24.0--hdfd78af_0' : - 'biocontainers/bismark:0.24.0--hdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/bismark:0.24.2--hdfd78af_0' : + 'biocontainers/bismark:0.24.2--hdfd78af_0' }" input: tuple val(meta), path(bam) - path index + tuple val(meta2), path(index) output: tuple val(meta), path("*.bedGraph.gz") , emit: bedgraph @@ -49,4 +49,20 @@ process BISMARK_METHYLATIONEXTRACTOR { bismark: \$(echo \$(bismark -v 2>&1) | sed 's/^.*Bismark Version: v//; s/Copyright.*\$//') END_VERSIONS """ + + stub: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.bedGraph.gz + touch ${prefix}.txt.gz + touch ${prefix}.cov.gz + touch ${prefix}_splitting_report.txt + touch ${prefix}.M-bias.txt + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + bismark: \$(echo \$(bismark -v 2>&1) | sed 's/^.*Bismark Version: v//; s/Copyright.*\$//') + END_VERSIONS + """ } diff --git a/modules/nf-core/bismark/methylationextractor/meta.yml b/modules/nf-core/bismark/methylationextractor/meta.yml index 81b14144..2aaefdfa 100644 --- a/modules/nf-core/bismark/methylationextractor/meta.yml +++ b/modules/nf-core/bismark/methylationextractor/meta.yml @@ -20,49 +20,84 @@ tools: documentation: https://github.com/FelixKrueger/Bismark/tree/master/Docs doi: 10.1093/bioinformatics/btr167 licence: ["GPL-3.0-or-later"] + identifier: biotools:bismark input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - bam: - type: file - description: BAM file containing read alignments - pattern: "*.{bam}" - - index: - type: dir - description: Bismark genome index directory - pattern: "BismarkIndex" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: BAM file containing read alignments + pattern: "*.{bam}" + - - meta2: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - index: + type: directory + description: Bismark genome index directory + pattern: "BismarkIndex" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - bedgraph: - type: file - description: Bismark output file containing coverage and methylation metrics - pattern: "*.{bedGraph.gz}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.bedGraph.gz": + type: file + description: Bismark output file containing coverage and methylation metrics + pattern: "*.{bedGraph.gz}" - methylation_calls: - type: file - description: Bismark output file containing strand-specific methylation calls - pattern: "*.{txt.gz}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.txt.gz": + type: file + description: Bismark output file containing strand-specific methylation calls + pattern: "*.{txt.gz}" - coverage: - type: file - description: Bismark output file containing coverage metrics - pattern: "*.{cov.gz}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.cov.gz": + type: file + description: Bismark output file containing coverage metrics + pattern: "*.{cov.gz}" - report: - type: file - description: Bismark splitting reports - pattern: "*_{splitting_report.txt}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*_splitting_report.txt": + type: file + description: Bismark splitting reports + pattern: "*_{splitting_report.txt}" - mbias: - type: file - description: Text file containing methylation bias information - pattern: "*.{M-bias.txt}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.M-bias.txt": + type: file + description: Text file containing methylation bias information + pattern: "*.{M-bias.txt}" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@phue" +maintainers: + - "@phue" + - "@sateeshperi" diff --git a/modules/nf-core/bismark/methylationextractor/nextflow.config b/modules/nf-core/bismark/methylationextractor/nextflow.config new file mode 100644 index 00000000..b312885b --- /dev/null +++ b/modules/nf-core/bismark/methylationextractor/nextflow.config @@ -0,0 +1,41 @@ +process { + withName: BISMARK_METHYLATIONEXTRACTOR { + ext.args = { [ + params.comprehensive ? ' --comprehensive --merge_non_CpG' : '', + params.meth_cutoff ? " --cutoff ${params.meth_cutoff}" : '', + params.nomeseq ? '--CX' : '', + params.ignore_r1 > 0 ? "--ignore ${params.ignore_r1}" : '', + params.ignore_3prime_r1 > 0 ? "--ignore_3prime ${params.ignore_3prime_r1}" : '', + meta.single_end ? '' : (params.no_overlap ? ' --no_overlap' : '--include_overlap'), + meta.single_end ? '' : (params.ignore_r2 > 0 ? "--ignore_r2 ${params.ignore_r2}" : ""), + meta.single_end ? '' : (params.ignore_3prime_r2 > 0 ? "--ignore_3prime_r2 ${params.ignore_3prime_r2}": "") + ].join(' ').trim() } + publishDir = [ + [ + path: { "${params.outdir}/${params.aligner}/methylation_calls/mbias" }, + mode: params.publish_dir_mode, + pattern: "*M-bias.txt" + ], + [ + path: { "${params.outdir}/${params.aligner}/methylation_calls/methylation_coverage" }, + mode: params.publish_dir_mode, + pattern: "*cov.gz" + ], + [ + path: { "${params.outdir}/${params.aligner}/methylation_calls/bedGraph" }, + mode: params.publish_dir_mode, + pattern: "*bedGraph.gz" + ], + [ + path: { "${params.outdir}/${params.aligner}/methylation_calls/splitting_report" }, + mode: params.publish_dir_mode, + pattern: "*splitting_report.txt" + ], + [ + path: { "${params.outdir}/${params.aligner}/methylation_calls/methylation_calls" }, + mode: params.publish_dir_mode, + pattern: "*txt.gz" + ] + ] + } +} \ No newline at end of file diff --git a/modules/nf-core/bismark/methylationextractor/tests/main.nf.test b/modules/nf-core/bismark/methylationextractor/tests/main.nf.test new file mode 100644 index 00000000..fce2e35b --- /dev/null +++ b/modules/nf-core/bismark/methylationextractor/tests/main.nf.test @@ -0,0 +1,50 @@ +nextflow_process { + + name "Test Process BISMARK_METHYLATIONEXTRACTOR" + script "../main.nf" + process "BISMARK_METHYLATIONEXTRACTOR" + + tag "modules" + tag "modules_nfcore" + tag "bismark" + tag "bismark/methylationextractor" + tag "bismark/genomepreparation" + + test("sarscov2 paired-end methylated [bam] / sarscov2 genome [fasta]") { + + setup { + run("BISMARK_GENOMEPREPARATION") { + script "../../genomepreparation/main.nf" + process { + """ + input[0] = Channel.of([ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ]) + """ + } + } + } + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.methylated.bam', checkIfExists: true) + ]) + input[1] = BISMARK_GENOMEPREPARATION.out.index + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match()} + ) + } + + } + +} diff --git a/modules/nf-core/bismark/methylationextractor/tests/main.nf.test.snap b/modules/nf-core/bismark/methylationextractor/tests/main.nf.test.snap new file mode 100644 index 00000000..dd83c755 --- /dev/null +++ b/modules/nf-core/bismark/methylationextractor/tests/main.nf.test.snap @@ -0,0 +1,123 @@ +{ + "sarscov2 paired-end methylated [bam] / sarscov2 genome [fasta]": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.paired_end.methylated.bedGraph.gz:md5,3e461daa0b89ee4eeb76e336ad6aad7a" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "CHG_OB_test.paired_end.methylated.txt.gz:md5,de98c596d927732d0a5a4cf4b3b9e7ae", + "CHG_OT_test.paired_end.methylated.txt.gz:md5,64ea7598db55ae810bc6846afe1941b8", + "CHH_OB_test.paired_end.methylated.txt.gz:md5,fac33b1186436430913d844662862972", + "CHH_OT_test.paired_end.methylated.txt.gz:md5,2a1509bd87032f9ae2c7ca5d0d728b3a", + "CpG_OB_test.paired_end.methylated.txt.gz:md5,dfecc0ceaca41ac848ff7d6e990a3f17", + "CpG_OT_test.paired_end.methylated.txt.gz:md5,5280f3ea983ee0f33b7c467f63f6c6d1" + ] + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test.paired_end.methylated.bismark.cov.gz:md5,1524da1472ed1ad0c0663a9676c142e0" + ] + ], + "3": [ + [ + { + "id": "test", + "single_end": false + }, + "test.paired_end.methylated_splitting_report.txt:md5,25f4f2fbf35cc9d7dc9e21209c40ca07" + ] + ], + "4": [ + [ + { + "id": "test", + "single_end": false + }, + "test.paired_end.methylated.M-bias.txt:md5,0b100924d46b3c35115f1206f34c4a59" + ] + ], + "5": [ + "versions.yml:md5,c01f97c8def49098023fded456717776" + ], + "bedgraph": [ + [ + { + "id": "test", + "single_end": false + }, + "test.paired_end.methylated.bedGraph.gz:md5,3e461daa0b89ee4eeb76e336ad6aad7a" + ] + ], + "coverage": [ + [ + { + "id": "test", + "single_end": false + }, + "test.paired_end.methylated.bismark.cov.gz:md5,1524da1472ed1ad0c0663a9676c142e0" + ] + ], + "mbias": [ + [ + { + "id": "test", + "single_end": false + }, + "test.paired_end.methylated.M-bias.txt:md5,0b100924d46b3c35115f1206f34c4a59" + ] + ], + "methylation_calls": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "CHG_OB_test.paired_end.methylated.txt.gz:md5,de98c596d927732d0a5a4cf4b3b9e7ae", + "CHG_OT_test.paired_end.methylated.txt.gz:md5,64ea7598db55ae810bc6846afe1941b8", + "CHH_OB_test.paired_end.methylated.txt.gz:md5,fac33b1186436430913d844662862972", + "CHH_OT_test.paired_end.methylated.txt.gz:md5,2a1509bd87032f9ae2c7ca5d0d728b3a", + "CpG_OB_test.paired_end.methylated.txt.gz:md5,dfecc0ceaca41ac848ff7d6e990a3f17", + "CpG_OT_test.paired_end.methylated.txt.gz:md5,5280f3ea983ee0f33b7c467f63f6c6d1" + ] + ] + ], + "report": [ + [ + { + "id": "test", + "single_end": false + }, + "test.paired_end.methylated_splitting_report.txt:md5,25f4f2fbf35cc9d7dc9e21209c40ca07" + ] + ], + "versions": [ + "versions.yml:md5,c01f97c8def49098023fded456717776" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-13T18:09:13.593807534" + } +} \ No newline at end of file diff --git a/modules/nf-core/bismark/report/environment.yml b/modules/nf-core/bismark/report/environment.yml new file mode 100644 index 00000000..9bc4753b --- /dev/null +++ b/modules/nf-core/bismark/report/environment.yml @@ -0,0 +1,5 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::bismark=0.24.2 diff --git a/modules/nf-core/bismark/report/main.nf b/modules/nf-core/bismark/report/main.nf index 804a141d..e68ee8e5 100644 --- a/modules/nf-core/bismark/report/main.nf +++ b/modules/nf-core/bismark/report/main.nf @@ -2,10 +2,10 @@ process BISMARK_REPORT { tag "$meta.id" label 'process_low' - conda "bioconda::bismark=0.24.0" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/bismark:0.24.0--hdfd78af_0' : - 'biocontainers/bismark:0.24.0--hdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/bismark:0.24.2--hdfd78af_0' : + 'biocontainers/bismark:0.24.2--hdfd78af_0' }" input: tuple val(meta), path(align_report), path(dedup_report), path(splitting_report), path(mbias) @@ -27,4 +27,17 @@ process BISMARK_REPORT { bismark: \$(echo \$(bismark -v 2>&1) | sed 's/^.*Bismark Version: v//; s/Copyright.*\$//') END_VERSIONS """ + + stub: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.report.txt + touch ${prefix}.report.html + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + bismark: \$(echo \$(bismark -v 2>&1) | sed 's/^.*Bismark Version: v//; s/Copyright.*\$//') + END_VERSIONS + """ } diff --git a/modules/nf-core/bismark/report/meta.yml b/modules/nf-core/bismark/report/meta.yml index 1f6be782..c1191e9b 100644 --- a/modules/nf-core/bismark/report/meta.yml +++ b/modules/nf-core/bismark/report/meta.yml @@ -18,44 +18,47 @@ tools: documentation: https://github.com/FelixKrueger/Bismark/tree/master/Docs doi: 10.1093/bioinformatics/btr167 licence: ["GPL-3.0-or-later"] + identifier: biotools:bismark input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - align_report: - type: file - description: Bismark alignment reports - pattern: "*{report.txt}" - - splitting_report: - type: file - description: Bismark splitting reports - pattern: "*{splitting_report.txt}" - - dedup_report: - type: file - description: Bismark deduplication reports - pattern: "*.{deduplication_report.txt}" - - mbias: - type: file - description: Text file containing methylation bias information - pattern: "*.{txt}" - - fasta: - type: file - description: Input genome fasta file + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - align_report: + type: file + description: Bismark alignment reports + pattern: "*{report.txt}" + - dedup_report: + type: file + description: Bismark deduplication reports + pattern: "*.{deduplication_report.txt}" + - splitting_report: + type: file + description: Bismark splitting reports + pattern: "*{splitting_report.txt}" + - mbias: + type: file + description: Text file containing methylation bias information + pattern: "*.{txt}" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - report: - type: file - description: Bismark reports - pattern: "*.{html,txt}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*report.{html,txt}": + type: file + description: Bismark reports + pattern: "*.{html,txt}" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@phue" +maintainers: + - "@phue" + - "@sateeshperi" diff --git a/modules/nf-core/bismark/report/nextflow.config b/modules/nf-core/bismark/report/nextflow.config new file mode 100644 index 00000000..597a4684 --- /dev/null +++ b/modules/nf-core/bismark/report/nextflow.config @@ -0,0 +1,10 @@ +process { + withName: BISMARK_REPORT { + ext.args = '' + publishDir = [ + path: "${params.outdir}/${params.aligner}/reports", + mode: params.publish_dir_mode, + pattern: "*.html" + ] + } +} \ No newline at end of file diff --git a/modules/nf-core/bismark/report/tests/main.nf.test b/modules/nf-core/bismark/report/tests/main.nf.test new file mode 100644 index 00000000..9082bbde --- /dev/null +++ b/modules/nf-core/bismark/report/tests/main.nf.test @@ -0,0 +1,88 @@ +nextflow_process { + + name "Test Process BISMARK_REPORT" + script "../main.nf" + process "BISMARK_REPORT" + + tag "modules" + tag "modules_nfcore" + tag "bismark" + tag "bismark/report" + tag "bismark/align" + tag "bismark/deduplicate" + tag "bismark/methylationextractor" + tag "bismark/genomepreparation" + + test("sarscov2 genome [fasta] | sarscov2 single-end methylated [fastq]") { + + setup { + run("BISMARK_GENOMEPREPARATION") { + script "../../genomepreparation/main.nf" + process { + """ + input[0] = Channel.of([ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ]) + """ + } + } + + run("BISMARK_ALIGN") { + script "../../align/main.nf" + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:true ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test.methylated_1.fastq.gz', checkIfExists: true) + ]) + input[1] = Channel.of([ [ id:'sarscov2'], file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) ]) + input[2] = BISMARK_GENOMEPREPARATION.out.index + """ + } + } + + run("BISMARK_DEDUPLICATE") { + script "../../deduplicate/main.nf" + process { + """ + input[0] = BISMARK_ALIGN.out.bam + """ + } + } + + run("BISMARK_METHYLATIONEXTRACTOR") { + script "../../methylationextractor/main.nf" + process { + """ + input[0] = BISMARK_ALIGN.out.bam + input[1] = BISMARK_GENOMEPREPARATION.out.index + """ + } + } + } + + when { + process { + """ + input[0] = BISMARK_ALIGN.out.report + .join(BISMARK_DEDUPLICATE.out.report) + .join(BISMARK_METHYLATIONEXTRACTOR.out.report) + .join(BISMARK_METHYLATIONEXTRACTOR.out.mbias) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + file(process.out.report[0][1]).name, + process.out.versions + ).match() }, + ) + } + + } + +} diff --git a/modules/nf-core/bismark/report/tests/main.nf.test.snap b/modules/nf-core/bismark/report/tests/main.nf.test.snap new file mode 100644 index 00000000..e1ebf022 --- /dev/null +++ b/modules/nf-core/bismark/report/tests/main.nf.test.snap @@ -0,0 +1,15 @@ +{ + "sarscov2 genome [fasta] | sarscov2 single-end methylated [fastq]": { + "content": [ + "test.methylated_1_bismark_bt2_SE_report.html", + [ + "versions.yml:md5,12d0b9440211d6540bbdc42e14fa18e6" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-14T18:47:46.955822618" + } +} diff --git a/modules/nf-core/bismark/summary/environment.yml b/modules/nf-core/bismark/summary/environment.yml new file mode 100644 index 00000000..9bc4753b --- /dev/null +++ b/modules/nf-core/bismark/summary/environment.yml @@ -0,0 +1,5 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::bismark=0.24.2 diff --git a/modules/nf-core/bismark/summary/main.nf b/modules/nf-core/bismark/summary/main.nf index 399f960d..2aadfc03 100644 --- a/modules/nf-core/bismark/summary/main.nf +++ b/modules/nf-core/bismark/summary/main.nf @@ -1,10 +1,10 @@ process BISMARK_SUMMARY { label 'process_low' - conda "bioconda::bismark=0.24.0" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/bismark:0.24.0--hdfd78af_0' : - 'biocontainers/bismark:0.24.0--hdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/bismark:0.24.2--hdfd78af_0' : + 'biocontainers/bismark:0.24.2--hdfd78af_0' }" input: val(bam) @@ -14,8 +14,8 @@ process BISMARK_SUMMARY { path(mbias) output: - path "*report.{html,txt}", emit: summary - path "versions.yml" , emit: versions + path("*report.{html,txt}"), emit: summary + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when @@ -30,4 +30,17 @@ process BISMARK_SUMMARY { bismark: \$(echo \$(bismark -v 2>&1) | sed 's/^.*Bismark Version: v//; s/Copyright.*\$//') END_VERSIONS """ + + stub: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.report.txt + touch ${prefix}.report.html + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + bismark: \$(echo \$(bismark -v 2>&1) | sed 's/^.*Bismark Version: v//; s/Copyright.*\$//') + END_VERSIONS + """ } diff --git a/modules/nf-core/bismark/summary/meta.yml b/modules/nf-core/bismark/summary/meta.yml index 96814826..da18a5c8 100644 --- a/modules/nf-core/bismark/summary/meta.yml +++ b/modules/nf-core/bismark/summary/meta.yml @@ -21,35 +21,41 @@ tools: documentation: https://github.com/FelixKrueger/Bismark/tree/master/Docs doi: 10.1093/bioinformatics/btr167 licence: ["GPL-3.0-or-later"] + identifier: biotools:bismark input: - - bam: - type: value - description: Array of Bismark alignment BAM filenames - pattern: "*.bam" - - align_report: - type: file - description: Bismark alignment reports - pattern: "*report.txt" - - dedup_report: - type: file - description: Bismark deduplication reports - pattern: "*.deduplication_report.txt" - - splitting_report: - type: file - description: Bismark splitting reports - pattern: "*splitting_report.txt" - - mbias: - type: file - description: Text file containing methylation bias information - pattern: "*.txt" + - - bam: + type: list + description: List of Bismark alignment BAM filenames + pattern: "*.bam" + - - align_report: + type: file + description: Bismark alignment reports + pattern: "*report.txt" + - - dedup_report: + type: file + description: Bismark deduplication reports + pattern: "*.deduplication_report.txt" + - - splitting_report: + type: file + description: Bismark splitting reports + pattern: "*splitting_report.txt" + - - mbias: + type: file + description: Text file containing methylation bias information + pattern: "*.txt" output: - summary: - type: file - description: Bismark summary - pattern: "*.{html,txt}" + - "*report.{html,txt}": + type: file + description: Bismark summary + pattern: "*.{html,txt}" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@phue" +maintainers: + - "@phue" + - "@sateeshperi" diff --git a/modules/nf-core/bismark/summary/nextflow.config b/modules/nf-core/bismark/summary/nextflow.config new file mode 100644 index 00000000..ded23dda --- /dev/null +++ b/modules/nf-core/bismark/summary/nextflow.config @@ -0,0 +1,10 @@ +process { + withName: BISMARK_SUMMARY { + ext.args = '' + publishDir = [ + path: "${params.outdir}/${params.aligner}/summary", + mode: params.publish_dir_mode, + pattern: "*.{html,txt}" + ] + } +} \ No newline at end of file diff --git a/modules/nf-core/bismark/summary/tests/main.nf.test b/modules/nf-core/bismark/summary/tests/main.nf.test new file mode 100644 index 00000000..046a5959 --- /dev/null +++ b/modules/nf-core/bismark/summary/tests/main.nf.test @@ -0,0 +1,94 @@ +nextflow_process { + + name "Test Process BISMARK_SUMMARY" + script "../main.nf" + process "BISMARK_SUMMARY" + + tag "modules" + tag "modules_nfcore" + tag "bismark" + tag "bismark/summary" + tag "bismark/align" + tag "bismark/deduplicate" + tag "bismark/genomepreparation" + tag "bismark/methylationextractor" + + test("sarscov2 genome [fasta] | sarscov2 single-end methylated [fastq]") { + + setup { + run("BISMARK_GENOMEPREPARATION") { + script "../../genomepreparation/main.nf" + process { + """ + input[0] = Channel.of([ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ]) + """ + } + } + + run("BISMARK_ALIGN") { + script "../../align/main.nf" + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:true ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test.methylated_1.fastq.gz', checkIfExists: true) + ]) + input[1] = Channel.of([ [ id:'sarscov2'], file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) ]) + input[2] = BISMARK_GENOMEPREPARATION.out.index + """ + } + } + + run("BISMARK_DEDUPLICATE") { + script "../../deduplicate/main.nf" + process { + """ + input[0] = BISMARK_ALIGN.out.bam + """ + } + } + + run("BISMARK_METHYLATIONEXTRACTOR") { + script "../../methylationextractor/main.nf" + process { + """ + input[0] = BISMARK_ALIGN.out.bam + input[1] = BISMARK_GENOMEPREPARATION.out.index + """ + } + } + } + + when { + process { + """ + input[0] = BISMARK_ALIGN.out.bam.collect { meta, bam -> bam } + input[1] = BISMARK_ALIGN.out.report.collect { meta, report -> report } + input[2] = BISMARK_DEDUPLICATE.out.report.collect { meta, report -> report } + input[3] = BISMARK_METHYLATIONEXTRACTOR.out.report.collect { meta, report -> report } + input[4] = BISMARK_METHYLATIONEXTRACTOR.out.mbias.collect { meta, txt -> txt } + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out.versions).match("versions") }, + { + with(process.out.summary) { + assert get(0).size() == 2 + assert get(0).every { it.contains('bismark_summary_report') } + assert path(get(0).get(1)).readLines().first().contains('CpGs') + assert path(get(0).get(0)).readLines().last().contains('') + } + } + ) + } + + } + +} diff --git a/modules/nf-core/bismark/summary/tests/main.nf.test.snap b/modules/nf-core/bismark/summary/tests/main.nf.test.snap new file mode 100644 index 00000000..d9d0209e --- /dev/null +++ b/modules/nf-core/bismark/summary/tests/main.nf.test.snap @@ -0,0 +1,14 @@ +{ + "versions": { + "content": [ + [ + "versions.yml:md5,daa43bc3da654ba5a8acbc9d272a9e90" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-14T18:31:02.192850471" + } +} \ No newline at end of file diff --git a/modules/nf-core/bwameth/align/environment.yml b/modules/nf-core/bwameth/align/environment.yml new file mode 100644 index 00000000..707376eb --- /dev/null +++ b/modules/nf-core/bwameth/align/environment.yml @@ -0,0 +1,5 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::bwameth=0.2.7 diff --git a/modules/nf-core/bwameth/align/main.nf b/modules/nf-core/bwameth/align/main.nf index 47304035..2e6ff2d0 100644 --- a/modules/nf-core/bwameth/align/main.nf +++ b/modules/nf-core/bwameth/align/main.nf @@ -2,14 +2,15 @@ process BWAMETH_ALIGN { tag "$meta.id" label 'process_high' - conda "bioconda::bwameth=0.2.2" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/bwameth:0.2.2--py_1' : - 'biocontainers/bwameth:0.2.2--py_1' }" + 'https://depot.galaxyproject.org/singularity/bwameth:0.2.7--pyh7cba7a3_0' : + 'biocontainers/bwameth:0.2.7--pyh7cba7a3_0' }" input: tuple val(meta), path(reads) - path index + tuple val(meta2), path(fasta) + tuple val(meta3), path(index) output: tuple val(meta), path("*.bam"), emit: bam @@ -24,23 +25,36 @@ process BWAMETH_ALIGN { def prefix = task.ext.prefix ?: "${meta.id}" def read_group = meta.read_group ? "-R ${meta.read_group}" : "" """ - INDEX=`find -L ${index} -name "*.bwameth.c2t" | sed 's/\\.bwameth.c2t\$//'` - # Modify the timestamps so that bwameth doesn't complain about building the index # See https://github.com/nf-core/methylseq/pull/217 - touch -c -- * + touch -c $index/* + + if [ ! -f $index/$fasta ]; then + ln -s \$(readlink $fasta) $index/$fasta; + fi bwameth.py \\ $args \\ $read_group \\ -t $task.cpus \\ - --reference \$INDEX \\ + --reference $index/$fasta \\ $reads \\ | samtools view $args2 -@ $task.cpus -bhS -o ${prefix}.bam - cat <<-END_VERSIONS > versions.yml "${task.process}": - bwameth: \$(echo \$(bwameth.py --version 2>&1) | cut -f2 -d" ") + bwameth: \$(bwameth.py --version | cut -f2 -d" ") + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.bam + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + bwameth: \$(bwameth.py --version | cut -f2 -d" ") END_VERSIONS """ } diff --git a/modules/nf-core/bwameth/align/meta.yml b/modules/nf-core/bwameth/align/meta.yml index 7d22bc84..593d1730 100644 --- a/modules/nf-core/bwameth/align/meta.yml +++ b/modules/nf-core/bwameth/align/meta.yml @@ -21,33 +21,51 @@ tools: documentation: https://github.com/brentp/bwa-meth arxiv: arXiv:1401.1129 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. - - index: - type: dir - description: Directory containing bwameth genome index + - - 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 sample information + e.g. [ id:'test', single_end:false ] + - fasta: + type: file + description: Input genome fasta file + - - meta3: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - index: + type: directory + description: Directory containing bwameth genome index output: - - 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}" + - 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}" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@phue" +maintainers: + - "@phue" diff --git a/modules/nf-core/bwameth/align/nextflow.config b/modules/nf-core/bwameth/align/nextflow.config new file mode 100644 index 00000000..d5cbe70d --- /dev/null +++ b/modules/nf-core/bwameth/align/nextflow.config @@ -0,0 +1,11 @@ +process { + withName: BWAMETH_ALIGN { + ext.args = '' + publishDir = [ + path: { "${params.outdir}/${params.aligner}/alignments" }, + pattern: "*.bam", + mode: params.publish_dir_mode, + enabled: params.save_align_intermeds + ] + } +} \ No newline at end of file diff --git a/modules/nf-core/bwameth/align/tests/main.nf.test b/modules/nf-core/bwameth/align/tests/main.nf.test new file mode 100644 index 00000000..37dd4ad2 --- /dev/null +++ b/modules/nf-core/bwameth/align/tests/main.nf.test @@ -0,0 +1,121 @@ + +nextflow_process { + + name "Test Process BWAMETH_ALIGN" + script "../main.nf" + process "BWAMETH_ALIGN" + + tag "modules" + tag "modules_nfcore" + tag "bwameth" + tag "bwameth/align" + tag "bwameth/index" + + setup { + run("BWAMETH_INDEX") { + script "../../../bwameth/index/main.nf" + process { + """ + input[0] = Channel.of([ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ]) + """ + } + } + } + + test("sarscov2 methylated single_end [fastq]") { + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:true ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test.methylated_1.fastq.gz', checkIfExists: true) + ]) + input[1] = Channel.of([ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ]) + input[2] = BWAMETH_INDEX.out.index + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + bam(process.out.bam[0][1]).getReadsMD5(), + process.out.versions + ).match() + } + ) + } + } + + test("sarscov2 methylated paired_end [fastq]") { + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test.methylated_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test.methylated_2.fastq.gz', checkIfExists: true) + ] + ]) + input[1] = Channel.of([ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ]) + input[2] = BWAMETH_INDEX.out.index + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + bam(process.out.bam[0][1]).getReadsMD5(), + process.out.versions + ).match() + } + ) + } + } + + test("sarscov2 methylated paired_end [fastq] - 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.methylated_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test.methylated_2.fastq.gz', checkIfExists: true) + ] + ]) + input[1] = Channel.of([ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ]) + input[2] = BWAMETH_INDEX.out.index + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + +} diff --git a/modules/nf-core/bwameth/align/tests/main.nf.test.snap b/modules/nf-core/bwameth/align/tests/main.nf.test.snap new file mode 100644 index 00000000..8f44bb78 --- /dev/null +++ b/modules/nf-core/bwameth/align/tests/main.nf.test.snap @@ -0,0 +1,63 @@ +{ + "sarscov2 methylated single_end [fastq]": { + "content": [ + "5fdda0ada69daa3956c65a24c9d1c1e0", + [ + "versions.yml:md5,c00660f78aeab4fabe00092c70656098" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-16T07:50:08.241201566" + }, + "sarscov2 methylated paired_end [fastq]": { + "content": [ + "cbd5cfa8b446e26987898a45a94770ba", + [ + "versions.yml:md5,c00660f78aeab4fabe00092c70656098" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-16T07:50:20.75109829" + }, + "sarscov2 methylated paired_end [fastq] - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + "versions.yml:md5,c00660f78aeab4fabe00092c70656098" + ], + "bam": [ + [ + { + "id": "test", + "single_end": false + }, + "test.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,c00660f78aeab4fabe00092c70656098" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-21T12:43:43.563953696" + } +} \ No newline at end of file diff --git a/modules/nf-core/bwameth/index/environment.yml b/modules/nf-core/bwameth/index/environment.yml new file mode 100644 index 00000000..707376eb --- /dev/null +++ b/modules/nf-core/bwameth/index/environment.yml @@ -0,0 +1,5 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::bwameth=0.2.7 diff --git a/modules/nf-core/bwameth/index/main.nf b/modules/nf-core/bwameth/index/main.nf index 1c789885..b4327a7b 100644 --- a/modules/nf-core/bwameth/index/main.nf +++ b/modules/nf-core/bwameth/index/main.nf @@ -2,17 +2,17 @@ process BWAMETH_INDEX { tag "$fasta" label 'process_high' - conda "bioconda::bwameth=0.2.2" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/bwameth:0.2.2--py_1' : - 'biocontainers/bwameth:0.2.2--py_1' }" + 'https://depot.galaxyproject.org/singularity/bwameth:0.2.7--pyh7cba7a3_0' : + 'biocontainers/bwameth:0.2.7--pyh7cba7a3_0' }" input: - path fasta, stageAs: "bwameth/*" + tuple val(meta), path(fasta, name:"BwamethIndex/") output: - path "bwameth" , emit: index - path "versions.yml" , emit: versions + tuple val(meta), path("BwamethIndex"), emit: index + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when @@ -20,11 +20,34 @@ process BWAMETH_INDEX { script: def args = task.ext.args ?: '' """ + bwameth.py index $fasta + rm $fasta + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + bwameth: \$(bwameth.py --version | cut -f2 -d" ") + END_VERSIONS + """ + + stub: + def args = task.ext.args ?: '' + """ + rm $fasta + + mkdir -p BwamethIndex/ + touch BwamethIndex/genome.fasta.bwameth.c2t + touch BwamethIndex/genome.fasta.bwameth.c2t.amb + touch BwamethIndex/genome.fasta.bwameth.c2t.ann + touch BwamethIndex/genome.fasta.bwameth.c2t.bwt + touch BwamethIndex/genome.fasta.bwameth.c2t.pac + touch BwamethIndex/genome.fasta.bwameth.c2t.sa + + cat <<-END_VERSIONS > versions.yml "${task.process}": - bwameth: \$(echo \$(bwameth.py --version 2>&1) | cut -f2 -d" ") + bwameth: \$(bwameth.py --version | cut -f2 -d" ") END_VERSIONS """ } diff --git a/modules/nf-core/bwameth/index/meta.yml b/modules/nf-core/bwameth/index/meta.yml index 903ae95c..2194e225 100644 --- a/modules/nf-core/bwameth/index/meta.yml +++ b/modules/nf-core/bwameth/index/meta.yml @@ -17,18 +17,33 @@ tools: documentation: https://github.com/brentp/bwa-meth arxiv: arXiv:1401.1129 licence: ["MIT"] + identifier: "" input: - - fasta: - type: file - description: Input genome fasta file + - - 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: - type: dir - description: Directory containing bwameth genome index - pattern: "index" + - meta: + type: directory + description: Directory containing bwameth genome index + pattern: "index" + - BwamethIndex: + type: directory + description: Directory containing bwameth genome index + pattern: "index" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@phue" +maintainers: + - "@phue" + - "@sateeshperi" diff --git a/modules/nf-core/bwameth/index/nextflow.config b/modules/nf-core/bwameth/index/nextflow.config new file mode 100644 index 00000000..92d4e632 --- /dev/null +++ b/modules/nf-core/bwameth/index/nextflow.config @@ -0,0 +1,11 @@ +process { + withName: BWAMETH_INDEX { + ext.args = '' + publishDir = [ + path: { "${params.outdir}/${params.aligner}/reference_genome" }, + mode: params.publish_dir_mode, + saveAs: { it.equals('versions.yml') ? null : it.tokenize("/").last() }, + enabled: params.save_reference + ] + } +} \ No newline at end of file diff --git a/modules/nf-core/bwameth/index/tests/main.nf.test b/modules/nf-core/bwameth/index/tests/main.nf.test new file mode 100644 index 00000000..152c8366 --- /dev/null +++ b/modules/nf-core/bwameth/index/tests/main.nf.test @@ -0,0 +1,34 @@ + +nextflow_process { + + name "Test Process BWAMETH_INDEX" + script "../main.nf" + process "BWAMETH_INDEX" + + tag "modules" + tag "modules_nfcore" + tag "bwameth" + tag "bwameth/index" + + test("sarscov2 genome [fasta]") { + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test' ], // 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/bwameth/index/tests/main.nf.test.snap b/modules/nf-core/bwameth/index/tests/main.nf.test.snap new file mode 100644 index 00000000..fb427880 --- /dev/null +++ b/modules/nf-core/bwameth/index/tests/main.nf.test.snap @@ -0,0 +1,49 @@ +{ + "sarscov2 genome [fasta]": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + [ + "genome.fasta.bwameth.c2t:md5,98039984526a41d04d6bd92fcc040c62", + "genome.fasta.bwameth.c2t.amb:md5,249a4195069071ce47cd0bae68abe376", + "genome.fasta.bwameth.c2t.ann:md5,46524d4359dcdfb203a235ab3b930dbb", + "genome.fasta.bwameth.c2t.bwt:md5,84f65df7d42dbe84c9ccfaddfdd5ea6b", + "genome.fasta.bwameth.c2t.pac:md5,4d8e51cb0bbdeaf24576bdf0264d8653", + "genome.fasta.bwameth.c2t.sa:md5,d25f6486f5134f57ed5b258f6fbb8673" + ] + ] + ], + "1": [ + "versions.yml:md5,0827d461c1a0b41bd533aea470843c2c" + ], + "index": [ + [ + { + "id": "test" + }, + [ + "genome.fasta.bwameth.c2t:md5,98039984526a41d04d6bd92fcc040c62", + "genome.fasta.bwameth.c2t.amb:md5,249a4195069071ce47cd0bae68abe376", + "genome.fasta.bwameth.c2t.ann:md5,46524d4359dcdfb203a235ab3b930dbb", + "genome.fasta.bwameth.c2t.bwt:md5,84f65df7d42dbe84c9ccfaddfdd5ea6b", + "genome.fasta.bwameth.c2t.pac:md5,4d8e51cb0bbdeaf24576bdf0264d8653", + "genome.fasta.bwameth.c2t.sa:md5,d25f6486f5134f57ed5b258f6fbb8673" + ] + ] + ], + "versions": [ + "versions.yml:md5,0827d461c1a0b41bd533aea470843c2c" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-14T20:32:13.750317299" + } +} \ No newline at end of file diff --git a/modules/nf-core/cat/fastq/environment.yml b/modules/nf-core/cat/fastq/environment.yml new file mode 100644 index 00000000..71e04c3d --- /dev/null +++ b/modules/nf-core/cat/fastq/environment.yml @@ -0,0 +1,5 @@ +channels: + - conda-forge + - bioconda +dependencies: + - conda-forge::coreutils=9.5 diff --git a/modules/nf-core/cat/fastq/main.nf b/modules/nf-core/cat/fastq/main.nf index 5021e6fc..4364a389 100644 --- a/modules/nf-core/cat/fastq/main.nf +++ b/modules/nf-core/cat/fastq/main.nf @@ -2,10 +2,10 @@ process CAT_FASTQ { tag "$meta.id" label 'process_single' - conda "conda-forge::sed=4.7" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/ubuntu:20.04' : - 'nf-core/ubuntu:20.04' }" + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/c2/c262fc09eca59edb5a724080eeceb00fb06396f510aefb229c2d2c6897e63975/data' : + 'community.wave.seqera.io/library/coreutils:9.5--ae99c88a9b28c264' }" input: tuple val(meta), path(reads, stageAs: "input*/*") @@ -53,9 +53,9 @@ process CAT_FASTQ { def prefix = task.ext.prefix ?: "${meta.id}" def readList = reads instanceof List ? reads.collect{ it.toString() } : [reads.toString()] if (meta.single_end) { - if (readList.size > 1) { + if (readList.size >= 1) { """ - touch ${prefix}.merged.fastq.gz + echo '' | gzip > ${prefix}.merged.fastq.gz cat <<-END_VERSIONS > versions.yml "${task.process}": @@ -64,10 +64,10 @@ process CAT_FASTQ { """ } } else { - if (readList.size > 2) { + if (readList.size >= 2) { """ - touch ${prefix}_1.merged.fastq.gz - touch ${prefix}_2.merged.fastq.gz + echo '' | gzip > ${prefix}_1.merged.fastq.gz + echo '' | gzip > ${prefix}_2.merged.fastq.gz cat <<-END_VERSIONS > versions.yml "${task.process}": @@ -76,5 +76,4 @@ process CAT_FASTQ { """ } } - } diff --git a/modules/nf-core/cat/fastq/meta.yml b/modules/nf-core/cat/fastq/meta.yml index 8a39e309..91ff2fb5 100644 --- a/modules/nf-core/cat/fastq/meta.yml +++ b/modules/nf-core/cat/fastq/meta.yml @@ -10,31 +10,36 @@ tools: The cat utility reads files sequentially, writing them to the standard output. documentation: https://www.gnu.org/software/coreutils/manual/html_node/cat-invocation.html licence: ["GPL-3.0-or-later"] + 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 to be concatenated. + - - 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 to be concatenated. output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - reads: - type: file - description: Merged fastq file - pattern: "*.{merged.fastq.gz}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.merged.fastq.gz": + type: file + description: Merged fastq file + pattern: "*.{merged.fastq.gz}" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@joseespinosa" - "@drpatelh" +maintainers: + - "@joseespinosa" + - "@drpatelh" diff --git a/modules/nf-core/cat/fastq/tests/main.nf.test b/modules/nf-core/cat/fastq/tests/main.nf.test new file mode 100644 index 00000000..f88a78b6 --- /dev/null +++ b/modules/nf-core/cat/fastq/tests/main.nf.test @@ -0,0 +1,248 @@ +// NOTE The version snaps may not be consistant +// https://github.com/nf-core/modules/pull/4087#issuecomment-1767948035 +nextflow_process { + + name "Test Process CAT_FASTQ" + script "../main.nf" + process "CAT_FASTQ" + tag "modules" + tag "modules_nfcore" + tag "cat" + tag "cat/fastq" + + test("test_cat_fastq_single_end") { + + 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), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true)] + ]) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("test_cat_fastq_paired_end") { + + 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), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test2_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test2_2.fastq.gz', checkIfExists: true)] + ]) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("test_cat_fastq_single_end_same_name") { + + 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), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true)] + ]) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("test_cat_fastq_paired_end_same_name") { + + 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), + 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(process.out).match() } + ) + } + } + + test("test_cat_fastq_single_end_single_file") { + + 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)] + ]) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("test_cat_fastq_single_end - stub") { + + options "-stub" + + 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), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true)] + ]) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("test_cat_fastq_paired_end - 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), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test2_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test2_2.fastq.gz', checkIfExists: true)] + ]) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("test_cat_fastq_single_end_same_name - stub") { + + options "-stub" + + 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), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true)] + ]) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("test_cat_fastq_paired_end_same_name - 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), + 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(process.out).match() } + ) + } + } + + test("test_cat_fastq_single_end_single_file - stub") { + + options "-stub" + + 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)] + ]) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } +} diff --git a/modules/nf-core/cat/fastq/tests/main.nf.test.snap b/modules/nf-core/cat/fastq/tests/main.nf.test.snap new file mode 100644 index 00000000..f8689a1c --- /dev/null +++ b/modules/nf-core/cat/fastq/tests/main.nf.test.snap @@ -0,0 +1,376 @@ +{ + "test_cat_fastq_single_end": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test.merged.fastq.gz:md5,ee314a9bd568d06617171b0c85f508da" + ] + ], + "1": [ + "versions.yml:md5,6ef4fd28546a005865b9454bbedbf81a" + ], + "reads": [ + [ + { + "id": "test", + "single_end": true + }, + "test.merged.fastq.gz:md5,ee314a9bd568d06617171b0c85f508da" + ] + ], + "versions": [ + "versions.yml:md5,6ef4fd28546a005865b9454bbedbf81a" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-19T20:02:07.519211144" + }, + "test_cat_fastq_single_end_same_name": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test.merged.fastq.gz:md5,3ad9406595fafec8172368f9cd0b6a22" + ] + ], + "1": [ + "versions.yml:md5,6ef4fd28546a005865b9454bbedbf81a" + ], + "reads": [ + [ + { + "id": "test", + "single_end": true + }, + "test.merged.fastq.gz:md5,3ad9406595fafec8172368f9cd0b6a22" + ] + ], + "versions": [ + "versions.yml:md5,6ef4fd28546a005865b9454bbedbf81a" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-19T20:02:31.618628921" + }, + "test_cat_fastq_single_end_single_file": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test.merged.fastq.gz:md5,4161df271f9bfcd25d5845a1e220dbec" + ] + ], + "1": [ + "versions.yml:md5,6ef4fd28546a005865b9454bbedbf81a" + ], + "reads": [ + [ + { + "id": "test", + "single_end": true + }, + "test.merged.fastq.gz:md5,4161df271f9bfcd25d5845a1e220dbec" + ] + ], + "versions": [ + "versions.yml:md5,6ef4fd28546a005865b9454bbedbf81a" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-19T20:02:57.904149581" + }, + "test_cat_fastq_paired_end_same_name": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.merged.fastq.gz:md5,3ad9406595fafec8172368f9cd0b6a22", + "test_2.merged.fastq.gz:md5,a52cab0b840c7178b0ea83df1fdbe8d5" + ] + ] + ], + "1": [ + "versions.yml:md5,6ef4fd28546a005865b9454bbedbf81a" + ], + "reads": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.merged.fastq.gz:md5,3ad9406595fafec8172368f9cd0b6a22", + "test_2.merged.fastq.gz:md5,a52cab0b840c7178b0ea83df1fdbe8d5" + ] + ] + ], + "versions": [ + "versions.yml:md5,6ef4fd28546a005865b9454bbedbf81a" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-19T20:02:44.577183829" + }, + "test_cat_fastq_single_end - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + "versions.yml:md5,6ef4fd28546a005865b9454bbedbf81a" + ], + "reads": [ + [ + { + "id": "test", + "single_end": true + }, + "test.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,6ef4fd28546a005865b9454bbedbf81a" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-19T20:03:10.603734777" + }, + "test_cat_fastq_paired_end_same_name - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "1": [ + "versions.yml:md5,6ef4fd28546a005865b9454bbedbf81a" + ], + "reads": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "versions": [ + "versions.yml:md5,6ef4fd28546a005865b9454bbedbf81a" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-19T20:03:46.041808828" + }, + "test_cat_fastq_single_end_same_name - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + "versions.yml:md5,6ef4fd28546a005865b9454bbedbf81a" + ], + "reads": [ + [ + { + "id": "test", + "single_end": true + }, + "test.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,6ef4fd28546a005865b9454bbedbf81a" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-19T20:03:34.13865402" + }, + "test_cat_fastq_paired_end": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.merged.fastq.gz:md5,3ad9406595fafec8172368f9cd0b6a22", + "test_2.merged.fastq.gz:md5,a52cab0b840c7178b0ea83df1fdbe8d5" + ] + ] + ], + "1": [ + "versions.yml:md5,6ef4fd28546a005865b9454bbedbf81a" + ], + "reads": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.merged.fastq.gz:md5,3ad9406595fafec8172368f9cd0b6a22", + "test_2.merged.fastq.gz:md5,a52cab0b840c7178b0ea83df1fdbe8d5" + ] + ] + ], + "versions": [ + "versions.yml:md5,6ef4fd28546a005865b9454bbedbf81a" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-19T20:02:19.64383573" + }, + "test_cat_fastq_paired_end - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "1": [ + "versions.yml:md5,6ef4fd28546a005865b9454bbedbf81a" + ], + "reads": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "versions": [ + "versions.yml:md5,6ef4fd28546a005865b9454bbedbf81a" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-19T20:03:22.597246066" + }, + "test_cat_fastq_single_end_single_file - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + "versions.yml:md5,6ef4fd28546a005865b9454bbedbf81a" + ], + "reads": [ + [ + { + "id": "test", + "single_end": true + }, + "test.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,6ef4fd28546a005865b9454bbedbf81a" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-19T20:03:58.44849001" + } +} \ No newline at end of file diff --git a/modules/nf-core/cat/fastq/tests/tags.yml b/modules/nf-core/cat/fastq/tests/tags.yml new file mode 100644 index 00000000..6ac43614 --- /dev/null +++ b/modules/nf-core/cat/fastq/tests/tags.yml @@ -0,0 +1,2 @@ +cat/fastq: + - modules/nf-core/cat/fastq/** diff --git a/modules/nf-core/custom/dumpsoftwareversions/environment.yml b/modules/nf-core/custom/dumpsoftwareversions/environment.yml deleted file mode 100644 index f0c63f69..00000000 --- a/modules/nf-core/custom/dumpsoftwareversions/environment.yml +++ /dev/null @@ -1,7 +0,0 @@ -name: custom_dumpsoftwareversions -channels: - - conda-forge - - bioconda - - defaults -dependencies: - - bioconda::multiqc=1.17 diff --git a/modules/nf-core/custom/dumpsoftwareversions/main.nf b/modules/nf-core/custom/dumpsoftwareversions/main.nf deleted file mode 100644 index 7685b33c..00000000 --- a/modules/nf-core/custom/dumpsoftwareversions/main.nf +++ /dev/null @@ -1,24 +0,0 @@ -process CUSTOM_DUMPSOFTWAREVERSIONS { - label 'process_single' - - // Requires `pyyaml` which does not have a dedicated container but is in the MultiQC container - conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/multiqc:1.17--pyhdfd78af_0' : - 'biocontainers/multiqc:1.17--pyhdfd78af_0' }" - - input: - path versions - - output: - path "software_versions.yml" , emit: yml - path "software_versions_mqc.yml", emit: mqc_yml - path "versions.yml" , emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - def args = task.ext.args ?: '' - template 'dumpsoftwareversions.py' -} diff --git a/modules/nf-core/custom/dumpsoftwareversions/meta.yml b/modules/nf-core/custom/dumpsoftwareversions/meta.yml deleted file mode 100644 index 5f15a5fd..00000000 --- a/modules/nf-core/custom/dumpsoftwareversions/meta.yml +++ /dev/null @@ -1,37 +0,0 @@ -# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/meta-schema.json -name: custom_dumpsoftwareversions -description: Custom module used to dump software versions within the nf-core pipeline template -keywords: - - custom - - dump - - version -tools: - - custom: - description: Custom module used to dump software versions within the nf-core pipeline template - homepage: https://github.com/nf-core/tools - documentation: https://github.com/nf-core/tools - licence: ["MIT"] -input: - - versions: - type: file - description: YML file containing software versions - pattern: "*.yml" -output: - - yml: - type: file - description: Standard YML file containing software versions - pattern: "software_versions.yml" - - mqc_yml: - type: file - description: MultiQC custom content YML file containing software versions - pattern: "software_versions_mqc.yml" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" -authors: - - "@drpatelh" - - "@grst" -maintainers: - - "@drpatelh" - - "@grst" diff --git a/modules/nf-core/custom/dumpsoftwareversions/templates/dumpsoftwareversions.py b/modules/nf-core/custom/dumpsoftwareversions/templates/dumpsoftwareversions.py deleted file mode 100755 index da033408..00000000 --- a/modules/nf-core/custom/dumpsoftwareversions/templates/dumpsoftwareversions.py +++ /dev/null @@ -1,101 +0,0 @@ -#!/usr/bin/env python - - -"""Provide functions to merge multiple versions.yml files.""" - - -import yaml -import platform -from textwrap import dedent - - -def _make_versions_html(versions): - """Generate a tabular HTML output of all versions for MultiQC.""" - html = [ - dedent( - """\\ - - - - - - - - - - """ - ) - ] - for process, tmp_versions in sorted(versions.items()): - html.append("") - for i, (tool, version) in enumerate(sorted(tmp_versions.items())): - html.append( - dedent( - f"""\\ - - - - - - """ - ) - ) - html.append("") - html.append("
    Process Name Software Version
    {process if (i == 0) else ''}{tool}{version}
    ") - return "\\n".join(html) - - -def main(): - """Load all version files and generate merged output.""" - versions_this_module = {} - versions_this_module["${task.process}"] = { - "python": platform.python_version(), - "yaml": yaml.__version__, - } - - with open("$versions") as f: - versions_by_process = yaml.load(f, Loader=yaml.BaseLoader) | versions_this_module - - # aggregate versions by the module name (derived from fully-qualified process name) - versions_by_module = {} - for process, process_versions in versions_by_process.items(): - module = process.split(":")[-1] - try: - if versions_by_module[module] != process_versions: - raise AssertionError( - "We assume that software versions are the same between all modules. " - "If you see this error-message it means you discovered an edge-case " - "and should open an issue in nf-core/tools. " - ) - except KeyError: - versions_by_module[module] = process_versions - - versions_by_module["Workflow"] = { - "Nextflow": "$workflow.nextflow.version", - "$workflow.manifest.name": "$workflow.manifest.version", - } - - versions_mqc = { - "id": "software_versions", - "section_name": "${workflow.manifest.name} Software Versions", - "section_href": "https://github.com/${workflow.manifest.name}", - "plot_type": "html", - "description": "are collected at run time from the software output.", - "data": _make_versions_html(versions_by_module), - } - - with open("software_versions.yml", "w") as f: - yaml.dump(versions_by_module, f, default_flow_style=False) - with open("software_versions_mqc.yml", "w") as f: - yaml.dump(versions_mqc, f, default_flow_style=False) - - with open("versions.yml", "w") as f: - yaml.dump(versions_this_module, f, default_flow_style=False) - - -if __name__ == "__main__": - main() diff --git a/modules/nf-core/custom/dumpsoftwareversions/tests/main.nf.test b/modules/nf-core/custom/dumpsoftwareversions/tests/main.nf.test deleted file mode 100644 index b1e1630b..00000000 --- a/modules/nf-core/custom/dumpsoftwareversions/tests/main.nf.test +++ /dev/null @@ -1,43 +0,0 @@ -nextflow_process { - - name "Test Process CUSTOM_DUMPSOFTWAREVERSIONS" - script "../main.nf" - process "CUSTOM_DUMPSOFTWAREVERSIONS" - tag "modules" - tag "modules_nfcore" - tag "custom" - tag "dumpsoftwareversions" - tag "custom/dumpsoftwareversions" - - test("Should run without failures") { - when { - process { - """ - def tool1_version = ''' - TOOL1: - tool1: 0.11.9 - '''.stripIndent() - - def tool2_version = ''' - TOOL2: - tool2: 1.9 - '''.stripIndent() - - input[0] = Channel.of(tool1_version, tool2_version).collectFile() - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot( - process.out.versions, - file(process.out.mqc_yml[0]).readLines()[0..10], - file(process.out.yml[0]).readLines()[0..7] - ).match() - } - ) - } - } -} diff --git a/modules/nf-core/custom/dumpsoftwareversions/tests/main.nf.test.snap b/modules/nf-core/custom/dumpsoftwareversions/tests/main.nf.test.snap deleted file mode 100644 index 29e72446..00000000 --- a/modules/nf-core/custom/dumpsoftwareversions/tests/main.nf.test.snap +++ /dev/null @@ -1,33 +0,0 @@ -{ - "Should run without failures": { - "content": [ - [ - "versions.yml:md5,3843ac526e762117eedf8825b40683df" - ], - [ - "data: \"\\n\\n \\n \\n \\n \\n \\n \\n \\n\\", - " \\n\\n\\n \\n \\n\\", - " \\ \\n\\n\\n\\n \\n \\", - " \\ \\n \\n\\n\\n\\n\\", - " \\n\\n \\n \\n\\", - " \\ \\n\\n\\n\\n\\n\\n \\n\\", - " \\ \\n \\n\\n\\n\\n\\", - " \\n\\n \\n \\n\\" - ], - [ - "CUSTOM_DUMPSOFTWAREVERSIONS:", - " python: 3.12.0", - " yaml: 6.0.1", - "TOOL1:", - " tool1: 0.11.9", - "TOOL2:", - " tool2: '1.9'", - "Workflow:" - ] - ], - "timestamp": "2024-01-05T00:18:43.461970077" - } -} \ No newline at end of file diff --git a/modules/nf-core/custom/dumpsoftwareversions/tests/tags.yml b/modules/nf-core/custom/dumpsoftwareversions/tests/tags.yml deleted file mode 100644 index 405aa24a..00000000 --- a/modules/nf-core/custom/dumpsoftwareversions/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -custom/dumpsoftwareversions: - - modules/nf-core/custom/dumpsoftwareversions/** diff --git a/modules/nf-core/fastqc/environment.yml b/modules/nf-core/fastqc/environment.yml index 1787b38a..691d4c76 100644 --- a/modules/nf-core/fastqc/environment.yml +++ b/modules/nf-core/fastqc/environment.yml @@ -1,7 +1,5 @@ -name: fastqc channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::fastqc=0.12.1 diff --git a/modules/nf-core/fastqc/main.nf b/modules/nf-core/fastqc/main.nf index 9e19a74c..d8989f48 100644 --- a/modules/nf-core/fastqc/main.nf +++ b/modules/nf-core/fastqc/main.nf @@ -25,6 +25,14 @@ process FASTQC { 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(' ') + + // 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 + // FastQC memory value allowed range (100 - 10000) + def fastqc_memory = memory_in_mb > 10000 ? 10000 : (memory_in_mb < 100 ? 100 : memory_in_mb) + """ printf "%s %s\\n" $rename_to | while read old_name new_name; do [ -f "\${new_name}" ] || ln -s \$old_name \$new_name @@ -33,6 +41,7 @@ process FASTQC { fastqc \\ $args \\ --threads $task.cpus \\ + --memory $fastqc_memory \\ $renamed_files cat <<-END_VERSIONS > versions.yml diff --git a/modules/nf-core/fastqc/meta.yml b/modules/nf-core/fastqc/meta.yml index ee5507e0..4827da7a 100644 --- a/modules/nf-core/fastqc/meta.yml +++ b/modules/nf-core/fastqc/meta.yml @@ -16,35 +16,44 @@ tools: homepage: https://www.bioinformatics.babraham.ac.uk/projects/fastqc/ documentation: https://www.bioinformatics.babraham.ac.uk/projects/fastqc/Help/ licence: ["GPL-2.0-only"] + identifier: biotools:fastqc 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. + - - 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. output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - html: - type: file - description: FastQC report - pattern: "*_{fastqc.html}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.html": + type: file + description: FastQC report + pattern: "*_{fastqc.html}" - zip: - type: file - description: FastQC report archive - pattern: "*_{fastqc.zip}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.zip": + type: file + description: FastQC report archive + pattern: "*_{fastqc.zip}" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@drpatelh" - "@grst" diff --git a/modules/nf-core/fastqc/nextflow.config b/modules/nf-core/fastqc/nextflow.config new file mode 100644 index 00000000..7e31c74d --- /dev/null +++ b/modules/nf-core/fastqc/nextflow.config @@ -0,0 +1,17 @@ +process { + withName: FASTQC { + ext.args = '--quiet' + publishDir = [ + [ + path: { "${params.outdir}/fastqc" }, + mode: params.publish_dir_mode, + pattern: "*.html" + ], + [ + path: { "${params.outdir}/fastqc/zips" }, + mode: params.publish_dir_mode, + pattern: "*.zip" + ] + ] + } +} \ No newline at end of file diff --git a/modules/nf-core/fastqc/tests/main.nf.test b/modules/nf-core/fastqc/tests/main.nf.test index b9e8f926..e9d79a07 100644 --- a/modules/nf-core/fastqc/tests/main.nf.test +++ b/modules/nf-core/fastqc/tests/main.nf.test @@ -3,107 +3,307 @@ nextflow_process { name "Test Process FASTQC" script "../main.nf" process "FASTQC" + tag "modules" tag "modules_nfcore" tag "fastqc" - test("Single-Read") { + test("sarscov2 single-end [fastq]") { when { - params { - outdir = "$outputDir" + process { + """ + input[0] = Channel.of([ + [ id: 'test', single_end:true ], + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) ] + ]) + """ } + } + + then { + assertAll ( + { assert process.success }, + // NOTE The report contains the date inside it, which means that the md5sum is stable per day, but not longer than that. So you can't md5sum it. + // looks like this:
    Mon 2 Oct 2023
    test.gz
    + // https://github.com/nf-core/modules/pull/3903#issuecomment-1743620039 + { 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("") }, + { assert snapshot(process.out.versions).match() } + ) + } + } + + test("sarscov2 paired-end [fastq]") { + + when { process { """ - input[0] = [ + 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) ] + ]) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert process.out.html[0][1][0] ==~ ".*/test_1_fastqc.html" }, + { assert process.out.html[0][1][1] ==~ ".*/test_2_fastqc.html" }, + { assert process.out.zip[0][1][0] ==~ ".*/test_1_fastqc.zip" }, + { assert process.out.zip[0][1][1] ==~ ".*/test_2_fastqc.zip" }, + { assert path(process.out.html[0][1][0]).text.contains("") }, + { assert path(process.out.html[0][1][1]).text.contains("") }, + { assert snapshot(process.out.versions).match() } + ) + } + } + + test("sarscov2 interleaved [fastq]") { + + when { + process { + """ + input[0] = Channel.of([ + [id: 'test', single_end: false], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_interleaved.fastq.gz', checkIfExists: true) + ]) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { 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("") }, + { assert snapshot(process.out.versions).match() } + ) + } + } + + test("sarscov2 paired-end [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) + ]) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { 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("") }, + { assert snapshot(process.out.versions).match() } + ) + } + } + + test("sarscov2 multiple [fastq]") { + + 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), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test2_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test2_2.fastq.gz', checkIfExists: true) ] + ]) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert process.out.html[0][1][0] ==~ ".*/test_1_fastqc.html" }, + { assert process.out.html[0][1][1] ==~ ".*/test_2_fastqc.html" }, + { assert process.out.html[0][1][2] ==~ ".*/test_3_fastqc.html" }, + { assert process.out.html[0][1][3] ==~ ".*/test_4_fastqc.html" }, + { assert process.out.zip[0][1][0] ==~ ".*/test_1_fastqc.zip" }, + { assert process.out.zip[0][1][1] ==~ ".*/test_2_fastqc.zip" }, + { assert process.out.zip[0][1][2] ==~ ".*/test_3_fastqc.zip" }, + { assert process.out.zip[0][1][3] ==~ ".*/test_4_fastqc.zip" }, + { assert path(process.out.html[0][1][0]).text.contains("") }, + { assert path(process.out.html[0][1][1]).text.contains("") }, + { assert path(process.out.html[0][1][2]).text.contains("") }, + { assert path(process.out.html[0][1][3]).text.contains("") }, + { assert snapshot(process.out.versions).match() } + ) + } + } + + test("sarscov2 custom_prefix") { + + when { + process { + """ + input[0] = Channel.of([ + [ id:'mysample', single_end:true ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) + ]) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { 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("") }, + { assert snapshot(process.out.versions).match() } + ) + } + } + + test("sarscov2 single-end [fastq] - stub") { + + options "-stub" + when { + process { + """ + input[0] = Channel.of([ [ id: 'test', single_end:true ], - [ - file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true) - ] - ] + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) ] + ]) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("sarscov2 paired-end [fastq] - 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) ] + ]) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("sarscov2 interleaved [fastq] - 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_interleaved.fastq.gz', checkIfExists: true) + ]) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("sarscov2 paired-end [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) + ]) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("sarscov2 multiple [fastq] - 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), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test2_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test2_2.fastq.gz', checkIfExists: true) ] + ]) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("sarscov2 custom_prefix - stub") { + + options "-stub" + when { + process { + """ + input[0] = Channel.of([ + [ id:'mysample', single_end:true ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) + ]) """ } } then { assertAll ( - { assert process.success }, - // NOTE The report contains the date inside it, which means that the md5sum is stable per day, but not longer than that. So you can't md5sum it. - // looks like this:
    Mon 2 Oct 2023
    test.gz
    - // https://github.com/nf-core/modules/pull/3903#issuecomment-1743620039 - { assert process.out.html.get(0).get(1) ==~ ".*/test_fastqc.html" }, - { assert path(process.out.html.get(0).get(1)).getText().contains("") }, - { assert snapshot(process.out.versions).match("versions") }, - { assert process.out.zip.get(0).get(1) ==~ ".*/test_fastqc.zip" } + { assert process.success }, + { assert snapshot(process.out).match() } ) } } -// TODO -// // -// // Test with paired-end data -// // -// workflow test_fastqc_paired_end { -// input = [ -// [id: 'test', single_end: false], // meta map -// [ -// file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true), -// file(params.test_data['sarscov2']['illumina']['test_2_fastq_gz'], checkIfExists: true) -// ] -// ] - -// FASTQC ( input ) -// } - -// // -// // Test with interleaved data -// // -// workflow test_fastqc_interleaved { -// input = [ -// [id: 'test', single_end: false], // meta map -// file(params.test_data['sarscov2']['illumina']['test_interleaved_fastq_gz'], checkIfExists: true) -// ] - -// FASTQC ( input ) -// } - -// // -// // Test with bam data -// // -// workflow test_fastqc_bam { -// input = [ -// [id: 'test', single_end: false], // meta map -// file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true) -// ] - -// FASTQC ( input ) -// } - -// // -// // Test with multiple samples -// // -// workflow test_fastqc_multiple { -// input = [ -// [id: 'test', single_end: false], // meta map -// [ -// file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true), -// file(params.test_data['sarscov2']['illumina']['test_2_fastq_gz'], checkIfExists: true), -// file(params.test_data['sarscov2']['illumina']['test2_1_fastq_gz'], checkIfExists: true), -// file(params.test_data['sarscov2']['illumina']['test2_2_fastq_gz'], checkIfExists: true) -// ] -// ] - -// FASTQC ( input ) -// } - -// // -// // Test with custom prefix -// // -// workflow test_fastqc_custom_prefix { -// input = [ -// [ id:'mysample', single_end:true ], // meta map -// file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true) -// ] - -// FASTQC ( input ) -// } } diff --git a/modules/nf-core/fastqc/tests/main.nf.test.snap b/modules/nf-core/fastqc/tests/main.nf.test.snap index 636a32ce..d5db3092 100644 --- a/modules/nf-core/fastqc/tests/main.nf.test.snap +++ b/modules/nf-core/fastqc/tests/main.nf.test.snap @@ -1,10 +1,392 @@ { - "versions": { + "sarscov2 custom_prefix": { "content": [ [ "versions.yml:md5,e1cc25ca8af856014824abd842e93978" ] ], - "timestamp": "2023-10-09T23:40:54+0000" + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T11:02:16.374038" + }, + "sarscov2 single-end [fastq] - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": true + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "html": [ + [ + { + "id": "test", + "single_end": true + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "zip": [ + [ + { + "id": "test", + "single_end": true + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T11:02:24.993809" + }, + "sarscov2 custom_prefix - stub": { + "content": [ + { + "0": [ + [ + { + "id": "mysample", + "single_end": true + }, + "mysample.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "mysample", + "single_end": true + }, + "mysample.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "html": [ + [ + { + "id": "mysample", + "single_end": true + }, + "mysample.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "zip": [ + [ + { + "id": "mysample", + "single_end": true + }, + "mysample.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T11:03:10.93942" + }, + "sarscov2 interleaved [fastq]": { + "content": [ + [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T11:01:42.355718" + }, + "sarscov2 paired-end [bam]": { + "content": [ + [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T11:01:53.276274" + }, + "sarscov2 multiple [fastq]": { + "content": [ + [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T11:02:05.527626" + }, + "sarscov2 paired-end [fastq]": { + "content": [ + [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T11:01:31.188871" + }, + "sarscov2 paired-end [fastq] - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "zip": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T11:02:34.273566" + }, + "sarscov2 multiple [fastq] - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "zip": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T11:03:02.304411" + }, + "sarscov2 single-end [fastq]": { + "content": [ + [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T11:01:19.095607" + }, + "sarscov2 interleaved [fastq] - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "zip": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T11:02:44.640184" + }, + "sarscov2 paired-end [bam] - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "zip": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T11:02:53.550742" } } \ No newline at end of file diff --git a/modules/nf-core/gunzip/environment.yml b/modules/nf-core/gunzip/environment.yml new file mode 100644 index 00000000..c7794856 --- /dev/null +++ b/modules/nf-core/gunzip/environment.yml @@ -0,0 +1,7 @@ +channels: + - conda-forge + - bioconda +dependencies: + - conda-forge::grep=3.11 + - conda-forge::sed=4.8 + - conda-forge::tar=1.34 diff --git a/modules/nf-core/gunzip/main.nf b/modules/nf-core/gunzip/main.nf new file mode 100644 index 00000000..5e67e3b9 --- /dev/null +++ b/modules/nf-core/gunzip/main.nf @@ -0,0 +1,55 @@ +process GUNZIP { + tag "$archive" + label 'process_single' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/ubuntu:22.04' : + 'nf-core/ubuntu:22.04' }" + + input: + tuple val(meta), path(archive) + + output: + tuple val(meta), path("$gunzip"), emit: gunzip + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def extension = ( archive.toString() - '.gz' ).tokenize('.')[-1] + def name = archive.toString() - '.gz' - ".$extension" + def prefix = task.ext.prefix ?: name + gunzip = prefix + ".$extension" + """ + # Not calling gunzip itself because it creates files + # with the original group ownership rather than the + # default one for that user / the work directory + gzip \\ + -cd \\ + $args \\ + $archive \\ + > $gunzip + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + gunzip: \$(echo \$(gunzip --version 2>&1) | sed 's/^.*(gzip) //; s/ Copyright.*\$//') + END_VERSIONS + """ + + stub: + def args = task.ext.args ?: '' + def extension = ( archive.toString() - '.gz' ).tokenize('.')[-1] + def name = archive.toString() - '.gz' - ".$extension" + def prefix = task.ext.prefix ?: name + gunzip = prefix + ".$extension" + """ + touch $gunzip + cat <<-END_VERSIONS > versions.yml + "${task.process}": + gunzip: \$(echo \$(gunzip --version 2>&1) | sed 's/^.*(gzip) //; s/ Copyright.*\$//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/gunzip/meta.yml b/modules/nf-core/gunzip/meta.yml new file mode 100644 index 00000000..9066c035 --- /dev/null +++ b/modules/nf-core/gunzip/meta.yml @@ -0,0 +1,47 @@ +name: gunzip +description: Compresses and decompresses files. +keywords: + - gunzip + - compression + - decompression +tools: + - gunzip: + description: | + gzip is a file format and a software application used for file compression and decompression. + documentation: https://www.gnu.org/software/gzip/manual/gzip.html + licence: ["GPL-3.0-or-later"] + identifier: "" +input: + - - meta: + type: map + description: | + Optional groovy Map containing meta information + e.g. [ id:'test', single_end:false ] + - archive: + type: file + description: File to be compressed/uncompressed + pattern: "*.*" +output: + - gunzip: + - meta: + type: file + description: Compressed/uncompressed file + pattern: "*.*" + - $gunzip: + type: file + description: Compressed/uncompressed file + pattern: "*.*" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@joseespinosa" + - "@drpatelh" + - "@jfy133" +maintainers: + - "@joseespinosa" + - "@drpatelh" + - "@jfy133" + - "@gallvp" diff --git a/modules/nf-core/gunzip/tests/main.nf.test b/modules/nf-core/gunzip/tests/main.nf.test new file mode 100644 index 00000000..776211ad --- /dev/null +++ b/modules/nf-core/gunzip/tests/main.nf.test @@ -0,0 +1,121 @@ +nextflow_process { + + name "Test Process GUNZIP" + script "../main.nf" + process "GUNZIP" + tag "gunzip" + tag "modules_nfcore" + tag "modules" + + test("Should run without failures") { + + when { + params { + outdir = "$outputDir" + } + process { + """ + input[0] = Channel.of([ + [], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) + ] + ) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("Should run without failures - prefix") { + + config './nextflow.config' + + when { + params { + outdir = "$outputDir" + } + process { + """ + input[0] = Channel.of([ + [ id: 'test' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) + ] + ) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("Should run without failures - stub") { + + options '-stub' + + when { + params { + outdir = "$outputDir" + } + process { + """ + input[0] = Channel.of([ + [], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) + ] + ) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("Should run without failures - prefix - stub") { + + options '-stub' + config './nextflow.config' + + when { + params { + outdir = "$outputDir" + } + process { + """ + input[0] = Channel.of([ + [ id: 'test' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) + ] + ) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + +} diff --git a/modules/nf-core/gunzip/tests/main.nf.test.snap b/modules/nf-core/gunzip/tests/main.nf.test.snap new file mode 100644 index 00000000..069967e7 --- /dev/null +++ b/modules/nf-core/gunzip/tests/main.nf.test.snap @@ -0,0 +1,134 @@ +{ + "Should run without failures - prefix - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.xyz.fastq:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + "versions.yml:md5,54376d32aca20e937a4ec26dac228e84" + ], + "gunzip": [ + [ + { + "id": "test" + }, + "test.xyz.fastq:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,54376d32aca20e937a4ec26dac228e84" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-25T11:35:10.861293" + }, + "Should run without failures - stub": { + "content": [ + { + "0": [ + [ + [ + + ], + "test_1.fastq:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + "versions.yml:md5,54376d32aca20e937a4ec26dac228e84" + ], + "gunzip": [ + [ + [ + + ], + "test_1.fastq:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,54376d32aca20e937a4ec26dac228e84" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-25T11:35:05.857145" + }, + "Should run without failures": { + "content": [ + { + "0": [ + [ + [ + + ], + "test_1.fastq:md5,4161df271f9bfcd25d5845a1e220dbec" + ] + ], + "1": [ + "versions.yml:md5,54376d32aca20e937a4ec26dac228e84" + ], + "gunzip": [ + [ + [ + + ], + "test_1.fastq:md5,4161df271f9bfcd25d5845a1e220dbec" + ] + ], + "versions": [ + "versions.yml:md5,54376d32aca20e937a4ec26dac228e84" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2023-10-17T15:35:37.690477896" + }, + "Should run without failures - prefix": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.xyz.fastq:md5,4161df271f9bfcd25d5845a1e220dbec" + ] + ], + "1": [ + "versions.yml:md5,54376d32aca20e937a4ec26dac228e84" + ], + "gunzip": [ + [ + { + "id": "test" + }, + "test.xyz.fastq:md5,4161df271f9bfcd25d5845a1e220dbec" + ] + ], + "versions": [ + "versions.yml:md5,54376d32aca20e937a4ec26dac228e84" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-25T11:33:32.921739" + } +} \ No newline at end of file diff --git a/modules/nf-core/gunzip/tests/nextflow.config b/modules/nf-core/gunzip/tests/nextflow.config new file mode 100644 index 00000000..dec77642 --- /dev/null +++ b/modules/nf-core/gunzip/tests/nextflow.config @@ -0,0 +1,5 @@ +process { + withName: GUNZIP { + ext.prefix = { "${meta.id}.xyz" } + } +} diff --git a/modules/nf-core/gunzip/tests/tags.yml b/modules/nf-core/gunzip/tests/tags.yml new file mode 100644 index 00000000..fd3f6915 --- /dev/null +++ b/modules/nf-core/gunzip/tests/tags.yml @@ -0,0 +1,2 @@ +gunzip: + - modules/nf-core/gunzip/** diff --git a/modules/nf-core/methyldackel/extract/environment.yml b/modules/nf-core/methyldackel/extract/environment.yml new file mode 100644 index 00000000..34beddbe --- /dev/null +++ b/modules/nf-core/methyldackel/extract/environment.yml @@ -0,0 +1,5 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::methyldackel=0.6.1 diff --git a/modules/nf-core/methyldackel/extract/main.nf b/modules/nf-core/methyldackel/extract/main.nf index 32951459..66b2745a 100644 --- a/modules/nf-core/methyldackel/extract/main.nf +++ b/modules/nf-core/methyldackel/extract/main.nf @@ -2,10 +2,10 @@ process METHYLDACKEL_EXTRACT { tag "$meta.id" label 'process_medium' - conda "bioconda::methyldackel=0.6.0" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/methyldackel:0.6.0--h22771d5_0' : - 'biocontainers/methyldackel:0.6.0--h22771d5_0' }" + 'https://depot.galaxyproject.org/singularity/methyldackel:0.6.1--he4a0461_7' : + 'biocontainers/methyldackel:0.6.1--he4a0461_7' }" input: tuple val(meta), path(bam), path(bai) @@ -33,4 +33,16 @@ process METHYLDACKEL_EXTRACT { methyldackel: \$(MethylDackel --version 2>&1 | cut -f1 -d" ") END_VERSIONS """ + + stub: + def args = task.ext.args ?: '' + def out_extension = args.contains('--methylKit') ? 'methylKit' : 'bedGraph' + """ + touch ${bam.baseName}_CpG.${out_extension} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + methyldackel: \$(MethylDackel --version 2>&1 | cut -f1 -d" ") + END_VERSIONS + """ } diff --git a/modules/nf-core/methyldackel/extract/meta.yml b/modules/nf-core/methyldackel/extract/meta.yml index 9d777bb1..2f17738f 100644 --- a/modules/nf-core/methyldackel/extract/meta.yml +++ b/modules/nf-core/methyldackel/extract/meta.yml @@ -18,45 +18,56 @@ tools: homepage: https://github.com/dpryan79/MethylDackel documentation: https://github.com/dpryan79/MethylDackel/blob/master/README.md licence: ["MIT"] + identifier: biotools:methyldackel 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 - pattern: "*.{fasta,fa}" - - fai: - type: file - description: FASTA index file - pattern: "*.fai" - - bam: - type: file - description: BAM/CRAM file - pattern: "*.{bam,cram}" - - bai: - type: file - description: BAM/CRAM index file - pattern: "*.{bai,crai}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: BAM/CRAM file + pattern: "*.{bam,cram}" + - bai: + type: file + description: BAM/CRAM index file + pattern: "*.{bai,crai}" + - - fasta: + type: file + description: Input genome fasta file + pattern: "*.{fasta,fa}" + - - fai: + type: file + description: FASTA index file + pattern: "*.fai" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - bedgraph: - type: file - description: bedGraph file, containing per-base methylation metrics - pattern: "*.bedGraph" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.bedGraph": + type: file + description: bedGraph file, containing per-base methylation metrics + pattern: "*.bedGraph" - methylkit: - type: file - description: methylKit file, containing per-base methylation metrics - pattern: "*.methylKit" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.methylKit": + type: file + description: methylKit file, containing per-base methylation metrics + pattern: "*.methylKit" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@phue" +maintainers: + - "@phue" diff --git a/modules/nf-core/methyldackel/extract/nextflow.config b/modules/nf-core/methyldackel/extract/nextflow.config new file mode 100644 index 00000000..f7e24c73 --- /dev/null +++ b/modules/nf-core/methyldackel/extract/nextflow.config @@ -0,0 +1,22 @@ +process { + withName: METHYLDACKEL_EXTRACT { + ext.args = [ + params.comprehensive ? ' --CHG --CHH' : '', + params.ignore_flags ? " --ignoreFlags" : '', + params.methyl_kit ? " --methylKit" : '', + params.min_depth > 0 ? " --minDepth ${params.min_depth}" : '' + ].join(" ").trim() + publishDir = [ + [ + path: { "${params.outdir}/methyldackel" }, + mode: params.publish_dir_mode, + pattern: "*.bedGraph" + ], + [ + path: { "${params.outdir}/methyldackel" }, + mode: params.publish_dir_mode, + pattern: "*.methylKit" + ] + ] + } +} \ No newline at end of file diff --git a/modules/nf-core/methyldackel/extract/tests/main.nf.test b/modules/nf-core/methyldackel/extract/tests/main.nf.test new file mode 100644 index 00000000..562f5c2e --- /dev/null +++ b/modules/nf-core/methyldackel/extract/tests/main.nf.test @@ -0,0 +1,90 @@ + +nextflow_process { + + name "Test Process METHYLDACKEL_EXTRACT" + script "../main.nf" + process "METHYLDACKEL_EXTRACT" + + tag "modules" + tag "modules_nfcore" + tag "methyldackel" + tag "methyldackel/extract" + + test("test-methyldackel-extract") { + + when { + process { + """ + input[0] = [ [ 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.methylated.sorted.bam.bai', 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) + + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("test-methyldackel-extract-methyl-kit") { + config "./nextflow.config" + + when { + process { + """ + input[0] = [ + [ 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.methylated.sorted.bam.bai', 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) + + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("test-methyldackel-extract-methyl-kit-stub") { + config "./nextflow.config" + 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.methylated.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.methylated.sorted.bam.bai', 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) + + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + +} diff --git a/modules/nf-core/methyldackel/extract/tests/main.nf.test.snap b/modules/nf-core/methyldackel/extract/tests/main.nf.test.snap new file mode 100644 index 00000000..64cbd76b --- /dev/null +++ b/modules/nf-core/methyldackel/extract/tests/main.nf.test.snap @@ -0,0 +1,125 @@ +{ + "test-methyldackel-extract-methyl-kit": { + "content": [ + { + "0": [ + + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.paired_end.methylated.sorted_CpG.methylKit:md5,b1dc217909cd5f8174058c7af785f51c" + ] + ], + "2": [ + "versions.yml:md5,9e23b0c31bf0f98e9348321fe9226498" + ], + "bedgraph": [ + + ], + "methylkit": [ + [ + { + "id": "test", + "single_end": false + }, + "test.paired_end.methylated.sorted_CpG.methylKit:md5,b1dc217909cd5f8174058c7af785f51c" + ] + ], + "versions": [ + "versions.yml:md5,9e23b0c31bf0f98e9348321fe9226498" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-04T20:34:17.513866" + }, + "test-methyldackel-extract-methyl-kit-stub": { + "content": [ + { + "0": [ + + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.paired_end.methylated.sorted_CpG.methylKit:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,9e23b0c31bf0f98e9348321fe9226498" + ], + "bedgraph": [ + + ], + "methylkit": [ + [ + { + "id": "test", + "single_end": false + }, + "test.paired_end.methylated.sorted_CpG.methylKit:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,9e23b0c31bf0f98e9348321fe9226498" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-04T20:34:22.343382" + }, + "test-methyldackel-extract": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.paired_end.methylated.sorted_CpG.bedGraph:md5,abcc9d1db6e48d5aced567c337b563d4" + ] + ], + "1": [ + + ], + "2": [ + "versions.yml:md5,9e23b0c31bf0f98e9348321fe9226498" + ], + "bedgraph": [ + [ + { + "id": "test", + "single_end": false + }, + "test.paired_end.methylated.sorted_CpG.bedGraph:md5,abcc9d1db6e48d5aced567c337b563d4" + ] + ], + "methylkit": [ + + ], + "versions": [ + "versions.yml:md5,9e23b0c31bf0f98e9348321fe9226498" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-04T20:34:12.605013" + } +} \ No newline at end of file diff --git a/modules/nf-core/methyldackel/extract/tests/nextflow.config b/modules/nf-core/methyldackel/extract/tests/nextflow.config new file mode 100644 index 00000000..4f7caeb4 --- /dev/null +++ b/modules/nf-core/methyldackel/extract/tests/nextflow.config @@ -0,0 +1,5 @@ +process { + withName: METHYLDACKEL_EXTRACT { + ext.args = "--methylKit" + } +} diff --git a/modules/nf-core/methyldackel/mbias/environment.yml b/modules/nf-core/methyldackel/mbias/environment.yml new file mode 100644 index 00000000..34beddbe --- /dev/null +++ b/modules/nf-core/methyldackel/mbias/environment.yml @@ -0,0 +1,5 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::methyldackel=0.6.1 diff --git a/modules/nf-core/methyldackel/mbias/main.nf b/modules/nf-core/methyldackel/mbias/main.nf index b30d3391..f0c48a34 100644 --- a/modules/nf-core/methyldackel/mbias/main.nf +++ b/modules/nf-core/methyldackel/mbias/main.nf @@ -2,10 +2,10 @@ process METHYLDACKEL_MBIAS { tag "$meta.id" label 'process_low' - conda "bioconda::methyldackel=0.6.0" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/methyldackel:0.6.0--h22771d5_0' : - 'biocontainers/methyldackel:0.6.0--h22771d5_0' }" + 'https://depot.galaxyproject.org/singularity/methyldackel:0.6.1--he4a0461_7' : + 'biocontainers/methyldackel:0.6.1--he4a0461_7' }" input: tuple val(meta), path(bam), path(bai) @@ -36,4 +36,15 @@ process METHYLDACKEL_MBIAS { methyldackel: \$(MethylDackel --version 2>&1 | cut -f1 -d" ") END_VERSIONS """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.mbias.txt + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + methyldackel: \$(MethylDackel --version 2>&1 | cut -f1 -d" ") + END_VERSIONS + """ } diff --git a/modules/nf-core/methyldackel/mbias/meta.yml b/modules/nf-core/methyldackel/mbias/meta.yml index 75217232..10b3dcad 100644 --- a/modules/nf-core/methyldackel/mbias/meta.yml +++ b/modules/nf-core/methyldackel/mbias/meta.yml @@ -19,41 +19,46 @@ tools: homepage: https://github.com/dpryan79/MethylDackel documentation: https://github.com/dpryan79/MethylDackel/blob/master/README.md licence: ["MIT"] + identifier: biotools:methyldackel 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 - pattern: "*.{fasta,fa}" - - fai: - type: file - description: FASTA index file - pattern: "*.{fai}" - - bam: - type: file - description: BAM/CRAM file - pattern: "*.{bam,cram}" - - bai: - type: file - description: BAM/CRAM index file - pattern: "*.{bai,crai}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: BAM/CRAM file + pattern: "*.{bam,cram}" + - bai: + type: file + description: BAM/CRAM index file + pattern: "*.{bai,crai}" + - - fasta: + type: file + description: Input genome fasta file + pattern: "*.{fasta,fa}" + - - fai: + type: file + description: FASTA index file + pattern: "*.{fai}" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - txt: - type: file - description: Text file containing methylation bias - pattern: "*.{txt}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.mbias.txt": + type: file + description: Text file containing methylation bias + pattern: "*.{txt}" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@phue" +maintainers: + - "@phue" diff --git a/modules/nf-core/methyldackel/mbias/nextflow.config b/modules/nf-core/methyldackel/mbias/nextflow.config new file mode 100644 index 00000000..8ae58f00 --- /dev/null +++ b/modules/nf-core/methyldackel/mbias/nextflow.config @@ -0,0 +1,15 @@ +process { + withName: METHYLDACKEL_MBIAS { + ext.args = [ + params.comprehensive ? ' --CHG --CHH' : '', + params.ignore_flags ? " --ignoreFlags" : '' + ].join(" ").trim() + publishDir = [ + [ + path: { "${params.outdir}/methyldackel/mbias" }, + mode: params.publish_dir_mode, + pattern: "*mbias.txt" + ] + ] + } +} \ No newline at end of file diff --git a/modules/nf-core/methyldackel/mbias/tests/main.nf.test b/modules/nf-core/methyldackel/mbias/tests/main.nf.test new file mode 100644 index 00000000..14c30df7 --- /dev/null +++ b/modules/nf-core/methyldackel/mbias/tests/main.nf.test @@ -0,0 +1,68 @@ + +nextflow_process { + + name "Test Process METHYLDACKEL_MBIAS" + script "../main.nf" + process "METHYLDACKEL_MBIAS" + + tag "modules" + tag "modules_nfcore" + tag "methyldackel" + tag "methyldackel/mbias" + + test("test-methyldackel-mbias") { + + when { + process { + """ + input[0] = [ + [ 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.methylated.sorted.bam.bai', 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) + + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + file(process.out.txt[0][1]).readLines()[3..7], + process.out.versions + ).match() + } + ) + } + } + + test("test-methyldackel-mbias-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.methylated.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.methylated.sorted.bam.bai', 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) + + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + +} diff --git a/modules/nf-core/methyldackel/mbias/tests/main.nf.test.snap b/modules/nf-core/methyldackel/mbias/tests/main.nf.test.snap new file mode 100644 index 00000000..2dc4fde7 --- /dev/null +++ b/modules/nf-core/methyldackel/mbias/tests/main.nf.test.snap @@ -0,0 +1,56 @@ +{ + "test-methyldackel-mbias-stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.mbias.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + "versions.yml:md5,0d6cea2918112948708bd1c2f5309398" + ], + "txt": [ + [ + { + "id": "test", + "single_end": false + }, + "test.mbias.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,0d6cea2918112948708bd1c2f5309398" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-04T20:35:24.956573" + }, + "test-methyldackel-mbias": { + "content": [ + [ + "OT\t1\t2\t57\t5", + "OT\t2\t2\t48\t9", + "OT\t1\t3\t37\t5", + "OT\t2\t3\t58\t5", + "OT\t1\t4\t52\t3" + ], + [ + "versions.yml:md5,0d6cea2918112948708bd1c2f5309398" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-04T20:35:20.084046" + } +} \ No newline at end of file diff --git a/modules/nf-core/multiqc/environment.yml b/modules/nf-core/multiqc/environment.yml index bc0bdb5b..6f5b867b 100644 --- a/modules/nf-core/multiqc/environment.yml +++ b/modules/nf-core/multiqc/environment.yml @@ -1,7 +1,5 @@ -name: multiqc channels: - conda-forge - bioconda - - defaults dependencies: - - bioconda::multiqc=1.18 + - bioconda::multiqc=1.25.1 diff --git a/modules/nf-core/multiqc/main.nf b/modules/nf-core/multiqc/main.nf index 70708f33..cc0643e1 100644 --- a/modules/nf-core/multiqc/main.nf +++ b/modules/nf-core/multiqc/main.nf @@ -3,14 +3,16 @@ process MULTIQC { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/multiqc:1.18--pyhdfd78af_0' : - 'biocontainers/multiqc:1.18--pyhdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/multiqc:1.25.1--pyhdfd78af_0' : + 'biocontainers/multiqc:1.25.1--pyhdfd78af_0' }" input: path multiqc_files, stageAs: "?/*" path(multiqc_config) path(extra_multiqc_config) path(multiqc_logo) + path(replace_names) + path(sample_names) output: path "*multiqc_report.html", emit: report @@ -23,16 +25,22 @@ 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 logo = multiqc_logo ? /--cl-config 'custom_logo: "${multiqc_logo}"'/ : '' + 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 \\ . cat <<-END_VERSIONS > versions.yml @@ -44,7 +52,7 @@ process MULTIQC { stub: """ mkdir multiqc_data - touch multiqc_plots + mkdir multiqc_plots touch multiqc_report.html cat <<-END_VERSIONS > versions.yml diff --git a/modules/nf-core/multiqc/meta.yml b/modules/nf-core/multiqc/meta.yml index 45a9bc35..b16c1879 100644 --- a/modules/nf-core/multiqc/meta.yml +++ b/modules/nf-core/multiqc/meta.yml @@ -1,5 +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,40 +13,59 @@ tools: homepage: https://multiqc.info/ documentation: https://multiqc.info/docs/ licence: ["GPL-3.0-or-later"] + identifier: biotools:multiqc input: - - multiqc_files: - type: file - description: | - List of reports / files recognised by MultiQC, for example the html and zip output of FastQC - - 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: - type: file - description: Optional logo file for MultiQC - pattern: "*.{png}" + - - multiqc_files: + type: file + description: | + List of reports / files recognised by MultiQC, for example the html and zip output of FastQC + - - 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: + type: file + description: Optional logo file for MultiQC + pattern: "*.{png}" + - - 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: + type: file + description: | + Optional TSV file with headers, passed to the MultiQC --sample_names + argument. + pattern: "*.{tsv}" output: - report: - type: file - description: MultiQC report file - pattern: "multiqc_report.html" + - "*multiqc_report.html": + type: file + description: MultiQC report file + pattern: "multiqc_report.html" - data: - type: directory - description: MultiQC data dir - pattern: "multiqc_data" + - "*_data": + type: directory + description: MultiQC data dir + pattern: "multiqc_data" - plots: - type: file - description: Plots created by MultiQC - pattern: "*_data" + - "*_plots": + type: file + description: Plots created by MultiQC + pattern: "*_data" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@abhi18av" - "@bunop" diff --git a/modules/nf-core/multiqc/nextflow.config b/modules/nf-core/multiqc/nextflow.config new file mode 100644 index 00000000..98cf050f --- /dev/null +++ b/modules/nf-core/multiqc/nextflow.config @@ -0,0 +1,10 @@ +process { + withName: 'MULTIQC' { + ext.args = { params.multiqc_title ? "--title \"$params.multiqc_title\"" : '' } + publishDir = [ + path: { "${params.outdir}/multiqc/${params.aligner}" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } +} \ No newline at end of file diff --git a/modules/nf-core/multiqc/tests/main.nf.test b/modules/nf-core/multiqc/tests/main.nf.test index d0438eda..33316a7d 100644 --- a/modules/nf-core/multiqc/tests/main.nf.test +++ b/modules/nf-core/multiqc/tests/main.nf.test @@ -3,19 +3,24 @@ nextflow_process { name "Test Process MULTIQC" script "../main.nf" process "MULTIQC" + tag "modules" tag "modules_nfcore" tag "multiqc" + config "./nextflow.config" + test("sarscov2 single-end [fastqc]") { when { process { """ - input[0] = Channel.of([file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz_fastqc_zip'], checkIfExists: true)]) + 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] = [] """ } } @@ -25,7 +30,7 @@ nextflow_process { { assert process.success }, { assert process.out.report[0] ==~ ".*/multiqc_report.html" }, { assert process.out.data[0] ==~ ".*/multiqc_data" }, - { assert snapshot(process.out.versions).match("versions") } + { assert snapshot(process.out.versions).match("multiqc_versions_single") } ) } @@ -36,10 +41,12 @@ nextflow_process { when { process { """ - input[0] = Channel.of([file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz_fastqc_zip'], checkIfExists: true)]) + 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] = [] """ } } @@ -49,7 +56,7 @@ nextflow_process { { assert process.success }, { assert process.out.report[0] ==~ ".*/multiqc_report.html" }, { assert process.out.data[0] ==~ ".*/multiqc_data" }, - { assert snapshot(process.out.versions).match("versions") } + { assert snapshot(process.out.versions).match("multiqc_versions_config") } ) } } @@ -61,10 +68,12 @@ nextflow_process { when { process { """ - input[0] = Channel.of([file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz_fastqc_zip'], checkIfExists: true)]) + 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] = [] """ } } @@ -75,7 +84,7 @@ nextflow_process { { 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() } + process.out.versions ).match("multiqc_stub") } ) } diff --git a/modules/nf-core/multiqc/tests/main.nf.test.snap b/modules/nf-core/multiqc/tests/main.nf.test.snap index d087a9df..261dc0fa 100644 --- a/modules/nf-core/multiqc/tests/main.nf.test.snap +++ b/modules/nf-core/multiqc/tests/main.nf.test.snap @@ -1,21 +1,41 @@ { - "versions": { + "multiqc_versions_single": { "content": [ [ - "versions.yml:md5,f81e19ab3a8e2b6f2b5d22078117df71" + "versions.yml:md5,41f391dcedce7f93ca188f3a3ffa0916" ] ], - "timestamp": "2023-12-30T00:26:14.048089591" + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-02T17:51:46.317523" }, - "sarscov2 single-end [fastqc] - stub": { + "multiqc_stub": { "content": [ [ "multiqc_report.html", "multiqc_data", "multiqc_plots", - "versions.yml:md5,f81e19ab3a8e2b6f2b5d22078117df71" + "versions.yml:md5,41f391dcedce7f93ca188f3a3ffa0916" ] ], - "timestamp": "2023-12-30T00:26:52.963964055" + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-02T17:52:20.680978" + }, + "multiqc_versions_config": { + "content": [ + [ + "versions.yml:md5,41f391dcedce7f93ca188f3a3ffa0916" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-02T17:52:09.185842" } -} \ No newline at end of file +} diff --git a/modules/nf-core/multiqc/tests/nextflow.config b/modules/nf-core/multiqc/tests/nextflow.config new file mode 100644 index 00000000..c537a6a3 --- /dev/null +++ b/modules/nf-core/multiqc/tests/nextflow.config @@ -0,0 +1,5 @@ +process { + withName: 'MULTIQC' { + ext.prefix = null + } +} diff --git a/modules/nf-core/picard/markduplicates/environment.yml b/modules/nf-core/picard/markduplicates/environment.yml new file mode 100644 index 00000000..1d715d56 --- /dev/null +++ b/modules/nf-core/picard/markduplicates/environment.yml @@ -0,0 +1,5 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::picard=3.3.0 diff --git a/modules/nf-core/picard/markduplicates/main.nf b/modules/nf-core/picard/markduplicates/main.nf index 7ba8448f..8a2ed64e 100644 --- a/modules/nf-core/picard/markduplicates/main.nf +++ b/modules/nf-core/picard/markduplicates/main.nf @@ -2,19 +2,20 @@ process PICARD_MARKDUPLICATES { tag "$meta.id" label 'process_medium' - conda "bioconda::picard=3.0.0" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/picard:3.0.0--hdfd78af_1' : - 'biocontainers/picard:3.0.0--hdfd78af_1' }" + 'https://depot.galaxyproject.org/singularity/picard:3.3.0--hdfd78af_0' : + 'biocontainers/picard:3.3.0--hdfd78af_0' }" input: - tuple val(meta), path(bam) - path fasta - path fai + tuple val(meta), path(reads) + tuple val(meta2), path(fasta) + tuple val(meta3), path(fai) output: - tuple val(meta), path("*.bam") , emit: bam - tuple val(meta), path("*.bai") , optional:true, emit: bai + tuple val(meta), path("*.bam") , emit: bam, optional: true + tuple val(meta), path("*.bai") , emit: bai, optional: true + tuple val(meta), path("*.cram"), emit: cram, optional: true tuple val(meta), path("*.metrics.txt"), emit: metrics path "versions.yml" , emit: versions @@ -24,20 +25,25 @@ process PICARD_MARKDUPLICATES { script: def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" + def suffix = task.ext.suffix ?: "${reads.getExtension()}" + def reference = fasta ? "--REFERENCE_SEQUENCE ${fasta}" : "" def avail_mem = 3072 if (!task.memory) { log.info '[Picard MarkDuplicates] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.' } else { avail_mem = (task.memory.mega*0.8).intValue() } + + if ("$reads" == "${prefix}.${suffix}") error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" + """ picard \\ -Xmx${avail_mem}M \\ MarkDuplicates \\ $args \\ - --INPUT $bam \\ - --OUTPUT ${prefix}.bam \\ - --REFERENCE_SEQUENCE $fasta \\ + --INPUT $reads \\ + --OUTPUT ${prefix}.${suffix} \\ + $reference \\ --METRICS_FILE ${prefix}.MarkDuplicates.metrics.txt cat <<-END_VERSIONS > versions.yml @@ -48,9 +54,10 @@ process PICARD_MARKDUPLICATES { stub: def prefix = task.ext.prefix ?: "${meta.id}" + def suffix = task.ext.suffix ?: "${reads.getExtension()}" + if ("$reads" == "${prefix}.${suffix}") error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" """ - touch ${prefix}.bam - touch ${prefix}.bam.bai + touch ${prefix}.${suffix} touch ${prefix}.MarkDuplicates.metrics.txt cat <<-END_VERSIONS > versions.yml diff --git a/modules/nf-core/picard/markduplicates/meta.yml b/modules/nf-core/picard/markduplicates/meta.yml index 3f2357bb..bcaf9160 100644 --- a/modules/nf-core/picard/markduplicates/meta.yml +++ b/modules/nf-core/picard/markduplicates/meta.yml @@ -15,46 +15,87 @@ tools: homepage: https://broadinstitute.github.io/picard/ documentation: https://broadinstitute.github.io/picard/ licence: ["MIT"] + identifier: biotools:picard_tools 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,cram,sam}" - - fasta: - type: file - description: Reference genome fasta file - pattern: "*.{fasta,fa}" - - fai: - type: file - description: Reference genome fasta index - pattern: "*.{fai}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - reads: + type: file + description: Sequence reads file, can be SAM/BAM/CRAM format + pattern: "*.{bam,cram,sam}" + - - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - fasta: + type: file + description: Reference genome fasta file, required for CRAM input + pattern: "*.{fasta,fa}" + - - meta3: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - fai: + type: file + description: Reference genome fasta index + pattern: "*.{fai}" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - bam: - type: file - description: BAM file with duplicate reads marked/removed - pattern: "*.{bam}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.bam": + type: file + description: BAM file with duplicate reads marked/removed + pattern: "*.{bam}" - bai: - type: file - description: An optional BAM index file. If desired, --CREATE_INDEX must be passed as a flag - pattern: "*.{bai}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.bai": + type: file + description: An optional BAM index file. If desired, --CREATE_INDEX must be + passed as a flag + pattern: "*.{bai}" + - cram: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.cram": + type: file + description: Output CRAM file + pattern: "*.{cram}" - metrics: - type: file - description: Duplicate metrics file generated by picard - pattern: "*.{metrics.txt}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.metrics.txt": + type: file + description: Duplicate metrics file generated by picard + pattern: "*.{metrics.txt}" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@drpatelh" - "@projectoriented" + - "@ramprasadn" +maintainers: + - "@drpatelh" + - "@projectoriented" + - "@ramprasadn" diff --git a/modules/nf-core/picard/markduplicates/nextflow.config b/modules/nf-core/picard/markduplicates/nextflow.config new file mode 100644 index 00000000..1c3c2ec7 --- /dev/null +++ b/modules/nf-core/picard/markduplicates/nextflow.config @@ -0,0 +1,18 @@ +process { + withName: PICARD_MARKDUPLICATES { + ext.args = "--ASSUME_SORTED true --REMOVE_DUPLICATES false --VALIDATION_STRINGENCY LENIENT --PROGRAM_RECORD_ID 'null' --TMP_DIR tmp" + ext.prefix = { "${meta.id}.markdup.sorted" } + publishDir = [ + [ + path: { "${params.outdir}/${params.aligner}/deduplicated/picard_metrics" }, + pattern: "*.metrics.txt", + mode: params.publish_dir_mode + ], + [ + path: { "${params.outdir}/${params.aligner}/deduplicated" }, + pattern: "*.bam", + mode: params.publish_dir_mode + ] + ] + } +} \ No newline at end of file diff --git a/modules/nf-core/picard/markduplicates/tests/main.nf.test b/modules/nf-core/picard/markduplicates/tests/main.nf.test new file mode 100644 index 00000000..9ed90965 --- /dev/null +++ b/modules/nf-core/picard/markduplicates/tests/main.nf.test @@ -0,0 +1,173 @@ +nextflow_process { + + name "Test Process PICARD_MARKDUPLICATES" + script "../main.nf" + process "PICARD_MARKDUPLICATES" + config "./nextflow.config" + tag "modules" + tag "modules_nfcore" + tag "picard" + tag "picard/markduplicates" + + test("sarscov2 [unsorted 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.bam', checkIfExists: true) + ]) + input[1] = [ [:], [] ] + input[2] = [ [:], [] ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + file(process.out.bam[0][1]).name, + path(process.out.metrics.get(0).get(1)).readLines()[0..2], + process.out.versions) + .match() } + ) + } + } + + test("sarscov2 [sorted 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) + ]) + input[1] = [ [:], [] ] + input[2] = [ [:], [] ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + file(process.out.bam[0][1]).name, + path(process.out.metrics.get(0).get(1)).readLines()[0..2], + process.out.versions) + .match() } + ) + } + } + + test("homo_sapiens [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.sorted.cram', checkIfExists: true) + ]) + input[1] = Channel.of([ + [ id:'genome' ], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ]) + input[2] = Channel.of([ + [ id:'genome' ], + 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, + path(process.out.metrics.get(0).get(1)).readLines()[0..2], + process.out.versions) + .match() } + ) + } + } + + test("sarscov2 [unsorted 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.bam', checkIfExists: true) + ]) + input[1] = [ [:], [] ] + input[2] = [ [:], [] ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("sarscov2 [sorted 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) + ]) + input[1] = [ [:], [] ] + input[2] = [ [:], [] ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("homo_sapiens [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.sorted.cram', checkIfExists: true) + ]) + input[1] = Channel.of([ + [ id:'genome' ], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ]) + input[2] = Channel.of([ + [ id:'genome' ], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) + ]) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } +} diff --git a/modules/nf-core/picard/markduplicates/tests/main.nf.test.snap b/modules/nf-core/picard/markduplicates/tests/main.nf.test.snap new file mode 100644 index 00000000..13770a8e --- /dev/null +++ b/modules/nf-core/picard/markduplicates/tests/main.nf.test.snap @@ -0,0 +1,251 @@ +{ + "sarscov2 [sorted bam] - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.marked.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + + ], + "2": [ + + ], + "3": [ + [ + { + "id": "test", + "single_end": false + }, + "test.marked.MarkDuplicates.metrics.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + "versions.yml:md5,88717faa02b215b99eef3d05214a6fea" + ], + "bai": [ + + ], + "bam": [ + [ + { + "id": "test", + "single_end": false + }, + "test.marked.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "cram": [ + + ], + "metrics": [ + [ + { + "id": "test", + "single_end": false + }, + "test.marked.MarkDuplicates.metrics.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,88717faa02b215b99eef3d05214a6fea" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-18T10:58:50.046420643" + }, + "sarscov2 [unsorted bam] - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.marked.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + + ], + "2": [ + + ], + "3": [ + [ + { + "id": "test", + "single_end": false + }, + "test.marked.MarkDuplicates.metrics.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + "versions.yml:md5,88717faa02b215b99eef3d05214a6fea" + ], + "bai": [ + + ], + "bam": [ + [ + { + "id": "test", + "single_end": false + }, + "test.marked.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "cram": [ + + ], + "metrics": [ + [ + { + "id": "test", + "single_end": false + }, + "test.marked.MarkDuplicates.metrics.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,88717faa02b215b99eef3d05214a6fea" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-18T10:58:36.738907079" + }, + "sarscov2 [unsorted bam]": { + "content": [ + "test.marked.bam", + [ + "## htsjdk.samtools.metrics.StringHeader", + "# MarkDuplicates --INPUT test.paired_end.bam --OUTPUT test.marked.bam --METRICS_FILE test.marked.MarkDuplicates.metrics.txt --ASSUME_SORT_ORDER queryname --MAX_SEQUENCES_FOR_DISK_READ_ENDS_MAP 50000 --MAX_FILE_HANDLES_FOR_READ_ENDS_MAP 8000 --SORTING_COLLECTION_SIZE_RATIO 0.25 --TAG_DUPLICATE_SET_MEMBERS false --REMOVE_SEQUENCING_DUPLICATES false --TAGGING_POLICY DontTag --CLEAR_DT true --DUPLEX_UMI false --FLOW_MODE false --FLOW_DUP_STRATEGY FLOW_QUALITY_SUM_STRATEGY --FLOW_USE_END_IN_UNPAIRED_READS false --FLOW_USE_UNPAIRED_CLIPPED_END false --FLOW_UNPAIRED_END_UNCERTAINTY 0 --FLOW_UNPAIRED_START_UNCERTAINTY 0 --FLOW_SKIP_FIRST_N_FLOWS 0 --FLOW_Q_IS_KNOWN_END false --FLOW_EFFECTIVE_QUALITY_THRESHOLD 15 --ADD_PG_TAG_TO_READS true --REMOVE_DUPLICATES false --ASSUME_SORTED false --DUPLICATE_SCORING_STRATEGY SUM_OF_BASE_QUALITIES --PROGRAM_RECORD_ID MarkDuplicates --PROGRAM_GROUP_NAME MarkDuplicates --READ_NAME_REGEX --OPTICAL_DUPLICATE_PIXEL_DISTANCE 100 --MAX_OPTICAL_DUPLICATE_SET_SIZE 300000 --VERBOSITY INFO --QUIET false --VALIDATION_STRINGENCY STRICT --COMPRESSION_LEVEL 5 --MAX_RECORDS_IN_RAM 500000 --CREATE_INDEX false --CREATE_MD5_FILE false --help false --version false --showHidden false --USE_JDK_DEFLATER false --USE_JDK_INFLATER false", + "## htsjdk.samtools.metrics.StringHeader" + ], + [ + "versions.yml:md5,88717faa02b215b99eef3d05214a6fea" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-18T10:57:16.683233382" + }, + "sarscov2 [sorted bam]": { + "content": [ + "test.marked.bam", + [ + "## htsjdk.samtools.metrics.StringHeader", + "# MarkDuplicates --INPUT test.paired_end.sorted.bam --OUTPUT test.marked.bam --METRICS_FILE test.marked.MarkDuplicates.metrics.txt --ASSUME_SORT_ORDER queryname --MAX_SEQUENCES_FOR_DISK_READ_ENDS_MAP 50000 --MAX_FILE_HANDLES_FOR_READ_ENDS_MAP 8000 --SORTING_COLLECTION_SIZE_RATIO 0.25 --TAG_DUPLICATE_SET_MEMBERS false --REMOVE_SEQUENCING_DUPLICATES false --TAGGING_POLICY DontTag --CLEAR_DT true --DUPLEX_UMI false --FLOW_MODE false --FLOW_DUP_STRATEGY FLOW_QUALITY_SUM_STRATEGY --FLOW_USE_END_IN_UNPAIRED_READS false --FLOW_USE_UNPAIRED_CLIPPED_END false --FLOW_UNPAIRED_END_UNCERTAINTY 0 --FLOW_UNPAIRED_START_UNCERTAINTY 0 --FLOW_SKIP_FIRST_N_FLOWS 0 --FLOW_Q_IS_KNOWN_END false --FLOW_EFFECTIVE_QUALITY_THRESHOLD 15 --ADD_PG_TAG_TO_READS true --REMOVE_DUPLICATES false --ASSUME_SORTED false --DUPLICATE_SCORING_STRATEGY SUM_OF_BASE_QUALITIES --PROGRAM_RECORD_ID MarkDuplicates --PROGRAM_GROUP_NAME MarkDuplicates --READ_NAME_REGEX --OPTICAL_DUPLICATE_PIXEL_DISTANCE 100 --MAX_OPTICAL_DUPLICATE_SET_SIZE 300000 --VERBOSITY INFO --QUIET false --VALIDATION_STRINGENCY STRICT --COMPRESSION_LEVEL 5 --MAX_RECORDS_IN_RAM 500000 --CREATE_INDEX false --CREATE_MD5_FILE false --help false --version false --showHidden false --USE_JDK_DEFLATER false --USE_JDK_INFLATER false", + "## htsjdk.samtools.metrics.StringHeader" + ], + [ + "versions.yml:md5,88717faa02b215b99eef3d05214a6fea" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-18T10:57:47.416956759" + }, + "homo_sapiens [cram]": { + "content": [ + "test.marked.cram", + [ + "## htsjdk.samtools.metrics.StringHeader", + "# MarkDuplicates --INPUT test.paired_end.sorted.cram --OUTPUT test.marked.cram --METRICS_FILE test.marked.MarkDuplicates.metrics.txt --ASSUME_SORT_ORDER queryname --REFERENCE_SEQUENCE genome.fasta --MAX_SEQUENCES_FOR_DISK_READ_ENDS_MAP 50000 --MAX_FILE_HANDLES_FOR_READ_ENDS_MAP 8000 --SORTING_COLLECTION_SIZE_RATIO 0.25 --TAG_DUPLICATE_SET_MEMBERS false --REMOVE_SEQUENCING_DUPLICATES false --TAGGING_POLICY DontTag --CLEAR_DT true --DUPLEX_UMI false --FLOW_MODE false --FLOW_DUP_STRATEGY FLOW_QUALITY_SUM_STRATEGY --FLOW_USE_END_IN_UNPAIRED_READS false --FLOW_USE_UNPAIRED_CLIPPED_END false --FLOW_UNPAIRED_END_UNCERTAINTY 0 --FLOW_UNPAIRED_START_UNCERTAINTY 0 --FLOW_SKIP_FIRST_N_FLOWS 0 --FLOW_Q_IS_KNOWN_END false --FLOW_EFFECTIVE_QUALITY_THRESHOLD 15 --ADD_PG_TAG_TO_READS true --REMOVE_DUPLICATES false --ASSUME_SORTED false --DUPLICATE_SCORING_STRATEGY SUM_OF_BASE_QUALITIES --PROGRAM_RECORD_ID MarkDuplicates --PROGRAM_GROUP_NAME MarkDuplicates --READ_NAME_REGEX --OPTICAL_DUPLICATE_PIXEL_DISTANCE 100 --MAX_OPTICAL_DUPLICATE_SET_SIZE 300000 --VERBOSITY INFO --QUIET false --VALIDATION_STRINGENCY STRICT --COMPRESSION_LEVEL 5 --MAX_RECORDS_IN_RAM 500000 --CREATE_INDEX false --CREATE_MD5_FILE false --help false --version false --showHidden false --USE_JDK_DEFLATER false --USE_JDK_INFLATER false", + "## htsjdk.samtools.metrics.StringHeader" + ], + [ + "versions.yml:md5,88717faa02b215b99eef3d05214a6fea" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-18T10:58:15.143314223" + }, + "homo_sapiens [cram] - stub": { + "content": [ + { + "0": [ + + ], + "1": [ + + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test.marked.cram:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + [ + { + "id": "test", + "single_end": false + }, + "test.marked.MarkDuplicates.metrics.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + "versions.yml:md5,88717faa02b215b99eef3d05214a6fea" + ], + "bai": [ + + ], + "bam": [ + + ], + "cram": [ + [ + { + "id": "test", + "single_end": false + }, + "test.marked.cram:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "metrics": [ + [ + { + "id": "test", + "single_end": false + }, + "test.marked.MarkDuplicates.metrics.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,88717faa02b215b99eef3d05214a6fea" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-18T10:59:03.402916523" + } +} \ No newline at end of file diff --git a/modules/nf-core/picard/markduplicates/tests/nextflow.config b/modules/nf-core/picard/markduplicates/tests/nextflow.config new file mode 100644 index 00000000..02818dd6 --- /dev/null +++ b/modules/nf-core/picard/markduplicates/tests/nextflow.config @@ -0,0 +1,6 @@ +process { + withName: PICARD_MARKDUPLICATES { + ext.prefix = { "${meta.id}.marked" } + ext.args = '--ASSUME_SORT_ORDER queryname' + } +} diff --git a/modules/nf-core/picard/markduplicates/tests/tags.yml b/modules/nf-core/picard/markduplicates/tests/tags.yml new file mode 100644 index 00000000..4f213d62 --- /dev/null +++ b/modules/nf-core/picard/markduplicates/tests/tags.yml @@ -0,0 +1,2 @@ +picard/markduplicates: + - modules/nf-core/picard/markduplicates/** diff --git a/modules/nf-core/preseq/lcextrap/environment.yml b/modules/nf-core/preseq/lcextrap/environment.yml new file mode 100644 index 00000000..6300d3f3 --- /dev/null +++ b/modules/nf-core/preseq/lcextrap/environment.yml @@ -0,0 +1,5 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::preseq=3.2.0 diff --git a/modules/nf-core/preseq/lcextrap/main.nf b/modules/nf-core/preseq/lcextrap/main.nf index 12546f0a..540a5fb2 100644 --- a/modules/nf-core/preseq/lcextrap/main.nf +++ b/modules/nf-core/preseq/lcextrap/main.nf @@ -1,12 +1,12 @@ process PRESEQ_LCEXTRAP { tag "$meta.id" label 'process_single' - label 'error_ignore' + label 'error_retry' - conda "bioconda::preseq=3.1.2" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/preseq:3.1.2--h445547b_2': - 'biocontainers/preseq:3.1.2--h445547b_2' }" + 'https://depot.galaxyproject.org/singularity/preseq:3.2.0--hdcf5f25_6': + 'biocontainers/preseq:3.2.0--hdcf5f25_6' }" input: tuple val(meta), path(bam) @@ -21,6 +21,7 @@ process PRESEQ_LCEXTRAP { script: def args = task.ext.args ?: '' + args = task.attempt > 1 ? args.join(' -defects') : args // Disable testing for defects def prefix = task.ext.prefix ?: "${meta.id}" def paired_end = meta.single_end ? '' : '-pe' """ @@ -37,4 +38,16 @@ process PRESEQ_LCEXTRAP { preseq: \$(echo \$(preseq 2>&1) | sed 's/^.*Version: //; s/Usage:.*\$//') END_VERSIONS """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.lc_extrap.txt + touch ${prefix}.command.log + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + preseq: \$(echo \$(preseq 2>&1) | sed 's/^.*Version: //; s/Usage:.*\$//') + END_VERSIONS + """ } diff --git a/modules/nf-core/preseq/lcextrap/meta.yml b/modules/nf-core/preseq/lcextrap/meta.yml old mode 100755 new mode 100644 index 1391961c..28fb449c --- a/modules/nf-core/preseq/lcextrap/meta.yml +++ b/modules/nf-core/preseq/lcextrap/meta.yml @@ -1,48 +1,58 @@ name: preseq_lcextrap -description: Software for predicting library complexity and genome coverage in high-throughput sequencing +description: Software for predicting library complexity and genome coverage in high-throughput + sequencing keywords: - preseq - library - complexity tools: - preseq: - description: Software for predicting library complexity and genome coverage in high-throughput sequencing + description: Software for predicting library complexity and genome coverage in + high-throughput sequencing homepage: http://smithlabresearch.org/software/preseq/ documentation: http://smithlabresearch.org/wp-content/uploads/manual.pdf tool_dev_url: https://github.com/smithlabcode/preseq - licence: ["GPL"] - + identifier: biotools:preseq input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - bam: - type: file - description: BAM/CRAM/SAM file - pattern: "*.{bam,cram,sam}" - + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: BAM/CRAM/SAM file + pattern: "*.{bam,cram,sam}" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - lc_extrap: - type: file - description: File containing output of Preseq lcextrap - pattern: "*.{lc_extrap.txt}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.lc_extrap.txt": + type: file + description: File containing output of Preseq lcextrap + pattern: "*.{lc_extrap.txt}" - log: - type: file - description: Log file containing stderr produced by Preseq - pattern: "*.{log}" - + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.log": + type: file + description: Log file containing stderr produced by Preseq + pattern: "*.{log}" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@drpatelh" - - "@Emiller88" + - "@edmundmiller" +maintainers: + - "@drpatelh" + - "@edmundmiller" diff --git a/modules/nf-core/preseq/lcextrap/nextflow.config b/modules/nf-core/preseq/lcextrap/nextflow.config new file mode 100644 index 00000000..827ef5ed --- /dev/null +++ b/modules/nf-core/preseq/lcextrap/nextflow.config @@ -0,0 +1,17 @@ +process { + withName: PRESEQ_LCEXTRAP { + ext.args = " -verbose -bam" + publishDir = [ + [ + path: { "${params.outdir}/${params.aligner}/preseq" }, + mode: params.publish_dir_mode, + pattern: "*.txt" + ], + [ + path: { "${params.outdir}/${params.aligner}/preseq/log" }, + mode: params.publish_dir_mode, + pattern: "*.log" + ] + ] + } +} \ No newline at end of file diff --git a/modules/nf-core/preseq/lcextrap/tests/main.nf.test b/modules/nf-core/preseq/lcextrap/tests/main.nf.test new file mode 100644 index 00000000..d1af1f0e --- /dev/null +++ b/modules/nf-core/preseq/lcextrap/tests/main.nf.test @@ -0,0 +1,100 @@ +nextflow_process { + + name "Test Process PRESEQ_LCEXTRAP" + script "../main.nf" + process "PRESEQ_LCEXTRAP" + tag "modules" + tag "modules_nfcore" + tag "preseq" + tag "preseq/lcextrap" + + test("sarscov2 - single_end") { + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:true ], // meta map + [ file(params.modules_testdata_base_path + 'delete_me/preseq/SRR1003759_5M_subset.mr', checkIfExists: true) ] + ]) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(file(process.out.log[0][1]).name).match("single_end - log") }, + { assert snapshot(process.out.lc_extrap).match("single_end - lc_extrap") }, + { assert snapshot(process.out.versions).match("single_end - versions") } + ) + } + } + + test("sarscov2 - single_end - stub") { + + options "-stub" + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:true ], // meta map + [ file(params.modules_testdata_base_path + 'delete_me/preseq/SRR1003759_5M_subset.mr', checkIfExists: true) ] + ]) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("sarscov2 - paired_end") { + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ file(params.modules_testdata_base_path + 'delete_me/preseq/SRR1003759_5M_subset.mr', checkIfExists: true) ] + ]) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(file(process.out.log[0][1]).name).match("paired_end - log") }, + { assert snapshot(process.out.lc_extrap).match("paired_end - lc_extrap") }, + { assert snapshot(process.out.versions).match("paired_end - versions") } + ) + } + } + + test("sarscov2 - paired_end - stub") { + + options "-stub" + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ file(params.modules_testdata_base_path + 'delete_me/preseq/SRR1003759_5M_subset.mr', checkIfExists: true) ] + ]) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } +} \ No newline at end of file diff --git a/modules/nf-core/preseq/lcextrap/tests/main.nf.test.snap b/modules/nf-core/preseq/lcextrap/tests/main.nf.test.snap new file mode 100644 index 00000000..c725d8e8 --- /dev/null +++ b/modules/nf-core/preseq/lcextrap/tests/main.nf.test.snap @@ -0,0 +1,188 @@ +{ + "single_end - lc_extrap": { + "content": [ + [ + [ + { + "id": "test", + "single_end": true + }, + "test.lc_extrap.txt:md5,1fa5cdd601079329618f61660bee00de" + ] + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2023-11-23T17:20:40.735535" + }, + "paired_end - log": { + "content": [ + "test.command.log" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2023-11-23T17:20:51.981746" + }, + "single_end - versions": { + "content": [ + [ + "versions.yml:md5,e099c02ff6a63c1dacc6c79fd3d0223e" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-19T16:55:55.821665692" + }, + "sarscov2 - single_end - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test.lc_extrap.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": true + }, + "test.command.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,e099c02ff6a63c1dacc6c79fd3d0223e" + ], + "lc_extrap": [ + [ + { + "id": "test", + "single_end": true + }, + "test.lc_extrap.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log": [ + [ + { + "id": "test", + "single_end": true + }, + "test.command.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,e099c02ff6a63c1dacc6c79fd3d0223e" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-19T16:56:11.779385911" + }, + "paired_end - versions": { + "content": [ + [ + "versions.yml:md5,e099c02ff6a63c1dacc6c79fd3d0223e" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-19T16:56:31.353046182" + }, + "single_end - log": { + "content": [ + "test.command.log" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2023-11-23T17:20:40.72985" + }, + "paired_end - lc_extrap": { + "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "test.lc_extrap.txt:md5,10e5ea860e87fb6f5dc10f4f20c62040" + ] + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2023-11-23T17:20:51.998533" + }, + "sarscov2 - paired_end - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.lc_extrap.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.command.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,e099c02ff6a63c1dacc6c79fd3d0223e" + ], + "lc_extrap": [ + [ + { + "id": "test", + "single_end": false + }, + "test.lc_extrap.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log": [ + [ + { + "id": "test", + "single_end": false + }, + "test.command.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,e099c02ff6a63c1dacc6c79fd3d0223e" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-19T16:56:45.034808313" + } +} \ No newline at end of file diff --git a/modules/nf-core/preseq/lcextrap/tests/tags.yml b/modules/nf-core/preseq/lcextrap/tests/tags.yml new file mode 100644 index 00000000..b9e25ea7 --- /dev/null +++ b/modules/nf-core/preseq/lcextrap/tests/tags.yml @@ -0,0 +1,2 @@ +preseq/lcextrap: + - modules/nf-core/preseq/lcextrap/** diff --git a/modules/nf-core/qualimap/bamqc/environment.yml b/modules/nf-core/qualimap/bamqc/environment.yml new file mode 100644 index 00000000..4fa5f4e8 --- /dev/null +++ b/modules/nf-core/qualimap/bamqc/environment.yml @@ -0,0 +1,5 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::qualimap=2.3 diff --git a/modules/nf-core/qualimap/bamqc/main.nf b/modules/nf-core/qualimap/bamqc/main.nf index fef7307a..8140e143 100644 --- a/modules/nf-core/qualimap/bamqc/main.nf +++ b/modules/nf-core/qualimap/bamqc/main.nf @@ -2,10 +2,10 @@ process QUALIMAP_BAMQC { tag "$meta.id" label 'process_medium' - conda "bioconda::qualimap=2.2.2d" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/qualimap:2.2.2d--1' : - 'biocontainers/qualimap:2.2.2d--1' }" + 'https://depot.galaxyproject.org/singularity/qualimap:2.3--hdfd78af_0' : + 'biocontainers/qualimap:2.3--hdfd78af_0' }" input: tuple val(meta), path(bam) diff --git a/modules/nf-core/qualimap/bamqc/meta.yml b/modules/nf-core/qualimap/bamqc/meta.yml index 303532eb..8be33c00 100644 --- a/modules/nf-core/qualimap/bamqc/meta.yml +++ b/modules/nf-core/qualimap/bamqc/meta.yml @@ -15,33 +15,38 @@ tools: documentation: http://qualimap.conesalab.org/doc_html/index.html doi: 10.1093/bioinformatics/bts503 licence: ["GPL-2.0-only"] + identifier: biotools:qualimap 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}" - - gff: - type: file - description: Feature file with regions of interest - pattern: "*.{gff,gtf,bed}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: BAM file + pattern: "*.{bam}" + - - gff: + type: file + description: Feature file with regions of interest + pattern: "*.{gff,gtf,bed}" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - results: - type: dir - description: Qualimap results dir - pattern: "*/*" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}: + type: directory + description: Qualimap results dir + pattern: "*/*" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@phue" +maintainers: + - "@phue" diff --git a/modules/nf-core/qualimap/bamqc/nextflow.config b/modules/nf-core/qualimap/bamqc/nextflow.config new file mode 100644 index 00000000..004b4047 --- /dev/null +++ b/modules/nf-core/qualimap/bamqc/nextflow.config @@ -0,0 +1,8 @@ +process { + withName: QUALIMAP_BAMQC { + ext.args = [ + params.genome.toString().startsWith('GRCh') ? '-gd HUMAN' : '', + params.genome.toString().startsWith('GRCm') ? '-gd MOUSE' : '' + ].join(" ").trim() + } +} \ No newline at end of file diff --git a/modules/nf-core/qualimap/bamqc/tests/main.nf.test b/modules/nf-core/qualimap/bamqc/tests/main.nf.test new file mode 100644 index 00000000..eec1a41a --- /dev/null +++ b/modules/nf-core/qualimap/bamqc/tests/main.nf.test @@ -0,0 +1,61 @@ +nextflow_process { + + name "Test Process QUALIMAP_BAMQC" + script "../main.nf" + process "QUALIMAP_BAMQC" + tag "modules" + tag "modules_nfcore" + tag "qualimap" + tag "qualimap/bamqc" + + test("homo_sapiens [bam]") { + when { + process { + """ + gff = [] + + input[0] = Channel.of([ + [ 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) + ]) + input[1] = gff + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot( + file("${process.out.results[0][1]}/qualimapReport.html").name, + path("${process.out.results[0][1]}/genome_results.txt"), + process.out.versions) + .match() } + ) + } + } + + test("homo_sapiens [bam] - stub") { + options "-stub" + when { + process { + """ + gff = [] + + input[0] = Channel.of([ + [ 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) + ]) + input[1] = gff + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } +} \ No newline at end of file diff --git a/modules/nf-core/qualimap/bamqc/tests/main.nf.test.snap b/modules/nf-core/qualimap/bamqc/tests/main.nf.test.snap new file mode 100644 index 00000000..fb6e23e4 --- /dev/null +++ b/modules/nf-core/qualimap/bamqc/tests/main.nf.test.snap @@ -0,0 +1,165 @@ +{ + "homo_sapiens [bam] - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + [ + [ + "agogo.css:md5,d41d8cd98f00b204e9800998ecf8427e", + "ajax-loader.gif:md5,d41d8cd98f00b204e9800998ecf8427e", + "basic.css:md5,d41d8cd98f00b204e9800998ecf8427e", + "bgfooter.png:md5,d41d8cd98f00b204e9800998ecf8427e", + "bgtop.png:md5,d41d8cd98f00b204e9800998ecf8427e", + "comment-bright.png:md5,d41d8cd98f00b204e9800998ecf8427e", + "comment-close.png:md5,d41d8cd98f00b204e9800998ecf8427e", + "comment.png:md5,d41d8cd98f00b204e9800998ecf8427e", + "doctools.js:md5,d41d8cd98f00b204e9800998ecf8427e", + "down-pressed.png:md5,d41d8cd98f00b204e9800998ecf8427e", + "down.png:md5,d41d8cd98f00b204e9800998ecf8427e", + "file.png:md5,d41d8cd98f00b204e9800998ecf8427e", + "jquery.js:md5,d41d8cd98f00b204e9800998ecf8427e", + "minus.png:md5,d41d8cd98f00b204e9800998ecf8427e", + "plus.png:md5,d41d8cd98f00b204e9800998ecf8427e", + "pygments.css:md5,d41d8cd98f00b204e9800998ecf8427e", + "qualimap_logo_small.png:md5,d41d8cd98f00b204e9800998ecf8427e", + "report.css:md5,d41d8cd98f00b204e9800998ecf8427e", + "searchtools.js:md5,d41d8cd98f00b204e9800998ecf8427e", + "underscore.js:md5,d41d8cd98f00b204e9800998ecf8427e", + "up-pressed.png:md5,d41d8cd98f00b204e9800998ecf8427e", + "up.png:md5,d41d8cd98f00b204e9800998ecf8427e", + "websupport.js:md5,d41d8cd98f00b204e9800998ecf8427e" + ], + "genome_results.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + [ + "genome_coverage_0to50_histogram.png:md5,d41d8cd98f00b204e9800998ecf8427e", + "genome_coverage_across_reference.png:md5,d41d8cd98f00b204e9800998ecf8427e", + "genome_coverage_histogram.png:md5,d41d8cd98f00b204e9800998ecf8427e", + "genome_coverage_quotes.png:md5,d41d8cd98f00b204e9800998ecf8427e", + "genome_gc_content_per_window.png:md5,d41d8cd98f00b204e9800998ecf8427e", + "genome_homopolymer_indels.png:md5,d41d8cd98f00b204e9800998ecf8427e", + "genome_insert_size_across_reference.png:md5,d41d8cd98f00b204e9800998ecf8427e", + "genome_insert_size_histogram.png:md5,d41d8cd98f00b204e9800998ecf8427e", + "genome_mapping_quality_across_reference.png:md5,d41d8cd98f00b204e9800998ecf8427e", + "genome_mapping_quality_histogram.png:md5,d41d8cd98f00b204e9800998ecf8427e", + "genome_reads_clipping_profile.png:md5,d41d8cd98f00b204e9800998ecf8427e", + "genome_reads_content_per_read_position.png:md5,d41d8cd98f00b204e9800998ecf8427e", + "genome_uniq_read_starts_histogram.png:md5,d41d8cd98f00b204e9800998ecf8427e" + ], + "qualimapReport.html:md5,d41d8cd98f00b204e9800998ecf8427e", + [ + "coverage_across_reference.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "coverage_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "duplication_rate_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "genome_fraction_coverage.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "homopolymer_indels.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "insert_size_across_reference.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "insert_size_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "mapped_reads_clipping_profile.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "mapped_reads_gc-content_distribution.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "mapped_reads_nucleotide_content.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "mapping_quality_across_reference.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "mapping_quality_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ] + ], + "1": [ + "versions.yml:md5,9024d7d0a189d8be1485249ae591b907" + ], + "results": [ + [ + { + "id": "test", + "single_end": false + }, + [ + [ + "agogo.css:md5,d41d8cd98f00b204e9800998ecf8427e", + "ajax-loader.gif:md5,d41d8cd98f00b204e9800998ecf8427e", + "basic.css:md5,d41d8cd98f00b204e9800998ecf8427e", + "bgfooter.png:md5,d41d8cd98f00b204e9800998ecf8427e", + "bgtop.png:md5,d41d8cd98f00b204e9800998ecf8427e", + "comment-bright.png:md5,d41d8cd98f00b204e9800998ecf8427e", + "comment-close.png:md5,d41d8cd98f00b204e9800998ecf8427e", + "comment.png:md5,d41d8cd98f00b204e9800998ecf8427e", + "doctools.js:md5,d41d8cd98f00b204e9800998ecf8427e", + "down-pressed.png:md5,d41d8cd98f00b204e9800998ecf8427e", + "down.png:md5,d41d8cd98f00b204e9800998ecf8427e", + "file.png:md5,d41d8cd98f00b204e9800998ecf8427e", + "jquery.js:md5,d41d8cd98f00b204e9800998ecf8427e", + "minus.png:md5,d41d8cd98f00b204e9800998ecf8427e", + "plus.png:md5,d41d8cd98f00b204e9800998ecf8427e", + "pygments.css:md5,d41d8cd98f00b204e9800998ecf8427e", + "qualimap_logo_small.png:md5,d41d8cd98f00b204e9800998ecf8427e", + "report.css:md5,d41d8cd98f00b204e9800998ecf8427e", + "searchtools.js:md5,d41d8cd98f00b204e9800998ecf8427e", + "underscore.js:md5,d41d8cd98f00b204e9800998ecf8427e", + "up-pressed.png:md5,d41d8cd98f00b204e9800998ecf8427e", + "up.png:md5,d41d8cd98f00b204e9800998ecf8427e", + "websupport.js:md5,d41d8cd98f00b204e9800998ecf8427e" + ], + "genome_results.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + [ + "genome_coverage_0to50_histogram.png:md5,d41d8cd98f00b204e9800998ecf8427e", + "genome_coverage_across_reference.png:md5,d41d8cd98f00b204e9800998ecf8427e", + "genome_coverage_histogram.png:md5,d41d8cd98f00b204e9800998ecf8427e", + "genome_coverage_quotes.png:md5,d41d8cd98f00b204e9800998ecf8427e", + "genome_gc_content_per_window.png:md5,d41d8cd98f00b204e9800998ecf8427e", + "genome_homopolymer_indels.png:md5,d41d8cd98f00b204e9800998ecf8427e", + "genome_insert_size_across_reference.png:md5,d41d8cd98f00b204e9800998ecf8427e", + "genome_insert_size_histogram.png:md5,d41d8cd98f00b204e9800998ecf8427e", + "genome_mapping_quality_across_reference.png:md5,d41d8cd98f00b204e9800998ecf8427e", + "genome_mapping_quality_histogram.png:md5,d41d8cd98f00b204e9800998ecf8427e", + "genome_reads_clipping_profile.png:md5,d41d8cd98f00b204e9800998ecf8427e", + "genome_reads_content_per_read_position.png:md5,d41d8cd98f00b204e9800998ecf8427e", + "genome_uniq_read_starts_histogram.png:md5,d41d8cd98f00b204e9800998ecf8427e" + ], + "qualimapReport.html:md5,d41d8cd98f00b204e9800998ecf8427e", + [ + "coverage_across_reference.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "coverage_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "duplication_rate_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "genome_fraction_coverage.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "homopolymer_indels.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "insert_size_across_reference.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "insert_size_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "mapped_reads_clipping_profile.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "mapped_reads_gc-content_distribution.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "mapped_reads_nucleotide_content.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "mapping_quality_across_reference.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "mapping_quality_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ] + ], + "versions": [ + "versions.yml:md5,9024d7d0a189d8be1485249ae591b907" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T12:27:15.04081" + }, + "homo_sapiens [bam]": { + "content": [ + "qualimapReport.html", + "genome_results.txt:md5,45103d63ba82df2b905eb04819c32dd3", + [ + "versions.yml:md5,9024d7d0a189d8be1485249ae591b907" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T11:21:02.541915" + } +} \ No newline at end of file diff --git a/modules/nf-core/qualimap/bamqc/tests/tags.yml b/modules/nf-core/qualimap/bamqc/tests/tags.yml new file mode 100644 index 00000000..b2b5eb6f --- /dev/null +++ b/modules/nf-core/qualimap/bamqc/tests/tags.yml @@ -0,0 +1,2 @@ +qualimap/bamqc: + - modules/nf-core/qualimap/bamqc/** diff --git a/modules/nf-core/qualimap/bamqccram/environment.yml b/modules/nf-core/qualimap/bamqccram/environment.yml new file mode 100644 index 00000000..609b5f74 --- /dev/null +++ b/modules/nf-core/qualimap/bamqccram/environment.yml @@ -0,0 +1,6 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::qualimap=2.2.2d + - bioconda::samtools=1.16.1 diff --git a/modules/nf-core/qualimap/bamqccram/main.nf b/modules/nf-core/qualimap/bamqccram/main.nf index 327d8557..81e1a485 100644 --- a/modules/nf-core/qualimap/bamqccram/main.nf +++ b/modules/nf-core/qualimap/bamqccram/main.nf @@ -2,7 +2,7 @@ process QUALIMAP_BAMQCCRAM { tag "$meta.id" label 'process_medium' - conda "bioconda::qualimap=2.2.2d bioconda::samtools=1.16.1" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/mulled-v2-d3934ca6bb4e61334891ffa2e9a4c87a530e3188:00d3c18496ddf07ea580fd00d1dd203cf31ab630-0' : 'biocontainers/mulled-v2-d3934ca6bb4e61334891ffa2e9a4c87a530e3188:00d3c18496ddf07ea580fd00d1dd203cf31ab630-0' }" @@ -57,4 +57,16 @@ process QUALIMAP_BAMQCCRAM { samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') END_VERSIONS """ + + stub: + prefix = task.ext.prefix ?: "${meta.id}" + """ + mkdir ${prefix} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + qualimap: \$(echo \$(qualimap 2>&1) | sed 's/^.*QualiMap v.//; s/Built.*\$//') + samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') + END_VERSIONS + """ } diff --git a/modules/nf-core/qualimap/bamqccram/meta.yml b/modules/nf-core/qualimap/bamqccram/meta.yml index ea6c4d92..4b7225a5 100644 --- a/modules/nf-core/qualimap/bamqccram/meta.yml +++ b/modules/nf-core/qualimap/bamqccram/meta.yml @@ -15,37 +15,50 @@ tools: documentation: http://qualimap.conesalab.org/doc_html/index.html doi: 10.1093/bioinformatics/bts503 licence: ["GPL-2.0-only"] + identifier: biotools:qualimap input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - bacramm: - type: file - description: BAM file - pattern: "*.{bam}" - - gff: - type: file - description: Feature file with regions of interest - pattern: "*.{gff,gtf,bed}" - - fasta: - type: file - description: Reference file of cram file - pattern: "*.{fasta,fa,fna}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - cram: + type: file + description: Input cram file + pattern: "*.{cram}" + - crai: + type: file + description: Index file for cram file + pattern: "*.{crai}" + - - gff: + type: file + description: Feature file with regions of interest + pattern: "*.{gff,gtf,bed}" + - - fasta: + type: file + description: Reference file of cram file + pattern: "*.{fasta,fa,fna}" + - - fasta_fai: + type: file + description: Index file for reference file + pattern: "*.{fai}" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - results: - type: directory - description: Qualimap results dir - pattern: "*/*" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}: + type: directory + description: Qualimap results dir + pattern: "*/*" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@FriederikeHanssen" +maintainers: + - "@FriederikeHanssen" diff --git a/modules/nf-core/qualimap/bamqccram/tests/main.nf.test b/modules/nf-core/qualimap/bamqccram/tests/main.nf.test new file mode 100644 index 00000000..da2f300d --- /dev/null +++ b/modules/nf-core/qualimap/bamqccram/tests/main.nf.test @@ -0,0 +1,69 @@ +nextflow_process { + + name "Test Process QUALIMAP_BAMQCCRAM" + script "../main.nf" + process "QUALIMAP_BAMQCCRAM" + tag "modules" + tag "modules_nfcore" + tag "qualimap" + tag "qualimap/bamqccram" + + test("homo_sapiens [cram]") { + when { + process { + """ + gff = [] + + 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.sorted.cram', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram.crai', checkIfExists: true) + ]) + input[1] = gff + input[2] = Channel.of(file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true)) + input[3] = Channel.of(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.results[0][1]}/qualimapReport.html").name, + path("${process.out.results[0][1]}/genome_results.txt"), + process.out.versions) + .match() } + ) + } + } + + test("homo_sapiens [cram] - stub") { + + options "-stub" + + when { + process { + """ + gff = [] + + 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.sorted.cram', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram.crai', checkIfExists: true) + ]) + input[1] = gff + input[2] = Channel.of(file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true)) + input[3] = Channel.of(file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true)) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } +} diff --git a/modules/nf-core/qualimap/bamqccram/tests/main.nf.test.snap b/modules/nf-core/qualimap/bamqccram/tests/main.nf.test.snap new file mode 100644 index 00000000..20b6c4b1 --- /dev/null +++ b/modules/nf-core/qualimap/bamqccram/tests/main.nf.test.snap @@ -0,0 +1,55 @@ +{ + "homo_sapiens [cram]": { + "content": [ + "qualimapReport.html", + "genome_results.txt:md5,61d8b36507652fd7d7db9583de708161", + [ + "versions.yml:md5,9aedcf514cb222dc019feb8b25fc4bcb" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T13:45:35.586664" + }, + "homo_sapiens [cram] - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + [ + + ] + ] + ], + "1": [ + "versions.yml:md5,9aedcf514cb222dc019feb8b25fc4bcb" + ], + "results": [ + [ + { + "id": "test", + "single_end": false + }, + [ + + ] + ] + ], + "versions": [ + "versions.yml:md5,9aedcf514cb222dc019feb8b25fc4bcb" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T14:23:41.250873" + } +} \ No newline at end of file diff --git a/modules/nf-core/qualimap/bamqccram/tests/tags.yml b/modules/nf-core/qualimap/bamqccram/tests/tags.yml new file mode 100644 index 00000000..69b06e26 --- /dev/null +++ b/modules/nf-core/qualimap/bamqccram/tests/tags.yml @@ -0,0 +1,2 @@ +qualimap/bamqccram: + - modules/nf-core/qualimap/bamqccram/** diff --git a/modules/nf-core/samtools/faidx/environment.yml b/modules/nf-core/samtools/faidx/environment.yml new file mode 100644 index 00000000..62054fc9 --- /dev/null +++ b/modules/nf-core/samtools/faidx/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/faidx/main.nf b/modules/nf-core/samtools/faidx/main.nf index 4dd0e5b0..28c0a81c 100644 --- a/modules/nf-core/samtools/faidx/main.nf +++ b/modules/nf-core/samtools/faidx/main.nf @@ -2,18 +2,20 @@ process SAMTOOLS_FAIDX { tag "$fasta" label 'process_single' - conda "bioconda::samtools=1.17" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/samtools:1.17--h00cdaf9_0' : - 'biocontainers/samtools:1.17--h00cdaf9_0' }" + 'https://depot.galaxyproject.org/singularity/samtools:1.21--h50ea8bc_0' : + 'biocontainers/samtools:1.21--h50ea8bc_0' }" input: tuple val(meta), path(fasta) + tuple val(meta2), path(fai) output: - tuple val(meta), path ("*.fai"), emit: fai - tuple val(meta), path ("*.gzi"), emit: gzi, optional: true - path "versions.yml" , emit: versions + tuple val(meta), path ("*.{fa,fasta}") , emit: fa , optional: true + tuple val(meta), path ("*.fai") , emit: fai, optional: true + tuple val(meta), path ("*.gzi") , emit: gzi, optional: true + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when @@ -23,8 +25,8 @@ process SAMTOOLS_FAIDX { """ samtools \\ faidx \\ - $args \\ - $fasta + $fasta \\ + $args cat <<-END_VERSIONS > versions.yml "${task.process}": @@ -33,8 +35,12 @@ process SAMTOOLS_FAIDX { """ stub: + def match = (task.ext.args =~ /-o(?:utput)?\s(.*)\s?/).findAll() + def fastacmd = match[0] ? "touch ${match[0][1]}" : '' """ + ${fastacmd} touch ${fasta}.fai + cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/samtools/faidx/meta.yml b/modules/nf-core/samtools/faidx/meta.yml index fe2fe9a1..6721b2cb 100644 --- a/modules/nf-core/samtools/faidx/meta.yml +++ b/modules/nf-core/samtools/faidx/meta.yml @@ -3,6 +3,7 @@ description: Index FASTA file keywords: - index - fasta + - faidx tools: - samtools: description: | @@ -13,35 +14,67 @@ tools: 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 ] - - fasta: - type: file - description: FASTA file - pattern: "*.{fa,fasta}" + - - meta: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'test' ] + - fasta: + type: file + description: FASTA file + pattern: "*.{fa,fasta}" + - - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'test' ] + - fai: + type: file + description: FASTA index file + pattern: "*.{fai}" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] + - fa: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.{fa,fasta}": + type: file + description: FASTA file + pattern: "*.{fa}" - fai: - type: file - description: FASTA index file - pattern: "*.{fai}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.fai": + type: file + description: FASTA index file + pattern: "*.{fai}" - gzi: - type: file - description: Optional gzip index file for compressed inputs - pattern: "*.gzi" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.gzi": + type: file + description: Optional gzip index file for compressed inputs + pattern: "*.gzi" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@drpatelh" - "@ewels" - "@phue" +maintainers: + - "@drpatelh" + - "@ewels" + - "@phue" diff --git a/modules/nf-core/samtools/faidx/nextflow.config b/modules/nf-core/samtools/faidx/nextflow.config new file mode 100644 index 00000000..8b2368a6 --- /dev/null +++ b/modules/nf-core/samtools/faidx/nextflow.config @@ -0,0 +1,11 @@ +process { + withName: SAMTOOLS_FAIDX { + ext.args = "" + publishDir = [ + path: { "${params.outdir}/${params.aligner}/reference_genome" }, + mode: params.publish_dir_mode, + enabled: params.save_reference, + pattern: "*.fai" + ] + } +} \ No newline at end of file diff --git a/modules/nf-core/samtools/faidx/tests/main.nf.test b/modules/nf-core/samtools/faidx/tests/main.nf.test new file mode 100644 index 00000000..17244ef2 --- /dev/null +++ b/modules/nf-core/samtools/faidx/tests/main.nf.test @@ -0,0 +1,122 @@ +nextflow_process { + + name "Test Process SAMTOOLS_FAIDX" + script "../main.nf" + process "SAMTOOLS_FAIDX" + + tag "modules" + tag "modules_nfcore" + tag "samtools" + tag "samtools/faidx" + + test("test_samtools_faidx") { + + when { + process { + """ + input[0] = [ [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) ] + + input[1] = [[],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("test_samtools_faidx_bgzip") { + + when { + process { + """ + input[0] = [ [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.gz', checkIfExists: true)] + + input[1] = [[],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("test_samtools_faidx_fasta") { + + config "./nextflow.config" + + when { + process { + """ + input[0] = [ [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) ] + + input[1] = [ [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true) ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("test_samtools_faidx_stub_fasta") { + + config "./nextflow2.config" + + when { + process { + """ + input[0] = [ [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) ] + + input[1] = [ [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true) ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("test_samtools_faidx_stub_fai") { + + when { + process { + """ + input[0] = [ [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) ] + + input[1] = [[],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } +} \ No newline at end of file diff --git a/modules/nf-core/samtools/faidx/tests/main.nf.test.snap b/modules/nf-core/samtools/faidx/tests/main.nf.test.snap new file mode 100644 index 00000000..1bbb3ec2 --- /dev/null +++ b/modules/nf-core/samtools/faidx/tests/main.nf.test.snap @@ -0,0 +1,249 @@ +{ + "test_samtools_faidx": { + "content": [ + { + "0": [ + + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "genome.fasta.fai:md5,9da2a56e2853dc8c0b86a9e7229c9fe5" + ] + ], + "2": [ + + ], + "3": [ + "versions.yml:md5,6bbe80a2e14bd61202ca63e12d66027f" + ], + "fa": [ + + ], + "fai": [ + [ + { + "id": "test", + "single_end": false + }, + "genome.fasta.fai:md5,9da2a56e2853dc8c0b86a9e7229c9fe5" + ] + ], + "gzi": [ + + ], + "versions": [ + "versions.yml:md5,6bbe80a2e14bd61202ca63e12d66027f" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-16T07:57:47.450887871" + }, + "test_samtools_faidx_bgzip": { + "content": [ + { + "0": [ + + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "genome.fasta.gz.fai:md5,9da2a56e2853dc8c0b86a9e7229c9fe5" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "genome.fasta.gz.gzi:md5,7dea362b3fac8e00956a4952a3d4f474" + ] + ], + "3": [ + "versions.yml:md5,6bbe80a2e14bd61202ca63e12d66027f" + ], + "fa": [ + + ], + "fai": [ + [ + { + "id": "test", + "single_end": false + }, + "genome.fasta.gz.fai:md5,9da2a56e2853dc8c0b86a9e7229c9fe5" + ] + ], + "gzi": [ + [ + { + "id": "test", + "single_end": false + }, + "genome.fasta.gz.gzi:md5,7dea362b3fac8e00956a4952a3d4f474" + ] + ], + "versions": [ + "versions.yml:md5,6bbe80a2e14bd61202ca63e12d66027f" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-16T07:58:04.804905659" + }, + "test_samtools_faidx_fasta": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "extract.fa:md5,6a0774a0ad937ba0bfd2ac7457d90f36" + ] + ], + "1": [ + + ], + "2": [ + + ], + "3": [ + "versions.yml:md5,6bbe80a2e14bd61202ca63e12d66027f" + ], + "fa": [ + [ + { + "id": "test", + "single_end": false + }, + "extract.fa:md5,6a0774a0ad937ba0bfd2ac7457d90f36" + ] + ], + "fai": [ + + ], + "gzi": [ + + ], + "versions": [ + "versions.yml:md5,6bbe80a2e14bd61202ca63e12d66027f" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-16T07:58:23.831268154" + }, + "test_samtools_faidx_stub_fasta": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "extract.fa:md5,9da2a56e2853dc8c0b86a9e7229c9fe5" + ] + ], + "1": [ + + ], + "2": [ + + ], + "3": [ + "versions.yml:md5,6bbe80a2e14bd61202ca63e12d66027f" + ], + "fa": [ + [ + { + "id": "test", + "single_end": false + }, + "extract.fa:md5,9da2a56e2853dc8c0b86a9e7229c9fe5" + ] + ], + "fai": [ + + ], + "gzi": [ + + ], + "versions": [ + "versions.yml:md5,6bbe80a2e14bd61202ca63e12d66027f" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-16T07:58:35.600243706" + }, + "test_samtools_faidx_stub_fai": { + "content": [ + { + "0": [ + + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "genome.fasta.fai:md5,9da2a56e2853dc8c0b86a9e7229c9fe5" + ] + ], + "2": [ + + ], + "3": [ + "versions.yml:md5,6bbe80a2e14bd61202ca63e12d66027f" + ], + "fa": [ + + ], + "fai": [ + [ + { + "id": "test", + "single_end": false + }, + "genome.fasta.fai:md5,9da2a56e2853dc8c0b86a9e7229c9fe5" + ] + ], + "gzi": [ + + ], + "versions": [ + "versions.yml:md5,6bbe80a2e14bd61202ca63e12d66027f" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-16T07:58:54.705460167" + } +} \ No newline at end of file diff --git a/modules/nf-core/samtools/faidx/tests/nextflow.config b/modules/nf-core/samtools/faidx/tests/nextflow.config new file mode 100644 index 00000000..f76a3ba0 --- /dev/null +++ b/modules/nf-core/samtools/faidx/tests/nextflow.config @@ -0,0 +1,7 @@ +process { + + withName: SAMTOOLS_FAIDX { + ext.args = 'MT192765.1 -o extract.fa' + } + +} diff --git a/modules/nf-core/samtools/faidx/tests/nextflow2.config b/modules/nf-core/samtools/faidx/tests/nextflow2.config new file mode 100644 index 00000000..33ebbd5d --- /dev/null +++ b/modules/nf-core/samtools/faidx/tests/nextflow2.config @@ -0,0 +1,6 @@ +process { + + withName: SAMTOOLS_FAIDX { + ext.args = '-o extract.fa' + } +} diff --git a/modules/nf-core/samtools/faidx/tests/tags.yml b/modules/nf-core/samtools/faidx/tests/tags.yml new file mode 100644 index 00000000..e4a83948 --- /dev/null +++ b/modules/nf-core/samtools/faidx/tests/tags.yml @@ -0,0 +1,2 @@ +samtools/faidx: + - modules/nf-core/samtools/faidx/** diff --git a/modules/nf-core/samtools/flagstat/environment.yml b/modules/nf-core/samtools/flagstat/environment.yml new file mode 100644 index 00000000..62054fc9 --- /dev/null +++ b/modules/nf-core/samtools/flagstat/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/flagstat/main.nf b/modules/nf-core/samtools/flagstat/main.nf index b75707ec..4a499727 100644 --- a/modules/nf-core/samtools/flagstat/main.nf +++ b/modules/nf-core/samtools/flagstat/main.nf @@ -2,10 +2,10 @@ process SAMTOOLS_FLAGSTAT { tag "$meta.id" label 'process_single' - conda "bioconda::samtools=1.17" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/samtools:1.17--h00cdaf9_0' : - 'biocontainers/samtools:1.17--h00cdaf9_0' }" + 'https://depot.galaxyproject.org/singularity/samtools:1.21--h50ea8bc_0' : + 'biocontainers/samtools:1.21--h50ea8bc_0' }" input: tuple val(meta), path(bam), path(bai) diff --git a/modules/nf-core/samtools/flagstat/meta.yml b/modules/nf-core/samtools/flagstat/meta.yml index 954225df..cdc4c254 100644 --- a/modules/nf-core/samtools/flagstat/meta.yml +++ b/modules/nf-core/samtools/flagstat/meta.yml @@ -1,5 +1,6 @@ name: samtools_flagstat -description: Counts the number of alignments in a BAM/CRAM/SAM file for each FLAG type +description: Counts the number of alignments in a BAM/CRAM/SAM file for each FLAG + type keywords: - stats - mapping @@ -17,33 +18,38 @@ tools: 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 ] - - bam: - type: file - description: BAM/CRAM/SAM file - pattern: "*.{bam,cram,sam}" - - bai: - type: file - description: Index for BAM/CRAM/SAM file - pattern: "*.{bai,crai,sai}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: BAM/CRAM/SAM file + pattern: "*.{bam,cram,sam}" + - bai: + type: file + description: Index for BAM/CRAM/SAM file + pattern: "*.{bai,crai,sai}" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - flagstat: - type: file - description: File containing samtools flagstat output - pattern: "*.{flagstat}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.flagstat": + type: file + description: File containing samtools flagstat output + pattern: "*.{flagstat}" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@drpatelh" +maintainers: + - "@drpatelh" diff --git a/modules/nf-core/samtools/flagstat/nextflow.config b/modules/nf-core/samtools/flagstat/nextflow.config new file mode 100644 index 00000000..2cf4ca87 --- /dev/null +++ b/modules/nf-core/samtools/flagstat/nextflow.config @@ -0,0 +1,11 @@ +process { + withName: SAMTOOLS_FLAGSTAT { + publishDir = [ + [ + path: { "${params.outdir}/${params.aligner}/alignments/samtools_stats/" }, + mode: params.publish_dir_mode, + pattern: "*.flagstat" + ] + ] + } +} \ No newline at end of file diff --git a/modules/nf-core/samtools/flagstat/tests/main.nf.test b/modules/nf-core/samtools/flagstat/tests/main.nf.test new file mode 100644 index 00000000..3b648a37 --- /dev/null +++ b/modules/nf-core/samtools/flagstat/tests/main.nf.test @@ -0,0 +1,56 @@ +nextflow_process { + + name "Test Process SAMTOOLS_FLAGSTAT" + script "../main.nf" + process "SAMTOOLS_FLAGSTAT" + tag "modules" + tag "modules_nfcore" + tag "samtools" + tag "samtools/flagstat" + + 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) + ]) + """ + } + } + + 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) + ]) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } +} diff --git a/modules/nf-core/samtools/flagstat/tests/main.nf.test.snap b/modules/nf-core/samtools/flagstat/tests/main.nf.test.snap new file mode 100644 index 00000000..04c3852b --- /dev/null +++ b/modules/nf-core/samtools/flagstat/tests/main.nf.test.snap @@ -0,0 +1,72 @@ +{ + "BAM - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.flagstat:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + "versions.yml:md5,108a155f2d4a99f50bf3176904208d27" + ], + "flagstat": [ + [ + { + "id": "test", + "single_end": false + }, + "test.flagstat:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,108a155f2d4a99f50bf3176904208d27" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-16T08:02:58.866491759" + }, + "BAM": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.flagstat:md5,4f7ffd1e6a5e85524d443209ac97d783" + ] + ], + "1": [ + "versions.yml:md5,108a155f2d4a99f50bf3176904208d27" + ], + "flagstat": [ + [ + { + "id": "test", + "single_end": false + }, + "test.flagstat:md5,4f7ffd1e6a5e85524d443209ac97d783" + ] + ], + "versions": [ + "versions.yml:md5,108a155f2d4a99f50bf3176904208d27" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-16T08:02:47.383332837" + } +} \ No newline at end of file diff --git a/modules/nf-core/samtools/flagstat/tests/tags.yml b/modules/nf-core/samtools/flagstat/tests/tags.yml new file mode 100644 index 00000000..2d2b7255 --- /dev/null +++ b/modules/nf-core/samtools/flagstat/tests/tags.yml @@ -0,0 +1,2 @@ +samtools/flagstat: + - modules/nf-core/samtools/flagstat/** diff --git a/modules/nf-core/samtools/index/environment.yml b/modules/nf-core/samtools/index/environment.yml new file mode 100644 index 00000000..62054fc9 --- /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 index 0b20aa4b..31175610 100644 --- a/modules/nf-core/samtools/index/main.nf +++ b/modules/nf-core/samtools/index/main.nf @@ -2,10 +2,10 @@ process SAMTOOLS_INDEX { tag "$meta.id" label 'process_low' - conda "bioconda::samtools=1.17" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/samtools:1.17--h00cdaf9_0' : - 'biocontainers/samtools:1.17--h00cdaf9_0' }" + 'https://depot.galaxyproject.org/singularity/samtools:1.21--h50ea8bc_0' : + 'biocontainers/samtools:1.21--h50ea8bc_0' }" input: tuple val(meta), path(input) @@ -35,10 +35,11 @@ process SAMTOOLS_INDEX { """ stub: + def args = task.ext.args ?: '' + def extension = file(input).getExtension() == 'cram' ? + "crai" : args.contains("-c") ? "csi" : "bai" """ - touch ${input}.bai - touch ${input}.crai - touch ${input}.csi + touch ${input}.${extension} cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/samtools/index/meta.yml b/modules/nf-core/samtools/index/meta.yml index 8bd2fa6f..db8df0d5 100644 --- a/modules/nf-core/samtools/index/meta.yml +++ b/modules/nf-core/samtools/index/meta.yml @@ -15,39 +15,57 @@ tools: 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 ] - - bam: - type: file - description: BAM/CRAM/SAM file - pattern: "*.{bam,cram,sam}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - input: + type: file + description: input file output: - - 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}" - - crai: - type: file - description: BAM/CRAM/SAM index file - pattern: "*.{bai,crai,sai}" + - 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: - type: file - description: CSI index file - pattern: "*.{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: - type: file - description: File containing software versions - pattern: "versions.yml" + - 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 00000000..0ed260ef --- /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 00000000..ca34fb5c --- /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 00000000..72d65e81 --- /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 00000000..e0f58a7a --- /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/sort/environment.yml b/modules/nf-core/samtools/sort/environment.yml new file mode 100644 index 00000000..62054fc9 --- /dev/null +++ b/modules/nf-core/samtools/sort/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/sort/main.nf b/modules/nf-core/samtools/sort/main.nf index 2b7753fd..caf3c61a 100644 --- a/modules/nf-core/samtools/sort/main.nf +++ b/modules/nf-core/samtools/sort/main.nf @@ -2,18 +2,21 @@ process SAMTOOLS_SORT { tag "$meta.id" label 'process_medium' - conda "bioconda::samtools=1.17" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/samtools:1.17--h00cdaf9_0' : - 'biocontainers/samtools:1.17--h00cdaf9_0' }" + 'https://depot.galaxyproject.org/singularity/samtools:1.21--h50ea8bc_0' : + 'biocontainers/samtools:1.21--h50ea8bc_0' }" input: - tuple val(meta), path(bam) + tuple val(meta) , path(bam) + tuple val(meta2), path(fasta) output: - tuple val(meta), path("*.bam"), emit: bam - tuple val(meta), path("*.csi"), emit: csi, optional: true - path "versions.yml" , emit: versions + 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 @@ -21,14 +24,23 @@ process SAMTOOLS_SORT { script: def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" + def extension = args.contains("--output-fmt sam") ? "sam" : + args.contains("--output-fmt cram") ? "cram" : + "bam" + def reference = fasta ? "--reference ${fasta}" : "" if ("$bam" == "${prefix}.bam") error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" + """ + samtools cat \\ + ${bam} \\ + | \\ samtools sort \\ $args \\ - -@ $task.cpus \\ - -o ${prefix}.bam \\ - -T $prefix \\ - $bam + -T ${prefix} \\ + --threads $task.cpus \\ + ${reference} \\ + -o ${prefix}.${extension} \\ + - cat <<-END_VERSIONS > versions.yml "${task.process}": @@ -37,9 +49,20 @@ process SAMTOOLS_SORT { """ stub: + def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" + def extension = args.contains("--output-fmt sam") ? "sam" : + args.contains("--output-fmt cram") ? "cram" : + "bam" """ - touch ${prefix}.bam + touch ${prefix}.${extension} + if [ "${extension}" == "bam" ]; + then + touch ${prefix}.${extension}.csi + elif [ "${extension}" == "cram" ]; + then + touch ${prefix}.${extension}.crai + fi cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/samtools/sort/meta.yml b/modules/nf-core/samtools/sort/meta.yml index 07328431..a9dbec5a 100644 --- a/modules/nf-core/samtools/sort/meta.yml +++ b/modules/nf-core/samtools/sort/meta.yml @@ -15,34 +15,78 @@ tools: 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 ] - - bam: - type: file - description: BAM/CRAM/SAM file - pattern: "*.{bam,cram,sam}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: BAM/CRAM/SAM file(s) + pattern: "*.{bam,cram,sam}" + - - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - fasta: + type: file + description: Reference genome FASTA file + pattern: "*.{fa,fasta,fna}" + optional: true output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - bam: - type: file - description: Sorted BAM/CRAM/SAM file - pattern: "*.{bam,cram,sam}" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - 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}" + - cram: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.cram": + type: file + description: Sorted CRAM file + pattern: "*.{cram}" + - 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" - csi: - type: file - description: BAM index file (optional) - pattern: "*.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" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@drpatelh" - "@ewels" + - "@matthdsm" +maintainers: + - "@drpatelh" + - "@ewels" + - "@matthdsm" diff --git a/modules/nf-core/samtools/sort/nextflow.config b/modules/nf-core/samtools/sort/nextflow.config new file mode 100644 index 00000000..1918458c --- /dev/null +++ b/modules/nf-core/samtools/sort/nextflow.config @@ -0,0 +1,19 @@ +process { + withName: SAMTOOLS_SORT { + ext.prefix = { "${meta.id}.sorted" } + publishDir = [ + [ + path: { "${params.outdir}/${params.aligner}/deduplicated/" }, + mode: params.publish_dir_mode, + pattern: "*markdup*.bam", + enabled: params.save_align_intermeds + ], + [ + path: { "${params.outdir}/${params.aligner}/alignments/" }, + mode: params.publish_dir_mode, + pattern: "*.bam", + enabled: params.save_align_intermeds + ] + ] + } +} \ No newline at end of file diff --git a/modules/nf-core/samtools/sort/tests/main.nf.test b/modules/nf-core/samtools/sort/tests/main.nf.test new file mode 100644 index 00000000..b05e6691 --- /dev/null +++ b/modules/nf-core/samtools/sort/tests/main.nf.test @@ -0,0 +1,192 @@ +nextflow_process { + + name "Test Process SAMTOOLS_SORT" + script "../main.nf" + process "SAMTOOLS_SORT" + tag "modules" + tag "modules_nfcore" + tag "samtools" + tag "samtools/sort" + + test("bam") { + + config "./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.bam', checkIfExists: true) + ]) + input[1] = Channel.of([ + [ id:'fasta' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ]) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot( + process.out.bam, + process.out.csi.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.versions + ).match()} + ) + } + } + + test("multiple bam") { + + config "./nextflow.config" + + when { + process { + """ + input[0] = Channel.of([ + [ 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] = Channel.of([ + [ id:'fasta' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ]) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot( + process.out.bam, + process.out.csi.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.versions + ).match()} + ) + } + } + + test("cram") { + + config "./nextflow_cram.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.sorted.cram', checkIfExists: true) + ]) + input[1] = Channel.of([ + [ id:'fasta' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ]) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot( + process.out.cram.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.crai.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.versions + ).match()} + ) + } + } + + test("bam - stub") { + + options "-stub" + config "./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.bam', checkIfExists: true) + ]) + input[1] = Channel.of([ + [ id:'fasta' ], // 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() } + ) + } + } + + test("multiple bam - stub") { + + config "./nextflow.config" + + when { + process { + """ + input[0] = Channel.of([ + [ 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] = Channel.of([ + [ id:'fasta' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ]) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("cram - stub") { + + options "-stub" + config "./nextflow_cram.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.sorted.cram', checkIfExists: true) + ]) + input[1] = Channel.of([ + [ id:'fasta' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ]) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } +} diff --git a/modules/nf-core/samtools/sort/tests/main.nf.test.snap b/modules/nf-core/samtools/sort/tests/main.nf.test.snap new file mode 100644 index 00000000..469891fe --- /dev/null +++ b/modules/nf-core/samtools/sort/tests/main.nf.test.snap @@ -0,0 +1,287 @@ +{ + "cram": { + "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.cram" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.cram.crai" + ] + ], + [ + "versions.yml:md5,2659b187d681241451539d4c53500b9f" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-16T08:49:58.207549273" + }, + "bam - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + + ], + "2": [ + + ], + "3": [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + "versions.yml:md5,2659b187d681241451539d4c53500b9f" + ], + "bam": [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "crai": [ + + ], + "cram": [ + + ], + "csi": [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,2659b187d681241451539d4c53500b9f" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-16T08:50:08.630951018" + }, + "cram - stub": { + "content": [ + { + "0": [ + + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.cram:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.cram.crai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + + ], + "4": [ + "versions.yml:md5,2659b187d681241451539d4c53500b9f" + ], + "bam": [ + + ], + "crai": [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.cram.crai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "cram": [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.cram:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "csi": [ + + ], + "versions": [ + "versions.yml:md5,2659b187d681241451539d4c53500b9f" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-16T08:50:19.061912443" + }, + "multiple bam": { + "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam:md5,8a16ba90c7d294cbb4c33ac0f7127a12" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam.csi" + ] + ], + [ + "versions.yml:md5,2659b187d681241451539d4c53500b9f" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.09.0" + }, + "timestamp": "2024-10-08T11:59:55.479443" + }, + "multiple bam - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam:md5,8a16ba90c7d294cbb4c33ac0f7127a12" + ] + ], + "1": [ + + ], + "2": [ + + ], + "3": [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam.csi:md5,d185916eaff9afeb4d0aeab3310371f9" + ] + ], + "4": [ + "versions.yml:md5,2659b187d681241451539d4c53500b9f" + ], + "bam": [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam:md5,8a16ba90c7d294cbb4c33ac0f7127a12" + ] + ], + "crai": [ + + ], + "cram": [ + + ], + "csi": [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam.csi:md5,d185916eaff9afeb4d0aeab3310371f9" + ] + ], + "versions": [ + "versions.yml:md5,2659b187d681241451539d4c53500b9f" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.09.0" + }, + "timestamp": "2024-10-08T11:36:13.781404" + }, + "bam": { + "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam:md5,34aa85e86abefe637f7a4a9887f016fc" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam.csi" + ] + ], + [ + "versions.yml:md5,2659b187d681241451539d4c53500b9f" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.09.0" + }, + "timestamp": "2024-10-08T11:59:46.372244" + } +} \ No newline at end of file diff --git a/modules/nf-core/samtools/sort/tests/nextflow.config b/modules/nf-core/samtools/sort/tests/nextflow.config new file mode 100644 index 00000000..f642771f --- /dev/null +++ b/modules/nf-core/samtools/sort/tests/nextflow.config @@ -0,0 +1,8 @@ +process { + + withName: SAMTOOLS_SORT { + ext.prefix = { "${meta.id}.sorted" } + ext.args = "--write-index" + } + +} diff --git a/modules/nf-core/samtools/sort/tests/nextflow_cram.config b/modules/nf-core/samtools/sort/tests/nextflow_cram.config new file mode 100644 index 00000000..3a8c0188 --- /dev/null +++ b/modules/nf-core/samtools/sort/tests/nextflow_cram.config @@ -0,0 +1,8 @@ +process { + + withName: SAMTOOLS_SORT { + ext.prefix = { "${meta.id}.sorted" } + ext.args = "--write-index --output-fmt cram" + } + +} diff --git a/modules/nf-core/samtools/sort/tests/tags.yml b/modules/nf-core/samtools/sort/tests/tags.yml new file mode 100644 index 00000000..cd63ea20 --- /dev/null +++ b/modules/nf-core/samtools/sort/tests/tags.yml @@ -0,0 +1,3 @@ +samtools/sort: + - modules/nf-core/samtools/sort/** + - tests/modules/nf-core/samtools/sort/** diff --git a/modules/nf-core/samtools/stats/environment.yml b/modules/nf-core/samtools/stats/environment.yml new file mode 100644 index 00000000..62054fc9 --- /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 index eb7f098b..493525a9 100644 --- a/modules/nf-core/samtools/stats/main.nf +++ b/modules/nf-core/samtools/stats/main.nf @@ -2,14 +2,14 @@ process SAMTOOLS_STATS { tag "$meta.id" label 'process_single' - conda "bioconda::samtools=1.17" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/samtools:1.17--h00cdaf9_0' : - 'biocontainers/samtools:1.17--h00cdaf9_0' }" + '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) - path fasta + tuple val(meta2), path(fasta) output: tuple val(meta), path("*.stats"), emit: stats diff --git a/modules/nf-core/samtools/stats/meta.yml b/modules/nf-core/samtools/stats/meta.yml index 1d68a5d8..77b020f7 100644 --- a/modules/nf-core/samtools/stats/meta.yml +++ b/modules/nf-core/samtools/stats/meta.yml @@ -16,38 +16,51 @@ tools: 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}" - - fasta: - type: optional file - description: Reference file the CRAM was created with - pattern: "*.{fasta,fa}" + - - 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: - - 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}" + - 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: - type: file - description: File containing software versions - pattern: "versions.yml" + - 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/nextflow.config b/modules/nf-core/samtools/stats/nextflow.config new file mode 100644 index 00000000..285e24d7 --- /dev/null +++ b/modules/nf-core/samtools/stats/nextflow.config @@ -0,0 +1,11 @@ +process { + withName: SAMTOOLS_STATS { + publishDir = [ + [ + path: { "${params.outdir}/${params.aligner}/alignments/samtools_stats/" }, + mode: params.publish_dir_mode, + pattern: "*.stats" + ] + ] + } +} \ No newline at end of file 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 00000000..5bc89309 --- /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 00000000..df507be7 --- /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 00000000..7c28e30f --- /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/trimgalore/environment.yml b/modules/nf-core/trimgalore/environment.yml new file mode 100644 index 00000000..910ffa88 --- /dev/null +++ b/modules/nf-core/trimgalore/environment.yml @@ -0,0 +1,7 @@ +channels: + - conda-forge + - bioconda + +dependencies: + - bioconda::cutadapt=4.2 + - bioconda::trim-galore=0.6.10 diff --git a/modules/nf-core/trimgalore/main.nf b/modules/nf-core/trimgalore/main.nf index dcb77ae7..30d17edc 100644 --- a/modules/nf-core/trimgalore/main.nf +++ b/modules/nf-core/trimgalore/main.nf @@ -2,10 +2,10 @@ process TRIMGALORE { tag "$meta.id" label 'process_high' - conda "bioconda::trim-galore=0.6.7" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/trim-galore:0.6.7--hdfd78af_0' : - 'biocontainers/trim-galore:0.6.7--hdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/trim-galore:0.6.10--hdfd78af_0' : + 'biocontainers/trim-galore:0.6.10--hdfd78af_0' }" input: tuple val(meta), path(reads) @@ -72,4 +72,25 @@ process TRIMGALORE { END_VERSIONS """ } + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + if (meta.single_end) { + output_command = "echo '' | gzip > ${prefix}_trimmed.fq.gz ;" + output_command += "touch ${prefix}.fastq.gz_trimming_report.txt" + } else { + output_command = "echo '' | gzip > ${prefix}_1_trimmed.fq.gz ;" + output_command += "touch ${prefix}_1.fastq.gz_trimming_report.txt ;" + output_command += "echo '' | gzip > ${prefix}_2_trimmed.fq.gz ;" + output_command += "touch ${prefix}_2.fastq.gz_trimming_report.txt" + } + """ + ${output_command} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + trimgalore: \$(echo \$(trim_galore --version 2>&1) | sed 's/^.*version //; s/Last.*\$//') + cutadapt: \$(cutadapt --version) + END_VERSIONS + """ } diff --git a/modules/nf-core/trimgalore/meta.yml b/modules/nf-core/trimgalore/meta.yml index f84c4d77..576cb4c5 100644 --- a/modules/nf-core/trimgalore/meta.yml +++ b/modules/nf-core/trimgalore/meta.yml @@ -14,51 +14,82 @@ tools: homepage: https://www.bioinformatics.babraham.ac.uk/projects/trim_galore/ documentation: https://github.com/FelixKrueger/TrimGalore/blob/master/Docs/Trim_Galore_User_Guide.md licence: ["GPL-3.0-or-later"] + 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. + - - 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. output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - reads: - type: file - description: | - List of input adapter trimmed FastQ files of size 1 and 2 for - single-end and paired-end data, respectively. - pattern: "*{3prime,5prime,trimmed,val}*.fq.gz" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*{3prime,5prime,trimmed,val}*.fq.gz": + type: file + description: | + List of input adapter trimmed FastQ files of size 1 and 2 for + single-end and paired-end data, respectively. + pattern: "*{3prime,5prime,trimmed,val}*.fq.gz" + - log: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*report.txt": + type: file + description: Trim Galore! trimming report + pattern: "*_{report.txt}" - unpaired: - type: file - description: | - FastQ files containing unpaired reads from read 1 or read 2 - pattern: "*unpaired*.fq.gz" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*unpaired*.fq.gz": + type: file + description: | + FastQ files containing unpaired reads from read 1 or read 2 + pattern: "*unpaired*.fq.gz" - html: - type: file - description: FastQC report (optional) - pattern: "*_{fastqc.html}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.html": + type: file + description: FastQC report (optional) + pattern: "*_{fastqc.html}" - zip: - type: file - description: FastQC report archive (optional) - pattern: "*_{fastqc.zip}" - - log: - type: file - description: Trim Galore! trimming report - pattern: "*_{report.txt}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.zip": + type: file + description: FastQC report archive (optional) + pattern: "*_{fastqc.zip}" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@drpatelh" - "@ewels" - "@FelixKrueger" +maintainers: + - "@drpatelh" + - "@ewels" + - "@FelixKrueger" diff --git a/modules/nf-core/trimgalore/nextflow.config b/modules/nf-core/trimgalore/nextflow.config new file mode 100644 index 00000000..6c33f5c4 --- /dev/null +++ b/modules/nf-core/trimgalore/nextflow.config @@ -0,0 +1,90 @@ +process { + withName: TRIMGALORE { + ext.args = { [ + // Static args + '--fastqc', + + // Special flags + params.rrbs ? '--rrbs' : '', + params.nextseq_trim > 0 ? "--nextseq ${params.nextseq_trim}" : '', + params.length_trim ? "--length ${params.length_trim}" : '', + + // Trimming - R1 + params.clip_r1 > 0 ? "--clip_r1 ${params.clip_r1}" : ( + params.pbat ? "--clip_r1 9" : ( + (params.single_cell || params.cegx) ? "--clip_r1 6" : ( + params.epignome ? "--clip_r1 8" : ( + (params.accel || params.zymo || params.em_seq) ? "--clip_r1 10" : '' + ) + ) + ) + ), + + // Trimming - R2 + meta.single_end ? '' : ( + params.clip_r2 > 0 ? "--clip_r2 ${params.clip_r2}" : ( + params.pbat ? "--clip_r2 9" : ( + (params.single_cell || params.cegx) ? "--clip_r2 6" : ( + params.epignome ? "--clip_r2 8" : ( + (params.zymo || params.em_seq) ? "--clip_r2 10" : ( + params.accel ? "--clip_r2 15" : '' + ) + ) + ) + ) + ) + ), + + // Trimming - 3' R1 + params.three_prime_clip_r1 > 0 ? "--three_prime_clip_r1 ${params.three_prime_clip_r1}" : ( + params.pbat ? "--three_prime_clip_r1 9" : ( + params.single_cell ? "--three_prime_clip_r1 6" : ( + params.cegx ? "--three_prime_clip_r1 2" : ( + params.epignome ? "--three_prime_clip_r1 8" : ( + (params.accel || params.zymo || params.em_seq) ? "--three_prime_clip_r1 10" : '' + ) + ) + ) + ) + ), + + // Trimming - 3' R2 + meta.single_end ? '' : ( + params.three_prime_clip_r2 > 0 ? "--three_prime_clip_r2 ${params.three_prime_clip_r2}" : ( + params.pbat ? "--three_prime_clip_r2 9" : ( + params.single_cell ? "--three_prime_clip_r2 6" : ( + params.cegx ? "--three_prime_clip_r2 2" : ( + params.epignome ? "--three_prime_clip_r2 8" : ( + (params.accel || params.zymo || params.em_seq) ? "--three_prime_clip_r2 10" : '' + ) + ) + ) + ) + ) + ), + ].join(' ').trim() } + publishDir = [ + [ + path: { "${params.outdir}/trimgalore/fastqc" }, + mode: params.publish_dir_mode, + pattern: "*.html" + ], + [ + path: { "${params.outdir}/trimgalore/fastqc/zips" }, + mode: params.publish_dir_mode, + pattern: "*.zip" + ], + [ + path: { "${params.outdir}/trimgalore" }, + mode: params.publish_dir_mode, + pattern: "*.fq.gz", + enabled: params.save_trimmed + ], + [ + path: { "${params.outdir}/trimgalore/logs" }, + mode: params.publish_dir_mode, + pattern: "*.txt" + ] + ] + } +} \ No newline at end of file diff --git a/modules/nf-core/trimgalore/tests/main.nf.test b/modules/nf-core/trimgalore/tests/main.nf.test new file mode 100644 index 00000000..2a3dbbb0 --- /dev/null +++ b/modules/nf-core/trimgalore/tests/main.nf.test @@ -0,0 +1,150 @@ +nextflow_process { + + name "Test Process TRIMGALORE" + script "../main.nf" + process "TRIMGALORE" + tag "modules" + tag "modules_nfcore" + tag "trimgalore" + + test("test_trimgalore_single_end") { + + when { + process { + """ + input[0] = [ [ id:'test', single_end:true ], // meta map + [ file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/fastq/test_1.fastq.gz", checkIfExists: true) ] + ] + """ + } + } + + then { + def read_lines = ["@ERR5069949.2151832 NS500628:121:HK3MMAFX2:2:21208:10793:15304/1", + "TCATAAACCAAAGCACTCACAGTGTCAACAATTTCAGCAGGACAACGCCGACAAGTTCCGAGGAACATGTCTGGACCTATAGTTTTCATAAGTCTACACACTGAATTGAAATATTCTGGTTCTAGTGTGCCCTTAGTTAGCAATGTGCGT", + "AAAAAAEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEAAEEEEAEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEAAEEEEE + { assert path(process.out.reads.get(0).get(1)).linesGzip.contains(read_line) } + } + }, + { report1_lines.each { report1_line -> + { assert path(process.out.log.get(0).get(1)).getText().contains(report1_line) } + } + }, + { assert snapshot(process.out.versions).match() } + ) + } + } + + test("test_trimgalore_single_end - stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ [ id:'test', single_end:true ], // meta map + [ file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/fastq/test_1.fastq.gz", checkIfExists: true) ] + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("test_trimgalore_paired_end") { + + 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 { + def read1_lines = ["@ERR5069949.2151832 NS500628:121:HK3MMAFX2:2:21208:10793:15304/1", + "TCATAAACCAAAGCACTCACAGTGTCAACAATTTCAGCAGGACAACGCCGACAAGTTCCGAGGAACATGTCTGGACCTATAGTTTTCATAAGTCTACACACTGAATTGAAATATTCTGGTTCTAGTGTGCCCTTAGTTAGCAATGTGCGT", + "AAAAAAEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEAAEEEEAEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEAAEEEEE + { assert path(process.out.reads.get(0).get(1).get(0)).linesGzip.contains(read1_line) } + } + }, + { read2_lines.each { read2_line -> + { assert path(process.out.reads.get(0).get(1).get(1)).linesGzip.contains(read2_line) } + } + }, + { report1_lines.each { report1_line -> + { assert path(process.out.log.get(0).get(1).get(0)).getText().contains(report1_line) } + } + }, + { report2_lines.each { report2_line -> + { assert path(process.out.log.get(0).get(1).get(1)).getText().contains(report2_line) } + } + }, + { assert snapshot(process.out.versions).match() } + ) + } + } + + test("test_trimgalore_paired_end - 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) + ] + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } +} diff --git a/modules/nf-core/trimgalore/tests/main.nf.test.snap b/modules/nf-core/trimgalore/tests/main.nf.test.snap new file mode 100644 index 00000000..61b3504a --- /dev/null +++ b/modules/nf-core/trimgalore/tests/main.nf.test.snap @@ -0,0 +1,180 @@ +{ + "test_trimgalore_single_end": { + "content": [ + [ + "versions.yml:md5,0376fafd6096035de5c7ca6cb4e5e119" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-18T12:50:36.440264431" + }, + "test_trimgalore_single_end - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test_trimmed.fq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastq.gz_trimming_report.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + + ], + "3": [ + + ], + "4": [ + + ], + "5": [ + "versions.yml:md5,0376fafd6096035de5c7ca6cb4e5e119" + ], + "html": [ + + ], + "log": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastq.gz_trimming_report.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "reads": [ + [ + { + "id": "test", + "single_end": true + }, + "test_trimmed.fq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "unpaired": [ + + ], + "versions": [ + "versions.yml:md5,0376fafd6096035de5c7ca6cb4e5e119" + ], + "zip": [ + + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-18T12:50:51.25902234" + }, + "test_trimgalore_paired_end - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1_trimmed.fq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2_trimmed.fq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastq.gz_trimming_report.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "test_2.fastq.gz_trimming_report.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "2": [ + + ], + "3": [ + + ], + "4": [ + + ], + "5": [ + "versions.yml:md5,0376fafd6096035de5c7ca6cb4e5e119" + ], + "html": [ + + ], + "log": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastq.gz_trimming_report.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "test_2.fastq.gz_trimming_report.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "reads": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1_trimmed.fq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2_trimmed.fq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "unpaired": [ + + ], + "versions": [ + "versions.yml:md5,0376fafd6096035de5c7ca6cb4e5e119" + ], + "zip": [ + + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-18T12:51:19.024228479" + }, + "test_trimgalore_paired_end": { + "content": [ + [ + "versions.yml:md5,0376fafd6096035de5c7ca6cb4e5e119" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-18T12:51:02.471703095" + } +} \ No newline at end of file diff --git a/modules/nf-core/trimgalore/tests/tags.yml b/modules/nf-core/trimgalore/tests/tags.yml new file mode 100644 index 00000000..e9937691 --- /dev/null +++ b/modules/nf-core/trimgalore/tests/tags.yml @@ -0,0 +1,2 @@ +trimgalore: + - modules/nf-core/trimgalore/** diff --git a/modules/nf-core/untar/environment.yml b/modules/nf-core/untar/environment.yml index 2d52ce64..c7794856 100644 --- a/modules/nf-core/untar/environment.yml +++ b/modules/nf-core/untar/environment.yml @@ -1,8 +1,7 @@ channels: - conda-forge - bioconda - - defaults dependencies: - - conda-forge::sed=4.7 - conda-forge::grep=3.11 + - conda-forge::sed=4.8 - conda-forge::tar=1.34 diff --git a/modules/nf-core/untar/main.nf b/modules/nf-core/untar/main.nf index 8a75bb95..9bd8f554 100644 --- a/modules/nf-core/untar/main.nf +++ b/modules/nf-core/untar/main.nf @@ -4,8 +4,8 @@ process UNTAR { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/ubuntu:20.04' : - 'nf-core/ubuntu:20.04' }" + 'https://depot.galaxyproject.org/singularity/ubuntu:22.04' : + 'nf-core/ubuntu:22.04' }" input: tuple val(meta), path(archive) @@ -52,8 +52,29 @@ process UNTAR { stub: prefix = task.ext.prefix ?: ( meta.id ? "${meta.id}" : archive.toString().replaceFirst(/\.[^\.]+(.gz)?$/, "")) """ - mkdir $prefix - touch ${prefix}/file.txt + mkdir ${prefix} + ## Dry-run untaring the archive to get the files and place all in prefix + if [[ \$(tar -taf ${archive} | grep -o -P "^.*?\\/" | uniq | wc -l) -eq 1 ]]; then + for i in `tar -tf ${archive}`; + do + if [[ \$(echo "\${i}" | grep -E "/\$") == "" ]]; + then + touch \${i} + else + mkdir -p \${i} + fi + done + else + for i in `tar -tf ${archive}`; + do + if [[ \$(echo "\${i}" | grep -E "/\$") == "" ]]; + then + touch ${prefix}/\${i} + else + mkdir -p ${prefix}/\${i} + fi + done + fi cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/untar/meta.yml b/modules/nf-core/untar/meta.yml index a9a2110f..290346b3 100644 --- a/modules/nf-core/untar/meta.yml +++ b/modules/nf-core/untar/meta.yml @@ -10,30 +10,33 @@ tools: Extract tar.gz files. documentation: https://www.gnu.org/software/tar/manual/ licence: ["GPL-3.0-or-later"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - archive: - type: file - description: File to be untar - pattern: "*.{tar}.{gz}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - archive: + type: file + description: File to be untar + pattern: "*.{tar}.{gz}" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - untar: - type: directory - description: Directory containing contents of archive - pattern: "*/" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - $prefix: + type: directory + description: Directory containing contents of archive + pattern: "*/" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@joseespinosa" - "@drpatelh" diff --git a/modules/nf-core/untar/tests/main.nf.test b/modules/nf-core/untar/tests/main.nf.test new file mode 100644 index 00000000..c957517a --- /dev/null +++ b/modules/nf-core/untar/tests/main.nf.test @@ -0,0 +1,85 @@ +nextflow_process { + + name "Test Process UNTAR" + script "../main.nf" + process "UNTAR" + tag "modules" + tag "modules_nfcore" + tag "untar" + + test("test_untar") { + + when { + process { + """ + input[0] = [ [], file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/db/kraken2.tar.gz', checkIfExists: true) ] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() }, + ) + } + } + + test("test_untar_onlyfiles") { + + when { + process { + """ + input[0] = [ [], file(params.modules_testdata_base_path + 'generic/tar/hello.tar.gz', checkIfExists: true) ] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() }, + ) + } + } + + test("test_untar - stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ [], file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/db/kraken2.tar.gz', checkIfExists: true) ] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() }, + ) + } + } + + test("test_untar_onlyfiles - stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ [], file(params.modules_testdata_base_path + 'generic/tar/hello.tar.gz', checkIfExists: true) ] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() }, + ) + } + } +} diff --git a/modules/nf-core/untar/tests/main.nf.test.snap b/modules/nf-core/untar/tests/main.nf.test.snap new file mode 100644 index 00000000..ceb91b79 --- /dev/null +++ b/modules/nf-core/untar/tests/main.nf.test.snap @@ -0,0 +1,158 @@ +{ + "test_untar_onlyfiles": { + "content": [ + { + "0": [ + [ + [ + + ], + [ + "hello.txt:md5,e59ff97941044f85df5297e1c302d260" + ] + ] + ], + "1": [ + "versions.yml:md5,6063247258c56fd271d076bb04dd7536" + ], + "untar": [ + [ + [ + + ], + [ + "hello.txt:md5,e59ff97941044f85df5297e1c302d260" + ] + ] + ], + "versions": [ + "versions.yml:md5,6063247258c56fd271d076bb04dd7536" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-10T12:04:28.231047" + }, + "test_untar_onlyfiles - stub": { + "content": [ + { + "0": [ + [ + [ + + ], + [ + "hello.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "1": [ + "versions.yml:md5,6063247258c56fd271d076bb04dd7536" + ], + "untar": [ + [ + [ + + ], + [ + "hello.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "versions": [ + "versions.yml:md5,6063247258c56fd271d076bb04dd7536" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-10T12:04:45.773103" + }, + "test_untar - stub": { + "content": [ + { + "0": [ + [ + [ + + ], + [ + "hash.k2d:md5,d41d8cd98f00b204e9800998ecf8427e", + "opts.k2d:md5,d41d8cd98f00b204e9800998ecf8427e", + "taxo.k2d:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "1": [ + "versions.yml:md5,6063247258c56fd271d076bb04dd7536" + ], + "untar": [ + [ + [ + + ], + [ + "hash.k2d:md5,d41d8cd98f00b204e9800998ecf8427e", + "opts.k2d:md5,d41d8cd98f00b204e9800998ecf8427e", + "taxo.k2d:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "versions": [ + "versions.yml:md5,6063247258c56fd271d076bb04dd7536" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-10T12:04:36.777441" + }, + "test_untar": { + "content": [ + { + "0": [ + [ + [ + + ], + [ + "hash.k2d:md5,8b8598468f54a7087c203ad0190555d9", + "opts.k2d:md5,a033d00cf6759407010b21700938f543", + "taxo.k2d:md5,094d5891cdccf2f1468088855c214b2c" + ] + ] + ], + "1": [ + "versions.yml:md5,6063247258c56fd271d076bb04dd7536" + ], + "untar": [ + [ + [ + + ], + [ + "hash.k2d:md5,8b8598468f54a7087c203ad0190555d9", + "opts.k2d:md5,a033d00cf6759407010b21700938f543", + "taxo.k2d:md5,094d5891cdccf2f1468088855c214b2c" + ] + ] + ], + "versions": [ + "versions.yml:md5,6063247258c56fd271d076bb04dd7536" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-10T12:04:19.377674" + } +} \ No newline at end of file diff --git a/modules/nf-core/untar/tests/tags.yml b/modules/nf-core/untar/tests/tags.yml new file mode 100644 index 00000000..feb6f15c --- /dev/null +++ b/modules/nf-core/untar/tests/tags.yml @@ -0,0 +1,2 @@ +untar: + - modules/nf-core/untar/** diff --git a/nextflow.config b/nextflow.config index d95f12b2..af2a040e 100644 --- a/nextflow.config +++ b/nextflow.config @@ -11,20 +11,19 @@ params { // Input options input = null + // References genome = null igenomes_base = 's3://ngi-igenomes/igenomes/' igenomes_ignore = false - // Qualimap options - bamqc_regions_file = null + // MultiQC options - multiqc_config = null - multiqc_title = null - multiqc_logo = null - max_multiqc_email_size = '25.MB' + multiqc_config = null + multiqc_title = null + multiqc_logo = null + max_multiqc_email_size = '25.MB' multiqc_methods_description = null - // Intermediate files save_reference = false save_align_intermeds = false @@ -35,6 +34,9 @@ params { aligner = 'bismark' comprehensive = false + // Qualimap options + bamqc_regions_file = null + // Library presets pbat = false rrbs = false @@ -52,6 +54,7 @@ params { three_prime_clip_r1 = 0 three_prime_clip_r2 = 0 nextseq_trim = 0 + length_trim = null // Bismark options non_directional = false @@ -85,176 +88,158 @@ params { skip_multiqc = false // Boilerplate options - outdir = null - publish_dir_mode = 'copy' - email = null - email_on_fail = null - plaintext_email = false - monochrome_logs = false - hook_url = null - help = false - version = false + outdir = null + publish_dir_mode = 'copy' + email = null + 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/methylseq' // Config options - config_profile_name = null - config_profile_description = null - custom_config_version = 'master' - custom_config_base = "https://raw.githubusercontent.com/nf-core/configs/${params.custom_config_version}" - config_profile_contact = null - config_profile_url = null - - test_data_base = "https://raw.githubusercontent.com/nf-core/test-datasets/methylseq" + config_profile_name = null + config_profile_description = null - - // Max resource options - // Defaults only, expecting to be overwritten - max_memory = '128.GB' - max_cpus = 16 - max_time = '240.h' + custom_config_version = 'master' + custom_config_base = "https://raw.githubusercontent.com/nf-core/configs/${params.custom_config_version}" + config_profile_contact = null + config_profile_url = null // Schema validation default options - validationFailUnrecognisedParams = false - validationLenientMode = false - validationSchemaIgnoreParams = 'genomes,igenomes_base' - validationShowHiddenParams = false - validate_params = true - + validate_params = true } // Load base.config by default for all pipelines includeConfig 'conf/base.config' -// Load nf-core custom profiles from different Institutions -try { - includeConfig "${params.custom_config_base}/nfcore_custom.config" -} catch (Exception e) { - System.err.println("WARNING: Could not load nf-core/config profiles: ${params.custom_config_base}/nfcore_custom.config") -} - -// Load nf-core/methylseq custom profiles from different institutions. -// Warning: Uncomment only if a pipeline-specific instititutional config already exists on nf-core/configs! -try { - includeConfig "${params.custom_config_base}/pipeline/methylseq.config" -} catch (Exception e) { - System.err.println("WARNING: Could not load nf-core/config/methylseq profiles: ${params.custom_config_base}/pipeline/methylseq.config") -} - profiles { debug { - dumpHashes = true - process.beforeScript = 'echo $HOSTNAME' - cleanup = false + dumpHashes = true + process.beforeScript = 'echo $HOSTNAME' + cleanup = false nextflow.enable.configProcessNamesValidation = true } conda { - conda.enabled = true - docker.enabled = false - singularity.enabled = false - podman.enabled = false - shifter.enabled = false - charliecloud.enabled = false - apptainer.enabled = false + conda.enabled = true + docker.enabled = false + singularity.enabled = false + podman.enabled = false + shifter.enabled = false + charliecloud.enabled = false + conda.channels = ['conda-forge', 'bioconda'] + apptainer.enabled = false } mamba { - conda.enabled = true - conda.useMamba = true - docker.enabled = false - singularity.enabled = false - podman.enabled = false - shifter.enabled = false - charliecloud.enabled = false - apptainer.enabled = false + conda.enabled = true + conda.useMamba = true + docker.enabled = false + singularity.enabled = false + podman.enabled = false + shifter.enabled = false + charliecloud.enabled = false + apptainer.enabled = false } docker { - docker.enabled = true - conda.enabled = false - singularity.enabled = false - podman.enabled = false - shifter.enabled = false - charliecloud.enabled = false - apptainer.enabled = false - docker.runOptions = '-u $(id -u):$(id -g)' + docker.enabled = true + conda.enabled = false + singularity.enabled = false + podman.enabled = false + shifter.enabled = false + charliecloud.enabled = false + apptainer.enabled = false + docker.runOptions = '-u $(id -u):$(id -g)' } arm { - docker.runOptions = '-u $(id -u):$(id -g) --platform=linux/amd64' + docker.runOptions = '-u $(id -u):$(id -g) --platform=linux/amd64' } singularity { - singularity.enabled = true - singularity.autoMounts = true - conda.enabled = false - docker.enabled = false - podman.enabled = false - shifter.enabled = false - charliecloud.enabled = false - apptainer.enabled = false + singularity.enabled = true + singularity.autoMounts = true + conda.enabled = false + docker.enabled = false + podman.enabled = false + shifter.enabled = false + charliecloud.enabled = false + apptainer.enabled = false } podman { - podman.enabled = true - conda.enabled = false - docker.enabled = false - singularity.enabled = false - shifter.enabled = false - charliecloud.enabled = false - apptainer.enabled = false + podman.enabled = true + conda.enabled = false + docker.enabled = false + singularity.enabled = false + shifter.enabled = false + charliecloud.enabled = false + apptainer.enabled = false } shifter { - shifter.enabled = true - conda.enabled = false - docker.enabled = false - singularity.enabled = false - podman.enabled = false - charliecloud.enabled = false - apptainer.enabled = false + shifter.enabled = true + conda.enabled = false + docker.enabled = false + singularity.enabled = false + podman.enabled = false + charliecloud.enabled = false + apptainer.enabled = false } charliecloud { - charliecloud.enabled = true - conda.enabled = false - docker.enabled = false - singularity.enabled = false - podman.enabled = false - shifter.enabled = false - apptainer.enabled = false + charliecloud.enabled = true + conda.enabled = false + docker.enabled = false + singularity.enabled = false + podman.enabled = false + shifter.enabled = false + apptainer.enabled = false } apptainer { - apptainer.enabled = true - apptainer.autoMounts = true - conda.enabled = false - docker.enabled = false - singularity.enabled = false - podman.enabled = false - shifter.enabled = false - charliecloud.enabled = false + apptainer.enabled = true + apptainer.autoMounts = true + conda.enabled = false + docker.enabled = false + singularity.enabled = false + podman.enabled = false + shifter.enabled = false + charliecloud.enabled = false + } + wave { + apptainer.ociAutoPull = true + singularity.ociAutoPull = true + wave.enabled = true + wave.freeze = true + wave.strategy = 'conda,container' } gitpod { - executor.name = 'local' - executor.cpus = 4 - executor.memory = 8.GB + executor.name = 'local' + executor.cpus = 4 + executor.memory = 8.GB } test { includeConfig 'conf/test.config' } test_full { includeConfig 'conf/test_full.config' } - test_ci { params.test_data_base = './test-datasets/' } + test_ci { params.pipelines_testdata_base_path = './test-datasets/' } dev { nextflow.enable.configProcessNamesValidation = true } } -// Set default registry for Apptainer, Docker, Podman and Singularity independent of -profile -// Will not be used unless Apptainer / Docker / Podman / Singularity are enabled -// Set to your registry if you have a mirror of containers -apptainer.registry = 'quay.io' -docker.registry = 'quay.io' -podman.registry = 'quay.io' -singularity.registry = 'quay.io' +// 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" -// Nextflow plugins -plugins { - id 'nf-validation@1.1.3' // Validation of pipeline parameters and creation of an input channel from a sample sheet -} +// Load nf-core/methylseq custom profiles from different institutions. +includeConfig !System.getenv('NXF_OFFLINE') && params.custom_config_base ? "${params.custom_config_base}/pipeline/methylseq.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 +// Set to your registry if you have a mirror of containers +apptainer.registry = 'quay.io' +docker.registry = 'quay.io' +podman.registry = 'quay.io' +singularity.registry = 'quay.io' +charliecloud.registry = 'quay.io' // Load igenomes.config if required -if (!params.igenomes_ignore) { - includeConfig 'conf/igenomes.config' -} else { - params.genomes = [:] -} +includeConfig !params.igenomes_ignore ? 'conf/igenomes.config' : 'conf/igenomes_ignored.config' + // Export these variables to prevent local Python/R libraries from conflicting with those in the container // The JULIA depot path has been adjusted to a fixed path `/usr/local/share/julia` that needs to be used for packages in the container. // See https://apeltzer.github.io/post/03-julia-lang-nextflow/ for details on that. Once we have a common agreement on where to keep Julia packages, this is adjustable. @@ -266,8 +251,15 @@ env { JULIA_DEPOT_PATH = "/usr/local/share/julia" } -// Capture exit codes from upstream processes when piping -process.shell = ['/bin/bash', '-euo', 'pipefail'] +// 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. +""" // Disable process selector warnings by default. Use debug profile to enable warnings. nextflow.enable.configProcessNamesValidation = false @@ -292,47 +284,50 @@ dag { manifest { name = 'nf-core/methylseq' - author = """Phil Ewels""" + author = """Phil Ewels, Sateesh Peri""" homePage = 'https://github.com/nf-core/methylseq' description = """Methylation (Bisulfite-Sequencing) Best Practice analysis pipeline, part of the nf-core community.""" mainScript = 'main.nf' - nextflowVersion = '!>=23.04.0' - version = '2.6.0' + nextflowVersion = '!>=24.04.2' + version = '2.7.0' doi = '10.5281/zenodo.1343417' } -// Load modules.config for DSL2 module specific options -includeConfig 'conf/modules.config' - -// Function to ensure that resource requirements don't go beyond -// a maximum limit -def check_max(obj, type) { - if (type == 'memory') { - try { - if (obj.compareTo(params.max_memory as nextflow.util.MemoryUnit) == 1) - return params.max_memory as nextflow.util.MemoryUnit - else - return obj - } catch (all) { - println " ### ERROR ### Max memory '${params.max_memory}' is not valid! Using default value: $obj" - return obj - } - } else if (type == 'time') { - try { - if (obj.compareTo(params.max_time as nextflow.util.Duration) == 1) - return params.max_time as nextflow.util.Duration - else - return obj - } catch (all) { - println " ### ERROR ### Max time '${params.max_time}' is not valid! Using default value: $obj" - return obj - } - } else if (type == 'cpus') { - try { - return Math.min( obj, params.max_cpus as int ) - } catch (all) { - println " ### ERROR ### Max cpus '${params.max_cpus}' is not valid! Using default value: $obj" - return obj - } +// Nextflow plugins +plugins { + id 'nf-schema@2.1.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 ? "\n* 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 } } + +// Load workflow specific config for DSL2 module specific options +includeConfig './workflows/methylseq/nextflow.config' diff --git a/nextflow_schema.json b/nextflow_schema.json index a87bcb95..ca54aada 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -1,10 +1,10 @@ { - "$schema": "http://json-schema.org/draft-07/schema", + "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://raw.githubusercontent.com/nf-core/methylseq/master/nextflow_schema.json", "title": "nf-core/methylseq pipeline parameters", "description": "Methylation (Bisulfite-Sequencing) Best Practice analysis pipeline, part of the nf-core community.", "type": "object", - "definitions": { + "$defs": { "input_output_options": { "title": "Input/output options", "type": "object", @@ -16,9 +16,9 @@ "type": "string", "format": "file-path", "exists": true, + "schema": "assets/schema_input.json", "mimetype": "text/csv", "pattern": "^\\S+\\.csv$", - "schema": "assets/schema_input.json", "description": "Path to comma-separated file containing information about the samples in the experiment.", "help_text": "You will need to create a design file with information about the samples in your experiment before running the pipeline. Use this parameter to specify its location. It has to be a comma-separated file with 3 columns, and a header row. See [usage docs](https://nf-co.re//usage#samplesheet-input).", "fa_icon": "fas fa-file-csv" @@ -40,13 +40,6 @@ "type": "string", "description": "MultiQC report title. Printed as page header, used for filename if not otherwise specified.", "fa_icon": "fas fa-file-signature" - }, - "test_data_base": { - "type": "string", - "default": "https://raw.githubusercontent.com/nf-core/test-datasets/methylseq", - "description": "Base path / URL for data used in the test profiles", - "help_text": "Warning: The `-profile test` samplesheet file itself contains remote paths. Setting this parameter does not alter the contents of that file.", - "hidden": true } } }, @@ -118,26 +111,27 @@ "description": "Path to a directory containing a Bismark reference index.", "fa_icon": "fas fa-dot-circle" }, - "bwa_meth_index": { + "bwameth_index": { "type": "string", "format": "path", "description": "bwameth index filename base", "help_text": "Directory for a bwa-meth genome reference index. Only used when using the bwa-meth aligner.\n\nNote that this is not a complete path, but the directory containing the reference. For example, if you have file paths such as `/path/to/ref/genome.fa.bwameth.c2t.bwt`, you should specify `/path/to/ref/`.", "fa_icon": "far fa-dot-circle" }, - "igenomes_base": { - "type": "string", - "description": "Directory / URL base for iGenomes references.", - "default": "s3://ngi-igenomes/igenomes", - "fa_icon": "fas fa-cloud-download-alt", - "hidden": true - }, "igenomes_ignore": { "type": "boolean", "description": "Do not load the iGenomes reference config.", "fa_icon": "fas fa-ban", "hidden": true, "help_text": "Do not load `igenomes.config` when running the pipeline. You may choose this option if you observe clashes between custom parameters and those supplied in `igenomes.config`." + }, + "igenomes_base": { + "type": "string", + "format": "directory-path", + "description": "The base path to the igenomes reference files", + "fa_icon": "fas fa-ban", + "hidden": true, + "default": "s3://ngi-igenomes/igenomes/" } } }, @@ -262,6 +256,11 @@ "type": "integer", "default": 0, "description": "Trim bases below this quality value from the 3' end of the read, ignoring high-quality G bases" + }, + "length_trim": { + "type": "integer", + "description": "Discard reads that become shorter than INT because of either quality or adapter trimming.", + "fa_icon": "fas fa-trash-alt" } }, "fa_icon": "fas fa-cut", @@ -409,6 +408,7 @@ "default": "", "properties": { "bamqc_regions_file": { + "type": "string", "format": "file-path", "exists": true, "mimetype": "text/plain", @@ -490,41 +490,6 @@ } } }, - "max_job_request_options": { - "title": "Max job request options", - "type": "object", - "fa_icon": "fab fa-acquisitions-incorporated", - "description": "Set the top limit for requested resources for any single job.", - "help_text": "If you are running on a smaller system, a pipeline step requesting more resources than are available may cause the Nextflow to stop the run with an error. These options allow you to cap the maximum resources requested by any single job so that the pipeline will run on your system.\n\nNote that you can not _increase_ the resources requested by any job using these options. For that you will need your own configuration file. See [the nf-core website](https://nf-co.re/usage/configuration) for details.", - "properties": { - "max_cpus": { - "type": "integer", - "description": "Maximum number of CPUs that can be requested for any single job.", - "default": 16, - "fa_icon": "fas fa-microchip", - "hidden": true, - "help_text": "Use to set an upper-limit for the CPU requirement for each process. Should be an integer e.g. `--max_cpus 1`" - }, - "max_memory": { - "type": "string", - "description": "Maximum amount of memory that can be requested for any single job.", - "default": "128.GB", - "fa_icon": "fas fa-memory", - "pattern": "^\\d+(\\.\\d+)?\\.?\\s*(K|M|G|T)?B$", - "hidden": true, - "help_text": "Use to set an upper-limit for the memory requirement for each process. Should be a string in the format integer-unit e.g. `--max_memory '8.GB'`" - }, - "max_time": { - "type": "string", - "description": "Maximum amount of time that can be requested for any single job.", - "default": "240.h", - "fa_icon": "far fa-clock", - "pattern": "^(\\d+\\.?\\s*(s|m|h|d|day)\\s*)+$", - "hidden": true, - "help_text": "Use to set an upper-limit for the time requirement for each process. Should be a string in the format integer-unit e.g. `--max_time '2.h'`" - } - } - }, "generic_options": { "title": "Generic options", "type": "object", @@ -532,12 +497,6 @@ "description": "Less common options for the pipeline, typically set in a config file.", "help_text": "These options are common to all nf-core pipelines and allow you to customise some of the core preferences for how the pipeline runs.\n\nTypically these options would be set in a Nextflow config file loaded for all pipeline runs, such as `~/.nextflow/config`.", "properties": { - "help": { - "type": "boolean", - "description": "Display help text.", - "fa_icon": "fas fa-question-circle", - "hidden": true - }, "version": { "type": "boolean", "description": "Display version and exit.", @@ -613,69 +572,52 @@ "fa_icon": "fas fa-check-square", "hidden": true }, - "validationShowHiddenParams": { - "type": "boolean", - "fa_icon": "far fa-eye-slash", - "description": "Show all params when using `--help`", - "hidden": true, - "help_text": "By default, parameters set as _hidden_ in the schema are not shown on the command line when a user runs with `--help`. Specifying this option will tell the pipeline to show all parameters." - }, - "validationFailUnrecognisedParams": { - "type": "boolean", - "fa_icon": "far fa-check-circle", - "description": "Validation of parameters fails when an unrecognised parameter is found.", - "hidden": true, - "help_text": "By default, when an unrecognised parameter is found, it returns a warinig." - }, - "validationLenientMode": { - "type": "boolean", + "pipelines_testdata_base_path": { + "type": "string", "fa_icon": "far fa-check-circle", - "description": "Validation of parameters in lenient more.", - "hidden": true, - "help_text": "Allows string values that are parseable as numbers or booleans. For further information see [JSONSchema docs](https://github.com/everit-org/json-schema#lenient-mode)." + "description": "Base URL or local path to location of pipeline test dataset files", + "default": "https://raw.githubusercontent.com/nf-core/test-datasets/methylseq", + "hidden": true } } } }, "allOf": [ { - "$ref": "#/definitions/input_output_options" - }, - { - "$ref": "#/definitions/save_intermediate_files" + "$ref": "#/$defs/input_output_options" }, { - "$ref": "#/definitions/reference_genome_options" + "$ref": "#/$defs/save_intermediate_files" }, { - "$ref": "#/definitions/alignment_options" + "$ref": "#/$defs/reference_genome_options" }, { - "$ref": "#/definitions/special_library_types" + "$ref": "#/$defs/alignment_options" }, { - "$ref": "#/definitions/adapter_trimming" + "$ref": "#/$defs/special_library_types" }, { - "$ref": "#/definitions/bismark_options" + "$ref": "#/$defs/adapter_trimming" }, { - "$ref": "#/definitions/bwa_meth_options" + "$ref": "#/$defs/bismark_options" }, { - "$ref": "#/definitions/qualimap_options" + "$ref": "#/$defs/bwa_meth_options" }, { - "$ref": "#/definitions/skip_pipeline_steps" + "$ref": "#/$defs/qualimap_options" }, { - "$ref": "#/definitions/generic_options" + "$ref": "#/$defs/skip_pipeline_steps" }, { - "$ref": "#/definitions/max_job_request_options" + "$ref": "#/$defs/generic_options" }, { - "$ref": "#/definitions/institutional_config_options" + "$ref": "#/$defs/institutional_config_options" } ] } diff --git a/nf-test.config b/nf-test.config index 89243e51..b7a7023a 100644 --- a/nf-test.config +++ b/nf-test.config @@ -3,14 +3,20 @@ config { testsDir "." // nf-test directory including temporary files for each test - workDir "/tmp" - - // location of library folder that is added automatically to the classpath - libDir "tests/lib/" + workDir System.getenv("NFT_WORKDIR") ?: ".nf-test" // location of an optional nextflow.config file specific for executing tests - configFile "nextflow.config" + configFile "tests/nextflow.config" // run all test with the defined docker profile from the main nextflow.config - profile "" + profile "test" + + // List of filenames or patterns that should be trigger a full test run + triggers 'nextflow.config', 'nf-test.config', 'conf/test.config', 'conf/test_full.config' + + // load the necessary plugins + plugins { + load "nft-bam@0.3.0" + load "nft-utils@0.0.3" + } } diff --git a/pyproject.toml b/pyproject.toml deleted file mode 100644 index 0d62beb6..00000000 --- a/pyproject.toml +++ /dev/null @@ -1,10 +0,0 @@ -# Config file for Python. Mostly used to configure linting of bin/check_samplesheet.py with Black. -# Should be kept the same as nf-core/tools to avoid fighting with template synchronisation. -[tool.black] -line-length = 120 -target_version = ["py37", "py38", "py39", "py310"] - -[tool.isort] -profile = "black" -known_first_party = ["nf_core"] -multi_line_output = 3 diff --git a/subworkflows/local/bismark.nf b/subworkflows/local/bismark.nf deleted file mode 100644 index 797da7a4..00000000 --- a/subworkflows/local/bismark.nf +++ /dev/null @@ -1,122 +0,0 @@ -/* - * bismark subworkflow - */ -include { BISMARK_ALIGN } from '../../modules/nf-core/bismark/align/main' -include { SAMTOOLS_SORT as SAMTOOLS_SORT_ALIGNED } from '../../modules/nf-core/samtools/sort/main' -include { SAMTOOLS_SORT as SAMTOOLS_SORT_DEDUPLICATED } from '../../modules/nf-core/samtools/sort/main' -include { BISMARK_DEDUPLICATE } from '../../modules/nf-core/bismark/deduplicate/main' -include { BISMARK_METHYLATIONEXTRACTOR } from '../../modules/nf-core/bismark/methylationextractor/main' -include { BISMARK_COVERAGE2CYTOSINE } from '../../modules/nf-core/bismark/coverage2cytosine/main' -include { BISMARK_REPORT } from '../../modules/nf-core/bismark/report/main' -include { BISMARK_SUMMARY } from '../../modules/nf-core/bismark/summary/main' - -workflow BISMARK { - take: - reads // channel: [ val(meta), [ reads ] ] - bismark_index // channel: /path/to/BismarkIndex/ - skip_deduplication // boolean: whether to deduplicate alignments - cytosine_report // boolean: whether the run coverage2cytosine - - main: - versions = Channel.empty() - - - /* - * Align with bismark - */ - BISMARK_ALIGN ( - reads, - bismark_index - ) - versions = versions.mix(BISMARK_ALIGN.out.versions) - - /* - * Sort raw output BAM - */ - SAMTOOLS_SORT_ALIGNED( - BISMARK_ALIGN.out.bam, - ) - versions = versions.mix(SAMTOOLS_SORT_ALIGNED.out.versions) - - if (skip_deduplication) { - alignments = BISMARK_ALIGN.out.bam - alignment_reports = BISMARK_ALIGN.out.report.map{ meta, report -> [ meta, report, [] ] } - } else { - /* - * Run deduplicate_bismark - */ - BISMARK_DEDUPLICATE( BISMARK_ALIGN.out.bam ) - - alignments = BISMARK_DEDUPLICATE.out.bam - alignment_reports = BISMARK_ALIGN.out.report.join(BISMARK_DEDUPLICATE.out.report) - versions = versions.mix(BISMARK_DEDUPLICATE.out.versions) - } - - /* - * Run bismark_methylation_extractor - */ - BISMARK_METHYLATIONEXTRACTOR ( - alignments, - bismark_index - ) - versions = versions.mix(BISMARK_METHYLATIONEXTRACTOR.out.versions) - - - /* - * Run coverage2cytosine - */ - if (cytosine_report) { - BISMARK_COVERAGE2CYTOSINE ( - BISMARK_METHYLATIONEXTRACTOR.out.coverage, - bismark_index - ) - versions = versions.mix(BISMARK_COVERAGE2CYTOSINE.out.versions) - } - - /* - * Generate bismark sample reports - */ - BISMARK_REPORT ( - alignment_reports - .join(BISMARK_METHYLATIONEXTRACTOR.out.report) - .join(BISMARK_METHYLATIONEXTRACTOR.out.mbias) - ) - versions = versions.mix(BISMARK_REPORT.out.versions) - - /* - * Generate bismark summary report - */ - BISMARK_SUMMARY ( - BISMARK_ALIGN.out.bam.collect{ it[1].name }.ifEmpty([]), - alignment_reports.collect{ it[1] }.ifEmpty([]), - alignment_reports.collect{ it[2] }.ifEmpty([]), - BISMARK_METHYLATIONEXTRACTOR.out.report.collect{ it[1] }.ifEmpty([]), - BISMARK_METHYLATIONEXTRACTOR.out.mbias.collect{ it[1] }.ifEmpty([]) - ) - versions = versions.mix(BISMARK_SUMMARY.out.versions) - - /* - * MODULE: Run samtools sort - */ - SAMTOOLS_SORT_DEDUPLICATED ( - alignments - ) - versions = versions.mix(SAMTOOLS_SORT_DEDUPLICATED.out.versions) - - /* - * Collect MultiQC inputs - */ - BISMARK_SUMMARY.out.summary.ifEmpty([]) - .mix(alignment_reports.collect{ it[1] }) - .mix(alignment_reports.collect{ it[2] }) - .mix(BISMARK_METHYLATIONEXTRACTOR.out.report.collect{ it[1] }) - .mix(BISMARK_METHYLATIONEXTRACTOR.out.mbias.collect{ it[1] }) - .mix(BISMARK_REPORT.out.report.collect{ it[1] }) - .set{ multiqc_files } - - emit: - bam = SAMTOOLS_SORT_ALIGNED.out.bam // channel: [ val(meta), [ bam ] ] ## sorted, non-deduplicated (raw) BAM from aligner - dedup = SAMTOOLS_SORT_DEDUPLICATED.out.bam // channel: [ val(meta), [ bam ] ] ## sorted, possibly deduplicated BAM - mqc = multiqc_files // path: *{html,txt} - versions // path: *.version.txt -} diff --git a/subworkflows/local/bismark/main.nf b/subworkflows/local/bismark/main.nf new file mode 100644 index 00000000..e94c0692 --- /dev/null +++ b/subworkflows/local/bismark/main.nf @@ -0,0 +1,159 @@ +/* + * Bismark subworkflow + */ +include { BISMARK_ALIGN } from '../../../modules/nf-core/bismark/align/main' +include { SAMTOOLS_SORT as SAMTOOLS_SORT_ALIGNED } from '../../../modules/nf-core/samtools/sort/main' +include { SAMTOOLS_SORT as SAMTOOLS_SORT_DEDUPLICATED } from '../../../modules/nf-core/samtools/sort/main' +include { SAMTOOLS_INDEX as SAMTOOLS_INDEX_DEDUPLICATED } from '../../../modules/nf-core/samtools/index/main' +include { BISMARK_DEDUPLICATE } from '../../../modules/nf-core/bismark/deduplicate/main' +include { BISMARK_METHYLATIONEXTRACTOR } from '../../../modules/nf-core/bismark/methylationextractor/main' +include { BISMARK_COVERAGE2CYTOSINE } from '../../../modules/nf-core/bismark/coverage2cytosine/main' +include { BISMARK_REPORT } from '../../../modules/nf-core/bismark/report/main' +include { BISMARK_SUMMARY } from '../../../modules/nf-core/bismark/summary/main' + +workflow BISMARK { + take: + reads // channel: [ val(meta), [ reads ] ] + fasta // channel: /path/to/genome.fasta + bismark_index // channel: /path/to/BismarkIndex/ + skip_deduplication // boolean: whether to deduplicate alignments + cytosine_report // boolean: whether the run coverage2cytosine + + main: + + ch_versions = Channel.empty() + /* + * Align with bismark + */ + BISMARK_ALIGN ( + reads, + fasta, + bismark_index + ) + BISMARK_ALIGN.out.bam.dump(tag: 'BISMARK_ALIGN: bam') + BISMARK_ALIGN.out.report.dump(tag: 'BISMARK_ALIGN: report') + + ch_versions = ch_versions.mix(BISMARK_ALIGN.out.versions) + + /* + * Sort raw output BAM + */ + SAMTOOLS_SORT_ALIGNED( + BISMARK_ALIGN.out.bam, + [[:],[]] // Empty map and list as is optional input but required for nextflow + ) + SAMTOOLS_SORT_ALIGNED.out.bam.dump(tag: 'BISMARK/SAMTOOLS_SORT_ALIGNED: bam') + + ch_versions = ch_versions.mix(SAMTOOLS_SORT_ALIGNED.out.versions) + + if (skip_deduplication) { + alignments = BISMARK_ALIGN.out.bam + alignment_reports = BISMARK_ALIGN.out.report.map{ meta, report -> [ meta, report, [] ] } + + alignments.dump(tag: 'BISMARK/skip_deduplication: alignments') + alignment_reports.dump(tag: 'BISMARK/skip_deduplication: alignment_reports') + } else { + /* + * Run deduplicate_bismark + */ + BISMARK_DEDUPLICATE(BISMARK_ALIGN.out.bam) + + alignments = BISMARK_DEDUPLICATE.out.bam + alignment_reports = BISMARK_ALIGN.out.report.join(BISMARK_DEDUPLICATE.out.report) + ch_versions = ch_versions.mix(BISMARK_DEDUPLICATE.out.versions) + + alignments.dump(tag: 'BISMARK_DEDUPLICATE: alignments') + alignment_reports.dump(tag: 'BISMARK_DEDUPLICATE: alignment_reports') + } + + /* + * Run bismark_methylation_extractor + */ + BISMARK_METHYLATIONEXTRACTOR ( + alignments, + bismark_index + ) + BISMARK_METHYLATIONEXTRACTOR.out.report.dump(tag: 'BISMARK_METHYLATIONEXTRACTOR: report') + BISMARK_METHYLATIONEXTRACTOR.out.mbias.dump(tag: 'BISMARK_METHYLATIONEXTRACTOR: mbias') + + ch_versions = ch_versions.mix(BISMARK_METHYLATIONEXTRACTOR.out.versions) + + /* + * Run coverage2cytosine + */ + if (cytosine_report) { + BISMARK_COVERAGE2CYTOSINE ( + BISMARK_METHYLATIONEXTRACTOR.out.coverage, + fasta, + bismark_index + ) + BISMARK_COVERAGE2CYTOSINE.out.report.dump(tag: 'BISMARK_COVERAGE2CYTOSINE: report') + BISMARK_COVERAGE2CYTOSINE.out.coverage.dump(tag: 'BISMARK_COVERAGE2CYTOSINE: coverage') + BISMARK_COVERAGE2CYTOSINE.out.summary.dump(tag: 'BISMARK_COVERAGE2CYTOSINE: summary') + + ch_versions = ch_versions.mix(BISMARK_COVERAGE2CYTOSINE.out.versions) + } + + /* + * Generate bismark sample reports + */ + BISMARK_REPORT ( + alignment_reports + .join(BISMARK_METHYLATIONEXTRACTOR.out.report) + .join(BISMARK_METHYLATIONEXTRACTOR.out.mbias) + ) + BISMARK_REPORT.out.report.dump(tag: 'BISMARK_REPORT: report') + + ch_versions = ch_versions.mix(BISMARK_REPORT.out.versions) + + /* + * Generate bismark summary report + */ + BISMARK_SUMMARY ( + BISMARK_ALIGN.out.bam.collect{ it[1].name }.ifEmpty([]), + alignment_reports.collect{ it[1] }.ifEmpty([]), + alignment_reports.collect{ it[2] }.ifEmpty([]), + BISMARK_METHYLATIONEXTRACTOR.out.report.collect{ it[1] }.ifEmpty([]), + BISMARK_METHYLATIONEXTRACTOR.out.mbias.collect{ it[1] }.ifEmpty([]) + ) + BISMARK_SUMMARY.out.summary.dump(tag: 'BISMARK_REPORT: summary') + + ch_versions = ch_versions.mix(BISMARK_SUMMARY.out.versions) + + /* + * MODULE: Run samtools sort + */ + SAMTOOLS_SORT_DEDUPLICATED ( + alignments, + [[:],[]] // Empty map and list as is optional input but required for nextflow + ) + SAMTOOLS_SORT_DEDUPLICATED.out.bam.dump(tag: 'BISMARK/SAMTOOLS_SORT_DEDUPLICATED: bam') + + ch_versions = ch_versions.mix(SAMTOOLS_SORT_DEDUPLICATED.out.versions) + + /* + * MODULE: Run samtools index on dedup bam + */ + SAMTOOLS_INDEX_DEDUPLICATED(SAMTOOLS_SORT_DEDUPLICATED.out.bam) + + SAMTOOLS_INDEX_DEDUPLICATED.out.bai.dump(tag: 'BISMARK/SAMTOOLS_INDEX_DEDUPLICATED: bai') + + ch_versions = ch_versions.mix(SAMTOOLS_INDEX_DEDUPLICATED.out.versions) + + /* + * Collect MultiQC inputs + */ + BISMARK_SUMMARY.out.summary.ifEmpty([]) + .mix(alignment_reports.collect{ it[1] }) + .mix(alignment_reports.collect{ it[2] }) + .mix(BISMARK_METHYLATIONEXTRACTOR.out.report.collect{ it[1] }) + .mix(BISMARK_METHYLATIONEXTRACTOR.out.mbias.collect{ it[1] }) + .mix(BISMARK_REPORT.out.report.collect{ it[1] }) + .set{ multiqc_files } + + emit: + bam = SAMTOOLS_SORT_ALIGNED.out.bam // channel: [ val(meta), [ bam ] ] ## sorted, non-deduplicated (raw) BAM from aligner + dedup = SAMTOOLS_SORT_DEDUPLICATED.out.bam // channel: [ val(meta), [ bam ] ] ## sorted, possibly deduplicated BAM + mqc = multiqc_files // path: *{html,txt} + versions = ch_versions // path: *.version.txt +} diff --git a/subworkflows/local/bismark/nextflow.config b/subworkflows/local/bismark/nextflow.config new file mode 100644 index 00000000..d58d65ad --- /dev/null +++ b/subworkflows/local/bismark/nextflow.config @@ -0,0 +1,32 @@ + +includeConfig "../../../modules/nf-core/bismark/align/nextflow.config" +includeConfig "../../../modules/nf-core/samtools/sort/nextflow.config" +includeConfig "../../../modules/nf-core/bismark/deduplicate/nextflow.config" +includeConfig "../../../modules/nf-core/bismark/methylationextractor/nextflow.config" +includeConfig "../../../modules/nf-core/bismark/coverage2cytosine/nextflow.config" +includeConfig "../../../modules/nf-core/bismark/report/nextflow.config" +includeConfig "../../../modules/nf-core/bismark/summary/nextflow.config" + +process { + withName: SAMTOOLS_SORT_DEDUPLICATED { + ext.prefix = { "${meta.id}.deduplicated.sorted" } + publishDir = [ + [ + path: { "${params.outdir}/${params.aligner}/deduplicated/" }, + mode: params.publish_dir_mode, + pattern: "*.deduplicated.sorted.bam" + ] + ] + } + + withName: SAMTOOLS_INDEX_DEDUPLICATED { + ext.args = "" + publishDir = [ + [ + path: { "${params.outdir}/${params.aligner}/deduplicated/" }, + mode: params.publish_dir_mode, + pattern: "*.bai" + ] + ] + } +} diff --git a/subworkflows/local/bismark/tests/bismark_hisat.nf.test b/subworkflows/local/bismark/tests/bismark_hisat.nf.test new file mode 100644 index 00000000..1f1070b3 --- /dev/null +++ b/subworkflows/local/bismark/tests/bismark_hisat.nf.test @@ -0,0 +1,70 @@ +nextflow_workflow { + + name "Test Workflow BISMARK_HISAT" + script "../main.nf" + workflow "BISMARK" + config "../nextflow.config" + + setup { + run("UNTAR") { + script "../../../../modules/nf-core/untar/main.nf" + process { + """ + input[0] = [ + [:], + file(params.pipelines_testdata_base_path + 'reference/Hisat2_Index.tar.gz', checkIfExists: true) + ] + """ + } + } + } + + test("Bismark_Hisat | save_reference") { + + when { + params { + aligner = "bismark_hisat" + publish_dir_mode = 'copy' + unmapped = false + save_align_intermeds = false + skip_deduplication = false + cytosine_report = false + rrbs = false + nomeseq = false + slamseq = false + save_reference = true + outdir = "results" + } + workflow { + """ + + input[0] = Channel.of([ + [ id:'test', single_end:true ], + file(params.pipelines_testdata_base_path + 'testdata/SRR389222_sub1.fastq.gz', checkIfExists: true) + ]) + input[1] = Channel.of([ + [:], + file(params.pipelines_testdata_base_path + 'reference/genome.fa', checkIfExists: true) + ]) + input[2] = UNTAR.out.untar + input[3] = params.skip_deduplication + input[4] = params.cytosine_report + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { assert snapshot( + workflow.out.bam.collect { bam(it[1]).getReadsMD5() }, + workflow.out.dedup.collect { bam(it[1]).getReadsMD5() }, + //workflow.out.mqc, + workflow.out.versions + ).match() } + ) + } + + } + +} diff --git a/subworkflows/local/bismark/tests/bismark_hisat.nf.test.snap b/subworkflows/local/bismark/tests/bismark_hisat.nf.test.snap new file mode 100644 index 00000000..a531a2e7 --- /dev/null +++ b/subworkflows/local/bismark/tests/bismark_hisat.nf.test.snap @@ -0,0 +1,27 @@ +{ + "Bismark_Hisat | save_reference": { + "content": [ + [ + "3a6485d719fcaf868c7f95c8f10a3f3c" + ], + [ + "dae445da532c973dc9149f3ceba2d2c5" + ], + [ + "versions.yml:md5,2273d537ccb64f2260adeb6844523d73", + "versions.yml:md5,6a04613f312dd68246d992a7f6fa03a5", + "versions.yml:md5,c06f3e25000330e948f7a35708270f3f", + "versions.yml:md5,c2ad6c469b4d15c963f03b2228376a80", + "versions.yml:md5,cb4a7015750ef1e0e504c56acb72a799", + "versions.yml:md5,cb8dda62996be2045f2ad33831c6b74c", + "versions.yml:md5,cd3f634936e8c40265e766e5f5d07f15", + "versions.yml:md5,cfb4c81c53e84715cbf50b702a84e457" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-20T11:17:46.351442694" + } +} diff --git a/subworkflows/local/bismark/tests/main.nf.test b/subworkflows/local/bismark/tests/main.nf.test new file mode 100644 index 00000000..b38cbdbc --- /dev/null +++ b/subworkflows/local/bismark/tests/main.nf.test @@ -0,0 +1,70 @@ +nextflow_workflow { + + name "Test Workflow BISMARK" + script "../main.nf" + workflow "BISMARK" + config "../nextflow.config" + + setup { + run("UNTAR") { + script "../../../../modules/nf-core/untar/main.nf" + process { + """ + input[0] = [ + [:], + file(params.pipelines_testdata_base_path + 'reference/Bowtie2_Index.tar.gz', checkIfExists: true) + ] + """ + } + } + } + + test("Bismark | save_reference") { + + when { + params { + aligner = "bismark" + publish_dir_mode = 'copy' + unmapped = false + save_align_intermeds = false + skip_deduplication = false + cytosine_report = false + rrbs = false + nomeseq = false + slamseq = false + save_reference = true + outdir = "results" + } + workflow { + """ + + input[0] = Channel.of([ + [ id:'test', single_end:true ], + file(params.pipelines_testdata_base_path + 'testdata/SRR389222_sub1.fastq.gz', checkIfExists: true) + ]) + input[1] = Channel.of([ + [:], + file(params.pipelines_testdata_base_path + 'reference/genome.fa', checkIfExists: true) + ]) + input[2] = UNTAR.out.untar + input[3] = params.skip_deduplication + input[4] = params.cytosine_report + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { assert snapshot( + workflow.out.bam.collect { bam(it[1]).getReadsMD5() }, + workflow.out.dedup.collect { bam(it[1]).getReadsMD5() }, + //workflow.out.mqc, + workflow.out.versions + ).match() } + ) + } + + } + +} diff --git a/subworkflows/local/bismark/tests/main.nf.test.snap b/subworkflows/local/bismark/tests/main.nf.test.snap new file mode 100644 index 00000000..6757ea79 --- /dev/null +++ b/subworkflows/local/bismark/tests/main.nf.test.snap @@ -0,0 +1,27 @@ +{ + "Bismark | save_reference": { + "content": [ + [ + "d6951f6d3381e22becf62553a37c0f3f" + ], + [ + "35d55bee1ca653931716e40dac4aba30" + ], + [ + "versions.yml:md5,2273d537ccb64f2260adeb6844523d73", + "versions.yml:md5,6a04613f312dd68246d992a7f6fa03a5", + "versions.yml:md5,c06f3e25000330e948f7a35708270f3f", + "versions.yml:md5,c2ad6c469b4d15c963f03b2228376a80", + "versions.yml:md5,cb4a7015750ef1e0e504c56acb72a799", + "versions.yml:md5,cb8dda62996be2045f2ad33831c6b74c", + "versions.yml:md5,cd3f634936e8c40265e766e5f5d07f15", + "versions.yml:md5,cfb4c81c53e84715cbf50b702a84e457" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-20T11:14:29.732866935" + } +} diff --git a/subworkflows/local/bwameth.nf b/subworkflows/local/bwameth.nf deleted file mode 100644 index 5004d8b9..00000000 --- a/subworkflows/local/bwameth.nf +++ /dev/null @@ -1,113 +0,0 @@ -/* - * bwameth subworkflow - */ -include { SAMTOOLS_STATS } from '../../modules/nf-core/samtools/stats/main' -include { SAMTOOLS_FLAGSTAT } from '../../modules/nf-core/samtools/flagstat/main' -include { SAMTOOLS_INDEX as SAMTOOLS_INDEX_ALIGNMENTS } from '../../modules/nf-core/samtools/index/main' -include { SAMTOOLS_INDEX as SAMTOOLS_INDEX_DEDUPLICATED } from '../../modules/nf-core/samtools/index/main' -include { SAMTOOLS_SORT } from '../../modules/nf-core/samtools/sort/main' -include { PICARD_MARKDUPLICATES } from '../../modules/nf-core/picard/markduplicates/main' -include { BWAMETH_ALIGN } from '../../modules/nf-core/bwameth/align/main' -include { METHYLDACKEL_EXTRACT } from '../../modules/nf-core/methyldackel/extract/main' -include { METHYLDACKEL_MBIAS } from '../../modules/nf-core/methyldackel/mbias/main' - -workflow BWAMETH { - take: - reads // channel: [ val(meta), [ reads ] ] - bwameth_index // channel: /path/to/bwa_index/ - fasta // channel: /path/to/genome.fa - fasta_index // channel: /path/to/genome.fa.fai - skip_deduplication // boolean: whether to deduplicate alignments - - main: - versions = Channel.empty() - - /* - * Align with bwameth - */ - BWAMETH_ALIGN ( - reads, - bwameth_index - ) - versions = versions.mix(BWAMETH_ALIGN.out.versions) - - /* - * Sort raw output BAM - */ - SAMTOOLS_SORT (BWAMETH_ALIGN.out.bam) - versions = versions.mix(SAMTOOLS_SORT.out.versions) - - /* - * Run samtools index on alignment - */ - SAMTOOLS_INDEX_ALIGNMENTS (SAMTOOLS_SORT.out.bam) - versions = versions.mix(SAMTOOLS_INDEX_ALIGNMENTS.out.versions) - - /* - * Run samtools flagstat and samtools stats - */ - SAMTOOLS_FLAGSTAT( BWAMETH_ALIGN.out.bam.join(SAMTOOLS_INDEX_ALIGNMENTS.out.bai) ) - SAMTOOLS_STATS( BWAMETH_ALIGN.out.bam.join(SAMTOOLS_INDEX_ALIGNMENTS.out.bai), [] ) - versions = versions.mix(SAMTOOLS_FLAGSTAT.out.versions) - versions = versions.mix(SAMTOOLS_STATS.out.versions) - - if (skip_deduplication) { - alignments = SAMTOOLS_SORT.out.bam - bam_index = SAMTOOLS_INDEX_ALIGNMENTS.out.bai - picard_metrics = Channel.empty() - picard_version = Channel.empty() - } else { - /* - * Run Picard MarkDuplicates - */ - PICARD_MARKDUPLICATES ( - SAMTOOLS_SORT.out.bam, - fasta, - fasta_index - ) - /* - * Run samtools index on deduplicated alignment - */ - SAMTOOLS_INDEX_DEDUPLICATED (PICARD_MARKDUPLICATES.out.bam) - - alignments = PICARD_MARKDUPLICATES.out.bam - bam_index = SAMTOOLS_INDEX_DEDUPLICATED.out.bai - picard_metrics = PICARD_MARKDUPLICATES.out.metrics - picard_version = PICARD_MARKDUPLICATES.out.versions - versions = versions.mix(PICARD_MARKDUPLICATES.out.versions) - } - - - /* - * Extract per-base methylation and plot methylation bias - */ - - METHYLDACKEL_EXTRACT( - alignments.join(bam_index), - fasta, - fasta_index - ) - METHYLDACKEL_MBIAS( - alignments.join(bam_index), - fasta, - fasta_index - ) - versions = versions.mix(METHYLDACKEL_EXTRACT.out.versions) - versions = versions.mix(METHYLDACKEL_MBIAS.out.versions) - - /* - * Collect MultiQC inputs - */ - picard_metrics.collect{ it[1] } - .mix(SAMTOOLS_FLAGSTAT.out.flagstat.collect{ it[1] }) - .mix(SAMTOOLS_STATS.out.stats.collect{ it[1] }) - .mix(METHYLDACKEL_EXTRACT.out.bedgraph.collect{ it[1] }) - .mix(METHYLDACKEL_MBIAS.out.txt.collect{ it[1] }) - .set{ multiqc_files } - - emit: - bam = SAMTOOLS_SORT.out.bam // channel: [ val(meta), [ bam ] ] ## sorted, non-deduplicated (raw) BAM from aligner - dedup = alignments // channel: [ val(meta), [ bam ] ] ## sorted, possibly deduplicated BAM - mqc = multiqc_files // path: *{html,txt} - versions // path: *.version.txt -} diff --git a/subworkflows/local/bwameth/main.nf b/subworkflows/local/bwameth/main.nf new file mode 100644 index 00000000..11c60eae --- /dev/null +++ b/subworkflows/local/bwameth/main.nf @@ -0,0 +1,136 @@ +/* + * bwameth subworkflow + */ +include { BWAMETH_ALIGN } from '../../../modules/nf-core/bwameth/align/main' +include { SAMTOOLS_SORT } from '../../../modules/nf-core/samtools/sort/main' +include { SAMTOOLS_INDEX as SAMTOOLS_INDEX_ALIGNMENTS } from '../../../modules/nf-core/samtools/index/main' +include { SAMTOOLS_FLAGSTAT } from '../../../modules/nf-core/samtools/flagstat/main' +include { SAMTOOLS_STATS } from '../../../modules/nf-core/samtools/stats/main' +include { PICARD_MARKDUPLICATES } from '../../../modules/nf-core/picard/markduplicates/main' +include { SAMTOOLS_INDEX as SAMTOOLS_INDEX_DEDUPLICATED } from '../../../modules/nf-core/samtools/index/main' +include { METHYLDACKEL_EXTRACT } from '../../../modules/nf-core/methyldackel/extract/main' +include { METHYLDACKEL_MBIAS } from '../../../modules/nf-core/methyldackel/mbias/main' + +workflow BWAMETH { + take: + reads // channel: [ val(meta), [ reads ] ] + bwameth_index // channel: /path/to/bwa_index/ + fasta // channel: /path/to/genome.fa + fasta_index // channel: /path/to/genome.fa.fai + skip_deduplication // boolean: whether to deduplicate alignments + + main: + ch_versions = Channel.empty() + + /* + * Align with bwameth + */ + BWAMETH_ALIGN ( + reads, + fasta, + bwameth_index + ) + BWAMETH_ALIGN.out.bam.dump(tag: 'BWAMETH_ALIGN: bam') + + ch_versions = ch_versions.mix(BWAMETH_ALIGN.out.versions) + + /* + * Sort raw output BAM + */ + SAMTOOLS_SORT ( + BWAMETH_ALIGN.out.bam, + [[:],[]] // Empty map and list as is optional input but required for nextflow + ) + SAMTOOLS_SORT.out.bam.dump(tag: 'BWAMETH/SAMTOOLS_SORT: bam') + + ch_versions = ch_versions.mix(SAMTOOLS_SORT.out.versions) + + /* + * Run samtools index on alignment + */ + SAMTOOLS_INDEX_ALIGNMENTS (SAMTOOLS_SORT.out.bam) + SAMTOOLS_INDEX_ALIGNMENTS.out.bai.dump(tag: 'BWAMETH/SAMTOOLS_INDEX_ALIGNMENTS: bai') + + ch_versions = ch_versions.mix(SAMTOOLS_INDEX_ALIGNMENTS.out.versions) + + /* + * Run samtools flagstat and samtools stats + */ + SAMTOOLS_FLAGSTAT(BWAMETH_ALIGN.out.bam.join(SAMTOOLS_INDEX_ALIGNMENTS.out.bai)) + SAMTOOLS_FLAGSTAT.out.flagstat.dump(tag: 'BWAMETH/SAMTOOLS_FLAGSTAT: flagstat') + + SAMTOOLS_STATS( + BWAMETH_ALIGN.out.bam.join(SAMTOOLS_INDEX_ALIGNMENTS.out.bai), + [[:],[]] + ) + SAMTOOLS_STATS.out.stats.dump(tag: 'BWAMETH/SAMTOOLS_STATS: flagstat') + + ch_versions = ch_versions.mix(SAMTOOLS_FLAGSTAT.out.versions) + ch_versions = ch_versions.mix(SAMTOOLS_STATS.out.versions) + + if (skip_deduplication) { + alignments = SAMTOOLS_SORT.out.bam + bam_index = SAMTOOLS_INDEX_ALIGNMENTS.out.bai + picard_metrics = Channel.empty() + picard_version = Channel.empty() + } else { + /* + * Run Picard MarkDuplicates + */ + PICARD_MARKDUPLICATES ( + SAMTOOLS_SORT.out.bam, + fasta, + fasta_index.map{ fasta_index -> [[:], fasta_index]}, + ) + PICARD_MARKDUPLICATES.out.bam.dump(tag: 'BWAMETH/PICARD_MARKDUPLICATES: bam') + /* + * Run samtools index on deduplicated alignment + */ + SAMTOOLS_INDEX_DEDUPLICATED (PICARD_MARKDUPLICATES.out.bam) + + alignments = PICARD_MARKDUPLICATES.out.bam + bam_index = SAMTOOLS_INDEX_DEDUPLICATED.out.bai + picard_metrics = PICARD_MARKDUPLICATES.out.metrics + picard_version = PICARD_MARKDUPLICATES.out.versions + ch_versions = ch_versions.mix(PICARD_MARKDUPLICATES.out.versions) + } + + + /* + * Extract per-base methylation and plot methylation bias + */ + + METHYLDACKEL_EXTRACT( + alignments.join(bam_index), + fasta.map{ meta, fasta_file -> [fasta_file]}, + fasta_index + ) + METHYLDACKEL_EXTRACT.out.bedgraph.dump(tag: 'BWAMETH/METHYLDACKEL_EXTRACT: bedgraph') + METHYLDACKEL_EXTRACT.out.methylkit.dump(tag: 'BWAMETH/METHYLDACKEL_EXTRACT: methylkit') + + METHYLDACKEL_MBIAS( + alignments.join(bam_index), + fasta.map{ meta, fasta_file -> [fasta_file]}, + fasta_index + ) + METHYLDACKEL_MBIAS.out.txt.dump(tag: 'BWAMETH/METHYLDACKEL_MBIAS: txt') + + ch_versions = ch_versions.mix(METHYLDACKEL_EXTRACT.out.versions) + ch_versions = ch_versions.mix(METHYLDACKEL_MBIAS.out.versions) + + /* + * Collect MultiQC inputs + */ + picard_metrics.collect{ it[1] } + .mix(SAMTOOLS_FLAGSTAT.out.flagstat.collect{ it[1] }) + .mix(SAMTOOLS_STATS.out.stats.collect{ it[1] }) + .mix(METHYLDACKEL_EXTRACT.out.bedgraph.collect{ it[1] }) + .mix(METHYLDACKEL_MBIAS.out.txt.collect{ it[1] }) + .set{ multiqc_files } + + emit: + bam = SAMTOOLS_SORT.out.bam // channel: [ val(meta), [ bam ] ] ## sorted, non-deduplicated (raw) BAM from aligner + dedup = alignments // channel: [ val(meta), [ bam ] ] ## sorted, possibly deduplicated BAM + mqc = multiqc_files // path: *{html,txt} + versions = ch_versions // path: *.version.txt +} diff --git a/subworkflows/local/bwameth/nextflow.config b/subworkflows/local/bwameth/nextflow.config new file mode 100644 index 00000000..4eff78d7 --- /dev/null +++ b/subworkflows/local/bwameth/nextflow.config @@ -0,0 +1,36 @@ + +includeConfig "../../../modules/nf-core/bwameth/align/nextflow.config" +includeConfig "../../../modules/nf-core/samtools/sort/nextflow.config" + +includeConfig "../../../modules/nf-core/samtools/flagstat/nextflow.config" +includeConfig "../../../modules/nf-core/samtools/stats/nextflow.config" +includeConfig "../../../modules/nf-core/picard/markduplicates/nextflow.config" +includeConfig "../../../modules/nf-core/methyldackel/extract/nextflow.config" +includeConfig "../../../modules/nf-core/methyldackel/mbias/nextflow.config" + +process { + + withName: SAMTOOLS_INDEX_ALIGNMENTS { + ext.args = "" + publishDir = [ + [ + path: { "${params.outdir}/${params.aligner}/alignments/" }, + mode: params.publish_dir_mode, + pattern: "*.bam.bai", + enabled: params.save_align_intermeds + ] + ] + } + + withName: SAMTOOLS_INDEX_DEDUPLICATED { + ext.args = "" + publishDir = [ + [ + path: { "${params.outdir}/${params.aligner}/deduplicated/" }, + mode: params.publish_dir_mode, + pattern: "*.bam.bai" + ] + ] + } + +} diff --git a/subworkflows/local/bwameth/tests/main.nf.test b/subworkflows/local/bwameth/tests/main.nf.test new file mode 100644 index 00000000..21aadf8a --- /dev/null +++ b/subworkflows/local/bwameth/tests/main.nf.test @@ -0,0 +1,68 @@ +nextflow_workflow { + + name "Test Workflow BWAMETH" + script "../main.nf" + workflow "BWAMETH" + config "../nextflow.config" + + setup { + run("UNTAR") { + script "../../../../modules/nf-core/untar/main.nf" + process { + """ + input[0] = [ + [:], + file(params.pipelines_testdata_base_path + 'reference/Bwameth_Index.tar.gz', checkIfExists: true) + ] + """ + } + } + } + + test("Bwameth | save_reference") { + + when { + params { + aligner = "bwameth" + publish_dir_mode = 'copy' + outdir = "results" + save_reference = true + save_align_intermeds = false + min_depth = 0 + comprehensive = false + ignore_flags = false + methyl_kit = false + skip_deduplication = false + } + workflow { + """ + input[0] = Channel.of([ + [ id:'test', single_end:true ], + file(params.pipelines_testdata_base_path + 'testdata/SRR389222_sub1.fastq.gz', checkIfExists: true) + ]) + input[1] = UNTAR.out.untar + input[2] = Channel.of([ + [:], + file(params.pipelines_testdata_base_path + 'reference/genome.fa', checkIfExists: true) + ]) + input[3] = Channel.of(file(params.pipelines_testdata_base_path + 'reference/genome.fa.fai', checkIfExists: true)) + input[4] = params.skip_deduplication + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { assert snapshot( + workflow.out.bam.collect { bam(it[1]).getReadsMD5() }, + workflow.out.dedup.collect { bam(it[1]).getReadsMD5() }, + //workflow.out.mqc, + workflow.out.versions + ).match() } + ) + } + + } + +} diff --git a/subworkflows/local/bwameth/tests/main.nf.test.snap b/subworkflows/local/bwameth/tests/main.nf.test.snap new file mode 100644 index 00000000..3834e919 --- /dev/null +++ b/subworkflows/local/bwameth/tests/main.nf.test.snap @@ -0,0 +1,27 @@ +{ + "Bwameth | save_reference": { + "content": [ + [ + "37ec1c6338cc3fee7ab1cb2d48dba38" + ], + [ + "37ec1c6338cc3fee7ab1cb2d48dba38" + ], + [ + "versions.yml:md5,0906211fa5d0f6fd287c24407a882ae6", + "versions.yml:md5,204d3bc1f6fff3c1f7ea1f014f256fd7", + "versions.yml:md5,2b54b53cdedbbd547bc6bc3623dcc622", + "versions.yml:md5,38a8061118fdcb6215a31e60419df107", + "versions.yml:md5,5e8c932b160898dbcf29469f4ea6c978", + "versions.yml:md5,88592f164662fc6e5389899dbf472f53", + "versions.yml:md5,b935a799534fa7094fe81a723df04ecf", + "versions.yml:md5,c3658cdda0f57c6d7f0c57e820921eb4" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-21T18:23:18.006459111" + } +} \ No newline at end of file diff --git a/subworkflows/local/prepare_genome.nf b/subworkflows/local/prepare_genome.nf deleted file mode 100644 index 877541ea..00000000 --- a/subworkflows/local/prepare_genome.nf +++ /dev/null @@ -1,80 +0,0 @@ -// -// Prepare reference genome files -// - -include { UNTAR } from '../../modules/nf-core/untar/main' -include { BISMARK_GENOMEPREPARATION } from '../../modules/nf-core/bismark/genomepreparation/main' -include { BWAMETH_INDEX } from '../../modules/nf-core/bwameth/index/main' -include { SAMTOOLS_FAIDX } from '../../modules/nf-core/samtools/faidx/main' - -workflow PREPARE_GENOME { - - main: - ch_versions = Channel.empty() - ch_fasta = Channel.empty() - ch_bismark_index = Channel.empty() - ch_bwameth_index = Channel.empty() - ch_fasta_index = Channel.empty() - - // FASTA, if supplied - if (params.fasta) { - ch_fasta = Channel.value(file(params.fasta)) - } - - // Aligner: bismark or bismark_hisat - if( params.aligner =~ /bismark/ ){ - - /* - * Generate bismark index if not supplied - */ - if (params.bismark_index) { - if (params.bismark_index.endsWith('.gz')) { - ch_bismark_index = UNTAR ( [ [:], file(params.bismark_index) ] ).untar.map { it[1] } - } else { - ch_bismark_index = Channel.value(file(params.bismark_index)) - } - } else { - BISMARK_GENOMEPREPARATION(ch_fasta) - ch_bismark_index = BISMARK_GENOMEPREPARATION.out.index - ch_versions = ch_versions.mix(BISMARK_GENOMEPREPARATION.out.versions) - } - - } - // Aligner: bwameth - else if ( params.aligner == 'bwameth' ){ - - /* - * Generate bwameth index if not supplied - */ - if (params.bwa_meth_index) { - if (params.bwa_meth_index.endsWith('.tar.gz')) { - ch_bismark_index = UNTAR ( [ [:], file(params.bwa_meth_index) ] ).untar.map { it[1] } - } else { - ch_bismark_index = Channel.value(file(params.bwa_meth_index)) - } - } else { - BWAMETH_INDEX(ch_fasta) - ch_bwameth_index = BWAMETH_INDEX.out.index - ch_versions = ch_versions.mix(BWAMETH_INDEX.out.versions) - } - - /* - * Generate fasta index if not supplied - */ - if (params.fasta_index) { - ch_fasta_index = Channel.value(file(params.fasta_index)) - } else { - SAMTOOLS_FAIDX([[:], ch_fasta]) - ch_fasta_index = SAMTOOLS_FAIDX.out.fai.map{ return(it[1])} - ch_versions = ch_versions.mix(SAMTOOLS_FAIDX.out.versions) - } - } - - emit: - fasta = ch_fasta // channel: path(genome.fasta) - bismark_index = ch_bismark_index // channel: path(genome.fasta) - bwameth_index = ch_bwameth_index // channel: path(genome.fasta) - fasta_index = ch_fasta_index // channel: path(genome.fasta) - versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] - -} diff --git a/subworkflows/local/prepare_genome/main.nf b/subworkflows/local/prepare_genome/main.nf new file mode 100644 index 00000000..8f8523a1 --- /dev/null +++ b/subworkflows/local/prepare_genome/main.nf @@ -0,0 +1,108 @@ +// +// Prepare reference genome files +// + +include { UNTAR } from '../../../modules/nf-core/untar/main' +include { GUNZIP } from '../../../modules/nf-core/gunzip/main' +include { BISMARK_GENOMEPREPARATION } from '../../../modules/nf-core/bismark/genomepreparation/main' +include { BWAMETH_INDEX } from '../../../modules/nf-core/bwameth/index/main' +include { SAMTOOLS_FAIDX } from '../../../modules/nf-core/samtools/faidx/main' + +workflow PREPARE_GENOME { + take: + fasta // file: /path/to/genome.fasta + fasta_index // file: /path/to/genome.fasta.fai + bismark_index // directory: /path/to/bismark/index/ + bwameth_index // directory: /path/to/bwameth/index/ + + main: + ch_versions = Channel.empty() + ch_fasta = Channel.empty() + ch_fasta_index = Channel.empty() + ch_bismark_index = Channel.empty() + ch_bwameth_index = Channel.empty() + + // FASTA, if supplied + if (fasta.endsWith('.gz')) { + ch_fasta = GUNZIP ([ [:], file(fasta, checkIfExists: true) ]).gunzip.map { it[1] } + ch_versions = ch_versions.mix(GUNZIP.out.versions) + } else { + ch_fasta = Channel.value([[:], file(fasta, checkIfExists: true)]) + } + ch_fasta.dump(tag: 'PREPARE_GENOME: ch_fasta') + + // Aligner: bismark or bismark_hisat + if( params.aligner =~ /bismark/ ){ + /* + * Generate bismark index if not supplied + */ + if (bismark_index) { + if (bismark_index.endsWith('.gz')) { + ch_bismark_index = UNTAR ([ [:], file(bismark_index) ]).untar + ch_bismark_index.dump(tag: 'PREPARE_GENOME/UNTAR: ch_bismark_index') + + ch_versions = ch_versions.mix(UNTAR.out.versions) + } else { + ch_bismark_index = Channel.value([[:], file(bismark_index, checkIfExists: true)]) + ch_bismark_index.dump(tag: 'PREPARE_GENOME: ch_bismark_index') + } + } else { + BISMARK_GENOMEPREPARATION(ch_fasta) + + ch_bismark_index = BISMARK_GENOMEPREPARATION.out.index + ch_bismark_index.dump(tag: 'PREPARE_GENOME: ch_bismark_index') + + ch_versions = ch_versions.mix(BISMARK_GENOMEPREPARATION.out.versions) + } + + } + // Aligner: bwameth + else if ( params.aligner == 'bwameth' ){ + /* + * Generate bwameth index if not supplied + */ + if (bwameth_index) { + if (bwameth_index.endsWith('.tar.gz')) { + ch_bwameth_index = UNTAR ([ [:], file(bwameth_index, checkIfExists: true) ]).untar + ch_bwameth_index.dump(tag: 'PREPARE_GENOME/UNTAR: ch_bwameth_index') + + ch_versions = ch_versions.mix(UNTAR.out.versions) + } else { + ch_bwameth_index = Channel.value([[:], file(bwameth_index, checkIfExists: true)]) + ch_bwameth_index.dump(tag: 'PREPARE_GENOME: ch_bwameth_index') + } + } else { + BWAMETH_INDEX(ch_fasta) + + ch_bwameth_index = BWAMETH_INDEX.out.index + ch_bwameth_index.dump(tag: 'PREPARE_GENOME: ch_bwameth_index') + + ch_versions = ch_versions.mix(BWAMETH_INDEX.out.versions) + } + + /* + * Generate fasta index if not supplied + */ + if (fasta_index) { + ch_fasta_index = Channel.value(file(fasta_index, checkIfExists: true)) + ch_fasta_index.dump(tag: 'PREPARE_GENOME: ch_fasta_index') + } else { + SAMTOOLS_FAIDX( + ch_fasta, + [[:], []] + ) + ch_fasta_index = SAMTOOLS_FAIDX.out.fai.map{ return(it[1])} + ch_fasta_index.dump(tag: 'PREPARE_GENOME: ch_fasta_index') + + ch_versions = ch_versions.mix(SAMTOOLS_FAIDX.out.versions) + } + } + + emit: + fasta = ch_fasta // channel: path(genome.fasta) + bismark_index = ch_bismark_index // channel: path(genome.fasta) + bwameth_index = ch_bwameth_index // channel: path(genome.fasta) + fasta_index = ch_fasta_index // channel: path(genome.fasta) + versions = ch_versions // channel: [ versions.yml ] + +} diff --git a/subworkflows/local/prepare_genome/nextflow.config b/subworkflows/local/prepare_genome/nextflow.config new file mode 100644 index 00000000..39f3f167 --- /dev/null +++ b/subworkflows/local/prepare_genome/nextflow.config @@ -0,0 +1,4 @@ + +includeConfig "../../../modules/nf-core/bismark/genomepreparation/nextflow.config" +includeConfig "../../../modules/nf-core/samtools/faidx/nextflow.config" +includeConfig "../../../modules/nf-core/bwameth/index/nextflow.config" diff --git a/subworkflows/local/prepare_genome/tests/main.nf.test b/subworkflows/local/prepare_genome/tests/main.nf.test new file mode 100644 index 00000000..c7f20b6a --- /dev/null +++ b/subworkflows/local/prepare_genome/tests/main.nf.test @@ -0,0 +1,105 @@ +nextflow_workflow { + + name "Test Workflow PREPARE_GENOME" + script "../main.nf" + workflow "PREPARE_GENOME" + config "../nextflow.config" + + test("Generate Bismark Index (bowtie2)") { + + when { + params { + aligner = "bismark" + publish_dir_mode = copy + save_reference = false + slamseq = false + } + workflow { + """ + input[0] = file(params.pipelines_testdata_base_path + 'reference/genome.fa', checkIfExists: true) // fasta + input[1] = [] // fasta_index + input[2] = [] // bismark_index + input[3] = [] // bwameth_index + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { assert snapshot( + workflow.out.fasta, + workflow.out.bismark_index, + workflow.out.versions + ).match() } + ) + } + + } + + test("Generate Bismark Index (hisat2)") { + + when { + params { + aligner = "bismark_hisat" + publish_dir_mode = copy + save_reference = false + slamseq = false + } + workflow { + """ + input[0] = file(params.pipelines_testdata_base_path + 'reference/genome.fa', checkIfExists: true) // fasta + input[1] = [] // fasta_index + input[2] = [] // bismark_index + input[3] = [] // bwameth_index + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { assert snapshot( + workflow.out.fasta, + workflow.out.bismark_index, + workflow.out.versions + ).match() } + ) + } + + } + + test("Generate Bwameth Index") { + + when { + params { + aligner = "bwameth" + publish_dir_mode = copy + save_reference = false + slamseq = false + } + workflow { + """ + input[0] = file(params.pipelines_testdata_base_path + 'reference/genome.fa', checkIfExists: true) // fasta + input[1] = [] // fasta_index + input[2] = [] // bismark_index + input[3] = [] // bwameth_index + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { assert snapshot( + workflow.out.fasta, + workflow.out.fasta_index, + workflow.out.bwameth_index, + workflow.out.versions + ).match() } + ) + } + + } + +} diff --git a/subworkflows/local/prepare_genome/tests/main.nf.test.snap b/subworkflows/local/prepare_genome/tests/main.nf.test.snap new file mode 100644 index 00000000..73d4db88 --- /dev/null +++ b/subworkflows/local/prepare_genome/tests/main.nf.test.snap @@ -0,0 +1,143 @@ +{ + "Generate Bismark Index (hisat2)": { + "content": [ + [ + [ + { + + }, + "/nf-core/test-datasets/raw/methylseq/reference/genome.fa" + ] + ], + [ + [ + { + + }, + [ + [ + [ + "BS_CT.1.ht2:md5,273c7686fc1dc7d93e36433592367f81", + "BS_CT.2.ht2:md5,752a03fc364115fc910e5a28ae154382", + "BS_CT.3.ht2:md5,b41e72eefad74e8ede411c78a5bd5dee", + "BS_CT.4.ht2:md5,02b3d1855a67fd9cbb4c411406a22fde", + "BS_CT.5.ht2:md5,d117de4c2c910a1ae7f0459c11ba6018", + "BS_CT.6.ht2:md5,4097a785a8d1ca92489d83b4c613a50b", + "BS_CT.7.ht2:md5,9013eccd91ad614d7893c739275a394f", + "BS_CT.8.ht2:md5,33cdeccccebe80329f1fdbee7f5874cb", + "genome_mfa.CT_conversion.fa:md5,4dd181b65f1f3549f4132c9a3759eee8" + ], + [ + "BS_GA.1.ht2:md5,c2b02b7987f4ac0578332204678674cd", + "BS_GA.2.ht2:md5,579241d95941538b2e75bbdb6cfaa73d", + "BS_GA.3.ht2:md5,b41e72eefad74e8ede411c78a5bd5dee", + "BS_GA.4.ht2:md5,6b64fa496ffa2af2af235e1c87f06a25", + "BS_GA.5.ht2:md5,43aa1c78c6ec18c4165cf25159578fee", + "BS_GA.6.ht2:md5,2dc0f049d7d0f2a51822df8b195dce41", + "BS_GA.7.ht2:md5,9013eccd91ad614d7893c739275a394f", + "BS_GA.8.ht2:md5,33cdeccccebe80329f1fdbee7f5874cb", + "genome_mfa.GA_conversion.fa:md5,3dee732bc344fd620c3a7322f52c6a5f" + ] + ] + ] + ] + ], + [ + "versions.yml:md5,8e4e91d03b368e548eeafee8dd263e70" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-20T15:44:14.403574883" + }, + "Generate Bwameth Index": { + "content": [ + [ + [ + { + + }, + "/nf-core/test-datasets/raw/methylseq/reference/genome.fa" + ] + ], + [ + "genome.fa.fai:md5,84f5b44c25877ac58b154706cc8bc451" + ], + [ + [ + { + + }, + [ + "genome.fa.bwameth.c2t:md5,e51d48ed28fa0c26e2f9c9f13d09403b", + "genome.fa.bwameth.c2t.amb:md5,010a242c6764efb30141868a45d698b3", + "genome.fa.bwameth.c2t.ann:md5,09b4db3d87a2d4dac9e10e807f377110", + "genome.fa.bwameth.c2t.bwt:md5,4646f8ae6bd523b7f4106bbd32eff95e", + "genome.fa.bwameth.c2t.pac:md5,a662d7add09698e25c8152fd2306ec66", + "genome.fa.bwameth.c2t.sa:md5,4a1e905b828396a1909669bc9c573d8d" + ] + ] + ], + [ + "versions.yml:md5,7303f194674b485c6914e28422822a12", + "versions.yml:md5,cb3f3b6e54f9a7b3b6d4f5f875e89442" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-20T11:27:38.06274051" + }, + "Generate Bismark Index (bowtie2)": { + "content": [ + [ + [ + { + + }, + "/nf-core/test-datasets/raw/methylseq/reference/genome.fa" + ] + ], + [ + [ + { + + }, + [ + [ + [ + "BS_CT.1.bt2:md5,d53bef7d951c7d08e327944581c911eb", + "BS_CT.2.bt2:md5,752a03fc364115fc910e5a28ae154382", + "BS_CT.3.bt2:md5,b41e72eefad74e8ede411c78a5bd5dee", + "BS_CT.4.bt2:md5,02b3d1855a67fd9cbb4c411406a22fde", + "BS_CT.rev.1.bt2:md5,52ae603fff473b3b25eecd36c533edb9", + "BS_CT.rev.2.bt2:md5,0e290e05f7dae065cae54e29ed97afe5", + "genome_mfa.CT_conversion.fa:md5,4dd181b65f1f3549f4132c9a3759eee8" + ], + [ + "BS_GA.1.bt2:md5,9aff51b1712758b891b0c427a988977f", + "BS_GA.2.bt2:md5,579241d95941538b2e75bbdb6cfaa73d", + "BS_GA.3.bt2:md5,b41e72eefad74e8ede411c78a5bd5dee", + "BS_GA.4.bt2:md5,6b64fa496ffa2af2af235e1c87f06a25", + "BS_GA.rev.1.bt2:md5,dabf2d6f80ba7e8fc96dfdc203f6bbfd", + "BS_GA.rev.2.bt2:md5,fac2f8b39b0e15dec7aa79a0ecf12b49", + "genome_mfa.GA_conversion.fa:md5,3dee732bc344fd620c3a7322f52c6a5f" + ] + ] + ] + ] + ], + [ + "versions.yml:md5,8e4e91d03b368e548eeafee8dd263e70" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-20T11:27:14.196959225" + } +} \ No newline at end of file diff --git a/subworkflows/local/utils_nfcore_methylseq_pipeline/main.nf b/subworkflows/local/utils_nfcore_methylseq_pipeline/main.nf new file mode 100644 index 00000000..f242fc0a --- /dev/null +++ b/subworkflows/local/utils_nfcore_methylseq_pipeline/main.nf @@ -0,0 +1,267 @@ +// +// Subworkflow with functionality specific to the nf-core/methylseq pipeline +// + +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + IMPORT FUNCTIONS / MODULES / SUBWORKFLOWS +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +*/ + +include { UTILS_NFSCHEMA_PLUGIN } from '../../nf-core/utils_nfschema_plugin' +include { paramsSummaryMap } from 'plugin/nf-schema' +include { samplesheetToList } 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_NEXTFLOW_PIPELINE } from '../../nf-core/utils_nextflow_pipeline' +include { UTILS_NFCORE_PIPELINE } from '../../nf-core/utils_nfcore_pipeline' +include { workflowCitation } from '../../nf-core/utils_nfcore_pipeline' + + + +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + SUBWORKFLOW TO INITIALISE PIPELINE +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +*/ + +workflow PIPELINE_INITIALISATION { + + take: + version // boolean: Display version and exit + validate_params // boolean: Boolean whether to validate parameters against the schema at runtime + monochrome_logs // boolean: Do not use coloured log outputs + nextflow_cli_args // array: List of positional nextflow CLI args + outdir // string: The output directory where the results will be saved + + main: + + ch_versions = Channel.empty() + + // + // Print version and exit if required and dump pipeline parameters to JSON file + // + UTILS_NEXTFLOW_PIPELINE ( + version, + true, + outdir, + workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1 + ) + + + // + // Validate parameters and generate parameter summary to stdout + // + UTILS_NFSCHEMA_PLUGIN ( + workflow, + validate_params, + null + ) + + + // + // Check config provided to the pipeline + // + UTILS_NFCORE_PIPELINE ( + nextflow_cli_args + ) + + // + // Custom validation for pipeline parameters + // + validateInputParameters() + + // + // Create channel from input file provided through params.input + // + + Channel + .fromList(samplesheetToList(params.input, "${projectDir}/assets/schema_input.json")) + .map { + meta, fastq_1, fastq_2, genome -> + if (!fastq_2) { + return [ meta.id, meta + [ single_end:true ], [ fastq_1 ] ] + } else { + return [ meta.id, meta + [ single_end:false ], [ fastq_1, fastq_2 ] ] + } + } + .groupTuple() + .map { samplesheet -> + validateInputSamplesheet(samplesheet) + } + .set { ch_samplesheet } + ch_samplesheet.dump(tag: "ch_samplesheet") + + emit: + samplesheet = ch_samplesheet + versions = ch_versions +} + +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + SUBWORKFLOW FOR PIPELINE COMPLETION +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +*/ + +workflow PIPELINE_COMPLETION { + + take: + email // string: email address + email_on_fail // string: email address sent on pipeline failure + 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") + + // + // Completion email and summary + // + workflow.onComplete { + if (email || email_on_fail) { + completionEmail( + summary_params, + email, + email_on_fail, + plaintext_email, + outdir, + monochrome_logs, + multiqc_report.toList() + ) + } + + 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" + } +} + +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + FUNCTIONS +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +*/ +// +// Check and validate pipeline parameters +// +def validateInputParameters() { + genomeExistsError() +} + +// +// Validate channels from input samplesheet +// +def validateInputSamplesheet(input) { + def (metas, fastqs) = input[1..2] + + // Check that multiple runs of the same sample are of the same datatype i.e. single-end / paired-end + def endedness_ok = metas.collect{ meta -> meta.single_end }.unique().size == 1 + if (!endedness_ok) { + error("Please check input samplesheet -> Multiple runs of a sample must be of the same datatype i.e. single-end or paired-end: ${metas[0].id}") + } + + return [ metas[0], fastqs ] +} +// +// Get attribute from genome config file e.g. fasta +// +def getGenomeAttribute(attribute) { + if (params.genomes && params.genome && params.genomes.containsKey(params.genome)) { + if (params.genomes[ params.genome ].containsKey(attribute)) { + return params.genomes[ params.genome ][ attribute ] + } + } + return null +} + +// +// Exit pipeline if incorrect --genome key provided +// +def genomeExistsError() { + if (params.genomes && params.genome && !params.genomes.containsKey(params.genome)) { + def error_string = "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + + " Genome '${params.genome}' not found in any config files provided to the pipeline.\n" + + " Currently, the available genome keys are:\n" + + " ${params.genomes.keySet().join(", ")}\n" + + "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" + error(error_string) + } +} +// +// Generate methods description for MultiQC +// +def toolCitationText() { + // FIXME Can use ternary operators to dynamically construct based conditions, e.g. params["run_xyz"] ? "Tool (Foo et al. 2023)" : "", + def citation_text = [ + "Tools used in the workflow included:", + "FastQC (Andrews 2010),", + "Trim Galore! (Krueger)", + "Bismark (Krueger 2011)", + "bwa-meth (Pedersen 2014)", + "Picard (Broad Institute 2019)", + "Qualimap (Okonechnikov 2015)", + "Preseq (Daley 2013)", + "MultiQC (Ewels et al. 2016)", + "." + ].join(' ').trim() +} + +def toolBibliographyText() { + // FIXME Can use ternary operators to dynamically construct based conditions, e.g. params["run_xyz"] ? "
  • Author (2023) Pub name, Journal, DOI
  • " : "", + def reference_text = [ + "
  • Andrews S, (2010) FastQC, URL: https://www.bioinformatics.babraham.ac.uk/projects/fastqc/).", + "Ewels, P., Magnusson, M., Lundin, S., & KΓ€ller, M. (2016). MultiQC: summarize analysis results for multiple tools and samples in a single report. Bioinformatics , 32(19), 3047–3048. doi: /10.1093/bioinformatics/btw354", + "https://www.bioinformatics.babraham.ac.uk/projects/trim_galore", + "Felix Krueger, Simon R. Andrews, Bismark: a flexible aligner and methylation caller for Bisulfite-Seq applications, Bioinformatics, Volume 27, Issue 11, 1 June 2011, Pages 1571–1572, doi: /10.1093/bioinformatics/btr167", + "Pedersen, Brent S. and Eyring, Kenneth and De, Subhajyoti and Yang, Ivana V. and Schwartz, David A. Fast and accurate alignment of long bisulfite-seq reads, arXiv:1401.1129, doi: 10.48550/arXiv.1401.1129", + "Picard Tools, Broad Institute. ", + "Konstantin Okonechnikov, Ana Conesa, Fernando GarcΓ­a-Alcalde, Qualimap 2: advanced multi-sample quality control for high-throughput sequencing data, Bioinformatics, Volume 32, Issue 2, 15 January 2016, Pages 292–294, doi: 10.1093/bioinformatics/btv566", + "Daley, T., Smith, A. Predicting the molecular complexity of sequencing libraries. Nat Methods 10, 325–327 (2013). doi: 10.1038/nmeth.2375
  • ", + ].join('
  • ').trim() + + return reference_text +} + +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 + def meta = [:] + meta.workflow = workflow.toMap() + meta["manifest_map"] = workflow.manifest.toMap() + + // Pipeline DOI + if (meta.manifest_map.doi) { + // Using a loop to handle 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 + def temp_doi_ref = "" + def manifest_doi = meta.manifest_map.doi.tokenize(",") + manifest_doi.each { doi_ref -> + temp_doi_ref += "(doi: ${doi_ref.replace("https://doi.org/", "").replace(" ", "")}), " + } + meta["doi_text"] = temp_doi_ref.substring(0, temp_doi_ref.length() - 2) + } else meta["doi_text"] = "" + meta["nodoi_text"] = meta.manifest_map.doi ? "" : "
  • If available, make sure to update the text to include the Zenodo DOI of version of the pipeline used.
  • " + + // Tool references + meta["tool_citations"] = toolCitationText().replaceAll(", \\.", ".").replaceAll("\\. \\.", ".").replaceAll(", \\.", ".") + meta["tool_bibliography"] = toolBibliographyText() + + + def methods_text = mqc_methods_yaml.text + + def engine = new groovy.text.SimpleTemplateEngine() + def description_html = engine.createTemplate(methods_text).make(meta) + + return description_html.toString() +} + diff --git a/subworkflows/nf-core/utils_nextflow_pipeline/main.nf b/subworkflows/nf-core/utils_nextflow_pipeline/main.nf new file mode 100644 index 00000000..0fcbf7b3 --- /dev/null +++ b/subworkflows/nf-core/utils_nextflow_pipeline/main.nf @@ -0,0 +1,124 @@ +// +// Subworkflow with functionality that may be useful for any Nextflow pipeline +// + +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + SUBWORKFLOW DEFINITION +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +*/ + +workflow UTILS_NEXTFLOW_PIPELINE { + take: + print_version // boolean: print version + dump_parameters // boolean: dump parameters + outdir // path: base directory used to publish pipeline results + check_conda_channels // boolean: check conda channels + + main: + + // + // Print workflow version and exit on --version + // + if (print_version) { + log.info("${workflow.manifest.name} ${getWorkflowVersion()}") + System.exit(0) + } + + // + // Dump pipeline parameters to a JSON file + // + if (dump_parameters && outdir) { + dumpParametersToJSON(outdir) + } + + // + // When running with Conda, warn if channels have not been set-up appropriately + // + if (check_conda_channels) { + checkCondaChannels() + } + + emit: + dummy_emit = true +} + +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + FUNCTIONS +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +*/ + +// +// Generate version string +// +def getWorkflowVersion() { + def version_string = "" as String + if (workflow.manifest.version) { + def prefix_v = workflow.manifest.version[0] != 'v' ? 'v' : '' + version_string += "${prefix_v}${workflow.manifest.version}" + } + + if (workflow.commitId) { + def git_shortsha = workflow.commitId.substring(0, 7) + version_string += "-g${git_shortsha}" + } + + return version_string +} + +// +// Dump pipeline parameters to a JSON file +// +def dumpParametersToJSON(outdir) { + def timestamp = new java.util.Date().format('yyyy-MM-dd_HH-mm-ss') + def filename = "params_${timestamp}.json" + def temp_pf = new File(workflow.launchDir.toString(), ".${filename}") + def jsonStr = groovy.json.JsonOutput.toJson(params) + temp_pf.text = groovy.json.JsonOutput.prettyPrint(jsonStr) + + nextflow.extension.FilesEx.copyTo(temp_pf.toPath(), "${outdir}/pipeline_info/params_${timestamp}.json") + temp_pf.delete() +} + +// +// When running with -profile conda, warn if channels have not been set-up appropriately +// +def checkCondaChannels() { + def parser = new org.yaml.snakeyaml.Yaml() + def channels = [] + try { + def config = parser.load("conda config --show channels".execute().text) + channels = config.channels + } + catch (NullPointerException e) { + log.warn("Could not verify conda channel configuration.") + return null + } + catch (IOException e) { + log.warn("Could not verify conda channel configuration.") + return null + } + + // Check that all channels are present + // This channel list is ordered by required channel priority. + def required_channels_in_order = ['conda-forge', 'bioconda'] + def channels_missing = ((required_channels_in_order as Set) - (channels as Set)) as Boolean + + // Check that they are in the right order + def channel_priority_violation = required_channels_in_order != channels.findAll { ch -> ch in required_channels_in_order } + + if (channels_missing | channel_priority_violation) { + log.warn """\ + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + There is a problem with your Conda configuration! + You will need to set-up the conda-forge and bioconda channels correctly. + Please refer to https://bioconda.github.io/ + The observed channel order is + ${channels} + but the following channel order is required: + ${required_channels_in_order} + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" + """.stripIndent(true) + } +} diff --git a/subworkflows/nf-core/utils_nextflow_pipeline/meta.yml b/subworkflows/nf-core/utils_nextflow_pipeline/meta.yml new file mode 100644 index 00000000..e5c3a0a8 --- /dev/null +++ b/subworkflows/nf-core/utils_nextflow_pipeline/meta.yml @@ -0,0 +1,38 @@ +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/subworkflows/yaml-schema.json +name: "UTILS_NEXTFLOW_PIPELINE" +description: Subworkflow with functionality that may be useful for any Nextflow pipeline +keywords: + - utility + - pipeline + - initialise + - version +components: [] +input: + - print_version: + type: boolean + description: | + Print the version of the pipeline and exit + - dump_parameters: + type: boolean + description: | + Dump the parameters of the pipeline to a JSON file + - output_directory: + type: directory + description: Path to output dir to write JSON file to. + pattern: "results/" + - check_conda_channel: + type: boolean + description: | + Check if the conda channel priority is correct. +output: + - dummy_emit: + type: boolean + description: | + Dummy emit to make nf-core subworkflows lint happy +authors: + - "@adamrtalbot" + - "@drpatelh" +maintainers: + - "@adamrtalbot" + - "@drpatelh" + - "@maxulysse" diff --git a/subworkflows/nf-core/utils_nextflow_pipeline/tests/main.function.nf.test b/subworkflows/nf-core/utils_nextflow_pipeline/tests/main.function.nf.test new file mode 100644 index 00000000..68718e4f --- /dev/null +++ b/subworkflows/nf-core/utils_nextflow_pipeline/tests/main.function.nf.test @@ -0,0 +1,54 @@ + +nextflow_function { + + name "Test Functions" + script "subworkflows/nf-core/utils_nextflow_pipeline/main.nf" + config "subworkflows/nf-core/utils_nextflow_pipeline/tests/nextflow.config" + tag 'subworkflows' + tag 'utils_nextflow_pipeline' + tag 'subworkflows/utils_nextflow_pipeline' + + test("Test Function getWorkflowVersion") { + + function "getWorkflowVersion" + + then { + assertAll( + { assert function.success }, + { assert snapshot(function.result).match() } + ) + } + } + + test("Test Function dumpParametersToJSON") { + + function "dumpParametersToJSON" + + when { + function { + """ + // define inputs of the function here. Example: + input[0] = "$outputDir" + """.stripIndent() + } + } + + then { + assertAll( + { assert function.success } + ) + } + } + + test("Test Function checkCondaChannels") { + + function "checkCondaChannels" + + then { + assertAll( + { assert function.success }, + { assert snapshot(function.result).match() } + ) + } + } +} diff --git a/subworkflows/nf-core/utils_nextflow_pipeline/tests/main.function.nf.test.snap b/subworkflows/nf-core/utils_nextflow_pipeline/tests/main.function.nf.test.snap new file mode 100644 index 00000000..e3f0baf4 --- /dev/null +++ b/subworkflows/nf-core/utils_nextflow_pipeline/tests/main.function.nf.test.snap @@ -0,0 +1,20 @@ +{ + "Test Function getWorkflowVersion": { + "content": [ + "v9.9.9" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-02-28T12:02:05.308243" + }, + "Test Function checkCondaChannels": { + "content": null, + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-02-28T12:02:12.425833" + } +} \ No newline at end of file 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 new file mode 100644 index 00000000..ca964ce8 --- /dev/null +++ b/subworkflows/nf-core/utils_nextflow_pipeline/tests/main.workflow.nf.test @@ -0,0 +1,111 @@ +nextflow_workflow { + + name "Test Workflow UTILS_NEXTFLOW_PIPELINE" + script "../main.nf" + config "subworkflows/nf-core/utils_nextflow_pipeline/tests/nextflow.config" + workflow "UTILS_NEXTFLOW_PIPELINE" + tag 'subworkflows' + tag 'utils_nextflow_pipeline' + tag 'subworkflows/utils_nextflow_pipeline' + + test("Should run no inputs") { + + when { + workflow { + """ + print_version = false + dump_parameters = false + outdir = null + check_conda_channels = false + + input[0] = print_version + input[1] = dump_parameters + input[2] = outdir + input[3] = check_conda_channels + """ + } + } + + then { + assertAll( + { assert workflow.success } + ) + } + } + + test("Should print version") { + + when { + workflow { + """ + print_version = true + dump_parameters = false + outdir = null + check_conda_channels = false + + input[0] = print_version + input[1] = dump_parameters + input[2] = outdir + input[3] = check_conda_channels + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { assert workflow.stdout.contains("nextflow_workflow v9.9.9") } + ) + } + } + + test("Should dump params") { + + when { + workflow { + """ + print_version = false + dump_parameters = true + outdir = 'results' + check_conda_channels = false + + input[0] = false + input[1] = true + input[2] = outdir + input[3] = false + """ + } + } + + then { + assertAll( + { assert workflow.success } + ) + } + } + + test("Should not create params JSON if no output directory") { + + when { + workflow { + """ + print_version = false + dump_parameters = true + outdir = null + check_conda_channels = false + + input[0] = false + input[1] = true + input[2] = outdir + input[3] = false + """ + } + } + + then { + assertAll( + { assert workflow.success } + ) + } + } +} diff --git a/subworkflows/nf-core/utils_nextflow_pipeline/tests/nextflow.config b/subworkflows/nf-core/utils_nextflow_pipeline/tests/nextflow.config new file mode 100644 index 00000000..a09572e5 --- /dev/null +++ b/subworkflows/nf-core/utils_nextflow_pipeline/tests/nextflow.config @@ -0,0 +1,9 @@ +manifest { + name = 'nextflow_workflow' + author = """nf-core""" + homePage = 'https://127.0.0.1' + description = """Dummy pipeline""" + nextflowVersion = '!>=23.04.0' + version = '9.9.9' + doi = 'https://doi.org/10.5281/zenodo.5070524' +} diff --git a/subworkflows/nf-core/utils_nextflow_pipeline/tests/tags.yml b/subworkflows/nf-core/utils_nextflow_pipeline/tests/tags.yml new file mode 100644 index 00000000..f8476112 --- /dev/null +++ b/subworkflows/nf-core/utils_nextflow_pipeline/tests/tags.yml @@ -0,0 +1,2 @@ +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 new file mode 100644 index 00000000..5cb7bafe --- /dev/null +++ b/subworkflows/nf-core/utils_nfcore_pipeline/main.nf @@ -0,0 +1,462 @@ +// +// Subworkflow with utility functions specific to the nf-core pipeline template +// + +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + SUBWORKFLOW DEFINITION +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +*/ + +workflow UTILS_NFCORE_PIPELINE { + take: + nextflow_cli_args + + main: + valid_config = checkConfigProvided() + checkProfileProvided(nextflow_cli_args) + + emit: + valid_config +} + +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + FUNCTIONS +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +*/ + +// +// Warn if a -profile or Nextflow config has not been provided to run the pipeline +// +def checkConfigProvided() { + def valid_config = true as Boolean + if (workflow.profile == 'standard' && workflow.configFiles.size() <= 1) { + log.warn( + "[${workflow.manifest.name}] You are attempting to run the pipeline without any custom configuration!\n\n" + "This will be dependent on your local compute environment but can be achieved via one or more of the following:\n" + " (1) Using an existing pipeline profile e.g. `-profile docker` or `-profile singularity`\n" + " (2) Using an existing nf-core/configs for your Institution e.g. `-profile crick` or `-profile uppmax`\n" + " (3) Using your own local custom config e.g. `-c /path/to/your/custom.config`\n\n" + "Please refer to the quick start section and usage docs for the pipeline.\n " + ) + valid_config = false + } + return valid_config +} + +// +// Exit pipeline if --profile contains spaces +// +def checkProfileProvided(nextflow_cli_args) { + if (workflow.profile.endsWith(',')) { + error( + "The `-profile` option cannot end with a trailing comma, please remove it and re-run the pipeline!\n" + "HINT: A common mistake is to provide multiple values separated by spaces e.g. `-profile test, docker`.\n" + ) + } + if (nextflow_cli_args[0]) { + log.warn( + "nf-core pipelines do not accept positional arguments. The positional argument `${nextflow_cli_args[0]}` has been detected.\n" + "HINT: A common mistake is to provide multiple values separated by spaces e.g. `-profile test, docker`.\n" + ) + } +} + +// +// 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 +// +def getWorkflowVersion() { + def version_string = "" as String + if (workflow.manifest.version) { + def prefix_v = workflow.manifest.version[0] != 'v' ? 'v' : '' + version_string += "${prefix_v}${workflow.manifest.version}" + } + + if (workflow.commitId) { + def git_shortsha = workflow.commitId.substring(0, 7) + version_string += "-g${git_shortsha}" + } + + return version_string +} + +// +// Get software versions for pipeline +// +def processVersionsFromYAML(yaml_file) { + def yaml = new org.yaml.snakeyaml.Yaml() + def versions = yaml.load(yaml_file).collectEntries { k, v -> [k.tokenize(':')[-1], v] } + return yaml.dumpAsMap(versions).trim() +} + +// +// Get workflow version for pipeline +// +def workflowVersionToYAML() { + return """ + Workflow: + ${workflow.manifest.name}: ${getWorkflowVersion()} + Nextflow: ${workflow.nextflow.version} + """.stripIndent().trim() +} + +// +// 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())) +} + +// +// Get workflow summary for MultiQC +// +def paramsSummaryMultiqc(summary_params) { + def summary_section = '' + summary_params + .keySet() + .each { group -> + def group_params = summary_params.get(group) + // This gets the parameters of that particular group + if (group_params) { + summary_section += "

    ${group}

    \n" + summary_section += "
    \n" + group_params + .keySet() + .sort() + .each { param -> + summary_section += "
    ${param}
    ${group_params.get(param) ?: 'N/A'}
    \n" + } + summary_section += "
    \n" + } + } + + def yaml_file_text = "id: '${workflow.manifest.name.replace('/', '-')}-summary'\n" as String + yaml_file_text += "description: ' - this information is collected when the pipeline is started.'\n" + yaml_file_text += "section_name: '${workflow.manifest.name} Workflow Summary'\n" + yaml_file_text += "section_href: 'https://github.com/${workflow.manifest.name}'\n" + yaml_file_text += "plot_type: 'html'\n" + yaml_file_text += "data: |\n" + yaml_file_text += "${summary_section}" + + 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 +// +def logColours(monochrome_logs=true) { + def colorcodes = [:] as Map + + // Reset / Meta + colorcodes['reset'] = monochrome_logs ? '' : "\033[0m" + colorcodes['bold'] = monochrome_logs ? '' : "\033[1m" + colorcodes['dim'] = monochrome_logs ? '' : "\033[2m" + colorcodes['underlined'] = monochrome_logs ? '' : "\033[4m" + colorcodes['blink'] = monochrome_logs ? '' : "\033[5m" + colorcodes['reverse'] = monochrome_logs ? '' : "\033[7m" + colorcodes['hidden'] = monochrome_logs ? '' : "\033[8m" + + // Regular Colors + colorcodes['black'] = monochrome_logs ? '' : "\033[0;30m" + colorcodes['red'] = monochrome_logs ? '' : "\033[0;31m" + colorcodes['green'] = monochrome_logs ? '' : "\033[0;32m" + colorcodes['yellow'] = monochrome_logs ? '' : "\033[0;33m" + colorcodes['blue'] = monochrome_logs ? '' : "\033[0;34m" + colorcodes['purple'] = monochrome_logs ? '' : "\033[0;35m" + colorcodes['cyan'] = monochrome_logs ? '' : "\033[0;36m" + colorcodes['white'] = monochrome_logs ? '' : "\033[0;37m" + + // Bold + colorcodes['bblack'] = monochrome_logs ? '' : "\033[1;30m" + colorcodes['bred'] = monochrome_logs ? '' : "\033[1;31m" + colorcodes['bgreen'] = monochrome_logs ? '' : "\033[1;32m" + colorcodes['byellow'] = monochrome_logs ? '' : "\033[1;33m" + colorcodes['bblue'] = monochrome_logs ? '' : "\033[1;34m" + colorcodes['bpurple'] = monochrome_logs ? '' : "\033[1;35m" + colorcodes['bcyan'] = monochrome_logs ? '' : "\033[1;36m" + colorcodes['bwhite'] = monochrome_logs ? '' : "\033[1;37m" + + // Underline + colorcodes['ublack'] = monochrome_logs ? '' : "\033[4;30m" + colorcodes['ured'] = monochrome_logs ? '' : "\033[4;31m" + colorcodes['ugreen'] = monochrome_logs ? '' : "\033[4;32m" + colorcodes['uyellow'] = monochrome_logs ? '' : "\033[4;33m" + colorcodes['ublue'] = monochrome_logs ? '' : "\033[4;34m" + colorcodes['upurple'] = monochrome_logs ? '' : "\033[4;35m" + colorcodes['ucyan'] = monochrome_logs ? '' : "\033[4;36m" + colorcodes['uwhite'] = monochrome_logs ? '' : "\033[4;37m" + + // High Intensity + colorcodes['iblack'] = monochrome_logs ? '' : "\033[0;90m" + colorcodes['ired'] = monochrome_logs ? '' : "\033[0;91m" + colorcodes['igreen'] = monochrome_logs ? '' : "\033[0;92m" + colorcodes['iyellow'] = monochrome_logs ? '' : "\033[0;93m" + colorcodes['iblue'] = monochrome_logs ? '' : "\033[0;94m" + colorcodes['ipurple'] = monochrome_logs ? '' : "\033[0;95m" + colorcodes['icyan'] = monochrome_logs ? '' : "\033[0;96m" + colorcodes['iwhite'] = monochrome_logs ? '' : "\033[0;97m" + + // Bold High Intensity + colorcodes['biblack'] = monochrome_logs ? '' : "\033[1;90m" + colorcodes['bired'] = monochrome_logs ? '' : "\033[1;91m" + colorcodes['bigreen'] = monochrome_logs ? '' : "\033[1;92m" + colorcodes['biyellow'] = monochrome_logs ? '' : "\033[1;93m" + colorcodes['biblue'] = monochrome_logs ? '' : "\033[1;94m" + colorcodes['bipurple'] = monochrome_logs ? '' : "\033[1;95m" + colorcodes['bicyan'] = monochrome_logs ? '' : "\033[1;96m" + colorcodes['biwhite'] = monochrome_logs ? '' : "\033[1;97m" + + 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] + } + } + } + catch (Exception all) { + if (multiqc_report) { + log.warn("[${workflow.manifest.name}] Could not attach MultiQC report to summary email") + } + } + return mqc_report +} + +// +// Construct and send completion email +// +def completionEmail(summary_params, email, email_on_fail, plaintext_email, outdir, monochrome_logs=true, multiqc_report=null) { + + // Set up the e-mail variables + def subject = "[${workflow.manifest.name}] Successful: ${workflow.runName}" + if (!workflow.success) { + subject = "[${workflow.manifest.name}] FAILED: ${workflow.runName}" + } + + def summary = [:] + summary_params + .keySet() + .sort() + .each { group -> + summary << summary_params[group] + } + + def misc_fields = [:] + misc_fields['Date Started'] = workflow.start + misc_fields['Date Completed'] = workflow.complete + misc_fields['Pipeline script file path'] = workflow.scriptFile + misc_fields['Pipeline script hash ID'] = workflow.scriptId + if (workflow.repository) { + misc_fields['Pipeline repository Git URL'] = workflow.repository + } + if (workflow.commitId) { + misc_fields['Pipeline repository Git Commit'] = workflow.commitId + } + if (workflow.revision) { + misc_fields['Pipeline Git branch/tag'] = workflow.revision + } + misc_fields['Nextflow Version'] = workflow.nextflow.version + misc_fields['Nextflow Build'] = workflow.nextflow.build + misc_fields['Nextflow Compile Timestamp'] = workflow.nextflow.timestamp + + def email_fields = [:] + email_fields['version'] = getWorkflowVersion() + email_fields['runName'] = workflow.runName + email_fields['success'] = workflow.success + email_fields['dateComplete'] = workflow.complete + email_fields['duration'] = workflow.duration + email_fields['exitStatus'] = workflow.exitStatus + email_fields['errorMessage'] = (workflow.errorMessage ?: 'None') + email_fields['errorReport'] = (workflow.errorReport ?: 'None') + email_fields['commandLine'] = workflow.commandLine + email_fields['projectDir'] = workflow.projectDir + email_fields['summary'] = summary << misc_fields + + // On success try attach the multiqc report + def mqc_report = attachMultiqcReport(multiqc_report) + + // Check if we are only sending emails on failure + def email_address = email + if (!email && email_on_fail && !workflow.success) { + email_address = email_on_fail + } + + // Render the TXT template + def engine = new groovy.text.GStringTemplateEngine() + def tf = new File("${workflow.projectDir}/assets/email_template.txt") + def txt_template = engine.createTemplate(tf).make(email_fields) + def email_txt = txt_template.toString() + + // Render the HTML template + def hf = new File("${workflow.projectDir}/assets/email_template.html") + def html_template = engine.createTemplate(hf).make(email_fields) + 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 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) + def sendmail_html = sendmail_template.toString() + + // Send the HTML e-mail + def colors = logColours(monochrome_logs) as Map + if (email_address) { + try { + if (plaintext_email) { +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 failures and try with plaintext + def mail_cmd = ['mail', '-s', subject, '--content-type=text/html', email_address] + mail_cmd.execute() << email_html + log.info("-${colors.purple}[${workflow.manifest.name}]${colors.green} Sent summary e-mail to ${email_address} (mail)-") + } + } + + // Write summary e-mail HTML to a file + def output_hf = new File(workflow.launchDir.toString(), ".pipeline_report.html") + output_hf.withWriter { w -> w << email_html } + nextflow.extension.FilesEx.copyTo(output_hf.toPath(), "${outdir}/pipeline_info/pipeline_report.html") + output_hf.delete() + + // Write summary e-mail TXT to a file + def output_tf = new File(workflow.launchDir.toString(), ".pipeline_report.txt") + output_tf.withWriter { w -> w << email_txt } + nextflow.extension.FilesEx.copyTo(output_tf.toPath(), "${outdir}/pipeline_info/pipeline_report.txt") + output_tf.delete() +} + +// +// Print pipeline summary on completion +// +def completionSummary(monochrome_logs=true) { + def colors = logColours(monochrome_logs) as Map + if (workflow.success) { + if (workflow.stats.ignoredCount == 0) { + log.info("-${colors.purple}[${workflow.manifest.name}]${colors.green} Pipeline completed successfully${colors.reset}-") + } + else { + log.info("-${colors.purple}[${workflow.manifest.name}]${colors.yellow} Pipeline completed successfully, but with errored process(es) ${colors.reset}-") + } + } + else { + 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/meta.yml b/subworkflows/nf-core/utils_nfcore_pipeline/meta.yml new file mode 100644 index 00000000..d08d2434 --- /dev/null +++ b/subworkflows/nf-core/utils_nfcore_pipeline/meta.yml @@ -0,0 +1,24 @@ +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/subworkflows/yaml-schema.json +name: "UTILS_NFCORE_PIPELINE" +description: Subworkflow with utility functions specific to the nf-core pipeline template +keywords: + - utility + - pipeline + - initialise + - version +components: [] +input: + - nextflow_cli_args: + type: list + description: | + Nextflow CLI positional arguments +output: + - success: + type: boolean + description: | + Dummy output to indicate success +authors: + - "@adamrtalbot" +maintainers: + - "@adamrtalbot" + - "@maxulysse" 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 new file mode 100644 index 00000000..1dc317f8 --- /dev/null +++ b/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.function.nf.test @@ -0,0 +1,134 @@ + +nextflow_function { + + name "Test Functions" + script "../main.nf" + config "subworkflows/nf-core/utils_nfcore_pipeline/tests/nextflow.config" + tag "subworkflows" + tag "subworkflows_nfcore" + tag "utils_nfcore_pipeline" + tag "subworkflows/utils_nfcore_pipeline" + + test("Test Function checkConfigProvided") { + + function "checkConfigProvided" + + then { + assertAll( + { assert function.success }, + { assert snapshot(function.result).match() } + ) + } + } + + test("Test Function checkProfileProvided") { + + function "checkProfileProvided" + + when { + function { + """ + input[0] = [] + """ + } + } + + then { + assertAll( + { assert function.success }, + { assert snapshot(function.result).match() } + ) + } + } + + test("Test Function workflowCitation") { + + function "workflowCitation" + + then { + assertAll( + { assert function.success }, + { assert snapshot(function.result).match() } + ) + } + } + + test("Test Function nfCoreLogo") { + + function "nfCoreLogo" + + when { + function { + """ + input[0] = false + """ + } + } + + then { + assertAll( + { assert function.success }, + { assert snapshot(function.result).match() } + ) + } + } + + test("Test Function dashedLine") { + + function "dashedLine" + + when { + function { + """ + input[0] = false + """ + } + } + + then { + assertAll( + { assert function.success }, + { assert snapshot(function.result).match() } + ) + } + } + + test("Test Function without logColours") { + + function "logColours" + + when { + function { + """ + input[0] = true + """ + } + } + + then { + assertAll( + { assert function.success }, + { assert snapshot(function.result).match() } + ) + } + } + + test("Test Function with logColours") { + function "logColours" + + when { + function { + """ + input[0] = false + """ + } + } + + then { + assertAll( + { assert function.success }, + { assert snapshot(function.result).match() } + ) + } + } +} 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 new file mode 100644 index 00000000..1037232c --- /dev/null +++ b/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.function.nf.test.snap @@ -0,0 +1,166 @@ +{ + "Test Function checkProfileProvided": { + "content": null, + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-02-28T12:03:03.360873" + }, + "Test Function checkConfigProvided": { + "content": [ + true + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "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": [ + { + "reset": "", + "bold": "", + "dim": "", + "underlined": "", + "blink": "", + "reverse": "", + "hidden": "", + "black": "", + "red": "", + "green": "", + "yellow": "", + "blue": "", + "purple": "", + "cyan": "", + "white": "", + "bblack": "", + "bred": "", + "bgreen": "", + "byellow": "", + "bblue": "", + "bpurple": "", + "bcyan": "", + "bwhite": "", + "ublack": "", + "ured": "", + "ugreen": "", + "uyellow": "", + "ublue": "", + "upurple": "", + "ucyan": "", + "uwhite": "", + "iblack": "", + "ired": "", + "igreen": "", + "iyellow": "", + "iblue": "", + "ipurple": "", + "icyan": "", + "iwhite": "", + "biblack": "", + "bired": "", + "bigreen": "", + "biyellow": "", + "biblue": "", + "bipurple": "", + "bicyan": "", + "biwhite": "" + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "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": [ + { + "reset": "\u001b[0m", + "bold": "\u001b[1m", + "dim": "\u001b[2m", + "underlined": "\u001b[4m", + "blink": "\u001b[5m", + "reverse": "\u001b[7m", + "hidden": "\u001b[8m", + "black": "\u001b[0;30m", + "red": "\u001b[0;31m", + "green": "\u001b[0;32m", + "yellow": "\u001b[0;33m", + "blue": "\u001b[0;34m", + "purple": "\u001b[0;35m", + "cyan": "\u001b[0;36m", + "white": "\u001b[0;37m", + "bblack": "\u001b[1;30m", + "bred": "\u001b[1;31m", + "bgreen": "\u001b[1;32m", + "byellow": "\u001b[1;33m", + "bblue": "\u001b[1;34m", + "bpurple": "\u001b[1;35m", + "bcyan": "\u001b[1;36m", + "bwhite": "\u001b[1;37m", + "ublack": "\u001b[4;30m", + "ured": "\u001b[4;31m", + "ugreen": "\u001b[4;32m", + "uyellow": "\u001b[4;33m", + "ublue": "\u001b[4;34m", + "upurple": "\u001b[4;35m", + "ucyan": "\u001b[4;36m", + "uwhite": "\u001b[4;37m", + "iblack": "\u001b[0;90m", + "ired": "\u001b[0;91m", + "igreen": "\u001b[0;92m", + "iyellow": "\u001b[0;93m", + "iblue": "\u001b[0;94m", + "ipurple": "\u001b[0;95m", + "icyan": "\u001b[0;96m", + "iwhite": "\u001b[0;97m", + "biblack": "\u001b[1;90m", + "bired": "\u001b[1;91m", + "bigreen": "\u001b[1;92m", + "biyellow": "\u001b[1;93m", + "biblue": "\u001b[1;94m", + "bipurple": "\u001b[1;95m", + "bicyan": "\u001b[1;96m", + "biwhite": "\u001b[1;97m" + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-02-28T12:03:21.714424" + } +} \ No newline at end of file diff --git a/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.workflow.nf.test b/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.workflow.nf.test new file mode 100644 index 00000000..8940d32d --- /dev/null +++ b/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.workflow.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.workflow.nf.test.snap b/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.workflow.nf.test.snap new file mode 100644 index 00000000..859d1030 --- /dev/null +++ b/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.workflow.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/nextflow.config b/subworkflows/nf-core/utils_nfcore_pipeline/tests/nextflow.config new file mode 100644 index 00000000..d0a926bf --- /dev/null +++ b/subworkflows/nf-core/utils_nfcore_pipeline/tests/nextflow.config @@ -0,0 +1,9 @@ +manifest { + name = 'nextflow_workflow' + author = """nf-core""" + homePage = 'https://127.0.0.1' + description = """Dummy pipeline""" + nextflowVersion = '!>=23.04.0' + version = '9.9.9' + doi = 'https://doi.org/10.5281/zenodo.5070524' +} diff --git a/subworkflows/nf-core/utils_nfcore_pipeline/tests/tags.yml b/subworkflows/nf-core/utils_nfcore_pipeline/tests/tags.yml new file mode 100644 index 00000000..ac8523c9 --- /dev/null +++ b/subworkflows/nf-core/utils_nfcore_pipeline/tests/tags.yml @@ -0,0 +1,2 @@ +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 new file mode 100644 index 00000000..4994303e --- /dev/null +++ b/subworkflows/nf-core/utils_nfschema_plugin/main.nf @@ -0,0 +1,46 @@ +// +// Subworkflow that uses the nf-schema plugin to validate parameters and render the parameter summary +// + +include { paramsSummaryLog } from 'plugin/nf-schema' +include { validateParameters } from 'plugin/nf-schema' + +workflow UTILS_NFSCHEMA_PLUGIN { + + take: + input_workflow // workflow: the workflow object used by nf-schema to get metadata from the workflow + validate_params // boolean: validate the parameters + parameters_schema // string: path to the parameters JSON schema. + // this has to be the same as the schema given to `validation.parametersSchema` + // 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 + + main: + + // + // Print parameter summary to stdout. This will display the parameters + // that differ from the default given in the JSON schema + // + if(parameters_schema) { + log.info paramsSummaryLog(input_workflow, parameters_schema:parameters_schema) + } else { + log.info paramsSummaryLog(input_workflow) + } + + // + // Validate the parameters using nextflow_schema.json or the schema + // given via the validation.parametersSchema configuration option + // + if(validate_params) { + if(parameters_schema) { + validateParameters(parameters_schema:parameters_schema) + } else { + validateParameters() + } + } + + emit: + dummy_emit = true +} + diff --git a/subworkflows/nf-core/utils_nfschema_plugin/meta.yml b/subworkflows/nf-core/utils_nfschema_plugin/meta.yml new file mode 100644 index 00000000..f7d9f028 --- /dev/null +++ b/subworkflows/nf-core/utils_nfschema_plugin/meta.yml @@ -0,0 +1,35 @@ +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/subworkflows/yaml-schema.json +name: "utils_nfschema_plugin" +description: Run nf-schema to validate parameters and create a summary of changed parameters +keywords: + - validation + - JSON schema + - plugin + - parameters + - summary +components: [] +input: + - input_workflow: + type: object + description: | + The workflow object of the used pipeline. + This object contains meta data used to create the params summary log + - validate_params: + type: boolean + description: Validate the parameters and error if invalid. + - parameters_schema: + type: string + description: | + Path to the parameters JSON schema. + This has to be the same as the schema given to the `validation.parametersSchema` config + option. When this input is empty it will automatically use the configured schema or + "${projectDir}/nextflow_schema.json" as default. The schema should not be given in this way + for meta pipelines. +output: + - dummy_emit: + type: boolean + description: Dummy emit to make nf-core subworkflows lint happy +authors: + - "@nvnieuwk" +maintainers: + - "@nvnieuwk" diff --git a/subworkflows/nf-core/utils_nfschema_plugin/tests/main.nf.test b/subworkflows/nf-core/utils_nfschema_plugin/tests/main.nf.test new file mode 100644 index 00000000..842dc432 --- /dev/null +++ b/subworkflows/nf-core/utils_nfschema_plugin/tests/main.nf.test @@ -0,0 +1,117 @@ +nextflow_workflow { + + name "Test Subworkflow UTILS_NFSCHEMA_PLUGIN" + script "../main.nf" + workflow "UTILS_NFSCHEMA_PLUGIN" + + tag "subworkflows" + tag "subworkflows_nfcore" + tag "subworkflows/utils_nfschema_plugin" + tag "plugin/nf-schema" + + config "./nextflow.config" + + test("Should run nothing") { + + when { + + params { + test_data = '' + } + + workflow { + """ + validate_params = false + input[0] = workflow + input[1] = validate_params + input[2] = "" + """ + } + } + + then { + assertAll( + { assert workflow.success } + ) + } + } + + test("Should validate params") { + + when { + + params { + test_data = '' + outdir = 1 + } + + workflow { + """ + validate_params = true + input[0] = workflow + input[1] = validate_params + input[2] = "" + """ + } + } + + then { + assertAll( + { assert workflow.failed }, + { assert workflow.stdout.any { it.contains('ERROR ~ Validation of pipeline parameters failed!') } } + ) + } + } + + test("Should run nothing - custom schema") { + + when { + + params { + test_data = '' + } + + workflow { + """ + validate_params = false + input[0] = workflow + input[1] = validate_params + input[2] = "${projectDir}/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow_schema.json" + """ + } + } + + then { + assertAll( + { assert workflow.success } + ) + } + } + + test("Should validate params - custom schema") { + + when { + + params { + test_data = '' + outdir = 1 + } + + workflow { + """ + validate_params = true + input[0] = workflow + input[1] = validate_params + input[2] = "${projectDir}/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow_schema.json" + """ + } + } + + then { + assertAll( + { assert workflow.failed }, + { assert workflow.stdout.any { it.contains('ERROR ~ Validation of pipeline parameters failed!') } } + ) + } + } +} diff --git a/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow.config b/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow.config new file mode 100644 index 00000000..0907ac58 --- /dev/null +++ b/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow.config @@ -0,0 +1,8 @@ +plugins { + id "nf-schema@2.1.0" +} + +validation { + parametersSchema = "${projectDir}/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow_schema.json" + monochromeLogs = true +} \ No newline at end of file diff --git a/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow_schema.json b/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow_schema.json new file mode 100644 index 00000000..331e0d2f --- /dev/null +++ b/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow_schema.json @@ -0,0 +1,96 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "https://raw.githubusercontent.com/./master/nextflow_schema.json", + "title": ". pipeline parameters", + "description": "", + "type": "object", + "$defs": { + "input_output_options": { + "title": "Input/output options", + "type": "object", + "fa_icon": "fas fa-terminal", + "description": "Define where the pipeline should find input data and save output data.", + "required": ["outdir"], + "properties": { + "validate_params": { + "type": "boolean", + "description": "Validate parameters?", + "default": true, + "hidden": true + }, + "outdir": { + "type": "string", + "format": "directory-path", + "description": "The output directory where the results will be saved. You have to use absolute paths to storage on Cloud infrastructure.", + "fa_icon": "fas fa-folder-open" + }, + "test_data_base": { + "type": "string", + "default": "https://raw.githubusercontent.com/nf-core/test-datasets/modules", + "description": "Base for test data directory", + "hidden": true + }, + "test_data": { + "type": "string", + "description": "Fake test data param", + "hidden": true + } + } + }, + "generic_options": { + "title": "Generic options", + "type": "object", + "fa_icon": "fas fa-file-import", + "description": "Less common options for the pipeline, typically set in a config file.", + "help_text": "These options are common to all nf-core pipelines and allow you to customise some of the core preferences for how the pipeline runs.\n\nTypically these options would be set in a Nextflow config file loaded for all pipeline runs, such as `~/.nextflow/config`.", + "properties": { + "help": { + "type": "boolean", + "description": "Display help text.", + "fa_icon": "fas fa-question-circle", + "hidden": true + }, + "version": { + "type": "boolean", + "description": "Display version and exit.", + "fa_icon": "fas fa-question-circle", + "hidden": true + }, + "logo": { + "type": "boolean", + "default": true, + "description": "Display nf-core logo in console output.", + "fa_icon": "fas fa-image", + "hidden": true + }, + "singularity_pull_docker_container": { + "type": "boolean", + "description": "Pull Singularity container from Docker?", + "hidden": true + }, + "publish_dir_mode": { + "type": "string", + "default": "copy", + "description": "Method used to save pipeline results to output directory.", + "help_text": "The Nextflow `publishDir` option specifies which intermediate files should be saved to the output directory. This option tells the pipeline what method should be used to move these files. See [Nextflow docs](https://www.nextflow.io/docs/latest/process.html#publishdir) for details.", + "fa_icon": "fas fa-copy", + "enum": ["symlink", "rellink", "link", "copy", "copyNoFollow", "move"], + "hidden": true + }, + "monochrome_logs": { + "type": "boolean", + "description": "Use monochrome_logs", + "hidden": true + } + } + } + }, + "allOf": [ + { + "$ref": "#/$defs/input_output_options" + }, + { + "$ref": "#/$defs/generic_options" + } + ] +} diff --git a/tests/.nftignore b/tests/.nftignore new file mode 100644 index 00000000..7c0558cf --- /dev/null +++ b/tests/.nftignore @@ -0,0 +1,23 @@ +{bismark,bismark_hisat}/alignments/logs/*.txt +{bismark,bismark_hisat,bwameth}/{alignments,deduplicated}/*.{bam,bam.bai} +{bismark,bismark_hisat}/deduplicated/logs/*.txt +{bismark,bismark_hisat}/{reports,summary}/*.{html,txt} +bwameth/deduplicated/picard_metrics/*.txt +fastqc/*.html +fastqc/zips/*.zip +multiqc/{bismark,bismark_hisat,bwameth}/multiqc_data/*.{log,json} +multiqc/{bismark,bismark_hisat,bwameth}/multiqc_data/multiqc_fastqc.txt +multiqc/{bismark,bismark_hisat,bwameth}/multiqc_data/multiqc_general_stats.txt +multiqc/{bismark,bismark_hisat,bwameth}/multiqc_data/multiqc_qualimap_bamqc_genome_results.txt +multiqc/{bismark,bismark_hisat,bwameth}/multiqc_data/multiqc_software_versions.txt +multiqc/{bismark,bismark_hisat,bwameth}/multiqc_data/multiqc_sources.txt +multiqc/{bismark,bismark_hisat,bwameth}/multiqc_report.html +multiqc/{bismark,bismark_hisat,bwameth}/multiqc_plots/{pdf,png,svg}/*.{pdf,png,svg} +pipeline_info/*.{html,json,txt,yml} +qualimap/**/qualimapReport.html +qualimap/**/css/* +qualimap/**/images_qualimapReport/* +qualimap/**/raw_data_qualimapReport/* +trimgalore/fastqc/*.html +trimgalore/fastqc/zips/*.zip +trimgalore/logs/*.txt diff --git a/tests/bismark_emseq_clip_r1.nf.test b/tests/bismark_emseq_clip_r1.nf.test new file mode 100644 index 00000000..c1bc57a0 --- /dev/null +++ b/tests/bismark_emseq_clip_r1.nf.test @@ -0,0 +1,41 @@ +nextflow_pipeline { + + name "Test Workflow main.nf" + script "../main.nf" + config "./nextflow.config" + + test("Params: bismark | em_seq | clip_r1") { + when { + params { + em_seq = true + clip_r1 = 2 + outdir = "$outputDir" + } + } + + then { + // stable_name: All files + folders in ${params.outdir}/ with a stable name + def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) + // stable_path: All files in ${params.outdir}/ with stable content + def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') + // bam_files: All bam files + def bam_files = getAllFilesFromDir(params.outdir, include: ['**/*.bam']) + assertAll( + { assert workflow.success}, + { assert snapshot( + // Number of tasks + workflow.trace.succeeded().size(), + // pipeline versions.yml file for multiqc from which Nextflow version is removed because we tests pipelines on multiple Nextflow versions + removeNextflowVersion("$outputDir/pipeline_info/nf_core_pipeline_software_mqc_versions.yml"), + // All stable path name + stable_name, + // All files with stable contents + stable_path, + // All bam files + bam_files.collect{ file -> [ file.getName(), bam(file.toString()).getReadsMD5() ] } + ).match() } + ) + } + } + +} diff --git a/tests/bismark_emseq_clip_r1.nf.test.snap b/tests/bismark_emseq_clip_r1.nf.test.snap new file mode 100644 index 00000000..0f82b86b --- /dev/null +++ b/tests/bismark_emseq_clip_r1.nf.test.snap @@ -0,0 +1,579 @@ +{ + "Params: bismark | em_seq | clip_r1": { + "content": [ + 43, + { + "BISMARK_ALIGN": { + "bismark": "0.24.2" + }, + "BISMARK_GENOMEPREPARATION": { + "bismark": "0.24.2" + }, + "FASTQC": { + "fastqc": "0.12.1" + }, + "QUALIMAP_BAMQC": { + "qualimap": 2.3 + }, + "TRIMGALORE": { + "trimgalore": "0.6.10", + "cutadapt": 4.2 + }, + "Workflow": { + "nf-core/methylseq": "v2.7.0" + } + }, + [ + "bismark", + "bismark/alignments", + "bismark/alignments/logs", + "bismark/alignments/logs/Ecoli_10K_methylated_1_val_1_bismark_bt2_PE_report.txt", + "bismark/alignments/logs/SRR389222_sub1_trimmed_bismark_bt2_SE_report.txt", + "bismark/alignments/logs/SRR389222_sub2_trimmed_bismark_bt2_SE_report.txt", + "bismark/alignments/logs/SRR389222_sub3_trimmed_bismark_bt2_SE_report.txt", + "bismark/deduplicated", + "bismark/deduplicated/Ecoli_10K_methylated.deduplicated.sorted.bam", + "bismark/deduplicated/Ecoli_10K_methylated.deduplicated.sorted.bam.bai", + "bismark/deduplicated/SRR389222_sub1.deduplicated.sorted.bam", + "bismark/deduplicated/SRR389222_sub1.deduplicated.sorted.bam.bai", + "bismark/deduplicated/SRR389222_sub2.deduplicated.sorted.bam", + "bismark/deduplicated/SRR389222_sub2.deduplicated.sorted.bam.bai", + "bismark/deduplicated/SRR389222_sub3.deduplicated.sorted.bam", + "bismark/deduplicated/SRR389222_sub3.deduplicated.sorted.bam.bai", + "bismark/deduplicated/logs", + "bismark/deduplicated/logs/Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplication_report.txt", + "bismark/deduplicated/logs/SRR389222_sub1_trimmed_bismark_bt2.deduplication_report.txt", + "bismark/deduplicated/logs/SRR389222_sub2_trimmed_bismark_bt2.deduplication_report.txt", + "bismark/deduplicated/logs/SRR389222_sub3_trimmed_bismark_bt2.deduplication_report.txt", + "bismark/methylation_calls", + "bismark/methylation_calls/bedGraph", + "bismark/methylation_calls/bedGraph/Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplicated.bedGraph.gz", + "bismark/methylation_calls/bedGraph/SRR389222_sub1_trimmed_bismark_bt2.deduplicated.bedGraph.gz", + "bismark/methylation_calls/bedGraph/SRR389222_sub2_trimmed_bismark_bt2.deduplicated.bedGraph.gz", + "bismark/methylation_calls/bedGraph/SRR389222_sub3_trimmed_bismark_bt2.deduplicated.bedGraph.gz", + "bismark/methylation_calls/mbias", + "bismark/methylation_calls/mbias/Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplicated.M-bias.txt", + "bismark/methylation_calls/mbias/SRR389222_sub1_trimmed_bismark_bt2.deduplicated.M-bias.txt", + "bismark/methylation_calls/mbias/SRR389222_sub2_trimmed_bismark_bt2.deduplicated.M-bias.txt", + "bismark/methylation_calls/mbias/SRR389222_sub3_trimmed_bismark_bt2.deduplicated.M-bias.txt", + "bismark/methylation_calls/methylation_calls", + "bismark/methylation_calls/methylation_calls/CHG_OB_Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CHG_OB_SRR389222_sub1_trimmed_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CHG_OB_SRR389222_sub2_trimmed_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CHG_OB_SRR389222_sub3_trimmed_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CHG_OT_Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CHG_OT_SRR389222_sub1_trimmed_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CHG_OT_SRR389222_sub2_trimmed_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CHG_OT_SRR389222_sub3_trimmed_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CHH_OB_Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CHH_OB_SRR389222_sub1_trimmed_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CHH_OB_SRR389222_sub2_trimmed_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CHH_OB_SRR389222_sub3_trimmed_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CHH_OT_Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CHH_OT_SRR389222_sub1_trimmed_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CHH_OT_SRR389222_sub2_trimmed_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CHH_OT_SRR389222_sub3_trimmed_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CpG_OB_Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CpG_OB_SRR389222_sub1_trimmed_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CpG_OB_SRR389222_sub2_trimmed_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CpG_OB_SRR389222_sub3_trimmed_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CpG_OT_Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CpG_OT_SRR389222_sub1_trimmed_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CpG_OT_SRR389222_sub2_trimmed_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CpG_OT_SRR389222_sub3_trimmed_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_coverage", + "bismark/methylation_calls/methylation_coverage/Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplicated.bismark.cov.gz", + "bismark/methylation_calls/methylation_coverage/SRR389222_sub1_trimmed_bismark_bt2.deduplicated.bismark.cov.gz", + "bismark/methylation_calls/methylation_coverage/SRR389222_sub2_trimmed_bismark_bt2.deduplicated.bismark.cov.gz", + "bismark/methylation_calls/methylation_coverage/SRR389222_sub3_trimmed_bismark_bt2.deduplicated.bismark.cov.gz", + "bismark/methylation_calls/splitting_report", + "bismark/methylation_calls/splitting_report/Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplicated_splitting_report.txt", + "bismark/methylation_calls/splitting_report/SRR389222_sub1_trimmed_bismark_bt2.deduplicated_splitting_report.txt", + "bismark/methylation_calls/splitting_report/SRR389222_sub2_trimmed_bismark_bt2.deduplicated_splitting_report.txt", + "bismark/methylation_calls/splitting_report/SRR389222_sub3_trimmed_bismark_bt2.deduplicated_splitting_report.txt", + "bismark/reports", + "bismark/reports/Ecoli_10K_methylated_1_val_1_bismark_bt2_PE_report.html", + "bismark/reports/SRR389222_sub1_trimmed_bismark_bt2_SE_report.html", + "bismark/reports/SRR389222_sub2_trimmed_bismark_bt2_SE_report.html", + "bismark/reports/SRR389222_sub3_trimmed_bismark_bt2_SE_report.html", + "bismark/summary", + "bismark/summary/bismark_summary_report.html", + "bismark/summary/bismark_summary_report.txt", + "fastqc", + "fastqc/Ecoli_10K_methylated_1_fastqc.html", + "fastqc/Ecoli_10K_methylated_2_fastqc.html", + "fastqc/SRR389222_sub1_fastqc.html", + "fastqc/SRR389222_sub2_fastqc.html", + "fastqc/SRR389222_sub3_fastqc.html", + "fastqc/zips", + "fastqc/zips/Ecoli_10K_methylated_1_fastqc.zip", + "fastqc/zips/Ecoli_10K_methylated_2_fastqc.zip", + "fastqc/zips/SRR389222_sub1_fastqc.zip", + "fastqc/zips/SRR389222_sub2_fastqc.zip", + "fastqc/zips/SRR389222_sub3_fastqc.zip", + "multiqc", + "multiqc/bismark", + "multiqc/bismark/multiqc_data", + "multiqc/bismark/multiqc_data/bismark-methylation-dp.txt", + "multiqc/bismark/multiqc_data/bismark_alignment.txt", + "multiqc/bismark/multiqc_data/bismark_deduplication.txt", + "multiqc/bismark/multiqc_data/bismark_mbias_CHG_R1.txt", + "multiqc/bismark/multiqc_data/bismark_mbias_CHG_R2.txt", + "multiqc/bismark/multiqc_data/bismark_mbias_CHH_R1.txt", + "multiqc/bismark/multiqc_data/bismark_mbias_CHH_R2.txt", + "multiqc/bismark/multiqc_data/bismark_mbias_CpG_R1.txt", + "multiqc/bismark/multiqc_data/bismark_mbias_CpG_R2.txt", + "multiqc/bismark/multiqc_data/bismark_strand_alignment.txt", + "multiqc/bismark/multiqc_data/cutadapt_filtered_reads_plot.txt", + "multiqc/bismark/multiqc_data/cutadapt_trimmed_sequences_plot_3_Counts.txt", + "multiqc/bismark/multiqc_data/cutadapt_trimmed_sequences_plot_3_Obs_Exp.txt", + "multiqc/bismark/multiqc_data/fastqc-status-check-heatmap.txt", + "multiqc/bismark/multiqc_data/fastqc_adapter_content_plot.txt", + "multiqc/bismark/multiqc_data/fastqc_overrepresented_sequences_plot.txt", + "multiqc/bismark/multiqc_data/fastqc_per_base_n_content_plot.txt", + "multiqc/bismark/multiqc_data/fastqc_per_base_sequence_quality_plot.txt", + "multiqc/bismark/multiqc_data/fastqc_per_sequence_gc_content_plot_Counts.txt", + "multiqc/bismark/multiqc_data/fastqc_per_sequence_gc_content_plot_Percentages.txt", + "multiqc/bismark/multiqc_data/fastqc_per_sequence_quality_scores_plot.txt", + "multiqc/bismark/multiqc_data/fastqc_sequence_counts_plot.txt", + "multiqc/bismark/multiqc_data/fastqc_sequence_duplication_levels_plot.txt", + "multiqc/bismark/multiqc_data/fastqc_top_overrepresented_sequences_table.txt", + "multiqc/bismark/multiqc_data/multiqc.log", + "multiqc/bismark/multiqc_data/multiqc_bismark_alignment.txt", + "multiqc/bismark/multiqc_data/multiqc_bismark_dedup.txt", + "multiqc/bismark/multiqc_data/multiqc_bismark_methextract.txt", + "multiqc/bismark/multiqc_data/multiqc_citations.txt", + "multiqc/bismark/multiqc_data/multiqc_cutadapt.txt", + "multiqc/bismark/multiqc_data/multiqc_data.json", + "multiqc/bismark/multiqc_data/multiqc_fastqc.txt", + "multiqc/bismark/multiqc_data/multiqc_general_stats.txt", + "multiqc/bismark/multiqc_data/multiqc_qualimap_bamqc_genome_results.txt", + "multiqc/bismark/multiqc_data/multiqc_software_versions.txt", + "multiqc/bismark/multiqc_data/multiqc_sources.txt", + "multiqc/bismark/multiqc_data/qualimap_coverage_histogram.txt", + "multiqc/bismark/multiqc_data/qualimap_gc_content.txt", + "multiqc/bismark/multiqc_data/qualimap_genome_fraction.txt", + "multiqc/bismark/multiqc_data/qualimap_insert_size.txt", + "multiqc/bismark/multiqc_plots", + "multiqc/bismark/multiqc_plots/pdf", + "multiqc/bismark/multiqc_plots/pdf/bismark-methylation-dp.pdf", + "multiqc/bismark/multiqc_plots/pdf/bismark_alignment-cnt.pdf", + "multiqc/bismark/multiqc_plots/pdf/bismark_alignment-pct.pdf", + "multiqc/bismark/multiqc_plots/pdf/bismark_deduplication-cnt.pdf", + "multiqc/bismark/multiqc_plots/pdf/bismark_deduplication-pct.pdf", + "multiqc/bismark/multiqc_plots/pdf/bismark_mbias_CHG_R1.pdf", + "multiqc/bismark/multiqc_plots/pdf/bismark_mbias_CHG_R2.pdf", + "multiqc/bismark/multiqc_plots/pdf/bismark_mbias_CHH_R1.pdf", + "multiqc/bismark/multiqc_plots/pdf/bismark_mbias_CHH_R2.pdf", + "multiqc/bismark/multiqc_plots/pdf/bismark_mbias_CpG_R1.pdf", + "multiqc/bismark/multiqc_plots/pdf/bismark_mbias_CpG_R2.pdf", + "multiqc/bismark/multiqc_plots/pdf/bismark_strand_alignment-cnt.pdf", + "multiqc/bismark/multiqc_plots/pdf/bismark_strand_alignment-pct.pdf", + "multiqc/bismark/multiqc_plots/pdf/cutadapt_filtered_reads_plot-cnt.pdf", + "multiqc/bismark/multiqc_plots/pdf/cutadapt_filtered_reads_plot-pct.pdf", + "multiqc/bismark/multiqc_plots/pdf/cutadapt_trimmed_sequences_plot_3_Counts.pdf", + "multiqc/bismark/multiqc_plots/pdf/cutadapt_trimmed_sequences_plot_3_Obs_Exp.pdf", + "multiqc/bismark/multiqc_plots/pdf/fastqc-status-check-heatmap.pdf", + "multiqc/bismark/multiqc_plots/pdf/fastqc_adapter_content_plot.pdf", + "multiqc/bismark/multiqc_plots/pdf/fastqc_overrepresented_sequences_plot.pdf", + "multiqc/bismark/multiqc_plots/pdf/fastqc_per_base_n_content_plot.pdf", + "multiqc/bismark/multiqc_plots/pdf/fastqc_per_base_sequence_quality_plot.pdf", + "multiqc/bismark/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Counts.pdf", + "multiqc/bismark/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Percentages.pdf", + "multiqc/bismark/multiqc_plots/pdf/fastqc_per_sequence_quality_scores_plot.pdf", + "multiqc/bismark/multiqc_plots/pdf/fastqc_sequence_counts_plot-cnt.pdf", + "multiqc/bismark/multiqc_plots/pdf/fastqc_sequence_counts_plot-pct.pdf", + "multiqc/bismark/multiqc_plots/pdf/fastqc_sequence_duplication_levels_plot.pdf", + "multiqc/bismark/multiqc_plots/pdf/fastqc_top_overrepresented_sequences_table.pdf", + "multiqc/bismark/multiqc_plots/pdf/general_stats_table.pdf", + "multiqc/bismark/multiqc_plots/pdf/qualimap_coverage_histogram.pdf", + "multiqc/bismark/multiqc_plots/pdf/qualimap_gc_content.pdf", + "multiqc/bismark/multiqc_plots/pdf/qualimap_genome_fraction.pdf", + "multiqc/bismark/multiqc_plots/pdf/qualimap_insert_size.pdf", + "multiqc/bismark/multiqc_plots/png", + "multiqc/bismark/multiqc_plots/png/bismark-methylation-dp.png", + "multiqc/bismark/multiqc_plots/png/bismark_alignment-cnt.png", + "multiqc/bismark/multiqc_plots/png/bismark_alignment-pct.png", + "multiqc/bismark/multiqc_plots/png/bismark_deduplication-cnt.png", + "multiqc/bismark/multiqc_plots/png/bismark_deduplication-pct.png", + "multiqc/bismark/multiqc_plots/png/bismark_mbias_CHG_R1.png", + "multiqc/bismark/multiqc_plots/png/bismark_mbias_CHG_R2.png", + "multiqc/bismark/multiqc_plots/png/bismark_mbias_CHH_R1.png", + "multiqc/bismark/multiqc_plots/png/bismark_mbias_CHH_R2.png", + "multiqc/bismark/multiqc_plots/png/bismark_mbias_CpG_R1.png", + "multiqc/bismark/multiqc_plots/png/bismark_mbias_CpG_R2.png", + "multiqc/bismark/multiqc_plots/png/bismark_strand_alignment-cnt.png", + "multiqc/bismark/multiqc_plots/png/bismark_strand_alignment-pct.png", + "multiqc/bismark/multiqc_plots/png/cutadapt_filtered_reads_plot-cnt.png", + "multiqc/bismark/multiqc_plots/png/cutadapt_filtered_reads_plot-pct.png", + "multiqc/bismark/multiqc_plots/png/cutadapt_trimmed_sequences_plot_3_Counts.png", + "multiqc/bismark/multiqc_plots/png/cutadapt_trimmed_sequences_plot_3_Obs_Exp.png", + "multiqc/bismark/multiqc_plots/png/fastqc-status-check-heatmap.png", + "multiqc/bismark/multiqc_plots/png/fastqc_adapter_content_plot.png", + "multiqc/bismark/multiqc_plots/png/fastqc_overrepresented_sequences_plot.png", + "multiqc/bismark/multiqc_plots/png/fastqc_per_base_n_content_plot.png", + "multiqc/bismark/multiqc_plots/png/fastqc_per_base_sequence_quality_plot.png", + "multiqc/bismark/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Counts.png", + "multiqc/bismark/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Percentages.png", + "multiqc/bismark/multiqc_plots/png/fastqc_per_sequence_quality_scores_plot.png", + "multiqc/bismark/multiqc_plots/png/fastqc_sequence_counts_plot-cnt.png", + "multiqc/bismark/multiqc_plots/png/fastqc_sequence_counts_plot-pct.png", + "multiqc/bismark/multiqc_plots/png/fastqc_sequence_duplication_levels_plot.png", + "multiqc/bismark/multiqc_plots/png/fastqc_top_overrepresented_sequences_table.png", + "multiqc/bismark/multiqc_plots/png/general_stats_table.png", + "multiqc/bismark/multiqc_plots/png/qualimap_coverage_histogram.png", + "multiqc/bismark/multiqc_plots/png/qualimap_gc_content.png", + "multiqc/bismark/multiqc_plots/png/qualimap_genome_fraction.png", + "multiqc/bismark/multiqc_plots/png/qualimap_insert_size.png", + "multiqc/bismark/multiqc_plots/svg", + "multiqc/bismark/multiqc_plots/svg/bismark-methylation-dp.svg", + "multiqc/bismark/multiqc_plots/svg/bismark_alignment-cnt.svg", + "multiqc/bismark/multiqc_plots/svg/bismark_alignment-pct.svg", + "multiqc/bismark/multiqc_plots/svg/bismark_deduplication-cnt.svg", + "multiqc/bismark/multiqc_plots/svg/bismark_deduplication-pct.svg", + "multiqc/bismark/multiqc_plots/svg/bismark_mbias_CHG_R1.svg", + "multiqc/bismark/multiqc_plots/svg/bismark_mbias_CHG_R2.svg", + "multiqc/bismark/multiqc_plots/svg/bismark_mbias_CHH_R1.svg", + "multiqc/bismark/multiqc_plots/svg/bismark_mbias_CHH_R2.svg", + "multiqc/bismark/multiqc_plots/svg/bismark_mbias_CpG_R1.svg", + "multiqc/bismark/multiqc_plots/svg/bismark_mbias_CpG_R2.svg", + "multiqc/bismark/multiqc_plots/svg/bismark_strand_alignment-cnt.svg", + "multiqc/bismark/multiqc_plots/svg/bismark_strand_alignment-pct.svg", + "multiqc/bismark/multiqc_plots/svg/cutadapt_filtered_reads_plot-cnt.svg", + "multiqc/bismark/multiqc_plots/svg/cutadapt_filtered_reads_plot-pct.svg", + "multiqc/bismark/multiqc_plots/svg/cutadapt_trimmed_sequences_plot_3_Counts.svg", + "multiqc/bismark/multiqc_plots/svg/cutadapt_trimmed_sequences_plot_3_Obs_Exp.svg", + "multiqc/bismark/multiqc_plots/svg/fastqc-status-check-heatmap.svg", + "multiqc/bismark/multiqc_plots/svg/fastqc_adapter_content_plot.svg", + "multiqc/bismark/multiqc_plots/svg/fastqc_overrepresented_sequences_plot.svg", + "multiqc/bismark/multiqc_plots/svg/fastqc_per_base_n_content_plot.svg", + "multiqc/bismark/multiqc_plots/svg/fastqc_per_base_sequence_quality_plot.svg", + "multiqc/bismark/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Counts.svg", + "multiqc/bismark/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Percentages.svg", + "multiqc/bismark/multiqc_plots/svg/fastqc_per_sequence_quality_scores_plot.svg", + "multiqc/bismark/multiqc_plots/svg/fastqc_sequence_counts_plot-cnt.svg", + "multiqc/bismark/multiqc_plots/svg/fastqc_sequence_counts_plot-pct.svg", + "multiqc/bismark/multiqc_plots/svg/fastqc_sequence_duplication_levels_plot.svg", + "multiqc/bismark/multiqc_plots/svg/fastqc_top_overrepresented_sequences_table.svg", + "multiqc/bismark/multiqc_plots/svg/general_stats_table.svg", + "multiqc/bismark/multiqc_plots/svg/qualimap_coverage_histogram.svg", + "multiqc/bismark/multiqc_plots/svg/qualimap_gc_content.svg", + "multiqc/bismark/multiqc_plots/svg/qualimap_genome_fraction.svg", + "multiqc/bismark/multiqc_plots/svg/qualimap_insert_size.svg", + "multiqc/bismark/multiqc_report.html", + "pipeline_info", + "pipeline_info/nf_core_pipeline_software_mqc_versions.yml", + "qualimap", + "qualimap/Ecoli_10K_methylated", + "qualimap/Ecoli_10K_methylated/css", + "qualimap/Ecoli_10K_methylated/css/agogo.css", + "qualimap/Ecoli_10K_methylated/css/ajax-loader.gif", + "qualimap/Ecoli_10K_methylated/css/basic.css", + "qualimap/Ecoli_10K_methylated/css/bgfooter.png", + "qualimap/Ecoli_10K_methylated/css/bgtop.png", + "qualimap/Ecoli_10K_methylated/css/comment-bright.png", + "qualimap/Ecoli_10K_methylated/css/comment-close.png", + "qualimap/Ecoli_10K_methylated/css/comment.png", + "qualimap/Ecoli_10K_methylated/css/doctools.js", + "qualimap/Ecoli_10K_methylated/css/down-pressed.png", + "qualimap/Ecoli_10K_methylated/css/down.png", + "qualimap/Ecoli_10K_methylated/css/file.png", + "qualimap/Ecoli_10K_methylated/css/jquery.js", + "qualimap/Ecoli_10K_methylated/css/minus.png", + "qualimap/Ecoli_10K_methylated/css/plus.png", + "qualimap/Ecoli_10K_methylated/css/pygments.css", + "qualimap/Ecoli_10K_methylated/css/qualimap_logo_small.png", + "qualimap/Ecoli_10K_methylated/css/report.css", + "qualimap/Ecoli_10K_methylated/css/searchtools.js", + "qualimap/Ecoli_10K_methylated/css/underscore.js", + "qualimap/Ecoli_10K_methylated/css/up-pressed.png", + "qualimap/Ecoli_10K_methylated/css/up.png", + "qualimap/Ecoli_10K_methylated/css/websupport.js", + "qualimap/Ecoli_10K_methylated/genome_results.txt", + "qualimap/Ecoli_10K_methylated/images_qualimapReport", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_coverage_0to50_histogram.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_coverage_across_reference.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_coverage_histogram.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_coverage_quotes.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_gc_content_per_window.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_insert_size_across_reference.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_insert_size_histogram.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_mapping_quality_across_reference.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_mapping_quality_histogram.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_reads_content_per_read_position.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_uniq_read_starts_histogram.png", + "qualimap/Ecoli_10K_methylated/qualimapReport.html", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/coverage_across_reference.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/coverage_histogram.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/duplication_rate_histogram.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/genome_fraction_coverage.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/insert_size_across_reference.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/insert_size_histogram.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/mapped_reads_gc-content_distribution.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/mapped_reads_nucleotide_content.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/mapping_quality_across_reference.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/mapping_quality_histogram.txt", + "qualimap/SRR389222_sub1", + "qualimap/SRR389222_sub1/css", + "qualimap/SRR389222_sub1/css/agogo.css", + "qualimap/SRR389222_sub1/css/ajax-loader.gif", + "qualimap/SRR389222_sub1/css/basic.css", + "qualimap/SRR389222_sub1/css/bgfooter.png", + "qualimap/SRR389222_sub1/css/bgtop.png", + "qualimap/SRR389222_sub1/css/comment-bright.png", + "qualimap/SRR389222_sub1/css/comment-close.png", + "qualimap/SRR389222_sub1/css/comment.png", + "qualimap/SRR389222_sub1/css/doctools.js", + "qualimap/SRR389222_sub1/css/down-pressed.png", + "qualimap/SRR389222_sub1/css/down.png", + "qualimap/SRR389222_sub1/css/file.png", + "qualimap/SRR389222_sub1/css/jquery.js", + "qualimap/SRR389222_sub1/css/minus.png", + "qualimap/SRR389222_sub1/css/plus.png", + "qualimap/SRR389222_sub1/css/pygments.css", + "qualimap/SRR389222_sub1/css/qualimap_logo_small.png", + "qualimap/SRR389222_sub1/css/report.css", + "qualimap/SRR389222_sub1/css/searchtools.js", + "qualimap/SRR389222_sub1/css/underscore.js", + "qualimap/SRR389222_sub1/css/up-pressed.png", + "qualimap/SRR389222_sub1/css/up.png", + "qualimap/SRR389222_sub1/css/websupport.js", + "qualimap/SRR389222_sub1/genome_results.txt", + "qualimap/SRR389222_sub1/images_qualimapReport", + "qualimap/SRR389222_sub1/images_qualimapReport/genome_coverage_0to50_histogram.png", + "qualimap/SRR389222_sub1/images_qualimapReport/genome_coverage_across_reference.png", + "qualimap/SRR389222_sub1/images_qualimapReport/genome_coverage_histogram.png", + "qualimap/SRR389222_sub1/images_qualimapReport/genome_coverage_quotes.png", + "qualimap/SRR389222_sub1/images_qualimapReport/genome_gc_content_per_window.png", + "qualimap/SRR389222_sub1/images_qualimapReport/genome_mapping_quality_across_reference.png", + "qualimap/SRR389222_sub1/images_qualimapReport/genome_mapping_quality_histogram.png", + "qualimap/SRR389222_sub1/images_qualimapReport/genome_reads_content_per_read_position.png", + "qualimap/SRR389222_sub1/images_qualimapReport/genome_uniq_read_starts_histogram.png", + "qualimap/SRR389222_sub1/qualimapReport.html", + "qualimap/SRR389222_sub1/raw_data_qualimapReport", + "qualimap/SRR389222_sub1/raw_data_qualimapReport/coverage_across_reference.txt", + "qualimap/SRR389222_sub1/raw_data_qualimapReport/coverage_histogram.txt", + "qualimap/SRR389222_sub1/raw_data_qualimapReport/duplication_rate_histogram.txt", + "qualimap/SRR389222_sub1/raw_data_qualimapReport/genome_fraction_coverage.txt", + "qualimap/SRR389222_sub1/raw_data_qualimapReport/mapped_reads_gc-content_distribution.txt", + "qualimap/SRR389222_sub1/raw_data_qualimapReport/mapped_reads_nucleotide_content.txt", + "qualimap/SRR389222_sub1/raw_data_qualimapReport/mapping_quality_across_reference.txt", + "qualimap/SRR389222_sub1/raw_data_qualimapReport/mapping_quality_histogram.txt", + "qualimap/SRR389222_sub2", + "qualimap/SRR389222_sub2/css", + "qualimap/SRR389222_sub2/css/agogo.css", + "qualimap/SRR389222_sub2/css/ajax-loader.gif", + "qualimap/SRR389222_sub2/css/basic.css", + "qualimap/SRR389222_sub2/css/bgfooter.png", + "qualimap/SRR389222_sub2/css/bgtop.png", + "qualimap/SRR389222_sub2/css/comment-bright.png", + "qualimap/SRR389222_sub2/css/comment-close.png", + "qualimap/SRR389222_sub2/css/comment.png", + "qualimap/SRR389222_sub2/css/doctools.js", + "qualimap/SRR389222_sub2/css/down-pressed.png", + "qualimap/SRR389222_sub2/css/down.png", + "qualimap/SRR389222_sub2/css/file.png", + "qualimap/SRR389222_sub2/css/jquery.js", + "qualimap/SRR389222_sub2/css/minus.png", + "qualimap/SRR389222_sub2/css/plus.png", + "qualimap/SRR389222_sub2/css/pygments.css", + "qualimap/SRR389222_sub2/css/qualimap_logo_small.png", + "qualimap/SRR389222_sub2/css/report.css", + "qualimap/SRR389222_sub2/css/searchtools.js", + "qualimap/SRR389222_sub2/css/underscore.js", + "qualimap/SRR389222_sub2/css/up-pressed.png", + "qualimap/SRR389222_sub2/css/up.png", + "qualimap/SRR389222_sub2/css/websupport.js", + "qualimap/SRR389222_sub2/genome_results.txt", + "qualimap/SRR389222_sub2/images_qualimapReport", + "qualimap/SRR389222_sub2/images_qualimapReport/genome_coverage_0to50_histogram.png", + "qualimap/SRR389222_sub2/images_qualimapReport/genome_coverage_across_reference.png", + "qualimap/SRR389222_sub2/images_qualimapReport/genome_coverage_histogram.png", + "qualimap/SRR389222_sub2/images_qualimapReport/genome_coverage_quotes.png", + "qualimap/SRR389222_sub2/images_qualimapReport/genome_gc_content_per_window.png", + "qualimap/SRR389222_sub2/images_qualimapReport/genome_mapping_quality_across_reference.png", + "qualimap/SRR389222_sub2/images_qualimapReport/genome_mapping_quality_histogram.png", + "qualimap/SRR389222_sub2/images_qualimapReport/genome_reads_content_per_read_position.png", + "qualimap/SRR389222_sub2/images_qualimapReport/genome_uniq_read_starts_histogram.png", + "qualimap/SRR389222_sub2/qualimapReport.html", + "qualimap/SRR389222_sub2/raw_data_qualimapReport", + "qualimap/SRR389222_sub2/raw_data_qualimapReport/coverage_across_reference.txt", + "qualimap/SRR389222_sub2/raw_data_qualimapReport/coverage_histogram.txt", + "qualimap/SRR389222_sub2/raw_data_qualimapReport/duplication_rate_histogram.txt", + "qualimap/SRR389222_sub2/raw_data_qualimapReport/genome_fraction_coverage.txt", + "qualimap/SRR389222_sub2/raw_data_qualimapReport/mapped_reads_gc-content_distribution.txt", + "qualimap/SRR389222_sub2/raw_data_qualimapReport/mapped_reads_nucleotide_content.txt", + "qualimap/SRR389222_sub2/raw_data_qualimapReport/mapping_quality_across_reference.txt", + "qualimap/SRR389222_sub2/raw_data_qualimapReport/mapping_quality_histogram.txt", + "qualimap/SRR389222_sub3", + "qualimap/SRR389222_sub3/css", + "qualimap/SRR389222_sub3/css/agogo.css", + "qualimap/SRR389222_sub3/css/ajax-loader.gif", + "qualimap/SRR389222_sub3/css/basic.css", + "qualimap/SRR389222_sub3/css/bgfooter.png", + "qualimap/SRR389222_sub3/css/bgtop.png", + "qualimap/SRR389222_sub3/css/comment-bright.png", + "qualimap/SRR389222_sub3/css/comment-close.png", + "qualimap/SRR389222_sub3/css/comment.png", + "qualimap/SRR389222_sub3/css/doctools.js", + "qualimap/SRR389222_sub3/css/down-pressed.png", + "qualimap/SRR389222_sub3/css/down.png", + "qualimap/SRR389222_sub3/css/file.png", + "qualimap/SRR389222_sub3/css/jquery.js", + "qualimap/SRR389222_sub3/css/minus.png", + "qualimap/SRR389222_sub3/css/plus.png", + "qualimap/SRR389222_sub3/css/pygments.css", + "qualimap/SRR389222_sub3/css/qualimap_logo_small.png", + "qualimap/SRR389222_sub3/css/report.css", + "qualimap/SRR389222_sub3/css/searchtools.js", + "qualimap/SRR389222_sub3/css/underscore.js", + "qualimap/SRR389222_sub3/css/up-pressed.png", + "qualimap/SRR389222_sub3/css/up.png", + "qualimap/SRR389222_sub3/css/websupport.js", + "qualimap/SRR389222_sub3/genome_results.txt", + "qualimap/SRR389222_sub3/images_qualimapReport", + "qualimap/SRR389222_sub3/images_qualimapReport/genome_coverage_0to50_histogram.png", + "qualimap/SRR389222_sub3/images_qualimapReport/genome_coverage_across_reference.png", + "qualimap/SRR389222_sub3/images_qualimapReport/genome_coverage_histogram.png", + "qualimap/SRR389222_sub3/images_qualimapReport/genome_coverage_quotes.png", + "qualimap/SRR389222_sub3/images_qualimapReport/genome_gc_content_per_window.png", + "qualimap/SRR389222_sub3/images_qualimapReport/genome_mapping_quality_across_reference.png", + "qualimap/SRR389222_sub3/images_qualimapReport/genome_mapping_quality_histogram.png", + "qualimap/SRR389222_sub3/images_qualimapReport/genome_reads_content_per_read_position.png", + "qualimap/SRR389222_sub3/images_qualimapReport/genome_uniq_read_starts_histogram.png", + "qualimap/SRR389222_sub3/qualimapReport.html", + "qualimap/SRR389222_sub3/raw_data_qualimapReport", + "qualimap/SRR389222_sub3/raw_data_qualimapReport/coverage_across_reference.txt", + "qualimap/SRR389222_sub3/raw_data_qualimapReport/coverage_histogram.txt", + "qualimap/SRR389222_sub3/raw_data_qualimapReport/duplication_rate_histogram.txt", + "qualimap/SRR389222_sub3/raw_data_qualimapReport/genome_fraction_coverage.txt", + "qualimap/SRR389222_sub3/raw_data_qualimapReport/mapped_reads_gc-content_distribution.txt", + "qualimap/SRR389222_sub3/raw_data_qualimapReport/mapped_reads_nucleotide_content.txt", + "qualimap/SRR389222_sub3/raw_data_qualimapReport/mapping_quality_across_reference.txt", + "qualimap/SRR389222_sub3/raw_data_qualimapReport/mapping_quality_histogram.txt", + "trimgalore", + "trimgalore/fastqc", + "trimgalore/fastqc/Ecoli_10K_methylated_1_val_1_fastqc.html", + "trimgalore/fastqc/Ecoli_10K_methylated_2_val_2_fastqc.html", + "trimgalore/fastqc/SRR389222_sub1_trimmed_fastqc.html", + "trimgalore/fastqc/SRR389222_sub2_trimmed_fastqc.html", + "trimgalore/fastqc/SRR389222_sub3_trimmed_fastqc.html", + "trimgalore/fastqc/zips", + "trimgalore/fastqc/zips/Ecoli_10K_methylated_1_val_1_fastqc.zip", + "trimgalore/fastqc/zips/Ecoli_10K_methylated_2_val_2_fastqc.zip", + "trimgalore/fastqc/zips/SRR389222_sub1_trimmed_fastqc.zip", + "trimgalore/fastqc/zips/SRR389222_sub2_trimmed_fastqc.zip", + "trimgalore/fastqc/zips/SRR389222_sub3_trimmed_fastqc.zip", + "trimgalore/logs", + "trimgalore/logs/Ecoli_10K_methylated_1.fastq.gz_trimming_report.txt", + "trimgalore/logs/Ecoli_10K_methylated_2.fastq.gz_trimming_report.txt", + "trimgalore/logs/SRR389222_sub1.fastq.gz_trimming_report.txt", + "trimgalore/logs/SRR389222_sub2.fastq.gz_trimming_report.txt", + "trimgalore/logs/SRR389222_sub3.fastq.gz_trimming_report.txt" + ], + [ + "Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplicated.bedGraph.gz:md5,e8b3933de21d7618cdaab650fe544b17", + "SRR389222_sub1_trimmed_bismark_bt2.deduplicated.bedGraph.gz:md5,f662ef520f5e483cd6f2a4925afe2283", + "SRR389222_sub2_trimmed_bismark_bt2.deduplicated.bedGraph.gz:md5,330d25130120699a9ca4cf7152f9ac18", + "SRR389222_sub3_trimmed_bismark_bt2.deduplicated.bedGraph.gz:md5,9cd7348188fb06c7648b1453db5270c9", + "Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplicated.M-bias.txt:md5,83a004a3d957cf95f25933bcd828a8d4", + "SRR389222_sub1_trimmed_bismark_bt2.deduplicated.M-bias.txt:md5,aab193316d15edf54271f7d3270ae963", + "SRR389222_sub2_trimmed_bismark_bt2.deduplicated.M-bias.txt:md5,81a0d0749e3df600572188afec21a9e3", + "SRR389222_sub3_trimmed_bismark_bt2.deduplicated.M-bias.txt:md5,818aaadc83209032dc234717455ae91d", + "CHG_OB_Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplicated.txt.gz:md5,6648e11e88ef01a807333c52ac2964a5", + "CHG_OB_SRR389222_sub1_trimmed_bismark_bt2.deduplicated.txt.gz:md5,1bd85fc1289ac9e42c14d2fa232c6261", + "CHG_OB_SRR389222_sub2_trimmed_bismark_bt2.deduplicated.txt.gz:md5,a9349f20c5669316df5564d3e6bc73e6", + "CHG_OB_SRR389222_sub3_trimmed_bismark_bt2.deduplicated.txt.gz:md5,40ffa04680beee498b7e986737cbc271", + "CHG_OT_Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplicated.txt.gz:md5,e895afeef2f6f2d1fed6e564ccb63146", + "CHG_OT_SRR389222_sub1_trimmed_bismark_bt2.deduplicated.txt.gz:md5,2962bca17096687bd641686f72abda68", + "CHG_OT_SRR389222_sub2_trimmed_bismark_bt2.deduplicated.txt.gz:md5,919204311dd59f4aa67206c54fd7f8f8", + "CHG_OT_SRR389222_sub3_trimmed_bismark_bt2.deduplicated.txt.gz:md5,2b25fe0234b195bf3e7daff70813b718", + "CHH_OB_Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplicated.txt.gz:md5,e46a7bd89bfbec8be436cbb9809a301c", + "CHH_OB_SRR389222_sub1_trimmed_bismark_bt2.deduplicated.txt.gz:md5,6470dfcebe08efdc46f348564fde176d", + "CHH_OB_SRR389222_sub2_trimmed_bismark_bt2.deduplicated.txt.gz:md5,79d65ada72c0cd3e031c02cc2114a923", + "CHH_OB_SRR389222_sub3_trimmed_bismark_bt2.deduplicated.txt.gz:md5,73a7361f9c40c0dec7850fc49b34710f", + "CHH_OT_Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplicated.txt.gz:md5,c80c61b413bed68e0c43c3d27d10a459", + "CHH_OT_SRR389222_sub1_trimmed_bismark_bt2.deduplicated.txt.gz:md5,c07f7f85fb15ad944ee303a815b7b7f9", + "CHH_OT_SRR389222_sub2_trimmed_bismark_bt2.deduplicated.txt.gz:md5,36808610f2fab19d900389230662d7eb", + "CHH_OT_SRR389222_sub3_trimmed_bismark_bt2.deduplicated.txt.gz:md5,3a4e09d1a147f51deceb494daa838b6e", + "CpG_OB_Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplicated.txt.gz:md5,13b86f1428a72159c0270754a085787a", + "CpG_OB_SRR389222_sub1_trimmed_bismark_bt2.deduplicated.txt.gz:md5,84ab5e8f802ef7a196cd5e3d77f1706b", + "CpG_OB_SRR389222_sub2_trimmed_bismark_bt2.deduplicated.txt.gz:md5,63e9ba962b5a03144ebe3b81aa66db82", + "CpG_OB_SRR389222_sub3_trimmed_bismark_bt2.deduplicated.txt.gz:md5,26f790721d428428daf78151b238427b", + "CpG_OT_Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplicated.txt.gz:md5,86edd7ccccf01f158ca7d3dae5387400", + "CpG_OT_SRR389222_sub1_trimmed_bismark_bt2.deduplicated.txt.gz:md5,8d65328bece4dd79ebe2d620775a2162", + "CpG_OT_SRR389222_sub2_trimmed_bismark_bt2.deduplicated.txt.gz:md5,9ca9836b9969c6f28dc52a0ccf3b968f", + "CpG_OT_SRR389222_sub3_trimmed_bismark_bt2.deduplicated.txt.gz:md5,0711c7d0af80f5bd626edfc25f707eee", + "Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplicated.bismark.cov.gz:md5,34aa02c199f1496df0704dd239373ebe", + "SRR389222_sub1_trimmed_bismark_bt2.deduplicated.bismark.cov.gz:md5,51f024d22277e740f07b6fca27b2b159", + "SRR389222_sub2_trimmed_bismark_bt2.deduplicated.bismark.cov.gz:md5,beb2a4e9ef24ad73aa6807ddd17899d7", + "SRR389222_sub3_trimmed_bismark_bt2.deduplicated.bismark.cov.gz:md5,167ae8eabdeb46a3322f549f3b7c1285", + "Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplicated_splitting_report.txt:md5,99300545c43786859a6042bc71667837", + "SRR389222_sub1_trimmed_bismark_bt2.deduplicated_splitting_report.txt:md5,f64ef957cbd73eb084e00d72065f4d9e", + "SRR389222_sub2_trimmed_bismark_bt2.deduplicated_splitting_report.txt:md5,c9263685b01da6d8ca5df0c0758dc220", + "SRR389222_sub3_trimmed_bismark_bt2.deduplicated_splitting_report.txt:md5,747b1dfc8d64866106d9423e6fd34d91", + "bismark-methylation-dp.txt:md5,670008662fcb3aeb28e1a83d79d30418", + "bismark_alignment.txt:md5,9ea891969967030c3089b047f5a898fb", + "bismark_deduplication.txt:md5,6be5ee75673e5dcc870d49fe938394c3", + "bismark_mbias_CHG_R1.txt:md5,6614c346ec6ae907ceff3bad2acb94a6", + "bismark_mbias_CHG_R2.txt:md5,8d5b7f6a030aac6ae6ac2638ad6c3c1d", + "bismark_mbias_CHH_R1.txt:md5,e275c75724a6a7f3896afb1bf1cbf176", + "bismark_mbias_CHH_R2.txt:md5,1a6b69ad958ef5b5f57f43ac49293453", + "bismark_mbias_CpG_R1.txt:md5,852a62fa71b610f72cea7aba8ba9bd8f", + "bismark_mbias_CpG_R2.txt:md5,a386c92c649b77939a29fe7c84ecb7b8", + "bismark_strand_alignment.txt:md5,6f029e053c74f7b54bb0466228533f3c", + "cutadapt_filtered_reads_plot.txt:md5,ff1b6d4011a5be5410b9404f7ff56c56", + "cutadapt_trimmed_sequences_plot_3_Counts.txt:md5,57d07c19b0c30dc88df96c30bedcdc33", + "cutadapt_trimmed_sequences_plot_3_Obs_Exp.txt:md5,1e5ca4193f8290c5c812334d03615b41", + "fastqc-status-check-heatmap.txt:md5,218c2a7efbb9c02f652fa78fc739c866", + "fastqc_adapter_content_plot.txt:md5,48d8bd5ece984a74972ce0a0e814dd07", + "fastqc_overrepresented_sequences_plot.txt:md5,9c4b7064950b5b2c486d556984f21e9e", + "fastqc_per_base_n_content_plot.txt:md5,019d5cd4f61a31f4e7016140ca8ee36e", + "fastqc_per_base_sequence_quality_plot.txt:md5,e4c7d522114eab9bc9101e7ee9d83c8f", + "fastqc_per_sequence_gc_content_plot_Counts.txt:md5,302659bee8a02b6a38b24fe25f8eaa87", + "fastqc_per_sequence_gc_content_plot_Percentages.txt:md5,c75b396eb5dda8682fb1652a9b2e92a3", + "fastqc_per_sequence_quality_scores_plot.txt:md5,548c593f4a8be2d8627fc3bd1c280611", + "fastqc_sequence_counts_plot.txt:md5,58eeeb06bc9dcc1764c7daf0847d6bbf", + "fastqc_sequence_duplication_levels_plot.txt:md5,9e5712db9aa39b5754ea1e0c49cfff15", + "fastqc_top_overrepresented_sequences_table.txt:md5,6dfc5334a09c05392ea17369aa742d01", + "multiqc_bismark_alignment.txt:md5,4e1d3a0bc0619b11ac67ed685d5eb398", + "multiqc_bismark_dedup.txt:md5,16e464f5bf2f1851a571ec87cbc1a0d9", + "multiqc_bismark_methextract.txt:md5,ef3c68247a6254ae5e11e26052e3229e", + "multiqc_citations.txt:md5,b9d42869faad581bd963d3d3bb490026", + "multiqc_cutadapt.txt:md5,f7a61369244b1e040d264e6913b8a839", + "qualimap_coverage_histogram.txt:md5,7d321d1eb204be4c3661364cf928c3e3", + "qualimap_gc_content.txt:md5,d914dc3ae413deb1db307910d9907ea9", + "qualimap_genome_fraction.txt:md5,2f6d7ae8cfdafc69358ce6a6800bef54", + "qualimap_insert_size.txt:md5,9a7301262b2927cc9587808fe1c7ff7f", + "genome_results.txt:md5,893c67bbc730a8af63e17cd7079c8701", + "genome_results.txt:md5,663f8e46c085b0b766479e809e461d65", + "genome_results.txt:md5,1d9640d93a711641a0554cf7f9d801f7", + "genome_results.txt:md5,3cafc0b75af4d9c78d41df9073a69332" + ], + [ + [ + "Ecoli_10K_methylated.deduplicated.sorted.bam", + "8c57faf8f2ea0619982046c6aa92d518" + ], + [ + "SRR389222_sub1.deduplicated.sorted.bam", + "1b2b7cfc2ac6ff065b4708b4e2b997f" + ], + [ + "SRR389222_sub2.deduplicated.sorted.bam", + "685a11fcb763614e081c4a82f2d63844" + ], + [ + "SRR389222_sub3.deduplicated.sorted.bam", + "9c08b7ac915ada7fefb8435460ccb651" + ] + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-21T17:43:14.505236122" + } +} \ No newline at end of file diff --git a/tests/bismark_hisat.nf.test b/tests/bismark_hisat.nf.test new file mode 100644 index 00000000..8ac37b1e --- /dev/null +++ b/tests/bismark_hisat.nf.test @@ -0,0 +1,60 @@ +nextflow_pipeline { + + name "Test Workflow main.nf" + script "../main.nf" + config "./nextflow.config" + + test("Params: bismark_hisat") { + when { + params { + aligner = "bismark_hisat" + outdir = "$outputDir" + } + } + + then { + // stable_name: All files + folders in ${params.outdir}/ with a stable name + def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) + // stable_path: All files in ${params.outdir}/ with stable content + def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') + // bam_files: All bam files + def bam_files = getAllFilesFromDir(params.outdir, include: ['**/*.bam']) + assertAll( + { assert workflow.success}, + { assert snapshot( + // Number of tasks + workflow.trace.succeeded().size(), + // pipeline versions.yml file for multiqc from which Nextflow version is removed because we tests pipelines on multiple Nextflow versions + removeNextflowVersion("$outputDir/pipeline_info/nf_core_pipeline_software_mqc_versions.yml"), + // All stable path name + stable_name, + // All files with stable contents + stable_path, + // All bam files + bam_files.collect{ file -> [ file.getName(), bam(file.toString()).getReadsMD5() ] } + ).match() } + ) + } + } + + test("Params: bismark_hisat with hisat2-index") { + when { + params { + aligner = "bismark_hisat" + bismark_index = "https://github.com/nf-core/test-datasets/raw/methylseq/reference/Hisat2_Index.tar.gz" + outdir = "$outputDir" + } + } + + then { + assertAll( + { assert workflow.success }, + { assert snapshot( + // Number of tasks + workflow.trace.succeeded().size() + ).match() } + ) + } + } + +} diff --git a/tests/bismark_hisat.nf.test.snap b/tests/bismark_hisat.nf.test.snap new file mode 100644 index 00000000..0e92c1eb --- /dev/null +++ b/tests/bismark_hisat.nf.test.snap @@ -0,0 +1,591 @@ +{ + "Params: bismark_hisat with hisat2-index": { + "content": [ + 43 + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.2" + }, + "timestamp": "2024-10-12T07:21:45.007688275" + }, + "Params: bismark_hisat": { + "content": [ + 43, + { + "BISMARK_ALIGN": { + "bismark": "0.24.2" + }, + "BISMARK_GENOMEPREPARATION": { + "bismark": "0.24.2" + }, + "FASTQC": { + "fastqc": "0.12.1" + }, + "QUALIMAP_BAMQC": { + "qualimap": 2.3 + }, + "TRIMGALORE": { + "trimgalore": "0.6.10", + "cutadapt": 4.2 + }, + "Workflow": { + "nf-core/methylseq": "v2.7.0" + } + }, + [ + "bismark_hisat", + "bismark_hisat/alignments", + "bismark_hisat/alignments/logs", + "bismark_hisat/alignments/logs/Ecoli_10K_methylated_1_val_1_bismark_hisat2_PE_report.txt", + "bismark_hisat/alignments/logs/SRR389222_sub1_trimmed_bismark_hisat2_SE_report.txt", + "bismark_hisat/alignments/logs/SRR389222_sub2_trimmed_bismark_hisat2_SE_report.txt", + "bismark_hisat/alignments/logs/SRR389222_sub3_trimmed_bismark_hisat2_SE_report.txt", + "bismark_hisat/deduplicated", + "bismark_hisat/deduplicated/Ecoli_10K_methylated.deduplicated.sorted.bam", + "bismark_hisat/deduplicated/Ecoli_10K_methylated.deduplicated.sorted.bam.bai", + "bismark_hisat/deduplicated/SRR389222_sub1.deduplicated.sorted.bam", + "bismark_hisat/deduplicated/SRR389222_sub1.deduplicated.sorted.bam.bai", + "bismark_hisat/deduplicated/SRR389222_sub2.deduplicated.sorted.bam", + "bismark_hisat/deduplicated/SRR389222_sub2.deduplicated.sorted.bam.bai", + "bismark_hisat/deduplicated/SRR389222_sub3.deduplicated.sorted.bam", + "bismark_hisat/deduplicated/SRR389222_sub3.deduplicated.sorted.bam.bai", + "bismark_hisat/deduplicated/logs", + "bismark_hisat/deduplicated/logs/Ecoli_10K_methylated_1_val_1_bismark_hisat2_pe.deduplication_report.txt", + "bismark_hisat/deduplicated/logs/SRR389222_sub1_trimmed_bismark_hisat2.deduplication_report.txt", + "bismark_hisat/deduplicated/logs/SRR389222_sub2_trimmed_bismark_hisat2.deduplication_report.txt", + "bismark_hisat/deduplicated/logs/SRR389222_sub3_trimmed_bismark_hisat2.deduplication_report.txt", + "bismark_hisat/methylation_calls", + "bismark_hisat/methylation_calls/bedGraph", + "bismark_hisat/methylation_calls/bedGraph/Ecoli_10K_methylated_1_val_1_bismark_hisat2_pe.deduplicated.bedGraph.gz", + "bismark_hisat/methylation_calls/bedGraph/SRR389222_sub1_trimmed_bismark_hisat2.deduplicated.bedGraph.gz", + "bismark_hisat/methylation_calls/bedGraph/SRR389222_sub2_trimmed_bismark_hisat2.deduplicated.bedGraph.gz", + "bismark_hisat/methylation_calls/bedGraph/SRR389222_sub3_trimmed_bismark_hisat2.deduplicated.bedGraph.gz", + "bismark_hisat/methylation_calls/mbias", + "bismark_hisat/methylation_calls/mbias/Ecoli_10K_methylated_1_val_1_bismark_hisat2_pe.deduplicated.M-bias.txt", + "bismark_hisat/methylation_calls/mbias/SRR389222_sub1_trimmed_bismark_hisat2.deduplicated.M-bias.txt", + "bismark_hisat/methylation_calls/mbias/SRR389222_sub2_trimmed_bismark_hisat2.deduplicated.M-bias.txt", + "bismark_hisat/methylation_calls/mbias/SRR389222_sub3_trimmed_bismark_hisat2.deduplicated.M-bias.txt", + "bismark_hisat/methylation_calls/methylation_calls", + "bismark_hisat/methylation_calls/methylation_calls/CHG_OB_Ecoli_10K_methylated_1_val_1_bismark_hisat2_pe.deduplicated.txt.gz", + "bismark_hisat/methylation_calls/methylation_calls/CHG_OB_SRR389222_sub1_trimmed_bismark_hisat2.deduplicated.txt.gz", + "bismark_hisat/methylation_calls/methylation_calls/CHG_OB_SRR389222_sub2_trimmed_bismark_hisat2.deduplicated.txt.gz", + "bismark_hisat/methylation_calls/methylation_calls/CHG_OB_SRR389222_sub3_trimmed_bismark_hisat2.deduplicated.txt.gz", + "bismark_hisat/methylation_calls/methylation_calls/CHG_OT_Ecoli_10K_methylated_1_val_1_bismark_hisat2_pe.deduplicated.txt.gz", + "bismark_hisat/methylation_calls/methylation_calls/CHG_OT_SRR389222_sub1_trimmed_bismark_hisat2.deduplicated.txt.gz", + "bismark_hisat/methylation_calls/methylation_calls/CHG_OT_SRR389222_sub2_trimmed_bismark_hisat2.deduplicated.txt.gz", + "bismark_hisat/methylation_calls/methylation_calls/CHG_OT_SRR389222_sub3_trimmed_bismark_hisat2.deduplicated.txt.gz", + "bismark_hisat/methylation_calls/methylation_calls/CHH_OB_Ecoli_10K_methylated_1_val_1_bismark_hisat2_pe.deduplicated.txt.gz", + "bismark_hisat/methylation_calls/methylation_calls/CHH_OB_SRR389222_sub1_trimmed_bismark_hisat2.deduplicated.txt.gz", + "bismark_hisat/methylation_calls/methylation_calls/CHH_OB_SRR389222_sub2_trimmed_bismark_hisat2.deduplicated.txt.gz", + "bismark_hisat/methylation_calls/methylation_calls/CHH_OB_SRR389222_sub3_trimmed_bismark_hisat2.deduplicated.txt.gz", + "bismark_hisat/methylation_calls/methylation_calls/CHH_OT_Ecoli_10K_methylated_1_val_1_bismark_hisat2_pe.deduplicated.txt.gz", + "bismark_hisat/methylation_calls/methylation_calls/CHH_OT_SRR389222_sub1_trimmed_bismark_hisat2.deduplicated.txt.gz", + "bismark_hisat/methylation_calls/methylation_calls/CHH_OT_SRR389222_sub2_trimmed_bismark_hisat2.deduplicated.txt.gz", + "bismark_hisat/methylation_calls/methylation_calls/CHH_OT_SRR389222_sub3_trimmed_bismark_hisat2.deduplicated.txt.gz", + "bismark_hisat/methylation_calls/methylation_calls/CpG_OB_Ecoli_10K_methylated_1_val_1_bismark_hisat2_pe.deduplicated.txt.gz", + "bismark_hisat/methylation_calls/methylation_calls/CpG_OB_SRR389222_sub1_trimmed_bismark_hisat2.deduplicated.txt.gz", + "bismark_hisat/methylation_calls/methylation_calls/CpG_OB_SRR389222_sub2_trimmed_bismark_hisat2.deduplicated.txt.gz", + "bismark_hisat/methylation_calls/methylation_calls/CpG_OB_SRR389222_sub3_trimmed_bismark_hisat2.deduplicated.txt.gz", + "bismark_hisat/methylation_calls/methylation_calls/CpG_OT_Ecoli_10K_methylated_1_val_1_bismark_hisat2_pe.deduplicated.txt.gz", + "bismark_hisat/methylation_calls/methylation_calls/CpG_OT_SRR389222_sub1_trimmed_bismark_hisat2.deduplicated.txt.gz", + "bismark_hisat/methylation_calls/methylation_calls/CpG_OT_SRR389222_sub2_trimmed_bismark_hisat2.deduplicated.txt.gz", + "bismark_hisat/methylation_calls/methylation_calls/CpG_OT_SRR389222_sub3_trimmed_bismark_hisat2.deduplicated.txt.gz", + "bismark_hisat/methylation_calls/methylation_coverage", + "bismark_hisat/methylation_calls/methylation_coverage/Ecoli_10K_methylated_1_val_1_bismark_hisat2_pe.deduplicated.bismark.cov.gz", + "bismark_hisat/methylation_calls/methylation_coverage/SRR389222_sub1_trimmed_bismark_hisat2.deduplicated.bismark.cov.gz", + "bismark_hisat/methylation_calls/methylation_coverage/SRR389222_sub2_trimmed_bismark_hisat2.deduplicated.bismark.cov.gz", + "bismark_hisat/methylation_calls/methylation_coverage/SRR389222_sub3_trimmed_bismark_hisat2.deduplicated.bismark.cov.gz", + "bismark_hisat/methylation_calls/splitting_report", + "bismark_hisat/methylation_calls/splitting_report/Ecoli_10K_methylated_1_val_1_bismark_hisat2_pe.deduplicated_splitting_report.txt", + "bismark_hisat/methylation_calls/splitting_report/SRR389222_sub1_trimmed_bismark_hisat2.deduplicated_splitting_report.txt", + "bismark_hisat/methylation_calls/splitting_report/SRR389222_sub2_trimmed_bismark_hisat2.deduplicated_splitting_report.txt", + "bismark_hisat/methylation_calls/splitting_report/SRR389222_sub3_trimmed_bismark_hisat2.deduplicated_splitting_report.txt", + "bismark_hisat/reports", + "bismark_hisat/reports/Ecoli_10K_methylated_1_val_1_bismark_hisat2_PE_report.html", + "bismark_hisat/reports/SRR389222_sub1_trimmed_bismark_hisat2_SE_report.html", + "bismark_hisat/reports/SRR389222_sub2_trimmed_bismark_hisat2_SE_report.html", + "bismark_hisat/reports/SRR389222_sub3_trimmed_bismark_hisat2_SE_report.html", + "bismark_hisat/summary", + "bismark_hisat/summary/bismark_summary_report.html", + "bismark_hisat/summary/bismark_summary_report.txt", + "fastqc", + "fastqc/Ecoli_10K_methylated_1_fastqc.html", + "fastqc/Ecoli_10K_methylated_2_fastqc.html", + "fastqc/SRR389222_sub1_fastqc.html", + "fastqc/SRR389222_sub2_fastqc.html", + "fastqc/SRR389222_sub3_fastqc.html", + "fastqc/zips", + "fastqc/zips/Ecoli_10K_methylated_1_fastqc.zip", + "fastqc/zips/Ecoli_10K_methylated_2_fastqc.zip", + "fastqc/zips/SRR389222_sub1_fastqc.zip", + "fastqc/zips/SRR389222_sub2_fastqc.zip", + "fastqc/zips/SRR389222_sub3_fastqc.zip", + "multiqc", + "multiqc/bismark_hisat", + "multiqc/bismark_hisat/multiqc_data", + "multiqc/bismark_hisat/multiqc_data/bismark-methylation-dp.txt", + "multiqc/bismark_hisat/multiqc_data/bismark_alignment.txt", + "multiqc/bismark_hisat/multiqc_data/bismark_deduplication.txt", + "multiqc/bismark_hisat/multiqc_data/bismark_mbias_CHG_R1.txt", + "multiqc/bismark_hisat/multiqc_data/bismark_mbias_CHG_R2.txt", + "multiqc/bismark_hisat/multiqc_data/bismark_mbias_CHH_R1.txt", + "multiqc/bismark_hisat/multiqc_data/bismark_mbias_CHH_R2.txt", + "multiqc/bismark_hisat/multiqc_data/bismark_mbias_CpG_R1.txt", + "multiqc/bismark_hisat/multiqc_data/bismark_mbias_CpG_R2.txt", + "multiqc/bismark_hisat/multiqc_data/bismark_strand_alignment.txt", + "multiqc/bismark_hisat/multiqc_data/cutadapt_filtered_reads_plot.txt", + "multiqc/bismark_hisat/multiqc_data/cutadapt_trimmed_sequences_plot_3_Counts.txt", + "multiqc/bismark_hisat/multiqc_data/cutadapt_trimmed_sequences_plot_3_Obs_Exp.txt", + "multiqc/bismark_hisat/multiqc_data/fastqc-status-check-heatmap.txt", + "multiqc/bismark_hisat/multiqc_data/fastqc_adapter_content_plot.txt", + "multiqc/bismark_hisat/multiqc_data/fastqc_overrepresented_sequences_plot.txt", + "multiqc/bismark_hisat/multiqc_data/fastqc_per_base_n_content_plot.txt", + "multiqc/bismark_hisat/multiqc_data/fastqc_per_base_sequence_quality_plot.txt", + "multiqc/bismark_hisat/multiqc_data/fastqc_per_sequence_gc_content_plot_Counts.txt", + "multiqc/bismark_hisat/multiqc_data/fastqc_per_sequence_gc_content_plot_Percentages.txt", + "multiqc/bismark_hisat/multiqc_data/fastqc_per_sequence_quality_scores_plot.txt", + "multiqc/bismark_hisat/multiqc_data/fastqc_sequence_counts_plot.txt", + "multiqc/bismark_hisat/multiqc_data/fastqc_sequence_duplication_levels_plot.txt", + "multiqc/bismark_hisat/multiqc_data/fastqc_top_overrepresented_sequences_table.txt", + "multiqc/bismark_hisat/multiqc_data/multiqc.log", + "multiqc/bismark_hisat/multiqc_data/multiqc_bismark_alignment.txt", + "multiqc/bismark_hisat/multiqc_data/multiqc_bismark_dedup.txt", + "multiqc/bismark_hisat/multiqc_data/multiqc_bismark_methextract.txt", + "multiqc/bismark_hisat/multiqc_data/multiqc_citations.txt", + "multiqc/bismark_hisat/multiqc_data/multiqc_cutadapt.txt", + "multiqc/bismark_hisat/multiqc_data/multiqc_data.json", + "multiqc/bismark_hisat/multiqc_data/multiqc_fastqc.txt", + "multiqc/bismark_hisat/multiqc_data/multiqc_general_stats.txt", + "multiqc/bismark_hisat/multiqc_data/multiqc_qualimap_bamqc_genome_results.txt", + "multiqc/bismark_hisat/multiqc_data/multiqc_software_versions.txt", + "multiqc/bismark_hisat/multiqc_data/multiqc_sources.txt", + "multiqc/bismark_hisat/multiqc_data/qualimap_coverage_histogram.txt", + "multiqc/bismark_hisat/multiqc_data/qualimap_gc_content.txt", + "multiqc/bismark_hisat/multiqc_data/qualimap_genome_fraction.txt", + "multiqc/bismark_hisat/multiqc_data/qualimap_insert_size.txt", + "multiqc/bismark_hisat/multiqc_plots", + "multiqc/bismark_hisat/multiqc_plots/pdf", + "multiqc/bismark_hisat/multiqc_plots/pdf/bismark-methylation-dp.pdf", + "multiqc/bismark_hisat/multiqc_plots/pdf/bismark_alignment-cnt.pdf", + "multiqc/bismark_hisat/multiqc_plots/pdf/bismark_alignment-pct.pdf", + "multiqc/bismark_hisat/multiqc_plots/pdf/bismark_deduplication-cnt.pdf", + "multiqc/bismark_hisat/multiqc_plots/pdf/bismark_deduplication-pct.pdf", + "multiqc/bismark_hisat/multiqc_plots/pdf/bismark_mbias_CHG_R1.pdf", + "multiqc/bismark_hisat/multiqc_plots/pdf/bismark_mbias_CHG_R2.pdf", + "multiqc/bismark_hisat/multiqc_plots/pdf/bismark_mbias_CHH_R1.pdf", + "multiqc/bismark_hisat/multiqc_plots/pdf/bismark_mbias_CHH_R2.pdf", + "multiqc/bismark_hisat/multiqc_plots/pdf/bismark_mbias_CpG_R1.pdf", + "multiqc/bismark_hisat/multiqc_plots/pdf/bismark_mbias_CpG_R2.pdf", + "multiqc/bismark_hisat/multiqc_plots/pdf/bismark_strand_alignment-cnt.pdf", + "multiqc/bismark_hisat/multiqc_plots/pdf/bismark_strand_alignment-pct.pdf", + "multiqc/bismark_hisat/multiqc_plots/pdf/cutadapt_filtered_reads_plot-cnt.pdf", + "multiqc/bismark_hisat/multiqc_plots/pdf/cutadapt_filtered_reads_plot-pct.pdf", + "multiqc/bismark_hisat/multiqc_plots/pdf/cutadapt_trimmed_sequences_plot_3_Counts.pdf", + "multiqc/bismark_hisat/multiqc_plots/pdf/cutadapt_trimmed_sequences_plot_3_Obs_Exp.pdf", + "multiqc/bismark_hisat/multiqc_plots/pdf/fastqc-status-check-heatmap.pdf", + "multiqc/bismark_hisat/multiqc_plots/pdf/fastqc_adapter_content_plot.pdf", + "multiqc/bismark_hisat/multiqc_plots/pdf/fastqc_overrepresented_sequences_plot.pdf", + "multiqc/bismark_hisat/multiqc_plots/pdf/fastqc_per_base_n_content_plot.pdf", + "multiqc/bismark_hisat/multiqc_plots/pdf/fastqc_per_base_sequence_quality_plot.pdf", + "multiqc/bismark_hisat/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Counts.pdf", + "multiqc/bismark_hisat/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Percentages.pdf", + "multiqc/bismark_hisat/multiqc_plots/pdf/fastqc_per_sequence_quality_scores_plot.pdf", + "multiqc/bismark_hisat/multiqc_plots/pdf/fastqc_sequence_counts_plot-cnt.pdf", + "multiqc/bismark_hisat/multiqc_plots/pdf/fastqc_sequence_counts_plot-pct.pdf", + "multiqc/bismark_hisat/multiqc_plots/pdf/fastqc_sequence_duplication_levels_plot.pdf", + "multiqc/bismark_hisat/multiqc_plots/pdf/fastqc_top_overrepresented_sequences_table.pdf", + "multiqc/bismark_hisat/multiqc_plots/pdf/general_stats_table.pdf", + "multiqc/bismark_hisat/multiqc_plots/pdf/qualimap_coverage_histogram.pdf", + "multiqc/bismark_hisat/multiqc_plots/pdf/qualimap_gc_content.pdf", + "multiqc/bismark_hisat/multiqc_plots/pdf/qualimap_genome_fraction.pdf", + "multiqc/bismark_hisat/multiqc_plots/pdf/qualimap_insert_size.pdf", + "multiqc/bismark_hisat/multiqc_plots/png", + "multiqc/bismark_hisat/multiqc_plots/png/bismark-methylation-dp.png", + "multiqc/bismark_hisat/multiqc_plots/png/bismark_alignment-cnt.png", + "multiqc/bismark_hisat/multiqc_plots/png/bismark_alignment-pct.png", + "multiqc/bismark_hisat/multiqc_plots/png/bismark_deduplication-cnt.png", + "multiqc/bismark_hisat/multiqc_plots/png/bismark_deduplication-pct.png", + "multiqc/bismark_hisat/multiqc_plots/png/bismark_mbias_CHG_R1.png", + "multiqc/bismark_hisat/multiqc_plots/png/bismark_mbias_CHG_R2.png", + "multiqc/bismark_hisat/multiqc_plots/png/bismark_mbias_CHH_R1.png", + "multiqc/bismark_hisat/multiqc_plots/png/bismark_mbias_CHH_R2.png", + "multiqc/bismark_hisat/multiqc_plots/png/bismark_mbias_CpG_R1.png", + "multiqc/bismark_hisat/multiqc_plots/png/bismark_mbias_CpG_R2.png", + "multiqc/bismark_hisat/multiqc_plots/png/bismark_strand_alignment-cnt.png", + "multiqc/bismark_hisat/multiqc_plots/png/bismark_strand_alignment-pct.png", + "multiqc/bismark_hisat/multiqc_plots/png/cutadapt_filtered_reads_plot-cnt.png", + "multiqc/bismark_hisat/multiqc_plots/png/cutadapt_filtered_reads_plot-pct.png", + "multiqc/bismark_hisat/multiqc_plots/png/cutadapt_trimmed_sequences_plot_3_Counts.png", + "multiqc/bismark_hisat/multiqc_plots/png/cutadapt_trimmed_sequences_plot_3_Obs_Exp.png", + "multiqc/bismark_hisat/multiqc_plots/png/fastqc-status-check-heatmap.png", + "multiqc/bismark_hisat/multiqc_plots/png/fastqc_adapter_content_plot.png", + "multiqc/bismark_hisat/multiqc_plots/png/fastqc_overrepresented_sequences_plot.png", + "multiqc/bismark_hisat/multiqc_plots/png/fastqc_per_base_n_content_plot.png", + "multiqc/bismark_hisat/multiqc_plots/png/fastqc_per_base_sequence_quality_plot.png", + "multiqc/bismark_hisat/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Counts.png", + "multiqc/bismark_hisat/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Percentages.png", + "multiqc/bismark_hisat/multiqc_plots/png/fastqc_per_sequence_quality_scores_plot.png", + "multiqc/bismark_hisat/multiqc_plots/png/fastqc_sequence_counts_plot-cnt.png", + "multiqc/bismark_hisat/multiqc_plots/png/fastqc_sequence_counts_plot-pct.png", + "multiqc/bismark_hisat/multiqc_plots/png/fastqc_sequence_duplication_levels_plot.png", + "multiqc/bismark_hisat/multiqc_plots/png/fastqc_top_overrepresented_sequences_table.png", + "multiqc/bismark_hisat/multiqc_plots/png/general_stats_table.png", + "multiqc/bismark_hisat/multiqc_plots/png/qualimap_coverage_histogram.png", + "multiqc/bismark_hisat/multiqc_plots/png/qualimap_gc_content.png", + "multiqc/bismark_hisat/multiqc_plots/png/qualimap_genome_fraction.png", + "multiqc/bismark_hisat/multiqc_plots/png/qualimap_insert_size.png", + "multiqc/bismark_hisat/multiqc_plots/svg", + "multiqc/bismark_hisat/multiqc_plots/svg/bismark-methylation-dp.svg", + "multiqc/bismark_hisat/multiqc_plots/svg/bismark_alignment-cnt.svg", + "multiqc/bismark_hisat/multiqc_plots/svg/bismark_alignment-pct.svg", + "multiqc/bismark_hisat/multiqc_plots/svg/bismark_deduplication-cnt.svg", + "multiqc/bismark_hisat/multiqc_plots/svg/bismark_deduplication-pct.svg", + "multiqc/bismark_hisat/multiqc_plots/svg/bismark_mbias_CHG_R1.svg", + "multiqc/bismark_hisat/multiqc_plots/svg/bismark_mbias_CHG_R2.svg", + "multiqc/bismark_hisat/multiqc_plots/svg/bismark_mbias_CHH_R1.svg", + "multiqc/bismark_hisat/multiqc_plots/svg/bismark_mbias_CHH_R2.svg", + "multiqc/bismark_hisat/multiqc_plots/svg/bismark_mbias_CpG_R1.svg", + "multiqc/bismark_hisat/multiqc_plots/svg/bismark_mbias_CpG_R2.svg", + "multiqc/bismark_hisat/multiqc_plots/svg/bismark_strand_alignment-cnt.svg", + "multiqc/bismark_hisat/multiqc_plots/svg/bismark_strand_alignment-pct.svg", + "multiqc/bismark_hisat/multiqc_plots/svg/cutadapt_filtered_reads_plot-cnt.svg", + "multiqc/bismark_hisat/multiqc_plots/svg/cutadapt_filtered_reads_plot-pct.svg", + "multiqc/bismark_hisat/multiqc_plots/svg/cutadapt_trimmed_sequences_plot_3_Counts.svg", + "multiqc/bismark_hisat/multiqc_plots/svg/cutadapt_trimmed_sequences_plot_3_Obs_Exp.svg", + "multiqc/bismark_hisat/multiqc_plots/svg/fastqc-status-check-heatmap.svg", + "multiqc/bismark_hisat/multiqc_plots/svg/fastqc_adapter_content_plot.svg", + "multiqc/bismark_hisat/multiqc_plots/svg/fastqc_overrepresented_sequences_plot.svg", + "multiqc/bismark_hisat/multiqc_plots/svg/fastqc_per_base_n_content_plot.svg", + "multiqc/bismark_hisat/multiqc_plots/svg/fastqc_per_base_sequence_quality_plot.svg", + "multiqc/bismark_hisat/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Counts.svg", + "multiqc/bismark_hisat/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Percentages.svg", + "multiqc/bismark_hisat/multiqc_plots/svg/fastqc_per_sequence_quality_scores_plot.svg", + "multiqc/bismark_hisat/multiqc_plots/svg/fastqc_sequence_counts_plot-cnt.svg", + "multiqc/bismark_hisat/multiqc_plots/svg/fastqc_sequence_counts_plot-pct.svg", + "multiqc/bismark_hisat/multiqc_plots/svg/fastqc_sequence_duplication_levels_plot.svg", + "multiqc/bismark_hisat/multiqc_plots/svg/fastqc_top_overrepresented_sequences_table.svg", + "multiqc/bismark_hisat/multiqc_plots/svg/general_stats_table.svg", + "multiqc/bismark_hisat/multiqc_plots/svg/qualimap_coverage_histogram.svg", + "multiqc/bismark_hisat/multiqc_plots/svg/qualimap_gc_content.svg", + "multiqc/bismark_hisat/multiqc_plots/svg/qualimap_genome_fraction.svg", + "multiqc/bismark_hisat/multiqc_plots/svg/qualimap_insert_size.svg", + "multiqc/bismark_hisat/multiqc_report.html", + "pipeline_info", + "pipeline_info/nf_core_pipeline_software_mqc_versions.yml", + "qualimap", + "qualimap/Ecoli_10K_methylated", + "qualimap/Ecoli_10K_methylated/css", + "qualimap/Ecoli_10K_methylated/css/agogo.css", + "qualimap/Ecoli_10K_methylated/css/ajax-loader.gif", + "qualimap/Ecoli_10K_methylated/css/basic.css", + "qualimap/Ecoli_10K_methylated/css/bgfooter.png", + "qualimap/Ecoli_10K_methylated/css/bgtop.png", + "qualimap/Ecoli_10K_methylated/css/comment-bright.png", + "qualimap/Ecoli_10K_methylated/css/comment-close.png", + "qualimap/Ecoli_10K_methylated/css/comment.png", + "qualimap/Ecoli_10K_methylated/css/doctools.js", + "qualimap/Ecoli_10K_methylated/css/down-pressed.png", + "qualimap/Ecoli_10K_methylated/css/down.png", + "qualimap/Ecoli_10K_methylated/css/file.png", + "qualimap/Ecoli_10K_methylated/css/jquery.js", + "qualimap/Ecoli_10K_methylated/css/minus.png", + "qualimap/Ecoli_10K_methylated/css/plus.png", + "qualimap/Ecoli_10K_methylated/css/pygments.css", + "qualimap/Ecoli_10K_methylated/css/qualimap_logo_small.png", + "qualimap/Ecoli_10K_methylated/css/report.css", + "qualimap/Ecoli_10K_methylated/css/searchtools.js", + "qualimap/Ecoli_10K_methylated/css/underscore.js", + "qualimap/Ecoli_10K_methylated/css/up-pressed.png", + "qualimap/Ecoli_10K_methylated/css/up.png", + "qualimap/Ecoli_10K_methylated/css/websupport.js", + "qualimap/Ecoli_10K_methylated/genome_results.txt", + "qualimap/Ecoli_10K_methylated/images_qualimapReport", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_coverage_0to50_histogram.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_coverage_across_reference.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_coverage_histogram.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_coverage_quotes.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_gc_content_per_window.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_homopolymer_indels.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_insert_size_across_reference.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_insert_size_histogram.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_mapping_quality_across_reference.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_mapping_quality_histogram.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_reads_content_per_read_position.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_uniq_read_starts_histogram.png", + "qualimap/Ecoli_10K_methylated/qualimapReport.html", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/coverage_across_reference.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/coverage_histogram.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/duplication_rate_histogram.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/genome_fraction_coverage.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/homopolymer_indels.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/insert_size_across_reference.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/insert_size_histogram.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/mapped_reads_gc-content_distribution.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/mapped_reads_nucleotide_content.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/mapping_quality_across_reference.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/mapping_quality_histogram.txt", + "qualimap/SRR389222_sub1", + "qualimap/SRR389222_sub1/css", + "qualimap/SRR389222_sub1/css/agogo.css", + "qualimap/SRR389222_sub1/css/ajax-loader.gif", + "qualimap/SRR389222_sub1/css/basic.css", + "qualimap/SRR389222_sub1/css/bgfooter.png", + "qualimap/SRR389222_sub1/css/bgtop.png", + "qualimap/SRR389222_sub1/css/comment-bright.png", + "qualimap/SRR389222_sub1/css/comment-close.png", + "qualimap/SRR389222_sub1/css/comment.png", + "qualimap/SRR389222_sub1/css/doctools.js", + "qualimap/SRR389222_sub1/css/down-pressed.png", + "qualimap/SRR389222_sub1/css/down.png", + "qualimap/SRR389222_sub1/css/file.png", + "qualimap/SRR389222_sub1/css/jquery.js", + "qualimap/SRR389222_sub1/css/minus.png", + "qualimap/SRR389222_sub1/css/plus.png", + "qualimap/SRR389222_sub1/css/pygments.css", + "qualimap/SRR389222_sub1/css/qualimap_logo_small.png", + "qualimap/SRR389222_sub1/css/report.css", + "qualimap/SRR389222_sub1/css/searchtools.js", + "qualimap/SRR389222_sub1/css/underscore.js", + "qualimap/SRR389222_sub1/css/up-pressed.png", + "qualimap/SRR389222_sub1/css/up.png", + "qualimap/SRR389222_sub1/css/websupport.js", + "qualimap/SRR389222_sub1/genome_results.txt", + "qualimap/SRR389222_sub1/images_qualimapReport", + "qualimap/SRR389222_sub1/images_qualimapReport/genome_coverage_0to50_histogram.png", + "qualimap/SRR389222_sub1/images_qualimapReport/genome_coverage_across_reference.png", + "qualimap/SRR389222_sub1/images_qualimapReport/genome_coverage_histogram.png", + "qualimap/SRR389222_sub1/images_qualimapReport/genome_coverage_quotes.png", + "qualimap/SRR389222_sub1/images_qualimapReport/genome_gc_content_per_window.png", + "qualimap/SRR389222_sub1/images_qualimapReport/genome_mapping_quality_across_reference.png", + "qualimap/SRR389222_sub1/images_qualimapReport/genome_mapping_quality_histogram.png", + "qualimap/SRR389222_sub1/images_qualimapReport/genome_reads_content_per_read_position.png", + "qualimap/SRR389222_sub1/images_qualimapReport/genome_uniq_read_starts_histogram.png", + "qualimap/SRR389222_sub1/qualimapReport.html", + "qualimap/SRR389222_sub1/raw_data_qualimapReport", + "qualimap/SRR389222_sub1/raw_data_qualimapReport/coverage_across_reference.txt", + "qualimap/SRR389222_sub1/raw_data_qualimapReport/coverage_histogram.txt", + "qualimap/SRR389222_sub1/raw_data_qualimapReport/duplication_rate_histogram.txt", + "qualimap/SRR389222_sub1/raw_data_qualimapReport/genome_fraction_coverage.txt", + "qualimap/SRR389222_sub1/raw_data_qualimapReport/mapped_reads_gc-content_distribution.txt", + "qualimap/SRR389222_sub1/raw_data_qualimapReport/mapped_reads_nucleotide_content.txt", + "qualimap/SRR389222_sub1/raw_data_qualimapReport/mapping_quality_across_reference.txt", + "qualimap/SRR389222_sub1/raw_data_qualimapReport/mapping_quality_histogram.txt", + "qualimap/SRR389222_sub2", + "qualimap/SRR389222_sub2/css", + "qualimap/SRR389222_sub2/css/agogo.css", + "qualimap/SRR389222_sub2/css/ajax-loader.gif", + "qualimap/SRR389222_sub2/css/basic.css", + "qualimap/SRR389222_sub2/css/bgfooter.png", + "qualimap/SRR389222_sub2/css/bgtop.png", + "qualimap/SRR389222_sub2/css/comment-bright.png", + "qualimap/SRR389222_sub2/css/comment-close.png", + "qualimap/SRR389222_sub2/css/comment.png", + "qualimap/SRR389222_sub2/css/doctools.js", + "qualimap/SRR389222_sub2/css/down-pressed.png", + "qualimap/SRR389222_sub2/css/down.png", + "qualimap/SRR389222_sub2/css/file.png", + "qualimap/SRR389222_sub2/css/jquery.js", + "qualimap/SRR389222_sub2/css/minus.png", + "qualimap/SRR389222_sub2/css/plus.png", + "qualimap/SRR389222_sub2/css/pygments.css", + "qualimap/SRR389222_sub2/css/qualimap_logo_small.png", + "qualimap/SRR389222_sub2/css/report.css", + "qualimap/SRR389222_sub2/css/searchtools.js", + "qualimap/SRR389222_sub2/css/underscore.js", + "qualimap/SRR389222_sub2/css/up-pressed.png", + "qualimap/SRR389222_sub2/css/up.png", + "qualimap/SRR389222_sub2/css/websupport.js", + "qualimap/SRR389222_sub2/genome_results.txt", + "qualimap/SRR389222_sub2/images_qualimapReport", + "qualimap/SRR389222_sub2/images_qualimapReport/genome_coverage_0to50_histogram.png", + "qualimap/SRR389222_sub2/images_qualimapReport/genome_coverage_across_reference.png", + "qualimap/SRR389222_sub2/images_qualimapReport/genome_coverage_histogram.png", + "qualimap/SRR389222_sub2/images_qualimapReport/genome_coverage_quotes.png", + "qualimap/SRR389222_sub2/images_qualimapReport/genome_gc_content_per_window.png", + "qualimap/SRR389222_sub2/images_qualimapReport/genome_mapping_quality_across_reference.png", + "qualimap/SRR389222_sub2/images_qualimapReport/genome_mapping_quality_histogram.png", + "qualimap/SRR389222_sub2/images_qualimapReport/genome_reads_content_per_read_position.png", + "qualimap/SRR389222_sub2/images_qualimapReport/genome_uniq_read_starts_histogram.png", + "qualimap/SRR389222_sub2/qualimapReport.html", + "qualimap/SRR389222_sub2/raw_data_qualimapReport", + "qualimap/SRR389222_sub2/raw_data_qualimapReport/coverage_across_reference.txt", + "qualimap/SRR389222_sub2/raw_data_qualimapReport/coverage_histogram.txt", + "qualimap/SRR389222_sub2/raw_data_qualimapReport/duplication_rate_histogram.txt", + "qualimap/SRR389222_sub2/raw_data_qualimapReport/genome_fraction_coverage.txt", + "qualimap/SRR389222_sub2/raw_data_qualimapReport/mapped_reads_gc-content_distribution.txt", + "qualimap/SRR389222_sub2/raw_data_qualimapReport/mapped_reads_nucleotide_content.txt", + "qualimap/SRR389222_sub2/raw_data_qualimapReport/mapping_quality_across_reference.txt", + "qualimap/SRR389222_sub2/raw_data_qualimapReport/mapping_quality_histogram.txt", + "qualimap/SRR389222_sub3", + "qualimap/SRR389222_sub3/css", + "qualimap/SRR389222_sub3/css/agogo.css", + "qualimap/SRR389222_sub3/css/ajax-loader.gif", + "qualimap/SRR389222_sub3/css/basic.css", + "qualimap/SRR389222_sub3/css/bgfooter.png", + "qualimap/SRR389222_sub3/css/bgtop.png", + "qualimap/SRR389222_sub3/css/comment-bright.png", + "qualimap/SRR389222_sub3/css/comment-close.png", + "qualimap/SRR389222_sub3/css/comment.png", + "qualimap/SRR389222_sub3/css/doctools.js", + "qualimap/SRR389222_sub3/css/down-pressed.png", + "qualimap/SRR389222_sub3/css/down.png", + "qualimap/SRR389222_sub3/css/file.png", + "qualimap/SRR389222_sub3/css/jquery.js", + "qualimap/SRR389222_sub3/css/minus.png", + "qualimap/SRR389222_sub3/css/plus.png", + "qualimap/SRR389222_sub3/css/pygments.css", + "qualimap/SRR389222_sub3/css/qualimap_logo_small.png", + "qualimap/SRR389222_sub3/css/report.css", + "qualimap/SRR389222_sub3/css/searchtools.js", + "qualimap/SRR389222_sub3/css/underscore.js", + "qualimap/SRR389222_sub3/css/up-pressed.png", + "qualimap/SRR389222_sub3/css/up.png", + "qualimap/SRR389222_sub3/css/websupport.js", + "qualimap/SRR389222_sub3/genome_results.txt", + "qualimap/SRR389222_sub3/images_qualimapReport", + "qualimap/SRR389222_sub3/images_qualimapReport/genome_coverage_0to50_histogram.png", + "qualimap/SRR389222_sub3/images_qualimapReport/genome_coverage_across_reference.png", + "qualimap/SRR389222_sub3/images_qualimapReport/genome_coverage_histogram.png", + "qualimap/SRR389222_sub3/images_qualimapReport/genome_coverage_quotes.png", + "qualimap/SRR389222_sub3/images_qualimapReport/genome_gc_content_per_window.png", + "qualimap/SRR389222_sub3/images_qualimapReport/genome_mapping_quality_across_reference.png", + "qualimap/SRR389222_sub3/images_qualimapReport/genome_mapping_quality_histogram.png", + "qualimap/SRR389222_sub3/images_qualimapReport/genome_reads_content_per_read_position.png", + "qualimap/SRR389222_sub3/images_qualimapReport/genome_uniq_read_starts_histogram.png", + "qualimap/SRR389222_sub3/qualimapReport.html", + "qualimap/SRR389222_sub3/raw_data_qualimapReport", + "qualimap/SRR389222_sub3/raw_data_qualimapReport/coverage_across_reference.txt", + "qualimap/SRR389222_sub3/raw_data_qualimapReport/coverage_histogram.txt", + "qualimap/SRR389222_sub3/raw_data_qualimapReport/duplication_rate_histogram.txt", + "qualimap/SRR389222_sub3/raw_data_qualimapReport/genome_fraction_coverage.txt", + "qualimap/SRR389222_sub3/raw_data_qualimapReport/mapped_reads_gc-content_distribution.txt", + "qualimap/SRR389222_sub3/raw_data_qualimapReport/mapped_reads_nucleotide_content.txt", + "qualimap/SRR389222_sub3/raw_data_qualimapReport/mapping_quality_across_reference.txt", + "qualimap/SRR389222_sub3/raw_data_qualimapReport/mapping_quality_histogram.txt", + "trimgalore", + "trimgalore/fastqc", + "trimgalore/fastqc/Ecoli_10K_methylated_1_val_1_fastqc.html", + "trimgalore/fastqc/Ecoli_10K_methylated_2_val_2_fastqc.html", + "trimgalore/fastqc/SRR389222_sub1_trimmed_fastqc.html", + "trimgalore/fastqc/SRR389222_sub2_trimmed_fastqc.html", + "trimgalore/fastqc/SRR389222_sub3_trimmed_fastqc.html", + "trimgalore/fastqc/zips", + "trimgalore/fastqc/zips/Ecoli_10K_methylated_1_val_1_fastqc.zip", + "trimgalore/fastqc/zips/Ecoli_10K_methylated_2_val_2_fastqc.zip", + "trimgalore/fastqc/zips/SRR389222_sub1_trimmed_fastqc.zip", + "trimgalore/fastqc/zips/SRR389222_sub2_trimmed_fastqc.zip", + "trimgalore/fastqc/zips/SRR389222_sub3_trimmed_fastqc.zip", + "trimgalore/logs", + "trimgalore/logs/Ecoli_10K_methylated_1.fastq.gz_trimming_report.txt", + "trimgalore/logs/Ecoli_10K_methylated_2.fastq.gz_trimming_report.txt", + "trimgalore/logs/SRR389222_sub1.fastq.gz_trimming_report.txt", + "trimgalore/logs/SRR389222_sub2.fastq.gz_trimming_report.txt", + "trimgalore/logs/SRR389222_sub3.fastq.gz_trimming_report.txt" + ], + [ + "Ecoli_10K_methylated_1_val_1_bismark_hisat2_pe.deduplicated.bedGraph.gz:md5,357196071c54757566cdd0bb7ab79fa8", + "SRR389222_sub1_trimmed_bismark_hisat2.deduplicated.bedGraph.gz:md5,47f60a641b8564c14a0f08599215944b", + "SRR389222_sub2_trimmed_bismark_hisat2.deduplicated.bedGraph.gz:md5,2b5a22fd9d8bf25b993a8c0ad7beb13d", + "SRR389222_sub3_trimmed_bismark_hisat2.deduplicated.bedGraph.gz:md5,d42e09af121ae14f6e0de5779e317b0b", + "Ecoli_10K_methylated_1_val_1_bismark_hisat2_pe.deduplicated.M-bias.txt:md5,5fd8655f4b9dba2249a52b769fe50faf", + "SRR389222_sub1_trimmed_bismark_hisat2.deduplicated.M-bias.txt:md5,de08bb32cf22e361f9ca05058b4a5088", + "SRR389222_sub2_trimmed_bismark_hisat2.deduplicated.M-bias.txt:md5,73808d508bff5a44a5ec956df0fc3f69", + "SRR389222_sub3_trimmed_bismark_hisat2.deduplicated.M-bias.txt:md5,fee56ba84eecef9cf4ad8e01cdf1da87", + "CHG_OB_Ecoli_10K_methylated_1_val_1_bismark_hisat2_pe.deduplicated.txt.gz:md5,2702dc126d7011e0abfed5bf557d9ce7", + "CHG_OB_SRR389222_sub1_trimmed_bismark_hisat2.deduplicated.txt.gz:md5,5c177e6f00dfc6e2335a55c6b70efa0c", + "CHG_OB_SRR389222_sub2_trimmed_bismark_hisat2.deduplicated.txt.gz:md5,583bf95e8dbd3d684bef595e31453bd1", + "CHG_OB_SRR389222_sub3_trimmed_bismark_hisat2.deduplicated.txt.gz:md5,5cd486ff48be8f8fa0d4e35710be2071", + "CHG_OT_Ecoli_10K_methylated_1_val_1_bismark_hisat2_pe.deduplicated.txt.gz:md5,b508e40e494dfd9fc2c2017286cd3fe9", + "CHG_OT_SRR389222_sub1_trimmed_bismark_hisat2.deduplicated.txt.gz:md5,83573b71cd85b370737df435af41cf76", + "CHG_OT_SRR389222_sub2_trimmed_bismark_hisat2.deduplicated.txt.gz:md5,c2a2c563f630ef974710de6a9b6d88fe", + "CHG_OT_SRR389222_sub3_trimmed_bismark_hisat2.deduplicated.txt.gz:md5,5ef9ccb5710a17e63e5b7c8409cc633f", + "CHH_OB_Ecoli_10K_methylated_1_val_1_bismark_hisat2_pe.deduplicated.txt.gz:md5,f129fdf3b0f59c0380d55546bc5f8874", + "CHH_OB_SRR389222_sub1_trimmed_bismark_hisat2.deduplicated.txt.gz:md5,9469ac28e4369032b855ce1a794a56a4", + "CHH_OB_SRR389222_sub2_trimmed_bismark_hisat2.deduplicated.txt.gz:md5,3c48fa14cc07ca041a35efd978ef877a", + "CHH_OB_SRR389222_sub3_trimmed_bismark_hisat2.deduplicated.txt.gz:md5,68b5405d8de91c7046ab46fc5c42ee30", + "CHH_OT_Ecoli_10K_methylated_1_val_1_bismark_hisat2_pe.deduplicated.txt.gz:md5,112a5d2beba2f8ebda273ca3bec98d88", + "CHH_OT_SRR389222_sub1_trimmed_bismark_hisat2.deduplicated.txt.gz:md5,83d1e3ae2b492b709e25da82f1328a10", + "CHH_OT_SRR389222_sub2_trimmed_bismark_hisat2.deduplicated.txt.gz:md5,3ffdca35b32cc45fc8013f2943755014", + "CHH_OT_SRR389222_sub3_trimmed_bismark_hisat2.deduplicated.txt.gz:md5,75546cab2a0631ccab29b6bc034758b4", + "CpG_OB_Ecoli_10K_methylated_1_val_1_bismark_hisat2_pe.deduplicated.txt.gz:md5,ee183f1b0b757bfdb2f0b71502d1ce27", + "CpG_OB_SRR389222_sub1_trimmed_bismark_hisat2.deduplicated.txt.gz:md5,f0404fc1fc18c7ff58e8766b405239ed", + "CpG_OB_SRR389222_sub2_trimmed_bismark_hisat2.deduplicated.txt.gz:md5,2f0dd539df6b5943496158ccb62edc7b", + "CpG_OB_SRR389222_sub3_trimmed_bismark_hisat2.deduplicated.txt.gz:md5,0bd78a1708fb8126af553c94ab8c8371", + "CpG_OT_Ecoli_10K_methylated_1_val_1_bismark_hisat2_pe.deduplicated.txt.gz:md5,8bb4cb59815cc9e260dcfa332fcb5ae9", + "CpG_OT_SRR389222_sub1_trimmed_bismark_hisat2.deduplicated.txt.gz:md5,f46d89df2fa874a628109e32f3484179", + "CpG_OT_SRR389222_sub2_trimmed_bismark_hisat2.deduplicated.txt.gz:md5,f18fd1b0a20d2ad4ac56ee39372b6c25", + "CpG_OT_SRR389222_sub3_trimmed_bismark_hisat2.deduplicated.txt.gz:md5,528523e2703d6c20f599a325b8453670", + "Ecoli_10K_methylated_1_val_1_bismark_hisat2_pe.deduplicated.bismark.cov.gz:md5,d8342eca72089408d8e4d7c5ec5e95bf", + "SRR389222_sub1_trimmed_bismark_hisat2.deduplicated.bismark.cov.gz:md5,8f77dc7c0dea9e0c413e6a8c4fe3c9af", + "SRR389222_sub2_trimmed_bismark_hisat2.deduplicated.bismark.cov.gz:md5,0da5af753da0274f3e6b66b04a11e73a", + "SRR389222_sub3_trimmed_bismark_hisat2.deduplicated.bismark.cov.gz:md5,43f8554a2d19d172c16636374bb83084", + "Ecoli_10K_methylated_1_val_1_bismark_hisat2_pe.deduplicated_splitting_report.txt:md5,2fb90e252b14c32bcf9709c6fdaa5a1b", + "SRR389222_sub1_trimmed_bismark_hisat2.deduplicated_splitting_report.txt:md5,30d4e3aec9220b886a6ac17630f48ef3", + "SRR389222_sub2_trimmed_bismark_hisat2.deduplicated_splitting_report.txt:md5,8519a3e58f6047f71e8cf09991482332", + "SRR389222_sub3_trimmed_bismark_hisat2.deduplicated_splitting_report.txt:md5,e6144ca656936c6ee6e7281a1192fa78", + "bismark-methylation-dp.txt:md5,233409b9665cb851aca3b6b4511ff757", + "bismark_alignment.txt:md5,3acfd1a751bef6696b6fa095d0631bb6", + "bismark_deduplication.txt:md5,c025b4368b08f9e623624908632e44a1", + "bismark_mbias_CHG_R1.txt:md5,0c860f1b9828749692ef051d54adf8c5", + "bismark_mbias_CHG_R2.txt:md5,65e09a6193aee6dfb5aa2e3cdd02bb13", + "bismark_mbias_CHH_R1.txt:md5,084297fbb1d42051c0d5e1e850f7d49b", + "bismark_mbias_CHH_R2.txt:md5,593ec6453c5428d1bd2caf2d29e8ff15", + "bismark_mbias_CpG_R1.txt:md5,5205558ceef1cc75348c85d28cc31c3a", + "bismark_mbias_CpG_R2.txt:md5,7d4542b8ace370d14902f6ba3e866ba3", + "bismark_strand_alignment.txt:md5,8fd4b9aa0180cc3999cee8925c537856", + "cutadapt_filtered_reads_plot.txt:md5,ff1b6d4011a5be5410b9404f7ff56c56", + "cutadapt_trimmed_sequences_plot_3_Counts.txt:md5,57d07c19b0c30dc88df96c30bedcdc33", + "cutadapt_trimmed_sequences_plot_3_Obs_Exp.txt:md5,1e5ca4193f8290c5c812334d03615b41", + "fastqc-status-check-heatmap.txt:md5,218c2a7efbb9c02f652fa78fc739c866", + "fastqc_adapter_content_plot.txt:md5,48d8bd5ece984a74972ce0a0e814dd07", + "fastqc_overrepresented_sequences_plot.txt:md5,9c4b7064950b5b2c486d556984f21e9e", + "fastqc_per_base_n_content_plot.txt:md5,019d5cd4f61a31f4e7016140ca8ee36e", + "fastqc_per_base_sequence_quality_plot.txt:md5,e4c7d522114eab9bc9101e7ee9d83c8f", + "fastqc_per_sequence_gc_content_plot_Counts.txt:md5,302659bee8a02b6a38b24fe25f8eaa87", + "fastqc_per_sequence_gc_content_plot_Percentages.txt:md5,c75b396eb5dda8682fb1652a9b2e92a3", + "fastqc_per_sequence_quality_scores_plot.txt:md5,548c593f4a8be2d8627fc3bd1c280611", + "fastqc_sequence_counts_plot.txt:md5,58eeeb06bc9dcc1764c7daf0847d6bbf", + "fastqc_sequence_duplication_levels_plot.txt:md5,9e5712db9aa39b5754ea1e0c49cfff15", + "fastqc_top_overrepresented_sequences_table.txt:md5,6dfc5334a09c05392ea17369aa742d01", + "multiqc_bismark_alignment.txt:md5,731133921792ca3943acd7ae9938d5e7", + "multiqc_bismark_dedup.txt:md5,5e58032548eda3c39384495cf0cfaa3d", + "multiqc_bismark_methextract.txt:md5,5ce6739f6daa34276200f303c240e4b1", + "multiqc_citations.txt:md5,b9d42869faad581bd963d3d3bb490026", + "multiqc_cutadapt.txt:md5,f7a61369244b1e040d264e6913b8a839", + "qualimap_coverage_histogram.txt:md5,b78964924f4985d97f6dff7ced688d29", + "qualimap_gc_content.txt:md5,ad345dd40fe367f2138776c8ea2b257f", + "qualimap_genome_fraction.txt:md5,9a1c3d3f7349cf1c2af1c5878dac4185", + "qualimap_insert_size.txt:md5,8327f805cbaf1c61ca3128b6c16c7dfd", + "genome_results.txt:md5,9b6cc47e6ecfa1a9bd03b79f9ab764e6", + "genome_results.txt:md5,e808a20446012ad2643385cf316605c0", + "genome_results.txt:md5,41833cb9a1cfb8945c0fd6711981e58e", + "genome_results.txt:md5,10636e2fb7eb1ac2cf246483405ae973" + ], + [ + [ + "Ecoli_10K_methylated.deduplicated.sorted.bam", + "a1bd6455ebe3ecb43fe55e02d149d98" + ], + [ + "SRR389222_sub1.deduplicated.sorted.bam", + "8d735d1f6337b2cf2fa720773ce34b60" + ], + [ + "SRR389222_sub2.deduplicated.sorted.bam", + "45d53a598b4e59d173e32ea1f0558083" + ], + [ + "SRR389222_sub3.deduplicated.sorted.bam", + "ddb15c5ef0686837616d73f45c154b8d" + ] + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-21T17:44:48.196812536" + } +} \ No newline at end of file diff --git a/tests/bismark_hisat_rrbs.nf.test b/tests/bismark_hisat_rrbs.nf.test new file mode 100644 index 00000000..b8715634 --- /dev/null +++ b/tests/bismark_hisat_rrbs.nf.test @@ -0,0 +1,41 @@ +nextflow_pipeline { + + name "Test Workflow main.nf" + script "../main.nf" + config "./nextflow.config" + + test("Params: bismark_hisat | rrbs") { + when { + params { + aligner = "bismark_hisat" + rrbs = true + outdir = "$outputDir" + } + } + + then { + // stable_name: All files + folders in ${params.outdir}/ with a stable name + def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) + // stable_path: All files in ${params.outdir}/ with stable content + def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') + // bam_files: All bam files + def bam_files = getAllFilesFromDir(params.outdir, include: ['**/*.bam']) + assertAll( + { assert workflow.success}, + { assert snapshot( + // Number of tasks + workflow.trace.succeeded().size(), + // pipeline versions.yml file for multiqc from which Nextflow version is removed because we tests pipelines on multiple Nextflow versions + removeNextflowVersion("$outputDir/pipeline_info/nf_core_pipeline_software_mqc_versions.yml"), + // All stable path name + stable_name, + // All files with stable contents + stable_path, + // All bam files + bam_files.collect{ file -> [ file.getName(), bam(file.toString()).getReadsMD5() ] } + ).match() } + ) + } + } + +} diff --git a/tests/bismark_hisat_rrbs.nf.test.snap b/tests/bismark_hisat_rrbs.nf.test.snap new file mode 100644 index 00000000..0eb368cc --- /dev/null +++ b/tests/bismark_hisat_rrbs.nf.test.snap @@ -0,0 +1,584 @@ +{ + "Params: bismark_hisat | rrbs": { + "content": [ + 39, + { + "BISMARK_ALIGN": { + "bismark": "0.24.2" + }, + "BISMARK_GENOMEPREPARATION": { + "bismark": "0.24.2" + }, + "FASTQC": { + "fastqc": "0.12.1" + }, + "QUALIMAP_BAMQC": { + "qualimap": 2.3 + }, + "TRIMGALORE": { + "trimgalore": "0.6.10", + "cutadapt": 4.2 + }, + "Workflow": { + "nf-core/methylseq": "v2.7.0" + } + }, + [ + "bismark_hisat", + "bismark_hisat/alignments", + "bismark_hisat/alignments/Ecoli_10K_methylated_1_val_1_bismark_hisat2_pe.bam", + "bismark_hisat/alignments/SRR389222_sub1_trimmed_bismark_hisat2.bam", + "bismark_hisat/alignments/SRR389222_sub2_trimmed_bismark_hisat2.bam", + "bismark_hisat/alignments/SRR389222_sub3_trimmed_bismark_hisat2.bam", + "bismark_hisat/alignments/logs", + "bismark_hisat/alignments/logs/Ecoli_10K_methylated_1_val_1_bismark_hisat2_PE_report.txt", + "bismark_hisat/alignments/logs/SRR389222_sub1_trimmed_bismark_hisat2_SE_report.txt", + "bismark_hisat/alignments/logs/SRR389222_sub2_trimmed_bismark_hisat2_SE_report.txt", + "bismark_hisat/alignments/logs/SRR389222_sub3_trimmed_bismark_hisat2_SE_report.txt", + "bismark_hisat/deduplicated", + "bismark_hisat/deduplicated/Ecoli_10K_methylated.deduplicated.sorted.bam", + "bismark_hisat/deduplicated/Ecoli_10K_methylated.deduplicated.sorted.bam.bai", + "bismark_hisat/deduplicated/SRR389222_sub1.deduplicated.sorted.bam", + "bismark_hisat/deduplicated/SRR389222_sub1.deduplicated.sorted.bam.bai", + "bismark_hisat/deduplicated/SRR389222_sub2.deduplicated.sorted.bam", + "bismark_hisat/deduplicated/SRR389222_sub2.deduplicated.sorted.bam.bai", + "bismark_hisat/deduplicated/SRR389222_sub3.deduplicated.sorted.bam", + "bismark_hisat/deduplicated/SRR389222_sub3.deduplicated.sorted.bam.bai", + "bismark_hisat/methylation_calls", + "bismark_hisat/methylation_calls/bedGraph", + "bismark_hisat/methylation_calls/bedGraph/Ecoli_10K_methylated_1_val_1_bismark_hisat2_pe.bedGraph.gz", + "bismark_hisat/methylation_calls/bedGraph/SRR389222_sub1_trimmed_bismark_hisat2.bedGraph.gz", + "bismark_hisat/methylation_calls/bedGraph/SRR389222_sub2_trimmed_bismark_hisat2.bedGraph.gz", + "bismark_hisat/methylation_calls/bedGraph/SRR389222_sub3_trimmed_bismark_hisat2.bedGraph.gz", + "bismark_hisat/methylation_calls/mbias", + "bismark_hisat/methylation_calls/mbias/Ecoli_10K_methylated_1_val_1_bismark_hisat2_pe.M-bias.txt", + "bismark_hisat/methylation_calls/mbias/SRR389222_sub1_trimmed_bismark_hisat2.M-bias.txt", + "bismark_hisat/methylation_calls/mbias/SRR389222_sub2_trimmed_bismark_hisat2.M-bias.txt", + "bismark_hisat/methylation_calls/mbias/SRR389222_sub3_trimmed_bismark_hisat2.M-bias.txt", + "bismark_hisat/methylation_calls/methylation_calls", + "bismark_hisat/methylation_calls/methylation_calls/CHG_OB_Ecoli_10K_methylated_1_val_1_bismark_hisat2_pe.txt.gz", + "bismark_hisat/methylation_calls/methylation_calls/CHG_OB_SRR389222_sub1_trimmed_bismark_hisat2.txt.gz", + "bismark_hisat/methylation_calls/methylation_calls/CHG_OB_SRR389222_sub2_trimmed_bismark_hisat2.txt.gz", + "bismark_hisat/methylation_calls/methylation_calls/CHG_OB_SRR389222_sub3_trimmed_bismark_hisat2.txt.gz", + "bismark_hisat/methylation_calls/methylation_calls/CHG_OT_Ecoli_10K_methylated_1_val_1_bismark_hisat2_pe.txt.gz", + "bismark_hisat/methylation_calls/methylation_calls/CHG_OT_SRR389222_sub1_trimmed_bismark_hisat2.txt.gz", + "bismark_hisat/methylation_calls/methylation_calls/CHG_OT_SRR389222_sub2_trimmed_bismark_hisat2.txt.gz", + "bismark_hisat/methylation_calls/methylation_calls/CHG_OT_SRR389222_sub3_trimmed_bismark_hisat2.txt.gz", + "bismark_hisat/methylation_calls/methylation_calls/CHH_OB_Ecoli_10K_methylated_1_val_1_bismark_hisat2_pe.txt.gz", + "bismark_hisat/methylation_calls/methylation_calls/CHH_OB_SRR389222_sub1_trimmed_bismark_hisat2.txt.gz", + "bismark_hisat/methylation_calls/methylation_calls/CHH_OB_SRR389222_sub2_trimmed_bismark_hisat2.txt.gz", + "bismark_hisat/methylation_calls/methylation_calls/CHH_OB_SRR389222_sub3_trimmed_bismark_hisat2.txt.gz", + "bismark_hisat/methylation_calls/methylation_calls/CHH_OT_Ecoli_10K_methylated_1_val_1_bismark_hisat2_pe.txt.gz", + "bismark_hisat/methylation_calls/methylation_calls/CHH_OT_SRR389222_sub1_trimmed_bismark_hisat2.txt.gz", + "bismark_hisat/methylation_calls/methylation_calls/CHH_OT_SRR389222_sub2_trimmed_bismark_hisat2.txt.gz", + "bismark_hisat/methylation_calls/methylation_calls/CHH_OT_SRR389222_sub3_trimmed_bismark_hisat2.txt.gz", + "bismark_hisat/methylation_calls/methylation_calls/CpG_OB_Ecoli_10K_methylated_1_val_1_bismark_hisat2_pe.txt.gz", + "bismark_hisat/methylation_calls/methylation_calls/CpG_OB_SRR389222_sub1_trimmed_bismark_hisat2.txt.gz", + "bismark_hisat/methylation_calls/methylation_calls/CpG_OB_SRR389222_sub2_trimmed_bismark_hisat2.txt.gz", + "bismark_hisat/methylation_calls/methylation_calls/CpG_OB_SRR389222_sub3_trimmed_bismark_hisat2.txt.gz", + "bismark_hisat/methylation_calls/methylation_calls/CpG_OT_Ecoli_10K_methylated_1_val_1_bismark_hisat2_pe.txt.gz", + "bismark_hisat/methylation_calls/methylation_calls/CpG_OT_SRR389222_sub1_trimmed_bismark_hisat2.txt.gz", + "bismark_hisat/methylation_calls/methylation_calls/CpG_OT_SRR389222_sub2_trimmed_bismark_hisat2.txt.gz", + "bismark_hisat/methylation_calls/methylation_calls/CpG_OT_SRR389222_sub3_trimmed_bismark_hisat2.txt.gz", + "bismark_hisat/methylation_calls/methylation_coverage", + "bismark_hisat/methylation_calls/methylation_coverage/Ecoli_10K_methylated_1_val_1_bismark_hisat2_pe.bismark.cov.gz", + "bismark_hisat/methylation_calls/methylation_coverage/SRR389222_sub1_trimmed_bismark_hisat2.bismark.cov.gz", + "bismark_hisat/methylation_calls/methylation_coverage/SRR389222_sub2_trimmed_bismark_hisat2.bismark.cov.gz", + "bismark_hisat/methylation_calls/methylation_coverage/SRR389222_sub3_trimmed_bismark_hisat2.bismark.cov.gz", + "bismark_hisat/methylation_calls/splitting_report", + "bismark_hisat/methylation_calls/splitting_report/Ecoli_10K_methylated_1_val_1_bismark_hisat2_pe_splitting_report.txt", + "bismark_hisat/methylation_calls/splitting_report/SRR389222_sub1_trimmed_bismark_hisat2_splitting_report.txt", + "bismark_hisat/methylation_calls/splitting_report/SRR389222_sub2_trimmed_bismark_hisat2_splitting_report.txt", + "bismark_hisat/methylation_calls/splitting_report/SRR389222_sub3_trimmed_bismark_hisat2_splitting_report.txt", + "bismark_hisat/reports", + "bismark_hisat/reports/Ecoli_10K_methylated_1_val_1_bismark_hisat2_PE_report.html", + "bismark_hisat/reports/SRR389222_sub1_trimmed_bismark_hisat2_SE_report.html", + "bismark_hisat/reports/SRR389222_sub2_trimmed_bismark_hisat2_SE_report.html", + "bismark_hisat/reports/SRR389222_sub3_trimmed_bismark_hisat2_SE_report.html", + "bismark_hisat/summary", + "bismark_hisat/summary/bismark_summary_report.html", + "bismark_hisat/summary/bismark_summary_report.txt", + "fastqc", + "fastqc/Ecoli_10K_methylated_1_fastqc.html", + "fastqc/Ecoli_10K_methylated_2_fastqc.html", + "fastqc/SRR389222_sub1_fastqc.html", + "fastqc/SRR389222_sub2_fastqc.html", + "fastqc/SRR389222_sub3_fastqc.html", + "fastqc/zips", + "fastqc/zips/Ecoli_10K_methylated_1_fastqc.zip", + "fastqc/zips/Ecoli_10K_methylated_2_fastqc.zip", + "fastqc/zips/SRR389222_sub1_fastqc.zip", + "fastqc/zips/SRR389222_sub2_fastqc.zip", + "fastqc/zips/SRR389222_sub3_fastqc.zip", + "multiqc", + "multiqc/bismark_hisat", + "multiqc/bismark_hisat/multiqc_data", + "multiqc/bismark_hisat/multiqc_data/bismark-methylation-dp.txt", + "multiqc/bismark_hisat/multiqc_data/bismark_alignment.txt", + "multiqc/bismark_hisat/multiqc_data/bismark_mbias_CHG_R1.txt", + "multiqc/bismark_hisat/multiqc_data/bismark_mbias_CHG_R2.txt", + "multiqc/bismark_hisat/multiqc_data/bismark_mbias_CHH_R1.txt", + "multiqc/bismark_hisat/multiqc_data/bismark_mbias_CHH_R2.txt", + "multiqc/bismark_hisat/multiqc_data/bismark_mbias_CpG_R1.txt", + "multiqc/bismark_hisat/multiqc_data/bismark_mbias_CpG_R2.txt", + "multiqc/bismark_hisat/multiqc_data/bismark_strand_alignment.txt", + "multiqc/bismark_hisat/multiqc_data/cutadapt_filtered_reads_plot.txt", + "multiqc/bismark_hisat/multiqc_data/cutadapt_trimmed_sequences_plot_3_Counts.txt", + "multiqc/bismark_hisat/multiqc_data/cutadapt_trimmed_sequences_plot_3_Obs_Exp.txt", + "multiqc/bismark_hisat/multiqc_data/fastqc-status-check-heatmap.txt", + "multiqc/bismark_hisat/multiqc_data/fastqc_adapter_content_plot.txt", + "multiqc/bismark_hisat/multiqc_data/fastqc_overrepresented_sequences_plot.txt", + "multiqc/bismark_hisat/multiqc_data/fastqc_per_base_n_content_plot.txt", + "multiqc/bismark_hisat/multiqc_data/fastqc_per_base_sequence_quality_plot.txt", + "multiqc/bismark_hisat/multiqc_data/fastqc_per_sequence_gc_content_plot_Counts.txt", + "multiqc/bismark_hisat/multiqc_data/fastqc_per_sequence_gc_content_plot_Percentages.txt", + "multiqc/bismark_hisat/multiqc_data/fastqc_per_sequence_quality_scores_plot.txt", + "multiqc/bismark_hisat/multiqc_data/fastqc_sequence_counts_plot.txt", + "multiqc/bismark_hisat/multiqc_data/fastqc_sequence_duplication_levels_plot.txt", + "multiqc/bismark_hisat/multiqc_data/fastqc_top_overrepresented_sequences_table.txt", + "multiqc/bismark_hisat/multiqc_data/multiqc.log", + "multiqc/bismark_hisat/multiqc_data/multiqc_bismark_alignment.txt", + "multiqc/bismark_hisat/multiqc_data/multiqc_bismark_methextract.txt", + "multiqc/bismark_hisat/multiqc_data/multiqc_citations.txt", + "multiqc/bismark_hisat/multiqc_data/multiqc_cutadapt.txt", + "multiqc/bismark_hisat/multiqc_data/multiqc_data.json", + "multiqc/bismark_hisat/multiqc_data/multiqc_fastqc.txt", + "multiqc/bismark_hisat/multiqc_data/multiqc_general_stats.txt", + "multiqc/bismark_hisat/multiqc_data/multiqc_qualimap_bamqc_genome_results.txt", + "multiqc/bismark_hisat/multiqc_data/multiqc_software_versions.txt", + "multiqc/bismark_hisat/multiqc_data/multiqc_sources.txt", + "multiqc/bismark_hisat/multiqc_data/qualimap_coverage_histogram.txt", + "multiqc/bismark_hisat/multiqc_data/qualimap_gc_content.txt", + "multiqc/bismark_hisat/multiqc_data/qualimap_genome_fraction.txt", + "multiqc/bismark_hisat/multiqc_data/qualimap_insert_size.txt", + "multiqc/bismark_hisat/multiqc_plots", + "multiqc/bismark_hisat/multiqc_plots/pdf", + "multiqc/bismark_hisat/multiqc_plots/pdf/bismark-methylation-dp.pdf", + "multiqc/bismark_hisat/multiqc_plots/pdf/bismark_alignment-cnt.pdf", + "multiqc/bismark_hisat/multiqc_plots/pdf/bismark_alignment-pct.pdf", + "multiqc/bismark_hisat/multiqc_plots/pdf/bismark_mbias_CHG_R1.pdf", + "multiqc/bismark_hisat/multiqc_plots/pdf/bismark_mbias_CHG_R2.pdf", + "multiqc/bismark_hisat/multiqc_plots/pdf/bismark_mbias_CHH_R1.pdf", + "multiqc/bismark_hisat/multiqc_plots/pdf/bismark_mbias_CHH_R2.pdf", + "multiqc/bismark_hisat/multiqc_plots/pdf/bismark_mbias_CpG_R1.pdf", + "multiqc/bismark_hisat/multiqc_plots/pdf/bismark_mbias_CpG_R2.pdf", + "multiqc/bismark_hisat/multiqc_plots/pdf/bismark_strand_alignment-cnt.pdf", + "multiqc/bismark_hisat/multiqc_plots/pdf/bismark_strand_alignment-pct.pdf", + "multiqc/bismark_hisat/multiqc_plots/pdf/cutadapt_filtered_reads_plot-cnt.pdf", + "multiqc/bismark_hisat/multiqc_plots/pdf/cutadapt_filtered_reads_plot-pct.pdf", + "multiqc/bismark_hisat/multiqc_plots/pdf/cutadapt_trimmed_sequences_plot_3_Counts.pdf", + "multiqc/bismark_hisat/multiqc_plots/pdf/cutadapt_trimmed_sequences_plot_3_Obs_Exp.pdf", + "multiqc/bismark_hisat/multiqc_plots/pdf/fastqc-status-check-heatmap.pdf", + "multiqc/bismark_hisat/multiqc_plots/pdf/fastqc_adapter_content_plot.pdf", + "multiqc/bismark_hisat/multiqc_plots/pdf/fastqc_overrepresented_sequences_plot.pdf", + "multiqc/bismark_hisat/multiqc_plots/pdf/fastqc_per_base_n_content_plot.pdf", + "multiqc/bismark_hisat/multiqc_plots/pdf/fastqc_per_base_sequence_quality_plot.pdf", + "multiqc/bismark_hisat/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Counts.pdf", + "multiqc/bismark_hisat/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Percentages.pdf", + "multiqc/bismark_hisat/multiqc_plots/pdf/fastqc_per_sequence_quality_scores_plot.pdf", + "multiqc/bismark_hisat/multiqc_plots/pdf/fastqc_sequence_counts_plot-cnt.pdf", + "multiqc/bismark_hisat/multiqc_plots/pdf/fastqc_sequence_counts_plot-pct.pdf", + "multiqc/bismark_hisat/multiqc_plots/pdf/fastqc_sequence_duplication_levels_plot.pdf", + "multiqc/bismark_hisat/multiqc_plots/pdf/fastqc_top_overrepresented_sequences_table.pdf", + "multiqc/bismark_hisat/multiqc_plots/pdf/general_stats_table.pdf", + "multiqc/bismark_hisat/multiqc_plots/pdf/qualimap_coverage_histogram.pdf", + "multiqc/bismark_hisat/multiqc_plots/pdf/qualimap_gc_content.pdf", + "multiqc/bismark_hisat/multiqc_plots/pdf/qualimap_genome_fraction.pdf", + "multiqc/bismark_hisat/multiqc_plots/pdf/qualimap_insert_size.pdf", + "multiqc/bismark_hisat/multiqc_plots/png", + "multiqc/bismark_hisat/multiqc_plots/png/bismark-methylation-dp.png", + "multiqc/bismark_hisat/multiqc_plots/png/bismark_alignment-cnt.png", + "multiqc/bismark_hisat/multiqc_plots/png/bismark_alignment-pct.png", + "multiqc/bismark_hisat/multiqc_plots/png/bismark_mbias_CHG_R1.png", + "multiqc/bismark_hisat/multiqc_plots/png/bismark_mbias_CHG_R2.png", + "multiqc/bismark_hisat/multiqc_plots/png/bismark_mbias_CHH_R1.png", + "multiqc/bismark_hisat/multiqc_plots/png/bismark_mbias_CHH_R2.png", + "multiqc/bismark_hisat/multiqc_plots/png/bismark_mbias_CpG_R1.png", + "multiqc/bismark_hisat/multiqc_plots/png/bismark_mbias_CpG_R2.png", + "multiqc/bismark_hisat/multiqc_plots/png/bismark_strand_alignment-cnt.png", + "multiqc/bismark_hisat/multiqc_plots/png/bismark_strand_alignment-pct.png", + "multiqc/bismark_hisat/multiqc_plots/png/cutadapt_filtered_reads_plot-cnt.png", + "multiqc/bismark_hisat/multiqc_plots/png/cutadapt_filtered_reads_plot-pct.png", + "multiqc/bismark_hisat/multiqc_plots/png/cutadapt_trimmed_sequences_plot_3_Counts.png", + "multiqc/bismark_hisat/multiqc_plots/png/cutadapt_trimmed_sequences_plot_3_Obs_Exp.png", + "multiqc/bismark_hisat/multiqc_plots/png/fastqc-status-check-heatmap.png", + "multiqc/bismark_hisat/multiqc_plots/png/fastqc_adapter_content_plot.png", + "multiqc/bismark_hisat/multiqc_plots/png/fastqc_overrepresented_sequences_plot.png", + "multiqc/bismark_hisat/multiqc_plots/png/fastqc_per_base_n_content_plot.png", + "multiqc/bismark_hisat/multiqc_plots/png/fastqc_per_base_sequence_quality_plot.png", + "multiqc/bismark_hisat/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Counts.png", + "multiqc/bismark_hisat/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Percentages.png", + "multiqc/bismark_hisat/multiqc_plots/png/fastqc_per_sequence_quality_scores_plot.png", + "multiqc/bismark_hisat/multiqc_plots/png/fastqc_sequence_counts_plot-cnt.png", + "multiqc/bismark_hisat/multiqc_plots/png/fastqc_sequence_counts_plot-pct.png", + "multiqc/bismark_hisat/multiqc_plots/png/fastqc_sequence_duplication_levels_plot.png", + "multiqc/bismark_hisat/multiqc_plots/png/fastqc_top_overrepresented_sequences_table.png", + "multiqc/bismark_hisat/multiqc_plots/png/general_stats_table.png", + "multiqc/bismark_hisat/multiqc_plots/png/qualimap_coverage_histogram.png", + "multiqc/bismark_hisat/multiqc_plots/png/qualimap_gc_content.png", + "multiqc/bismark_hisat/multiqc_plots/png/qualimap_genome_fraction.png", + "multiqc/bismark_hisat/multiqc_plots/png/qualimap_insert_size.png", + "multiqc/bismark_hisat/multiqc_plots/svg", + "multiqc/bismark_hisat/multiqc_plots/svg/bismark-methylation-dp.svg", + "multiqc/bismark_hisat/multiqc_plots/svg/bismark_alignment-cnt.svg", + "multiqc/bismark_hisat/multiqc_plots/svg/bismark_alignment-pct.svg", + "multiqc/bismark_hisat/multiqc_plots/svg/bismark_mbias_CHG_R1.svg", + "multiqc/bismark_hisat/multiqc_plots/svg/bismark_mbias_CHG_R2.svg", + "multiqc/bismark_hisat/multiqc_plots/svg/bismark_mbias_CHH_R1.svg", + "multiqc/bismark_hisat/multiqc_plots/svg/bismark_mbias_CHH_R2.svg", + "multiqc/bismark_hisat/multiqc_plots/svg/bismark_mbias_CpG_R1.svg", + "multiqc/bismark_hisat/multiqc_plots/svg/bismark_mbias_CpG_R2.svg", + "multiqc/bismark_hisat/multiqc_plots/svg/bismark_strand_alignment-cnt.svg", + "multiqc/bismark_hisat/multiqc_plots/svg/bismark_strand_alignment-pct.svg", + "multiqc/bismark_hisat/multiqc_plots/svg/cutadapt_filtered_reads_plot-cnt.svg", + "multiqc/bismark_hisat/multiqc_plots/svg/cutadapt_filtered_reads_plot-pct.svg", + "multiqc/bismark_hisat/multiqc_plots/svg/cutadapt_trimmed_sequences_plot_3_Counts.svg", + "multiqc/bismark_hisat/multiqc_plots/svg/cutadapt_trimmed_sequences_plot_3_Obs_Exp.svg", + "multiqc/bismark_hisat/multiqc_plots/svg/fastqc-status-check-heatmap.svg", + "multiqc/bismark_hisat/multiqc_plots/svg/fastqc_adapter_content_plot.svg", + "multiqc/bismark_hisat/multiqc_plots/svg/fastqc_overrepresented_sequences_plot.svg", + "multiqc/bismark_hisat/multiqc_plots/svg/fastqc_per_base_n_content_plot.svg", + "multiqc/bismark_hisat/multiqc_plots/svg/fastqc_per_base_sequence_quality_plot.svg", + "multiqc/bismark_hisat/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Counts.svg", + "multiqc/bismark_hisat/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Percentages.svg", + "multiqc/bismark_hisat/multiqc_plots/svg/fastqc_per_sequence_quality_scores_plot.svg", + "multiqc/bismark_hisat/multiqc_plots/svg/fastqc_sequence_counts_plot-cnt.svg", + "multiqc/bismark_hisat/multiqc_plots/svg/fastqc_sequence_counts_plot-pct.svg", + "multiqc/bismark_hisat/multiqc_plots/svg/fastqc_sequence_duplication_levels_plot.svg", + "multiqc/bismark_hisat/multiqc_plots/svg/fastqc_top_overrepresented_sequences_table.svg", + "multiqc/bismark_hisat/multiqc_plots/svg/general_stats_table.svg", + "multiqc/bismark_hisat/multiqc_plots/svg/qualimap_coverage_histogram.svg", + "multiqc/bismark_hisat/multiqc_plots/svg/qualimap_gc_content.svg", + "multiqc/bismark_hisat/multiqc_plots/svg/qualimap_genome_fraction.svg", + "multiqc/bismark_hisat/multiqc_plots/svg/qualimap_insert_size.svg", + "multiqc/bismark_hisat/multiqc_report.html", + "pipeline_info", + "pipeline_info/nf_core_pipeline_software_mqc_versions.yml", + "qualimap", + "qualimap/Ecoli_10K_methylated", + "qualimap/Ecoli_10K_methylated/css", + "qualimap/Ecoli_10K_methylated/css/agogo.css", + "qualimap/Ecoli_10K_methylated/css/ajax-loader.gif", + "qualimap/Ecoli_10K_methylated/css/basic.css", + "qualimap/Ecoli_10K_methylated/css/bgfooter.png", + "qualimap/Ecoli_10K_methylated/css/bgtop.png", + "qualimap/Ecoli_10K_methylated/css/comment-bright.png", + "qualimap/Ecoli_10K_methylated/css/comment-close.png", + "qualimap/Ecoli_10K_methylated/css/comment.png", + "qualimap/Ecoli_10K_methylated/css/doctools.js", + "qualimap/Ecoli_10K_methylated/css/down-pressed.png", + "qualimap/Ecoli_10K_methylated/css/down.png", + "qualimap/Ecoli_10K_methylated/css/file.png", + "qualimap/Ecoli_10K_methylated/css/jquery.js", + "qualimap/Ecoli_10K_methylated/css/minus.png", + "qualimap/Ecoli_10K_methylated/css/plus.png", + "qualimap/Ecoli_10K_methylated/css/pygments.css", + "qualimap/Ecoli_10K_methylated/css/qualimap_logo_small.png", + "qualimap/Ecoli_10K_methylated/css/report.css", + "qualimap/Ecoli_10K_methylated/css/searchtools.js", + "qualimap/Ecoli_10K_methylated/css/underscore.js", + "qualimap/Ecoli_10K_methylated/css/up-pressed.png", + "qualimap/Ecoli_10K_methylated/css/up.png", + "qualimap/Ecoli_10K_methylated/css/websupport.js", + "qualimap/Ecoli_10K_methylated/genome_results.txt", + "qualimap/Ecoli_10K_methylated/images_qualimapReport", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_coverage_0to50_histogram.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_coverage_across_reference.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_coverage_histogram.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_coverage_quotes.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_gc_content_per_window.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_insert_size_across_reference.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_insert_size_histogram.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_mapping_quality_across_reference.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_mapping_quality_histogram.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_reads_content_per_read_position.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_uniq_read_starts_histogram.png", + "qualimap/Ecoli_10K_methylated/qualimapReport.html", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/coverage_across_reference.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/coverage_histogram.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/duplication_rate_histogram.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/genome_fraction_coverage.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/insert_size_across_reference.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/insert_size_histogram.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/mapped_reads_gc-content_distribution.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/mapped_reads_nucleotide_content.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/mapping_quality_across_reference.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/mapping_quality_histogram.txt", + "qualimap/SRR389222_sub1", + "qualimap/SRR389222_sub1/css", + "qualimap/SRR389222_sub1/css/agogo.css", + "qualimap/SRR389222_sub1/css/ajax-loader.gif", + "qualimap/SRR389222_sub1/css/basic.css", + "qualimap/SRR389222_sub1/css/bgfooter.png", + "qualimap/SRR389222_sub1/css/bgtop.png", + "qualimap/SRR389222_sub1/css/comment-bright.png", + "qualimap/SRR389222_sub1/css/comment-close.png", + "qualimap/SRR389222_sub1/css/comment.png", + "qualimap/SRR389222_sub1/css/doctools.js", + "qualimap/SRR389222_sub1/css/down-pressed.png", + "qualimap/SRR389222_sub1/css/down.png", + "qualimap/SRR389222_sub1/css/file.png", + "qualimap/SRR389222_sub1/css/jquery.js", + "qualimap/SRR389222_sub1/css/minus.png", + "qualimap/SRR389222_sub1/css/plus.png", + "qualimap/SRR389222_sub1/css/pygments.css", + "qualimap/SRR389222_sub1/css/qualimap_logo_small.png", + "qualimap/SRR389222_sub1/css/report.css", + "qualimap/SRR389222_sub1/css/searchtools.js", + "qualimap/SRR389222_sub1/css/underscore.js", + "qualimap/SRR389222_sub1/css/up-pressed.png", + "qualimap/SRR389222_sub1/css/up.png", + "qualimap/SRR389222_sub1/css/websupport.js", + "qualimap/SRR389222_sub1/genome_results.txt", + "qualimap/SRR389222_sub1/images_qualimapReport", + "qualimap/SRR389222_sub1/images_qualimapReport/genome_coverage_0to50_histogram.png", + "qualimap/SRR389222_sub1/images_qualimapReport/genome_coverage_across_reference.png", + "qualimap/SRR389222_sub1/images_qualimapReport/genome_coverage_histogram.png", + "qualimap/SRR389222_sub1/images_qualimapReport/genome_coverage_quotes.png", + "qualimap/SRR389222_sub1/images_qualimapReport/genome_gc_content_per_window.png", + "qualimap/SRR389222_sub1/images_qualimapReport/genome_mapping_quality_across_reference.png", + "qualimap/SRR389222_sub1/images_qualimapReport/genome_mapping_quality_histogram.png", + "qualimap/SRR389222_sub1/images_qualimapReport/genome_reads_content_per_read_position.png", + "qualimap/SRR389222_sub1/images_qualimapReport/genome_uniq_read_starts_histogram.png", + "qualimap/SRR389222_sub1/qualimapReport.html", + "qualimap/SRR389222_sub1/raw_data_qualimapReport", + "qualimap/SRR389222_sub1/raw_data_qualimapReport/coverage_across_reference.txt", + "qualimap/SRR389222_sub1/raw_data_qualimapReport/coverage_histogram.txt", + "qualimap/SRR389222_sub1/raw_data_qualimapReport/duplication_rate_histogram.txt", + "qualimap/SRR389222_sub1/raw_data_qualimapReport/genome_fraction_coverage.txt", + "qualimap/SRR389222_sub1/raw_data_qualimapReport/mapped_reads_gc-content_distribution.txt", + "qualimap/SRR389222_sub1/raw_data_qualimapReport/mapped_reads_nucleotide_content.txt", + "qualimap/SRR389222_sub1/raw_data_qualimapReport/mapping_quality_across_reference.txt", + "qualimap/SRR389222_sub1/raw_data_qualimapReport/mapping_quality_histogram.txt", + "qualimap/SRR389222_sub2", + "qualimap/SRR389222_sub2/css", + "qualimap/SRR389222_sub2/css/agogo.css", + "qualimap/SRR389222_sub2/css/ajax-loader.gif", + "qualimap/SRR389222_sub2/css/basic.css", + "qualimap/SRR389222_sub2/css/bgfooter.png", + "qualimap/SRR389222_sub2/css/bgtop.png", + "qualimap/SRR389222_sub2/css/comment-bright.png", + "qualimap/SRR389222_sub2/css/comment-close.png", + "qualimap/SRR389222_sub2/css/comment.png", + "qualimap/SRR389222_sub2/css/doctools.js", + "qualimap/SRR389222_sub2/css/down-pressed.png", + "qualimap/SRR389222_sub2/css/down.png", + "qualimap/SRR389222_sub2/css/file.png", + "qualimap/SRR389222_sub2/css/jquery.js", + "qualimap/SRR389222_sub2/css/minus.png", + "qualimap/SRR389222_sub2/css/plus.png", + "qualimap/SRR389222_sub2/css/pygments.css", + "qualimap/SRR389222_sub2/css/qualimap_logo_small.png", + "qualimap/SRR389222_sub2/css/report.css", + "qualimap/SRR389222_sub2/css/searchtools.js", + "qualimap/SRR389222_sub2/css/underscore.js", + "qualimap/SRR389222_sub2/css/up-pressed.png", + "qualimap/SRR389222_sub2/css/up.png", + "qualimap/SRR389222_sub2/css/websupport.js", + "qualimap/SRR389222_sub2/genome_results.txt", + "qualimap/SRR389222_sub2/images_qualimapReport", + "qualimap/SRR389222_sub2/images_qualimapReport/genome_coverage_0to50_histogram.png", + "qualimap/SRR389222_sub2/images_qualimapReport/genome_coverage_across_reference.png", + "qualimap/SRR389222_sub2/images_qualimapReport/genome_coverage_histogram.png", + "qualimap/SRR389222_sub2/images_qualimapReport/genome_coverage_quotes.png", + "qualimap/SRR389222_sub2/images_qualimapReport/genome_gc_content_per_window.png", + "qualimap/SRR389222_sub2/images_qualimapReport/genome_mapping_quality_across_reference.png", + "qualimap/SRR389222_sub2/images_qualimapReport/genome_mapping_quality_histogram.png", + "qualimap/SRR389222_sub2/images_qualimapReport/genome_reads_content_per_read_position.png", + "qualimap/SRR389222_sub2/images_qualimapReport/genome_uniq_read_starts_histogram.png", + "qualimap/SRR389222_sub2/qualimapReport.html", + "qualimap/SRR389222_sub2/raw_data_qualimapReport", + "qualimap/SRR389222_sub2/raw_data_qualimapReport/coverage_across_reference.txt", + "qualimap/SRR389222_sub2/raw_data_qualimapReport/coverage_histogram.txt", + "qualimap/SRR389222_sub2/raw_data_qualimapReport/duplication_rate_histogram.txt", + "qualimap/SRR389222_sub2/raw_data_qualimapReport/genome_fraction_coverage.txt", + "qualimap/SRR389222_sub2/raw_data_qualimapReport/mapped_reads_gc-content_distribution.txt", + "qualimap/SRR389222_sub2/raw_data_qualimapReport/mapped_reads_nucleotide_content.txt", + "qualimap/SRR389222_sub2/raw_data_qualimapReport/mapping_quality_across_reference.txt", + "qualimap/SRR389222_sub2/raw_data_qualimapReport/mapping_quality_histogram.txt", + "qualimap/SRR389222_sub3", + "qualimap/SRR389222_sub3/css", + "qualimap/SRR389222_sub3/css/agogo.css", + "qualimap/SRR389222_sub3/css/ajax-loader.gif", + "qualimap/SRR389222_sub3/css/basic.css", + "qualimap/SRR389222_sub3/css/bgfooter.png", + "qualimap/SRR389222_sub3/css/bgtop.png", + "qualimap/SRR389222_sub3/css/comment-bright.png", + "qualimap/SRR389222_sub3/css/comment-close.png", + "qualimap/SRR389222_sub3/css/comment.png", + "qualimap/SRR389222_sub3/css/doctools.js", + "qualimap/SRR389222_sub3/css/down-pressed.png", + "qualimap/SRR389222_sub3/css/down.png", + "qualimap/SRR389222_sub3/css/file.png", + "qualimap/SRR389222_sub3/css/jquery.js", + "qualimap/SRR389222_sub3/css/minus.png", + "qualimap/SRR389222_sub3/css/plus.png", + "qualimap/SRR389222_sub3/css/pygments.css", + "qualimap/SRR389222_sub3/css/qualimap_logo_small.png", + "qualimap/SRR389222_sub3/css/report.css", + "qualimap/SRR389222_sub3/css/searchtools.js", + "qualimap/SRR389222_sub3/css/underscore.js", + "qualimap/SRR389222_sub3/css/up-pressed.png", + "qualimap/SRR389222_sub3/css/up.png", + "qualimap/SRR389222_sub3/css/websupport.js", + "qualimap/SRR389222_sub3/genome_results.txt", + "qualimap/SRR389222_sub3/images_qualimapReport", + "qualimap/SRR389222_sub3/images_qualimapReport/genome_coverage_0to50_histogram.png", + "qualimap/SRR389222_sub3/images_qualimapReport/genome_coverage_across_reference.png", + "qualimap/SRR389222_sub3/images_qualimapReport/genome_coverage_histogram.png", + "qualimap/SRR389222_sub3/images_qualimapReport/genome_coverage_quotes.png", + "qualimap/SRR389222_sub3/images_qualimapReport/genome_gc_content_per_window.png", + "qualimap/SRR389222_sub3/images_qualimapReport/genome_mapping_quality_across_reference.png", + "qualimap/SRR389222_sub3/images_qualimapReport/genome_mapping_quality_histogram.png", + "qualimap/SRR389222_sub3/images_qualimapReport/genome_reads_content_per_read_position.png", + "qualimap/SRR389222_sub3/images_qualimapReport/genome_uniq_read_starts_histogram.png", + "qualimap/SRR389222_sub3/qualimapReport.html", + "qualimap/SRR389222_sub3/raw_data_qualimapReport", + "qualimap/SRR389222_sub3/raw_data_qualimapReport/coverage_across_reference.txt", + "qualimap/SRR389222_sub3/raw_data_qualimapReport/coverage_histogram.txt", + "qualimap/SRR389222_sub3/raw_data_qualimapReport/duplication_rate_histogram.txt", + "qualimap/SRR389222_sub3/raw_data_qualimapReport/genome_fraction_coverage.txt", + "qualimap/SRR389222_sub3/raw_data_qualimapReport/mapped_reads_gc-content_distribution.txt", + "qualimap/SRR389222_sub3/raw_data_qualimapReport/mapped_reads_nucleotide_content.txt", + "qualimap/SRR389222_sub3/raw_data_qualimapReport/mapping_quality_across_reference.txt", + "qualimap/SRR389222_sub3/raw_data_qualimapReport/mapping_quality_histogram.txt", + "trimgalore", + "trimgalore/fastqc", + "trimgalore/fastqc/Ecoli_10K_methylated_1_val_1_fastqc.html", + "trimgalore/fastqc/Ecoli_10K_methylated_2_val_2_fastqc.html", + "trimgalore/fastqc/SRR389222_sub1_trimmed_fastqc.html", + "trimgalore/fastqc/SRR389222_sub2_trimmed_fastqc.html", + "trimgalore/fastqc/SRR389222_sub3_trimmed_fastqc.html", + "trimgalore/fastqc/zips", + "trimgalore/fastqc/zips/Ecoli_10K_methylated_1_val_1_fastqc.zip", + "trimgalore/fastqc/zips/Ecoli_10K_methylated_2_val_2_fastqc.zip", + "trimgalore/fastqc/zips/SRR389222_sub1_trimmed_fastqc.zip", + "trimgalore/fastqc/zips/SRR389222_sub2_trimmed_fastqc.zip", + "trimgalore/fastqc/zips/SRR389222_sub3_trimmed_fastqc.zip", + "trimgalore/logs", + "trimgalore/logs/Ecoli_10K_methylated_1.fastq.gz_trimming_report.txt", + "trimgalore/logs/Ecoli_10K_methylated_2.fastq.gz_trimming_report.txt", + "trimgalore/logs/SRR389222_sub1.fastq.gz_trimming_report.txt", + "trimgalore/logs/SRR389222_sub2.fastq.gz_trimming_report.txt", + "trimgalore/logs/SRR389222_sub3.fastq.gz_trimming_report.txt" + ], + [ + "Ecoli_10K_methylated_1_val_1_bismark_hisat2_pe.bedGraph.gz:md5,2a7ce2fa94f55ee50edaf8d3f8443d5c", + "SRR389222_sub1_trimmed_bismark_hisat2.bedGraph.gz:md5,c4996062e2205ef8e0d93d1b5de02f23", + "SRR389222_sub2_trimmed_bismark_hisat2.bedGraph.gz:md5,506e1a5c19e55928c6d78040a4d153f9", + "SRR389222_sub3_trimmed_bismark_hisat2.bedGraph.gz:md5,67f9aefdec2951f0823ccfe89f9f1894", + "Ecoli_10K_methylated_1_val_1_bismark_hisat2_pe.M-bias.txt:md5,bae28e629abe7f96d5cf91290a78c804", + "SRR389222_sub1_trimmed_bismark_hisat2.M-bias.txt:md5,f7cc37d3dfdecd62c5f32b6ae086b4e3", + "SRR389222_sub2_trimmed_bismark_hisat2.M-bias.txt:md5,33ce1d8bc3df953b22ef2b68a4942266", + "SRR389222_sub3_trimmed_bismark_hisat2.M-bias.txt:md5,11295dffff67d052074952cb39f1f851", + "CHG_OB_Ecoli_10K_methylated_1_val_1_bismark_hisat2_pe.txt.gz:md5,e01402fbbf8b9eb8c9640817d97fed18", + "CHG_OB_SRR389222_sub1_trimmed_bismark_hisat2.txt.gz:md5,11ae58ebe6513375468ebe63a521d6e3", + "CHG_OB_SRR389222_sub2_trimmed_bismark_hisat2.txt.gz:md5,d493d6c7975b132f7c45eacd7709cb04", + "CHG_OB_SRR389222_sub3_trimmed_bismark_hisat2.txt.gz:md5,790a80e609516e25c075291ae292b95c", + "CHG_OT_Ecoli_10K_methylated_1_val_1_bismark_hisat2_pe.txt.gz:md5,b508e40e494dfd9fc2c2017286cd3fe9", + "CHG_OT_SRR389222_sub1_trimmed_bismark_hisat2.txt.gz:md5,8688ab3454a487d8928693e5d71681b1", + "CHG_OT_SRR389222_sub2_trimmed_bismark_hisat2.txt.gz:md5,e4df7341511b4f1e10a96d5a64d9f144", + "CHG_OT_SRR389222_sub3_trimmed_bismark_hisat2.txt.gz:md5,2df71d060d61d1b44579dc98fbb2057f", + "CHH_OB_Ecoli_10K_methylated_1_val_1_bismark_hisat2_pe.txt.gz:md5,79f1c9e877a2cecd57221bfaec393b3b", + "CHH_OB_SRR389222_sub1_trimmed_bismark_hisat2.txt.gz:md5,12e9e4ebf59e6b23fb52f4872f534251", + "CHH_OB_SRR389222_sub2_trimmed_bismark_hisat2.txt.gz:md5,b06fe5b367be1fd812619853f3c2d1ac", + "CHH_OB_SRR389222_sub3_trimmed_bismark_hisat2.txt.gz:md5,d84c842b1348400ae1366748e09bfb6a", + "CHH_OT_Ecoli_10K_methylated_1_val_1_bismark_hisat2_pe.txt.gz:md5,112a5d2beba2f8ebda273ca3bec98d88", + "CHH_OT_SRR389222_sub1_trimmed_bismark_hisat2.txt.gz:md5,cdeef47fb239a9a157abd47692a6fbff", + "CHH_OT_SRR389222_sub2_trimmed_bismark_hisat2.txt.gz:md5,d11002089aca0cefc40b506f06ae6c99", + "CHH_OT_SRR389222_sub3_trimmed_bismark_hisat2.txt.gz:md5,da65e0ac76a5cc495bd672e9b887ad05", + "CpG_OB_Ecoli_10K_methylated_1_val_1_bismark_hisat2_pe.txt.gz:md5,b63b60b584e97c10c4dfefab0f66dc8e", + "CpG_OB_SRR389222_sub1_trimmed_bismark_hisat2.txt.gz:md5,57574ed644d8655da37ced3f813c5a24", + "CpG_OB_SRR389222_sub2_trimmed_bismark_hisat2.txt.gz:md5,d52a2554e1cc6caa74c08f98ba02db18", + "CpG_OB_SRR389222_sub3_trimmed_bismark_hisat2.txt.gz:md5,f4f8438d8cbe1fc83419a8a50fbdf583", + "CpG_OT_Ecoli_10K_methylated_1_val_1_bismark_hisat2_pe.txt.gz:md5,8bb4cb59815cc9e260dcfa332fcb5ae9", + "CpG_OT_SRR389222_sub1_trimmed_bismark_hisat2.txt.gz:md5,3411525ecae2418a47057b3bff2bd109", + "CpG_OT_SRR389222_sub2_trimmed_bismark_hisat2.txt.gz:md5,14359312789fcdec5c215e9512ff4ead", + "CpG_OT_SRR389222_sub3_trimmed_bismark_hisat2.txt.gz:md5,9499728ddae13034c690c2726d21b9ca", + "Ecoli_10K_methylated_1_val_1_bismark_hisat2_pe.bismark.cov.gz:md5,8a41b5bf3c33a43712cc148dbc787648", + "SRR389222_sub1_trimmed_bismark_hisat2.bismark.cov.gz:md5,83ef8455fd0e7d5c7a79180fe078a428", + "SRR389222_sub2_trimmed_bismark_hisat2.bismark.cov.gz:md5,00b8c3211d283175a86c410715e6890e", + "SRR389222_sub3_trimmed_bismark_hisat2.bismark.cov.gz:md5,35dec1457f32eb9bbbb3b6cceeae2480", + "Ecoli_10K_methylated_1_val_1_bismark_hisat2_pe_splitting_report.txt:md5,f3a4cee40ab2286ef356b15fc49f5333", + "SRR389222_sub1_trimmed_bismark_hisat2_splitting_report.txt:md5,a3ea9994f88802972e25836058ea2b40", + "SRR389222_sub2_trimmed_bismark_hisat2_splitting_report.txt:md5,4afad1d4dbe350b2d691561260018247", + "SRR389222_sub3_trimmed_bismark_hisat2_splitting_report.txt:md5,bd4b6b3718a4270fc6844862da5c31a7", + "bismark-methylation-dp.txt:md5,2ed19dff17c089738a62de166f44cf97", + "bismark_alignment.txt:md5,0e1ef7bfb853be4fe2471ee1082865c0", + "bismark_mbias_CHG_R1.txt:md5,cc89b38a24adcd51363a934964b03892", + "bismark_mbias_CHG_R2.txt:md5,562dee654a3b88dad736516b454ca9fe", + "bismark_mbias_CHH_R1.txt:md5,2e3285829e102e9674de462c9004aea6", + "bismark_mbias_CHH_R2.txt:md5,a2b424024427c8c7a79ab955c0d5a974", + "bismark_mbias_CpG_R1.txt:md5,4051f0d1ad5d4af6b7843ec25965955a", + "bismark_mbias_CpG_R2.txt:md5,390b82c4d50ee44e5e2e7f8013010826", + "bismark_strand_alignment.txt:md5,9a00de25da7cbc6e3fe70192ad1fc191", + "cutadapt_filtered_reads_plot.txt:md5,ff1b6d4011a5be5410b9404f7ff56c56", + "cutadapt_trimmed_sequences_plot_3_Counts.txt:md5,57d07c19b0c30dc88df96c30bedcdc33", + "cutadapt_trimmed_sequences_plot_3_Obs_Exp.txt:md5,1e5ca4193f8290c5c812334d03615b41", + "fastqc-status-check-heatmap.txt:md5,218c2a7efbb9c02f652fa78fc739c866", + "fastqc_adapter_content_plot.txt:md5,48d8bd5ece984a74972ce0a0e814dd07", + "fastqc_overrepresented_sequences_plot.txt:md5,9c4b7064950b5b2c486d556984f21e9e", + "fastqc_per_base_n_content_plot.txt:md5,019d5cd4f61a31f4e7016140ca8ee36e", + "fastqc_per_base_sequence_quality_plot.txt:md5,e4c7d522114eab9bc9101e7ee9d83c8f", + "fastqc_per_sequence_gc_content_plot_Counts.txt:md5,302659bee8a02b6a38b24fe25f8eaa87", + "fastqc_per_sequence_gc_content_plot_Percentages.txt:md5,c75b396eb5dda8682fb1652a9b2e92a3", + "fastqc_per_sequence_quality_scores_plot.txt:md5,548c593f4a8be2d8627fc3bd1c280611", + "fastqc_sequence_counts_plot.txt:md5,58eeeb06bc9dcc1764c7daf0847d6bbf", + "fastqc_sequence_duplication_levels_plot.txt:md5,9e5712db9aa39b5754ea1e0c49cfff15", + "fastqc_top_overrepresented_sequences_table.txt:md5,6dfc5334a09c05392ea17369aa742d01", + "multiqc_bismark_alignment.txt:md5,75a6ccfb5b5bff3a5b3d3e2174929fc3", + "multiqc_bismark_methextract.txt:md5,d1312f03f47d7cc07ac18254cda720bd", + "multiqc_citations.txt:md5,b9d42869faad581bd963d3d3bb490026", + "multiqc_cutadapt.txt:md5,b376b3816764859cfc345bf13cda536f", + "qualimap_coverage_histogram.txt:md5,938111519a9ad1b2580f8f944fb659aa", + "qualimap_gc_content.txt:md5,3263a2edb88dcbddf5654df1b233f66d", + "qualimap_genome_fraction.txt:md5,5490f57857141d3e31a1f978bf1f7ead", + "qualimap_insert_size.txt:md5,65781ee04b024acd4efb4609a32d8b30", + "genome_results.txt:md5,371470c762818bb30e393e02eda189ef", + "genome_results.txt:md5,ef3cdabf2d57a1473996a8bae40c7c4e", + "genome_results.txt:md5,adb76fc6beedf9ed4fca89ff86f38285", + "genome_results.txt:md5,e6a04bc09af73e24da46fa1734a87300" + ], + [ + [ + "Ecoli_10K_methylated_1_val_1_bismark_hisat2_pe.bam", + "4d7589148308111e340b1a0a5ad5d79c" + ], + [ + "SRR389222_sub1_trimmed_bismark_hisat2.bam", + "eb31bf906f516c00bd34965e1df2f0fc" + ], + [ + "SRR389222_sub2_trimmed_bismark_hisat2.bam", + "2faa978a80c1dff087ec3414e266f42f" + ], + [ + "SRR389222_sub3_trimmed_bismark_hisat2.bam", + "9972d2444374fd93f4877867b786f1d2" + ], + [ + "Ecoli_10K_methylated.deduplicated.sorted.bam", + "7f73f1e4398f697100a09d3742b662cb" + ], + [ + "SRR389222_sub1.deduplicated.sorted.bam", + "926438a4e8a8fe56db5f99bd3b28ef0d" + ], + [ + "SRR389222_sub2.deduplicated.sorted.bam", + "fdc1c2b1beb071e9b3dccb991f216ee0" + ], + [ + "SRR389222_sub3.deduplicated.sorted.bam", + "99246979468cb998c02b26b5c8ac4ee4" + ] + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-21T17:48:05.852952347" + } +} \ No newline at end of file diff --git a/tests/bismark_hisat_save_reference_save_align_intermeds.nf.test b/tests/bismark_hisat_save_reference_save_align_intermeds.nf.test new file mode 100644 index 00000000..2f2b0a0c --- /dev/null +++ b/tests/bismark_hisat_save_reference_save_align_intermeds.nf.test @@ -0,0 +1,42 @@ +nextflow_pipeline { + + name "Test Workflow main.nf" + script "../main.nf" + config "./nextflow.config" + + test("Params: bismark_hisat | save_reference | save_align_intermeds") { + when { + params { + aligner = "bismark_hisat" + save_reference = true + save_align_intermeds = true + outdir = "$outputDir" + } + } + + then { + // stable_name: All files + folders in ${params.outdir}/ with a stable name + def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) + // stable_path: All files in ${params.outdir}/ with stable content + def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') + // bam_files: All bam files + def bam_files = getAllFilesFromDir(params.outdir, include: ['**/*.bam']) + assertAll( + { assert workflow.success}, + { assert snapshot( + // Number of tasks + workflow.trace.succeeded().size(), + // pipeline versions.yml file for multiqc from which Nextflow version is removed because we tests pipelines on multiple Nextflow versions + removeNextflowVersion("$outputDir/pipeline_info/nf_core_pipeline_software_mqc_versions.yml"), + // All stable path name + stable_name, + // All files with stable contents + stable_path, + // All bam files + bam_files.collect{ file -> [ file.getName(), bam(file.toString()).getReadsMD5() ] } + ).match() } + ) + } + } + +} diff --git a/tests/bismark_hisat_save_reference_save_align_intermeds.nf.test.snap b/tests/bismark_hisat_save_reference_save_align_intermeds.nf.test.snap new file mode 100644 index 00000000..c70f3bb4 --- /dev/null +++ b/tests/bismark_hisat_save_reference_save_align_intermeds.nf.test.snap @@ -0,0 +1,662 @@ +{ + "Params: bismark_hisat | save_reference | save_align_intermeds": { + "content": [ + 43, + { + "BISMARK_ALIGN": { + "bismark": "0.24.2" + }, + "BISMARK_GENOMEPREPARATION": { + "bismark": "0.24.2" + }, + "FASTQC": { + "fastqc": "0.12.1" + }, + "QUALIMAP_BAMQC": { + "qualimap": 2.3 + }, + "TRIMGALORE": { + "trimgalore": "0.6.10", + "cutadapt": 4.2 + }, + "Workflow": { + "nf-core/methylseq": "v2.7.0" + } + }, + [ + "bismark_hisat", + "bismark_hisat/alignments", + "bismark_hisat/alignments/Ecoli_10K_methylated.sorted.bam", + "bismark_hisat/alignments/Ecoli_10K_methylated_1_val_1_bismark_hisat2_pe.bam", + "bismark_hisat/alignments/SRR389222_sub1.sorted.bam", + "bismark_hisat/alignments/SRR389222_sub1_trimmed_bismark_hisat2.bam", + "bismark_hisat/alignments/SRR389222_sub2.sorted.bam", + "bismark_hisat/alignments/SRR389222_sub2_trimmed_bismark_hisat2.bam", + "bismark_hisat/alignments/SRR389222_sub3.sorted.bam", + "bismark_hisat/alignments/SRR389222_sub3_trimmed_bismark_hisat2.bam", + "bismark_hisat/alignments/logs", + "bismark_hisat/alignments/logs/Ecoli_10K_methylated_1_val_1_bismark_hisat2_PE_report.txt", + "bismark_hisat/alignments/logs/SRR389222_sub1_trimmed_bismark_hisat2_SE_report.txt", + "bismark_hisat/alignments/logs/SRR389222_sub2_trimmed_bismark_hisat2_SE_report.txt", + "bismark_hisat/alignments/logs/SRR389222_sub3_trimmed_bismark_hisat2_SE_report.txt", + "bismark_hisat/deduplicated", + "bismark_hisat/deduplicated/Ecoli_10K_methylated.deduplicated.sorted.bam", + "bismark_hisat/deduplicated/Ecoli_10K_methylated.deduplicated.sorted.bam.bai", + "bismark_hisat/deduplicated/SRR389222_sub1.deduplicated.sorted.bam", + "bismark_hisat/deduplicated/SRR389222_sub1.deduplicated.sorted.bam.bai", + "bismark_hisat/deduplicated/SRR389222_sub2.deduplicated.sorted.bam", + "bismark_hisat/deduplicated/SRR389222_sub2.deduplicated.sorted.bam.bai", + "bismark_hisat/deduplicated/SRR389222_sub3.deduplicated.sorted.bam", + "bismark_hisat/deduplicated/SRR389222_sub3.deduplicated.sorted.bam.bai", + "bismark_hisat/deduplicated/logs", + "bismark_hisat/deduplicated/logs/Ecoli_10K_methylated_1_val_1_bismark_hisat2_pe.deduplication_report.txt", + "bismark_hisat/deduplicated/logs/SRR389222_sub1_trimmed_bismark_hisat2.deduplication_report.txt", + "bismark_hisat/deduplicated/logs/SRR389222_sub2_trimmed_bismark_hisat2.deduplication_report.txt", + "bismark_hisat/deduplicated/logs/SRR389222_sub3_trimmed_bismark_hisat2.deduplication_report.txt", + "bismark_hisat/methylation_calls", + "bismark_hisat/methylation_calls/bedGraph", + "bismark_hisat/methylation_calls/bedGraph/Ecoli_10K_methylated_1_val_1_bismark_hisat2_pe.deduplicated.bedGraph.gz", + "bismark_hisat/methylation_calls/bedGraph/SRR389222_sub1_trimmed_bismark_hisat2.deduplicated.bedGraph.gz", + "bismark_hisat/methylation_calls/bedGraph/SRR389222_sub2_trimmed_bismark_hisat2.deduplicated.bedGraph.gz", + "bismark_hisat/methylation_calls/bedGraph/SRR389222_sub3_trimmed_bismark_hisat2.deduplicated.bedGraph.gz", + "bismark_hisat/methylation_calls/mbias", + "bismark_hisat/methylation_calls/mbias/Ecoli_10K_methylated_1_val_1_bismark_hisat2_pe.deduplicated.M-bias.txt", + "bismark_hisat/methylation_calls/mbias/SRR389222_sub1_trimmed_bismark_hisat2.deduplicated.M-bias.txt", + "bismark_hisat/methylation_calls/mbias/SRR389222_sub2_trimmed_bismark_hisat2.deduplicated.M-bias.txt", + "bismark_hisat/methylation_calls/mbias/SRR389222_sub3_trimmed_bismark_hisat2.deduplicated.M-bias.txt", + "bismark_hisat/methylation_calls/methylation_calls", + "bismark_hisat/methylation_calls/methylation_calls/CHG_OB_Ecoli_10K_methylated_1_val_1_bismark_hisat2_pe.deduplicated.txt.gz", + "bismark_hisat/methylation_calls/methylation_calls/CHG_OB_SRR389222_sub1_trimmed_bismark_hisat2.deduplicated.txt.gz", + "bismark_hisat/methylation_calls/methylation_calls/CHG_OB_SRR389222_sub2_trimmed_bismark_hisat2.deduplicated.txt.gz", + "bismark_hisat/methylation_calls/methylation_calls/CHG_OB_SRR389222_sub3_trimmed_bismark_hisat2.deduplicated.txt.gz", + "bismark_hisat/methylation_calls/methylation_calls/CHG_OT_Ecoli_10K_methylated_1_val_1_bismark_hisat2_pe.deduplicated.txt.gz", + "bismark_hisat/methylation_calls/methylation_calls/CHG_OT_SRR389222_sub1_trimmed_bismark_hisat2.deduplicated.txt.gz", + "bismark_hisat/methylation_calls/methylation_calls/CHG_OT_SRR389222_sub2_trimmed_bismark_hisat2.deduplicated.txt.gz", + "bismark_hisat/methylation_calls/methylation_calls/CHG_OT_SRR389222_sub3_trimmed_bismark_hisat2.deduplicated.txt.gz", + "bismark_hisat/methylation_calls/methylation_calls/CHH_OB_Ecoli_10K_methylated_1_val_1_bismark_hisat2_pe.deduplicated.txt.gz", + "bismark_hisat/methylation_calls/methylation_calls/CHH_OB_SRR389222_sub1_trimmed_bismark_hisat2.deduplicated.txt.gz", + "bismark_hisat/methylation_calls/methylation_calls/CHH_OB_SRR389222_sub2_trimmed_bismark_hisat2.deduplicated.txt.gz", + "bismark_hisat/methylation_calls/methylation_calls/CHH_OB_SRR389222_sub3_trimmed_bismark_hisat2.deduplicated.txt.gz", + "bismark_hisat/methylation_calls/methylation_calls/CHH_OT_Ecoli_10K_methylated_1_val_1_bismark_hisat2_pe.deduplicated.txt.gz", + "bismark_hisat/methylation_calls/methylation_calls/CHH_OT_SRR389222_sub1_trimmed_bismark_hisat2.deduplicated.txt.gz", + "bismark_hisat/methylation_calls/methylation_calls/CHH_OT_SRR389222_sub2_trimmed_bismark_hisat2.deduplicated.txt.gz", + "bismark_hisat/methylation_calls/methylation_calls/CHH_OT_SRR389222_sub3_trimmed_bismark_hisat2.deduplicated.txt.gz", + "bismark_hisat/methylation_calls/methylation_calls/CpG_OB_Ecoli_10K_methylated_1_val_1_bismark_hisat2_pe.deduplicated.txt.gz", + "bismark_hisat/methylation_calls/methylation_calls/CpG_OB_SRR389222_sub1_trimmed_bismark_hisat2.deduplicated.txt.gz", + "bismark_hisat/methylation_calls/methylation_calls/CpG_OB_SRR389222_sub2_trimmed_bismark_hisat2.deduplicated.txt.gz", + "bismark_hisat/methylation_calls/methylation_calls/CpG_OB_SRR389222_sub3_trimmed_bismark_hisat2.deduplicated.txt.gz", + "bismark_hisat/methylation_calls/methylation_calls/CpG_OT_Ecoli_10K_methylated_1_val_1_bismark_hisat2_pe.deduplicated.txt.gz", + "bismark_hisat/methylation_calls/methylation_calls/CpG_OT_SRR389222_sub1_trimmed_bismark_hisat2.deduplicated.txt.gz", + "bismark_hisat/methylation_calls/methylation_calls/CpG_OT_SRR389222_sub2_trimmed_bismark_hisat2.deduplicated.txt.gz", + "bismark_hisat/methylation_calls/methylation_calls/CpG_OT_SRR389222_sub3_trimmed_bismark_hisat2.deduplicated.txt.gz", + "bismark_hisat/methylation_calls/methylation_coverage", + "bismark_hisat/methylation_calls/methylation_coverage/Ecoli_10K_methylated_1_val_1_bismark_hisat2_pe.deduplicated.bismark.cov.gz", + "bismark_hisat/methylation_calls/methylation_coverage/SRR389222_sub1_trimmed_bismark_hisat2.deduplicated.bismark.cov.gz", + "bismark_hisat/methylation_calls/methylation_coverage/SRR389222_sub2_trimmed_bismark_hisat2.deduplicated.bismark.cov.gz", + "bismark_hisat/methylation_calls/methylation_coverage/SRR389222_sub3_trimmed_bismark_hisat2.deduplicated.bismark.cov.gz", + "bismark_hisat/methylation_calls/splitting_report", + "bismark_hisat/methylation_calls/splitting_report/Ecoli_10K_methylated_1_val_1_bismark_hisat2_pe.deduplicated_splitting_report.txt", + "bismark_hisat/methylation_calls/splitting_report/SRR389222_sub1_trimmed_bismark_hisat2.deduplicated_splitting_report.txt", + "bismark_hisat/methylation_calls/splitting_report/SRR389222_sub2_trimmed_bismark_hisat2.deduplicated_splitting_report.txt", + "bismark_hisat/methylation_calls/splitting_report/SRR389222_sub3_trimmed_bismark_hisat2.deduplicated_splitting_report.txt", + "bismark_hisat/reference_genome", + "bismark_hisat/reference_genome/BismarkIndex", + "bismark_hisat/reference_genome/BismarkIndex/Bisulfite_Genome", + "bismark_hisat/reference_genome/BismarkIndex/Bisulfite_Genome/CT_conversion", + "bismark_hisat/reference_genome/BismarkIndex/Bisulfite_Genome/CT_conversion/BS_CT.1.ht2", + "bismark_hisat/reference_genome/BismarkIndex/Bisulfite_Genome/CT_conversion/BS_CT.2.ht2", + "bismark_hisat/reference_genome/BismarkIndex/Bisulfite_Genome/CT_conversion/BS_CT.3.ht2", + "bismark_hisat/reference_genome/BismarkIndex/Bisulfite_Genome/CT_conversion/BS_CT.4.ht2", + "bismark_hisat/reference_genome/BismarkIndex/Bisulfite_Genome/CT_conversion/BS_CT.5.ht2", + "bismark_hisat/reference_genome/BismarkIndex/Bisulfite_Genome/CT_conversion/BS_CT.6.ht2", + "bismark_hisat/reference_genome/BismarkIndex/Bisulfite_Genome/CT_conversion/BS_CT.7.ht2", + "bismark_hisat/reference_genome/BismarkIndex/Bisulfite_Genome/CT_conversion/BS_CT.8.ht2", + "bismark_hisat/reference_genome/BismarkIndex/Bisulfite_Genome/CT_conversion/genome_mfa.CT_conversion.fa", + "bismark_hisat/reference_genome/BismarkIndex/Bisulfite_Genome/GA_conversion", + "bismark_hisat/reference_genome/BismarkIndex/Bisulfite_Genome/GA_conversion/BS_GA.1.ht2", + "bismark_hisat/reference_genome/BismarkIndex/Bisulfite_Genome/GA_conversion/BS_GA.2.ht2", + "bismark_hisat/reference_genome/BismarkIndex/Bisulfite_Genome/GA_conversion/BS_GA.3.ht2", + "bismark_hisat/reference_genome/BismarkIndex/Bisulfite_Genome/GA_conversion/BS_GA.4.ht2", + "bismark_hisat/reference_genome/BismarkIndex/Bisulfite_Genome/GA_conversion/BS_GA.5.ht2", + "bismark_hisat/reference_genome/BismarkIndex/Bisulfite_Genome/GA_conversion/BS_GA.6.ht2", + "bismark_hisat/reference_genome/BismarkIndex/Bisulfite_Genome/GA_conversion/BS_GA.7.ht2", + "bismark_hisat/reference_genome/BismarkIndex/Bisulfite_Genome/GA_conversion/BS_GA.8.ht2", + "bismark_hisat/reference_genome/BismarkIndex/Bisulfite_Genome/GA_conversion/genome_mfa.GA_conversion.fa", + "bismark_hisat/reports", + "bismark_hisat/reports/Ecoli_10K_methylated_1_val_1_bismark_hisat2_PE_report.html", + "bismark_hisat/reports/SRR389222_sub1_trimmed_bismark_hisat2_SE_report.html", + "bismark_hisat/reports/SRR389222_sub2_trimmed_bismark_hisat2_SE_report.html", + "bismark_hisat/reports/SRR389222_sub3_trimmed_bismark_hisat2_SE_report.html", + "bismark_hisat/summary", + "bismark_hisat/summary/bismark_summary_report.html", + "bismark_hisat/summary/bismark_summary_report.txt", + "fastqc", + "fastqc/Ecoli_10K_methylated_1_fastqc.html", + "fastqc/Ecoli_10K_methylated_2_fastqc.html", + "fastqc/SRR389222_sub1_fastqc.html", + "fastqc/SRR389222_sub2_fastqc.html", + "fastqc/SRR389222_sub3_fastqc.html", + "fastqc/zips", + "fastqc/zips/Ecoli_10K_methylated_1_fastqc.zip", + "fastqc/zips/Ecoli_10K_methylated_2_fastqc.zip", + "fastqc/zips/SRR389222_sub1_fastqc.zip", + "fastqc/zips/SRR389222_sub2_fastqc.zip", + "fastqc/zips/SRR389222_sub3_fastqc.zip", + "multiqc", + "multiqc/bismark_hisat", + "multiqc/bismark_hisat/multiqc_data", + "multiqc/bismark_hisat/multiqc_data/bismark-methylation-dp.txt", + "multiqc/bismark_hisat/multiqc_data/bismark_alignment.txt", + "multiqc/bismark_hisat/multiqc_data/bismark_deduplication.txt", + "multiqc/bismark_hisat/multiqc_data/bismark_mbias_CHG_R1.txt", + "multiqc/bismark_hisat/multiqc_data/bismark_mbias_CHG_R2.txt", + "multiqc/bismark_hisat/multiqc_data/bismark_mbias_CHH_R1.txt", + "multiqc/bismark_hisat/multiqc_data/bismark_mbias_CHH_R2.txt", + "multiqc/bismark_hisat/multiqc_data/bismark_mbias_CpG_R1.txt", + "multiqc/bismark_hisat/multiqc_data/bismark_mbias_CpG_R2.txt", + "multiqc/bismark_hisat/multiqc_data/bismark_strand_alignment.txt", + "multiqc/bismark_hisat/multiqc_data/cutadapt_filtered_reads_plot.txt", + "multiqc/bismark_hisat/multiqc_data/cutadapt_trimmed_sequences_plot_3_Counts.txt", + "multiqc/bismark_hisat/multiqc_data/cutadapt_trimmed_sequences_plot_3_Obs_Exp.txt", + "multiqc/bismark_hisat/multiqc_data/fastqc-status-check-heatmap.txt", + "multiqc/bismark_hisat/multiqc_data/fastqc_adapter_content_plot.txt", + "multiqc/bismark_hisat/multiqc_data/fastqc_overrepresented_sequences_plot.txt", + "multiqc/bismark_hisat/multiqc_data/fastqc_per_base_n_content_plot.txt", + "multiqc/bismark_hisat/multiqc_data/fastqc_per_base_sequence_quality_plot.txt", + "multiqc/bismark_hisat/multiqc_data/fastqc_per_sequence_gc_content_plot_Counts.txt", + "multiqc/bismark_hisat/multiqc_data/fastqc_per_sequence_gc_content_plot_Percentages.txt", + "multiqc/bismark_hisat/multiqc_data/fastqc_per_sequence_quality_scores_plot.txt", + "multiqc/bismark_hisat/multiqc_data/fastqc_sequence_counts_plot.txt", + "multiqc/bismark_hisat/multiqc_data/fastqc_sequence_duplication_levels_plot.txt", + "multiqc/bismark_hisat/multiqc_data/fastqc_top_overrepresented_sequences_table.txt", + "multiqc/bismark_hisat/multiqc_data/multiqc.log", + "multiqc/bismark_hisat/multiqc_data/multiqc_bismark_alignment.txt", + "multiqc/bismark_hisat/multiqc_data/multiqc_bismark_dedup.txt", + "multiqc/bismark_hisat/multiqc_data/multiqc_bismark_methextract.txt", + "multiqc/bismark_hisat/multiqc_data/multiqc_citations.txt", + "multiqc/bismark_hisat/multiqc_data/multiqc_cutadapt.txt", + "multiqc/bismark_hisat/multiqc_data/multiqc_data.json", + "multiqc/bismark_hisat/multiqc_data/multiqc_fastqc.txt", + "multiqc/bismark_hisat/multiqc_data/multiqc_general_stats.txt", + "multiqc/bismark_hisat/multiqc_data/multiqc_qualimap_bamqc_genome_results.txt", + "multiqc/bismark_hisat/multiqc_data/multiqc_software_versions.txt", + "multiqc/bismark_hisat/multiqc_data/multiqc_sources.txt", + "multiqc/bismark_hisat/multiqc_data/qualimap_coverage_histogram.txt", + "multiqc/bismark_hisat/multiqc_data/qualimap_gc_content.txt", + "multiqc/bismark_hisat/multiqc_data/qualimap_genome_fraction.txt", + "multiqc/bismark_hisat/multiqc_data/qualimap_insert_size.txt", + "multiqc/bismark_hisat/multiqc_plots", + "multiqc/bismark_hisat/multiqc_plots/pdf", + "multiqc/bismark_hisat/multiqc_plots/pdf/bismark-methylation-dp.pdf", + "multiqc/bismark_hisat/multiqc_plots/pdf/bismark_alignment-cnt.pdf", + "multiqc/bismark_hisat/multiqc_plots/pdf/bismark_alignment-pct.pdf", + "multiqc/bismark_hisat/multiqc_plots/pdf/bismark_deduplication-cnt.pdf", + "multiqc/bismark_hisat/multiqc_plots/pdf/bismark_deduplication-pct.pdf", + "multiqc/bismark_hisat/multiqc_plots/pdf/bismark_mbias_CHG_R1.pdf", + "multiqc/bismark_hisat/multiqc_plots/pdf/bismark_mbias_CHG_R2.pdf", + "multiqc/bismark_hisat/multiqc_plots/pdf/bismark_mbias_CHH_R1.pdf", + "multiqc/bismark_hisat/multiqc_plots/pdf/bismark_mbias_CHH_R2.pdf", + "multiqc/bismark_hisat/multiqc_plots/pdf/bismark_mbias_CpG_R1.pdf", + "multiqc/bismark_hisat/multiqc_plots/pdf/bismark_mbias_CpG_R2.pdf", + "multiqc/bismark_hisat/multiqc_plots/pdf/bismark_strand_alignment-cnt.pdf", + "multiqc/bismark_hisat/multiqc_plots/pdf/bismark_strand_alignment-pct.pdf", + "multiqc/bismark_hisat/multiqc_plots/pdf/cutadapt_filtered_reads_plot-cnt.pdf", + "multiqc/bismark_hisat/multiqc_plots/pdf/cutadapt_filtered_reads_plot-pct.pdf", + "multiqc/bismark_hisat/multiqc_plots/pdf/cutadapt_trimmed_sequences_plot_3_Counts.pdf", + "multiqc/bismark_hisat/multiqc_plots/pdf/cutadapt_trimmed_sequences_plot_3_Obs_Exp.pdf", + "multiqc/bismark_hisat/multiqc_plots/pdf/fastqc-status-check-heatmap.pdf", + "multiqc/bismark_hisat/multiqc_plots/pdf/fastqc_adapter_content_plot.pdf", + "multiqc/bismark_hisat/multiqc_plots/pdf/fastqc_overrepresented_sequences_plot.pdf", + "multiqc/bismark_hisat/multiqc_plots/pdf/fastqc_per_base_n_content_plot.pdf", + "multiqc/bismark_hisat/multiqc_plots/pdf/fastqc_per_base_sequence_quality_plot.pdf", + "multiqc/bismark_hisat/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Counts.pdf", + "multiqc/bismark_hisat/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Percentages.pdf", + "multiqc/bismark_hisat/multiqc_plots/pdf/fastqc_per_sequence_quality_scores_plot.pdf", + "multiqc/bismark_hisat/multiqc_plots/pdf/fastqc_sequence_counts_plot-cnt.pdf", + "multiqc/bismark_hisat/multiqc_plots/pdf/fastqc_sequence_counts_plot-pct.pdf", + "multiqc/bismark_hisat/multiqc_plots/pdf/fastqc_sequence_duplication_levels_plot.pdf", + "multiqc/bismark_hisat/multiqc_plots/pdf/fastqc_top_overrepresented_sequences_table.pdf", + "multiqc/bismark_hisat/multiqc_plots/pdf/general_stats_table.pdf", + "multiqc/bismark_hisat/multiqc_plots/pdf/qualimap_coverage_histogram.pdf", + "multiqc/bismark_hisat/multiqc_plots/pdf/qualimap_gc_content.pdf", + "multiqc/bismark_hisat/multiqc_plots/pdf/qualimap_genome_fraction.pdf", + "multiqc/bismark_hisat/multiqc_plots/pdf/qualimap_insert_size.pdf", + "multiqc/bismark_hisat/multiqc_plots/png", + "multiqc/bismark_hisat/multiqc_plots/png/bismark-methylation-dp.png", + "multiqc/bismark_hisat/multiqc_plots/png/bismark_alignment-cnt.png", + "multiqc/bismark_hisat/multiqc_plots/png/bismark_alignment-pct.png", + "multiqc/bismark_hisat/multiqc_plots/png/bismark_deduplication-cnt.png", + "multiqc/bismark_hisat/multiqc_plots/png/bismark_deduplication-pct.png", + "multiqc/bismark_hisat/multiqc_plots/png/bismark_mbias_CHG_R1.png", + "multiqc/bismark_hisat/multiqc_plots/png/bismark_mbias_CHG_R2.png", + "multiqc/bismark_hisat/multiqc_plots/png/bismark_mbias_CHH_R1.png", + "multiqc/bismark_hisat/multiqc_plots/png/bismark_mbias_CHH_R2.png", + "multiqc/bismark_hisat/multiqc_plots/png/bismark_mbias_CpG_R1.png", + "multiqc/bismark_hisat/multiqc_plots/png/bismark_mbias_CpG_R2.png", + "multiqc/bismark_hisat/multiqc_plots/png/bismark_strand_alignment-cnt.png", + "multiqc/bismark_hisat/multiqc_plots/png/bismark_strand_alignment-pct.png", + "multiqc/bismark_hisat/multiqc_plots/png/cutadapt_filtered_reads_plot-cnt.png", + "multiqc/bismark_hisat/multiqc_plots/png/cutadapt_filtered_reads_plot-pct.png", + "multiqc/bismark_hisat/multiqc_plots/png/cutadapt_trimmed_sequences_plot_3_Counts.png", + "multiqc/bismark_hisat/multiqc_plots/png/cutadapt_trimmed_sequences_plot_3_Obs_Exp.png", + "multiqc/bismark_hisat/multiqc_plots/png/fastqc-status-check-heatmap.png", + "multiqc/bismark_hisat/multiqc_plots/png/fastqc_adapter_content_plot.png", + "multiqc/bismark_hisat/multiqc_plots/png/fastqc_overrepresented_sequences_plot.png", + "multiqc/bismark_hisat/multiqc_plots/png/fastqc_per_base_n_content_plot.png", + "multiqc/bismark_hisat/multiqc_plots/png/fastqc_per_base_sequence_quality_plot.png", + "multiqc/bismark_hisat/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Counts.png", + "multiqc/bismark_hisat/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Percentages.png", + "multiqc/bismark_hisat/multiqc_plots/png/fastqc_per_sequence_quality_scores_plot.png", + "multiqc/bismark_hisat/multiqc_plots/png/fastqc_sequence_counts_plot-cnt.png", + "multiqc/bismark_hisat/multiqc_plots/png/fastqc_sequence_counts_plot-pct.png", + "multiqc/bismark_hisat/multiqc_plots/png/fastqc_sequence_duplication_levels_plot.png", + "multiqc/bismark_hisat/multiqc_plots/png/fastqc_top_overrepresented_sequences_table.png", + "multiqc/bismark_hisat/multiqc_plots/png/general_stats_table.png", + "multiqc/bismark_hisat/multiqc_plots/png/qualimap_coverage_histogram.png", + "multiqc/bismark_hisat/multiqc_plots/png/qualimap_gc_content.png", + "multiqc/bismark_hisat/multiqc_plots/png/qualimap_genome_fraction.png", + "multiqc/bismark_hisat/multiqc_plots/png/qualimap_insert_size.png", + "multiqc/bismark_hisat/multiqc_plots/svg", + "multiqc/bismark_hisat/multiqc_plots/svg/bismark-methylation-dp.svg", + "multiqc/bismark_hisat/multiqc_plots/svg/bismark_alignment-cnt.svg", + "multiqc/bismark_hisat/multiqc_plots/svg/bismark_alignment-pct.svg", + "multiqc/bismark_hisat/multiqc_plots/svg/bismark_deduplication-cnt.svg", + "multiqc/bismark_hisat/multiqc_plots/svg/bismark_deduplication-pct.svg", + "multiqc/bismark_hisat/multiqc_plots/svg/bismark_mbias_CHG_R1.svg", + "multiqc/bismark_hisat/multiqc_plots/svg/bismark_mbias_CHG_R2.svg", + "multiqc/bismark_hisat/multiqc_plots/svg/bismark_mbias_CHH_R1.svg", + "multiqc/bismark_hisat/multiqc_plots/svg/bismark_mbias_CHH_R2.svg", + "multiqc/bismark_hisat/multiqc_plots/svg/bismark_mbias_CpG_R1.svg", + "multiqc/bismark_hisat/multiqc_plots/svg/bismark_mbias_CpG_R2.svg", + "multiqc/bismark_hisat/multiqc_plots/svg/bismark_strand_alignment-cnt.svg", + "multiqc/bismark_hisat/multiqc_plots/svg/bismark_strand_alignment-pct.svg", + "multiqc/bismark_hisat/multiqc_plots/svg/cutadapt_filtered_reads_plot-cnt.svg", + "multiqc/bismark_hisat/multiqc_plots/svg/cutadapt_filtered_reads_plot-pct.svg", + "multiqc/bismark_hisat/multiqc_plots/svg/cutadapt_trimmed_sequences_plot_3_Counts.svg", + "multiqc/bismark_hisat/multiqc_plots/svg/cutadapt_trimmed_sequences_plot_3_Obs_Exp.svg", + "multiqc/bismark_hisat/multiqc_plots/svg/fastqc-status-check-heatmap.svg", + "multiqc/bismark_hisat/multiqc_plots/svg/fastqc_adapter_content_plot.svg", + "multiqc/bismark_hisat/multiqc_plots/svg/fastqc_overrepresented_sequences_plot.svg", + "multiqc/bismark_hisat/multiqc_plots/svg/fastqc_per_base_n_content_plot.svg", + "multiqc/bismark_hisat/multiqc_plots/svg/fastqc_per_base_sequence_quality_plot.svg", + "multiqc/bismark_hisat/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Counts.svg", + "multiqc/bismark_hisat/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Percentages.svg", + "multiqc/bismark_hisat/multiqc_plots/svg/fastqc_per_sequence_quality_scores_plot.svg", + "multiqc/bismark_hisat/multiqc_plots/svg/fastqc_sequence_counts_plot-cnt.svg", + "multiqc/bismark_hisat/multiqc_plots/svg/fastqc_sequence_counts_plot-pct.svg", + "multiqc/bismark_hisat/multiqc_plots/svg/fastqc_sequence_duplication_levels_plot.svg", + "multiqc/bismark_hisat/multiqc_plots/svg/fastqc_top_overrepresented_sequences_table.svg", + "multiqc/bismark_hisat/multiqc_plots/svg/general_stats_table.svg", + "multiqc/bismark_hisat/multiqc_plots/svg/qualimap_coverage_histogram.svg", + "multiqc/bismark_hisat/multiqc_plots/svg/qualimap_gc_content.svg", + "multiqc/bismark_hisat/multiqc_plots/svg/qualimap_genome_fraction.svg", + "multiqc/bismark_hisat/multiqc_plots/svg/qualimap_insert_size.svg", + "multiqc/bismark_hisat/multiqc_report.html", + "pipeline_info", + "pipeline_info/nf_core_pipeline_software_mqc_versions.yml", + "qualimap", + "qualimap/Ecoli_10K_methylated", + "qualimap/Ecoli_10K_methylated/css", + "qualimap/Ecoli_10K_methylated/css/agogo.css", + "qualimap/Ecoli_10K_methylated/css/ajax-loader.gif", + "qualimap/Ecoli_10K_methylated/css/basic.css", + "qualimap/Ecoli_10K_methylated/css/bgfooter.png", + "qualimap/Ecoli_10K_methylated/css/bgtop.png", + "qualimap/Ecoli_10K_methylated/css/comment-bright.png", + "qualimap/Ecoli_10K_methylated/css/comment-close.png", + "qualimap/Ecoli_10K_methylated/css/comment.png", + "qualimap/Ecoli_10K_methylated/css/doctools.js", + "qualimap/Ecoli_10K_methylated/css/down-pressed.png", + "qualimap/Ecoli_10K_methylated/css/down.png", + "qualimap/Ecoli_10K_methylated/css/file.png", + "qualimap/Ecoli_10K_methylated/css/jquery.js", + "qualimap/Ecoli_10K_methylated/css/minus.png", + "qualimap/Ecoli_10K_methylated/css/plus.png", + "qualimap/Ecoli_10K_methylated/css/pygments.css", + "qualimap/Ecoli_10K_methylated/css/qualimap_logo_small.png", + "qualimap/Ecoli_10K_methylated/css/report.css", + "qualimap/Ecoli_10K_methylated/css/searchtools.js", + "qualimap/Ecoli_10K_methylated/css/underscore.js", + "qualimap/Ecoli_10K_methylated/css/up-pressed.png", + "qualimap/Ecoli_10K_methylated/css/up.png", + "qualimap/Ecoli_10K_methylated/css/websupport.js", + "qualimap/Ecoli_10K_methylated/genome_results.txt", + "qualimap/Ecoli_10K_methylated/images_qualimapReport", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_coverage_0to50_histogram.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_coverage_across_reference.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_coverage_histogram.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_coverage_quotes.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_gc_content_per_window.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_homopolymer_indels.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_insert_size_across_reference.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_insert_size_histogram.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_mapping_quality_across_reference.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_mapping_quality_histogram.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_reads_content_per_read_position.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_uniq_read_starts_histogram.png", + "qualimap/Ecoli_10K_methylated/qualimapReport.html", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/coverage_across_reference.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/coverage_histogram.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/duplication_rate_histogram.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/genome_fraction_coverage.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/homopolymer_indels.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/insert_size_across_reference.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/insert_size_histogram.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/mapped_reads_gc-content_distribution.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/mapped_reads_nucleotide_content.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/mapping_quality_across_reference.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/mapping_quality_histogram.txt", + "qualimap/SRR389222_sub1", + "qualimap/SRR389222_sub1/css", + "qualimap/SRR389222_sub1/css/agogo.css", + "qualimap/SRR389222_sub1/css/ajax-loader.gif", + "qualimap/SRR389222_sub1/css/basic.css", + "qualimap/SRR389222_sub1/css/bgfooter.png", + "qualimap/SRR389222_sub1/css/bgtop.png", + "qualimap/SRR389222_sub1/css/comment-bright.png", + "qualimap/SRR389222_sub1/css/comment-close.png", + "qualimap/SRR389222_sub1/css/comment.png", + "qualimap/SRR389222_sub1/css/doctools.js", + "qualimap/SRR389222_sub1/css/down-pressed.png", + "qualimap/SRR389222_sub1/css/down.png", + "qualimap/SRR389222_sub1/css/file.png", + "qualimap/SRR389222_sub1/css/jquery.js", + "qualimap/SRR389222_sub1/css/minus.png", + "qualimap/SRR389222_sub1/css/plus.png", + "qualimap/SRR389222_sub1/css/pygments.css", + "qualimap/SRR389222_sub1/css/qualimap_logo_small.png", + "qualimap/SRR389222_sub1/css/report.css", + "qualimap/SRR389222_sub1/css/searchtools.js", + "qualimap/SRR389222_sub1/css/underscore.js", + "qualimap/SRR389222_sub1/css/up-pressed.png", + "qualimap/SRR389222_sub1/css/up.png", + "qualimap/SRR389222_sub1/css/websupport.js", + "qualimap/SRR389222_sub1/genome_results.txt", + "qualimap/SRR389222_sub1/images_qualimapReport", + "qualimap/SRR389222_sub1/images_qualimapReport/genome_coverage_0to50_histogram.png", + "qualimap/SRR389222_sub1/images_qualimapReport/genome_coverage_across_reference.png", + "qualimap/SRR389222_sub1/images_qualimapReport/genome_coverage_histogram.png", + "qualimap/SRR389222_sub1/images_qualimapReport/genome_coverage_quotes.png", + "qualimap/SRR389222_sub1/images_qualimapReport/genome_gc_content_per_window.png", + "qualimap/SRR389222_sub1/images_qualimapReport/genome_mapping_quality_across_reference.png", + "qualimap/SRR389222_sub1/images_qualimapReport/genome_mapping_quality_histogram.png", + "qualimap/SRR389222_sub1/images_qualimapReport/genome_reads_content_per_read_position.png", + "qualimap/SRR389222_sub1/images_qualimapReport/genome_uniq_read_starts_histogram.png", + "qualimap/SRR389222_sub1/qualimapReport.html", + "qualimap/SRR389222_sub1/raw_data_qualimapReport", + "qualimap/SRR389222_sub1/raw_data_qualimapReport/coverage_across_reference.txt", + "qualimap/SRR389222_sub1/raw_data_qualimapReport/coverage_histogram.txt", + "qualimap/SRR389222_sub1/raw_data_qualimapReport/duplication_rate_histogram.txt", + "qualimap/SRR389222_sub1/raw_data_qualimapReport/genome_fraction_coverage.txt", + "qualimap/SRR389222_sub1/raw_data_qualimapReport/mapped_reads_gc-content_distribution.txt", + "qualimap/SRR389222_sub1/raw_data_qualimapReport/mapped_reads_nucleotide_content.txt", + "qualimap/SRR389222_sub1/raw_data_qualimapReport/mapping_quality_across_reference.txt", + "qualimap/SRR389222_sub1/raw_data_qualimapReport/mapping_quality_histogram.txt", + "qualimap/SRR389222_sub2", + "qualimap/SRR389222_sub2/css", + "qualimap/SRR389222_sub2/css/agogo.css", + "qualimap/SRR389222_sub2/css/ajax-loader.gif", + "qualimap/SRR389222_sub2/css/basic.css", + "qualimap/SRR389222_sub2/css/bgfooter.png", + "qualimap/SRR389222_sub2/css/bgtop.png", + "qualimap/SRR389222_sub2/css/comment-bright.png", + "qualimap/SRR389222_sub2/css/comment-close.png", + "qualimap/SRR389222_sub2/css/comment.png", + "qualimap/SRR389222_sub2/css/doctools.js", + "qualimap/SRR389222_sub2/css/down-pressed.png", + "qualimap/SRR389222_sub2/css/down.png", + "qualimap/SRR389222_sub2/css/file.png", + "qualimap/SRR389222_sub2/css/jquery.js", + "qualimap/SRR389222_sub2/css/minus.png", + "qualimap/SRR389222_sub2/css/plus.png", + "qualimap/SRR389222_sub2/css/pygments.css", + "qualimap/SRR389222_sub2/css/qualimap_logo_small.png", + "qualimap/SRR389222_sub2/css/report.css", + "qualimap/SRR389222_sub2/css/searchtools.js", + "qualimap/SRR389222_sub2/css/underscore.js", + "qualimap/SRR389222_sub2/css/up-pressed.png", + "qualimap/SRR389222_sub2/css/up.png", + "qualimap/SRR389222_sub2/css/websupport.js", + "qualimap/SRR389222_sub2/genome_results.txt", + "qualimap/SRR389222_sub2/images_qualimapReport", + "qualimap/SRR389222_sub2/images_qualimapReport/genome_coverage_0to50_histogram.png", + "qualimap/SRR389222_sub2/images_qualimapReport/genome_coverage_across_reference.png", + "qualimap/SRR389222_sub2/images_qualimapReport/genome_coverage_histogram.png", + "qualimap/SRR389222_sub2/images_qualimapReport/genome_coverage_quotes.png", + "qualimap/SRR389222_sub2/images_qualimapReport/genome_gc_content_per_window.png", + "qualimap/SRR389222_sub2/images_qualimapReport/genome_mapping_quality_across_reference.png", + "qualimap/SRR389222_sub2/images_qualimapReport/genome_mapping_quality_histogram.png", + "qualimap/SRR389222_sub2/images_qualimapReport/genome_reads_content_per_read_position.png", + "qualimap/SRR389222_sub2/images_qualimapReport/genome_uniq_read_starts_histogram.png", + "qualimap/SRR389222_sub2/qualimapReport.html", + "qualimap/SRR389222_sub2/raw_data_qualimapReport", + "qualimap/SRR389222_sub2/raw_data_qualimapReport/coverage_across_reference.txt", + "qualimap/SRR389222_sub2/raw_data_qualimapReport/coverage_histogram.txt", + "qualimap/SRR389222_sub2/raw_data_qualimapReport/duplication_rate_histogram.txt", + "qualimap/SRR389222_sub2/raw_data_qualimapReport/genome_fraction_coverage.txt", + "qualimap/SRR389222_sub2/raw_data_qualimapReport/mapped_reads_gc-content_distribution.txt", + "qualimap/SRR389222_sub2/raw_data_qualimapReport/mapped_reads_nucleotide_content.txt", + "qualimap/SRR389222_sub2/raw_data_qualimapReport/mapping_quality_across_reference.txt", + "qualimap/SRR389222_sub2/raw_data_qualimapReport/mapping_quality_histogram.txt", + "qualimap/SRR389222_sub3", + "qualimap/SRR389222_sub3/css", + "qualimap/SRR389222_sub3/css/agogo.css", + "qualimap/SRR389222_sub3/css/ajax-loader.gif", + "qualimap/SRR389222_sub3/css/basic.css", + "qualimap/SRR389222_sub3/css/bgfooter.png", + "qualimap/SRR389222_sub3/css/bgtop.png", + "qualimap/SRR389222_sub3/css/comment-bright.png", + "qualimap/SRR389222_sub3/css/comment-close.png", + "qualimap/SRR389222_sub3/css/comment.png", + "qualimap/SRR389222_sub3/css/doctools.js", + "qualimap/SRR389222_sub3/css/down-pressed.png", + "qualimap/SRR389222_sub3/css/down.png", + "qualimap/SRR389222_sub3/css/file.png", + "qualimap/SRR389222_sub3/css/jquery.js", + "qualimap/SRR389222_sub3/css/minus.png", + "qualimap/SRR389222_sub3/css/plus.png", + "qualimap/SRR389222_sub3/css/pygments.css", + "qualimap/SRR389222_sub3/css/qualimap_logo_small.png", + "qualimap/SRR389222_sub3/css/report.css", + "qualimap/SRR389222_sub3/css/searchtools.js", + "qualimap/SRR389222_sub3/css/underscore.js", + "qualimap/SRR389222_sub3/css/up-pressed.png", + "qualimap/SRR389222_sub3/css/up.png", + "qualimap/SRR389222_sub3/css/websupport.js", + "qualimap/SRR389222_sub3/genome_results.txt", + "qualimap/SRR389222_sub3/images_qualimapReport", + "qualimap/SRR389222_sub3/images_qualimapReport/genome_coverage_0to50_histogram.png", + "qualimap/SRR389222_sub3/images_qualimapReport/genome_coverage_across_reference.png", + "qualimap/SRR389222_sub3/images_qualimapReport/genome_coverage_histogram.png", + "qualimap/SRR389222_sub3/images_qualimapReport/genome_coverage_quotes.png", + "qualimap/SRR389222_sub3/images_qualimapReport/genome_gc_content_per_window.png", + "qualimap/SRR389222_sub3/images_qualimapReport/genome_mapping_quality_across_reference.png", + "qualimap/SRR389222_sub3/images_qualimapReport/genome_mapping_quality_histogram.png", + "qualimap/SRR389222_sub3/images_qualimapReport/genome_reads_content_per_read_position.png", + "qualimap/SRR389222_sub3/images_qualimapReport/genome_uniq_read_starts_histogram.png", + "qualimap/SRR389222_sub3/qualimapReport.html", + "qualimap/SRR389222_sub3/raw_data_qualimapReport", + "qualimap/SRR389222_sub3/raw_data_qualimapReport/coverage_across_reference.txt", + "qualimap/SRR389222_sub3/raw_data_qualimapReport/coverage_histogram.txt", + "qualimap/SRR389222_sub3/raw_data_qualimapReport/duplication_rate_histogram.txt", + "qualimap/SRR389222_sub3/raw_data_qualimapReport/genome_fraction_coverage.txt", + "qualimap/SRR389222_sub3/raw_data_qualimapReport/mapped_reads_gc-content_distribution.txt", + "qualimap/SRR389222_sub3/raw_data_qualimapReport/mapped_reads_nucleotide_content.txt", + "qualimap/SRR389222_sub3/raw_data_qualimapReport/mapping_quality_across_reference.txt", + "qualimap/SRR389222_sub3/raw_data_qualimapReport/mapping_quality_histogram.txt", + "trimgalore", + "trimgalore/fastqc", + "trimgalore/fastqc/Ecoli_10K_methylated_1_val_1_fastqc.html", + "trimgalore/fastqc/Ecoli_10K_methylated_2_val_2_fastqc.html", + "trimgalore/fastqc/SRR389222_sub1_trimmed_fastqc.html", + "trimgalore/fastqc/SRR389222_sub2_trimmed_fastqc.html", + "trimgalore/fastqc/SRR389222_sub3_trimmed_fastqc.html", + "trimgalore/fastqc/zips", + "trimgalore/fastqc/zips/Ecoli_10K_methylated_1_val_1_fastqc.zip", + "trimgalore/fastqc/zips/Ecoli_10K_methylated_2_val_2_fastqc.zip", + "trimgalore/fastqc/zips/SRR389222_sub1_trimmed_fastqc.zip", + "trimgalore/fastqc/zips/SRR389222_sub2_trimmed_fastqc.zip", + "trimgalore/fastqc/zips/SRR389222_sub3_trimmed_fastqc.zip", + "trimgalore/logs", + "trimgalore/logs/Ecoli_10K_methylated_1.fastq.gz_trimming_report.txt", + "trimgalore/logs/Ecoli_10K_methylated_2.fastq.gz_trimming_report.txt", + "trimgalore/logs/SRR389222_sub1.fastq.gz_trimming_report.txt", + "trimgalore/logs/SRR389222_sub2.fastq.gz_trimming_report.txt", + "trimgalore/logs/SRR389222_sub3.fastq.gz_trimming_report.txt" + ], + [ + "Ecoli_10K_methylated_1_val_1_bismark_hisat2_pe.deduplicated.bedGraph.gz:md5,357196071c54757566cdd0bb7ab79fa8", + "SRR389222_sub1_trimmed_bismark_hisat2.deduplicated.bedGraph.gz:md5,47f60a641b8564c14a0f08599215944b", + "SRR389222_sub2_trimmed_bismark_hisat2.deduplicated.bedGraph.gz:md5,2b5a22fd9d8bf25b993a8c0ad7beb13d", + "SRR389222_sub3_trimmed_bismark_hisat2.deduplicated.bedGraph.gz:md5,d42e09af121ae14f6e0de5779e317b0b", + "Ecoli_10K_methylated_1_val_1_bismark_hisat2_pe.deduplicated.M-bias.txt:md5,5fd8655f4b9dba2249a52b769fe50faf", + "SRR389222_sub1_trimmed_bismark_hisat2.deduplicated.M-bias.txt:md5,de08bb32cf22e361f9ca05058b4a5088", + "SRR389222_sub2_trimmed_bismark_hisat2.deduplicated.M-bias.txt:md5,73808d508bff5a44a5ec956df0fc3f69", + "SRR389222_sub3_trimmed_bismark_hisat2.deduplicated.M-bias.txt:md5,fee56ba84eecef9cf4ad8e01cdf1da87", + "CHG_OB_Ecoli_10K_methylated_1_val_1_bismark_hisat2_pe.deduplicated.txt.gz:md5,2702dc126d7011e0abfed5bf557d9ce7", + "CHG_OB_SRR389222_sub1_trimmed_bismark_hisat2.deduplicated.txt.gz:md5,5c177e6f00dfc6e2335a55c6b70efa0c", + "CHG_OB_SRR389222_sub2_trimmed_bismark_hisat2.deduplicated.txt.gz:md5,583bf95e8dbd3d684bef595e31453bd1", + "CHG_OB_SRR389222_sub3_trimmed_bismark_hisat2.deduplicated.txt.gz:md5,5cd486ff48be8f8fa0d4e35710be2071", + "CHG_OT_Ecoli_10K_methylated_1_val_1_bismark_hisat2_pe.deduplicated.txt.gz:md5,b508e40e494dfd9fc2c2017286cd3fe9", + "CHG_OT_SRR389222_sub1_trimmed_bismark_hisat2.deduplicated.txt.gz:md5,83573b71cd85b370737df435af41cf76", + "CHG_OT_SRR389222_sub2_trimmed_bismark_hisat2.deduplicated.txt.gz:md5,c2a2c563f630ef974710de6a9b6d88fe", + "CHG_OT_SRR389222_sub3_trimmed_bismark_hisat2.deduplicated.txt.gz:md5,5ef9ccb5710a17e63e5b7c8409cc633f", + "CHH_OB_Ecoli_10K_methylated_1_val_1_bismark_hisat2_pe.deduplicated.txt.gz:md5,f129fdf3b0f59c0380d55546bc5f8874", + "CHH_OB_SRR389222_sub1_trimmed_bismark_hisat2.deduplicated.txt.gz:md5,9469ac28e4369032b855ce1a794a56a4", + "CHH_OB_SRR389222_sub2_trimmed_bismark_hisat2.deduplicated.txt.gz:md5,3c48fa14cc07ca041a35efd978ef877a", + "CHH_OB_SRR389222_sub3_trimmed_bismark_hisat2.deduplicated.txt.gz:md5,68b5405d8de91c7046ab46fc5c42ee30", + "CHH_OT_Ecoli_10K_methylated_1_val_1_bismark_hisat2_pe.deduplicated.txt.gz:md5,112a5d2beba2f8ebda273ca3bec98d88", + "CHH_OT_SRR389222_sub1_trimmed_bismark_hisat2.deduplicated.txt.gz:md5,83d1e3ae2b492b709e25da82f1328a10", + "CHH_OT_SRR389222_sub2_trimmed_bismark_hisat2.deduplicated.txt.gz:md5,3ffdca35b32cc45fc8013f2943755014", + "CHH_OT_SRR389222_sub3_trimmed_bismark_hisat2.deduplicated.txt.gz:md5,75546cab2a0631ccab29b6bc034758b4", + "CpG_OB_Ecoli_10K_methylated_1_val_1_bismark_hisat2_pe.deduplicated.txt.gz:md5,ee183f1b0b757bfdb2f0b71502d1ce27", + "CpG_OB_SRR389222_sub1_trimmed_bismark_hisat2.deduplicated.txt.gz:md5,f0404fc1fc18c7ff58e8766b405239ed", + "CpG_OB_SRR389222_sub2_trimmed_bismark_hisat2.deduplicated.txt.gz:md5,2f0dd539df6b5943496158ccb62edc7b", + "CpG_OB_SRR389222_sub3_trimmed_bismark_hisat2.deduplicated.txt.gz:md5,0bd78a1708fb8126af553c94ab8c8371", + "CpG_OT_Ecoli_10K_methylated_1_val_1_bismark_hisat2_pe.deduplicated.txt.gz:md5,8bb4cb59815cc9e260dcfa332fcb5ae9", + "CpG_OT_SRR389222_sub1_trimmed_bismark_hisat2.deduplicated.txt.gz:md5,f46d89df2fa874a628109e32f3484179", + "CpG_OT_SRR389222_sub2_trimmed_bismark_hisat2.deduplicated.txt.gz:md5,f18fd1b0a20d2ad4ac56ee39372b6c25", + "CpG_OT_SRR389222_sub3_trimmed_bismark_hisat2.deduplicated.txt.gz:md5,528523e2703d6c20f599a325b8453670", + "Ecoli_10K_methylated_1_val_1_bismark_hisat2_pe.deduplicated.bismark.cov.gz:md5,d8342eca72089408d8e4d7c5ec5e95bf", + "SRR389222_sub1_trimmed_bismark_hisat2.deduplicated.bismark.cov.gz:md5,8f77dc7c0dea9e0c413e6a8c4fe3c9af", + "SRR389222_sub2_trimmed_bismark_hisat2.deduplicated.bismark.cov.gz:md5,0da5af753da0274f3e6b66b04a11e73a", + "SRR389222_sub3_trimmed_bismark_hisat2.deduplicated.bismark.cov.gz:md5,43f8554a2d19d172c16636374bb83084", + "Ecoli_10K_methylated_1_val_1_bismark_hisat2_pe.deduplicated_splitting_report.txt:md5,2fb90e252b14c32bcf9709c6fdaa5a1b", + "SRR389222_sub1_trimmed_bismark_hisat2.deduplicated_splitting_report.txt:md5,30d4e3aec9220b886a6ac17630f48ef3", + "SRR389222_sub2_trimmed_bismark_hisat2.deduplicated_splitting_report.txt:md5,8519a3e58f6047f71e8cf09991482332", + "SRR389222_sub3_trimmed_bismark_hisat2.deduplicated_splitting_report.txt:md5,e6144ca656936c6ee6e7281a1192fa78", + "BS_CT.1.ht2:md5,273c7686fc1dc7d93e36433592367f81", + "BS_CT.2.ht2:md5,752a03fc364115fc910e5a28ae154382", + "BS_CT.3.ht2:md5,b41e72eefad74e8ede411c78a5bd5dee", + "BS_CT.4.ht2:md5,02b3d1855a67fd9cbb4c411406a22fde", + "BS_CT.5.ht2:md5,d117de4c2c910a1ae7f0459c11ba6018", + "BS_CT.6.ht2:md5,4097a785a8d1ca92489d83b4c613a50b", + "BS_CT.7.ht2:md5,9013eccd91ad614d7893c739275a394f", + "BS_CT.8.ht2:md5,33cdeccccebe80329f1fdbee7f5874cb", + "genome_mfa.CT_conversion.fa:md5,4dd181b65f1f3549f4132c9a3759eee8", + "BS_GA.1.ht2:md5,c2b02b7987f4ac0578332204678674cd", + "BS_GA.2.ht2:md5,579241d95941538b2e75bbdb6cfaa73d", + "BS_GA.3.ht2:md5,b41e72eefad74e8ede411c78a5bd5dee", + "BS_GA.4.ht2:md5,6b64fa496ffa2af2af235e1c87f06a25", + "BS_GA.5.ht2:md5,43aa1c78c6ec18c4165cf25159578fee", + "BS_GA.6.ht2:md5,2dc0f049d7d0f2a51822df8b195dce41", + "BS_GA.7.ht2:md5,9013eccd91ad614d7893c739275a394f", + "BS_GA.8.ht2:md5,33cdeccccebe80329f1fdbee7f5874cb", + "genome_mfa.GA_conversion.fa:md5,3dee732bc344fd620c3a7322f52c6a5f", + "bismark-methylation-dp.txt:md5,233409b9665cb851aca3b6b4511ff757", + "bismark_alignment.txt:md5,3acfd1a751bef6696b6fa095d0631bb6", + "bismark_deduplication.txt:md5,c025b4368b08f9e623624908632e44a1", + "bismark_mbias_CHG_R1.txt:md5,0c860f1b9828749692ef051d54adf8c5", + "bismark_mbias_CHG_R2.txt:md5,65e09a6193aee6dfb5aa2e3cdd02bb13", + "bismark_mbias_CHH_R1.txt:md5,084297fbb1d42051c0d5e1e850f7d49b", + "bismark_mbias_CHH_R2.txt:md5,593ec6453c5428d1bd2caf2d29e8ff15", + "bismark_mbias_CpG_R1.txt:md5,5205558ceef1cc75348c85d28cc31c3a", + "bismark_mbias_CpG_R2.txt:md5,7d4542b8ace370d14902f6ba3e866ba3", + "bismark_strand_alignment.txt:md5,8fd4b9aa0180cc3999cee8925c537856", + "cutadapt_filtered_reads_plot.txt:md5,ff1b6d4011a5be5410b9404f7ff56c56", + "cutadapt_trimmed_sequences_plot_3_Counts.txt:md5,57d07c19b0c30dc88df96c30bedcdc33", + "cutadapt_trimmed_sequences_plot_3_Obs_Exp.txt:md5,1e5ca4193f8290c5c812334d03615b41", + "fastqc-status-check-heatmap.txt:md5,218c2a7efbb9c02f652fa78fc739c866", + "fastqc_adapter_content_plot.txt:md5,48d8bd5ece984a74972ce0a0e814dd07", + "fastqc_overrepresented_sequences_plot.txt:md5,9c4b7064950b5b2c486d556984f21e9e", + "fastqc_per_base_n_content_plot.txt:md5,019d5cd4f61a31f4e7016140ca8ee36e", + "fastqc_per_base_sequence_quality_plot.txt:md5,e4c7d522114eab9bc9101e7ee9d83c8f", + "fastqc_per_sequence_gc_content_plot_Counts.txt:md5,302659bee8a02b6a38b24fe25f8eaa87", + "fastqc_per_sequence_gc_content_plot_Percentages.txt:md5,c75b396eb5dda8682fb1652a9b2e92a3", + "fastqc_per_sequence_quality_scores_plot.txt:md5,548c593f4a8be2d8627fc3bd1c280611", + "fastqc_sequence_counts_plot.txt:md5,58eeeb06bc9dcc1764c7daf0847d6bbf", + "fastqc_sequence_duplication_levels_plot.txt:md5,9e5712db9aa39b5754ea1e0c49cfff15", + "fastqc_top_overrepresented_sequences_table.txt:md5,6dfc5334a09c05392ea17369aa742d01", + "multiqc_bismark_alignment.txt:md5,731133921792ca3943acd7ae9938d5e7", + "multiqc_bismark_dedup.txt:md5,5e58032548eda3c39384495cf0cfaa3d", + "multiqc_bismark_methextract.txt:md5,5ce6739f6daa34276200f303c240e4b1", + "multiqc_citations.txt:md5,b9d42869faad581bd963d3d3bb490026", + "multiqc_cutadapt.txt:md5,f7a61369244b1e040d264e6913b8a839", + "qualimap_coverage_histogram.txt:md5,b78964924f4985d97f6dff7ced688d29", + "qualimap_gc_content.txt:md5,ad345dd40fe367f2138776c8ea2b257f", + "qualimap_genome_fraction.txt:md5,9a1c3d3f7349cf1c2af1c5878dac4185", + "qualimap_insert_size.txt:md5,8327f805cbaf1c61ca3128b6c16c7dfd", + "genome_results.txt:md5,9b6cc47e6ecfa1a9bd03b79f9ab764e6", + "genome_results.txt:md5,e808a20446012ad2643385cf316605c0", + "genome_results.txt:md5,41833cb9a1cfb8945c0fd6711981e58e", + "genome_results.txt:md5,10636e2fb7eb1ac2cf246483405ae973" + ], + [ + [ + "Ecoli_10K_methylated.sorted.bam", + "a1bd6455ebe3ecb43fe55e02d149d98" + ], + [ + "Ecoli_10K_methylated_1_val_1_bismark_hisat2_pe.bam", + "534293d598c34366bcde057d3972b60" + ], + [ + "SRR389222_sub1.sorted.bam", + "b203a3936158c51706e56c3a4e16191e" + ], + [ + "SRR389222_sub1_trimmed_bismark_hisat2.bam", + "4ee84a71b73e58161226cc4d8ca1f9b9" + ], + [ + "SRR389222_sub2.sorted.bam", + "6f8b0d6f085cc6a3d597b8839ba94b8b" + ], + [ + "SRR389222_sub2_trimmed_bismark_hisat2.bam", + "3e3ccc351ed92abdced1edb24fbb94ed" + ], + [ + "SRR389222_sub3.sorted.bam", + "c03e8e797936ca18a7e286977c7cf16" + ], + [ + "SRR389222_sub3_trimmed_bismark_hisat2.bam", + "74c99f560772eb303bd4bc257f3a8898" + ], + [ + "Ecoli_10K_methylated.deduplicated.sorted.bam", + "a1bd6455ebe3ecb43fe55e02d149d98" + ], + [ + "SRR389222_sub1.deduplicated.sorted.bam", + "8d735d1f6337b2cf2fa720773ce34b60" + ], + [ + "SRR389222_sub2.deduplicated.sorted.bam", + "45d53a598b4e59d173e32ea1f0558083" + ], + [ + "SRR389222_sub3.deduplicated.sorted.bam", + "ddb15c5ef0686837616d73f45c154b8d" + ] + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-21T17:49:33.437253199" + } +} \ No newline at end of file diff --git a/tests/bismark_nomeseq.nf.test b/tests/bismark_nomeseq.nf.test new file mode 100644 index 00000000..4cd98ef6 --- /dev/null +++ b/tests/bismark_nomeseq.nf.test @@ -0,0 +1,40 @@ +nextflow_pipeline { + + name "Test Workflow main.nf" + script "../main.nf" + config "./nextflow.config" + + test("Params: bismark | nomeseq") { + when { + params { + nomeseq = true + outdir = "$outputDir" + } + } + + then { + // stable_name: All files + folders in ${params.outdir}/ with a stable name + def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) + // stable_path: All files in ${params.outdir}/ with stable content + def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') + // bam_files: All bam files + def bam_files = getAllFilesFromDir(params.outdir, include: ['**/*.bam']) + assertAll( + { assert workflow.success}, + { assert snapshot( + // Number of tasks + workflow.trace.succeeded().size(), + // pipeline versions.yml file for multiqc from which Nextflow version is removed because we tests pipelines on multiple Nextflow versions + removeNextflowVersion("$outputDir/pipeline_info/nf_core_pipeline_software_mqc_versions.yml"), + // All stable path name + stable_name, + // All files with stable contents + stable_path, + // All bam files + bam_files.collect{ file -> [ file.getName(), bam(file.toString()).getReadsMD5() ] } + ).match() } + ) + } + } + +} diff --git a/tests/bismark_nomeseq.nf.test.snap b/tests/bismark_nomeseq.nf.test.snap new file mode 100644 index 00000000..d23aa5fe --- /dev/null +++ b/tests/bismark_nomeseq.nf.test.snap @@ -0,0 +1,625 @@ +{ + "Params: bismark | nomeseq": { + "content": [ + 47, + { + "BISMARK_ALIGN": { + "bismark": "0.24.2" + }, + "BISMARK_GENOMEPREPARATION": { + "bismark": "0.24.2" + }, + "FASTQC": { + "fastqc": "0.12.1" + }, + "QUALIMAP_BAMQC": { + "qualimap": 2.3 + }, + "TRIMGALORE": { + "trimgalore": "0.6.10", + "cutadapt": 4.2 + }, + "Workflow": { + "nf-core/methylseq": "v2.7.0" + } + }, + [ + "bismark", + "bismark/alignments", + "bismark/alignments/logs", + "bismark/alignments/logs/Ecoli_10K_methylated_1_val_1_bismark_bt2_PE_report.txt", + "bismark/alignments/logs/SRR389222_sub1_trimmed_bismark_bt2_SE_report.txt", + "bismark/alignments/logs/SRR389222_sub2_trimmed_bismark_bt2_SE_report.txt", + "bismark/alignments/logs/SRR389222_sub3_trimmed_bismark_bt2_SE_report.txt", + "bismark/coverage2cytosine", + "bismark/coverage2cytosine/coverage", + "bismark/coverage2cytosine/coverage/Ecoli_10K_methylated.NOMe.CpG.cov.gz", + "bismark/coverage2cytosine/coverage/Ecoli_10K_methylated.NOMe.GpC.cov.gz", + "bismark/coverage2cytosine/coverage/SRR389222_sub1.NOMe.CpG.cov.gz", + "bismark/coverage2cytosine/coverage/SRR389222_sub1.NOMe.GpC.cov.gz", + "bismark/coverage2cytosine/coverage/SRR389222_sub2.NOMe.CpG.cov.gz", + "bismark/coverage2cytosine/coverage/SRR389222_sub2.NOMe.GpC.cov.gz", + "bismark/coverage2cytosine/coverage/SRR389222_sub3.NOMe.CpG.cov.gz", + "bismark/coverage2cytosine/coverage/SRR389222_sub3.NOMe.GpC.cov.gz", + "bismark/coverage2cytosine/reports", + "bismark/coverage2cytosine/reports/Ecoli_10K_methylated.NOMe.CpG_report.txt.gz", + "bismark/coverage2cytosine/reports/Ecoli_10K_methylated.NOMe.GpC_report.txt.gz", + "bismark/coverage2cytosine/reports/SRR389222_sub1.NOMe.CpG_report.txt.gz", + "bismark/coverage2cytosine/reports/SRR389222_sub1.NOMe.GpC_report.txt.gz", + "bismark/coverage2cytosine/reports/SRR389222_sub2.NOMe.CpG_report.txt.gz", + "bismark/coverage2cytosine/reports/SRR389222_sub2.NOMe.GpC_report.txt.gz", + "bismark/coverage2cytosine/reports/SRR389222_sub3.NOMe.CpG_report.txt.gz", + "bismark/coverage2cytosine/reports/SRR389222_sub3.NOMe.GpC_report.txt.gz", + "bismark/coverage2cytosine/summaries", + "bismark/coverage2cytosine/summaries/Ecoli_10K_methylated.cytosine_context_summary.txt", + "bismark/coverage2cytosine/summaries/SRR389222_sub1.cytosine_context_summary.txt", + "bismark/coverage2cytosine/summaries/SRR389222_sub2.cytosine_context_summary.txt", + "bismark/coverage2cytosine/summaries/SRR389222_sub3.cytosine_context_summary.txt", + "bismark/deduplicated", + "bismark/deduplicated/Ecoli_10K_methylated.deduplicated.sorted.bam", + "bismark/deduplicated/Ecoli_10K_methylated.deduplicated.sorted.bam.bai", + "bismark/deduplicated/SRR389222_sub1.deduplicated.sorted.bam", + "bismark/deduplicated/SRR389222_sub1.deduplicated.sorted.bam.bai", + "bismark/deduplicated/SRR389222_sub2.deduplicated.sorted.bam", + "bismark/deduplicated/SRR389222_sub2.deduplicated.sorted.bam.bai", + "bismark/deduplicated/SRR389222_sub3.deduplicated.sorted.bam", + "bismark/deduplicated/SRR389222_sub3.deduplicated.sorted.bam.bai", + "bismark/deduplicated/logs", + "bismark/deduplicated/logs/Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplication_report.txt", + "bismark/deduplicated/logs/SRR389222_sub1_trimmed_bismark_bt2.deduplication_report.txt", + "bismark/deduplicated/logs/SRR389222_sub2_trimmed_bismark_bt2.deduplication_report.txt", + "bismark/deduplicated/logs/SRR389222_sub3_trimmed_bismark_bt2.deduplication_report.txt", + "bismark/methylation_calls", + "bismark/methylation_calls/bedGraph", + "bismark/methylation_calls/bedGraph/Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplicated.bedGraph.gz", + "bismark/methylation_calls/bedGraph/SRR389222_sub1_trimmed_bismark_bt2.deduplicated.bedGraph.gz", + "bismark/methylation_calls/bedGraph/SRR389222_sub2_trimmed_bismark_bt2.deduplicated.bedGraph.gz", + "bismark/methylation_calls/bedGraph/SRR389222_sub3_trimmed_bismark_bt2.deduplicated.bedGraph.gz", + "bismark/methylation_calls/mbias", + "bismark/methylation_calls/mbias/Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplicated.M-bias.txt", + "bismark/methylation_calls/mbias/SRR389222_sub1_trimmed_bismark_bt2.deduplicated.M-bias.txt", + "bismark/methylation_calls/mbias/SRR389222_sub2_trimmed_bismark_bt2.deduplicated.M-bias.txt", + "bismark/methylation_calls/mbias/SRR389222_sub3_trimmed_bismark_bt2.deduplicated.M-bias.txt", + "bismark/methylation_calls/methylation_calls", + "bismark/methylation_calls/methylation_calls/CHG_OB_Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CHG_OB_SRR389222_sub1_trimmed_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CHG_OB_SRR389222_sub2_trimmed_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CHG_OB_SRR389222_sub3_trimmed_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CHG_OT_Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CHG_OT_SRR389222_sub1_trimmed_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CHG_OT_SRR389222_sub2_trimmed_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CHG_OT_SRR389222_sub3_trimmed_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CHH_OB_Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CHH_OB_SRR389222_sub1_trimmed_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CHH_OB_SRR389222_sub2_trimmed_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CHH_OB_SRR389222_sub3_trimmed_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CHH_OT_Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CHH_OT_SRR389222_sub1_trimmed_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CHH_OT_SRR389222_sub2_trimmed_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CHH_OT_SRR389222_sub3_trimmed_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CpG_OB_Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CpG_OB_SRR389222_sub1_trimmed_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CpG_OB_SRR389222_sub2_trimmed_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CpG_OB_SRR389222_sub3_trimmed_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CpG_OT_Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CpG_OT_SRR389222_sub1_trimmed_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CpG_OT_SRR389222_sub2_trimmed_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CpG_OT_SRR389222_sub3_trimmed_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_coverage", + "bismark/methylation_calls/methylation_coverage/Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplicated.bismark.cov.gz", + "bismark/methylation_calls/methylation_coverage/SRR389222_sub1_trimmed_bismark_bt2.deduplicated.bismark.cov.gz", + "bismark/methylation_calls/methylation_coverage/SRR389222_sub2_trimmed_bismark_bt2.deduplicated.bismark.cov.gz", + "bismark/methylation_calls/methylation_coverage/SRR389222_sub3_trimmed_bismark_bt2.deduplicated.bismark.cov.gz", + "bismark/methylation_calls/splitting_report", + "bismark/methylation_calls/splitting_report/Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplicated_splitting_report.txt", + "bismark/methylation_calls/splitting_report/SRR389222_sub1_trimmed_bismark_bt2.deduplicated_splitting_report.txt", + "bismark/methylation_calls/splitting_report/SRR389222_sub2_trimmed_bismark_bt2.deduplicated_splitting_report.txt", + "bismark/methylation_calls/splitting_report/SRR389222_sub3_trimmed_bismark_bt2.deduplicated_splitting_report.txt", + "bismark/reports", + "bismark/reports/Ecoli_10K_methylated_1_val_1_bismark_bt2_PE_report.html", + "bismark/reports/SRR389222_sub1_trimmed_bismark_bt2_SE_report.html", + "bismark/reports/SRR389222_sub2_trimmed_bismark_bt2_SE_report.html", + "bismark/reports/SRR389222_sub3_trimmed_bismark_bt2_SE_report.html", + "bismark/summary", + "bismark/summary/bismark_summary_report.html", + "bismark/summary/bismark_summary_report.txt", + "fastqc", + "fastqc/Ecoli_10K_methylated_1_fastqc.html", + "fastqc/Ecoli_10K_methylated_2_fastqc.html", + "fastqc/SRR389222_sub1_fastqc.html", + "fastqc/SRR389222_sub2_fastqc.html", + "fastqc/SRR389222_sub3_fastqc.html", + "fastqc/zips", + "fastqc/zips/Ecoli_10K_methylated_1_fastqc.zip", + "fastqc/zips/Ecoli_10K_methylated_2_fastqc.zip", + "fastqc/zips/SRR389222_sub1_fastqc.zip", + "fastqc/zips/SRR389222_sub2_fastqc.zip", + "fastqc/zips/SRR389222_sub3_fastqc.zip", + "multiqc", + "multiqc/bismark", + "multiqc/bismark/multiqc_data", + "multiqc/bismark/multiqc_data/bismark-methylation-dp.txt", + "multiqc/bismark/multiqc_data/bismark_alignment.txt", + "multiqc/bismark/multiqc_data/bismark_deduplication.txt", + "multiqc/bismark/multiqc_data/bismark_mbias_CHG_R1.txt", + "multiqc/bismark/multiqc_data/bismark_mbias_CHG_R2.txt", + "multiqc/bismark/multiqc_data/bismark_mbias_CHH_R1.txt", + "multiqc/bismark/multiqc_data/bismark_mbias_CHH_R2.txt", + "multiqc/bismark/multiqc_data/bismark_mbias_CpG_R1.txt", + "multiqc/bismark/multiqc_data/bismark_mbias_CpG_R2.txt", + "multiqc/bismark/multiqc_data/bismark_strand_alignment.txt", + "multiqc/bismark/multiqc_data/cutadapt_filtered_reads_plot.txt", + "multiqc/bismark/multiqc_data/cutadapt_trimmed_sequences_plot_3_Counts.txt", + "multiqc/bismark/multiqc_data/cutadapt_trimmed_sequences_plot_3_Obs_Exp.txt", + "multiqc/bismark/multiqc_data/fastqc-status-check-heatmap.txt", + "multiqc/bismark/multiqc_data/fastqc_adapter_content_plot.txt", + "multiqc/bismark/multiqc_data/fastqc_overrepresented_sequences_plot.txt", + "multiqc/bismark/multiqc_data/fastqc_per_base_n_content_plot.txt", + "multiqc/bismark/multiqc_data/fastqc_per_base_sequence_quality_plot.txt", + "multiqc/bismark/multiqc_data/fastqc_per_sequence_gc_content_plot_Counts.txt", + "multiqc/bismark/multiqc_data/fastqc_per_sequence_gc_content_plot_Percentages.txt", + "multiqc/bismark/multiqc_data/fastqc_per_sequence_quality_scores_plot.txt", + "multiqc/bismark/multiqc_data/fastqc_sequence_counts_plot.txt", + "multiqc/bismark/multiqc_data/fastqc_sequence_duplication_levels_plot.txt", + "multiqc/bismark/multiqc_data/fastqc_top_overrepresented_sequences_table.txt", + "multiqc/bismark/multiqc_data/multiqc.log", + "multiqc/bismark/multiqc_data/multiqc_bismark_alignment.txt", + "multiqc/bismark/multiqc_data/multiqc_bismark_dedup.txt", + "multiqc/bismark/multiqc_data/multiqc_bismark_methextract.txt", + "multiqc/bismark/multiqc_data/multiqc_citations.txt", + "multiqc/bismark/multiqc_data/multiqc_cutadapt.txt", + "multiqc/bismark/multiqc_data/multiqc_data.json", + "multiqc/bismark/multiqc_data/multiqc_fastqc.txt", + "multiqc/bismark/multiqc_data/multiqc_general_stats.txt", + "multiqc/bismark/multiqc_data/multiqc_qualimap_bamqc_genome_results.txt", + "multiqc/bismark/multiqc_data/multiqc_software_versions.txt", + "multiqc/bismark/multiqc_data/multiqc_sources.txt", + "multiqc/bismark/multiqc_data/qualimap_coverage_histogram.txt", + "multiqc/bismark/multiqc_data/qualimap_gc_content.txt", + "multiqc/bismark/multiqc_data/qualimap_genome_fraction.txt", + "multiqc/bismark/multiqc_data/qualimap_insert_size.txt", + "multiqc/bismark/multiqc_plots", + "multiqc/bismark/multiqc_plots/pdf", + "multiqc/bismark/multiqc_plots/pdf/bismark-methylation-dp.pdf", + "multiqc/bismark/multiqc_plots/pdf/bismark_alignment-cnt.pdf", + "multiqc/bismark/multiqc_plots/pdf/bismark_alignment-pct.pdf", + "multiqc/bismark/multiqc_plots/pdf/bismark_deduplication-cnt.pdf", + "multiqc/bismark/multiqc_plots/pdf/bismark_deduplication-pct.pdf", + "multiqc/bismark/multiqc_plots/pdf/bismark_mbias_CHG_R1.pdf", + "multiqc/bismark/multiqc_plots/pdf/bismark_mbias_CHG_R2.pdf", + "multiqc/bismark/multiqc_plots/pdf/bismark_mbias_CHH_R1.pdf", + "multiqc/bismark/multiqc_plots/pdf/bismark_mbias_CHH_R2.pdf", + "multiqc/bismark/multiqc_plots/pdf/bismark_mbias_CpG_R1.pdf", + "multiqc/bismark/multiqc_plots/pdf/bismark_mbias_CpG_R2.pdf", + "multiqc/bismark/multiqc_plots/pdf/bismark_strand_alignment-cnt.pdf", + "multiqc/bismark/multiqc_plots/pdf/bismark_strand_alignment-pct.pdf", + "multiqc/bismark/multiqc_plots/pdf/cutadapt_filtered_reads_plot-cnt.pdf", + "multiqc/bismark/multiqc_plots/pdf/cutadapt_filtered_reads_plot-pct.pdf", + "multiqc/bismark/multiqc_plots/pdf/cutadapt_trimmed_sequences_plot_3_Counts.pdf", + "multiqc/bismark/multiqc_plots/pdf/cutadapt_trimmed_sequences_plot_3_Obs_Exp.pdf", + "multiqc/bismark/multiqc_plots/pdf/fastqc-status-check-heatmap.pdf", + "multiqc/bismark/multiqc_plots/pdf/fastqc_adapter_content_plot.pdf", + "multiqc/bismark/multiqc_plots/pdf/fastqc_overrepresented_sequences_plot.pdf", + "multiqc/bismark/multiqc_plots/pdf/fastqc_per_base_n_content_plot.pdf", + "multiqc/bismark/multiqc_plots/pdf/fastqc_per_base_sequence_quality_plot.pdf", + "multiqc/bismark/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Counts.pdf", + "multiqc/bismark/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Percentages.pdf", + "multiqc/bismark/multiqc_plots/pdf/fastqc_per_sequence_quality_scores_plot.pdf", + "multiqc/bismark/multiqc_plots/pdf/fastqc_sequence_counts_plot-cnt.pdf", + "multiqc/bismark/multiqc_plots/pdf/fastqc_sequence_counts_plot-pct.pdf", + "multiqc/bismark/multiqc_plots/pdf/fastqc_sequence_duplication_levels_plot.pdf", + "multiqc/bismark/multiqc_plots/pdf/fastqc_top_overrepresented_sequences_table.pdf", + "multiqc/bismark/multiqc_plots/pdf/general_stats_table.pdf", + "multiqc/bismark/multiqc_plots/pdf/qualimap_coverage_histogram.pdf", + "multiqc/bismark/multiqc_plots/pdf/qualimap_gc_content.pdf", + "multiqc/bismark/multiqc_plots/pdf/qualimap_genome_fraction.pdf", + "multiqc/bismark/multiqc_plots/pdf/qualimap_insert_size.pdf", + "multiqc/bismark/multiqc_plots/png", + "multiqc/bismark/multiqc_plots/png/bismark-methylation-dp.png", + "multiqc/bismark/multiqc_plots/png/bismark_alignment-cnt.png", + "multiqc/bismark/multiqc_plots/png/bismark_alignment-pct.png", + "multiqc/bismark/multiqc_plots/png/bismark_deduplication-cnt.png", + "multiqc/bismark/multiqc_plots/png/bismark_deduplication-pct.png", + "multiqc/bismark/multiqc_plots/png/bismark_mbias_CHG_R1.png", + "multiqc/bismark/multiqc_plots/png/bismark_mbias_CHG_R2.png", + "multiqc/bismark/multiqc_plots/png/bismark_mbias_CHH_R1.png", + "multiqc/bismark/multiqc_plots/png/bismark_mbias_CHH_R2.png", + "multiqc/bismark/multiqc_plots/png/bismark_mbias_CpG_R1.png", + "multiqc/bismark/multiqc_plots/png/bismark_mbias_CpG_R2.png", + "multiqc/bismark/multiqc_plots/png/bismark_strand_alignment-cnt.png", + "multiqc/bismark/multiqc_plots/png/bismark_strand_alignment-pct.png", + "multiqc/bismark/multiqc_plots/png/cutadapt_filtered_reads_plot-cnt.png", + "multiqc/bismark/multiqc_plots/png/cutadapt_filtered_reads_plot-pct.png", + "multiqc/bismark/multiqc_plots/png/cutadapt_trimmed_sequences_plot_3_Counts.png", + "multiqc/bismark/multiqc_plots/png/cutadapt_trimmed_sequences_plot_3_Obs_Exp.png", + "multiqc/bismark/multiqc_plots/png/fastqc-status-check-heatmap.png", + "multiqc/bismark/multiqc_plots/png/fastqc_adapter_content_plot.png", + "multiqc/bismark/multiqc_plots/png/fastqc_overrepresented_sequences_plot.png", + "multiqc/bismark/multiqc_plots/png/fastqc_per_base_n_content_plot.png", + "multiqc/bismark/multiqc_plots/png/fastqc_per_base_sequence_quality_plot.png", + "multiqc/bismark/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Counts.png", + "multiqc/bismark/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Percentages.png", + "multiqc/bismark/multiqc_plots/png/fastqc_per_sequence_quality_scores_plot.png", + "multiqc/bismark/multiqc_plots/png/fastqc_sequence_counts_plot-cnt.png", + "multiqc/bismark/multiqc_plots/png/fastqc_sequence_counts_plot-pct.png", + "multiqc/bismark/multiqc_plots/png/fastqc_sequence_duplication_levels_plot.png", + "multiqc/bismark/multiqc_plots/png/fastqc_top_overrepresented_sequences_table.png", + "multiqc/bismark/multiqc_plots/png/general_stats_table.png", + "multiqc/bismark/multiqc_plots/png/qualimap_coverage_histogram.png", + "multiqc/bismark/multiqc_plots/png/qualimap_gc_content.png", + "multiqc/bismark/multiqc_plots/png/qualimap_genome_fraction.png", + "multiqc/bismark/multiqc_plots/png/qualimap_insert_size.png", + "multiqc/bismark/multiqc_plots/svg", + "multiqc/bismark/multiqc_plots/svg/bismark-methylation-dp.svg", + "multiqc/bismark/multiqc_plots/svg/bismark_alignment-cnt.svg", + "multiqc/bismark/multiqc_plots/svg/bismark_alignment-pct.svg", + "multiqc/bismark/multiqc_plots/svg/bismark_deduplication-cnt.svg", + "multiqc/bismark/multiqc_plots/svg/bismark_deduplication-pct.svg", + "multiqc/bismark/multiqc_plots/svg/bismark_mbias_CHG_R1.svg", + "multiqc/bismark/multiqc_plots/svg/bismark_mbias_CHG_R2.svg", + "multiqc/bismark/multiqc_plots/svg/bismark_mbias_CHH_R1.svg", + "multiqc/bismark/multiqc_plots/svg/bismark_mbias_CHH_R2.svg", + "multiqc/bismark/multiqc_plots/svg/bismark_mbias_CpG_R1.svg", + "multiqc/bismark/multiqc_plots/svg/bismark_mbias_CpG_R2.svg", + "multiqc/bismark/multiqc_plots/svg/bismark_strand_alignment-cnt.svg", + "multiqc/bismark/multiqc_plots/svg/bismark_strand_alignment-pct.svg", + "multiqc/bismark/multiqc_plots/svg/cutadapt_filtered_reads_plot-cnt.svg", + "multiqc/bismark/multiqc_plots/svg/cutadapt_filtered_reads_plot-pct.svg", + "multiqc/bismark/multiqc_plots/svg/cutadapt_trimmed_sequences_plot_3_Counts.svg", + "multiqc/bismark/multiqc_plots/svg/cutadapt_trimmed_sequences_plot_3_Obs_Exp.svg", + "multiqc/bismark/multiqc_plots/svg/fastqc-status-check-heatmap.svg", + "multiqc/bismark/multiqc_plots/svg/fastqc_adapter_content_plot.svg", + "multiqc/bismark/multiqc_plots/svg/fastqc_overrepresented_sequences_plot.svg", + "multiqc/bismark/multiqc_plots/svg/fastqc_per_base_n_content_plot.svg", + "multiqc/bismark/multiqc_plots/svg/fastqc_per_base_sequence_quality_plot.svg", + "multiqc/bismark/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Counts.svg", + "multiqc/bismark/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Percentages.svg", + "multiqc/bismark/multiqc_plots/svg/fastqc_per_sequence_quality_scores_plot.svg", + "multiqc/bismark/multiqc_plots/svg/fastqc_sequence_counts_plot-cnt.svg", + "multiqc/bismark/multiqc_plots/svg/fastqc_sequence_counts_plot-pct.svg", + "multiqc/bismark/multiqc_plots/svg/fastqc_sequence_duplication_levels_plot.svg", + "multiqc/bismark/multiqc_plots/svg/fastqc_top_overrepresented_sequences_table.svg", + "multiqc/bismark/multiqc_plots/svg/general_stats_table.svg", + "multiqc/bismark/multiqc_plots/svg/qualimap_coverage_histogram.svg", + "multiqc/bismark/multiqc_plots/svg/qualimap_gc_content.svg", + "multiqc/bismark/multiqc_plots/svg/qualimap_genome_fraction.svg", + "multiqc/bismark/multiqc_plots/svg/qualimap_insert_size.svg", + "multiqc/bismark/multiqc_report.html", + "pipeline_info", + "pipeline_info/nf_core_pipeline_software_mqc_versions.yml", + "qualimap", + "qualimap/Ecoli_10K_methylated", + "qualimap/Ecoli_10K_methylated/css", + "qualimap/Ecoli_10K_methylated/css/agogo.css", + "qualimap/Ecoli_10K_methylated/css/ajax-loader.gif", + "qualimap/Ecoli_10K_methylated/css/basic.css", + "qualimap/Ecoli_10K_methylated/css/bgfooter.png", + "qualimap/Ecoli_10K_methylated/css/bgtop.png", + "qualimap/Ecoli_10K_methylated/css/comment-bright.png", + "qualimap/Ecoli_10K_methylated/css/comment-close.png", + "qualimap/Ecoli_10K_methylated/css/comment.png", + "qualimap/Ecoli_10K_methylated/css/doctools.js", + "qualimap/Ecoli_10K_methylated/css/down-pressed.png", + "qualimap/Ecoli_10K_methylated/css/down.png", + "qualimap/Ecoli_10K_methylated/css/file.png", + "qualimap/Ecoli_10K_methylated/css/jquery.js", + "qualimap/Ecoli_10K_methylated/css/minus.png", + "qualimap/Ecoli_10K_methylated/css/plus.png", + "qualimap/Ecoli_10K_methylated/css/pygments.css", + "qualimap/Ecoli_10K_methylated/css/qualimap_logo_small.png", + "qualimap/Ecoli_10K_methylated/css/report.css", + "qualimap/Ecoli_10K_methylated/css/searchtools.js", + "qualimap/Ecoli_10K_methylated/css/underscore.js", + "qualimap/Ecoli_10K_methylated/css/up-pressed.png", + "qualimap/Ecoli_10K_methylated/css/up.png", + "qualimap/Ecoli_10K_methylated/css/websupport.js", + "qualimap/Ecoli_10K_methylated/genome_results.txt", + "qualimap/Ecoli_10K_methylated/images_qualimapReport", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_coverage_0to50_histogram.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_coverage_across_reference.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_coverage_histogram.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_coverage_quotes.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_gc_content_per_window.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_homopolymer_indels.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_insert_size_across_reference.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_insert_size_histogram.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_mapping_quality_across_reference.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_mapping_quality_histogram.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_reads_content_per_read_position.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_uniq_read_starts_histogram.png", + "qualimap/Ecoli_10K_methylated/qualimapReport.html", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/coverage_across_reference.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/coverage_histogram.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/duplication_rate_histogram.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/genome_fraction_coverage.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/homopolymer_indels.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/insert_size_across_reference.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/insert_size_histogram.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/mapped_reads_gc-content_distribution.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/mapped_reads_nucleotide_content.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/mapping_quality_across_reference.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/mapping_quality_histogram.txt", + "qualimap/SRR389222_sub1", + "qualimap/SRR389222_sub1/css", + "qualimap/SRR389222_sub1/css/agogo.css", + "qualimap/SRR389222_sub1/css/ajax-loader.gif", + "qualimap/SRR389222_sub1/css/basic.css", + "qualimap/SRR389222_sub1/css/bgfooter.png", + "qualimap/SRR389222_sub1/css/bgtop.png", + "qualimap/SRR389222_sub1/css/comment-bright.png", + "qualimap/SRR389222_sub1/css/comment-close.png", + "qualimap/SRR389222_sub1/css/comment.png", + "qualimap/SRR389222_sub1/css/doctools.js", + "qualimap/SRR389222_sub1/css/down-pressed.png", + "qualimap/SRR389222_sub1/css/down.png", + "qualimap/SRR389222_sub1/css/file.png", + "qualimap/SRR389222_sub1/css/jquery.js", + "qualimap/SRR389222_sub1/css/minus.png", + "qualimap/SRR389222_sub1/css/plus.png", + "qualimap/SRR389222_sub1/css/pygments.css", + "qualimap/SRR389222_sub1/css/qualimap_logo_small.png", + "qualimap/SRR389222_sub1/css/report.css", + "qualimap/SRR389222_sub1/css/searchtools.js", + "qualimap/SRR389222_sub1/css/underscore.js", + "qualimap/SRR389222_sub1/css/up-pressed.png", + "qualimap/SRR389222_sub1/css/up.png", + "qualimap/SRR389222_sub1/css/websupport.js", + "qualimap/SRR389222_sub1/genome_results.txt", + "qualimap/SRR389222_sub1/images_qualimapReport", + "qualimap/SRR389222_sub1/images_qualimapReport/genome_coverage_0to50_histogram.png", + "qualimap/SRR389222_sub1/images_qualimapReport/genome_coverage_across_reference.png", + "qualimap/SRR389222_sub1/images_qualimapReport/genome_coverage_histogram.png", + "qualimap/SRR389222_sub1/images_qualimapReport/genome_coverage_quotes.png", + "qualimap/SRR389222_sub1/images_qualimapReport/genome_gc_content_per_window.png", + "qualimap/SRR389222_sub1/images_qualimapReport/genome_mapping_quality_across_reference.png", + "qualimap/SRR389222_sub1/images_qualimapReport/genome_mapping_quality_histogram.png", + "qualimap/SRR389222_sub1/images_qualimapReport/genome_reads_content_per_read_position.png", + "qualimap/SRR389222_sub1/images_qualimapReport/genome_uniq_read_starts_histogram.png", + "qualimap/SRR389222_sub1/qualimapReport.html", + "qualimap/SRR389222_sub1/raw_data_qualimapReport", + "qualimap/SRR389222_sub1/raw_data_qualimapReport/coverage_across_reference.txt", + "qualimap/SRR389222_sub1/raw_data_qualimapReport/coverage_histogram.txt", + "qualimap/SRR389222_sub1/raw_data_qualimapReport/duplication_rate_histogram.txt", + "qualimap/SRR389222_sub1/raw_data_qualimapReport/genome_fraction_coverage.txt", + "qualimap/SRR389222_sub1/raw_data_qualimapReport/mapped_reads_gc-content_distribution.txt", + "qualimap/SRR389222_sub1/raw_data_qualimapReport/mapped_reads_nucleotide_content.txt", + "qualimap/SRR389222_sub1/raw_data_qualimapReport/mapping_quality_across_reference.txt", + "qualimap/SRR389222_sub1/raw_data_qualimapReport/mapping_quality_histogram.txt", + "qualimap/SRR389222_sub2", + "qualimap/SRR389222_sub2/css", + "qualimap/SRR389222_sub2/css/agogo.css", + "qualimap/SRR389222_sub2/css/ajax-loader.gif", + "qualimap/SRR389222_sub2/css/basic.css", + "qualimap/SRR389222_sub2/css/bgfooter.png", + "qualimap/SRR389222_sub2/css/bgtop.png", + "qualimap/SRR389222_sub2/css/comment-bright.png", + "qualimap/SRR389222_sub2/css/comment-close.png", + "qualimap/SRR389222_sub2/css/comment.png", + "qualimap/SRR389222_sub2/css/doctools.js", + "qualimap/SRR389222_sub2/css/down-pressed.png", + "qualimap/SRR389222_sub2/css/down.png", + "qualimap/SRR389222_sub2/css/file.png", + "qualimap/SRR389222_sub2/css/jquery.js", + "qualimap/SRR389222_sub2/css/minus.png", + "qualimap/SRR389222_sub2/css/plus.png", + "qualimap/SRR389222_sub2/css/pygments.css", + "qualimap/SRR389222_sub2/css/qualimap_logo_small.png", + "qualimap/SRR389222_sub2/css/report.css", + "qualimap/SRR389222_sub2/css/searchtools.js", + "qualimap/SRR389222_sub2/css/underscore.js", + "qualimap/SRR389222_sub2/css/up-pressed.png", + "qualimap/SRR389222_sub2/css/up.png", + "qualimap/SRR389222_sub2/css/websupport.js", + "qualimap/SRR389222_sub2/genome_results.txt", + "qualimap/SRR389222_sub2/images_qualimapReport", + "qualimap/SRR389222_sub2/images_qualimapReport/genome_coverage_0to50_histogram.png", + "qualimap/SRR389222_sub2/images_qualimapReport/genome_coverage_across_reference.png", + "qualimap/SRR389222_sub2/images_qualimapReport/genome_coverage_histogram.png", + "qualimap/SRR389222_sub2/images_qualimapReport/genome_coverage_quotes.png", + "qualimap/SRR389222_sub2/images_qualimapReport/genome_gc_content_per_window.png", + "qualimap/SRR389222_sub2/images_qualimapReport/genome_mapping_quality_across_reference.png", + "qualimap/SRR389222_sub2/images_qualimapReport/genome_mapping_quality_histogram.png", + "qualimap/SRR389222_sub2/images_qualimapReport/genome_reads_content_per_read_position.png", + "qualimap/SRR389222_sub2/images_qualimapReport/genome_uniq_read_starts_histogram.png", + "qualimap/SRR389222_sub2/qualimapReport.html", + "qualimap/SRR389222_sub2/raw_data_qualimapReport", + "qualimap/SRR389222_sub2/raw_data_qualimapReport/coverage_across_reference.txt", + "qualimap/SRR389222_sub2/raw_data_qualimapReport/coverage_histogram.txt", + "qualimap/SRR389222_sub2/raw_data_qualimapReport/duplication_rate_histogram.txt", + "qualimap/SRR389222_sub2/raw_data_qualimapReport/genome_fraction_coverage.txt", + "qualimap/SRR389222_sub2/raw_data_qualimapReport/mapped_reads_gc-content_distribution.txt", + "qualimap/SRR389222_sub2/raw_data_qualimapReport/mapped_reads_nucleotide_content.txt", + "qualimap/SRR389222_sub2/raw_data_qualimapReport/mapping_quality_across_reference.txt", + "qualimap/SRR389222_sub2/raw_data_qualimapReport/mapping_quality_histogram.txt", + "qualimap/SRR389222_sub3", + "qualimap/SRR389222_sub3/css", + "qualimap/SRR389222_sub3/css/agogo.css", + "qualimap/SRR389222_sub3/css/ajax-loader.gif", + "qualimap/SRR389222_sub3/css/basic.css", + "qualimap/SRR389222_sub3/css/bgfooter.png", + "qualimap/SRR389222_sub3/css/bgtop.png", + "qualimap/SRR389222_sub3/css/comment-bright.png", + "qualimap/SRR389222_sub3/css/comment-close.png", + "qualimap/SRR389222_sub3/css/comment.png", + "qualimap/SRR389222_sub3/css/doctools.js", + "qualimap/SRR389222_sub3/css/down-pressed.png", + "qualimap/SRR389222_sub3/css/down.png", + "qualimap/SRR389222_sub3/css/file.png", + "qualimap/SRR389222_sub3/css/jquery.js", + "qualimap/SRR389222_sub3/css/minus.png", + "qualimap/SRR389222_sub3/css/plus.png", + "qualimap/SRR389222_sub3/css/pygments.css", + "qualimap/SRR389222_sub3/css/qualimap_logo_small.png", + "qualimap/SRR389222_sub3/css/report.css", + "qualimap/SRR389222_sub3/css/searchtools.js", + "qualimap/SRR389222_sub3/css/underscore.js", + "qualimap/SRR389222_sub3/css/up-pressed.png", + "qualimap/SRR389222_sub3/css/up.png", + "qualimap/SRR389222_sub3/css/websupport.js", + "qualimap/SRR389222_sub3/genome_results.txt", + "qualimap/SRR389222_sub3/images_qualimapReport", + "qualimap/SRR389222_sub3/images_qualimapReport/genome_coverage_0to50_histogram.png", + "qualimap/SRR389222_sub3/images_qualimapReport/genome_coverage_across_reference.png", + "qualimap/SRR389222_sub3/images_qualimapReport/genome_coverage_histogram.png", + "qualimap/SRR389222_sub3/images_qualimapReport/genome_coverage_quotes.png", + "qualimap/SRR389222_sub3/images_qualimapReport/genome_gc_content_per_window.png", + "qualimap/SRR389222_sub3/images_qualimapReport/genome_mapping_quality_across_reference.png", + "qualimap/SRR389222_sub3/images_qualimapReport/genome_mapping_quality_histogram.png", + "qualimap/SRR389222_sub3/images_qualimapReport/genome_reads_content_per_read_position.png", + "qualimap/SRR389222_sub3/images_qualimapReport/genome_uniq_read_starts_histogram.png", + "qualimap/SRR389222_sub3/qualimapReport.html", + "qualimap/SRR389222_sub3/raw_data_qualimapReport", + "qualimap/SRR389222_sub3/raw_data_qualimapReport/coverage_across_reference.txt", + "qualimap/SRR389222_sub3/raw_data_qualimapReport/coverage_histogram.txt", + "qualimap/SRR389222_sub3/raw_data_qualimapReport/duplication_rate_histogram.txt", + "qualimap/SRR389222_sub3/raw_data_qualimapReport/genome_fraction_coverage.txt", + "qualimap/SRR389222_sub3/raw_data_qualimapReport/mapped_reads_gc-content_distribution.txt", + "qualimap/SRR389222_sub3/raw_data_qualimapReport/mapped_reads_nucleotide_content.txt", + "qualimap/SRR389222_sub3/raw_data_qualimapReport/mapping_quality_across_reference.txt", + "qualimap/SRR389222_sub3/raw_data_qualimapReport/mapping_quality_histogram.txt", + "trimgalore", + "trimgalore/fastqc", + "trimgalore/fastqc/Ecoli_10K_methylated_1_val_1_fastqc.html", + "trimgalore/fastqc/Ecoli_10K_methylated_2_val_2_fastqc.html", + "trimgalore/fastqc/SRR389222_sub1_trimmed_fastqc.html", + "trimgalore/fastqc/SRR389222_sub2_trimmed_fastqc.html", + "trimgalore/fastqc/SRR389222_sub3_trimmed_fastqc.html", + "trimgalore/fastqc/zips", + "trimgalore/fastqc/zips/Ecoli_10K_methylated_1_val_1_fastqc.zip", + "trimgalore/fastqc/zips/Ecoli_10K_methylated_2_val_2_fastqc.zip", + "trimgalore/fastqc/zips/SRR389222_sub1_trimmed_fastqc.zip", + "trimgalore/fastqc/zips/SRR389222_sub2_trimmed_fastqc.zip", + "trimgalore/fastqc/zips/SRR389222_sub3_trimmed_fastqc.zip", + "trimgalore/logs", + "trimgalore/logs/Ecoli_10K_methylated_1.fastq.gz_trimming_report.txt", + "trimgalore/logs/Ecoli_10K_methylated_2.fastq.gz_trimming_report.txt", + "trimgalore/logs/SRR389222_sub1.fastq.gz_trimming_report.txt", + "trimgalore/logs/SRR389222_sub2.fastq.gz_trimming_report.txt", + "trimgalore/logs/SRR389222_sub3.fastq.gz_trimming_report.txt" + ], + [ + "Ecoli_10K_methylated.NOMe.CpG.cov.gz:md5,c2c4db8d0a2ec32d572e75b01b2f7d81", + "Ecoli_10K_methylated.NOMe.GpC.cov.gz:md5,a2b56291dbe8b344ee03a3ae58de8807", + "SRR389222_sub1.NOMe.CpG.cov.gz:md5,087f5da64b9ab087a0e22fa11536871e", + "SRR389222_sub1.NOMe.GpC.cov.gz:md5,25211d7e44488baf6193f753a5095b2f", + "SRR389222_sub2.NOMe.CpG.cov.gz:md5,016eabe6c88ef719d8edffbe13d1b2ce", + "SRR389222_sub2.NOMe.GpC.cov.gz:md5,10837f6099f63dc4aae2895d821a582e", + "SRR389222_sub3.NOMe.CpG.cov.gz:md5,85098361910f7398528dcbb0e46a7561", + "SRR389222_sub3.NOMe.GpC.cov.gz:md5,8005a9dad4d0f5562a3c7cf215a18908", + "Ecoli_10K_methylated.NOMe.CpG_report.txt.gz:md5,f766e73a44789a40dffce322ec599007", + "Ecoli_10K_methylated.NOMe.GpC_report.txt.gz:md5,a8126d4d596cfb6e696cdb808451840c", + "SRR389222_sub1.NOMe.CpG_report.txt.gz:md5,731e940264ca803ca48842a1fc9402ad", + "SRR389222_sub1.NOMe.GpC_report.txt.gz:md5,96c3f1c2f3d334baafb55f0805eaf52c", + "SRR389222_sub2.NOMe.CpG_report.txt.gz:md5,2ec3a32d0e8239ba50c079e1519aaf00", + "SRR389222_sub2.NOMe.GpC_report.txt.gz:md5,bcde6f7e90831604368ae6430e5695f0", + "SRR389222_sub3.NOMe.CpG_report.txt.gz:md5,f9793efc46ecdf413a84338e9f9f42dd", + "SRR389222_sub3.NOMe.GpC_report.txt.gz:md5,e4ab9e9c4d4ea2fe3ca2378f3802f6f6", + "Ecoli_10K_methylated.cytosine_context_summary.txt:md5,482eac2bc68ca28545bab71c0c414c3a", + "SRR389222_sub1.cytosine_context_summary.txt:md5,1d4c33ccf5e249907ca2ba50a37c7697", + "SRR389222_sub2.cytosine_context_summary.txt:md5,8f7684582aa75b24197866138e6d1a4c", + "SRR389222_sub3.cytosine_context_summary.txt:md5,7ba71718c6556e8b3019e1704948d562", + "Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplicated.bedGraph.gz:md5,88e599178b08907aab7d248302b7d37e", + "SRR389222_sub1_trimmed_bismark_bt2.deduplicated.bedGraph.gz:md5,ccf9537924fa4aa1db2f4462d2b9bc8e", + "SRR389222_sub2_trimmed_bismark_bt2.deduplicated.bedGraph.gz:md5,c352886f5d59592bc679843548ca5eef", + "SRR389222_sub3_trimmed_bismark_bt2.deduplicated.bedGraph.gz:md5,0a489f15a4d3bb11236a8acf38ba0984", + "Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplicated.M-bias.txt:md5,29f3b882a51b63ce77d3d9c69b0e5f85", + "SRR389222_sub1_trimmed_bismark_bt2.deduplicated.M-bias.txt:md5,ed28b3cce432eecfae73bc4a071ec4ee", + "SRR389222_sub2_trimmed_bismark_bt2.deduplicated.M-bias.txt:md5,b06ce0084e54193ff8c9b9dd0ec9757b", + "SRR389222_sub3_trimmed_bismark_bt2.deduplicated.M-bias.txt:md5,b865b7fb6e1225feeb6aef3372ef0b1d", + "CHG_OB_Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplicated.txt.gz:md5,b58ae93fe7981837fd34903112196656", + "CHG_OB_SRR389222_sub1_trimmed_bismark_bt2.deduplicated.txt.gz:md5,5c177e6f00dfc6e2335a55c6b70efa0c", + "CHG_OB_SRR389222_sub2_trimmed_bismark_bt2.deduplicated.txt.gz:md5,583bf95e8dbd3d684bef595e31453bd1", + "CHG_OB_SRR389222_sub3_trimmed_bismark_bt2.deduplicated.txt.gz:md5,5cd486ff48be8f8fa0d4e35710be2071", + "CHG_OT_Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplicated.txt.gz:md5,b508e40e494dfd9fc2c2017286cd3fe9", + "CHG_OT_SRR389222_sub1_trimmed_bismark_bt2.deduplicated.txt.gz:md5,483aefddd7bf8426850109f077fa966b", + "CHG_OT_SRR389222_sub2_trimmed_bismark_bt2.deduplicated.txt.gz:md5,11f966904de0a5e5c38f2091e33ac8f3", + "CHG_OT_SRR389222_sub3_trimmed_bismark_bt2.deduplicated.txt.gz:md5,3fdd17711f819c844f39d52d4951b9cc", + "CHH_OB_Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplicated.txt.gz:md5,ad6f9f5def9bb01a7c516f7da1b22b91", + "CHH_OB_SRR389222_sub1_trimmed_bismark_bt2.deduplicated.txt.gz:md5,9469ac28e4369032b855ce1a794a56a4", + "CHH_OB_SRR389222_sub2_trimmed_bismark_bt2.deduplicated.txt.gz:md5,3c48fa14cc07ca041a35efd978ef877a", + "CHH_OB_SRR389222_sub3_trimmed_bismark_bt2.deduplicated.txt.gz:md5,68b5405d8de91c7046ab46fc5c42ee30", + "CHH_OT_Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplicated.txt.gz:md5,112a5d2beba2f8ebda273ca3bec98d88", + "CHH_OT_SRR389222_sub1_trimmed_bismark_bt2.deduplicated.txt.gz:md5,aa6ed81df517be3a61e787dea65282a9", + "CHH_OT_SRR389222_sub2_trimmed_bismark_bt2.deduplicated.txt.gz:md5,3ecf0ca20803514bc823e449d392f274", + "CHH_OT_SRR389222_sub3_trimmed_bismark_bt2.deduplicated.txt.gz:md5,7ed9df0d59ee786d06bf291efcdd3a48", + "CpG_OB_Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplicated.txt.gz:md5,bbe0a5f137b8768036aced610d17c666", + "CpG_OB_SRR389222_sub1_trimmed_bismark_bt2.deduplicated.txt.gz:md5,f0404fc1fc18c7ff58e8766b405239ed", + "CpG_OB_SRR389222_sub2_trimmed_bismark_bt2.deduplicated.txt.gz:md5,2f0dd539df6b5943496158ccb62edc7b", + "CpG_OB_SRR389222_sub3_trimmed_bismark_bt2.deduplicated.txt.gz:md5,0bd78a1708fb8126af553c94ab8c8371", + "CpG_OT_Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplicated.txt.gz:md5,8bb4cb59815cc9e260dcfa332fcb5ae9", + "CpG_OT_SRR389222_sub1_trimmed_bismark_bt2.deduplicated.txt.gz:md5,d031ae437256c87d12ed9d9049c30c9a", + "CpG_OT_SRR389222_sub2_trimmed_bismark_bt2.deduplicated.txt.gz:md5,5a6e4dfe3e90164ecf8ef6c7917ed9f2", + "CpG_OT_SRR389222_sub3_trimmed_bismark_bt2.deduplicated.txt.gz:md5,984aea9c77f8171f0e0a86d5289a180b", + "Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplicated.bismark.cov.gz:md5,962fe67f41f5e03d8e321ed381369513", + "SRR389222_sub1_trimmed_bismark_bt2.deduplicated.bismark.cov.gz:md5,1a6e4ec040df8d20ca5ea84abd8c2f66", + "SRR389222_sub2_trimmed_bismark_bt2.deduplicated.bismark.cov.gz:md5,da676db243dde9438471d8ea8aa79fa5", + "SRR389222_sub3_trimmed_bismark_bt2.deduplicated.bismark.cov.gz:md5,55eadffbe1d31538a88d2fd5b65fd6e7", + "Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplicated_splitting_report.txt:md5,f41a6752f220b1cf567ac04e71fb730a", + "SRR389222_sub1_trimmed_bismark_bt2.deduplicated_splitting_report.txt:md5,94f18ee855566ef9842b4909e3d3dd88", + "SRR389222_sub2_trimmed_bismark_bt2.deduplicated_splitting_report.txt:md5,7c3526e022e97e49677f7428badef420", + "SRR389222_sub3_trimmed_bismark_bt2.deduplicated_splitting_report.txt:md5,e8d2bf21731b6ed517c56385061b1dee", + "bismark-methylation-dp.txt:md5,dcbe642c42e31d8e480a2e46b97bbd45", + "bismark_alignment.txt:md5,544a74ea0f32005b0c886af79a6fad5b", + "bismark_deduplication.txt:md5,db387240d46c09b0b952ed8b54855e76", + "bismark_mbias_CHG_R1.txt:md5,1a2a02f5f48e312a7cfa91ec253c1f49", + "bismark_mbias_CHG_R2.txt:md5,1f6523b48bda086d29f70265187e7475", + "bismark_mbias_CHH_R1.txt:md5,bcd25ac0c71b5ec120e948bc165f54d4", + "bismark_mbias_CHH_R2.txt:md5,5e32a8b39118c3592b088a0b69ae1f21", + "bismark_mbias_CpG_R1.txt:md5,0da9724e4a303148c39b6f4c18b8876b", + "bismark_mbias_CpG_R2.txt:md5,46cca816038163d0f629fed7ada212b8", + "bismark_strand_alignment.txt:md5,a8738f981bab911b95ffe9d3434f2b08", + "cutadapt_filtered_reads_plot.txt:md5,ff1b6d4011a5be5410b9404f7ff56c56", + "cutadapt_trimmed_sequences_plot_3_Counts.txt:md5,57d07c19b0c30dc88df96c30bedcdc33", + "cutadapt_trimmed_sequences_plot_3_Obs_Exp.txt:md5,1e5ca4193f8290c5c812334d03615b41", + "fastqc-status-check-heatmap.txt:md5,218c2a7efbb9c02f652fa78fc739c866", + "fastqc_adapter_content_plot.txt:md5,48d8bd5ece984a74972ce0a0e814dd07", + "fastqc_overrepresented_sequences_plot.txt:md5,9c4b7064950b5b2c486d556984f21e9e", + "fastqc_per_base_n_content_plot.txt:md5,019d5cd4f61a31f4e7016140ca8ee36e", + "fastqc_per_base_sequence_quality_plot.txt:md5,e4c7d522114eab9bc9101e7ee9d83c8f", + "fastqc_per_sequence_gc_content_plot_Counts.txt:md5,302659bee8a02b6a38b24fe25f8eaa87", + "fastqc_per_sequence_gc_content_plot_Percentages.txt:md5,c75b396eb5dda8682fb1652a9b2e92a3", + "fastqc_per_sequence_quality_scores_plot.txt:md5,548c593f4a8be2d8627fc3bd1c280611", + "fastqc_sequence_counts_plot.txt:md5,58eeeb06bc9dcc1764c7daf0847d6bbf", + "fastqc_sequence_duplication_levels_plot.txt:md5,9e5712db9aa39b5754ea1e0c49cfff15", + "fastqc_top_overrepresented_sequences_table.txt:md5,6dfc5334a09c05392ea17369aa742d01", + "multiqc_bismark_alignment.txt:md5,40ab86041f508d3f1a63bde20cab5440", + "multiqc_bismark_dedup.txt:md5,d09a5de4d81a3207efb6a8937d060e46", + "multiqc_bismark_methextract.txt:md5,825f57cdf45203406e583beb495afccc", + "multiqc_citations.txt:md5,b9d42869faad581bd963d3d3bb490026", + "multiqc_cutadapt.txt:md5,f7a61369244b1e040d264e6913b8a839", + "qualimap_coverage_histogram.txt:md5,7cd194077fe839edf034b44cc73dd024", + "qualimap_gc_content.txt:md5,4f6ec70d9fb71ffe5f2f99f44fe5ef0c", + "qualimap_genome_fraction.txt:md5,3e528946a376ae752b57adaaa73f5cdf", + "qualimap_insert_size.txt:md5,8327f805cbaf1c61ca3128b6c16c7dfd", + "genome_results.txt:md5,e2a57140a56e0e4a1905c70084ccbb41", + "genome_results.txt:md5,69a3dc8568127c50b0decb29757230ee", + "genome_results.txt:md5,13d933d61649b837de72a418d5126c1b", + "genome_results.txt:md5,235830239cfc43d8e84c049b1e9b180a" + ], + [ + [ + "Ecoli_10K_methylated.deduplicated.sorted.bam", + "a54ab7c96f9523a4ccd25fd69f6905f8" + ], + [ + "SRR389222_sub1.deduplicated.sorted.bam", + "3f11ef5fbbda3797fd6217728e4f00d3" + ], + [ + "SRR389222_sub2.deduplicated.sorted.bam", + "b01f29fc1d8d46922a69df09c636b4c4" + ], + [ + "SRR389222_sub3.deduplicated.sorted.bam", + "347195c04c9ffd2a2b10967a6682fc69" + ] + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-21T17:50:56.499718354" + } +} \ No newline at end of file diff --git a/tests/bismark_rrbs.nf.test b/tests/bismark_rrbs.nf.test new file mode 100644 index 00000000..185a9998 --- /dev/null +++ b/tests/bismark_rrbs.nf.test @@ -0,0 +1,40 @@ +nextflow_pipeline { + + name "Test Workflow main.nf" + script "../main.nf" + config "./nextflow.config" + + test("Params: bismark | rrbs") { + when { + params { + rrbs = true + outdir = "$outputDir" + } + } + + then { + // stable_name: All files + folders in ${params.outdir}/ with a stable name + def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) + // stable_path: All files in ${params.outdir}/ with stable content + def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') + // bam_files: All bam files + def bam_files = getAllFilesFromDir(params.outdir, include: ['**/*.bam']) + assertAll( + { assert workflow.success}, + { assert snapshot( + // Number of tasks + workflow.trace.succeeded().size(), + // pipeline versions.yml file for multiqc from which Nextflow version is removed because we tests pipelines on multiple Nextflow versions + removeNextflowVersion("$outputDir/pipeline_info/nf_core_pipeline_software_mqc_versions.yml"), + // All stable path name + stable_name, + // All files with stable contents + stable_path, + // All bam files + bam_files.collect{ file -> [ file.getName(), bam(file.toString()).getReadsMD5() ] } + ).match() } + ) + } + } + +} diff --git a/tests/bismark_rrbs.nf.test.snap b/tests/bismark_rrbs.nf.test.snap new file mode 100644 index 00000000..fb7cc545 --- /dev/null +++ b/tests/bismark_rrbs.nf.test.snap @@ -0,0 +1,584 @@ +{ + "Params: bismark | rrbs": { + "content": [ + 39, + { + "BISMARK_ALIGN": { + "bismark": "0.24.2" + }, + "BISMARK_GENOMEPREPARATION": { + "bismark": "0.24.2" + }, + "FASTQC": { + "fastqc": "0.12.1" + }, + "QUALIMAP_BAMQC": { + "qualimap": 2.3 + }, + "TRIMGALORE": { + "trimgalore": "0.6.10", + "cutadapt": 4.2 + }, + "Workflow": { + "nf-core/methylseq": "v2.7.0" + } + }, + [ + "bismark", + "bismark/alignments", + "bismark/alignments/Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.bam", + "bismark/alignments/SRR389222_sub1_trimmed_bismark_bt2.bam", + "bismark/alignments/SRR389222_sub2_trimmed_bismark_bt2.bam", + "bismark/alignments/SRR389222_sub3_trimmed_bismark_bt2.bam", + "bismark/alignments/logs", + "bismark/alignments/logs/Ecoli_10K_methylated_1_val_1_bismark_bt2_PE_report.txt", + "bismark/alignments/logs/SRR389222_sub1_trimmed_bismark_bt2_SE_report.txt", + "bismark/alignments/logs/SRR389222_sub2_trimmed_bismark_bt2_SE_report.txt", + "bismark/alignments/logs/SRR389222_sub3_trimmed_bismark_bt2_SE_report.txt", + "bismark/deduplicated", + "bismark/deduplicated/Ecoli_10K_methylated.deduplicated.sorted.bam", + "bismark/deduplicated/Ecoli_10K_methylated.deduplicated.sorted.bam.bai", + "bismark/deduplicated/SRR389222_sub1.deduplicated.sorted.bam", + "bismark/deduplicated/SRR389222_sub1.deduplicated.sorted.bam.bai", + "bismark/deduplicated/SRR389222_sub2.deduplicated.sorted.bam", + "bismark/deduplicated/SRR389222_sub2.deduplicated.sorted.bam.bai", + "bismark/deduplicated/SRR389222_sub3.deduplicated.sorted.bam", + "bismark/deduplicated/SRR389222_sub3.deduplicated.sorted.bam.bai", + "bismark/methylation_calls", + "bismark/methylation_calls/bedGraph", + "bismark/methylation_calls/bedGraph/Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.bedGraph.gz", + "bismark/methylation_calls/bedGraph/SRR389222_sub1_trimmed_bismark_bt2.bedGraph.gz", + "bismark/methylation_calls/bedGraph/SRR389222_sub2_trimmed_bismark_bt2.bedGraph.gz", + "bismark/methylation_calls/bedGraph/SRR389222_sub3_trimmed_bismark_bt2.bedGraph.gz", + "bismark/methylation_calls/mbias", + "bismark/methylation_calls/mbias/Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.M-bias.txt", + "bismark/methylation_calls/mbias/SRR389222_sub1_trimmed_bismark_bt2.M-bias.txt", + "bismark/methylation_calls/mbias/SRR389222_sub2_trimmed_bismark_bt2.M-bias.txt", + "bismark/methylation_calls/mbias/SRR389222_sub3_trimmed_bismark_bt2.M-bias.txt", + "bismark/methylation_calls/methylation_calls", + "bismark/methylation_calls/methylation_calls/CHG_OB_Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.txt.gz", + "bismark/methylation_calls/methylation_calls/CHG_OB_SRR389222_sub1_trimmed_bismark_bt2.txt.gz", + "bismark/methylation_calls/methylation_calls/CHG_OB_SRR389222_sub2_trimmed_bismark_bt2.txt.gz", + "bismark/methylation_calls/methylation_calls/CHG_OB_SRR389222_sub3_trimmed_bismark_bt2.txt.gz", + "bismark/methylation_calls/methylation_calls/CHG_OT_Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.txt.gz", + "bismark/methylation_calls/methylation_calls/CHG_OT_SRR389222_sub1_trimmed_bismark_bt2.txt.gz", + "bismark/methylation_calls/methylation_calls/CHG_OT_SRR389222_sub2_trimmed_bismark_bt2.txt.gz", + "bismark/methylation_calls/methylation_calls/CHG_OT_SRR389222_sub3_trimmed_bismark_bt2.txt.gz", + "bismark/methylation_calls/methylation_calls/CHH_OB_Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.txt.gz", + "bismark/methylation_calls/methylation_calls/CHH_OB_SRR389222_sub1_trimmed_bismark_bt2.txt.gz", + "bismark/methylation_calls/methylation_calls/CHH_OB_SRR389222_sub2_trimmed_bismark_bt2.txt.gz", + "bismark/methylation_calls/methylation_calls/CHH_OB_SRR389222_sub3_trimmed_bismark_bt2.txt.gz", + "bismark/methylation_calls/methylation_calls/CHH_OT_Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.txt.gz", + "bismark/methylation_calls/methylation_calls/CHH_OT_SRR389222_sub1_trimmed_bismark_bt2.txt.gz", + "bismark/methylation_calls/methylation_calls/CHH_OT_SRR389222_sub2_trimmed_bismark_bt2.txt.gz", + "bismark/methylation_calls/methylation_calls/CHH_OT_SRR389222_sub3_trimmed_bismark_bt2.txt.gz", + "bismark/methylation_calls/methylation_calls/CpG_OB_Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.txt.gz", + "bismark/methylation_calls/methylation_calls/CpG_OB_SRR389222_sub1_trimmed_bismark_bt2.txt.gz", + "bismark/methylation_calls/methylation_calls/CpG_OB_SRR389222_sub2_trimmed_bismark_bt2.txt.gz", + "bismark/methylation_calls/methylation_calls/CpG_OB_SRR389222_sub3_trimmed_bismark_bt2.txt.gz", + "bismark/methylation_calls/methylation_calls/CpG_OT_Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.txt.gz", + "bismark/methylation_calls/methylation_calls/CpG_OT_SRR389222_sub1_trimmed_bismark_bt2.txt.gz", + "bismark/methylation_calls/methylation_calls/CpG_OT_SRR389222_sub2_trimmed_bismark_bt2.txt.gz", + "bismark/methylation_calls/methylation_calls/CpG_OT_SRR389222_sub3_trimmed_bismark_bt2.txt.gz", + "bismark/methylation_calls/methylation_coverage", + "bismark/methylation_calls/methylation_coverage/Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.bismark.cov.gz", + "bismark/methylation_calls/methylation_coverage/SRR389222_sub1_trimmed_bismark_bt2.bismark.cov.gz", + "bismark/methylation_calls/methylation_coverage/SRR389222_sub2_trimmed_bismark_bt2.bismark.cov.gz", + "bismark/methylation_calls/methylation_coverage/SRR389222_sub3_trimmed_bismark_bt2.bismark.cov.gz", + "bismark/methylation_calls/splitting_report", + "bismark/methylation_calls/splitting_report/Ecoli_10K_methylated_1_val_1_bismark_bt2_pe_splitting_report.txt", + "bismark/methylation_calls/splitting_report/SRR389222_sub1_trimmed_bismark_bt2_splitting_report.txt", + "bismark/methylation_calls/splitting_report/SRR389222_sub2_trimmed_bismark_bt2_splitting_report.txt", + "bismark/methylation_calls/splitting_report/SRR389222_sub3_trimmed_bismark_bt2_splitting_report.txt", + "bismark/reports", + "bismark/reports/Ecoli_10K_methylated_1_val_1_bismark_bt2_PE_report.html", + "bismark/reports/SRR389222_sub1_trimmed_bismark_bt2_SE_report.html", + "bismark/reports/SRR389222_sub2_trimmed_bismark_bt2_SE_report.html", + "bismark/reports/SRR389222_sub3_trimmed_bismark_bt2_SE_report.html", + "bismark/summary", + "bismark/summary/bismark_summary_report.html", + "bismark/summary/bismark_summary_report.txt", + "fastqc", + "fastqc/Ecoli_10K_methylated_1_fastqc.html", + "fastqc/Ecoli_10K_methylated_2_fastqc.html", + "fastqc/SRR389222_sub1_fastqc.html", + "fastqc/SRR389222_sub2_fastqc.html", + "fastqc/SRR389222_sub3_fastqc.html", + "fastqc/zips", + "fastqc/zips/Ecoli_10K_methylated_1_fastqc.zip", + "fastqc/zips/Ecoli_10K_methylated_2_fastqc.zip", + "fastqc/zips/SRR389222_sub1_fastqc.zip", + "fastqc/zips/SRR389222_sub2_fastqc.zip", + "fastqc/zips/SRR389222_sub3_fastqc.zip", + "multiqc", + "multiqc/bismark", + "multiqc/bismark/multiqc_data", + "multiqc/bismark/multiqc_data/bismark-methylation-dp.txt", + "multiqc/bismark/multiqc_data/bismark_alignment.txt", + "multiqc/bismark/multiqc_data/bismark_mbias_CHG_R1.txt", + "multiqc/bismark/multiqc_data/bismark_mbias_CHG_R2.txt", + "multiqc/bismark/multiqc_data/bismark_mbias_CHH_R1.txt", + "multiqc/bismark/multiqc_data/bismark_mbias_CHH_R2.txt", + "multiqc/bismark/multiqc_data/bismark_mbias_CpG_R1.txt", + "multiqc/bismark/multiqc_data/bismark_mbias_CpG_R2.txt", + "multiqc/bismark/multiqc_data/bismark_strand_alignment.txt", + "multiqc/bismark/multiqc_data/cutadapt_filtered_reads_plot.txt", + "multiqc/bismark/multiqc_data/cutadapt_trimmed_sequences_plot_3_Counts.txt", + "multiqc/bismark/multiqc_data/cutadapt_trimmed_sequences_plot_3_Obs_Exp.txt", + "multiqc/bismark/multiqc_data/fastqc-status-check-heatmap.txt", + "multiqc/bismark/multiqc_data/fastqc_adapter_content_plot.txt", + "multiqc/bismark/multiqc_data/fastqc_overrepresented_sequences_plot.txt", + "multiqc/bismark/multiqc_data/fastqc_per_base_n_content_plot.txt", + "multiqc/bismark/multiqc_data/fastqc_per_base_sequence_quality_plot.txt", + "multiqc/bismark/multiqc_data/fastqc_per_sequence_gc_content_plot_Counts.txt", + "multiqc/bismark/multiqc_data/fastqc_per_sequence_gc_content_plot_Percentages.txt", + "multiqc/bismark/multiqc_data/fastqc_per_sequence_quality_scores_plot.txt", + "multiqc/bismark/multiqc_data/fastqc_sequence_counts_plot.txt", + "multiqc/bismark/multiqc_data/fastqc_sequence_duplication_levels_plot.txt", + "multiqc/bismark/multiqc_data/fastqc_top_overrepresented_sequences_table.txt", + "multiqc/bismark/multiqc_data/multiqc.log", + "multiqc/bismark/multiqc_data/multiqc_bismark_alignment.txt", + "multiqc/bismark/multiqc_data/multiqc_bismark_methextract.txt", + "multiqc/bismark/multiqc_data/multiqc_citations.txt", + "multiqc/bismark/multiqc_data/multiqc_cutadapt.txt", + "multiqc/bismark/multiqc_data/multiqc_data.json", + "multiqc/bismark/multiqc_data/multiqc_fastqc.txt", + "multiqc/bismark/multiqc_data/multiqc_general_stats.txt", + "multiqc/bismark/multiqc_data/multiqc_qualimap_bamqc_genome_results.txt", + "multiqc/bismark/multiqc_data/multiqc_software_versions.txt", + "multiqc/bismark/multiqc_data/multiqc_sources.txt", + "multiqc/bismark/multiqc_data/qualimap_coverage_histogram.txt", + "multiqc/bismark/multiqc_data/qualimap_gc_content.txt", + "multiqc/bismark/multiqc_data/qualimap_genome_fraction.txt", + "multiqc/bismark/multiqc_data/qualimap_insert_size.txt", + "multiqc/bismark/multiqc_plots", + "multiqc/bismark/multiqc_plots/pdf", + "multiqc/bismark/multiqc_plots/pdf/bismark-methylation-dp.pdf", + "multiqc/bismark/multiqc_plots/pdf/bismark_alignment-cnt.pdf", + "multiqc/bismark/multiqc_plots/pdf/bismark_alignment-pct.pdf", + "multiqc/bismark/multiqc_plots/pdf/bismark_mbias_CHG_R1.pdf", + "multiqc/bismark/multiqc_plots/pdf/bismark_mbias_CHG_R2.pdf", + "multiqc/bismark/multiqc_plots/pdf/bismark_mbias_CHH_R1.pdf", + "multiqc/bismark/multiqc_plots/pdf/bismark_mbias_CHH_R2.pdf", + "multiqc/bismark/multiqc_plots/pdf/bismark_mbias_CpG_R1.pdf", + "multiqc/bismark/multiqc_plots/pdf/bismark_mbias_CpG_R2.pdf", + "multiqc/bismark/multiqc_plots/pdf/bismark_strand_alignment-cnt.pdf", + "multiqc/bismark/multiqc_plots/pdf/bismark_strand_alignment-pct.pdf", + "multiqc/bismark/multiqc_plots/pdf/cutadapt_filtered_reads_plot-cnt.pdf", + "multiqc/bismark/multiqc_plots/pdf/cutadapt_filtered_reads_plot-pct.pdf", + "multiqc/bismark/multiqc_plots/pdf/cutadapt_trimmed_sequences_plot_3_Counts.pdf", + "multiqc/bismark/multiqc_plots/pdf/cutadapt_trimmed_sequences_plot_3_Obs_Exp.pdf", + "multiqc/bismark/multiqc_plots/pdf/fastqc-status-check-heatmap.pdf", + "multiqc/bismark/multiqc_plots/pdf/fastqc_adapter_content_plot.pdf", + "multiqc/bismark/multiqc_plots/pdf/fastqc_overrepresented_sequences_plot.pdf", + "multiqc/bismark/multiqc_plots/pdf/fastqc_per_base_n_content_plot.pdf", + "multiqc/bismark/multiqc_plots/pdf/fastqc_per_base_sequence_quality_plot.pdf", + "multiqc/bismark/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Counts.pdf", + "multiqc/bismark/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Percentages.pdf", + "multiqc/bismark/multiqc_plots/pdf/fastqc_per_sequence_quality_scores_plot.pdf", + "multiqc/bismark/multiqc_plots/pdf/fastqc_sequence_counts_plot-cnt.pdf", + "multiqc/bismark/multiqc_plots/pdf/fastqc_sequence_counts_plot-pct.pdf", + "multiqc/bismark/multiqc_plots/pdf/fastqc_sequence_duplication_levels_plot.pdf", + "multiqc/bismark/multiqc_plots/pdf/fastqc_top_overrepresented_sequences_table.pdf", + "multiqc/bismark/multiqc_plots/pdf/general_stats_table.pdf", + "multiqc/bismark/multiqc_plots/pdf/qualimap_coverage_histogram.pdf", + "multiqc/bismark/multiqc_plots/pdf/qualimap_gc_content.pdf", + "multiqc/bismark/multiqc_plots/pdf/qualimap_genome_fraction.pdf", + "multiqc/bismark/multiqc_plots/pdf/qualimap_insert_size.pdf", + "multiqc/bismark/multiqc_plots/png", + "multiqc/bismark/multiqc_plots/png/bismark-methylation-dp.png", + "multiqc/bismark/multiqc_plots/png/bismark_alignment-cnt.png", + "multiqc/bismark/multiqc_plots/png/bismark_alignment-pct.png", + "multiqc/bismark/multiqc_plots/png/bismark_mbias_CHG_R1.png", + "multiqc/bismark/multiqc_plots/png/bismark_mbias_CHG_R2.png", + "multiqc/bismark/multiqc_plots/png/bismark_mbias_CHH_R1.png", + "multiqc/bismark/multiqc_plots/png/bismark_mbias_CHH_R2.png", + "multiqc/bismark/multiqc_plots/png/bismark_mbias_CpG_R1.png", + "multiqc/bismark/multiqc_plots/png/bismark_mbias_CpG_R2.png", + "multiqc/bismark/multiqc_plots/png/bismark_strand_alignment-cnt.png", + "multiqc/bismark/multiqc_plots/png/bismark_strand_alignment-pct.png", + "multiqc/bismark/multiqc_plots/png/cutadapt_filtered_reads_plot-cnt.png", + "multiqc/bismark/multiqc_plots/png/cutadapt_filtered_reads_plot-pct.png", + "multiqc/bismark/multiqc_plots/png/cutadapt_trimmed_sequences_plot_3_Counts.png", + "multiqc/bismark/multiqc_plots/png/cutadapt_trimmed_sequences_plot_3_Obs_Exp.png", + "multiqc/bismark/multiqc_plots/png/fastqc-status-check-heatmap.png", + "multiqc/bismark/multiqc_plots/png/fastqc_adapter_content_plot.png", + "multiqc/bismark/multiqc_plots/png/fastqc_overrepresented_sequences_plot.png", + "multiqc/bismark/multiqc_plots/png/fastqc_per_base_n_content_plot.png", + "multiqc/bismark/multiqc_plots/png/fastqc_per_base_sequence_quality_plot.png", + "multiqc/bismark/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Counts.png", + "multiqc/bismark/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Percentages.png", + "multiqc/bismark/multiqc_plots/png/fastqc_per_sequence_quality_scores_plot.png", + "multiqc/bismark/multiqc_plots/png/fastqc_sequence_counts_plot-cnt.png", + "multiqc/bismark/multiqc_plots/png/fastqc_sequence_counts_plot-pct.png", + "multiqc/bismark/multiqc_plots/png/fastqc_sequence_duplication_levels_plot.png", + "multiqc/bismark/multiqc_plots/png/fastqc_top_overrepresented_sequences_table.png", + "multiqc/bismark/multiqc_plots/png/general_stats_table.png", + "multiqc/bismark/multiqc_plots/png/qualimap_coverage_histogram.png", + "multiqc/bismark/multiqc_plots/png/qualimap_gc_content.png", + "multiqc/bismark/multiqc_plots/png/qualimap_genome_fraction.png", + "multiqc/bismark/multiqc_plots/png/qualimap_insert_size.png", + "multiqc/bismark/multiqc_plots/svg", + "multiqc/bismark/multiqc_plots/svg/bismark-methylation-dp.svg", + "multiqc/bismark/multiqc_plots/svg/bismark_alignment-cnt.svg", + "multiqc/bismark/multiqc_plots/svg/bismark_alignment-pct.svg", + "multiqc/bismark/multiqc_plots/svg/bismark_mbias_CHG_R1.svg", + "multiqc/bismark/multiqc_plots/svg/bismark_mbias_CHG_R2.svg", + "multiqc/bismark/multiqc_plots/svg/bismark_mbias_CHH_R1.svg", + "multiqc/bismark/multiqc_plots/svg/bismark_mbias_CHH_R2.svg", + "multiqc/bismark/multiqc_plots/svg/bismark_mbias_CpG_R1.svg", + "multiqc/bismark/multiqc_plots/svg/bismark_mbias_CpG_R2.svg", + "multiqc/bismark/multiqc_plots/svg/bismark_strand_alignment-cnt.svg", + "multiqc/bismark/multiqc_plots/svg/bismark_strand_alignment-pct.svg", + "multiqc/bismark/multiqc_plots/svg/cutadapt_filtered_reads_plot-cnt.svg", + "multiqc/bismark/multiqc_plots/svg/cutadapt_filtered_reads_plot-pct.svg", + "multiqc/bismark/multiqc_plots/svg/cutadapt_trimmed_sequences_plot_3_Counts.svg", + "multiqc/bismark/multiqc_plots/svg/cutadapt_trimmed_sequences_plot_3_Obs_Exp.svg", + "multiqc/bismark/multiqc_plots/svg/fastqc-status-check-heatmap.svg", + "multiqc/bismark/multiqc_plots/svg/fastqc_adapter_content_plot.svg", + "multiqc/bismark/multiqc_plots/svg/fastqc_overrepresented_sequences_plot.svg", + "multiqc/bismark/multiqc_plots/svg/fastqc_per_base_n_content_plot.svg", + "multiqc/bismark/multiqc_plots/svg/fastqc_per_base_sequence_quality_plot.svg", + "multiqc/bismark/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Counts.svg", + "multiqc/bismark/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Percentages.svg", + "multiqc/bismark/multiqc_plots/svg/fastqc_per_sequence_quality_scores_plot.svg", + "multiqc/bismark/multiqc_plots/svg/fastqc_sequence_counts_plot-cnt.svg", + "multiqc/bismark/multiqc_plots/svg/fastqc_sequence_counts_plot-pct.svg", + "multiqc/bismark/multiqc_plots/svg/fastqc_sequence_duplication_levels_plot.svg", + "multiqc/bismark/multiqc_plots/svg/fastqc_top_overrepresented_sequences_table.svg", + "multiqc/bismark/multiqc_plots/svg/general_stats_table.svg", + "multiqc/bismark/multiqc_plots/svg/qualimap_coverage_histogram.svg", + "multiqc/bismark/multiqc_plots/svg/qualimap_gc_content.svg", + "multiqc/bismark/multiqc_plots/svg/qualimap_genome_fraction.svg", + "multiqc/bismark/multiqc_plots/svg/qualimap_insert_size.svg", + "multiqc/bismark/multiqc_report.html", + "pipeline_info", + "pipeline_info/nf_core_pipeline_software_mqc_versions.yml", + "qualimap", + "qualimap/Ecoli_10K_methylated", + "qualimap/Ecoli_10K_methylated/css", + "qualimap/Ecoli_10K_methylated/css/agogo.css", + "qualimap/Ecoli_10K_methylated/css/ajax-loader.gif", + "qualimap/Ecoli_10K_methylated/css/basic.css", + "qualimap/Ecoli_10K_methylated/css/bgfooter.png", + "qualimap/Ecoli_10K_methylated/css/bgtop.png", + "qualimap/Ecoli_10K_methylated/css/comment-bright.png", + "qualimap/Ecoli_10K_methylated/css/comment-close.png", + "qualimap/Ecoli_10K_methylated/css/comment.png", + "qualimap/Ecoli_10K_methylated/css/doctools.js", + "qualimap/Ecoli_10K_methylated/css/down-pressed.png", + "qualimap/Ecoli_10K_methylated/css/down.png", + "qualimap/Ecoli_10K_methylated/css/file.png", + "qualimap/Ecoli_10K_methylated/css/jquery.js", + "qualimap/Ecoli_10K_methylated/css/minus.png", + "qualimap/Ecoli_10K_methylated/css/plus.png", + "qualimap/Ecoli_10K_methylated/css/pygments.css", + "qualimap/Ecoli_10K_methylated/css/qualimap_logo_small.png", + "qualimap/Ecoli_10K_methylated/css/report.css", + "qualimap/Ecoli_10K_methylated/css/searchtools.js", + "qualimap/Ecoli_10K_methylated/css/underscore.js", + "qualimap/Ecoli_10K_methylated/css/up-pressed.png", + "qualimap/Ecoli_10K_methylated/css/up.png", + "qualimap/Ecoli_10K_methylated/css/websupport.js", + "qualimap/Ecoli_10K_methylated/genome_results.txt", + "qualimap/Ecoli_10K_methylated/images_qualimapReport", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_coverage_0to50_histogram.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_coverage_across_reference.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_coverage_histogram.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_coverage_quotes.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_gc_content_per_window.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_insert_size_across_reference.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_insert_size_histogram.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_mapping_quality_across_reference.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_mapping_quality_histogram.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_reads_content_per_read_position.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_uniq_read_starts_histogram.png", + "qualimap/Ecoli_10K_methylated/qualimapReport.html", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/coverage_across_reference.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/coverage_histogram.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/duplication_rate_histogram.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/genome_fraction_coverage.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/insert_size_across_reference.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/insert_size_histogram.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/mapped_reads_gc-content_distribution.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/mapped_reads_nucleotide_content.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/mapping_quality_across_reference.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/mapping_quality_histogram.txt", + "qualimap/SRR389222_sub1", + "qualimap/SRR389222_sub1/css", + "qualimap/SRR389222_sub1/css/agogo.css", + "qualimap/SRR389222_sub1/css/ajax-loader.gif", + "qualimap/SRR389222_sub1/css/basic.css", + "qualimap/SRR389222_sub1/css/bgfooter.png", + "qualimap/SRR389222_sub1/css/bgtop.png", + "qualimap/SRR389222_sub1/css/comment-bright.png", + "qualimap/SRR389222_sub1/css/comment-close.png", + "qualimap/SRR389222_sub1/css/comment.png", + "qualimap/SRR389222_sub1/css/doctools.js", + "qualimap/SRR389222_sub1/css/down-pressed.png", + "qualimap/SRR389222_sub1/css/down.png", + "qualimap/SRR389222_sub1/css/file.png", + "qualimap/SRR389222_sub1/css/jquery.js", + "qualimap/SRR389222_sub1/css/minus.png", + "qualimap/SRR389222_sub1/css/plus.png", + "qualimap/SRR389222_sub1/css/pygments.css", + "qualimap/SRR389222_sub1/css/qualimap_logo_small.png", + "qualimap/SRR389222_sub1/css/report.css", + "qualimap/SRR389222_sub1/css/searchtools.js", + "qualimap/SRR389222_sub1/css/underscore.js", + "qualimap/SRR389222_sub1/css/up-pressed.png", + "qualimap/SRR389222_sub1/css/up.png", + "qualimap/SRR389222_sub1/css/websupport.js", + "qualimap/SRR389222_sub1/genome_results.txt", + "qualimap/SRR389222_sub1/images_qualimapReport", + "qualimap/SRR389222_sub1/images_qualimapReport/genome_coverage_0to50_histogram.png", + "qualimap/SRR389222_sub1/images_qualimapReport/genome_coverage_across_reference.png", + "qualimap/SRR389222_sub1/images_qualimapReport/genome_coverage_histogram.png", + "qualimap/SRR389222_sub1/images_qualimapReport/genome_coverage_quotes.png", + "qualimap/SRR389222_sub1/images_qualimapReport/genome_gc_content_per_window.png", + "qualimap/SRR389222_sub1/images_qualimapReport/genome_mapping_quality_across_reference.png", + "qualimap/SRR389222_sub1/images_qualimapReport/genome_mapping_quality_histogram.png", + "qualimap/SRR389222_sub1/images_qualimapReport/genome_reads_content_per_read_position.png", + "qualimap/SRR389222_sub1/images_qualimapReport/genome_uniq_read_starts_histogram.png", + "qualimap/SRR389222_sub1/qualimapReport.html", + "qualimap/SRR389222_sub1/raw_data_qualimapReport", + "qualimap/SRR389222_sub1/raw_data_qualimapReport/coverage_across_reference.txt", + "qualimap/SRR389222_sub1/raw_data_qualimapReport/coverage_histogram.txt", + "qualimap/SRR389222_sub1/raw_data_qualimapReport/duplication_rate_histogram.txt", + "qualimap/SRR389222_sub1/raw_data_qualimapReport/genome_fraction_coverage.txt", + "qualimap/SRR389222_sub1/raw_data_qualimapReport/mapped_reads_gc-content_distribution.txt", + "qualimap/SRR389222_sub1/raw_data_qualimapReport/mapped_reads_nucleotide_content.txt", + "qualimap/SRR389222_sub1/raw_data_qualimapReport/mapping_quality_across_reference.txt", + "qualimap/SRR389222_sub1/raw_data_qualimapReport/mapping_quality_histogram.txt", + "qualimap/SRR389222_sub2", + "qualimap/SRR389222_sub2/css", + "qualimap/SRR389222_sub2/css/agogo.css", + "qualimap/SRR389222_sub2/css/ajax-loader.gif", + "qualimap/SRR389222_sub2/css/basic.css", + "qualimap/SRR389222_sub2/css/bgfooter.png", + "qualimap/SRR389222_sub2/css/bgtop.png", + "qualimap/SRR389222_sub2/css/comment-bright.png", + "qualimap/SRR389222_sub2/css/comment-close.png", + "qualimap/SRR389222_sub2/css/comment.png", + "qualimap/SRR389222_sub2/css/doctools.js", + "qualimap/SRR389222_sub2/css/down-pressed.png", + "qualimap/SRR389222_sub2/css/down.png", + "qualimap/SRR389222_sub2/css/file.png", + "qualimap/SRR389222_sub2/css/jquery.js", + "qualimap/SRR389222_sub2/css/minus.png", + "qualimap/SRR389222_sub2/css/plus.png", + "qualimap/SRR389222_sub2/css/pygments.css", + "qualimap/SRR389222_sub2/css/qualimap_logo_small.png", + "qualimap/SRR389222_sub2/css/report.css", + "qualimap/SRR389222_sub2/css/searchtools.js", + "qualimap/SRR389222_sub2/css/underscore.js", + "qualimap/SRR389222_sub2/css/up-pressed.png", + "qualimap/SRR389222_sub2/css/up.png", + "qualimap/SRR389222_sub2/css/websupport.js", + "qualimap/SRR389222_sub2/genome_results.txt", + "qualimap/SRR389222_sub2/images_qualimapReport", + "qualimap/SRR389222_sub2/images_qualimapReport/genome_coverage_0to50_histogram.png", + "qualimap/SRR389222_sub2/images_qualimapReport/genome_coverage_across_reference.png", + "qualimap/SRR389222_sub2/images_qualimapReport/genome_coverage_histogram.png", + "qualimap/SRR389222_sub2/images_qualimapReport/genome_coverage_quotes.png", + "qualimap/SRR389222_sub2/images_qualimapReport/genome_gc_content_per_window.png", + "qualimap/SRR389222_sub2/images_qualimapReport/genome_mapping_quality_across_reference.png", + "qualimap/SRR389222_sub2/images_qualimapReport/genome_mapping_quality_histogram.png", + "qualimap/SRR389222_sub2/images_qualimapReport/genome_reads_content_per_read_position.png", + "qualimap/SRR389222_sub2/images_qualimapReport/genome_uniq_read_starts_histogram.png", + "qualimap/SRR389222_sub2/qualimapReport.html", + "qualimap/SRR389222_sub2/raw_data_qualimapReport", + "qualimap/SRR389222_sub2/raw_data_qualimapReport/coverage_across_reference.txt", + "qualimap/SRR389222_sub2/raw_data_qualimapReport/coverage_histogram.txt", + "qualimap/SRR389222_sub2/raw_data_qualimapReport/duplication_rate_histogram.txt", + "qualimap/SRR389222_sub2/raw_data_qualimapReport/genome_fraction_coverage.txt", + "qualimap/SRR389222_sub2/raw_data_qualimapReport/mapped_reads_gc-content_distribution.txt", + "qualimap/SRR389222_sub2/raw_data_qualimapReport/mapped_reads_nucleotide_content.txt", + "qualimap/SRR389222_sub2/raw_data_qualimapReport/mapping_quality_across_reference.txt", + "qualimap/SRR389222_sub2/raw_data_qualimapReport/mapping_quality_histogram.txt", + "qualimap/SRR389222_sub3", + "qualimap/SRR389222_sub3/css", + "qualimap/SRR389222_sub3/css/agogo.css", + "qualimap/SRR389222_sub3/css/ajax-loader.gif", + "qualimap/SRR389222_sub3/css/basic.css", + "qualimap/SRR389222_sub3/css/bgfooter.png", + "qualimap/SRR389222_sub3/css/bgtop.png", + "qualimap/SRR389222_sub3/css/comment-bright.png", + "qualimap/SRR389222_sub3/css/comment-close.png", + "qualimap/SRR389222_sub3/css/comment.png", + "qualimap/SRR389222_sub3/css/doctools.js", + "qualimap/SRR389222_sub3/css/down-pressed.png", + "qualimap/SRR389222_sub3/css/down.png", + "qualimap/SRR389222_sub3/css/file.png", + "qualimap/SRR389222_sub3/css/jquery.js", + "qualimap/SRR389222_sub3/css/minus.png", + "qualimap/SRR389222_sub3/css/plus.png", + "qualimap/SRR389222_sub3/css/pygments.css", + "qualimap/SRR389222_sub3/css/qualimap_logo_small.png", + "qualimap/SRR389222_sub3/css/report.css", + "qualimap/SRR389222_sub3/css/searchtools.js", + "qualimap/SRR389222_sub3/css/underscore.js", + "qualimap/SRR389222_sub3/css/up-pressed.png", + "qualimap/SRR389222_sub3/css/up.png", + "qualimap/SRR389222_sub3/css/websupport.js", + "qualimap/SRR389222_sub3/genome_results.txt", + "qualimap/SRR389222_sub3/images_qualimapReport", + "qualimap/SRR389222_sub3/images_qualimapReport/genome_coverage_0to50_histogram.png", + "qualimap/SRR389222_sub3/images_qualimapReport/genome_coverage_across_reference.png", + "qualimap/SRR389222_sub3/images_qualimapReport/genome_coverage_histogram.png", + "qualimap/SRR389222_sub3/images_qualimapReport/genome_coverage_quotes.png", + "qualimap/SRR389222_sub3/images_qualimapReport/genome_gc_content_per_window.png", + "qualimap/SRR389222_sub3/images_qualimapReport/genome_mapping_quality_across_reference.png", + "qualimap/SRR389222_sub3/images_qualimapReport/genome_mapping_quality_histogram.png", + "qualimap/SRR389222_sub3/images_qualimapReport/genome_reads_content_per_read_position.png", + "qualimap/SRR389222_sub3/images_qualimapReport/genome_uniq_read_starts_histogram.png", + "qualimap/SRR389222_sub3/qualimapReport.html", + "qualimap/SRR389222_sub3/raw_data_qualimapReport", + "qualimap/SRR389222_sub3/raw_data_qualimapReport/coverage_across_reference.txt", + "qualimap/SRR389222_sub3/raw_data_qualimapReport/coverage_histogram.txt", + "qualimap/SRR389222_sub3/raw_data_qualimapReport/duplication_rate_histogram.txt", + "qualimap/SRR389222_sub3/raw_data_qualimapReport/genome_fraction_coverage.txt", + "qualimap/SRR389222_sub3/raw_data_qualimapReport/mapped_reads_gc-content_distribution.txt", + "qualimap/SRR389222_sub3/raw_data_qualimapReport/mapped_reads_nucleotide_content.txt", + "qualimap/SRR389222_sub3/raw_data_qualimapReport/mapping_quality_across_reference.txt", + "qualimap/SRR389222_sub3/raw_data_qualimapReport/mapping_quality_histogram.txt", + "trimgalore", + "trimgalore/fastqc", + "trimgalore/fastqc/Ecoli_10K_methylated_1_val_1_fastqc.html", + "trimgalore/fastqc/Ecoli_10K_methylated_2_val_2_fastqc.html", + "trimgalore/fastqc/SRR389222_sub1_trimmed_fastqc.html", + "trimgalore/fastqc/SRR389222_sub2_trimmed_fastqc.html", + "trimgalore/fastqc/SRR389222_sub3_trimmed_fastqc.html", + "trimgalore/fastqc/zips", + "trimgalore/fastqc/zips/Ecoli_10K_methylated_1_val_1_fastqc.zip", + "trimgalore/fastqc/zips/Ecoli_10K_methylated_2_val_2_fastqc.zip", + "trimgalore/fastqc/zips/SRR389222_sub1_trimmed_fastqc.zip", + "trimgalore/fastqc/zips/SRR389222_sub2_trimmed_fastqc.zip", + "trimgalore/fastqc/zips/SRR389222_sub3_trimmed_fastqc.zip", + "trimgalore/logs", + "trimgalore/logs/Ecoli_10K_methylated_1.fastq.gz_trimming_report.txt", + "trimgalore/logs/Ecoli_10K_methylated_2.fastq.gz_trimming_report.txt", + "trimgalore/logs/SRR389222_sub1.fastq.gz_trimming_report.txt", + "trimgalore/logs/SRR389222_sub2.fastq.gz_trimming_report.txt", + "trimgalore/logs/SRR389222_sub3.fastq.gz_trimming_report.txt" + ], + [ + "Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.bedGraph.gz:md5,2691bc94521625f665ea62b357022e4e", + "SRR389222_sub1_trimmed_bismark_bt2.bedGraph.gz:md5,19b360cef6da9e51a9aed103bdc20c59", + "SRR389222_sub2_trimmed_bismark_bt2.bedGraph.gz:md5,e3391beb85c4718b897850bd0b724238", + "SRR389222_sub3_trimmed_bismark_bt2.bedGraph.gz:md5,77237eb7bd3b1d213798ea69c9bd1dc0", + "Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.M-bias.txt:md5,198181d02bd7f42f9c7762b383d6f9f5", + "SRR389222_sub1_trimmed_bismark_bt2.M-bias.txt:md5,85e560f0b24650662740311e7e0e68c5", + "SRR389222_sub2_trimmed_bismark_bt2.M-bias.txt:md5,1dbb052bca91de848e3136397904de5b", + "SRR389222_sub3_trimmed_bismark_bt2.M-bias.txt:md5,75f664cedec907f51bc52ac1fca0d178", + "CHG_OB_Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.txt.gz:md5,72e73407f47f4a5911ddd41a38b8714e", + "CHG_OB_SRR389222_sub1_trimmed_bismark_bt2.txt.gz:md5,11ae58ebe6513375468ebe63a521d6e3", + "CHG_OB_SRR389222_sub2_trimmed_bismark_bt2.txt.gz:md5,d493d6c7975b132f7c45eacd7709cb04", + "CHG_OB_SRR389222_sub3_trimmed_bismark_bt2.txt.gz:md5,790a80e609516e25c075291ae292b95c", + "CHG_OT_Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.txt.gz:md5,b508e40e494dfd9fc2c2017286cd3fe9", + "CHG_OT_SRR389222_sub1_trimmed_bismark_bt2.txt.gz:md5,24b6a86e08960ac8b744a9ed832dee30", + "CHG_OT_SRR389222_sub2_trimmed_bismark_bt2.txt.gz:md5,0d52d439f89a98c8f6a257daf7b8678e", + "CHG_OT_SRR389222_sub3_trimmed_bismark_bt2.txt.gz:md5,6aeddde6430faec05d674d28462471cd", + "CHH_OB_Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.txt.gz:md5,a1a830f4d532932aa63f8d3d8b43b207", + "CHH_OB_SRR389222_sub1_trimmed_bismark_bt2.txt.gz:md5,12e9e4ebf59e6b23fb52f4872f534251", + "CHH_OB_SRR389222_sub2_trimmed_bismark_bt2.txt.gz:md5,b06fe5b367be1fd812619853f3c2d1ac", + "CHH_OB_SRR389222_sub3_trimmed_bismark_bt2.txt.gz:md5,d84c842b1348400ae1366748e09bfb6a", + "CHH_OT_Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.txt.gz:md5,112a5d2beba2f8ebda273ca3bec98d88", + "CHH_OT_SRR389222_sub1_trimmed_bismark_bt2.txt.gz:md5,fdbc9eacbe3fe771c334cb66cd7eda64", + "CHH_OT_SRR389222_sub2_trimmed_bismark_bt2.txt.gz:md5,563b74941237b94c0af192efc76d9ef2", + "CHH_OT_SRR389222_sub3_trimmed_bismark_bt2.txt.gz:md5,d2f05c8ae5bff1acb8940e4d27518a5d", + "CpG_OB_Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.txt.gz:md5,942add78c25253633956c39d21450dc5", + "CpG_OB_SRR389222_sub1_trimmed_bismark_bt2.txt.gz:md5,57574ed644d8655da37ced3f813c5a24", + "CpG_OB_SRR389222_sub2_trimmed_bismark_bt2.txt.gz:md5,d52a2554e1cc6caa74c08f98ba02db18", + "CpG_OB_SRR389222_sub3_trimmed_bismark_bt2.txt.gz:md5,f4f8438d8cbe1fc83419a8a50fbdf583", + "CpG_OT_Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.txt.gz:md5,8bb4cb59815cc9e260dcfa332fcb5ae9", + "CpG_OT_SRR389222_sub1_trimmed_bismark_bt2.txt.gz:md5,89389cea63c64f6e0a9c3524404a1b3b", + "CpG_OT_SRR389222_sub2_trimmed_bismark_bt2.txt.gz:md5,d12a5d757a255572453a35b6f2c9c1c4", + "CpG_OT_SRR389222_sub3_trimmed_bismark_bt2.txt.gz:md5,575a17abc4caf1559bdac122ace832a4", + "Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.bismark.cov.gz:md5,60eac8132590c72d1606d41eb4adcb30", + "SRR389222_sub1_trimmed_bismark_bt2.bismark.cov.gz:md5,7660c828d0ea61dee7dfe01dd8330461", + "SRR389222_sub2_trimmed_bismark_bt2.bismark.cov.gz:md5,fd27bbf4f8e0ab429066c8b0bb70279d", + "SRR389222_sub3_trimmed_bismark_bt2.bismark.cov.gz:md5,d3c196f28a99b8c28da654f8d9a23666", + "Ecoli_10K_methylated_1_val_1_bismark_bt2_pe_splitting_report.txt:md5,54c70d806490cd9968c9a094fdeb8bcb", + "SRR389222_sub1_trimmed_bismark_bt2_splitting_report.txt:md5,8bf9dc8dd2bb0bc918996edfd02d245e", + "SRR389222_sub2_trimmed_bismark_bt2_splitting_report.txt:md5,faeff61aa8cb9d1ba6d67cd4fa7a8587", + "SRR389222_sub3_trimmed_bismark_bt2_splitting_report.txt:md5,a5609edd39203f94c5e80dc619b94f68", + "bismark-methylation-dp.txt:md5,0b7ac7f2e82a9cc4a3362bfcd66a3e26", + "bismark_alignment.txt:md5,0a7b6ad94d54f24a91d5126a6acaa9de", + "bismark_mbias_CHG_R1.txt:md5,1a54528651513f4bdfa223c22de60c30", + "bismark_mbias_CHG_R2.txt:md5,531167bbe3a7e66d9504706aa34fb2bb", + "bismark_mbias_CHH_R1.txt:md5,1c10be5d09d76e1d77abca344907cd01", + "bismark_mbias_CHH_R2.txt:md5,593fb4ca58869961b51b73ba37bcccd1", + "bismark_mbias_CpG_R1.txt:md5,b982d2b5df01396f5a559877c0dacf14", + "bismark_mbias_CpG_R2.txt:md5,629e1f9f750ad764f51c7edbc643e87e", + "bismark_strand_alignment.txt:md5,fa3aff1013dd4280bbfd2794bc825fc6", + "cutadapt_filtered_reads_plot.txt:md5,ff1b6d4011a5be5410b9404f7ff56c56", + "cutadapt_trimmed_sequences_plot_3_Counts.txt:md5,57d07c19b0c30dc88df96c30bedcdc33", + "cutadapt_trimmed_sequences_plot_3_Obs_Exp.txt:md5,1e5ca4193f8290c5c812334d03615b41", + "fastqc-status-check-heatmap.txt:md5,218c2a7efbb9c02f652fa78fc739c866", + "fastqc_adapter_content_plot.txt:md5,48d8bd5ece984a74972ce0a0e814dd07", + "fastqc_overrepresented_sequences_plot.txt:md5,9c4b7064950b5b2c486d556984f21e9e", + "fastqc_per_base_n_content_plot.txt:md5,019d5cd4f61a31f4e7016140ca8ee36e", + "fastqc_per_base_sequence_quality_plot.txt:md5,e4c7d522114eab9bc9101e7ee9d83c8f", + "fastqc_per_sequence_gc_content_plot_Counts.txt:md5,302659bee8a02b6a38b24fe25f8eaa87", + "fastqc_per_sequence_gc_content_plot_Percentages.txt:md5,c75b396eb5dda8682fb1652a9b2e92a3", + "fastqc_per_sequence_quality_scores_plot.txt:md5,548c593f4a8be2d8627fc3bd1c280611", + "fastqc_sequence_counts_plot.txt:md5,58eeeb06bc9dcc1764c7daf0847d6bbf", + "fastqc_sequence_duplication_levels_plot.txt:md5,9e5712db9aa39b5754ea1e0c49cfff15", + "fastqc_top_overrepresented_sequences_table.txt:md5,6dfc5334a09c05392ea17369aa742d01", + "multiqc_bismark_alignment.txt:md5,f9f3e888d5176131440f6a8a6d1abccc", + "multiqc_bismark_methextract.txt:md5,1a2967a22fa1522f9e8d672fc43ca78d", + "multiqc_citations.txt:md5,b9d42869faad581bd963d3d3bb490026", + "multiqc_cutadapt.txt:md5,b376b3816764859cfc345bf13cda536f", + "qualimap_coverage_histogram.txt:md5,22c70e761489597e34a3d71d036ff190", + "qualimap_gc_content.txt:md5,c872803a08b92b36c136e2ba3bee96d4", + "qualimap_genome_fraction.txt:md5,393f86423cc89983ab66fa29f93dd710", + "qualimap_insert_size.txt:md5,65781ee04b024acd4efb4609a32d8b30", + "genome_results.txt:md5,678ca9b105799d1946f31a68d63927f5", + "genome_results.txt:md5,7a1ac1151afcc743a7a80ed68225346f", + "genome_results.txt:md5,eccab1342de8fbbf5e5e547cd861b704", + "genome_results.txt:md5,8b11703c6ee4e2a73d7d2624bda6b6ba" + ], + [ + [ + "Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.bam", + "4cd51c9f113e828e62502e0c5b6bec85" + ], + [ + "SRR389222_sub1_trimmed_bismark_bt2.bam", + "2cfcb459e44dc624e3807632f118e659" + ], + [ + "SRR389222_sub2_trimmed_bismark_bt2.bam", + "bc7acb48fa6b4c8cdf1ced034af8e2c" + ], + [ + "SRR389222_sub3_trimmed_bismark_bt2.bam", + "7c02cfebfd9ee3360050142e2d144a20" + ], + [ + "Ecoli_10K_methylated.deduplicated.sorted.bam", + "38e388c7f8db48f3e06d16d2611faafe" + ], + [ + "SRR389222_sub1.deduplicated.sorted.bam", + "d042804716ccaa1f8061a309e8d79467" + ], + [ + "SRR389222_sub2.deduplicated.sorted.bam", + "a55f63182990117bc57714cb8227a57e" + ], + [ + "SRR389222_sub3.deduplicated.sorted.bam", + "605fc4a383cc488c53b66c6b5494eba" + ] + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-21T17:52:32.475797707" + } +} \ No newline at end of file diff --git a/tests/bismark_save_reference_save_align_intermeds.nf.test b/tests/bismark_save_reference_save_align_intermeds.nf.test new file mode 100644 index 00000000..cc5fc7a0 --- /dev/null +++ b/tests/bismark_save_reference_save_align_intermeds.nf.test @@ -0,0 +1,42 @@ +nextflow_pipeline { + + name "Test Workflow main.nf" + script "../main.nf" + config "./nextflow.config" + + test("Params: bismark | save_reference | save_align_intermeds") { + when { + params { + aligner = "bismark" + save_reference = true + save_align_intermeds = true + outdir = "$outputDir" + } + } + + then { + // stable_name: All files + folders in ${params.outdir}/ with a stable name + def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) + // stable_path: All files in ${params.outdir}/ with stable content + def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') + // bam_files: All bam files + def bam_files = getAllFilesFromDir(params.outdir, include: ['**/*.bam']) + assertAll( + { assert workflow.success}, + { assert snapshot( + // Number of tasks + workflow.trace.succeeded().size(), + // pipeline versions.yml file for multiqc from which Nextflow version is removed because we tests pipelines on multiple Nextflow versions + removeNextflowVersion("$outputDir/pipeline_info/nf_core_pipeline_software_mqc_versions.yml"), + // All stable path name + stable_name, + // All files with stable contents + stable_path, + // All bam files + bam_files.collect{ file -> [ file.getName(), bam(file.toString()).getReadsMD5() ] } + ).match() } + ) + } + } + +} diff --git a/tests/bismark_save_reference_save_align_intermeds.nf.test.snap b/tests/bismark_save_reference_save_align_intermeds.nf.test.snap new file mode 100644 index 00000000..8ec9d79e --- /dev/null +++ b/tests/bismark_save_reference_save_align_intermeds.nf.test.snap @@ -0,0 +1,654 @@ +{ + "Params: bismark | save_reference | save_align_intermeds": { + "content": [ + 43, + { + "BISMARK_ALIGN": { + "bismark": "0.24.2" + }, + "BISMARK_GENOMEPREPARATION": { + "bismark": "0.24.2" + }, + "FASTQC": { + "fastqc": "0.12.1" + }, + "QUALIMAP_BAMQC": { + "qualimap": 2.3 + }, + "TRIMGALORE": { + "trimgalore": "0.6.10", + "cutadapt": 4.2 + }, + "Workflow": { + "nf-core/methylseq": "v2.7.0" + } + }, + [ + "bismark", + "bismark/alignments", + "bismark/alignments/Ecoli_10K_methylated.sorted.bam", + "bismark/alignments/Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.bam", + "bismark/alignments/SRR389222_sub1.sorted.bam", + "bismark/alignments/SRR389222_sub1_trimmed_bismark_bt2.bam", + "bismark/alignments/SRR389222_sub2.sorted.bam", + "bismark/alignments/SRR389222_sub2_trimmed_bismark_bt2.bam", + "bismark/alignments/SRR389222_sub3.sorted.bam", + "bismark/alignments/SRR389222_sub3_trimmed_bismark_bt2.bam", + "bismark/alignments/logs", + "bismark/alignments/logs/Ecoli_10K_methylated_1_val_1_bismark_bt2_PE_report.txt", + "bismark/alignments/logs/SRR389222_sub1_trimmed_bismark_bt2_SE_report.txt", + "bismark/alignments/logs/SRR389222_sub2_trimmed_bismark_bt2_SE_report.txt", + "bismark/alignments/logs/SRR389222_sub3_trimmed_bismark_bt2_SE_report.txt", + "bismark/deduplicated", + "bismark/deduplicated/Ecoli_10K_methylated.deduplicated.sorted.bam", + "bismark/deduplicated/Ecoli_10K_methylated.deduplicated.sorted.bam.bai", + "bismark/deduplicated/SRR389222_sub1.deduplicated.sorted.bam", + "bismark/deduplicated/SRR389222_sub1.deduplicated.sorted.bam.bai", + "bismark/deduplicated/SRR389222_sub2.deduplicated.sorted.bam", + "bismark/deduplicated/SRR389222_sub2.deduplicated.sorted.bam.bai", + "bismark/deduplicated/SRR389222_sub3.deduplicated.sorted.bam", + "bismark/deduplicated/SRR389222_sub3.deduplicated.sorted.bam.bai", + "bismark/deduplicated/logs", + "bismark/deduplicated/logs/Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplication_report.txt", + "bismark/deduplicated/logs/SRR389222_sub1_trimmed_bismark_bt2.deduplication_report.txt", + "bismark/deduplicated/logs/SRR389222_sub2_trimmed_bismark_bt2.deduplication_report.txt", + "bismark/deduplicated/logs/SRR389222_sub3_trimmed_bismark_bt2.deduplication_report.txt", + "bismark/methylation_calls", + "bismark/methylation_calls/bedGraph", + "bismark/methylation_calls/bedGraph/Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplicated.bedGraph.gz", + "bismark/methylation_calls/bedGraph/SRR389222_sub1_trimmed_bismark_bt2.deduplicated.bedGraph.gz", + "bismark/methylation_calls/bedGraph/SRR389222_sub2_trimmed_bismark_bt2.deduplicated.bedGraph.gz", + "bismark/methylation_calls/bedGraph/SRR389222_sub3_trimmed_bismark_bt2.deduplicated.bedGraph.gz", + "bismark/methylation_calls/mbias", + "bismark/methylation_calls/mbias/Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplicated.M-bias.txt", + "bismark/methylation_calls/mbias/SRR389222_sub1_trimmed_bismark_bt2.deduplicated.M-bias.txt", + "bismark/methylation_calls/mbias/SRR389222_sub2_trimmed_bismark_bt2.deduplicated.M-bias.txt", + "bismark/methylation_calls/mbias/SRR389222_sub3_trimmed_bismark_bt2.deduplicated.M-bias.txt", + "bismark/methylation_calls/methylation_calls", + "bismark/methylation_calls/methylation_calls/CHG_OB_Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CHG_OB_SRR389222_sub1_trimmed_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CHG_OB_SRR389222_sub2_trimmed_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CHG_OB_SRR389222_sub3_trimmed_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CHG_OT_Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CHG_OT_SRR389222_sub1_trimmed_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CHG_OT_SRR389222_sub2_trimmed_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CHG_OT_SRR389222_sub3_trimmed_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CHH_OB_Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CHH_OB_SRR389222_sub1_trimmed_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CHH_OB_SRR389222_sub2_trimmed_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CHH_OB_SRR389222_sub3_trimmed_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CHH_OT_Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CHH_OT_SRR389222_sub1_trimmed_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CHH_OT_SRR389222_sub2_trimmed_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CHH_OT_SRR389222_sub3_trimmed_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CpG_OB_Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CpG_OB_SRR389222_sub1_trimmed_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CpG_OB_SRR389222_sub2_trimmed_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CpG_OB_SRR389222_sub3_trimmed_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CpG_OT_Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CpG_OT_SRR389222_sub1_trimmed_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CpG_OT_SRR389222_sub2_trimmed_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CpG_OT_SRR389222_sub3_trimmed_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_coverage", + "bismark/methylation_calls/methylation_coverage/Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplicated.bismark.cov.gz", + "bismark/methylation_calls/methylation_coverage/SRR389222_sub1_trimmed_bismark_bt2.deduplicated.bismark.cov.gz", + "bismark/methylation_calls/methylation_coverage/SRR389222_sub2_trimmed_bismark_bt2.deduplicated.bismark.cov.gz", + "bismark/methylation_calls/methylation_coverage/SRR389222_sub3_trimmed_bismark_bt2.deduplicated.bismark.cov.gz", + "bismark/methylation_calls/splitting_report", + "bismark/methylation_calls/splitting_report/Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplicated_splitting_report.txt", + "bismark/methylation_calls/splitting_report/SRR389222_sub1_trimmed_bismark_bt2.deduplicated_splitting_report.txt", + "bismark/methylation_calls/splitting_report/SRR389222_sub2_trimmed_bismark_bt2.deduplicated_splitting_report.txt", + "bismark/methylation_calls/splitting_report/SRR389222_sub3_trimmed_bismark_bt2.deduplicated_splitting_report.txt", + "bismark/reference_genome", + "bismark/reference_genome/BismarkIndex", + "bismark/reference_genome/BismarkIndex/Bisulfite_Genome", + "bismark/reference_genome/BismarkIndex/Bisulfite_Genome/CT_conversion", + "bismark/reference_genome/BismarkIndex/Bisulfite_Genome/CT_conversion/BS_CT.1.bt2", + "bismark/reference_genome/BismarkIndex/Bisulfite_Genome/CT_conversion/BS_CT.2.bt2", + "bismark/reference_genome/BismarkIndex/Bisulfite_Genome/CT_conversion/BS_CT.3.bt2", + "bismark/reference_genome/BismarkIndex/Bisulfite_Genome/CT_conversion/BS_CT.4.bt2", + "bismark/reference_genome/BismarkIndex/Bisulfite_Genome/CT_conversion/BS_CT.rev.1.bt2", + "bismark/reference_genome/BismarkIndex/Bisulfite_Genome/CT_conversion/BS_CT.rev.2.bt2", + "bismark/reference_genome/BismarkIndex/Bisulfite_Genome/CT_conversion/genome_mfa.CT_conversion.fa", + "bismark/reference_genome/BismarkIndex/Bisulfite_Genome/GA_conversion", + "bismark/reference_genome/BismarkIndex/Bisulfite_Genome/GA_conversion/BS_GA.1.bt2", + "bismark/reference_genome/BismarkIndex/Bisulfite_Genome/GA_conversion/BS_GA.2.bt2", + "bismark/reference_genome/BismarkIndex/Bisulfite_Genome/GA_conversion/BS_GA.3.bt2", + "bismark/reference_genome/BismarkIndex/Bisulfite_Genome/GA_conversion/BS_GA.4.bt2", + "bismark/reference_genome/BismarkIndex/Bisulfite_Genome/GA_conversion/BS_GA.rev.1.bt2", + "bismark/reference_genome/BismarkIndex/Bisulfite_Genome/GA_conversion/BS_GA.rev.2.bt2", + "bismark/reference_genome/BismarkIndex/Bisulfite_Genome/GA_conversion/genome_mfa.GA_conversion.fa", + "bismark/reports", + "bismark/reports/Ecoli_10K_methylated_1_val_1_bismark_bt2_PE_report.html", + "bismark/reports/SRR389222_sub1_trimmed_bismark_bt2_SE_report.html", + "bismark/reports/SRR389222_sub2_trimmed_bismark_bt2_SE_report.html", + "bismark/reports/SRR389222_sub3_trimmed_bismark_bt2_SE_report.html", + "bismark/summary", + "bismark/summary/bismark_summary_report.html", + "bismark/summary/bismark_summary_report.txt", + "fastqc", + "fastqc/Ecoli_10K_methylated_1_fastqc.html", + "fastqc/Ecoli_10K_methylated_2_fastqc.html", + "fastqc/SRR389222_sub1_fastqc.html", + "fastqc/SRR389222_sub2_fastqc.html", + "fastqc/SRR389222_sub3_fastqc.html", + "fastqc/zips", + "fastqc/zips/Ecoli_10K_methylated_1_fastqc.zip", + "fastqc/zips/Ecoli_10K_methylated_2_fastqc.zip", + "fastqc/zips/SRR389222_sub1_fastqc.zip", + "fastqc/zips/SRR389222_sub2_fastqc.zip", + "fastqc/zips/SRR389222_sub3_fastqc.zip", + "multiqc", + "multiqc/bismark", + "multiqc/bismark/multiqc_data", + "multiqc/bismark/multiqc_data/bismark-methylation-dp.txt", + "multiqc/bismark/multiqc_data/bismark_alignment.txt", + "multiqc/bismark/multiqc_data/bismark_deduplication.txt", + "multiqc/bismark/multiqc_data/bismark_mbias_CHG_R1.txt", + "multiqc/bismark/multiqc_data/bismark_mbias_CHG_R2.txt", + "multiqc/bismark/multiqc_data/bismark_mbias_CHH_R1.txt", + "multiqc/bismark/multiqc_data/bismark_mbias_CHH_R2.txt", + "multiqc/bismark/multiqc_data/bismark_mbias_CpG_R1.txt", + "multiqc/bismark/multiqc_data/bismark_mbias_CpG_R2.txt", + "multiqc/bismark/multiqc_data/bismark_strand_alignment.txt", + "multiqc/bismark/multiqc_data/cutadapt_filtered_reads_plot.txt", + "multiqc/bismark/multiqc_data/cutadapt_trimmed_sequences_plot_3_Counts.txt", + "multiqc/bismark/multiqc_data/cutadapt_trimmed_sequences_plot_3_Obs_Exp.txt", + "multiqc/bismark/multiqc_data/fastqc-status-check-heatmap.txt", + "multiqc/bismark/multiqc_data/fastqc_adapter_content_plot.txt", + "multiqc/bismark/multiqc_data/fastqc_overrepresented_sequences_plot.txt", + "multiqc/bismark/multiqc_data/fastqc_per_base_n_content_plot.txt", + "multiqc/bismark/multiqc_data/fastqc_per_base_sequence_quality_plot.txt", + "multiqc/bismark/multiqc_data/fastqc_per_sequence_gc_content_plot_Counts.txt", + "multiqc/bismark/multiqc_data/fastqc_per_sequence_gc_content_plot_Percentages.txt", + "multiqc/bismark/multiqc_data/fastqc_per_sequence_quality_scores_plot.txt", + "multiqc/bismark/multiqc_data/fastqc_sequence_counts_plot.txt", + "multiqc/bismark/multiqc_data/fastqc_sequence_duplication_levels_plot.txt", + "multiqc/bismark/multiqc_data/fastqc_top_overrepresented_sequences_table.txt", + "multiqc/bismark/multiqc_data/multiqc.log", + "multiqc/bismark/multiqc_data/multiqc_bismark_alignment.txt", + "multiqc/bismark/multiqc_data/multiqc_bismark_dedup.txt", + "multiqc/bismark/multiqc_data/multiqc_bismark_methextract.txt", + "multiqc/bismark/multiqc_data/multiqc_citations.txt", + "multiqc/bismark/multiqc_data/multiqc_cutadapt.txt", + "multiqc/bismark/multiqc_data/multiqc_data.json", + "multiqc/bismark/multiqc_data/multiqc_fastqc.txt", + "multiqc/bismark/multiqc_data/multiqc_general_stats.txt", + "multiqc/bismark/multiqc_data/multiqc_qualimap_bamqc_genome_results.txt", + "multiqc/bismark/multiqc_data/multiqc_software_versions.txt", + "multiqc/bismark/multiqc_data/multiqc_sources.txt", + "multiqc/bismark/multiqc_data/qualimap_coverage_histogram.txt", + "multiqc/bismark/multiqc_data/qualimap_gc_content.txt", + "multiqc/bismark/multiqc_data/qualimap_genome_fraction.txt", + "multiqc/bismark/multiqc_data/qualimap_insert_size.txt", + "multiqc/bismark/multiqc_plots", + "multiqc/bismark/multiqc_plots/pdf", + "multiqc/bismark/multiqc_plots/pdf/bismark-methylation-dp.pdf", + "multiqc/bismark/multiqc_plots/pdf/bismark_alignment-cnt.pdf", + "multiqc/bismark/multiqc_plots/pdf/bismark_alignment-pct.pdf", + "multiqc/bismark/multiqc_plots/pdf/bismark_deduplication-cnt.pdf", + "multiqc/bismark/multiqc_plots/pdf/bismark_deduplication-pct.pdf", + "multiqc/bismark/multiqc_plots/pdf/bismark_mbias_CHG_R1.pdf", + "multiqc/bismark/multiqc_plots/pdf/bismark_mbias_CHG_R2.pdf", + "multiqc/bismark/multiqc_plots/pdf/bismark_mbias_CHH_R1.pdf", + "multiqc/bismark/multiqc_plots/pdf/bismark_mbias_CHH_R2.pdf", + "multiqc/bismark/multiqc_plots/pdf/bismark_mbias_CpG_R1.pdf", + "multiqc/bismark/multiqc_plots/pdf/bismark_mbias_CpG_R2.pdf", + "multiqc/bismark/multiqc_plots/pdf/bismark_strand_alignment-cnt.pdf", + "multiqc/bismark/multiqc_plots/pdf/bismark_strand_alignment-pct.pdf", + "multiqc/bismark/multiqc_plots/pdf/cutadapt_filtered_reads_plot-cnt.pdf", + "multiqc/bismark/multiqc_plots/pdf/cutadapt_filtered_reads_plot-pct.pdf", + "multiqc/bismark/multiqc_plots/pdf/cutadapt_trimmed_sequences_plot_3_Counts.pdf", + "multiqc/bismark/multiqc_plots/pdf/cutadapt_trimmed_sequences_plot_3_Obs_Exp.pdf", + "multiqc/bismark/multiqc_plots/pdf/fastqc-status-check-heatmap.pdf", + "multiqc/bismark/multiqc_plots/pdf/fastqc_adapter_content_plot.pdf", + "multiqc/bismark/multiqc_plots/pdf/fastqc_overrepresented_sequences_plot.pdf", + "multiqc/bismark/multiqc_plots/pdf/fastqc_per_base_n_content_plot.pdf", + "multiqc/bismark/multiqc_plots/pdf/fastqc_per_base_sequence_quality_plot.pdf", + "multiqc/bismark/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Counts.pdf", + "multiqc/bismark/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Percentages.pdf", + "multiqc/bismark/multiqc_plots/pdf/fastqc_per_sequence_quality_scores_plot.pdf", + "multiqc/bismark/multiqc_plots/pdf/fastqc_sequence_counts_plot-cnt.pdf", + "multiqc/bismark/multiqc_plots/pdf/fastqc_sequence_counts_plot-pct.pdf", + "multiqc/bismark/multiqc_plots/pdf/fastqc_sequence_duplication_levels_plot.pdf", + "multiqc/bismark/multiqc_plots/pdf/fastqc_top_overrepresented_sequences_table.pdf", + "multiqc/bismark/multiqc_plots/pdf/general_stats_table.pdf", + "multiqc/bismark/multiqc_plots/pdf/qualimap_coverage_histogram.pdf", + "multiqc/bismark/multiqc_plots/pdf/qualimap_gc_content.pdf", + "multiqc/bismark/multiqc_plots/pdf/qualimap_genome_fraction.pdf", + "multiqc/bismark/multiqc_plots/pdf/qualimap_insert_size.pdf", + "multiqc/bismark/multiqc_plots/png", + "multiqc/bismark/multiqc_plots/png/bismark-methylation-dp.png", + "multiqc/bismark/multiqc_plots/png/bismark_alignment-cnt.png", + "multiqc/bismark/multiqc_plots/png/bismark_alignment-pct.png", + "multiqc/bismark/multiqc_plots/png/bismark_deduplication-cnt.png", + "multiqc/bismark/multiqc_plots/png/bismark_deduplication-pct.png", + "multiqc/bismark/multiqc_plots/png/bismark_mbias_CHG_R1.png", + "multiqc/bismark/multiqc_plots/png/bismark_mbias_CHG_R2.png", + "multiqc/bismark/multiqc_plots/png/bismark_mbias_CHH_R1.png", + "multiqc/bismark/multiqc_plots/png/bismark_mbias_CHH_R2.png", + "multiqc/bismark/multiqc_plots/png/bismark_mbias_CpG_R1.png", + "multiqc/bismark/multiqc_plots/png/bismark_mbias_CpG_R2.png", + "multiqc/bismark/multiqc_plots/png/bismark_strand_alignment-cnt.png", + "multiqc/bismark/multiqc_plots/png/bismark_strand_alignment-pct.png", + "multiqc/bismark/multiqc_plots/png/cutadapt_filtered_reads_plot-cnt.png", + "multiqc/bismark/multiqc_plots/png/cutadapt_filtered_reads_plot-pct.png", + "multiqc/bismark/multiqc_plots/png/cutadapt_trimmed_sequences_plot_3_Counts.png", + "multiqc/bismark/multiqc_plots/png/cutadapt_trimmed_sequences_plot_3_Obs_Exp.png", + "multiqc/bismark/multiqc_plots/png/fastqc-status-check-heatmap.png", + "multiqc/bismark/multiqc_plots/png/fastqc_adapter_content_plot.png", + "multiqc/bismark/multiqc_plots/png/fastqc_overrepresented_sequences_plot.png", + "multiqc/bismark/multiqc_plots/png/fastqc_per_base_n_content_plot.png", + "multiqc/bismark/multiqc_plots/png/fastqc_per_base_sequence_quality_plot.png", + "multiqc/bismark/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Counts.png", + "multiqc/bismark/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Percentages.png", + "multiqc/bismark/multiqc_plots/png/fastqc_per_sequence_quality_scores_plot.png", + "multiqc/bismark/multiqc_plots/png/fastqc_sequence_counts_plot-cnt.png", + "multiqc/bismark/multiqc_plots/png/fastqc_sequence_counts_plot-pct.png", + "multiqc/bismark/multiqc_plots/png/fastqc_sequence_duplication_levels_plot.png", + "multiqc/bismark/multiqc_plots/png/fastqc_top_overrepresented_sequences_table.png", + "multiqc/bismark/multiqc_plots/png/general_stats_table.png", + "multiqc/bismark/multiqc_plots/png/qualimap_coverage_histogram.png", + "multiqc/bismark/multiqc_plots/png/qualimap_gc_content.png", + "multiqc/bismark/multiqc_plots/png/qualimap_genome_fraction.png", + "multiqc/bismark/multiqc_plots/png/qualimap_insert_size.png", + "multiqc/bismark/multiqc_plots/svg", + "multiqc/bismark/multiqc_plots/svg/bismark-methylation-dp.svg", + "multiqc/bismark/multiqc_plots/svg/bismark_alignment-cnt.svg", + "multiqc/bismark/multiqc_plots/svg/bismark_alignment-pct.svg", + "multiqc/bismark/multiqc_plots/svg/bismark_deduplication-cnt.svg", + "multiqc/bismark/multiqc_plots/svg/bismark_deduplication-pct.svg", + "multiqc/bismark/multiqc_plots/svg/bismark_mbias_CHG_R1.svg", + "multiqc/bismark/multiqc_plots/svg/bismark_mbias_CHG_R2.svg", + "multiqc/bismark/multiqc_plots/svg/bismark_mbias_CHH_R1.svg", + "multiqc/bismark/multiqc_plots/svg/bismark_mbias_CHH_R2.svg", + "multiqc/bismark/multiqc_plots/svg/bismark_mbias_CpG_R1.svg", + "multiqc/bismark/multiqc_plots/svg/bismark_mbias_CpG_R2.svg", + "multiqc/bismark/multiqc_plots/svg/bismark_strand_alignment-cnt.svg", + "multiqc/bismark/multiqc_plots/svg/bismark_strand_alignment-pct.svg", + "multiqc/bismark/multiqc_plots/svg/cutadapt_filtered_reads_plot-cnt.svg", + "multiqc/bismark/multiqc_plots/svg/cutadapt_filtered_reads_plot-pct.svg", + "multiqc/bismark/multiqc_plots/svg/cutadapt_trimmed_sequences_plot_3_Counts.svg", + "multiqc/bismark/multiqc_plots/svg/cutadapt_trimmed_sequences_plot_3_Obs_Exp.svg", + "multiqc/bismark/multiqc_plots/svg/fastqc-status-check-heatmap.svg", + "multiqc/bismark/multiqc_plots/svg/fastqc_adapter_content_plot.svg", + "multiqc/bismark/multiqc_plots/svg/fastqc_overrepresented_sequences_plot.svg", + "multiqc/bismark/multiqc_plots/svg/fastqc_per_base_n_content_plot.svg", + "multiqc/bismark/multiqc_plots/svg/fastqc_per_base_sequence_quality_plot.svg", + "multiqc/bismark/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Counts.svg", + "multiqc/bismark/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Percentages.svg", + "multiqc/bismark/multiqc_plots/svg/fastqc_per_sequence_quality_scores_plot.svg", + "multiqc/bismark/multiqc_plots/svg/fastqc_sequence_counts_plot-cnt.svg", + "multiqc/bismark/multiqc_plots/svg/fastqc_sequence_counts_plot-pct.svg", + "multiqc/bismark/multiqc_plots/svg/fastqc_sequence_duplication_levels_plot.svg", + "multiqc/bismark/multiqc_plots/svg/fastqc_top_overrepresented_sequences_table.svg", + "multiqc/bismark/multiqc_plots/svg/general_stats_table.svg", + "multiqc/bismark/multiqc_plots/svg/qualimap_coverage_histogram.svg", + "multiqc/bismark/multiqc_plots/svg/qualimap_gc_content.svg", + "multiqc/bismark/multiqc_plots/svg/qualimap_genome_fraction.svg", + "multiqc/bismark/multiqc_plots/svg/qualimap_insert_size.svg", + "multiqc/bismark/multiqc_report.html", + "pipeline_info", + "pipeline_info/nf_core_pipeline_software_mqc_versions.yml", + "qualimap", + "qualimap/Ecoli_10K_methylated", + "qualimap/Ecoli_10K_methylated/css", + "qualimap/Ecoli_10K_methylated/css/agogo.css", + "qualimap/Ecoli_10K_methylated/css/ajax-loader.gif", + "qualimap/Ecoli_10K_methylated/css/basic.css", + "qualimap/Ecoli_10K_methylated/css/bgfooter.png", + "qualimap/Ecoli_10K_methylated/css/bgtop.png", + "qualimap/Ecoli_10K_methylated/css/comment-bright.png", + "qualimap/Ecoli_10K_methylated/css/comment-close.png", + "qualimap/Ecoli_10K_methylated/css/comment.png", + "qualimap/Ecoli_10K_methylated/css/doctools.js", + "qualimap/Ecoli_10K_methylated/css/down-pressed.png", + "qualimap/Ecoli_10K_methylated/css/down.png", + "qualimap/Ecoli_10K_methylated/css/file.png", + "qualimap/Ecoli_10K_methylated/css/jquery.js", + "qualimap/Ecoli_10K_methylated/css/minus.png", + "qualimap/Ecoli_10K_methylated/css/plus.png", + "qualimap/Ecoli_10K_methylated/css/pygments.css", + "qualimap/Ecoli_10K_methylated/css/qualimap_logo_small.png", + "qualimap/Ecoli_10K_methylated/css/report.css", + "qualimap/Ecoli_10K_methylated/css/searchtools.js", + "qualimap/Ecoli_10K_methylated/css/underscore.js", + "qualimap/Ecoli_10K_methylated/css/up-pressed.png", + "qualimap/Ecoli_10K_methylated/css/up.png", + "qualimap/Ecoli_10K_methylated/css/websupport.js", + "qualimap/Ecoli_10K_methylated/genome_results.txt", + "qualimap/Ecoli_10K_methylated/images_qualimapReport", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_coverage_0to50_histogram.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_coverage_across_reference.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_coverage_histogram.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_coverage_quotes.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_gc_content_per_window.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_homopolymer_indels.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_insert_size_across_reference.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_insert_size_histogram.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_mapping_quality_across_reference.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_mapping_quality_histogram.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_reads_content_per_read_position.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_uniq_read_starts_histogram.png", + "qualimap/Ecoli_10K_methylated/qualimapReport.html", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/coverage_across_reference.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/coverage_histogram.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/duplication_rate_histogram.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/genome_fraction_coverage.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/homopolymer_indels.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/insert_size_across_reference.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/insert_size_histogram.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/mapped_reads_gc-content_distribution.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/mapped_reads_nucleotide_content.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/mapping_quality_across_reference.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/mapping_quality_histogram.txt", + "qualimap/SRR389222_sub1", + "qualimap/SRR389222_sub1/css", + "qualimap/SRR389222_sub1/css/agogo.css", + "qualimap/SRR389222_sub1/css/ajax-loader.gif", + "qualimap/SRR389222_sub1/css/basic.css", + "qualimap/SRR389222_sub1/css/bgfooter.png", + "qualimap/SRR389222_sub1/css/bgtop.png", + "qualimap/SRR389222_sub1/css/comment-bright.png", + "qualimap/SRR389222_sub1/css/comment-close.png", + "qualimap/SRR389222_sub1/css/comment.png", + "qualimap/SRR389222_sub1/css/doctools.js", + "qualimap/SRR389222_sub1/css/down-pressed.png", + "qualimap/SRR389222_sub1/css/down.png", + "qualimap/SRR389222_sub1/css/file.png", + "qualimap/SRR389222_sub1/css/jquery.js", + "qualimap/SRR389222_sub1/css/minus.png", + "qualimap/SRR389222_sub1/css/plus.png", + "qualimap/SRR389222_sub1/css/pygments.css", + "qualimap/SRR389222_sub1/css/qualimap_logo_small.png", + "qualimap/SRR389222_sub1/css/report.css", + "qualimap/SRR389222_sub1/css/searchtools.js", + "qualimap/SRR389222_sub1/css/underscore.js", + "qualimap/SRR389222_sub1/css/up-pressed.png", + "qualimap/SRR389222_sub1/css/up.png", + "qualimap/SRR389222_sub1/css/websupport.js", + "qualimap/SRR389222_sub1/genome_results.txt", + "qualimap/SRR389222_sub1/images_qualimapReport", + "qualimap/SRR389222_sub1/images_qualimapReport/genome_coverage_0to50_histogram.png", + "qualimap/SRR389222_sub1/images_qualimapReport/genome_coverage_across_reference.png", + "qualimap/SRR389222_sub1/images_qualimapReport/genome_coverage_histogram.png", + "qualimap/SRR389222_sub1/images_qualimapReport/genome_coverage_quotes.png", + "qualimap/SRR389222_sub1/images_qualimapReport/genome_gc_content_per_window.png", + "qualimap/SRR389222_sub1/images_qualimapReport/genome_mapping_quality_across_reference.png", + "qualimap/SRR389222_sub1/images_qualimapReport/genome_mapping_quality_histogram.png", + "qualimap/SRR389222_sub1/images_qualimapReport/genome_reads_content_per_read_position.png", + "qualimap/SRR389222_sub1/images_qualimapReport/genome_uniq_read_starts_histogram.png", + "qualimap/SRR389222_sub1/qualimapReport.html", + "qualimap/SRR389222_sub1/raw_data_qualimapReport", + "qualimap/SRR389222_sub1/raw_data_qualimapReport/coverage_across_reference.txt", + "qualimap/SRR389222_sub1/raw_data_qualimapReport/coverage_histogram.txt", + "qualimap/SRR389222_sub1/raw_data_qualimapReport/duplication_rate_histogram.txt", + "qualimap/SRR389222_sub1/raw_data_qualimapReport/genome_fraction_coverage.txt", + "qualimap/SRR389222_sub1/raw_data_qualimapReport/mapped_reads_gc-content_distribution.txt", + "qualimap/SRR389222_sub1/raw_data_qualimapReport/mapped_reads_nucleotide_content.txt", + "qualimap/SRR389222_sub1/raw_data_qualimapReport/mapping_quality_across_reference.txt", + "qualimap/SRR389222_sub1/raw_data_qualimapReport/mapping_quality_histogram.txt", + "qualimap/SRR389222_sub2", + "qualimap/SRR389222_sub2/css", + "qualimap/SRR389222_sub2/css/agogo.css", + "qualimap/SRR389222_sub2/css/ajax-loader.gif", + "qualimap/SRR389222_sub2/css/basic.css", + "qualimap/SRR389222_sub2/css/bgfooter.png", + "qualimap/SRR389222_sub2/css/bgtop.png", + "qualimap/SRR389222_sub2/css/comment-bright.png", + "qualimap/SRR389222_sub2/css/comment-close.png", + "qualimap/SRR389222_sub2/css/comment.png", + "qualimap/SRR389222_sub2/css/doctools.js", + "qualimap/SRR389222_sub2/css/down-pressed.png", + "qualimap/SRR389222_sub2/css/down.png", + "qualimap/SRR389222_sub2/css/file.png", + "qualimap/SRR389222_sub2/css/jquery.js", + "qualimap/SRR389222_sub2/css/minus.png", + "qualimap/SRR389222_sub2/css/plus.png", + "qualimap/SRR389222_sub2/css/pygments.css", + "qualimap/SRR389222_sub2/css/qualimap_logo_small.png", + "qualimap/SRR389222_sub2/css/report.css", + "qualimap/SRR389222_sub2/css/searchtools.js", + "qualimap/SRR389222_sub2/css/underscore.js", + "qualimap/SRR389222_sub2/css/up-pressed.png", + "qualimap/SRR389222_sub2/css/up.png", + "qualimap/SRR389222_sub2/css/websupport.js", + "qualimap/SRR389222_sub2/genome_results.txt", + "qualimap/SRR389222_sub2/images_qualimapReport", + "qualimap/SRR389222_sub2/images_qualimapReport/genome_coverage_0to50_histogram.png", + "qualimap/SRR389222_sub2/images_qualimapReport/genome_coverage_across_reference.png", + "qualimap/SRR389222_sub2/images_qualimapReport/genome_coverage_histogram.png", + "qualimap/SRR389222_sub2/images_qualimapReport/genome_coverage_quotes.png", + "qualimap/SRR389222_sub2/images_qualimapReport/genome_gc_content_per_window.png", + "qualimap/SRR389222_sub2/images_qualimapReport/genome_mapping_quality_across_reference.png", + "qualimap/SRR389222_sub2/images_qualimapReport/genome_mapping_quality_histogram.png", + "qualimap/SRR389222_sub2/images_qualimapReport/genome_reads_content_per_read_position.png", + "qualimap/SRR389222_sub2/images_qualimapReport/genome_uniq_read_starts_histogram.png", + "qualimap/SRR389222_sub2/qualimapReport.html", + "qualimap/SRR389222_sub2/raw_data_qualimapReport", + "qualimap/SRR389222_sub2/raw_data_qualimapReport/coverage_across_reference.txt", + "qualimap/SRR389222_sub2/raw_data_qualimapReport/coverage_histogram.txt", + "qualimap/SRR389222_sub2/raw_data_qualimapReport/duplication_rate_histogram.txt", + "qualimap/SRR389222_sub2/raw_data_qualimapReport/genome_fraction_coverage.txt", + "qualimap/SRR389222_sub2/raw_data_qualimapReport/mapped_reads_gc-content_distribution.txt", + "qualimap/SRR389222_sub2/raw_data_qualimapReport/mapped_reads_nucleotide_content.txt", + "qualimap/SRR389222_sub2/raw_data_qualimapReport/mapping_quality_across_reference.txt", + "qualimap/SRR389222_sub2/raw_data_qualimapReport/mapping_quality_histogram.txt", + "qualimap/SRR389222_sub3", + "qualimap/SRR389222_sub3/css", + "qualimap/SRR389222_sub3/css/agogo.css", + "qualimap/SRR389222_sub3/css/ajax-loader.gif", + "qualimap/SRR389222_sub3/css/basic.css", + "qualimap/SRR389222_sub3/css/bgfooter.png", + "qualimap/SRR389222_sub3/css/bgtop.png", + "qualimap/SRR389222_sub3/css/comment-bright.png", + "qualimap/SRR389222_sub3/css/comment-close.png", + "qualimap/SRR389222_sub3/css/comment.png", + "qualimap/SRR389222_sub3/css/doctools.js", + "qualimap/SRR389222_sub3/css/down-pressed.png", + "qualimap/SRR389222_sub3/css/down.png", + "qualimap/SRR389222_sub3/css/file.png", + "qualimap/SRR389222_sub3/css/jquery.js", + "qualimap/SRR389222_sub3/css/minus.png", + "qualimap/SRR389222_sub3/css/plus.png", + "qualimap/SRR389222_sub3/css/pygments.css", + "qualimap/SRR389222_sub3/css/qualimap_logo_small.png", + "qualimap/SRR389222_sub3/css/report.css", + "qualimap/SRR389222_sub3/css/searchtools.js", + "qualimap/SRR389222_sub3/css/underscore.js", + "qualimap/SRR389222_sub3/css/up-pressed.png", + "qualimap/SRR389222_sub3/css/up.png", + "qualimap/SRR389222_sub3/css/websupport.js", + "qualimap/SRR389222_sub3/genome_results.txt", + "qualimap/SRR389222_sub3/images_qualimapReport", + "qualimap/SRR389222_sub3/images_qualimapReport/genome_coverage_0to50_histogram.png", + "qualimap/SRR389222_sub3/images_qualimapReport/genome_coverage_across_reference.png", + "qualimap/SRR389222_sub3/images_qualimapReport/genome_coverage_histogram.png", + "qualimap/SRR389222_sub3/images_qualimapReport/genome_coverage_quotes.png", + "qualimap/SRR389222_sub3/images_qualimapReport/genome_gc_content_per_window.png", + "qualimap/SRR389222_sub3/images_qualimapReport/genome_mapping_quality_across_reference.png", + "qualimap/SRR389222_sub3/images_qualimapReport/genome_mapping_quality_histogram.png", + "qualimap/SRR389222_sub3/images_qualimapReport/genome_reads_content_per_read_position.png", + "qualimap/SRR389222_sub3/images_qualimapReport/genome_uniq_read_starts_histogram.png", + "qualimap/SRR389222_sub3/qualimapReport.html", + "qualimap/SRR389222_sub3/raw_data_qualimapReport", + "qualimap/SRR389222_sub3/raw_data_qualimapReport/coverage_across_reference.txt", + "qualimap/SRR389222_sub3/raw_data_qualimapReport/coverage_histogram.txt", + "qualimap/SRR389222_sub3/raw_data_qualimapReport/duplication_rate_histogram.txt", + "qualimap/SRR389222_sub3/raw_data_qualimapReport/genome_fraction_coverage.txt", + "qualimap/SRR389222_sub3/raw_data_qualimapReport/mapped_reads_gc-content_distribution.txt", + "qualimap/SRR389222_sub3/raw_data_qualimapReport/mapped_reads_nucleotide_content.txt", + "qualimap/SRR389222_sub3/raw_data_qualimapReport/mapping_quality_across_reference.txt", + "qualimap/SRR389222_sub3/raw_data_qualimapReport/mapping_quality_histogram.txt", + "trimgalore", + "trimgalore/fastqc", + "trimgalore/fastqc/Ecoli_10K_methylated_1_val_1_fastqc.html", + "trimgalore/fastqc/Ecoli_10K_methylated_2_val_2_fastqc.html", + "trimgalore/fastqc/SRR389222_sub1_trimmed_fastqc.html", + "trimgalore/fastqc/SRR389222_sub2_trimmed_fastqc.html", + "trimgalore/fastqc/SRR389222_sub3_trimmed_fastqc.html", + "trimgalore/fastqc/zips", + "trimgalore/fastqc/zips/Ecoli_10K_methylated_1_val_1_fastqc.zip", + "trimgalore/fastqc/zips/Ecoli_10K_methylated_2_val_2_fastqc.zip", + "trimgalore/fastqc/zips/SRR389222_sub1_trimmed_fastqc.zip", + "trimgalore/fastqc/zips/SRR389222_sub2_trimmed_fastqc.zip", + "trimgalore/fastqc/zips/SRR389222_sub3_trimmed_fastqc.zip", + "trimgalore/logs", + "trimgalore/logs/Ecoli_10K_methylated_1.fastq.gz_trimming_report.txt", + "trimgalore/logs/Ecoli_10K_methylated_2.fastq.gz_trimming_report.txt", + "trimgalore/logs/SRR389222_sub1.fastq.gz_trimming_report.txt", + "trimgalore/logs/SRR389222_sub2.fastq.gz_trimming_report.txt", + "trimgalore/logs/SRR389222_sub3.fastq.gz_trimming_report.txt" + ], + [ + "Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplicated.bedGraph.gz:md5,58c9ba98d0638c26a30233b006a81172", + "SRR389222_sub1_trimmed_bismark_bt2.deduplicated.bedGraph.gz:md5,d31df76c1c9128299367ebfe740357b9", + "SRR389222_sub2_trimmed_bismark_bt2.deduplicated.bedGraph.gz:md5,010f32001bbc7805f8e041f3ef0d9ea9", + "SRR389222_sub3_trimmed_bismark_bt2.deduplicated.bedGraph.gz:md5,d42e09af121ae14f6e0de5779e317b0b", + "Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplicated.M-bias.txt:md5,29f3b882a51b63ce77d3d9c69b0e5f85", + "SRR389222_sub1_trimmed_bismark_bt2.deduplicated.M-bias.txt:md5,ed28b3cce432eecfae73bc4a071ec4ee", + "SRR389222_sub2_trimmed_bismark_bt2.deduplicated.M-bias.txt:md5,b06ce0084e54193ff8c9b9dd0ec9757b", + "SRR389222_sub3_trimmed_bismark_bt2.deduplicated.M-bias.txt:md5,b865b7fb6e1225feeb6aef3372ef0b1d", + "CHG_OB_Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplicated.txt.gz:md5,b58ae93fe7981837fd34903112196656", + "CHG_OB_SRR389222_sub1_trimmed_bismark_bt2.deduplicated.txt.gz:md5,5c177e6f00dfc6e2335a55c6b70efa0c", + "CHG_OB_SRR389222_sub2_trimmed_bismark_bt2.deduplicated.txt.gz:md5,583bf95e8dbd3d684bef595e31453bd1", + "CHG_OB_SRR389222_sub3_trimmed_bismark_bt2.deduplicated.txt.gz:md5,5cd486ff48be8f8fa0d4e35710be2071", + "CHG_OT_Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplicated.txt.gz:md5,b508e40e494dfd9fc2c2017286cd3fe9", + "CHG_OT_SRR389222_sub1_trimmed_bismark_bt2.deduplicated.txt.gz:md5,483aefddd7bf8426850109f077fa966b", + "CHG_OT_SRR389222_sub2_trimmed_bismark_bt2.deduplicated.txt.gz:md5,11f966904de0a5e5c38f2091e33ac8f3", + "CHG_OT_SRR389222_sub3_trimmed_bismark_bt2.deduplicated.txt.gz:md5,3fdd17711f819c844f39d52d4951b9cc", + "CHH_OB_Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplicated.txt.gz:md5,ad6f9f5def9bb01a7c516f7da1b22b91", + "CHH_OB_SRR389222_sub1_trimmed_bismark_bt2.deduplicated.txt.gz:md5,9469ac28e4369032b855ce1a794a56a4", + "CHH_OB_SRR389222_sub2_trimmed_bismark_bt2.deduplicated.txt.gz:md5,3c48fa14cc07ca041a35efd978ef877a", + "CHH_OB_SRR389222_sub3_trimmed_bismark_bt2.deduplicated.txt.gz:md5,68b5405d8de91c7046ab46fc5c42ee30", + "CHH_OT_Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplicated.txt.gz:md5,112a5d2beba2f8ebda273ca3bec98d88", + "CHH_OT_SRR389222_sub1_trimmed_bismark_bt2.deduplicated.txt.gz:md5,aa6ed81df517be3a61e787dea65282a9", + "CHH_OT_SRR389222_sub2_trimmed_bismark_bt2.deduplicated.txt.gz:md5,3ecf0ca20803514bc823e449d392f274", + "CHH_OT_SRR389222_sub3_trimmed_bismark_bt2.deduplicated.txt.gz:md5,7ed9df0d59ee786d06bf291efcdd3a48", + "CpG_OB_Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplicated.txt.gz:md5,bbe0a5f137b8768036aced610d17c666", + "CpG_OB_SRR389222_sub1_trimmed_bismark_bt2.deduplicated.txt.gz:md5,f0404fc1fc18c7ff58e8766b405239ed", + "CpG_OB_SRR389222_sub2_trimmed_bismark_bt2.deduplicated.txt.gz:md5,2f0dd539df6b5943496158ccb62edc7b", + "CpG_OB_SRR389222_sub3_trimmed_bismark_bt2.deduplicated.txt.gz:md5,0bd78a1708fb8126af553c94ab8c8371", + "CpG_OT_Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplicated.txt.gz:md5,8bb4cb59815cc9e260dcfa332fcb5ae9", + "CpG_OT_SRR389222_sub1_trimmed_bismark_bt2.deduplicated.txt.gz:md5,d031ae437256c87d12ed9d9049c30c9a", + "CpG_OT_SRR389222_sub2_trimmed_bismark_bt2.deduplicated.txt.gz:md5,5a6e4dfe3e90164ecf8ef6c7917ed9f2", + "CpG_OT_SRR389222_sub3_trimmed_bismark_bt2.deduplicated.txt.gz:md5,984aea9c77f8171f0e0a86d5289a180b", + "Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplicated.bismark.cov.gz:md5,8e6ba6fe66416d73e7f94b4da9ca77b1", + "SRR389222_sub1_trimmed_bismark_bt2.deduplicated.bismark.cov.gz:md5,5377d9fff4f1bf5b98dc2310fbeb6ec9", + "SRR389222_sub2_trimmed_bismark_bt2.deduplicated.bismark.cov.gz:md5,4713bda7b4f2bb16ce23853aea763cbd", + "SRR389222_sub3_trimmed_bismark_bt2.deduplicated.bismark.cov.gz:md5,f9a07c3e11e0caad6df3cd2e4d94d8ac", + "Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplicated_splitting_report.txt:md5,f41a6752f220b1cf567ac04e71fb730a", + "SRR389222_sub1_trimmed_bismark_bt2.deduplicated_splitting_report.txt:md5,94f18ee855566ef9842b4909e3d3dd88", + "SRR389222_sub2_trimmed_bismark_bt2.deduplicated_splitting_report.txt:md5,7c3526e022e97e49677f7428badef420", + "SRR389222_sub3_trimmed_bismark_bt2.deduplicated_splitting_report.txt:md5,e8d2bf21731b6ed517c56385061b1dee", + "BS_CT.1.bt2:md5,d53bef7d951c7d08e327944581c911eb", + "BS_CT.2.bt2:md5,752a03fc364115fc910e5a28ae154382", + "BS_CT.3.bt2:md5,b41e72eefad74e8ede411c78a5bd5dee", + "BS_CT.4.bt2:md5,02b3d1855a67fd9cbb4c411406a22fde", + "BS_CT.rev.1.bt2:md5,52ae603fff473b3b25eecd36c533edb9", + "BS_CT.rev.2.bt2:md5,0e290e05f7dae065cae54e29ed97afe5", + "genome_mfa.CT_conversion.fa:md5,4dd181b65f1f3549f4132c9a3759eee8", + "BS_GA.1.bt2:md5,9aff51b1712758b891b0c427a988977f", + "BS_GA.2.bt2:md5,579241d95941538b2e75bbdb6cfaa73d", + "BS_GA.3.bt2:md5,b41e72eefad74e8ede411c78a5bd5dee", + "BS_GA.4.bt2:md5,6b64fa496ffa2af2af235e1c87f06a25", + "BS_GA.rev.1.bt2:md5,dabf2d6f80ba7e8fc96dfdc203f6bbfd", + "BS_GA.rev.2.bt2:md5,fac2f8b39b0e15dec7aa79a0ecf12b49", + "genome_mfa.GA_conversion.fa:md5,3dee732bc344fd620c3a7322f52c6a5f", + "bismark-methylation-dp.txt:md5,dcbe642c42e31d8e480a2e46b97bbd45", + "bismark_alignment.txt:md5,544a74ea0f32005b0c886af79a6fad5b", + "bismark_deduplication.txt:md5,db387240d46c09b0b952ed8b54855e76", + "bismark_mbias_CHG_R1.txt:md5,1a2a02f5f48e312a7cfa91ec253c1f49", + "bismark_mbias_CHG_R2.txt:md5,1f6523b48bda086d29f70265187e7475", + "bismark_mbias_CHH_R1.txt:md5,bcd25ac0c71b5ec120e948bc165f54d4", + "bismark_mbias_CHH_R2.txt:md5,5e32a8b39118c3592b088a0b69ae1f21", + "bismark_mbias_CpG_R1.txt:md5,0da9724e4a303148c39b6f4c18b8876b", + "bismark_mbias_CpG_R2.txt:md5,46cca816038163d0f629fed7ada212b8", + "bismark_strand_alignment.txt:md5,a8738f981bab911b95ffe9d3434f2b08", + "cutadapt_filtered_reads_plot.txt:md5,ff1b6d4011a5be5410b9404f7ff56c56", + "cutadapt_trimmed_sequences_plot_3_Counts.txt:md5,57d07c19b0c30dc88df96c30bedcdc33", + "cutadapt_trimmed_sequences_plot_3_Obs_Exp.txt:md5,1e5ca4193f8290c5c812334d03615b41", + "fastqc-status-check-heatmap.txt:md5,218c2a7efbb9c02f652fa78fc739c866", + "fastqc_adapter_content_plot.txt:md5,48d8bd5ece984a74972ce0a0e814dd07", + "fastqc_overrepresented_sequences_plot.txt:md5,9c4b7064950b5b2c486d556984f21e9e", + "fastqc_per_base_n_content_plot.txt:md5,019d5cd4f61a31f4e7016140ca8ee36e", + "fastqc_per_base_sequence_quality_plot.txt:md5,e4c7d522114eab9bc9101e7ee9d83c8f", + "fastqc_per_sequence_gc_content_plot_Counts.txt:md5,302659bee8a02b6a38b24fe25f8eaa87", + "fastqc_per_sequence_gc_content_plot_Percentages.txt:md5,c75b396eb5dda8682fb1652a9b2e92a3", + "fastqc_per_sequence_quality_scores_plot.txt:md5,548c593f4a8be2d8627fc3bd1c280611", + "fastqc_sequence_counts_plot.txt:md5,58eeeb06bc9dcc1764c7daf0847d6bbf", + "fastqc_sequence_duplication_levels_plot.txt:md5,9e5712db9aa39b5754ea1e0c49cfff15", + "fastqc_top_overrepresented_sequences_table.txt:md5,6dfc5334a09c05392ea17369aa742d01", + "multiqc_bismark_alignment.txt:md5,40ab86041f508d3f1a63bde20cab5440", + "multiqc_bismark_dedup.txt:md5,d09a5de4d81a3207efb6a8937d060e46", + "multiqc_bismark_methextract.txt:md5,825f57cdf45203406e583beb495afccc", + "multiqc_citations.txt:md5,b9d42869faad581bd963d3d3bb490026", + "multiqc_cutadapt.txt:md5,f7a61369244b1e040d264e6913b8a839", + "qualimap_coverage_histogram.txt:md5,7cd194077fe839edf034b44cc73dd024", + "qualimap_gc_content.txt:md5,4f6ec70d9fb71ffe5f2f99f44fe5ef0c", + "qualimap_genome_fraction.txt:md5,3e528946a376ae752b57adaaa73f5cdf", + "qualimap_insert_size.txt:md5,8327f805cbaf1c61ca3128b6c16c7dfd", + "genome_results.txt:md5,e2a57140a56e0e4a1905c70084ccbb41", + "genome_results.txt:md5,69a3dc8568127c50b0decb29757230ee", + "genome_results.txt:md5,13d933d61649b837de72a418d5126c1b", + "genome_results.txt:md5,235830239cfc43d8e84c049b1e9b180a" + ], + [ + [ + "Ecoli_10K_methylated.sorted.bam", + "a54ab7c96f9523a4ccd25fd69f6905f8" + ], + [ + "Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.bam", + "fad4414ebdaafdb15e0584b393400b27" + ], + [ + "SRR389222_sub1.sorted.bam", + "fa0f34c0d0d4d321b89973f23e033aa1" + ], + [ + "SRR389222_sub1_trimmed_bismark_bt2.bam", + "934288bfc59d40ff7e73706d07815fb" + ], + [ + "SRR389222_sub2.sorted.bam", + "d347232a4fc5b1e02e98254b6ce97ae6" + ], + [ + "SRR389222_sub2_trimmed_bismark_bt2.bam", + "a94aeadc2acebd0a46647bb95acf2d55" + ], + [ + "SRR389222_sub3.sorted.bam", + "29648af285a183ae2194790b5a325186" + ], + [ + "SRR389222_sub3_trimmed_bismark_bt2.bam", + "6579ca7e49b9d7760ea5b3f3456739a1" + ], + [ + "Ecoli_10K_methylated.deduplicated.sorted.bam", + "a54ab7c96f9523a4ccd25fd69f6905f8" + ], + [ + "SRR389222_sub1.deduplicated.sorted.bam", + "3f11ef5fbbda3797fd6217728e4f00d3" + ], + [ + "SRR389222_sub2.deduplicated.sorted.bam", + "b01f29fc1d8d46922a69df09c636b4c4" + ], + [ + "SRR389222_sub3.deduplicated.sorted.bam", + "347195c04c9ffd2a2b10967a6682fc69" + ] + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-21T18:10:42.065837136" + } +} \ No newline at end of file diff --git a/tests/bismark_skip_deduplication.nf.test b/tests/bismark_skip_deduplication.nf.test new file mode 100644 index 00000000..055b77e6 --- /dev/null +++ b/tests/bismark_skip_deduplication.nf.test @@ -0,0 +1,40 @@ +nextflow_pipeline { + + name "Test Workflow main.nf" + script "../main.nf" + config "./nextflow.config" + + test("Params: bismark | skip_deduplication") { + when { + params { + skip_deduplication = true + outdir = "$outputDir" + } + } + + then { + // stable_name: All files + folders in ${params.outdir}/ with a stable name + def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) + // stable_path: All files in ${params.outdir}/ with stable content + def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') + // bam_files: All bam files + def bam_files = getAllFilesFromDir(params.outdir, include: ['**/*.bam']) + assertAll( + { assert workflow.success}, + { assert snapshot( + // Number of tasks + workflow.trace.succeeded().size(), + // pipeline versions.yml file for multiqc from which Nextflow version is removed because we tests pipelines on multiple Nextflow versions + removeNextflowVersion("$outputDir/pipeline_info/nf_core_pipeline_software_mqc_versions.yml"), + // All stable path name + stable_name, + // All files with stable contents + stable_path, + // All bam files + bam_files.collect{ file -> [ file.getName(), bam(file.toString()).getReadsMD5() ] } + ).match() } + ) + } + } + +} diff --git a/tests/bismark_skip_deduplication.nf.test.snap b/tests/bismark_skip_deduplication.nf.test.snap new file mode 100644 index 00000000..13bf50eb --- /dev/null +++ b/tests/bismark_skip_deduplication.nf.test.snap @@ -0,0 +1,586 @@ +{ + "Params: bismark | skip_deduplication": { + "content": [ + 39, + { + "BISMARK_ALIGN": { + "bismark": "0.24.2" + }, + "BISMARK_GENOMEPREPARATION": { + "bismark": "0.24.2" + }, + "FASTQC": { + "fastqc": "0.12.1" + }, + "QUALIMAP_BAMQC": { + "qualimap": 2.3 + }, + "TRIMGALORE": { + "trimgalore": "0.6.10", + "cutadapt": 4.2 + }, + "Workflow": { + "nf-core/methylseq": "v2.7.0" + } + }, + [ + "bismark", + "bismark/alignments", + "bismark/alignments/Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.bam", + "bismark/alignments/SRR389222_sub1_trimmed_bismark_bt2.bam", + "bismark/alignments/SRR389222_sub2_trimmed_bismark_bt2.bam", + "bismark/alignments/SRR389222_sub3_trimmed_bismark_bt2.bam", + "bismark/alignments/logs", + "bismark/alignments/logs/Ecoli_10K_methylated_1_val_1_bismark_bt2_PE_report.txt", + "bismark/alignments/logs/SRR389222_sub1_trimmed_bismark_bt2_SE_report.txt", + "bismark/alignments/logs/SRR389222_sub2_trimmed_bismark_bt2_SE_report.txt", + "bismark/alignments/logs/SRR389222_sub3_trimmed_bismark_bt2_SE_report.txt", + "bismark/deduplicated", + "bismark/deduplicated/Ecoli_10K_methylated.deduplicated.sorted.bam", + "bismark/deduplicated/Ecoli_10K_methylated.deduplicated.sorted.bam.bai", + "bismark/deduplicated/SRR389222_sub1.deduplicated.sorted.bam", + "bismark/deduplicated/SRR389222_sub1.deduplicated.sorted.bam.bai", + "bismark/deduplicated/SRR389222_sub2.deduplicated.sorted.bam", + "bismark/deduplicated/SRR389222_sub2.deduplicated.sorted.bam.bai", + "bismark/deduplicated/SRR389222_sub3.deduplicated.sorted.bam", + "bismark/deduplicated/SRR389222_sub3.deduplicated.sorted.bam.bai", + "bismark/methylation_calls", + "bismark/methylation_calls/bedGraph", + "bismark/methylation_calls/bedGraph/Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.bedGraph.gz", + "bismark/methylation_calls/bedGraph/SRR389222_sub1_trimmed_bismark_bt2.bedGraph.gz", + "bismark/methylation_calls/bedGraph/SRR389222_sub2_trimmed_bismark_bt2.bedGraph.gz", + "bismark/methylation_calls/bedGraph/SRR389222_sub3_trimmed_bismark_bt2.bedGraph.gz", + "bismark/methylation_calls/mbias", + "bismark/methylation_calls/mbias/Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.M-bias.txt", + "bismark/methylation_calls/mbias/SRR389222_sub1_trimmed_bismark_bt2.M-bias.txt", + "bismark/methylation_calls/mbias/SRR389222_sub2_trimmed_bismark_bt2.M-bias.txt", + "bismark/methylation_calls/mbias/SRR389222_sub3_trimmed_bismark_bt2.M-bias.txt", + "bismark/methylation_calls/methylation_calls", + "bismark/methylation_calls/methylation_calls/CHG_OB_Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.txt.gz", + "bismark/methylation_calls/methylation_calls/CHG_OB_SRR389222_sub1_trimmed_bismark_bt2.txt.gz", + "bismark/methylation_calls/methylation_calls/CHG_OB_SRR389222_sub2_trimmed_bismark_bt2.txt.gz", + "bismark/methylation_calls/methylation_calls/CHG_OB_SRR389222_sub3_trimmed_bismark_bt2.txt.gz", + "bismark/methylation_calls/methylation_calls/CHG_OT_Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.txt.gz", + "bismark/methylation_calls/methylation_calls/CHG_OT_SRR389222_sub1_trimmed_bismark_bt2.txt.gz", + "bismark/methylation_calls/methylation_calls/CHG_OT_SRR389222_sub2_trimmed_bismark_bt2.txt.gz", + "bismark/methylation_calls/methylation_calls/CHG_OT_SRR389222_sub3_trimmed_bismark_bt2.txt.gz", + "bismark/methylation_calls/methylation_calls/CHH_OB_Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.txt.gz", + "bismark/methylation_calls/methylation_calls/CHH_OB_SRR389222_sub1_trimmed_bismark_bt2.txt.gz", + "bismark/methylation_calls/methylation_calls/CHH_OB_SRR389222_sub2_trimmed_bismark_bt2.txt.gz", + "bismark/methylation_calls/methylation_calls/CHH_OB_SRR389222_sub3_trimmed_bismark_bt2.txt.gz", + "bismark/methylation_calls/methylation_calls/CHH_OT_Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.txt.gz", + "bismark/methylation_calls/methylation_calls/CHH_OT_SRR389222_sub1_trimmed_bismark_bt2.txt.gz", + "bismark/methylation_calls/methylation_calls/CHH_OT_SRR389222_sub2_trimmed_bismark_bt2.txt.gz", + "bismark/methylation_calls/methylation_calls/CHH_OT_SRR389222_sub3_trimmed_bismark_bt2.txt.gz", + "bismark/methylation_calls/methylation_calls/CpG_OB_Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.txt.gz", + "bismark/methylation_calls/methylation_calls/CpG_OB_SRR389222_sub1_trimmed_bismark_bt2.txt.gz", + "bismark/methylation_calls/methylation_calls/CpG_OB_SRR389222_sub2_trimmed_bismark_bt2.txt.gz", + "bismark/methylation_calls/methylation_calls/CpG_OB_SRR389222_sub3_trimmed_bismark_bt2.txt.gz", + "bismark/methylation_calls/methylation_calls/CpG_OT_Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.txt.gz", + "bismark/methylation_calls/methylation_calls/CpG_OT_SRR389222_sub1_trimmed_bismark_bt2.txt.gz", + "bismark/methylation_calls/methylation_calls/CpG_OT_SRR389222_sub2_trimmed_bismark_bt2.txt.gz", + "bismark/methylation_calls/methylation_calls/CpG_OT_SRR389222_sub3_trimmed_bismark_bt2.txt.gz", + "bismark/methylation_calls/methylation_coverage", + "bismark/methylation_calls/methylation_coverage/Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.bismark.cov.gz", + "bismark/methylation_calls/methylation_coverage/SRR389222_sub1_trimmed_bismark_bt2.bismark.cov.gz", + "bismark/methylation_calls/methylation_coverage/SRR389222_sub2_trimmed_bismark_bt2.bismark.cov.gz", + "bismark/methylation_calls/methylation_coverage/SRR389222_sub3_trimmed_bismark_bt2.bismark.cov.gz", + "bismark/methylation_calls/splitting_report", + "bismark/methylation_calls/splitting_report/Ecoli_10K_methylated_1_val_1_bismark_bt2_pe_splitting_report.txt", + "bismark/methylation_calls/splitting_report/SRR389222_sub1_trimmed_bismark_bt2_splitting_report.txt", + "bismark/methylation_calls/splitting_report/SRR389222_sub2_trimmed_bismark_bt2_splitting_report.txt", + "bismark/methylation_calls/splitting_report/SRR389222_sub3_trimmed_bismark_bt2_splitting_report.txt", + "bismark/reports", + "bismark/reports/Ecoli_10K_methylated_1_val_1_bismark_bt2_PE_report.html", + "bismark/reports/SRR389222_sub1_trimmed_bismark_bt2_SE_report.html", + "bismark/reports/SRR389222_sub2_trimmed_bismark_bt2_SE_report.html", + "bismark/reports/SRR389222_sub3_trimmed_bismark_bt2_SE_report.html", + "bismark/summary", + "bismark/summary/bismark_summary_report.html", + "bismark/summary/bismark_summary_report.txt", + "fastqc", + "fastqc/Ecoli_10K_methylated_1_fastqc.html", + "fastqc/Ecoli_10K_methylated_2_fastqc.html", + "fastqc/SRR389222_sub1_fastqc.html", + "fastqc/SRR389222_sub2_fastqc.html", + "fastqc/SRR389222_sub3_fastqc.html", + "fastqc/zips", + "fastqc/zips/Ecoli_10K_methylated_1_fastqc.zip", + "fastqc/zips/Ecoli_10K_methylated_2_fastqc.zip", + "fastqc/zips/SRR389222_sub1_fastqc.zip", + "fastqc/zips/SRR389222_sub2_fastqc.zip", + "fastqc/zips/SRR389222_sub3_fastqc.zip", + "multiqc", + "multiqc/bismark", + "multiqc/bismark/multiqc_data", + "multiqc/bismark/multiqc_data/bismark-methylation-dp.txt", + "multiqc/bismark/multiqc_data/bismark_alignment.txt", + "multiqc/bismark/multiqc_data/bismark_mbias_CHG_R1.txt", + "multiqc/bismark/multiqc_data/bismark_mbias_CHG_R2.txt", + "multiqc/bismark/multiqc_data/bismark_mbias_CHH_R1.txt", + "multiqc/bismark/multiqc_data/bismark_mbias_CHH_R2.txt", + "multiqc/bismark/multiqc_data/bismark_mbias_CpG_R1.txt", + "multiqc/bismark/multiqc_data/bismark_mbias_CpG_R2.txt", + "multiqc/bismark/multiqc_data/bismark_strand_alignment.txt", + "multiqc/bismark/multiqc_data/cutadapt_filtered_reads_plot.txt", + "multiqc/bismark/multiqc_data/cutadapt_trimmed_sequences_plot_3_Counts.txt", + "multiqc/bismark/multiqc_data/cutadapt_trimmed_sequences_plot_3_Obs_Exp.txt", + "multiqc/bismark/multiqc_data/fastqc-status-check-heatmap.txt", + "multiqc/bismark/multiqc_data/fastqc_adapter_content_plot.txt", + "multiqc/bismark/multiqc_data/fastqc_overrepresented_sequences_plot.txt", + "multiqc/bismark/multiqc_data/fastqc_per_base_n_content_plot.txt", + "multiqc/bismark/multiqc_data/fastqc_per_base_sequence_quality_plot.txt", + "multiqc/bismark/multiqc_data/fastqc_per_sequence_gc_content_plot_Counts.txt", + "multiqc/bismark/multiqc_data/fastqc_per_sequence_gc_content_plot_Percentages.txt", + "multiqc/bismark/multiqc_data/fastqc_per_sequence_quality_scores_plot.txt", + "multiqc/bismark/multiqc_data/fastqc_sequence_counts_plot.txt", + "multiqc/bismark/multiqc_data/fastqc_sequence_duplication_levels_plot.txt", + "multiqc/bismark/multiqc_data/fastqc_top_overrepresented_sequences_table.txt", + "multiqc/bismark/multiqc_data/multiqc.log", + "multiqc/bismark/multiqc_data/multiqc_bismark_alignment.txt", + "multiqc/bismark/multiqc_data/multiqc_bismark_methextract.txt", + "multiqc/bismark/multiqc_data/multiqc_citations.txt", + "multiqc/bismark/multiqc_data/multiqc_cutadapt.txt", + "multiqc/bismark/multiqc_data/multiqc_data.json", + "multiqc/bismark/multiqc_data/multiqc_fastqc.txt", + "multiqc/bismark/multiqc_data/multiqc_general_stats.txt", + "multiqc/bismark/multiqc_data/multiqc_qualimap_bamqc_genome_results.txt", + "multiqc/bismark/multiqc_data/multiqc_software_versions.txt", + "multiqc/bismark/multiqc_data/multiqc_sources.txt", + "multiqc/bismark/multiqc_data/qualimap_coverage_histogram.txt", + "multiqc/bismark/multiqc_data/qualimap_gc_content.txt", + "multiqc/bismark/multiqc_data/qualimap_genome_fraction.txt", + "multiqc/bismark/multiqc_data/qualimap_insert_size.txt", + "multiqc/bismark/multiqc_plots", + "multiqc/bismark/multiqc_plots/pdf", + "multiqc/bismark/multiqc_plots/pdf/bismark-methylation-dp.pdf", + "multiqc/bismark/multiqc_plots/pdf/bismark_alignment-cnt.pdf", + "multiqc/bismark/multiqc_plots/pdf/bismark_alignment-pct.pdf", + "multiqc/bismark/multiqc_plots/pdf/bismark_mbias_CHG_R1.pdf", + "multiqc/bismark/multiqc_plots/pdf/bismark_mbias_CHG_R2.pdf", + "multiqc/bismark/multiqc_plots/pdf/bismark_mbias_CHH_R1.pdf", + "multiqc/bismark/multiqc_plots/pdf/bismark_mbias_CHH_R2.pdf", + "multiqc/bismark/multiqc_plots/pdf/bismark_mbias_CpG_R1.pdf", + "multiqc/bismark/multiqc_plots/pdf/bismark_mbias_CpG_R2.pdf", + "multiqc/bismark/multiqc_plots/pdf/bismark_strand_alignment-cnt.pdf", + "multiqc/bismark/multiqc_plots/pdf/bismark_strand_alignment-pct.pdf", + "multiqc/bismark/multiqc_plots/pdf/cutadapt_filtered_reads_plot-cnt.pdf", + "multiqc/bismark/multiqc_plots/pdf/cutadapt_filtered_reads_plot-pct.pdf", + "multiqc/bismark/multiqc_plots/pdf/cutadapt_trimmed_sequences_plot_3_Counts.pdf", + "multiqc/bismark/multiqc_plots/pdf/cutadapt_trimmed_sequences_plot_3_Obs_Exp.pdf", + "multiqc/bismark/multiqc_plots/pdf/fastqc-status-check-heatmap.pdf", + "multiqc/bismark/multiqc_plots/pdf/fastqc_adapter_content_plot.pdf", + "multiqc/bismark/multiqc_plots/pdf/fastqc_overrepresented_sequences_plot.pdf", + "multiqc/bismark/multiqc_plots/pdf/fastqc_per_base_n_content_plot.pdf", + "multiqc/bismark/multiqc_plots/pdf/fastqc_per_base_sequence_quality_plot.pdf", + "multiqc/bismark/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Counts.pdf", + "multiqc/bismark/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Percentages.pdf", + "multiqc/bismark/multiqc_plots/pdf/fastqc_per_sequence_quality_scores_plot.pdf", + "multiqc/bismark/multiqc_plots/pdf/fastqc_sequence_counts_plot-cnt.pdf", + "multiqc/bismark/multiqc_plots/pdf/fastqc_sequence_counts_plot-pct.pdf", + "multiqc/bismark/multiqc_plots/pdf/fastqc_sequence_duplication_levels_plot.pdf", + "multiqc/bismark/multiqc_plots/pdf/fastqc_top_overrepresented_sequences_table.pdf", + "multiqc/bismark/multiqc_plots/pdf/general_stats_table.pdf", + "multiqc/bismark/multiqc_plots/pdf/qualimap_coverage_histogram.pdf", + "multiqc/bismark/multiqc_plots/pdf/qualimap_gc_content.pdf", + "multiqc/bismark/multiqc_plots/pdf/qualimap_genome_fraction.pdf", + "multiqc/bismark/multiqc_plots/pdf/qualimap_insert_size.pdf", + "multiqc/bismark/multiqc_plots/png", + "multiqc/bismark/multiqc_plots/png/bismark-methylation-dp.png", + "multiqc/bismark/multiqc_plots/png/bismark_alignment-cnt.png", + "multiqc/bismark/multiqc_plots/png/bismark_alignment-pct.png", + "multiqc/bismark/multiqc_plots/png/bismark_mbias_CHG_R1.png", + "multiqc/bismark/multiqc_plots/png/bismark_mbias_CHG_R2.png", + "multiqc/bismark/multiqc_plots/png/bismark_mbias_CHH_R1.png", + "multiqc/bismark/multiqc_plots/png/bismark_mbias_CHH_R2.png", + "multiqc/bismark/multiqc_plots/png/bismark_mbias_CpG_R1.png", + "multiqc/bismark/multiqc_plots/png/bismark_mbias_CpG_R2.png", + "multiqc/bismark/multiqc_plots/png/bismark_strand_alignment-cnt.png", + "multiqc/bismark/multiqc_plots/png/bismark_strand_alignment-pct.png", + "multiqc/bismark/multiqc_plots/png/cutadapt_filtered_reads_plot-cnt.png", + "multiqc/bismark/multiqc_plots/png/cutadapt_filtered_reads_plot-pct.png", + "multiqc/bismark/multiqc_plots/png/cutadapt_trimmed_sequences_plot_3_Counts.png", + "multiqc/bismark/multiqc_plots/png/cutadapt_trimmed_sequences_plot_3_Obs_Exp.png", + "multiqc/bismark/multiqc_plots/png/fastqc-status-check-heatmap.png", + "multiqc/bismark/multiqc_plots/png/fastqc_adapter_content_plot.png", + "multiqc/bismark/multiqc_plots/png/fastqc_overrepresented_sequences_plot.png", + "multiqc/bismark/multiqc_plots/png/fastqc_per_base_n_content_plot.png", + "multiqc/bismark/multiqc_plots/png/fastqc_per_base_sequence_quality_plot.png", + "multiqc/bismark/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Counts.png", + "multiqc/bismark/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Percentages.png", + "multiqc/bismark/multiqc_plots/png/fastqc_per_sequence_quality_scores_plot.png", + "multiqc/bismark/multiqc_plots/png/fastqc_sequence_counts_plot-cnt.png", + "multiqc/bismark/multiqc_plots/png/fastqc_sequence_counts_plot-pct.png", + "multiqc/bismark/multiqc_plots/png/fastqc_sequence_duplication_levels_plot.png", + "multiqc/bismark/multiqc_plots/png/fastqc_top_overrepresented_sequences_table.png", + "multiqc/bismark/multiqc_plots/png/general_stats_table.png", + "multiqc/bismark/multiqc_plots/png/qualimap_coverage_histogram.png", + "multiqc/bismark/multiqc_plots/png/qualimap_gc_content.png", + "multiqc/bismark/multiqc_plots/png/qualimap_genome_fraction.png", + "multiqc/bismark/multiqc_plots/png/qualimap_insert_size.png", + "multiqc/bismark/multiqc_plots/svg", + "multiqc/bismark/multiqc_plots/svg/bismark-methylation-dp.svg", + "multiqc/bismark/multiqc_plots/svg/bismark_alignment-cnt.svg", + "multiqc/bismark/multiqc_plots/svg/bismark_alignment-pct.svg", + "multiqc/bismark/multiqc_plots/svg/bismark_mbias_CHG_R1.svg", + "multiqc/bismark/multiqc_plots/svg/bismark_mbias_CHG_R2.svg", + "multiqc/bismark/multiqc_plots/svg/bismark_mbias_CHH_R1.svg", + "multiqc/bismark/multiqc_plots/svg/bismark_mbias_CHH_R2.svg", + "multiqc/bismark/multiqc_plots/svg/bismark_mbias_CpG_R1.svg", + "multiqc/bismark/multiqc_plots/svg/bismark_mbias_CpG_R2.svg", + "multiqc/bismark/multiqc_plots/svg/bismark_strand_alignment-cnt.svg", + "multiqc/bismark/multiqc_plots/svg/bismark_strand_alignment-pct.svg", + "multiqc/bismark/multiqc_plots/svg/cutadapt_filtered_reads_plot-cnt.svg", + "multiqc/bismark/multiqc_plots/svg/cutadapt_filtered_reads_plot-pct.svg", + "multiqc/bismark/multiqc_plots/svg/cutadapt_trimmed_sequences_plot_3_Counts.svg", + "multiqc/bismark/multiqc_plots/svg/cutadapt_trimmed_sequences_plot_3_Obs_Exp.svg", + "multiqc/bismark/multiqc_plots/svg/fastqc-status-check-heatmap.svg", + "multiqc/bismark/multiqc_plots/svg/fastqc_adapter_content_plot.svg", + "multiqc/bismark/multiqc_plots/svg/fastqc_overrepresented_sequences_plot.svg", + "multiqc/bismark/multiqc_plots/svg/fastqc_per_base_n_content_plot.svg", + "multiqc/bismark/multiqc_plots/svg/fastqc_per_base_sequence_quality_plot.svg", + "multiqc/bismark/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Counts.svg", + "multiqc/bismark/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Percentages.svg", + "multiqc/bismark/multiqc_plots/svg/fastqc_per_sequence_quality_scores_plot.svg", + "multiqc/bismark/multiqc_plots/svg/fastqc_sequence_counts_plot-cnt.svg", + "multiqc/bismark/multiqc_plots/svg/fastqc_sequence_counts_plot-pct.svg", + "multiqc/bismark/multiqc_plots/svg/fastqc_sequence_duplication_levels_plot.svg", + "multiqc/bismark/multiqc_plots/svg/fastqc_top_overrepresented_sequences_table.svg", + "multiqc/bismark/multiqc_plots/svg/general_stats_table.svg", + "multiqc/bismark/multiqc_plots/svg/qualimap_coverage_histogram.svg", + "multiqc/bismark/multiqc_plots/svg/qualimap_gc_content.svg", + "multiqc/bismark/multiqc_plots/svg/qualimap_genome_fraction.svg", + "multiqc/bismark/multiqc_plots/svg/qualimap_insert_size.svg", + "multiqc/bismark/multiqc_report.html", + "pipeline_info", + "pipeline_info/nf_core_pipeline_software_mqc_versions.yml", + "qualimap", + "qualimap/Ecoli_10K_methylated", + "qualimap/Ecoli_10K_methylated/css", + "qualimap/Ecoli_10K_methylated/css/agogo.css", + "qualimap/Ecoli_10K_methylated/css/ajax-loader.gif", + "qualimap/Ecoli_10K_methylated/css/basic.css", + "qualimap/Ecoli_10K_methylated/css/bgfooter.png", + "qualimap/Ecoli_10K_methylated/css/bgtop.png", + "qualimap/Ecoli_10K_methylated/css/comment-bright.png", + "qualimap/Ecoli_10K_methylated/css/comment-close.png", + "qualimap/Ecoli_10K_methylated/css/comment.png", + "qualimap/Ecoli_10K_methylated/css/doctools.js", + "qualimap/Ecoli_10K_methylated/css/down-pressed.png", + "qualimap/Ecoli_10K_methylated/css/down.png", + "qualimap/Ecoli_10K_methylated/css/file.png", + "qualimap/Ecoli_10K_methylated/css/jquery.js", + "qualimap/Ecoli_10K_methylated/css/minus.png", + "qualimap/Ecoli_10K_methylated/css/plus.png", + "qualimap/Ecoli_10K_methylated/css/pygments.css", + "qualimap/Ecoli_10K_methylated/css/qualimap_logo_small.png", + "qualimap/Ecoli_10K_methylated/css/report.css", + "qualimap/Ecoli_10K_methylated/css/searchtools.js", + "qualimap/Ecoli_10K_methylated/css/underscore.js", + "qualimap/Ecoli_10K_methylated/css/up-pressed.png", + "qualimap/Ecoli_10K_methylated/css/up.png", + "qualimap/Ecoli_10K_methylated/css/websupport.js", + "qualimap/Ecoli_10K_methylated/genome_results.txt", + "qualimap/Ecoli_10K_methylated/images_qualimapReport", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_coverage_0to50_histogram.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_coverage_across_reference.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_coverage_histogram.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_coverage_quotes.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_gc_content_per_window.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_homopolymer_indels.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_insert_size_across_reference.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_insert_size_histogram.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_mapping_quality_across_reference.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_mapping_quality_histogram.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_reads_content_per_read_position.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_uniq_read_starts_histogram.png", + "qualimap/Ecoli_10K_methylated/qualimapReport.html", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/coverage_across_reference.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/coverage_histogram.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/duplication_rate_histogram.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/genome_fraction_coverage.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/homopolymer_indels.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/insert_size_across_reference.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/insert_size_histogram.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/mapped_reads_gc-content_distribution.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/mapped_reads_nucleotide_content.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/mapping_quality_across_reference.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/mapping_quality_histogram.txt", + "qualimap/SRR389222_sub1", + "qualimap/SRR389222_sub1/css", + "qualimap/SRR389222_sub1/css/agogo.css", + "qualimap/SRR389222_sub1/css/ajax-loader.gif", + "qualimap/SRR389222_sub1/css/basic.css", + "qualimap/SRR389222_sub1/css/bgfooter.png", + "qualimap/SRR389222_sub1/css/bgtop.png", + "qualimap/SRR389222_sub1/css/comment-bright.png", + "qualimap/SRR389222_sub1/css/comment-close.png", + "qualimap/SRR389222_sub1/css/comment.png", + "qualimap/SRR389222_sub1/css/doctools.js", + "qualimap/SRR389222_sub1/css/down-pressed.png", + "qualimap/SRR389222_sub1/css/down.png", + "qualimap/SRR389222_sub1/css/file.png", + "qualimap/SRR389222_sub1/css/jquery.js", + "qualimap/SRR389222_sub1/css/minus.png", + "qualimap/SRR389222_sub1/css/plus.png", + "qualimap/SRR389222_sub1/css/pygments.css", + "qualimap/SRR389222_sub1/css/qualimap_logo_small.png", + "qualimap/SRR389222_sub1/css/report.css", + "qualimap/SRR389222_sub1/css/searchtools.js", + "qualimap/SRR389222_sub1/css/underscore.js", + "qualimap/SRR389222_sub1/css/up-pressed.png", + "qualimap/SRR389222_sub1/css/up.png", + "qualimap/SRR389222_sub1/css/websupport.js", + "qualimap/SRR389222_sub1/genome_results.txt", + "qualimap/SRR389222_sub1/images_qualimapReport", + "qualimap/SRR389222_sub1/images_qualimapReport/genome_coverage_0to50_histogram.png", + "qualimap/SRR389222_sub1/images_qualimapReport/genome_coverage_across_reference.png", + "qualimap/SRR389222_sub1/images_qualimapReport/genome_coverage_histogram.png", + "qualimap/SRR389222_sub1/images_qualimapReport/genome_coverage_quotes.png", + "qualimap/SRR389222_sub1/images_qualimapReport/genome_gc_content_per_window.png", + "qualimap/SRR389222_sub1/images_qualimapReport/genome_mapping_quality_across_reference.png", + "qualimap/SRR389222_sub1/images_qualimapReport/genome_mapping_quality_histogram.png", + "qualimap/SRR389222_sub1/images_qualimapReport/genome_reads_content_per_read_position.png", + "qualimap/SRR389222_sub1/images_qualimapReport/genome_uniq_read_starts_histogram.png", + "qualimap/SRR389222_sub1/qualimapReport.html", + "qualimap/SRR389222_sub1/raw_data_qualimapReport", + "qualimap/SRR389222_sub1/raw_data_qualimapReport/coverage_across_reference.txt", + "qualimap/SRR389222_sub1/raw_data_qualimapReport/coverage_histogram.txt", + "qualimap/SRR389222_sub1/raw_data_qualimapReport/duplication_rate_histogram.txt", + "qualimap/SRR389222_sub1/raw_data_qualimapReport/genome_fraction_coverage.txt", + "qualimap/SRR389222_sub1/raw_data_qualimapReport/mapped_reads_gc-content_distribution.txt", + "qualimap/SRR389222_sub1/raw_data_qualimapReport/mapped_reads_nucleotide_content.txt", + "qualimap/SRR389222_sub1/raw_data_qualimapReport/mapping_quality_across_reference.txt", + "qualimap/SRR389222_sub1/raw_data_qualimapReport/mapping_quality_histogram.txt", + "qualimap/SRR389222_sub2", + "qualimap/SRR389222_sub2/css", + "qualimap/SRR389222_sub2/css/agogo.css", + "qualimap/SRR389222_sub2/css/ajax-loader.gif", + "qualimap/SRR389222_sub2/css/basic.css", + "qualimap/SRR389222_sub2/css/bgfooter.png", + "qualimap/SRR389222_sub2/css/bgtop.png", + "qualimap/SRR389222_sub2/css/comment-bright.png", + "qualimap/SRR389222_sub2/css/comment-close.png", + "qualimap/SRR389222_sub2/css/comment.png", + "qualimap/SRR389222_sub2/css/doctools.js", + "qualimap/SRR389222_sub2/css/down-pressed.png", + "qualimap/SRR389222_sub2/css/down.png", + "qualimap/SRR389222_sub2/css/file.png", + "qualimap/SRR389222_sub2/css/jquery.js", + "qualimap/SRR389222_sub2/css/minus.png", + "qualimap/SRR389222_sub2/css/plus.png", + "qualimap/SRR389222_sub2/css/pygments.css", + "qualimap/SRR389222_sub2/css/qualimap_logo_small.png", + "qualimap/SRR389222_sub2/css/report.css", + "qualimap/SRR389222_sub2/css/searchtools.js", + "qualimap/SRR389222_sub2/css/underscore.js", + "qualimap/SRR389222_sub2/css/up-pressed.png", + "qualimap/SRR389222_sub2/css/up.png", + "qualimap/SRR389222_sub2/css/websupport.js", + "qualimap/SRR389222_sub2/genome_results.txt", + "qualimap/SRR389222_sub2/images_qualimapReport", + "qualimap/SRR389222_sub2/images_qualimapReport/genome_coverage_0to50_histogram.png", + "qualimap/SRR389222_sub2/images_qualimapReport/genome_coverage_across_reference.png", + "qualimap/SRR389222_sub2/images_qualimapReport/genome_coverage_histogram.png", + "qualimap/SRR389222_sub2/images_qualimapReport/genome_coverage_quotes.png", + "qualimap/SRR389222_sub2/images_qualimapReport/genome_gc_content_per_window.png", + "qualimap/SRR389222_sub2/images_qualimapReport/genome_mapping_quality_across_reference.png", + "qualimap/SRR389222_sub2/images_qualimapReport/genome_mapping_quality_histogram.png", + "qualimap/SRR389222_sub2/images_qualimapReport/genome_reads_content_per_read_position.png", + "qualimap/SRR389222_sub2/images_qualimapReport/genome_uniq_read_starts_histogram.png", + "qualimap/SRR389222_sub2/qualimapReport.html", + "qualimap/SRR389222_sub2/raw_data_qualimapReport", + "qualimap/SRR389222_sub2/raw_data_qualimapReport/coverage_across_reference.txt", + "qualimap/SRR389222_sub2/raw_data_qualimapReport/coverage_histogram.txt", + "qualimap/SRR389222_sub2/raw_data_qualimapReport/duplication_rate_histogram.txt", + "qualimap/SRR389222_sub2/raw_data_qualimapReport/genome_fraction_coverage.txt", + "qualimap/SRR389222_sub2/raw_data_qualimapReport/mapped_reads_gc-content_distribution.txt", + "qualimap/SRR389222_sub2/raw_data_qualimapReport/mapped_reads_nucleotide_content.txt", + "qualimap/SRR389222_sub2/raw_data_qualimapReport/mapping_quality_across_reference.txt", + "qualimap/SRR389222_sub2/raw_data_qualimapReport/mapping_quality_histogram.txt", + "qualimap/SRR389222_sub3", + "qualimap/SRR389222_sub3/css", + "qualimap/SRR389222_sub3/css/agogo.css", + "qualimap/SRR389222_sub3/css/ajax-loader.gif", + "qualimap/SRR389222_sub3/css/basic.css", + "qualimap/SRR389222_sub3/css/bgfooter.png", + "qualimap/SRR389222_sub3/css/bgtop.png", + "qualimap/SRR389222_sub3/css/comment-bright.png", + "qualimap/SRR389222_sub3/css/comment-close.png", + "qualimap/SRR389222_sub3/css/comment.png", + "qualimap/SRR389222_sub3/css/doctools.js", + "qualimap/SRR389222_sub3/css/down-pressed.png", + "qualimap/SRR389222_sub3/css/down.png", + "qualimap/SRR389222_sub3/css/file.png", + "qualimap/SRR389222_sub3/css/jquery.js", + "qualimap/SRR389222_sub3/css/minus.png", + "qualimap/SRR389222_sub3/css/plus.png", + "qualimap/SRR389222_sub3/css/pygments.css", + "qualimap/SRR389222_sub3/css/qualimap_logo_small.png", + "qualimap/SRR389222_sub3/css/report.css", + "qualimap/SRR389222_sub3/css/searchtools.js", + "qualimap/SRR389222_sub3/css/underscore.js", + "qualimap/SRR389222_sub3/css/up-pressed.png", + "qualimap/SRR389222_sub3/css/up.png", + "qualimap/SRR389222_sub3/css/websupport.js", + "qualimap/SRR389222_sub3/genome_results.txt", + "qualimap/SRR389222_sub3/images_qualimapReport", + "qualimap/SRR389222_sub3/images_qualimapReport/genome_coverage_0to50_histogram.png", + "qualimap/SRR389222_sub3/images_qualimapReport/genome_coverage_across_reference.png", + "qualimap/SRR389222_sub3/images_qualimapReport/genome_coverage_histogram.png", + "qualimap/SRR389222_sub3/images_qualimapReport/genome_coverage_quotes.png", + "qualimap/SRR389222_sub3/images_qualimapReport/genome_gc_content_per_window.png", + "qualimap/SRR389222_sub3/images_qualimapReport/genome_mapping_quality_across_reference.png", + "qualimap/SRR389222_sub3/images_qualimapReport/genome_mapping_quality_histogram.png", + "qualimap/SRR389222_sub3/images_qualimapReport/genome_reads_content_per_read_position.png", + "qualimap/SRR389222_sub3/images_qualimapReport/genome_uniq_read_starts_histogram.png", + "qualimap/SRR389222_sub3/qualimapReport.html", + "qualimap/SRR389222_sub3/raw_data_qualimapReport", + "qualimap/SRR389222_sub3/raw_data_qualimapReport/coverage_across_reference.txt", + "qualimap/SRR389222_sub3/raw_data_qualimapReport/coverage_histogram.txt", + "qualimap/SRR389222_sub3/raw_data_qualimapReport/duplication_rate_histogram.txt", + "qualimap/SRR389222_sub3/raw_data_qualimapReport/genome_fraction_coverage.txt", + "qualimap/SRR389222_sub3/raw_data_qualimapReport/mapped_reads_gc-content_distribution.txt", + "qualimap/SRR389222_sub3/raw_data_qualimapReport/mapped_reads_nucleotide_content.txt", + "qualimap/SRR389222_sub3/raw_data_qualimapReport/mapping_quality_across_reference.txt", + "qualimap/SRR389222_sub3/raw_data_qualimapReport/mapping_quality_histogram.txt", + "trimgalore", + "trimgalore/fastqc", + "trimgalore/fastqc/Ecoli_10K_methylated_1_val_1_fastqc.html", + "trimgalore/fastqc/Ecoli_10K_methylated_2_val_2_fastqc.html", + "trimgalore/fastqc/SRR389222_sub1_trimmed_fastqc.html", + "trimgalore/fastqc/SRR389222_sub2_trimmed_fastqc.html", + "trimgalore/fastqc/SRR389222_sub3_trimmed_fastqc.html", + "trimgalore/fastqc/zips", + "trimgalore/fastqc/zips/Ecoli_10K_methylated_1_val_1_fastqc.zip", + "trimgalore/fastqc/zips/Ecoli_10K_methylated_2_val_2_fastqc.zip", + "trimgalore/fastqc/zips/SRR389222_sub1_trimmed_fastqc.zip", + "trimgalore/fastqc/zips/SRR389222_sub2_trimmed_fastqc.zip", + "trimgalore/fastqc/zips/SRR389222_sub3_trimmed_fastqc.zip", + "trimgalore/logs", + "trimgalore/logs/Ecoli_10K_methylated_1.fastq.gz_trimming_report.txt", + "trimgalore/logs/Ecoli_10K_methylated_2.fastq.gz_trimming_report.txt", + "trimgalore/logs/SRR389222_sub1.fastq.gz_trimming_report.txt", + "trimgalore/logs/SRR389222_sub2.fastq.gz_trimming_report.txt", + "trimgalore/logs/SRR389222_sub3.fastq.gz_trimming_report.txt" + ], + [ + "Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.bedGraph.gz:md5,58c9ba98d0638c26a30233b006a81172", + "SRR389222_sub1_trimmed_bismark_bt2.bedGraph.gz:md5,0108abdb44e4310a3fe9d4bd2f55f913", + "SRR389222_sub2_trimmed_bismark_bt2.bedGraph.gz:md5,f51aa1ad49280a4ffdd1eb325c6363e6", + "SRR389222_sub3_trimmed_bismark_bt2.bedGraph.gz:md5,5b2f311ebc1126ebeb12b0a18b8b2b33", + "Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.M-bias.txt:md5,29f3b882a51b63ce77d3d9c69b0e5f85", + "SRR389222_sub1_trimmed_bismark_bt2.M-bias.txt:md5,ead045c91970fe379e1d6d8a42bb19a7", + "SRR389222_sub2_trimmed_bismark_bt2.M-bias.txt:md5,86d40e07741f29758abfe4e872fc385e", + "SRR389222_sub3_trimmed_bismark_bt2.M-bias.txt:md5,b63a471b3e204c7ef64ee5e5e5244d85", + "CHG_OB_Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.txt.gz:md5,b58ae93fe7981837fd34903112196656", + "CHG_OB_SRR389222_sub1_trimmed_bismark_bt2.txt.gz:md5,11ae58ebe6513375468ebe63a521d6e3", + "CHG_OB_SRR389222_sub2_trimmed_bismark_bt2.txt.gz:md5,d18a5f9f9dce641c4783a791786d7e10", + "CHG_OB_SRR389222_sub3_trimmed_bismark_bt2.txt.gz:md5,3103bf53d8a508bd804228541ee797d4", + "CHG_OT_Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.txt.gz:md5,b508e40e494dfd9fc2c2017286cd3fe9", + "CHG_OT_SRR389222_sub1_trimmed_bismark_bt2.txt.gz:md5,f90c654732cec2d7fb7db26ba295b9c1", + "CHG_OT_SRR389222_sub2_trimmed_bismark_bt2.txt.gz:md5,3470eb39e40bb959b7fff245fd4906de", + "CHG_OT_SRR389222_sub3_trimmed_bismark_bt2.txt.gz:md5,2b7b1ba9ad8c594082e4b3d119e72baa", + "CHH_OB_Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.txt.gz:md5,ad6f9f5def9bb01a7c516f7da1b22b91", + "CHH_OB_SRR389222_sub1_trimmed_bismark_bt2.txt.gz:md5,12e9e4ebf59e6b23fb52f4872f534251", + "CHH_OB_SRR389222_sub2_trimmed_bismark_bt2.txt.gz:md5,eb74ce6ca3d2365a3492d7cd633ec89d", + "CHH_OB_SRR389222_sub3_trimmed_bismark_bt2.txt.gz:md5,fd24239ed9873abd4f596f0054c01225", + "CHH_OT_Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.txt.gz:md5,112a5d2beba2f8ebda273ca3bec98d88", + "CHH_OT_SRR389222_sub1_trimmed_bismark_bt2.txt.gz:md5,c8825a84f9b067fd0fe19bf1b4a0e67a", + "CHH_OT_SRR389222_sub2_trimmed_bismark_bt2.txt.gz:md5,dca615c563347000610cfc64ca85c20e", + "CHH_OT_SRR389222_sub3_trimmed_bismark_bt2.txt.gz:md5,b9e9f3a8d7446dc6e27aaffbd4272045", + "CpG_OB_Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.txt.gz:md5,bbe0a5f137b8768036aced610d17c666", + "CpG_OB_SRR389222_sub1_trimmed_bismark_bt2.txt.gz:md5,21d614f45ecf703117550cb2eebfa3d5", + "CpG_OB_SRR389222_sub2_trimmed_bismark_bt2.txt.gz:md5,3c65bdf0fa9f3e2e85693d3b4050b7d1", + "CpG_OB_SRR389222_sub3_trimmed_bismark_bt2.txt.gz:md5,2b702094e51d21790417d015d178d6f2", + "CpG_OT_Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.txt.gz:md5,8bb4cb59815cc9e260dcfa332fcb5ae9", + "CpG_OT_SRR389222_sub1_trimmed_bismark_bt2.txt.gz:md5,ccfa83de5f72f884503ad8fb1302ab46", + "CpG_OT_SRR389222_sub2_trimmed_bismark_bt2.txt.gz:md5,af8d322a5f661ef046c4e87dddbe05ca", + "CpG_OT_SRR389222_sub3_trimmed_bismark_bt2.txt.gz:md5,9abaf163c60b1004150b47cee5dfabce", + "Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.bismark.cov.gz:md5,8e6ba6fe66416d73e7f94b4da9ca77b1", + "SRR389222_sub1_trimmed_bismark_bt2.bismark.cov.gz:md5,0a55ad364ec74208a55349235461c065", + "SRR389222_sub2_trimmed_bismark_bt2.bismark.cov.gz:md5,68b4cc7edcc98355579efebdfd0c393e", + "SRR389222_sub3_trimmed_bismark_bt2.bismark.cov.gz:md5,bd5a5bf8e8b82ff4460cd4f8ed12269c", + "Ecoli_10K_methylated_1_val_1_bismark_bt2_pe_splitting_report.txt:md5,0b39a70d7e7fb798302b8e5be5972ca3", + "SRR389222_sub1_trimmed_bismark_bt2_splitting_report.txt:md5,15cd690a0366ff38703abf9dd1d5230c", + "SRR389222_sub2_trimmed_bismark_bt2_splitting_report.txt:md5,90f7b7a242012045af7fccc5eb94fbf1", + "SRR389222_sub3_trimmed_bismark_bt2_splitting_report.txt:md5,beda776b2f0e1faaeafd46f245d273f0", + "bismark-methylation-dp.txt:md5,14edb46f1bc99ddc7f597cb4c6ac9e1c", + "bismark_alignment.txt:md5,544a74ea0f32005b0c886af79a6fad5b", + "bismark_mbias_CHG_R1.txt:md5,d92f984f52a98ee2943545dd2ae4b860", + "bismark_mbias_CHG_R2.txt:md5,1f6523b48bda086d29f70265187e7475", + "bismark_mbias_CHH_R1.txt:md5,5a9ab2965467d7c9bad67e5d04401f7a", + "bismark_mbias_CHH_R2.txt:md5,5e32a8b39118c3592b088a0b69ae1f21", + "bismark_mbias_CpG_R1.txt:md5,2b445cf2711929bbe7a04a2f62002c07", + "bismark_mbias_CpG_R2.txt:md5,46cca816038163d0f629fed7ada212b8", + "bismark_strand_alignment.txt:md5,a8738f981bab911b95ffe9d3434f2b08", + "cutadapt_filtered_reads_plot.txt:md5,ff1b6d4011a5be5410b9404f7ff56c56", + "cutadapt_trimmed_sequences_plot_3_Counts.txt:md5,57d07c19b0c30dc88df96c30bedcdc33", + "cutadapt_trimmed_sequences_plot_3_Obs_Exp.txt:md5,1e5ca4193f8290c5c812334d03615b41", + "fastqc-status-check-heatmap.txt:md5,218c2a7efbb9c02f652fa78fc739c866", + "fastqc_adapter_content_plot.txt:md5,48d8bd5ece984a74972ce0a0e814dd07", + "fastqc_overrepresented_sequences_plot.txt:md5,9c4b7064950b5b2c486d556984f21e9e", + "fastqc_per_base_n_content_plot.txt:md5,019d5cd4f61a31f4e7016140ca8ee36e", + "fastqc_per_base_sequence_quality_plot.txt:md5,e4c7d522114eab9bc9101e7ee9d83c8f", + "fastqc_per_sequence_gc_content_plot_Counts.txt:md5,302659bee8a02b6a38b24fe25f8eaa87", + "fastqc_per_sequence_gc_content_plot_Percentages.txt:md5,c75b396eb5dda8682fb1652a9b2e92a3", + "fastqc_per_sequence_quality_scores_plot.txt:md5,548c593f4a8be2d8627fc3bd1c280611", + "fastqc_sequence_counts_plot.txt:md5,58eeeb06bc9dcc1764c7daf0847d6bbf", + "fastqc_sequence_duplication_levels_plot.txt:md5,9e5712db9aa39b5754ea1e0c49cfff15", + "fastqc_top_overrepresented_sequences_table.txt:md5,6dfc5334a09c05392ea17369aa742d01", + "multiqc_bismark_alignment.txt:md5,40ab86041f508d3f1a63bde20cab5440", + "multiqc_bismark_methextract.txt:md5,374ad746b0cfa5143fc3606f77f53283", + "multiqc_citations.txt:md5,b9d42869faad581bd963d3d3bb490026", + "multiqc_cutadapt.txt:md5,f7a61369244b1e040d264e6913b8a839", + "qualimap_coverage_histogram.txt:md5,dfd099755c43854826eb71acca153a33", + "qualimap_gc_content.txt:md5,55baed387d09b5a0583ce2b5abfc0d12", + "qualimap_genome_fraction.txt:md5,bde4b1a12ad8ad0420b44fa3f1ed0512", + "qualimap_insert_size.txt:md5,8327f805cbaf1c61ca3128b6c16c7dfd", + "genome_results.txt:md5,e2a57140a56e0e4a1905c70084ccbb41", + "genome_results.txt:md5,e26877c78ca30a559d5697938181c786", + "genome_results.txt:md5,7cfeccc601bb4a823e0ccf6bd32b4fb4", + "genome_results.txt:md5,2dd07533db9b09442aa391aea7b9a91f" + ], + [ + [ + "Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.bam", + "fad4414ebdaafdb15e0584b393400b27" + ], + [ + "SRR389222_sub1_trimmed_bismark_bt2.bam", + "934288bfc59d40ff7e73706d07815fb" + ], + [ + "SRR389222_sub2_trimmed_bismark_bt2.bam", + "a94aeadc2acebd0a46647bb95acf2d55" + ], + [ + "SRR389222_sub3_trimmed_bismark_bt2.bam", + "6579ca7e49b9d7760ea5b3f3456739a1" + ], + [ + "Ecoli_10K_methylated.deduplicated.sorted.bam", + "a54ab7c96f9523a4ccd25fd69f6905f8" + ], + [ + "SRR389222_sub1.deduplicated.sorted.bam", + "fa0f34c0d0d4d321b89973f23e033aa1" + ], + [ + "SRR389222_sub2.deduplicated.sorted.bam", + "d347232a4fc5b1e02e98254b6ce97ae6" + ], + [ + "SRR389222_sub3.deduplicated.sorted.bam", + "29648af285a183ae2194790b5a325186" + ] + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-21T17:54:28.816433456" + } +} \ No newline at end of file diff --git a/tests/bismark_skip_multiqc.nf.test b/tests/bismark_skip_multiqc.nf.test new file mode 100644 index 00000000..99cbe91f --- /dev/null +++ b/tests/bismark_skip_multiqc.nf.test @@ -0,0 +1,40 @@ +nextflow_pipeline { + + name "Test Workflow main.nf" + script "../main.nf" + config "./nextflow.config" + + test("Params: bismark | skip_multiqc") { + when { + params { + skip_multiqc = true + outdir = "$outputDir" + } + } + + then { + // stable_name: All files + folders in ${params.outdir}/ with a stable name + def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) + // stable_path: All files in ${params.outdir}/ with stable content + def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') + // bam_files: All bam files + def bam_files = getAllFilesFromDir(params.outdir, include: ['**/*.bam']) + assertAll( + { assert workflow.success}, + { assert snapshot( + // Number of tasks + workflow.trace.succeeded().size(), + // pipeline versions.yml file for multiqc from which Nextflow version is removed because we tests pipelines on multiple Nextflow versions + removeNextflowVersion("$outputDir/pipeline_info/nf_core_pipeline_software_mqc_versions.yml"), + // All stable path name + stable_name, + // All files with stable contents + stable_path, + // All bam files + bam_files.collect{ file -> [ file.getName(), bam(file.toString()).getReadsMD5() ] } + ).match() } + ) + } + } + +} diff --git a/tests/bismark_skip_multiqc.nf.test.snap b/tests/bismark_skip_multiqc.nf.test.snap new file mode 100644 index 00000000..84d72c00 --- /dev/null +++ b/tests/bismark_skip_multiqc.nf.test.snap @@ -0,0 +1,581 @@ +{ + "Params: bismark | skip_multiqc": { + "content": [ + 43, + { + "BISMARK_ALIGN": { + "bismark": "0.24.2" + }, + "BISMARK_GENOMEPREPARATION": { + "bismark": "0.24.2" + }, + "FASTQC": { + "fastqc": "0.12.1" + }, + "QUALIMAP_BAMQC": { + "qualimap": 2.3 + }, + "TRIMGALORE": { + "trimgalore": "0.6.10", + "cutadapt": 4.2 + }, + "Workflow": { + "nf-core/methylseq": "v2.7.0" + } + }, + [ + "bismark", + "bismark/alignments", + "bismark/alignments/logs", + "bismark/alignments/logs/Ecoli_10K_methylated_1_val_1_bismark_bt2_PE_report.txt", + "bismark/alignments/logs/SRR389222_sub1_trimmed_bismark_bt2_SE_report.txt", + "bismark/alignments/logs/SRR389222_sub2_trimmed_bismark_bt2_SE_report.txt", + "bismark/alignments/logs/SRR389222_sub3_trimmed_bismark_bt2_SE_report.txt", + "bismark/deduplicated", + "bismark/deduplicated/Ecoli_10K_methylated.deduplicated.sorted.bam", + "bismark/deduplicated/Ecoli_10K_methylated.deduplicated.sorted.bam.bai", + "bismark/deduplicated/SRR389222_sub1.deduplicated.sorted.bam", + "bismark/deduplicated/SRR389222_sub1.deduplicated.sorted.bam.bai", + "bismark/deduplicated/SRR389222_sub2.deduplicated.sorted.bam", + "bismark/deduplicated/SRR389222_sub2.deduplicated.sorted.bam.bai", + "bismark/deduplicated/SRR389222_sub3.deduplicated.sorted.bam", + "bismark/deduplicated/SRR389222_sub3.deduplicated.sorted.bam.bai", + "bismark/deduplicated/logs", + "bismark/deduplicated/logs/Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplication_report.txt", + "bismark/deduplicated/logs/SRR389222_sub1_trimmed_bismark_bt2.deduplication_report.txt", + "bismark/deduplicated/logs/SRR389222_sub2_trimmed_bismark_bt2.deduplication_report.txt", + "bismark/deduplicated/logs/SRR389222_sub3_trimmed_bismark_bt2.deduplication_report.txt", + "bismark/methylation_calls", + "bismark/methylation_calls/bedGraph", + "bismark/methylation_calls/bedGraph/Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplicated.bedGraph.gz", + "bismark/methylation_calls/bedGraph/SRR389222_sub1_trimmed_bismark_bt2.deduplicated.bedGraph.gz", + "bismark/methylation_calls/bedGraph/SRR389222_sub2_trimmed_bismark_bt2.deduplicated.bedGraph.gz", + "bismark/methylation_calls/bedGraph/SRR389222_sub3_trimmed_bismark_bt2.deduplicated.bedGraph.gz", + "bismark/methylation_calls/mbias", + "bismark/methylation_calls/mbias/Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplicated.M-bias.txt", + "bismark/methylation_calls/mbias/SRR389222_sub1_trimmed_bismark_bt2.deduplicated.M-bias.txt", + "bismark/methylation_calls/mbias/SRR389222_sub2_trimmed_bismark_bt2.deduplicated.M-bias.txt", + "bismark/methylation_calls/mbias/SRR389222_sub3_trimmed_bismark_bt2.deduplicated.M-bias.txt", + "bismark/methylation_calls/methylation_calls", + "bismark/methylation_calls/methylation_calls/CHG_OB_Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CHG_OB_SRR389222_sub1_trimmed_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CHG_OB_SRR389222_sub2_trimmed_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CHG_OB_SRR389222_sub3_trimmed_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CHG_OT_Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CHG_OT_SRR389222_sub1_trimmed_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CHG_OT_SRR389222_sub2_trimmed_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CHG_OT_SRR389222_sub3_trimmed_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CHH_OB_Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CHH_OB_SRR389222_sub1_trimmed_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CHH_OB_SRR389222_sub2_trimmed_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CHH_OB_SRR389222_sub3_trimmed_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CHH_OT_Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CHH_OT_SRR389222_sub1_trimmed_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CHH_OT_SRR389222_sub2_trimmed_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CHH_OT_SRR389222_sub3_trimmed_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CpG_OB_Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CpG_OB_SRR389222_sub1_trimmed_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CpG_OB_SRR389222_sub2_trimmed_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CpG_OB_SRR389222_sub3_trimmed_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CpG_OT_Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CpG_OT_SRR389222_sub1_trimmed_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CpG_OT_SRR389222_sub2_trimmed_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CpG_OT_SRR389222_sub3_trimmed_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_coverage", + "bismark/methylation_calls/methylation_coverage/Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplicated.bismark.cov.gz", + "bismark/methylation_calls/methylation_coverage/SRR389222_sub1_trimmed_bismark_bt2.deduplicated.bismark.cov.gz", + "bismark/methylation_calls/methylation_coverage/SRR389222_sub2_trimmed_bismark_bt2.deduplicated.bismark.cov.gz", + "bismark/methylation_calls/methylation_coverage/SRR389222_sub3_trimmed_bismark_bt2.deduplicated.bismark.cov.gz", + "bismark/methylation_calls/splitting_report", + "bismark/methylation_calls/splitting_report/Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplicated_splitting_report.txt", + "bismark/methylation_calls/splitting_report/SRR389222_sub1_trimmed_bismark_bt2.deduplicated_splitting_report.txt", + "bismark/methylation_calls/splitting_report/SRR389222_sub2_trimmed_bismark_bt2.deduplicated_splitting_report.txt", + "bismark/methylation_calls/splitting_report/SRR389222_sub3_trimmed_bismark_bt2.deduplicated_splitting_report.txt", + "bismark/reports", + "bismark/reports/Ecoli_10K_methylated_1_val_1_bismark_bt2_PE_report.html", + "bismark/reports/SRR389222_sub1_trimmed_bismark_bt2_SE_report.html", + "bismark/reports/SRR389222_sub2_trimmed_bismark_bt2_SE_report.html", + "bismark/reports/SRR389222_sub3_trimmed_bismark_bt2_SE_report.html", + "bismark/summary", + "bismark/summary/bismark_summary_report.html", + "bismark/summary/bismark_summary_report.txt", + "fastqc", + "fastqc/Ecoli_10K_methylated_1_fastqc.html", + "fastqc/Ecoli_10K_methylated_2_fastqc.html", + "fastqc/SRR389222_sub1_fastqc.html", + "fastqc/SRR389222_sub2_fastqc.html", + "fastqc/SRR389222_sub3_fastqc.html", + "fastqc/zips", + "fastqc/zips/Ecoli_10K_methylated_1_fastqc.zip", + "fastqc/zips/Ecoli_10K_methylated_2_fastqc.zip", + "fastqc/zips/SRR389222_sub1_fastqc.zip", + "fastqc/zips/SRR389222_sub2_fastqc.zip", + "fastqc/zips/SRR389222_sub3_fastqc.zip", + "multiqc", + "multiqc/bismark", + "multiqc/bismark/multiqc_data", + "multiqc/bismark/multiqc_data/bismark-methylation-dp.txt", + "multiqc/bismark/multiqc_data/bismark_alignment.txt", + "multiqc/bismark/multiqc_data/bismark_deduplication.txt", + "multiqc/bismark/multiqc_data/bismark_mbias_CHG_R1.txt", + "multiqc/bismark/multiqc_data/bismark_mbias_CHG_R2.txt", + "multiqc/bismark/multiqc_data/bismark_mbias_CHH_R1.txt", + "multiqc/bismark/multiqc_data/bismark_mbias_CHH_R2.txt", + "multiqc/bismark/multiqc_data/bismark_mbias_CpG_R1.txt", + "multiqc/bismark/multiqc_data/bismark_mbias_CpG_R2.txt", + "multiqc/bismark/multiqc_data/bismark_strand_alignment.txt", + "multiqc/bismark/multiqc_data/cutadapt_filtered_reads_plot.txt", + "multiqc/bismark/multiqc_data/cutadapt_trimmed_sequences_plot_3_Counts.txt", + "multiqc/bismark/multiqc_data/cutadapt_trimmed_sequences_plot_3_Obs_Exp.txt", + "multiqc/bismark/multiqc_data/fastqc-status-check-heatmap.txt", + "multiqc/bismark/multiqc_data/fastqc_adapter_content_plot.txt", + "multiqc/bismark/multiqc_data/fastqc_overrepresented_sequences_plot.txt", + "multiqc/bismark/multiqc_data/fastqc_per_base_n_content_plot.txt", + "multiqc/bismark/multiqc_data/fastqc_per_base_sequence_quality_plot.txt", + "multiqc/bismark/multiqc_data/fastqc_per_sequence_gc_content_plot_Counts.txt", + "multiqc/bismark/multiqc_data/fastqc_per_sequence_gc_content_plot_Percentages.txt", + "multiqc/bismark/multiqc_data/fastqc_per_sequence_quality_scores_plot.txt", + "multiqc/bismark/multiqc_data/fastqc_sequence_counts_plot.txt", + "multiqc/bismark/multiqc_data/fastqc_sequence_duplication_levels_plot.txt", + "multiqc/bismark/multiqc_data/fastqc_top_overrepresented_sequences_table.txt", + "multiqc/bismark/multiqc_data/multiqc.log", + "multiqc/bismark/multiqc_data/multiqc_bismark_alignment.txt", + "multiqc/bismark/multiqc_data/multiqc_bismark_dedup.txt", + "multiqc/bismark/multiqc_data/multiqc_bismark_methextract.txt", + "multiqc/bismark/multiqc_data/multiqc_citations.txt", + "multiqc/bismark/multiqc_data/multiqc_cutadapt.txt", + "multiqc/bismark/multiqc_data/multiqc_data.json", + "multiqc/bismark/multiqc_data/multiqc_fastqc.txt", + "multiqc/bismark/multiqc_data/multiqc_general_stats.txt", + "multiqc/bismark/multiqc_data/multiqc_qualimap_bamqc_genome_results.txt", + "multiqc/bismark/multiqc_data/multiqc_software_versions.txt", + "multiqc/bismark/multiqc_data/multiqc_sources.txt", + "multiqc/bismark/multiqc_data/qualimap_coverage_histogram.txt", + "multiqc/bismark/multiqc_data/qualimap_gc_content.txt", + "multiqc/bismark/multiqc_data/qualimap_genome_fraction.txt", + "multiqc/bismark/multiqc_data/qualimap_insert_size.txt", + "multiqc/bismark/multiqc_plots", + "multiqc/bismark/multiqc_plots/pdf", + "multiqc/bismark/multiqc_plots/pdf/bismark-methylation-dp.pdf", + "multiqc/bismark/multiqc_plots/pdf/bismark_alignment-cnt.pdf", + "multiqc/bismark/multiqc_plots/pdf/bismark_alignment-pct.pdf", + "multiqc/bismark/multiqc_plots/pdf/bismark_deduplication-cnt.pdf", + "multiqc/bismark/multiqc_plots/pdf/bismark_deduplication-pct.pdf", + "multiqc/bismark/multiqc_plots/pdf/bismark_mbias_CHG_R1.pdf", + "multiqc/bismark/multiqc_plots/pdf/bismark_mbias_CHG_R2.pdf", + "multiqc/bismark/multiqc_plots/pdf/bismark_mbias_CHH_R1.pdf", + "multiqc/bismark/multiqc_plots/pdf/bismark_mbias_CHH_R2.pdf", + "multiqc/bismark/multiqc_plots/pdf/bismark_mbias_CpG_R1.pdf", + "multiqc/bismark/multiqc_plots/pdf/bismark_mbias_CpG_R2.pdf", + "multiqc/bismark/multiqc_plots/pdf/bismark_strand_alignment-cnt.pdf", + "multiqc/bismark/multiqc_plots/pdf/bismark_strand_alignment-pct.pdf", + "multiqc/bismark/multiqc_plots/pdf/cutadapt_filtered_reads_plot-cnt.pdf", + "multiqc/bismark/multiqc_plots/pdf/cutadapt_filtered_reads_plot-pct.pdf", + "multiqc/bismark/multiqc_plots/pdf/cutadapt_trimmed_sequences_plot_3_Counts.pdf", + "multiqc/bismark/multiqc_plots/pdf/cutadapt_trimmed_sequences_plot_3_Obs_Exp.pdf", + "multiqc/bismark/multiqc_plots/pdf/fastqc-status-check-heatmap.pdf", + "multiqc/bismark/multiqc_plots/pdf/fastqc_adapter_content_plot.pdf", + "multiqc/bismark/multiqc_plots/pdf/fastqc_overrepresented_sequences_plot.pdf", + "multiqc/bismark/multiqc_plots/pdf/fastqc_per_base_n_content_plot.pdf", + "multiqc/bismark/multiqc_plots/pdf/fastqc_per_base_sequence_quality_plot.pdf", + "multiqc/bismark/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Counts.pdf", + "multiqc/bismark/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Percentages.pdf", + "multiqc/bismark/multiqc_plots/pdf/fastqc_per_sequence_quality_scores_plot.pdf", + "multiqc/bismark/multiqc_plots/pdf/fastqc_sequence_counts_plot-cnt.pdf", + "multiqc/bismark/multiqc_plots/pdf/fastqc_sequence_counts_plot-pct.pdf", + "multiqc/bismark/multiqc_plots/pdf/fastqc_sequence_duplication_levels_plot.pdf", + "multiqc/bismark/multiqc_plots/pdf/fastqc_top_overrepresented_sequences_table.pdf", + "multiqc/bismark/multiqc_plots/pdf/general_stats_table.pdf", + "multiqc/bismark/multiqc_plots/pdf/qualimap_coverage_histogram.pdf", + "multiqc/bismark/multiqc_plots/pdf/qualimap_gc_content.pdf", + "multiqc/bismark/multiqc_plots/pdf/qualimap_genome_fraction.pdf", + "multiqc/bismark/multiqc_plots/pdf/qualimap_insert_size.pdf", + "multiqc/bismark/multiqc_plots/png", + "multiqc/bismark/multiqc_plots/png/bismark-methylation-dp.png", + "multiqc/bismark/multiqc_plots/png/bismark_alignment-cnt.png", + "multiqc/bismark/multiqc_plots/png/bismark_alignment-pct.png", + "multiqc/bismark/multiqc_plots/png/bismark_deduplication-cnt.png", + "multiqc/bismark/multiqc_plots/png/bismark_deduplication-pct.png", + "multiqc/bismark/multiqc_plots/png/bismark_mbias_CHG_R1.png", + "multiqc/bismark/multiqc_plots/png/bismark_mbias_CHG_R2.png", + "multiqc/bismark/multiqc_plots/png/bismark_mbias_CHH_R1.png", + "multiqc/bismark/multiqc_plots/png/bismark_mbias_CHH_R2.png", + "multiqc/bismark/multiqc_plots/png/bismark_mbias_CpG_R1.png", + "multiqc/bismark/multiqc_plots/png/bismark_mbias_CpG_R2.png", + "multiqc/bismark/multiqc_plots/png/bismark_strand_alignment-cnt.png", + "multiqc/bismark/multiqc_plots/png/bismark_strand_alignment-pct.png", + "multiqc/bismark/multiqc_plots/png/cutadapt_filtered_reads_plot-cnt.png", + "multiqc/bismark/multiqc_plots/png/cutadapt_filtered_reads_plot-pct.png", + "multiqc/bismark/multiqc_plots/png/cutadapt_trimmed_sequences_plot_3_Counts.png", + "multiqc/bismark/multiqc_plots/png/cutadapt_trimmed_sequences_plot_3_Obs_Exp.png", + "multiqc/bismark/multiqc_plots/png/fastqc-status-check-heatmap.png", + "multiqc/bismark/multiqc_plots/png/fastqc_adapter_content_plot.png", + "multiqc/bismark/multiqc_plots/png/fastqc_overrepresented_sequences_plot.png", + "multiqc/bismark/multiqc_plots/png/fastqc_per_base_n_content_plot.png", + "multiqc/bismark/multiqc_plots/png/fastqc_per_base_sequence_quality_plot.png", + "multiqc/bismark/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Counts.png", + "multiqc/bismark/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Percentages.png", + "multiqc/bismark/multiqc_plots/png/fastqc_per_sequence_quality_scores_plot.png", + "multiqc/bismark/multiqc_plots/png/fastqc_sequence_counts_plot-cnt.png", + "multiqc/bismark/multiqc_plots/png/fastqc_sequence_counts_plot-pct.png", + "multiqc/bismark/multiqc_plots/png/fastqc_sequence_duplication_levels_plot.png", + "multiqc/bismark/multiqc_plots/png/fastqc_top_overrepresented_sequences_table.png", + "multiqc/bismark/multiqc_plots/png/general_stats_table.png", + "multiqc/bismark/multiqc_plots/png/qualimap_coverage_histogram.png", + "multiqc/bismark/multiqc_plots/png/qualimap_gc_content.png", + "multiqc/bismark/multiqc_plots/png/qualimap_genome_fraction.png", + "multiqc/bismark/multiqc_plots/png/qualimap_insert_size.png", + "multiqc/bismark/multiqc_plots/svg", + "multiqc/bismark/multiqc_plots/svg/bismark-methylation-dp.svg", + "multiqc/bismark/multiqc_plots/svg/bismark_alignment-cnt.svg", + "multiqc/bismark/multiqc_plots/svg/bismark_alignment-pct.svg", + "multiqc/bismark/multiqc_plots/svg/bismark_deduplication-cnt.svg", + "multiqc/bismark/multiqc_plots/svg/bismark_deduplication-pct.svg", + "multiqc/bismark/multiqc_plots/svg/bismark_mbias_CHG_R1.svg", + "multiqc/bismark/multiqc_plots/svg/bismark_mbias_CHG_R2.svg", + "multiqc/bismark/multiqc_plots/svg/bismark_mbias_CHH_R1.svg", + "multiqc/bismark/multiqc_plots/svg/bismark_mbias_CHH_R2.svg", + "multiqc/bismark/multiqc_plots/svg/bismark_mbias_CpG_R1.svg", + "multiqc/bismark/multiqc_plots/svg/bismark_mbias_CpG_R2.svg", + "multiqc/bismark/multiqc_plots/svg/bismark_strand_alignment-cnt.svg", + "multiqc/bismark/multiqc_plots/svg/bismark_strand_alignment-pct.svg", + "multiqc/bismark/multiqc_plots/svg/cutadapt_filtered_reads_plot-cnt.svg", + "multiqc/bismark/multiqc_plots/svg/cutadapt_filtered_reads_plot-pct.svg", + "multiqc/bismark/multiqc_plots/svg/cutadapt_trimmed_sequences_plot_3_Counts.svg", + "multiqc/bismark/multiqc_plots/svg/cutadapt_trimmed_sequences_plot_3_Obs_Exp.svg", + "multiqc/bismark/multiqc_plots/svg/fastqc-status-check-heatmap.svg", + "multiqc/bismark/multiqc_plots/svg/fastqc_adapter_content_plot.svg", + "multiqc/bismark/multiqc_plots/svg/fastqc_overrepresented_sequences_plot.svg", + "multiqc/bismark/multiqc_plots/svg/fastqc_per_base_n_content_plot.svg", + "multiqc/bismark/multiqc_plots/svg/fastqc_per_base_sequence_quality_plot.svg", + "multiqc/bismark/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Counts.svg", + "multiqc/bismark/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Percentages.svg", + "multiqc/bismark/multiqc_plots/svg/fastqc_per_sequence_quality_scores_plot.svg", + "multiqc/bismark/multiqc_plots/svg/fastqc_sequence_counts_plot-cnt.svg", + "multiqc/bismark/multiqc_plots/svg/fastqc_sequence_counts_plot-pct.svg", + "multiqc/bismark/multiqc_plots/svg/fastqc_sequence_duplication_levels_plot.svg", + "multiqc/bismark/multiqc_plots/svg/fastqc_top_overrepresented_sequences_table.svg", + "multiqc/bismark/multiqc_plots/svg/general_stats_table.svg", + "multiqc/bismark/multiqc_plots/svg/qualimap_coverage_histogram.svg", + "multiqc/bismark/multiqc_plots/svg/qualimap_gc_content.svg", + "multiqc/bismark/multiqc_plots/svg/qualimap_genome_fraction.svg", + "multiqc/bismark/multiqc_plots/svg/qualimap_insert_size.svg", + "multiqc/bismark/multiqc_report.html", + "pipeline_info", + "pipeline_info/nf_core_pipeline_software_mqc_versions.yml", + "qualimap", + "qualimap/Ecoli_10K_methylated", + "qualimap/Ecoli_10K_methylated/css", + "qualimap/Ecoli_10K_methylated/css/agogo.css", + "qualimap/Ecoli_10K_methylated/css/ajax-loader.gif", + "qualimap/Ecoli_10K_methylated/css/basic.css", + "qualimap/Ecoli_10K_methylated/css/bgfooter.png", + "qualimap/Ecoli_10K_methylated/css/bgtop.png", + "qualimap/Ecoli_10K_methylated/css/comment-bright.png", + "qualimap/Ecoli_10K_methylated/css/comment-close.png", + "qualimap/Ecoli_10K_methylated/css/comment.png", + "qualimap/Ecoli_10K_methylated/css/doctools.js", + "qualimap/Ecoli_10K_methylated/css/down-pressed.png", + "qualimap/Ecoli_10K_methylated/css/down.png", + "qualimap/Ecoli_10K_methylated/css/file.png", + "qualimap/Ecoli_10K_methylated/css/jquery.js", + "qualimap/Ecoli_10K_methylated/css/minus.png", + "qualimap/Ecoli_10K_methylated/css/plus.png", + "qualimap/Ecoli_10K_methylated/css/pygments.css", + "qualimap/Ecoli_10K_methylated/css/qualimap_logo_small.png", + "qualimap/Ecoli_10K_methylated/css/report.css", + "qualimap/Ecoli_10K_methylated/css/searchtools.js", + "qualimap/Ecoli_10K_methylated/css/underscore.js", + "qualimap/Ecoli_10K_methylated/css/up-pressed.png", + "qualimap/Ecoli_10K_methylated/css/up.png", + "qualimap/Ecoli_10K_methylated/css/websupport.js", + "qualimap/Ecoli_10K_methylated/genome_results.txt", + "qualimap/Ecoli_10K_methylated/images_qualimapReport", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_coverage_0to50_histogram.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_coverage_across_reference.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_coverage_histogram.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_coverage_quotes.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_gc_content_per_window.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_homopolymer_indels.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_insert_size_across_reference.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_insert_size_histogram.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_mapping_quality_across_reference.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_mapping_quality_histogram.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_reads_content_per_read_position.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_uniq_read_starts_histogram.png", + "qualimap/Ecoli_10K_methylated/qualimapReport.html", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/coverage_across_reference.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/coverage_histogram.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/duplication_rate_histogram.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/genome_fraction_coverage.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/homopolymer_indels.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/insert_size_across_reference.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/insert_size_histogram.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/mapped_reads_gc-content_distribution.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/mapped_reads_nucleotide_content.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/mapping_quality_across_reference.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/mapping_quality_histogram.txt", + "qualimap/SRR389222_sub1", + "qualimap/SRR389222_sub1/css", + "qualimap/SRR389222_sub1/css/agogo.css", + "qualimap/SRR389222_sub1/css/ajax-loader.gif", + "qualimap/SRR389222_sub1/css/basic.css", + "qualimap/SRR389222_sub1/css/bgfooter.png", + "qualimap/SRR389222_sub1/css/bgtop.png", + "qualimap/SRR389222_sub1/css/comment-bright.png", + "qualimap/SRR389222_sub1/css/comment-close.png", + "qualimap/SRR389222_sub1/css/comment.png", + "qualimap/SRR389222_sub1/css/doctools.js", + "qualimap/SRR389222_sub1/css/down-pressed.png", + "qualimap/SRR389222_sub1/css/down.png", + "qualimap/SRR389222_sub1/css/file.png", + "qualimap/SRR389222_sub1/css/jquery.js", + "qualimap/SRR389222_sub1/css/minus.png", + "qualimap/SRR389222_sub1/css/plus.png", + "qualimap/SRR389222_sub1/css/pygments.css", + "qualimap/SRR389222_sub1/css/qualimap_logo_small.png", + "qualimap/SRR389222_sub1/css/report.css", + "qualimap/SRR389222_sub1/css/searchtools.js", + "qualimap/SRR389222_sub1/css/underscore.js", + "qualimap/SRR389222_sub1/css/up-pressed.png", + "qualimap/SRR389222_sub1/css/up.png", + "qualimap/SRR389222_sub1/css/websupport.js", + "qualimap/SRR389222_sub1/genome_results.txt", + "qualimap/SRR389222_sub1/images_qualimapReport", + "qualimap/SRR389222_sub1/images_qualimapReport/genome_coverage_0to50_histogram.png", + "qualimap/SRR389222_sub1/images_qualimapReport/genome_coverage_across_reference.png", + "qualimap/SRR389222_sub1/images_qualimapReport/genome_coverage_histogram.png", + "qualimap/SRR389222_sub1/images_qualimapReport/genome_coverage_quotes.png", + "qualimap/SRR389222_sub1/images_qualimapReport/genome_gc_content_per_window.png", + "qualimap/SRR389222_sub1/images_qualimapReport/genome_mapping_quality_across_reference.png", + "qualimap/SRR389222_sub1/images_qualimapReport/genome_mapping_quality_histogram.png", + "qualimap/SRR389222_sub1/images_qualimapReport/genome_reads_content_per_read_position.png", + "qualimap/SRR389222_sub1/images_qualimapReport/genome_uniq_read_starts_histogram.png", + "qualimap/SRR389222_sub1/qualimapReport.html", + "qualimap/SRR389222_sub1/raw_data_qualimapReport", + "qualimap/SRR389222_sub1/raw_data_qualimapReport/coverage_across_reference.txt", + "qualimap/SRR389222_sub1/raw_data_qualimapReport/coverage_histogram.txt", + "qualimap/SRR389222_sub1/raw_data_qualimapReport/duplication_rate_histogram.txt", + "qualimap/SRR389222_sub1/raw_data_qualimapReport/genome_fraction_coverage.txt", + "qualimap/SRR389222_sub1/raw_data_qualimapReport/mapped_reads_gc-content_distribution.txt", + "qualimap/SRR389222_sub1/raw_data_qualimapReport/mapped_reads_nucleotide_content.txt", + "qualimap/SRR389222_sub1/raw_data_qualimapReport/mapping_quality_across_reference.txt", + "qualimap/SRR389222_sub1/raw_data_qualimapReport/mapping_quality_histogram.txt", + "qualimap/SRR389222_sub2", + "qualimap/SRR389222_sub2/css", + "qualimap/SRR389222_sub2/css/agogo.css", + "qualimap/SRR389222_sub2/css/ajax-loader.gif", + "qualimap/SRR389222_sub2/css/basic.css", + "qualimap/SRR389222_sub2/css/bgfooter.png", + "qualimap/SRR389222_sub2/css/bgtop.png", + "qualimap/SRR389222_sub2/css/comment-bright.png", + "qualimap/SRR389222_sub2/css/comment-close.png", + "qualimap/SRR389222_sub2/css/comment.png", + "qualimap/SRR389222_sub2/css/doctools.js", + "qualimap/SRR389222_sub2/css/down-pressed.png", + "qualimap/SRR389222_sub2/css/down.png", + "qualimap/SRR389222_sub2/css/file.png", + "qualimap/SRR389222_sub2/css/jquery.js", + "qualimap/SRR389222_sub2/css/minus.png", + "qualimap/SRR389222_sub2/css/plus.png", + "qualimap/SRR389222_sub2/css/pygments.css", + "qualimap/SRR389222_sub2/css/qualimap_logo_small.png", + "qualimap/SRR389222_sub2/css/report.css", + "qualimap/SRR389222_sub2/css/searchtools.js", + "qualimap/SRR389222_sub2/css/underscore.js", + "qualimap/SRR389222_sub2/css/up-pressed.png", + "qualimap/SRR389222_sub2/css/up.png", + "qualimap/SRR389222_sub2/css/websupport.js", + "qualimap/SRR389222_sub2/genome_results.txt", + "qualimap/SRR389222_sub2/images_qualimapReport", + "qualimap/SRR389222_sub2/images_qualimapReport/genome_coverage_0to50_histogram.png", + "qualimap/SRR389222_sub2/images_qualimapReport/genome_coverage_across_reference.png", + "qualimap/SRR389222_sub2/images_qualimapReport/genome_coverage_histogram.png", + "qualimap/SRR389222_sub2/images_qualimapReport/genome_coverage_quotes.png", + "qualimap/SRR389222_sub2/images_qualimapReport/genome_gc_content_per_window.png", + "qualimap/SRR389222_sub2/images_qualimapReport/genome_mapping_quality_across_reference.png", + "qualimap/SRR389222_sub2/images_qualimapReport/genome_mapping_quality_histogram.png", + "qualimap/SRR389222_sub2/images_qualimapReport/genome_reads_content_per_read_position.png", + "qualimap/SRR389222_sub2/images_qualimapReport/genome_uniq_read_starts_histogram.png", + "qualimap/SRR389222_sub2/qualimapReport.html", + "qualimap/SRR389222_sub2/raw_data_qualimapReport", + "qualimap/SRR389222_sub2/raw_data_qualimapReport/coverage_across_reference.txt", + "qualimap/SRR389222_sub2/raw_data_qualimapReport/coverage_histogram.txt", + "qualimap/SRR389222_sub2/raw_data_qualimapReport/duplication_rate_histogram.txt", + "qualimap/SRR389222_sub2/raw_data_qualimapReport/genome_fraction_coverage.txt", + "qualimap/SRR389222_sub2/raw_data_qualimapReport/mapped_reads_gc-content_distribution.txt", + "qualimap/SRR389222_sub2/raw_data_qualimapReport/mapped_reads_nucleotide_content.txt", + "qualimap/SRR389222_sub2/raw_data_qualimapReport/mapping_quality_across_reference.txt", + "qualimap/SRR389222_sub2/raw_data_qualimapReport/mapping_quality_histogram.txt", + "qualimap/SRR389222_sub3", + "qualimap/SRR389222_sub3/css", + "qualimap/SRR389222_sub3/css/agogo.css", + "qualimap/SRR389222_sub3/css/ajax-loader.gif", + "qualimap/SRR389222_sub3/css/basic.css", + "qualimap/SRR389222_sub3/css/bgfooter.png", + "qualimap/SRR389222_sub3/css/bgtop.png", + "qualimap/SRR389222_sub3/css/comment-bright.png", + "qualimap/SRR389222_sub3/css/comment-close.png", + "qualimap/SRR389222_sub3/css/comment.png", + "qualimap/SRR389222_sub3/css/doctools.js", + "qualimap/SRR389222_sub3/css/down-pressed.png", + "qualimap/SRR389222_sub3/css/down.png", + "qualimap/SRR389222_sub3/css/file.png", + "qualimap/SRR389222_sub3/css/jquery.js", + "qualimap/SRR389222_sub3/css/minus.png", + "qualimap/SRR389222_sub3/css/plus.png", + "qualimap/SRR389222_sub3/css/pygments.css", + "qualimap/SRR389222_sub3/css/qualimap_logo_small.png", + "qualimap/SRR389222_sub3/css/report.css", + "qualimap/SRR389222_sub3/css/searchtools.js", + "qualimap/SRR389222_sub3/css/underscore.js", + "qualimap/SRR389222_sub3/css/up-pressed.png", + "qualimap/SRR389222_sub3/css/up.png", + "qualimap/SRR389222_sub3/css/websupport.js", + "qualimap/SRR389222_sub3/genome_results.txt", + "qualimap/SRR389222_sub3/images_qualimapReport", + "qualimap/SRR389222_sub3/images_qualimapReport/genome_coverage_0to50_histogram.png", + "qualimap/SRR389222_sub3/images_qualimapReport/genome_coverage_across_reference.png", + "qualimap/SRR389222_sub3/images_qualimapReport/genome_coverage_histogram.png", + "qualimap/SRR389222_sub3/images_qualimapReport/genome_coverage_quotes.png", + "qualimap/SRR389222_sub3/images_qualimapReport/genome_gc_content_per_window.png", + "qualimap/SRR389222_sub3/images_qualimapReport/genome_mapping_quality_across_reference.png", + "qualimap/SRR389222_sub3/images_qualimapReport/genome_mapping_quality_histogram.png", + "qualimap/SRR389222_sub3/images_qualimapReport/genome_reads_content_per_read_position.png", + "qualimap/SRR389222_sub3/images_qualimapReport/genome_uniq_read_starts_histogram.png", + "qualimap/SRR389222_sub3/qualimapReport.html", + "qualimap/SRR389222_sub3/raw_data_qualimapReport", + "qualimap/SRR389222_sub3/raw_data_qualimapReport/coverage_across_reference.txt", + "qualimap/SRR389222_sub3/raw_data_qualimapReport/coverage_histogram.txt", + "qualimap/SRR389222_sub3/raw_data_qualimapReport/duplication_rate_histogram.txt", + "qualimap/SRR389222_sub3/raw_data_qualimapReport/genome_fraction_coverage.txt", + "qualimap/SRR389222_sub3/raw_data_qualimapReport/mapped_reads_gc-content_distribution.txt", + "qualimap/SRR389222_sub3/raw_data_qualimapReport/mapped_reads_nucleotide_content.txt", + "qualimap/SRR389222_sub3/raw_data_qualimapReport/mapping_quality_across_reference.txt", + "qualimap/SRR389222_sub3/raw_data_qualimapReport/mapping_quality_histogram.txt", + "trimgalore", + "trimgalore/fastqc", + "trimgalore/fastqc/Ecoli_10K_methylated_1_val_1_fastqc.html", + "trimgalore/fastqc/Ecoli_10K_methylated_2_val_2_fastqc.html", + "trimgalore/fastqc/SRR389222_sub1_trimmed_fastqc.html", + "trimgalore/fastqc/SRR389222_sub2_trimmed_fastqc.html", + "trimgalore/fastqc/SRR389222_sub3_trimmed_fastqc.html", + "trimgalore/fastqc/zips", + "trimgalore/fastqc/zips/Ecoli_10K_methylated_1_val_1_fastqc.zip", + "trimgalore/fastqc/zips/Ecoli_10K_methylated_2_val_2_fastqc.zip", + "trimgalore/fastqc/zips/SRR389222_sub1_trimmed_fastqc.zip", + "trimgalore/fastqc/zips/SRR389222_sub2_trimmed_fastqc.zip", + "trimgalore/fastqc/zips/SRR389222_sub3_trimmed_fastqc.zip", + "trimgalore/logs", + "trimgalore/logs/Ecoli_10K_methylated_1.fastq.gz_trimming_report.txt", + "trimgalore/logs/Ecoli_10K_methylated_2.fastq.gz_trimming_report.txt", + "trimgalore/logs/SRR389222_sub1.fastq.gz_trimming_report.txt", + "trimgalore/logs/SRR389222_sub2.fastq.gz_trimming_report.txt", + "trimgalore/logs/SRR389222_sub3.fastq.gz_trimming_report.txt" + ], + [ + "Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplicated.bedGraph.gz:md5,58c9ba98d0638c26a30233b006a81172", + "SRR389222_sub1_trimmed_bismark_bt2.deduplicated.bedGraph.gz:md5,d31df76c1c9128299367ebfe740357b9", + "SRR389222_sub2_trimmed_bismark_bt2.deduplicated.bedGraph.gz:md5,010f32001bbc7805f8e041f3ef0d9ea9", + "SRR389222_sub3_trimmed_bismark_bt2.deduplicated.bedGraph.gz:md5,d42e09af121ae14f6e0de5779e317b0b", + "Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplicated.M-bias.txt:md5,29f3b882a51b63ce77d3d9c69b0e5f85", + "SRR389222_sub1_trimmed_bismark_bt2.deduplicated.M-bias.txt:md5,ed28b3cce432eecfae73bc4a071ec4ee", + "SRR389222_sub2_trimmed_bismark_bt2.deduplicated.M-bias.txt:md5,b06ce0084e54193ff8c9b9dd0ec9757b", + "SRR389222_sub3_trimmed_bismark_bt2.deduplicated.M-bias.txt:md5,b865b7fb6e1225feeb6aef3372ef0b1d", + "CHG_OB_Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplicated.txt.gz:md5,b58ae93fe7981837fd34903112196656", + "CHG_OB_SRR389222_sub1_trimmed_bismark_bt2.deduplicated.txt.gz:md5,5c177e6f00dfc6e2335a55c6b70efa0c", + "CHG_OB_SRR389222_sub2_trimmed_bismark_bt2.deduplicated.txt.gz:md5,583bf95e8dbd3d684bef595e31453bd1", + "CHG_OB_SRR389222_sub3_trimmed_bismark_bt2.deduplicated.txt.gz:md5,5cd486ff48be8f8fa0d4e35710be2071", + "CHG_OT_Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplicated.txt.gz:md5,b508e40e494dfd9fc2c2017286cd3fe9", + "CHG_OT_SRR389222_sub1_trimmed_bismark_bt2.deduplicated.txt.gz:md5,483aefddd7bf8426850109f077fa966b", + "CHG_OT_SRR389222_sub2_trimmed_bismark_bt2.deduplicated.txt.gz:md5,11f966904de0a5e5c38f2091e33ac8f3", + "CHG_OT_SRR389222_sub3_trimmed_bismark_bt2.deduplicated.txt.gz:md5,3fdd17711f819c844f39d52d4951b9cc", + "CHH_OB_Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplicated.txt.gz:md5,ad6f9f5def9bb01a7c516f7da1b22b91", + "CHH_OB_SRR389222_sub1_trimmed_bismark_bt2.deduplicated.txt.gz:md5,9469ac28e4369032b855ce1a794a56a4", + "CHH_OB_SRR389222_sub2_trimmed_bismark_bt2.deduplicated.txt.gz:md5,3c48fa14cc07ca041a35efd978ef877a", + "CHH_OB_SRR389222_sub3_trimmed_bismark_bt2.deduplicated.txt.gz:md5,68b5405d8de91c7046ab46fc5c42ee30", + "CHH_OT_Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplicated.txt.gz:md5,112a5d2beba2f8ebda273ca3bec98d88", + "CHH_OT_SRR389222_sub1_trimmed_bismark_bt2.deduplicated.txt.gz:md5,aa6ed81df517be3a61e787dea65282a9", + "CHH_OT_SRR389222_sub2_trimmed_bismark_bt2.deduplicated.txt.gz:md5,3ecf0ca20803514bc823e449d392f274", + "CHH_OT_SRR389222_sub3_trimmed_bismark_bt2.deduplicated.txt.gz:md5,7ed9df0d59ee786d06bf291efcdd3a48", + "CpG_OB_Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplicated.txt.gz:md5,bbe0a5f137b8768036aced610d17c666", + "CpG_OB_SRR389222_sub1_trimmed_bismark_bt2.deduplicated.txt.gz:md5,f0404fc1fc18c7ff58e8766b405239ed", + "CpG_OB_SRR389222_sub2_trimmed_bismark_bt2.deduplicated.txt.gz:md5,2f0dd539df6b5943496158ccb62edc7b", + "CpG_OB_SRR389222_sub3_trimmed_bismark_bt2.deduplicated.txt.gz:md5,0bd78a1708fb8126af553c94ab8c8371", + "CpG_OT_Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplicated.txt.gz:md5,8bb4cb59815cc9e260dcfa332fcb5ae9", + "CpG_OT_SRR389222_sub1_trimmed_bismark_bt2.deduplicated.txt.gz:md5,d031ae437256c87d12ed9d9049c30c9a", + "CpG_OT_SRR389222_sub2_trimmed_bismark_bt2.deduplicated.txt.gz:md5,5a6e4dfe3e90164ecf8ef6c7917ed9f2", + "CpG_OT_SRR389222_sub3_trimmed_bismark_bt2.deduplicated.txt.gz:md5,984aea9c77f8171f0e0a86d5289a180b", + "Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplicated.bismark.cov.gz:md5,8e6ba6fe66416d73e7f94b4da9ca77b1", + "SRR389222_sub1_trimmed_bismark_bt2.deduplicated.bismark.cov.gz:md5,5377d9fff4f1bf5b98dc2310fbeb6ec9", + "SRR389222_sub2_trimmed_bismark_bt2.deduplicated.bismark.cov.gz:md5,4713bda7b4f2bb16ce23853aea763cbd", + "SRR389222_sub3_trimmed_bismark_bt2.deduplicated.bismark.cov.gz:md5,f9a07c3e11e0caad6df3cd2e4d94d8ac", + "Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplicated_splitting_report.txt:md5,f41a6752f220b1cf567ac04e71fb730a", + "SRR389222_sub1_trimmed_bismark_bt2.deduplicated_splitting_report.txt:md5,94f18ee855566ef9842b4909e3d3dd88", + "SRR389222_sub2_trimmed_bismark_bt2.deduplicated_splitting_report.txt:md5,7c3526e022e97e49677f7428badef420", + "SRR389222_sub3_trimmed_bismark_bt2.deduplicated_splitting_report.txt:md5,e8d2bf21731b6ed517c56385061b1dee", + "bismark-methylation-dp.txt:md5,dcbe642c42e31d8e480a2e46b97bbd45", + "bismark_alignment.txt:md5,544a74ea0f32005b0c886af79a6fad5b", + "bismark_deduplication.txt:md5,db387240d46c09b0b952ed8b54855e76", + "bismark_mbias_CHG_R1.txt:md5,1a2a02f5f48e312a7cfa91ec253c1f49", + "bismark_mbias_CHG_R2.txt:md5,1f6523b48bda086d29f70265187e7475", + "bismark_mbias_CHH_R1.txt:md5,bcd25ac0c71b5ec120e948bc165f54d4", + "bismark_mbias_CHH_R2.txt:md5,5e32a8b39118c3592b088a0b69ae1f21", + "bismark_mbias_CpG_R1.txt:md5,0da9724e4a303148c39b6f4c18b8876b", + "bismark_mbias_CpG_R2.txt:md5,46cca816038163d0f629fed7ada212b8", + "bismark_strand_alignment.txt:md5,a8738f981bab911b95ffe9d3434f2b08", + "cutadapt_filtered_reads_plot.txt:md5,ff1b6d4011a5be5410b9404f7ff56c56", + "cutadapt_trimmed_sequences_plot_3_Counts.txt:md5,57d07c19b0c30dc88df96c30bedcdc33", + "cutadapt_trimmed_sequences_plot_3_Obs_Exp.txt:md5,1e5ca4193f8290c5c812334d03615b41", + "fastqc-status-check-heatmap.txt:md5,218c2a7efbb9c02f652fa78fc739c866", + "fastqc_adapter_content_plot.txt:md5,48d8bd5ece984a74972ce0a0e814dd07", + "fastqc_overrepresented_sequences_plot.txt:md5,9c4b7064950b5b2c486d556984f21e9e", + "fastqc_per_base_n_content_plot.txt:md5,019d5cd4f61a31f4e7016140ca8ee36e", + "fastqc_per_base_sequence_quality_plot.txt:md5,e4c7d522114eab9bc9101e7ee9d83c8f", + "fastqc_per_sequence_gc_content_plot_Counts.txt:md5,302659bee8a02b6a38b24fe25f8eaa87", + "fastqc_per_sequence_gc_content_plot_Percentages.txt:md5,c75b396eb5dda8682fb1652a9b2e92a3", + "fastqc_per_sequence_quality_scores_plot.txt:md5,548c593f4a8be2d8627fc3bd1c280611", + "fastqc_sequence_counts_plot.txt:md5,58eeeb06bc9dcc1764c7daf0847d6bbf", + "fastqc_sequence_duplication_levels_plot.txt:md5,9e5712db9aa39b5754ea1e0c49cfff15", + "fastqc_top_overrepresented_sequences_table.txt:md5,6dfc5334a09c05392ea17369aa742d01", + "multiqc_bismark_alignment.txt:md5,40ab86041f508d3f1a63bde20cab5440", + "multiqc_bismark_dedup.txt:md5,d09a5de4d81a3207efb6a8937d060e46", + "multiqc_bismark_methextract.txt:md5,825f57cdf45203406e583beb495afccc", + "multiqc_citations.txt:md5,b9d42869faad581bd963d3d3bb490026", + "multiqc_cutadapt.txt:md5,f7a61369244b1e040d264e6913b8a839", + "qualimap_coverage_histogram.txt:md5,7cd194077fe839edf034b44cc73dd024", + "qualimap_gc_content.txt:md5,4f6ec70d9fb71ffe5f2f99f44fe5ef0c", + "qualimap_genome_fraction.txt:md5,3e528946a376ae752b57adaaa73f5cdf", + "qualimap_insert_size.txt:md5,8327f805cbaf1c61ca3128b6c16c7dfd", + "genome_results.txt:md5,e2a57140a56e0e4a1905c70084ccbb41", + "genome_results.txt:md5,69a3dc8568127c50b0decb29757230ee", + "genome_results.txt:md5,13d933d61649b837de72a418d5126c1b", + "genome_results.txt:md5,235830239cfc43d8e84c049b1e9b180a" + ], + [ + [ + "Ecoli_10K_methylated.deduplicated.sorted.bam", + "a54ab7c96f9523a4ccd25fd69f6905f8" + ], + [ + "SRR389222_sub1.deduplicated.sorted.bam", + "3f11ef5fbbda3797fd6217728e4f00d3" + ], + [ + "SRR389222_sub2.deduplicated.sorted.bam", + "b01f29fc1d8d46922a69df09c636b4c4" + ], + [ + "SRR389222_sub3.deduplicated.sorted.bam", + "347195c04c9ffd2a2b10967a6682fc69" + ] + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-21T17:55:48.550138313" + } +} \ No newline at end of file diff --git a/tests/bismark_skip_trimming.nf.test b/tests/bismark_skip_trimming.nf.test new file mode 100644 index 00000000..28b415c6 --- /dev/null +++ b/tests/bismark_skip_trimming.nf.test @@ -0,0 +1,40 @@ +nextflow_pipeline { + + name "Test Workflow main.nf" + script "../main.nf" + config "./nextflow.config" + + test("Params: bismark | skip_trimming") { + when { + params { + skip_trimming = true + outdir = "$outputDir" + } + } + + then { + // stable_name: All files + folders in ${params.outdir}/ with a stable name + def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) + // stable_path: All files in ${params.outdir}/ with stable content + def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') + // bam_files: All bam files + def bam_files = getAllFilesFromDir(params.outdir, include: ['**/*.bam']) + assertAll( + { assert workflow.success}, + { assert snapshot( + // Number of tasks + workflow.trace.succeeded().size(), + // pipeline versions.yml file for multiqc from which Nextflow version is removed because we tests pipelines on multiple Nextflow versions + removeNextflowVersion("$outputDir/pipeline_info/nf_core_pipeline_software_mqc_versions.yml"), + // All stable path name + stable_name, + // All files with stable contents + stable_path, + // All bam files + bam_files.collect{ file -> [ file.getName(), bam(file.toString()).getReadsMD5() ] } + ).match() } + ) + } + } + +} diff --git a/tests/bismark_skip_trimming.nf.test.snap b/tests/bismark_skip_trimming.nf.test.snap new file mode 100644 index 00000000..97e616c6 --- /dev/null +++ b/tests/bismark_skip_trimming.nf.test.snap @@ -0,0 +1,538 @@ +{ + "Params: bismark | skip_trimming": { + "content": [ + 39, + { + "BISMARK_ALIGN": { + "bismark": "0.24.2" + }, + "BISMARK_GENOMEPREPARATION": { + "bismark": "0.24.2" + }, + "FASTQC": { + "fastqc": "0.12.1" + }, + "QUALIMAP_BAMQC": { + "qualimap": 2.3 + }, + "Workflow": { + "nf-core/methylseq": "v2.7.0" + } + }, + [ + "bismark", + "bismark/alignments", + "bismark/alignments/logs", + "bismark/alignments/logs/Ecoli_10K_methylated_R1_bismark_bt2_PE_report.txt", + "bismark/alignments/logs/SRR389222_sub1_bismark_bt2_SE_report.txt", + "bismark/alignments/logs/SRR389222_sub2_bismark_bt2_SE_report.txt", + "bismark/alignments/logs/SRR389222_sub3_bismark_bt2_SE_report.txt", + "bismark/deduplicated", + "bismark/deduplicated/Ecoli_10K_methylated.deduplicated.sorted.bam", + "bismark/deduplicated/Ecoli_10K_methylated.deduplicated.sorted.bam.bai", + "bismark/deduplicated/SRR389222_sub1.deduplicated.sorted.bam", + "bismark/deduplicated/SRR389222_sub1.deduplicated.sorted.bam.bai", + "bismark/deduplicated/SRR389222_sub2.deduplicated.sorted.bam", + "bismark/deduplicated/SRR389222_sub2.deduplicated.sorted.bam.bai", + "bismark/deduplicated/SRR389222_sub3.deduplicated.sorted.bam", + "bismark/deduplicated/SRR389222_sub3.deduplicated.sorted.bam.bai", + "bismark/deduplicated/logs", + "bismark/deduplicated/logs/Ecoli_10K_methylated_R1_bismark_bt2_pe.deduplication_report.txt", + "bismark/deduplicated/logs/SRR389222_sub1_bismark_bt2.deduplication_report.txt", + "bismark/deduplicated/logs/SRR389222_sub2_bismark_bt2.deduplication_report.txt", + "bismark/deduplicated/logs/SRR389222_sub3_bismark_bt2.deduplication_report.txt", + "bismark/methylation_calls", + "bismark/methylation_calls/bedGraph", + "bismark/methylation_calls/bedGraph/Ecoli_10K_methylated_R1_bismark_bt2_pe.deduplicated.bedGraph.gz", + "bismark/methylation_calls/bedGraph/SRR389222_sub1_bismark_bt2.deduplicated.bedGraph.gz", + "bismark/methylation_calls/bedGraph/SRR389222_sub2_bismark_bt2.deduplicated.bedGraph.gz", + "bismark/methylation_calls/bedGraph/SRR389222_sub3_bismark_bt2.deduplicated.bedGraph.gz", + "bismark/methylation_calls/mbias", + "bismark/methylation_calls/mbias/Ecoli_10K_methylated_R1_bismark_bt2_pe.deduplicated.M-bias.txt", + "bismark/methylation_calls/mbias/SRR389222_sub1_bismark_bt2.deduplicated.M-bias.txt", + "bismark/methylation_calls/mbias/SRR389222_sub2_bismark_bt2.deduplicated.M-bias.txt", + "bismark/methylation_calls/mbias/SRR389222_sub3_bismark_bt2.deduplicated.M-bias.txt", + "bismark/methylation_calls/methylation_calls", + "bismark/methylation_calls/methylation_calls/CHG_OB_Ecoli_10K_methylated_R1_bismark_bt2_pe.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CHG_OB_SRR389222_sub1_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CHG_OB_SRR389222_sub2_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CHG_OB_SRR389222_sub3_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CHG_OT_Ecoli_10K_methylated_R1_bismark_bt2_pe.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CHG_OT_SRR389222_sub1_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CHG_OT_SRR389222_sub2_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CHG_OT_SRR389222_sub3_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CHH_OB_Ecoli_10K_methylated_R1_bismark_bt2_pe.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CHH_OB_SRR389222_sub1_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CHH_OB_SRR389222_sub2_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CHH_OB_SRR389222_sub3_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CHH_OT_Ecoli_10K_methylated_R1_bismark_bt2_pe.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CHH_OT_SRR389222_sub1_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CHH_OT_SRR389222_sub2_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CHH_OT_SRR389222_sub3_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CpG_OB_Ecoli_10K_methylated_R1_bismark_bt2_pe.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CpG_OB_SRR389222_sub1_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CpG_OB_SRR389222_sub2_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CpG_OB_SRR389222_sub3_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CpG_OT_Ecoli_10K_methylated_R1_bismark_bt2_pe.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CpG_OT_SRR389222_sub1_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CpG_OT_SRR389222_sub2_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CpG_OT_SRR389222_sub3_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_coverage", + "bismark/methylation_calls/methylation_coverage/Ecoli_10K_methylated_R1_bismark_bt2_pe.deduplicated.bismark.cov.gz", + "bismark/methylation_calls/methylation_coverage/SRR389222_sub1_bismark_bt2.deduplicated.bismark.cov.gz", + "bismark/methylation_calls/methylation_coverage/SRR389222_sub2_bismark_bt2.deduplicated.bismark.cov.gz", + "bismark/methylation_calls/methylation_coverage/SRR389222_sub3_bismark_bt2.deduplicated.bismark.cov.gz", + "bismark/methylation_calls/splitting_report", + "bismark/methylation_calls/splitting_report/Ecoli_10K_methylated_R1_bismark_bt2_pe.deduplicated_splitting_report.txt", + "bismark/methylation_calls/splitting_report/SRR389222_sub1_bismark_bt2.deduplicated_splitting_report.txt", + "bismark/methylation_calls/splitting_report/SRR389222_sub2_bismark_bt2.deduplicated_splitting_report.txt", + "bismark/methylation_calls/splitting_report/SRR389222_sub3_bismark_bt2.deduplicated_splitting_report.txt", + "bismark/reports", + "bismark/reports/Ecoli_10K_methylated_R1_bismark_bt2_PE_report.html", + "bismark/reports/SRR389222_sub1_bismark_bt2_SE_report.html", + "bismark/reports/SRR389222_sub2_bismark_bt2_SE_report.html", + "bismark/reports/SRR389222_sub3_bismark_bt2_SE_report.html", + "bismark/summary", + "bismark/summary/bismark_summary_report.html", + "bismark/summary/bismark_summary_report.txt", + "fastqc", + "fastqc/Ecoli_10K_methylated_1_fastqc.html", + "fastqc/Ecoli_10K_methylated_2_fastqc.html", + "fastqc/SRR389222_sub1_fastqc.html", + "fastqc/SRR389222_sub2_fastqc.html", + "fastqc/SRR389222_sub3_fastqc.html", + "fastqc/zips", + "fastqc/zips/Ecoli_10K_methylated_1_fastqc.zip", + "fastqc/zips/Ecoli_10K_methylated_2_fastqc.zip", + "fastqc/zips/SRR389222_sub1_fastqc.zip", + "fastqc/zips/SRR389222_sub2_fastqc.zip", + "fastqc/zips/SRR389222_sub3_fastqc.zip", + "multiqc", + "multiqc/bismark", + "multiqc/bismark/multiqc_data", + "multiqc/bismark/multiqc_data/bismark-methylation-dp.txt", + "multiqc/bismark/multiqc_data/bismark_alignment.txt", + "multiqc/bismark/multiqc_data/bismark_deduplication.txt", + "multiqc/bismark/multiqc_data/bismark_mbias_CHG_R1.txt", + "multiqc/bismark/multiqc_data/bismark_mbias_CHG_R2.txt", + "multiqc/bismark/multiqc_data/bismark_mbias_CHH_R1.txt", + "multiqc/bismark/multiqc_data/bismark_mbias_CHH_R2.txt", + "multiqc/bismark/multiqc_data/bismark_mbias_CpG_R1.txt", + "multiqc/bismark/multiqc_data/bismark_mbias_CpG_R2.txt", + "multiqc/bismark/multiqc_data/bismark_strand_alignment.txt", + "multiqc/bismark/multiqc_data/fastqc-status-check-heatmap.txt", + "multiqc/bismark/multiqc_data/fastqc_adapter_content_plot.txt", + "multiqc/bismark/multiqc_data/fastqc_overrepresented_sequences_plot.txt", + "multiqc/bismark/multiqc_data/fastqc_per_base_n_content_plot.txt", + "multiqc/bismark/multiqc_data/fastqc_per_base_sequence_quality_plot.txt", + "multiqc/bismark/multiqc_data/fastqc_per_sequence_gc_content_plot_Counts.txt", + "multiqc/bismark/multiqc_data/fastqc_per_sequence_gc_content_plot_Percentages.txt", + "multiqc/bismark/multiqc_data/fastqc_per_sequence_quality_scores_plot.txt", + "multiqc/bismark/multiqc_data/fastqc_sequence_counts_plot.txt", + "multiqc/bismark/multiqc_data/fastqc_sequence_duplication_levels_plot.txt", + "multiqc/bismark/multiqc_data/fastqc_top_overrepresented_sequences_table.txt", + "multiqc/bismark/multiqc_data/multiqc.log", + "multiqc/bismark/multiqc_data/multiqc_bismark_alignment.txt", + "multiqc/bismark/multiqc_data/multiqc_bismark_dedup.txt", + "multiqc/bismark/multiqc_data/multiqc_bismark_methextract.txt", + "multiqc/bismark/multiqc_data/multiqc_citations.txt", + "multiqc/bismark/multiqc_data/multiqc_data.json", + "multiqc/bismark/multiqc_data/multiqc_fastqc.txt", + "multiqc/bismark/multiqc_data/multiqc_general_stats.txt", + "multiqc/bismark/multiqc_data/multiqc_qualimap_bamqc_genome_results.txt", + "multiqc/bismark/multiqc_data/multiqc_software_versions.txt", + "multiqc/bismark/multiqc_data/multiqc_sources.txt", + "multiqc/bismark/multiqc_data/qualimap_coverage_histogram.txt", + "multiqc/bismark/multiqc_data/qualimap_gc_content.txt", + "multiqc/bismark/multiqc_data/qualimap_genome_fraction.txt", + "multiqc/bismark/multiqc_data/qualimap_insert_size.txt", + "multiqc/bismark/multiqc_plots", + "multiqc/bismark/multiqc_plots/pdf", + "multiqc/bismark/multiqc_plots/pdf/bismark-methylation-dp.pdf", + "multiqc/bismark/multiqc_plots/pdf/bismark_alignment-cnt.pdf", + "multiqc/bismark/multiqc_plots/pdf/bismark_alignment-pct.pdf", + "multiqc/bismark/multiqc_plots/pdf/bismark_deduplication-cnt.pdf", + "multiqc/bismark/multiqc_plots/pdf/bismark_deduplication-pct.pdf", + "multiqc/bismark/multiqc_plots/pdf/bismark_mbias_CHG_R1.pdf", + "multiqc/bismark/multiqc_plots/pdf/bismark_mbias_CHG_R2.pdf", + "multiqc/bismark/multiqc_plots/pdf/bismark_mbias_CHH_R1.pdf", + "multiqc/bismark/multiqc_plots/pdf/bismark_mbias_CHH_R2.pdf", + "multiqc/bismark/multiqc_plots/pdf/bismark_mbias_CpG_R1.pdf", + "multiqc/bismark/multiqc_plots/pdf/bismark_mbias_CpG_R2.pdf", + "multiqc/bismark/multiqc_plots/pdf/bismark_strand_alignment-cnt.pdf", + "multiqc/bismark/multiqc_plots/pdf/bismark_strand_alignment-pct.pdf", + "multiqc/bismark/multiqc_plots/pdf/fastqc-status-check-heatmap.pdf", + "multiqc/bismark/multiqc_plots/pdf/fastqc_adapter_content_plot.pdf", + "multiqc/bismark/multiqc_plots/pdf/fastqc_overrepresented_sequences_plot.pdf", + "multiqc/bismark/multiqc_plots/pdf/fastqc_per_base_n_content_plot.pdf", + "multiqc/bismark/multiqc_plots/pdf/fastqc_per_base_sequence_quality_plot.pdf", + "multiqc/bismark/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Counts.pdf", + "multiqc/bismark/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Percentages.pdf", + "multiqc/bismark/multiqc_plots/pdf/fastqc_per_sequence_quality_scores_plot.pdf", + "multiqc/bismark/multiqc_plots/pdf/fastqc_sequence_counts_plot-cnt.pdf", + "multiqc/bismark/multiqc_plots/pdf/fastqc_sequence_counts_plot-pct.pdf", + "multiqc/bismark/multiqc_plots/pdf/fastqc_sequence_duplication_levels_plot.pdf", + "multiqc/bismark/multiqc_plots/pdf/fastqc_top_overrepresented_sequences_table.pdf", + "multiqc/bismark/multiqc_plots/pdf/general_stats_table.pdf", + "multiqc/bismark/multiqc_plots/pdf/qualimap_coverage_histogram.pdf", + "multiqc/bismark/multiqc_plots/pdf/qualimap_gc_content.pdf", + "multiqc/bismark/multiqc_plots/pdf/qualimap_genome_fraction.pdf", + "multiqc/bismark/multiqc_plots/pdf/qualimap_insert_size.pdf", + "multiqc/bismark/multiqc_plots/png", + "multiqc/bismark/multiqc_plots/png/bismark-methylation-dp.png", + "multiqc/bismark/multiqc_plots/png/bismark_alignment-cnt.png", + "multiqc/bismark/multiqc_plots/png/bismark_alignment-pct.png", + "multiqc/bismark/multiqc_plots/png/bismark_deduplication-cnt.png", + "multiqc/bismark/multiqc_plots/png/bismark_deduplication-pct.png", + "multiqc/bismark/multiqc_plots/png/bismark_mbias_CHG_R1.png", + "multiqc/bismark/multiqc_plots/png/bismark_mbias_CHG_R2.png", + "multiqc/bismark/multiqc_plots/png/bismark_mbias_CHH_R1.png", + "multiqc/bismark/multiqc_plots/png/bismark_mbias_CHH_R2.png", + "multiqc/bismark/multiqc_plots/png/bismark_mbias_CpG_R1.png", + "multiqc/bismark/multiqc_plots/png/bismark_mbias_CpG_R2.png", + "multiqc/bismark/multiqc_plots/png/bismark_strand_alignment-cnt.png", + "multiqc/bismark/multiqc_plots/png/bismark_strand_alignment-pct.png", + "multiqc/bismark/multiqc_plots/png/fastqc-status-check-heatmap.png", + "multiqc/bismark/multiqc_plots/png/fastqc_adapter_content_plot.png", + "multiqc/bismark/multiqc_plots/png/fastqc_overrepresented_sequences_plot.png", + "multiqc/bismark/multiqc_plots/png/fastqc_per_base_n_content_plot.png", + "multiqc/bismark/multiqc_plots/png/fastqc_per_base_sequence_quality_plot.png", + "multiqc/bismark/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Counts.png", + "multiqc/bismark/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Percentages.png", + "multiqc/bismark/multiqc_plots/png/fastqc_per_sequence_quality_scores_plot.png", + "multiqc/bismark/multiqc_plots/png/fastqc_sequence_counts_plot-cnt.png", + "multiqc/bismark/multiqc_plots/png/fastqc_sequence_counts_plot-pct.png", + "multiqc/bismark/multiqc_plots/png/fastqc_sequence_duplication_levels_plot.png", + "multiqc/bismark/multiqc_plots/png/fastqc_top_overrepresented_sequences_table.png", + "multiqc/bismark/multiqc_plots/png/general_stats_table.png", + "multiqc/bismark/multiqc_plots/png/qualimap_coverage_histogram.png", + "multiqc/bismark/multiqc_plots/png/qualimap_gc_content.png", + "multiqc/bismark/multiqc_plots/png/qualimap_genome_fraction.png", + "multiqc/bismark/multiqc_plots/png/qualimap_insert_size.png", + "multiqc/bismark/multiqc_plots/svg", + "multiqc/bismark/multiqc_plots/svg/bismark-methylation-dp.svg", + "multiqc/bismark/multiqc_plots/svg/bismark_alignment-cnt.svg", + "multiqc/bismark/multiqc_plots/svg/bismark_alignment-pct.svg", + "multiqc/bismark/multiqc_plots/svg/bismark_deduplication-cnt.svg", + "multiqc/bismark/multiqc_plots/svg/bismark_deduplication-pct.svg", + "multiqc/bismark/multiqc_plots/svg/bismark_mbias_CHG_R1.svg", + "multiqc/bismark/multiqc_plots/svg/bismark_mbias_CHG_R2.svg", + "multiqc/bismark/multiqc_plots/svg/bismark_mbias_CHH_R1.svg", + "multiqc/bismark/multiqc_plots/svg/bismark_mbias_CHH_R2.svg", + "multiqc/bismark/multiqc_plots/svg/bismark_mbias_CpG_R1.svg", + "multiqc/bismark/multiqc_plots/svg/bismark_mbias_CpG_R2.svg", + "multiqc/bismark/multiqc_plots/svg/bismark_strand_alignment-cnt.svg", + "multiqc/bismark/multiqc_plots/svg/bismark_strand_alignment-pct.svg", + "multiqc/bismark/multiqc_plots/svg/fastqc-status-check-heatmap.svg", + "multiqc/bismark/multiqc_plots/svg/fastqc_adapter_content_plot.svg", + "multiqc/bismark/multiqc_plots/svg/fastqc_overrepresented_sequences_plot.svg", + "multiqc/bismark/multiqc_plots/svg/fastqc_per_base_n_content_plot.svg", + "multiqc/bismark/multiqc_plots/svg/fastqc_per_base_sequence_quality_plot.svg", + "multiqc/bismark/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Counts.svg", + "multiqc/bismark/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Percentages.svg", + "multiqc/bismark/multiqc_plots/svg/fastqc_per_sequence_quality_scores_plot.svg", + "multiqc/bismark/multiqc_plots/svg/fastqc_sequence_counts_plot-cnt.svg", + "multiqc/bismark/multiqc_plots/svg/fastqc_sequence_counts_plot-pct.svg", + "multiqc/bismark/multiqc_plots/svg/fastqc_sequence_duplication_levels_plot.svg", + "multiqc/bismark/multiqc_plots/svg/fastqc_top_overrepresented_sequences_table.svg", + "multiqc/bismark/multiqc_plots/svg/general_stats_table.svg", + "multiqc/bismark/multiqc_plots/svg/qualimap_coverage_histogram.svg", + "multiqc/bismark/multiqc_plots/svg/qualimap_gc_content.svg", + "multiqc/bismark/multiqc_plots/svg/qualimap_genome_fraction.svg", + "multiqc/bismark/multiqc_plots/svg/qualimap_insert_size.svg", + "multiqc/bismark/multiqc_report.html", + "pipeline_info", + "pipeline_info/nf_core_pipeline_software_mqc_versions.yml", + "qualimap", + "qualimap/Ecoli_10K_methylated", + "qualimap/Ecoli_10K_methylated/css", + "qualimap/Ecoli_10K_methylated/css/agogo.css", + "qualimap/Ecoli_10K_methylated/css/ajax-loader.gif", + "qualimap/Ecoli_10K_methylated/css/basic.css", + "qualimap/Ecoli_10K_methylated/css/bgfooter.png", + "qualimap/Ecoli_10K_methylated/css/bgtop.png", + "qualimap/Ecoli_10K_methylated/css/comment-bright.png", + "qualimap/Ecoli_10K_methylated/css/comment-close.png", + "qualimap/Ecoli_10K_methylated/css/comment.png", + "qualimap/Ecoli_10K_methylated/css/doctools.js", + "qualimap/Ecoli_10K_methylated/css/down-pressed.png", + "qualimap/Ecoli_10K_methylated/css/down.png", + "qualimap/Ecoli_10K_methylated/css/file.png", + "qualimap/Ecoli_10K_methylated/css/jquery.js", + "qualimap/Ecoli_10K_methylated/css/minus.png", + "qualimap/Ecoli_10K_methylated/css/plus.png", + "qualimap/Ecoli_10K_methylated/css/pygments.css", + "qualimap/Ecoli_10K_methylated/css/qualimap_logo_small.png", + "qualimap/Ecoli_10K_methylated/css/report.css", + "qualimap/Ecoli_10K_methylated/css/searchtools.js", + "qualimap/Ecoli_10K_methylated/css/underscore.js", + "qualimap/Ecoli_10K_methylated/css/up-pressed.png", + "qualimap/Ecoli_10K_methylated/css/up.png", + "qualimap/Ecoli_10K_methylated/css/websupport.js", + "qualimap/Ecoli_10K_methylated/genome_results.txt", + "qualimap/Ecoli_10K_methylated/images_qualimapReport", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_coverage_0to50_histogram.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_coverage_across_reference.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_coverage_histogram.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_coverage_quotes.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_gc_content_per_window.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_homopolymer_indels.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_insert_size_across_reference.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_insert_size_histogram.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_mapping_quality_across_reference.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_mapping_quality_histogram.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_reads_content_per_read_position.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_uniq_read_starts_histogram.png", + "qualimap/Ecoli_10K_methylated/qualimapReport.html", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/coverage_across_reference.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/coverage_histogram.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/duplication_rate_histogram.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/genome_fraction_coverage.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/homopolymer_indels.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/insert_size_across_reference.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/insert_size_histogram.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/mapped_reads_gc-content_distribution.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/mapped_reads_nucleotide_content.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/mapping_quality_across_reference.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/mapping_quality_histogram.txt", + "qualimap/SRR389222_sub1", + "qualimap/SRR389222_sub1/css", + "qualimap/SRR389222_sub1/css/agogo.css", + "qualimap/SRR389222_sub1/css/ajax-loader.gif", + "qualimap/SRR389222_sub1/css/basic.css", + "qualimap/SRR389222_sub1/css/bgfooter.png", + "qualimap/SRR389222_sub1/css/bgtop.png", + "qualimap/SRR389222_sub1/css/comment-bright.png", + "qualimap/SRR389222_sub1/css/comment-close.png", + "qualimap/SRR389222_sub1/css/comment.png", + "qualimap/SRR389222_sub1/css/doctools.js", + "qualimap/SRR389222_sub1/css/down-pressed.png", + "qualimap/SRR389222_sub1/css/down.png", + "qualimap/SRR389222_sub1/css/file.png", + "qualimap/SRR389222_sub1/css/jquery.js", + "qualimap/SRR389222_sub1/css/minus.png", + "qualimap/SRR389222_sub1/css/plus.png", + "qualimap/SRR389222_sub1/css/pygments.css", + "qualimap/SRR389222_sub1/css/qualimap_logo_small.png", + "qualimap/SRR389222_sub1/css/report.css", + "qualimap/SRR389222_sub1/css/searchtools.js", + "qualimap/SRR389222_sub1/css/underscore.js", + "qualimap/SRR389222_sub1/css/up-pressed.png", + "qualimap/SRR389222_sub1/css/up.png", + "qualimap/SRR389222_sub1/css/websupport.js", + "qualimap/SRR389222_sub1/genome_results.txt", + "qualimap/SRR389222_sub1/images_qualimapReport", + "qualimap/SRR389222_sub1/images_qualimapReport/genome_coverage_0to50_histogram.png", + "qualimap/SRR389222_sub1/images_qualimapReport/genome_coverage_across_reference.png", + "qualimap/SRR389222_sub1/images_qualimapReport/genome_coverage_histogram.png", + "qualimap/SRR389222_sub1/images_qualimapReport/genome_coverage_quotes.png", + "qualimap/SRR389222_sub1/images_qualimapReport/genome_gc_content_per_window.png", + "qualimap/SRR389222_sub1/images_qualimapReport/genome_mapping_quality_across_reference.png", + "qualimap/SRR389222_sub1/images_qualimapReport/genome_mapping_quality_histogram.png", + "qualimap/SRR389222_sub1/images_qualimapReport/genome_reads_content_per_read_position.png", + "qualimap/SRR389222_sub1/images_qualimapReport/genome_uniq_read_starts_histogram.png", + "qualimap/SRR389222_sub1/qualimapReport.html", + "qualimap/SRR389222_sub1/raw_data_qualimapReport", + "qualimap/SRR389222_sub1/raw_data_qualimapReport/coverage_across_reference.txt", + "qualimap/SRR389222_sub1/raw_data_qualimapReport/coverage_histogram.txt", + "qualimap/SRR389222_sub1/raw_data_qualimapReport/duplication_rate_histogram.txt", + "qualimap/SRR389222_sub1/raw_data_qualimapReport/genome_fraction_coverage.txt", + "qualimap/SRR389222_sub1/raw_data_qualimapReport/mapped_reads_gc-content_distribution.txt", + "qualimap/SRR389222_sub1/raw_data_qualimapReport/mapped_reads_nucleotide_content.txt", + "qualimap/SRR389222_sub1/raw_data_qualimapReport/mapping_quality_across_reference.txt", + "qualimap/SRR389222_sub1/raw_data_qualimapReport/mapping_quality_histogram.txt", + "qualimap/SRR389222_sub2", + "qualimap/SRR389222_sub2/css", + "qualimap/SRR389222_sub2/css/agogo.css", + "qualimap/SRR389222_sub2/css/ajax-loader.gif", + "qualimap/SRR389222_sub2/css/basic.css", + "qualimap/SRR389222_sub2/css/bgfooter.png", + "qualimap/SRR389222_sub2/css/bgtop.png", + "qualimap/SRR389222_sub2/css/comment-bright.png", + "qualimap/SRR389222_sub2/css/comment-close.png", + "qualimap/SRR389222_sub2/css/comment.png", + "qualimap/SRR389222_sub2/css/doctools.js", + "qualimap/SRR389222_sub2/css/down-pressed.png", + "qualimap/SRR389222_sub2/css/down.png", + "qualimap/SRR389222_sub2/css/file.png", + "qualimap/SRR389222_sub2/css/jquery.js", + "qualimap/SRR389222_sub2/css/minus.png", + "qualimap/SRR389222_sub2/css/plus.png", + "qualimap/SRR389222_sub2/css/pygments.css", + "qualimap/SRR389222_sub2/css/qualimap_logo_small.png", + "qualimap/SRR389222_sub2/css/report.css", + "qualimap/SRR389222_sub2/css/searchtools.js", + "qualimap/SRR389222_sub2/css/underscore.js", + "qualimap/SRR389222_sub2/css/up-pressed.png", + "qualimap/SRR389222_sub2/css/up.png", + "qualimap/SRR389222_sub2/css/websupport.js", + "qualimap/SRR389222_sub2/genome_results.txt", + "qualimap/SRR389222_sub2/images_qualimapReport", + "qualimap/SRR389222_sub2/images_qualimapReport/genome_coverage_0to50_histogram.png", + "qualimap/SRR389222_sub2/images_qualimapReport/genome_coverage_across_reference.png", + "qualimap/SRR389222_sub2/images_qualimapReport/genome_coverage_histogram.png", + "qualimap/SRR389222_sub2/images_qualimapReport/genome_coverage_quotes.png", + "qualimap/SRR389222_sub2/images_qualimapReport/genome_gc_content_per_window.png", + "qualimap/SRR389222_sub2/images_qualimapReport/genome_mapping_quality_across_reference.png", + "qualimap/SRR389222_sub2/images_qualimapReport/genome_mapping_quality_histogram.png", + "qualimap/SRR389222_sub2/images_qualimapReport/genome_reads_content_per_read_position.png", + "qualimap/SRR389222_sub2/images_qualimapReport/genome_uniq_read_starts_histogram.png", + "qualimap/SRR389222_sub2/qualimapReport.html", + "qualimap/SRR389222_sub2/raw_data_qualimapReport", + "qualimap/SRR389222_sub2/raw_data_qualimapReport/coverage_across_reference.txt", + "qualimap/SRR389222_sub2/raw_data_qualimapReport/coverage_histogram.txt", + "qualimap/SRR389222_sub2/raw_data_qualimapReport/duplication_rate_histogram.txt", + "qualimap/SRR389222_sub2/raw_data_qualimapReport/genome_fraction_coverage.txt", + "qualimap/SRR389222_sub2/raw_data_qualimapReport/mapped_reads_gc-content_distribution.txt", + "qualimap/SRR389222_sub2/raw_data_qualimapReport/mapped_reads_nucleotide_content.txt", + "qualimap/SRR389222_sub2/raw_data_qualimapReport/mapping_quality_across_reference.txt", + "qualimap/SRR389222_sub2/raw_data_qualimapReport/mapping_quality_histogram.txt", + "qualimap/SRR389222_sub3", + "qualimap/SRR389222_sub3/css", + "qualimap/SRR389222_sub3/css/agogo.css", + "qualimap/SRR389222_sub3/css/ajax-loader.gif", + "qualimap/SRR389222_sub3/css/basic.css", + "qualimap/SRR389222_sub3/css/bgfooter.png", + "qualimap/SRR389222_sub3/css/bgtop.png", + "qualimap/SRR389222_sub3/css/comment-bright.png", + "qualimap/SRR389222_sub3/css/comment-close.png", + "qualimap/SRR389222_sub3/css/comment.png", + "qualimap/SRR389222_sub3/css/doctools.js", + "qualimap/SRR389222_sub3/css/down-pressed.png", + "qualimap/SRR389222_sub3/css/down.png", + "qualimap/SRR389222_sub3/css/file.png", + "qualimap/SRR389222_sub3/css/jquery.js", + "qualimap/SRR389222_sub3/css/minus.png", + "qualimap/SRR389222_sub3/css/plus.png", + "qualimap/SRR389222_sub3/css/pygments.css", + "qualimap/SRR389222_sub3/css/qualimap_logo_small.png", + "qualimap/SRR389222_sub3/css/report.css", + "qualimap/SRR389222_sub3/css/searchtools.js", + "qualimap/SRR389222_sub3/css/underscore.js", + "qualimap/SRR389222_sub3/css/up-pressed.png", + "qualimap/SRR389222_sub3/css/up.png", + "qualimap/SRR389222_sub3/css/websupport.js", + "qualimap/SRR389222_sub3/genome_results.txt", + "qualimap/SRR389222_sub3/images_qualimapReport", + "qualimap/SRR389222_sub3/images_qualimapReport/genome_coverage_0to50_histogram.png", + "qualimap/SRR389222_sub3/images_qualimapReport/genome_coverage_across_reference.png", + "qualimap/SRR389222_sub3/images_qualimapReport/genome_coverage_histogram.png", + "qualimap/SRR389222_sub3/images_qualimapReport/genome_coverage_quotes.png", + "qualimap/SRR389222_sub3/images_qualimapReport/genome_gc_content_per_window.png", + "qualimap/SRR389222_sub3/images_qualimapReport/genome_mapping_quality_across_reference.png", + "qualimap/SRR389222_sub3/images_qualimapReport/genome_mapping_quality_histogram.png", + "qualimap/SRR389222_sub3/images_qualimapReport/genome_reads_content_per_read_position.png", + "qualimap/SRR389222_sub3/images_qualimapReport/genome_uniq_read_starts_histogram.png", + "qualimap/SRR389222_sub3/qualimapReport.html", + "qualimap/SRR389222_sub3/raw_data_qualimapReport", + "qualimap/SRR389222_sub3/raw_data_qualimapReport/coverage_across_reference.txt", + "qualimap/SRR389222_sub3/raw_data_qualimapReport/coverage_histogram.txt", + "qualimap/SRR389222_sub3/raw_data_qualimapReport/duplication_rate_histogram.txt", + "qualimap/SRR389222_sub3/raw_data_qualimapReport/genome_fraction_coverage.txt", + "qualimap/SRR389222_sub3/raw_data_qualimapReport/mapped_reads_gc-content_distribution.txt", + "qualimap/SRR389222_sub3/raw_data_qualimapReport/mapped_reads_nucleotide_content.txt", + "qualimap/SRR389222_sub3/raw_data_qualimapReport/mapping_quality_across_reference.txt", + "qualimap/SRR389222_sub3/raw_data_qualimapReport/mapping_quality_histogram.txt" + ], + [ + "Ecoli_10K_methylated_R1_bismark_bt2_pe.deduplicated.bedGraph.gz:md5,58c9ba98d0638c26a30233b006a81172", + "SRR389222_sub1_bismark_bt2.deduplicated.bedGraph.gz:md5,5d7312489e51ca88e1ce1f689db93a64", + "SRR389222_sub2_bismark_bt2.deduplicated.bedGraph.gz:md5,010f32001bbc7805f8e041f3ef0d9ea9", + "SRR389222_sub3_bismark_bt2.deduplicated.bedGraph.gz:md5,8c395581af7053652bc1dc96ec9475ae", + "Ecoli_10K_methylated_R1_bismark_bt2_pe.deduplicated.M-bias.txt:md5,29f3b882a51b63ce77d3d9c69b0e5f85", + "SRR389222_sub1_bismark_bt2.deduplicated.M-bias.txt:md5,290ebfeca4da7809cf9adfe60bab1b29", + "SRR389222_sub2_bismark_bt2.deduplicated.M-bias.txt:md5,e688f6a5f6086ecfeffb6ccd49b2b339", + "SRR389222_sub3_bismark_bt2.deduplicated.M-bias.txt:md5,320b79a59a67d76e28ed73f51b65d8e7", + "CHG_OB_Ecoli_10K_methylated_R1_bismark_bt2_pe.deduplicated.txt.gz:md5,b58ae93fe7981837fd34903112196656", + "CHG_OB_SRR389222_sub1_bismark_bt2.deduplicated.txt.gz:md5,5c177e6f00dfc6e2335a55c6b70efa0c", + "CHG_OB_SRR389222_sub2_bismark_bt2.deduplicated.txt.gz:md5,bd2a76842f7888fce12372b4fc92b8a8", + "CHG_OB_SRR389222_sub3_bismark_bt2.deduplicated.txt.gz:md5,d0266fd6db12f951803e2d916b99d450", + "CHG_OT_Ecoli_10K_methylated_R1_bismark_bt2_pe.deduplicated.txt.gz:md5,b508e40e494dfd9fc2c2017286cd3fe9", + "CHG_OT_SRR389222_sub1_bismark_bt2.deduplicated.txt.gz:md5,5362d479358f644fe2c17cfe02f310f8", + "CHG_OT_SRR389222_sub2_bismark_bt2.deduplicated.txt.gz:md5,61ff8540554132da82fa109e2e270538", + "CHG_OT_SRR389222_sub3_bismark_bt2.deduplicated.txt.gz:md5,786abaff6e9e6c03b8a017d5f90fd06f", + "CHH_OB_Ecoli_10K_methylated_R1_bismark_bt2_pe.deduplicated.txt.gz:md5,ad6f9f5def9bb01a7c516f7da1b22b91", + "CHH_OB_SRR389222_sub1_bismark_bt2.deduplicated.txt.gz:md5,9469ac28e4369032b855ce1a794a56a4", + "CHH_OB_SRR389222_sub2_bismark_bt2.deduplicated.txt.gz:md5,76b467b54c10b64c50cf6cccecb63d47", + "CHH_OB_SRR389222_sub3_bismark_bt2.deduplicated.txt.gz:md5,d069307fc5bc928737b466809c4e8ba7", + "CHH_OT_Ecoli_10K_methylated_R1_bismark_bt2_pe.deduplicated.txt.gz:md5,112a5d2beba2f8ebda273ca3bec98d88", + "CHH_OT_SRR389222_sub1_bismark_bt2.deduplicated.txt.gz:md5,d7628ac941d3fea97297a8dfcfb7aed1", + "CHH_OT_SRR389222_sub2_bismark_bt2.deduplicated.txt.gz:md5,96b62803da69850e9d8b3f3c003734f0", + "CHH_OT_SRR389222_sub3_bismark_bt2.deduplicated.txt.gz:md5,863e126489f9f2bb59039ee68fc32c69", + "CpG_OB_Ecoli_10K_methylated_R1_bismark_bt2_pe.deduplicated.txt.gz:md5,bbe0a5f137b8768036aced610d17c666", + "CpG_OB_SRR389222_sub1_bismark_bt2.deduplicated.txt.gz:md5,f0404fc1fc18c7ff58e8766b405239ed", + "CpG_OB_SRR389222_sub2_bismark_bt2.deduplicated.txt.gz:md5,6bfcec2f42d2c6f8c5f1b6660daaf5c7", + "CpG_OB_SRR389222_sub3_bismark_bt2.deduplicated.txt.gz:md5,f21fe34493f562fb59fe49fddb1dbed5", + "CpG_OT_Ecoli_10K_methylated_R1_bismark_bt2_pe.deduplicated.txt.gz:md5,8bb4cb59815cc9e260dcfa332fcb5ae9", + "CpG_OT_SRR389222_sub1_bismark_bt2.deduplicated.txt.gz:md5,67d04d843e9e1abc8643bc25b27a9ff5", + "CpG_OT_SRR389222_sub2_bismark_bt2.deduplicated.txt.gz:md5,2590eefef9db31197a4900e362685b08", + "CpG_OT_SRR389222_sub3_bismark_bt2.deduplicated.txt.gz:md5,3f3f41195e801b05fd9ca8657fbc5de0", + "Ecoli_10K_methylated_R1_bismark_bt2_pe.deduplicated.bismark.cov.gz:md5,8e6ba6fe66416d73e7f94b4da9ca77b1", + "SRR389222_sub1_bismark_bt2.deduplicated.bismark.cov.gz:md5,eb0d3f96ed97c5d12afeeb49c234849d", + "SRR389222_sub2_bismark_bt2.deduplicated.bismark.cov.gz:md5,137f649c439471d3ff0831874489f124", + "SRR389222_sub3_bismark_bt2.deduplicated.bismark.cov.gz:md5,0fcbddf582509f280400572343435abd", + "Ecoli_10K_methylated_R1_bismark_bt2_pe.deduplicated_splitting_report.txt:md5,4aafc86058fc119122f6c28b7996e3d9", + "SRR389222_sub1_bismark_bt2.deduplicated_splitting_report.txt:md5,ec268cc572b8bcfea0959b47c7510f05", + "SRR389222_sub2_bismark_bt2.deduplicated_splitting_report.txt:md5,ac550001718e22218294a6c16fa3cec4", + "SRR389222_sub3_bismark_bt2.deduplicated_splitting_report.txt:md5,c015374e9b11c9eb7cb1359cb437f7be", + "bismark-methylation-dp.txt:md5,475ce6b3c6f53158847d554ef22993db", + "bismark_alignment.txt:md5,7d00ed2e752ebf0ee7baedc206c6572b", + "bismark_deduplication.txt:md5,e319d929f7d2e163bafba0a48dda554e", + "bismark_mbias_CHG_R1.txt:md5,56716bd5e0f29c8dca3963d2e8111bb8", + "bismark_mbias_CHG_R2.txt:md5,5ad75a070d97528e6285b9501c5bba78", + "bismark_mbias_CHH_R1.txt:md5,9e10b7c831ea33d4a726250fa02a610b", + "bismark_mbias_CHH_R2.txt:md5,8b9b1fad299392ce2014201d1f6a49a1", + "bismark_mbias_CpG_R1.txt:md5,541deb88c74b1700c53b6c4232a39a88", + "bismark_mbias_CpG_R2.txt:md5,6305c6b3a6aa994e620d97af0d7bdf4c", + "bismark_strand_alignment.txt:md5,c298d65a4fb50d87ad7f419d0211e7a3", + "fastqc-status-check-heatmap.txt:md5,218c2a7efbb9c02f652fa78fc739c866", + "fastqc_adapter_content_plot.txt:md5,48d8bd5ece984a74972ce0a0e814dd07", + "fastqc_overrepresented_sequences_plot.txt:md5,9c4b7064950b5b2c486d556984f21e9e", + "fastqc_per_base_n_content_plot.txt:md5,019d5cd4f61a31f4e7016140ca8ee36e", + "fastqc_per_base_sequence_quality_plot.txt:md5,e4c7d522114eab9bc9101e7ee9d83c8f", + "fastqc_per_sequence_gc_content_plot_Counts.txt:md5,302659bee8a02b6a38b24fe25f8eaa87", + "fastqc_per_sequence_gc_content_plot_Percentages.txt:md5,c75b396eb5dda8682fb1652a9b2e92a3", + "fastqc_per_sequence_quality_scores_plot.txt:md5,548c593f4a8be2d8627fc3bd1c280611", + "fastqc_sequence_counts_plot.txt:md5,58eeeb06bc9dcc1764c7daf0847d6bbf", + "fastqc_sequence_duplication_levels_plot.txt:md5,9e5712db9aa39b5754ea1e0c49cfff15", + "fastqc_top_overrepresented_sequences_table.txt:md5,6dfc5334a09c05392ea17369aa742d01", + "multiqc_bismark_alignment.txt:md5,005c0d22d94af339b7145207dd64d92e", + "multiqc_bismark_dedup.txt:md5,363c336840edee5ba1d2f40ce85aa2b6", + "multiqc_bismark_methextract.txt:md5,8c74286850870be34285f1b8a96ab641", + "multiqc_citations.txt:md5,3a8f645306d124626931e2eb6ade3dfc", + "qualimap_coverage_histogram.txt:md5,937adee56f45d795a2dc79d4eeb6704d", + "qualimap_gc_content.txt:md5,d1c2209fd60ab1ef987dcdcbf11ace26", + "qualimap_genome_fraction.txt:md5,e9d696b5fb6e7a660e69b378039907a5", + "qualimap_insert_size.txt:md5,8327f805cbaf1c61ca3128b6c16c7dfd", + "genome_results.txt:md5,024419d0c463732287b0edf27647e21a", + "genome_results.txt:md5,445e1cd701e53837e7747383264f0b15", + "genome_results.txt:md5,cb7e3c8a8097ffd58fc9d4b0f293cf64", + "genome_results.txt:md5,56b2c5bc4772ef6439af3a3b8c97cfaa" + ], + [ + [ + "Ecoli_10K_methylated.deduplicated.sorted.bam", + "b49754b06cf7a7fc8d31b973e5ee9cc3" + ], + [ + "SRR389222_sub1.deduplicated.sorted.bam", + "35d55bee1ca653931716e40dac4aba30" + ], + [ + "SRR389222_sub2.deduplicated.sorted.bam", + "563d9803a88c3ccc7c97b09cb7c7757c" + ], + [ + "SRR389222_sub3.deduplicated.sorted.bam", + "6d92c014b65f85fbdfa1abeca8a5f47f" + ] + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-17T11:09:41.623493366" + } +} \ No newline at end of file diff --git a/tests/bwameth.nf.test b/tests/bwameth.nf.test new file mode 100644 index 00000000..04283574 --- /dev/null +++ b/tests/bwameth.nf.test @@ -0,0 +1,60 @@ +nextflow_pipeline { + + name "Test Workflow main.nf" + script "../main.nf" + config "./nextflow.config" + + test("Params: bwameth") { + when { + params { + aligner = "bwameth" + outdir = "$outputDir" + } + } + + then { + // stable_name: All files + folders in ${params.outdir}/ with a stable name + def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) + // stable_path: All files in ${params.outdir}/ with stable content + def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') + // bam_files: All bam files + def bam_files = getAllFilesFromDir(params.outdir, include: ['**/*.bam']) + assertAll( + { assert workflow.success}, + { assert snapshot( + // Number of tasks + workflow.trace.succeeded().size(), + // pipeline versions.yml file for multiqc from which Nextflow version is removed because we tests pipelines on multiple Nextflow versions + removeNextflowVersion("$outputDir/pipeline_info/nf_core_pipeline_software_mqc_versions.yml"), + // All stable path name + stable_name, + // All files with stable contents + stable_path, + // All bam files + bam_files.collect{ file -> [ file.getName(), bam(file.toString()).getReadsMD5() ] } + ).match() } + ) + } + } + + test("Params: bwameth with bwameth-index") { + when { + params { + aligner = "bwameth" + bwameth_index = "https://github.com/nf-core/test-datasets/raw/methylseq/reference/Bwameth_Index.tar.gz" + outdir = "$outputDir" + } + } + + then { + assertAll( + { assert workflow.success }, + { assert snapshot( + // Number of tasks + workflow.trace.succeeded().size() + ).match() } + ) + } + } + +} diff --git a/tests/bwameth.nf.test.snap b/tests/bwameth.nf.test.snap new file mode 100644 index 00000000..6ce8c6d3 --- /dev/null +++ b/tests/bwameth.nf.test.snap @@ -0,0 +1,453 @@ +{ + "Params: bwameth": { + "content": [ + 50, + { + "BWAMETH_ALIGN": { + "bwameth": "0.2.7" + }, + "BWAMETH_INDEX": { + "bwameth": "0.2.7" + }, + "FASTQC": { + "fastqc": "0.12.1" + }, + "QUALIMAP_BAMQC": { + "qualimap": 2.3 + }, + "TRIMGALORE": { + "trimgalore": "0.6.10", + "cutadapt": 4.2 + }, + "Workflow": { + "nf-core/methylseq": "v2.7.0" + } + }, + [ + "bwameth", + "bwameth/alignments", + "bwameth/alignments/samtools_stats", + "bwameth/alignments/samtools_stats/Ecoli_10K_methylated.flagstat", + "bwameth/alignments/samtools_stats/Ecoli_10K_methylated.stats", + "bwameth/alignments/samtools_stats/SRR389222_sub1.flagstat", + "bwameth/alignments/samtools_stats/SRR389222_sub1.stats", + "bwameth/alignments/samtools_stats/SRR389222_sub2.flagstat", + "bwameth/alignments/samtools_stats/SRR389222_sub2.stats", + "bwameth/alignments/samtools_stats/SRR389222_sub3.flagstat", + "bwameth/alignments/samtools_stats/SRR389222_sub3.stats", + "bwameth/deduplicated", + "bwameth/deduplicated/Ecoli_10K_methylated.markdup.sorted.bam", + "bwameth/deduplicated/Ecoli_10K_methylated.markdup.sorted.bam.bai", + "bwameth/deduplicated/SRR389222_sub1.markdup.sorted.bam", + "bwameth/deduplicated/SRR389222_sub1.markdup.sorted.bam.bai", + "bwameth/deduplicated/SRR389222_sub2.markdup.sorted.bam", + "bwameth/deduplicated/SRR389222_sub2.markdup.sorted.bam.bai", + "bwameth/deduplicated/SRR389222_sub3.markdup.sorted.bam", + "bwameth/deduplicated/SRR389222_sub3.markdup.sorted.bam.bai", + "bwameth/deduplicated/picard_metrics", + "bwameth/deduplicated/picard_metrics/Ecoli_10K_methylated.markdup.sorted.MarkDuplicates.metrics.txt", + "bwameth/deduplicated/picard_metrics/SRR389222_sub1.markdup.sorted.MarkDuplicates.metrics.txt", + "bwameth/deduplicated/picard_metrics/SRR389222_sub2.markdup.sorted.MarkDuplicates.metrics.txt", + "bwameth/deduplicated/picard_metrics/SRR389222_sub3.markdup.sorted.MarkDuplicates.metrics.txt", + "fastqc", + "fastqc/Ecoli_10K_methylated_1_fastqc.html", + "fastqc/Ecoli_10K_methylated_2_fastqc.html", + "fastqc/SRR389222_sub1_fastqc.html", + "fastqc/SRR389222_sub2_fastqc.html", + "fastqc/SRR389222_sub3_fastqc.html", + "fastqc/zips", + "fastqc/zips/Ecoli_10K_methylated_1_fastqc.zip", + "fastqc/zips/Ecoli_10K_methylated_2_fastqc.zip", + "fastqc/zips/SRR389222_sub1_fastqc.zip", + "fastqc/zips/SRR389222_sub2_fastqc.zip", + "fastqc/zips/SRR389222_sub3_fastqc.zip", + "methyldackel", + "methyldackel/Ecoli_10K_methylated.markdup.sorted_CpG.bedGraph", + "methyldackel/SRR389222_sub1.markdup.sorted_CpG.bedGraph", + "methyldackel/SRR389222_sub2.markdup.sorted_CpG.bedGraph", + "methyldackel/SRR389222_sub3.markdup.sorted_CpG.bedGraph", + "methyldackel/mbias", + "methyldackel/mbias/Ecoli_10K_methylated.mbias.txt", + "methyldackel/mbias/SRR389222_sub1.mbias.txt", + "methyldackel/mbias/SRR389222_sub2.mbias.txt", + "methyldackel/mbias/SRR389222_sub3.mbias.txt", + "multiqc", + "multiqc/bwameth", + "multiqc/bwameth/multiqc_data", + "multiqc/bwameth/multiqc_data/cutadapt_filtered_reads_plot.txt", + "multiqc/bwameth/multiqc_data/cutadapt_trimmed_sequences_plot_3_Counts.txt", + "multiqc/bwameth/multiqc_data/cutadapt_trimmed_sequences_plot_3_Obs_Exp.txt", + "multiqc/bwameth/multiqc_data/fastqc-status-check-heatmap.txt", + "multiqc/bwameth/multiqc_data/fastqc_adapter_content_plot.txt", + "multiqc/bwameth/multiqc_data/fastqc_overrepresented_sequences_plot.txt", + "multiqc/bwameth/multiqc_data/fastqc_per_base_n_content_plot.txt", + "multiqc/bwameth/multiqc_data/fastqc_per_base_sequence_quality_plot.txt", + "multiqc/bwameth/multiqc_data/fastqc_per_sequence_gc_content_plot_Counts.txt", + "multiqc/bwameth/multiqc_data/fastqc_per_sequence_gc_content_plot_Percentages.txt", + "multiqc/bwameth/multiqc_data/fastqc_per_sequence_quality_scores_plot.txt", + "multiqc/bwameth/multiqc_data/fastqc_sequence_counts_plot.txt", + "multiqc/bwameth/multiqc_data/fastqc_sequence_duplication_levels_plot.txt", + "multiqc/bwameth/multiqc_data/fastqc_top_overrepresented_sequences_table.txt", + "multiqc/bwameth/multiqc_data/multiqc.log", + "multiqc/bwameth/multiqc_data/multiqc_citations.txt", + "multiqc/bwameth/multiqc_data/multiqc_cutadapt.txt", + "multiqc/bwameth/multiqc_data/multiqc_data.json", + "multiqc/bwameth/multiqc_data/multiqc_fastqc.txt", + "multiqc/bwameth/multiqc_data/multiqc_general_stats.txt", + "multiqc/bwameth/multiqc_data/multiqc_picard_dups.txt", + "multiqc/bwameth/multiqc_data/multiqc_qualimap_bamqc_genome_results.txt", + "multiqc/bwameth/multiqc_data/multiqc_samtools_flagstat.txt", + "multiqc/bwameth/multiqc_data/multiqc_samtools_stats.txt", + "multiqc/bwameth/multiqc_data/multiqc_software_versions.txt", + "multiqc/bwameth/multiqc_data/multiqc_sources.txt", + "multiqc/bwameth/multiqc_data/picard_deduplication.txt", + "multiqc/bwameth/multiqc_data/picard_histogram.txt", + "multiqc/bwameth/multiqc_data/picard_histogram_1.txt", + "multiqc/bwameth/multiqc_data/picard_histogram_2.txt", + "multiqc/bwameth/multiqc_data/qualimap_coverage_histogram.txt", + "multiqc/bwameth/multiqc_data/qualimap_gc_content.txt", + "multiqc/bwameth/multiqc_data/qualimap_genome_fraction.txt", + "multiqc/bwameth/multiqc_data/qualimap_insert_size.txt", + "multiqc/bwameth/multiqc_data/samtools-flagstat-dp_Percentage_of_total.txt", + "multiqc/bwameth/multiqc_data/samtools-flagstat-dp_Read_counts.txt", + "multiqc/bwameth/multiqc_data/samtools-stats-dp.txt", + "multiqc/bwameth/multiqc_data/samtools_alignment_plot.txt", + "multiqc/bwameth/multiqc_plots", + "multiqc/bwameth/multiqc_plots/pdf", + "multiqc/bwameth/multiqc_plots/pdf/cutadapt_filtered_reads_plot-cnt.pdf", + "multiqc/bwameth/multiqc_plots/pdf/cutadapt_filtered_reads_plot-pct.pdf", + "multiqc/bwameth/multiqc_plots/pdf/cutadapt_trimmed_sequences_plot_3_Counts.pdf", + "multiqc/bwameth/multiqc_plots/pdf/cutadapt_trimmed_sequences_plot_3_Obs_Exp.pdf", + "multiqc/bwameth/multiqc_plots/pdf/fastqc-status-check-heatmap.pdf", + "multiqc/bwameth/multiqc_plots/pdf/fastqc_adapter_content_plot.pdf", + "multiqc/bwameth/multiqc_plots/pdf/fastqc_overrepresented_sequences_plot.pdf", + "multiqc/bwameth/multiqc_plots/pdf/fastqc_per_base_n_content_plot.pdf", + "multiqc/bwameth/multiqc_plots/pdf/fastqc_per_base_sequence_quality_plot.pdf", + "multiqc/bwameth/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Counts.pdf", + "multiqc/bwameth/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Percentages.pdf", + "multiqc/bwameth/multiqc_plots/pdf/fastqc_per_sequence_quality_scores_plot.pdf", + "multiqc/bwameth/multiqc_plots/pdf/fastqc_sequence_counts_plot-cnt.pdf", + "multiqc/bwameth/multiqc_plots/pdf/fastqc_sequence_counts_plot-pct.pdf", + "multiqc/bwameth/multiqc_plots/pdf/fastqc_sequence_duplication_levels_plot.pdf", + "multiqc/bwameth/multiqc_plots/pdf/fastqc_top_overrepresented_sequences_table.pdf", + "multiqc/bwameth/multiqc_plots/pdf/general_stats_table.pdf", + "multiqc/bwameth/multiqc_plots/pdf/picard_deduplication-cnt.pdf", + "multiqc/bwameth/multiqc_plots/pdf/picard_deduplication-pct.pdf", + "multiqc/bwameth/multiqc_plots/pdf/qualimap_coverage_histogram.pdf", + "multiqc/bwameth/multiqc_plots/pdf/qualimap_gc_content.pdf", + "multiqc/bwameth/multiqc_plots/pdf/qualimap_genome_fraction.pdf", + "multiqc/bwameth/multiqc_plots/pdf/qualimap_insert_size.pdf", + "multiqc/bwameth/multiqc_plots/pdf/samtools-flagstat-dp_Percentage_of_total.pdf", + "multiqc/bwameth/multiqc_plots/pdf/samtools-flagstat-dp_Read_counts.pdf", + "multiqc/bwameth/multiqc_plots/pdf/samtools-stats-dp.pdf", + "multiqc/bwameth/multiqc_plots/pdf/samtools_alignment_plot-cnt.pdf", + "multiqc/bwameth/multiqc_plots/pdf/samtools_alignment_plot-pct.pdf", + "multiqc/bwameth/multiqc_plots/png", + "multiqc/bwameth/multiqc_plots/png/cutadapt_filtered_reads_plot-cnt.png", + "multiqc/bwameth/multiqc_plots/png/cutadapt_filtered_reads_plot-pct.png", + "multiqc/bwameth/multiqc_plots/png/cutadapt_trimmed_sequences_plot_3_Counts.png", + "multiqc/bwameth/multiqc_plots/png/cutadapt_trimmed_sequences_plot_3_Obs_Exp.png", + "multiqc/bwameth/multiqc_plots/png/fastqc-status-check-heatmap.png", + "multiqc/bwameth/multiqc_plots/png/fastqc_adapter_content_plot.png", + "multiqc/bwameth/multiqc_plots/png/fastqc_overrepresented_sequences_plot.png", + "multiqc/bwameth/multiqc_plots/png/fastqc_per_base_n_content_plot.png", + "multiqc/bwameth/multiqc_plots/png/fastqc_per_base_sequence_quality_plot.png", + "multiqc/bwameth/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Counts.png", + "multiqc/bwameth/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Percentages.png", + "multiqc/bwameth/multiqc_plots/png/fastqc_per_sequence_quality_scores_plot.png", + "multiqc/bwameth/multiqc_plots/png/fastqc_sequence_counts_plot-cnt.png", + "multiqc/bwameth/multiqc_plots/png/fastqc_sequence_counts_plot-pct.png", + "multiqc/bwameth/multiqc_plots/png/fastqc_sequence_duplication_levels_plot.png", + "multiqc/bwameth/multiqc_plots/png/fastqc_top_overrepresented_sequences_table.png", + "multiqc/bwameth/multiqc_plots/png/general_stats_table.png", + "multiqc/bwameth/multiqc_plots/png/picard_deduplication-cnt.png", + "multiqc/bwameth/multiqc_plots/png/picard_deduplication-pct.png", + "multiqc/bwameth/multiqc_plots/png/qualimap_coverage_histogram.png", + "multiqc/bwameth/multiqc_plots/png/qualimap_gc_content.png", + "multiqc/bwameth/multiqc_plots/png/qualimap_genome_fraction.png", + "multiqc/bwameth/multiqc_plots/png/qualimap_insert_size.png", + "multiqc/bwameth/multiqc_plots/png/samtools-flagstat-dp_Percentage_of_total.png", + "multiqc/bwameth/multiqc_plots/png/samtools-flagstat-dp_Read_counts.png", + "multiqc/bwameth/multiqc_plots/png/samtools-stats-dp.png", + "multiqc/bwameth/multiqc_plots/png/samtools_alignment_plot-cnt.png", + "multiqc/bwameth/multiqc_plots/png/samtools_alignment_plot-pct.png", + "multiqc/bwameth/multiqc_plots/svg", + "multiqc/bwameth/multiqc_plots/svg/cutadapt_filtered_reads_plot-cnt.svg", + "multiqc/bwameth/multiqc_plots/svg/cutadapt_filtered_reads_plot-pct.svg", + "multiqc/bwameth/multiqc_plots/svg/cutadapt_trimmed_sequences_plot_3_Counts.svg", + "multiqc/bwameth/multiqc_plots/svg/cutadapt_trimmed_sequences_plot_3_Obs_Exp.svg", + "multiqc/bwameth/multiqc_plots/svg/fastqc-status-check-heatmap.svg", + "multiqc/bwameth/multiqc_plots/svg/fastqc_adapter_content_plot.svg", + "multiqc/bwameth/multiqc_plots/svg/fastqc_overrepresented_sequences_plot.svg", + "multiqc/bwameth/multiqc_plots/svg/fastqc_per_base_n_content_plot.svg", + "multiqc/bwameth/multiqc_plots/svg/fastqc_per_base_sequence_quality_plot.svg", + "multiqc/bwameth/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Counts.svg", + "multiqc/bwameth/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Percentages.svg", + "multiqc/bwameth/multiqc_plots/svg/fastqc_per_sequence_quality_scores_plot.svg", + "multiqc/bwameth/multiqc_plots/svg/fastqc_sequence_counts_plot-cnt.svg", + "multiqc/bwameth/multiqc_plots/svg/fastqc_sequence_counts_plot-pct.svg", + "multiqc/bwameth/multiqc_plots/svg/fastqc_sequence_duplication_levels_plot.svg", + "multiqc/bwameth/multiqc_plots/svg/fastqc_top_overrepresented_sequences_table.svg", + "multiqc/bwameth/multiqc_plots/svg/general_stats_table.svg", + "multiqc/bwameth/multiqc_plots/svg/picard_deduplication-cnt.svg", + "multiqc/bwameth/multiqc_plots/svg/picard_deduplication-pct.svg", + "multiqc/bwameth/multiqc_plots/svg/qualimap_coverage_histogram.svg", + "multiqc/bwameth/multiqc_plots/svg/qualimap_gc_content.svg", + "multiqc/bwameth/multiqc_plots/svg/qualimap_genome_fraction.svg", + "multiqc/bwameth/multiqc_plots/svg/qualimap_insert_size.svg", + "multiqc/bwameth/multiqc_plots/svg/samtools-flagstat-dp_Percentage_of_total.svg", + "multiqc/bwameth/multiqc_plots/svg/samtools-flagstat-dp_Read_counts.svg", + "multiqc/bwameth/multiqc_plots/svg/samtools-stats-dp.svg", + "multiqc/bwameth/multiqc_plots/svg/samtools_alignment_plot-cnt.svg", + "multiqc/bwameth/multiqc_plots/svg/samtools_alignment_plot-pct.svg", + "multiqc/bwameth/multiqc_report.html", + "pipeline_info", + "pipeline_info/nf_core_pipeline_software_mqc_versions.yml", + "qualimap", + "qualimap/Ecoli_10K_methylated", + "qualimap/Ecoli_10K_methylated/css", + "qualimap/Ecoli_10K_methylated/css/agogo.css", + "qualimap/Ecoli_10K_methylated/css/ajax-loader.gif", + "qualimap/Ecoli_10K_methylated/css/basic.css", + "qualimap/Ecoli_10K_methylated/css/bgfooter.png", + "qualimap/Ecoli_10K_methylated/css/bgtop.png", + "qualimap/Ecoli_10K_methylated/css/comment-bright.png", + "qualimap/Ecoli_10K_methylated/css/comment-close.png", + "qualimap/Ecoli_10K_methylated/css/comment.png", + "qualimap/Ecoli_10K_methylated/css/doctools.js", + "qualimap/Ecoli_10K_methylated/css/down-pressed.png", + "qualimap/Ecoli_10K_methylated/css/down.png", + "qualimap/Ecoli_10K_methylated/css/file.png", + "qualimap/Ecoli_10K_methylated/css/jquery.js", + "qualimap/Ecoli_10K_methylated/css/minus.png", + "qualimap/Ecoli_10K_methylated/css/plus.png", + "qualimap/Ecoli_10K_methylated/css/pygments.css", + "qualimap/Ecoli_10K_methylated/css/qualimap_logo_small.png", + "qualimap/Ecoli_10K_methylated/css/report.css", + "qualimap/Ecoli_10K_methylated/css/searchtools.js", + "qualimap/Ecoli_10K_methylated/css/underscore.js", + "qualimap/Ecoli_10K_methylated/css/up-pressed.png", + "qualimap/Ecoli_10K_methylated/css/up.png", + "qualimap/Ecoli_10K_methylated/css/websupport.js", + "qualimap/Ecoli_10K_methylated/genome_results.txt", + "qualimap/Ecoli_10K_methylated/images_qualimapReport", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_coverage_0to50_histogram.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_coverage_across_reference.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_coverage_histogram.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_coverage_quotes.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_gc_content_per_window.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_homopolymer_indels.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_insert_size_across_reference.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_insert_size_histogram.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_mapping_quality_across_reference.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_mapping_quality_histogram.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_reads_clipping_profile.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_reads_content_per_read_position.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_uniq_read_starts_histogram.png", + "qualimap/Ecoli_10K_methylated/qualimapReport.html", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/coverage_across_reference.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/coverage_histogram.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/duplication_rate_histogram.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/genome_fraction_coverage.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/homopolymer_indels.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/insert_size_across_reference.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/insert_size_histogram.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/mapped_reads_clipping_profile.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/mapped_reads_gc-content_distribution.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/mapped_reads_nucleotide_content.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/mapping_quality_across_reference.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/mapping_quality_histogram.txt", + "qualimap/SRR389222_sub1", + "qualimap/SRR389222_sub1/css", + "qualimap/SRR389222_sub1/css/agogo.css", + "qualimap/SRR389222_sub1/css/ajax-loader.gif", + "qualimap/SRR389222_sub1/css/basic.css", + "qualimap/SRR389222_sub1/css/bgfooter.png", + "qualimap/SRR389222_sub1/css/bgtop.png", + "qualimap/SRR389222_sub1/css/comment-bright.png", + "qualimap/SRR389222_sub1/css/comment-close.png", + "qualimap/SRR389222_sub1/css/comment.png", + "qualimap/SRR389222_sub1/css/doctools.js", + "qualimap/SRR389222_sub1/css/down-pressed.png", + "qualimap/SRR389222_sub1/css/down.png", + "qualimap/SRR389222_sub1/css/file.png", + "qualimap/SRR389222_sub1/css/jquery.js", + "qualimap/SRR389222_sub1/css/minus.png", + "qualimap/SRR389222_sub1/css/plus.png", + "qualimap/SRR389222_sub1/css/pygments.css", + "qualimap/SRR389222_sub1/css/qualimap_logo_small.png", + "qualimap/SRR389222_sub1/css/report.css", + "qualimap/SRR389222_sub1/css/searchtools.js", + "qualimap/SRR389222_sub1/css/underscore.js", + "qualimap/SRR389222_sub1/css/up-pressed.png", + "qualimap/SRR389222_sub1/css/up.png", + "qualimap/SRR389222_sub1/css/websupport.js", + "qualimap/SRR389222_sub1/genome_results.txt", + "qualimap/SRR389222_sub1/qualimapReport.html", + "qualimap/SRR389222_sub1/raw_data_qualimapReport", + "qualimap/SRR389222_sub2", + "qualimap/SRR389222_sub2/css", + "qualimap/SRR389222_sub2/css/agogo.css", + "qualimap/SRR389222_sub2/css/ajax-loader.gif", + "qualimap/SRR389222_sub2/css/basic.css", + "qualimap/SRR389222_sub2/css/bgfooter.png", + "qualimap/SRR389222_sub2/css/bgtop.png", + "qualimap/SRR389222_sub2/css/comment-bright.png", + "qualimap/SRR389222_sub2/css/comment-close.png", + "qualimap/SRR389222_sub2/css/comment.png", + "qualimap/SRR389222_sub2/css/doctools.js", + "qualimap/SRR389222_sub2/css/down-pressed.png", + "qualimap/SRR389222_sub2/css/down.png", + "qualimap/SRR389222_sub2/css/file.png", + "qualimap/SRR389222_sub2/css/jquery.js", + "qualimap/SRR389222_sub2/css/minus.png", + "qualimap/SRR389222_sub2/css/plus.png", + "qualimap/SRR389222_sub2/css/pygments.css", + "qualimap/SRR389222_sub2/css/qualimap_logo_small.png", + "qualimap/SRR389222_sub2/css/report.css", + "qualimap/SRR389222_sub2/css/searchtools.js", + "qualimap/SRR389222_sub2/css/underscore.js", + "qualimap/SRR389222_sub2/css/up-pressed.png", + "qualimap/SRR389222_sub2/css/up.png", + "qualimap/SRR389222_sub2/css/websupport.js", + "qualimap/SRR389222_sub2/genome_results.txt", + "qualimap/SRR389222_sub2/qualimapReport.html", + "qualimap/SRR389222_sub2/raw_data_qualimapReport", + "qualimap/SRR389222_sub3", + "qualimap/SRR389222_sub3/css", + "qualimap/SRR389222_sub3/css/agogo.css", + "qualimap/SRR389222_sub3/css/ajax-loader.gif", + "qualimap/SRR389222_sub3/css/basic.css", + "qualimap/SRR389222_sub3/css/bgfooter.png", + "qualimap/SRR389222_sub3/css/bgtop.png", + "qualimap/SRR389222_sub3/css/comment-bright.png", + "qualimap/SRR389222_sub3/css/comment-close.png", + "qualimap/SRR389222_sub3/css/comment.png", + "qualimap/SRR389222_sub3/css/doctools.js", + "qualimap/SRR389222_sub3/css/down-pressed.png", + "qualimap/SRR389222_sub3/css/down.png", + "qualimap/SRR389222_sub3/css/file.png", + "qualimap/SRR389222_sub3/css/jquery.js", + "qualimap/SRR389222_sub3/css/minus.png", + "qualimap/SRR389222_sub3/css/plus.png", + "qualimap/SRR389222_sub3/css/pygments.css", + "qualimap/SRR389222_sub3/css/qualimap_logo_small.png", + "qualimap/SRR389222_sub3/css/report.css", + "qualimap/SRR389222_sub3/css/searchtools.js", + "qualimap/SRR389222_sub3/css/underscore.js", + "qualimap/SRR389222_sub3/css/up-pressed.png", + "qualimap/SRR389222_sub3/css/up.png", + "qualimap/SRR389222_sub3/css/websupport.js", + "qualimap/SRR389222_sub3/genome_results.txt", + "qualimap/SRR389222_sub3/qualimapReport.html", + "qualimap/SRR389222_sub3/raw_data_qualimapReport", + "trimgalore", + "trimgalore/fastqc", + "trimgalore/fastqc/Ecoli_10K_methylated_1_val_1_fastqc.html", + "trimgalore/fastqc/Ecoli_10K_methylated_2_val_2_fastqc.html", + "trimgalore/fastqc/SRR389222_sub1_trimmed_fastqc.html", + "trimgalore/fastqc/SRR389222_sub2_trimmed_fastqc.html", + "trimgalore/fastqc/SRR389222_sub3_trimmed_fastqc.html", + "trimgalore/fastqc/zips", + "trimgalore/fastqc/zips/Ecoli_10K_methylated_1_val_1_fastqc.zip", + "trimgalore/fastqc/zips/Ecoli_10K_methylated_2_val_2_fastqc.zip", + "trimgalore/fastqc/zips/SRR389222_sub1_trimmed_fastqc.zip", + "trimgalore/fastqc/zips/SRR389222_sub2_trimmed_fastqc.zip", + "trimgalore/fastqc/zips/SRR389222_sub3_trimmed_fastqc.zip", + "trimgalore/logs", + "trimgalore/logs/Ecoli_10K_methylated_1.fastq.gz_trimming_report.txt", + "trimgalore/logs/Ecoli_10K_methylated_2.fastq.gz_trimming_report.txt", + "trimgalore/logs/SRR389222_sub1.fastq.gz_trimming_report.txt", + "trimgalore/logs/SRR389222_sub2.fastq.gz_trimming_report.txt", + "trimgalore/logs/SRR389222_sub3.fastq.gz_trimming_report.txt" + ], + [ + "Ecoli_10K_methylated.flagstat:md5,f520e87cc4050799a0dbed72909572ec", + "Ecoli_10K_methylated.stats:md5,2df1b94e099f2948ad990224f7cf07a4", + "SRR389222_sub1.flagstat:md5,ad8159a7683b9c3057bf54ccb77a2ddc", + "SRR389222_sub1.stats:md5,0f660ccc767662d4bd8c5197f3d46a87", + "SRR389222_sub2.flagstat:md5,e768b4f54014d62b096152c44f920bc1", + "SRR389222_sub2.stats:md5,9343b74f4d825bfb2a554be3d8bed432", + "SRR389222_sub3.flagstat:md5,39516f7d2c77e6fef9543edf8cddbcd6", + "SRR389222_sub3.stats:md5,f41e135f71893e2a8b589c4a66cbfeec", + "Ecoli_10K_methylated.markdup.sorted_CpG.bedGraph:md5,d3bce01078b6e7749f3906bf9faad5b5", + "SRR389222_sub1.markdup.sorted_CpG.bedGraph:md5,0944ad0e3b05791bf6dfd06be7ca4af1", + "SRR389222_sub2.markdup.sorted_CpG.bedGraph:md5,0a3c19af55d1625e91903ae25d1d2098", + "SRR389222_sub3.markdup.sorted_CpG.bedGraph:md5,a91e6b039e9581a9d2ef6f6057918b39", + "Ecoli_10K_methylated.mbias.txt:md5,3a448a2a6364b2de3129365a271c0534", + "SRR389222_sub1.mbias.txt:md5,fce04d733e066d0b933cedc602e2af81", + "SRR389222_sub2.mbias.txt:md5,fce04d733e066d0b933cedc602e2af81", + "SRR389222_sub3.mbias.txt:md5,fce04d733e066d0b933cedc602e2af81", + "cutadapt_filtered_reads_plot.txt:md5,ff1b6d4011a5be5410b9404f7ff56c56", + "cutadapt_trimmed_sequences_plot_3_Counts.txt:md5,57d07c19b0c30dc88df96c30bedcdc33", + "cutadapt_trimmed_sequences_plot_3_Obs_Exp.txt:md5,1e5ca4193f8290c5c812334d03615b41", + "fastqc-status-check-heatmap.txt:md5,218c2a7efbb9c02f652fa78fc739c866", + "fastqc_adapter_content_plot.txt:md5,48d8bd5ece984a74972ce0a0e814dd07", + "fastqc_overrepresented_sequences_plot.txt:md5,9c4b7064950b5b2c486d556984f21e9e", + "fastqc_per_base_n_content_plot.txt:md5,019d5cd4f61a31f4e7016140ca8ee36e", + "fastqc_per_base_sequence_quality_plot.txt:md5,e4c7d522114eab9bc9101e7ee9d83c8f", + "fastqc_per_sequence_gc_content_plot_Counts.txt:md5,302659bee8a02b6a38b24fe25f8eaa87", + "fastqc_per_sequence_gc_content_plot_Percentages.txt:md5,c75b396eb5dda8682fb1652a9b2e92a3", + "fastqc_per_sequence_quality_scores_plot.txt:md5,548c593f4a8be2d8627fc3bd1c280611", + "fastqc_sequence_counts_plot.txt:md5,58eeeb06bc9dcc1764c7daf0847d6bbf", + "fastqc_sequence_duplication_levels_plot.txt:md5,9e5712db9aa39b5754ea1e0c49cfff15", + "fastqc_top_overrepresented_sequences_table.txt:md5,6dfc5334a09c05392ea17369aa742d01", + "multiqc_citations.txt:md5,581df5b266851d0244e7cfb213351ffb", + "multiqc_cutadapt.txt:md5,f7a61369244b1e040d264e6913b8a839", + "multiqc_picard_dups.txt:md5,82eaab96189f22fd93db38bb516ba6a5", + "multiqc_samtools_flagstat.txt:md5,a8f5b45b8b3412a9adc3dd0d35208c73", + "multiqc_samtools_stats.txt:md5,e24271a8111b06c1f545b6b1a077a4a7", + "picard_deduplication.txt:md5,7dacf4d4e0d7d2d9a7205beecfa7125c", + "picard_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "picard_histogram_1.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "picard_histogram_2.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "qualimap_coverage_histogram.txt:md5,c7c932e4d84b735bd434c1aaa713b6e6", + "qualimap_gc_content.txt:md5,893d1acba7a6675ff9e2eff2985fa4e3", + "qualimap_genome_fraction.txt:md5,ef5b6010b52a03f6e58356db7128d0dc", + "qualimap_insert_size.txt:md5,f86cc9fe7a12af8f62f26312660e9225", + "samtools-flagstat-dp_Percentage_of_total.txt:md5,ff5d65a480449ba98587c43f3a2bd33e", + "samtools-flagstat-dp_Read_counts.txt:md5,6a5332e2ad59f7da00b5a9a1a25fd2f8", + "samtools-stats-dp.txt:md5,52021b9a9455b39b39dd357bc2e8d346", + "samtools_alignment_plot.txt:md5,39f42e039f96cc2b17248b44ccaf425b", + "genome_results.txt:md5,1ee2e29ac41c2cd7e6a0f00741e8d16e", + "genome_results.txt:md5,2c755b15ae5ad4a1d29395320a6264ca", + "genome_results.txt:md5,2294badeccd2e8870fd6c60d115687b0", + "genome_results.txt:md5,4da1144933d094185d02f7482c120804" + ], + [ + [ + "Ecoli_10K_methylated.markdup.sorted.bam", + "a2921f761f431ede522016f83f75c12d" + ], + [ + "SRR389222_sub1.markdup.sorted.bam", + "e50275d6d44138f19d65ee479444d5ce" + ], + [ + "SRR389222_sub2.markdup.sorted.bam", + "d365b8b2662b2abffb51dd67a1f463b4" + ], + [ + "SRR389222_sub3.markdup.sorted.bam", + "a9fd2900b9d759f8f4f62cbbb2744fde" + ] + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-21T17:58:28.435328799" + }, + "Params: bwameth with bwameth-index": { + "content": [ + 50 + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.2" + }, + "timestamp": "2024-10-12T07:40:41.336750081" + } +} \ No newline at end of file diff --git a/tests/bwameth_rrbs.nf.test b/tests/bwameth_rrbs.nf.test new file mode 100644 index 00000000..cc0fba43 --- /dev/null +++ b/tests/bwameth_rrbs.nf.test @@ -0,0 +1,41 @@ +nextflow_pipeline { + + name "Test Workflow main.nf" + script "../main.nf" + config "./nextflow.config" + + test("Params: bwameth | rrbs") { + when { + params { + aligner = "bwameth" + rrbs = true + outdir = "$outputDir" + } + } + + then { + // stable_name: All files + folders in ${params.outdir}/ with a stable name + def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) + // stable_path: All files in ${params.outdir}/ with stable content + def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') + // bam_files: All bam files + def bam_files = getAllFilesFromDir(params.outdir, include: ['**/*.bam']) + assertAll( + { assert workflow.success}, + { assert snapshot( + // Number of tasks + workflow.trace.succeeded().size(), + // pipeline versions.yml file for multiqc from which Nextflow version is removed because we tests pipelines on multiple Nextflow versions + removeNextflowVersion("$outputDir/pipeline_info/nf_core_pipeline_software_mqc_versions.yml"), + // All stable path name + stable_name, + // All files with stable contents + stable_path, + // All bam files + bam_files.collect{ file -> [ file.getName(), bam(file.toString()).getReadsMD5() ] } + ).match() } + ) + } + } + +} diff --git a/tests/bwameth_rrbs.nf.test.snap b/tests/bwameth_rrbs.nf.test.snap new file mode 100644 index 00000000..59f497d9 --- /dev/null +++ b/tests/bwameth_rrbs.nf.test.snap @@ -0,0 +1,398 @@ +{ + "Params: bwameth | rrbs": { + "content": [ + 42, + { + "BWAMETH_ALIGN": { + "bwameth": "0.2.7" + }, + "BWAMETH_INDEX": { + "bwameth": "0.2.7" + }, + "FASTQC": { + "fastqc": "0.12.1" + }, + "QUALIMAP_BAMQC": { + "qualimap": 2.3 + }, + "TRIMGALORE": { + "trimgalore": "0.6.10", + "cutadapt": 4.2 + }, + "Workflow": { + "nf-core/methylseq": "v2.7.0" + } + }, + [ + "bwameth", + "bwameth/alignments", + "bwameth/alignments/samtools_stats", + "bwameth/alignments/samtools_stats/Ecoli_10K_methylated.flagstat", + "bwameth/alignments/samtools_stats/Ecoli_10K_methylated.stats", + "bwameth/alignments/samtools_stats/SRR389222_sub1.flagstat", + "bwameth/alignments/samtools_stats/SRR389222_sub1.stats", + "bwameth/alignments/samtools_stats/SRR389222_sub2.flagstat", + "bwameth/alignments/samtools_stats/SRR389222_sub2.stats", + "bwameth/alignments/samtools_stats/SRR389222_sub3.flagstat", + "bwameth/alignments/samtools_stats/SRR389222_sub3.stats", + "fastqc", + "fastqc/Ecoli_10K_methylated_1_fastqc.html", + "fastqc/Ecoli_10K_methylated_2_fastqc.html", + "fastqc/SRR389222_sub1_fastqc.html", + "fastqc/SRR389222_sub2_fastqc.html", + "fastqc/SRR389222_sub3_fastqc.html", + "fastqc/zips", + "fastqc/zips/Ecoli_10K_methylated_1_fastqc.zip", + "fastqc/zips/Ecoli_10K_methylated_2_fastqc.zip", + "fastqc/zips/SRR389222_sub1_fastqc.zip", + "fastqc/zips/SRR389222_sub2_fastqc.zip", + "fastqc/zips/SRR389222_sub3_fastqc.zip", + "methyldackel", + "methyldackel/Ecoli_10K_methylated.sorted_CpG.bedGraph", + "methyldackel/SRR389222_sub1.sorted_CpG.bedGraph", + "methyldackel/SRR389222_sub2.sorted_CpG.bedGraph", + "methyldackel/SRR389222_sub3.sorted_CpG.bedGraph", + "methyldackel/mbias", + "methyldackel/mbias/Ecoli_10K_methylated.mbias.txt", + "methyldackel/mbias/SRR389222_sub1.mbias.txt", + "methyldackel/mbias/SRR389222_sub2.mbias.txt", + "methyldackel/mbias/SRR389222_sub3.mbias.txt", + "multiqc", + "multiqc/bwameth", + "multiqc/bwameth/multiqc_data", + "multiqc/bwameth/multiqc_data/cutadapt_filtered_reads_plot.txt", + "multiqc/bwameth/multiqc_data/cutadapt_trimmed_sequences_plot_3_Counts.txt", + "multiqc/bwameth/multiqc_data/cutadapt_trimmed_sequences_plot_3_Obs_Exp.txt", + "multiqc/bwameth/multiqc_data/fastqc-status-check-heatmap.txt", + "multiqc/bwameth/multiqc_data/fastqc_adapter_content_plot.txt", + "multiqc/bwameth/multiqc_data/fastqc_overrepresented_sequences_plot.txt", + "multiqc/bwameth/multiqc_data/fastqc_per_base_n_content_plot.txt", + "multiqc/bwameth/multiqc_data/fastqc_per_base_sequence_quality_plot.txt", + "multiqc/bwameth/multiqc_data/fastqc_per_sequence_gc_content_plot_Counts.txt", + "multiqc/bwameth/multiqc_data/fastqc_per_sequence_gc_content_plot_Percentages.txt", + "multiqc/bwameth/multiqc_data/fastqc_per_sequence_quality_scores_plot.txt", + "multiqc/bwameth/multiqc_data/fastqc_sequence_counts_plot.txt", + "multiqc/bwameth/multiqc_data/fastqc_sequence_duplication_levels_plot.txt", + "multiqc/bwameth/multiqc_data/fastqc_top_overrepresented_sequences_table.txt", + "multiqc/bwameth/multiqc_data/multiqc.log", + "multiqc/bwameth/multiqc_data/multiqc_citations.txt", + "multiqc/bwameth/multiqc_data/multiqc_cutadapt.txt", + "multiqc/bwameth/multiqc_data/multiqc_data.json", + "multiqc/bwameth/multiqc_data/multiqc_fastqc.txt", + "multiqc/bwameth/multiqc_data/multiqc_general_stats.txt", + "multiqc/bwameth/multiqc_data/multiqc_qualimap_bamqc_genome_results.txt", + "multiqc/bwameth/multiqc_data/multiqc_samtools_flagstat.txt", + "multiqc/bwameth/multiqc_data/multiqc_samtools_stats.txt", + "multiqc/bwameth/multiqc_data/multiqc_software_versions.txt", + "multiqc/bwameth/multiqc_data/multiqc_sources.txt", + "multiqc/bwameth/multiqc_data/qualimap_coverage_histogram.txt", + "multiqc/bwameth/multiqc_data/qualimap_gc_content.txt", + "multiqc/bwameth/multiqc_data/qualimap_genome_fraction.txt", + "multiqc/bwameth/multiqc_data/qualimap_insert_size.txt", + "multiqc/bwameth/multiqc_data/samtools-flagstat-dp_Percentage_of_total.txt", + "multiqc/bwameth/multiqc_data/samtools-flagstat-dp_Read_counts.txt", + "multiqc/bwameth/multiqc_data/samtools-stats-dp.txt", + "multiqc/bwameth/multiqc_data/samtools_alignment_plot.txt", + "multiqc/bwameth/multiqc_plots", + "multiqc/bwameth/multiqc_plots/pdf", + "multiqc/bwameth/multiqc_plots/pdf/cutadapt_filtered_reads_plot-cnt.pdf", + "multiqc/bwameth/multiqc_plots/pdf/cutadapt_filtered_reads_plot-pct.pdf", + "multiqc/bwameth/multiqc_plots/pdf/cutadapt_trimmed_sequences_plot_3_Counts.pdf", + "multiqc/bwameth/multiqc_plots/pdf/cutadapt_trimmed_sequences_plot_3_Obs_Exp.pdf", + "multiqc/bwameth/multiqc_plots/pdf/fastqc-status-check-heatmap.pdf", + "multiqc/bwameth/multiqc_plots/pdf/fastqc_adapter_content_plot.pdf", + "multiqc/bwameth/multiqc_plots/pdf/fastqc_overrepresented_sequences_plot.pdf", + "multiqc/bwameth/multiqc_plots/pdf/fastqc_per_base_n_content_plot.pdf", + "multiqc/bwameth/multiqc_plots/pdf/fastqc_per_base_sequence_quality_plot.pdf", + "multiqc/bwameth/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Counts.pdf", + "multiqc/bwameth/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Percentages.pdf", + "multiqc/bwameth/multiqc_plots/pdf/fastqc_per_sequence_quality_scores_plot.pdf", + "multiqc/bwameth/multiqc_plots/pdf/fastqc_sequence_counts_plot-cnt.pdf", + "multiqc/bwameth/multiqc_plots/pdf/fastqc_sequence_counts_plot-pct.pdf", + "multiqc/bwameth/multiqc_plots/pdf/fastqc_sequence_duplication_levels_plot.pdf", + "multiqc/bwameth/multiqc_plots/pdf/fastqc_top_overrepresented_sequences_table.pdf", + "multiqc/bwameth/multiqc_plots/pdf/general_stats_table.pdf", + "multiqc/bwameth/multiqc_plots/pdf/qualimap_coverage_histogram.pdf", + "multiqc/bwameth/multiqc_plots/pdf/qualimap_gc_content.pdf", + "multiqc/bwameth/multiqc_plots/pdf/qualimap_genome_fraction.pdf", + "multiqc/bwameth/multiqc_plots/pdf/qualimap_insert_size.pdf", + "multiqc/bwameth/multiqc_plots/pdf/samtools-flagstat-dp_Percentage_of_total.pdf", + "multiqc/bwameth/multiqc_plots/pdf/samtools-flagstat-dp_Read_counts.pdf", + "multiqc/bwameth/multiqc_plots/pdf/samtools-stats-dp.pdf", + "multiqc/bwameth/multiqc_plots/pdf/samtools_alignment_plot-cnt.pdf", + "multiqc/bwameth/multiqc_plots/pdf/samtools_alignment_plot-pct.pdf", + "multiqc/bwameth/multiqc_plots/png", + "multiqc/bwameth/multiqc_plots/png/cutadapt_filtered_reads_plot-cnt.png", + "multiqc/bwameth/multiqc_plots/png/cutadapt_filtered_reads_plot-pct.png", + "multiqc/bwameth/multiqc_plots/png/cutadapt_trimmed_sequences_plot_3_Counts.png", + "multiqc/bwameth/multiqc_plots/png/cutadapt_trimmed_sequences_plot_3_Obs_Exp.png", + "multiqc/bwameth/multiqc_plots/png/fastqc-status-check-heatmap.png", + "multiqc/bwameth/multiqc_plots/png/fastqc_adapter_content_plot.png", + "multiqc/bwameth/multiqc_plots/png/fastqc_overrepresented_sequences_plot.png", + "multiqc/bwameth/multiqc_plots/png/fastqc_per_base_n_content_plot.png", + "multiqc/bwameth/multiqc_plots/png/fastqc_per_base_sequence_quality_plot.png", + "multiqc/bwameth/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Counts.png", + "multiqc/bwameth/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Percentages.png", + "multiqc/bwameth/multiqc_plots/png/fastqc_per_sequence_quality_scores_plot.png", + "multiqc/bwameth/multiqc_plots/png/fastqc_sequence_counts_plot-cnt.png", + "multiqc/bwameth/multiqc_plots/png/fastqc_sequence_counts_plot-pct.png", + "multiqc/bwameth/multiqc_plots/png/fastqc_sequence_duplication_levels_plot.png", + "multiqc/bwameth/multiqc_plots/png/fastqc_top_overrepresented_sequences_table.png", + "multiqc/bwameth/multiqc_plots/png/general_stats_table.png", + "multiqc/bwameth/multiqc_plots/png/qualimap_coverage_histogram.png", + "multiqc/bwameth/multiqc_plots/png/qualimap_gc_content.png", + "multiqc/bwameth/multiqc_plots/png/qualimap_genome_fraction.png", + "multiqc/bwameth/multiqc_plots/png/qualimap_insert_size.png", + "multiqc/bwameth/multiqc_plots/png/samtools-flagstat-dp_Percentage_of_total.png", + "multiqc/bwameth/multiqc_plots/png/samtools-flagstat-dp_Read_counts.png", + "multiqc/bwameth/multiqc_plots/png/samtools-stats-dp.png", + "multiqc/bwameth/multiqc_plots/png/samtools_alignment_plot-cnt.png", + "multiqc/bwameth/multiqc_plots/png/samtools_alignment_plot-pct.png", + "multiqc/bwameth/multiqc_plots/svg", + "multiqc/bwameth/multiqc_plots/svg/cutadapt_filtered_reads_plot-cnt.svg", + "multiqc/bwameth/multiqc_plots/svg/cutadapt_filtered_reads_plot-pct.svg", + "multiqc/bwameth/multiqc_plots/svg/cutadapt_trimmed_sequences_plot_3_Counts.svg", + "multiqc/bwameth/multiqc_plots/svg/cutadapt_trimmed_sequences_plot_3_Obs_Exp.svg", + "multiqc/bwameth/multiqc_plots/svg/fastqc-status-check-heatmap.svg", + "multiqc/bwameth/multiqc_plots/svg/fastqc_adapter_content_plot.svg", + "multiqc/bwameth/multiqc_plots/svg/fastqc_overrepresented_sequences_plot.svg", + "multiqc/bwameth/multiqc_plots/svg/fastqc_per_base_n_content_plot.svg", + "multiqc/bwameth/multiqc_plots/svg/fastqc_per_base_sequence_quality_plot.svg", + "multiqc/bwameth/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Counts.svg", + "multiqc/bwameth/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Percentages.svg", + "multiqc/bwameth/multiqc_plots/svg/fastqc_per_sequence_quality_scores_plot.svg", + "multiqc/bwameth/multiqc_plots/svg/fastqc_sequence_counts_plot-cnt.svg", + "multiqc/bwameth/multiqc_plots/svg/fastqc_sequence_counts_plot-pct.svg", + "multiqc/bwameth/multiqc_plots/svg/fastqc_sequence_duplication_levels_plot.svg", + "multiqc/bwameth/multiqc_plots/svg/fastqc_top_overrepresented_sequences_table.svg", + "multiqc/bwameth/multiqc_plots/svg/general_stats_table.svg", + "multiqc/bwameth/multiqc_plots/svg/qualimap_coverage_histogram.svg", + "multiqc/bwameth/multiqc_plots/svg/qualimap_gc_content.svg", + "multiqc/bwameth/multiqc_plots/svg/qualimap_genome_fraction.svg", + "multiqc/bwameth/multiqc_plots/svg/qualimap_insert_size.svg", + "multiqc/bwameth/multiqc_plots/svg/samtools-flagstat-dp_Percentage_of_total.svg", + "multiqc/bwameth/multiqc_plots/svg/samtools-flagstat-dp_Read_counts.svg", + "multiqc/bwameth/multiqc_plots/svg/samtools-stats-dp.svg", + "multiqc/bwameth/multiqc_plots/svg/samtools_alignment_plot-cnt.svg", + "multiqc/bwameth/multiqc_plots/svg/samtools_alignment_plot-pct.svg", + "multiqc/bwameth/multiqc_report.html", + "pipeline_info", + "pipeline_info/nf_core_pipeline_software_mqc_versions.yml", + "qualimap", + "qualimap/Ecoli_10K_methylated", + "qualimap/Ecoli_10K_methylated/css", + "qualimap/Ecoli_10K_methylated/css/agogo.css", + "qualimap/Ecoli_10K_methylated/css/ajax-loader.gif", + "qualimap/Ecoli_10K_methylated/css/basic.css", + "qualimap/Ecoli_10K_methylated/css/bgfooter.png", + "qualimap/Ecoli_10K_methylated/css/bgtop.png", + "qualimap/Ecoli_10K_methylated/css/comment-bright.png", + "qualimap/Ecoli_10K_methylated/css/comment-close.png", + "qualimap/Ecoli_10K_methylated/css/comment.png", + "qualimap/Ecoli_10K_methylated/css/doctools.js", + "qualimap/Ecoli_10K_methylated/css/down-pressed.png", + "qualimap/Ecoli_10K_methylated/css/down.png", + "qualimap/Ecoli_10K_methylated/css/file.png", + "qualimap/Ecoli_10K_methylated/css/jquery.js", + "qualimap/Ecoli_10K_methylated/css/minus.png", + "qualimap/Ecoli_10K_methylated/css/plus.png", + "qualimap/Ecoli_10K_methylated/css/pygments.css", + "qualimap/Ecoli_10K_methylated/css/qualimap_logo_small.png", + "qualimap/Ecoli_10K_methylated/css/report.css", + "qualimap/Ecoli_10K_methylated/css/searchtools.js", + "qualimap/Ecoli_10K_methylated/css/underscore.js", + "qualimap/Ecoli_10K_methylated/css/up-pressed.png", + "qualimap/Ecoli_10K_methylated/css/up.png", + "qualimap/Ecoli_10K_methylated/css/websupport.js", + "qualimap/Ecoli_10K_methylated/genome_results.txt", + "qualimap/Ecoli_10K_methylated/images_qualimapReport", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_coverage_0to50_histogram.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_coverage_across_reference.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_coverage_histogram.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_coverage_quotes.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_gc_content_per_window.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_homopolymer_indels.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_insert_size_across_reference.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_insert_size_histogram.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_mapping_quality_across_reference.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_mapping_quality_histogram.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_reads_clipping_profile.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_reads_content_per_read_position.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_uniq_read_starts_histogram.png", + "qualimap/Ecoli_10K_methylated/qualimapReport.html", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/coverage_across_reference.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/coverage_histogram.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/duplication_rate_histogram.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/genome_fraction_coverage.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/homopolymer_indels.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/insert_size_across_reference.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/insert_size_histogram.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/mapped_reads_clipping_profile.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/mapped_reads_gc-content_distribution.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/mapped_reads_nucleotide_content.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/mapping_quality_across_reference.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/mapping_quality_histogram.txt", + "qualimap/SRR389222_sub1", + "qualimap/SRR389222_sub1/css", + "qualimap/SRR389222_sub1/css/agogo.css", + "qualimap/SRR389222_sub1/css/ajax-loader.gif", + "qualimap/SRR389222_sub1/css/basic.css", + "qualimap/SRR389222_sub1/css/bgfooter.png", + "qualimap/SRR389222_sub1/css/bgtop.png", + "qualimap/SRR389222_sub1/css/comment-bright.png", + "qualimap/SRR389222_sub1/css/comment-close.png", + "qualimap/SRR389222_sub1/css/comment.png", + "qualimap/SRR389222_sub1/css/doctools.js", + "qualimap/SRR389222_sub1/css/down-pressed.png", + "qualimap/SRR389222_sub1/css/down.png", + "qualimap/SRR389222_sub1/css/file.png", + "qualimap/SRR389222_sub1/css/jquery.js", + "qualimap/SRR389222_sub1/css/minus.png", + "qualimap/SRR389222_sub1/css/plus.png", + "qualimap/SRR389222_sub1/css/pygments.css", + "qualimap/SRR389222_sub1/css/qualimap_logo_small.png", + "qualimap/SRR389222_sub1/css/report.css", + "qualimap/SRR389222_sub1/css/searchtools.js", + "qualimap/SRR389222_sub1/css/underscore.js", + "qualimap/SRR389222_sub1/css/up-pressed.png", + "qualimap/SRR389222_sub1/css/up.png", + "qualimap/SRR389222_sub1/css/websupport.js", + "qualimap/SRR389222_sub1/genome_results.txt", + "qualimap/SRR389222_sub1/qualimapReport.html", + "qualimap/SRR389222_sub1/raw_data_qualimapReport", + "qualimap/SRR389222_sub2", + "qualimap/SRR389222_sub2/css", + "qualimap/SRR389222_sub2/css/agogo.css", + "qualimap/SRR389222_sub2/css/ajax-loader.gif", + "qualimap/SRR389222_sub2/css/basic.css", + "qualimap/SRR389222_sub2/css/bgfooter.png", + "qualimap/SRR389222_sub2/css/bgtop.png", + "qualimap/SRR389222_sub2/css/comment-bright.png", + "qualimap/SRR389222_sub2/css/comment-close.png", + "qualimap/SRR389222_sub2/css/comment.png", + "qualimap/SRR389222_sub2/css/doctools.js", + "qualimap/SRR389222_sub2/css/down-pressed.png", + "qualimap/SRR389222_sub2/css/down.png", + "qualimap/SRR389222_sub2/css/file.png", + "qualimap/SRR389222_sub2/css/jquery.js", + "qualimap/SRR389222_sub2/css/minus.png", + "qualimap/SRR389222_sub2/css/plus.png", + "qualimap/SRR389222_sub2/css/pygments.css", + "qualimap/SRR389222_sub2/css/qualimap_logo_small.png", + "qualimap/SRR389222_sub2/css/report.css", + "qualimap/SRR389222_sub2/css/searchtools.js", + "qualimap/SRR389222_sub2/css/underscore.js", + "qualimap/SRR389222_sub2/css/up-pressed.png", + "qualimap/SRR389222_sub2/css/up.png", + "qualimap/SRR389222_sub2/css/websupport.js", + "qualimap/SRR389222_sub2/genome_results.txt", + "qualimap/SRR389222_sub2/qualimapReport.html", + "qualimap/SRR389222_sub2/raw_data_qualimapReport", + "qualimap/SRR389222_sub3", + "qualimap/SRR389222_sub3/css", + "qualimap/SRR389222_sub3/css/agogo.css", + "qualimap/SRR389222_sub3/css/ajax-loader.gif", + "qualimap/SRR389222_sub3/css/basic.css", + "qualimap/SRR389222_sub3/css/bgfooter.png", + "qualimap/SRR389222_sub3/css/bgtop.png", + "qualimap/SRR389222_sub3/css/comment-bright.png", + "qualimap/SRR389222_sub3/css/comment-close.png", + "qualimap/SRR389222_sub3/css/comment.png", + "qualimap/SRR389222_sub3/css/doctools.js", + "qualimap/SRR389222_sub3/css/down-pressed.png", + "qualimap/SRR389222_sub3/css/down.png", + "qualimap/SRR389222_sub3/css/file.png", + "qualimap/SRR389222_sub3/css/jquery.js", + "qualimap/SRR389222_sub3/css/minus.png", + "qualimap/SRR389222_sub3/css/plus.png", + "qualimap/SRR389222_sub3/css/pygments.css", + "qualimap/SRR389222_sub3/css/qualimap_logo_small.png", + "qualimap/SRR389222_sub3/css/report.css", + "qualimap/SRR389222_sub3/css/searchtools.js", + "qualimap/SRR389222_sub3/css/underscore.js", + "qualimap/SRR389222_sub3/css/up-pressed.png", + "qualimap/SRR389222_sub3/css/up.png", + "qualimap/SRR389222_sub3/css/websupport.js", + "qualimap/SRR389222_sub3/genome_results.txt", + "qualimap/SRR389222_sub3/qualimapReport.html", + "qualimap/SRR389222_sub3/raw_data_qualimapReport", + "trimgalore", + "trimgalore/fastqc", + "trimgalore/fastqc/Ecoli_10K_methylated_1_val_1_fastqc.html", + "trimgalore/fastqc/Ecoli_10K_methylated_2_val_2_fastqc.html", + "trimgalore/fastqc/SRR389222_sub1_trimmed_fastqc.html", + "trimgalore/fastqc/SRR389222_sub2_trimmed_fastqc.html", + "trimgalore/fastqc/SRR389222_sub3_trimmed_fastqc.html", + "trimgalore/fastqc/zips", + "trimgalore/fastqc/zips/Ecoli_10K_methylated_1_val_1_fastqc.zip", + "trimgalore/fastqc/zips/Ecoli_10K_methylated_2_val_2_fastqc.zip", + "trimgalore/fastqc/zips/SRR389222_sub1_trimmed_fastqc.zip", + "trimgalore/fastqc/zips/SRR389222_sub2_trimmed_fastqc.zip", + "trimgalore/fastqc/zips/SRR389222_sub3_trimmed_fastqc.zip", + "trimgalore/logs", + "trimgalore/logs/Ecoli_10K_methylated_1.fastq.gz_trimming_report.txt", + "trimgalore/logs/Ecoli_10K_methylated_2.fastq.gz_trimming_report.txt", + "trimgalore/logs/SRR389222_sub1.fastq.gz_trimming_report.txt", + "trimgalore/logs/SRR389222_sub2.fastq.gz_trimming_report.txt", + "trimgalore/logs/SRR389222_sub3.fastq.gz_trimming_report.txt" + ], + [ + "Ecoli_10K_methylated.flagstat:md5,c6a9a8b50c5e1d239071a8b75bc63b4f", + "Ecoli_10K_methylated.stats:md5,d9690e16a7995c35de2397e9800a1fd0", + "SRR389222_sub1.flagstat:md5,cccae088e2f8686b890d019b60f63065", + "SRR389222_sub1.stats:md5,138223a2070c2c68fd8867ad731b31b0", + "SRR389222_sub2.flagstat:md5,403af1bed1e3e96f5e04d65e96728828", + "SRR389222_sub2.stats:md5,2fa170e542d799b47717984dc7c0a4a4", + "SRR389222_sub3.flagstat:md5,73a5cb246f6388d5d449775d6e35f5fa", + "SRR389222_sub3.stats:md5,89ccd73e9ed78f5102c5736f255e034a", + "Ecoli_10K_methylated.sorted_CpG.bedGraph:md5,5e0bf8c8bb3162de75203784414a6399", + "SRR389222_sub1.sorted_CpG.bedGraph:md5,4475a9462ce86a019015b69b82a9d5a2", + "SRR389222_sub2.sorted_CpG.bedGraph:md5,18b8845d9d985d3c203ca6c9c40aab1b", + "SRR389222_sub3.sorted_CpG.bedGraph:md5,70dcc3836dc9721c2de367d1cf05e815", + "Ecoli_10K_methylated.mbias.txt:md5,7fb217502c2f3ae955bdfd744b6cbb72", + "SRR389222_sub1.mbias.txt:md5,fce04d733e066d0b933cedc602e2af81", + "SRR389222_sub2.mbias.txt:md5,fce04d733e066d0b933cedc602e2af81", + "SRR389222_sub3.mbias.txt:md5,fce04d733e066d0b933cedc602e2af81", + "cutadapt_filtered_reads_plot.txt:md5,ff1b6d4011a5be5410b9404f7ff56c56", + "cutadapt_trimmed_sequences_plot_3_Counts.txt:md5,57d07c19b0c30dc88df96c30bedcdc33", + "cutadapt_trimmed_sequences_plot_3_Obs_Exp.txt:md5,1e5ca4193f8290c5c812334d03615b41", + "fastqc-status-check-heatmap.txt:md5,218c2a7efbb9c02f652fa78fc739c866", + "fastqc_adapter_content_plot.txt:md5,48d8bd5ece984a74972ce0a0e814dd07", + "fastqc_overrepresented_sequences_plot.txt:md5,9c4b7064950b5b2c486d556984f21e9e", + "fastqc_per_base_n_content_plot.txt:md5,019d5cd4f61a31f4e7016140ca8ee36e", + "fastqc_per_base_sequence_quality_plot.txt:md5,e4c7d522114eab9bc9101e7ee9d83c8f", + "fastqc_per_sequence_gc_content_plot_Counts.txt:md5,302659bee8a02b6a38b24fe25f8eaa87", + "fastqc_per_sequence_gc_content_plot_Percentages.txt:md5,c75b396eb5dda8682fb1652a9b2e92a3", + "fastqc_per_sequence_quality_scores_plot.txt:md5,548c593f4a8be2d8627fc3bd1c280611", + "fastqc_sequence_counts_plot.txt:md5,58eeeb06bc9dcc1764c7daf0847d6bbf", + "fastqc_sequence_duplication_levels_plot.txt:md5,9e5712db9aa39b5754ea1e0c49cfff15", + "fastqc_top_overrepresented_sequences_table.txt:md5,6dfc5334a09c05392ea17369aa742d01", + "multiqc_citations.txt:md5,581df5b266851d0244e7cfb213351ffb", + "multiqc_cutadapt.txt:md5,b376b3816764859cfc345bf13cda536f", + "multiqc_samtools_flagstat.txt:md5,4389e377eb1db8dde26b0e8db6589c2d", + "multiqc_samtools_stats.txt:md5,3843eed6fb6ec8d27729a8b901ada0cf", + "qualimap_coverage_histogram.txt:md5,c5354816b9ce0a18d633506e2dd4e4ac", + "qualimap_gc_content.txt:md5,61501e54c671d9209fd07dcc0fa3268a", + "qualimap_genome_fraction.txt:md5,82f03e93ef65b67d1b52383bbec9a749", + "qualimap_insert_size.txt:md5,c42fb6dbf82bd2e37b21db91074b7de6", + "samtools-flagstat-dp_Percentage_of_total.txt:md5,6b61188e70378467e23174bd12b1aaaa", + "samtools-flagstat-dp_Read_counts.txt:md5,1491440de94dc58b28ca8f61d893a710", + "samtools-stats-dp.txt:md5,deab74e7245766aab6b2284492959fed", + "samtools_alignment_plot.txt:md5,e10b792693e5a69776f623f5f7de647e", + "genome_results.txt:md5,1473f581e4d67696c1948f5523211cab", + "genome_results.txt:md5,07b8ef58f6c6bb40c0c9c4704b50e0b3", + "genome_results.txt:md5,1466a5585ad5887f8fea7af2732efcba", + "genome_results.txt:md5,58d212848ac7b7650e3bd6812a4064af" + ], + [ + + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-21T18:00:44.344954074" + } +} \ No newline at end of file diff --git a/tests/bwameth_save_reference_save_align_intermeds.nf.test b/tests/bwameth_save_reference_save_align_intermeds.nf.test new file mode 100644 index 00000000..2ce41cd3 --- /dev/null +++ b/tests/bwameth_save_reference_save_align_intermeds.nf.test @@ -0,0 +1,42 @@ +nextflow_pipeline { + + name "Test Workflow main.nf" + script "../main.nf" + config "./nextflow.config" + + test("Params: bwameth | save_reference | save_align_intermeds") { + when { + params { + aligner = "bwameth" + save_reference = true + save_align_intermeds = true + outdir = "$outputDir" + } + } + + then { + // stable_name: All files + folders in ${params.outdir}/ with a stable name + def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) + // stable_path: All files in ${params.outdir}/ with stable content + def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') + // bam_files: All bam files + def bam_files = getAllFilesFromDir(params.outdir, include: ['**/*.bam']) + assertAll( + { assert workflow.success}, + { assert snapshot( + // Number of tasks + workflow.trace.succeeded().size(), + // pipeline versions.yml file for multiqc from which Nextflow version is removed because we tests pipelines on multiple Nextflow versions + removeNextflowVersion("$outputDir/pipeline_info/nf_core_pipeline_software_mqc_versions.yml"), + // All stable path name + stable_name, + // All files with stable contents + stable_path, + // All bam files + bam_files.collect{ file -> [ file.getName(), bam(file.toString()).getReadsMD5() ] } + ).match() } + ) + } + } + +} diff --git a/tests/bwameth_save_reference_save_align_intermeds.nf.test.snap b/tests/bwameth_save_reference_save_align_intermeds.nf.test.snap new file mode 100644 index 00000000..546c1371 --- /dev/null +++ b/tests/bwameth_save_reference_save_align_intermeds.nf.test.snap @@ -0,0 +1,501 @@ +{ + "Params: bwameth | save_reference | save_align_intermeds": { + "content": [ + 50, + { + "BWAMETH_ALIGN": { + "bwameth": "0.2.7" + }, + "BWAMETH_INDEX": { + "bwameth": "0.2.7" + }, + "FASTQC": { + "fastqc": "0.12.1" + }, + "QUALIMAP_BAMQC": { + "qualimap": 2.3 + }, + "TRIMGALORE": { + "trimgalore": "0.6.10", + "cutadapt": 4.2 + }, + "Workflow": { + "nf-core/methylseq": "v2.7.0" + } + }, + [ + "bwameth", + "bwameth/alignments", + "bwameth/alignments/Ecoli_10K_methylated.bam", + "bwameth/alignments/Ecoli_10K_methylated.sorted.bam", + "bwameth/alignments/Ecoli_10K_methylated.sorted.bam.bai", + "bwameth/alignments/SRR389222_sub1.bam", + "bwameth/alignments/SRR389222_sub1.sorted.bam", + "bwameth/alignments/SRR389222_sub1.sorted.bam.bai", + "bwameth/alignments/SRR389222_sub2.bam", + "bwameth/alignments/SRR389222_sub2.sorted.bam", + "bwameth/alignments/SRR389222_sub2.sorted.bam.bai", + "bwameth/alignments/SRR389222_sub3.bam", + "bwameth/alignments/SRR389222_sub3.sorted.bam", + "bwameth/alignments/SRR389222_sub3.sorted.bam.bai", + "bwameth/alignments/samtools_stats", + "bwameth/alignments/samtools_stats/Ecoli_10K_methylated.flagstat", + "bwameth/alignments/samtools_stats/Ecoli_10K_methylated.stats", + "bwameth/alignments/samtools_stats/SRR389222_sub1.flagstat", + "bwameth/alignments/samtools_stats/SRR389222_sub1.stats", + "bwameth/alignments/samtools_stats/SRR389222_sub2.flagstat", + "bwameth/alignments/samtools_stats/SRR389222_sub2.stats", + "bwameth/alignments/samtools_stats/SRR389222_sub3.flagstat", + "bwameth/alignments/samtools_stats/SRR389222_sub3.stats", + "bwameth/deduplicated", + "bwameth/deduplicated/Ecoli_10K_methylated.markdup.sorted.bam", + "bwameth/deduplicated/Ecoli_10K_methylated.markdup.sorted.bam.bai", + "bwameth/deduplicated/SRR389222_sub1.markdup.sorted.bam", + "bwameth/deduplicated/SRR389222_sub1.markdup.sorted.bam.bai", + "bwameth/deduplicated/SRR389222_sub2.markdup.sorted.bam", + "bwameth/deduplicated/SRR389222_sub2.markdup.sorted.bam.bai", + "bwameth/deduplicated/SRR389222_sub3.markdup.sorted.bam", + "bwameth/deduplicated/SRR389222_sub3.markdup.sorted.bam.bai", + "bwameth/deduplicated/picard_metrics", + "bwameth/deduplicated/picard_metrics/Ecoli_10K_methylated.markdup.sorted.MarkDuplicates.metrics.txt", + "bwameth/deduplicated/picard_metrics/SRR389222_sub1.markdup.sorted.MarkDuplicates.metrics.txt", + "bwameth/deduplicated/picard_metrics/SRR389222_sub2.markdup.sorted.MarkDuplicates.metrics.txt", + "bwameth/deduplicated/picard_metrics/SRR389222_sub3.markdup.sorted.MarkDuplicates.metrics.txt", + "bwameth/reference_genome", + "bwameth/reference_genome/BwamethIndex", + "bwameth/reference_genome/BwamethIndex/genome.fa.bwameth.c2t", + "bwameth/reference_genome/BwamethIndex/genome.fa.bwameth.c2t.amb", + "bwameth/reference_genome/BwamethIndex/genome.fa.bwameth.c2t.ann", + "bwameth/reference_genome/BwamethIndex/genome.fa.bwameth.c2t.bwt", + "bwameth/reference_genome/BwamethIndex/genome.fa.bwameth.c2t.pac", + "bwameth/reference_genome/BwamethIndex/genome.fa.bwameth.c2t.sa", + "fastqc", + "fastqc/Ecoli_10K_methylated_1_fastqc.html", + "fastqc/Ecoli_10K_methylated_2_fastqc.html", + "fastqc/SRR389222_sub1_fastqc.html", + "fastqc/SRR389222_sub2_fastqc.html", + "fastqc/SRR389222_sub3_fastqc.html", + "fastqc/zips", + "fastqc/zips/Ecoli_10K_methylated_1_fastqc.zip", + "fastqc/zips/Ecoli_10K_methylated_2_fastqc.zip", + "fastqc/zips/SRR389222_sub1_fastqc.zip", + "fastqc/zips/SRR389222_sub2_fastqc.zip", + "fastqc/zips/SRR389222_sub3_fastqc.zip", + "methyldackel", + "methyldackel/Ecoli_10K_methylated.markdup.sorted_CpG.bedGraph", + "methyldackel/SRR389222_sub1.markdup.sorted_CpG.bedGraph", + "methyldackel/SRR389222_sub2.markdup.sorted_CpG.bedGraph", + "methyldackel/SRR389222_sub3.markdup.sorted_CpG.bedGraph", + "methyldackel/mbias", + "methyldackel/mbias/Ecoli_10K_methylated.mbias.txt", + "methyldackel/mbias/SRR389222_sub1.mbias.txt", + "methyldackel/mbias/SRR389222_sub2.mbias.txt", + "methyldackel/mbias/SRR389222_sub3.mbias.txt", + "multiqc", + "multiqc/bwameth", + "multiqc/bwameth/multiqc_data", + "multiqc/bwameth/multiqc_data/cutadapt_filtered_reads_plot.txt", + "multiqc/bwameth/multiqc_data/cutadapt_trimmed_sequences_plot_3_Counts.txt", + "multiqc/bwameth/multiqc_data/cutadapt_trimmed_sequences_plot_3_Obs_Exp.txt", + "multiqc/bwameth/multiqc_data/fastqc-status-check-heatmap.txt", + "multiqc/bwameth/multiqc_data/fastqc_adapter_content_plot.txt", + "multiqc/bwameth/multiqc_data/fastqc_overrepresented_sequences_plot.txt", + "multiqc/bwameth/multiqc_data/fastqc_per_base_n_content_plot.txt", + "multiqc/bwameth/multiqc_data/fastqc_per_base_sequence_quality_plot.txt", + "multiqc/bwameth/multiqc_data/fastqc_per_sequence_gc_content_plot_Counts.txt", + "multiqc/bwameth/multiqc_data/fastqc_per_sequence_gc_content_plot_Percentages.txt", + "multiqc/bwameth/multiqc_data/fastqc_per_sequence_quality_scores_plot.txt", + "multiqc/bwameth/multiqc_data/fastqc_sequence_counts_plot.txt", + "multiqc/bwameth/multiqc_data/fastqc_sequence_duplication_levels_plot.txt", + "multiqc/bwameth/multiqc_data/fastqc_top_overrepresented_sequences_table.txt", + "multiqc/bwameth/multiqc_data/multiqc.log", + "multiqc/bwameth/multiqc_data/multiqc_citations.txt", + "multiqc/bwameth/multiqc_data/multiqc_cutadapt.txt", + "multiqc/bwameth/multiqc_data/multiqc_data.json", + "multiqc/bwameth/multiqc_data/multiqc_fastqc.txt", + "multiqc/bwameth/multiqc_data/multiqc_general_stats.txt", + "multiqc/bwameth/multiqc_data/multiqc_picard_dups.txt", + "multiqc/bwameth/multiqc_data/multiqc_qualimap_bamqc_genome_results.txt", + "multiqc/bwameth/multiqc_data/multiqc_samtools_flagstat.txt", + "multiqc/bwameth/multiqc_data/multiqc_samtools_stats.txt", + "multiqc/bwameth/multiqc_data/multiqc_software_versions.txt", + "multiqc/bwameth/multiqc_data/multiqc_sources.txt", + "multiqc/bwameth/multiqc_data/picard_deduplication.txt", + "multiqc/bwameth/multiqc_data/picard_histogram.txt", + "multiqc/bwameth/multiqc_data/picard_histogram_1.txt", + "multiqc/bwameth/multiqc_data/picard_histogram_2.txt", + "multiqc/bwameth/multiqc_data/qualimap_coverage_histogram.txt", + "multiqc/bwameth/multiqc_data/qualimap_gc_content.txt", + "multiqc/bwameth/multiqc_data/qualimap_genome_fraction.txt", + "multiqc/bwameth/multiqc_data/qualimap_insert_size.txt", + "multiqc/bwameth/multiqc_data/samtools-flagstat-dp_Percentage_of_total.txt", + "multiqc/bwameth/multiqc_data/samtools-flagstat-dp_Read_counts.txt", + "multiqc/bwameth/multiqc_data/samtools-stats-dp.txt", + "multiqc/bwameth/multiqc_data/samtools_alignment_plot.txt", + "multiqc/bwameth/multiqc_plots", + "multiqc/bwameth/multiqc_plots/pdf", + "multiqc/bwameth/multiqc_plots/pdf/cutadapt_filtered_reads_plot-cnt.pdf", + "multiqc/bwameth/multiqc_plots/pdf/cutadapt_filtered_reads_plot-pct.pdf", + "multiqc/bwameth/multiqc_plots/pdf/cutadapt_trimmed_sequences_plot_3_Counts.pdf", + "multiqc/bwameth/multiqc_plots/pdf/cutadapt_trimmed_sequences_plot_3_Obs_Exp.pdf", + "multiqc/bwameth/multiqc_plots/pdf/fastqc-status-check-heatmap.pdf", + "multiqc/bwameth/multiqc_plots/pdf/fastqc_adapter_content_plot.pdf", + "multiqc/bwameth/multiqc_plots/pdf/fastqc_overrepresented_sequences_plot.pdf", + "multiqc/bwameth/multiqc_plots/pdf/fastqc_per_base_n_content_plot.pdf", + "multiqc/bwameth/multiqc_plots/pdf/fastqc_per_base_sequence_quality_plot.pdf", + "multiqc/bwameth/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Counts.pdf", + "multiqc/bwameth/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Percentages.pdf", + "multiqc/bwameth/multiqc_plots/pdf/fastqc_per_sequence_quality_scores_plot.pdf", + "multiqc/bwameth/multiqc_plots/pdf/fastqc_sequence_counts_plot-cnt.pdf", + "multiqc/bwameth/multiqc_plots/pdf/fastqc_sequence_counts_plot-pct.pdf", + "multiqc/bwameth/multiqc_plots/pdf/fastqc_sequence_duplication_levels_plot.pdf", + "multiqc/bwameth/multiqc_plots/pdf/fastqc_top_overrepresented_sequences_table.pdf", + "multiqc/bwameth/multiqc_plots/pdf/general_stats_table.pdf", + "multiqc/bwameth/multiqc_plots/pdf/picard_deduplication-cnt.pdf", + "multiqc/bwameth/multiqc_plots/pdf/picard_deduplication-pct.pdf", + "multiqc/bwameth/multiqc_plots/pdf/qualimap_coverage_histogram.pdf", + "multiqc/bwameth/multiqc_plots/pdf/qualimap_gc_content.pdf", + "multiqc/bwameth/multiqc_plots/pdf/qualimap_genome_fraction.pdf", + "multiqc/bwameth/multiqc_plots/pdf/qualimap_insert_size.pdf", + "multiqc/bwameth/multiqc_plots/pdf/samtools-flagstat-dp_Percentage_of_total.pdf", + "multiqc/bwameth/multiqc_plots/pdf/samtools-flagstat-dp_Read_counts.pdf", + "multiqc/bwameth/multiqc_plots/pdf/samtools-stats-dp.pdf", + "multiqc/bwameth/multiqc_plots/pdf/samtools_alignment_plot-cnt.pdf", + "multiqc/bwameth/multiqc_plots/pdf/samtools_alignment_plot-pct.pdf", + "multiqc/bwameth/multiqc_plots/png", + "multiqc/bwameth/multiqc_plots/png/cutadapt_filtered_reads_plot-cnt.png", + "multiqc/bwameth/multiqc_plots/png/cutadapt_filtered_reads_plot-pct.png", + "multiqc/bwameth/multiqc_plots/png/cutadapt_trimmed_sequences_plot_3_Counts.png", + "multiqc/bwameth/multiqc_plots/png/cutadapt_trimmed_sequences_plot_3_Obs_Exp.png", + "multiqc/bwameth/multiqc_plots/png/fastqc-status-check-heatmap.png", + "multiqc/bwameth/multiqc_plots/png/fastqc_adapter_content_plot.png", + "multiqc/bwameth/multiqc_plots/png/fastqc_overrepresented_sequences_plot.png", + "multiqc/bwameth/multiqc_plots/png/fastqc_per_base_n_content_plot.png", + "multiqc/bwameth/multiqc_plots/png/fastqc_per_base_sequence_quality_plot.png", + "multiqc/bwameth/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Counts.png", + "multiqc/bwameth/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Percentages.png", + "multiqc/bwameth/multiqc_plots/png/fastqc_per_sequence_quality_scores_plot.png", + "multiqc/bwameth/multiqc_plots/png/fastqc_sequence_counts_plot-cnt.png", + "multiqc/bwameth/multiqc_plots/png/fastqc_sequence_counts_plot-pct.png", + "multiqc/bwameth/multiqc_plots/png/fastqc_sequence_duplication_levels_plot.png", + "multiqc/bwameth/multiqc_plots/png/fastqc_top_overrepresented_sequences_table.png", + "multiqc/bwameth/multiqc_plots/png/general_stats_table.png", + "multiqc/bwameth/multiqc_plots/png/picard_deduplication-cnt.png", + "multiqc/bwameth/multiqc_plots/png/picard_deduplication-pct.png", + "multiqc/bwameth/multiqc_plots/png/qualimap_coverage_histogram.png", + "multiqc/bwameth/multiqc_plots/png/qualimap_gc_content.png", + "multiqc/bwameth/multiqc_plots/png/qualimap_genome_fraction.png", + "multiqc/bwameth/multiqc_plots/png/qualimap_insert_size.png", + "multiqc/bwameth/multiqc_plots/png/samtools-flagstat-dp_Percentage_of_total.png", + "multiqc/bwameth/multiqc_plots/png/samtools-flagstat-dp_Read_counts.png", + "multiqc/bwameth/multiqc_plots/png/samtools-stats-dp.png", + "multiqc/bwameth/multiqc_plots/png/samtools_alignment_plot-cnt.png", + "multiqc/bwameth/multiqc_plots/png/samtools_alignment_plot-pct.png", + "multiqc/bwameth/multiqc_plots/svg", + "multiqc/bwameth/multiqc_plots/svg/cutadapt_filtered_reads_plot-cnt.svg", + "multiqc/bwameth/multiqc_plots/svg/cutadapt_filtered_reads_plot-pct.svg", + "multiqc/bwameth/multiqc_plots/svg/cutadapt_trimmed_sequences_plot_3_Counts.svg", + "multiqc/bwameth/multiqc_plots/svg/cutadapt_trimmed_sequences_plot_3_Obs_Exp.svg", + "multiqc/bwameth/multiqc_plots/svg/fastqc-status-check-heatmap.svg", + "multiqc/bwameth/multiqc_plots/svg/fastqc_adapter_content_plot.svg", + "multiqc/bwameth/multiqc_plots/svg/fastqc_overrepresented_sequences_plot.svg", + "multiqc/bwameth/multiqc_plots/svg/fastqc_per_base_n_content_plot.svg", + "multiqc/bwameth/multiqc_plots/svg/fastqc_per_base_sequence_quality_plot.svg", + "multiqc/bwameth/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Counts.svg", + "multiqc/bwameth/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Percentages.svg", + "multiqc/bwameth/multiqc_plots/svg/fastqc_per_sequence_quality_scores_plot.svg", + "multiqc/bwameth/multiqc_plots/svg/fastqc_sequence_counts_plot-cnt.svg", + "multiqc/bwameth/multiqc_plots/svg/fastqc_sequence_counts_plot-pct.svg", + "multiqc/bwameth/multiqc_plots/svg/fastqc_sequence_duplication_levels_plot.svg", + "multiqc/bwameth/multiqc_plots/svg/fastqc_top_overrepresented_sequences_table.svg", + "multiqc/bwameth/multiqc_plots/svg/general_stats_table.svg", + "multiqc/bwameth/multiqc_plots/svg/picard_deduplication-cnt.svg", + "multiqc/bwameth/multiqc_plots/svg/picard_deduplication-pct.svg", + "multiqc/bwameth/multiqc_plots/svg/qualimap_coverage_histogram.svg", + "multiqc/bwameth/multiqc_plots/svg/qualimap_gc_content.svg", + "multiqc/bwameth/multiqc_plots/svg/qualimap_genome_fraction.svg", + "multiqc/bwameth/multiqc_plots/svg/qualimap_insert_size.svg", + "multiqc/bwameth/multiqc_plots/svg/samtools-flagstat-dp_Percentage_of_total.svg", + "multiqc/bwameth/multiqc_plots/svg/samtools-flagstat-dp_Read_counts.svg", + "multiqc/bwameth/multiqc_plots/svg/samtools-stats-dp.svg", + "multiqc/bwameth/multiqc_plots/svg/samtools_alignment_plot-cnt.svg", + "multiqc/bwameth/multiqc_plots/svg/samtools_alignment_plot-pct.svg", + "multiqc/bwameth/multiqc_report.html", + "pipeline_info", + "pipeline_info/nf_core_pipeline_software_mqc_versions.yml", + "qualimap", + "qualimap/Ecoli_10K_methylated", + "qualimap/Ecoli_10K_methylated/css", + "qualimap/Ecoli_10K_methylated/css/agogo.css", + "qualimap/Ecoli_10K_methylated/css/ajax-loader.gif", + "qualimap/Ecoli_10K_methylated/css/basic.css", + "qualimap/Ecoli_10K_methylated/css/bgfooter.png", + "qualimap/Ecoli_10K_methylated/css/bgtop.png", + "qualimap/Ecoli_10K_methylated/css/comment-bright.png", + "qualimap/Ecoli_10K_methylated/css/comment-close.png", + "qualimap/Ecoli_10K_methylated/css/comment.png", + "qualimap/Ecoli_10K_methylated/css/doctools.js", + "qualimap/Ecoli_10K_methylated/css/down-pressed.png", + "qualimap/Ecoli_10K_methylated/css/down.png", + "qualimap/Ecoli_10K_methylated/css/file.png", + "qualimap/Ecoli_10K_methylated/css/jquery.js", + "qualimap/Ecoli_10K_methylated/css/minus.png", + "qualimap/Ecoli_10K_methylated/css/plus.png", + "qualimap/Ecoli_10K_methylated/css/pygments.css", + "qualimap/Ecoli_10K_methylated/css/qualimap_logo_small.png", + "qualimap/Ecoli_10K_methylated/css/report.css", + "qualimap/Ecoli_10K_methylated/css/searchtools.js", + "qualimap/Ecoli_10K_methylated/css/underscore.js", + "qualimap/Ecoli_10K_methylated/css/up-pressed.png", + "qualimap/Ecoli_10K_methylated/css/up.png", + "qualimap/Ecoli_10K_methylated/css/websupport.js", + "qualimap/Ecoli_10K_methylated/genome_results.txt", + "qualimap/Ecoli_10K_methylated/images_qualimapReport", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_coverage_0to50_histogram.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_coverage_across_reference.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_coverage_histogram.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_coverage_quotes.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_gc_content_per_window.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_homopolymer_indels.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_insert_size_across_reference.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_insert_size_histogram.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_mapping_quality_across_reference.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_mapping_quality_histogram.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_reads_clipping_profile.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_reads_content_per_read_position.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_uniq_read_starts_histogram.png", + "qualimap/Ecoli_10K_methylated/qualimapReport.html", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/coverage_across_reference.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/coverage_histogram.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/duplication_rate_histogram.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/genome_fraction_coverage.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/homopolymer_indels.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/insert_size_across_reference.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/insert_size_histogram.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/mapped_reads_clipping_profile.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/mapped_reads_gc-content_distribution.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/mapped_reads_nucleotide_content.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/mapping_quality_across_reference.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/mapping_quality_histogram.txt", + "qualimap/SRR389222_sub1", + "qualimap/SRR389222_sub1/css", + "qualimap/SRR389222_sub1/css/agogo.css", + "qualimap/SRR389222_sub1/css/ajax-loader.gif", + "qualimap/SRR389222_sub1/css/basic.css", + "qualimap/SRR389222_sub1/css/bgfooter.png", + "qualimap/SRR389222_sub1/css/bgtop.png", + "qualimap/SRR389222_sub1/css/comment-bright.png", + "qualimap/SRR389222_sub1/css/comment-close.png", + "qualimap/SRR389222_sub1/css/comment.png", + "qualimap/SRR389222_sub1/css/doctools.js", + "qualimap/SRR389222_sub1/css/down-pressed.png", + "qualimap/SRR389222_sub1/css/down.png", + "qualimap/SRR389222_sub1/css/file.png", + "qualimap/SRR389222_sub1/css/jquery.js", + "qualimap/SRR389222_sub1/css/minus.png", + "qualimap/SRR389222_sub1/css/plus.png", + "qualimap/SRR389222_sub1/css/pygments.css", + "qualimap/SRR389222_sub1/css/qualimap_logo_small.png", + "qualimap/SRR389222_sub1/css/report.css", + "qualimap/SRR389222_sub1/css/searchtools.js", + "qualimap/SRR389222_sub1/css/underscore.js", + "qualimap/SRR389222_sub1/css/up-pressed.png", + "qualimap/SRR389222_sub1/css/up.png", + "qualimap/SRR389222_sub1/css/websupport.js", + "qualimap/SRR389222_sub1/genome_results.txt", + "qualimap/SRR389222_sub1/qualimapReport.html", + "qualimap/SRR389222_sub1/raw_data_qualimapReport", + "qualimap/SRR389222_sub2", + "qualimap/SRR389222_sub2/css", + "qualimap/SRR389222_sub2/css/agogo.css", + "qualimap/SRR389222_sub2/css/ajax-loader.gif", + "qualimap/SRR389222_sub2/css/basic.css", + "qualimap/SRR389222_sub2/css/bgfooter.png", + "qualimap/SRR389222_sub2/css/bgtop.png", + "qualimap/SRR389222_sub2/css/comment-bright.png", + "qualimap/SRR389222_sub2/css/comment-close.png", + "qualimap/SRR389222_sub2/css/comment.png", + "qualimap/SRR389222_sub2/css/doctools.js", + "qualimap/SRR389222_sub2/css/down-pressed.png", + "qualimap/SRR389222_sub2/css/down.png", + "qualimap/SRR389222_sub2/css/file.png", + "qualimap/SRR389222_sub2/css/jquery.js", + "qualimap/SRR389222_sub2/css/minus.png", + "qualimap/SRR389222_sub2/css/plus.png", + "qualimap/SRR389222_sub2/css/pygments.css", + "qualimap/SRR389222_sub2/css/qualimap_logo_small.png", + "qualimap/SRR389222_sub2/css/report.css", + "qualimap/SRR389222_sub2/css/searchtools.js", + "qualimap/SRR389222_sub2/css/underscore.js", + "qualimap/SRR389222_sub2/css/up-pressed.png", + "qualimap/SRR389222_sub2/css/up.png", + "qualimap/SRR389222_sub2/css/websupport.js", + "qualimap/SRR389222_sub2/genome_results.txt", + "qualimap/SRR389222_sub2/qualimapReport.html", + "qualimap/SRR389222_sub2/raw_data_qualimapReport", + "qualimap/SRR389222_sub3", + "qualimap/SRR389222_sub3/css", + "qualimap/SRR389222_sub3/css/agogo.css", + "qualimap/SRR389222_sub3/css/ajax-loader.gif", + "qualimap/SRR389222_sub3/css/basic.css", + "qualimap/SRR389222_sub3/css/bgfooter.png", + "qualimap/SRR389222_sub3/css/bgtop.png", + "qualimap/SRR389222_sub3/css/comment-bright.png", + "qualimap/SRR389222_sub3/css/comment-close.png", + "qualimap/SRR389222_sub3/css/comment.png", + "qualimap/SRR389222_sub3/css/doctools.js", + "qualimap/SRR389222_sub3/css/down-pressed.png", + "qualimap/SRR389222_sub3/css/down.png", + "qualimap/SRR389222_sub3/css/file.png", + "qualimap/SRR389222_sub3/css/jquery.js", + "qualimap/SRR389222_sub3/css/minus.png", + "qualimap/SRR389222_sub3/css/plus.png", + "qualimap/SRR389222_sub3/css/pygments.css", + "qualimap/SRR389222_sub3/css/qualimap_logo_small.png", + "qualimap/SRR389222_sub3/css/report.css", + "qualimap/SRR389222_sub3/css/searchtools.js", + "qualimap/SRR389222_sub3/css/underscore.js", + "qualimap/SRR389222_sub3/css/up-pressed.png", + "qualimap/SRR389222_sub3/css/up.png", + "qualimap/SRR389222_sub3/css/websupport.js", + "qualimap/SRR389222_sub3/genome_results.txt", + "qualimap/SRR389222_sub3/qualimapReport.html", + "qualimap/SRR389222_sub3/raw_data_qualimapReport", + "trimgalore", + "trimgalore/fastqc", + "trimgalore/fastqc/Ecoli_10K_methylated_1_val_1_fastqc.html", + "trimgalore/fastqc/Ecoli_10K_methylated_2_val_2_fastqc.html", + "trimgalore/fastqc/SRR389222_sub1_trimmed_fastqc.html", + "trimgalore/fastqc/SRR389222_sub2_trimmed_fastqc.html", + "trimgalore/fastqc/SRR389222_sub3_trimmed_fastqc.html", + "trimgalore/fastqc/zips", + "trimgalore/fastqc/zips/Ecoli_10K_methylated_1_val_1_fastqc.zip", + "trimgalore/fastqc/zips/Ecoli_10K_methylated_2_val_2_fastqc.zip", + "trimgalore/fastqc/zips/SRR389222_sub1_trimmed_fastqc.zip", + "trimgalore/fastqc/zips/SRR389222_sub2_trimmed_fastqc.zip", + "trimgalore/fastqc/zips/SRR389222_sub3_trimmed_fastqc.zip", + "trimgalore/logs", + "trimgalore/logs/Ecoli_10K_methylated_1.fastq.gz_trimming_report.txt", + "trimgalore/logs/Ecoli_10K_methylated_2.fastq.gz_trimming_report.txt", + "trimgalore/logs/SRR389222_sub1.fastq.gz_trimming_report.txt", + "trimgalore/logs/SRR389222_sub2.fastq.gz_trimming_report.txt", + "trimgalore/logs/SRR389222_sub3.fastq.gz_trimming_report.txt" + ], + [ + "Ecoli_10K_methylated.flagstat:md5,f520e87cc4050799a0dbed72909572ec", + "Ecoli_10K_methylated.stats:md5,2df1b94e099f2948ad990224f7cf07a4", + "SRR389222_sub1.flagstat:md5,ad8159a7683b9c3057bf54ccb77a2ddc", + "SRR389222_sub1.stats:md5,0f660ccc767662d4bd8c5197f3d46a87", + "SRR389222_sub2.flagstat:md5,e768b4f54014d62b096152c44f920bc1", + "SRR389222_sub2.stats:md5,9343b74f4d825bfb2a554be3d8bed432", + "SRR389222_sub3.flagstat:md5,39516f7d2c77e6fef9543edf8cddbcd6", + "SRR389222_sub3.stats:md5,f41e135f71893e2a8b589c4a66cbfeec", + "genome.fa.bwameth.c2t:md5,e51d48ed28fa0c26e2f9c9f13d09403b", + "genome.fa.bwameth.c2t.amb:md5,010a242c6764efb30141868a45d698b3", + "genome.fa.bwameth.c2t.ann:md5,09b4db3d87a2d4dac9e10e807f377110", + "genome.fa.bwameth.c2t.bwt:md5,4646f8ae6bd523b7f4106bbd32eff95e", + "genome.fa.bwameth.c2t.pac:md5,a662d7add09698e25c8152fd2306ec66", + "genome.fa.bwameth.c2t.sa:md5,4a1e905b828396a1909669bc9c573d8d", + "Ecoli_10K_methylated.markdup.sorted_CpG.bedGraph:md5,d3bce01078b6e7749f3906bf9faad5b5", + "SRR389222_sub1.markdup.sorted_CpG.bedGraph:md5,0944ad0e3b05791bf6dfd06be7ca4af1", + "SRR389222_sub2.markdup.sorted_CpG.bedGraph:md5,0a3c19af55d1625e91903ae25d1d2098", + "SRR389222_sub3.markdup.sorted_CpG.bedGraph:md5,a91e6b039e9581a9d2ef6f6057918b39", + "Ecoli_10K_methylated.mbias.txt:md5,3a448a2a6364b2de3129365a271c0534", + "SRR389222_sub1.mbias.txt:md5,fce04d733e066d0b933cedc602e2af81", + "SRR389222_sub2.mbias.txt:md5,fce04d733e066d0b933cedc602e2af81", + "SRR389222_sub3.mbias.txt:md5,fce04d733e066d0b933cedc602e2af81", + "cutadapt_filtered_reads_plot.txt:md5,ff1b6d4011a5be5410b9404f7ff56c56", + "cutadapt_trimmed_sequences_plot_3_Counts.txt:md5,57d07c19b0c30dc88df96c30bedcdc33", + "cutadapt_trimmed_sequences_plot_3_Obs_Exp.txt:md5,1e5ca4193f8290c5c812334d03615b41", + "fastqc-status-check-heatmap.txt:md5,218c2a7efbb9c02f652fa78fc739c866", + "fastqc_adapter_content_plot.txt:md5,48d8bd5ece984a74972ce0a0e814dd07", + "fastqc_overrepresented_sequences_plot.txt:md5,9c4b7064950b5b2c486d556984f21e9e", + "fastqc_per_base_n_content_plot.txt:md5,019d5cd4f61a31f4e7016140ca8ee36e", + "fastqc_per_base_sequence_quality_plot.txt:md5,e4c7d522114eab9bc9101e7ee9d83c8f", + "fastqc_per_sequence_gc_content_plot_Counts.txt:md5,302659bee8a02b6a38b24fe25f8eaa87", + "fastqc_per_sequence_gc_content_plot_Percentages.txt:md5,c75b396eb5dda8682fb1652a9b2e92a3", + "fastqc_per_sequence_quality_scores_plot.txt:md5,548c593f4a8be2d8627fc3bd1c280611", + "fastqc_sequence_counts_plot.txt:md5,58eeeb06bc9dcc1764c7daf0847d6bbf", + "fastqc_sequence_duplication_levels_plot.txt:md5,9e5712db9aa39b5754ea1e0c49cfff15", + "fastqc_top_overrepresented_sequences_table.txt:md5,6dfc5334a09c05392ea17369aa742d01", + "multiqc_citations.txt:md5,581df5b266851d0244e7cfb213351ffb", + "multiqc_cutadapt.txt:md5,f7a61369244b1e040d264e6913b8a839", + "multiqc_picard_dups.txt:md5,82eaab96189f22fd93db38bb516ba6a5", + "multiqc_samtools_flagstat.txt:md5,a8f5b45b8b3412a9adc3dd0d35208c73", + "multiqc_samtools_stats.txt:md5,e24271a8111b06c1f545b6b1a077a4a7", + "picard_deduplication.txt:md5,7dacf4d4e0d7d2d9a7205beecfa7125c", + "picard_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "picard_histogram_1.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "picard_histogram_2.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "qualimap_coverage_histogram.txt:md5,c7c932e4d84b735bd434c1aaa713b6e6", + "qualimap_gc_content.txt:md5,893d1acba7a6675ff9e2eff2985fa4e3", + "qualimap_genome_fraction.txt:md5,ef5b6010b52a03f6e58356db7128d0dc", + "qualimap_insert_size.txt:md5,f86cc9fe7a12af8f62f26312660e9225", + "samtools-flagstat-dp_Percentage_of_total.txt:md5,ff5d65a480449ba98587c43f3a2bd33e", + "samtools-flagstat-dp_Read_counts.txt:md5,6a5332e2ad59f7da00b5a9a1a25fd2f8", + "samtools-stats-dp.txt:md5,52021b9a9455b39b39dd357bc2e8d346", + "samtools_alignment_plot.txt:md5,39f42e039f96cc2b17248b44ccaf425b", + "genome_results.txt:md5,1ee2e29ac41c2cd7e6a0f00741e8d16e", + "genome_results.txt:md5,2c755b15ae5ad4a1d29395320a6264ca", + "genome_results.txt:md5,2294badeccd2e8870fd6c60d115687b0", + "genome_results.txt:md5,4da1144933d094185d02f7482c120804" + ], + [ + [ + "Ecoli_10K_methylated.bam", + "4a9ba2169facef4ed3d92d539c8c78af" + ], + [ + "Ecoli_10K_methylated.sorted.bam", + "a2921f761f431ede522016f83f75c12d" + ], + [ + "SRR389222_sub1.bam", + "e50275d6d44138f19d65ee479444d5ce" + ], + [ + "SRR389222_sub1.sorted.bam", + "e50275d6d44138f19d65ee479444d5ce" + ], + [ + "SRR389222_sub2.bam", + "d365b8b2662b2abffb51dd67a1f463b4" + ], + [ + "SRR389222_sub2.sorted.bam", + "d365b8b2662b2abffb51dd67a1f463b4" + ], + [ + "SRR389222_sub3.bam", + "a9fd2900b9d759f8f4f62cbbb2744fde" + ], + [ + "SRR389222_sub3.sorted.bam", + "a9fd2900b9d759f8f4f62cbbb2744fde" + ], + [ + "Ecoli_10K_methylated.markdup.sorted.bam", + "a2921f761f431ede522016f83f75c12d" + ], + [ + "SRR389222_sub1.markdup.sorted.bam", + "e50275d6d44138f19d65ee479444d5ce" + ], + [ + "SRR389222_sub2.markdup.sorted.bam", + "d365b8b2662b2abffb51dd67a1f463b4" + ], + [ + "SRR389222_sub3.markdup.sorted.bam", + "a9fd2900b9d759f8f4f62cbbb2744fde" + ] + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-21T18:01:53.259560408" + } +} \ No newline at end of file diff --git a/tests/bwameth_skip_deduplication.nf.test b/tests/bwameth_skip_deduplication.nf.test new file mode 100644 index 00000000..0b208bf4 --- /dev/null +++ b/tests/bwameth_skip_deduplication.nf.test @@ -0,0 +1,41 @@ +nextflow_pipeline { + + name "Test Workflow main.nf" + script "../main.nf" + config "./nextflow.config" + + test("Params: bwameth | skip_deduplication") { + when { + params { + aligner = "bwameth" + skip_deduplication = true + outdir = "$outputDir" + } + } + + then { + // stable_name: All files + folders in ${params.outdir}/ with a stable name + def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) + // stable_path: All files in ${params.outdir}/ with stable content + def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') + // bam_files: All bam files + def bam_files = getAllFilesFromDir(params.outdir, include: ['**/*.bam']) + assertAll( + { assert workflow.success}, + { assert snapshot( + // Number of tasks + workflow.trace.succeeded().size(), + // pipeline versions.yml file for multiqc from which Nextflow version is removed because we tests pipelines on multiple Nextflow versions + removeNextflowVersion("$outputDir/pipeline_info/nf_core_pipeline_software_mqc_versions.yml"), + // All stable path name + stable_name, + // All files with stable contents + stable_path, + // All bam files + bam_files.collect{ file -> [ file.getName(), bam(file.toString()).getReadsMD5() ] } + ).match() } + ) + } + } + +} diff --git a/tests/bwameth_skip_deduplication.nf.test.snap b/tests/bwameth_skip_deduplication.nf.test.snap new file mode 100644 index 00000000..f73c18ae --- /dev/null +++ b/tests/bwameth_skip_deduplication.nf.test.snap @@ -0,0 +1,398 @@ +{ + "Params: bwameth | skip_deduplication": { + "content": [ + 42, + { + "BWAMETH_ALIGN": { + "bwameth": "0.2.7" + }, + "BWAMETH_INDEX": { + "bwameth": "0.2.7" + }, + "FASTQC": { + "fastqc": "0.12.1" + }, + "QUALIMAP_BAMQC": { + "qualimap": 2.3 + }, + "TRIMGALORE": { + "trimgalore": "0.6.10", + "cutadapt": 4.2 + }, + "Workflow": { + "nf-core/methylseq": "v2.7.0" + } + }, + [ + "bwameth", + "bwameth/alignments", + "bwameth/alignments/samtools_stats", + "bwameth/alignments/samtools_stats/Ecoli_10K_methylated.flagstat", + "bwameth/alignments/samtools_stats/Ecoli_10K_methylated.stats", + "bwameth/alignments/samtools_stats/SRR389222_sub1.flagstat", + "bwameth/alignments/samtools_stats/SRR389222_sub1.stats", + "bwameth/alignments/samtools_stats/SRR389222_sub2.flagstat", + "bwameth/alignments/samtools_stats/SRR389222_sub2.stats", + "bwameth/alignments/samtools_stats/SRR389222_sub3.flagstat", + "bwameth/alignments/samtools_stats/SRR389222_sub3.stats", + "fastqc", + "fastqc/Ecoli_10K_methylated_1_fastqc.html", + "fastqc/Ecoli_10K_methylated_2_fastqc.html", + "fastqc/SRR389222_sub1_fastqc.html", + "fastqc/SRR389222_sub2_fastqc.html", + "fastqc/SRR389222_sub3_fastqc.html", + "fastqc/zips", + "fastqc/zips/Ecoli_10K_methylated_1_fastqc.zip", + "fastqc/zips/Ecoli_10K_methylated_2_fastqc.zip", + "fastqc/zips/SRR389222_sub1_fastqc.zip", + "fastqc/zips/SRR389222_sub2_fastqc.zip", + "fastqc/zips/SRR389222_sub3_fastqc.zip", + "methyldackel", + "methyldackel/Ecoli_10K_methylated.sorted_CpG.bedGraph", + "methyldackel/SRR389222_sub1.sorted_CpG.bedGraph", + "methyldackel/SRR389222_sub2.sorted_CpG.bedGraph", + "methyldackel/SRR389222_sub3.sorted_CpG.bedGraph", + "methyldackel/mbias", + "methyldackel/mbias/Ecoli_10K_methylated.mbias.txt", + "methyldackel/mbias/SRR389222_sub1.mbias.txt", + "methyldackel/mbias/SRR389222_sub2.mbias.txt", + "methyldackel/mbias/SRR389222_sub3.mbias.txt", + "multiqc", + "multiqc/bwameth", + "multiqc/bwameth/multiqc_data", + "multiqc/bwameth/multiqc_data/cutadapt_filtered_reads_plot.txt", + "multiqc/bwameth/multiqc_data/cutadapt_trimmed_sequences_plot_3_Counts.txt", + "multiqc/bwameth/multiqc_data/cutadapt_trimmed_sequences_plot_3_Obs_Exp.txt", + "multiqc/bwameth/multiqc_data/fastqc-status-check-heatmap.txt", + "multiqc/bwameth/multiqc_data/fastqc_adapter_content_plot.txt", + "multiqc/bwameth/multiqc_data/fastqc_overrepresented_sequences_plot.txt", + "multiqc/bwameth/multiqc_data/fastqc_per_base_n_content_plot.txt", + "multiqc/bwameth/multiqc_data/fastqc_per_base_sequence_quality_plot.txt", + "multiqc/bwameth/multiqc_data/fastqc_per_sequence_gc_content_plot_Counts.txt", + "multiqc/bwameth/multiqc_data/fastqc_per_sequence_gc_content_plot_Percentages.txt", + "multiqc/bwameth/multiqc_data/fastqc_per_sequence_quality_scores_plot.txt", + "multiqc/bwameth/multiqc_data/fastqc_sequence_counts_plot.txt", + "multiqc/bwameth/multiqc_data/fastqc_sequence_duplication_levels_plot.txt", + "multiqc/bwameth/multiqc_data/fastqc_top_overrepresented_sequences_table.txt", + "multiqc/bwameth/multiqc_data/multiqc.log", + "multiqc/bwameth/multiqc_data/multiqc_citations.txt", + "multiqc/bwameth/multiqc_data/multiqc_cutadapt.txt", + "multiqc/bwameth/multiqc_data/multiqc_data.json", + "multiqc/bwameth/multiqc_data/multiqc_fastqc.txt", + "multiqc/bwameth/multiqc_data/multiqc_general_stats.txt", + "multiqc/bwameth/multiqc_data/multiqc_qualimap_bamqc_genome_results.txt", + "multiqc/bwameth/multiqc_data/multiqc_samtools_flagstat.txt", + "multiqc/bwameth/multiqc_data/multiqc_samtools_stats.txt", + "multiqc/bwameth/multiqc_data/multiqc_software_versions.txt", + "multiqc/bwameth/multiqc_data/multiqc_sources.txt", + "multiqc/bwameth/multiqc_data/qualimap_coverage_histogram.txt", + "multiqc/bwameth/multiqc_data/qualimap_gc_content.txt", + "multiqc/bwameth/multiqc_data/qualimap_genome_fraction.txt", + "multiqc/bwameth/multiqc_data/qualimap_insert_size.txt", + "multiqc/bwameth/multiqc_data/samtools-flagstat-dp_Percentage_of_total.txt", + "multiqc/bwameth/multiqc_data/samtools-flagstat-dp_Read_counts.txt", + "multiqc/bwameth/multiqc_data/samtools-stats-dp.txt", + "multiqc/bwameth/multiqc_data/samtools_alignment_plot.txt", + "multiqc/bwameth/multiqc_plots", + "multiqc/bwameth/multiqc_plots/pdf", + "multiqc/bwameth/multiqc_plots/pdf/cutadapt_filtered_reads_plot-cnt.pdf", + "multiqc/bwameth/multiqc_plots/pdf/cutadapt_filtered_reads_plot-pct.pdf", + "multiqc/bwameth/multiqc_plots/pdf/cutadapt_trimmed_sequences_plot_3_Counts.pdf", + "multiqc/bwameth/multiqc_plots/pdf/cutadapt_trimmed_sequences_plot_3_Obs_Exp.pdf", + "multiqc/bwameth/multiqc_plots/pdf/fastqc-status-check-heatmap.pdf", + "multiqc/bwameth/multiqc_plots/pdf/fastqc_adapter_content_plot.pdf", + "multiqc/bwameth/multiqc_plots/pdf/fastqc_overrepresented_sequences_plot.pdf", + "multiqc/bwameth/multiqc_plots/pdf/fastqc_per_base_n_content_plot.pdf", + "multiqc/bwameth/multiqc_plots/pdf/fastqc_per_base_sequence_quality_plot.pdf", + "multiqc/bwameth/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Counts.pdf", + "multiqc/bwameth/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Percentages.pdf", + "multiqc/bwameth/multiqc_plots/pdf/fastqc_per_sequence_quality_scores_plot.pdf", + "multiqc/bwameth/multiqc_plots/pdf/fastqc_sequence_counts_plot-cnt.pdf", + "multiqc/bwameth/multiqc_plots/pdf/fastqc_sequence_counts_plot-pct.pdf", + "multiqc/bwameth/multiqc_plots/pdf/fastqc_sequence_duplication_levels_plot.pdf", + "multiqc/bwameth/multiqc_plots/pdf/fastqc_top_overrepresented_sequences_table.pdf", + "multiqc/bwameth/multiqc_plots/pdf/general_stats_table.pdf", + "multiqc/bwameth/multiqc_plots/pdf/qualimap_coverage_histogram.pdf", + "multiqc/bwameth/multiqc_plots/pdf/qualimap_gc_content.pdf", + "multiqc/bwameth/multiqc_plots/pdf/qualimap_genome_fraction.pdf", + "multiqc/bwameth/multiqc_plots/pdf/qualimap_insert_size.pdf", + "multiqc/bwameth/multiqc_plots/pdf/samtools-flagstat-dp_Percentage_of_total.pdf", + "multiqc/bwameth/multiqc_plots/pdf/samtools-flagstat-dp_Read_counts.pdf", + "multiqc/bwameth/multiqc_plots/pdf/samtools-stats-dp.pdf", + "multiqc/bwameth/multiqc_plots/pdf/samtools_alignment_plot-cnt.pdf", + "multiqc/bwameth/multiqc_plots/pdf/samtools_alignment_plot-pct.pdf", + "multiqc/bwameth/multiqc_plots/png", + "multiqc/bwameth/multiqc_plots/png/cutadapt_filtered_reads_plot-cnt.png", + "multiqc/bwameth/multiqc_plots/png/cutadapt_filtered_reads_plot-pct.png", + "multiqc/bwameth/multiqc_plots/png/cutadapt_trimmed_sequences_plot_3_Counts.png", + "multiqc/bwameth/multiqc_plots/png/cutadapt_trimmed_sequences_plot_3_Obs_Exp.png", + "multiqc/bwameth/multiqc_plots/png/fastqc-status-check-heatmap.png", + "multiqc/bwameth/multiqc_plots/png/fastqc_adapter_content_plot.png", + "multiqc/bwameth/multiqc_plots/png/fastqc_overrepresented_sequences_plot.png", + "multiqc/bwameth/multiqc_plots/png/fastqc_per_base_n_content_plot.png", + "multiqc/bwameth/multiqc_plots/png/fastqc_per_base_sequence_quality_plot.png", + "multiqc/bwameth/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Counts.png", + "multiqc/bwameth/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Percentages.png", + "multiqc/bwameth/multiqc_plots/png/fastqc_per_sequence_quality_scores_plot.png", + "multiqc/bwameth/multiqc_plots/png/fastqc_sequence_counts_plot-cnt.png", + "multiqc/bwameth/multiqc_plots/png/fastqc_sequence_counts_plot-pct.png", + "multiqc/bwameth/multiqc_plots/png/fastqc_sequence_duplication_levels_plot.png", + "multiqc/bwameth/multiqc_plots/png/fastqc_top_overrepresented_sequences_table.png", + "multiqc/bwameth/multiqc_plots/png/general_stats_table.png", + "multiqc/bwameth/multiqc_plots/png/qualimap_coverage_histogram.png", + "multiqc/bwameth/multiqc_plots/png/qualimap_gc_content.png", + "multiqc/bwameth/multiqc_plots/png/qualimap_genome_fraction.png", + "multiqc/bwameth/multiqc_plots/png/qualimap_insert_size.png", + "multiqc/bwameth/multiqc_plots/png/samtools-flagstat-dp_Percentage_of_total.png", + "multiqc/bwameth/multiqc_plots/png/samtools-flagstat-dp_Read_counts.png", + "multiqc/bwameth/multiqc_plots/png/samtools-stats-dp.png", + "multiqc/bwameth/multiqc_plots/png/samtools_alignment_plot-cnt.png", + "multiqc/bwameth/multiqc_plots/png/samtools_alignment_plot-pct.png", + "multiqc/bwameth/multiqc_plots/svg", + "multiqc/bwameth/multiqc_plots/svg/cutadapt_filtered_reads_plot-cnt.svg", + "multiqc/bwameth/multiqc_plots/svg/cutadapt_filtered_reads_plot-pct.svg", + "multiqc/bwameth/multiqc_plots/svg/cutadapt_trimmed_sequences_plot_3_Counts.svg", + "multiqc/bwameth/multiqc_plots/svg/cutadapt_trimmed_sequences_plot_3_Obs_Exp.svg", + "multiqc/bwameth/multiqc_plots/svg/fastqc-status-check-heatmap.svg", + "multiqc/bwameth/multiqc_plots/svg/fastqc_adapter_content_plot.svg", + "multiqc/bwameth/multiqc_plots/svg/fastqc_overrepresented_sequences_plot.svg", + "multiqc/bwameth/multiqc_plots/svg/fastqc_per_base_n_content_plot.svg", + "multiqc/bwameth/multiqc_plots/svg/fastqc_per_base_sequence_quality_plot.svg", + "multiqc/bwameth/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Counts.svg", + "multiqc/bwameth/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Percentages.svg", + "multiqc/bwameth/multiqc_plots/svg/fastqc_per_sequence_quality_scores_plot.svg", + "multiqc/bwameth/multiqc_plots/svg/fastqc_sequence_counts_plot-cnt.svg", + "multiqc/bwameth/multiqc_plots/svg/fastqc_sequence_counts_plot-pct.svg", + "multiqc/bwameth/multiqc_plots/svg/fastqc_sequence_duplication_levels_plot.svg", + "multiqc/bwameth/multiqc_plots/svg/fastqc_top_overrepresented_sequences_table.svg", + "multiqc/bwameth/multiqc_plots/svg/general_stats_table.svg", + "multiqc/bwameth/multiqc_plots/svg/qualimap_coverage_histogram.svg", + "multiqc/bwameth/multiqc_plots/svg/qualimap_gc_content.svg", + "multiqc/bwameth/multiqc_plots/svg/qualimap_genome_fraction.svg", + "multiqc/bwameth/multiqc_plots/svg/qualimap_insert_size.svg", + "multiqc/bwameth/multiqc_plots/svg/samtools-flagstat-dp_Percentage_of_total.svg", + "multiqc/bwameth/multiqc_plots/svg/samtools-flagstat-dp_Read_counts.svg", + "multiqc/bwameth/multiqc_plots/svg/samtools-stats-dp.svg", + "multiqc/bwameth/multiqc_plots/svg/samtools_alignment_plot-cnt.svg", + "multiqc/bwameth/multiqc_plots/svg/samtools_alignment_plot-pct.svg", + "multiqc/bwameth/multiqc_report.html", + "pipeline_info", + "pipeline_info/nf_core_pipeline_software_mqc_versions.yml", + "qualimap", + "qualimap/Ecoli_10K_methylated", + "qualimap/Ecoli_10K_methylated/css", + "qualimap/Ecoli_10K_methylated/css/agogo.css", + "qualimap/Ecoli_10K_methylated/css/ajax-loader.gif", + "qualimap/Ecoli_10K_methylated/css/basic.css", + "qualimap/Ecoli_10K_methylated/css/bgfooter.png", + "qualimap/Ecoli_10K_methylated/css/bgtop.png", + "qualimap/Ecoli_10K_methylated/css/comment-bright.png", + "qualimap/Ecoli_10K_methylated/css/comment-close.png", + "qualimap/Ecoli_10K_methylated/css/comment.png", + "qualimap/Ecoli_10K_methylated/css/doctools.js", + "qualimap/Ecoli_10K_methylated/css/down-pressed.png", + "qualimap/Ecoli_10K_methylated/css/down.png", + "qualimap/Ecoli_10K_methylated/css/file.png", + "qualimap/Ecoli_10K_methylated/css/jquery.js", + "qualimap/Ecoli_10K_methylated/css/minus.png", + "qualimap/Ecoli_10K_methylated/css/plus.png", + "qualimap/Ecoli_10K_methylated/css/pygments.css", + "qualimap/Ecoli_10K_methylated/css/qualimap_logo_small.png", + "qualimap/Ecoli_10K_methylated/css/report.css", + "qualimap/Ecoli_10K_methylated/css/searchtools.js", + "qualimap/Ecoli_10K_methylated/css/underscore.js", + "qualimap/Ecoli_10K_methylated/css/up-pressed.png", + "qualimap/Ecoli_10K_methylated/css/up.png", + "qualimap/Ecoli_10K_methylated/css/websupport.js", + "qualimap/Ecoli_10K_methylated/genome_results.txt", + "qualimap/Ecoli_10K_methylated/images_qualimapReport", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_coverage_0to50_histogram.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_coverage_across_reference.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_coverage_histogram.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_coverage_quotes.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_gc_content_per_window.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_homopolymer_indels.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_insert_size_across_reference.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_insert_size_histogram.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_mapping_quality_across_reference.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_mapping_quality_histogram.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_reads_clipping_profile.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_reads_content_per_read_position.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_uniq_read_starts_histogram.png", + "qualimap/Ecoli_10K_methylated/qualimapReport.html", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/coverage_across_reference.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/coverage_histogram.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/duplication_rate_histogram.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/genome_fraction_coverage.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/homopolymer_indels.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/insert_size_across_reference.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/insert_size_histogram.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/mapped_reads_clipping_profile.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/mapped_reads_gc-content_distribution.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/mapped_reads_nucleotide_content.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/mapping_quality_across_reference.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/mapping_quality_histogram.txt", + "qualimap/SRR389222_sub1", + "qualimap/SRR389222_sub1/css", + "qualimap/SRR389222_sub1/css/agogo.css", + "qualimap/SRR389222_sub1/css/ajax-loader.gif", + "qualimap/SRR389222_sub1/css/basic.css", + "qualimap/SRR389222_sub1/css/bgfooter.png", + "qualimap/SRR389222_sub1/css/bgtop.png", + "qualimap/SRR389222_sub1/css/comment-bright.png", + "qualimap/SRR389222_sub1/css/comment-close.png", + "qualimap/SRR389222_sub1/css/comment.png", + "qualimap/SRR389222_sub1/css/doctools.js", + "qualimap/SRR389222_sub1/css/down-pressed.png", + "qualimap/SRR389222_sub1/css/down.png", + "qualimap/SRR389222_sub1/css/file.png", + "qualimap/SRR389222_sub1/css/jquery.js", + "qualimap/SRR389222_sub1/css/minus.png", + "qualimap/SRR389222_sub1/css/plus.png", + "qualimap/SRR389222_sub1/css/pygments.css", + "qualimap/SRR389222_sub1/css/qualimap_logo_small.png", + "qualimap/SRR389222_sub1/css/report.css", + "qualimap/SRR389222_sub1/css/searchtools.js", + "qualimap/SRR389222_sub1/css/underscore.js", + "qualimap/SRR389222_sub1/css/up-pressed.png", + "qualimap/SRR389222_sub1/css/up.png", + "qualimap/SRR389222_sub1/css/websupport.js", + "qualimap/SRR389222_sub1/genome_results.txt", + "qualimap/SRR389222_sub1/qualimapReport.html", + "qualimap/SRR389222_sub1/raw_data_qualimapReport", + "qualimap/SRR389222_sub2", + "qualimap/SRR389222_sub2/css", + "qualimap/SRR389222_sub2/css/agogo.css", + "qualimap/SRR389222_sub2/css/ajax-loader.gif", + "qualimap/SRR389222_sub2/css/basic.css", + "qualimap/SRR389222_sub2/css/bgfooter.png", + "qualimap/SRR389222_sub2/css/bgtop.png", + "qualimap/SRR389222_sub2/css/comment-bright.png", + "qualimap/SRR389222_sub2/css/comment-close.png", + "qualimap/SRR389222_sub2/css/comment.png", + "qualimap/SRR389222_sub2/css/doctools.js", + "qualimap/SRR389222_sub2/css/down-pressed.png", + "qualimap/SRR389222_sub2/css/down.png", + "qualimap/SRR389222_sub2/css/file.png", + "qualimap/SRR389222_sub2/css/jquery.js", + "qualimap/SRR389222_sub2/css/minus.png", + "qualimap/SRR389222_sub2/css/plus.png", + "qualimap/SRR389222_sub2/css/pygments.css", + "qualimap/SRR389222_sub2/css/qualimap_logo_small.png", + "qualimap/SRR389222_sub2/css/report.css", + "qualimap/SRR389222_sub2/css/searchtools.js", + "qualimap/SRR389222_sub2/css/underscore.js", + "qualimap/SRR389222_sub2/css/up-pressed.png", + "qualimap/SRR389222_sub2/css/up.png", + "qualimap/SRR389222_sub2/css/websupport.js", + "qualimap/SRR389222_sub2/genome_results.txt", + "qualimap/SRR389222_sub2/qualimapReport.html", + "qualimap/SRR389222_sub2/raw_data_qualimapReport", + "qualimap/SRR389222_sub3", + "qualimap/SRR389222_sub3/css", + "qualimap/SRR389222_sub3/css/agogo.css", + "qualimap/SRR389222_sub3/css/ajax-loader.gif", + "qualimap/SRR389222_sub3/css/basic.css", + "qualimap/SRR389222_sub3/css/bgfooter.png", + "qualimap/SRR389222_sub3/css/bgtop.png", + "qualimap/SRR389222_sub3/css/comment-bright.png", + "qualimap/SRR389222_sub3/css/comment-close.png", + "qualimap/SRR389222_sub3/css/comment.png", + "qualimap/SRR389222_sub3/css/doctools.js", + "qualimap/SRR389222_sub3/css/down-pressed.png", + "qualimap/SRR389222_sub3/css/down.png", + "qualimap/SRR389222_sub3/css/file.png", + "qualimap/SRR389222_sub3/css/jquery.js", + "qualimap/SRR389222_sub3/css/minus.png", + "qualimap/SRR389222_sub3/css/plus.png", + "qualimap/SRR389222_sub3/css/pygments.css", + "qualimap/SRR389222_sub3/css/qualimap_logo_small.png", + "qualimap/SRR389222_sub3/css/report.css", + "qualimap/SRR389222_sub3/css/searchtools.js", + "qualimap/SRR389222_sub3/css/underscore.js", + "qualimap/SRR389222_sub3/css/up-pressed.png", + "qualimap/SRR389222_sub3/css/up.png", + "qualimap/SRR389222_sub3/css/websupport.js", + "qualimap/SRR389222_sub3/genome_results.txt", + "qualimap/SRR389222_sub3/qualimapReport.html", + "qualimap/SRR389222_sub3/raw_data_qualimapReport", + "trimgalore", + "trimgalore/fastqc", + "trimgalore/fastqc/Ecoli_10K_methylated_1_val_1_fastqc.html", + "trimgalore/fastqc/Ecoli_10K_methylated_2_val_2_fastqc.html", + "trimgalore/fastqc/SRR389222_sub1_trimmed_fastqc.html", + "trimgalore/fastqc/SRR389222_sub2_trimmed_fastqc.html", + "trimgalore/fastqc/SRR389222_sub3_trimmed_fastqc.html", + "trimgalore/fastqc/zips", + "trimgalore/fastqc/zips/Ecoli_10K_methylated_1_val_1_fastqc.zip", + "trimgalore/fastqc/zips/Ecoli_10K_methylated_2_val_2_fastqc.zip", + "trimgalore/fastqc/zips/SRR389222_sub1_trimmed_fastqc.zip", + "trimgalore/fastqc/zips/SRR389222_sub2_trimmed_fastqc.zip", + "trimgalore/fastqc/zips/SRR389222_sub3_trimmed_fastqc.zip", + "trimgalore/logs", + "trimgalore/logs/Ecoli_10K_methylated_1.fastq.gz_trimming_report.txt", + "trimgalore/logs/Ecoli_10K_methylated_2.fastq.gz_trimming_report.txt", + "trimgalore/logs/SRR389222_sub1.fastq.gz_trimming_report.txt", + "trimgalore/logs/SRR389222_sub2.fastq.gz_trimming_report.txt", + "trimgalore/logs/SRR389222_sub3.fastq.gz_trimming_report.txt" + ], + [ + "Ecoli_10K_methylated.flagstat:md5,f520e87cc4050799a0dbed72909572ec", + "Ecoli_10K_methylated.stats:md5,2df1b94e099f2948ad990224f7cf07a4", + "SRR389222_sub1.flagstat:md5,ad8159a7683b9c3057bf54ccb77a2ddc", + "SRR389222_sub1.stats:md5,0f660ccc767662d4bd8c5197f3d46a87", + "SRR389222_sub2.flagstat:md5,e768b4f54014d62b096152c44f920bc1", + "SRR389222_sub2.stats:md5,9343b74f4d825bfb2a554be3d8bed432", + "SRR389222_sub3.flagstat:md5,39516f7d2c77e6fef9543edf8cddbcd6", + "SRR389222_sub3.stats:md5,f41e135f71893e2a8b589c4a66cbfeec", + "Ecoli_10K_methylated.sorted_CpG.bedGraph:md5,aa88f19284e63097e9abccac4d7c6669", + "SRR389222_sub1.sorted_CpG.bedGraph:md5,4475a9462ce86a019015b69b82a9d5a2", + "SRR389222_sub2.sorted_CpG.bedGraph:md5,18b8845d9d985d3c203ca6c9c40aab1b", + "SRR389222_sub3.sorted_CpG.bedGraph:md5,70dcc3836dc9721c2de367d1cf05e815", + "Ecoli_10K_methylated.mbias.txt:md5,3a448a2a6364b2de3129365a271c0534", + "SRR389222_sub1.mbias.txt:md5,fce04d733e066d0b933cedc602e2af81", + "SRR389222_sub2.mbias.txt:md5,fce04d733e066d0b933cedc602e2af81", + "SRR389222_sub3.mbias.txt:md5,fce04d733e066d0b933cedc602e2af81", + "cutadapt_filtered_reads_plot.txt:md5,ff1b6d4011a5be5410b9404f7ff56c56", + "cutadapt_trimmed_sequences_plot_3_Counts.txt:md5,57d07c19b0c30dc88df96c30bedcdc33", + "cutadapt_trimmed_sequences_plot_3_Obs_Exp.txt:md5,1e5ca4193f8290c5c812334d03615b41", + "fastqc-status-check-heatmap.txt:md5,218c2a7efbb9c02f652fa78fc739c866", + "fastqc_adapter_content_plot.txt:md5,48d8bd5ece984a74972ce0a0e814dd07", + "fastqc_overrepresented_sequences_plot.txt:md5,9c4b7064950b5b2c486d556984f21e9e", + "fastqc_per_base_n_content_plot.txt:md5,019d5cd4f61a31f4e7016140ca8ee36e", + "fastqc_per_base_sequence_quality_plot.txt:md5,e4c7d522114eab9bc9101e7ee9d83c8f", + "fastqc_per_sequence_gc_content_plot_Counts.txt:md5,302659bee8a02b6a38b24fe25f8eaa87", + "fastqc_per_sequence_gc_content_plot_Percentages.txt:md5,c75b396eb5dda8682fb1652a9b2e92a3", + "fastqc_per_sequence_quality_scores_plot.txt:md5,548c593f4a8be2d8627fc3bd1c280611", + "fastqc_sequence_counts_plot.txt:md5,58eeeb06bc9dcc1764c7daf0847d6bbf", + "fastqc_sequence_duplication_levels_plot.txt:md5,9e5712db9aa39b5754ea1e0c49cfff15", + "fastqc_top_overrepresented_sequences_table.txt:md5,6dfc5334a09c05392ea17369aa742d01", + "multiqc_citations.txt:md5,581df5b266851d0244e7cfb213351ffb", + "multiqc_cutadapt.txt:md5,f7a61369244b1e040d264e6913b8a839", + "multiqc_samtools_flagstat.txt:md5,a8f5b45b8b3412a9adc3dd0d35208c73", + "multiqc_samtools_stats.txt:md5,e24271a8111b06c1f545b6b1a077a4a7", + "qualimap_coverage_histogram.txt:md5,c7c932e4d84b735bd434c1aaa713b6e6", + "qualimap_gc_content.txt:md5,893d1acba7a6675ff9e2eff2985fa4e3", + "qualimap_genome_fraction.txt:md5,ef5b6010b52a03f6e58356db7128d0dc", + "qualimap_insert_size.txt:md5,f86cc9fe7a12af8f62f26312660e9225", + "samtools-flagstat-dp_Percentage_of_total.txt:md5,ff5d65a480449ba98587c43f3a2bd33e", + "samtools-flagstat-dp_Read_counts.txt:md5,6a5332e2ad59f7da00b5a9a1a25fd2f8", + "samtools-stats-dp.txt:md5,52021b9a9455b39b39dd357bc2e8d346", + "samtools_alignment_plot.txt:md5,39f42e039f96cc2b17248b44ccaf425b", + "genome_results.txt:md5,2dc1bce48dc3554b990674d421287366", + "genome_results.txt:md5,ed81b2fd10b2c548610d546b4e4d3b76", + "genome_results.txt:md5,92485f8ac205d7fa1140cdc293f07560", + "genome_results.txt:md5,478f711b8ef22e094e4d0ff7fa0dfda0" + ], + [ + + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-21T18:02:51.160774031" + } +} \ No newline at end of file diff --git a/tests/bwameth_skip_trimming.nf.test b/tests/bwameth_skip_trimming.nf.test new file mode 100644 index 00000000..3b01599d --- /dev/null +++ b/tests/bwameth_skip_trimming.nf.test @@ -0,0 +1,41 @@ +nextflow_pipeline { + + name "Test Workflow main.nf" + script "../main.nf" + config "./nextflow.config" + + test("Params: bwameth | skip_trimming") { + when { + params { + aligner = "bwameth" + skip_trimming = true + outdir = "$outputDir" + } + } + + then { + // stable_name: All files + folders in ${params.outdir}/ with a stable name + def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) + // stable_path: All files in ${params.outdir}/ with stable content + def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') + // bam_files: All bam files + def bam_files = getAllFilesFromDir(params.outdir, include: ['**/*.bam']) + assertAll( + { assert workflow.success}, + { assert snapshot( + // Number of tasks + workflow.trace.succeeded().size(), + // pipeline versions.yml file for multiqc from which Nextflow version is removed because we tests pipelines on multiple Nextflow versions + removeNextflowVersion("$outputDir/pipeline_info/nf_core_pipeline_software_mqc_versions.yml"), + // All stable path name + stable_name, + // All files with stable contents + stable_path, + // All bam files + bam_files.collect{ file -> [ file.getName(), bam(file.toString()).getReadsMD5() ] } + ).match() } + ) + } + } + +} diff --git a/tests/bwameth_skip_trimming.nf.test.snap b/tests/bwameth_skip_trimming.nf.test.snap new file mode 100644 index 00000000..7603b462 --- /dev/null +++ b/tests/bwameth_skip_trimming.nf.test.snap @@ -0,0 +1,400 @@ +{ + "Params: bwameth | skip_trimming": { + "content": [ + 46, + { + "BWAMETH_ALIGN": { + "bwameth": "0.2.7" + }, + "BWAMETH_INDEX": { + "bwameth": "0.2.7" + }, + "FASTQC": { + "fastqc": "0.12.1" + }, + "QUALIMAP_BAMQC": { + "qualimap": 2.3 + }, + "Workflow": { + "nf-core/methylseq": "v2.7.0" + } + }, + [ + "bwameth", + "bwameth/alignments", + "bwameth/alignments/samtools_stats", + "bwameth/alignments/samtools_stats/Ecoli_10K_methylated.flagstat", + "bwameth/alignments/samtools_stats/Ecoli_10K_methylated.stats", + "bwameth/alignments/samtools_stats/SRR389222_sub1.flagstat", + "bwameth/alignments/samtools_stats/SRR389222_sub1.stats", + "bwameth/alignments/samtools_stats/SRR389222_sub2.flagstat", + "bwameth/alignments/samtools_stats/SRR389222_sub2.stats", + "bwameth/alignments/samtools_stats/SRR389222_sub3.flagstat", + "bwameth/alignments/samtools_stats/SRR389222_sub3.stats", + "bwameth/deduplicated", + "bwameth/deduplicated/Ecoli_10K_methylated.markdup.sorted.bam", + "bwameth/deduplicated/Ecoli_10K_methylated.markdup.sorted.bam.bai", + "bwameth/deduplicated/SRR389222_sub1.markdup.sorted.bam", + "bwameth/deduplicated/SRR389222_sub1.markdup.sorted.bam.bai", + "bwameth/deduplicated/SRR389222_sub2.markdup.sorted.bam", + "bwameth/deduplicated/SRR389222_sub2.markdup.sorted.bam.bai", + "bwameth/deduplicated/SRR389222_sub3.markdup.sorted.bam", + "bwameth/deduplicated/SRR389222_sub3.markdup.sorted.bam.bai", + "bwameth/deduplicated/picard_metrics", + "bwameth/deduplicated/picard_metrics/Ecoli_10K_methylated.markdup.sorted.MarkDuplicates.metrics.txt", + "bwameth/deduplicated/picard_metrics/SRR389222_sub1.markdup.sorted.MarkDuplicates.metrics.txt", + "bwameth/deduplicated/picard_metrics/SRR389222_sub2.markdup.sorted.MarkDuplicates.metrics.txt", + "bwameth/deduplicated/picard_metrics/SRR389222_sub3.markdup.sorted.MarkDuplicates.metrics.txt", + "fastqc", + "fastqc/Ecoli_10K_methylated_1_fastqc.html", + "fastqc/Ecoli_10K_methylated_2_fastqc.html", + "fastqc/SRR389222_sub1_fastqc.html", + "fastqc/SRR389222_sub2_fastqc.html", + "fastqc/SRR389222_sub3_fastqc.html", + "fastqc/zips", + "fastqc/zips/Ecoli_10K_methylated_1_fastqc.zip", + "fastqc/zips/Ecoli_10K_methylated_2_fastqc.zip", + "fastqc/zips/SRR389222_sub1_fastqc.zip", + "fastqc/zips/SRR389222_sub2_fastqc.zip", + "fastqc/zips/SRR389222_sub3_fastqc.zip", + "methyldackel", + "methyldackel/Ecoli_10K_methylated.markdup.sorted_CpG.bedGraph", + "methyldackel/SRR389222_sub1.markdup.sorted_CpG.bedGraph", + "methyldackel/SRR389222_sub2.markdup.sorted_CpG.bedGraph", + "methyldackel/SRR389222_sub3.markdup.sorted_CpG.bedGraph", + "methyldackel/mbias", + "methyldackel/mbias/Ecoli_10K_methylated.mbias.txt", + "methyldackel/mbias/SRR389222_sub1.mbias.txt", + "methyldackel/mbias/SRR389222_sub2.mbias.txt", + "methyldackel/mbias/SRR389222_sub3.mbias.txt", + "multiqc", + "multiqc/bwameth", + "multiqc/bwameth/multiqc_data", + "multiqc/bwameth/multiqc_data/fastqc-status-check-heatmap.txt", + "multiqc/bwameth/multiqc_data/fastqc_adapter_content_plot.txt", + "multiqc/bwameth/multiqc_data/fastqc_overrepresented_sequences_plot.txt", + "multiqc/bwameth/multiqc_data/fastqc_per_base_n_content_plot.txt", + "multiqc/bwameth/multiqc_data/fastqc_per_base_sequence_quality_plot.txt", + "multiqc/bwameth/multiqc_data/fastqc_per_sequence_gc_content_plot_Counts.txt", + "multiqc/bwameth/multiqc_data/fastqc_per_sequence_gc_content_plot_Percentages.txt", + "multiqc/bwameth/multiqc_data/fastqc_per_sequence_quality_scores_plot.txt", + "multiqc/bwameth/multiqc_data/fastqc_sequence_counts_plot.txt", + "multiqc/bwameth/multiqc_data/fastqc_sequence_duplication_levels_plot.txt", + "multiqc/bwameth/multiqc_data/fastqc_top_overrepresented_sequences_table.txt", + "multiqc/bwameth/multiqc_data/multiqc.log", + "multiqc/bwameth/multiqc_data/multiqc_citations.txt", + "multiqc/bwameth/multiqc_data/multiqc_data.json", + "multiqc/bwameth/multiqc_data/multiqc_fastqc.txt", + "multiqc/bwameth/multiqc_data/multiqc_general_stats.txt", + "multiqc/bwameth/multiqc_data/multiqc_picard_dups.txt", + "multiqc/bwameth/multiqc_data/multiqc_qualimap_bamqc_genome_results.txt", + "multiqc/bwameth/multiqc_data/multiqc_samtools_flagstat.txt", + "multiqc/bwameth/multiqc_data/multiqc_samtools_stats.txt", + "multiqc/bwameth/multiqc_data/multiqc_software_versions.txt", + "multiqc/bwameth/multiqc_data/multiqc_sources.txt", + "multiqc/bwameth/multiqc_data/picard_deduplication.txt", + "multiqc/bwameth/multiqc_data/picard_histogram.txt", + "multiqc/bwameth/multiqc_data/picard_histogram_1.txt", + "multiqc/bwameth/multiqc_data/picard_histogram_2.txt", + "multiqc/bwameth/multiqc_data/qualimap_coverage_histogram.txt", + "multiqc/bwameth/multiqc_data/qualimap_gc_content.txt", + "multiqc/bwameth/multiqc_data/qualimap_genome_fraction.txt", + "multiqc/bwameth/multiqc_data/qualimap_insert_size.txt", + "multiqc/bwameth/multiqc_data/samtools-flagstat-dp_Percentage_of_total.txt", + "multiqc/bwameth/multiqc_data/samtools-flagstat-dp_Read_counts.txt", + "multiqc/bwameth/multiqc_data/samtools-stats-dp.txt", + "multiqc/bwameth/multiqc_data/samtools_alignment_plot.txt", + "multiqc/bwameth/multiqc_plots", + "multiqc/bwameth/multiqc_plots/pdf", + "multiqc/bwameth/multiqc_plots/pdf/fastqc-status-check-heatmap.pdf", + "multiqc/bwameth/multiqc_plots/pdf/fastqc_adapter_content_plot.pdf", + "multiqc/bwameth/multiqc_plots/pdf/fastqc_overrepresented_sequences_plot.pdf", + "multiqc/bwameth/multiqc_plots/pdf/fastqc_per_base_n_content_plot.pdf", + "multiqc/bwameth/multiqc_plots/pdf/fastqc_per_base_sequence_quality_plot.pdf", + "multiqc/bwameth/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Counts.pdf", + "multiqc/bwameth/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Percentages.pdf", + "multiqc/bwameth/multiqc_plots/pdf/fastqc_per_sequence_quality_scores_plot.pdf", + "multiqc/bwameth/multiqc_plots/pdf/fastqc_sequence_counts_plot-cnt.pdf", + "multiqc/bwameth/multiqc_plots/pdf/fastqc_sequence_counts_plot-pct.pdf", + "multiqc/bwameth/multiqc_plots/pdf/fastqc_sequence_duplication_levels_plot.pdf", + "multiqc/bwameth/multiqc_plots/pdf/fastqc_top_overrepresented_sequences_table.pdf", + "multiqc/bwameth/multiqc_plots/pdf/general_stats_table.pdf", + "multiqc/bwameth/multiqc_plots/pdf/picard_deduplication-cnt.pdf", + "multiqc/bwameth/multiqc_plots/pdf/picard_deduplication-pct.pdf", + "multiqc/bwameth/multiqc_plots/pdf/qualimap_coverage_histogram.pdf", + "multiqc/bwameth/multiqc_plots/pdf/qualimap_gc_content.pdf", + "multiqc/bwameth/multiqc_plots/pdf/qualimap_genome_fraction.pdf", + "multiqc/bwameth/multiqc_plots/pdf/qualimap_insert_size.pdf", + "multiqc/bwameth/multiqc_plots/pdf/samtools-flagstat-dp_Percentage_of_total.pdf", + "multiqc/bwameth/multiqc_plots/pdf/samtools-flagstat-dp_Read_counts.pdf", + "multiqc/bwameth/multiqc_plots/pdf/samtools-stats-dp.pdf", + "multiqc/bwameth/multiqc_plots/pdf/samtools_alignment_plot-cnt.pdf", + "multiqc/bwameth/multiqc_plots/pdf/samtools_alignment_plot-pct.pdf", + "multiqc/bwameth/multiqc_plots/png", + "multiqc/bwameth/multiqc_plots/png/fastqc-status-check-heatmap.png", + "multiqc/bwameth/multiqc_plots/png/fastqc_adapter_content_plot.png", + "multiqc/bwameth/multiqc_plots/png/fastqc_overrepresented_sequences_plot.png", + "multiqc/bwameth/multiqc_plots/png/fastqc_per_base_n_content_plot.png", + "multiqc/bwameth/multiqc_plots/png/fastqc_per_base_sequence_quality_plot.png", + "multiqc/bwameth/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Counts.png", + "multiqc/bwameth/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Percentages.png", + "multiqc/bwameth/multiqc_plots/png/fastqc_per_sequence_quality_scores_plot.png", + "multiqc/bwameth/multiqc_plots/png/fastqc_sequence_counts_plot-cnt.png", + "multiqc/bwameth/multiqc_plots/png/fastqc_sequence_counts_plot-pct.png", + "multiqc/bwameth/multiqc_plots/png/fastqc_sequence_duplication_levels_plot.png", + "multiqc/bwameth/multiqc_plots/png/fastqc_top_overrepresented_sequences_table.png", + "multiqc/bwameth/multiqc_plots/png/general_stats_table.png", + "multiqc/bwameth/multiqc_plots/png/picard_deduplication-cnt.png", + "multiqc/bwameth/multiqc_plots/png/picard_deduplication-pct.png", + "multiqc/bwameth/multiqc_plots/png/qualimap_coverage_histogram.png", + "multiqc/bwameth/multiqc_plots/png/qualimap_gc_content.png", + "multiqc/bwameth/multiqc_plots/png/qualimap_genome_fraction.png", + "multiqc/bwameth/multiqc_plots/png/qualimap_insert_size.png", + "multiqc/bwameth/multiqc_plots/png/samtools-flagstat-dp_Percentage_of_total.png", + "multiqc/bwameth/multiqc_plots/png/samtools-flagstat-dp_Read_counts.png", + "multiqc/bwameth/multiqc_plots/png/samtools-stats-dp.png", + "multiqc/bwameth/multiqc_plots/png/samtools_alignment_plot-cnt.png", + "multiqc/bwameth/multiqc_plots/png/samtools_alignment_plot-pct.png", + "multiqc/bwameth/multiqc_plots/svg", + "multiqc/bwameth/multiqc_plots/svg/fastqc-status-check-heatmap.svg", + "multiqc/bwameth/multiqc_plots/svg/fastqc_adapter_content_plot.svg", + "multiqc/bwameth/multiqc_plots/svg/fastqc_overrepresented_sequences_plot.svg", + "multiqc/bwameth/multiqc_plots/svg/fastqc_per_base_n_content_plot.svg", + "multiqc/bwameth/multiqc_plots/svg/fastqc_per_base_sequence_quality_plot.svg", + "multiqc/bwameth/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Counts.svg", + "multiqc/bwameth/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Percentages.svg", + "multiqc/bwameth/multiqc_plots/svg/fastqc_per_sequence_quality_scores_plot.svg", + "multiqc/bwameth/multiqc_plots/svg/fastqc_sequence_counts_plot-cnt.svg", + "multiqc/bwameth/multiqc_plots/svg/fastqc_sequence_counts_plot-pct.svg", + "multiqc/bwameth/multiqc_plots/svg/fastqc_sequence_duplication_levels_plot.svg", + "multiqc/bwameth/multiqc_plots/svg/fastqc_top_overrepresented_sequences_table.svg", + "multiqc/bwameth/multiqc_plots/svg/general_stats_table.svg", + "multiqc/bwameth/multiqc_plots/svg/picard_deduplication-cnt.svg", + "multiqc/bwameth/multiqc_plots/svg/picard_deduplication-pct.svg", + "multiqc/bwameth/multiqc_plots/svg/qualimap_coverage_histogram.svg", + "multiqc/bwameth/multiqc_plots/svg/qualimap_gc_content.svg", + "multiqc/bwameth/multiqc_plots/svg/qualimap_genome_fraction.svg", + "multiqc/bwameth/multiqc_plots/svg/qualimap_insert_size.svg", + "multiqc/bwameth/multiqc_plots/svg/samtools-flagstat-dp_Percentage_of_total.svg", + "multiqc/bwameth/multiqc_plots/svg/samtools-flagstat-dp_Read_counts.svg", + "multiqc/bwameth/multiqc_plots/svg/samtools-stats-dp.svg", + "multiqc/bwameth/multiqc_plots/svg/samtools_alignment_plot-cnt.svg", + "multiqc/bwameth/multiqc_plots/svg/samtools_alignment_plot-pct.svg", + "multiqc/bwameth/multiqc_report.html", + "pipeline_info", + "pipeline_info/nf_core_pipeline_software_mqc_versions.yml", + "qualimap", + "qualimap/Ecoli_10K_methylated", + "qualimap/Ecoli_10K_methylated/css", + "qualimap/Ecoli_10K_methylated/css/agogo.css", + "qualimap/Ecoli_10K_methylated/css/ajax-loader.gif", + "qualimap/Ecoli_10K_methylated/css/basic.css", + "qualimap/Ecoli_10K_methylated/css/bgfooter.png", + "qualimap/Ecoli_10K_methylated/css/bgtop.png", + "qualimap/Ecoli_10K_methylated/css/comment-bright.png", + "qualimap/Ecoli_10K_methylated/css/comment-close.png", + "qualimap/Ecoli_10K_methylated/css/comment.png", + "qualimap/Ecoli_10K_methylated/css/doctools.js", + "qualimap/Ecoli_10K_methylated/css/down-pressed.png", + "qualimap/Ecoli_10K_methylated/css/down.png", + "qualimap/Ecoli_10K_methylated/css/file.png", + "qualimap/Ecoli_10K_methylated/css/jquery.js", + "qualimap/Ecoli_10K_methylated/css/minus.png", + "qualimap/Ecoli_10K_methylated/css/plus.png", + "qualimap/Ecoli_10K_methylated/css/pygments.css", + "qualimap/Ecoli_10K_methylated/css/qualimap_logo_small.png", + "qualimap/Ecoli_10K_methylated/css/report.css", + "qualimap/Ecoli_10K_methylated/css/searchtools.js", + "qualimap/Ecoli_10K_methylated/css/underscore.js", + "qualimap/Ecoli_10K_methylated/css/up-pressed.png", + "qualimap/Ecoli_10K_methylated/css/up.png", + "qualimap/Ecoli_10K_methylated/css/websupport.js", + "qualimap/Ecoli_10K_methylated/genome_results.txt", + "qualimap/Ecoli_10K_methylated/images_qualimapReport", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_coverage_0to50_histogram.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_coverage_across_reference.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_coverage_histogram.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_coverage_quotes.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_gc_content_per_window.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_homopolymer_indels.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_insert_size_across_reference.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_insert_size_histogram.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_mapping_quality_across_reference.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_mapping_quality_histogram.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_reads_clipping_profile.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_reads_content_per_read_position.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_uniq_read_starts_histogram.png", + "qualimap/Ecoli_10K_methylated/qualimapReport.html", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/coverage_across_reference.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/coverage_histogram.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/duplication_rate_histogram.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/genome_fraction_coverage.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/homopolymer_indels.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/insert_size_across_reference.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/insert_size_histogram.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/mapped_reads_clipping_profile.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/mapped_reads_gc-content_distribution.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/mapped_reads_nucleotide_content.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/mapping_quality_across_reference.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/mapping_quality_histogram.txt", + "qualimap/SRR389222_sub1", + "qualimap/SRR389222_sub1/css", + "qualimap/SRR389222_sub1/css/agogo.css", + "qualimap/SRR389222_sub1/css/ajax-loader.gif", + "qualimap/SRR389222_sub1/css/basic.css", + "qualimap/SRR389222_sub1/css/bgfooter.png", + "qualimap/SRR389222_sub1/css/bgtop.png", + "qualimap/SRR389222_sub1/css/comment-bright.png", + "qualimap/SRR389222_sub1/css/comment-close.png", + "qualimap/SRR389222_sub1/css/comment.png", + "qualimap/SRR389222_sub1/css/doctools.js", + "qualimap/SRR389222_sub1/css/down-pressed.png", + "qualimap/SRR389222_sub1/css/down.png", + "qualimap/SRR389222_sub1/css/file.png", + "qualimap/SRR389222_sub1/css/jquery.js", + "qualimap/SRR389222_sub1/css/minus.png", + "qualimap/SRR389222_sub1/css/plus.png", + "qualimap/SRR389222_sub1/css/pygments.css", + "qualimap/SRR389222_sub1/css/qualimap_logo_small.png", + "qualimap/SRR389222_sub1/css/report.css", + "qualimap/SRR389222_sub1/css/searchtools.js", + "qualimap/SRR389222_sub1/css/underscore.js", + "qualimap/SRR389222_sub1/css/up-pressed.png", + "qualimap/SRR389222_sub1/css/up.png", + "qualimap/SRR389222_sub1/css/websupport.js", + "qualimap/SRR389222_sub1/genome_results.txt", + "qualimap/SRR389222_sub1/qualimapReport.html", + "qualimap/SRR389222_sub1/raw_data_qualimapReport", + "qualimap/SRR389222_sub2", + "qualimap/SRR389222_sub2/css", + "qualimap/SRR389222_sub2/css/agogo.css", + "qualimap/SRR389222_sub2/css/ajax-loader.gif", + "qualimap/SRR389222_sub2/css/basic.css", + "qualimap/SRR389222_sub2/css/bgfooter.png", + "qualimap/SRR389222_sub2/css/bgtop.png", + "qualimap/SRR389222_sub2/css/comment-bright.png", + "qualimap/SRR389222_sub2/css/comment-close.png", + "qualimap/SRR389222_sub2/css/comment.png", + "qualimap/SRR389222_sub2/css/doctools.js", + "qualimap/SRR389222_sub2/css/down-pressed.png", + "qualimap/SRR389222_sub2/css/down.png", + "qualimap/SRR389222_sub2/css/file.png", + "qualimap/SRR389222_sub2/css/jquery.js", + "qualimap/SRR389222_sub2/css/minus.png", + "qualimap/SRR389222_sub2/css/plus.png", + "qualimap/SRR389222_sub2/css/pygments.css", + "qualimap/SRR389222_sub2/css/qualimap_logo_small.png", + "qualimap/SRR389222_sub2/css/report.css", + "qualimap/SRR389222_sub2/css/searchtools.js", + "qualimap/SRR389222_sub2/css/underscore.js", + "qualimap/SRR389222_sub2/css/up-pressed.png", + "qualimap/SRR389222_sub2/css/up.png", + "qualimap/SRR389222_sub2/css/websupport.js", + "qualimap/SRR389222_sub2/genome_results.txt", + "qualimap/SRR389222_sub2/qualimapReport.html", + "qualimap/SRR389222_sub2/raw_data_qualimapReport", + "qualimap/SRR389222_sub3", + "qualimap/SRR389222_sub3/css", + "qualimap/SRR389222_sub3/css/agogo.css", + "qualimap/SRR389222_sub3/css/ajax-loader.gif", + "qualimap/SRR389222_sub3/css/basic.css", + "qualimap/SRR389222_sub3/css/bgfooter.png", + "qualimap/SRR389222_sub3/css/bgtop.png", + "qualimap/SRR389222_sub3/css/comment-bright.png", + "qualimap/SRR389222_sub3/css/comment-close.png", + "qualimap/SRR389222_sub3/css/comment.png", + "qualimap/SRR389222_sub3/css/doctools.js", + "qualimap/SRR389222_sub3/css/down-pressed.png", + "qualimap/SRR389222_sub3/css/down.png", + "qualimap/SRR389222_sub3/css/file.png", + "qualimap/SRR389222_sub3/css/jquery.js", + "qualimap/SRR389222_sub3/css/minus.png", + "qualimap/SRR389222_sub3/css/plus.png", + "qualimap/SRR389222_sub3/css/pygments.css", + "qualimap/SRR389222_sub3/css/qualimap_logo_small.png", + "qualimap/SRR389222_sub3/css/report.css", + "qualimap/SRR389222_sub3/css/searchtools.js", + "qualimap/SRR389222_sub3/css/underscore.js", + "qualimap/SRR389222_sub3/css/up-pressed.png", + "qualimap/SRR389222_sub3/css/up.png", + "qualimap/SRR389222_sub3/css/websupport.js", + "qualimap/SRR389222_sub3/genome_results.txt", + "qualimap/SRR389222_sub3/qualimapReport.html", + "qualimap/SRR389222_sub3/raw_data_qualimapReport" + ], + [ + "Ecoli_10K_methylated.flagstat:md5,7c3bae0f9c700dde88785a7e94c6ae2c", + "Ecoli_10K_methylated.stats:md5,1eb750b964d4da8e9bb23ea28514873b", + "SRR389222_sub1.flagstat:md5,897d500a710a56a7098172167fa71108", + "SRR389222_sub1.stats:md5,6625430e604b48c41c3868e684083065", + "SRR389222_sub2.flagstat:md5,37d33d68b31d4550620dc17582a3a750", + "SRR389222_sub2.stats:md5,ce9216e71c0eb24371fb388429c59894", + "SRR389222_sub3.flagstat:md5,e3e925a7b7356e93d14f5e9e102c55b7", + "SRR389222_sub3.stats:md5,4f5336d853dfada24d9c34a754a7f0a8", + "Ecoli_10K_methylated.markdup.sorted_CpG.bedGraph:md5,b43c4c8ff346ae865b2b5db996650942", + "SRR389222_sub1.markdup.sorted_CpG.bedGraph:md5,0944ad0e3b05791bf6dfd06be7ca4af1", + "SRR389222_sub2.markdup.sorted_CpG.bedGraph:md5,0a3c19af55d1625e91903ae25d1d2098", + "SRR389222_sub3.markdup.sorted_CpG.bedGraph:md5,a91e6b039e9581a9d2ef6f6057918b39", + "Ecoli_10K_methylated.mbias.txt:md5,ec13da6deba1ce147624bce065ec5df6", + "SRR389222_sub1.mbias.txt:md5,fce04d733e066d0b933cedc602e2af81", + "SRR389222_sub2.mbias.txt:md5,fce04d733e066d0b933cedc602e2af81", + "SRR389222_sub3.mbias.txt:md5,fce04d733e066d0b933cedc602e2af81", + "fastqc-status-check-heatmap.txt:md5,218c2a7efbb9c02f652fa78fc739c866", + "fastqc_adapter_content_plot.txt:md5,48d8bd5ece984a74972ce0a0e814dd07", + "fastqc_overrepresented_sequences_plot.txt:md5,9c4b7064950b5b2c486d556984f21e9e", + "fastqc_per_base_n_content_plot.txt:md5,019d5cd4f61a31f4e7016140ca8ee36e", + "fastqc_per_base_sequence_quality_plot.txt:md5,e4c7d522114eab9bc9101e7ee9d83c8f", + "fastqc_per_sequence_gc_content_plot_Counts.txt:md5,302659bee8a02b6a38b24fe25f8eaa87", + "fastqc_per_sequence_gc_content_plot_Percentages.txt:md5,c75b396eb5dda8682fb1652a9b2e92a3", + "fastqc_per_sequence_quality_scores_plot.txt:md5,548c593f4a8be2d8627fc3bd1c280611", + "fastqc_sequence_counts_plot.txt:md5,58eeeb06bc9dcc1764c7daf0847d6bbf", + "fastqc_sequence_duplication_levels_plot.txt:md5,9e5712db9aa39b5754ea1e0c49cfff15", + "fastqc_top_overrepresented_sequences_table.txt:md5,6dfc5334a09c05392ea17369aa742d01", + "multiqc_citations.txt:md5,16ea55093380e6f08131cd394d8975c6", + "multiqc_picard_dups.txt:md5,2dd92451825bab5f1d74bd96933756e6", + "multiqc_samtools_flagstat.txt:md5,707a91291107beffe14f9cc2d540f4a0", + "multiqc_samtools_stats.txt:md5,76db021090766f669ea1276dab863cfe", + "picard_deduplication.txt:md5,b86a20261610bdf7a2e63ff43e232c75", + "picard_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "picard_histogram_1.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "picard_histogram_2.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "qualimap_coverage_histogram.txt:md5,043d169c9214b593dd675ebd0c428620", + "qualimap_gc_content.txt:md5,5492ffd70fa082a4abd51663c3faa300", + "qualimap_genome_fraction.txt:md5,a562614e4281f4f164a6386fd988884b", + "qualimap_insert_size.txt:md5,d5df01e2c0ab54095c921e0a2baa8754", + "samtools-flagstat-dp_Percentage_of_total.txt:md5,a7305ce09c632ddb903a0fe89306f98f", + "samtools-flagstat-dp_Read_counts.txt:md5,2d5434b646dac99397d86bd31731df01", + "samtools-stats-dp.txt:md5,e1290c4b0ad11142147f69f4256c4524", + "samtools_alignment_plot.txt:md5,fe4c9af19d69c3982b75ad458a1a9148", + "genome_results.txt:md5,2a1a374d5b1e3884c57d2d5333db54a6", + "genome_results.txt:md5,c4a9a1a76ba36cf770bf8be9a7fe5b55", + "genome_results.txt:md5,ac65d95bd5c7fd40b90d53d233c7b511", + "genome_results.txt:md5,b7376228bb23c9133fed45b95c60d082" + ], + [ + [ + "Ecoli_10K_methylated.markdup.sorted.bam", + "5b485bcabdb1ad5955cfa061741fad31" + ], + [ + "SRR389222_sub1.markdup.sorted.bam", + "37ec1c6338cc3fee7ab1cb2d48dba38" + ], + [ + "SRR389222_sub2.markdup.sorted.bam", + "783d3be6b5bfa58142c3dbe864f6d8c5" + ], + [ + "SRR389222_sub3.markdup.sorted.bam", + "4bbaef9917f4ff0248d1f5853f583fd0" + ] + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-17T10:43:35.237760512" + } +} \ No newline at end of file diff --git a/tests/config/tags.yml b/tests/config/tags.yml deleted file mode 100644 index db5bda67..00000000 --- a/tests/config/tags.yml +++ /dev/null @@ -1,7 +0,0 @@ -# tags for tests - -bismark: - -bismark_hisat: - -bwameth: diff --git a/tests/default.nf.test b/tests/default.nf.test new file mode 100644 index 00000000..6a210a07 --- /dev/null +++ b/tests/default.nf.test @@ -0,0 +1,58 @@ +nextflow_pipeline { + + name "Test Workflow main.nf" + script "../main.nf" + config "./nextflow.config" + + test("Params: default") { + when { + params { + outdir = "$outputDir" + } + } + + then { + // stable_name: All files + folders in ${params.outdir}/ with a stable name + def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) + // stable_path: All files in ${params.outdir}/ with stable content + def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') + // bam_files: All bam files + def bam_files = getAllFilesFromDir(params.outdir, include: ['**/*.bam']) + assertAll( + { assert workflow.success}, + { assert snapshot( + // Number of tasks + workflow.trace.succeeded().size(), + // pipeline versions.yml file for multiqc from which Nextflow version is removed because we tests pipelines on multiple Nextflow versions + removeNextflowVersion("$outputDir/pipeline_info/nf_core_pipeline_software_mqc_versions.yml"), + // All stable path name + stable_name, + // All files with stable contents + stable_path, + // All bam files + bam_files.collect{ file -> [ file.getName(), bam(file.toString()).getReadsMD5() ] } + ).match() } + ) + } + } + + test("Params: default with bowtie2-index") { + when { + params { + bismark_index = "https://github.com/nf-core/test-datasets/raw/methylseq/reference/Bowtie2_Index.tar.gz" + outdir = "$outputDir" + } + } + + then { + assertAll( + { assert workflow.success }, + { assert snapshot( + // Number of tasks + workflow.trace.succeeded().size() + ).match() } + ) + } + } + +} diff --git a/tests/default.nf.test.snap b/tests/default.nf.test.snap new file mode 100644 index 00000000..675f4e67 --- /dev/null +++ b/tests/default.nf.test.snap @@ -0,0 +1,591 @@ +{ + "Params: default with bowtie2-index": { + "content": [ + 43 + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.2" + }, + "timestamp": "2024-10-12T07:51:49.810650315" + }, + "Params: default": { + "content": [ + 43, + { + "BISMARK_ALIGN": { + "bismark": "0.24.2" + }, + "BISMARK_GENOMEPREPARATION": { + "bismark": "0.24.2" + }, + "FASTQC": { + "fastqc": "0.12.1" + }, + "QUALIMAP_BAMQC": { + "qualimap": 2.3 + }, + "TRIMGALORE": { + "trimgalore": "0.6.10", + "cutadapt": 4.2 + }, + "Workflow": { + "nf-core/methylseq": "v2.7.0" + } + }, + [ + "bismark", + "bismark/alignments", + "bismark/alignments/logs", + "bismark/alignments/logs/Ecoli_10K_methylated_1_val_1_bismark_bt2_PE_report.txt", + "bismark/alignments/logs/SRR389222_sub1_trimmed_bismark_bt2_SE_report.txt", + "bismark/alignments/logs/SRR389222_sub2_trimmed_bismark_bt2_SE_report.txt", + "bismark/alignments/logs/SRR389222_sub3_trimmed_bismark_bt2_SE_report.txt", + "bismark/deduplicated", + "bismark/deduplicated/Ecoli_10K_methylated.deduplicated.sorted.bam", + "bismark/deduplicated/Ecoli_10K_methylated.deduplicated.sorted.bam.bai", + "bismark/deduplicated/SRR389222_sub1.deduplicated.sorted.bam", + "bismark/deduplicated/SRR389222_sub1.deduplicated.sorted.bam.bai", + "bismark/deduplicated/SRR389222_sub2.deduplicated.sorted.bam", + "bismark/deduplicated/SRR389222_sub2.deduplicated.sorted.bam.bai", + "bismark/deduplicated/SRR389222_sub3.deduplicated.sorted.bam", + "bismark/deduplicated/SRR389222_sub3.deduplicated.sorted.bam.bai", + "bismark/deduplicated/logs", + "bismark/deduplicated/logs/Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplication_report.txt", + "bismark/deduplicated/logs/SRR389222_sub1_trimmed_bismark_bt2.deduplication_report.txt", + "bismark/deduplicated/logs/SRR389222_sub2_trimmed_bismark_bt2.deduplication_report.txt", + "bismark/deduplicated/logs/SRR389222_sub3_trimmed_bismark_bt2.deduplication_report.txt", + "bismark/methylation_calls", + "bismark/methylation_calls/bedGraph", + "bismark/methylation_calls/bedGraph/Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplicated.bedGraph.gz", + "bismark/methylation_calls/bedGraph/SRR389222_sub1_trimmed_bismark_bt2.deduplicated.bedGraph.gz", + "bismark/methylation_calls/bedGraph/SRR389222_sub2_trimmed_bismark_bt2.deduplicated.bedGraph.gz", + "bismark/methylation_calls/bedGraph/SRR389222_sub3_trimmed_bismark_bt2.deduplicated.bedGraph.gz", + "bismark/methylation_calls/mbias", + "bismark/methylation_calls/mbias/Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplicated.M-bias.txt", + "bismark/methylation_calls/mbias/SRR389222_sub1_trimmed_bismark_bt2.deduplicated.M-bias.txt", + "bismark/methylation_calls/mbias/SRR389222_sub2_trimmed_bismark_bt2.deduplicated.M-bias.txt", + "bismark/methylation_calls/mbias/SRR389222_sub3_trimmed_bismark_bt2.deduplicated.M-bias.txt", + "bismark/methylation_calls/methylation_calls", + "bismark/methylation_calls/methylation_calls/CHG_OB_Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CHG_OB_SRR389222_sub1_trimmed_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CHG_OB_SRR389222_sub2_trimmed_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CHG_OB_SRR389222_sub3_trimmed_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CHG_OT_Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CHG_OT_SRR389222_sub1_trimmed_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CHG_OT_SRR389222_sub2_trimmed_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CHG_OT_SRR389222_sub3_trimmed_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CHH_OB_Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CHH_OB_SRR389222_sub1_trimmed_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CHH_OB_SRR389222_sub2_trimmed_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CHH_OB_SRR389222_sub3_trimmed_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CHH_OT_Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CHH_OT_SRR389222_sub1_trimmed_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CHH_OT_SRR389222_sub2_trimmed_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CHH_OT_SRR389222_sub3_trimmed_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CpG_OB_Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CpG_OB_SRR389222_sub1_trimmed_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CpG_OB_SRR389222_sub2_trimmed_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CpG_OB_SRR389222_sub3_trimmed_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CpG_OT_Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CpG_OT_SRR389222_sub1_trimmed_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CpG_OT_SRR389222_sub2_trimmed_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_calls/CpG_OT_SRR389222_sub3_trimmed_bismark_bt2.deduplicated.txt.gz", + "bismark/methylation_calls/methylation_coverage", + "bismark/methylation_calls/methylation_coverage/Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplicated.bismark.cov.gz", + "bismark/methylation_calls/methylation_coverage/SRR389222_sub1_trimmed_bismark_bt2.deduplicated.bismark.cov.gz", + "bismark/methylation_calls/methylation_coverage/SRR389222_sub2_trimmed_bismark_bt2.deduplicated.bismark.cov.gz", + "bismark/methylation_calls/methylation_coverage/SRR389222_sub3_trimmed_bismark_bt2.deduplicated.bismark.cov.gz", + "bismark/methylation_calls/splitting_report", + "bismark/methylation_calls/splitting_report/Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplicated_splitting_report.txt", + "bismark/methylation_calls/splitting_report/SRR389222_sub1_trimmed_bismark_bt2.deduplicated_splitting_report.txt", + "bismark/methylation_calls/splitting_report/SRR389222_sub2_trimmed_bismark_bt2.deduplicated_splitting_report.txt", + "bismark/methylation_calls/splitting_report/SRR389222_sub3_trimmed_bismark_bt2.deduplicated_splitting_report.txt", + "bismark/reports", + "bismark/reports/Ecoli_10K_methylated_1_val_1_bismark_bt2_PE_report.html", + "bismark/reports/SRR389222_sub1_trimmed_bismark_bt2_SE_report.html", + "bismark/reports/SRR389222_sub2_trimmed_bismark_bt2_SE_report.html", + "bismark/reports/SRR389222_sub3_trimmed_bismark_bt2_SE_report.html", + "bismark/summary", + "bismark/summary/bismark_summary_report.html", + "bismark/summary/bismark_summary_report.txt", + "fastqc", + "fastqc/Ecoli_10K_methylated_1_fastqc.html", + "fastqc/Ecoli_10K_methylated_2_fastqc.html", + "fastqc/SRR389222_sub1_fastqc.html", + "fastqc/SRR389222_sub2_fastqc.html", + "fastqc/SRR389222_sub3_fastqc.html", + "fastqc/zips", + "fastqc/zips/Ecoli_10K_methylated_1_fastqc.zip", + "fastqc/zips/Ecoli_10K_methylated_2_fastqc.zip", + "fastqc/zips/SRR389222_sub1_fastqc.zip", + "fastqc/zips/SRR389222_sub2_fastqc.zip", + "fastqc/zips/SRR389222_sub3_fastqc.zip", + "multiqc", + "multiqc/bismark", + "multiqc/bismark/multiqc_data", + "multiqc/bismark/multiqc_data/bismark-methylation-dp.txt", + "multiqc/bismark/multiqc_data/bismark_alignment.txt", + "multiqc/bismark/multiqc_data/bismark_deduplication.txt", + "multiqc/bismark/multiqc_data/bismark_mbias_CHG_R1.txt", + "multiqc/bismark/multiqc_data/bismark_mbias_CHG_R2.txt", + "multiqc/bismark/multiqc_data/bismark_mbias_CHH_R1.txt", + "multiqc/bismark/multiqc_data/bismark_mbias_CHH_R2.txt", + "multiqc/bismark/multiqc_data/bismark_mbias_CpG_R1.txt", + "multiqc/bismark/multiqc_data/bismark_mbias_CpG_R2.txt", + "multiqc/bismark/multiqc_data/bismark_strand_alignment.txt", + "multiqc/bismark/multiqc_data/cutadapt_filtered_reads_plot.txt", + "multiqc/bismark/multiqc_data/cutadapt_trimmed_sequences_plot_3_Counts.txt", + "multiqc/bismark/multiqc_data/cutadapt_trimmed_sequences_plot_3_Obs_Exp.txt", + "multiqc/bismark/multiqc_data/fastqc-status-check-heatmap.txt", + "multiqc/bismark/multiqc_data/fastqc_adapter_content_plot.txt", + "multiqc/bismark/multiqc_data/fastqc_overrepresented_sequences_plot.txt", + "multiqc/bismark/multiqc_data/fastqc_per_base_n_content_plot.txt", + "multiqc/bismark/multiqc_data/fastqc_per_base_sequence_quality_plot.txt", + "multiqc/bismark/multiqc_data/fastqc_per_sequence_gc_content_plot_Counts.txt", + "multiqc/bismark/multiqc_data/fastqc_per_sequence_gc_content_plot_Percentages.txt", + "multiqc/bismark/multiqc_data/fastqc_per_sequence_quality_scores_plot.txt", + "multiqc/bismark/multiqc_data/fastqc_sequence_counts_plot.txt", + "multiqc/bismark/multiqc_data/fastqc_sequence_duplication_levels_plot.txt", + "multiqc/bismark/multiqc_data/fastqc_top_overrepresented_sequences_table.txt", + "multiqc/bismark/multiqc_data/multiqc.log", + "multiqc/bismark/multiqc_data/multiqc_bismark_alignment.txt", + "multiqc/bismark/multiqc_data/multiqc_bismark_dedup.txt", + "multiqc/bismark/multiqc_data/multiqc_bismark_methextract.txt", + "multiqc/bismark/multiqc_data/multiqc_citations.txt", + "multiqc/bismark/multiqc_data/multiqc_cutadapt.txt", + "multiqc/bismark/multiqc_data/multiqc_data.json", + "multiqc/bismark/multiqc_data/multiqc_fastqc.txt", + "multiqc/bismark/multiqc_data/multiqc_general_stats.txt", + "multiqc/bismark/multiqc_data/multiqc_qualimap_bamqc_genome_results.txt", + "multiqc/bismark/multiqc_data/multiqc_software_versions.txt", + "multiqc/bismark/multiqc_data/multiqc_sources.txt", + "multiqc/bismark/multiqc_data/qualimap_coverage_histogram.txt", + "multiqc/bismark/multiqc_data/qualimap_gc_content.txt", + "multiqc/bismark/multiqc_data/qualimap_genome_fraction.txt", + "multiqc/bismark/multiqc_data/qualimap_insert_size.txt", + "multiqc/bismark/multiqc_plots", + "multiqc/bismark/multiqc_plots/pdf", + "multiqc/bismark/multiqc_plots/pdf/bismark-methylation-dp.pdf", + "multiqc/bismark/multiqc_plots/pdf/bismark_alignment-cnt.pdf", + "multiqc/bismark/multiqc_plots/pdf/bismark_alignment-pct.pdf", + "multiqc/bismark/multiqc_plots/pdf/bismark_deduplication-cnt.pdf", + "multiqc/bismark/multiqc_plots/pdf/bismark_deduplication-pct.pdf", + "multiqc/bismark/multiqc_plots/pdf/bismark_mbias_CHG_R1.pdf", + "multiqc/bismark/multiqc_plots/pdf/bismark_mbias_CHG_R2.pdf", + "multiqc/bismark/multiqc_plots/pdf/bismark_mbias_CHH_R1.pdf", + "multiqc/bismark/multiqc_plots/pdf/bismark_mbias_CHH_R2.pdf", + "multiqc/bismark/multiqc_plots/pdf/bismark_mbias_CpG_R1.pdf", + "multiqc/bismark/multiqc_plots/pdf/bismark_mbias_CpG_R2.pdf", + "multiqc/bismark/multiqc_plots/pdf/bismark_strand_alignment-cnt.pdf", + "multiqc/bismark/multiqc_plots/pdf/bismark_strand_alignment-pct.pdf", + "multiqc/bismark/multiqc_plots/pdf/cutadapt_filtered_reads_plot-cnt.pdf", + "multiqc/bismark/multiqc_plots/pdf/cutadapt_filtered_reads_plot-pct.pdf", + "multiqc/bismark/multiqc_plots/pdf/cutadapt_trimmed_sequences_plot_3_Counts.pdf", + "multiqc/bismark/multiqc_plots/pdf/cutadapt_trimmed_sequences_plot_3_Obs_Exp.pdf", + "multiqc/bismark/multiqc_plots/pdf/fastqc-status-check-heatmap.pdf", + "multiqc/bismark/multiqc_plots/pdf/fastqc_adapter_content_plot.pdf", + "multiqc/bismark/multiqc_plots/pdf/fastqc_overrepresented_sequences_plot.pdf", + "multiqc/bismark/multiqc_plots/pdf/fastqc_per_base_n_content_plot.pdf", + "multiqc/bismark/multiqc_plots/pdf/fastqc_per_base_sequence_quality_plot.pdf", + "multiqc/bismark/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Counts.pdf", + "multiqc/bismark/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Percentages.pdf", + "multiqc/bismark/multiqc_plots/pdf/fastqc_per_sequence_quality_scores_plot.pdf", + "multiqc/bismark/multiqc_plots/pdf/fastqc_sequence_counts_plot-cnt.pdf", + "multiqc/bismark/multiqc_plots/pdf/fastqc_sequence_counts_plot-pct.pdf", + "multiqc/bismark/multiqc_plots/pdf/fastqc_sequence_duplication_levels_plot.pdf", + "multiqc/bismark/multiqc_plots/pdf/fastqc_top_overrepresented_sequences_table.pdf", + "multiqc/bismark/multiqc_plots/pdf/general_stats_table.pdf", + "multiqc/bismark/multiqc_plots/pdf/qualimap_coverage_histogram.pdf", + "multiqc/bismark/multiqc_plots/pdf/qualimap_gc_content.pdf", + "multiqc/bismark/multiqc_plots/pdf/qualimap_genome_fraction.pdf", + "multiqc/bismark/multiqc_plots/pdf/qualimap_insert_size.pdf", + "multiqc/bismark/multiqc_plots/png", + "multiqc/bismark/multiqc_plots/png/bismark-methylation-dp.png", + "multiqc/bismark/multiqc_plots/png/bismark_alignment-cnt.png", + "multiqc/bismark/multiqc_plots/png/bismark_alignment-pct.png", + "multiqc/bismark/multiqc_plots/png/bismark_deduplication-cnt.png", + "multiqc/bismark/multiqc_plots/png/bismark_deduplication-pct.png", + "multiqc/bismark/multiqc_plots/png/bismark_mbias_CHG_R1.png", + "multiqc/bismark/multiqc_plots/png/bismark_mbias_CHG_R2.png", + "multiqc/bismark/multiqc_plots/png/bismark_mbias_CHH_R1.png", + "multiqc/bismark/multiqc_plots/png/bismark_mbias_CHH_R2.png", + "multiqc/bismark/multiqc_plots/png/bismark_mbias_CpG_R1.png", + "multiqc/bismark/multiqc_plots/png/bismark_mbias_CpG_R2.png", + "multiqc/bismark/multiqc_plots/png/bismark_strand_alignment-cnt.png", + "multiqc/bismark/multiqc_plots/png/bismark_strand_alignment-pct.png", + "multiqc/bismark/multiqc_plots/png/cutadapt_filtered_reads_plot-cnt.png", + "multiqc/bismark/multiqc_plots/png/cutadapt_filtered_reads_plot-pct.png", + "multiqc/bismark/multiqc_plots/png/cutadapt_trimmed_sequences_plot_3_Counts.png", + "multiqc/bismark/multiqc_plots/png/cutadapt_trimmed_sequences_plot_3_Obs_Exp.png", + "multiqc/bismark/multiqc_plots/png/fastqc-status-check-heatmap.png", + "multiqc/bismark/multiqc_plots/png/fastqc_adapter_content_plot.png", + "multiqc/bismark/multiqc_plots/png/fastqc_overrepresented_sequences_plot.png", + "multiqc/bismark/multiqc_plots/png/fastqc_per_base_n_content_plot.png", + "multiqc/bismark/multiqc_plots/png/fastqc_per_base_sequence_quality_plot.png", + "multiqc/bismark/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Counts.png", + "multiqc/bismark/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Percentages.png", + "multiqc/bismark/multiqc_plots/png/fastqc_per_sequence_quality_scores_plot.png", + "multiqc/bismark/multiqc_plots/png/fastqc_sequence_counts_plot-cnt.png", + "multiqc/bismark/multiqc_plots/png/fastqc_sequence_counts_plot-pct.png", + "multiqc/bismark/multiqc_plots/png/fastqc_sequence_duplication_levels_plot.png", + "multiqc/bismark/multiqc_plots/png/fastqc_top_overrepresented_sequences_table.png", + "multiqc/bismark/multiqc_plots/png/general_stats_table.png", + "multiqc/bismark/multiqc_plots/png/qualimap_coverage_histogram.png", + "multiqc/bismark/multiqc_plots/png/qualimap_gc_content.png", + "multiqc/bismark/multiqc_plots/png/qualimap_genome_fraction.png", + "multiqc/bismark/multiqc_plots/png/qualimap_insert_size.png", + "multiqc/bismark/multiqc_plots/svg", + "multiqc/bismark/multiqc_plots/svg/bismark-methylation-dp.svg", + "multiqc/bismark/multiqc_plots/svg/bismark_alignment-cnt.svg", + "multiqc/bismark/multiqc_plots/svg/bismark_alignment-pct.svg", + "multiqc/bismark/multiqc_plots/svg/bismark_deduplication-cnt.svg", + "multiqc/bismark/multiqc_plots/svg/bismark_deduplication-pct.svg", + "multiqc/bismark/multiqc_plots/svg/bismark_mbias_CHG_R1.svg", + "multiqc/bismark/multiqc_plots/svg/bismark_mbias_CHG_R2.svg", + "multiqc/bismark/multiqc_plots/svg/bismark_mbias_CHH_R1.svg", + "multiqc/bismark/multiqc_plots/svg/bismark_mbias_CHH_R2.svg", + "multiqc/bismark/multiqc_plots/svg/bismark_mbias_CpG_R1.svg", + "multiqc/bismark/multiqc_plots/svg/bismark_mbias_CpG_R2.svg", + "multiqc/bismark/multiqc_plots/svg/bismark_strand_alignment-cnt.svg", + "multiqc/bismark/multiqc_plots/svg/bismark_strand_alignment-pct.svg", + "multiqc/bismark/multiqc_plots/svg/cutadapt_filtered_reads_plot-cnt.svg", + "multiqc/bismark/multiqc_plots/svg/cutadapt_filtered_reads_plot-pct.svg", + "multiqc/bismark/multiqc_plots/svg/cutadapt_trimmed_sequences_plot_3_Counts.svg", + "multiqc/bismark/multiqc_plots/svg/cutadapt_trimmed_sequences_plot_3_Obs_Exp.svg", + "multiqc/bismark/multiqc_plots/svg/fastqc-status-check-heatmap.svg", + "multiqc/bismark/multiqc_plots/svg/fastqc_adapter_content_plot.svg", + "multiqc/bismark/multiqc_plots/svg/fastqc_overrepresented_sequences_plot.svg", + "multiqc/bismark/multiqc_plots/svg/fastqc_per_base_n_content_plot.svg", + "multiqc/bismark/multiqc_plots/svg/fastqc_per_base_sequence_quality_plot.svg", + "multiqc/bismark/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Counts.svg", + "multiqc/bismark/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Percentages.svg", + "multiqc/bismark/multiqc_plots/svg/fastqc_per_sequence_quality_scores_plot.svg", + "multiqc/bismark/multiqc_plots/svg/fastqc_sequence_counts_plot-cnt.svg", + "multiqc/bismark/multiqc_plots/svg/fastqc_sequence_counts_plot-pct.svg", + "multiqc/bismark/multiqc_plots/svg/fastqc_sequence_duplication_levels_plot.svg", + "multiqc/bismark/multiqc_plots/svg/fastqc_top_overrepresented_sequences_table.svg", + "multiqc/bismark/multiqc_plots/svg/general_stats_table.svg", + "multiqc/bismark/multiqc_plots/svg/qualimap_coverage_histogram.svg", + "multiqc/bismark/multiqc_plots/svg/qualimap_gc_content.svg", + "multiqc/bismark/multiqc_plots/svg/qualimap_genome_fraction.svg", + "multiqc/bismark/multiqc_plots/svg/qualimap_insert_size.svg", + "multiqc/bismark/multiqc_report.html", + "pipeline_info", + "pipeline_info/nf_core_pipeline_software_mqc_versions.yml", + "qualimap", + "qualimap/Ecoli_10K_methylated", + "qualimap/Ecoli_10K_methylated/css", + "qualimap/Ecoli_10K_methylated/css/agogo.css", + "qualimap/Ecoli_10K_methylated/css/ajax-loader.gif", + "qualimap/Ecoli_10K_methylated/css/basic.css", + "qualimap/Ecoli_10K_methylated/css/bgfooter.png", + "qualimap/Ecoli_10K_methylated/css/bgtop.png", + "qualimap/Ecoli_10K_methylated/css/comment-bright.png", + "qualimap/Ecoli_10K_methylated/css/comment-close.png", + "qualimap/Ecoli_10K_methylated/css/comment.png", + "qualimap/Ecoli_10K_methylated/css/doctools.js", + "qualimap/Ecoli_10K_methylated/css/down-pressed.png", + "qualimap/Ecoli_10K_methylated/css/down.png", + "qualimap/Ecoli_10K_methylated/css/file.png", + "qualimap/Ecoli_10K_methylated/css/jquery.js", + "qualimap/Ecoli_10K_methylated/css/minus.png", + "qualimap/Ecoli_10K_methylated/css/plus.png", + "qualimap/Ecoli_10K_methylated/css/pygments.css", + "qualimap/Ecoli_10K_methylated/css/qualimap_logo_small.png", + "qualimap/Ecoli_10K_methylated/css/report.css", + "qualimap/Ecoli_10K_methylated/css/searchtools.js", + "qualimap/Ecoli_10K_methylated/css/underscore.js", + "qualimap/Ecoli_10K_methylated/css/up-pressed.png", + "qualimap/Ecoli_10K_methylated/css/up.png", + "qualimap/Ecoli_10K_methylated/css/websupport.js", + "qualimap/Ecoli_10K_methylated/genome_results.txt", + "qualimap/Ecoli_10K_methylated/images_qualimapReport", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_coverage_0to50_histogram.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_coverage_across_reference.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_coverage_histogram.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_coverage_quotes.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_gc_content_per_window.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_homopolymer_indels.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_insert_size_across_reference.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_insert_size_histogram.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_mapping_quality_across_reference.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_mapping_quality_histogram.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_reads_content_per_read_position.png", + "qualimap/Ecoli_10K_methylated/images_qualimapReport/genome_uniq_read_starts_histogram.png", + "qualimap/Ecoli_10K_methylated/qualimapReport.html", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/coverage_across_reference.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/coverage_histogram.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/duplication_rate_histogram.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/genome_fraction_coverage.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/homopolymer_indels.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/insert_size_across_reference.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/insert_size_histogram.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/mapped_reads_gc-content_distribution.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/mapped_reads_nucleotide_content.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/mapping_quality_across_reference.txt", + "qualimap/Ecoli_10K_methylated/raw_data_qualimapReport/mapping_quality_histogram.txt", + "qualimap/SRR389222_sub1", + "qualimap/SRR389222_sub1/css", + "qualimap/SRR389222_sub1/css/agogo.css", + "qualimap/SRR389222_sub1/css/ajax-loader.gif", + "qualimap/SRR389222_sub1/css/basic.css", + "qualimap/SRR389222_sub1/css/bgfooter.png", + "qualimap/SRR389222_sub1/css/bgtop.png", + "qualimap/SRR389222_sub1/css/comment-bright.png", + "qualimap/SRR389222_sub1/css/comment-close.png", + "qualimap/SRR389222_sub1/css/comment.png", + "qualimap/SRR389222_sub1/css/doctools.js", + "qualimap/SRR389222_sub1/css/down-pressed.png", + "qualimap/SRR389222_sub1/css/down.png", + "qualimap/SRR389222_sub1/css/file.png", + "qualimap/SRR389222_sub1/css/jquery.js", + "qualimap/SRR389222_sub1/css/minus.png", + "qualimap/SRR389222_sub1/css/plus.png", + "qualimap/SRR389222_sub1/css/pygments.css", + "qualimap/SRR389222_sub1/css/qualimap_logo_small.png", + "qualimap/SRR389222_sub1/css/report.css", + "qualimap/SRR389222_sub1/css/searchtools.js", + "qualimap/SRR389222_sub1/css/underscore.js", + "qualimap/SRR389222_sub1/css/up-pressed.png", + "qualimap/SRR389222_sub1/css/up.png", + "qualimap/SRR389222_sub1/css/websupport.js", + "qualimap/SRR389222_sub1/genome_results.txt", + "qualimap/SRR389222_sub1/images_qualimapReport", + "qualimap/SRR389222_sub1/images_qualimapReport/genome_coverage_0to50_histogram.png", + "qualimap/SRR389222_sub1/images_qualimapReport/genome_coverage_across_reference.png", + "qualimap/SRR389222_sub1/images_qualimapReport/genome_coverage_histogram.png", + "qualimap/SRR389222_sub1/images_qualimapReport/genome_coverage_quotes.png", + "qualimap/SRR389222_sub1/images_qualimapReport/genome_gc_content_per_window.png", + "qualimap/SRR389222_sub1/images_qualimapReport/genome_mapping_quality_across_reference.png", + "qualimap/SRR389222_sub1/images_qualimapReport/genome_mapping_quality_histogram.png", + "qualimap/SRR389222_sub1/images_qualimapReport/genome_reads_content_per_read_position.png", + "qualimap/SRR389222_sub1/images_qualimapReport/genome_uniq_read_starts_histogram.png", + "qualimap/SRR389222_sub1/qualimapReport.html", + "qualimap/SRR389222_sub1/raw_data_qualimapReport", + "qualimap/SRR389222_sub1/raw_data_qualimapReport/coverage_across_reference.txt", + "qualimap/SRR389222_sub1/raw_data_qualimapReport/coverage_histogram.txt", + "qualimap/SRR389222_sub1/raw_data_qualimapReport/duplication_rate_histogram.txt", + "qualimap/SRR389222_sub1/raw_data_qualimapReport/genome_fraction_coverage.txt", + "qualimap/SRR389222_sub1/raw_data_qualimapReport/mapped_reads_gc-content_distribution.txt", + "qualimap/SRR389222_sub1/raw_data_qualimapReport/mapped_reads_nucleotide_content.txt", + "qualimap/SRR389222_sub1/raw_data_qualimapReport/mapping_quality_across_reference.txt", + "qualimap/SRR389222_sub1/raw_data_qualimapReport/mapping_quality_histogram.txt", + "qualimap/SRR389222_sub2", + "qualimap/SRR389222_sub2/css", + "qualimap/SRR389222_sub2/css/agogo.css", + "qualimap/SRR389222_sub2/css/ajax-loader.gif", + "qualimap/SRR389222_sub2/css/basic.css", + "qualimap/SRR389222_sub2/css/bgfooter.png", + "qualimap/SRR389222_sub2/css/bgtop.png", + "qualimap/SRR389222_sub2/css/comment-bright.png", + "qualimap/SRR389222_sub2/css/comment-close.png", + "qualimap/SRR389222_sub2/css/comment.png", + "qualimap/SRR389222_sub2/css/doctools.js", + "qualimap/SRR389222_sub2/css/down-pressed.png", + "qualimap/SRR389222_sub2/css/down.png", + "qualimap/SRR389222_sub2/css/file.png", + "qualimap/SRR389222_sub2/css/jquery.js", + "qualimap/SRR389222_sub2/css/minus.png", + "qualimap/SRR389222_sub2/css/plus.png", + "qualimap/SRR389222_sub2/css/pygments.css", + "qualimap/SRR389222_sub2/css/qualimap_logo_small.png", + "qualimap/SRR389222_sub2/css/report.css", + "qualimap/SRR389222_sub2/css/searchtools.js", + "qualimap/SRR389222_sub2/css/underscore.js", + "qualimap/SRR389222_sub2/css/up-pressed.png", + "qualimap/SRR389222_sub2/css/up.png", + "qualimap/SRR389222_sub2/css/websupport.js", + "qualimap/SRR389222_sub2/genome_results.txt", + "qualimap/SRR389222_sub2/images_qualimapReport", + "qualimap/SRR389222_sub2/images_qualimapReport/genome_coverage_0to50_histogram.png", + "qualimap/SRR389222_sub2/images_qualimapReport/genome_coverage_across_reference.png", + "qualimap/SRR389222_sub2/images_qualimapReport/genome_coverage_histogram.png", + "qualimap/SRR389222_sub2/images_qualimapReport/genome_coverage_quotes.png", + "qualimap/SRR389222_sub2/images_qualimapReport/genome_gc_content_per_window.png", + "qualimap/SRR389222_sub2/images_qualimapReport/genome_mapping_quality_across_reference.png", + "qualimap/SRR389222_sub2/images_qualimapReport/genome_mapping_quality_histogram.png", + "qualimap/SRR389222_sub2/images_qualimapReport/genome_reads_content_per_read_position.png", + "qualimap/SRR389222_sub2/images_qualimapReport/genome_uniq_read_starts_histogram.png", + "qualimap/SRR389222_sub2/qualimapReport.html", + "qualimap/SRR389222_sub2/raw_data_qualimapReport", + "qualimap/SRR389222_sub2/raw_data_qualimapReport/coverage_across_reference.txt", + "qualimap/SRR389222_sub2/raw_data_qualimapReport/coverage_histogram.txt", + "qualimap/SRR389222_sub2/raw_data_qualimapReport/duplication_rate_histogram.txt", + "qualimap/SRR389222_sub2/raw_data_qualimapReport/genome_fraction_coverage.txt", + "qualimap/SRR389222_sub2/raw_data_qualimapReport/mapped_reads_gc-content_distribution.txt", + "qualimap/SRR389222_sub2/raw_data_qualimapReport/mapped_reads_nucleotide_content.txt", + "qualimap/SRR389222_sub2/raw_data_qualimapReport/mapping_quality_across_reference.txt", + "qualimap/SRR389222_sub2/raw_data_qualimapReport/mapping_quality_histogram.txt", + "qualimap/SRR389222_sub3", + "qualimap/SRR389222_sub3/css", + "qualimap/SRR389222_sub3/css/agogo.css", + "qualimap/SRR389222_sub3/css/ajax-loader.gif", + "qualimap/SRR389222_sub3/css/basic.css", + "qualimap/SRR389222_sub3/css/bgfooter.png", + "qualimap/SRR389222_sub3/css/bgtop.png", + "qualimap/SRR389222_sub3/css/comment-bright.png", + "qualimap/SRR389222_sub3/css/comment-close.png", + "qualimap/SRR389222_sub3/css/comment.png", + "qualimap/SRR389222_sub3/css/doctools.js", + "qualimap/SRR389222_sub3/css/down-pressed.png", + "qualimap/SRR389222_sub3/css/down.png", + "qualimap/SRR389222_sub3/css/file.png", + "qualimap/SRR389222_sub3/css/jquery.js", + "qualimap/SRR389222_sub3/css/minus.png", + "qualimap/SRR389222_sub3/css/plus.png", + "qualimap/SRR389222_sub3/css/pygments.css", + "qualimap/SRR389222_sub3/css/qualimap_logo_small.png", + "qualimap/SRR389222_sub3/css/report.css", + "qualimap/SRR389222_sub3/css/searchtools.js", + "qualimap/SRR389222_sub3/css/underscore.js", + "qualimap/SRR389222_sub3/css/up-pressed.png", + "qualimap/SRR389222_sub3/css/up.png", + "qualimap/SRR389222_sub3/css/websupport.js", + "qualimap/SRR389222_sub3/genome_results.txt", + "qualimap/SRR389222_sub3/images_qualimapReport", + "qualimap/SRR389222_sub3/images_qualimapReport/genome_coverage_0to50_histogram.png", + "qualimap/SRR389222_sub3/images_qualimapReport/genome_coverage_across_reference.png", + "qualimap/SRR389222_sub3/images_qualimapReport/genome_coverage_histogram.png", + "qualimap/SRR389222_sub3/images_qualimapReport/genome_coverage_quotes.png", + "qualimap/SRR389222_sub3/images_qualimapReport/genome_gc_content_per_window.png", + "qualimap/SRR389222_sub3/images_qualimapReport/genome_mapping_quality_across_reference.png", + "qualimap/SRR389222_sub3/images_qualimapReport/genome_mapping_quality_histogram.png", + "qualimap/SRR389222_sub3/images_qualimapReport/genome_reads_content_per_read_position.png", + "qualimap/SRR389222_sub3/images_qualimapReport/genome_uniq_read_starts_histogram.png", + "qualimap/SRR389222_sub3/qualimapReport.html", + "qualimap/SRR389222_sub3/raw_data_qualimapReport", + "qualimap/SRR389222_sub3/raw_data_qualimapReport/coverage_across_reference.txt", + "qualimap/SRR389222_sub3/raw_data_qualimapReport/coverage_histogram.txt", + "qualimap/SRR389222_sub3/raw_data_qualimapReport/duplication_rate_histogram.txt", + "qualimap/SRR389222_sub3/raw_data_qualimapReport/genome_fraction_coverage.txt", + "qualimap/SRR389222_sub3/raw_data_qualimapReport/mapped_reads_gc-content_distribution.txt", + "qualimap/SRR389222_sub3/raw_data_qualimapReport/mapped_reads_nucleotide_content.txt", + "qualimap/SRR389222_sub3/raw_data_qualimapReport/mapping_quality_across_reference.txt", + "qualimap/SRR389222_sub3/raw_data_qualimapReport/mapping_quality_histogram.txt", + "trimgalore", + "trimgalore/fastqc", + "trimgalore/fastqc/Ecoli_10K_methylated_1_val_1_fastqc.html", + "trimgalore/fastqc/Ecoli_10K_methylated_2_val_2_fastqc.html", + "trimgalore/fastqc/SRR389222_sub1_trimmed_fastqc.html", + "trimgalore/fastqc/SRR389222_sub2_trimmed_fastqc.html", + "trimgalore/fastqc/SRR389222_sub3_trimmed_fastqc.html", + "trimgalore/fastqc/zips", + "trimgalore/fastqc/zips/Ecoli_10K_methylated_1_val_1_fastqc.zip", + "trimgalore/fastqc/zips/Ecoli_10K_methylated_2_val_2_fastqc.zip", + "trimgalore/fastqc/zips/SRR389222_sub1_trimmed_fastqc.zip", + "trimgalore/fastqc/zips/SRR389222_sub2_trimmed_fastqc.zip", + "trimgalore/fastqc/zips/SRR389222_sub3_trimmed_fastqc.zip", + "trimgalore/logs", + "trimgalore/logs/Ecoli_10K_methylated_1.fastq.gz_trimming_report.txt", + "trimgalore/logs/Ecoli_10K_methylated_2.fastq.gz_trimming_report.txt", + "trimgalore/logs/SRR389222_sub1.fastq.gz_trimming_report.txt", + "trimgalore/logs/SRR389222_sub2.fastq.gz_trimming_report.txt", + "trimgalore/logs/SRR389222_sub3.fastq.gz_trimming_report.txt" + ], + [ + "Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplicated.bedGraph.gz:md5,58c9ba98d0638c26a30233b006a81172", + "SRR389222_sub1_trimmed_bismark_bt2.deduplicated.bedGraph.gz:md5,d31df76c1c9128299367ebfe740357b9", + "SRR389222_sub2_trimmed_bismark_bt2.deduplicated.bedGraph.gz:md5,010f32001bbc7805f8e041f3ef0d9ea9", + "SRR389222_sub3_trimmed_bismark_bt2.deduplicated.bedGraph.gz:md5,d42e09af121ae14f6e0de5779e317b0b", + "Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplicated.M-bias.txt:md5,29f3b882a51b63ce77d3d9c69b0e5f85", + "SRR389222_sub1_trimmed_bismark_bt2.deduplicated.M-bias.txt:md5,ed28b3cce432eecfae73bc4a071ec4ee", + "SRR389222_sub2_trimmed_bismark_bt2.deduplicated.M-bias.txt:md5,b06ce0084e54193ff8c9b9dd0ec9757b", + "SRR389222_sub3_trimmed_bismark_bt2.deduplicated.M-bias.txt:md5,b865b7fb6e1225feeb6aef3372ef0b1d", + "CHG_OB_Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplicated.txt.gz:md5,b58ae93fe7981837fd34903112196656", + "CHG_OB_SRR389222_sub1_trimmed_bismark_bt2.deduplicated.txt.gz:md5,5c177e6f00dfc6e2335a55c6b70efa0c", + "CHG_OB_SRR389222_sub2_trimmed_bismark_bt2.deduplicated.txt.gz:md5,583bf95e8dbd3d684bef595e31453bd1", + "CHG_OB_SRR389222_sub3_trimmed_bismark_bt2.deduplicated.txt.gz:md5,5cd486ff48be8f8fa0d4e35710be2071", + "CHG_OT_Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplicated.txt.gz:md5,b508e40e494dfd9fc2c2017286cd3fe9", + "CHG_OT_SRR389222_sub1_trimmed_bismark_bt2.deduplicated.txt.gz:md5,483aefddd7bf8426850109f077fa966b", + "CHG_OT_SRR389222_sub2_trimmed_bismark_bt2.deduplicated.txt.gz:md5,11f966904de0a5e5c38f2091e33ac8f3", + "CHG_OT_SRR389222_sub3_trimmed_bismark_bt2.deduplicated.txt.gz:md5,3fdd17711f819c844f39d52d4951b9cc", + "CHH_OB_Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplicated.txt.gz:md5,ad6f9f5def9bb01a7c516f7da1b22b91", + "CHH_OB_SRR389222_sub1_trimmed_bismark_bt2.deduplicated.txt.gz:md5,9469ac28e4369032b855ce1a794a56a4", + "CHH_OB_SRR389222_sub2_trimmed_bismark_bt2.deduplicated.txt.gz:md5,3c48fa14cc07ca041a35efd978ef877a", + "CHH_OB_SRR389222_sub3_trimmed_bismark_bt2.deduplicated.txt.gz:md5,68b5405d8de91c7046ab46fc5c42ee30", + "CHH_OT_Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplicated.txt.gz:md5,112a5d2beba2f8ebda273ca3bec98d88", + "CHH_OT_SRR389222_sub1_trimmed_bismark_bt2.deduplicated.txt.gz:md5,aa6ed81df517be3a61e787dea65282a9", + "CHH_OT_SRR389222_sub2_trimmed_bismark_bt2.deduplicated.txt.gz:md5,3ecf0ca20803514bc823e449d392f274", + "CHH_OT_SRR389222_sub3_trimmed_bismark_bt2.deduplicated.txt.gz:md5,7ed9df0d59ee786d06bf291efcdd3a48", + "CpG_OB_Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplicated.txt.gz:md5,bbe0a5f137b8768036aced610d17c666", + "CpG_OB_SRR389222_sub1_trimmed_bismark_bt2.deduplicated.txt.gz:md5,f0404fc1fc18c7ff58e8766b405239ed", + "CpG_OB_SRR389222_sub2_trimmed_bismark_bt2.deduplicated.txt.gz:md5,2f0dd539df6b5943496158ccb62edc7b", + "CpG_OB_SRR389222_sub3_trimmed_bismark_bt2.deduplicated.txt.gz:md5,0bd78a1708fb8126af553c94ab8c8371", + "CpG_OT_Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplicated.txt.gz:md5,8bb4cb59815cc9e260dcfa332fcb5ae9", + "CpG_OT_SRR389222_sub1_trimmed_bismark_bt2.deduplicated.txt.gz:md5,d031ae437256c87d12ed9d9049c30c9a", + "CpG_OT_SRR389222_sub2_trimmed_bismark_bt2.deduplicated.txt.gz:md5,5a6e4dfe3e90164ecf8ef6c7917ed9f2", + "CpG_OT_SRR389222_sub3_trimmed_bismark_bt2.deduplicated.txt.gz:md5,984aea9c77f8171f0e0a86d5289a180b", + "Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplicated.bismark.cov.gz:md5,8e6ba6fe66416d73e7f94b4da9ca77b1", + "SRR389222_sub1_trimmed_bismark_bt2.deduplicated.bismark.cov.gz:md5,5377d9fff4f1bf5b98dc2310fbeb6ec9", + "SRR389222_sub2_trimmed_bismark_bt2.deduplicated.bismark.cov.gz:md5,4713bda7b4f2bb16ce23853aea763cbd", + "SRR389222_sub3_trimmed_bismark_bt2.deduplicated.bismark.cov.gz:md5,f9a07c3e11e0caad6df3cd2e4d94d8ac", + "Ecoli_10K_methylated_1_val_1_bismark_bt2_pe.deduplicated_splitting_report.txt:md5,f41a6752f220b1cf567ac04e71fb730a", + "SRR389222_sub1_trimmed_bismark_bt2.deduplicated_splitting_report.txt:md5,94f18ee855566ef9842b4909e3d3dd88", + "SRR389222_sub2_trimmed_bismark_bt2.deduplicated_splitting_report.txt:md5,7c3526e022e97e49677f7428badef420", + "SRR389222_sub3_trimmed_bismark_bt2.deduplicated_splitting_report.txt:md5,e8d2bf21731b6ed517c56385061b1dee", + "bismark-methylation-dp.txt:md5,dcbe642c42e31d8e480a2e46b97bbd45", + "bismark_alignment.txt:md5,544a74ea0f32005b0c886af79a6fad5b", + "bismark_deduplication.txt:md5,db387240d46c09b0b952ed8b54855e76", + "bismark_mbias_CHG_R1.txt:md5,1a2a02f5f48e312a7cfa91ec253c1f49", + "bismark_mbias_CHG_R2.txt:md5,1f6523b48bda086d29f70265187e7475", + "bismark_mbias_CHH_R1.txt:md5,bcd25ac0c71b5ec120e948bc165f54d4", + "bismark_mbias_CHH_R2.txt:md5,5e32a8b39118c3592b088a0b69ae1f21", + "bismark_mbias_CpG_R1.txt:md5,0da9724e4a303148c39b6f4c18b8876b", + "bismark_mbias_CpG_R2.txt:md5,46cca816038163d0f629fed7ada212b8", + "bismark_strand_alignment.txt:md5,a8738f981bab911b95ffe9d3434f2b08", + "cutadapt_filtered_reads_plot.txt:md5,ff1b6d4011a5be5410b9404f7ff56c56", + "cutadapt_trimmed_sequences_plot_3_Counts.txt:md5,57d07c19b0c30dc88df96c30bedcdc33", + "cutadapt_trimmed_sequences_plot_3_Obs_Exp.txt:md5,1e5ca4193f8290c5c812334d03615b41", + "fastqc-status-check-heatmap.txt:md5,218c2a7efbb9c02f652fa78fc739c866", + "fastqc_adapter_content_plot.txt:md5,48d8bd5ece984a74972ce0a0e814dd07", + "fastqc_overrepresented_sequences_plot.txt:md5,9c4b7064950b5b2c486d556984f21e9e", + "fastqc_per_base_n_content_plot.txt:md5,019d5cd4f61a31f4e7016140ca8ee36e", + "fastqc_per_base_sequence_quality_plot.txt:md5,e4c7d522114eab9bc9101e7ee9d83c8f", + "fastqc_per_sequence_gc_content_plot_Counts.txt:md5,302659bee8a02b6a38b24fe25f8eaa87", + "fastqc_per_sequence_gc_content_plot_Percentages.txt:md5,c75b396eb5dda8682fb1652a9b2e92a3", + "fastqc_per_sequence_quality_scores_plot.txt:md5,548c593f4a8be2d8627fc3bd1c280611", + "fastqc_sequence_counts_plot.txt:md5,58eeeb06bc9dcc1764c7daf0847d6bbf", + "fastqc_sequence_duplication_levels_plot.txt:md5,9e5712db9aa39b5754ea1e0c49cfff15", + "fastqc_top_overrepresented_sequences_table.txt:md5,6dfc5334a09c05392ea17369aa742d01", + "multiqc_bismark_alignment.txt:md5,40ab86041f508d3f1a63bde20cab5440", + "multiqc_bismark_dedup.txt:md5,d09a5de4d81a3207efb6a8937d060e46", + "multiqc_bismark_methextract.txt:md5,825f57cdf45203406e583beb495afccc", + "multiqc_citations.txt:md5,b9d42869faad581bd963d3d3bb490026", + "multiqc_cutadapt.txt:md5,f7a61369244b1e040d264e6913b8a839", + "qualimap_coverage_histogram.txt:md5,7cd194077fe839edf034b44cc73dd024", + "qualimap_gc_content.txt:md5,4f6ec70d9fb71ffe5f2f99f44fe5ef0c", + "qualimap_genome_fraction.txt:md5,3e528946a376ae752b57adaaa73f5cdf", + "qualimap_insert_size.txt:md5,8327f805cbaf1c61ca3128b6c16c7dfd", + "genome_results.txt:md5,e2a57140a56e0e4a1905c70084ccbb41", + "genome_results.txt:md5,69a3dc8568127c50b0decb29757230ee", + "genome_results.txt:md5,13d933d61649b837de72a418d5126c1b", + "genome_results.txt:md5,235830239cfc43d8e84c049b1e9b180a" + ], + [ + [ + "Ecoli_10K_methylated.deduplicated.sorted.bam", + "a54ab7c96f9523a4ccd25fd69f6905f8" + ], + [ + "SRR389222_sub1.deduplicated.sorted.bam", + "3f11ef5fbbda3797fd6217728e4f00d3" + ], + [ + "SRR389222_sub2.deduplicated.sorted.bam", + "b01f29fc1d8d46922a69df09c636b4c4" + ], + [ + "SRR389222_sub3.deduplicated.sorted.bam", + "347195c04c9ffd2a2b10967a6682fc69" + ] + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-21T18:05:06.16706255" + } +} \ No newline at end of file diff --git a/tests/lib/UTILS.groovy b/tests/lib/UTILS.groovy deleted file mode 100644 index 311403cc..00000000 --- a/tests/lib/UTILS.groovy +++ /dev/null @@ -1,11 +0,0 @@ -// Function to remove Nextflow version from software_versions.yml - -class UTILS { - public static String removeNextflowVersion(outputDir) { - def softwareVersions = path("$outputDir/pipeline_info/software_versions.yml").yaml - if (softwareVersions.containsKey("Workflow")) { - softwareVersions.Workflow.remove("Nextflow") - } - return softwareVersions - } -} diff --git a/tests/nextflow.config b/tests/nextflow.config new file mode 100644 index 00000000..794a5cb8 --- /dev/null +++ b/tests/nextflow.config @@ -0,0 +1,42 @@ +/* +======================================================================================== + Nextflow config file for running tests +======================================================================================== +*/ + +params { + // Base directory for nf-core/modules test data + modules_testdata_base_path = 's3://ngi-igenomes/testdata/nf-core/modules/' + // Base directory for nf-core/methylseq test data + pipelines_testdata_base_path = 'https://github.com/nf-core/test-datasets/raw/methylseq/' + + // Input data + input = "${projectDir}/assets/samplesheet.csv" + fasta = "${params.pipelines_testdata_base_path}/reference/genome.fa" + fasta_index = "${params.pipelines_testdata_base_path}/reference/genome.fa.fai" + outdir = 'results' +} + +// Impose sensible resource limits for testing +process { + withName: '.*' { + cpus = 2 + memory = 3.GB + time = 2.h + } + + withName: PRESEQ_LCEXTRAP { + errorStrategy = 'ignore' + } +} + +// Impose same minimum Nextflow version as the pipeline for testing +manifest { + nextflowVersion = '!>=24.04.2' +} + +// Disable all Nextflow reporting options +timeline { enabled = false } +report { enabled = false } +trace { enabled = false } +dag { enabled = false } diff --git a/tests/pipeline/bismark/main.nf.test b/tests/pipeline/bismark/main.nf.test deleted file mode 100644 index 11483301..00000000 --- a/tests/pipeline/bismark/main.nf.test +++ /dev/null @@ -1,224 +0,0 @@ -nextflow_pipeline { - - name "Test Workflow main.nf" - script "main.nf" - - tag "bismark" - tag "pipeline" - - test("Bismark Single-End") { - when { - params { - aligner = "bismark" - save_reference = true - outdir = "$outputDir" - } - } - - then { - assertAll( - { assert workflow.success }, - { assert snapshot(path("$outputDir/bismark/deduplicated/Ecoli_1_val_1_bismark_bt2_pe.deduplicated.bam"), - path("$outputDir/bismark/deduplicated/SRR389222_trimmed_bismark_bt2.deduplicated.bam"), - path("$outputDir/bismark/methylation_calls/bedGraph/Ecoli_1_val_1_bismark_bt2_pe.deduplicated.bedGraph.gz"), - path("$outputDir/bismark/methylation_calls/bedGraph/SRR389222_trimmed_bismark_bt2.deduplicated.bedGraph.gz"), - path("$outputDir/bismark/methylation_calls/mbias/Ecoli_1_val_1_bismark_bt2_pe.deduplicated.M-bias.txt"), - path("$outputDir/bismark/methylation_calls/mbias/SRR389222_trimmed_bismark_bt2.deduplicated.M-bias.txt"), - path("$outputDir/bismark/methylation_calls/methylation_coverage/Ecoli_1_val_1_bismark_bt2_pe.deduplicated.bismark.cov.gz"), - path("$outputDir/bismark/methylation_calls/methylation_coverage/SRR389222_trimmed_bismark_bt2.deduplicated.bismark.cov.gz"), - path("$outputDir/bismark/methylation_calls/methylation_calls/").list(), - path("$outputDir/bismark/methylation_calls/splitting_report/Ecoli_1_val_1_bismark_bt2_pe.deduplicated_splitting_report.txt"), - path("$outputDir/bismark/methylation_calls/splitting_report/SRR389222_trimmed_bismark_bt2.deduplicated_splitting_report.txt"), - path("$outputDir/bismark/reference_genome/BismarkIndex/").list(), - path("$outputDir/qualimap/Ecoli/genome_results.txt"), - path("$outputDir/qualimap/SRR389222/genome_results.txt")).match("single_end") }, - { assert snapshot(UTILS.removeNextflowVersion("$outputDir")).match("single_end_software_versions") }, - { assert new File("$outputDir/bismark/alignments/logs/Ecoli_1_val_1_bismark_bt2_PE_report.txt").exists() }, - { assert new File("$outputDir/bismark/alignments/logs/SRR389222_trimmed_bismark_bt2_SE_report.txt").exists() }, - { assert new File("$outputDir/bismark/reports/Ecoli_1_val_1_bismark_bt2_PE_report.html").exists() }, - { assert new File("$outputDir/bismark/reports/SRR389222_trimmed_bismark_bt2_SE_report.html").exists() }, - { assert new File("$outputDir/bismark/summary/bismark_summary_report.html").exists() }, - { assert new File("$outputDir/bismark/summary/bismark_summary_report.txt").exists() }, - { assert new File("$outputDir/fastqc/Ecoli_1_fastqc.html").exists() }, - { assert new File("$outputDir/fastqc/Ecoli_2_fastqc.html").exists() }, - { assert new File("$outputDir/fastqc/SRR389222_fastqc.html").exists() }, - { assert new File("$outputDir/multiqc/bismark/multiqc_report.html").exists() }, - { assert new File("$outputDir/trimgalore/logs/Ecoli_1.fastq.gz_trimming_report.txt").exists() }, - { assert new File("$outputDir/trimgalore/logs/Ecoli_2.fastq.gz_trimming_report.txt").exists() }, - { assert new File("$outputDir/trimgalore/logs/SRR389222.fastq.gz_trimming_report.txt").exists() } - ) - } - } - - test("Bismark Single-End With Index") { - when { - params { - aligner = "bismark" - bismark_index = "https://github.com/nf-core/test-datasets/raw/methylseq/reference/Bowtie2_Index.tar.gz" - cytosine_report = true - outdir = "$outputDir" - } - } - - then { - assertAll( - { assert workflow.success }, - ) - } - } - - test("Bismark Single-End With RRBS") { - when { - params { - aligner = "bismark" - skip_trimming = true - save_reference = true - rrbs = true - outdir = "$outputDir" - } - } - - then { - assertAll( - { assert workflow.success }, - { assert snapshot(path("$outputDir/bismark/alignments/Ecoli_10K_methylated_R1_bismark_bt2_pe.bam"), - path("$outputDir/bismark/alignments/SRR389222.merged_bismark_bt2.bam"), - path("$outputDir/bismark/methylation_calls/bedGraph/Ecoli_10K_methylated_R1_bismark_bt2_pe.bedGraph.gz"), - path("$outputDir/bismark/methylation_calls/bedGraph/SRR389222.merged_bismark_bt2.bedGraph.gz"), - path("$outputDir/bismark/methylation_calls/mbias/Ecoli_10K_methylated_R1_bismark_bt2_pe.M-bias.txt"), - path("$outputDir/bismark/methylation_calls/mbias/SRR389222.merged_bismark_bt2.M-bias.txt"), - path("$outputDir/bismark/methylation_calls/methylation_coverage/Ecoli_10K_methylated_R1_bismark_bt2_pe.bismark.cov.gz"), - path("$outputDir/bismark/methylation_calls/methylation_coverage/SRR389222.merged_bismark_bt2.bismark.cov.gz"), - path("$outputDir/bismark/methylation_calls/methylation_calls/").list(), - path("$outputDir/bismark/methylation_calls/splitting_report/Ecoli_10K_methylated_R1_bismark_bt2_pe_splitting_report.txt"), - path("$outputDir/bismark/methylation_calls/splitting_report/SRR389222.merged_bismark_bt2_splitting_report.txt"), - path("$outputDir/bismark/reference_genome/BismarkIndex/").list(), - path("$outputDir/qualimap/Ecoli/genome_results.txt"), - path("$outputDir/qualimap/SRR389222/genome_results.txt")).match("single_end_rrbs") }, - { assert snapshot(UTILS.removeNextflowVersion("$outputDir")).match("single_end_rrbs_software_versions") }, - { assert new File("$outputDir/bismark/alignments/logs/Ecoli_10K_methylated_R1_bismark_bt2_PE_report.txt").exists() }, - { assert new File("$outputDir/bismark/alignments/logs/SRR389222.merged_bismark_bt2_SE_report.txt").exists() }, - { assert new File("$outputDir/bismark/reports/Ecoli_10K_methylated_R1_bismark_bt2_PE_report.html").exists() }, - { assert new File("$outputDir/bismark/reports/SRR389222.merged_bismark_bt2_SE_report.html").exists() }, - { assert new File("$outputDir/bismark/summary/bismark_summary_report.html").exists() }, - { assert new File("$outputDir/bismark/summary/bismark_summary_report.txt").exists() }, - { assert new File("$outputDir/fastqc/Ecoli_1_fastqc.html").exists() }, - { assert new File("$outputDir/fastqc/Ecoli_2_fastqc.html").exists() }, - { assert new File("$outputDir/fastqc/SRR389222_fastqc.html").exists() }, - { assert new File("$outputDir/multiqc/bismark/multiqc_report.html").exists() } - ) - } - } - - test("Bismark Single-End With RRBS With Index") { - when { - params { - aligner = "bismark" - skip_trimming = true - rrbs = true - bismark_index = "https://github.com/nf-core/test-datasets/raw/methylseq/reference/Bowtie2_Index.tar.gz" - cytosine_report = true - outdir = "$outputDir" - } - } - - then { - assertAll( - { assert workflow.success }, - ) - } - } - - test("Bismark Single-End NOMe-seq") { - when { - params { - aligner = "bismark" - nomeseq = true - outdir = "$outputDir" - } - } - - then { - assertAll( - { assert workflow.success }, - { assert snapshot(path("$outputDir/bismark/coverage2cytosine/coverage/Ecoli.NOMe.CpG.cov.gz"), - path("$outputDir/bismark/coverage2cytosine/coverage/Ecoli.NOMe.GpC.cov.gz"), - path("$outputDir/bismark/coverage2cytosine/coverage/SRR389222.NOMe.CpG.cov.gz"), - path("$outputDir/bismark/coverage2cytosine/coverage/SRR389222.NOMe.GpC.cov.gz"), - path("$outputDir/bismark/deduplicated/Ecoli_1_val_1_bismark_bt2_pe.deduplicated.bam"), - path("$outputDir/bismark/deduplicated/SRR389222_trimmed_bismark_bt2.deduplicated.bam"), - path("$outputDir/bismark/methylation_calls/bedGraph/Ecoli_1_val_1_bismark_bt2_pe.deduplicated.bedGraph.gz"), - path("$outputDir/bismark/methylation_calls/bedGraph/SRR389222_trimmed_bismark_bt2.deduplicated.bedGraph.gz"), - path("$outputDir/bismark/methylation_calls/mbias/Ecoli_1_val_1_bismark_bt2_pe.deduplicated.M-bias.txt"), - path("$outputDir/bismark/methylation_calls/mbias/SRR389222_trimmed_bismark_bt2.deduplicated.M-bias.txt"), - path("$outputDir/bismark/methylation_calls/methylation_coverage/Ecoli_1_val_1_bismark_bt2_pe.deduplicated.bismark.cov.gz"), - path("$outputDir/bismark/methylation_calls/methylation_coverage/SRR389222_trimmed_bismark_bt2.deduplicated.bismark.cov.gz"), - path("$outputDir/bismark/methylation_calls/methylation_calls/").list(), - path("$outputDir/bismark/methylation_calls/splitting_report/Ecoli_1_val_1_bismark_bt2_pe.deduplicated_splitting_report.txt"), - path("$outputDir/bismark/methylation_calls/splitting_report/SRR389222_trimmed_bismark_bt2.deduplicated_splitting_report.txt"), - path("$outputDir/cat/SRR389222.merged.fastq.gz"), - path("$outputDir/qualimap/Ecoli/genome_results.txt"), - path("$outputDir/qualimap/SRR389222/genome_results.txt")).match("single_end_nomeseq") }, - { assert snapshot(UTILS.removeNextflowVersion("$outputDir")).match("single_end_nomeseq_software_versions") }, - { assert new File("$outputDir/bismark/alignments/logs/Ecoli_1_val_1_bismark_bt2_PE_report.txt").exists() }, - { assert new File("$outputDir/bismark/alignments/logs/SRR389222_trimmed_bismark_bt2_SE_report.txt").exists() }, - { assert new File("$outputDir/bismark/reports/Ecoli_1_val_1_bismark_bt2_PE_report.html").exists() }, - { assert new File("$outputDir/bismark/reports/SRR389222_trimmed_bismark_bt2_SE_report.html").exists() }, - { assert new File("$outputDir/bismark/summary/bismark_summary_report.html").exists() }, - { assert new File("$outputDir/bismark/summary/bismark_summary_report.txt").exists() }, - { assert new File("$outputDir/fastqc/Ecoli_1_fastqc.html").exists() }, - { assert new File("$outputDir/fastqc/Ecoli_2_fastqc.html").exists() }, - { assert new File("$outputDir/fastqc/SRR389222_fastqc.html").exists() }, - { assert new File("$outputDir/multiqc/bismark/multiqc_report.html").exists() }, - { assert new File("$outputDir/trimgalore/logs/Ecoli_1.fastq.gz_trimming_report.txt").exists() }, - { assert new File("$outputDir/trimgalore/logs/Ecoli_2.fastq.gz_trimming_report.txt").exists() }, - { assert new File("$outputDir/trimgalore/logs/SRR389222.fastq.gz_trimming_report.txt").exists() } - ) - } - } - - test("Bismark Clip R1 - 2") { - when { - params { - aligner = "bismark" - em_seq = true - clip_r1 = 2 - outdir = "$outputDir" - } - } - - then { - assertAll( - { assert workflow.success }, - { assert snapshot(path("$outputDir/bismark/deduplicated/Ecoli_1_val_1_bismark_bt2_pe.deduplicated.bam"), - path("$outputDir/bismark/deduplicated/SRR389222_trimmed_bismark_bt2.deduplicated.bam"), - path("$outputDir/bismark/methylation_calls/bedGraph/Ecoli_1_val_1_bismark_bt2_pe.deduplicated.bedGraph.gz"), - path("$outputDir/bismark/methylation_calls/bedGraph/SRR389222_trimmed_bismark_bt2.deduplicated.bedGraph.gz"), - path("$outputDir/bismark/methylation_calls/mbias/Ecoli_1_val_1_bismark_bt2_pe.deduplicated.M-bias.txt"), - path("$outputDir/bismark/methylation_calls/mbias/SRR389222_trimmed_bismark_bt2.deduplicated.M-bias.txt"), - path("$outputDir/bismark/methylation_calls/methylation_coverage/Ecoli_1_val_1_bismark_bt2_pe.deduplicated.bismark.cov.gz"), - path("$outputDir/bismark/methylation_calls/methylation_coverage/SRR389222_trimmed_bismark_bt2.deduplicated.bismark.cov.gz"), - path("$outputDir/bismark/methylation_calls/methylation_calls/").list(), - path("$outputDir/bismark/methylation_calls/splitting_report/Ecoli_1_val_1_bismark_bt2_pe.deduplicated_splitting_report.txt"), - path("$outputDir/bismark/methylation_calls/splitting_report/SRR389222_trimmed_bismark_bt2.deduplicated_splitting_report.txt"), - path("$outputDir/cat/SRR389222.merged.fastq.gz"), - path("$outputDir/qualimap/Ecoli/genome_results.txt"), - path("$outputDir/qualimap/SRR389222/genome_results.txt")).match("clip_r1") }, - { assert snapshot(UTILS.removeNextflowVersion("$outputDir")).match("clip_r1_software_versions") }, - { assert new File("$outputDir/bismark/alignments/logs/Ecoli_1_val_1_bismark_bt2_PE_report.txt").exists() }, - { assert new File("$outputDir/bismark/alignments/logs/SRR389222_trimmed_bismark_bt2_SE_report.txt").exists() }, - { assert new File("$outputDir/bismark/reports/Ecoli_1_val_1_bismark_bt2_PE_report.html").exists() }, - { assert new File("$outputDir/bismark/reports/SRR389222_trimmed_bismark_bt2_SE_report.html").exists() }, - { assert new File("$outputDir/bismark/summary/bismark_summary_report.html").exists() }, - { assert new File("$outputDir/bismark/summary/bismark_summary_report.txt").exists() }, - { assert new File("$outputDir/fastqc/Ecoli_1_fastqc.html").exists() }, - { assert new File("$outputDir/fastqc/Ecoli_2_fastqc.html").exists() }, - { assert new File("$outputDir/fastqc/SRR389222_fastqc.html").exists() }, - { assert new File("$outputDir/multiqc/bismark/multiqc_report.html").exists() }, - { assert new File("$outputDir/trimgalore/logs/Ecoli_1.fastq.gz_trimming_report.txt").exists() }, - { assert new File("$outputDir/trimgalore/logs/Ecoli_2.fastq.gz_trimming_report.txt").exists() }, - { assert new File("$outputDir/trimgalore/logs/SRR389222.fastq.gz_trimming_report.txt").exists() } - ) - } - } -} diff --git a/tests/pipeline/bismark/main.nf.test.snap b/tests/pipeline/bismark/main.nf.test.snap deleted file mode 100644 index 281ff290..00000000 --- a/tests/pipeline/bismark/main.nf.test.snap +++ /dev/null @@ -1,202 +0,0 @@ -{ - "single_end_software_versions": { - "content": [ - "{BISMARK_ALIGN={bismark=0.24.0}, BISMARK_GENOMEPREPARATION={bismark=0.24.0}, CAT_FASTQ={cat=8.30}, CUSTOM_DUMPSOFTWAREVERSIONS={python=3.12.0, yaml=6.0.1}, FASTQC={fastqc=0.12.1}, QUALIMAP_BAMQC={qualimap=2.2.2-dev}, TRIMGALORE={cutadapt=3.4, trimgalore=0.6.7}, Workflow={nf-core/methylseq=2.6.0}}" - ], - "timestamp": "2024-01-05T13:33:44.592961646" - }, - "single_end_nomeseq_software_versions": { - "content": [ - "{BISMARK_ALIGN={bismark=0.24.0}, BISMARK_GENOMEPREPARATION={bismark=0.24.0}, CAT_FASTQ={cat=8.30}, CUSTOM_DUMPSOFTWAREVERSIONS={python=3.12.0, yaml=6.0.1}, FASTQC={fastqc=0.12.1}, QUALIMAP_BAMQC={qualimap=2.2.2-dev}, TRIMGALORE={cutadapt=3.4, trimgalore=0.6.7}, Workflow={nf-core/methylseq=2.6.0}}" - ], - "timestamp": "2024-01-05T13:38:45.868954182" - }, - "single_end_rrbs_software_versions": { - "content": [ - "{BISMARK_ALIGN={bismark=0.24.0}, BISMARK_GENOMEPREPARATION={bismark=0.24.0}, CAT_FASTQ={cat=8.30}, CUSTOM_DUMPSOFTWAREVERSIONS={python=3.12.0, yaml=6.0.1}, FASTQC={fastqc=0.12.1}, QUALIMAP_BAMQC={qualimap=2.2.2-dev}, Workflow={nf-core/methylseq=2.6.0}}" - ], - "timestamp": "2024-01-05T13:36:19.58008405" - }, - "single_end_nomeseq": { - "content": [ - "Ecoli.NOMe.CpG.cov.gz:md5,c2c4db8d0a2ec32d572e75b01b2f7d81", - "Ecoli.NOMe.GpC.cov.gz:md5,a2b56291dbe8b344ee03a3ae58de8807", - "SRR389222.NOMe.CpG.cov.gz:md5,9738cb2fd47a65851626fc48d264c1b4", - "SRR389222.NOMe.GpC.cov.gz:md5,d5e6d60c93e76c7476b132b6aa4f8395", - "Ecoli_1_val_1_bismark_bt2_pe.deduplicated.bam:md5,caa027599dac71c50c24de1857dbf5c7", - "SRR389222_trimmed_bismark_bt2.deduplicated.bam:md5,7dba45955ae74159596a6ab41a9dcc87", - "Ecoli_1_val_1_bismark_bt2_pe.deduplicated.bedGraph.gz:md5,88e599178b08907aab7d248302b7d37e", - "SRR389222_trimmed_bismark_bt2.deduplicated.bedGraph.gz:md5,fe6b3655db6da21bdd3076947e062f0b", - "Ecoli_1_val_1_bismark_bt2_pe.deduplicated.M-bias.txt:md5,29f3b882a51b63ce77d3d9c69b0e5f85", - "SRR389222_trimmed_bismark_bt2.deduplicated.M-bias.txt:md5,bc48b8895f9ce84205a25899cf551624", - "Ecoli_1_val_1_bismark_bt2_pe.deduplicated.bismark.cov.gz:md5,962fe67f41f5e03d8e321ed381369513", - "SRR389222_trimmed_bismark_bt2.deduplicated.bismark.cov.gz:md5,82a55b84888ad5fe530f97c348738fdb", - [ - "CHG_OB_Ecoli_1_val_1_bismark_bt2_pe.deduplicated.txt.gz:md5,9c2248d95d96d6c315c65f1b8dc3bc39", - "CHG_OB_SRR389222_trimmed_bismark_bt2.deduplicated.txt.gz:md5,9d8098ce1a27c23961e20b6a95f237d1", - "CHG_OT_Ecoli_1_val_1_bismark_bt2_pe.deduplicated.txt.gz:md5,5e5aefaa3f63e73f30342ad843eb210b", - "CHG_OT_SRR389222_trimmed_bismark_bt2.deduplicated.txt.gz:md5,e68463946c5bfdf461c3aa81524f8837", - "CHH_OB_Ecoli_1_val_1_bismark_bt2_pe.deduplicated.txt.gz:md5,65f2afc6b1c76209af1acd1d4277a1cc", - "CHH_OB_SRR389222_trimmed_bismark_bt2.deduplicated.txt.gz:md5,6834286d8d07a1b3a4399f71b5b3c3f8", - "CHH_OT_Ecoli_1_val_1_bismark_bt2_pe.deduplicated.txt.gz:md5,978ad87fef01e39283a620253320ee45", - "CHH_OT_SRR389222_trimmed_bismark_bt2.deduplicated.txt.gz:md5,4347c873d1a7c772a448dd01351e5c0f", - "CpG_OB_Ecoli_1_val_1_bismark_bt2_pe.deduplicated.txt.gz:md5,54def6bf13e27f38adbbd3dd06297596", - "CpG_OB_SRR389222_trimmed_bismark_bt2.deduplicated.txt.gz:md5,4dae933bcdc8c7d1de2f5e7239c1ae55", - "CpG_OT_Ecoli_1_val_1_bismark_bt2_pe.deduplicated.txt.gz:md5,9712eef973883f44dcc0a307af28ba70", - "CpG_OT_SRR389222_trimmed_bismark_bt2.deduplicated.txt.gz:md5,49ec41948052a2a4a952f651df13b344" - ], - "Ecoli_1_val_1_bismark_bt2_pe.deduplicated_splitting_report.txt:md5,b759f31785293e8d952f1dd3246f9a7b", - "SRR389222_trimmed_bismark_bt2.deduplicated_splitting_report.txt:md5,1c4a4288b3bcf1bbaa6b99e3c4b53ce9", - "SRR389222.merged.fastq.gz:md5,47e1d7461d511a970e80085dd6454775", - "genome_results.txt:md5,886ffc763d05a84ead7f80a1d1db1fa2", - "genome_results.txt:md5,b99d4cfd82d21ac09ccb72865f9b3960" - ], - "timestamp": "2023-12-22T22:56:01.615992857" - }, - "clip_r1_software_versions": { - "content": [ - "{BISMARK_ALIGN={bismark=0.24.0}, BISMARK_GENOMEPREPARATION={bismark=0.24.0}, CAT_FASTQ={cat=8.30}, CUSTOM_DUMPSOFTWAREVERSIONS={python=3.12.0, yaml=6.0.1}, FASTQC={fastqc=0.12.1}, QUALIMAP_BAMQC={qualimap=2.2.2-dev}, TRIMGALORE={cutadapt=3.4, trimgalore=0.6.7}, Workflow={nf-core/methylseq=2.6.0}}" - ], - "timestamp": "2024-01-05T13:39:54.162519593" - }, - "single_end": { - "content": [ - "Ecoli_1_val_1_bismark_bt2_pe.deduplicated.bam:md5,caa027599dac71c50c24de1857dbf5c7", - "SRR389222_trimmed_bismark_bt2.deduplicated.bam:md5,7dba45955ae74159596a6ab41a9dcc87", - "Ecoli_1_val_1_bismark_bt2_pe.deduplicated.bedGraph.gz:md5,58c9ba98d0638c26a30233b006a81172", - "SRR389222_trimmed_bismark_bt2.deduplicated.bedGraph.gz:md5,3a19363a47169044a01f7195eb83266c", - "Ecoli_1_val_1_bismark_bt2_pe.deduplicated.M-bias.txt:md5,29f3b882a51b63ce77d3d9c69b0e5f85", - "SRR389222_trimmed_bismark_bt2.deduplicated.M-bias.txt:md5,bc48b8895f9ce84205a25899cf551624", - "Ecoli_1_val_1_bismark_bt2_pe.deduplicated.bismark.cov.gz:md5,8e6ba6fe66416d73e7f94b4da9ca77b1", - "SRR389222_trimmed_bismark_bt2.deduplicated.bismark.cov.gz:md5,389dc4fee59e34967d9af49958cb5cbe", - [ - "CHG_OB_Ecoli_1_val_1_bismark_bt2_pe.deduplicated.txt.gz:md5,9c2248d95d96d6c315c65f1b8dc3bc39", - "CHG_OB_SRR389222_trimmed_bismark_bt2.deduplicated.txt.gz:md5,9d8098ce1a27c23961e20b6a95f237d1", - "CHG_OT_Ecoli_1_val_1_bismark_bt2_pe.deduplicated.txt.gz:md5,5e5aefaa3f63e73f30342ad843eb210b", - "CHG_OT_SRR389222_trimmed_bismark_bt2.deduplicated.txt.gz:md5,e68463946c5bfdf461c3aa81524f8837", - "CHH_OB_Ecoli_1_val_1_bismark_bt2_pe.deduplicated.txt.gz:md5,65f2afc6b1c76209af1acd1d4277a1cc", - "CHH_OB_SRR389222_trimmed_bismark_bt2.deduplicated.txt.gz:md5,6834286d8d07a1b3a4399f71b5b3c3f8", - "CHH_OT_Ecoli_1_val_1_bismark_bt2_pe.deduplicated.txt.gz:md5,978ad87fef01e39283a620253320ee45", - "CHH_OT_SRR389222_trimmed_bismark_bt2.deduplicated.txt.gz:md5,4347c873d1a7c772a448dd01351e5c0f", - "CpG_OB_Ecoli_1_val_1_bismark_bt2_pe.deduplicated.txt.gz:md5,54def6bf13e27f38adbbd3dd06297596", - "CpG_OB_SRR389222_trimmed_bismark_bt2.deduplicated.txt.gz:md5,4dae933bcdc8c7d1de2f5e7239c1ae55", - "CpG_OT_Ecoli_1_val_1_bismark_bt2_pe.deduplicated.txt.gz:md5,9712eef973883f44dcc0a307af28ba70", - "CpG_OT_SRR389222_trimmed_bismark_bt2.deduplicated.txt.gz:md5,49ec41948052a2a4a952f651df13b344" - ], - "Ecoli_1_val_1_bismark_bt2_pe.deduplicated_splitting_report.txt:md5,b759f31785293e8d952f1dd3246f9a7b", - "SRR389222_trimmed_bismark_bt2.deduplicated_splitting_report.txt:md5,1c4a4288b3bcf1bbaa6b99e3c4b53ce9", - [ - [ - [ - "BS_CT.1.bt2:md5,d53bef7d951c7d08e327944581c911eb", - "BS_CT.2.bt2:md5,752a03fc364115fc910e5a28ae154382", - "BS_CT.3.bt2:md5,b41e72eefad74e8ede411c78a5bd5dee", - "BS_CT.4.bt2:md5,02b3d1855a67fd9cbb4c411406a22fde", - "BS_CT.rev.1.bt2:md5,52ae603fff473b3b25eecd36c533edb9", - "BS_CT.rev.2.bt2:md5,0e290e05f7dae065cae54e29ed97afe5", - "genome_mfa.CT_conversion.fa:md5,4dd181b65f1f3549f4132c9a3759eee8" - ], - [ - "BS_GA.1.bt2:md5,9aff51b1712758b891b0c427a988977f", - "BS_GA.2.bt2:md5,579241d95941538b2e75bbdb6cfaa73d", - "BS_GA.3.bt2:md5,b41e72eefad74e8ede411c78a5bd5dee", - "BS_GA.4.bt2:md5,6b64fa496ffa2af2af235e1c87f06a25", - "BS_GA.rev.1.bt2:md5,dabf2d6f80ba7e8fc96dfdc203f6bbfd", - "BS_GA.rev.2.bt2:md5,fac2f8b39b0e15dec7aa79a0ecf12b49", - "genome_mfa.GA_conversion.fa:md5,3dee732bc344fd620c3a7322f52c6a5f" - ] - ], - "genome.fa:md5,923a0a268ad29fee3c3437d00f9970de" - ], - "genome_results.txt:md5,886ffc763d05a84ead7f80a1d1db1fa2", - "genome_results.txt:md5,b99d4cfd82d21ac09ccb72865f9b3960" - ], - "timestamp": "2023-12-22T22:42:59.548979384" - }, - "single_end_rrbs": { - "content": [ - "Ecoli_10K_methylated_R1_bismark_bt2_pe.bam:md5,1497e3a06ee045cb82f834ddb4bcfe88", - "SRR389222.merged_bismark_bt2.bam:md5,c3e94ff13a934e0c78ebb6d40f7c8230", - "Ecoli_10K_methylated_R1_bismark_bt2_pe.bedGraph.gz:md5,58c9ba98d0638c26a30233b006a81172", - "SRR389222.merged_bismark_bt2.bedGraph.gz:md5,c154fe825d9bb867c9efcf55d6cb7e94", - "Ecoli_10K_methylated_R1_bismark_bt2_pe.M-bias.txt:md5,29f3b882a51b63ce77d3d9c69b0e5f85", - "SRR389222.merged_bismark_bt2.M-bias.txt:md5,514f544046333337f0f74b7386b8afa6", - "Ecoli_10K_methylated_R1_bismark_bt2_pe.bismark.cov.gz:md5,8e6ba6fe66416d73e7f94b4da9ca77b1", - "SRR389222.merged_bismark_bt2.bismark.cov.gz:md5,d4a5b741ca46b486bf165ede18baadd0", - [ - "CHG_OB_Ecoli_10K_methylated_R1_bismark_bt2_pe.txt.gz:md5,9c2248d95d96d6c315c65f1b8dc3bc39", - "CHG_OB_SRR389222.merged_bismark_bt2.txt.gz:md5,eeb08e87d7e3dca0acbb2c5ba2be66fb", - "CHG_OT_Ecoli_10K_methylated_R1_bismark_bt2_pe.txt.gz:md5,5e5aefaa3f63e73f30342ad843eb210b", - "CHG_OT_SRR389222.merged_bismark_bt2.txt.gz:md5,930f995efd5204b5b04a548afdef1a6e", - "CHH_OB_Ecoli_10K_methylated_R1_bismark_bt2_pe.txt.gz:md5,65f2afc6b1c76209af1acd1d4277a1cc", - "CHH_OB_SRR389222.merged_bismark_bt2.txt.gz:md5,a135c7e8a6c1b909a318ef17d47dca94", - "CHH_OT_Ecoli_10K_methylated_R1_bismark_bt2_pe.txt.gz:md5,978ad87fef01e39283a620253320ee45", - "CHH_OT_SRR389222.merged_bismark_bt2.txt.gz:md5,2a356ae7fe7774f140f11ed5d935f88c", - "CpG_OB_Ecoli_10K_methylated_R1_bismark_bt2_pe.txt.gz:md5,54def6bf13e27f38adbbd3dd06297596", - "CpG_OB_SRR389222.merged_bismark_bt2.txt.gz:md5,b8b2de10044869b6c1097afc21c878a0", - "CpG_OT_Ecoli_10K_methylated_R1_bismark_bt2_pe.txt.gz:md5,9712eef973883f44dcc0a307af28ba70", - "CpG_OT_SRR389222.merged_bismark_bt2.txt.gz:md5,9e517e44422a8bb22de1281ff2cd34d1" - ], - "Ecoli_10K_methylated_R1_bismark_bt2_pe_splitting_report.txt:md5,fa089f6146df9667862970b6ddc998b0", - "SRR389222.merged_bismark_bt2_splitting_report.txt:md5,0ece57f8fc3aa659d2f0b7a09cf48398", - [ - [ - [ - "BS_CT.1.bt2:md5,d53bef7d951c7d08e327944581c911eb", - "BS_CT.2.bt2:md5,752a03fc364115fc910e5a28ae154382", - "BS_CT.3.bt2:md5,b41e72eefad74e8ede411c78a5bd5dee", - "BS_CT.4.bt2:md5,02b3d1855a67fd9cbb4c411406a22fde", - "BS_CT.rev.1.bt2:md5,52ae603fff473b3b25eecd36c533edb9", - "BS_CT.rev.2.bt2:md5,0e290e05f7dae065cae54e29ed97afe5", - "genome_mfa.CT_conversion.fa:md5,4dd181b65f1f3549f4132c9a3759eee8" - ], - [ - "BS_GA.1.bt2:md5,9aff51b1712758b891b0c427a988977f", - "BS_GA.2.bt2:md5,579241d95941538b2e75bbdb6cfaa73d", - "BS_GA.3.bt2:md5,b41e72eefad74e8ede411c78a5bd5dee", - "BS_GA.4.bt2:md5,6b64fa496ffa2af2af235e1c87f06a25", - "BS_GA.rev.1.bt2:md5,dabf2d6f80ba7e8fc96dfdc203f6bbfd", - "BS_GA.rev.2.bt2:md5,fac2f8b39b0e15dec7aa79a0ecf12b49", - "genome_mfa.GA_conversion.fa:md5,3dee732bc344fd620c3a7322f52c6a5f" - ] - ], - "genome.fa:md5,923a0a268ad29fee3c3437d00f9970de" - ], - "genome_results.txt:md5,97dc2b4df61a46ccd2714903186ecaf0", - "genome_results.txt:md5,f0d293867800a75becf2583c23729083" - ], - "timestamp": "2023-12-22T22:52:42.829793102" - }, - "clip_r1": { - "content": [ - "Ecoli_1_val_1_bismark_bt2_pe.deduplicated.bam:md5,b19bc9b84dd8d8000c05b04234689aca", - "SRR389222_trimmed_bismark_bt2.deduplicated.bam:md5,1bfe463dabf8727992e3ff6c19d8e7c1", - "Ecoli_1_val_1_bismark_bt2_pe.deduplicated.bedGraph.gz:md5,e8b3933de21d7618cdaab650fe544b17", - "SRR389222_trimmed_bismark_bt2.deduplicated.bedGraph.gz:md5,bddc7c560a902b842b72e20a21274cba", - "Ecoli_1_val_1_bismark_bt2_pe.deduplicated.M-bias.txt:md5,83a004a3d957cf95f25933bcd828a8d4", - "SRR389222_trimmed_bismark_bt2.deduplicated.M-bias.txt:md5,90a6b76d41112c6de391d3a017638d95", - "Ecoli_1_val_1_bismark_bt2_pe.deduplicated.bismark.cov.gz:md5,34aa02c199f1496df0704dd239373ebe", - "SRR389222_trimmed_bismark_bt2.deduplicated.bismark.cov.gz:md5,03178f50ae4bf04a7b78d8bbdb8a77af", - [ - "CHG_OB_Ecoli_1_val_1_bismark_bt2_pe.deduplicated.txt.gz:md5,3856b07ea51dea59b444a7483ca3db75", - "CHG_OB_SRR389222_trimmed_bismark_bt2.deduplicated.txt.gz:md5,e70e8a2ace2e602a967de256d299fb0d", - "CHG_OT_Ecoli_1_val_1_bismark_bt2_pe.deduplicated.txt.gz:md5,c1ba1891636a6b99f4d1495b3ddf1a59", - "CHG_OT_SRR389222_trimmed_bismark_bt2.deduplicated.txt.gz:md5,f8867c4ee03fba6be823b7287cacfea3", - "CHH_OB_Ecoli_1_val_1_bismark_bt2_pe.deduplicated.txt.gz:md5,4e9a0e61d47eefb64876431b3640ee95", - "CHH_OB_SRR389222_trimmed_bismark_bt2.deduplicated.txt.gz:md5,32728cf447a470681f4e608008d514ae", - "CHH_OT_Ecoli_1_val_1_bismark_bt2_pe.deduplicated.txt.gz:md5,10cd51608191667e027a9867dd84ab3f", - "CHH_OT_SRR389222_trimmed_bismark_bt2.deduplicated.txt.gz:md5,2ec291cbfc4d64dbcd50603839129de1", - "CpG_OB_Ecoli_1_val_1_bismark_bt2_pe.deduplicated.txt.gz:md5,423aa4faf47d176a6b6cce134e1a9212", - "CpG_OB_SRR389222_trimmed_bismark_bt2.deduplicated.txt.gz:md5,873612f00ee6ef44e8bc0dcb9f4a35f6", - "CpG_OT_Ecoli_1_val_1_bismark_bt2_pe.deduplicated.txt.gz:md5,1e243313554fce1b06aba217c7123cae", - "CpG_OT_SRR389222_trimmed_bismark_bt2.deduplicated.txt.gz:md5,d86423a21b0d22188e188dc9f576135c" - ], - "Ecoli_1_val_1_bismark_bt2_pe.deduplicated_splitting_report.txt:md5,db55b5dbf35e78de9c1c6b2f2ed1e45b", - "SRR389222_trimmed_bismark_bt2.deduplicated_splitting_report.txt:md5,9a1a5d1e6722dda9e8a1953a01c415d0", - "SRR389222.merged.fastq.gz:md5,47e1d7461d511a970e80085dd6454775", - "genome_results.txt:md5,2bbc428b0a5b9828df9fc4cd92806e12", - "genome_results.txt:md5,5631f1632df00985946641cfc1601633" - ], - "timestamp": "2023-12-22T22:57:38.05813974" - } -} \ No newline at end of file diff --git a/tests/pipeline/bismark_hisat/main.nf.test b/tests/pipeline/bismark_hisat/main.nf.test deleted file mode 100644 index 550fb843..00000000 --- a/tests/pipeline/bismark_hisat/main.nf.test +++ /dev/null @@ -1,132 +0,0 @@ -nextflow_pipeline { - - name "Test Workflow main.nf" - script "main.nf" - - tag "bismark_hisat" - tag "pipeline" - - test("Bismark Hisat Single-End") { - when { - params { - aligner = "bismark_hisat" - save_reference = true - outdir = "$outputDir" - } - } - - then { - assertAll( - { assert workflow.success }, - { assert snapshot(path("$outputDir/bismark_hisat/deduplicated/Ecoli_1_val_1_bismark_hisat2_pe.deduplicated.bam"), - path("$outputDir/bismark_hisat/deduplicated/SRR389222_trimmed_bismark_hisat2.deduplicated.bam"), - path("$outputDir/bismark_hisat/methylation_calls/bedGraph/Ecoli_1_val_1_bismark_hisat2_pe.deduplicated.bedGraph.gz"), - path("$outputDir/bismark_hisat/methylation_calls/bedGraph/SRR389222_trimmed_bismark_hisat2.deduplicated.bedGraph.gz"), - path("$outputDir/bismark_hisat/methylation_calls/mbias/Ecoli_1_val_1_bismark_hisat2_pe.deduplicated.M-bias.txt"), - path("$outputDir/bismark_hisat/methylation_calls/mbias/SRR389222_trimmed_bismark_hisat2.deduplicated.M-bias.txt"), - path("$outputDir/bismark_hisat/methylation_calls/methylation_calls/").list(), - path("$outputDir/bismark_hisat/methylation_calls/methylation_coverage/Ecoli_1_val_1_bismark_hisat2_pe.deduplicated.bismark.cov.gz"), - path("$outputDir/bismark_hisat/methylation_calls/methylation_coverage/SRR389222_trimmed_bismark_hisat2.deduplicated.bismark.cov.gz"), - path("$outputDir/bismark_hisat/methylation_calls/splitting_report/Ecoli_1_val_1_bismark_hisat2_pe.deduplicated_splitting_report.txt"), - path("$outputDir/bismark_hisat/methylation_calls/splitting_report/SRR389222_trimmed_bismark_hisat2.deduplicated_splitting_report.txt"), - path("$outputDir/cat/SRR389222.merged.fastq.gz"), - path("$outputDir/qualimap/Ecoli/genome_results.txt"), - path("$outputDir/qualimap/SRR389222/genome_results.txt")).match("single_end") }, - { assert snapshot(UTILS.removeNextflowVersion("$outputDir")).match("single_end_software_versions") }, - { assert new File("$outputDir/bismark_hisat/alignments/logs/Ecoli_1_val_1_bismark_hisat2_PE_report.txt").exists() }, - { assert new File("$outputDir/bismark_hisat/alignments/logs/SRR389222_trimmed_bismark_hisat2_SE_report.txt").exists() }, - { assert new File("$outputDir/bismark_hisat/reports/Ecoli_1_val_1_bismark_hisat2_PE_report.html").exists() }, - { assert new File("$outputDir/bismark_hisat/reports/SRR389222_trimmed_bismark_hisat2_SE_report.html").exists() }, - { assert new File("$outputDir/bismark_hisat/summary/bismark_summary_report.html").exists() }, - { assert new File("$outputDir/bismark_hisat/summary/bismark_summary_report.txt").exists() }, - { assert new File("$outputDir/fastqc/Ecoli_1_fastqc.html").exists() }, - { assert new File("$outputDir/fastqc/Ecoli_2_fastqc.html").exists() }, - { assert new File("$outputDir/fastqc/SRR389222_fastqc.html").exists() }, - { assert new File("$outputDir/multiqc/bismark_hisat/multiqc_report.html").exists() }, - { assert new File("$outputDir/trimgalore/logs/Ecoli_1.fastq.gz_trimming_report.txt").exists() }, - { assert new File("$outputDir/trimgalore/logs/Ecoli_2.fastq.gz_trimming_report.txt").exists() }, - { assert new File("$outputDir/trimgalore/logs/SRR389222.fastq.gz_trimming_report.txt").exists() } - ) - } - } - - test("Bismark Hisat Single-End With Index") { - when { - params { - aligner = "bismark_hisat" - bismark_index = "https://github.com/nf-core/test-datasets/raw/methylseq/reference/Hisat2_Index.tar.gz" - local_alignment = true - outdir = "$outputDir" - } - } - - then { - assertAll( - { assert workflow.success }, - ) - } - } - - test("Bismark Hisat Single-End With RRBS") { - when { - params { - aligner = "bismark_hisat" - save_reference = true - skip_trimming = true - rrbs = true - outdir = "$outputDir" - } - } - - then { - assertAll( - { assert workflow.success }, - { assert snapshot(path("$outputDir/bismark_hisat/alignments/Ecoli_10K_methylated_R1_bismark_hisat2_pe.bam"), - path("$outputDir/bismark_hisat/alignments/SRR389222.merged_bismark_hisat2.bam"), - path("$outputDir/bismark_hisat/methylation_calls/bedGraph/Ecoli_10K_methylated_R1_bismark_hisat2_pe.bedGraph.gz"), - path("$outputDir/bismark_hisat/methylation_calls/bedGraph/SRR389222.merged_bismark_hisat2.bedGraph.gz"), - path("$outputDir/bismark_hisat/methylation_calls/mbias/Ecoli_10K_methylated_R1_bismark_hisat2_pe.M-bias.txt"), - path("$outputDir/bismark_hisat/methylation_calls/mbias/SRR389222.merged_bismark_hisat2.M-bias.txt"), - path("$outputDir/bismark_hisat/methylation_calls/methylation_calls/").list(), - path("$outputDir/bismark_hisat/methylation_calls/methylation_coverage/Ecoli_10K_methylated_R1_bismark_hisat2_pe.bismark.cov.gz"), - path("$outputDir/bismark_hisat/methylation_calls/methylation_coverage/SRR389222.merged_bismark_hisat2.bismark.cov.gz"), - path("$outputDir/bismark_hisat/methylation_calls/splitting_report/Ecoli_10K_methylated_R1_bismark_hisat2_pe_splitting_report.txt"), - path("$outputDir/bismark_hisat/methylation_calls/splitting_report/SRR389222.merged_bismark_hisat2_splitting_report.txt"), - path("$outputDir/cat/SRR389222.merged.fastq.gz"), - path("$outputDir/qualimap/Ecoli/genome_results.txt"), - path("$outputDir/qualimap/SRR389222/genome_results.txt")).match("single_end_rrbs") }, - { assert snapshot(UTILS.removeNextflowVersion("$outputDir")).match("single_end_rrbs_software_versions") }, - { assert new File("$outputDir/bismark_hisat/alignments/logs/Ecoli_10K_methylated_R1_bismark_hisat2_PE_report.txt").exists() }, - { assert new File("$outputDir/bismark_hisat/alignments/logs/SRR389222.merged_bismark_hisat2_SE_report.txt").exists() }, - { assert new File("$outputDir/bismark_hisat/reports/Ecoli_10K_methylated_R1_bismark_hisat2_PE_report.html").exists() }, - { assert new File("$outputDir/bismark_hisat/reports/SRR389222.merged_bismark_hisat2_SE_report.html").exists() }, - { assert new File("$outputDir/bismark_hisat/summary/bismark_summary_report.html").exists() }, - { assert new File("$outputDir/bismark_hisat/summary/bismark_summary_report.txt").exists() }, - { assert new File("$outputDir/fastqc/Ecoli_1_fastqc.html").exists() }, - { assert new File("$outputDir/fastqc/Ecoli_2_fastqc.html").exists() }, - { assert new File("$outputDir/fastqc/SRR389222_fastqc.html").exists() }, - { assert new File("$outputDir/multiqc/bismark_hisat/multiqc_report.html").exists() } - ) - } - } - - test("Bismark Hisat Single-End With RRBS With Index") { - when { - params { - aligner = "bismark_hisat" - skip_trimming = true - rrbs = true - bismark_index = "https://github.com/nf-core/test-datasets/raw/methylseq/reference/Hisat2_Index.tar.gz" - local_alignment = true - outdir = "$outputDir" - } - } - - then { - assertAll( - { assert workflow.success }, - ) - } - } - -} diff --git a/tests/pipeline/bismark_hisat/main.nf.test.snap b/tests/pipeline/bismark_hisat/main.nf.test.snap deleted file mode 100644 index 07d914d9..00000000 --- a/tests/pipeline/bismark_hisat/main.nf.test.snap +++ /dev/null @@ -1,78 +0,0 @@ -{ - "single_end_software_versions": { - "content": [ - "{BISMARK_ALIGN={bismark=0.24.0}, BISMARK_GENOMEPREPARATION={bismark=0.24.0}, CAT_FASTQ={cat=8.30}, CUSTOM_DUMPSOFTWAREVERSIONS={python=3.12.0, yaml=6.0.1}, FASTQC={fastqc=0.12.1}, QUALIMAP_BAMQC={qualimap=2.2.2-dev}, TRIMGALORE={cutadapt=3.4, trimgalore=0.6.7}, Workflow={nf-core/methylseq=2.6.0}}" - ], - "timestamp": "2024-01-05T13:41:11.426077518" - }, - "single_end_rrbs_software_versions": { - "content": [ - "{BISMARK_ALIGN={bismark=0.24.0}, BISMARK_GENOMEPREPARATION={bismark=0.24.0}, CAT_FASTQ={cat=8.30}, CUSTOM_DUMPSOFTWAREVERSIONS={python=3.12.0, yaml=6.0.1}, FASTQC={fastqc=0.12.1}, QUALIMAP_BAMQC={qualimap=2.2.2-dev}, Workflow={nf-core/methylseq=2.6.0}}" - ], - "timestamp": "2024-01-05T13:43:52.561148623" - }, - "single_end": { - "content": [ - "Ecoli_1_val_1_bismark_hisat2_pe.deduplicated.bam:md5,ddfc84eb92f641020362f69e9e28a52d", - "SRR389222_trimmed_bismark_hisat2.deduplicated.bam:md5,aa60cf9dcf302c185b12ced6f302a06e", - "Ecoli_1_val_1_bismark_hisat2_pe.deduplicated.bedGraph.gz:md5,357196071c54757566cdd0bb7ab79fa8", - "SRR389222_trimmed_bismark_hisat2.deduplicated.bedGraph.gz:md5,b20f17236ff64db1114343ff333a6d5b", - "Ecoli_1_val_1_bismark_hisat2_pe.deduplicated.M-bias.txt:md5,5fd8655f4b9dba2249a52b769fe50faf", - "SRR389222_trimmed_bismark_hisat2.deduplicated.M-bias.txt:md5,b19356395d4ae1ad83bd3ec38276e580", - [ - "CHG_OB_Ecoli_1_val_1_bismark_hisat2_pe.deduplicated.txt.gz:md5,6d2ca2e6548640e3885c94a3ca6beae0", - "CHG_OB_SRR389222_trimmed_bismark_hisat2.deduplicated.txt.gz:md5,9d8098ce1a27c23961e20b6a95f237d1", - "CHG_OT_Ecoli_1_val_1_bismark_hisat2_pe.deduplicated.txt.gz:md5,5e5aefaa3f63e73f30342ad843eb210b", - "CHG_OT_SRR389222_trimmed_bismark_hisat2.deduplicated.txt.gz:md5,1180631ef093aade3a5195ce7ddfb3f6", - "CHH_OB_Ecoli_1_val_1_bismark_hisat2_pe.deduplicated.txt.gz:md5,abd48ddf1c9e844d8164de5150850d10", - "CHH_OB_SRR389222_trimmed_bismark_hisat2.deduplicated.txt.gz:md5,6834286d8d07a1b3a4399f71b5b3c3f8", - "CHH_OT_Ecoli_1_val_1_bismark_hisat2_pe.deduplicated.txt.gz:md5,978ad87fef01e39283a620253320ee45", - "CHH_OT_SRR389222_trimmed_bismark_hisat2.deduplicated.txt.gz:md5,c311a70c0c8b6a93c2055fcbec03a833", - "CpG_OB_Ecoli_1_val_1_bismark_hisat2_pe.deduplicated.txt.gz:md5,51f8b079b9fd91e23e495d9e0e289530", - "CpG_OB_SRR389222_trimmed_bismark_hisat2.deduplicated.txt.gz:md5,4dae933bcdc8c7d1de2f5e7239c1ae55", - "CpG_OT_Ecoli_1_val_1_bismark_hisat2_pe.deduplicated.txt.gz:md5,9712eef973883f44dcc0a307af28ba70", - "CpG_OT_SRR389222_trimmed_bismark_hisat2.deduplicated.txt.gz:md5,63e737eef999e2d6348e7ed2a7ce4402" - ], - "Ecoli_1_val_1_bismark_hisat2_pe.deduplicated.bismark.cov.gz:md5,d8342eca72089408d8e4d7c5ec5e95bf", - "SRR389222_trimmed_bismark_hisat2.deduplicated.bismark.cov.gz:md5,ad7a19cb9908844c47b7b871ff1223c2", - "Ecoli_1_val_1_bismark_hisat2_pe.deduplicated_splitting_report.txt:md5,bc2284d712455231a2dd772098ca8dd9", - "SRR389222_trimmed_bismark_hisat2.deduplicated_splitting_report.txt:md5,1f792e1fddb17140947f14008e1f9ffd", - "SRR389222.merged.fastq.gz:md5,47e1d7461d511a970e80085dd6454775", - "genome_results.txt:md5,3703ab8cc04a6f3307ea1ffcfe23479a", - "genome_results.txt:md5,7706d3790aee0e9244c490941ecd394f" - ], - "timestamp": "2023-12-22T22:14:39.589478621" - }, - "single_end_rrbs": { - "content": [ - "Ecoli_10K_methylated_R1_bismark_hisat2_pe.bam:md5,53c34edee0bc7f34c9f4e9a3685dd706", - "SRR389222.merged_bismark_hisat2.bam:md5,204123a5f7cd77cba3a90b904443c7eb", - "Ecoli_10K_methylated_R1_bismark_hisat2_pe.bedGraph.gz:md5,357196071c54757566cdd0bb7ab79fa8", - "SRR389222.merged_bismark_hisat2.bedGraph.gz:md5,d509b1e8e4ec03dcde48a127cf976594", - "Ecoli_10K_methylated_R1_bismark_hisat2_pe.M-bias.txt:md5,5fd8655f4b9dba2249a52b769fe50faf", - "SRR389222.merged_bismark_hisat2.M-bias.txt:md5,ea90b0495446d03e375aad42d598a9f9", - [ - "CHG_OB_Ecoli_10K_methylated_R1_bismark_hisat2_pe.txt.gz:md5,6d2ca2e6548640e3885c94a3ca6beae0", - "CHG_OB_SRR389222.merged_bismark_hisat2.txt.gz:md5,eeb08e87d7e3dca0acbb2c5ba2be66fb", - "CHG_OT_Ecoli_10K_methylated_R1_bismark_hisat2_pe.txt.gz:md5,5e5aefaa3f63e73f30342ad843eb210b", - "CHG_OT_SRR389222.merged_bismark_hisat2.txt.gz:md5,7add3136b9f74de6aa83d38dde191060", - "CHH_OB_Ecoli_10K_methylated_R1_bismark_hisat2_pe.txt.gz:md5,abd48ddf1c9e844d8164de5150850d10", - "CHH_OB_SRR389222.merged_bismark_hisat2.txt.gz:md5,a135c7e8a6c1b909a318ef17d47dca94", - "CHH_OT_Ecoli_10K_methylated_R1_bismark_hisat2_pe.txt.gz:md5,978ad87fef01e39283a620253320ee45", - "CHH_OT_SRR389222.merged_bismark_hisat2.txt.gz:md5,8f1910f962b724592546a6187ad0a677", - "CpG_OB_Ecoli_10K_methylated_R1_bismark_hisat2_pe.txt.gz:md5,51f8b079b9fd91e23e495d9e0e289530", - "CpG_OB_SRR389222.merged_bismark_hisat2.txt.gz:md5,b8b2de10044869b6c1097afc21c878a0", - "CpG_OT_Ecoli_10K_methylated_R1_bismark_hisat2_pe.txt.gz:md5,9712eef973883f44dcc0a307af28ba70", - "CpG_OT_SRR389222.merged_bismark_hisat2.txt.gz:md5,877b026664516cb8851c1d80bf0d8495" - ], - "Ecoli_10K_methylated_R1_bismark_hisat2_pe.bismark.cov.gz:md5,d8342eca72089408d8e4d7c5ec5e95bf", - "SRR389222.merged_bismark_hisat2.bismark.cov.gz:md5,29943eb00da6057a67e5530580668130", - "Ecoli_10K_methylated_R1_bismark_hisat2_pe_splitting_report.txt:md5,76868c2015864a3f7c2b4cd1738e4765", - "SRR389222.merged_bismark_hisat2_splitting_report.txt:md5,4a9e54ffb48c9bb1e5ac33aa77b25f5c", - "SRR389222.merged.fastq.gz:md5,47e1d7461d511a970e80085dd6454775", - "genome_results.txt:md5,58bf4e22f697120806f09b48d9ffdc9e", - "genome_results.txt:md5,ae5b10e9a3ffa1ac7a4f4e736228ec49" - ], - "timestamp": "2023-12-22T22:37:54.382841284" - } -} \ No newline at end of file diff --git a/tests/pipeline/bwameth/main.nf.test b/tests/pipeline/bwameth/main.nf.test deleted file mode 100644 index 1863371e..00000000 --- a/tests/pipeline/bwameth/main.nf.test +++ /dev/null @@ -1,123 +0,0 @@ -nextflow_pipeline { - - name "Test Workflow main.nf" - script "main.nf" - - tag "bwameth" - tag "pipeline" - - test("Bwameth Single-End") { - when { - params { - aligner = "bwameth" - save_reference = true - outdir = "$outputDir" - } - } - - then { - assertAll( - { assert workflow.success }, - { assert snapshot(UTILS.removeNextflowVersion("$outputDir")).match("single_end_software_versions") }, - { assert snapshot(path("$outputDir/bwameth/alignments/samtools_stats/Ecoli.flagstat"), - path("$outputDir/bwameth/alignments/samtools_stats/Ecoli.stats"), - path("$outputDir/bwameth/alignments/samtools_stats/SRR389222.flagstat"), - path("$outputDir/bwameth/alignments/samtools_stats/SRR389222.stats"), - path("$outputDir/bwameth/deduplicated/Ecoli.markdup.sorted.bam"), - path("$outputDir/bwameth/deduplicated/Ecoli.markdup.sorted.bam.bai"), - path("$outputDir/bwameth/deduplicated/SRR389222.markdup.sorted.bam"), - path("$outputDir/bwameth/deduplicated/SRR389222.markdup.sorted.bam.bai"), - path("$outputDir/bwameth/reference_genome/").list(), - path("$outputDir/cat/SRR389222.merged.fastq.gz"), - path("$outputDir/methyldackel/Ecoli.markdup.sorted_CpG.bedGraph"), - path("$outputDir/methyldackel/SRR389222.markdup.sorted_CpG.bedGraph"), - path("$outputDir/methyldackel/mbias/Ecoli.mbias.txt"), - path("$outputDir/methyldackel/mbias/SRR389222.mbias.txt"), - path("$outputDir/qualimap/Ecoli/genome_results.txt"), - path("$outputDir/qualimap/SRR389222/genome_results.txt")).match("single_end") }, - { assert new File("$outputDir/fastqc/Ecoli_1_fastqc.html").exists() }, - { assert new File("$outputDir/fastqc/Ecoli_2_fastqc.html").exists() }, - { assert new File("$outputDir/fastqc/SRR389222_fastqc.html").exists() }, - { assert new File("$outputDir/multiqc/bwameth/multiqc_report.html").exists() }, - { assert new File("$outputDir/trimgalore/logs/Ecoli_1.fastq.gz_trimming_report.txt").exists() }, - { assert new File("$outputDir/trimgalore/logs/Ecoli_2.fastq.gz_trimming_report.txt").exists() }, - { assert new File("$outputDir/trimgalore/logs/SRR389222.fastq.gz_trimming_report.txt").exists() }, - { assert new File("$outputDir/bwameth/deduplicated/picard_metrics/Ecoli.markdup.sorted.MarkDuplicates.metrics.txt").exists() }, - { assert new File("$outputDir/bwameth/deduplicated/picard_metrics/SRR389222.markdup.sorted.MarkDuplicates.metrics.txt").exists() } - ) - } - } - - test("Bwameth Single-End With Index") { - when { - params { - aligner = "bwameth" - bwa_meth_index = "https://github.com/nf-core/test-datasets/raw/methylseq/reference/Bwameth_Index.tar.gz" - methyl_kit = true - outdir = "$outputDir" - } - } - - then { - assertAll( - { assert workflow.success }, - ) - } - } - - test("Bwameth Single-End RRBS") { - when { - params { - aligner = "bwameth" - save_reference = true - skip_trimming = true - rrbs = true - save_reference = true - outdir = "$outputDir" - } - } - - then { - assertAll( - { assert workflow.success }, - { assert snapshot(UTILS.removeNextflowVersion("$outputDir")).match("single_end_rrbs_software_versions") }, - { assert snapshot(path("$outputDir/bwameth/alignments/samtools_stats/Ecoli.flagstat"), - path("$outputDir/bwameth/alignments/samtools_stats/Ecoli.stats"), - path("$outputDir/bwameth/alignments/samtools_stats/SRR389222.flagstat"), - path("$outputDir/bwameth/alignments/samtools_stats/SRR389222.stats"), - path("$outputDir/bwameth/reference_genome/").list(), - path("$outputDir/cat/SRR389222.merged.fastq.gz"), - path("$outputDir/methyldackel/Ecoli.sorted_CpG.bedGraph"), - path("$outputDir/methyldackel/SRR389222.sorted_CpG.bedGraph"), - path("$outputDir/methyldackel/mbias/Ecoli.mbias.txt"), - path("$outputDir/methyldackel/mbias/SRR389222.mbias.txt"), - path("$outputDir/qualimap/Ecoli/genome_results.txt"), - path("$outputDir/qualimap/SRR389222/genome_results.txt")).match("single_end_rrbs") }, - { assert new File("$outputDir/fastqc/Ecoli_1_fastqc.html").exists() }, - { assert new File("$outputDir/fastqc/Ecoli_2_fastqc.html").exists() }, - { assert new File("$outputDir/fastqc/SRR389222_fastqc.html").exists() }, - { assert new File("$outputDir/multiqc/bwameth/multiqc_report.html").exists() } - ) - } - } - - test("Bwameth Single End RRBS With Index") { - when { - params { - aligner = "bwameth" - skip_trimming = true - rrbs = true - bwa_meth_index = "https://github.com/nf-core/test-datasets/raw/methylseq/reference/Bwameth_Index.tar.gz" - methyl_kit = true - outdir = "$outputDir" - } - } - - then { - assertAll( - { assert workflow.success }, - ) - } - } - -} diff --git a/tests/pipeline/bwameth/main.nf.test.snap b/tests/pipeline/bwameth/main.nf.test.snap deleted file mode 100644 index fccd1fc2..00000000 --- a/tests/pipeline/bwameth/main.nf.test.snap +++ /dev/null @@ -1,72 +0,0 @@ -{ - "single_end_software_versions": { - "content": [ - "{BWAMETH_ALIGN={bwameth=0.2.2}, BWAMETH_INDEX={bwameth=0.2.2}, CAT_FASTQ={cat=8.30}, CUSTOM_DUMPSOFTWAREVERSIONS={python=3.12.0, yaml=6.0.1}, FASTQC={fastqc=0.12.1}, QUALIMAP_BAMQC={qualimap=2.2.2-dev}, TRIMGALORE={cutadapt=3.4, trimgalore=0.6.7}, Workflow={nf-core/methylseq=2.6.0}}" - ], - "timestamp": "2024-01-05T13:46:07.95961601" - }, - "single_end_rrbs_software_versions": { - "content": [ - "{BWAMETH_ALIGN={bwameth=0.2.2}, BWAMETH_INDEX={bwameth=0.2.2}, CAT_FASTQ={cat=8.30}, CUSTOM_DUMPSOFTWAREVERSIONS={python=3.12.0, yaml=6.0.1}, FASTQC={fastqc=0.12.1}, QUALIMAP_BAMQC={qualimap=2.2.2-dev}, Workflow={nf-core/methylseq=2.6.0}}" - ], - "timestamp": "2024-01-05T13:47:24.172597347" - }, - "single_end": { - "content": [ - "Ecoli.flagstat:md5,f520e87cc4050799a0dbed72909572ec", - "Ecoli.stats:md5,c09155913e0164da9010a0840618cf1f", - "SRR389222.flagstat:md5,f5a2dd6c9532bbfb8fe78aad010d8737", - "SRR389222.stats:md5,cc81b8c56d038e437a99d9c04b61ce2d", - "Ecoli.markdup.sorted.bam:md5,0d1c814b476521286a829dc64fc3490a", - "Ecoli.markdup.sorted.bam.bai:md5,befef6ce0a34e2ce7f66c073d9bf4abd", - "SRR389222.markdup.sorted.bam:md5,46b5b49280efe5d5c5d1692092e8926f", - "SRR389222.markdup.sorted.bam.bai:md5,ad6cfa0344e1ba5b9057ea39f337b3d2", - [ - [ - "genome.fa:md5,923a0a268ad29fee3c3437d00f9970de", - "genome.fa.bwameth.c2t:md5,e51d48ed28fa0c26e2f9c9f13d09403b", - "genome.fa.bwameth.c2t.amb:md5,010a242c6764efb30141868a45d698b3", - "genome.fa.bwameth.c2t.ann:md5,09b4db3d87a2d4dac9e10e807f377110", - "genome.fa.bwameth.c2t.bwt:md5,4646f8ae6bd523b7f4106bbd32eff95e", - "genome.fa.bwameth.c2t.pac:md5,a662d7add09698e25c8152fd2306ec66", - "genome.fa.bwameth.c2t.sa:md5,4a1e905b828396a1909669bc9c573d8d" - ] - ], - "SRR389222.merged.fastq.gz:md5,47e1d7461d511a970e80085dd6454775", - "Ecoli.markdup.sorted_CpG.bedGraph:md5,00132adede8128b3a111136713a2a4ff", - "SRR389222.markdup.sorted_CpG.bedGraph:md5,febd0f93f46dfccabf69dbba3f518add", - "Ecoli.mbias.txt:md5,3a448a2a6364b2de3129365a271c0534", - "SRR389222.mbias.txt:md5,fce04d733e066d0b933cedc602e2af81", - "genome_results.txt:md5,d1a1b49086982318f0f94ba7059f71a3", - "genome_results.txt:md5,c786cc367645cee286360707e2624dca" - ], - "timestamp": "2023-12-20T03:21:55.358959756" - }, - "single_end_rrbs": { - "content": [ - "Ecoli.flagstat:md5,7c3bae0f9c700dde88785a7e94c6ae2c", - "Ecoli.stats:md5,46eaf2559610c864bc4d27a08a0645b4", - "SRR389222.flagstat:md5,a90f1bdcb30f4d0597ccf69fe0b37b1f", - "SRR389222.stats:md5,b99800367e21a0c7c0d87e5fe29d9609", - [ - [ - "genome.fa:md5,923a0a268ad29fee3c3437d00f9970de", - "genome.fa.bwameth.c2t:md5,e51d48ed28fa0c26e2f9c9f13d09403b", - "genome.fa.bwameth.c2t.amb:md5,010a242c6764efb30141868a45d698b3", - "genome.fa.bwameth.c2t.ann:md5,09b4db3d87a2d4dac9e10e807f377110", - "genome.fa.bwameth.c2t.bwt:md5,4646f8ae6bd523b7f4106bbd32eff95e", - "genome.fa.bwameth.c2t.pac:md5,a662d7add09698e25c8152fd2306ec66", - "genome.fa.bwameth.c2t.sa:md5,4a1e905b828396a1909669bc9c573d8d" - ] - ], - "SRR389222.merged.fastq.gz:md5,47e1d7461d511a970e80085dd6454775", - "Ecoli.sorted_CpG.bedGraph:md5,41f4218573d5e4ff7016ffb42f13a551", - "SRR389222.sorted_CpG.bedGraph:md5,a754358e8b95db30602aa29835a896bd", - "Ecoli.mbias.txt:md5,ec13da6deba1ce147624bce065ec5df6", - "SRR389222.mbias.txt:md5,fce04d733e066d0b933cedc602e2af81", - "genome_results.txt:md5,cd545aa1ee209a1683374bfb5731ab0c", - "genome_results.txt:md5,199902f9d8f10f73bcb0a1ce29ceca5d" - ], - "timestamp": "2023-12-20T03:38:43.324010795" - } -} \ No newline at end of file diff --git a/workflows/methylseq.nf b/workflows/methylseq.nf deleted file mode 100644 index a351316e..00000000 --- a/workflows/methylseq.nf +++ /dev/null @@ -1,260 +0,0 @@ -/* -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - PRINT PARAMS SUMMARY -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -*/ - -include { paramsSummaryLog; paramsSummaryMap; fromSamplesheet } from 'plugin/nf-validation' - -def logo = NfcoreTemplate.logo(workflow, params.monochrome_logs) -def citation = '\n' + WorkflowMain.citation(workflow) + '\n' -def summary_params = paramsSummaryMap(workflow) - -// Print parameter summary log to screen -log.info logo + paramsSummaryLog(workflow) + citation - -WorkflowMethylseq.initialise(params, log) - -/* -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - CONFIG FILES -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -*/ - -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() -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) - -/* -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - IMPORT LOCAL MODULES/SUBWORKFLOWS -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -*/ - -// -// SUBWORKFLOWS: Consisting of a mix of local and nf-core/modules -// -include { PREPARE_GENOME } from '../subworkflows/local/prepare_genome' - -// Aligner: bismark or bismark_hisat -if( params.aligner =~ /bismark/ ){ - include { BISMARK } from '../subworkflows/local/bismark' -} -// Aligner: bwameth -else if ( params.aligner == 'bwameth' ){ - include { BWAMETH } from '../subworkflows/local/bwameth' -} - -/* -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - IMPORT NF-CORE MODULES/SUBWORKFLOWS -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -*/ - -// -// MODULE: Installed directly from nf-core/modules -// -include { CAT_FASTQ } from '../modules/nf-core/cat/fastq/main' -include { FASTQC } from '../modules/nf-core/fastqc/main' -include { MULTIQC } from '../modules/nf-core/multiqc/main' -include { CUSTOM_DUMPSOFTWAREVERSIONS } from '../modules/nf-core/custom/dumpsoftwareversions/main' -include { TRIMGALORE } from '../modules/nf-core/trimgalore/main' -include { QUALIMAP_BAMQC } from '../modules/nf-core/qualimap/bamqc/main' -include { PRESEQ_LCEXTRAP } from '../modules/nf-core/preseq/lcextrap/main' - -/* -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - RUN MAIN WORKFLOW -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -*/ - -// Info required for completion email and summary -def multiqc_report = [] - -workflow METHYLSEQ { - - ch_versions = Channel.empty() - - // - // SUBWORKFLOW: Prepare any required reference genome indices - // - PREPARE_GENOME() - ch_versions = ch_versions.mix(PREPARE_GENOME.out.versions) - - // - // Create input channel from input file provided through params.input - // - Channel - .fromSamplesheet("input") - .map { - meta, fastq_1, fastq_2 -> - if (!fastq_2) { - return [ meta + [ single_end:true ], [ fastq_1 ] ] - } else { - return [ meta + [ single_end:false ], [ fastq_1, fastq_2 ] ] - } - } - .groupTuple() - .map { - meta, fastq -> - def meta_clone = meta.clone() - parts = meta_clone.id.split('_') - meta_clone.id = parts.length > 1 ? parts[0..-2].join('_') : meta_clone.id - [ meta_clone, fastq ] - } - .groupTuple(by: [0]) - .branch { - meta, fastq -> - single: fastq.size() == 1 - return [ meta, fastq.flatten() ] - multiple: fastq.size() > 1 - return [ meta, fastq.flatten() ] - } - .set { ch_fastq } - - // - // MODULE: Concatenate FastQ files from same sample if required - // - CAT_FASTQ ( - ch_fastq.multiple - ) - .reads - .mix(ch_fastq.single) - .set { ch_cat_fastq } - ch_versions = ch_versions.mix(CAT_FASTQ.out.versions.first()) - - // - // MODULE: Run FastQC - // - FASTQC ( - ch_cat_fastq - ) - ch_versions = ch_versions.mix(FASTQC.out.versions.first()) - - /* - * MODULE: Run TrimGalore! - */ - if (!params.skip_trimming) { - TRIMGALORE(ch_cat_fastq) - reads = TRIMGALORE.out.reads - ch_versions = ch_versions.mix(TRIMGALORE.out.versions.first()) - } else { - reads = ch_cat_fastq - } - - - - /* - * SUBWORKFLOW: Align reads, deduplicate and extract methylation with Bismark - */ - - // Aligner: bismark or bismark_hisat - if( params.aligner =~ /bismark/ ){ - - /* - * Run Bismark alignment + downstream processing - */ - BISMARK ( - reads, - PREPARE_GENOME.out.bismark_index, - params.skip_deduplication || params.rrbs, - params.cytosine_report || params.nomeseq - ) - ch_versions = ch_versions.mix(BISMARK.out.versions.unique{ it.baseName }) - ch_bam = BISMARK.out.bam - ch_dedup = BISMARK.out.dedup - ch_aligner_mqc = BISMARK.out.mqc - } - // Aligner: bwameth - else if ( params.aligner == 'bwameth' ){ - - BWAMETH ( - reads, - PREPARE_GENOME.out.bwameth_index, - PREPARE_GENOME.out.fasta, - PREPARE_GENOME.out.fasta_index, - params.skip_deduplication || params.rrbs, - ) - ch_versions = ch_versions.mix(BWAMETH.out.versions.unique{ it.baseName }) - ch_bam = BWAMETH.out.bam - ch_dedup = BWAMETH.out.dedup - ch_aligner_mqc = BWAMETH.out.mqc - } - - /* - * MODULE: Qualimap BamQC - */ - QUALIMAP_BAMQC ( - ch_dedup, - params.bamqc_regions_file ? Channel.fromPath( params.bamqc_regions_file, checkIfExists: true ).toList() : [] - ) - ch_versions = ch_versions.mix(QUALIMAP_BAMQC.out.versions.first()) - - /* - * MODULE: Run Preseq - */ - PRESEQ_LCEXTRAP ( - ch_bam - ) - ch_versions = ch_versions.mix(PRESEQ_LCEXTRAP.out.versions.first()) - - CUSTOM_DUMPSOFTWAREVERSIONS ( - ch_versions.unique().collectFile(name: 'collated_versions.yml') - ) - - // - // MODULE: MultiQC - // - if (!params.skip_multiqc) { - workflow_summary = WorkflowMethylseq.paramsSummaryMultiqc(workflow, summary_params) - ch_workflow_summary = Channel.value(workflow_summary) - - methods_description = WorkflowMethylseq.methodsDescriptionText(workflow, ch_multiqc_custom_methods_description, params) - ch_methods_description = Channel.value(methods_description) - - ch_multiqc_files = Channel.empty() - ch_multiqc_files = ch_multiqc_files.mix(ch_workflow_summary.collectFile(name: 'workflow_summary_mqc.yaml')) - ch_multiqc_files = ch_multiqc_files.mix(ch_methods_description.collectFile(name: 'methods_description_mqc.yaml')) - ch_multiqc_files = ch_multiqc_files.mix(CUSTOM_DUMPSOFTWAREVERSIONS.out.mqc_yml.collect()) - ch_multiqc_files = ch_multiqc_files.mix(QUALIMAP_BAMQC.out.results.collect{ it[1] }.ifEmpty([])) - ch_multiqc_files = ch_multiqc_files.mix(PRESEQ_LCEXTRAP.out.log.collect{ it[1] }.ifEmpty([])) - ch_multiqc_files = ch_multiqc_files.mix(ch_aligner_mqc.ifEmpty([])) - if (!params.skip_trimming) { - ch_multiqc_files = ch_multiqc_files.mix(TRIMGALORE.out.log.collect{ it[1] }) - } - ch_multiqc_files = ch_multiqc_files.mix(FASTQC.out.zip.collect{ it[1] }.ifEmpty([])) - - MULTIQC ( - ch_multiqc_files.collect(), - ch_multiqc_config.toList(), - ch_multiqc_custom_config.toList(), - ch_multiqc_logo.toList() - ) - multiqc_report = MULTIQC.out.report.toList() - ch_versions = ch_versions.mix(MULTIQC.out.versions) - } -} - -/* -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - COMPLETION EMAIL AND SUMMARY -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -*/ - -workflow.onComplete { - if (params.email || params.email_on_fail) { - NfcoreTemplate.email(workflow, params, summary_params, projectDir, log, multiqc_report) - } - NfcoreTemplate.dump_parameters(workflow, params) - NfcoreTemplate.summary(workflow, params, log) - if (params.hook_url) { - NfcoreTemplate.IM_notification(workflow, params, summary_params, projectDir, log) - } -} - -/* -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - THE END -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -*/ diff --git a/workflows/methylseq/main.nf b/workflows/methylseq/main.nf new file mode 100644 index 00000000..0cb93f59 --- /dev/null +++ b/workflows/methylseq/main.nf @@ -0,0 +1,198 @@ +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + IMPORT MODULES / SUBWORKFLOWS / FUNCTIONS +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +*/ + + +include { FASTQC } from '../../modules/nf-core/fastqc/main' +include { TRIMGALORE } from '../../modules/nf-core/trimgalore/main' +include { QUALIMAP_BAMQC } from '../../modules/nf-core/qualimap/bamqc/main' +include { PRESEQ_LCEXTRAP } from '../../modules/nf-core/preseq/lcextrap/main' +include { MULTIQC } from '../../modules/nf-core/multiqc/main' +include { CAT_FASTQ } from '../../modules/nf-core/cat/fastq/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_methylseq_pipeline' +include { validateInputSamplesheet } from '../../subworkflows/local/utils_nfcore_methylseq_pipeline' +include { BISMARK } from '../../subworkflows/local/bismark/' +include { BWAMETH } from '../../subworkflows/local/bwameth' + +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + RUN MAIN WORKFLOW +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +*/ + +workflow METHYLSEQ { + + take: + samplesheet // channel: samplesheet read in from --input + ch_versions // channel: [ path(versions.yml) ] + ch_fasta // channel: path(genome.fasta) + ch_fasta_index // channel: path(star/index/) + ch_bismark_index // channel: path(star/index/) + ch_bwameth_index // channel: path(star/index/) + + main: + + ch_multiqc_files = Channel.empty() + + // + // Branch channels from input samplesheet channel + // + samplesheet + .branch { meta, fastqs -> + single : fastqs.size() == 1 + return [ meta, fastqs.flatten() ] + multiple: fastqs.size() > 1 + return [ meta, fastqs.flatten() ] + } + .set { ch_samplesheet } + + // + // MODULE: Concatenate FastQ files from same sample if required + // + CAT_FASTQ (ch_samplesheet.multiple) + .reads + .mix(ch_samplesheet.single) + .set {ch_fastq} + ch_versions = ch_versions.mix(CAT_FASTQ.out.versions.first()) + + // + // MODULE: Run FastQC + // + FASTQC (ch_fastq) + ch_multiqc_files = ch_multiqc_files.mix(FASTQC.out.zip.collect{it[1]}) + ch_versions = ch_versions.mix(FASTQC.out.versions.first()) + + // + // MODULE: Run TrimGalore! + // + if (!params.skip_trimming) { + TRIMGALORE(ch_fastq) + reads = TRIMGALORE.out.reads + ch_versions = ch_versions.mix(TRIMGALORE.out.versions.first()) + } else { + reads = ch_fastq + } + + // + // SUBWORKFLOW: Align reads, deduplicate and extract methylation with Bismark + // + + // Aligner: bismark or bismark_hisat + if( params.aligner =~ /bismark/ ){ + // + // Run Bismark alignment + downstream processing + // + BISMARK ( + reads, + ch_fasta, + ch_bismark_index, + params.skip_deduplication || params.rrbs, + params.cytosine_report || params.nomeseq + ) + ch_versions = ch_versions.mix(BISMARK.out.versions.unique{ it.baseName }) + ch_bam = BISMARK.out.bam + ch_dedup = BISMARK.out.dedup + ch_aligner_mqc = BISMARK.out.mqc + } + // Aligner: bwameth + else if ( params.aligner == 'bwameth' ){ + + BWAMETH ( + reads, + ch_bwameth_index, + ch_fasta, + ch_fasta_index, + params.skip_deduplication || params.rrbs, + ) + ch_versions = ch_versions.mix(BWAMETH.out.versions.unique{ it.baseName }) + ch_bam = BWAMETH.out.bam + ch_dedup = BWAMETH.out.dedup + ch_aligner_mqc = BWAMETH.out.mqc + } + + // + // MODULE: Qualimap BamQC + // + QUALIMAP_BAMQC ( + ch_dedup, + params.bamqc_regions_file ? Channel.fromPath( params.bamqc_regions_file, checkIfExists: true ).toList() : [] + ) + ch_versions = ch_versions.mix(QUALIMAP_BAMQC.out.versions.first()) + + // + // MODULE: Run Preseq + // + PRESEQ_LCEXTRAP (ch_bam) + ch_versions = ch_versions.mix(PRESEQ_LCEXTRAP.out.versions.first()) + + // + // 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 + // + 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_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_workflow_summary.collectFile(name: 'workflow_summary_mqc.yaml')) + 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 + ) + ) + + ch_multiqc_files = ch_multiqc_files.mix(QUALIMAP_BAMQC.out.results.collect{ it[1] }.ifEmpty([])) + ch_multiqc_files = ch_multiqc_files.mix(PRESEQ_LCEXTRAP.out.log.collect{ it[1] }.ifEmpty([])) + ch_multiqc_files = ch_multiqc_files.mix(ch_aligner_mqc.ifEmpty([])) + if (!params.skip_trimming) { + ch_multiqc_files = ch_multiqc_files.mix(TRIMGALORE.out.log.collect{ it[1] }) + } + ch_multiqc_files = ch_multiqc_files.mix(FASTQC.out.zip.collect{ it[1] }.ifEmpty([])) + + MULTIQC ( + ch_multiqc_files.collect(), + ch_multiqc_config.toList(), + ch_multiqc_custom_config.toList(), + ch_multiqc_logo.toList(), + [], + [] + ) + + emit: + multiqc_report = MULTIQC.out.report.toList() // channel: /path/to/multiqc_report.html + versions = ch_versions // channel: [ path(versions.yml) ] +} + +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + THE END +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +*/ diff --git a/workflows/methylseq/nextflow.config b/workflows/methylseq/nextflow.config new file mode 100644 index 00000000..e1ee85ad --- /dev/null +++ b/workflows/methylseq/nextflow.config @@ -0,0 +1,20 @@ + +includeConfig "../../subworkflows/local/bismark/nextflow.config" +includeConfig "../../subworkflows/local/bwameth/nextflow.config" +includeConfig "../../subworkflows/local/prepare_genome/nextflow.config" + +includeConfig "../../modules/nf-core/fastqc/nextflow.config" +includeConfig "../../modules/nf-core/trimgalore/nextflow.config" +includeConfig "../../modules/nf-core/multiqc/nextflow.config" +includeConfig "../../modules/nf-core/preseq/lcextrap/nextflow.config" +includeConfig "../../modules/nf-core/qualimap/bamqc/nextflow.config" + +process { + + publishDir = [ + path: { "${params.outdir}/${task.process.tokenize(':')[-1].tokenize('_')[0].toLowerCase()}" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + +}
    Process Name \\", - " \\ Software Version
    CUSTOM_DUMPSOFTWAREVERSIONSpython3.12.0
    yaml6.0.1
    TOOL1tool10.11.9
    TOOL2tool21.9
    WorkflowNextflow
    File typeConventional base calls
    File typeConventional base calls
    File typeConventional base calls
    File typeConventional base calls
    File typeConventional base calls
    File typeConventional base calls
    File typeConventional base calls
    File typeConventional base calls
    File typeConventional base calls
    File typeConventional base calls
    File typeConventional base calls