8.3 解析日志而不制造成功结论
这些输入和起始模型为未执行的教学示例。原创配图为示意图,不是计算结果。使用前请验证版本相关语法、授权数据、数值收敛及科学模型。
8.3.1 模型、单位与来源记录
结构长度使用 Å,电子能使用 hartree,振动波数使用 cm⁻¹。核对各输出字段,区分热修正与标准态项。
8.3.2 未执行输入与明确修改片段
按照下方说明确认每个片段的母计算与替换位置;片段不自动构成独立输入。保留空行与文件来源要求。
8.3.2.1 输入块 1
from pathlib import Path
import hashlib, json, re, sys
def number(s):
return float(s.replace('D', 'E').replace('d', 'e'))
reports = []
for name in sys.argv[1:]:
path = Path(name)
raw = path.read_bytes()
text = raw.decode('utf-8', errors='replace')
scf = []
freq = []
for line_no, line in enumerate(text.splitlines(), 1):
m = re.search(r'SCF Done:\s+E\(([^)]+)\)\s*=\s*([-+0-9.DEde]+)', line)
if m:
scf.append({'line': line_no, 'method_label': m.group(1),
'energy_hartree': number(m.group(2))})
if 'Frequencies --' in line:
values = line.split('Frequencies --', 1)[1].split()
freq.append({'line': line_no,
'wavenumbers_cm_minus_1': [number(x) for x in values]})
flat = [v for row in freq for v in row['wavenumbers_cm_minus_1']]
reports.append({
'file': str(path), 'sha256': hashlib.sha256(raw).hexdigest(),
'normal_termination_count': text.count('Normal termination of Gaussian'),
'error_termination_count': text.count('Error termination'),
'optimization_completed_count': text.count('Optimization completed'),
'scf_records': scf, 'frequency_blocks': freq,
'printed_negative_frequency_count': sum(v < 0 for v in flat),
'review_required': True,
'scope_note': 'SCF values are not post-HF totals; multiple jobs require segmentation.'
})
print(json.dumps(reports, indent=2, ensure_ascii=False))
8.3.3 实作研究
8.3.3.1 直觉与前提
可重现计算应留下足够证据,让他人重建模型并审查每个数值。自动化能帮助收集证据,也可能从失败作业中提取早期 SCF 能量而制造虚假信心。本例提供只读 Python 提取器,只报告观察,不自动认证科学有效性。它保留全部 SCF 和频率记录,不偷偷替用户选择一个值。前提是已有日志与 Python 3,并逐项核对原文。
8.3.3.2 原创只读提取脚本
参见上方输入块 1。
替换为实际文件名运行;脚本仅读取日志,并通过重定向写 JSON。
8.3.3.3 操作步骤
归档输入、完整日志、最终坐标、允许保留的检查点、调度输出和方法记录。 运行提取器,按行号人工核对至少一个能量与一个频率。 用已知不完整日志测试,确认数值出现不等于自动成功。 对 Link1 或拼接日志,先分段再选最终量,并核对预期任务数。 为每个报告量保存值、单位、作业标识、来源行、结构来源与验证状态。 日志变化后重新解析并比较哈希,防止旧摘要与新原文混用。
8.3.3.4 解读 核查与局限
任意合并日志中的负频总数不等于一个结构的鞍点方向数,因为日志可能含多个几何、同位素分析或重复作业。该脚本故意不提取后 HF 总能量、TD 根、热修正、溶剂项或原子映射,这些都需要理解任务语义。哈希只能检测文件变化,不能证明化学正确。公开归档前要保护商业程序与许可证,记录版本和基组来源而非重分发受限软件,并检查日志中的用户名或路径。
练习。 增加作业分段和预期任务字段,为“优化成功但频率失败”与“两段均成功”分别写测试。