---
# System prepended metadata

title: rnaseq-ref-trinity.sh

---

# rnaseq-ref-trinity.sh

#!/bin/bash

#Deve-se passar como primeiro argumento na linha de comando o diretório contendo os arquivos de entrada no formato .fastq 
#processados

input=$1

# Se naõ for passado diretório input, print então na tela a mensagem dizendo que está faltando o argumento, e se foi 
# passado mais é o diretório errado ou não contem o arquivo necessário, então print na tela dizendo que o argumento 
# passado é errado.

if [ ! ${input} ]
then   
        echo "Missing input directory"
        exit
else   
        if [ ! -d ${input} ]
        then   
                echo "Wrong input directory ${input}"
                exit
        fi
fi

# output - É necessário passar como segundo argumento o diretório para armazenar o resultado do processo de montagem

output=$2

# Similarmente, se não foi passado nenhum argumento, print na tela que estão faltando, ou se foi passado e não é um
# diretório,print na tela que o argumento está incorreto

if [ ! ${output} ]
then   
        echo "Missing output directory"
        exit
else   
        if [ ! -d ${output} ]
        then   
                echo "Wrong output directory ${output}"
                exit
        fi
fi

# Foi criado uma variável para representar o número de processadores a serem utilizados
num_threads="8"

# Foi criado outra variável para representar a quantidade de memória que se pode utilizar para o processo de montagem
mem_gb="10G"


# Arquivos e diretórios de saída (output) 
# Foram criadas varáveis para o diretório passada como outpur e os diretórios que serão criados durante o processo

basedir_out="${output}"

trinity_out="${basedir_out}/trinity_GG_assembled"

# Foram criados diretórios para as saídas dos programas que serão utilizados a seguir

mkdir -p ${trinity_out}

# Foi criado uma variável para os arquivos de alinhamento no formato bam

bamfiles=()

# Para a variável bamfiles, encontre dentro do diretório passado como input todos os arquivos com nome "Aligned.out.sorted.bam"

bamfiles=( $( find ${input} -name 'Aligned.out.sorted.bam' ) )

# Fazer uma fusão de todos os arquivos Aligned.out.sorted.bam encontrados

samtools merge -f ${basedir_out}/All.sorted.bam ${bamfiles[*]}

# Montagem dos transcritos utilizando o montador Trinity e o alinhamento (utilizando genoma de referência) como guia.
if [ ! -d ${trinity_out}/Trinity.timing ]; then
	
	echo -e "Assembling step (Trinity) ..."

	Trinity --KMER_SIZE 27 \
		--output ${trinity_out} \
		--seqType fq \
		--max_memory ${mem_gb} \
		--CPU ${num_threads} \
		--min_per_id_same_path 95 \
		--max_diffs_same_path  5 \
		--path_reinforcement_distance 5 \
		--group_pairs_distance 500 \
		--min_glue 5 \
		--min_contig_length 600 \
               	--min_kmer_cov 3 \
		--genome_guided_bam ${basedir_out}/All.sorted.bam \
		--genome_guided_max_intron 10000 \
		 > ${trinity_out}/Trinity.log.out.txt \
		2> ${trinity_out}/Trinity.log.err.txt
fi

# --KMER_SIZE: Tamanho dos kmers a serem originados (serão decompostos a partir das reads para serem então montados)
# --output: Diretório que conterá os dados de saída gerados.
# --seqType: Formato das reads que vão ser utilizadas no processo, no caso fastq.
# --max_memory: Quanto de espaço será destinado a esse processo.
# --CPU ${num_threads}: Número de processadores a serem utilizados.
# --min_per_id_same_path: minimo de indentidade em percentual para duas sequencias para  serem unidas em um só.
# --max_diffs_same_path: maximo de diferença permitida entre duas sequencias para combina-las
# --path_reinforcement_distance: minimo de sobreposição entre as reads.
# --group_pairs_distance: reads que não se encontrarem dentro dessa distancia, serão tratads como single-end
# --min_glue: número minimo de reads para que  cole ou junte os contigs gerados.
# --min_contig_length: tamanho minimo do contig
# --min_kmer_cov: minimo de kmers para serem montados na etapa Inchworm.
# --genome_guided_bam: arquivo de alinhamento a servir como guia (realizado na etapa acima)
# --genome_guided_max_intron: Tamanho maximo do intron do arquivo de alinhamento