Pregunta:
¿Extraer todas las estructuras del cálculo de dinámica molecular Gaussian 09 usando babel?
DSVA
2016-11-12 07:01:50 UTC
view on stackexchange narkive permalink

¿Hay alguna manera de extraer fácilmente todas las estructuras y energías de un cálculo ADMP realizado en Gaussian 09? GaussView puede trazarlos pero no exportarlos de una manera útil y babel solo me da la última estructura allí.

Intenté

  babel <G09output> all -oxyz <output.xyz> 

pero solo obtengo

  ========================= ===== *** Abrir error de Babel en OpenAndSetFormat No se pueden abrir todos los errores 1 molécula convertida1 16 mensajes de registro de auditoría 

¿O hay una manera diferente y fácil de hacer esto? De lo contrario, supongo que tengo que escribir mi propio script o buscar en cclib, ¿pero ese también está usando babel si lo entiendo bien?

Ejemplo de archivo de salida: http: //dl.dropboxusercontent. com / u / 6111391 / Tz_TCO_dyn6.txt

Input:

 % nprocshared = 16% mem = 56GB% chk = Tz_TCO_dyn6.chk # 6-31g (d) scrf = comprobar geom = (conectividad, multitud) admp = (tamaño de paso = 2500, puntos máximos = 400) rm062x IOp (1/44 = 990210) [Sin título] 0 1 C 1.08049600 -0.58720100 -2.07918800 C -1.08049600 0.58720100 - 2.07918800 C -0.58945000 0.34949100 0.13978700 H -0.52250100 1.43457800 0.23933400 C 0.58945000 -0.34949100 0.13978700 H 0.52250100 -1.43457800 0.23933400 N -1.13318600 -0.73433600 -2.39136300 N 0.00078600 -1.35005000 -2.39136300 N 0.00078600 -1.35005000 -0.3923369 C 1.84657900 0.28440600 0.66016000 H 2.75382900 -0.14516700 0.22100400 H 1.84124500 1.35503200 0.42328200 C -1.84657900 -0.28440600 0.66016000 H -2.75382900 0.14516700 0.22100400 H -1.84124500 -1.35503200 0.42328200 0.0872 1.87
