#!/bin/bash

# https://github.com/bbuchfink/diamond
# https://resources.qiagenbioinformatics.com/tutorials/Metatranscriptome_Analysis.pdf
# https://microbiomejournal.biomedcentral.com/articles/10.1186/s40168-023-01562-6
# https://www-nature-com.proxy-ub.rug.nl/articles/nmeth.3176



#SBATCH --nodes=1			
#SBATCH --ntasks-per-node=1
#SBATCH --mem=64GB
#SBATCH --time=10:00:00
#SBATCH --job-name=diamond
#SBATCH --output=slurm-diamond-%j.log


module load DIAMOND/2.1.8-GCC-12.2.0
module load BioPerl/1.7.8-GCCcore-11.3.0

cpu=1

UNIPROTDIR=/scratch/public/genomes/uniprot
DIAMOND_DB=$UNIPROTDIR/uniprot_sprot.dmnd
SOFWAREDIR=/scratch/hb-molgen/software/molgentools_mirror
export PERL5LIB=$SOFWAREDIR/lib


# Example: https://metagenomics-workshop.readthedocs.io/en/latest/annotation/taxonomic_annotation.html
# --meta  this flag is required for metagenomic sample data
# --rna   this flag is required for RNA-Seq data
# --min-score
# --evalue 0.001 is the default of DIAMOND
# https://currentprotocols.onlinelibrary.wiley.com/doi/full/10.1002/cpz1.59


function my_diamond {
	name=$1
	fq=$2
	# -k 1 means only the best hit
	diamond blastx --threads $cpu -k 1 --tmpdir $TMPDIR --query $datadir/$fq --db $DIAMOND_DB --daa $TMPDIR/$name.diamond.daa 
	diamond view --threads $cpu --daa $TMPDIR/$name.diamond.daa --out $resultdir/$name.diamond.tab
	rm $TMPDIR/$name.diamond.daa
	
	my_class_count $name
}


function my_class_count {
	name=$1
	database=$UNIPROTDIR/uniprot_sprot.GO
	$SOFWAREDIR/metagenomics/CLASS_count.pl -db $database -diamond $resultdir/$name.diamond.tab -o $resultdir/$name.GO.count

	database=$UNIPROTDIR/uniprot_sprot.KEGGPATHWAY
	$SOFWAREDIR/metagenomics/CLASS_count.pl -db $database -diamond $resultdir/$name.diamond.tab -o $resultdir/$name.KEGGPATHWAY.count

	
#	database=/data/pg-molgen/databases/uniprot_sprot/uniprot_sprot.KO
#	/data/pg-molgen/software/molgentools_mirror/metagenomics/CLASS_count.pl -db $database -diamond $diamondresultdir/$name.diamond.tab -o $classdir/$name.KO.count
#	
#	database=/data/pg-molgen/databases/uniprot_sprot/uniprot_sprot.IPR
#	/data/pg-molgen/software/molgentools_mirror/metagenomics/CLASS_count.pl -db $database -diamond $diamondresultdir/$name.diamond.tab -o $classdir/$name.IPR.count
#	
#	database=/data/pg-molgen/databases/uniprot_sprot/uniprot_sprot.PFAM
#	/data/pg-molgen/software/molgentools_mirror/metagenomics/CLASS_count.pl -db $database -diamond $diamondresultdir/$name.diamond.tab -o $classdir/$name.PFAM.count
#	
#	database=/data/pg-molgen/databases/uniprot_sprot/uniprot_sprot.Keyword
#	/data/pg-molgen/software/molgentools_mirror/metagenomics/CLASS_count.pl -db $database -diamond $diamondresultdir/$name.diamond.tab -o $classdir/$name.Keyword.count
#	
#	database=/data/pg-molgen/databases/uniprot_sprot/uniprot_sprot.eggNOG
#	/data/pg-molgen/software/molgentools_mirror/metagenomics/CLASS_count.pl -db $database -diamond $diamondresultdir/$name.diamond.tab -o $classdir/$name.eggNOG.count
	
}

function MergeTables {
	
	# -s  		output folder [default=current folder]
	# -tables	folder with tables to merge
	# -regex	regular expression the select filenames
	# -columns 	comma separed list if columns to parse to the output table e.g. 0,3,7
	prefix=$1   # e.g.,  prefix=Po  prefix=.  for all: MergeTables . GO 
	CLASS=$2	# e.g.,  CLASS="GO"
	suffix=".count$"
	regex="^$prefix.*$CLASS$suffix"
	echo $regex
	
	$SOFWAREDIR/tables/merge_tables.pl -s $resultdir -tables $resultdir -regex "$regex" -columns '0,1' -o 00.$prefix.$CLASS.table

#	$SOFWAREDIR/tables/merge_tables.pl -s $resultdir -tables $resultdir -regex 'GO.count$' -columns '0,1' -o 00.merged.GO.table
#	$SOFWAREDIR/tables/merge_tables.pl -s $resultdir -tables $resultdir -regex 'KEGGPATHWAY.count$' -columns '0,1' -o 00.merged.KEGGPATHWAY.table
}

