# rnaseq-trinity-abundance.sh #!/bin/bash # É necessário passar um argumento que servirá como input,um diretório contendo os arquivos no formato .fastq input=$1 # Para validação desse argumento, se não foi passado, printe na tela a mensagem que está faltando um diretório de entrada, # Se não existe esse diretório, printe na tela um mensagem dizendo que está errado o argumento passado. if [ ! ${input} ] then echo "Missing input (renamed for Trinity) directory" exit else if [ ! -d ${input} ] then echo "Wrong input (renamed for Trinity) directory ${input}" exit fi fi # É necessário passar como segundo argumento o diretório contendo o arquivo de montagem trinity_output=$2 # É realizada a validação desse argumento, "trinity_output", similarmente ao argumento anterior if [ ! ${trinity_output} ] then echo "Missing Trinity output directory" exit else if [ ! -d ${trinity_output} ] then echo "Wrong Trinity output directory ${trinity_output}" exit fi fi #É necessário passar como terceiro argumento o diretório para armazenar o resultado da avaliação de abundância output=$3 # Novamente é feita a validação desse argumento if [ ! ${output} ] then echo "Missing output directory" exit else if [ ! -d ${output} ] then echo "Wrong output directory ${output}" exit fi fi # Criando uma variável do número de processadores a serem utilizados num_threads="8" # Arquivos e diretórios de saída (output) # Criando a variável para o diretório de saída: abundance_out="${output}/abundance" # Criando o diretório de saída utilizando a função mkdir mkdir -p ${abundance_out} # Criando as variáveis para as reads1 (left) e reads2(right): left=() right=() # Printa a mensagem entre aspas na tela: echo "Collecting reads step ..." # Para a variável left, encontrar todos os arquivos que finalizam o nome com .prinseq_1.fastq: left=($(find ${input} -type f -name '*.prinseq_1.fastq')) # Remoção dos arquivos gerados que são desnecessaríos: rm -f ${abundance_out}/samples.txt rm -f ${abundance_out}/quant_files.txt rm -f ${abundance_out}/groups.txt echo -e "id\tname\tgroup" > ${abundance_out}/groups.txt # A estrutura for foi utilizada para fazer um loop da função abaixo para todas reads2 de uma só vez: Declarar a variável # right: reads 2. for l in ${left[@]}; do repname=`basename ${l} | sed 's/\..*$//'` condname=`echo ${repname} | sed 's/[0-9]\+//'` r=`echo ${l} | sed 's/_1.fastq/_2.fastq/'` right=(${right[@]} ${r}) echo -e "${condname}\t${abundance_out}/${repname}\t${l}\t${r}" >> ${abundance_out}/samples.txt echo -e "${abundance_out}/${repname}/quant.sf" >> ${abundance_out}/quant_files.txt echo -e "${repname}\t${repname}\t${condname}" >> ${abundance_out}/groups.txt done #echo ${left[*]} #echo ${right[*]} # Criação de duas variáveis:trinity_fasta e trinity_trans_map: Buscar dentro do diretório de saída do programa Trinity, # o arquivo de montagem (FASTA) para a primeira variável e o arquivo gene_trans_map para a segunda: trinity_fasta=`find ${trinity_output} -type f -name 'Trinity*.fasta'` trinity_trans_map=`find ${trinity_output} -type f -name Trinity*.gene_trans_map` echo "Estimating abundances ..." # Script pertencente ao programa Trinity para estimação da abundancia: ${TRINITY_HOME}/util/align_and_estimate_abundance.pl --transcripts ${trinity_fasta} \ --est_method salmon \ --salmon_add_opts "--validateMappings" \ --samples_file ${abundance_out}/samples.txt \ --gene_trans_map ${trinity_trans_map} \ --prep_reference \ --thread_count ${num_threads} \ --seqType fq \ --output_dir ${abundance_out} \ > ${abundance_out}/align_and_estimate_abundance.log.out.txt \ 2> ${abundance_out}/align_and_estimate_abundance.log.err.txt ## --transcripts: Arquivo FASTA de montagem: variável trinity_fasta ## --est_method: Método de estimação da abundancia, o método salmon é rápido e realiza o processo em 2 etapas: indexação da # referência e quantificação. ## --salmon_add_opts: Opções a serem adicionadas para o método salmon ## --samples_file: Arquivo contendo as reads, separado por condição ## --gene_trans_map: Arquivo gene_trans_map: variável trinity_trans_map ## --prep_reference: Constrói um index ## --thread_count: Número de processadores a serem utilizados ## --seqType: Formato do arquivo de sequencias: fastq ## --output_dir: Diretório que ira conter os resultados gerados echo "Constructing abundance matrix ..." #Construção da matriz de abundancia, utilizando um script também presente no programa Trinity: ${TRINITY_HOME}/util/abundance_estimates_to_matrix.pl --est_method salmon \ --gene_trans_map ${trinity_trans_map} \ --name_sample_by_basedir \ --cross_sample_norm none \ --quant_files ${abundance_out}/quant_files.txt \ --out_prefix ${abundance_out}/abundance \ > ${abundance_out}/abundance_estimates_to_matrix.log.out.txt \ 2> ${abundance_out}/abundance_estimates_to_matrix.log.err.txt # --name_sample_by_basedir: Nomeia a coluna da amostra pelo nome do diretório e não pelo nome do arquivo # --cross_sample_norm: Método de normalização # --quant_files: Diretório contendo uma lista de todos os arquivos alvos. # --out_prefix: Valores a serem utilizados para o método de estimação echo "Calculating Differentially Expressed Genes ..." # Criação do diretório para análise de genes diferencialmente expressos: mkdir -p ${abundance_out}/DEG # Análise de genes diferencialmente expressos utilizando o DESeq, utilizando como entrada a matriz gerada no passo anterior: run-DESeq2.R --in="${abundance_out}/abundance.gene.counts.matrix" \ --groups="${abundance_out}/groups.txt" \ --out="${abundance_out}/DEG" \ > ${abundance_out}/DEG/run-DESeq2.log.out.txt \ 2> ${abundance_out}/DEG/run-DESeq2.log.err.txt