def loadConfiguration(energyLog, geomLog, statesLog, extSymmetry, spinMultiplicity, freqScaleFactor, linear, rotors, atoms, bonds, E0=None, TS=False): logging.debug(' Reading optimized geometry...') log = GaussianLog(geomLog) geom = log.loadGeometry() logging.debug(' Reading energy...') if E0 is None: if energyLog is not None: log = GaussianLog(energyLog) E0 = log.loadEnergy() else: E0 *= 4.35974394e-18 * constants.Na # Hartree/particle to J/mol E0 = applyEnergyCorrections(E0, modelChemistry, atoms, bonds) logging.debug(' E0 (0 K) = %g kcal/mol' % (E0 / 4184)) logging.debug(' Reading molecular degrees of freedom...') log = GaussianLog(statesLog) states = log.loadStates(symmetry=extSymmetry) states.spinMultiplicity = spinMultiplicity F = log.loadForceConstantMatrix() if F is not None and len(geom.mass) > 1 and len(rotors) > 0: logging.debug(' Fitting %i hindered rotors...' % len(rotors)) for scanLog, pivots, top, symmetry in rotors: log = GaussianLog(scanLog) fourier = log.fitFourierSeriesPotential() inertia = geom.getInternalReducedMomentOfInertia(pivots, top) rotor = HinderedRotor(inertia=(inertia*constants.Na*1e23,"amu*angstrom^2"), symmetry=symmetry, fourier=(fourier,"J/mol")) states.modes.append(rotor) #import numpy #import pylab #import math #Vlist = log.loadScanEnergies() #Vlist = Vlist[:-1] #angle = numpy.arange(0.0, 2*math.pi+0.00001, 2*math.pi/(len(Vlist)-1), numpy.float64) #phi = numpy.arange(0, 6.3, 0.02, numpy.float64) #pylab.plot(angle, Vlist / 4184, 'ok') #pylab.plot(phi, rotor.getPotential(phi) / 4184, '-k') #pylab.show() logging.debug(' Determining frequencies from reduced force constant matrix...') frequencies = list(projectRotors(geom, F, rotors, linear, TS)) elif len(states.modes) > 2: frequencies = states.modes[2].frequencies.values rotors = [] else: frequencies = [] rotors = [] for mode in states.modes: if isinstance(mode, HarmonicOscillator): mode.frequencies.values = numpy.array(frequencies, numpy.float) * freqScaleFactor return E0, geom, states
def loadTransitionState(label, geomLog, statesLog, extSymmetry, spinMultiplicity, freqScaleFactor, linear, rotors, atoms, bonds, directory=None, E0=None, energyLog=None): global modelChemistry logging.info('Loading transition state %s...' % label) if directory: geomLog = os.path.join(directory, geomLog) statesLog = os.path.join(directory, statesLog) if energyLog: energyLog = os.path.join(directory, energyLog) E0, geom, states = loadConfiguration(energyLog, geomLog, statesLog, extSymmetry, spinMultiplicity, freqScaleFactor, linear, rotors, atoms, bonds, E0, TS=True) log = GaussianLog(statesLog) frequency = log.loadNegativeFrequency() transitionStateDict[label] = TransitionState(label=label, states=states, frequency=(frequency,"cm^-1"), E0=(E0/1000.,"kJ/mol")) geometryDict[label] = geom
def loadConfiguration(energyLog, geomLog, statesLog, extSymmetry, spinMultiplicity, freqScaleFactor, linear, rotors, atoms, bonds, E0=None, TS=False): logging.debug(' Reading optimized geometry...') log = GaussianLog(geomLog) geom = log.loadGeometry() logging.debug(' Reading energy...') if E0 is None: if energyLog is not None: log = GaussianLog(energyLog) E0 = log.loadEnergy() else: E0 *= 4.35974394e-18 * constants.Na # Hartree/particle to J/mol E0 = applyEnergyCorrections(E0, modelChemistry, atoms, bonds) logging.debug(' E0 (0 K) = %g kcal/mol' % (E0 / 4184)) logging.debug(' Reading molecular degrees of freedom...') log = GaussianLog(statesLog) states = log.loadStates(symmetry=extSymmetry) states.spinMultiplicity = spinMultiplicity F = log.loadForceConstantMatrix() if F is not None and len(geom.mass) > 1 and len(rotors) > 0: logging.debug(' Fitting %i hindered rotors...' % len(rotors)) for scanLog, pivots, top, symmetry in rotors: log = GaussianLog(scanLog) Vlist, angle = log.loadScanEnergies() inertia = geom.getInternalReducedMomentOfInertia(pivots, top) barr, symm = log.fitCosinePotential() cosineRotor = HinderedRotor(inertia=(inertia*constants.Na*1e23,"amu*angstrom^2"), symmetry=symm, barrier=(barr/4184.,"kcal/mol")) fourier = log.fitFourierSeriesPotential() fourierRotor = HinderedRotor(inertia=(inertia*constants.Na*1e23,"amu*angstrom^2"), symmetry=symmetry, fourier=(fourier,"J/mol")) Vlist_cosine = cosineRotor.getPotential(angle) Vlist_fourier = fourierRotor.getPotential(angle) rms_cosine = numpy.sqrt(numpy.sum((Vlist_cosine - Vlist) * (Vlist_cosine - Vlist)) / (len(Vlist) - 1)) / 4184. rms_fourier = numpy.sqrt(numpy.sum((Vlist_fourier - Vlist) * (Vlist_fourier - Vlist))/ (len(Vlist) - 1)) / 4184. print rms_cosine, rms_fourier, symm, symmetry # Keep the rotor with the most accurate potential rotor = cosineRotor if rms_cosine < rms_fourier else fourierRotor # However, keep the cosine rotor if it is accurate enough, the # fourier rotor is not significantly more accurate, and the cosine # rotor has the correct symmetry if rms_cosine < 0.05 and rms_cosine / rms_fourier > 0.25 and rms_cosine / rms_fourier < 4.0 and symmetry == symm: rotor = cosineRotor states.modes.append(rotor) import pylab phi = numpy.arange(0, 6.3, 0.02, numpy.float64) fig = pylab.figure() pylab.plot(angle, Vlist / 4184, 'ok') linespec = '-r' if rotor is cosineRotor else '--r' pylab.plot(phi, cosineRotor.getPotential(phi) / 4184, linespec) linespec = '-b' if rotor is fourierRotor else '--b' pylab.plot(phi, fourierRotor.getPotential(phi) / 4184, linespec) pylab.legend(['scan', 'cosine', 'fourier'], loc=1) pylab.xlim(0, 2*math.pi) axes = fig.get_axes()[0] axes.set_xticks([float(j*math.pi/4) for j in range(0,9)]) axes.set_xticks([float(j*math.pi/8) for j in range(0,17)], minor=True) axes.set_xticklabels(['$0$', '$\pi/4$', '$\pi/2$', '$3\pi/4$', '$\pi$', '$5\pi/4$', '$3\pi/2$', '$7\pi/4$', '$2\pi$']) pylab.show() logging.debug(' Determining frequencies from reduced force constant matrix...') frequencies = list(projectRotors(geom, F, rotors, linear, TS)) elif len(states.modes) > 2: frequencies = states.modes[2].frequencies.values rotors = [] else: frequencies = [] rotors = [] for mode in states.modes: if isinstance(mode, HarmonicOscillator): mode.frequencies.values = numpy.array(frequencies, numpy.float) * freqScaleFactor return E0, geom, states
from gaussian import GaussianCom, GaussianLog print("Trying to read qm_modred_gen.com, a simple gassian.com file") gaussian_file_name = "qm_modred_gen.com" gaussian_com = GaussianCom(gaussian_file_name) print("List of atoms:\n", gaussian_com.atoms_list) print("Everything seems ok\n\n") print("Trying to read oniom.com, a simple ONIOM gassian.com file") gaussian_file_name = "oniom.com" gaussian_com = GaussianCom(gaussian_file_name) print("List of atoms:\n", gaussian_com.atoms_list[0:100], " ... ") print("Everything seems ok\n\n") print("Trying to read oniom_pdb.com, a ONIOM gassian.com file with pdb info") gaussian_file_name = "oniom_pdb.com" gaussian_com = GaussianCom(gaussian_file_name) print("List of atoms:\n", gaussian_com.atoms_list[0:100], " ... ") print("Everything seems ok\n\n") print("Trying to read oniom_pdb.log, a ONIOM gassian.log file with pdb info") gaussian_file_name = "oniom_pdb.log" gaussian_log = GaussianLog(gaussian_file_name) print("Everything seems ok\n\n") print("Trying to read big_scan_oniom.log, a 1.2 GB ONIOM gassian.log file") gaussian_file_name = "big_scan_oniom.log" gaussian_log = GaussianLog(gaussian_file_name) print("Everything seems ok\n\n")
if len(sys.argv) == 1 or sys.argv[1] in ["-h", "--help"]: print("Como usar: {0} file.log ").format(sys.argv[0]) sys.exit() #ficheiro entrada (output do gaussian) global filein filein = sys.argv[1] #transformar o ficheiro log aberto numa variavel global (ler com o GaussianLog) ############## INICIO ############## main() #ler os bytes de todo o ficheiro e fazer todos os atributos d gaussianlog = GaussianLog(filein) for i, scan_step in enumerate( gaussianlog.grep_bytes['Step number'] ): print( "Scan", i, ": ", len(gaussianlog.grep_bytes['Step number'][i]), "opt steps" ) scan_step = input('Type "scan_step" that you which to extract. Options: scan_step="all": ') opt_step = input('Type "opt_step" that you which to extract. Options: opt_step="all": ') #verificar se existe o ficheiro output = input('Type the name of the output file: ') if path.exists(output + '.pdb'): raise RuntimeError('%s already exists' %(str(output)+".pdb")) open_output = open(str(output) + ".pdb", "w") #casos em que extraio todos os scans if str(scan_step) == 'all': print(len(gaussianlog.grep_bytes['orientation:']))
distpair = tuple([int(x) for x in line.split()]) dists.append(distpair) input_file_list = sys.argv[2:] #com files results_dict = OrderedDict([]) for input_file in input_file_list: input_file_no_suf = input_file[:-4] results_dict[input_file_no_suf] = [] #print(input_file) if input_file.endswith(".com"): gaussian_file = GaussianCom(input_file) structure = gaussian_file.atoms_list else: gaussian_file = GaussianLog(input_file) structure = gaussian_file.final_geometry for pair in dists: atom_a = structure[pair[0] - 1] atom_b = structure[pair[1] - 1] this_dist = atom_a.distance(atom_b) if len(pair) == 2: results_dict[input_file_no_suf].append( "{0:7.5f}".format(this_dist)) #print("{0:>3}{2[0]:<4}-{1:>3}{2[1]:<4} : {3:7.3f}".format(atom_a,atom_b,pair,this_dist)) elif len(pair) == 3: atom_c = structure[pair[2] - 1] this_angle = atom_b.angle(atom_a, atom_c) this_angle = math.degrees(this_angle) results_dict[input_file_no_suf].append( "{0:7.3f}".format(this_angle))
from elements_database import ATOMIC_NUMBER_DICT try: reactants_folder = sys.argv[1] ts_folder = sys.argv[2] original_ts_energy = float(sys.argv[3]) except: print( "Usage: residel_energies.py <reactants_folder> <ts_folder> <ts_energy>" ) sys.exit() for reactants_filename in os.listdir(reactants_folder): if reactants_filename.endswith(".log"): try: reactants_energy = GaussianLog("{0}/{1}"\ .format(reactants_folder,reactants_filename)).energies_list[-1][-1] except IndexError: reactants_energy = None try: ts_filenames = os.listdir(ts_folder) ts_filename_end = "_".join(reactants_filename.split("_")[-2:]) ts_filename = ts_folder + "_" + ts_filename_end ts_energy = GaussianLog("{0}/{1}"\ .format(ts_folder,ts_filename)).energies_list[-1][-1] except IndexError: ts_energy = None if reactants_energy and ts_energy: print( ts_filename_end[:-4],