def sep_mol(coords, distca, Type): import math import numpy as np from pprint import detec from chemData import pTable atmList = [] for ID, line in enumerate(coords): #print(line) atmDict = {} atmDict["id"] = ID atmDict["sym"] = line[0] atmDict["x"] = float(line[1]) atmDict["y"] = float(line[2]) atmDict["z"] = float(line[3]) atmDict["con"] = [] atmDict["grp_dist"] = False atmDict["grp_vdw"] = False for sym, data in pTable.items(): if atmDict["sym"] == sym: atmDict["nu"] = data[0] atmDict["mas"] = data[1] atmDict["vdw"] = data[2] atmList.append(atmDict) natoms = len(atmList) dist = np.zeros((natoms,natoms)) # FIND DISTS BETWEEN ALL ATOMS i & j group_dist = 0 group_vdw = 0 for val, i in enumerate(atmList): con_vwd = False con_dist = False # SECOND ATOM < DISTCA for vals, j in enumerate(atmList): if i != j: a = (i["x"]-j["x"])**2 + (i["y"]-j["y"])**2\ + (i["z"]-j["z"])**2 dist[val,vals] = math.sqrt(a) # IF UNDER DISTCA --------------------------------------- if dist[val, vals] < distca: con_dist = True # IF NEITHER I NOR J PART OF A GROUP # ADD THEM TO A NEW GROUP if i["grp_dist"] is False and j["grp_dist"] is False: i["grp_dist"], j["grp_dist"] = group_dist, group_dist group_dist += 1 # IF BOTH HAVE BEEN ASSIGNED TO A DIFF GROUP elif not i["grp_dist"] is False and not j["grp_dist"] is False: if i["grp_dist"] != j["grp_dist"]: grp_chng = j["grp_dist"] for k in atmList: if k["grp_dist"] is grp_chng: k["grp_dist"] = i["grp_dist"] # IF j NOT ASSIGNED elif not i["grp_dist"] is False and j["grp_dist"] is False: j["grp_dist"] = i["grp_dist"] # IF i NOT ASSIGNED elif not j["grp_dist"] is False and i["grp_dist"] is False: i["grp_dist"] = j["grp_dist"] # CHECK IF CONNECTED USING VDW DATA ----------------------- #print(i["vdw"] + j["vdw"]) if dist[val, vals] < i["vdw"] + j["vdw"]: # ADD TO ATOM LIST if not j["id"] in i["con"]: i["con"].append(j["id"]) j["con"].append(i["id"]) con_vwd = True # IF NEITHER I NOR J PART OF A GROUP # ADD THEM TO A NEW GROUP if i["grp_vdw"] is False and j["grp_vdw"] is False: i["grp_vdw"], j["grp_vdw"] = group_vdw, group_vdw group_vdw += 1 # IF BOTH HAVE BEEN ASSIGNED TO A DIFF GROUP elif not i["grp_vdw"] is False and not j["grp_vdw"] is False: if i["grp_vdw"] != j["grp_vdw"]: grp_chng = j["grp_vdw"] for k in atmList: if k["grp_vdw"] is grp_chng: k["grp_vdw"] = i["grp_vdw"] # IF j NOT ASSIGNED elif not i["grp_vdw"] is False and j["grp_vdw"] is False: j["grp_vdw"] = i["grp_vdw"] # IF i NOT ASSIGNED elif not j["grp_vdw"] is False and i["grp_vdw"] is False: i["grp_vdw"] = j["grp_vdw"] # IF LONER ATOM PUT IN ITS OWN GROUP if not con_dist: i["grp_dist"] = group_dist group_dist += 1 if not con_vwd: i["grp_vdw"] = group_vdw group_vdw += 1 # REORDER GROUPS STARTING FROM 0 # CREATE fragList ---------------------------------------------------------------- if Type == 'check_dist': # NUMBER FRAG ncat, nani, nnrt, nunk, nrad = 0, 0, 0, 0, 0 print("-"*40) print("SYSTEM USING CUTOFF DISTANCE:") totChrg = 0 totMult = 1 nfrags_dist = 0 fragList = [] # FIND DISTANCES for grp_dist in range(group_dist): fragDict_dist = {} fragDict_dist['ids'] = [] fragDict_dist['syms'] = [] foundnew = False for atm in atmList: if atm["grp_dist"] == grp_dist: foundnew = True atm["grp_dist"] = nfrags_dist fragDict_dist['syms'].append(atm['sym']) fragDict_dist['ids'].append(atm['id']) if foundnew: fragDict_dist['grp'] = nfrags_dist # FIND CHARGE/MULT if isCation(fragDict_dist['syms'], fragDict_dist['ids']): fragDict_dist["chrg"] = 1 fragDict_dist["mult"] = 1 fragDict_dist["name"] = "cation" + str(ncat) ncat += 1 if totChrg != '?': totChrg += 1 elif isAnion(fragDict_dist['syms'], fragDict_dist['ids']): fragDict_dist["chrg"] = -1 fragDict_dist["mult"] = 1 fragDict_dist["name"] = "anion" + str(nani) nani += 1 if totChrg != '?': totChrg += -1 elif isNeutral(fragDict_dist['syms'], fragDict_dist['ids']): fragDict_dist["chrg"] = 0 fragDict_dist["mult"] = 1 fragDict_dist["name"] = "neutral" + str(nnrt) nnrt += 1 elif isRadical(fragDict_dist['syms'], fragDict_dist['ids']): fragDict_dist["chrg"] = 0 fragDict_dist["mult"] = 2 fragDict_dist["name"] = "radical" + str(nrad) nrad += 1 totMult = 2 else: # FIND CHEMICAL FORMULA syms = [] chemForm = '' for sym in fragDict_dist['syms']: if sym not in syms: numTimes = fragDict_dist['syms'].count(sym) chemForm += sym + str(numTimes) syms.append(sym) detec("unknown", chemForm, " ".join(str(x+1) for x in fragDict_dist['ids'])) fragDict_dist["chrg"] = '?' fragDict_dist["mult"] = '?' fragDict_dist["name"] = "unknown" + str(nunk) nunk += 1 totChrg = '?' totMult = '?' # FOR NEXT FRAGMENT fragList.append(fragDict_dist) nfrags_dist += 1 elif Type == 'check_vdw': # CREATE fragList -------------------------------------------------------- print("-"*40) print("SYSTEM USING VDW's RADII:") # PROPERTIES totChrg = 0 totMult = 1 nfrags_vdw = 0 fragList = [] # NAMING ncat, nani, nntr, nunk, nrad = 0, 0, 0, 0, 0 for grp_vdw in range(group_vdw): fragDict_vdw = {} fragDict_vdw['ids'] = [] fragDict_vdw['syms'] = [] foundnew = False for atm in atmList: if atm["grp_vdw"] == grp_vdw: foundnew = True atm["grp_vdw"] = nfrags_vdw fragDict_vdw['syms'].append(atm['sym']) fragDict_vdw['ids'].append(atm['id']) if foundnew: fragDict_vdw['grp'] = nfrags_vdw # FIND CHARGE/MULT if isCation(fragDict_vdw['syms'], fragDict_vdw['ids']): fragDict_vdw["chrg"] = 1 fragDict_vdw["mult"] = 1 fragDict_vdw["name"] = "cation" + str(ncat) ncat += 1 if totChrg != '?': totChrg += 1 elif isAnion(fragDict_vdw['syms'], fragDict_vdw['ids']): fragDict_vdw["chrg"] = -1 fragDict_vdw["mult"] = 1 fragDict_vdw["name"] = "anion" + str(nani) nani += 1 if totChrg != '?': totChrg += -1 elif isNeutral(fragDict_vdw['syms'], fragDict_vdw['ids']): fragDict_vdw["chrg"] = 0 fragDict_vdw["mult"] = 1 fragDict_vdw["name"] = "neutral" + str(nntr) nntr += 1 elif isRadical(fragDict_vdw['syms'], fragDict_vdw['ids']): fragDict_vdw["chrg"] = 0 fragDict_vdw["mult"] = 2 fragDict_vdw["name"] = "radical" + str(nrad) nrad += 1 totMult = 2 else: # FIND CHEMICAL FORMULA syms = [] chemForm = '' for sym in fragDict_vdw['syms']: if sym not in syms: numTimes = fragDict_vdw['syms'].count(sym) chemForm += sym + str(numTimes) syms.append(sym) detec("unknown", chemForm, " ".join(str(x+1) for x in fragDict_vdw['ids'])) fragDict_vdw["chrg"] = '?' fragDict_vdw["mult"] = '?' fragDict_vdw["name"] = "unknown" + str(nunk) nunk += 1 totChrg = '?' totMult = '?' # FOR NEXT FRAGMENT fragList.append(fragDict_vdw) nfrags_vdw += 1 print('-'*40) ### fragList = {'ids': [21], 'syms': ['Cl'], 'grp_dist': 1, 'chrg': -1, 'mult': 1} #for i in fragList: # print(i) ### atmList = {'id': 710, 'sym': 'H', 'x': 11.5282, 'y': 7.0276, 'z': -18.5563, 'grp_dist': 80, 'nu': 1.0} #for i in atmList: # print(i) #print(fragList, atmList, totChrg, totMult) return atmList, fragList, totChrg, totMult
def fmo(path, File, template, sysData, jobTemp): import os, re from supercomp import host from chemData import pTable from templates import fmo_rjnJob from templates import fmo_mgsJob from templates import fmo_stmJob from templates import fmo_gaiJob from templates import fmo_monJob from templates import fmo_masJob from templates import gms_rjnJob from templates import gms_mgsJob from templates import gms_masJob from templates import gms_monJob from templates import gms_gaiJob from templates import gms_stmJob from tempInp import fmo_ions from write import write_xyz from write import write_gmsInp from write import write_job # NAME FOR WRITING FILE, DIRS ions = False name = File.replace('.xyz', '').split('_')[0] # MAKE NEW DIR AND NEW PATH npath = newDir(path, File, template) # UNPACK sysData mp2 = False fragList, atmList, totChrg, totMult = sysData # NUMBER OF FRAGS nfrags = len(fragList) # CREATE xyzData xyzData = [] for frag in fragList: for atm in atmList: if atm['id'] in frag['ids']: xyzData.append( [atm['sym'], atm['nu'], atm["x"], atm["y"], atm["z"]]) # TEMPLATE LINES input = xyzTemp(path, template, xyzData) fmo_input = [] # IF RUNTYP IS ENERGY MAKE ION JOBS for ind in range(len(input)): if 'NGROUP' in input[ind]: spl_line = re.split('=| ', input[ind]) for val, bit in enumerate(spl_line): if bit == 'NGROUP': in_grp = spl_line[val + 1] if in_grp != str(nfrags): #print('Changing NGROUP to', nfrags) input[ind] = input[ind].\ replace('NGROUP=' + in_grp, 'NGROUP=' + str(nfrags)) # CHECK NFRAG = NO. OF FOUND FRAGMENTS if 'NFRAG' in input[ind]: spl_line = re.split('=| ', input[ind]) for val, bit in enumerate(spl_line): if bit == 'NFRAG': in_nfrags = spl_line[val + 1] if in_nfrags != str(nfrags): #print('Changing NFRAG to', nfrags) input[ind] = input[ind].\ replace('NFRAG=' + in_nfrags, 'NFRAG=' + str(nfrags)) # LIST OF CHARGES FOR FRAGMENTS if 'ICHARG' in input[ind]: spl_line = re.split('=| ', input[ind]) for val, bit in enumerate(spl_line): if 'ICHARG' in bit: in_chrg = spl_line[val + 1] chrgs = [] for frag in fragList: chrgs.append(frag['chrg']) input[ind] = input[ind].replace('ICHARG(1)=' + in_chrg, \ 'ICHARG(1)=' + ','.join(str(p) for p in chrgs) + '\n') # MULT if 'MULT' in input[ind]: spl_line = re.split('=', input[ind]) for val, bit in enumerate(spl_line): if 'MULT' in bit: mults = [] for frag in fragList: mults.append(frag['mult']) in_chrg = spl_line[val + 1] input[ind] = input[ind].replace('MULT(1)=' + in_chrg,\ 'MULT(1)=' + ','.join(str(p) for p in mults) + '\n') # CHECK IF SPEC FOR ION CALCS if 'RUNTYP' in input[ind]: spl_line = re.split('=| ', input[ind]) for val, bit in enumerate(spl_line): if 'RUNTYP' in bit: if spl_line[val + 1] == 'ENERGY': ions = True # MEMORY USED IN INPUT USED FOR JOB MEMORY if 'MWORDS' in input[ind]: spl_line = re.split('=| ', input[ind]) for val, bit in enumerate(spl_line): if bit == 'MWORDS' in input[ind]: memory = spl_line[val + 1] # MEMORY USED IN INPUT FOR JOB MEMORY ddi = False if 'MEMDDI' in input[ind]: spl_line = re.split('=| ', input[ind]) for val, bit in enumerate(spl_line): if bit == 'MEMDDI' in input[ind]: ddi = spl_line[val + 1] # FOR FMO_IONS if '$MP2' in input[ind]: mp2 = input[ind] if "GBASIS" in input[ind]: spl_line = re.split('=| ', input[ind]) for val, bit in enumerate(spl_line): if bit == 'GBASIS' in input[ind]: bset = spl_line[val + 1] # REMOVE LINES FROM INPUT WITH NEW LIST # FOR MANY LINE CHANGES - COORDS, INDAT, ATM LIST atmUniq = [] numUniq = [] seenA = False for line in input: if type(line) != list: # INDAT MAY BE DIFF NUMBER OF LINES TO NEW INDAT if 'INDAT' in line: fmo_input.append(' INDAT(1)=0,1,-' + str(len(fragList[0]['ids'])) + ',\n') # REMEMBER WHERE LAST FRAG FINISHED n = len(fragList[0]['ids']) + 1 for frag in fragList: if not frag is fragList[0]: fmo_input.append(' '*13 + '0,' + str(n) + \ ',-' + str(n + len(frag['ids']) - 1) + ',\n') n += len(frag['ids']) fmo_input.append(' ' * 13 + '0\n') # SO NOT PASSED TO ELSE // EXTRA LINES TO DETERMINE FRAGMENT elif re.search('^\s*0,[0-9]{1,3},-[0-9]{1,3},\s*$', line) or \ re.search('^\s*0\s*$', line): pass # ATOM LIST MAY BE DIFF NUMBER OF LINES TO NEW ATOM LIST elif re.search('^\s*[A-Za-z]*\s*[0-9]*\.0*$', line): if not seenA: for i in xyzData: atmUniq.append(i[0]) numUniq.append(i[1]) atmUniq = list(set(atmUniq)) for i in range(len(atmUniq)): for sym, data in pTable.items(): if sym == atmUniq[i]: fmo_input.append(' ' + str(atmUniq[i]) + ' ' + \ str(data[0]) + '\n') seenA = True # EVERY OTHER LINE AS IS else: fmo_input.append(line) else: fmo_input.append(line) # HARDWARE FOR WRITING hw = host() if ions: # FOR EACH FRAGMENT for frag in fragList: ifrag = [] for ID in frag['ids']: atm = atmList[ID] ifrag.append( [atm['sym'], atm['nu'], atm["x"], atm["y"], atm["z"]]) # MAKE FOLDER AND XYZ if not os.path.isdir(npath + name + '-' + frag["name"]): os.mkdir(npath + name + '-' + frag["name"]) write_xyz(npath + name + '-' + frag["name"] + '/', name + '-' + frag["name"], ifrag) # INPUT AND OUTPUT FOR JOB input = fmo_ions(str(frag['chrg']), ifrag, bset, mp2) write_gmsInp(npath + name + '-' + frag["name"] + '/', name + '-' + frag["name"], input) # WRITE JOB lines = False if jobTemp: # lines = job_replace(name, jobTemp) lines = job_replace(name + '-' + frag["name"], jobTemp) else: if hw == 'rjn': lines = gms_rjnJob(name + '-' + frag["name"]) elif hw == 'mgs': lines = gms_mgsJob(name + '-' + frag["name"]) elif hw == 'gai': lines = gms_gaiJob(name + '-' + frag["name"]) elif hw == 'mas': lines = gms_masJob(name + '-' + frag["name"]) elif hw == 'mon': lines = gms_monJob(name + '-' + frag["name"]) elif hw == 'stm': lines = gms_stmJob(name + '-' + frag["name"]) if lines: write_job(npath + name + '-' + frag["name"] + '/', name + '-' + frag["name"], lines) # ------------------------------------------------- # WRITE INP write_gmsInp(npath, name, fmo_input) # WRITE JOB lines = False if jobTemp: lines = job_replace(name, jobTemp) else: if hw == 'rjn': lines = fmo_rjnJob(name, nfrags, memory, ddi) elif hw == 'mgs': lines = fmo_mgsJob(name, nfrags, memory, ddi) elif hw == 'stm': lines = fmo_stmJob(name, nfrags, memory, ddi) elif hw == 'gai': lines = fmo_gaiJob(name) #, nfrags, memory, ddi) elif hw == 'mon': lines = fmo_monJob(name, nfrags, memory, ddi) elif hw == 'mas': lines = fmo_masJob(name, nfrags, memory, ddi) if lines: write_job(npath, name, lines)
def g09_geom(path, File, opt): import os, re from general import eof from chemData import pTable ginc = False vals = False end = False coords = [] geom = [] hold = [] pattern = "-?[0-9]*\.[0-9]*\s*" lines = eof(path, File, 0.4) # GRAB GINC VALUES if opt: for line in lines: if re.search("GINC", line): # FINDS LAST CASE OF 'GINC' coords = [] ginc = True if ginc: coords.append(line) j = '' # FOR ALL LINES for i in coords: # SUM ALL LINES TOGETHER AS CONTINUOUR STRING j = j + i j = j.replace('\n', '') j = j.replace(' ', '') j = j.split('\\') # AND OPT GEOM geom = [] pat = ",-?[0-9]*\.[0-9]*" for line in j: if re.search("^[A-Z]{1,2},?[a-z]?[0-9]*" + \ pat + pat + pat + "$", line): line = line.split(',') # SOMETIMES AN EXTRA COLUMN RETRIEVED? geom.append([line[0], line[len(line) - 3],\ line[len(line) - 2], line[len(line) - 1]]) # FIND SECOND LAST STEP; LAST MAY NOT BE FINISHED else: with open(path + File, 'r+') as f: try: for line in f: if vals: if end: if re.search("------------*", line): vals = False if re.search(pattern + pattern + pattern, line): hold.append(line) end = True if "Coordinates" in line: vals = True end = False coords = hold hold = [] except: print("Corrupt line passed in file ", File) hold = [] for i in coords: i = i.split() hold.append([i[1], i[3], i[4], i[5]]) for i in hold: for el, data in pTable.items(): if data[0] == int(i[0]): geom.append([el, i[1], i[2], i[3]]) break return geom
def fmo(path, File, template, sysData, jobTemp): import os, re from general import hardware from chemData import pTable from templates import fmo_rjnJob from templates import fmo_mgsJob from templates import fmo_gaiJob from templates import gms_rjnJob from templates import gms_mgsJob from templates import gms_gaiJob from tempInp import fmo_ions from write import write_xyz from write import write_gmsInp from write import write_job # NAME FOR WRITING FILE, DIRS name = File.replace('.xyz', '').split('_')[0] # MAKE NEW DIR AND NEW PATH npath = newDir(path, File, template) # UNPACK sysData fmo = True mp2 = False fragList, atmList, totChrg, totMult = sysData # NUMBER OF FRAGS nfrags = len(fragList) # MAKE xyzData xyzData = [] # USE LIST OF IDS TO APPEND for frag in fragList: for ID in frag['ids']: atm = atmList[ID] xyzData.append( [atm['sym'], atm['nu'], atm["x"], atm["y"], atm["z"]]) # TEMPLATE LINES input = xyzTemp(path, template, xyzData) #print(input) fmo_input = [] # ONE LINE REPLACEMENTS - NO MULT YET *** # IF RUNTYP IS ENERGY MAKE ION JOBS ions = False for ind in range(len(input)): if 'NGROUP' in input[ind]: spl_line = re.split('=| ', input[ind]) for val, bit in enumerate(spl_line): if bit == 'NGROUP': in_grp = spl_line[val + 1] if in_grp != str(nfrags): #print('Changing NGROUP to', nfrags) input[ind] = input[ind].\ replace('NGROUP=' + in_grp, 'NGROUP=' + str(nfrags)) # CHECK NFRAG = NO. OF FOUND FRAGMENTS if 'NFRAG' in input[ind]: spl_line = re.split('=| ', input[ind]) for val, bit in enumerate(spl_line): if bit == 'NFRAG': in_nfrags = spl_line[val + 1] if in_nfrags != str(nfrags): #print('Changing NFRAG to', nfrags) input[ind] = input[ind].\ replace('NFRAG=' + in_nfrags, 'NFRAG=' + str(nfrags)) # LIST OF CHARGES FOR FRAGMENTS if 'ICHARG' in input[ind]: spl_line = re.split('=| ', input[ind]) for val, bit in enumerate(spl_line): if 'ICHARG' in bit: in_chrg = spl_line[val + 1] chrgs = [] for frag in fragList: chrgs.append(frag['chrg']) input[ind] = input[ind].replace('ICHARG(1)=' + in_chrg, \ 'ICHARG(1)=' + ','.join(str(p) for p in chrgs) + '\n') # MULT if 'MULT' in input[ind]: spl_line = re.split('=', input[ind]) for val, bit in enumerate(spl_line): if 'MULT' in bit: mults = [] for frag in fragList: mults.append(frag['mult']) in_chrg = spl_line[val + 1] input[ind] = input[ind].replace('MULT(1)=' + in_chrg,\ 'MULT(1)=' + ','.join(str(p) for p in mults) + '\n') # CHECK IF SPEC FOR ION CALCS if 'RUNTYP' in input[ind]: spl_line = re.split('=| ', input[ind]) for val, bit in enumerate(spl_line): if 'RUNTYP' in bit: if spl_line[val + 1] == 'ENERGY': ions = True # MEMORY USED IN INPUT USED FOR JOB MEMORY if 'MWORDS' in input[ind]: spl_line = re.split('=| ', input[ind]) for val, bit in enumerate(spl_line): if bit == 'MWORDS' in input[ind]: memory = spl_line[val + 1] # MEMORY USED IN INPUT FOR JOB MEMORY ddi = False if 'MEMDDI' in input[ind]: spl_line = re.split('=| ', input[ind]) for val, bit in enumerate(spl_line): if bit == 'MEMDDI' in input[ind]: ddi = spl_line[val + 1] # FOR FMO_IONS if '$MP2' in input[ind]: mp2 = input[ind] if "GBASIS" in input[ind]: spl_line = re.split('=| ', input[ind]) for val, bit in enumerate(spl_line): if bit == 'GBASIS' in input[ind]: bset = spl_line[val + 1] # REMOVE LINES FROM INPUT WITH NEW LIST # FOR MANY LINE CHANGES - COORDS, INDAT, ATM LIST atmUniq = [] numUniq = [] seenA = False for line in input: if type(line) != list: # INDAT MAY BE DIFF NUMBER OF LINES TO NEW INDAT if 'INDAT' in line: fmo_input.append(' INDAT(1)=0,1,-' + str(fragList[0]['ids'][-1] + 1) + ',\n') for frag in fragList: if not frag is fragList[0]: fmo_input.append(' '*13 + '0,' + str(frag['ids'][0] + 1) + \ ',-' + str(frag['ids'][-1] + 1) + ',\n') fmo_input.append(' ' * 13 + '0\n') # SO NOT PASSED TO ELSE // EXTRA LINES TO DETERMINE FRAGMENT elif re.search('^\s*0,[0-9]{1,3},-[0-9]{1,3},\s*$', line) or \ re.search('^\s*0\s*$', line): pass # ATOM LIST MAY BE DIFF NUMBER OF LINES TO NEW ATOM LIST elif re.search('^\s*[A-Za-z]*\s*[0-9]*\.0*$', line): if not seenA: for i in xyzData: atmUniq.append(i[0]) numUniq.append(i[1]) atmUniq = list(set(atmUniq)) for i in range(len(atmUniq)): for sym, data in pTable.items(): if sym == atmUniq[i]: fmo_input.append(' ' + str(atmUniq[i]) + ' ' + \ str(data[0]) + '\n') seenA = True # EVERY OTHER LINE AS IS else: fmo_input.append(line) else: fmo_input.append(line) # HARDWARE FOR WRITING hw = hardware() # XYZ OF IONS ------------------------------------ if ions: ncat = 0 nani = 0 nnrt = 0 nunk = 0 # FOR EACH FRAGMENT for i, frag in enumerate(fragList): ifrag = [] for val, atm in enumerate(xyzData): if val in frag['ids']: ifrag.append(atm) # IN CASE QUESTION MARK try: if frag['chrg'] < 0: ion = 'anion' + str(nani) nani += 1 elif frag['chrg'] > 0: ion = 'cation' + str(ncat) ncat += 1 else: ion = 'neutral' + str(nnrt) nnrt += 1 except: if frag['chrg'] == '?': ion = 'unknown' + str(nunk) nunk += 1 # MAKE FOLDER AND XYZ if not os.path.isdir(npath + ion): os.mkdir(npath + ion) write_xyz(npath + ion + '/', ion, ifrag) # INPUT AND OUTPUT FOR JOB input = fmo_ions(str(frag['chrg']), ifrag, bset, mp2) write_gmsInp(npath + ion + '/', ion, input) # WRITE JOB if hw == 'rjn': lines = gms_rjnJob(ion, memory, ddi) if hw == 'mgs': lines = gms_mgsJob(ion, memory, ddi) if hw == 'gai': lines = gms_gaiJob(ion, memory, ddi) write_job(npath + fol + '/', ion, lines) # ------------------------------------------------- # WRITE INP write_gmsInp(npath, name, fmo_input) # WRITE JOB if jobTemp: lines = job_replace(name, jobTemp) else: if hw == 'rjn': lines = fmo_rjnJob(name, nfrags, memory, ddi) if hw == 'mgs': lines = fmo_mgsJob(name, nfrags, memory, ddi) if hw == 'gai': lines = fmo_gaiJob(name) #, nfrags, memory, ddi) write_job(npath, name, lines)