发布于: 2025-1-18最后更新: 2025-1-18字数 1791阅读时长 5 分钟

type
status
date
slug
summary
tags
category
icon
password
Property
Jan 18, 2025 08:34 AM
URL
page icon
Notion AI 总结: 本文主要介绍了如何使用 Notion 来管理计算化学数据,解决了传统数据管理方式的几个痛点:
  • 手动复制粘贴数据到 Excel 费时费力且容易出错
  • 长期积累的数据难以查询和追溯
  • 缺乏对计算任务的整体把控
文章提出通过 Notion API 将计算数据自动保存到数据库的解决方案,具有以下优势:
  • 自动化数据提取和保存,避免手动操作
  • 方便数据查询和备份
  • 可导出为 Excel 进行进一步分析
  • 结合 Notion AI 实现智能数据检索
文章还详细列出了可提取的数据类型,包括:基本系统信息、原子和分子结构、能量和热力学数据、电子结构和性质、以及光谱和跃迁数据等。
 
💡
说明: 系统:Ubuntu 22.04 CPU:AMD EPYC 7k62 声明:文章由 ChatGPT+Claude+Notion AI 辅助完成

0. 说明

我们先来看这样的一个场景:
 
假设我们用 Gaussian 这个计算化学软件来运行某个任务,计算完成后,我们需要对输出文件进行数据的提取,然后保存分析。
 
问题在于,如果运行了很多任务,那么短时间内你可能还记得数据的含义,但时间一长,你可能就不记得当时做了什么计算、为什么要做这些计算。而且这些数据后期也不好查询。
有些时候我们需要对计算任务有个整体把控,比如知道多少个原子的分子进行什么任务需要多长时间,内存消耗是多少,这样心里才有底。
 
原则上,我们可以手动复制粘贴到 Excel 进行数据保存和分析,这是个不错的方法。但问题在于手动复制粘贴太麻烦了,一旦任务多起来就很容易出错,也很耗时间。
 
现在我们有个更好的解决方案:
通过 Notion API 把计算数据自动保存到 Notion 数据库里。这样不仅省去了手动复制粘贴的麻烦,数据的备份和查找也变得特别方便。
比如我们想查之前某个分子的计算结果,或者想看看不同大小的分子计算耗时情况,在Notion里搜索一下就能找到。需要的时候还能直接导出成 Excel ,这样管理计算数据就轻松多了。
现在 Notion AI(需要氪金每个月 5 美元) 集成了 RAG 技术,可以直接问 ai 搜到已经计算的数据,如图
notion image
 
 
目前是一个比较粗糙的版本,很多我自己想搞的功能,我都还没放上去,只能一点点开发。
 
为了方便数据提取,目前是会提取下面的所有的数据
 