function my_mkdir {
	if [ ! -d $1 ]; then
		mkdir $1 ;
	fi
}


# ================================= folders ===============================================

datadir=/scratch/p127804/PROJECTS/PrimBio/20240113/fastq
datadir=/scratch/p127804/PROJECTS/PrimBio/20240113/sortmerna   # without rRNA reads
resultdir=/scratch/p127804/PROJECTS/PrimBio/20240113/diamond_clean

my_mkdir $resultdir

# ================================= samples ===============================================

MergeTables . GO 
MergeTables . KEGGPATHWAY 

MergeTables Cm GO 
MergeTables Cm KEGGPATHWAY 


# my_diamond Bd01 Bd01_fwd.fq.gz Bd01_rev.fq.gz 
# my_diamond Cm01 Cm01_fwd.fq.gz Cm01_rev.fq.gz 
# my_diamond Cm02 Cm02_fwd.fq.gz Cm02_rev.fq.gz 
# my_diamond Cm03 Cm03_fwd.fq.gz Cm03_rev.fq.gz 
# my_diamond Cm04 Cm04_fwd.fq.gz Cm04_rev.fq.gz 
# my_diamond Cm05 Cm05_fwd.fq.gz Cm05_rev.fq.gz 
# my_diamond Cm06 Cm06_fwd.fq.gz Cm06_rev.fq.gz 
# my_diamond Cm07 Cm07_fwd.fq.gz Cm07_rev.fq.gz 
# my_diamond Cm08 Cm08_fwd.fq.gz Cm08_rev.fq.gz 
# my_diamond Cm09 Cm09_fwd.fq.gz Cm09_rev.fq.gz 
# my_diamond Cm10 Cm10_fwd.fq.gz Cm10_rev.fq.gz 
# my_diamond Cm11 Cm11_fwd.fq.gz Cm11_rev.fq.gz 
# my_diamond Cm12 Cm12_fwd.fq.gz Cm12_rev.fq.gz 
# my_diamond Cm13 Cm13_fwd.fq.gz Cm13_rev.fq.gz 
# my_diamond Cm14 Cm14_fwd.fq.gz Cm14_rev.fq.gz 
# my_diamond Cm15 Cm15_fwd.fq.gz Cm15_rev.fq.gz 
# my_diamond Cm16 Cm16_fwd.fq.gz Cm16_rev.fq.gz 
# my_diamond Cm17 Cm17_fwd.fq.gz Cm17_rev.fq.gz 
# my_diamond Cm18 Cm18_fwd.fq.gz Cm18_rev.fq.gz 
# my_diamond Cm19 Cm19_fwd.fq.gz Cm19_rev.fq.gz 
# my_diamond Cm20 Cm20_fwd.fq.gz Cm20_rev.fq.gz 
# my_diamond Cm21 Cm21_fwd.fq.gz Cm21_rev.fq.gz 
# my_diamond Cm22 Cm22_fwd.fq.gz Cm22_rev.fq.gz 
# my_diamond Cm23 Cm23_fwd.fq.gz Cm23_rev.fq.gz 
# my_diamond Dg01 Dg01_fwd.fq.gz Dg01_rev.fq.gz 
# my_diamond Dg02 Dg02_fwd.fq.gz Dg02_rev.fq.gz 
# my_diamond Dg03 Dg03_fwd.fq.gz Dg03_rev.fq.gz 
# my_diamond Dg04 Dg04_fwd.fq.gz Dg04_rev.fq.gz 
# my_diamond Fx01 Fx01_fwd.fq.gz Fx01_rev.fq.gz 
# my_diamond Fx02 Fx02_fwd.fq.gz Fx02_rev.fq.gz 


