From 7506035c5870f76c830390f83adbca38949c3077 Mon Sep 17 00:00:00 2001 From: eeaunin Date: Thu, 3 Oct 2024 13:39:57 +0100 Subject: [PATCH 1/6] Edited documentation files --- README.md | 59 ++--- docs/images/ascc_overview_diagram.png | Bin 0 -> 141420 bytes docs/output.md | 325 +++++++++++++------------- 3 files changed, 196 insertions(+), 188 deletions(-) create mode 100644 docs/images/ascc_overview_diagram.png diff --git a/README.md b/README.md index 25ab772d..bd1c78d1 100644 --- a/README.md +++ b/README.md @@ -8,30 +8,35 @@ --- -# THIS IS AN IN-DEVELOPMENT PIPELINE THAT IS CURRENTLY NOT READY FOR ANY USE - -AS SUCH YOU MAY FIND THAT THE DOCUMENTATION DOES NOT MATCH THE CODE AND IT MAY NOT WORK - -ONCE THE PIPELINE REACHES A USABLE STATE A TAGGED RELEASE/PRE-RELEASE WILL BE MADE - ---- - ## Introduction -**sanger-tol/ascc** is a bioinformatics pipeline that ... - - - - - - -1. Read QC ([`FastQC`](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/)) -2. Present QC for raw reads ([`MultiQC`](http://multiqc.info/)) +**sanger-tol/ascc** is a bioinformatics pipeline that is meant for detecting cobionts and contaminants in genome assemblies. ASCC stands for Assembly Screen for Cobionts and Contaminants. The pipeline aggregates tools such as BLAST, GC and coverage calculation, FCS-adaptor, FCS-GX, VecScreen, BlobToolKit, the BlobToolKit pipeline, Tiara, Kraken, Diamond BLASTX, and kmer counting and with kcounter+scipy. The main outputs are: +- A CSV table with taxonomic classifications of the sequences from the consitutent tools. +- A BlobToolKit dataset that can contain variables that are not present in BlobToolKit datasets produced by the BlobToolKit pipeline (https://github.com/sanger-tol/blobtoolkit) on its own. For example, ASCC can incorporate FCS-GX results into a BlobToolKit dataset. +- Individual report files for adapter, PacBio barcode and organellar contaminants. +The only required input file for ASCC is the assembly FASTA file. Optional inputs are sequencing reads and organellar FASTA files. All individual components of the pipeline are optional, so it is possible to do lightweight runs with assemblies that have a simple composition of species and comprehensive runs with assemblies with complex composition. + +![sanger-tol/ascc overview diagram](docs/images/ascc_overview_diagram.png) + + +1. Run a selection of processes from the list below (pick any that you think will be useful). +- FCS-GX +- FCS-adaptor +- VecScreen +- Tiara +- BlobToolKit Pipeline +- nt BLAST +- nr and Uniprot Diamond BLASTX +- GC and coverage calculation +- PacBio barcodes screen +- Organellar BLAST +- nt Kraken2 +- kmer counting + dimensionality reduction +2. Postprocess the results of the previous step to produce summary files. What processes were run in the previous step determines what summary files can be generated. The possible outputs are: +- CSV table of sequence classification results +- BlobToolKit dataset +- CSV table of average coverage per phylum +- Adapter and organellar contamination report files ## Usage @@ -63,8 +68,8 @@ Now, you can run the pipeline using: ```bash nextflow run sanger-tol/ascc \ -profile \ - --input samplesheet.csv \ - --outdir + --input YAML \ + --outdir -entry SANGERTOL_ASCC --include ALL ``` > **Warning:** @@ -74,11 +79,9 @@ nextflow run sanger-tol/ascc \ ## Credits -sanger-tol/ascc was originally written by eeaunin. - -We thank the following people for their extensive assistance in the development of this pipeline: +sanger-tol/ascc was written by Eerik Aunin, Damon Lee Pointon, James Torrance, Ying Sims and Will Eagles. Pipeline development was supervised by Shane A. McCarthy and Matthieu Muffato. - +We thank Michael Paulini, Camilla Santos, Noah Gettle and Ksenia Krasheninnikova for testing the pipeline. ## Contributions and Support diff --git a/docs/images/ascc_overview_diagram.png b/docs/images/ascc_overview_diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..71a5478d8f9738a6ecda8c629914a58c933c39fd GIT binary patch literal 141420 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