1. 基本系统信息
关键词
关键词说明
Data type
关键词链接
charge
系统的净电荷
integer
mult
系统的多重度
integer
natom
原子数
integer
nbasis
基函数数
integer
nmo
分子轨道数
integer
2. 原子和分子结构
关键词
关键词说明
Data type
关键词链接
aonames
原子轨道名称
list of strings
atombasis
每个原子上的原子轨道索引
list of lists
atomcoords
原子坐标
array of rank 3
atommasses
原子质量
array of rank 1
atomnos
原子序数
array of rank 1
coreelectrons
原子赝势中的核心电子数
array of rank 1
fonames
片段轨道名称
list of strings
fragnames
片段名称
list of strings
frags
片段中原子的索引
list of lists
gbasis
高斯基函数的系数和指数
PyQuante format
3. 能量和热力学
关键词
关键词说明
Data type
关键词链接
ccenergies
带耦合簇校正的分子能量
array of rank 2
dispersionenergies
色散能量校正
array of rank 1
enthalpy
电子和热焓的总和
float
entropy
particle*kelvin
freeenergy
电子和热自由能的总和
float
mpenergies
带Møller-Plesset校正的分子电子能量
array of rank 2
pressure
用于热化学的压力
float
scfenergies
SCF(Hartree-Fock, DFT)后的分子电子能量
array of rank 1
temperature
用于热化学的温度
float
zpve
零点振动能校正
float
4. 电子结构和性质
关键词
关键词说明
Data type
关键词链接
aooverlaps
原子轨道重叠矩阵
array of rank 2
atomcharges
原子部分电荷
dict of arrays of rank 1
atomspins
原子自旋密度
dict of arrays of rank 1
fooverlaps
片段轨道重叠矩阵
array of rank 2
homos
最高占据分子轨道(HOMO)的索引
array of rank 1
mocoeffs
分子轨道系数
list of arrays of rank 2
moenergies
分子轨道能量
list of arrays of rank 1
moments
分子多极矩
list of arrays[]
mosyms
轨道对称性
list of lists
nocoeffs
自然轨道系数
array of rank 2
nooccnos
自然轨道占据数
array of rank 1
nsocoeffs
自然自旋轨道系数
list of array of rank 2
nsooccnos
自然自旋轨道占据数
list of array of rank 1
5. 光谱和跃迁
关键词
关键词说明
Data type
关键词链接
etenergies
电子跃迁能量
array of rank 1
etoscs
电子跃迁的振子强度
array of rank 1
etdips
电子跃迁的电跃迁偶极矩
array of rank 2
etveldips
电子跃迁的速度规电跃迁偶极矩
array of rank 2
etmagdips
电子跃迁的磁跃迁偶极矩
array of rank 2
etrotats
电子跃迁的旋转强度
array of rank 1
etsecs
电子跃迁的单激发组态
list of lists
etsyms
电子跃迁的对称性
list of string
nmrtensors
核磁共振化学屏蔽张量
dict of dicts of array of rank 2
nmrcouplingtensors
核磁共振自旋-自旋耦合张量
dict of dicts of array of rank 2
polarizabilities
(偶极)极化率,静态或动态
list of arrays of rank 2
transprop
所有吸收和发射光谱(字典 {名称: etoscs, etenergies})
etenergies
vibanharms
振动非谐常数
array of rank 2
vibdisps
笛卡尔位移矢量
array of rank 3
vibfreqs
振动频率
array of rank 1
vibfconsts
振动的力常数
array of rank 1
vibirs
红外强度
array of rank 1
vibramans
拉曼活性
array of rank 1
vibrmasses
振动的约化质量
array of rank 1
vibsyms
振动的对称性
list of strings
6. 优化和动力学
关键词
关键词说明
Data type
关键词链接
geotargets
几何优化收敛的目标
array of rank 1
geovalues
几何优化收敛的当前值
array of rank 1
grads
几何优化中力(梯度)的当前值
array of rank 3
hessian
力常数矩阵的元素
array of rank 1
optdone
标记优化是否已收敛
Boolean
optstatus
每组原子坐标的优化状态
array of rank 1
scancoords
每个扫描步骤的几何构型
array of rank 3
scanenergies
势能面的能量
list
scannames
扫描变量的名称
list of strings
scanparm
势能面参数的值
list of tuples
scftargets
SCF收敛的目标
array of rank 2
scfvalues
SCF收敛的当前值
list of arrays of rank 2
time
分子动力学和其他轨迹中的时间
array of rank 1
 
整个项目的文件说明如下,这个是早期版本,后面会修改
文件名
描述
环境变量部分
.env
包含 Notion API 的 token 和 DataBase 的 id
cclib 包提取数据部分
cclib_data.py
cclib数据处理
basic_info.py
1. 基本信息功能
get_electronic_structure_and_properties.py
2. 获取电子结构和性质
get_energies_and_thermodynamics.py
3. 获取能量和热力学数据
get_optimization_and_dynamics.py
4. 获取优化和动力学数据
get_spectra_and_transitions.py
5. 获取光谱和跃迁数据
atom_structure.py
6. 原子结构相关功能
format_calc.py
格式化计算结果(废弃功能)
get_data_from_log.py
从cclib 上面的提取部分获取数据导出为 md 文件
发送 Notion 部分
notion_begin_status.py
Notion初始状态处理
notion_update_status.py
Notion状态更新
create_page.py
创建页面功能
add_block.py
添加块功能
add_block_section1.py
废弃功能
数据转换部分
md2notion.py
发送 md 内容到 Notion
目前实现的效果:
 
notion image
 

1. 准备工作

1.1 Notion API 的获取

到这个网站
新建一个 integrations
notion image
然后
notion image
 
配置相关的设置
notion image
 
然后按照我下面的操作
notion image
会得到类似于这种 :ntn_3068615*****qYJnVTX0vd18gkUZOCTEvDcuU1KG
保存这个 api token 后面我们要用
 

1.2 复制数据库 id

打开我这个链接
notion image
 
保存数据库后,然后获取database key
notion image
notion image
 
