-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathQParse.py
More file actions
110 lines (75 loc) · 3.14 KB
/
Copy pathQParse.py
File metadata and controls
110 lines (75 loc) · 3.14 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
import numpy as np
import mmap
import Parsers as prs
JOB_MATCH_PATTERN = "Welcome to Q-Chem"
JOB_PATTERN_OFFSET = len(JOB_MATCH_PATTERN)
class QParser:
verbose = False
def __init__(self, verbose = False):
self.verbose = verbose
def parseFile(self, filename, parseMethod, args = []):
infile = open(filename, 'r')
mFile = mmap.mmap(infile.fileno(), 0, prot=mmap.PROT_READ)
jobStart = mFile.find(JOB_MATCH_PATTERN.encode("utf-8")) + JOB_PATTERN_OFFSET
jobEnd = -1
doneWithFile = False
if(self.verbose):
print("Processing " + filename)
vals = []
# loop through jobs in file
while(not doneWithFile):
jobText, doneWithFile, jobStart, jobEnd = self.getNextJobText(mFile, jobStart, jobEnd)
# check for crash
#if(prs.fatal(jobText, args)):
# continue
vals.append(parseMethod(jobText, args))
infile.close()
return vals
def getNextJobText(self, mFile, jobStart, jobEnd):
# read next job into memory
mFile.seek(jobStart)
jobEnd = mFile.find(JOB_MATCH_PATTERN.encode("utf-8"))
if(jobEnd == -1):
jobEnd = mFile.size()
jobText = mFile.read(jobEnd - jobStart)
#move buffer pointer to start of next job:
jobStart = jobEnd + JOB_PATTERN_OFFSET + 200
return jobText, jobStart >= mFile.size(), jobStart, jobEnd
def dists(self, infile, atom1, atom2):
return self.parseFile(infile, prs.dist, args=[atom1, atom2])
def GSEnergies(self, infile):
return self.parseFile(infile, prs.GSEnergy)
def GSSpins(self, infile):
return self.parseFile(infile, prs.GSSpin)
def CISEnergies(self, infile):
return self.parseFile(infile, prs.CISEnergies)
def CISSpins(self, infile):
return self.parseFile(infile, prs.CISSpins)
def MP2Energies(self, infile):
return self.parseFile(infile, prs.MP2Energy)
def CISDEnergies(self, infile):
return self.parseFile(infile, prs.CISDEnergies)
def CCSDpTEnergies(self, infile):
return self.parseFile(infile, prs.CCSDpTEnergy)
def CCSDEnergies(self, infile):
return self.parseFile(infile, prs.CCSDEnergy)
def CC2Energies(self, infile):
return self.parseFile(infile, prs.CC2Energy)
def MP3Energies(self, infile):
return self.parseFile(infile, prs.MP3Energy)
def SCFEnergies(self, infile):
return self.parseFile(infile, prs.SCFEnergy)
def EEEnergies(self, infile):
return self.parseFile(infile, prs.EEEnergy)
def Transitions(self, infile):
return self.parseFile(infile, prs.Transitions)
def BCC2Energies(self, infile):
return self.parseFile(infile, prs.BCC2Energy)
def kMP2Energies(self, infile):
return self.parseFile(infile, prs.kMP2Energy)
def TAmplitudes(self, infile):
return self.parseFile(infile, prs.TAmps)
def MP2NBS(self, infile):
return self.parseFile(infile, prs.MP2NBS)
def integMags(self, infile):
return self.parseFile(infile, prs.integMag)