• k8凯发

    Vaccinium floribundum Genome Assembly and Annotation Script

    Martina Albuja-Quintana, Gabriela Pozo, Milton Gordillo-Romero, Carolina E. Armijos, Maria de Lourdes Torres

    Published: 2024-04-04 DOI: 10.17504/protocols.io.n92ldmo4nl5b/v1
    AI 解读
    浏览 1403

    Abstract

    Oxford Nanopore long reads and Illumina short reads obtained from sequencing the DNA of a Vaccinum floribundum specimen from the Paramo region in Ecuador, were used to assemble and annotate the whole genome of this species. ONT long reads were filtered and trimmed in Nanofilt and Porechop. Sequencing statistics were visualized in Nanoplot. Illumina short reads were evaluated with fastqc. Different assemblers and polishers were used with both long and short reads. The resulting Flye assembly polished with Polca and Medaka was then analyzed for genome completeness and quality with Quast, BUSCO, LAI Index, and Coverage Graph. The assembly was later annotated in Maker in 3 consecutive rounds using the ab initio gene predictor SNAP.

    Steps

    Oxford Nanopore Sequencing - Raw Reads Filtering, Trimming, and Statistics

    1.

    Raw Read Adapter Filtering

    Porechop v0.2.4 (RRID:SCR_016967)

    porechop -i Mortino_ONT_RawReads.fastq.gz -o Porechop_Mortino_ONT_RawReads.fastq.gz
    
    2.

    Raw Read Quality and Length Trimming

    Nanofilt v2.8.0 (RRID:SCR_016966)

    NanoFilt -q 7 < Porechop_Mortino_ONT_RawReads.fastq > Porechop_Mortino_ONT_q7.fastq
    
    NanoFilt -l 1000 < Porechop_Mortino_ONT_q7.fastq > Porechop_Mortino_ONT_q7_1000.fastq
    
    3.

    Raw Read Dataset Statistics

    LongQC v1.2.0c

    python longQC.py sampleqc -x ont-ligation -o longQC_Mortino_ONT Porechop_Mortino_ONT_q7_1000.fastq
    

    Nanoplot v1.33.0 (RRID:SCR_024128)

    NanoPlot --fastq Porechop_Mortino_ONT_q7_1000.fastq --readtype 1D -t 4 --title "Nanoplot_Mortino_ONT" -o Nanoplot_Mortino_ONT
    

    Illumina Sequencing - Raw Reads Statistics

    4.

    Raw Read Dataset Statistics

    FastQC (RRID:SCR_014583)

    fastqc FC225MJ3LT3_L1_Mort-Illumina_1.fq.gz FC225MJ3LT3_L1_Mort-Illumina_2.fq.gz -o FastQC_Mortino_Illumina
    

    Genome Size Estimation

    5.

    k-mer based analysis

    Jellyfish v2.3.0 (RRID:SCR_005491)

    zcat FC225MJ3LT3_L1_Mort-Illumina_1.fq.gz FC225MJ3LT3_L1_Mort-Illumina_2.fq.gz > Mortino-Illumina_Combined1y2.fq.gz 
    
    jellyfish count -t 8 -m 21 -o Mortino_Illumina.jf -c Mortino-Illumina_Combined1y2.fq.gz
    
    jellyfish histo -t 10 Mortino_Illumina.jf > Mortino_df.histo
    

    k-mer profile visualization

    GenomeScope v2.0 (RRID:SCR_017014)

    http://qb.cshl.edu/genomescope/
    

    De novo Genome Assembly and Polishing

    6.

    Assembly

    SMARTdenovo v1.0.0 (RRID:SCR_017622)

    smartdenovo.pl -p SdN_Assembly_Mortino -c 1 Porechop_Mortino_ONT_q7_1000.fastq > SdN_Assembly_Mortino.mak
    
    make -f SdN_Assembly_Mortino.mak
    

    Flye v2.9.2 (RRID:SCR_017016)

    flye --nano-raw Porechop_Mortino_ONT_q7_1000.fastq --out-dir Flye_Mortino_Assembly -g 0.5g
    

    MaSuRCA v.4.1.0 (RRID:SCR_010691)

    masurca -i FC225MJ3LT3_L1_Mort-Illumina_1.fq.gz,FC225MJ3LT3_L1_Mort-Illumina_2.fq.gz -r Porechop_Mortino_ONT_q7_1000.fastq -t 5
    
    7.

    Polishing

    Medaka v1.11.1

    medaka_consensus -i Assembly.fasta -o Medaka_Assembly -t 4  -m r941_min_fast_g507
    

    POLCA (MaSuRCA, v4.1.0 RRID:SCR_010691)

    polca.sh -a Assembly.fasta -r FC225MJ3LT3_L1_Mort-Illumina_1.fq.gz -r FC225MJ3LT3_L1_Mort-Illumina_2.fq.gz -t 5
    

    Genome assembly quality, continuity, and completeness assessment

    8.

    Quast v5.2.0 (RRID:SCR_001228)

    quast.py Assembly.fasta -r Vaccinium_myrtillus_GCA_016920895.1_VacMyr_v1.0_genomic.fna.gz' -o Quast_ref_Vmyrtillus
    
    9.

    BUSCO v5.4.7 (RRID:SCR_015008)

    busco -i Assembly.fasta -l eudicots_odb10 -o BUSCO_Assembly -m genome
    
    10.

    Long Terminal Repeat (LTR) Assembly Index (LAI)

    LTRharvest v1.6.2 (RRID:SCR_018970)

    1. Create an "Enhanced Suffix Array"

    gt suffixerator -db Assembly.fasta -indexname Assembly_indextable.fsa -tis -suf -lcp -des -ssp -sds -dna
    

    2. Run LTRHARVEST

    gt ltrharvest -index Assembly_indextable.fsa -minlenltr 100 -maxlenltr 7000 -mintsd 4 -maxtsd 6 -motif TGCA -motifmis 1 -similar 85 -vic 10 -seed 20 -seqids yes > Assembly.fa.harvest.scn
    

    LTR_FINDER v1.0.7 (RRID:SCR_015247)

    ltr_finder assembly.fasta > Assembly_LTRfinder.txt
    

    Combine both documents from LTRFinder and LTRHarvest

    cat Assembly_LTRfinder.txt Assembly.fa.harvest.scn > Assembly.fa.rawLTR.scn
    

    LTR_retriever v2.8.7 (RRID:SCR_017623)

    LTR_retriever -genome Assembly.fasta -inharvest Assembly.fa.rawLTR.scn -threads 10
    
    11.

    Coverage Graphs of ONT and Illumina Reads

    1. Change contig names from assembly file

    awk '/^>/{print ">Mortino" ++i; next}{print}' < Assembly.fasta > Assembly_nom.fasta
    

    2. Identify longest contig

    cat Assembly_nom.fasta | bioawk -c fastx '{ print length($seq), $name }' | sort -k1,1rn | head -1
    

    3. Extract the longest contig from the assembly

    Samtools package v1.18 (RRID:SCR_002105)

    samtools faidx Assembly_nom.fasta Name_Longest_Contig > Longest_contig.fasta
    

    4. Extract 10% of ONT and Illumina reads (total reads were obtained from previously run Nanoplot)

    BWA (RRID:SCR_010910)

    reformat.sh in1=FC225MJ3LT3_L1_Mort-Illumina_1.fq.gz in2=FC225MJ3LT3_L1_Mort-Illumina_2.fq.gz out1=FC225MJ3LT3_L1_Mort-Illumina_1_subset_10.fq.gz out2=FC225MJ3LT3_L1_Mort-Illumina_2_subset_10.fq.gz reads=# of total reads samplereadstarget=# of 10% reads
    

    5. Map ONT reads and illumina reads, seperately, to the assembly

    ONT reads: minimap2 v2.26 (RRID:SCR_018550)

    minimap2 -ax map-ont Longest_contig.fa Porechop_Mortino_ONT_q7_1000.fastq > ONT_Assembly.sam
    

    Illumina reads: BWA (RRID:SCR_010910)

    bwa index Longest_contig.fa
    
    bwa mem Longest_contig.fa FC225MJ3LT3_L1_Mort-Illumina_1_subset_10.fq FC225MJ3LT3_L1_Mort-Illumina_2_subset_10.fq > Illumina_assembly.sam
    

    6. Convert sam files to bam

    samtools view -bS ONT_Assembly.sam > ONT_Assembly.bam
    
    samtools view -bS Illumina_Assembly.sam > Ilumina_Assembly.bam
    

    7. Sort bam files

    samtools sort ONT_Assembly.bam > ONT_Assembly_sorted.bam
    
    samtools sort Illumina_Assembly.bam > Illumina_Assembly_sorted.bam
    

    8. Coverage depth

    Samtools package v1.18 (RRID:SCR_002105)

    samtools depth ONT_Assembly_sorted.bam > depth_Assembly_ONT
    
    samtools depth Illumina_Assembly_sorted.bam > depth_Assembly_Illumina
    

    5. Graphs: script developed by López et al., 2023

    python 3
    
    import matplotlib.pyplot as plt
    import pandas as pd
    df = pd.read_csv('depth_Assembly_sorted', sep="\t", names=["Sequence", "Base_position", "Depth"], index_col=0)
    fig=df.plot(x='Base_position', y='Depth', kind='line', figsize=(16, 4)).get_figure()
    fig.savefig("Coverage_plot.pdf")
    

    Genome scaffolding

    12.

    ntLink v1.3.9

    ntLink scaffold gap_fill target=Assembly.fasta reads=Porechop_Mortino_ONT_q7_1000.fast overlap=true
    

    Removing Foreign Contamination

    13.

    python3 ./fcs.py screen Assembly.fasta --fasta ./fcsgx_test.fa.gz --out-dir ./gx_out/ --gx-db "$GXDB_LOC/gxdb" --tax-id 6973

    Genome Annotation

    14.

    RepeatModeler v2.0.3 (RRID:SCR_015027)

    BuildDatabase -name Assembly.fasta RepeatModeler -threads 32 -database Mortino_genome -LTRStruct >& repeatmodeler.log
    
    15.

    Change Contig Names in Assembly File

     awk '/^>/{print ">Mortino" ++i; next}{print}' Assembly_nom.fasta
    
    16.

    Generate Executable Files

    maker -CTL
    
    17.

    1. Modify Maker_opts.ctl file

    2. Run 10 iterations of the first run of maker

    maker
    

    3. Run and train SNAP script

    sh Snap_Pult_Creator.sh
    

    4. Run 5 iterations of the second run of maker r

    maker
    

    5. Rerun and train SNAP script

    sh Snap_Pult_Creator.sh
    

    4. Run 5 iterations of the third run of maker r

    maker
    
    18.

    Generating and Filtering Final Files

    1. Generate single gff and fasta protein and transcript files from all 3 maker rounds

    gff3_merge -d Assembly_master_datastore_index.log -o Mortino_All.gff 
    
    fasta_merge -d Assembly_master_datastore_index.log -o Mortino_All
    

    2. Identify conserved protein regions in predicted gene models

    InterProScan v5.64-9.60 (RRID:SCR_005829)

    interproscan.sh -appl PfamA -iprlookup -goterms -f tsv -i Mortino.all.maker.proteins.fasta
    ``` **3. Modify the original gff3 file by identifying gene models with conserved protein domains** s
    
    
    
    
    
    

    ipr_update_gff Mortino_All.gff Mortino.all.maker.proteins.fasta.tsv > Mortino_genomic_updated.all.gff

     **4. Eliminate gene models with AED <1** 1
    
    
    
    
    
    

    quality_filter -s Mortino_updated.all.gff > Mortino_FINAL.all.gff

     **5. Calculate annotation statistics with AGAT** T
    
    
    
    AGAT (Another Gff Analysis Toolkit) v1.2.0 
    
    
    
    

    agat_sp_statistics.pl –gff Mortino_FINAL.all.gff -o Mortino_Stats

     **6. Filter out gene models with no conserved protein regions and AED <1 from protein and transcript fasta files** s
    
    
    
    
    
    

    perl -lne 'print $1 if /\tmRNA\t.+ID=([^;]+).+_AED=(.+?);/' Mortino_FINAL.all.gff > genes_from_gff.aed-1.0.ids

    fastaqual_select.pl -f Mortino.all.maker.proteins.fasta -inc genes_from_gff.aed-1.0.ids > Mortino_Proteins_Final.fasta

    fastaqual_select.pl -f Mono_Anotado_All.all.maker.transcripts.fasta -inc genes_from_gff.aed-1.0.ids > Mono_Anotado_All_Transcripts_Final.fasta

    推荐阅读

    Nature Protocols
    Protocols IO
    Current Protocols
    扫码咨询