#!/bin/bash
# RNA-Seq 
# 2022-02



# =============================================================================================================================================================
# ==                                                          SLURM parameters                                                                               ==
# =============================================================================================================================================================

# Decide how much computer power you need
# The programs used in this script can only be executed on 1 NODE
# You can use a max of 24 task per node. But the lower the number of tasks requested the shorter the queue when submitting a job
#SBATCH --nodes=1			
#SBATCH --ntasks-per-node=2
#SBATCH --mem=8GB

# Choose between long or short queue: A short job will start quickly after submitting, but will be terminated after 30 minutes
# Normally short is long enough
#SBATCH --time=24:00:00
##SBATCH -p short


# Personal stuff; Change this to your personal settings 
#SBATCH --job-name=featureCounts
##SBATCH --mail-type=END
##SBATCH --mail-user=anne.de.jong@rug.nl
#SBATCH --output=slurm-featureCounts-%j.log



# =============================================================================================================================================================
# ==                                                          Load modules                                                                                   ==
# =============================================================================================================================================================
	
module load SAMtools/1.16.1-GCC-11.3.0
module load BEDTools/2.30.0-GCC-11.3.0
module load Biopython/1.81-foss-2022b
module load Subread/2.0.4-GCC-11.3.0
module load deepTools/3.5.1-foss-2021b

# Global parameters needed for this script
# setting global parameters
cpu=$SLURM_JOB_CPUS_PER_NODE
SOFTWAREDIR=/home1/p127804/software
AnneTools=/userapps/hb-molgen/AnneTools

#export PERL5LIB=$SOFTWAREDIR/molgentools_mirror/lib


# =============================================================================================================================================================
# ==                                                          Functions                                                                                      ==
# =============================================================================================================================================================


function featureCount {
	name=$1
	# Once the BAM file is ready, this can be combined with genome annotation to calculate how many reads are mapped per feature
	# Features are given in the .GFF or .GFF3 file format
	# Note that sequence the RNA library prep can be done stranded or unstranded. Be sure to select the proper option
	# -s =  0 (unstranded), 1 (stranded) and 2 (reversely stranded) 
	printf "\n========== featureCount: "$name" ======================================\n"	
	# 1. Add number of reads per feature
	featureCounts -s 1 -M -t $gff_type -g $gff_id -a $GFF3 -o $resultsdir/$name.1.counts $resultsdir/$name.sorted.bam
	featureCounts -s 2 -M -t $gff_type -g $gff_id -a $GFF3 -o $resultsdir/$name.2.counts $resultsdir/$name.sorted.bam
	# 2. Remove the comment created by featureCounts
	sed -i '1d' $resultsdir/$name.counts
	# 3. Add RPK and RPKM values
	python3 $AnneTools/rnaseq/Counts_Convert.py -sessiondir $resultsdir -query $name.1.counts -out $name.1.rpkm
	python3 $AnneTools/rnaseq/Counts_Convert.py -sessiondir $resultsdir -query $name.2.counts -out $name.2.rpkm
}





function CoverageBed {
	name=$1
	# This is an optional function to make BigWig and BED files that can used in various other programs
	# Depends in chromsizes file which can be generated using /data/molgentools/rnaseq/make_chromsizes.pl
	printf "\n========== CoverageBed: "$name" ======================================\n"	
	stranded=true
	if [ ! -e $genome.chromsizes ]; then
		echo "ERROR, $genome.chromsizes Not found!"
	elif [ $stranded ]; then
		printf "genomeCoverageBed for $name\n"
		#genomeCoverageBed -d -ibam $resultsdir/$name.sorted.bam -g $genome.chromsizes -strand + > $resultsdir/$name.plus.coverage
		#genomeCoverageBed -d -ibam $resultsdir/$name.sorted.bam -g $genome.chromsizes -strand - > $resultsdir/$name.minus.coverage
		genomeCoverageBed -bg -ibam $resultsdir/$name.sorted.bam -g $genome.chromsizes -strand + > $resultsdir/$name.plus.bedgraph
		genomeCoverageBed -bg -ibam $resultsdir/$name.sorted.bam -g $genome.chromsizes -strand - > $resultsdir/$name.minus.bedgraph
		sort -k1,1 -k2,2n $resultsdir/$name.plus.bedgraph > $resultsdir/$name.plus.sort.bedgraph 
		sort -k1,1 -k2,2n $resultsdir/$name.minus.bedgraph  > $resultsdir/$name.min.sort.bedgraph
	else	
		genomeCoverageBed -bg -ibam $resultsdir/$name.sorted.bam -g $genome.chromsizes > $resultsdir/$name.bedgraph
		sort -k1,1 -k2,2n $resultsdir/$name.bedgraph > $resultsdir/$name.sort.bedgraph
	fi
}

