Skip to content

Tutorial 2: RNA Virus Discovery

Last Updated: November 29, 2025 Level: Intermediate | Time: 6-8 hours | Data Size: 100MB

Overview

RNA viruses are abundant and diverse, but present unique challenges compared to DNA viruses. This tutorial covers the complete workflow for discovering RNA viruses in metagenomic or transcriptomic data, including specialized methods for handling RNA sequences.

What you'll learn: - RNA extraction and quality assessment - RNA-seq specific quality control - Assembly strategies for RNA viral genomes - RdRp (RNA-dependent RNA polymerase)-based virus identification - RNA virus annotation and classification - Phylogenetic placement of novel RNA viruses

Sample dataset: Simulated plant RNA virome (single-end Illumina RNA-seq, 150bp, ~3M reads)

Prerequisites

Required Software

# Create environment for RNA virus analysis
conda create -n rna_virome python=3.9
conda activate rna_virome

# Install RNA-specific tools
conda install -c bioconda -c conda-forge \
    fastp=0.23.4 \
    sortmerna=4.3.6 \
    trinity=2.15.1 \
    spades=3.15.5 \
    blast=2.14.0 \
    hmmer=3.3.2 \
    mafft=7.505 \
    iqtree=2.2.0 \
    seqkit=2.5.1 \
    cd-hit=4.8.1

# Install RdRp-scan (RNA virus identification)
pip install rdp-scan

# Install palmID (R-based RdRp search)
# Requires R - install separately if not available
R -e "install.packages('palmid')"

# Install metaviralSPAdes RNA module
# Already included in SPAdes installation above

System Requirements

  • RAM: 32GB minimum (RNA assembly is memory-intensive)
  • Disk Space: 100GB free space
  • CPU: 8+ cores recommended
  • OS: Linux or macOS

Background Knowledge

Complete Tutorial 1 first, and review: - Sample Preparation - RNA extraction section - RNA virus biology (Baltimore Classes III, IV, V, VI) - Reverse transcription concepts

Step 1: Download and Prepare Data

Download Test Dataset

# Create project directory
mkdir -p ~/rna_virome_tutorial
cd ~/rna_virome_tutorial

# Download simulated plant RNA virome dataset
# Note: Replace with actual Zenodo DOI when dataset is uploaded
wget https://zenodo.org/record/EXAMPLE/files/plant_rnaseq.fastq.gz

# Verify download
md5sum plant_rnaseq.fastq.gz
# Expected: x9y8z7w6... plant_rnaseq.fastq.gz

# Inspect data
seqkit stats plant_rnaseq.fastq.gz

Expected output:

file                    format  type  num_seqs      sum_len  min_len  avg_len  max_len
plant_rnaseq.fastq.gz   FASTQ   DNA  3,000,000  450,000,000      150      150      150

Step 2: Quality Control for RNA-seq

RNA-seq has specific QC considerations compared to DNA sequencing.

Run FastP with RNA-specific Parameters

# Create QC directory
mkdir -p 01_qc

# Run fastp optimized for RNA-seq
fastp \
    -i plant_rnaseq.fastq.gz \
    -o 01_qc/cleaned_reads.fastq.gz \
    -h 01_qc/fastp_report.html \
    -j 01_qc/fastp_report.json \
    --detect_adapter_for_pe \
    --correction \
    --cut_front \
    --cut_tail \
    --cut_window_size 4 \
    --cut_mean_quality 25 \
    --qualified_quality_phred 25 \
    --unqualified_percent_limit 20 \
    --length_required 50 \
    --thread 8 \
    --poly_x_min_len 10

RNA-specific parameters: - --poly_x_min_len 10: Remove poly-A/T tails (common in RNA-seq) - Higher quality thresholds (Q25 instead of Q20) - More stringent quality filtering

Expected results: - Reads passing filter: ~85-90% - Poly-A trimming: 5-15% of reads trimmed - Q30 bases: >95%