$Vj 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 Ady!z@-6VO*?8A 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 F{{b^A{v-eZ literal 0 HcmV?d00001 diff --git a/docs/output.md b/docs/output.md index 99d0d6b2..445becee 100644 --- a/docs/output.md +++ b/docs/output.md @@ -2,371 +2,376 @@ ## Introduction -This document describes the output produced by the pipeline. Most of the plots are taken from the MultiQC report, which summarises results at the end of the pipeline. +This document describes the output produced by the pipeline. The directories listed below will be created in the results directory after the pipeline has finished. All paths are relative to the top-level results directory. - - ## Pipeline overview The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes data using the following steps: +### Processes that produce the main outputs: -- [YamlInput](#yamlinput) - -- [Validate TaxID](#validate-taxid) - -- [Filter Fasta](#filter-fasta) - -- [GC Content](#gc-content) - -- [Generate Genome](#generate-genome) - -- [Trailing Ns Check](#trailing-ns-check) - -- [Get KMERS profile](#get-kmers-profile) - -- [Extract Tiara Hits](#extract-tiara-hits) - -- [Mito organellar blast](#mito-organellar-blast) - +- [Trailing Ns Check](#trailing-ns-check) +- [Mito Organellar Blast](#mito-organellar-blast) - - [Plastid organellar blast](#plastid-organellar-blast) - - [Run FCS Adaptor](#run-fcs-adaptor) - -- [Run FCS-GX](#run-fcs-gx) - - [Pacbio Barcode Check](#pacbio-barcode-check) - - [Run Read Coverage](#run-read-coverage) - -- [Run Vecscreen](#run-vecscreen) - -- [Run NT Kraken](#run-nt-kraken) - -- [Nucleotide Diamond Blast](#nucleotide-diamond-blast) - -- [Uniprot Diamond Blast](#uniprot-diamond-blast) - -- [Create BTK dataset](#create-btk-dataset) - -- [Autofilter and check assembly](#autofilter-and-check-assembly) - -- [Generate samplesheet](#generate-samplesheet) - +- [Run VecScreen](#run-vecscreen) - +- [Create BTK Dataset](#create-btk-dataset) - +- [Autofilter and Check Assembly](#autofilter-and-check-assembly) - - [Sanger-TOL BTK](#sanger-tol-btk) - - [Merge BTK datasets](#merge-btk-datasets) - - [ASCC Merge Tables](#ascc-merge-tables) - - [Pipeline information](#pipeline-information) - Report metrics generated during the workflow execution -### YamlInput +### Processes that produce intermediate outputs: +- [YamlInput](#yamlinput) - +- [Generate samplesheet](#generate-samplesheet) - +- [Validate TaxID](#validate-taxid) - +- [Generate Genome](#generate-genome) - +- [Filter Fasta](#filter-fasta) - +- [GC Content](#gc-content) - +- [Get kmers profile](#get-kmers-profile) - +- [Extract Tiara Hits](#extract-tiara-hits) - +- [Run FCS-GX](#run-fcs-gx) - +- [Run nt Kraken](#run-nt-kraken) - +- [nr Diamond BLASTX](#nr-diamond-blastx) - +- [Uniprot Diamond BLASTX](#uniprot-diamond-blastx) - + + +## Main outputs + +### Trailing Ns Check

Output files -- `NA` +- `trailingns/` + `*_trim_Ns` - A text file containing a report of trailing Ns found in the genome.
-YamlInput parses the input yaml into channels for later use in the pipeline. +A text file containing a report of trailing Ns found in the genome. Trailing Ns are when a nucleotide sequence starts or ends with Ns instead of A, G, C or T nucleotides. It is advisable to trim off the trailing Ns from sequences in the assembly. If the sequence remaining after trimming is shorter than 200 bp, the script recommends removing it from the assembly. -### Validate TaxID + +### Mito Organellar Blast
Output files - -- `NA` - +- `organelle/` + `*-mitochondrial_genome.contamination_recommendation` - A file that contains the names of sequences that are suspected mitochondrial contaminants in the nuclear DNA assembly, tagged as either "REMOVE" or "Investigate" depending on the BLAST hit alignment length and percentage identity. The file is empty if there are no suspected mitochondrial contaminants.
-Validate TaxID scans through the taxdump to ensure that the input taxid is present in the nxbi taxdump. +This subworkflow uses BLAST against a user-provided mitochondrial sequence to detect leftover organellar sequences in the assembly file that should contain only chromosomal DNA sequences. A BLAST nucleotide database is made from the user-provided organellar sequence. BLAST with the chromosomal DNA assembly is then ran against this database with the following settings: -task megablast -word_size 28 -best_hit_overhang 0.1 -best_hit_score_edge 0.1 -dust yes -evalue 0.0001 -perc_identity 80 -soft_masking true. The BLAST results are filtered to keep only hits with alignment length that is at least 200 bp. +Depending on the alignment length and percentage identity, the script can recommend an action for dealing with the putative organellar sequence: either "REMOVE" or "Investigate". -### Filter Fasta -
-Output files +### Plastid Organellar Blast -- `filter/` - `*filtered.fasta` - A fasta file that has been filtered for sequences below a given threshold. +
+- `organelle/` + `*-plastid_genome.contamination_recommendation` - A file that contains the names of sequences that are suspected plastid contaminants in the nuclear DNA assembly, tagged as either "REMOVE" or "Investigate" depending on the BLAST hit alignment length and percentage identity. The file is empty if there are no suspected mitochondrial contaminants.
-By default scaffolds above 1.9Gb are removed from the assembly, as scaffolds of this size are unlikely to truely have contamination. There is also the issue that scaffolds larger than this use a significant amount of resources which hinders production environments. +This subworkflow uses BLAST against a user-provided plastid sequence to detect leftover organellar sequences in the assembly file that should contain only chromosomal sequences. The method is the same as in the Mito Organellar Blast part. -### GC Content +### Run FCS-adaptor
Output files -- `gc/` - `*-GC_CONTENT.txt` - A text file describing the GC content of the input genome. +- `fcs/` + `*.fcs_adaptor_report.txt` - A text file containing potential adaptor sequences and locations. + `*.cleaned_sequences.fa.gz` - Cleaned FASTA file. + `*.fcs_adaptor.log` - Log of the FCS-adaptor run. + `*.pipeline_args.yaml` - Arguments to FCS-adaptor + `*.skipped_trims.jsonl` - Skipped sequences
-Calculating the GC content of the input genome. +FCS-adaptor (https://github.com/ncbi/fcs) is NCBI software for detecting adapter contamination in genome assemblies. FCS-adaptor uses a built-in database of adapter sequences, provided by NCBI. The FCS-adaptor report shows identified potential locations of retained adapter sequences from the sequencing run. -### Generate Genome + + +### Pacbio Barcode Check
Output files -- `generate/` - `*.genome` - An index-like file describing the input genome. +- `filter/` + `*_filtered.txt` - Text file log of PacBio barcode sequences found in the genome. The file is empty if no contamination was found.
-An index-like file containing the scaffold and scaffold length of the input genome. +Uses BlastN to identify retained PacBio multiplexing barcode contamination in the assembly. The PacBio multiplexing barcode sequences are stored as the pacbio_adaptors.fa file in the assets directory of this pipeline. -### Trailing Ns Check +### Run Read Coverage
Output files - -- `trailingns/` - `*_trim_Ns` - A text file containing a report of the Ns found in the genome. + `*.bam` - BAM file with aligned reads. + `*_average_coverage.txt` - Text file containing the coverage information for the genome
-A text file containing a report of the Ns found in the genome. +Mapping the read data to the input genome with minimap2 (https://github.com/lh3/minimap2) and calculating the average coverage per sequence. The reads used for mapping can be PacBio HiFi reads or paired end Illumina reads. -### Get KMERS profile +### Run VecScreen
Output files -- `get/` - `*_KMER_COUNTS.csv` - A csv file containing kmers and their counts. +- `summarise/` + `*.vecscreen_contamination` - A text file containing potential vector contaminant locations. The file is empty if no potential contaminants were found.
-A csv file containing kmers and their counts. +VecScreen (https://www.ncbi.nlm.nih.gov/tools/vecscreen/) is a tool for detecting adapter and vector contamination in genome assemblies. It is an older tool than FCS-adaptor. Its advantage over FCS-adaptor is that it can use a custom database of contaminant sequences made by the user, whereas FCS-adaptor comes with its built-in database. -### Extract Tiara Hits -
+ +### Create BTK Dataset + +
Output files -- `tiara/` - `*.{txt,txt.gz}` - A text file containing classifications of potential contaminants. - `log_*.{txt,txt.gz}` - A log of the tiara run. - `*.{fasta,fasta.gz}` - An output fasta file. +- `create/` + `btk_datasets/` - A BlobToolKit (https://blobtoolkit.genomehubs.org) dataset folder containing data compatible with BTK viewer (https://blobtoolkit.genomehubs.org/blobtools2/blobtools2-tutorials/opening-a-dataset-in-the-viewer/). + `btk_summary_table_full.tsv` - A TSV file summarising the contents of the BlobToolKit dataset. This file is created using the `blobtools filter --table` command of BlobToolKit.
-Tiara ... +Creates a BlobToolKit dataset folder compatible with BlobToolKit viewer (https://blobtoolkit.genomehubs.org/blobtools2/blobtools2-tutorials/opening-a-dataset-in-the-viewer/). The BlobToolKit dataset create by ASCC can contain much more variables than what the BlobToolKit pipeline (https://github.com/sanger-tol/blobtoolkit) produces. -### Mito Organellar Blast + +### Autofilter and Check Assembly
Output files -- `blast/` - `*.tsv` - A tsv file containing potential contaminants. +- `autofilter/` + `autofiltered.fasta` - The decontaminated input genome. The decontamination is based on the results of FCS-GX. + `ABNORMAL_CHECK.csv` - Combined FCS-GX and Tiara summary of contamination. + `assembly_filtering_removed_sequences.txt` - Sequences deemed contamination by FCS-GX (labelled with the EXCLUDE tag by FCS-GX) and removed from the above assembly. + `fcs-gx_alarm_indicator_file.txt` - Contains text to control the running of BlobToolKit pipeline. If enough contamination is found by FCS-GX, an alarm is triggered to switch on the running of BlobToolKit pipeline.
-A BlastN based subworkflow used on the input genome to filter potential contaminants from the genome. +Autofilter and check assembly returns a decontaminated genome file as well as summaries of the contamination found. + -### Chloro Organellar Blast +### Sanger-TOL BTK
Output files -- `blast/` - `*.tsv` - A tsv file containing potential contaminants. +- `sanger-tol-btk/` + `*_btk_out/blobtoolkit/${meta.id}*/` - The BlobToolKit dataset folder generated by the sanger-tol/blobtoolkit pipeline. + `*_btk_out/blobtoolkit/plots/` - BlobToolKit plots as PNG images, exported from the BlobToolKit dataset using blobtk (https://pypi.org/project/blobtk/). + `*_btk_out/blobtoolkit/${meta.id}*/summary.json.gz` - The summary.json.gz file of the BlobToolKit dataset. It contains assembly metrics such as + `*_btk_out/busco/*` - The BUSCO results returned by BlobToolKit. + `*_btk_out/multiqc/*` - The MultiQC results returned by BlobToolKit. + `blobtoolkit_pipeline_info` - The pipeline_info folder.
-A BlastN based subworkflow used on the input genome to filter potential contaminants from the genome. +Sanger-Tol/BlobToolKit (https://github.com/sanger-tol/blobtoolkit) is a Nextflow re-implementation of the Snakemake based BlobToolKit pipeline (https://github.com/blobtoolkit/pipeline) and produces interactive plots used to identify contamination or cobionts and separate these sequences from the main assembly. -### Run FCS Adaptor +### Merge BTK Datasets
Output files -- `fcs/` - `*.fcs_adaptor_report.txt` - A text file containing potential adaptor sequences and locations. - `*.cleaned_sequences.fa.gz` - Cleaned fasta file. - `*.fcs_adaptor.log` - Log of the fcs run. - `*.pipeline_args.yaml` - Arguments to FCS Adaptor - `*.skipped_trims.jsonl` - Skipped sequences +- `merge/` + `merged_datasets` - A BTK dataset. + `merged_datasets/btk_busco_summary_table_full.tsv` - A TSV file containing a summary of the btk busco results.
-FCS Adaptor Identified potential locations of retained adaptor sequences from the sequencing run. +This module merged the Create_btk_dataset folder with the Sanger-tol BTK dataset to create one unified dataset for use with btk viewer. -### Run FCS-GX +### ASCC Merge Tables
Output files -- `fcs/` - `*out/*.fcs_gx_report.txt` - A text file containing potential contaminant locations. - `out/*.taxonomy.rpt` - Taxonomy report of the potential contaminants. - +- `ASCC-main-output/` + `*_contamination_check_merged_table.csv` - A CSV table that contains the results of most parts of the pipeline (GC content, coverage, Tiara, Kraken, kmers dimensionality reduction, Diamond, BLAST, FCS-GX, BlobToolKit pipeline) for each sequence in the input assembly file. +If a set of prerequisite steps have been run (nt BLAST, nr Diamond, Uniprot Diamond, read mapping for coverage calculation, Tiara, nt Kraken and the creation of a BlobToolKit dataset), the pipeline tries to put together a phylum level combined classification of the input sequences. It first uses BlobToolKit's `bestsum_phylum`, then fills the gaps (caused by `no-hit` sequences) with results from Tiara and then the remaining gaps are filled with results from nt Kraken. The combined classification is in the `merged_classif` column. The `merged_classif_source` column says which tool's output the classification for each sequence is based on. The automated classification usually has some flaws in it but is still useful as a starting point for determining the phyla that the input sequences belong to. + `*_phylum_counts_and_coverage.csv` - A CSV report containing information on the hits per phylum and the average coverage per phylum. This file can only be generated if the`merged_classif` variable has been produced in the `*_contamination_check_merged_table.csv` table, as described above.
-FCS-GX Identified potential locations of contaminant sequences. +Merge Tables merged the summary reports from a number of modules in order to create a single set of reports. -### Pacbio Barcode Check +### Pipeline Information
Output files -- `filter/` - `*_filtered.txt` - Text file of barcodes found in the genome. +- `pipeline_info/` + - Reports generated by Nextflow: `execution_report.html`, `execution_timeline.html`, `execution_trace.txt` and `pipeline_dag.dot`/`pipeline_dag.svg`. + - Reports generated by the pipeline: `pipeline_report.html`, `pipeline_report.txt` and `software_versions.yml`. The `pipeline_report*` files will only be present if the `--email` / `--email_on_fail` parameter's are used when running the pipeline. + - Reformatted samplesheet files used as input to the pipeline: `samplesheet.valid.csv`.
-Uses BlastN to identify where given barcode sequences may be in the genome. +[Nextflow](https://www.nextflow.io/docs/latest/tracing.html) provides excellent functionality for generating various reports relevant to the running and execution of the pipeline. This will allow you to troubleshoot errors with the running of the pipeline, and also provide you with other information such as launch commands, run times and resource usage. -### Run Read Coverage + + +## Intermediate outputs +These files are produced by the pipeline's modules but they are stay in Nextflow's work directory and are not included on their own in the final output. + +### YamlInput
Output files -- `samtools/` - `*.bam` - Aligned BAM file. - `*_average_coverage.txt` - Text file containing the coverage information for the genome +- `NA`
-Mapping the read data to the input genome and calculating the average coverage across it. +YamlInput parses the input YAML file into channels for later use in the pipeline. -### Run Vecscreen +### Validate TaxID
Output files -- `summarise/` - `*.vecscreen_contamination` - A text file containing potential vector contaminant locations. +- `NA`
-Vecscreen identifies vector contamination in the input sequence. +Validate TaxID scans through the NCBI taxdump file to ensure that the taxonomy ID (taxID) provided by the user is present in the taxdump. The taxdump originates from https://ftp.ncbi.nlm.nih.gov/pub/taxonomy/. The taxID might be absent in the taxdump either because the user has provided a faulty value for taxID or the taxdump is out of date. -### Run NT Kraken +### Filter FASTA
Output files -- `kraken2/` - `*.classified{.,_}*'` - Fastq file containing classified sequence. - `*.unclassified{.,_}*'` - Fastq file containing unclassified sequence. - `*classifiedreads.txt` - A text file containing a report on reads which have been classified. - `*report.txt` - Report of Kraken2 run. -- `get/` - `*txt` - Text file containing lineage information of the reported meta genomic data. + +`*filtered.fasta` - A FASTA file that has been filtered to keep sequences below a given threshold of length.
-Kraken assigns taxonomic labels to metagenomic DNA sequences and optionally outputs the fastq of these data. +By default scaffolds above 1.9 Gb are removed from the assembly, as scaffolds of this size are unlikely to truely have contamination. There is also the issue that scaffolds larger than this use a significant amount of resources which hinders production environments. Furthermore, [FCS-GX](https://github.com/ncbi/fcs) does not work with sequences larger than 2 Gb. -### Nucleotide Diamond Blast +### GC Content
Output files -- `diamond/` - `*.txt` - A text file containing the genomic locations of hits and scores. -- `reformat/` - `*text` - A Reformated text file continaing the full genomic location of hits and scores. -- `convert/` - `*.hits` - A file containing all hits above the cutoff. +`*-GC_CONTENT.txt` - A tab separated table describing the GC content of the input genome. The first column contains the sequence names and the second column contains the GC content of each sequence. The GC content is expressed as a fraction: number of G and C nucleotides in the sequence divided by the number of all nucleotides in the sequence.
-Diamond Blast is a sequence aligner for translated and protein sequences, here it is used do identify contamination usin the NCBI db +Calculating the GC content of each sequence in the input genome. -### Uniprot Diamond Blast +### Generate Genome
Output files -- `diamond/` - `*.txt` - A text file containing the genomic locations of hits and scores. -- `reformat/` - `*text` - A Reformated text file continaing the full genomic location of hits and scores. -- `convert/` - `*.hits` - A file containing all hits above the cutoff. +`*.genome` - An index-like file describing the input genome.
-Diamond Blast is a sequence aligner for translated and protein sequences, here it is used do identify contamination usin the Uniprot db +An index-like file containing the scaffold and scaffold length of the input genome. + -### Create BTK dataset +### Get kmers Profile
Output files -- `create/` - `btk_datasets/` - A btk dataset folder containing data compatible with BTK viewer. - `btk_summary_table_full.tsv` - A TSV file summarising the dataset. +`*_KMER_COUNTS.csv` - A CSV file containing the counts of kmers (by default: 7mers) in each sequence in the assembly. +`KMERS_dim_reduction_embeddings_combined.csv` - A CSV file with the results of dimensionality reduction of kmer counts. The dimensionality reduction embeddings help to separate sequences in the assembly by their origin (sequences originating from the same species likely appear close together in an embedding). When setting up a run, the user can choose multiple methods for dimensionality reduction. +
-Create BTK, creates a BTK_dataset folder compatible with BTK viewer. +A CSV file containing the counts of kmers (by default: 7mers) in each sequence in the assembly. Also, a file with the results of dimensionality reduction of kmer counts. +The following dimensionality reduction methods are available: PCA (principal component analysis), kernel PCA, PCA with SVD (singular value decomposition) solver, UMAP (uniform manifold approximation and projection), t-SNE (t-distributed stochastic neighbor embedding), LLE (locally linear embedding), MDS (multidimensional scaling), SE (spectral embedding), random trees, autoencoder and NMF (non-negative matrix factorisation). +The first two dimensions of the dimensionality reduction embeddings are used as the x and y coordinate when visualising the results in BlobToolKit. -### Autofilter and check assembly +### Extract Tiara Hits
Output files -- `autofilter/` - `autofiltered.fasta` - The decontaminated input genome. - `ABNORMAL_CHECK.csv` - Combined FCS and Tiara summary of contamination. - `assembly_filtering_removed_sequences.txt` - Sequences deemed contamination and removed from the above assembly. - `fcs-gx_alarm_indicator_file.txt` - Contains text to control the running of Blobtoolkit. +`TIARA.txt` - A text file containing classifications of the input DNA sequences. Each sequence gets assigned one label out of these: archaea, bacteria, prokarya, eukarya, organelle and unknown). +`log_*.{txt}` - A log of the Tiara run.
-Autofilter and check assembly returns a decontaminated genome file as well as summaries of the contamination found. +Tiara (https://github.com/ibe-uw/tiara) uses a neural network to classify DNA sequences. -### Generate samplesheet +### Run FCS-GX
Output files -- `generate/` - `*.csv` - A CSV file containing data locations, for use in Blobtoolkit. +- `fcs/` + `*out/*.fcs_gx_report.txt` - A text file containing potential contaminant locations. + `out/*.taxonomy.rpt` - Taxonomy report of the potential contaminants.
-This produces a CSV containing information on the read data for use in BlobToolKit. +FCS-GX (https://github.com/ncbi/fcs) is NCBI software that detects contaminants in genome assemblies using a cross species aligner. It uses its own database, provided by NCBI. -### Sanger-TOL BTK +### Run nt Kraken
Output files -- `sanger/` - `*_btk_out/blobtoolkit/${meta.id}*/` - The BTK dataset folder generated by BTK. - `*_btk_out/blobtoolkit/plots/` - The plots for display in BTK Viewer. - `*_btk_out/blobtoolkit/${meta.id}*/summary.json.gz` - The Summary.json file... - `*_btk_out/busco/*` - The BUSCO results returned by BTK. - `*_btk_out/multiqc/*` - The MultiQC results returned by BTK. - `blobtoolkit_pipeline_info` - The pipeline_info folder. + `*.kraken2.classifiedreads.txt` - A text file containing classifications for each input DNA sequence, generated by Kraken2. + `*.kraken2.report.txt` - Summary of the Kraken2 run, generated by Kraken2. + `_nt_kraken_lineage_file.txt` - Kraken2 lineages for each input DNA sequence, reformatted as a CSV table to make it possible to merge this information into a table that contains sequence classifications from other tools, e.g. BLAST and Diamond.
-Sanger-Tol/BlobToolKit is a Nextflow re-implementation of the snakemake based BlobToolKit pipeline and produces interactive plots used to identify true contamination and seperate sequence from the main assembly. +Kraken (https://github.com/DerrickWood/kraken2) assigns taxonomic labels to input DNA sequences based on comparing them to a database of kmers. ASCC uses a Kraken database made from the sequences of the NCBI nt database. The FASTA sequences of NCBI nt database are available at https://ftp.ncbi.nlm.nih.gov/blast/db/FASTA/. -### Merge BTK datasets + +### nr Diamond BLASTX
Output files -- `merge/` - `merged_datasets` - A BTK dataset. - `merged_datasets/btk_busco_summary_table_full.tsv` - A TSV file containing a summary of the btk busco results. + `*.txt` - A tabular text file containing the raw output of running Diamond BLASTX with sampled chunks of the assembly. The file contains BLASTX hits and scores/ Format: outfmt 6 qseqid sseqid pident length mismatch gapopen qstart qend sstart send evalue bitscore staxids sscinames sskingdoms sphylums salltitles + `full_coords.tsv`: A tabular text file containing the results from Diamond BLASTX where the coordinates of the BLASTX of chunks of assembly have been converted to coordinates in the full sequences of the assembly. + `*_diamond_blastx_top_hits.csv` - A file containing Diamond BLASTX top hits for each sequence in the input assembly file. + `*_diamond_outfmt6.tsv` - the `full_coords.tsv` file reformatted to make it compatible with BlobToolKit, so that the hits in it can be added to a BlobToolKit dataset. Format: outfmt 6 qseqid staxids bitscore qseqid sseqid pident length mismatch gapopen qstart qend sstart send evalue bitscore
-This module merged the Create_btk_dataset folder with the Sanger-tol BTK dataset to create one unified dataset for use with btk viewer. +Diamond (https://github.com/bbuchfink/diamond) is a sequence aligner for protein sequences and translated nucleotide sequences. Here it is used to identify contamination using the NCBI nr database. The FASTA sequences of NCBI nr database are available at https://ftp.ncbi.nlm.nih.gov/blast/db/FASTA/. -### ASCC Merge Tables + +### Uniprot Diamond BLASTX
Output files -- `ascc/` - `*_contamination_check_merged_table.csv` - .... - `*_contamination_check_merged_table_extended.csv` - .... - `*_phylum_counts_and_coverage.csv` - A CSV report containing information on the hits per phylum and the coverage of the hits.. + `*.txt` - A tabular text file containing the raw output of running Diamond BLASTX with sampled chunks of the assembly. The file contains BLASTX hits and scores/ Format: outfmt 6 qseqid sseqid pident length mismatch gapopen qstart qend sstart send evalue bitscore staxids sscinames sskingdoms sphylums salltitles + `full_coords.tsv`: A tabular text file containing the results from Diamond BLASTX where the coordinates of the BLASTX of chunks of assembly have been converted to coordinates in the full sequences of the assembly. + `*_diamond_blastx_top_hits.csv` - A file containing Diamond BLASTX top hits for each sequence in the input assembly file. + `*_diamond_outfmt6.tsv` - the `full_coords.tsv` file reformatted to make it compatible with BlobToolKit, so that the hits in it can be added to a BlobToolKit dataset. Format: outfmt 6 qseqid staxids bitscore qseqid sseqid pident length mismatch gapopen qstart qend sstart send evalue bitscore
+Diamond (https://github.com/bbuchfink/diamond) is a sequence aligner for protein sequences and translated nucleotide sequences. Here it is used to identify contamination using the Uniprot database. -Merge Tables merged the summary reports from a number of modules inorder to create a single set of reports. -### Pipeline information +### Generate Samplesheet
Output files -- `pipeline_info/` - - Reports generated by Nextflow: `execution_report.html`, `execution_timeline.html`, `execution_trace.txt` and `pipeline_dag.dot`/`pipeline_dag.svg`. - - Reports generated by the pipeline: `pipeline_report.html`, `pipeline_report.txt` and `software_versions.yml`. The `pipeline_report*` files will only be present if the `--email` / `--email_on_fail` parameter's are used when running the pipeline. - - Reformatted samplesheet files used as input to the pipeline: `samplesheet.valid.csv`. +- `generate/` + `*.csv` - A CSV file containing data locations, for use in BlobToolkit.
-[Nextflow](https://www.nextflow.io/docs/latest/tracing.html) provides excellent functionality for generating various reports relevant to the running and execution of the pipeline. This will allow you to troubleshoot errors with the running of the pipeline, and also provide you with other information such as launch commands, run times and resource usage. +This produces a CSV containing information on the read data for use in BlobToolKit. \ No newline at end of file From f6604cf440b8ddce448346427d7ef4fe67a76746 Mon Sep 17 00:00:00 2001 From: eeaunin Date: Mon, 7 Oct 2024 17:38:14 +0100 Subject: [PATCH 2/6] edited documentation files --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index bd1c78d1..0fe48618 100644 --- a/README.md +++ b/README.md @@ -79,9 +79,9 @@ nextflow run sanger-tol/ascc \ ## Credits -sanger-tol/ascc was written by Eerik Aunin, Damon Lee Pointon, James Torrance, Ying Sims and Will Eagles. Pipeline development was supervised by Shane A. McCarthy and Matthieu Muffato. +sanger-tol/ascc was written by [Eerik Aunin](https://github.com/eeaunin), [Damon Lee Pointon](https://github.com/DLBPointon), [James Torrance](https://github.com/jt8-sanger), [Ying Sims](https://github.com/yumisims) and [Will Eagles](https://github.com/weaglesBio). Pipeline development was supervised by [Shane A. McCarthy](https://github.com/mcshane) and [Matthieu Muffato](https://github.com/muffato). -We thank Michael Paulini, Camilla Santos, Noah Gettle and Ksenia Krasheninnikova for testing the pipeline. +We thank [Michael Paulini](https://github.com/epaule), Camilla Santos, [Noah Gettle](https://github.com/gettl008) and [Ksenia Krasheninnikova](https://github.com/ksenia-krasheninnikova) for testing the pipeline. ## Contributions and Support From cd1b3997d9e738234854ca1d39cb1eec06fa64ed Mon Sep 17 00:00:00 2001 From: eeaunin Date: Mon, 7 Oct 2024 17:49:58 +0100 Subject: [PATCH 3/6] edited documentation files: linting and prettier --- README.md | 9 ++++--- docs/output.md | 64 ++++++++++++++++++++------------------------------ 2 files changed, 31 insertions(+), 42 deletions(-) diff --git a/README.md b/README.md index 0fe48618..03712f50 100644 --- a/README.md +++ b/README.md @@ -11,15 +11,16 @@ ## Introduction **sanger-tol/ascc** is a bioinformatics pipeline that is meant for detecting cobionts and contaminants in genome assemblies. ASCC stands for Assembly Screen for Cobionts and Contaminants. The pipeline aggregates tools such as BLAST, GC and coverage calculation, FCS-adaptor, FCS-GX, VecScreen, BlobToolKit, the BlobToolKit pipeline, Tiara, Kraken, Diamond BLASTX, and kmer counting and with kcounter+scipy. The main outputs are: + - A CSV table with taxonomic classifications of the sequences from the consitutent tools. - A BlobToolKit dataset that can contain variables that are not present in BlobToolKit datasets produced by the BlobToolKit pipeline (https://github.com/sanger-tol/blobtoolkit) on its own. For example, ASCC can incorporate FCS-GX results into a BlobToolKit dataset. - Individual report files for adapter, PacBio barcode and organellar contaminants. -The only required input file for ASCC is the assembly FASTA file. Optional inputs are sequencing reads and organellar FASTA files. All individual components of the pipeline are optional, so it is possible to do lightweight runs with assemblies that have a simple composition of species and comprehensive runs with assemblies with complex composition. + The only required input file for ASCC is the assembly FASTA file. Optional inputs are sequencing reads and organellar FASTA files. All individual components of the pipeline are optional, so it is possible to do lightweight runs with assemblies that have a simple composition of species and comprehensive runs with assemblies with complex composition. ![sanger-tol/ascc overview diagram](docs/images/ascc_overview_diagram.png) - 1. Run a selection of processes from the list below (pick any that you think will be useful). + - FCS-GX - FCS-adaptor - VecScreen @@ -32,7 +33,9 @@ The only required input file for ASCC is the assembly FASTA file. Optional input - Organellar BLAST - nt Kraken2 - kmer counting + dimensionality reduction + 2. Postprocess the results of the previous step to produce summary files. What processes were run in the previous step determines what summary files can be generated. The possible outputs are: + - CSV table of sequence classification results - BlobToolKit dataset - CSV table of average coverage per phylum @@ -79,7 +82,7 @@ nextflow run sanger-tol/ascc \ ## Credits -sanger-tol/ascc was written by [Eerik Aunin](https://github.com/eeaunin), [Damon Lee Pointon](https://github.com/DLBPointon), [James Torrance](https://github.com/jt8-sanger), [Ying Sims](https://github.com/yumisims) and [Will Eagles](https://github.com/weaglesBio). Pipeline development was supervised by [Shane A. McCarthy](https://github.com/mcshane) and [Matthieu Muffato](https://github.com/muffato). +sanger-tol/ascc was written by [Eerik Aunin](https://github.com/eeaunin), [Damon Lee Pointon](https://github.com/DLBPointon), [James Torrance](https://github.com/jt8-sanger), [Ying Sims](https://github.com/yumisims) and [Will Eagles](https://github.com/weaglesBio). Pipeline development was supervised by [Shane A. McCarthy](https://github.com/mcshane) and [Matthieu Muffato](https://github.com/muffato). We thank [Michael Paulini](https://github.com/epaule), Camilla Santos, [Noah Gettle](https://github.com/gettl008) and [Ksenia Krasheninnikova](https://github.com/ksenia-krasheninnikova) for testing the pipeline. diff --git a/docs/output.md b/docs/output.md index 445becee..363e6332 100644 --- a/docs/output.md +++ b/docs/output.md @@ -9,6 +9,7 @@ The directories listed below will be created in the results directory after the ## Pipeline overview The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes data using the following steps: + ### Processes that produce the main outputs: - [Trailing Ns Check](#trailing-ns-check) @@ -26,6 +27,7 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d - [Pipeline information](#pipeline-information) - Report metrics generated during the workflow execution ### Processes that produce intermediate outputs: + - [YamlInput](#yamlinput) - - [Generate samplesheet](#generate-samplesheet) - - [Validate TaxID](#validate-taxid) - @@ -39,7 +41,6 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d - [nr Diamond BLASTX](#nr-diamond-blastx) - - [Uniprot Diamond BLASTX](#uniprot-diamond-blastx) - - ## Main outputs ### Trailing Ns Check @@ -54,7 +55,6 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d A text file containing a report of trailing Ns found in the genome. Trailing Ns are when a nucleotide sequence starts or ends with Ns instead of A, G, C or T nucleotides. It is advisable to trim off the trailing Ns from sequences in the assembly. If the sequence remaining after trimming is shorter than 200 bp, the script recommends removing it from the assembly. - ### Mito Organellar Blast
@@ -63,15 +63,14 @@ A text file containing a report of trailing Ns found in the genome. Trailing Ns `*-mitochondrial_genome.contamination_recommendation` - A file that contains the names of sequences that are suspected mitochondrial contaminants in the nuclear DNA assembly, tagged as either "REMOVE" or "Investigate" depending on the BLAST hit alignment length and percentage identity. The file is empty if there are no suspected mitochondrial contaminants.
-This subworkflow uses BLAST against a user-provided mitochondrial sequence to detect leftover organellar sequences in the assembly file that should contain only chromosomal DNA sequences. A BLAST nucleotide database is made from the user-provided organellar sequence. BLAST with the chromosomal DNA assembly is then ran against this database with the following settings: -task megablast -word_size 28 -best_hit_overhang 0.1 -best_hit_score_edge 0.1 -dust yes -evalue 0.0001 -perc_identity 80 -soft_masking true. The BLAST results are filtered to keep only hits with alignment length that is at least 200 bp. -Depending on the alignment length and percentage identity, the script can recommend an action for dealing with the putative organellar sequence: either "REMOVE" or "Investigate". - +This subworkflow uses BLAST against a user-provided mitochondrial sequence to detect leftover organellar sequences in the assembly file that should contain only chromosomal DNA sequences. A BLAST nucleotide database is made from the user-provided organellar sequence. BLAST with the chromosomal DNA assembly is then ran against this database with the following settings: -task megablast -word_size 28 -best_hit_overhang 0.1 -best_hit_score_edge 0.1 -dust yes -evalue 0.0001 -perc_identity 80 -soft_masking true. The BLAST results are filtered to keep only hits with alignment length that is at least 200 bp. +Depending on the alignment length and percentage identity, the script can recommend an action for dealing with the putative organellar sequence: either "REMOVE" or "Investigate". ### Plastid Organellar Blast
- `organelle/` - `*-plastid_genome.contamination_recommendation` - A file that contains the names of sequences that are suspected plastid contaminants in the nuclear DNA assembly, tagged as either "REMOVE" or "Investigate" depending on the BLAST hit alignment length and percentage identity. The file is empty if there are no suspected mitochondrial contaminants. + `*-plastid_genome.contamination_recommendation` - A file that contains the names of sequences that are suspected plastid contaminants in the nuclear DNA assembly, tagged as either "REMOVE" or "Investigate" depending on the BLAST hit alignment length and percentage identity. The file is empty if there are no suspected mitochondrial contaminants.
@@ -91,9 +90,7 @@ This subworkflow uses BLAST against a user-provided plastid sequence to detect l
-FCS-adaptor (https://github.com/ncbi/fcs) is NCBI software for detecting adapter contamination in genome assemblies. FCS-adaptor uses a built-in database of adapter sequences, provided by NCBI. The FCS-adaptor report shows identified potential locations of retained adapter sequences from the sequencing run. - - +FCS-adaptor (https://github.com/ncbi/fcs) is NCBI software for detecting adapter contamination in genome assemblies. FCS-adaptor uses a built-in database of adapter sequences, provided by NCBI. The FCS-adaptor report shows identified potential locations of retained adapter sequences from the sequencing run. ### Pacbio Barcode Check @@ -130,8 +127,6 @@ Mapping the read data to the input genome with minimap2 (https://github.com/lh3/ VecScreen (https://www.ncbi.nlm.nih.gov/tools/vecscreen/) is a tool for detecting adapter and vector contamination in genome assemblies. It is an older tool than FCS-adaptor. Its advantage over FCS-adaptor is that it can use a custom database of contaminant sequences made by the user, whereas FCS-adaptor comes with its built-in database. - - ### Create BTK Dataset
@@ -145,7 +140,6 @@ VecScreen (https://www.ncbi.nlm.nih.gov/tools/vecscreen/) is a tool for detectin Creates a BlobToolKit dataset folder compatible with BlobToolKit viewer (https://blobtoolkit.genomehubs.org/blobtools2/blobtools2-tutorials/opening-a-dataset-in-the-viewer/). The BlobToolKit dataset create by ASCC can contain much more variables than what the BlobToolKit pipeline (https://github.com/sanger-tol/blobtoolkit) produces. - ### Autofilter and Check Assembly
@@ -161,7 +155,6 @@ Creates a BlobToolKit dataset folder compatible with BlobToolKit viewer (https:/ Autofilter and check assembly returns a decontaminated genome file as well as summaries of the contamination found. - ### Sanger-TOL BTK
@@ -170,7 +163,7 @@ Autofilter and check assembly returns a decontaminated genome file as well as su - `sanger-tol-btk/` `*_btk_out/blobtoolkit/${meta.id}*/` - The BlobToolKit dataset folder generated by the sanger-tol/blobtoolkit pipeline. `*_btk_out/blobtoolkit/plots/` - BlobToolKit plots as PNG images, exported from the BlobToolKit dataset using blobtk (https://pypi.org/project/blobtk/). - `*_btk_out/blobtoolkit/${meta.id}*/summary.json.gz` - The summary.json.gz file of the BlobToolKit dataset. It contains assembly metrics such as + `*_btk_out/blobtoolkit/${meta.id}*/summary.json.gz` - The summary.json.gz file of the BlobToolKit dataset. It contains assembly metrics such as `*_btk_out/busco/*` - The BUSCO results returned by BlobToolKit. `*_btk_out/multiqc/*` - The MultiQC results returned by BlobToolKit. `blobtoolkit_pipeline_info` - The pipeline_info folder. @@ -198,9 +191,9 @@ This module merged the Create_btk_dataset folder with the Sanger-tol BTK dataset Output files - `ASCC-main-output/` - `*_contamination_check_merged_table.csv` - A CSV table that contains the results of most parts of the pipeline (GC content, coverage, Tiara, Kraken, kmers dimensionality reduction, Diamond, BLAST, FCS-GX, BlobToolKit pipeline) for each sequence in the input assembly file. +`*_contamination_check_merged_table.csv` - A CSV table that contains the results of most parts of the pipeline (GC content, coverage, Tiara, Kraken, kmers dimensionality reduction, Diamond, BLAST, FCS-GX, BlobToolKit pipeline) for each sequence in the input assembly file. If a set of prerequisite steps have been run (nt BLAST, nr Diamond, Uniprot Diamond, read mapping for coverage calculation, Tiara, nt Kraken and the creation of a BlobToolKit dataset), the pipeline tries to put together a phylum level combined classification of the input sequences. It first uses BlobToolKit's `bestsum_phylum`, then fills the gaps (caused by `no-hit` sequences) with results from Tiara and then the remaining gaps are filled with results from nt Kraken. The combined classification is in the `merged_classif` column. The `merged_classif_source` column says which tool's output the classification for each sequence is based on. The automated classification usually has some flaws in it but is still useful as a starting point for determining the phyla that the input sequences belong to. - `*_phylum_counts_and_coverage.csv` - A CSV report containing information on the hits per phylum and the average coverage per phylum. This file can only be generated if the`merged_classif` variable has been produced in the `*_contamination_check_merged_table.csv` table, as described above. + `*_phylum_counts_and_coverage.csv` - A CSV report containing information on the hits per phylum and the average coverage per phylum. This file can only be generated if the`merged_classif` variable has been produced in the `*_contamination_check_merged_table.csv` table, as described above.
Merge Tables merged the summary reports from a number of modules in order to create a single set of reports. @@ -219,9 +212,8 @@ Merge Tables merged the summary reports from a number of modules in order to cre [Nextflow](https://www.nextflow.io/docs/latest/tracing.html) provides excellent functionality for generating various reports relevant to the running and execution of the pipeline. This will allow you to troubleshoot errors with the running of the pipeline, and also provide you with other information such as launch commands, run times and resource usage. - - ## Intermediate outputs + These files are produced by the pipeline's modules but they are stay in Nextflow's work directory and are not included on their own in the final output. ### YamlInput @@ -251,7 +243,6 @@ Validate TaxID scans through the NCBI taxdump file to ensure that the taxonomy I
Output files - `*filtered.fasta` - A FASTA file that has been filtered to keep sequences below a given threshold of length.
@@ -280,21 +271,19 @@ Calculating the GC content of each sequence in the input genome. An index-like file containing the scaffold and scaffold length of the input genome. - ### Get kmers Profile
Output files `*_KMER_COUNTS.csv` - A CSV file containing the counts of kmers (by default: 7mers) in each sequence in the assembly. -`KMERS_dim_reduction_embeddings_combined.csv` - A CSV file with the results of dimensionality reduction of kmer counts. The dimensionality reduction embeddings help to separate sequences in the assembly by their origin (sequences originating from the same species likely appear close together in an embedding). When setting up a run, the user can choose multiple methods for dimensionality reduction. - +`KMERS_dim_reduction_embeddings_combined.csv` - A CSV file with the results of dimensionality reduction of kmer counts. The dimensionality reduction embeddings help to separate sequences in the assembly by their origin (sequences originating from the same species likely appear close together in an embedding). When setting up a run, the user can choose multiple methods for dimensionality reduction.
A CSV file containing the counts of kmers (by default: 7mers) in each sequence in the assembly. Also, a file with the results of dimensionality reduction of kmer counts. The following dimensionality reduction methods are available: PCA (principal component analysis), kernel PCA, PCA with SVD (singular value decomposition) solver, UMAP (uniform manifold approximation and projection), t-SNE (t-distributed stochastic neighbor embedding), LLE (locally linear embedding), MDS (multidimensional scaling), SE (spectral embedding), random trees, autoencoder and NMF (non-negative matrix factorisation). -The first two dimensions of the dimensionality reduction embeddings are used as the x and y coordinate when visualising the results in BlobToolKit. +The first two dimensions of the dimensionality reduction embeddings are used as the x and y coordinate when visualising the results in BlobToolKit. ### Extract Tiara Hits @@ -326,44 +315,41 @@ FCS-GX (https://github.com/ncbi/fcs) is NCBI software that detects contaminants
Output files - `*.kraken2.classifiedreads.txt` - A text file containing classifications for each input DNA sequence, generated by Kraken2. - `*.kraken2.report.txt` - Summary of the Kraken2 run, generated by Kraken2. - `_nt_kraken_lineage_file.txt` - Kraken2 lineages for each input DNA sequence, reformatted as a CSV table to make it possible to merge this information into a table that contains sequence classifications from other tools, e.g. BLAST and Diamond. +`*.kraken2.classifiedreads.txt` - A text file containing classifications for each input DNA sequence, generated by Kraken2. +`*.kraken2.report.txt` - Summary of the Kraken2 run, generated by Kraken2. +`_nt_kraken_lineage_file.txt` - Kraken2 lineages for each input DNA sequence, reformatted as a CSV table to make it possible to merge this information into a table that contains sequence classifications from other tools, e.g. BLAST and Diamond.
-Kraken (https://github.com/DerrickWood/kraken2) assigns taxonomic labels to input DNA sequences based on comparing them to a database of kmers. ASCC uses a Kraken database made from the sequences of the NCBI nt database. The FASTA sequences of NCBI nt database are available at https://ftp.ncbi.nlm.nih.gov/blast/db/FASTA/. - +Kraken (https://github.com/DerrickWood/kraken2) assigns taxonomic labels to input DNA sequences based on comparing them to a database of kmers. ASCC uses a Kraken database made from the sequences of the NCBI nt database. The FASTA sequences of NCBI nt database are available at https://ftp.ncbi.nlm.nih.gov/blast/db/FASTA/. ### nr Diamond BLASTX
Output files - `*.txt` - A tabular text file containing the raw output of running Diamond BLASTX with sampled chunks of the assembly. The file contains BLASTX hits and scores/ Format: outfmt 6 qseqid sseqid pident length mismatch gapopen qstart qend sstart send evalue bitscore staxids sscinames sskingdoms sphylums salltitles - `full_coords.tsv`: A tabular text file containing the results from Diamond BLASTX where the coordinates of the BLASTX of chunks of assembly have been converted to coordinates in the full sequences of the assembly. - `*_diamond_blastx_top_hits.csv` - A file containing Diamond BLASTX top hits for each sequence in the input assembly file. - `*_diamond_outfmt6.tsv` - the `full_coords.tsv` file reformatted to make it compatible with BlobToolKit, so that the hits in it can be added to a BlobToolKit dataset. Format: outfmt 6 qseqid staxids bitscore qseqid sseqid pident length mismatch gapopen qstart qend sstart send evalue bitscore +`*.txt` - A tabular text file containing the raw output of running Diamond BLASTX with sampled chunks of the assembly. The file contains BLASTX hits and scores/ Format: outfmt 6 qseqid sseqid pident length mismatch gapopen qstart qend sstart send evalue bitscore staxids sscinames sskingdoms sphylums salltitles +`full_coords.tsv`: A tabular text file containing the results from Diamond BLASTX where the coordinates of the BLASTX of chunks of assembly have been converted to coordinates in the full sequences of the assembly. +`*_diamond_blastx_top_hits.csv` - A file containing Diamond BLASTX top hits for each sequence in the input assembly file. +`*_diamond_outfmt6.tsv` - the `full_coords.tsv` file reformatted to make it compatible with BlobToolKit, so that the hits in it can be added to a BlobToolKit dataset. Format: outfmt 6 qseqid staxids bitscore qseqid sseqid pident length mismatch gapopen qstart qend sstart send evalue bitscore
Diamond (https://github.com/bbuchfink/diamond) is a sequence aligner for protein sequences and translated nucleotide sequences. Here it is used to identify contamination using the NCBI nr database. The FASTA sequences of NCBI nr database are available at https://ftp.ncbi.nlm.nih.gov/blast/db/FASTA/. - ### Uniprot Diamond BLASTX
Output files - `*.txt` - A tabular text file containing the raw output of running Diamond BLASTX with sampled chunks of the assembly. The file contains BLASTX hits and scores/ Format: outfmt 6 qseqid sseqid pident length mismatch gapopen qstart qend sstart send evalue bitscore staxids sscinames sskingdoms sphylums salltitles - `full_coords.tsv`: A tabular text file containing the results from Diamond BLASTX where the coordinates of the BLASTX of chunks of assembly have been converted to coordinates in the full sequences of the assembly. - `*_diamond_blastx_top_hits.csv` - A file containing Diamond BLASTX top hits for each sequence in the input assembly file. - `*_diamond_outfmt6.tsv` - the `full_coords.tsv` file reformatted to make it compatible with BlobToolKit, so that the hits in it can be added to a BlobToolKit dataset. Format: outfmt 6 qseqid staxids bitscore qseqid sseqid pident length mismatch gapopen qstart qend sstart send evalue bitscore +`*.txt` - A tabular text file containing the raw output of running Diamond BLASTX with sampled chunks of the assembly. The file contains BLASTX hits and scores/ Format: outfmt 6 qseqid sseqid pident length mismatch gapopen qstart qend sstart send evalue bitscore staxids sscinames sskingdoms sphylums salltitles +`full_coords.tsv`: A tabular text file containing the results from Diamond BLASTX where the coordinates of the BLASTX of chunks of assembly have been converted to coordinates in the full sequences of the assembly. +`*_diamond_blastx_top_hits.csv` - A file containing Diamond BLASTX top hits for each sequence in the input assembly file. +`*_diamond_outfmt6.tsv` - the `full_coords.tsv` file reformatted to make it compatible with BlobToolKit, so that the hits in it can be added to a BlobToolKit dataset. Format: outfmt 6 qseqid staxids bitscore qseqid sseqid pident length mismatch gapopen qstart qend sstart send evalue bitscore
Diamond (https://github.com/bbuchfink/diamond) is a sequence aligner for protein sequences and translated nucleotide sequences. Here it is used to identify contamination using the Uniprot database. - ### Generate Samplesheet
@@ -374,4 +360,4 @@ Diamond (https://github.com/bbuchfink/diamond) is a sequence aligner for protein
-This produces a CSV containing information on the read data for use in BlobToolKit. \ No newline at end of file +This produces a CSV containing information on the read data for use in BlobToolKit. From f2cb30932247f3311a9428c08858d948bffd0e46 Mon Sep 17 00:00:00 2001 From: Damon-Lee Pointon <51855558+DLBPointon@users.noreply.github.com> Date: Mon, 7 Oct 2024 22:23:31 +0100 Subject: [PATCH 4/6] Update linting.yml Version is outdated --- .github/workflows/linting.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/linting.yml b/.github/workflows/linting.yml index 888cb4bc..ac90f57a 100644 --- a/.github/workflows/linting.yml +++ b/.github/workflows/linting.yml @@ -14,9 +14,9 @@ jobs: EditorConfig: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - - uses: actions/setup-node@v3 + - uses: actions/setup-node@v4 - name: Install editorconfig-checker run: npm install -g editorconfig-checker From 35c951669d65aa172d1ced779cbd92a0494b7790 Mon Sep 17 00:00:00 2001 From: Damon-Lee Pointon <51855558+DLBPointon@users.noreply.github.com> Date: Mon, 7 Oct 2024 22:28:46 +0100 Subject: [PATCH 5/6] Update linting.yml Pinning node version --- .github/workflows/linting.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/linting.yml b/.github/workflows/linting.yml index ac90f57a..9bdb2c2f 100644 --- a/.github/workflows/linting.yml +++ b/.github/workflows/linting.yml @@ -17,6 +17,8 @@ jobs: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 + with: + node-version: '20.11.0' - name: Install editorconfig-checker run: npm install -g editorconfig-checker From eae9854a4358e83bca8b10c8b91dd7a0461cbe69 Mon Sep 17 00:00:00 2001 From: Damon-Lee Pointon <51855558+DLBPointon@users.noreply.github.com> Date: Mon, 7 Oct 2024 22:32:44 +0100 Subject: [PATCH 6/6] Update linting.yml --- .github/workflows/linting.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/linting.yml b/.github/workflows/linting.yml index 9bdb2c2f..457b5f39 100644 --- a/.github/workflows/linting.yml +++ b/.github/workflows/linting.yml @@ -18,7 +18,7 @@ jobs: - uses: actions/setup-node@v4 with: - node-version: '20.11.0' + node-version: "20.11.0" - name: Install editorconfig-checker run: npm install -g editorconfig-checker