Guia de Parametrização Manual de Ligante (QM/MM) para GROMACS

Guia Completo: Parametrização Manual de Ligante (QM/MM) para CHARMM/GROMACS

Este guia detalha o fluxo de trabalho validado para parametrizar um novo ligante para simulações de Dinâmica Molecular. O método combina a precisão de cálculos de Química Quântica (QM) para cargas atômicas com a conveniência de ferramentas como o CHARMM-GUI para parâmetros de valência, resultando em um arquivo de topologia e parâmetros híbrido de alta qualidade.

Fase 1: Cálculo QM e Geração de Cargas RESP

Esta fase é executada localmente, num ambiente Linux (Ubuntu via WSL é recomendado) com ORCA, MultiWFN e Open Babel instalados.

1.1. Preparação do Arquivo de Geometria

Converta o arquivo .mol2 da geometria otimizada do ligante para o formato .xyz, necessário para o ORCA.

obabel cnfd_opt.mol2 -O cnfd_opt.xyz

1.2. Criação do Arquivo de Input para o ORCA

Crie o arquivo de input para o cálculo de ponto único que gerará o potencial eletrostático (ESP).

nano CNFD_esp.inp

Cole o seguinte conteúdo, substituindo a seção de coordenadas pelo conteúdo do seu arquivo cnfd_opt.xyz.

#---------------------------------------------------------------------#
# ORCA Input para Cálculo de Ponto Único e Geração de Arquivo .gbw    #
# Finalidade: Gerar dados para ajuste de cargas parciais (ESP/RESP)   #
# Nível de Teoria: B3LYP-D3(BJ) / def2-TZVP                           #
#---------------------------------------------------------------------#

! B3LYP D3BJ def2-TZVP RIJCOSX TightSCF KeepDens

%maxcore 6000  # Ajuste a memória (em MB) conforme seu sistema.

%pal
  NProcs 2     # Ajuste o número de núcleos para o cálculo paralelo.
end

* xyz 0 1
  # Cole aqui o conteúdo do seu arquivo 'cnfd_opt.xyz'
  C          -1.42016028718566      0.25013804734336      0.41366520960664
  # ... (restante dos átomos)
*

1.3. Execução do ORCA e Conversão para MultiWFN

Execute o cálculo QM e converta o arquivo de saída .gbw para o formato .molden, que o MultiWFN pode ler.

/caminho/completo/para/seu/orca CNFD_esp.inp > CNFD_esp.out
/caminho/completo/para/seu/orca_2mkl CNFD_esp -molden

1.4. Ajuste de Cargas com MultiWFN

Execute o MultiWFN de forma interativa para gerar as cargas RESP. Siga exatamente esta sequência de menus:

  1. Inicie o programa: MultiWFN
  2. Forneça o nome do arquivo de entrada: CNFD_esp.molden.input
  3. No menu principal, escolha a opção de análise de população: 7
  4. No submenu, escolha a opção de ajuste de cargas a partir do ESP: 18
  5. No menu de esquemas, escolha a opção **RESP**: 2
  6. Na tela de cálculo RESP, escolha a opção mais robusta: 1 (Start standard **two-stage** RESP fitting)

Ao final, o programa criará o arquivo CNFD_esp.chg, que contém as cargas de alta qualidade.

Fase 2: Mapeamento e Montagem do Arquivo .str Final

Nesta fase, combinamos os resultados do QM com os arquivos gerados pelo CHARMM-GUI Ligand Reader & Modeler. O ponto crucial é resolver a inconsistência na ordem dos átomos entre os diferentes arquivos usando um mapeamento geométrico.

2.1. Extração dos Dados de Origem

Copie os arquivos necessários do diretório de saída do CHARMM-GUI para o seu diretório de trabalho atual e extraia os dados necessários.

cp ~/Documentos/CNFD-membrana-GROMACS/charmm-gui-5328387825/ligandrm.pdb ./
cp ~/Documentos/CNFD-membrana-GROMACS/charmm-gui-5328387825/lig/lig_g.rtf ./lig_g_original.rtf
cp ~/Documentos/CNFD-membrana-GROMACS/charmm-gui-5328387825/toppar/lig.prm ./lig_parametros_originais.prm

# Extrai Símbolo, Coordenadas X, Y, Z, e a Carga RESP (Coluna 5)
awk '{print $1, $2, $3, $4, $5}' CNFD_esp.chg > qm_data.txt