Step 3: Remove Ribosomal RNA Contamination

Plant RNA-seq often contains residual rRNA even after rRNA depletion.

Run SortMeRNA

# Download rRNA databases (first time only)
mkdir -p db/sortmerna
cd db/sortmerna

wget https://github.com/biocore/sortmerna/releases/download/v4.3.6/database.tar.gz
tar -xzf database.tar.gz

cd ~/rna_virome_tutorial

# Run SortMeRNA to filter rRNA
sortmerna \
    --ref db/sortmerna/smr_v4.3_default_db.fasta \
    --reads 01_qc/cleaned_reads.fastq.gz \
    --aligned 01_qc/rRNA_reads \
    --other 01_qc/non_rRNA_reads \
    --workdir 01_qc/sortmerna_work \
    --fastx \
    --num_alignments 1 \
    --threads 8

# Compress output
gzip 01_qc/non_rRNA_reads.fq

# Check rRNA removal efficiency
echo "Total reads after QC: $(zcat 01_qc/cleaned_reads.fastq.gz | wc -l | awk '{print $1/4}')"
echo "rRNA reads removed: $(cat 01_qc/rRNA_reads.fq | wc -l | awk '{print $1/4}')"
echo "Non-rRNA reads retained: $(zcat 01_qc/non_rRNA_reads.fq.gz | wc -l | awk '{print $1/4}')"

Expected results: - rRNA contamination: 5-30% of reads (varies by sample prep) - Non-rRNA reads: 70-95% retained for analysis

High rRNA Content

If >40% of reads are rRNA, this indicates poor rRNA depletion during library prep. Results will still be valid but sequencing depth is effectively reduced.

Step 4: RNA Virus Assembly

RNA virus genomes are typically smaller and have different assembly characteristics than DNA viruses.

4.1 De Novo Assembly with Trinity

Trinity is optimized for transcriptome assembly and works well for RNA viruses.

# Create assembly directory
mkdir -p 02_assembly

# Run Trinity (RNA-seq assembler)
Trinity \
    --seqType fq \
    --single 01_qc/non_rRNA_reads.fq.gz \
    --max_memory 32G \
    --CPU 8 \
    --output 02_assembly/trinity \
    --full_cleanup

# Trinity outputs to specific filename
mv 02_assembly/trinity/Trinity.fasta 02_assembly/trinity_contigs.fasta

Trinity parameters: - --seqType fq: Input format (FASTQ) - --single: Single-end reads (use --left and --right for paired-end) - --max_memory 32G: Maximum memory - --full_cleanup: Remove intermediate files to save space

Assembly runtime: 2-4 hours

4.2 Alternative: metaviralSPAdes RNA Mode

# Run metaviralSPAdes with RNA mode
spades.py \
    --rna \
    --s1 01_qc/non_rRNA_reads.fq.gz \
    -o 02_assembly/spades_rna \
    -t 8 \
    -m 32 \
    -k 21,33,55

# Copy contigs
cp 02_assembly/spades_rna/transcripts.fasta 02_assembly/spades_contigs.fasta

Choosing an Assembler

  • Trinity: Better for diverse RNA virus communities, more sensitive
  • metaviralSPAdes: Faster, good for high-abundance viruses
  • Best approach: Run both and combine results

4.3 Combine Assemblies (Optional)

# Concatenate assemblies
cat 02_assembly/trinity_contigs.fasta \
    02_assembly/spades_contigs.fasta \
    > 02_assembly/combined_contigs.fasta

# Remove redundancy with CD-HIT-EST
cd-hit-est \
    -i 02_assembly/combined_contigs.fasta \
    -o 02_assembly/combined_nr.fasta \
    -c 0.95 \
    -n 10 \
    -T 8 \
    -M 16000

# Use non-redundant set for downstream analysis
cp 02_assembly/combined_nr.fasta 02_assembly/contigs_final.fasta

Filter Contigs

