# 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