function my_bamCoverage {
	name=$1
	printf "\n========== DeepTools: "$name" ======================================\n"	
	bamCoverage -b $resultsdir/$name.sorted.bam -o $resultsdir/$name.bw --binSize 10 --normalizeUsing RPKM --smoothLength 30

}

function MergeTables {
	# 1. Merge tables: Combine counts or rpkm values from each file to one table
	python3 $AnneTools/Merge_Tables.py -sessiondir $resultsdir -regex '.*1.counts$' -col 6 -o 00.merged.1.counts.txt
	python3 $AnneTools/Merge_Tables.py -sessiondir $resultsdir -regex '.*2.counts$' -col 6 -o 00.merged.2.counts.txt
	python3 $AnneTools/Merge_Tables.py -sessiondir $resultsdir -regex '.*1.rpkm$'   -col 8 -o 00.merged.1.rpkm.txt
	python3 $AnneTools/Merge_Tables.py -sessiondir $resultsdir -regex '.*2.rpkm$'   -col 8 -o 00.merged.2.rpkm.txt

	# 2. Add Column with Coefficient of Variance (CV) per feature
	python3 $AnneTools/Add_CV.py -sessiondir $resultsdir -query 00.merged.1.counts.txt -out 00.merged.1.counts.CV.txt
	python3 $AnneTools/Add_CV.py -sessiondir $resultsdir -query 00.merged.2.counts.txt -out 00.merged.2.counts.CV.txt
	python3 $AnneTools/Add_CV.py -sessiondir $resultsdir -query 00.merged.1.rpkm.txt   -out 00.merged.1.rpkm.CV.txt
	python3 $AnneTools/Add_CV.py -sessiondir $resultsdir -query 00.merged.2.rpkm.txt   -out 00.merged.2.rpkm.CV.txt

	# 3. Clean the table from low values, if needed
	#$SOFTWAREDIR/molgentools_mirror/tables/remove_sum_zero.pl 00.merged.counts.txt 00.merged_clean_sum100.table
}


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


# =============================================================================================================================================================
# ==                                                          Main script                                                                                    ==
# =============================================================================================================================================================

# Most logical struture is to make 3 folders in the SESSIONDIR
# /fastq     ==> Copy here all fastq reads
# /genomes   ==> All genome info
# /scripts   ==> Location of this script
# a /results folder will be created by this script


# 1.# Study the GFF file and decide what you want to use for feature counts
	# gff_type is the 3th column of the GFF file. Optionally, change this for your needs
	# gff_id is one of the fields from the 9th column of the GFF file. Optionally, change this for your needs
	gff_type='gene'
	gff_id='locus_tag'
	


# 2. featureCount 
resultsdir=/scratch/p127804/PROJECTS/Douwe/Jennifer_202407_017/results_Streptococcus
genome=/scratch/p127804/PROJECTS/Douwe/genomes/GCA_903886475.1_Streptococcus_thermophilus_CIRM_65_genomic
GFF3=$genome.gff

