Skip to content

Limitações e problemas comuns

São limitações do PyMOL, não do pacote. Conhecê-las evita perder tempo tentando ajustar o que não tem ajuste.

Iluminação

A oclusão ambiente não atua sobre cartoon. Vale para esferas e superfícies. Numa cena com peptídeo inserido, a membrana ganha sombra de contato e o cartoon não. Se a diferença ficar evidente, represente o peptídeo em spheres ou surface.

Sombras projetadas só aparecem após ray. Nunca no viewport. Calibrar no olho, pela tela, não funciona.

A oclusão é assada na geometria. Mudar sua escala exige rebuild. Os comandos do pacote já o executam; ajustes manuais não.

Transparência não projeta sombra, por escolha do pacote. Com ray_transparency_shadows ligado, uma superfície de água cobrindo a caixa escurece tudo por baixo e o resultado é uma cena uniformemente cinza.

Estrutura e dados

O PyMOL não infere estrutura secundária de partículas coarse-grained. O cartoon de um peptídeo Martini vem sem hélice nem folha. Em all-atom sem registros HELIX e SHEET, prot_split roda dss automaticamente.

prot_color hydro sobrescreve a coluna de fator B, porque o PyMOL não tem campo genérico por átomo para gradiente. Os valores originais são salvos no prot_split; prot_restore_b desfaz.

preset_prot5 interpreta a coluna B como desordem. Em modelo predito ela costuma carregar pLDDT, cuja escala significa o oposto: vermelho grosso passaria a marcar região confiável, não flexível. Confira a origem do arquivo.

A cabeça do lipídeo é definida por posição, não por química Nitrogênio só existe em colina e etanolamina, então PC e PE são as únicas espécies com cabeça detectável quimicamente. Para o resto vale a posição: é cabeça o que fica além do fosfato do próprio lipídeo, na direção do solvente. A comparação é por molécula e não contra o z médio do folheto, porque com a média as moléculas mais afundadas perdem a cabeça inteira.

Dois casos escapam da posição, e nenhum é falha dela:

  • Cabeça dobrada. Se o glicerol da cabeça está voltado para dentro, ele não está além do fosfato. Aparece em estrutura não minimizada.
  • Cardiolipina. O glicerol central fica entre os dois fosfatos, portanto mais interno que eles por construção química. Nenhum critério posicional a alcança.

Para esses existe o dicionário HEAD_NAMES, na convenção CHARMM, como último recurso. Ele entra por espécie e só quando menos da metade das moléculas de um resíduo ficou sem cabeça, e nunca substitui o que a posição já resolveu. Como qualquer regra por nome, vale para CHARMM e não para Berger, GROMOS ou Slipids; nesses, o critério posicional continua sendo o que decide. O log diz quando o dicionário foi acionado e para quantas moléculas.

Cobertura medida num sistema misto de 200 lipídeos com seis espécies mais cardiolipina: 29 por cento pelo nitrogênio sozinho, 84 por cento acrescentando a posição, 100 por cento com o dicionário completando as duas espécies que sobraram.

A separação de folhetos assume a normal da membrana em z, usando o centro de massa dos fosfatos como plano médio. Em vesícula ou membrana com curvatura acentuada o critério não vale.

His fica no grupo básico em prot_color charge, por convenção, embora esteja majoritariamente neutra em pH 7,4.

Memória e desempenho

cmd.create copia todos os estados. A divisão em objetos duplica a memória de uma trajetória inteira. Em MD longa, carregue apenas o frame de interesse antes de rodar o pacote.

Superfície de água é cara. Com dezenas de milhares de moléculas, tanto surface quanto field levam dezenas de segundos e tornam a navegação lenta. Use preset_memb6 para enquadrar a cena, e só depois aplique o preset final.

Problemas comuns

Error: name conflicts with an object Uma seleção não pode ter o mesmo nome de um objeto já carregado. O pacote usa prefixos (obj_, lip_, wat_) justamente por isso. Se ocorrer com um objeto seu, renomeie com set_name antigo, novo.

preset_memb5 para com Error: failed to get map state O mapa gaussiano saiu vazio. map_new do tipo gaussian tira a largura da gaussiana de cada átomo do fator B, e com a coluna B toda em 0.00 nada é depositado na grade. É exatamente o que um PDB escrito por dinâmica molecular traz. Nem map_new nem isosurface reclamam: o erro só aparece no histograma, e a mensagem não diz nada sobre a causa. O pacote agora escreve um B temporário e o devolve átomo a átomo, então isso está resolvido do lado dele. Num uso manual de map_new, confira cmd.get_extent("nome_do_mapa"): uma caixa unitária de -0.5 a 0.5 é mapa vazio.

mv_grayscale não é um ajuste do PyMOL Não existe set grayscale. O comando converte cada cor nomeada em uso para a luminância dela e devolve as originais depois. A consequência: um gradiente aplicado por spectrum, como o de fator B do preset_prot5, usa cores sem nome e continua colorido no teste. O log diz quantas ficaram de fora.