# Extrai Nome do Átomo, Coordenadas X, Y, Z de registros ATOM
grep "^ATOM" ligandrm.pdb | awk '{print $3, $7, $8, $9}' > pdb_data.txt

# Extrai o par Nome do Átomo e Tipo do Átomo
grep "ATOM " lig_g_original.rtf | awk '{print $2, $3}' > rtf_nome_tipo.txt

2.2. Mapeamento Geométrico com Script Python

Crie e execute um script Python para mapear os átomos de forma segura com base em suas coordenadas 3D, garantindo a correspondência correta entre nomes, tipos e cargas.

nano mapear_atomos.py

Cole o seguinte script:

import numpy as np

# Carregar os dados de entrada
qm_data = np.genfromtxt('qm_data.txt', dtype=str)
pdb_data = np.genfromtxt('pdb_data.txt', dtype=str)
rtf_data = np.genfromtxt('rtf_nome_tipo.txt', dtype=str)

# Criar um dicionário (tabela de consulta) para os tipos de átomo
rtf_map = {row[0]: row[1] for row in rtf_data}

final_atom_lines = []

# Iterar sobre cada átomo do cálculo QM (nossa fonte de verdade)
for qm_atom in qm_data:
    qm_coords = qm_atom[1:4].astype(float)
    qm_charge = qm_atom[4]

    min_dist = float('inf')
    best_match_pdb_name = None

    # Encontrar o átomo mais próximo no arquivo PDB por distância geométrica
    for pdb_atom in pdb_data:
        pdb_name = pdb_atom[0]
        pdb_coords = pdb_atom[1:4].astype(float)
        dist = np.linalg.norm(qm_coords - pdb_coords)
        
        if dist < min_dist:
            min_dist = dist
            best_match_pdb_name = pdb_name
    
    # Validação da correspondência
    if min_dist > 0.1:
        print(f"AVISO: Correspondência ruim para o átomo QM. Distância: {min_dist:.4f} Å.")

    # Obter o tipo do átomo a partir da nossa tabela de consulta
    atom_type = rtf_map[best_match_pdb_name]
    
    # Construir a linha formatada para o arquivo de topologia
    final_line = f"ATOM   {best_match_pdb_name.ljust(4)} {atom_type.ljust(8)} {float(qm_charge):10.6f}"
    final_atom_lines.append(final_line)

# Salvar o resultado final
with open('atomos_finais_corrigidos.txt', 'w') as f:
    for line in final_atom_lines:
        f.write(line + '\n')

print("Arquivo 'atomos_finais_corrigidos.txt' criado com sucesso.")

Execute o script:

python3 mapear_atomos.py

2.3. Montagem do Arquivo .str Final

Com todos os componentes prontos e validados, monte o arquivo cnfd_final.str que será usado na próxima fase no Google Colab. Note o uso do número de átomos correto (28).

# PASSO 1: Extrair a conectividade do arquivo RTF original
grep "BOND" -A 9999 lig_g_original.rtf > conectividade.txt

# PASSO 2: Montar o arquivo .str final
# Apaga o arquivo antigo para garantir um começo limpo
rm -f cnfd_final.str

# Adiciona cabeçalho com a contagem de átomos corrigida
echo "* Hybrid topology and parameters generated by Fabio" > cnfd_final.str
echo "* using a manual QM/MM and geometric mapping workflow - Atom count corrected" >> cnfd_final.str
echo "28 1" >> cnfd_final.str
echo "" >> cnfd_final.str

# Adiciona a definição do resíduo
echo "RESI LIG 0.000" >> cnfd_final.str
echo "GROUP" >> cnfd_final.str

# Adiciona a lista de átomos de alta qualidade
cat atomos_finais_corrigidos.txt >> cnfd_final.str

# Adiciona a conectividade (BONDs, IMPRopers)
cat conectividade.txt >> cnfd_final.str

# Adiciona um separador
echo "" >> cnfd_final.str
echo "! Parameters from CGenFF" >> cnfd_final.str
echo "" >> cnfd_final.str

# Adiciona os parâmetros de valência (Ligações, Ângulos, etc.)
cat lig_parametros_originais.prm >> cnfd_final.str

Conclusão da Fase Local: Neste ponto, você tem os dois arquivos essenciais prontos para a próxima fase: cnfd_final.str e cnfd_opt.mol2. O próximo passo é fazer o upload destes arquivos para o Google Colab e usar o script cgenff_charmm2gmx.py para a conversão final para o formato GROMACS.

Comentários