# Filter contigs ≥500bp (RNA viruses can be small)
seqkit seq -m 500 02_assembly/contigs_final.fasta \
    > 02_assembly/contigs_500bp.fasta

# Get assembly statistics
seqkit stats 02_assembly/contigs_500bp.fasta

Expected results:

file                     format  type  num_seqs    sum_len  min_len  avg_len  max_len
contigs_500bp.fasta      FASTA   DNA      8,456  5,234,567      500      619   25,678

  • Total contigs ≥500bp: 5,000-10,000
  • Longest contig: 15-30 kb
  • N50: 800-1,500 bp

Step 5: RNA Virus Identification

RNA viruses encode characteristic proteins, particularly RNA-dependent RNA polymerase (RdRp).

5.1 RdRp-Based Identification with RdRp-scan

# Create viral ID directory
mkdir -p 03_viral_id

# Predict ORFs with Prodigal (metagenomic mode)
prodigal \
    -i 02_assembly/contigs_500bp.fasta \
    -a 03_viral_id/proteins.faa \
    -p meta \
    -q

# Download RdRp database (first time only)
mkdir -p db/rdrp
cd db/rdrp
wget http://s3.climb.ac.uk/ADM_share/profile_db/rdrp_search/rdrp_profile_db.tar.gz
tar -xzf rdrp_profile_db.tar.gz
cd ~/rna_virome_tutorial

# Run RdRp-scan
rdrp_scan \
    -i 03_viral_id/proteins.faa \
    -o 03_viral_id/rdrp_scan_results \
    -d db/rdrp/rdrp_profile_db \
    -e 1e-5 \
    -t 8

Expected output: - Contigs with RdRp: 50-200 - E-value range: Most <1e-20 (high confidence) - Output files: - rdrp_hits.txt: List of contigs with RdRp - rdrp_alignments.txt: Detailed alignments

5.2 Extract RdRp-Positive Contigs

# Extract contig IDs with RdRp hits
cut -f1 03_viral_id/rdrp_scan_results/rdrp_hits.txt | \
    sed 's/_[0-9]*$//' | \
    sort -u > 03_viral_id/rdrp_contig_ids.txt

# Extract RdRp-positive contigs
seqkit grep -f 03_viral_id/rdrp_contig_ids.txt \
    02_assembly/contigs_500bp.fasta \
    > 03_viral_id/rdrp_positive_contigs.fasta

# Count
wc -l 03_viral_id/rdrp_contig_ids.txt

Expected: 50-200 RdRp-positive contigs

5.3 BLAST-Based Validation

# Download RNA virus database
mkdir -p db/rna_virus
cd db/rna_virus

# Download NCBI RefSeq RNA viruses
# Filtering for Baltimore Classes III, IV, V, VI
wget ftp://ftp.ncbi.nlm.nih.gov/refseq/release/viral/viral.*.genomic.fna.gz
zcat viral.*.genomic.fna.gz > all_viral.fna

# Filter for RNA viruses (you may need to do this manually or use taxonomy)
# For this tutorial, we'll use all viral sequences
makeblastdb -in all_viral.fna -dbtype nucl -out rna_virus_db

cd ~/rna_virome_tutorial

# BLAST RdRp-positive contigs
blastn \
    -query 03_viral_id/rdrp_positive_contigs.fasta \
    -db db/rna_virus/rna_virus_db \
    -out 03_viral_id/blast_results.txt \
    -outfmt '6 qseqid sseqid pident length evalue bitscore stitle' \
    -evalue 1e-5 \
    -num_threads 8 \
    -max_target_seqs 3

# Extract best hit per query
sort -k1,1 -k6,6gr 03_viral_id/blast_results.txt | \
    sort -u -k1,1 > 03_viral_id/blast_best_hits.txt

