¿Cómo puedo reducir un archivo PDB en Python para incluir solo residuos específicos?

Estoy tratando de hacer una secuencia de comandos que tome un archivo MTZ (reflejos), lo convierta en un mapa CCP4, luego reduzca ese mapa para abarcar solo un área deseada para reducir el tamaño de mis archivos de sesión de PyMol para que ' volver a correo electrónico (también conocido como no 200 MB) y aliviar la carga en mi computadora POS.

Actualmente tengo una secuencia de comandos de Python que puede fft(CCP4) crear el mapa y mapmasksolucionar problemas de mosaico de celdas de unidades. Lo que quiero agregar ahora es algo que pueda tomar un archivo PDB y eliminar la mayor parte excepto, por ejemplo, los residuos dentro de 10 Å de #123.

He estado buscando en ProDy , pero no estoy muy seguro de por dónde empezar. También estaría abierto a usar algo en el kit de herramientas de CCP4.

También tengo curiosidad en el formato PDB. Si ya tiene una salida de archivo PDB, puede intentar eliminar toda la información que no sean las líneas ATOM y, además, eliminar todas las líneas ATOM que enumeran átomos de residuos fuera del rango de un subconjunto de su estructura. Si pudiera verlo en PyMol, ¿quizás eso sea lo suficientemente bueno?
@leonardo algún tipo de truco manual como ese puede funcionar (ya que mapmaskparece expandirse un poco de todos modos), pero no parece tan óptimo. Hablaré de esto por un tiempo y les haré saber lo que se me ocurre.
¿Es posible usar un programa de visualización de PDB para seleccionar una subregión de una sola cadena y guardar una nueva PDB? Si es así, es posible que desee comparar el archivo de origen con el archivo de la subregión y ver si realmente es así de simple y luego piratear una solución.
Pymol tiene un operador de selección que coincide con todo en una distancia específica alrededor de un átomo, debería ser posible usarlo para este propósito.
@MadScientist desde un script que se ejecuta fuera de PyMol?
Estaba pensando manualmente dentro del programa, pero si tiene que automatizarlo, creo que puede usar la biblioteca pymol desde cualquier script de python.
¿Se adapta mejor a scicomp.se?
@David no está familiarizado con ese sitio, si cree que es mejor allí, no dude en marcar un mod.

Respuestas (2)

Con el programa RasMol, puedes seleccionar, como lo explicó Mad Scientist para PyMol, todo en una distancia específica alrededor de un átomo. RasMol se puede ejecutar desde la línea de comandos, utilizando un script (con la opción -script en UNIX).

ProDy funciona bastante bien, especialmente desde dentro de un script de Python existente.

El siguiente código toma un archivo PDB existente, realiza una consulta de selección en él y luego lo guarda en otro archivo.

import prody

def pdbsubset(inpdb, outpdb, selection):
    with open(inpdb) as protf:
        prot = prody.parsePDBStream(protf)
    atoms = prot.select(selection)
    prody.writePDB(outpdb, atoms)

Ejemplo de generador de consultas de selección

  • residueses una lista, por ejemplo, ['A12', 'A39'] con cada elemento en el formulario <chain><residue number>. Fueron capturados desde la línea de comando usando argparsewith

        parser.add_argument('-i', '--residues', nargs='+')
    
    • por lo que especificaría -i A12 A39o lo que sea.
  • pdby outpdbson rutas de archivo
  • radiuses la distancia en angstroms para expandir la selección.
reslist = ["(chid {0} and resid {1})".format(res[0], res[1:]) for res in residues]
selector = 'within {0} of ({1})'.format(radius, ' or '.join(reslist))

# and running it:
pdbsubset(pdb, outpdb, selector)

La documentación sobre las consultas de selección de ProDy no es la más sencilla, pero bastante análoga a PyMol, por lo que es factible.