def get_ts_ifreq(xcc, gcc, Fcc, E, tcommon): ch, mtp, atonums, masses, mu = tcommon ts = Molecule() ts.setvar(xcc=xcc, gcc=gcc, Fcc=Fcc) ts.setvar(atonums=atonums, masses=masses) ts.setvar(ch=ch, mtp=mtp, V0=E) ts.prepare() ts.setup(mu) ts.ana_freqs() [(ifreq, evec)] = ts._ccimag return ifreq, mu
def log_data(log, inpvars, fscal, folder="./"): if inpvars._ts: fmode = -1 else: fmode = 0 # name from log name = log.split(".")[-2] point = TorPESpoint(name, inpvars._tlimit) # Read log file logdata = gau.read_gaussian_log(folder + log) # prepare data logdata = prepare_log_data(logdata) ch, mtp, V0, symbols, symbols_wo, xcc_wo, gcc_wo, Fcc_wo, lzmat, zmatvals = logdata # string for fccards string_fccards = gau.get_fccards_string(gcc_wo, Fcc_wo) # generate Molecule instance molecule = Molecule() molecule.setvar(xcc=xcc_wo, Fcc=Fcc_wo, V0=V0) molecule.setvar(fscal=fscal) molecule.setvar(symbols=symbols_wo) molecule.setvar(ch=ch, mtp=mtp) molecule.prepare() molecule.setup() molecule.ana_freqs() # Calculate partition functions for the temperatures qtot, V1, qis = molecule.calc_pfns(inpvars._temps, fmode=fmode) qtr, qrot, qvib, qele = qis Qrv = np.array([xx * yy for xx, yy in zip(qrot, qvib)]) # Calculate partition functions at target temperature qtot, V1, qis = molecule.calc_pfns([inpvars._temp], fmode=fmode) # remove rotsigma for Gibbs gibbs = V1 - pc.KB * inpvars._temp * np.log(qtot[0] * molecule._rotsigma) # imaginary frequency if len(molecule._ccimag) == 0: ifreq = None elif len(molecule._ccimag) == 1: ifreq = [ifreq for ifreq, ivec in list(molecule._ccimag)][0] else: ifreq = None # weight for this conformer if inpvars._enantio and molecule._pgroup.lower() == "c1": weight = 2 else: weight = 1 # pack and return data conf_tuple = (point, V0, V1, gibbs, weight, Qrv, ifreq, lzmat, zmatvals, log) return conf_tuple, symbols, string_fccards
def molecule_prep(gts, eslist=[], tiso=None, fscal=1.0): # generate instance of Molecule molecule = Molecule() # read gts molecule.set_from_gts(gts) # masses if tiso is not None: imods, imasses = tiso molecule.apply_imods(imods, imasses) # electronic states molecule.setvar(les=eslist) # set frequency scaling molecule.setvar(fscal=fscal) # setup molecule.setup() molecule.ana_freqs("cc") return molecule
def get_imag_freq(log, fscal): try: # Read log file logdata = gau.read_gaussian_log(log) logdata = prepare_log_data(logdata) ch, mtp, V0, symbols, symbols_wo, xcc_wo, gcc_wo, Fcc_wo, lzmat, zmatvals = logdata # diagonalize Fcc molecule = Molecule() molecule.setvar(xcc=xcc_wo, Fcc=Fcc_wo, V0=V0) molecule.setvar(fscal=fscal) molecule.setvar(symbols=symbols_wo) molecule.setvar(ch=ch, mtp=mtp) molecule.prepare() molecule.setup() molecule.ana_freqs() ifreq = molecule._ccimag[0][0] except: ifreq = None # return return ifreq
def path2vadi(tcommon,drst,Eref=None,ics=None,boolint=False,lowfq={},freqscal=1.0,icsbw=None,icsfw=None,symmetry=None): ''' lowfq: in case of imaginary frequencies ''' # boolint as boolean if boolint in [False,"no","No","n","N",None]: boolint = False elif boolint in [True,"yes","YES","y","Y"] : boolint = True # check there are internal coordinates if required if boolint and ics in [None,False,[]]: raise Exc.NoICS(Exception) # expand data in tcommon ch,mtp,atnums,masses,mu = tcommon # Sorted labels (by s) slabels = sd.sorted_points(drst,hess=True) # Reference energy if Eref is None: lbw, lfw, sbw, sfw, Eref, Efw = sd.rstlimits(drst) # Independent variable data_x = [drst[label][0] for label in slabels] # mep energy (relative value) listV0 = [drst[label][1]-Eref for label in slabels] # Initializing data lcc_tzpe, lcc_frqs, lcc_Vadi = [], [], [] lic_tzpe, lic_frqs, lic_Vadi = [], [], [] dMols = {} # Updating data for label in slabels: # data in drst s_i, E_i, xms_i,gms_i,Fms_i,v0_i,v1_i,t_i = drst[label] # project gradient if s_i == 0.0: bool_pg = False else : bool_pg = True # lowfq if s_i == 0.0: dlowfq = {} elif s_i < 0.0: dlowfq = lowfq.get("bw",{}) elif s_i > 0.0: dlowfq = lowfq.get("fw",{}) # mass-scaled --> Cartesian coords xcc = fncs.ms2cc_x(xms_i,masses,mu) gcc = fncs.ms2cc_g(gms_i,masses,mu) Fcc = fncs.ms2cc_F(Fms_i,masses,mu) # create Molecule instance mol = Molecule() mol.setvar(xcc=xcc,gcc=gcc,Fcc=Fcc) mol.setvar(atonums=atnums,masses=masses) mol.setvar(ch=ch,mtp=mtp,V0=E_i) mol.setvar(fscal=freqscal) if symmetry is not None: mol.setvar(pgroup=symmetry[0]) mol.setvar(rotsigma=symmetry[1]) mol.prepare() mol.setup(mu,projgrad=bool_pg) mol.clean_freqs("cc") # it may be needed with orca mol.deal_lowfq(dlowfq,"cc") # deal with low frequencies mol.ana_freqs("cc") # calculate zpe # append data lcc_tzpe.append(float(mol._cczpe) ) lcc_Vadi.append(mol._ccV1 - Eref ) lcc_frqs.append(list(mol._ccfreqs)) # internal coordinates if boolint: if s_i < 0.0 and icsbw is not None: mol.icfreqs(icsbw,bool_pg) elif s_i > 0.0 and icsfw is not None: mol.icfreqs(icsfw,bool_pg) else : mol.icfreqs(ics ,bool_pg) mol.deal_lowfq(dlowfq,"ic") mol.ana_freqs("ic") # append data lic_tzpe.append(float(mol._iczpe) ) lic_Vadi.append(mol._icV1 - Eref ) lic_frqs.append(list(mol._icfreqs)) # save instance dMols[label] = (s_i,mol) # package data tuple_cc = (data_x,lcc_frqs,lcc_tzpe) tuple_ic = (data_x,lic_frqs,lic_tzpe) # Generate splines Vadi_cc = VadiSpline(data_x,lcc_Vadi) if boolint: Vadi_ic = VadiSpline(data_x,lic_Vadi) else : Vadi_ic = None # Return data return dMols, Vadi_cc, Vadi_ic, tuple_cc, tuple_ic, listV0