# Analyze hit distribution
echo "Total RdRp+ contigs: $(wc -l < 03_viral_id/rdrp_contig_ids.txt)"
echo "Contigs with BLAST hit: $(cut -f1 03_viral_id/blast_best_hits.txt | wc -l)"
echo "High similarity (>80%): $(awk '$3 > 80' 03_viral_id/blast_best_hits.txt | wc -l)"
echo "Medium similarity (50-80%): $(awk '$3 > 50 && $3 <= 80' 03_viral_id/blast_best_hits.txt | wc -l)"
echo "Low similarity (<50%): $(awk '$3 <= 50' 03_viral_id/blast_best_hits.txt | wc -l)"

Expected distribution: - BLAST hits: 60-80% of RdRp+ contigs - High similarity (>80%): 20-40% (known viruses) - Medium similarity (50-80%): 30-50% (related viruses) - Low similarity (<50%): 10-20% (distant relatives) - No BLAST hit: 20-40% (novel RNA viruses)

Step 6: RNA Virus Genome Completeness

Unlike DNA viruses, we don't have CheckV for RNA viruses. We'll assess completeness manually.

Assess Genome Completeness

# Create completeness directory
mkdir -p 04_completeness

# Check for presence of key genes (RdRp, capsid, etc.)
# Run HMMER against Pfam or custom RNA virus HMMs

# Download Pfam database (if not already present)
mkdir -p db/pfam
cd db/pfam
wget http://ftp.ebi.ac.uk/pub/databases/Pfam/current_release/Pfam-A.hmm.gz
gunzip Pfam-A.hmm.gz
hmmpress Pfam-A.hmm
cd ~/rna_virome_tutorial

# Search for RNA virus protein families
hmmsearch \
    --tblout 04_completeness/pfam_hits.txt \
    -E 1e-5 \
    --cpu 8 \
    db/pfam/Pfam-A.hmm \
    03_viral_id/proteins.faa

Manual Completeness Assessment

# Extract contigs with multiple viral genes (more likely complete)
python3 << 'EOF'
import pandas as pd

# Define RNA virus marker genes (Pfam IDs)
rna_virus_markers = {
    'PF00680': 'RdRp_1',
    'PF00978': 'RdRp_2',
    'PF00073': 'RdRp_3',
    'PF04196': 'RdRp_4',
    'PF00073': 'RdRp_5',
    'PF00910': 'RNA_helicase',
    'PF00073': 'Peptidase',
    'PF00073': 'Capsid'
}

# Load HMMER results
hits = []
with open('04_completeness/pfam_hits.txt') as f:
    for line in f:
        if line.startswith('#'):
            continue
        fields = line.strip().split()
        protein_id = fields[0]
        pfam_id = fields[1]
        evalue = float(fields[4])

        if evalue < 1e-5:
            hits.append((protein_id, pfam_id, evalue))

# Extract contig IDs and count markers
contig_markers = {}
for protein_id, pfam_id, evalue in hits:
    # Extract contig ID (assuming format: contigID_geneNumber)
    contig_id = '_'.join(protein_id.split('_')[:-1])

    if pfam_id in rna_virus_markers:
        if contig_id not in contig_markers:
            contig_markers[contig_id] = set()
        contig_markers[contig_id].add(rna_virus_markers[pfam_id])

# Assess completeness
complete_contigs = []
partial_contigs = []

for contig_id, markers in contig_markers.items():
    marker_count = len(markers)

    if marker_count >= 3:  # At least 3 RNA virus markers
        complete_contigs.append((contig_id, marker_count, ','.join(markers)))
    elif marker_count >= 1:
        partial_contigs.append((contig_id, marker_count, ','.join(markers)))

# Save results
with open('04_completeness/complete_contigs.txt', 'w') as f:
    for contig_id, count, markers in complete_contigs:
        f.write(f"{contig_id}\t{count}\t{markers}\n")

print(f"Contigs with ≥3 markers (likely complete): {len(complete_contigs)}")
print(f"Contigs with 1-2 markers (partial): {len(partial_contigs)}")
EOF

