|
您好,修改分割符以后脚本不再报错,但是执行输出gjf文件的时候还是有些问题。
当两个扫描坐标范围都在正数区间的时候,可以正常输出;但是两个范围任一涉及负数区间的时候脚本情况就是如下,不报错,但是也没有输出任何gjf文件。
不知道是哪的问题,还是我负数输入方式的问题?
- D:\calculate\FOR_GWB\close_to_3rd\inner>python3 anaScan2D_3.py scan.log D(56,8,15,2) D(55,54,84,119)
- This script is to analyze a 2D scan which is not correctly completed. It will extract all the completed points so that you could still draw a 2D-PES figure.
- R1= -46.9472 , R2= 83.1563 , E= 0.298256
- R1= -36.9473 , R2= 83.1563 , E= 0.299025
- R1= -26.9474 , R2= 83.1563 , E= 0.301488
- R1= -16.9474 , R2= 83.1563 , E= 0.305661
- R1= -6.9474 , R2= 83.1563 , E= 0.311482
- R1= 3.0526 , R2= 83.1563 , E= 0.311322
- R1= 13.0526 , R2= 83.1563 , E= 0.317850
- R1= 23.0526 , R2= 83.1563 , E= 0.325014
- R1= 33.0527 , R2= 83.1563 , E= 0.333035
- R1= 43.0527 , R2= 83.1563 , E= 0.341850
- R1= 53.0527 , R2= 83.1563 , E= 0.350731
- R1= 63.0527 , R2= 83.1563 , E= 0.359668
- R1= 73.0527 , R2= 83.1563 , E= 0.369227
- R1= 73.0527 , R2= 93.1563 , E= 0.369834
- R1= 63.0527 , R2= 93.1563 , E= 0.360400
- R1= 53.0527 , R2= 93.1563 , E= 0.351517
- R1= 43.0526 , R2= 93.1563 , E= 0.343413
- R1= 33.0527 , R2= 93.1563 , E= 0.333904
- R1= 23.0527 , R2= 93.1563 , E= 0.325531
- R1= 13.0526 , R2= 93.1563 , E= 0.317831
- R1= 3.0526 , R2= 93.1563 , E= 0.311608
- R1= -6.9474 , R2= 93.1563 , E= 0.306729
- R1= -16.9474 , R2= 93.1563 , E= 0.303177
- R1= -26.9474 , R2= 93.1563 , E= 0.300998
- R1= -36.9473 , R2= 93.1563 , E= 0.300176
- R1= -46.9471 , R2= 93.1563 , E= 0.300717
- R1= -46.9471 , R2= 103.1563 , E= 0.301174
- R1= -36.9473 , R2= 103.1562 , E= 0.300646
- R1= -26.9474 , R2= 103.1562 , E= 0.301486
- R1= -16.9474 , R2= 103.1563 , E= 0.303695
- R1= -6.9474 , R2= 103.1563 , E= 0.307286
- R1= 3.0526 , R2= 103.1563 , E= 0.312163
- R1= 13.0526 , R2= 103.1563 , E= 0.318459
- R1= 23.0527 , R2= 103.1563 , E= 0.326116
- R1= 33.0527 , R2= 103.1563 , E= 0.334860
- R1= 43.0527 , R2= 103.1563 , E= 0.344302
- R1= 53.0527 , R2= 103.1563 , E= 0.353789
- R1= 73.0527 , R2= 103.1563 , E= 0.370614
- R1= 73.0527 , R2= 113.1563 , E= 0.371791
- R1= 63.0527 , R2= 113.1563 , E= 0.362528
- R1= 53.0527 , R2= 113.1563 , E= 0.353673
- R1= 43.0527 , R2= 113.1563 , E= 0.345912
- R1= 33.0526 , R2= 113.1563 , E= 0.338379
- R1= 23.0526 , R2= 113.1563 , E= 0.331041
- R1= 13.0526 , R2= 113.1563 , E= 0.319474
- R1= 3.0526 , R2= 113.1563 , E= 0.313089
- R1= -6.9474 , R2= 113.1563 , E= 0.308112
- R1= -16.9474 , R2= 113.1563 , E= 0.304521
- R1= -26.9473 , R2= 113.1562 , E= 0.302332
- R1= -36.9473 , R2= 113.1562 , E= 0.301517
- R1= -46.9471 , R2= 113.1562 , E= 0.302052
- R1= -46.9472 , R2= 123.1562 , E= 0.299854
- R1= -36.9473 , R2= 123.1562 , E= 0.300146
- R1= -26.9474 , R2= 123.1563 , E= 0.302254
- R1= -16.9474 , R2= 123.1563 , E= 0.306162
- R1= -6.9474 , R2= 123.1563 , E= 0.311791
- R1= 3.0526 , R2= 123.1563 , E= 0.316973
- R1= 13.0526 , R2= 123.1563 , E= 0.320516
- R1= 23.0527 , R2= 123.1563 , E= 0.328606
- R1= 33.0527 , R2= 123.1563 , E= 0.335376
- R1= 43.0527 , R2= 123.1563 , E= 0.344265
- R1= 53.0527 , R2= 123.1563 , E= 0.353539
- R1= 63.0527 , R2= 123.1563 , E= 0.363006
- R1= 73.0526 , R2= 123.1563 , E= 0.372874
- R1= 73.0526 , R2= 133.1563 , E= 0.374837
- R1= 63.0526 , R2= 133.1563 , E= 0.364563
- R1= 53.0527 , R2= 133.1563 , E= 0.354669
- R1= 43.0527 , R2= 133.1563 , E= 0.345287
- R1= 33.0527 , R2= 133.1563 , E= 0.336386
- R1= 23.0527 , R2= 133.1563 , E= 0.328478
- R1= 13.0526 , R2= 133.1563 , E= 0.321955
- R1= 3.0527 , R2= 133.1563 , E= 0.316932
- R1= -6.9474 , R2= 133.1562 , E= 0.313386
- R1= -16.9474 , R2= 133.1562 , E= 0.307243
- R1= -26.9473 , R2= 133.1562 , E= 0.305265
- R1= -36.9473 , R2= 133.1561 , E= 0.304705
- R1= -46.9472 , R2= 133.1561 , E= 0.301513
- R1= -46.9472 , R2= 143.1561 , E= 0.304642
- R1= -36.9473 , R2= 143.1562 , E= 0.305020
- R1= -26.9473 , R2= 143.1562 , E= 0.307327
- R1= -16.9474 , R2= 143.1562 , E= 0.311434
- R1= -6.9474 , R2= 143.1562 , E= 0.317234
- R1= 3.0526 , R2= 143.1562 , E= 0.318421
- R1= 13.0527 , R2= 143.1563 , E= 0.324911
- R1= 23.0527 , R2= 143.1563 , E= 0.333027
- R1= 33.0527 , R2= 143.1563 , E= 0.338979
- R1= 43.0527 , R2= 143.1563 , E= 0.347943
- R1= 53.0526 , R2= 143.1563 , E= 0.357507
- R1= 63.0526 , R2= 143.1563 , E= 0.367679
- R1= 73.0526 , R2= 143.1563 , E= 0.378483
- R1= 73.0526 , R2= 153.1562 , E= 0.383749
- R1= 63.0526 , R2= 153.1562 , E= 0.372724
- R1= 53.0526 , R2= 153.1562 , E= 0.362320
- R1= 43.0527 , R2= 153.1562 , E= 0.352556
- R1= 33.0527 , R2= 153.1562 , E= 0.343399
- R1= 23.0527 , R2= 153.1562 , E= 0.335176
- R1= 13.0527 , R2= 153.1562 , E= 0.328373
- R1= 3.0527 , R2= 153.1562 , E= 0.323190
- R1= -6.9473 , R2= 153.1562 , E= 0.319705
- R1= -16.9473 , R2= 153.1562 , E= 0.317776
- R1= -26.9473 , R2= 153.1562 , E= 0.313159
- R1= -36.9472 , R2= 153.1562 , E= 0.312718
- R1= -46.9472 , R2= 153.1561 , E= 0.313721
- R1= -46.9472 , R2= 163.1561 , E= 0.320420
- R1= -36.9472 , R2= 163.1561 , E= 0.319487
- R1= -26.9473 , R2= 163.1561 , E= 0.320033
- R1= -16.9473 , R2= 163.1561 , E= 0.322125
- R1= -6.9473 , R2= 163.1562 , E= 0.325612
- R1= 3.0527 , R2= 163.1562 , E= 0.330571
- R1= 13.0527 , R2= 163.1562 , E= 0.337085
- R1= 23.0527 , R2= 163.1562 , E= 0.341124
- R1= 33.0527 , R2= 163.1562 , E= 0.349786
- R1= 43.0527 , R2= 163.1562 , E= 0.359296
- R1= 53.0526 , R2= 163.1562 , E= 0.369245
- R1= 63.0526 , R2= 163.1562 , E= 0.379761
- R1= 73.0526 , R2= 163.1562 , E= 0.390817
- R1= 73.0526 , R2= 173.1562 , E= 0.399401
- R1= 63.0526 , R2= 173.1562 , E= 0.388648
- R1= 53.0527 , R2= 173.1562 , E= 0.378242
- R1= 43.0526 , R2= 173.1562 , E= 0.368121
- R1= 33.0526 , R2= 173.1562 , E= 0.357865
- R1= 23.0527 , R2= 173.1562 , E= 0.348798
- R1= 13.0527 , R2= 173.1562 , E= 0.341358
- R1= 3.0527 , R2= 173.1562 , E= 0.335582
- R1= -6.9473 , R2= 173.1562 , E= 0.331550
- R1= -16.9473 , R2= 173.1562 , E= 0.329229
- R1= -26.9473 , R2= 173.1562 , E= 0.328304
- R1= -36.9473 , R2= 173.1561 , E= 0.327559
- R1= -46.9472 , R2= 173.1561 , E= 0.327274
- Now are you going to generate gjf files for a range of points? y/n
- y
- Range for coord1: e.g. 1.0~2.0
- -20.0~-40.0
- Range for coord2: e.g. 1.0~2.0
- 110.0~130.0
- Your kwds:
- # opt=modredundant nosymm geom=connectivity pm7
- Your cores:
- 28
- Your memory:
- 75GB
- Your charge:
- 0
- Your multiplicity:
- 0
- Now reading end.txt for the end part of your gjf file.
- No end.txt found.
复制代码
这是按您提示更改分隔符之后使用的脚本
- import os, sys
- print('This script is to analyze a 2D scan which is not correctly completed. \
- It will extract all the completed points so that you could still draw a 2D-PES figure.')
- _, path, r1, r2 = sys.argv
- r1s = []
- r2s = []
- es = []
- coords = []
- lineNum = 0
- from common import readLog
- elementTable = ['pass','H','He','Li','Be','B','C','N','O','F','Ne','Na','Mg','Al','Si','P','S','Cl','Ar','K','Ca',\
- 'Sc','Ti','V','Cr','Mn','Fe','Co','Ni','Cu','Zm','Ga','Ge','As','Se','Br','Kr','Rb','Sr','Y','Zr','Nb',\
- 'Mo','Tc','Ru','Rh','Pd','Ag','Cd','In','Sn','Sb','Te','I','Xe','Cs','Ba',\
- 'La','Ce','Pr','Nd','Pm','Sm','Eu','Gd','Tb','Dy','Ho','Er','Tm','Yb','Lu','Hf',\
- 'Ta','W','Re','Os','Ir','Pt','Au','Hg','Tl','Pb','Bi','Po','At','Rn']
- import re
- with open(path) as f:
- etemp = 0
- isStation = False
- flagGeo = 0
- thisCoord = []
- previousCoord = []
- while True:
- line=f.readline()
- lineNum += 1
- if line == "":
- break
- if "SCF Done" in line:
- etemp = float(line.split('=')[1].split("A")[0].strip())
- continue
- if "point found" in line:
- isStation = True
- continue
- if 'Input Orientation' in line:
- flagGeo = 1
- continue
- if flagGeo == 1 and (re.match("\s*[0-9]+\s*[0-9]+\s*[0-9]+\s*\-*[0-9]+\.",line) != None):
- lsplitted = line.split()
- element = elementTable[int(lsplitted[1])]
- thisCoord.append([element] + lsplitted[-3:])
- if (r1 in line) and isStation:
- r1s.append(float(line.split(r1)[1].split('-DE')[0].strip()))
- es.append(etemp)
- continue
- if (r2 in line) and isStation:
- r2s.append(float(line.split(r2)[1].split('-DE')[0].strip()))
- continue
- if "Rotational" in line:
- flagGeo = 0
- if isStation:
- coords.append(previousCoord)
- previousCoord = thisCoord[:]
- thisCoord = []
- isStation = False
- i=0
- for e in es:
- print('R1= {:.4f} , R2= {:.4f} , E= {:.6f} '.format(r1s[i],r2s[i],e))
- i+=1
- def withinRange(value,rangeList):
- if float(value) < float(rangeList[1]) and float(value) > float(rangeList[0]):
- return True
- from common import writeGjf
- #def writeGjf(path,coords,kwd,core,mem,charge,mult,end,chk='')
- print('Now are you going to generate gjf files for a range of points? y/n')
- if(input() != 'y'):
- exit()
- print('Range for coord1: e.g. 1.0~2.0')
- rangeR1 = input().split('~')
- print('Range for coord2: e.g. 1.0~2.0')
- rangeR2 = input().split('~')
- print('Your kwds:')
- kwd = input()
- print('Your cores:')
- core = input()
- print('Your memory:')
- mem = input()
- print('Your charge:')
- charge = input()
- print('Your multiplicity:')
- mult = input()
- print('Now reading end.txt for the end part of your gjf file.')
- end = ''
- try:
- with open('end.txt') as f:
- end = f.read()
- except:
- print('No end.txt found.')
- itemNum = 0
- for i in coords:
- r1 = r1s[itemNum]
- r2 = r2s[itemNum]
- if withinRange(r1,rangeR1) and withinRange(r2,rangeR2):
- writeGjf(path.replace('.log',f'_{r1}_{r2}.gjf'),i,kwd,core,mem,charge,mult,end)
- itemNum += 1
复制代码 |
|