A isosuperfície não aparece e o PyMOL diz Invalid selection name O isosurface não gerou triângulo nenhum, e objeto vazio não é registrado. O nível não interceptou o mapa. O pacote deriva o nível do histograma justamente para evitar isso; num uso manual, verifique a faixa com cmd.get_volume_histogram("map_wat", 8).

prot_water shell retorna zero átomos O mais provável não é ausência de água, mas imagem periódica: a proteína está numa borda da caixa e as águas vizinhas estão do outro lado. Corrija fora do PyMOL, com gmx trjconv -pbc mol -center, antes de carregar.

Carbono virou cálcio, oxigênio virou oganessônio O PDB não traz as colunas 77-78, onde mora o elemento, então o PyMOL adivinha pelo nome do átomo, por prefixo de duas letras: CA vira cálcio, CD vira cádmio, OG vira oganessônio, SO vira um símbolo que não existe. São nomes normais de átomo em campo de força, então isso atinge qualquer saída de dinâmica molecular escrita sem esse campo.

O estrago não é cosmético. O raio de van der Waals passa a ser o do elemento errado, e com ele mudam spacefill, superfície e o mapa gaussiano; as seleções por elem C e elem O que definem as camadas do lipídeo perdem esses átomos; e a cor por elemento sai trocada. O split corrige na entrada e diz quantos átomos ajustou. Fora dele, mv_fix_elements faz o mesmo em qualquer seleção.

Cardiolipina classificada como cloreto CL é ao mesmo tempo o resname do cloreto e o da cardiolipina em CHARMM. Uma lista de resíduos de íon que contenha CL manda as cardiolipinas inteiras para obj_ions: num sistema real isso foram 28 moléculas, 6748 átomos, que sumiram da membrana e viraram esferas de íon.

A propriedade que separa os dois é a contagem: íon é monoatômico, cardiolipina tem 241 átomos por resíduo. O split mede isso antes de classificar e avisa no log quando descarta um homônimo. A mesma armadilha vale para CA, MG e ZN como nome de resíduo.

Manchas quase pretas espalhadas pela cena É o interior das esferas cortadas pelo plano de recorte da câmera. Assim que a câmera aproxima o bastante para cortar as esferas da frente, o PyMOL pinta a superfície de corte com ray_interior_color, cujo padrão é grey20. Numa bicamada densa isso lê como sujeira, ou como buraco na geometria.

As duas suspeitas óbvias estão erradas, e vale saber para não perder tempo: subir ambient para 0.60 não muda nada, desligar ray_shadow não muda nada, e nenhum átomo da cena tem cor escura. O teste que decide é pintar o próprio ajuste de amarelo: se as manchas ficam amarelas, é ele.

O pacote usa ray_interior_color, default desde a versão 1.3.1, que faz o corte herdar a cor do próprio átomo.

Manchas pretas na superfície da proteína Oclusão ambiente saturada. ambient_occlusion_scale é a distância de amostragem em angstrom, e o padrão 25 do PyMOL vale para esfera: as cavidades de uma superfície molecular são mais largas que isso, ficam totalmente ocluídas e saem pretas, em manchas que parecem defeito de geometria. Os níveis do pacote amostram entre 8 e 22 desde a versão 1.1.0. Num uso manual, baixe a escala antes de suspeitar da malha.

A tela fica coberta de pontos rosa São indicadores de seleção. O pacote desliga com set auto_show_selections, off; num uso manual, rode o comando ou deselect.

O material parece chapado Provavelmente a oclusão ambiente está ligada mas invisível por ambient baixo. Rode mv_ao medium, que ajusta o balanço inteiro.

Colar várias linhas na barra de comando não funciona O campo da interface Qt é de linha única: uma colagem multilinha vira um comando só. Copie uma linha por vez, ou salve o bloco num arquivo e use run sobre ele, @arquivo.pml ou File > Run Script.

Editei o código e nada mudou run vitral.pml de novo não recarrega. O import encontra o pacote já em sys.modules e devolve o que está na memória, sem ler o disco e sem avisar. O sintoma é uma edição que não surte efeito, ou um preset que imprime a mensagem da versão anterior. Use mv_reload, que apaga as entradas do pacote em sys.modules e importa de novo. Numa sessão antiga, que ainda não tem esse comando, são duas linhas:

/import sys; [sys.modules.pop(m) for m in list(sys.modules) if m.startswith('pymol_vitral')]
run /caminho/pymol-vitral/vitral.pml

Comentário no fim da linha quebra o comando # só é comentário quando abre a linha. Escrito depois de um comando, ele entra no argumento: set sphere_scale, 0.55 # nota faz o PyMOL tentar converter 0.55 # nota em número e falhar.

O script não encontra o arquivo Confirme o caminho de dentro do PyMOL:

import os, glob; print(glob.glob(os.path.expanduser("~/Downloads/*.pml")))