# Extract likely complete genomes
cut -f1 04_completeness/complete_contigs.txt > 04_completeness/complete_contig_ids.txt

seqkit grep -f 04_completeness/complete_contig_ids.txt \
    03_viral_id/rdrp_positive_contigs.fasta \
    > 04_completeness/complete_rna_viruses.fasta

Expected results: - Likely complete genomes (≥3 markers): 10-50 - Partial genomes (1-2 markers): 40-150

Step 7: RNA Virus Classification

7.1 Taxonomic Assignment Based on BLAST

# Create taxonomy directory
mkdir -p 05_taxonomy

# Analyze BLAST results for taxonomy
python3 << 'EOF'
import pandas as pd

# Load BLAST results
blast = pd.read_csv('03_viral_id/blast_best_hits.txt', sep='\t', header=None,
                    names=['qseqid', 'sseqid', 'pident', 'length', 'evalue', 'bitscore', 'stitle'])

# Extract virus family from subject title (manual parsing)
def extract_family(title):
    # Common RNA virus families
    families = ['Picornaviridae', 'Flaviviridae', 'Coronaviridae', 'Rhabdoviridae',
                'Paramyxoviridae', 'Orthomyxoviridae', 'Bunyaviridae', 'Reoviridae',
                'Togaviridae', 'Caliciviridae', 'Astroviridae', 'Hepeviridae']

    for family in families:
        if family.lower() in title.lower():
            return family
    return 'Unknown'

blast['family'] = blast['stitle'].apply(extract_family)

# Summarize taxonomy
print("\nTaxonomic distribution (based on best BLAST hits):")
print(blast['family'].value_counts())

# Save taxonomy table
blast[['qseqid', 'pident', 'family', 'stitle']].to_csv(
    '05_taxonomy/rna_virus_taxonomy.tsv', sep='\t', index=False)
EOF

7.2 Phylogenetic Analysis of RdRp

For publication-quality classification, place your viruses phylogenetically.

# Extract RdRp protein sequences
# Assuming we have RdRp coordinates from RdRp-scan
seqkit grep -r -p "RdRp" 03_viral_id/proteins.faa \
    > 05_taxonomy/rdrp_proteins.faa

# Download reference RdRp sequences (curated set)
# You would normally use a published RdRp reference set
# For this tutorial, we'll use top BLAST hits as references

# Extract reference RdRps from BLAST results
cut -f2 03_viral_id/blast_best_hits.txt | head -n 50 > 05_taxonomy/ref_accessions.txt

# Fetch reference sequences (requires internet and NCBI E-utilities)
# Simplified for tutorial - you'd use efetch in practice

# Combine query and reference RdRps
# cat 05_taxonomy/rdrp_proteins.faa reference_rdrps.faa > 05_taxonomy/all_rdrps.faa

# Align with MAFFT
mafft \
    --auto \
    --thread 8 \
    05_taxonomy/rdrp_proteins.faa \
    > 05_taxonomy/rdrp_alignment.faa

# Trim alignment (remove poorly aligned regions)
# trimal -in 05_taxonomy/rdrp_alignment.faa -out 05_taxonomy/rdrp_alignment_trimmed.faa -automated1

# Build phylogenetic tree with IQ-TREE
iqtree \
    -s 05_taxonomy/rdrp_alignment.faa \
    -m TEST \
    -bb 1000 \
    -nt 8 \
    -pre 05_taxonomy/rdrp_tree

IQ-TREE parameters: - -m TEST: Automatically select best substitution model - -bb 1000: 1000 ultrafast bootstrap replicates - -nt 8: Number of threads

Output files: - rdrp_tree.treefile: Best ML tree (Newick format) - rdrp_tree.iqtree: Detailed analysis log - rdrp_tree.contree: Consensus tree

Visualize tree:

# In R
library(ape)
library(ggtree)

# Load tree
tree <- read.tree('05_taxonomy/rdrp_tree.treefile')

