Script de Python para dibujar una caja cuboide entorno a un objeto excediendo 3 Ångströms sus dimensiones.
Este script permite crear una caja cuboide sobre un objeto ("obj01" en nuestro ejemplo) previamente selecionado en una escena de PyMol. Se pueden modificar el tañano de expansión de la caja, colores, etc.
from pymol import cmd
def create_expanded_cuboid_around_object(obj_name, expansion_size, label_color="white"):
# Obtén los límites del objeto
min_corner, max_corner = cmd.get_extent(obj_name)
# Calcula el centro geométrico
center = [(min_corner[i] + max_corner[i]) / 2 for i in range(3)]
# Calcula las dimensiones actuales del objeto
dimensions = [max_corner[i] - min_corner[i] for i in range(3)]
# Aumenta cada dimensión en el tamaño de expansión
expanded_dimensions = [dim + expansion_size for dim in dimensions]
# Calcula las coordenadas de los vértices de la caja expandida
half_extent = [dim / 2 for dim in expanded_dimensions]
vertices = [
[center[0] - half_extent[0], center[1] - half_extent[1], center[2] - half_extent[2]],
[center[0] + half_extent[0], center[1] - half_extent[1], center[2] - half_extent[2]],
[center[0] + half_extent[0], center[1] + half_extent[1], center[2] - half_extent[2]],
[center[0] - half_extent[0], center[1] + half_extent[1], center[2] - half_extent[2]],
[center[0] - half_extent[0], center[1] - half_extent[1], center[2] + half_extent[2]],
[center[0] + half_extent[0], center[1] - half_extent[1], center[2] + half_extent[2]],
[center[0] + half_extent[0], center[1] + half_extent[1], center[2] + half_extent[2]],
[center[0] - half_extent[0], center[1] + half_extent[1], center[2] + half_extent[2]],
]
# Elimina cualquier pseudoátomo y línea existentes
cmd.delete("vertex_*")
cmd.delete("edge_*")
# Crea los pseudoátomos en los vértices
for i, vertex in enumerate(vertices):
cmd.pseudoatom(f"vertex_{i}", pos=vertex)
# Conecta los vértices con líneas
edges = [
(0, 1), (1, 2), (2, 3), (3, 0),
(4, 5), (5, 6), (6, 7), (7, 4),
(0, 4), (1, 5), (2, 6), (3, 7)
]
for edge in edges:
cmd.distance(f"edge_{edge[0]}_{edge[1]}", f"vertex_{edge[0]}", f"vertex_{edge[1]}")
# Ajusta la apariencia de la caja
cmd.hide("everything", "vertex_*")
cmd.show("lines", "edge_*")
cmd.set("dash_gap", 0)
cmd.set("dash_length", 1)
cmd.set("label_size", 22)
# Establece el color de las etiquetas
cmd.set_color("label_color", label_color)
cmd.set("label_color", "label_color", "edge_*")
# Llamada a la función con un tamaño de expansión de 7 Ångströms y color de etiqueta deseado
create_expanded_cuboid_around_object("obj01", 7, label_color=[1, 0, 0]) # Rojo