# featureCount Brie28_1          
# featureCount Brie28_2          
# featureCount CNRZ302_1         
# featureCount CNRZ302_2         
# featureCount Douc24_1          
# featureCount Douc24_2          
# featureCount Moz109_1          
# featureCount Moz109_2          
# featureCount Nect13_1_percent_1
# featureCount Nect13_1_percent_2
# featureCount Nect13_5_percent_1
# featureCount Nect13_5_percent_2
# featureCount St50_1_percent_1  
# featureCount St50_1_percent_2  
# featureCount St50_5_percent_1  
# featureCount St50_5_percent_2  
# featureCount STMM11_1          
# featureCount STMM11_2          
# 
genome=/scratch/p127804/PROJECTS/Douwe/genomes/Brie28/Brie28_ncbi
GFF3=$genome.gff
featureCount Brie28_1           
featureCount Brie28_2           
genome=/scratch/p127804/PROJECTS/Douwe/genomes/CNRZ302/CNRZ302_ncbi
GFF3=$genome.gff
featureCount CNRZ302_1          
featureCount CNRZ302_2          
genome=/scratch/p127804/PROJECTS/Douwe/genomes/Douc24/Douc24_ncbi
GFF3=$genome.gff
featureCount Douc24_1 
featureCount Douc24_2 
genome=/scratch/p127804/PROJECTS/Douwe/genomes/Moz109/Moz109_ncbi
GFF3=$genome.gff
featureCount Moz109_1
featureCount Moz109_2
genome=/scratch/p127804/PROJECTS/Douwe/genomes/Nect13/Nect13_ncbi
GFF3=$genome.gff
featureCount Nect13_1_percent_1
featureCount Nect13_1_percent_2
featureCount Nect13_5_percent_1
featureCount Nect13_5_percent_2
genome=/scratch/p127804/PROJECTS/Douwe/genomes/St50/St50_ncbi
GFF3=$genome.gff
featureCount St50_1_percent_1
featureCount St50_1_percent_2
featureCount St50_5_percent_1
featureCount St50_5_percent_2
genome=/scratch/p127804/PROJECTS/Douwe/genomes/STMM11/STMM11_zk
GFF3=$genome.gff 
featureCount STMM11_1
featureCount STMM11_2
 


my_bamCoverage Brie28_1          
my_bamCoverage Brie28_2          
my_bamCoverage CNRZ302_1         
my_bamCoverage CNRZ302_2         
my_bamCoverage Douc24_1          
my_bamCoverage Douc24_2          
my_bamCoverage Moz109_1          
my_bamCoverage Moz109_2          
my_bamCoverage Nect13_1_percent_1
my_bamCoverage Nect13_1_percent_2
my_bamCoverage Nect13_5_percent_1
my_bamCoverage Nect13_5_percent_2
my_bamCoverage St50_1_percent_1  
my_bamCoverage St50_1_percent_2  
my_bamCoverage St50_5_percent_1  
my_bamCoverage St50_5_percent_2  
my_bamCoverage STMM11_1          
my_bamCoverage STMM11_2   

resultsdir=/scratch/p127804/PROJECTS/Douwe/Jennifer_202407_017/results_Bifidobacterium
genome=/scratch/p127804/PROJECTS/Douwe/genomes/Bifidobacterium_longum_subsp_longum_NCIMB8809_ASM144625v1_genomic
GFF3=$genome.gff

# featureCount Blong_Lactose_1
# featureCount Blong_Lactose_2
# featureCount Blong_XOS_1    
# featureCount Blong_XOS_2    
# featureCount Blong_Xylose_1 
# featureCount Blong_Xylose_2 
# 
# MergeTables

# my_bamCoverage Blong_Lactose_1
# my_bamCoverage Blong_Lactose_2
# my_bamCoverage Blong_XOS_1    
# my_bamCoverage Blong_XOS_2    
# my_bamCoverage Blong_Xylose_1 
# my_bamCoverage Blong_Xylose_2 









