Talk:Mod:Hunt Research Group/extract single geom
Appearance
python script to extract single structure from Standard Orientaion
- copy the code into a script called "extract_structure.py"
- to execute the script type "python extract_structure.py file_name (without extension)
- this will print to terminal and create a file file_name.xyz
•the last structure is saved
# # extract_structure.py # # python script to extract and print single standard orintation from a gaussian log file # to run the script type python extract_structure.py input_file_name (without extension) # import sys import os dir=os.getcwd() # if len(sys.argv) == 1: print('to run the script please type: python extract_structure.py input_file_name \(without extension\)') sys.exit() else: base=str(sys.argv[1]) file=base+'.log' out=base+'.xyz' s='directory is ' print('{0:}{1:}'.format(s,dir)) s='input file is ' print('{0:}{1:}'.format(s,file)) s='output file is ' print('{0:}{1:}'.format(s,out)) #close if # # set some defaults col_num=[] col_atom=[] col_type=[] col_x=[] col_y=[] col_z=[] rep=0 go=False # open file and read lines one by one f=open(file,"r") line =f.readline() while line : line =f.readline() #==extract GEOMETRY == # check for standard orientation text set go if the text appears if 'Standard orientation:' in line: go=True s='Structure in standard orientation found ' if rep == 0 : print('{0:}'.format(s)) n=1 rep=rep+1 count=0 # close if # # check for input orientation text set go if the text appears if 'Input orientation:' in line: go=True s='Input orientation: found ' if rep == 0 : print('{0:}'.format(s)) n=1 rep=rep+1 count=0 # close if # # if go is on then print out the structure # only print if you have not got to rot const line # don't print if its one of the separation lines while go: n = n+1 m = 0 line =f.readline() if 'Rotational constants (GHZ):' in line: m=-1 if '---------' in line: m=1 if n > 4 and m == 0 : count=count+1 a1,b1,c1,d1,e1,f1=line.rstrip().split() col_num.append(int(a1)) col_atom.append(int(b1)) col_type.append(int(c1)) col_x.append(float(d1)) col_y.append(float(e1)) col_z.append(float(f1)) if m == -1 : go=False # close while #close while #now write to the .xyz file #we may have muliple geometries print only the last c=open(out,"w") s='number of atoms ' print('{0:}{1:}'.format(s,count)) c.write('{0:}{1:} \n'.format(s,count)) s='atomic no, xyz coords' print('{0:}'.format(s)) c.write('{0:} \n'.format(s)) # n=0 if rep != 1 : n=len(col_num)-count count=count*rep s=' structures found only the last is saved' print('{0:}{1:}'.format(rep,s)) # endif while n < count: c.write('{0:>4d} {1: 09.6f} {2: 09.6f} {3: 09.6f} \n'.format(col_atom[n],col_x[n],col_y[n],col_z[n])) print('{0:>4d} {1:>4d} {2: 09.6f} {3: 09.6f} {4: 09.6f}'.format(col_num[n],col_atom[n],col_x[n],col_y[n],col_z[n])) n=n + 1 #close while # close all open files f.close() c.close() #