然后得到下面 database id
notion image
记住这个 database id,后面要用

1.3 数据库链接 api

然后还需要链接我们 1.1 中建立的 integrations
notion image
上面图中 中的名字是 1.1 步骤中的这个地方名字,下面的
notion image
 

1.4 服务器设置

首先确认你的服务器的 Python 版本是 Python 3.7 以上
notion image
 
安装 cclib Python 包

1.5 SLUM 安装

可以看我这个博客

3. 运行任务

3.1 移动文件到服务器

将这个压缩文件移动到服务器,然后解压,放到服务器的某个文件夹里面,对于我而言,我是放在我的这个下面
/home/wxyhgk/Software/Calc2Notion
 
然后你需要修改 .env 文件里面内容,如下
notion image
NOTION_TOKEN 部分是我们在 1.1 Notion API 的获取 中得到的
NOTION_DATABASE_ID 部分是我们在 1.2 复制数据库 id 中的到的
 

3.2 任务运行

在一个有 gjf 文件的下面新建一个脚本 calc2notion.sh

#!/bin/bash # === slurm 配置 === # 任务名称 #SBATCH --job-name=g16-2 # 调用一个节点 #SBATCH --nodes=1 # 调用 48 核心 #SBATCH -n 48 # 调用 batch 这个区域的机器 #SBATCH -p batch # 邮件通知 #SBATCH --mail-user=你的邮箱 # All 代表错误和正确都通知 #SBATCH --mail-type=ALL # === Gaussian 配置 === export g16root=$HOME/Software export GAUSS_SCRDIR=$g16root/g16/scratch source $g16root/g16/bsd/g16.profile export PGI_FASTMATH_CPU=sandybridge SCRIPT_PATH=" 修改成3.1 步骤中的文件的路径" # === 变量部分 === # slurm jodid 序号 job_id=$SLURM_JOB_ID # 当前文件夹路径 folder_name="$PWD" # === 创建 Notion 页面,表示任务开始 === page_id=$(python3 "${SCRIPT_PATH}/notion_begin_status.py" "Job-$job_id" "$folder_name") if [ -z "$page_id" ]; then echo "创建 Notion 页面失败" exit 1 fi # === 封装核心任务 === run_g16_and_send_to_notion() { task_name="$1" mdFile="${task_name%.gjf}.md" commands_string="$2" # 执行命令 eval "$commands_string" # 使用 eval 执行传入的命令串 # 提取 log 文件数据到 .md 文件 python3 "${SCRIPT_PATH}/get_data_from_log.py" "${task_name%.gjf}.log" > ${mdFile} # 发送 md 文件到 Notion 页面的子页面中 python3 "${SCRIPT_PATH}/md2notion.py" "${mdFile}" ${page_id} --title "${task_name}" } # === 第一次任务 === run_g16_and_send_to_notion "test1.gjf" " g16 test1.gjf formchk test1.chk cp test1.chk test11.chk " # === 第二次任务 === run_g16_and_send_to_notion "test2.gjf" " g16 test2.gjf " # 后续复制# === 第二次任务 ===部分即可,但是"test1.gjf" 和 g16 test1.gjf 中的 test1.gjf 必须一致 # === 发送计算完状态给 Notion === python3 "${SCRIPT_PATH}/notion_update_status.py" "$page_id" "计算完"

 
上面的 绿色部分红色部分 是需要你修改的,修改好后,后面用
就行了
 

4.目前存在的问题以及后续计划

4.1 存在的问题

  • 服务器上取消 SLURM 的任务,那么 Notion 这边不会更新
  • 目前的输出过于暴力,美观性不太行
  • 目前仅仅支持 Gaussian 的计算和数据处理
  • 数据库目前展示的内容过少

4.2 后续开发计划

  • 利用 Notion webhook 功能,实现可以取消 SLURM 任务的功能
  • 增加更多脚本,让计算支持 ORCA/GAMESS-US 等软件
  • 增加 ChatGPT 等工具,解析输入文件等
此外为了本地数据保存,后面会考虑使用 思源笔记,可以搭建在自己的服务器上。
 

Loading...
示例文章

示例文章

这是示例的文章摘要,摘要内容可被用做搜索,预览。文章列表默认展示概要;若要在列表直接展示文章内容,可在blog.config.js中配置。


VBA 基础: 对象

VBA 基础: 对象


公告
公告
博客重大更新,更换为matery主题,阅读体验更加好了。
和博主联系
notion image