diff --git a/.github/workflows/copyright-preamble.yml b/.github/workflows/copyright-preamble.yml index 50aa610ff..dae852eed 100644 --- a/.github/workflows/copyright-preamble.yml +++ b/.github/workflows/copyright-preamble.yml @@ -10,7 +10,7 @@ jobs: runs-on: ubuntu-latest steps: # Checking out the repository which is to be actioned - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 # Implementing action on repository - uses: VinnyBabuManjaly/copyright-action@v1.0.0 with: @@ -25,7 +25,7 @@ jobs: # Creates pull request with all changes in file - name: Create Pull Request - uses: peter-evans/create-pull-request@v4 + uses: peter-evans/create-pull-request@v5 with: commit-message: "chore: update copyright preamble" delete-branch: true diff --git a/.github/workflows/documentation.yml b/.github/workflows/documentation.yml index 226a47ce4..2db38f85c 100644 --- a/.github/workflows/documentation.yml +++ b/.github/workflows/documentation.yml @@ -18,7 +18,7 @@ jobs: deploy: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: SetUp Python uses: actions/setup-python@v4 diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 6c466565a..828c4acb9 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -13,7 +13,7 @@ jobs: runs-on: ubuntu-latest if: github.ref != 'refs/heads/master' steps: - - uses: khan/pull-request-workflow-cancel@1.0.0 + - uses: khan/pull-request-workflow-cancel@1.0.1 with: workflows: "main.yml" env: @@ -22,7 +22,7 @@ jobs: Formatting: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: Formatting uses: github/super-linter@v5.0.0 env: @@ -39,7 +39,7 @@ jobs: env: GISAID_API_TOKEN: ${{ secrets.GISAID_API_TOKEN }} steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: Lint workflow uses: snakemake/snakemake-github-action@v1.25.1 with: @@ -55,7 +55,7 @@ jobs: # runs-on: ubuntu-latest # if: github.ref != 'refs/heads/master' # steps: - # - uses: actions/checkout@v2 + # - uses: actions/checkout@v4 # - uses: actions/setup-python@v4 # - uses: pre-commit/action@v3.0.0 @@ -75,7 +75,7 @@ jobs: # technology: [all, illumina, ion] seq_method: [shotgun, amplicon] steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - uses: actions/setup-python@v4 with: python-version: '3.11' @@ -192,7 +192,7 @@ jobs: ] # generate_test_cases, steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 # - name: Cache conda dependencies # uses: actions/cache@v2 diff --git a/.github/workflows/release-please.yml b/.github/workflows/release-please.yml index 4811207a7..a944169b2 100644 --- a/.github/workflows/release-please.yml +++ b/.github/workflows/release-please.yml @@ -68,14 +68,14 @@ jobs: remove-android: "true" - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v4 - name: Space run: | echo "Free space:" df -h - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: Checkout release PR locally if: ${{ steps.pr_created.outputs.pr == 'true' && steps.release.outputs.release_created != 'true' }} @@ -140,7 +140,7 @@ jobs: - name: Build and push if: ${{ steps.release.outputs.release_created == 'true' }} - uses: docker/build-push-action@v3 + uses: docker/build-push-action@v5 with: context: . push: true diff --git a/.github/workflows/update-pangolin.yaml b/.github/workflows/update-pangolin.yaml index 99a9e4b53..bdb8d0557 100644 --- a/.github/workflows/update-pangolin.yaml +++ b/.github/workflows/update-pangolin.yaml @@ -9,7 +9,7 @@ jobs: Create-PR-for-new-Pangolin-release: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: Install mamba uses: conda-incubator/setup-miniconda@v2 @@ -37,7 +37,7 @@ jobs: - name: Create Pull Request if: ${{ env.LATEST_PANGOLIN != env.CURRENT_PANGOLIN }} id: cpr - uses: peter-evans/create-pull-request@v4 + uses: peter-evans/create-pull-request@v5 with: token: ${{ secrets.GITHUB_TOKEN }} committer: GitHub diff --git a/CHANGELOG.md b/CHANGELOG.md index ac27577da..5f16dd03d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,28 @@ # Changelog +## [0.16.0](https://github.com/IKIM-Essen/uncovar/compare/v0.15.1...v0.16.0) (2023-11-16) + + +### Features + +* Update README.md for dark/light theme ([#614](https://github.com/IKIM-Essen/uncovar/issues/614)) ([33ac5f7](https://github.com/IKIM-Essen/uncovar/commit/33ac5f7b4f7af8bbb500e9f531ccbdc45ac9427f)) + + +### Bug Fixes + +* changes in path requirements for snakedeploy ([#590](https://github.com/IKIM-Essen/uncovar/issues/590)) ([406d456](https://github.com/IKIM-Essen/uncovar/commit/406d456edd15715f7e14338b8195d2a09a807e49)) +* improved clonality event definition, usage of major subclone for assembly polishing; upgrade to varlociraptor 6.0 ([#585](https://github.com/IKIM-Essen/uncovar/issues/585)) ([aced95e](https://github.com/IKIM-Essen/uncovar/commit/aced95e798fd0483e99120550f49614e680f56dd)) +* QA genome generation ([#613](https://github.com/IKIM-Essen/uncovar/issues/613)) ([2bb74bf](https://github.com/IKIM-Essen/uncovar/commit/2bb74bfc26dee80af7d04089aafe636ea7c6d76a)) +* switch from jupyter notebook to script ([#598](https://github.com/IKIM-Essen/uncovar/issues/598)) ([d0f293d](https://github.com/IKIM-Essen/uncovar/commit/d0f293d2b8136fb0d8ef3753733ab1d30fb20d56)) +* update multiqc ([#607](https://github.com/IKIM-Essen/uncovar/issues/607)) ([0070d89](https://github.com/IKIM-Essen/uncovar/commit/0070d8927290dd01f418b876b60f3405158f1ab9)) +* use homopolymer-pair-HMM-mode of Varlociraptor in case of nanopore reads ([505a271](https://github.com/IKIM-Essen/uncovar/commit/505a2714ba0e5642312051f5e5154f7d454ff57f)) +* use homopolymer-pair-HMM-mode of Varlociraptor in case of nanopore reads ([#587](https://github.com/IKIM-Essen/uncovar/issues/587)) ([9bc814f](https://github.com/IKIM-Essen/uncovar/commit/9bc814f7cb9e9d9e53d557d463e782801070b46e)) + + +### Performance Improvements + +* update to varlociraptor 8.4 ([#596](https://github.com/IKIM-Essen/uncovar/issues/596)) ([34701af](https://github.com/IKIM-Essen/uncovar/commit/34701af485aa1ec199a418ec1487a97677f624ca)) + ## [0.15.1](https://github.com/IKIM-Essen/uncovar/compare/v0.15.0...v0.15.1) (2022-11-30) diff --git a/README.md b/README.md index 0cbd7b4f2..85ddca2b2 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,12 @@ # UnCoVar -![UnCoVar2](https://user-images.githubusercontent.com/77535027/133610563-d190e25c-504e-4953-92dd-f84a5b4a1191.png) + + + + + UnCoVar Logo dark/light + + ## SARS-CoV-2 Variant Calling and Lineage Assignment diff --git a/config/config.yaml b/config/config.yaml index afea4a946..898b305ac 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -72,12 +72,12 @@ assembly: # assemblers used for shotgun sequencing with on Illumina technology shotgun: "megahit-std" # assemblers used for amplicon sequencing with on Illumina technology - amplicon: "metaspades" + amplicon: "megahit-std" oxford nanopore: # assemblers used for shotgun sequencing with on Oxford Nanopore technology shotgun: "megahit-std" # assemblers used for amplicon sequencing with on Oxford Nanopore technology - amplicon: "spades" + amplicon: "megahit-std" # Medaka models are named to indicate i) the pore type, ii) the sequencing device (MinION or PromethION), iii) the basecaller variant, and iv) the basecaller version # with the format: {pore}_{device}_{caller variant}_{caller version} # See https://github.com/nanoporetech/medaka#models for more information. @@ -86,7 +86,7 @@ assembly: # assemblers used for shotgun sequencing with on Ion Torrent technology shotgun: "megahit-std" # assemblers used for amplicon sequencing with on Torrent technology - amplicon: "spades" + amplicon: "megahit-std" # minimum posterior probability for a clonal variant to be included in the generated pseudo-assembly min-variant-prob: 0.95 diff --git a/version.txt b/version.txt index e815b861f..04a373efe 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -0.15.1 +0.16.0 diff --git a/workflow/Snakefile b/workflow/Snakefile index d8f339ce5..cd146b369 100644 --- a/workflow/Snakefile +++ b/workflow/Snakefile @@ -21,7 +21,7 @@ report: "report/workflow.rst" container: "docker://condaforge/mambaforge" -containerized: "quay.io/uncovar/uncovar#0.15.1" +containerized: "quay.io/uncovar/uncovar#0.16.0" include: "rules/common.smk" diff --git a/workflow/envs/pangolin.yaml b/workflow/envs/pangolin.yaml index 93a50ace5..f6a26ad42 100644 --- a/workflow/envs/pangolin.yaml +++ b/workflow/envs/pangolin.yaml @@ -3,5 +3,4 @@ channels: - bioconda - nodefaults dependencies: - - pangolin =4.1.3 - - tabulate <0.9 # TODO remove once pangolin 4.1.3 is available in bioconda + - pangolin =4.3 diff --git a/workflow/envs/varlociraptor.yaml b/workflow/envs/varlociraptor.yaml index 151fb2668..8501cab77 100644 --- a/workflow/envs/varlociraptor.yaml +++ b/workflow/envs/varlociraptor.yaml @@ -3,4 +3,4 @@ channels: - bioconda - nodefaults dependencies: - - varlociraptor =6.0 + - varlociraptor =8.4 diff --git a/workflow/scripts/masking.py b/workflow/scripts/masking.py index 95fdb9d75..e02d46009 100644 --- a/workflow/scripts/masking.py +++ b/workflow/scripts/masking.py @@ -48,7 +48,6 @@ def get_base_count(pileupcolumn): for pileupread in pileupcolumn.pileups: # TODO Check pileupread for missing bases if not pileupread.is_del and not pileupread.is_refskip: - read_base = pileupread.alignment.query_sequence[pileupread.query_position] bases.append(read_base) @@ -102,7 +101,6 @@ def mask_sequence(sequence, coverages, base_counts): covered_postions = coverages.keys() for position, base in enumerate(sequence): - if position not in covered_postions: # TODO Check why there are postions that are not covered by any reads and are not Ns # sequence[position] = "N" @@ -160,10 +158,8 @@ def mask_sequence(sequence, coverages, base_counts): def write_sequence(sequence): - with pysam.FastxFile(snakemake.input.sequence) as infile, open( - snakemake.output.masked_sequence, mode="w" - ) as outfile: - print(">%s" % next(infile).name.split(".")[0], file=outfile) + with open(snakemake.output.masked_sequence, mode="w") as outfile: + print(">%s" % snakemake.wildcards.sample, file=outfile) print(sequence, file=outfile) diff --git a/workflow/scripts/quality-filter.py b/workflow/scripts/quality-filter.py index 7cc41b50c..68977de25 100644 --- a/workflow/scripts/quality-filter.py +++ b/workflow/scripts/quality-filter.py @@ -31,13 +31,11 @@ def get_identity(quast_report_paths: List[str]) -> dict: sample = path.dirname(report_path).split("/")[-1] # load report - report_df = pd.read_csv( - report_path, delimiter="\t", index_col=0, squeeze=True, names=["value"] - ) - + report_df = pd.read_csv(report_path, delimiter="\t", names=["name", "value"]) + report_df.set_index("name", inplace=True) # select genome fraction (%) try: - fraction = float(report_df.at["Genome fraction (%)"]) / 100 + fraction = float(report_df.at["Genome fraction (%)", "value"]) / 100 except: # no "Genome fraction (%)" in quast report. Case for not assemblable samples fraction = 0.0