# Plot
pdf('05_taxonomy/rdrp_phylogeny.pdf', width=12, height=16)
ggtree(tree, layout='rectangular') +
  geom_tiplab(size=2) +
  geom_treescale() +
  theme_tree2()
dev.off()

Step 8: Abundance Estimation

# Create abundance directory
mkdir -p 06_abundance

# Map reads to RdRp-positive contigs
# Index contigs
bwa index 03_viral_id/rdrp_positive_contigs.fasta

# Map reads
bwa mem \
    -t 8 \
    03_viral_id/rdrp_positive_contigs.fasta \
    01_qc/non_rRNA_reads.fq.gz \
    | samtools view -bS - \
    | samtools sort -o 06_abundance/mapped_sorted.bam

samtools index 06_abundance/mapped_sorted.bam

# Calculate coverage
samtools depth 06_abundance/mapped_sorted.bam \
    > 06_abundance/coverage_per_base.txt

# Calculate mean coverage per contig
python3 << 'EOF'
import pandas as pd

# Load coverage data
cov = pd.read_csv('06_abundance/coverage_per_base.txt', sep='\t',
                  header=None, names=['contig', 'pos', 'depth'])

# Calculate mean coverage per contig
mean_cov = cov.groupby('contig')['depth'].agg(['mean', 'std', 'max']).reset_index()
mean_cov.columns = ['contig_id', 'mean_coverage', 'std_coverage', 'max_coverage']

# Save
mean_cov.to_csv('06_abundance/contig_coverage.tsv', sep='\t', index=False)

# Summary
print(f"Contigs with coverage: {len(mean_cov)}")
print(f"High coverage (>100x): {len(mean_cov[mean_cov['mean_coverage'] > 100])}")
print(f"Medium coverage (10-100x): {len(mean_cov[(mean_cov['mean_coverage'] >= 10) & (mean_cov['mean_coverage'] <= 100)])}")
print(f"Low coverage (<10x): {len(mean_cov[mean_cov['mean_coverage'] < 10])}")

# Top 10 most abundant
print("\nTop 10 most abundant RNA viruses:")
print(mean_cov.nlargest(10, 'mean_coverage')[['contig_id', 'mean_coverage']])
EOF

Step 9: Summary and Functional Annotation

Create Comprehensive Summary

# Create summary directory
mkdir -p 07_summary

# Combine all results
python3 << 'EOF'
import pandas as pd

# Load contig info
from Bio import SeqIO
contigs_info = {}
for record in SeqIO.parse('03_viral_id/rdrp_positive_contigs.fasta', 'fasta'):
    contigs_info[record.id] = len(record.seq)

contig_df = pd.DataFrame(list(contigs_info.items()), columns=['contig_id', 'length'])

# Load RdRp scan results
# Simplified - would parse actual RdRp-scan output
# For tutorial, we'll use the IDs we extracted
rdrp_ids = pd.read_csv('03_viral_id/rdrp_contig_ids.txt', header=None, names=['contig_id'])
rdrp_ids['has_rdrp'] = True

# Load BLAST results
blast = pd.read_csv('03_viral_id/blast_best_hits.txt', sep='\t', header=None,
                    names=['contig_id', 'subject', 'pident', 'length', 'evalue', 'bitscore', 'description'])

# Load completeness
complete = pd.read_csv('04_completeness/complete_contigs.txt', sep='\t', header=None,
                       names=['contig_id', 'marker_count', 'markers'])
complete['completeness'] = 'Complete (≥3 markers)'

# Load taxonomy
taxonomy = pd.read_csv('05_taxonomy/rna_virus_taxonomy.tsv', sep='\t')

# Load abundance
abundance = pd.read_csv('06_abundance/contig_coverage.tsv', sep='\t')

