HMMER

Descrição

De acordo com a página HMMER, HMMER é usado para buscar em bancos de dados de sequências por homólogos e para realizar alinhamentos de sequências. Implementa métodos usando modelos probabilísticos chamados profile hidden Markov models (profile HMMs).

Versões Disponíveis

  • hmmer/3.1b2 (default)

Submissão de Jobs Seriais

submit_hmmer_serial.sh
#!/bin/bash
#SBATCH -J hmmer_serial
#SBATCH -N 1
#SBATCH -n 1
#SBATCH -t 03:00:00
#SBATCH --mem=4G

export INPUT="globins4.hmm globins4.sto"
export OUTPUT="*.out *.hmm"

module load hmmer
job-nanny hmmbuild globins4.hmm globins4.sto

Submissão de Jobs com OpenMP

submit_hmmer_omp.sh
#!/bin/bash
#SBATCH -J hmmer_omp
#SBATCH -N 1
#SBATCH -c 8
#SBATCH -t 06:00:00
#SBATCH --mem=16G

export INPUT="query.fasta database.fasta"
export OUTPUT="results.out"

module load hmmer

# Construir HMM
job-nanny hmmbuild --cpu $SLURM_CPUS_PER_TASK query.hmm query.fasta

# Buscar no banco de dados
job-nanny hmmsearch --cpu $SLURM_CPUS_PER_TASK query.hmm database.fasta > results.out

Principais Comandos HMMER

Comandos HMMER

Comando

Descrição

hmmbuild

Constrói perfil HMM a partir de alinhamento múltiplo

hmmsearch

Busca sequências em banco de dados usando perfil HMM

hmmscan

Busca perfil HMM em banco de domínios usando sequência

hmmalign

Alinha sequências a um perfil HMM existente

hmmconvert

Converte formatos de arquivos HMM

hmmpress

Prepara banco de dados HMM para busca

Exemplo Completo: Análise de Domínios

submit_hmmer_analysis.sh
#!/bin/bash
#SBATCH -J hmmer_analysis
#SBATCH -N 1
#SBATCH -c 8
#SBATCH -t 12:00:00
#SBATCH --mem=32G

export INPUT="proteins.fasta pfam.hmm"
export OUTPUT="pfam_results/"

module load hmmer

mkdir -p pfam_results
cd pfam_results

# Preparar banco de dados Pfam (se não estiver pronto)
# hmmpress /path/to/Pfam-A.hmm

# Buscar domínios Pfam nas proteínas
job-nanny hmmscan --cpu $SLURM_CPUS_PER_TASK \
                  --domtblout pfam_domains.tbl \
                  --tblout pfam_hits.tbl \
                  /path/to/Pfam-A.hmm ../proteins.fasta > pfam_scan.log

# Extrair hits significativos (E-value < 1e-5)
awk '$7 < 1e-5' pfam_domains.tbl > significant_hits.tbl

# Gerar relatório
echo "Número total de hits: $(wc -l < pfam_hits.tbl)" > report.txt
echo "Hits significativos: $(wc -l < significant_hits.tbl)" >> report.txt

Alinhamento com HMM

submit_hmmalign.sh
#!/bin/bash
#SBATCH -J hmmalign
#SBATCH -N 1
#SBATCH -n 1
#SBATCH -t 02:00:00
#SBATCH --mem=4G

export INPUT="profile.hmm sequences.fasta"
export OUTPUT="aligned.sto"

module load hmmer

job-nanny hmmalign -o aligned.sto profile.hmm sequences.fasta

Construção de Perfil a partir de Alinhamento

submit_hmmbuild.sh
#!/bin/bash
#SBATCH -J hmmbuild
#SBATCH -N 1
#SBATCH -c 8
#SBATCH -t 04:00:00
#SBATCH --mem=8G

export INPUT="alignment.sto"
export OUTPUT="profile.hmm"

module load hmmer

job-nanny hmmbuild --cpu $SLURM_CPUS_PER_TASK profile.hmm alignment.sto

Job Array para Múltiplas Buscas

submit_hmmer_array.sh
#!/bin/bash
#SBATCH -J hmmer_array
#SBATCH --array=1-10
#SBATCH -N 1
#SBATCH -c 4
#SBATCH -t 08:00:00
#SBATCH --mem=8G

QUERIES=(
    "kinase.hmm"
    "protease.hmm"
    "receptor.hmm"
    "transporter.hmm"
    "channel.hmm"
    "factor.hmm"
    "binding.hmm"
    "enzyme.hmm"
    "regulator.hmm"
    "structural.hmm"
)

QUERY=${QUERIES[$SLURM_ARRAY_TASK_ID-1]}
export INPUT="$QUERY proteome.fasta"
export OUTPUT="results_${QUERY%.hmm}/"

module load hmmer

mkdir -p results_${QUERY%.hmm}
cd results_${QUERY%.hmm}

job-nanny hmmsearch --cpu $SLURM_CPUS_PER_TASK \
                    --tblout hits.txt \
                    ../$QUERY ../proteome.fasta > search.log

Análise de Resultados

analyze_hmmer.sh
#!/bin/bash
#SBATCH -J analyze_hmmer
#SBATCH -N 1
#SBATCH -n 1
#SBATCH -t 01:00:00
#SBATCH --mem=4G

module load hmmer

# Extrair estatísticas dos resultados
for tbl in results_*/hits.txt; do
    DIR=$(dirname $tbl)
    HITS=$(grep -v "^#" $tbl | wc -l)
    echo "$DIR: $HITS hits" >> summary.txt
done

# Calcular distribuição de E-values
cat results_*/hits.txt | grep -v "^#" | awk '{print $5}' > evalues.txt

# Gerar histograma com Python
cat > plot.py << 'EOF'
import numpy as np
import matplotlib.pyplot as plt

evalues = np.loadtxt('evalues.txt')
plt.figure()
plt.hist(np.log10(evalues), bins=50)
plt.xlabel('log10(E-value)')
plt.ylabel('Frequência')
plt.title('Distribuição de E-values')
plt.savefig('evalue_distribution.png')
EOF

python plot.py

Referências

Ver também