计算化学公社

 找回密码 Forget password
 注册 Register
Views: 1301|回复 Reply: 0
打印 Print 上一主题 Last thread 下一主题 Next thread

[综合交流] 从混沌到有序:用 Notion 管理计算化学数据的新思路

[复制链接 Copy URL]

227

帖子

6

威望

1712

eV
积分
2059

Level 5 (御坂)

本帖最后由 wxyhgk 于 2025-1-18 16:57 编辑




说明:
系统:Ubuntu 22.04
CPU:AMD EPYC 7k62
声明:文章由 ChatGPT+Claude+Notion AI 辅助完成



0. 说明

我们先来看这样的一个场景:

假设我们用 Gaussian 这个计算化学软件来运行某个任务,计算完成后,我们需要对输出文件进行数据的提取,然后保存分析。

问题在于,如果运行了很多任务,那么短时间内你可能还记得数据的含义,但时间一长,你可能就不记得当时做了什么计算、为什么要做这些计算。而且这些数据后期也不好查询。

有些时候我们需要对计算任务有个整体把控,比如知道多少个原子的分子进行什么任务需要多长时间,内存消耗是多少,这样心里才有底。

原则上,我们可以手动复制粘贴到 Excel 进行数据保存和分析,这是个不错的方法。但问题在于手动复制粘贴太麻烦了,一旦任务多起来就很容易出错,也很耗时间。

现在我们有个更好的解决方案:

通过 Notion API 把计算数据自动保存到 Notion 数据库里。这样不仅省去了手动复制粘贴的麻烦,数据的备份和查找也变得特别方便。

比如我们想查之前某个分子的计算结果,或者想看看不同大小的分子计算耗时情况,在Notion里搜索一下就能找到。需要的时候还能直接导出成 Excel ,这样管理计算数据就轻松多了。

现在 Notion AI(需要氪金每个月 5 美元) 集成了 RAG 技术,可以直接问 ai 搜到已经计算的数据,如图



目前是一个比较粗糙的版本,很多我自己想搞的功能,我都还没放上去,只能一点点开发。

为了方便数据提取,目前是会提取下面的所有的数据


整个项目的文件说明如下,这个是早期版本,后面会修改


文件名描述
环境变量部分

.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

目前实现的效果:

数据库会保存当前计算状态、计算文件夹位置、计算开始日期,以及每个计算任务及其子任务的开始时间和数据提取结果


1. 准备工作

1.1 Notion API 的获取

到这个网站

https://www.notion.so/profile/integrations

新建一个 integrations


然后



配置相关的设置






然后按照我下面的操作




会得到类似于这种  :ntn_3068615*****qYJnVTX0vd18gkUZOCTEvDcuU1KG

保存这个 api token 后面我们要用

1.2 复制数据库 id

打开我这个链接

https://www.notion.so/Notion-API ... fa4e7ba168be?pvs=21



保存数据库后,然后获取database key




然后得到下面 database id



记住这个 database id,后面要用

1.3 数据库链接 api

然后还需要链接我们 1.1 中建立的 integrations



上面图中 中的名字是 1.1 步骤中的这个地方名字,下面的



1.4 服务器设置

首先确认你的服务器的 Python 版本是 Python 3.7 以上

  1. python3 -V
复制代码




安装 cclib Python 包
  1. pip3 install cclib
复制代码



1.5 SLUM 安装

可以看我这个博客

https://wxyhgk.com/article/ubuntu-slurm

3. 运行任务

3.1 移动文件到服务器
文件下载
https://pan.wxyhgk.com/d/local/tmp/Calc2Noiton.7z


Calc2Noiton.7z (8.47 KB, 下载次数 Times of downloads: 6)


将这个压缩文件移动到服务器,然后解压,放到服务器的某个文件夹里面,对于我而言,我是放在我的这个下面

`/home/wxyhgk/Software/Calc2Notion`

然后你需要修改 `.env` 文件里面内容,如下



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" "计算完"




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

  1. sbatch calc2notion.sh
复制代码



就行了

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

4.1 存在的问题

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


4.2 后续开发计划

  • - 利用 Notion webhook 功能,实现可以取消 SLURM 任务的功能
  • - 优化输出的结果,搭建 html 的前端页面

demo 地址 https://calc.wxyhgk.com/job-2/demo4.html



  • - 增加更多脚本,让计算支持 ORCA/GAMESS-US 等软件
  • - 增加 ChatGPT 等工具,解析输入文件等


此外为了本地数据保存,后面会考虑使用 思源笔记,可以搭建在自己的服务器上。



可达到我博客看 https://wxyhgk.com/article/calc2Notion 排版更好


评分 Rate

参与人数
Participants 9
威望 +1 eV +34 收起 理由
Reason
TretopL + 5 GJ!
wuil69 + 2
taciturn__ + 5 好物!
PLwang + 2 牛!
sobereva + 1
zsu007 + 5 谢谢分享
pikachuupup + 5 好物!
2877321934 + 5 GJ!
wal + 5 GJ!

查看全部评分 View all ratings

本版积分规则 Credits rule

手机版 Mobile version|北京科音自然科学研究中心 Beijing Kein Research Center for Natural Sciences|京公网安备 11010502035419号|计算化学公社 — 北京科音旗下高水平计算化学交流论坛 ( 京ICP备14038949号-1 )|网站地图

GMT+8, 2025-8-13 00:13 , Processed in 0.203622 second(s), 27 queries , Gzip On.

快速回复 返回顶部 返回列表 Return to list