# wf-isoforms This repository contains a [nextflow](https://www.nextflow.io/) workflow for assembly and annotation of transcripts from Oxford Nanopore cDNA or direct RNA reads.
It has been adapted from two existing Snakemake pipelines: * https://github.com/nanoporetech/pipeline-nanopore-ref-isoforms * https://github.com/nanoporetech/pipeline-nanopore-denovo-isoforms --- ## Overview * cDNA reads are initially preprocessed by [pychopper](https://github.com/nanoporetech/pychopper) for identification of full-length reads, as well as trimming and orientation correction (This step is omited for direct RNA reads) Reference-based approach * Full length reads are mapped to a supplied reference genome using [minimap2](https://github.com/lh3/minimap2)
* Transcripts are assembled by [stringtie](http://ccb.jhu.edu/software/stringtie) in long read mode (with or without a guide reference annotation) to generate the GFF annotation. * The annotation generated by the pipeline is compared to the reference annotation using [gffcompare](http://ccb.jhu.edu/software/stringtie/gffcompare.shtml) de novo-based approach (experimental!) * Sequence clusters are generated using [isONclust2](https://github.com/nanoporetech/isONclust2) * If a reference genome is supplied, cluster quality metrics are determined by comparing with clusters generated from a minimap2 alignment. * A consensus sequence for each cluster is generated using [spoa](https://github.com/rvaser/spoa) * Three rounds of polishing using racon and minimap2 to give a final polished CDS for each gene. * Full-length reads are then mapped to these polished CDS. * Transcripts are assembled by stringtie as for the reference-based approach. * Note: This is currently not supported with direct RNA reads. For both approaches: * An html report is generated, which contains various summary statistics and plots of the data. --- ## Quickstart The workflow uses [nextflow](https://www.nextflow.io/) to manage compute and software resources, as such nextflow will need to be installed before attempting to run the workflow. The workflow can currently be run using either [Docker](https://www.docker.com/products/docker-desktop), [Singularity](https://sylabs.io/singularity/) or [conda](https://docs.conda.io/en/latest/miniconda.html) to provide isolation of the required software. Each method is automated out-of-the-box provided either docker, singularity or conda is installed. It is not required to clone or download the git repository in order to run the workflow. For more information on running EPI2ME Labs workflows [visit out website](https://labs.epi2me.io/wfindex). ### Workflow options To obtain the workflow, having installed `nextflow`, users can run: ``` nextflow run epi2me-labs/wf-isoforms --help ``` to see the options for the workflow. **Workflow inputs** - Directory containing cDNA/direct RNA reads. Or a directory containing subdirectories each with reads from different samples (in fastq/fastq.gz format) - Reference genome in fasta format (required for reference-based assembly) - Optional reference annotation in GFF2/3 format **Example execution of a workflow for reference-based transcript assembly** This uses a synthetic SIRV dataset, so we need to tell minimap2 about the non-canonical splice junctions with --minimap2_opts '-uf --splice-flank=no' ``` OUTPUT=~/output; nextflow run wf-isoforms/ --fastq test_data/fastq --ref_genome test_data/SIRV_150601a.fasta --ref_annotation test_data/SIRV_isofroms.gtf --minimap2_opts '-uf --splice-flank=no' --out_dir outdir -w workspace_dir -profile conda -resume ``` ``` # To evaluate the workflow on a larger Drosophila dataset ./evaluation/run_evaluation_dmel.sh outdir ``` **Example workflow for denovo transcript assembly** ``` OUTPUT=~/output nextflow run . --fastq test_data/fastq --denovo --ref_genome test_data/SIRV_150601a.fasta -profile local --out_dir ${OUTPUT} -w ${OUTPUT}/workspace \ --sample sample_id -resume ``` A full list of options can be seen in nextflow_schema.json. Below are some commonly used ones. They can be set in the config like this:
   opt = 50
or at the command line:
   --opt 50 - Threshold for including isoforms into interactive table `transcript_table_cov_thresh = 50` - Run the denovo pipeline `denovo = true` (default false) - To run the workflow with direct RNA reads `--direct_rna` (skips the pychopper step). Pychopper and minimap2 can take options via `minimap2_opts` and `pychopper_opts`
For example: - When using the SIRV synthetic test data - `minimap2_opts = '-uf --splice-flank=no'` - pychopper needs to know which cDNA synthesis kit used - SQK-PCS109: use `pychopper_opts = '-k PCS109'` (default) - SQK-PCS110: use `pychopper_opts = '-k PCS110'` - pychopper can use one of two available backends for identifying primers in the raw reads - nhmmscan `pychopper opts = '-m phmm'` - edlib `pychopper opts = '-m edlib'`
Note: edlib is set by default in the config as it's quite a lot faster. However it may be less sensitive than nhmmscan. --- ## Workflow outputs * wf-isoforms-report.html - Summary and plots of reads, alignments and the transcript assembly and annotation - One file per run with results from each sample merged Note transcript isoform table is currently only available for the reference-guilded assembly. Note: If using a large dataset with 10s of thousands of predicted isoforms, to speed up searching, the table can be limited by read coverage, which can be set with `transcript_table_cov_thresh = 50` (default 50x) #### Output files Each sample will also have it's own directory containing the following (dependent on assembly approach and input options) * {sampleid}_gffcompare * Directory containing all output from gffcompare * transcripts_{sample_id}.gff * Annotation of query transcripts * {sample_id}_transcriptome.fas - A transcriptome derived from the query reads * {sample_id}_merged_transcriptome.fas - A transcriptome derived from the query reads + reference annotation ## Useful links * [nextflow](https://www.nextflow.io/) * [docker](https://www.docker.com/products/docker-desktop) * [Singularity](https://sylabs.io/singularity/) * [conda](https://docs.conda.io/en/latest/miniconda.html) * [racon](https://github.com/isovic/racon) * [spoa](https://github.com/rvaser/spoa) * [inONclust](https://github.com/ksahlin/isONclust) * [isONclust2](https://github.com/nanoporetech/isONclust2)