Puedes copiar el código que hay justo debajo en un archivo de texto plano (notepad por ejemplo) y guardarlo como etiquetando_CA_b_factor.py. Después de cargar cualquier objeto en PyMOL, escribe en la consola de PyMOL: etiquetar_b_factors objeto (sustituye objeto por el nombre de cualquiera de los objetos que tengas creados en tu escena de PyMol, siempre que se trate de proteínas). Te va a generar una escena como la que ves justo debajo del código, en este caso he cargado el PDB 8SKL.
# Ejemplo de uso:
# Después de cargar el objeto en PyMOL, escribe en la consola de PyMOL:
# etiquetar_b_factors objeto1
from pymol import cmd
def etiquetar_b_factors(objeto):
# Eliminar moléculas de agua
cmd.remove(f"{objeto} and resn HOH")
# Cambiar el fondo a blanco
cmd.bg_color("white")
# Obtener la lista de átomos del objeto
atomos = cmd.get_model(objeto).atom
# Filtrar los carbonos alfa y obtener sus B-factors
b_factors = [atomo.b for atomo in atomos if atomo.name == 'CA']
# Calcular el B-factor mínimo y máximo
min_b_factor = min(b_factors)
max_b_factor = max(b_factors)
# Crear la rampa de color
cmd.ramp_new('color_bar', objeto, [min_b_factor, max_b_factor], 'rainbow')
# Colorear el objeto según el B-factor
cmd.spectrum("b", selection=objeto, quiet=0)
# Añadir etiquetas con los B-factors
for atomo in atomos:
if atomo.name == 'CA':
# Crear la etiqueta con el B-factor
etiqueta = f"{atomo.b:.2f}"
# Posicionar la etiqueta en la escena
cmd.label(f"{objeto} and chain {atomo.chain} and resi {atomo.resi} and name CA", f'"{etiqueta}"')
print(f"Residuo: {atomo.resn}{atomo.resi}, Cadena: {atomo.chain}, B-factor: {etiqueta}")
print(f"Rampa de color creada con min B-factor: {min_b_factor} y max B-factor: {max_b_factor}")
# Ejecutar la función
cmd.extend("etiquetar_b_factors", etiquetar_b_factors)