H 2.72499800 0.64701600 2.59375900 2.07520100 H -0,97273600 2,41061700 C -1,87373600 -0,08444000 2,19307200 H -2,72499800 -0,64701600 2,59375900 0,97273600 2,41061700 H -2,07520100 C -0,58945000 -0,50859700 2,93023900 H -0,86607100 -0,70606500 3,97132400 H -0,24860000 -1,47389400 2,53270700 0,58945000 0,50859700 2,93023900 C H 0,86607100 0.70606500 3.97132400 H 0.24860000 1.47389400 2.53270700 H 2.02862900 -1.10167200 -1.96939700 H -2.02862900 1.10167200 -1.96939700 1 8 1.5 10 1.5 29 1.0 2 7 1.5 9 1.5 30 1.0 3 4 1.0 5 2.0 14 1.0 4 5 6 1.0 11 1.0 6 7 8 1.5 8 9 10 1.5 10 11 12 1.0 13 1.0 17 1.0 12 13 14 15 1.0 16 1.0 20 1.0 15 16 17 18 1.0 19 1.0 26 1.0 18 19 20 21 1.0 22 1.0 23 1.0 21 22 23 24 1.0 25 1.0 26 1 .0 24 25 26 27 1.0 28 1.0 27 28 29 30  
¿Está limitado a una plataforma específica?
¿Quieres decir en términos de hacer los cálculos o para el análisis de datos? Los cálculos se ejecutan en una supercomputadora que se ejecuta en centos7 y puedo usar g09 y nwchem allí, pero para estos cálculos prefiero g09.Para el análisis de datos: no realmente, usando Windows y Ubuntu aquí, y estoy bien con el uso de cualquier software o lenguaje de programación que sea útil aquí.
Sí, me refiero al análisis. Supuse por sus estadísticas de entrada que está utilizando una supercomputadora. Actualmente no estoy en la oficina, así que no tengo acceso a todos mis juguetes, es posible que desee probar una versión reciente de [ChemCraft] (http://www.chemcraftprog.com/). Iirc, puede guardar una optimización como un archivo xyz con múltiples estructuras, por lo que también podría funcionar para este problema. (Sin embargo, es de pago, pero probablemente sea el mejor que existe, y si aún no lo tiene, puede considerar obtenerlo de todos modos).
Oh, gracias, eso funciona al menos para Scan e IRC y es posible poner todas las coordenadas xyz en un archivo. Pero no funciona para la dinámica. Chemcraft puede leer energías y geometrías (pero también dice que hay un error) y cualquier opción de exportación que use es siempre la misma geometría única. Por lo que tengo entendido, interpreta estos datos como pasos de optimización y no he encontrado una opción para exportarlos. Pero al menos muestra dónde encontró los valores, por lo que, en el peor de los casos, podría escribir un script de Python que exporte todo.
Recientemente encontré esto nuevamente, y noté que hay una utilidad [newzmat] (http://gaussian.com/newzmat/) que tiene algunas capacidades. No es ideal, pero al menos debería estar disponible en sistemas que tengan G09 / 16 instalado.
Dos respuestas:
#1
+9
pentavalentcarbon
2016-11-13 03:15:07 UTC
view on stackexchange narkive permalink

Si tiene instalada la última copia de cclib, puede extraer tanto las energías como las geometrías y escribir las geometrías en un archivo de trayectoria XYZ que puede abrir con Avogadro o VMD.

Para imprimir las energías HF o DFT en la pantalla,

  $ ccget scfenergies admp.out  

pero tenga en cuenta que las energías están en eV , no hartree.

Para volcar geometrías en archivos XYZ, aquí hay una versión simplificada de un script que uso todo el tiempo:

  #! / usr / bin / env python" "" cclib_extract_geom.py: Extrae geometrías de un archivo de salida química cuántica usando cclib. "" "from __future__ import print_functionimport os.pathfrom cclib.io import ccopen, ccwritedef getargs (): "" "Obtiene argumentos de la línea de comandos." "" import argparse parser = argparse.ArgumentParser () parser.add_argument ('outputfilename', nargs = '+') parser.add_argument ('- trayectoria', action = 'store_true', ayuda = "" "¿Extraer todas las geometrías posibles en un archivo similar a una trayectoria?" "") Parser.add_argument ('- suffix') args = parser.parse_args () return argsif __name__ == '__main__': args = getargs () for outputfilename in args.outputfilename: job = ccopen (outputfilename) data = job.parse () stub = os.path.splitext (outputfilename) [0] if args.suffix: xyzfilename = '' .join ([stub, '.' , args.suffix, '.xyz']) else: xyzfilename = '' .join ([stub, '.xyz']) ccwrite (data, outputdest = xyzfilename, allgeom = args.trajectory)  

Para escribir las energías en un archivo de texto en hartree, puede agregar algo como

  from cclib.parser.utils import convertor # ponerme en la parte superior del archivo con open (stub + '.energies', 'w') como fh: para energía en data.scfenergies: fh.write (str (convertor (energía, 'eV', 'hartree') ) + '\ n')  
Si estás en Ubuntu, hay un paquete cclib, pero estas cosas suelen estar horriblemente desactualizadas, así que descargaría la última copia de GitHub o `pip install cclib`. Ven a [chat] (http://chat.stackexchange.com/rooms/3229/the-periodic-table) si necesitas ayuda.
¡Oh gracias! Pensé que escribiría algo de código yo mismo, lo que realmente no me importa porque puedo optimizarlo para lo que sea que necesite, pero tener un script de trabajo donde realmente pueda ver cómo usarlo es genial. También soy bastante nuevo en Python, así que ... Y ahora que me dijiste que miré y solo tenía instalado cclib 1.3, pero ahora tengo la versión 1.5. =)
#2
+4
Nate
2016-12-08 23:35:00 UTC
view on stackexchange narkive permalink

Si, como yo, solo desea extraer las estructuras optimizadas de un escaneo de energía potencial, puede usar este script desordenado:

  # ! / usr / bin / env python # python Extract_Optimized_From_Gaussian.py filenamefrom __future__ import print_functionimport sys, osdef extract_all (text, target): linenums = [] # Comienza a contar en 1 porque los archivos comienzan en la línea 1 no 0 count = 1 para la línea de entrada texto: if (line.find (objetivo)) > -1: linenums.append (count) count + = 1 return linenumscode = {"1": "H", "2": "Él", "3": " Li "," 4 ":" Be "," 5 ":" B ", \" 6 ":" C "," 7 ":" N "," 8 ":" O "," 9 ":" F "," 10 ":" Ne ", \" 11 ":" Na "," 12 ":" Mg "," 13 ":" Al "," 14 ":" Si "," 15 ":" P " , \ "16": "S", "17": "Cl", "18": "Ar", "19": "K", "20": "Ca", \ "21": "Sc" , "22": "Ti", "23": "V", "24": "Cr", "25": "Mn", \ "26": "Fe", "27": "Co", "28": "Ni", "29": "Cu", "30": "Zn", \ "31": "Ga", "32": "Ge", "3 3 ":" As "," 34 ":" Se "," 35 ":" Br ", \" 36 ":" Kr "," 37 ":" Rb "," 38 ":" Sr "," 39 ":" Y "," 40 ":" Zr ", \" 41 ":" Nb "," 42 ":" Mo "," 43 ":" Tc "," 44 ":" Ru "," 45 " : "Rh", \ "46": "Pd", "47": "Ag", "48": "Cd", "49": "In", "50": "Sn", \ "51" : "Sb", "52": "Te", "53": "I", "54": "Xe", "55": "Cs", \ "56": "Ba", "57": "La", "58": "Ce", "59": "Pr", "60": "Nd", \ "61": "Pm", "62": "Sm", "63": " Eu "," 64 ":" Gd "," 65 ":" Tb ", \" 66 ":" Dy "," 67 ":" Ho "," 68 ":" Er "," 69 ":" Tm "," 70 ":" Yb ", \" 71 ":" Lu "," 72 ":" Hf "," 73 ":" Ta "," 74 ":" W "," 75 ":" Re " , \ "76": "Os", "77": "Ir", "78": "Pt", "79": "Au", "80": "Hg", \ "81": "Tl" , "82": "Pb", "83": "Bi", "84": "Po", "85": "En", \ "86": "Rn", "87": "Fr", "88": "Ra", "89": "Ac", "90": "Ju", \ "91": "Pa", "92": "U", "93": "Np", " 94 ":" Pu "," 95 ":" Am ", \" 96 ":" Cm "," 97 ":" Bk "," 98 ":" Cf "," 99 ":" Es "," 100 ":" Fm ", \
"101": "Md", "102": "No", "103": "Lr", "104": "Rf", "105": "Db", \ "106": "Sg", " 107 ":" Bh "," 108 ":" Hs "," 109 ":" Mt "," 110 ":" Ds ", \" 111 ":" Rg "," 112 ":" Uub "," 113 ":" Uut "," 114 ":" Uuq "," 115 ":" Uup ", \" 116 ":" Uuh "," 117 ":" Uus "," 118 ":" Uuo "} logfile_fn = os .path.basename (sys.argv [1]) logfile_bn = os.path.splitext (logfile_fn) [0] logfile_fh = open (logfile_fn, 'r') text = logfile_fh.readlines () logfile_fh.close () # Buscar todo líneas que contienen "! Parámetros optimizados!" opt_param_line_nums = extract_all (texto, '! Parámetros optimizados!') # Luego, busque todas las líneas que tengan "Orientación de entrada:" input_orient_line_nums = extract_all (texto, 'Orientación estándar') # Y todas las líneas que tienen el ---- que usaremos para encontrar los extremos de la sección de coordenadas enviar_coor_line_nums = extract_all (texto, '---------') # Suma 5 porque la primera coordenada real es +5 líneasinput_orient_line_nums = [x +5 para x en input_orient_line_nums] # Asegúrese de que estén sortedopt_param_line_nums.sort () input_orient_lin e_nums.sort () end_coor_line_nums.sort () new_input_lns = [] count = 0for x in reverse (input_orient_line_nums): if count > len ​​(opt_param_line_nums) -1: romper si x < list (invertido (opt_param_input_line_nums) .append (x) count + = 1new_input_lns.reverse () new_end_lns = [] count = 0for x in end_coor_line_nums: if count > len ​​(new_input_lns) -1: break if x > new_input_lns [count]: new_end_lns) + = 1intervals = zip (new_input_lns, new_end_lns) # Ahora convertimos cada intervalo en un archivo .xyzoutfile = open (logfile_bn + '. Xyz', 'w') para intvl en intervalos: n_atoms = intvl [1] - intvl [0] outfile .write (str (n_atoms) + "\ n \ n") para x en el rango (intvl [0] -1, intvl [1] -1): columna = texto [x] .split () print (código [columna [1]], float (columna [3]), float (columna [4]), float (columna [5]), file = outfile) outfile.close ()  

He adaptado esto de aquí. Lo he probado con Gaussian 09. No tengo idea de si funciona con otras versiones. El archivo resultante se carga en VMD. No sé acerca de otro software de visualización.

Editar: verifiqué el script original que había publicado aquí con GaussView y mi script estaba mal. Específicamente, fueron las estructuras tituladas "Orientación estándar" las que vinieron antes de cada "! Parámetros optimizados!" línea que necesitaba extraer, no las que vinieron después. He actualizado el script anterior para hacer eso, y la salida ahora coincide con la de GaussView. Eliminé el script original, pero lo he copiado en Pastbin aquí en caso de que alguien todavía quiera acceder a él (no son muy diferentes).

Gracias, lo investigaré y veré si entiendo lo que está pasando aquí: -D Siempre es útil para ver cómo la gente hace esto y parece funcionar bien
Para su información, hoy me di cuenta un poco más tarde de que tenía un error. Vea mi edición en la parte inferior. El guión aquí ahora es correcto.
perfectamente trabajado.Muchas gracias


Esta pregunta y respuesta fue traducida automáticamente del idioma inglés.El contenido original está disponible en stackexchange, a quien agradecemos la licencia cc by-sa 3.0 bajo la que se distribuye.
Loading...