Blandine Trouche, Alice Brunner, Julie Reveillaud 2025-12-08
DWK=/Users/btrouche/Desktop/Bioinformatique/RosaBioinfo/Celg3_Long_reads
This script was run on i-TROP by doing sbatch script.sh
#!/bin/bash
##### Configuration slurm #####
# define job name
#SBATCH --job-name=guppy_basecall_SUP
# define target partition
#SBATCH -p gpu
# gpu specific options
#SBATCH -A gpu_group
#SBATCH --gres=gpu:1
#SBATCH -c 8
# email alert: where and when
#SBATCH --mail-user=blandine.trouche@ird.fr
#SBATCH --mail-type=ALL
###############################
# create working directory in /scratch
cd /scratch
mkdir trouche-$SLURM_JOB_ID
cd trouche-$SLURM_JOB_ID
# get data from san
scp -r san:/projects/large/RosaLind/Long_Read_Sequencing/Cel_g3_20240626/20230302_1616_MC-113479_FAU44798_43dcecde/fast5_pass /scratch/t
rouche-$SLURM_JOB_ID
# load software to use
module load guppy-gpu/6.5.7
# analysis: running basecalling
guppy_basecaller -c dna_r9.4.1_450bps_sup.cfg -i fast5_pass --recursive \
-s SUP_basecall_no_adapters --num_callers 8 --gpu_runners_per_device 8 \
--device auto --min_qscore 7 --compress_fastq \
--detect_adapter --trim_adapters
# transfer results back to nas
scp -r SUP_basecall_no_adapters san:/projects/large/RosaLind/Long_Read_Sequencing/Cel_g3_20240626/20230302_1616_MC-113479_FAU44798_43dce
cde
# remove data on scratch (after transfer)
cd /scratch
rm -rf trouche-$SLURM_JOB_ID
# prepare data for analysis
cd $DWK
mkdir -p 00_RAW_DATA
# unzip
gunzip 00_RAW_DATA/SUP_basecall_no_adapters/pass/*.gz
# concatenate all files in 1
cat 00_RAW_DATA/SUP_basecall_no_adapters/pass/*.fastq > 00_RAW_DATA/Cel_g3_SUP.fastq
# rezip data for space
gzip 00_RAW_DATA/SUP_basecall_no_adapters/pass/*.fastq
gzip 00_RAW_DATA/Cel_g3_SUP.fastq
conda activate nanoplot
NanoPlot -o 00_RAW_DATA/Nanoplot_out --tsv_stats \
--fastq 00_RAW_DATA/Cel_g3_SUP.fastq.gz \
--loglength
cd $DWK
# Symlink to reference data
ln -s /Users/btrouche/Desktop/Bioinformatique/00_Reference_wPip/01_FASTA 02_FASTA_REF
ln -s /Users/btrouche/Desktop/Bioinformatique/00_Reference_wPip/02_CONTIGS 03_CONTIGS_REF
Masking done on Migale, with script /work_projet/culex/Blandine/01_Metagenomics/03_Cxq/scripts/S1b_mask_Cxm.sh
#!/bin/bash
source /usr/local/genome/Anaconda3/etc/profile.d/conda.sh
# Shell to use for job execution
#$ -S /bin/bash
# Job name
#$ -N bbmask_Cxm
# Nom de la queue
#$ -q short.q
# Export all environment variables
#$ -V
# Run command from current repertory
#$ -cwd
# CPUs number
#$ -pe thread 6
# Logs
#$ -o /work_projet/culex/Blandine/01_Metagenomics/03_Cxq/scripts/logs
#$ -e /work_projet/culex/Blandine/01_Metagenomics/03_Cxq/scripts/logs
# activate conda environment
conda activate bbmap-38.93
ref_folder=/work_projet/culex/Blandine/00_Ref_data
wPipMol_folder=$ref_folder/01_FASTA/wPipMol
# make output folder
mkdir -p $ref_folder/Cxm_masked
# unzip ref genomes
gzip $ref_folder/CulexMol_GCA_024516115.1.fna
gunzip $wPipMol_folder/wPipMol-contigs-prefix-formatted-only.fa.gz
# use bbmask to mask the Culex molestus genome and avoid future problems when removing it by mapping
# 1) prepare wPipMol for mapping
shred.sh in=$wPipMol_folder/wPipMol-contigs-prefix-formatted-only.fa \
out=$ref_folder/Cxm_masked/wPipMol-contigs_shredded.fa \
length=80 minlength=70 overlap=40
# 2) map Culex molestus to wPipMol to identify similar sequences
bbmap.sh ref=$ref_folder/CulexMol_GCA_024516115.1.fna.gz \
in=$ref_folder/Cxm_masked/wPipMol-contigs_shredded.fa \
outm=$ref_folder/Cxm_masked/Cxm_to_wPipMol_mapped.sam \
minid=0.85 maxindel=2 \
threads=6
# 3) mask similar sequences, zones with low entropy and tandem-repeated kmers
bbmask.sh in=$ref_folder/CulexMol_GCA_024516115.1.fna.gz \
out=$ref_folder/Cxm_masked/Cxm_masked.fa \
entropy=0.7 \
sam=$ref_folder/Cxm_masked/Cxm_to_wPipMol_mapped.sam \
threads=6
gzip $ref_folder/Cxm_masked/*.fa
gzip $wPipMol_folder/*.fa
# deactivate conda environment
conda deactivate
# mapping of reads to find lambda phage reads
# this NEEDS the option to not output unaligned reads, otherwise the following filter removes everything
conda activate pomoxis
mkdir -p 04_MAPPING
minimap2 -ax map-ont -a /Users/btrouche/Desktop/Bioinformatique/Long_Read_Sequencing/MinION_seq_runs/00_DATA/Lambda_phage_ref.fasta.gz \
--sam-hit-only \
00_RAW_DATA/Cel_g3_SUP.fastq.gz \
> 04_MAPPING/Cel_g3_lambda_phage_alignment.sam
# sorting lambda phage reads from mosquito + Wolbachia reads
conda activate anvio-8
samtools view 04_MAPPING/Cel_g3_lambda_phage_alignment.sam | cut -f 1 > ids_to_remove_lambda.txt
iu-remove-ids-from-fastq -i 00_RAW_DATA/Cel_g3_SUP.fastq.gz -l ids_to_remove_lambda.txt -d " "
# 32,230 reads removed out of 309,559
# ~90% of reads would be from the organism!!
mv 00_RAW_DATA/Cel_g3_SUP.fastq.gz.survived 00_RAW_DATA/Cel_g3_SUP.target.fastq
mv 00_RAW_DATA/Cel_g3_SUP.fastq.gz.removed 00_RAW_DATA/Cel_g3_SUP.phage.fastq
gzip 00_RAW_DATA/*.fastq
Here I will use the genome of Culex Molestus masked against wPipMol
cd $DWK
# mapping
conda activate pomoxis
minimap2 -ax map-ont -a /Users/btrouche/Desktop/Bioinformatique/00_Ref_data/Cxm_masked/Cxm_masked.fa.gz \
--sam-hit-only \
00_RAW_DATA/Cel_g3_SUP.target.fastq.gz > 04_MAPPING/Cel_g3_CulexMol_alignment.sam
# separating Culex and bacterial reads
conda activate anvio-8
samtools view 04_MAPPING/Cel_g3_CulexMol_alignment.sam | cut -f 1 > ids_to_remove_Culex.txt
iu-remove-ids-from-fastq -i 00_RAW_DATA/Cel_g3_SUP.target.fastq.gz -l ids_to_remove_Culex.txt -d " "
# processed: 277,329 reads, removed: 229,608 reads
mv 00_RAW_DATA/Cel_g3_SUP.target.fastq.gz.survived 00_RAW_DATA/Cel_g3_SUP_noCulex.fastq
rm 00_RAW_DATA/Cel_g3_SUP.target.fastq.gz.removed
gzip 00_RAW_DATA/*.fastq
cd $DWK
conda activate flye
mkdir -p 02_ASSEMBLY_onlybac
# assembly of long reads : Flye (for metagenomes?)
flye --nano-raw 00_RAW_DATA/Cel_g3_SUP_noCulex.fastq.gz \
--out-dir 02_ASSEMBLY_onlybac --meta
# Raw reads N50/N90: 3614 / 909
cd $DWK
conda activate anvio-8
mkdir -p 03_CONTIGS
mkdir -p 00_LOGS
anvi-gen-contigs-database -f 02_ASSEMBLY_onlybac/assembly.fasta \
-o 03_CONTIGS/onlybac_assembly-contigs.db \
--project-name Celg3_onlybac >> 00_LOGS/assembly_only_bac-anvi_gen_contigs_database.log 2>&1
anvi-run-hmms -c 03_CONTIGS/onlybac_assembly-contigs.db >> 00_LOGS/assembly_only_bac-anvi-run-hmms.log 2>&1
anvi-run-scg-taxonomy -c 03_CONTIGS/onlybac_assembly-contigs.db \
>> 00_LOGS/assembly_only_bac-anvi_run_scg_taxonomy.log 2>&1
####
anvi-estimate-scg-taxonomy -c 03_CONTIGS/onlybac_assembly-contigs.db \
--metagenome-mode
anvi-get-sequences-for-hmm-hits -c 03_CONTIGS/onlybac_assembly-contigs.db --hmm-source Bacteria_71
# mostly in contig 2
anvi-run-kegg-kofams -c 03_CONTIGS/onlybac_assembly-contigs.db
anvi-run-ncbi-cogs -c 03_CONTIGS/onlybac_assembly-contigs.db
# check taxonomy of contigs with centrifuge :
anvi-get-sequences-for-gene-calls -c 03_CONTIGS/onlybac_assembly-contigs.db \
-o 03_CONTIGS/only_bac-gene_calls.fa \
>> 00_LOGS/export_gene_calls_only_bac.log 2>&1
# second step has to be done on a cluster with centrifuge installed (and more particularly its database)
# first send your data on the server (scp or filezilla)
# then make a script with the following command
centrifuge -f -x /home/shared/db/centrifuge_db/ncbi_nr/nt \
only_bac-gene_calls.fa \
-S out_centrifuge-only_bac.tsv \
--report-file centrifuge-only_bac.tsv \
--threads 3 >> 00_LOGS/centrifuge-only_bac.log 2>&1
# get the results back locally (scp or filezilla)
anvi-import-taxonomy-for-genes -c 03_CONTIGS/onlybac_assembly-contigs.db \
-i 03_CONTIGS/centrifuge-only_bac.tsv \
03_CONTIGS/out_centrifuge-only_bac.tsv \
-p centrifuge >> 00_LOGS/anvi-import-taxonomy-for-genes_centrifuge_only_bac.log 2>&1
mkdir -p 04_MAPPING/only_bac
# mapping raw reads on assembled contigs
conda activate pomoxis
minimap2 -ax map-ont -a 02_ASSEMBLY_onlybac/assembly.fasta \
00_RAW_DATA/Cel_g3_SUP.fastq.gz \
--sam-hit-only > 04_MAPPING/only_bac/Celg3_SUP_contigs_aligned.sam
conda activate anvio-8
samtools view -bS 04_MAPPING/only_bac/Celg3_SUP_contigs_aligned.sam \
-o 04_MAPPING/only_bac/Celg3_SUP_contigs_aligned-RAW.bam
anvi-init-bam 04_MAPPING/only_bac/Celg3_SUP_contigs_aligned-RAW.bam \
-o 04_MAPPING/only_bac/Celg3_SUP_contigs_aligned.bam
anvi-profile -i 04_MAPPING/only_bac/Celg3_SUP_contigs_aligned.bam \
-c 03_CONTIGS/onlybac_assembly-contigs.db --cluster-contigs \
-o 05_ANVIO_PROFILE/only_bac --sample-name Celg3 \
--overwrite-output-destinations --min-contig-length 0 >> 00_LOGS/anvi-profile_only_bac.log 2>&1
anvi-interactive -p 05_ANVIO_PROFILE/only_bac/PROFILE.db -c 03_CONTIGS/onlybac_assembly-contigs.db
anvi-summarize -p 05_ANVIO_PROFILE/only_bac/PROFILE.db \
-c 03_CONTIGS/onlybac_assembly-contigs.db \
-C default \
-o 06_SUMMARY/only_bac
Apply proovframe and check how it affects completion and redundancy of MAG. FYI, with super-accuracy basecalled reads, we do not seem to run as much into the problem of broken ORFs and overestimated redundancy.
mkdir -p 07_PROOVFRAME
DIAMOND_db=/Users/btrouche/opt/miniconda3/envs/anvio-7.1/lib/python3.6/site-packages/anvio/data/misc/COG/COG20/DB_DIAMOND/COG.dmnd
conda activate anvio-8
### proovframe on target assembly (phage reads filtered out + binning done)
/Users/btrouche/Desktop/proovframe/bin/proovframe map -d $DIAMOND_db \
-o 07_PROOVFRAME/Wolbachia_onlybac_SUP_corrected.tsv \
06_SUMMARY/only_bac/bin_by_bin/Bin_1/Bin_1-contigs.fa
/Users/btrouche/Desktop/proovframe/bin/proovframe fix -o 07_PROOVFRAME/Wolbachia_onlybac_SUP_corrected.fa \
06_SUMMARY/only_bac/bin_by_bin/Bin_1/Bin_1-contigs.fa \
07_PROOVFRAME/Wolbachia_onlybac_SUP_corrected.tsv
# get completeness
anvi-gen-contigs-database -f 07_PROOVFRAME/Wolbachia_onlybac_SUP_corrected.fa \
-o 07_PROOVFRAME/Wolb_onlybac_corrected-contigs.db \
--project-name Celg3_onlybac
anvi-run-hmms -c 07_PROOVFRAME/Wolb_onlybac_corrected-contigs.db
anvi-estimate-genome-completeness -c 07_PROOVFRAME/Wolb_onlybac_corrected-contigs.db
mkdir -p 07_PROOVFRAME/04_MAPPING
# mapping raw reads on assembled contigs
conda activate pomoxis
minimap2 -ax map-ont -a 07_PROOVFRAME/Wolbachia_onlybac_SUP_corrected.fa \
00_RAW_DATA/Cel_g3_SUP.fastq.gz \
--sam-hit-only > 07_PROOVFRAME/04_MAPPING/Celg3_SUP-Wolb_onlybac_corrected.sam
conda activate anvio-8
samtools view -bS 07_PROOVFRAME/04_MAPPING/Celg3_SUP-Wolb_onlybac_corrected.sam \
-o 07_PROOVFRAME/04_MAPPING/Celg3_SUP-Wolb_onlybac_corrected-RAW.bam
anvi-init-bam 07_PROOVFRAME/04_MAPPING/Celg3_SUP-Wolb_onlybac_corrected-RAW.bam \
-o 07_PROOVFRAME/04_MAPPING/Celg3_SUP-Wolb_onlybac_corrected.bam
anvi-get-sequences-for-gene-calls -c 07_PROOVFRAME/Wolb_onlybac_corrected-contigs.db \
-o 07_PROOVFRAME/Wolb_onlybac_corrected_genecalls.gff --export-gff3 \
--annotation-source COG20_FUNCTION
anvi-run-ncbi-cogs -c 07_PROOVFRAME/Wolb_onlybac_corrected-contigs.db
Extracting reads of interest for blasting
conda activate samtools
samtools view 07_PROOVFRAME/04_MAPPING/Celg3_SUP-Wolb_onlybac_corrected.bam | grep -w "dee6845e-22e6-40a2-b5cb-317536e63ab6"