# Merge all
summary = contig_df.merge(rdrp_ids, on='contig_id', how='left')
summary = summary.merge(blast[['contig_id', 'pident', 'description']], on='contig_id', how='left')
summary = summary.merge(complete[['contig_id', 'completeness', 'marker_count']], on='contig_id', how='left')
summary = summary.merge(taxonomy[['qseqid', 'family']], left_on='contig_id', right_on='qseqid', how='left')
summary = summary.merge(abundance[['contig_id', 'mean_coverage']], on='contig_id', how='left')

# Fill NaN
summary['completeness'] = summary['completeness'].fillna('Partial')
summary['family'] = summary['family'].fillna('Unknown')
summary['pident'] = summary['pident'].fillna(0)

# Sort by abundance
summary = summary.sort_values('mean_coverage', ascending=False)

# Save
summary.to_csv('07_summary/rna_virus_summary.tsv', sep='\t', index=False)

print(f"Total RdRp-positive contigs: {len(summary)}")
print(f"Likely complete genomes: {len(summary[summary['completeness'].str.contains('Complete')])}")
print(f"Known viruses (>80% identity): {len(summary[summary['pident'] > 80])}")
print(f"Novel viruses (no BLAST hit): {len(summary[summary['pident'] == 0])}")

print("\nTop 10 RNA viruses by abundance:")
print(summary[['contig_id', 'length', 'family', 'pident', 'mean_coverage', 'completeness']].head(10))
EOF

Expected Final Results

Directory Structure

~/rna_virome_tutorial/
├── 01_qc/
│   ├── cleaned_reads.fastq.gz
│   └── non_rRNA_reads.fq.gz
├── 02_assembly/
│   └── contigs_500bp.fasta
├── 03_viral_id/
│   ├── rdrp_positive_contigs.fasta
│   └── blast_best_hits.txt
├── 04_completeness/
│   └── complete_rna_viruses.fasta
├── 05_taxonomy/
│   ├── rna_virus_taxonomy.tsv
│   └── rdrp_tree.treefile
├── 06_abundance/
│   └── contig_coverage.tsv
└── 07_summary/
    └── rna_virus_summary.tsv

Typical Results

  • Input reads: 3,000,000
  • After QC: ~2,550,000 (85%)
  • After rRNA removal: ~2,040,000 (80% of QC reads)
  • Assembled contigs ≥500bp: 5,000-10,000
  • RdRp-positive contigs: 50-200
  • Likely complete genomes: 10-50
  • Novel RNA viruses: 20-40% with no BLAST hit

Troubleshooting

Problem: Very Few RdRp Hits

Solutions:

# Lower RdRp-scan e-value threshold
rdrp_scan ... -e 1e-3  # instead of 1e-5

# Try alternative RdRp databases
# Use palmID from Serratus project

Problem: High rRNA Contamination

Solutions:

# More stringent rRNA filtering
sortmerna --best 1 --num_alignments 1 ...

# Multiple rounds of filtering
sortmerna ... # Round 1
sortmerna --reads output_from_round1.fq ... # Round 2

Problem: Fragmented Assembly

Solutions:

# Increase k-mer sizes for SPAdes
spades.py --rna -k 25,35,45,55,65,75 ...

# Use Trinity (better for complex transcriptomes)
Trinity --max_memory 64G --CPU 16 ...

Next Steps

Advanced RNA virus analyses: - Recombination detection (RDP, SimPlot) - Secondary structure prediction (RNAfold) - Viral strain analysis (variant calling)

Related tutorials: - Tutorial 4: Comparative Virome - Compare RNA viruses across samples - Tutorial 5: Host Prediction - Predict eukaryotic hosts

Further Reading

  • Wolf, Y. I., et al. (2018). "Origins and evolution of the global RNA virome." mBio, 9(6), e02329-18.
  • Mushegian, A., & Elena, S. F. (2015). "Evolution of plant virus movement proteins from the 30K superfamily and of their homologs integrated in plant genomes." Virology, 476, 304-315.
  • Krishnamurthy, S. R., & Wang, D. (2017). "Origins and challenges of viral dark matter." Virus Research, 239, 136-142.