Carga tu archivo CIF en PLATON y ejecutar CALC-GEO
En la *.LIS
archivo generado, podrás encontrar todas las tablas que necesita, es decir,
- Longitudes De Enlace (Angstrom)
- Bond/Valencia Ángulos (Grados)
- Torsión/Ángulos Diedros (Gr.)
Usted todavía puede usar el regex
módulo de Python para analizar los datos,\s*(?P<atoms>([A-Z][a-z]?\(\d*\w\)\s*){4})\s*(?P<value>-?\d*\.\d\(\d+\))
dividirá entradas en la torsión de la tabla en dos grupos con nombre, que se puede seguir el proceso y a escribir a un archivo CSV.
EDITARCreo que OpenBabel es una excelente herramienta! En este caso, sin embargo, yo sugiero utilizar el enfoque de arriba, en lugar de analizar el OpenBabel archivo de informe por las siguientes razones:
- En un par de casos, me di cuenta de que el generador de informes de OpenBabel tenido algunos problemas con CIF archivos que se comprueba mediante la comprobación interna de las rutinas de PLATÓN, así como CheckCIF, una herramienta en línea proporcionada por la IUCr, y se han encontrado para ser válido.
- En la tabla de los ángulos diedros, el OpenBabel informe no descriptores de uso como
C(5), H(10A)
para denotar los átomos en un diedro, pero utiliza el átomo de índices. Si usted desea escribir los descriptores a un archivo CSV, habría que buscarlos en otra mesa.
Si usted puede vivir con los índices, el siguiente fragmento de código Python debería ser suficiente:
#!/usr/bin/env python3
import csv
import argparse
def get_torsions_from_report(report_path):
'''Read all rows with he indices to four consecutive atoms and
the corresponding dihedral angle from an OpenBabel report file.'''
try:
torsion_list = []
with open(report_path) as infile:
for line in infile:
if line.startswith('TORSION ANGLES'):
break
for line in infile:
if line.strip():
torsion_list.append(line.split())
return torsion_list
except IOError:
print(e)
def write_torsions_to_csv(csv_path, torsion_list):
'''Write torsion data to CSV.'''
with open(csv_path, 'wt') as fout:
writer = csv.writer(fout)
writer.writerow(('Atom1', 'Atom 2', 'Atom 3', 'Atom 4', 'Torsion'))
writer.writerows(torsion_list)
if __name__ == '__main__':
parser = argparse.ArgumentParser(description='Read torsions
from OpenBabel report and write them to a CSV file.')
parser.add_argument('-i', dest="infile", required=True,
help="OpenBabel report file")
parser.add_argument('-o', dest="outfile", required=True,
help="CSV file")
args = parser.parse_args()
torsions = get_torsions_from_report(args.infile)
write_torsions_to_csv(args.outfile, torsions)