#my_diamond Po01 Po01_fwd.fq.gz Po01_rev.fq.gz 
#my_diamond Po02 Po02_fwd.fq.gz Po02_rev.fq.gz 
#my_diamond Po03 Po03_fwd.fq.gz Po03_rev.fq.gz 
#my_diamond Po04 Po04_fwd.fq.gz Po04_rev.fq.gz 
#my_diamond Po05 Po05_fwd.fq.gz Po05_rev.fq.gz 
#my_diamond Po06 Po06_fwd.fq.gz Po06_rev.fq.gz 
#my_diamond Po07 Po07_fwd.fq.gz Po07_rev.fq.gz 
#my_diamond Po08 Po08_fwd.fq.gz Po08_rev.fq.gz 
#my_diamond Po09 Po09_fwd.fq.gz Po09_rev.fq.gz 
#my_diamond Po10 Po10_fwd.fq.gz Po10_rev.fq.gz 
#my_diamond Po11 Po11_fwd.fq.gz Po11_rev.fq.gz 
#my_diamond Ra01 Ra01_fwd.fq.gz Ra01_rev.fq.gz 
#my_diamond Ra02 Ra02_fwd.fq.gz Ra02_rev.fq.gz 
#my_diamond Ra03 Ra03_fwd.fq.gz Ra03_rev.fq.gz 
#my_diamond Ra04 Ra04_fwd.fq.gz Ra04_rev.fq.gz 
#my_diamond Ra05 Ra05_fwd.fq.gz Ra05_rev.fq.gz 
#my_diamond Ra06 Ra06_fwd.fq.gz Ra06_rev.fq.gz 
#my_diamond Ra07 Ra07_fwd.fq.gz Ra07_rev.fq.gz 
#my_diamond Ra08 Ra08_fwd.fq.gz Ra08_rev.fq.gz 
#my_diamond Ra09 Ra09_fwd.fq.gz Ra09_rev.fq.gz 
#my_diamond Ra10 Ra10_fwd.fq.gz Ra10_rev.fq.gz 
#my_diamond Ra11 Ra11_fwd.fq.gz Ra11_rev.fq.gz 
#my_diamond Ra12 Ra12_fwd.fq.gz Ra12_rev.fq.gz 
#my_diamond Ra13 Ra13_fwd.fq.gz Ra13_rev.fq.gz 
#my_diamond Ra14 Ra14_fwd.fq.gz Ra14_rev.fq.gz 
#my_diamond Ra15 Ra15_fwd.fq.gz Ra15_rev.fq.gz 
#my_diamond Ra16 Ra16_fwd.fq.gz Ra16_rev.fq.gz 
#my_diamond Ra17 Ra17_fwd.fq.gz Ra17_rev.fq.gz 
#my_diamond Ra18 Ra18_fwd.fq.gz Ra18_rev.fq.gz 
#my_diamond Ra19 Ra19_fwd.fq.gz Ra19_rev.fq.gz 
#my_diamond Ra20 Ra20_fwd.fq.gz Ra20_rev.fq.gz 
#my_diamond Ra21 Ra21_fwd.fq.gz Ra21_rev.fq.gz 
#my_diamond Ra22 Ra22_fwd.fq.gz Ra22_rev.fq.gz 
#my_diamond Ra23 Ra23_fwd.fq.gz Ra23_rev.fq.gz 
#my_diamond Ra24 Ra24_fwd.fq.gz Ra24_rev.fq.gz 
#my_diamond Ra25 Ra25_fwd.fq.gz Ra25_rev.fq.gz 
#my_diamond Ra26 Ra26_fwd.fq.gz Ra26_rev.fq.gz 
#my_diamond Ra27 Ra27_fwd.fq.gz Ra27_rev.fq.gz 
#my_diamond Ra28 Ra28_fwd.fq.gz Ra28_rev.fq.gz 
#my_diamond Ra29 Ra29_fwd.fq.gz Ra29_rev.fq.gz 
#my_diamond Ra30 Ra30_fwd.fq.gz Ra30_rev.fq.gz 
#my_diamond Ra31 Ra31_fwd.fq.gz Ra31_rev.fq.gz 
#my_diamond Ra32 Ra32_fwd.fq.gz Ra32_rev.fq.gz 
#my_diamond Ra33 Ra33_fwd.fq.gz Ra33_rev.fq.gz 
#my_diamond Ra34 Ra34_fwd.fq.gz Ra34_rev.fq.gz 
#my_diamond Ra35 Ra35_fwd.fq.gz Ra35_rev.fq.gz 
#my_diamond Ra36 Ra36_fwd.fq.gz Ra36_rev.fq.gz 
#my_diamond Ra37 Ra37_fwd.fq.gz Ra37_rev.fq.gz 
#my_diamond Ra38 Ra38_fwd.fq.gz Ra38_rev.fq.gz 
#my_diamond Ra39 Ra39_fwd.fq.gz Ra39_rev.fq.gz 
#my_diamond Ra40 Ra40_fwd.fq.gz Ra40_rev.fq.gz 
#my_diamond Sk01 Sk01_fwd.fq.gz Sk01_rev.fq.gz 
#my_diamond Sk02 Sk02_fwd.fq.gz Sk02_rev.fq.gz 
#my_diamond Sk03 Sk03_fwd.fq.gz Sk03_rev.fq.gz 
#my_diamond Wc01 Wc01_fwd.fq.gz Wc01_rev.fq.gz 
#my_diamond Wc02 Wc02_fwd.fq.gz Wc02_rev.fq.gz 
#my_diamond Wc03 Wc03_fwd.fq.gz Wc03_rev.fq.gz 
#my_diamond Wc04 Wc04_fwd.fq.gz Wc04_rev.fq.gz 
#my_diamond Wc05 Wc05_fwd.fq.gz Wc05_rev.fq.gz 
#my_diamond Wc06 Wc06_fwd.fq.gz Wc06_rev.fq.gz 
