<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:atom="http://www.w3.org/2005/Atom"
>
<channel>
<title><![CDATA[叫个啥名字的 Blog]]></title> 
<atom:link href="https://www.wangsy.fun/rss.php" rel="self" type="application/rss+xml" />
<description><![CDATA[Welcome to wangsy's Blog]]></description>
<link>https://www.wangsy.fun/</link>
<language>zh-cn</language>
<generator>emlog</generator>

<item>
    <title>qchem_toolkit 使用手册</title>
    <link>https://www.wangsy.fun/post/86</link>
    <description><![CDATA[<h1>qchem_toolkit 使用手册</h1>
<p><code>qchem_toolkit.py</code> 是一个专为 Q-Chem 批量 X-Ray 计算任务设计的后处理工具箱。它集成了状态监控、电离能（IP）计算、XAS 能量校准（Shift）以及数据自动化归档功能。</p>
<h2>1. 目录结构规范</h2>
<p>脚本基于数字命名的原子序号目录进行批量识别，请保持以下结构：</p>
<pre><code class="language-text">工作目录/
├── 1/                   # 原子序号文件夹
│   ├── GS/              # 基态输出 (1GS.out)
│   ├── LUMO/            # LUMO态输出 (1LUMO.out)
│   ├── FCH/             # 完全芯孔输出 (1FCH.out)
│   └── TD_XAS/          # TDDFT 输出 (1TD_XAS.out)
├── 2/
├── 3/
└── ...</code></pre>
<h2>2. 功能指令说明</h2>
<h3>2.1 check (任务状态监控)</h3>
<p>自动遍历指定类型的 <code>.out</code> 日志，提取能量、收敛步数及状态。</p>
<ul>
<li><strong>全量检查</strong>（默认遍历 GS, FCH, FCH_R, LUMO, TD_XAS, Z+1）：
<pre><code class="language-bash">qchem_toolkit.py check</code></pre></li>
<li><strong>指定检查</strong>：
<pre><code class="language-bash">qchem_toolkit.py check GS</code></pre></li>
</ul>
<h3>2.2 ip (垂直电离能计算)</h3>
<p>基于 $\Delta$SCF 方法计算电离能。</p>
<ul>
<li><strong>计算逻辑</strong>：<code>IP = (Energy_FCH - Energy_GS) * 27.2114 + Shift</code></li>
<li><strong>用法示例</strong>：
<pre><code class="language-bash">qchem_toolkit.py ip           # 默认平移量为 0
qchem_toolkit.py ip -s 1.2    # 结果统一加上 1.2 eV 偏移</code></pre></li>
<li><strong>输出</strong>：生成 <code>IP_ENERGY_&lt;shift&gt;</code> 文件，包含基态、芯孔态能量及最终 IP。</li>
</ul>
<h3>2.3 shift (光谱能量校准)</h3>
<p>自动抓取各类 XAS 计算的首个吸收峰，并以 $\Delta$KS（LUMO - GS）为绝对基准计算能量校正值。</p>
<ul>
<li><strong>执行方式</strong>：
<pre><code class="language-bash">qchem_toolkit.py shift</code></pre></li>
<li><strong>输出</strong>：生成 <code>ENERGY_XASshift</code> 矩阵表，汇总所有方法（FCH, TD_XAS等）的校准偏移量。</li>
</ul>
<h3>2.4 collect (数据提取与自动化平移)</h3>
<p>提取各原子目录下的光谱原始数据，自动执行<strong>去表头</strong>处理，并应用 <code>shift</code> 指令算出的偏移量。</p>
<ul>
<li><strong>全量收集</strong>（自动识别并提取所有包含光谱数据的目录）：
<pre><code class="language-bash">qchem_toolkit.py collect</code></pre></li>
<li><strong>指定类型收集</strong>（仅提取并处理指定计算类型的光谱数据）：
<pre><code class="language-bash">qchem_toolkit.py collect TD_XAS
qchem_toolkit.py collect FCH</code></pre></li>
<li><strong>处理结果</strong>：
<ol>
<li>数据统一归档至 <code>XASDATA/</code> 目录下（内部按计算类型分子目录）。</li>
<li><code>*.XAS</code>：去表头后的原始光谱纯数据文件。</li>
<li><code>*.shift.XAS</code>：<strong>自动校准后</strong>的光谱副本。该文件的横坐标（能量轴）已应用 Shift 值完成平移，可直接导入 Origin 等软件进行绘图比对。</li>
</ol></li>
</ul>]]></description>
    <pubDate>Fri, 10 Apr 2026 03:45:37 +0800</pubDate>
    <dc:creator>wangsy</dc:creator>
    <guid>https://www.wangsy.fun/post/86</guid>
</item>
<item>
    <title>Q-Chem软件计算XAS和XPS步骤</title>
    <link>https://www.wangsy.fun/post/85</link>
    <description><![CDATA[<p>[该文章已设置加密]</p>]]></description>
    <pubDate>Thu, 02 Apr 2026 23:01:57 +0800</pubDate>
    <dc:creator>zhangjr</dc:creator>
    <guid>https://www.wangsy.fun/post/85</guid>
</item>
<item>
    <title>X-Ray Spectrum Plotter 用户手册</title>
    <link>https://www.wangsy.fun/post/84</link>
    <description><![CDATA[<h1>X-Ray Spectrum Plotter 用户手册</h1>
<h2>1. 简介 (Introduction)</h2>
<p><strong>X-Ray Spectrum Plotter</strong> 是一个专为处理和可视化 X 射线光谱（如 XAS, NEXAFS 等）设计的 Python 工具。它能够读取原始计算数据（棒状图），对其进行不同线型的展宽（Broadening），并生成高质量的 <strong>2D 堆叠图</strong> 和 <strong>3D 演化图</strong>（热力图/曲面图）。</p>
<h3>主要功能</h3>
<ul>
<li><strong>双区间展宽</strong>: 支持将光谱分为两个能量区间，分别应用不同的展宽参数（HWHM）和函数（高斯/洛伦兹/Stieltjes）。</li>
<li><strong>自动化批处理</strong>: 自动扫描文件夹内的光谱文件，根据文件名自动归类。</li>
<li><strong>3D 可视化</strong>: 支持生成随条件（如温度、时间、距离）变化的 3D 等高线图或曲面图。</li>
<li><strong>高度可定制</strong>: 支持自定义颜色、字体、刻度方向、标签偏移及输出分辨率（DPI）。</li>
<li><strong>实验谱对比</strong>: 支持将实验数据与计算光谱叠加对比。</li>
</ul>
<hr />
<h2>2. 环境要求与安装 (Installation)</h2>
<p><a href="https://www.wangsy.fun/content/uploadfile/202601/02ae1768997977.pdf" title="安装图文版本"><strong>这一部分不想看文字，可以点击看图文版本</strong></a></p>
<p>本程序依赖 <strong>Anaconda3</strong> 环境运行。请严格按照以下步骤完成环境配置和软件安装。</p>
<h3>2.1 第一步：下载并安装 Anaconda3</h3>
<p>本程序使用 Anaconda3 来管理 Python 环境，省去配置依赖库的麻烦。</p>
<ol>
<li>
<p><strong>下载安装包</strong>:</p>
<ul>
<li>访问清华大学开源软件镜像站下载最新版 Anaconda3 (64-bit)。</li>
<li><strong>下载地址</strong>: <code>https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/</code></li>
<li><strong>推荐版本</strong>: 选择 Windows x86_64 版本（如 <code>Anaconda3-2024.10-1-Windows-x86_64.exe</code>）。</li>
</ul>
</li>
<li>
<p><strong>安装向导设置</strong>:</p>
<ul>
<li>运行安装包，点击 <strong>Next</strong> 直到出现 <strong>Select Installation Type</strong>。</li>
<li><strong>Install for</strong>: 选择 <strong>Just Me (recommended)</strong>。</li>
<li><strong>Destination Folder</strong>: 建议使用默认路径或简单的自定义路径（如 <code>C:\Software\anaconda3</code>），请记住此路径，后续配置环境变量需要用到。</li>
<li><strong>Advanced Installation Options (高级选项)</strong>:</li>
<li>[x] <strong>Add Anaconda3 to my PATH...</strong>: <strong>勾选</strong> (推荐)。</li>
<li>[x] <strong>Register Anaconda3 as my default Python 3.12</strong>: <strong>勾选</strong> (推荐)。</li>
<li>[x] <strong>Clear the package cache upon completion</strong>: <strong>勾选</strong> (推荐，节省空间)。</li>
</ul>
</li>
</ol>
<ul>
<li>安装完成后，<strong>取消勾选</strong> &quot;Launch Anaconda Navigator&quot; 和 &quot;Getting Started&quot;，点击 <strong>Finish</strong>。</li>
</ul>
<h3>2.2 第二步：配置环境变量 (关键步骤)</h3>
<p>安装完成后，必须手动将 Anaconda 的路径添加到系统环境变量中，否则无法在终端直接运行命令。</p>
<ol>
<li>
<p><strong>打开环境变量设置</strong>:</p>
<ul>
<li>按键盘 <code>Win</code> 键，输入“<strong>高级</strong>”，选择 <strong>查看高级系统设置</strong>。</li>
<li>在弹出的“系统属性”窗口中，点击右下角的 <strong>环境变量(N)...</strong>。</li>
</ul>
</li>
<li>
<p><strong>编辑 Path 变量</strong>:</p>
<ul>
<li>在 <strong>系统变量(S)</strong> (或用户变量) 区域中，找到并选中 <strong>Path</strong>，点击 <strong>编辑(E)...</strong>。</li>
</ul>
</li>
<li>
<p><strong>添加路径</strong>:</p>
<ul>
<li>如果不存在如下环境，需要点击 <strong>新建(N)</strong>，依次添加以下 5 条路径（假设安装路径为 <code>C:\Software\anaconda3</code>，如果您的安装路径不同，请相应修改盘符和文件夹名）：</li>
</ul>
</li>
<li>
<p><code>C:\Software\anaconda3</code></p>
</li>
<li>
<p><code>C:\Software\anaconda3\Library\mingw-w64\bin</code></p>
</li>
<li>
<p><code>C:\Software\anaconda3\Library\usr\bin</code></p>
</li>
<li>
<p><code>C:\Software\anaconda3\Library\bin</code></p>
</li>
<li>
<p><code>C:\Software\anaconda3\Scripts</code></p>
</li>
</ol>
<ul>
<li><strong>重要</strong>: 添加完成后，使用右侧的 <strong>上移(U)</strong> 按钮，将这 5 条路径移动到列表的<strong>最顶部</strong>。</li>
<li>依次点击 <strong>确定</strong> 保存所有设置并关闭窗口。</li>
</ul>
<h3>2.3 第三步：安装 plotterxray 程序</h3>
<ol>
<li>
<p><strong>打开终端</strong>:</p>
<ul>
<li>进入存放 <code>plotterxray-5.7.2-py3-none-any.whl</code> 安装包的文件夹。</li>
<li>按住键盘 <strong>Shift</strong> 键，同时在文件夹空白处点击 <strong>鼠标右键</strong>。</li>
<li>在菜单中选择 <strong>在此处打开 Powershell 窗口</strong> (或 &quot;在终端中打开&quot;)。</li>
</ul>
</li>
<li>
<p><strong>执行安装命令</strong>:</p>
<ul>
<li>在终端窗口中输入以下命令并回车：<a href="https://www.wangsy.fun/?resource_alias=uIVci2R8HPsgXJ6y" title="plotterxray下载地址">plotterxray下载地址</a>
<pre><code class="language-bash">
pip install plotterxray-5.7.2-py3-none-any.whl</code></pre></li>
</ul>
</li>
</ol>
<pre><code>
* **注意**: 请确保命令中的文件名与实际文件完全一致（支持按 `Tab` 键自动补全文件名）。
* 当显示 `Successfully installed ...` 即表示安装成功。

### 2.4 程序更新与卸载

* **卸载旧版本**:
在终端输入 `pip uninstall plotterxray`，出现提示时输入 `Y` 确认。
* **安装新版本**:
卸载后，参照“第三步”，使用 `pip install XXXXX.whl` 安装新版安装包即可。

---

## 3. 快速开始 (Quick Start)

1. **准备数据**: 将你的光谱数据文件（例如 `.dat` 或 `.txt`，格式为两列：能量 强度）放入任意工作文件夹。
2. **准备配置**: 复制 `plot_detailed.ini` 到该文件夹并重命名为 `plot.ini`（或者使用简单版 `plot_simple.ini`）。
3. **运行程序**:
* 进入数据文件夹，**Shift + 右键** 打开终端。
* 运行以下命令：
```bash
plotterxray plot.ini
</code></pre>
<ol start="4">
<li><strong>查看结果</strong>: 程序运行结束后，会在当前目录下生成 <code>spectrum/</code> 文件夹，里面包含生成的 <code>.pdf</code> 和 <code>.jpg</code> 图片。</li>
</ol>
<hr />
<h2>4. 配置文件详解 (Configuration Guide)</h2>
<p>配置文件是控制绘图行为的核心。以下是各部分的详细说明。</p>
<h3>4.1 [auto] - 自动扫描设置</h3>
<p>用于控制程序是否自动读取当前目录下的文件。</p>
<table>
<thead>
<tr>
<th>参数</th>
<th>说明</th>
<th>示例值</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>mode</strong></td>
<td>开关。<code>True</code> 开启自动扫描；<code>False</code> 仅使用 <code>[spectra]</code> 中的手动列表。</td>
<td><code>True</code></td>
</tr>
<tr>
<td><strong>suffix</strong></td>
<td>待扫描文件的后缀名。</td>
<td><code>dat</code></td>
</tr>
<tr>
<td><strong>category</strong></td>
<td>分类策略。<code>auto</code> 会尝试从文件名提取数字作为类别；指定字符串则强制归类。</td>
<td><code>auto</code></td>
</tr>
<tr>
<td><strong>weight</strong></td>
<td>默认强度权重。</td>
<td><code>0.02</code></td>
</tr>
<tr>
<td><strong>shift</strong></td>
<td>默认能量平移量 (eV)。</td>
<td><code>-3.5</code></td>
</tr>
<tr>
<td><strong>color</strong></td>
<td>绘图颜色。<code>auto</code> 自动循环颜色；指定 hex 码 (如 <code>#FF0000</code>) 则固定颜色。</td>
<td><code>#808080</code></td>
</tr>
</tbody>
</table>
<blockquote>
<p><strong>注意</strong>: 自动模式下生成的列表会缓存到 <code>plot_list.cache</code> 文件中。如果新增了文件，请删除该缓存或在提示时选择重新生成。</p>
</blockquote>
<h3>4.2 [calculation] - 光谱计算与展宽核心</h3>
<p>程序支持将光谱分为两个区间进行不同程度的展宽（例如：Pre-edge 区间使用较小的展宽，EXAFS 区间使用较大的展宽）。</p>
<table>
<thead>
<tr>
<th>参数</th>
<th>格式 / 说明</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>hwhm1</strong></td>
<td><code>Start End HWHM</code> (例如 <code>500 541 0.8</code>)。<br></td>
</tr>
</tbody>
</table>
<p><br>定义区间1的起始能量、结束能量和半高宽。 |<br />
| <strong>hwhm2</strong> | <code>Start End HWHM</code> (例如 <code>541 600 1.5</code>)。<br></p>
<p><br>定义区间2。<strong>注意</strong>: 区间2的 Start 应等于区间1的 End。 |<br />
| <strong>function1</strong> | 区间1的展宽函数代码。 |<br />
| <strong>function2</strong> | 区间2的展宽函数代码。 |<br />
| <strong>num_points</strong> | 插值总点数，点数越多曲线越平滑。 |<br />
| <strong>intensity_factor</strong> | 全局强度缩放因子 (Y轴数值)。 |<br />
| <strong>keep_intermediate</strong> | 是否保存中间过程文本数据 (<code>T/F</code>)。 |</p>
<p><strong>支持的展宽函数代码</strong>:</p>
<ul>
<li><code>G</code>: 高斯函数 (Gaussian)</li>
<li><code>L</code>: 洛伦兹函数 (Lorentzian)</li>
<li><code>S</code>: Stieltjes 函数 (适用于连续态展宽)</li>
</ul>
<h3>4.3 [general] - 画布通用设置</h3>
<p>控制图片的外观、尺寸和坐标轴。</p>
<ul>
<li>
<p><strong>figure_width / figure_height</strong>: 图片尺寸（英寸）。</p>
</li>
<li>
<p><strong>dpi</strong>: 输出分辨率，出版级图像建议设为 300 或更高。</p>
</li>
<li>
<p><strong>font_family / font_size</strong>: 字体（如 <code>Arial</code>）和字号。</p>
</li>
<li>
<p><strong>xlim</strong>: X轴能量显示范围 (例如 <code>520 550</code>)。</p>
</li>
<li>
<p><strong>plot_order</strong>: 堆叠顺序。</p>
</li>
<li>
<p><code>bottom_up</code>: 类别从小到大，从下往上堆叠。</p>
</li>
<li>
<p><code>top_down</code>: 类别从小到大，从上往下堆叠。</p>
</li>
<li>
<p><strong>tick_direction</strong>: 刻度朝向 (<code>in</code> 或 <code>out</code>)。</p>
</li>
<li>
<p><strong>mirror_ticks</strong>: 是否在顶部和右侧显示镜像刻度。</p>
</li>
</ul>
<h3>4.4 [plot_2d] - 2D 堆叠图设置</h3>
<p>用于绘制传统的瀑布图/堆叠图。</p>
<ul>
<li><strong>show</strong>: 是否生成 2D 图。</li>
<li><strong>vertical_spacing</strong>: 各条光谱之间的垂直间距。设为 <code>auto</code> 则自动根据画幅计算，也可指定具体数值。</li>
<li><strong>show_total</strong>: 是否将所有类别的光谱加和，绘制一条总谱（黑色曲线）。</li>
<li><strong>show_sticks</strong>: 是否在曲线下方绘制原始的棒状图（Stick plot），用于分析具体跃迁贡献。</li>
<li><strong>info_label</strong>: 图内标注文字（如 &quot;O K-edge&quot;）。</li>
</ul>
<h3>4.5 [plot_3d] - 3D 演化图设置</h3>
<p>用于绘制随参数连续变化的光谱图（例如随温度变化）。</p>
<table>
<thead>
<tr>
<th>参数</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>show</strong></td>
<td>是否生成 3D 图。</td>
</tr>
<tr>
<td><strong>type</strong></td>
<td>图表类型：<code>contour</code> (等高线/热力图) 或 <code>surf</code> (3D 立体曲面)。</td>
</tr>
<tr>
<td><strong>cmap</strong></td>
<td>颜色映射表 (Colormap)，如 <code>seismic</code>, <code>jet</code>, <code>viridis</code>。</td>
</tr>
<tr>
<td><strong>sampling_y</strong></td>
<td>Y轴（类别轴）插值倍数。数值越大，类别间的过渡越平滑。</td>
</tr>
<tr>
<td><strong>sampling_x</strong></td>
<td>X轴（能量轴）插值倍数。</td>
</tr>
<tr>
<td><strong>colorbar_range</strong></td>
<td>颜色条数值范围。<code>auto</code> 或指定范围（如 <code>0 1.5</code>），用于统一不同图片的色阶。</td>
</tr>
<tr>
<td><strong>rasterize_content</strong></td>
<td><code>T</code>。是否对绘图内容进行栅格化（保留矢量文字）。<strong>强烈建议开启</strong>，否则 PDF 文件会非常巨大且卡顿。</td>
</tr>
</tbody>
</table>
<h3>4.6 [spectra] - 手动文件列表</h3>
<p>当 <code>[auto] mode = False</code> 时，程序读取此列表。</p>
<p><strong>格式</strong>:</p>
<pre><code class="language-ini">; 文件名      权重   类别   个体位移   颜色
file1.dat    1.0   CatA   0.0       red
file2.dat    1.0   CatB   0.2       blue
</code></pre>
<ul>
<li><strong>shift</strong>: 全局手动平移量，会叠加在个体位移上。</li>
</ul>
<h3>4.7 [exp_spectra] - 实验谱数据</h3>
<p>用于加载实验数据进行对比。</p>
<p><strong>格式</strong>:</p>
<pre><code class="language-ini">; 文件名      缩放   图例标签   颜色
exp_data.txt  0.5   Experiment black
</code></pre>
<hr />
<h2>5. 数据准备 (Data Preparation)</h2>
<h3>5.1 计算数据文件</h3>
<ul>
<li>
<p><strong>格式</strong>: 纯文本文件。</p>
</li>
<li>
<p><strong>内容</strong>: 至少包含两列数据。</p>
</li>
<li>
<p>第1列: 激发能量 (eV)</p>
</li>
<li>
<p>第2列: 振子强度 (Oscillator Strength) 或 强度</p>
</li>
<li>
<p><strong>注释</strong>: 支持 <code>#</code> 或 <code>!</code> 开头的注释行。</p>
</li>
</ul>
<h3>5.2 实验数据文件</h3>
<ul>
<li>同上，通常为两列 (Energy, Intensity)。程序会自动扣除 Y 轴的最小值（Baseline subtraction）。</li>
</ul>
<hr />
<h2>6. 高级用法与技巧 (Tips &amp; Tricks)</h2>
<h3>6.1 缓存机制 (Cache System)</h3>
<p>程序在 <code>[auto]</code> 模式下运行时，会生成 <code>plot_list.cache</code> 文件。</p>
<ul>
<li><strong>作用</strong>: 记录了扫描到的文件列表、分类和颜色。</li>
<li><strong>技巧</strong>: 你可以直接编辑 <code>plot_list.cache</code> 文件来微调某个特定文件的颜色或位移，而无需关闭自动模式。</li>
<li><strong>坑点</strong>: 如果你添加了新文件但程序没读到，请<strong>删除</strong>该缓存文件，程序下次运行时会重新扫描。</li>
</ul>
<h3>6.2 混合展宽策略 (Hybrid Broadening)</h3>
<p>在 XAS 模拟中，边前峰（Pre-edge）通常寿命较长，展宽较小；而边后（Post-edge）受连续态影响，展宽较大。</p>
<ul>
<li>推荐设置：</li>
<li><code>hwhm1</code> (边前): 使用 <strong>0.5 - 0.8 eV</strong>，配合 <strong>Gaussian (G)</strong> 函数。</li>
<li><code>hwhm2</code> (边后): 使用 <strong>1.0 - 2.0 eV</strong>，配合 <strong>Stieltjes (S)</strong> 或 <strong>Lorentzian (L)</strong> 函数。</li>
</ul>
<h3>6.3 3D图去噪</h3>
<p>如果 3D 热力图背景很脏，可以调整 <code>[plot_3d]</code> 中的 <code>background_threshold</code>。</p>
<ul>
<li>设置为 <code>0.001</code> 或更高，可以将低强度的底噪强制归零，使图面更干净。</li>
</ul>
<h3>6.4 批量修改颜色</h3>
<p>在 <code>[auto]</code> 模块中：</p>
<ul>
<li>设置 <code>color = auto</code>: 程序会自动给不同类别分配不同颜色。</li>
<li>设置 <code>color = #FF0000</code>: 所有线条都变为红色（适合用于生成单一色调的对比图）。</li>
</ul>
<hr />
<h2>7. 常见问题 (Troubleshooting)</h2>
<p><strong>Q: 运行后报错 <code>ValueError: Cannot read config file</code>?</strong><br />
A: 请检查 <code>.ini</code> 文件的编码。建议使用 UTF-8 编码保存。同时确保文件名输入正确。</p>
<p><strong>Q: 生成的 PDF 文件打开极慢？</strong><br />
A: 请确保 <code>[plot_3d]</code> 中的 <code>rasterize_content = T</code>。这会将复杂的纹理光栅化为像素图，而保留坐标轴文字为矢量，大大减小文件体积。</p>
<p><strong>Q: 为什么我的 3D 图看起来也是一条条的，不平滑？</strong><br />
A: 增加 <code>[plot_3d]</code> 中的 <code>sampling_y</code> 值（例如设为 20 或 50），程序会在不同文件的数据之间进行插值，使其看起来连续。</p>
<p><strong>Q: 如何让某些特定的线突出显示（例如加粗或变色）？</strong><br />
A: 建议先运行一次生成 <code>plot_list.cache</code>，然后手动编辑该缓存文件，修改特定行的颜色代码，最后再次运行程序。</p>
<hr />
<h2>8. 输出示例</h2>
<p>程序将在 <code>spectrum/</code> 目录下生成以下文件：</p>
<ol>
<li><code>spectrum_stack_2d.jpg / .pdf</code>: 2D 堆叠图。</li>
<li><code>spectrum_evolution_contour.jpg / .pdf</code>: 3D 热力图（如果启用）。</li>
<li><code>*_broad.txt</code>: 如果开启了 <code>keep_intermediate</code>，这里保存了展宽后的具体数据点。</li>
</ol>]]></description>
    <pubDate>Wed, 21 Jan 2026 20:15:31 +0800</pubDate>
    <dc:creator>wangsy</dc:creator>
    <guid>https://www.wangsy.fun/post/84</guid>
</item>
<item>
    <title>Inkscape 原位缩放工具-SVGScaler.py使用手册</title>
    <link>https://www.wangsy.fun/post/83</link>
    <description><![CDATA[<h1>Inkscape 原位缩放工具使用手册</h1>
<h2>1. 简介</h2>
<p>通常在 Inkscape 中，如果你全选多个对象进行缩放，它们会相对于整个选区的中心缩放，导致位置发生偏移。本工具通过 Python 脚本计算每个对象的几何中心，逐个应用缩放变换，从而实现<strong>“变大变小，位置不动”</strong>的效果。</p>
<p><strong>主要特性：</strong></p>
<ul>
<li><strong>支持多种对象：</strong> 路径 (Path)、矩形、圆形、普通文本、流式文本 (FlowRoot)、图片等。</li>
<li><strong>智能图层识别：</strong> 可指定处理特定图层（如只缩放 &quot;text&quot; 层）。</li>
<li><strong>灵活的缩放系数：</strong> 支持放大倍数和倒数缩小（如输入 -2 代表缩小到 1/2）。</li>
</ul>
<hr />
<h2>2. 环境准备</h2>
<ol>
<li><strong>安装 Python：</strong> 确保电脑上安装了 Python 3.x 版本。</li>
<li><strong>下载脚本：</strong> <a href="https://www.wangsy.fun/?resource_alias=6JFrGo00DM9wGZ9g" title="下载地址">下载地址</a></li>
</ol>
<hr />
<h2>3. Inkscape 文件准备流程 (重要)</h2>
<p>为了让脚本准确找到需要缩放的内容，建议在 Inkscape 中遵循以下操作规范：</p>
<h3>步骤 A：整理图层</h3>
<p>脚本默认处理名为 <code>text</code> 的图层。建议将需要调整大小的对象归类到一个专门的图层中。</p>
<ol>
<li>打开 Inkscape (<code>Ctrl+Shift+L</code> 打开图层面板)。</li>
<li>新建一个图层，命名为 <code>text</code> (或者其他你喜欢的名字，运行时需指定)。</li>
<li>选中需要缩放的对象，右键点击 -&gt; <strong>移动到图层</strong> -&gt; 选择 <code>text</code> 图层。</li>
</ol>
<h3>步骤 B：群组逻辑 (关键)</h3>
<p>脚本是<strong>逐个处理图层下的直接子对象</strong>的。</p>
<ul>
<li><strong>如果不群组：</strong> 图层里的每个独立元素（如每个字母、每根线条）都会以各自的中心单独缩放。</li>
<li><strong>如果群组 (<code>Ctrl+G</code>)：</strong> 脚本会将整个群组视为一个对象，以群组的几何中心进行整体缩放。</li>
</ul>
<blockquote>
<p><strong>场景举例：</strong><br />
如果你有一个“圆圈”和一个“数字”组成一个标号。</p>
<ul>
<li><strong>错误做法：</strong> 圆圈和数字分散在图层里。 -&gt; 结果：圆圈变大了，数字变大了，但它们可能会轻微错位。</li>
<li><strong>正确做法：</strong> 选中圆圈和数字，按下 <code>Ctrl+G</code> 编组。 -&gt; 结果：整个标号以整体中心原位放大。</li>
</ul>
</blockquote>
<h3>步骤 C：保存文件</h3>
<p>将文件保存为 <strong>Inkscape SVG</strong> 或 <strong>普通 SVG</strong> 格式（例如 <code>drawing.svg</code>）。</p>
<hr />
<h2>4. 脚本运行方法</h2>
<p>打开终端 (Command Prompt / Terminal)，进入脚本所在的目录。</p>
<h3>基本语法</h3>
<pre><code class="language-bash">python scale_svg.py [输入文件] [缩放系数] [输出文件(可选)] [参数]</code></pre>
<h3>参数详解</h3>
<table>
<thead>
<tr>
<th style="text-align: left;">参数位置/名称</th>
<th style="text-align: left;">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;"><strong>输入文件</strong></td>
<td style="text-align: left;">SVG 文件的完整路径 (例如 <code>input.svg</code>)。</td>
</tr>
<tr>
<td style="text-align: left;"><strong>缩放系数</strong></td>
<td style="text-align: left;"><strong>正数 (&gt;0):</strong> 直接放大倍数。如 <code>1.5</code> (放大1.5倍), <code>0.8</code> (缩小到80%)。<br><strong>负数 (&lt;0):</strong> 倒数缩小模式。如 <code>-2</code> 等同于 0.5 (缩小一半)，<code>-4</code> 等同于 0.25。</td>
</tr>
<tr>
<td style="text-align: left;"><strong>输出文件</strong></td>
<td style="text-align: left;">(可选) 处理后的保存路径。如果不填，默认保存为 <code>原文件名_系数.svg</code>。</td>
</tr>
<tr>
<td style="text-align: left;"><code>--layer</code></td>
<td style="text-align: left;">指定要处理的图层名称。默认为 <code>text</code>。</td>
</tr>
<tr>
<td style="text-align: left;"><code>-a</code> / <code>--all</code></td>
<td style="text-align: left;">全局模式。忽略图层名称，处理 SVG 根目录下的所有顶层群组。</td>
</tr>
</tbody>
</table>
<hr />
<h2>5. 使用案例</h2>
<h3>案例 1：将 &quot;text&quot; 图层中的内容放大 1.5 倍</h3>
<p>这是最常用的场景。假设文件名为 <code>map.svg</code>。</p>
<pre><code class="language-bash">python scale_svg.py map.svg 1.5</code></pre>
<p><em>结果：生成 <code>map_1.5.svg</code>，其中 text 图层的对象原位放大了 50%。</em></p>
<h3>案例 2：将 &quot;labels&quot; 图层的内容缩小一半</h3>
<p>使用了负数参数技巧（<code>-2</code> 表示 1/2）。指定了 <code>--layer</code> 参数。</p>
<pre><code class="language-bash">python scale_svg.py drawing.svg -2 --layer labels</code></pre>
<p><em>结果：生成 <code>drawing_-2.0.svg</code>，labels 图层的内容尺寸减半。</em></p>
<h3>案例 3：指定输出文件名</h3>
<pre><code class="language-bash">python scale_svg.py icon.svg 2.0 output_icon.svg</code></pre>
<p><em>结果：生成 <code>output_icon.svg</code>。</em></p>
<h3>案例 4：暴力处理所有图层</h3>
<p>如果你想把整个文件里的所有顶层对象都分别原位缩放（慎用，可能会打乱布局）。</p>
<pre><code class="language-bash">python scale_svg.py schematic.svg 0.9 --all</code></pre>
<hr />
<h2>6. 常见问题排错 (Troubleshooting)</h2>
<p><strong>Q1: 运行后提示 &quot;未找到可处理对象&quot;？</strong></p>
<ul>
<li><strong>检查图层名称：</strong> 确认 Inkscape 中的图层名称是否与命令行 <code>--layer</code> 参数一致（区分大小写，默认为 &quot;text&quot;）。</li>
<li><strong>检查图层结构：</strong> 对象必须直接位于该图层（组）下，不能深埋在多个嵌套的组里（脚本目前主要扫描图层的直接子节点）。</li>
</ul>
<p><strong>Q2: 缩放后，文字跑偏了？</strong></p>
<ul>
<li>脚本通过计算 Bounding Box (包围盒) 的中心来进行变换。如果文字对象的对齐方式或坐标原点比较特殊，可能会有轻微视觉偏差。通常情况下，将文字转换为路径 (<code>Path</code>) 再缩放是最稳妥的，但本脚本已针对 Text 做了优化，通常无需转换。</li>
</ul>
<p><strong>Q3: 原文件被覆盖了吗？</strong></p>
<ul>
<li>默认不会。脚本会生成新文件。如果你手动指定输出文件名为原文件名，脚本会询问 <code>是否覆盖? (y/N)</code>。</li>
</ul>
<p><strong>Q4: 支持 Inkscape 的流式文本 (FlowRoot) 吗？</strong></p>
<ul>
<li><strong>支持。</strong> 脚本包含了解析 <code>flowRegion</code> 的逻辑，可以正确计算流式文本框的中心并进行缩放。</li>
</ul>
<hr />
<h2>7. 原理简述 (供高级用户参考)</h2>
<p>该脚本的工作流程如下：</p>
<ol>
<li><strong>解析 XML：</strong> 使用 Python <code>xml.etree</code> 读取 SVG。</li>
<li><strong>定位图层：</strong> 查找带有 <code>inkscape:label="layer_name"</code> 属性的 <code>&lt;g&gt;</code> 标签。</li>
<li><strong>计算包围盒 (BBox)：</strong> 递归解析路径 (<code>d</code> 属性)、形状属性 (<code>x, y, width, height</code>) 以及变换矩阵 (<code>transform</code>)，计算出对象的几何中心 $(C_x, C_y)$。</li>
<li><strong>应用变换：</strong> 在对象现有的 <code>transform</code> 属性后追加矩阵运算：<br />
$$ \text{translate}(C_x, C_y) \cdot \text{scale}(S) \cdot \text{translate}(-C_x, -C_y) $$<br />
这确保了缩放是相对于对象自身中心进行的。</li>
</ol>]]></description>
    <pubDate>Mon, 19 Jan 2026 01:05:56 +0800</pubDate>
    <dc:creator>wangsy</dc:creator>
    <guid>https://www.wangsy.fun/post/83</guid>
</item>
<item>
    <title>Q-chem 安装指南 (Linux 集群)</title>
    <link>https://www.wangsy.fun/post/82</link>
    <description><![CDATA[<p>[该文章已设置加密]</p>]]></description>
    <pubDate>Tue, 16 Dec 2025 23:58:33 +0800</pubDate>
    <dc:creator>wangsy</dc:creator>
    <guid>https://www.wangsy.fun/post/82</guid>
</item>
<item>
    <title>用于自动提取芯轨道(分子和原子轨道)的程序</title>
    <link>https://www.wangsy.fun/post/81</link>
    <description><![CDATA[<h2><code>extract_orbital_composition.py</code> 程序使用说明</h2>
<p>本程序由wangsy于2025年11月19日完成。<br />
如有需要，请联系wang.sy@vip.163.com 。</p>
<h3>1. 简介 (Program Overview)</h3>
<p><code>extract_orbital_composition.py</code> 是一个用于量子化学计算的后处理工具。它旨在自动化地从<code>.fchk</code> (formatted checkpoint) 文件中提取指定原子在<strong>占据分子轨道</strong>中的成分百分比。</p>
<p>该脚本的核心功能是调用业界知名的波函数分析软件 <strong>Multiwfn</strong>，向其发送一系列自动化指令，然后解析其文本输出，最后将结果以清晰的表格或缓存文件的形式呈现给用户。</p>
<h4>关键特性</h4>
<ul>
<li><strong>自动化 Multiwfn 调用</strong>: 自动运行 Multiwfn 并执行轨道成分分析（菜单 <code>8 -&gt; 8 -&gt; 1 -&gt; -2</code>）。</li>
<li><strong>计算类型自动检测</strong>: 自动从 <code>.fchk</code> 文件中读取电子数和轨道信息，以判断计算是<strong>限制性</strong> (Restricted, RHF/ROHF) 还是<strong>非限制性</strong> (Unrestricted, UHF)。</li>
<li><strong>MOKIT 自动局域化</strong>: 当脚本检测到轨道高度离域时（即，目标原子的最高轨道贡献低于 95%），它能自动调用 <strong>MOKIT</strong> 工具包执行 Pipek-Mezey (PM) 轨道局域化，并使用局域化后的新 fchk 文件重新进行分析。</li>
<li><strong>灵活的输出</strong>:
<ol>
<li>默认在屏幕上打印格式化的表格。</li>
<li>可使用 <code>-o</code> 将表格保存到文件。</li>
<li>可使用 <code>-c</code> 生成用于 <code>qchem_xray.py</code> 脚本的专用缓存文件。</li>
</ol></li>
</ul>
<h4>⚠️ 重要：运行依赖</h4>
<p>在运行此脚本之前，您<strong>必须</strong>确保满足以下环境要求：</p>
<ol>
<li><strong>Multiwfn</strong>: <code>Multiwfn</code> 的可执行文件<strong>必须</strong>位于您系统的 <code>PATH</code> 环境变量中。脚本会通过在 shell 中执行 <code>Multiwfn</code> 命令来调用它。</li>
<li><strong>MOKIT (用于局域化)</strong>:
<ul>
<li>您必须有一个名为 <code>mokit-py39</code> 的 <code>conda</code> 环境。</li>
<li>此环境中必须已正确安装 <code>mokit</code> 库及其依赖项。</li>
<li>脚本通过 <code>conda run -n mokit-py39 ...</code> 命令来执行局域化相关的 Python 和 <code>fch2qchem</code> 指令。</li>
</ul></li>
</ol>
<hr />
<h3>2. 逻辑和流程 (Logic and Flow)</h3>
<p>该脚本的执行流程可以分为以下几个关键步骤：</p>
<ol>
<li><strong>参数解析</strong>: 脚本启动，读取用户提供的命令行参数（例如 <code>fchk_file</code>, <code>atom_number</code>, <code>threshold</code> 等）。</li>
<li><strong>环境检查</strong>: 脚本首先检查 <code>Multiwfn</code> 是否在 <code>PATH</code> 中。如果找不到，程序将报错并退出。</li>
<li><strong>文件初次分析 (Original FCHK)</strong>:
<ul>
<li>脚本读取 <code>.fchk</code> 文件，提取 Alpha 电子数 (<code>n_alpha</code>)、Beta 电子数 (<code>n_beta</code>) 和总基函数数 (<code>total_orbitals</code>)。</li>
<li>通过检查文件中是否存在 &quot;Beta MO coefficients&quot; 等关键词，判断是<strong>限制性</strong>还是<strong>非限制性</strong>计算。</li>
<li><strong>调用 Multiwfn</strong>: 脚本通过 <code>subprocess</code> 启动 <code>Multiwfn [fchk_file] -isilent</code> 进程。</li>
<li><strong>发送指令</strong>: 它向 Multiwfn 的标准输入 (stdin) 发送一系列命令，以分析<strong>所有占据轨道</strong> (RHF: <code>1</code> 到 <code>n_alpha</code>；UHF: <code>1</code> 到 <code>n_alpha</code> 以及 Beta 轨道 <code>1</code> 到 <code>n_beta</code>)。</li>
<li><strong>解析输出</strong>: 脚本捕获 Multiwfn 的标准输出 (stdout)，并使用正则表达式解析表格，提取所有贡献超过指定阈值 (<code>-t</code>，默认 40%) 的轨道信息（编号、能量、占据数、百分比等）。</li>
</ul></li>
<li><strong>离域化检查</strong>:
<ul>
<li>脚本检查上一步中找到的所有轨道的最大贡献值 (<code>max_comp</code>)。</li>
<li>如果 <code>0.0 &lt; max_comp &lt; 95.0%</code> (95% 为 <code>LOCALIZATION_TRIGGER_THRESHOLD</code>)，则认为轨道高度离域，触发局域化流程。</li>
</ul></li>
<li><strong>MOKIT 局域化工作流 (可选)</strong>:
<ul>
<li>如果触发了局域化（且用户未指定 <code>--no-localize</code>）：</li>
<li><strong>交互式询问</strong>: 脚本会暂停并询问用户是否执行 MOKIT 局域化（<code>y/n</code>）。（如果使用 <code>--force-localize</code> 则跳过询问）。</li>
<li><strong>执行局域化</strong>: 如果用户同意，脚本将：<br />
i.  生成一个临时的 Python 脚本，该脚本导入 <code>mokit</code> 库。<br />
ii. 调用 <code>conda run -n mokit-py39 python ...</code> 来执行 <code>standardize_fch</code> (标准化 fchk) 和 <code>loc</code> (PM 局域化)。<br />
iii. 这会生成一个新的 <code>*_std_LMO.fch</code> 文件。<br />
iv. 调用 <code>conda run -n mokit-py39 fch2qchem ...</code> 将新的 LMO fchk 转换为 Q-Chem <code>save</code> 目录。<br />
v.  将生成的 <code>*_std_LMO</code> 目录重命名为 <code>save</code>（如果 <code>save</code> 已存在，则备份为 <code>save.bak</code>）。</li>
</ul></li>
<li><strong>二次分析 (LMO FCHK)</strong>:
<ul>
<li>如果成功执行了局域化，脚本将使用新生成的 <code>*_std_LMO.fch</code> 文件<strong>重复步骤 3</strong>。</li>
<li>此时，分析的是局域化分子轨道 (LMO)。</li>
</ul></li>
<li><strong>结果输出</strong>:
<ul>
<li>脚本将<strong>最终</strong>的分析结果（来自 LMO fchk 或原始 fchk）进行格式化。</li>
<li><strong>标准模式</strong>: 打印一个详细的表格到屏幕（或用 <code>-o</code> 保存到文件）。</li>
<li><strong>缓存模式 (<code>-c</code>)</strong>: 生成一个 <code>.cache</code> 文件。
<ul>
<li><strong>标准</strong>: 2 列 (Alpha, Beta)。</li>
<li><strong>局域化后</strong>: 4 列 (LMO_Alpha, LMO_Beta, Orig_Alpha, Orig_Beta)，并包含特殊的页脚标记。</li>
</ul></li>
</ul></li>
</ol>
<hr />
<h3>3. 程序的运行完整示例</h3>
<p>假设我们有一个名为 <code>complex.fchk</code> 的非限制性 (UHF) 计算文件，我们关心的是 1 号原子（例如一个金属中心）的轨道贡献。</p>
<h4>示例 1: 基本用法（打印到屏幕）</h4>
<p><strong>命令</strong> (使用 10% 作为阈值):</p>
<pre><code class="language-bash">python extract_orbital_composition.py complex.fchk 1 -t 10</code></pre>
<p><strong>输出 (无局域化)</strong>:</p>
<p>如果轨道局域性良好（最高贡献 > 95%），脚本将直接打印分析结果。</p>
<pre><code>==========================================================================================
                                原子 1 的轨道组成分析
==========================================================================================
文件: complex.fchk
计算类型: 非限制性 (Unrestricted)
Composition阈值: 10.0%
(注: 仅显示占据轨道)
==========================================================================================
注: 非限制性计算有两套独立的Alpha和Beta空间轨道。
------------------------------------------------------------------------------------------

Alpha 轨道:
------------------------------------------------------------------------------------------
      序号 类型                能量(a.u.)    占据     组成(%)         布居
------------------------------------------------------------------------------------------
       105 Alpha              -0.2512   1.000      98.501   1.000000
       100 Alpha              -0.4500   1.000      85.123   1.000000
        95 Alpha              -0.7800   1.000      15.300   1.000000

Beta 轨道:
------------------------------------------------------------------------------------------
      序号 类型                能量(a.u.)    占据     组成(%)         布居
------------------------------------------------------------------------------------------
    104(204) Beta               -0.2300   1.000      97.110   1.000000
     99(199) Beta               -0.4300   1.000      82.000   1.000000
------------------------------------------------------------------------------------------
注: Beta轨道序号格式为 真实序号(Multiwfn内部编号)。
------------------------------------------------------------------------------------------</code></pre>
<hr />
<h4>示例 2: 交互式局域化</h4>
<p><strong>命令</strong> (使用默认 40% 阈值):</p>
<pre><code class="language-bash">python extract_orbital_composition.py complex.fchk 1</code></pre>
<p><strong>交互式提示</strong>:</p>
<p>假设脚本在第一次分析中发现最高贡献只有 85%（低于 95%）。</p>
<pre><code>处理非限制性体系 (Unrestricted)...
 → 扫描范围 (Alpha,Beta): 1-105,201-204

警告: 排序第一的轨道百分比 (85.12%) 低于 95.0%。
      这可能表明轨道高度离域。

是否运行 MOKIT (PM) 局域化工作流? (y/n):</code></pre>
<p><strong>用户输入 <code>y</code></strong>:</p>
<p>脚本将开始执行 MOKIT 工作流，并显示 MOKIT 的输出：</p>
<pre><code>y
信息: 用户选择执行局域化。

============================================================
开始 MOKIT 局域化工作流 (目标原子: 1)
============================================================
--- [1/3] 正在 MOKIT 环境中运行 Python 脚本 (_temp_mokit_localize_...py)...
--- 正在导入 MOKIT...
--- [MOKIT 1/2] 正在标准化 complex.fchk -&gt; complex_std.fch...
--- [MOKIT 2/2] 正在局域化 complex_std.fch (PM, 轨道 0-104)...
--- MOKIT Python 脚本执行完毕.
--- [2/3] 正在 MOKIT 环境中运行 fch2qchem (转换LMO fch为Q-Chem 'save' 目录)...
(fch2qchem output...)
--- [3/3] 正在重命名文件...
============================================================
局域化完成。生成新的fchk文件: complex_std_LMO.fch
============================================================

--- 正在分析局域化后的文件: complex_std_LMO.fch
处理非限制性体系 (Unrestricted)...
 → 扫描范围 (Alpha,Beta): 1-105,201-204</code></pre>
<p><strong>最终输出</strong>:</p>
<p>脚本现在打印的是对 <code>complex_std_LMO.fch</code> 文件的分析结果，轨道贡献现在应该更接近 100%。</p>
<pre><code>==========================================================================================
                                原子 1 的轨道组成分析
==========================================================================================
文件: complex_std_LMO.fch
计算类型: 非限制性 (Unrestricted)
...
Alpha 轨道:
...
       105 Alpha              -0.2512   1.000      99.850   1.000000
       100 Alpha              -0.4500   1.000      99.100   1.000000
...</code></pre>
<hr />
<h4>示例 3: 生成缓存文件（自动局域化）</h4>
<p><strong>命令</strong> (使用 <code>-c</code> 生成缓存，使用 <code>--force-localize</code> 避免交互式询问):</p>
<pre><code class="language-bash">python extract_orbital_composition.py complex.fchk 1 -c --force-localize</code></pre>
<p><strong>输出</strong>:</p>
<pre><code>...
(MOKIT 局域化流程输出)
...

轨道缓存文件已成功生成: /path/to/project/1GS_orbital.cache</code></pre>
<p><strong><code>1GS_orbital.cache</code> 文件内容</strong>:</p>
<p>由于执行了局域化，缓存文件将包含 4 列，并带有特殊的页脚。</p>
<pre><code>n_alpha=105       n_beta=104
105|99.85        104|99.11        105|85.12        104|82.00
100|99.10        99|82.00         100|82.00        99|15.30

# --------------------------------------------------
# 警告: 原始fchk文件轨道百分比 &lt; 95.0% (Max: 85.12%)
# LOCALIZED: LMO_A | LMO_B | ORIG_A | ORIG_B
# --------------------------------------------------</code></pre>
<hr />
<h3>4. 高级选项 (Advanced Options)</h3>
<p>以下是脚本支持的所有命令行参数的详细分类说明。</p>
<h4>核心参数</h4>
<ul>
<li><code>fchk_file</code>
<ul>
<li>必需。输入的 <code>.fchk</code> 文件路径。</li>
</ul></li>
<li><code>atom_number</code>
<ul>
<li>必需。要分析的目标原子的编号（从 1 开始）。</li>
</ul></li>
</ul>
<h4>阈值与输出</h4>
<ul>
<li><code>-t, --threshold THRESHOLD</code>
<ul>
<li>设置轨道组成贡献的百分比阈值。</li>
<li>示例: <code>-t 10</code> (只显示贡献 > 10% 的轨道)。</li>
<li>默认: <code>40.0</code></li>
</ul></li>
<li><code>-o, --output OUTPUT</code>
<ul>
<li>将标准输出的表格重定向到指定的文本文件。</li>
</ul></li>
</ul>
<h4>缓存模式 (qchem_xray.py)</h4>
<ul>
<li><code>-c, --cache</code>
<ul>
<li>激活缓存模式。不打印标准表格，而是生成一个 <code>qchem_xray.py</code> 兼容的缓存文件。</li>
<li>默认文件名: <code>[atom_number]GS_orbital.cache</code> (例如: <code>1GS_orbital.cache</code>)。</li>
</ul></li>
<li><code>--cache-name CACHE_NAME</code>
<ul>
<li>与 <code>-c</code> 配合使用，指定自定义的缓存文件名。</li>
</ul></li>
</ul>
<h4>MOKIT 局域化控制</h4>
<ul>
<li><code>--force-localize</code>
<ul>
<li>当检测到轨道离域时 (max comp \&lt; 95%)，自动执行 MOKIT 局域化，<strong>不</strong>进行交互式询问。</li>
<li>适用于在其他脚本中调用此程序。</li>
</ul></li>
<li><code>--no-localize</code>
<ul>
<li><strong>禁止</strong> MOKIT 局域化。即使检测到离域，也只使用原始 fchk 文件进行分析。</li>
</ul></li>
<li><code>--keep-temp-files</code>
<ul>
<li>保留 MOKIT 局域化过程中产生的中间文件（例如 <code>*_std.fch</code>, <code>*_std_LMO.in</code>）。</li>
<li>默认情况下，这些文件会被自动清理。此选项用于调试 MOKIT 流程。</li>
</ul></li>
</ul>
<h4>自旋控制 (Spin Control)</h4>
<ul>
<li><code>-a, --alpha-only</code>
<ul>
<li>仅分析和输出 Alpha 轨道。</li>
</ul></li>
<li><code>-b, --beta-only</code>
<ul>
<li>仅分析和输出 Beta 轨道。</li>
<li>(注: 这两个选项是互斥的)。</li>
</ul></li>
</ul>
<h4>调试 (Debugging)</h4>
<ul>
<li><code>-v, --verbose</code>
<ul>
<li>启用详细输出模式。</li>
<li>将显示操作系统信息、Multiwfn 路径、发送给 Multiwfn 的完整命令序列以及 MOKIT 调用的详细命令。</li>
<li>在排查错误时非常有用。</li>
</ul></li>
</ul>]]></description>
    <pubDate>Fri, 05 Dec 2025 14:47:00 +0800</pubDate>
    <dc:creator>wangsy</dc:creator>
    <guid>https://www.wangsy.fun/post/81</guid>
</item>
<item>
    <title>用于批量生成Q-Chem计算X-ray的程序</title>
    <link>https://www.wangsy.fun/post/80</link>
    <description><![CDATA[<h2>📜 <code>qchem_xray.py</code> 详细使用说明</h2>
<p>本程序由wangsy于2025年11月02日完成。<br />
如有需要，请联系wang.sy@vip.163.com 。</p>
<h3>1. 脚本概述</h3>
<p><code>qchem_xray.py</code> 是一个用于自动生成 Q-Chem 量子化学计算输入文件的 Python 脚本，专门针对 X 射线光谱 (XAS) 相关的计算。</p>
<p>该脚本的核心功能包括：</p>
<ul>
<li><strong>解析配置文件</strong>: 自动读取 <code>input.ini</code> 文件中的所有设置。</li>
<li><strong>读取结构</strong>: 从指定的 XYZ 文件（如 <code>pyridine.xyz</code>）中提取分子结构。</li>
<li><strong>生成输入文件</strong>: 根据用户指定的计算类型，自动生成 Q-Chem 输入文件 (<code>.in</code>)。</li>
<li><strong>目录管理</strong>: 为每个计算的原子和计算类型创建独立的目录结构 ( <code>1/GS/</code>, <code>1/FCH/</code>, <code>1/FCH_R/</code>,  <code>1/LUMO/</code>,<code>1/TD_XAS/</code>, <code>1/TD_XES/</code>,  <code>1/Z+1/</code>)。</li>
<li><strong>依赖管理</strong>: 自动处理激发态计算（FCH, FCH_R, LUMO, TD_XAS, TD_XES）对基态 (GS) 计算的依赖。</li>
<li><strong>轨道检测</strong>: 自动调用外部脚本 <code>extract_orbital_composition.py</code> 来分析 GS 计算的 <code>.fchk</code> 文件，确定芯轨道的位置，并将其缓存在 <code>[num]/GS/[num]GS_orbital.cache</code> 文件中。</li>
<li><strong>作业提交</strong>: (可选) 自动将生成的输入文件提交到计算队列 (通过 <code>[submit]</code>中的命令)。</li>
</ul>
<h3>2. 核心逻辑与工作流程</h3>
<h4>A. 配置文件 (<code>input.ini</code>)</h4>
<p>脚本的所有行为都由 <code>input.ini</code> 控制。它分为几个关键部分：</p>
<ul>
<li><code>[submit]</code>: 定义如何提交作业 (qsub 命令)。</li>
<li><code>[xyz]</code>: 定义结构文件名 (<code>filename</code>) 和每种计算类型的电荷/多重度。</li>
<li><code>[keys]</code>: 定义每种计算类型所需的 Q-Chem 关键字 (REM 变量)。</li>
<li><code>[excited]</code>: 定义要计算的原子 (<code>num</code>)、激发原子的基组 (<code>basis</code>) 以及电离哪个自旋轨道 (<code>ionization_spin</code>)。</li>
<li><code>[non_excited]</code>: 定义非激发原子的基组，用于构建混合基组。</li>
</ul>
<h4>B. 依赖关系 (GS -> 激发态)</h4>
<p>这是一个<strong>至关重要</strong>的流程：</p>
<ol>
<li><strong>必须</strong>首先运行<strong>基态 (GS)</strong> 计算 (<code>qchem_xray.py GS</code>)。</li>
<li><strong>必须</strong>等待 GS 计算<strong>正常完成</strong> (脚本会检查 <code>.out</code> 文件中是否包含 &quot;Have a nice day.&quot;)。</li>
<li>GS 计算完成后，才能运行所有其他依赖于 GS 轨道的计算，包括 <code>FCH</code>, <code>FCH_R</code>, <code>LUMO</code>, <code>TD_XAS</code>, <code>TD_XES</code> 和 <code>CACHE</code>。</li>
<li><code>Z+1</code> 计算不依赖于 GS，可以与 GS 同时运行。</li>
</ol>
<h4>C. 芯轨道自动检测 (缓存机制)</h4>
<p>为了运行  <code>FCH</code>, <code>FCH_R</code>, <code>LUMO</code>, <code>TD_XAS</code>, <code>TD_XES</code> 和 <code>CACHE</code> 的计算，脚本必须知道要激发哪个芯轨道 (例如，N 1s)。这个过程是自动的：</p>
<ol>
<li>当运行激发态计算（或 <code>CACHE</code>）时，脚本会首先在 <code>[num]/GS/</code> 目录中寻找 <code>[num]GS_orbital.cache</code> 缓存文件。</li>
<li><strong>如果缓存文件不存在</strong>，或者脚本发现缓存中的轨道局域化程度很差（默认阈值 \&lt; 95.0%），它将<strong>自动调用</strong> <code>extract_orbital_composition.py</code> 脚本。</li>
<li><code>extract_orbital_composition.py</code> 脚本会读取 <code>[num]/GS/</code> 目录下的 <code>.fchk</code> 文件，生成<code>[num]GS_orbital.cache</code> 文件（未找到 <code>extract_orbital_composition.py</code> 的情况）， 局域化并覆盖当前<code>[num]GS_orbital.cache</code> 文件（找到 <code>extract_orbital_composition.py</code>，但是相应芯轨道阈值 \&lt; 95.0%的情况）。<code>extract_orbital_composition.py</code> 的更多用法请查阅其手册。</li>
<li>脚本随后读取这个缓存文件，根据 <code>[excited]</code> -> <code>ionization_spin</code> (alpha 或 beta) 的设置，找到能量最低的芯轨道及其编号 (eo)。</li>
<li>这个轨道编号 (eo) 将被用于生成激发态计算的输入文件 (写入 <code>$occupied</code> 、<code>$reorder_mo</code>或者<code>$alist</code> 部分)。</li>
<li>
<p><code>[num]GS_orbital.cache</code> 文件内容示例如下（此格式由 <code>extract_orbital_composition.py</code> 生成并由 <code>qchem_xray.py</code> 读取）：</p>
<pre><code>n_alpha=21       n_beta=21
2|98.83              2|98.83            2|49.63          2|49.63
9|54.20              9|54.20            3|49.30          3|49.30
19|45.25            19|45.25

--------------------------------------------------
警告: 原始fchk文件轨道百分比 &lt; 95.0% (Max: 49.63%)
LOCALIZED: LMO_A | LMO_B | ORIG_A | ORIG_B
--------------------------------------------------</code></pre>
<p>此文件包括局域化后的结果，如果原本波函数的芯轨道就是局域化的，就没有最右两列和最后四行内容，如下所示：</p>
<pre><code>n_alpha=21       n_beta=21
2|98.83              2|98.83
9|54.20              9|54.20
19|45.25            19|45.25</code></pre>
</li>
</ol>
<h3>3. 计算类型与选项详解</h3>
<h4>A. 支持的计算类型</h4>
<p>脚本支持以下 8 种计算类型，<strong>必须</strong>在命令行中指定一种：</p>
<ol>
<li><strong><code>GS</code></strong> (Ground State): <strong>基态计算</strong>。这是后续所有激发态计算的基础。</li>
<li><strong><code>FCH</code></strong> (Final Core-Hole): <strong>芯激发态计算</strong>（芯电离）。通过在 <code>$occupied</code> 部分移除一个芯轨道来实现。</li>
<li><strong><code>FCH_R</code></strong> (FCH Reorganization): <strong>芯激发态重排计算</strong>。通过 <code>$reorder_mo</code> 关键字实现，将芯轨道放到最外层轨道，然后控制电荷数来控制最外层电子电离（芯轨道）（通常用于 ROKS/ROHF 计算）。</li>
<li><strong><code>LUMO</code></strong> (LUMO Excitation): <strong>芯激发到 LUMO 或 LUMO+N 的近似计算</strong>。通过在 <code>$occupied</code> 部分将电子从芯轨道移动到指定的未占据轨道。</li>
<li><strong><code>TD_XAS</code></strong> (Time-Dependent DFT): <strong>TDDFT 计算</strong>，用于模拟 XAS 吸收谱。通过 <code>$alist</code> 关键字指定芯轨道。</li>
<li><strong><code>TD_XES</code></strong> (TDDFT for XES): <strong>TDDFT 计算</strong>，用于模拟 XES 发射谱。通过 <code>$alist</code> 关键字指定芯轨道，内置了FCH的计算。</li>
<li><strong><code>Z+1</code></strong> (Z+1 Approximation): <strong>Z+1 近似计算</strong>。将目标原子替换为周期表中的下一个元素（例如 N -> O）来模拟芯激发。<strong>此计算不依赖 GS</strong>。</li>
<li><strong><code>CACHE</code></strong> (Cache Only): <strong>仅生成或更新轨道缓存</strong>。用于检查 GS 计算的轨道局域化情况，或在运行激发态计算前强制生成缓存。</li>
</ol>
<h4>B. 命令行选项</h4>
<ul>
<li><strong><code>[计算类型]</code></strong>: (必需) 上述 8 种类型之一。</li>
<li><strong><code>-h, --help</code></strong>: 显示详细的帮助信息。</li>
<li><strong><code>-r, --retry</code></strong>: 仅重试上次失败或跳过的原子。它会读取 <code>[calc_type]_skipped.log</code> 文件。</li>
<li><strong><code>-y, --yes</code></strong>: 自动确认，覆盖所有已存在的计算目录。</li>
<li><strong><code>-c CONFIG</code></strong>: 指定配置文件的路径 (默认: <code>input.ini</code>)。</li>
<li><strong><code>-l LEVEL</code> (仅用于 LUMO)</strong>: <strong>(LUMO 专用选项)</strong> 指定激发能级，激发到 <code>LUMO + LEVEL</code>。
<ul>
<li><code>-l 0</code> (默认) 表示激发到 LUMO。</li>
<li><code>-l 1</code> 表示激发到 LUMO+1。</li>
</ul></li>
<li><strong><code>-a ATOMS</code></strong>: 手动指定要计算的原子列表 (例如: '1 5 10-15 C')，这将覆盖 <code>input.ini</code> 中的 <code>[excited]</code> -> <code>num</code> 设置。</li>
<li><strong><code>-co ORBITALS</code> (高级)</strong>: 手动覆盖芯轨道号，跳过自动检测。格式: 'atom1:orb1 atom2:orb2' (例如: '1:2 5:3')。</li>
</ul>
<h3>4. 完整运行示例</h3>
<p>以下是使用示例 <code>input.ini</code> 和 <code>pyridine.xyz</code> 文件运行计算的完整分步指南。</p>
<h4>A. 准备文件</h4>
<ol>
<li>创建一个新的工作目录。</li>
<li>在该目录中创建以下两个文件：</li>
</ol>
<p><strong>文件 1: <code>input.ini</code></strong></p>
<pre><code class="language-ini"># ====================================================================
#  重要提示:
#  此配置文件中的所有值都必须由三引号 """ ... """ 包裹。
#  这是为了确保程序能正确读取，请不要删除或修改这些引号。
#  您只需要修改引号内部的内容即可。
# ====================================================================

# ==========================================================
#               Q-Chem 作业提交配置
# ==========================================================
[submit]
# 设置用于提交计算的命令，如果留空或加#则不自动提交
qsub = """
qqchem 1 2 old
"""

# ==========================================================
#               分子结构与电荷/多重度配置
# ==========================================================
[xyz]
# xyz坐标文件名
filename          = """
pyridine.xyz
"""

# 1. 基态 (GS) 的电荷和自旋多重度
GS_charge_mult    = """
0 1
"""

# 2. 芯电离 (FCH / UKS) 的电荷和自旋多重度
FCH_charge_mult   = """
1 2
"""

# 3. 芯电离 (FCH_R / ROKS) 的电荷和自旋多重度
FCH_R_charge_mult = """
1 2
"""

# 4. LUMO+N 芯激发 (LUMO) 的电荷和自旋多重度 (中性激发)
LUMO_charge_mult  = """
0 1
"""

# 5. 芯激发 (TDDFT/XAS) 的电荷和自旋多重度
TD_XAS_charge_mult   = """
0 1
"""

# 6. XES 发射谱 (TD_XES) 的电荷和自旋多重度 (与FCH相同)
TD_XES_charge_mult = """
1 2
"""

# 7. Z+1 近似的电荷和自旋多重度
Z+1_charge_mult   = """
1 1
"""

# ==========================================================
#               Q-Chem 计算关键词 ($rem 部分)
# ==========================================================
[keys]
# ----------------- 1. 基态 (GS) 计算关键词 -----------------
GS = """
METHOD bp86
BASIS mixed
PURECART 1111
! GEN_SCFMAN true
SCF_ALGORITHM diis
BASIS2 def2-svp
UNRESTRICTED true
! SCF_GUESS_MIX 5
SCF_CONVERGENCE 8
INTEGRAL_SYMMETRY false
POINT_GROUP_SYMMETRY false
IQMOL_FCHK true
MAX_SCF_CYCLES 300
NBO_EXTERNAL TRUE
NBO true
"""

# ----------------- 2. 芯电离 (FCH / UKS) 计算关键词 -----------------
FCH = """
METHOD bp86
BASIS mixed
PURECART 1111
! GEN_SCFMAN false
SCF_ALGORITHM diis
SCF_GUESS read
UNRESTRICTED true
MOM_START 1
MOM_METHOD imom
SCF_CONVERGENCE 6
INTEGRAL_SYMMETRY false
POINT_GROUP_SYMMETRY false
IQMOL_FCHK true
MAX_SCF_CYCLES 300
"""

# ----------------- 3. 芯电离 (FCH_R / ROKS) 计算关键词 -----------------
FCH_R = """
METHOD bp86
BASIS mixed
PURECART 1111
! GEN_SCFMAN false
SCF_ALGORITHM sgm
SCF_GUESS read
UNRESTRICTED false
SCF_CONVERGENCE 6
INTEGRAL_SYMMETRY false
POINT_GROUP_SYMMETRY false
IQMOL_FCHK true
MAX_SCF_CYCLES 300
"""

# ----------------- 4. 芯激发 (LUMO+N) 计算关键词 -----------------
LUMO = """
METHOD bp86
BASIS mixed
PURECART 1111
! GEN_SCFMAN false
SCF_ALGORITHM diis
SCF_GUESS read
UNRESTRICTED true
MOM_START 1
MOM_METHOD imom
SCF_CONVERGENCE 6
INTEGRAL_SYMMETRY false
POINT_GROUP_SYMMETRY false
IQMOL_FCHK true
MAX_SCF_CYCLES 300
"""

# ----------------- 5. 芯激发 (TDDFT/XAS) 计算关键词 -----------------
TD_XAS = """
EXCHANGE bp86
BASIS mixed
PURECART 1111
SKIP_SCFMAN true
SCF_GUESS read
UNRESTRICTED true
CIS_N_ROOTS 300
CIS_TRIPLETS false
TRNSS true
TRTYPE 3
N_SOL 1
FAST_XAS true
! XAS_EDGE 6
! XAS_SCREEN_LEVEL 1
! REL_SHIFT 6
"""

# ----------------- 6. XES 发射 (TDDFT/XES) 计算关键词 -----------------
TD_XES = """
EXCHANGE bp86
BASIS mixed
PURECART 1111
SCF_GUESS read
UNRESTRICTED true
MOM_START 1
MOM_METHOD imom
SCF_CONVERGENCE 6
CIS_N_ROOTS 5
CIS_TRIPLETS false
"""

# ----------------- 7. Z+1 近似计算关键词 -----------------
Z+1 = """
METHOD bp86
BASIS mixed
PURECART 1111
! GEN_SCFMAN true
SCF_ALGORITHM diis
BASIS2 def2-svp
UNRESTRICTED true
! SCF_GUESS_MIX 5
SCF_CONVERGENCE 8
INTEGRAL_SYMMETRY false
POINT_GROUP_SYMMETRY false
IQMOL_FCHK true
MAX_SCF_CYCLES 300
"""

# ==========================================================
#               基组定义 ($basis 部分)
# ==========================================================
# ----------------- 激发原子配置 -----------------
[excited]
# 定义被激发的原子 (可以用原子序号、范围、元素符号)
# 示例: "1 3-5 N" 表示第1个原子、第3到5个原子、以及所有的N原子
num   = """
N 2
"""

# 为激发原子指定的基组
basis = """
6-311g
"""

# 指定从 'alpha' 还是 'beta' 轨道激发 (默认为 'beta')
ionization_spin = """
beta
"""

# ----------------- 非激发原子配置 -----------------
# 可以定义多组非激发原子及其基组
# 命名规则: num1/basis1, num2/basis2, ...
[non_excited]
num1    = """
1
"""
basis1  = """
3-21G
"""

num2    = """
C
"""
basis2  = """
6-31G
"""

num3    = """
H
"""
basis3  = """
STO-3G
"""

# 如果不需要第4组，可以将其留空
num4    = """
"""
basis4  = """
"""</code></pre>
<p><strong>文件 2: <code>pyridine.xyz</code></strong></p>
<pre><code class="language-xyz">11

N     -1.21390500   -0.76688800    0.00000000
C     -1.23050600    0.58519600    0.00000000
C     -0.07028600    1.38150500    0.00000000
C      1.18362600    0.74775800    0.00000000
C      1.21742000   -0.65680000    0.00000000
C      0.00000000   -1.36257100    0.00000000
H     -2.22120100    1.05147700    0.00000000
H     -0.15352900    2.47192200    0.00000000
H      2.10854100    1.33207700    0.00000000
H      2.16639700   -1.20029000    0.00000000
H     -0.00439300   -2.45750200    0.00000000</code></pre>
<hr />
<h4>B. 步骤 1: 运行基态 (GS) 和 Z+1 计算</h4>
<p><code>[excited]</code> -> <code>num</code> 设置为 &quot;N 2&quot;，脚本会将其解析为 &quot;所有 N 原子 (原子 1)&quot; 和 &quot;原子 2 (C 原子)&quot;。</p>
<p><strong>运行命令:</strong></p>
<pre><code class="language-bash">qchem_xray.py GS
qchem_xray.py Z+1</code></pre>
<p><strong>脚本行为:</strong></p>
<ol>
<li>创建目录 <code>1/GS/</code> 和 <code>2/GS/</code>。</li>
<li>在 <code>1/GS/</code> 中生成 <code>1GS.in</code>，在 <code>2/GS/</code> 中生成 <code>2GS.in</code>。</li>
<li>创建目录 <code>1/Z+1/</code> 和 <code>2/Z+1/</code>。</li>
<li>在 <code>1/Z+1/</code> 中生成 <code>1Z+1.in</code> (N -> O)，在 <code>2/Z+1/</code> 中生成 <code>2Z+1.in</code> (C -> N)。</li>
<li>在<strong>每个</strong>新创建的目录中执行 <code>qqchem 1 2 old</code> 命令提交作业。</li>
</ol>
<p><strong>示例: 生成的 <code>1GS.in</code> 文件内容</strong><br />
<em>(注意 <code>BASIS mixed</code> 和混合基组的定义)</em></p>
<pre><code class="language-qchem">$rem
   METHOD bp86
   BASIS mixed
   PURECART 1111
   GEN_SCFMAN true
   SCF_ALGORITHM diis
   BASIS2 def2-svp
   UNRESTRICTED true
   SCF_GUESS_MIX 5
   SCF_CONVERGENCE 8
   INTEGRAL_SYMMETRY false
   POINT_GROUP_SYMMETRY false
   IQMOL_FCHK true
   MAX_SCF_CYCLES 300
   NBO true
$end

$nbo
naomo
$end

$molecule
0 1
 N     -1.21390500   -0.76688800    0.00000000
 C     -1.23050600    0.58519600    0.00000000
 C     -0.07028600    1.38150500    0.00000000
 C      1.18362600    0.74775800    0.00000000
 C      1.21742000   -0.65680000    0.00000000
 C      0.00000000   -1.36257100    0.00000000
 H     -2.22120100    1.05147700    0.00000000
 H     -0.15352900    2.47192200    0.00000000
 H      2.10854100    1.33207700    0.00000000
 H      2.16639700   -1.20029000    0.00000000
 H     -0.00439300   -2.45750200    0.00000000
$end

$basis
N 1
6-311g
****
C 2
6-31G
****
C 3
6-31G
****
C 4
6-31G
****
C 5
6-31G
****
C 6
6-31G
****
H 7
STO-3G
****
H 8
STO-3G
****
H 9
STO-3G
****
H 10
STO-3G
****
H 11
STO-3G
****
$end</code></pre>
<blockquote>
<p><strong>注意:</strong>  <code>non_excited</code> 中 <code>num1=1</code> (3-21G) 被 <code>num2=C</code> (6-31G) 的规则覆盖了，因为原子 1 (N) 匹配了 <code>excited</code> 规则，而原子 2-6 (C) 匹配了 <code>num2</code> 规则。</p>
<p><strong>注意:</strong>  如果计算关键词中含有 <code>NBO</code>，将会自动添加以下模块：</p>
<pre><code class="language-qchem">$nbo
naomo
$end</code></pre>
<hr />
</blockquote>
<h4>C. 步骤 2: (可选) 检查/生成轨道缓存</h4>
<p><strong>注意：如果不运行该步骤，不会生成<code>[num]GS_orbital.cache</code>文件。但是后续运行依赖于GS的计算类型，也会自动调用<code>extract_orbital_composition.py</code>生成<code>[num]GS_orbital.cache</code>文件，因此此步骤不是必选。但是推荐计算完所有GS后，进行此步骤，查看有没有异常轨道或者未局域化轨道，防止造成计算资源浪费。</strong></p>
<p><strong>等待步骤 1 中的 GS 计算全部完成。</strong></p>
<p><strong>运行命令:</strong></p>
<pre><code class="language-bash">qchem_xray.py CACHE</code></pre>
<p><strong>脚本行为:</strong></p>
<ol>
<li>脚本开始处理原子 1 (N) 和 2 (C)。</li>
<li>它将调用 <code>extract_orbital_composition.py</code> (因为缓存尚不存在)。</li>
<li>该脚本会分析 <code>1/GS/1GS.fchk</code> 和 <code>2/GS/2GS.fchk</code>。</li>
<li>如果轨道局域化程度低，<code>extract_orbital_composition.py</code> 可能会提示用户是否使用 MOKIT 进行局域化（这是交互式的）。</li>
<li>最终生成 <code>1/GS/1GS_orbital.cache</code> 和 <code>2/GS/2GS_orbital.cache</code>。</li>
<li>同时生成一个总结文件 <code>orbital.cache</code>。</li>
</ol>
<hr />
<h4>D. 步骤 3: 运行激发态计算 ( <code>FCH</code>, <code>FCH_R</code>, <code>LUMO</code>, <code>TD_XAS</code>, <code>TD_XES</code> )</h4>
<p><strong>等待 GS 计算完成后</strong>，您可以运行所有依赖 GS 的计算。</p>
<p><strong>运行命令:</strong></p>
<pre><code class="language-bash">qchem_xray.py FCH
qchem_xray.py FCH_R
qchem_xray.py LUMO
qchem_xray.py TD_XAS
qchem_xray.py TD_XES</code></pre>
<p><strong>脚本行为 (以 FCH 为例):</strong></p>
<ol>
<li>创建 <code>1/FCH/</code> 和 <code>2/FCH/</code>。</li>
<li><strong>读取缓存</strong>: 脚本读取 <code>1/GS/1GS_orbital.cache</code> 和 <code>2/GS/2GS_orbital.cache</code> (如果缓存不存在，它会像步骤 2 一样自动生成它们)。</li>
<li><strong>确定轨道</strong>: 根据 <code>[excited]</code> -> <code>ionization_spin = beta</code>，它会查找 beta 轨道的最低芯轨道。假设对于原子 1 (N)，它找到的是轨道 2。</li>
<li><strong>生成输入</strong>: 生成 <code>1/FCH/1FCH.in</code>。</li>
<li><strong>提交作业</strong>: 在 <code>1/FCH/</code> 目录中运行 <code>qqchem 1 2 old</code>。</li>
</ol>
<p><strong>示例: 生成的 <code>1FCH.in</code> 文件内容</strong><br />
<em>(假设 GS 有 21 个 alpha 和 21 个 beta 电子, 且 N 1s (beta) 是轨道 2)</em></p>
<pre><code class="language-qchem">$occupied
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
1 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
$end

$rem
   METHOD bp86
   BASIS mixed
   PURECART 1111
   GEN_SCFMAN false
   SCF_ALGORITHM diis
   SCF_GUESS read
   UNRESTRICTED true
   MOM_START 1
   MOM_METHOD imom
   SCF_CONVERGENCE 6
   INTEGRAL_SYMMETRY false
   POINT_GROUP_SYMMETRY false
   IQMOL_FCHK true
  *MAX_SCF_CYCLES 300
$end

$molecule
1 2
 N     -1.21390500   -0.76688800    0.00000000
 C     -1.23050600    0.58519600    0.00000000
 C     -0.07028600    1.38150500    0.00000000
 C      1.18362600    0.74775800    0.00000000
 C      1.21742000   -0.65680000    0.00000000
 C      0.00000000   -1.36257100    0.00000000
 H     -2.22120100    1.05147700    0.00000000
 H     -0.15352900    2.47192200    0.00000000
 H      2.10854100    1.33207700    0.00000000
 H      2.16639700   -1.20029000    0.00000000
 H     -0.00439300   -2.45750200    0.00000000
$end

$basis
N 1
6-311g
****
C 2
6-31G
****
C 3
6-31G
****
C 4
6-31G
****
C 5
6-31G
****
C 6
6-31G
****
H 7
STO-3G
****
H 8
STO-3G
****
H 9
STO-3G
****
H 10
STO-3G
****
H 11
STO-3G
****
$end</code></pre>
<p><em>(注意 <code>$occupied</code> 部分的 beta 轨道 (第二行) 中将会去掉轨道 2, 表示电离的芯轨道是2。)</em></p>
<hr />
<h4>E. 步骤 4: LUMO 专用额外计算</h4>
<p><code>LUMO</code> 计算的行为与 FCH 类似，但它会将电子移动到未占据轨道，并且<strong>受 <code>-l</code> 选项控制</strong>。</p>
<p><strong>运行命令 (情况 A: 默认激发到 LUMO):</strong></p>
<pre><code class="language-bash">qchem_xray.py LUMO</code></pre>
<ul>
<li>这等同于 <code>qchem_xray.py LUMO -l 0</code>。</li>
<li>脚本会将电子从芯轨道 (例如轨道 2) 移动到 <code>LUMO</code> (即 <code>n_beta + 1</code>，如果 n_beta=21，则移动到轨道 22)。</li>
<li>生成的 <code>1LUMO.in</code> 中 <code>$occupied</code> 的 beta 列表将是: <code>1 3 4 ... 21 22</code>。</li>
</ul>
<p><strong>运行命令 (情况 B: 激发到 LUMO+2):</strong></p>
<pre><code class="language-bash">qchem_xray.py LUMO -l 2</code></pre>
<ul>
<li>脚本使用 <code>LEVEL = 2</code>。
<ul>
<li>脚本会创建<code>LUMO+2</code>文件夹。</li>
<li>脚本会将电子从芯轨道 (例如轨道 2) 移动到 <code>LUMO + 2</code> (即 <code>(n_beta + 1) + 2</code>，如果 n_beta=21，则移动到轨道 24)。</li>
<li>生成的 <code>1LUMO+2.in</code> 中 <code>$occupied</code> 的 beta 列表将是: <code>1 3 4 ... 21 24</code>。</li>
</ul></li>
</ul>
<h3>5. 高级选项详解</h3>
<h4>A. <code>-r, --retry</code> (重试失败/跳过选项)</h4>
<ul>
<li>
<p><strong>功能</strong>:<br />
<code>--retry</code> 选项允许您<strong>仅重试</strong>在上一次运行中生成失败或被用户手动跳过（例如，在提示覆盖时选择了 'n'）的原子。</p>
</li>
<li>
<p><strong>适用场景</strong>:<br />
假设您正在为 20 个原子运行 <code>FCH</code> 计算。</p>
<ul>
<li>在第一次运行时，原子 1-15 成功生成。</li>
<li>原子 16 的 GS 计算未完成，导致生成失败。</li>
<li>当脚本提示是否覆盖原子 17 的现有目录时，您不小心选了 &quot;n&quot; (否)，导致它被跳过。</li>
<li>原子 18-20 成功。</li>
</ul>
<p>在这种情况下，您不需要重新运行所有 20 个原子。您可以先修复原子 16 的问题（例如，重新运行 GS 计算），然后使用 <code>--retry</code> 标志。</p>
</li>
<li>
<p><strong>工作原理</strong>:</p>
<ol>
<li><strong>日志文件</strong>: 当 <code>qchem_xray.py</code> 运行 <code>GS</code> 之外的计算时，它会在 <code>print_summary</code> 函数中评估哪些原子生成失败 (<code>self.failed_generations</code>) 或被跳过 (<code>self.skipped_atoms</code>)。</li>
<li>它会将这些失败/跳过的原子编号列表写入一个日志文件，命名格式为 <code>[calc_type]_skipped.log</code>（例如 <code>FCH_skipped.log</code>）。</li>
<li><strong>重试模式</strong>: 当您使用 <code>qchem_xray.py FCH -r</code> 再次运行脚本时：
<ul>
<li>脚本会查找 <code>FCH_skipped.log</code> 文件。</li>
<li>它会读取该文件中的所有原子编号。</li>
<li>它会<strong>忽略</strong> <code>input.ini</code> 中 <code>[excited]</code> -> <code>num</code> 的设置，转而只对从日志文件中读取的原子（在此例中为 16 和 17）执行计算。</li>
</ul></li>
</ol>
<blockquote>
<p><strong>注意</strong>: 此选项仅对 <code>FCH</code>, <code>FCH_R</code>, <code>LUMO</code>, <code>TD_XAS</code>, <code>TD_XES</code> 有效，因为它对 <code>GS</code> 或 <code>Z+1</code> 没有意义。</p>
</blockquote>
</li>
</ul>
<p><strong>示例命令</strong>:</p>
<pre><code class="language-bash"># 重试上次未生成的`FCH`计算任务, 读取的是`FCH_skipped.log`文件中的原子列表，可以自己调整。
qchem_xray.py FCH -r"</code></pre>
<h4>B. <code>-co ORBITALS, --core-orbital ORBITALS</code> (手动指定芯轨道)</h4>
<ul>
<li>
<p><strong>功能</strong>:<br />
这是一个非常高级的选项，允许您<strong>手动覆盖</strong>并指定用于计算的芯轨道编号，完全<strong>跳过</strong>脚本的自动轨道检测（即读取 <code>.cache</code> 文件或调用 <code>extract_orbital_composition.py</code> 的过程）。</p>
</li>
<li>
<p><strong>格式</strong>:<br />
必须使用 <code>'atom1:orb1 atom2:orb2'</code> 的格式，例如：<code>-co "1:2 5:3"</code>。</p>
</li>
<li>
<p><strong>适用场景</strong>:</p>
<ol>
<li><strong>自动检测失败</strong>: <code>extract_orbital_composition.py</code> 脚本可能因各种原因（如轨道混合严重、NBO 分析失败）无法正确识别您想要的 1s 芯轨道。</li>
<li><strong>选择特定轨道</strong>: 您可能不想激发能量最低的芯轨道（例如，对于硫 (S)，您可能想激发 1s，但自动检测却错误地选择了 2s/2p）。</li>
<li><strong>节省时间</strong>: 您已经通过其他方式（例如，手动检查 <code>GS.fchk</code> 或 <code>GS.out</code>）知道了芯轨道的编号，不想等待（可能很慢的）<code>extract_orbital_composition.py</code> 脚本再次运行。</li>
</ol>
</li>
<li>
<p><strong>工作原理</strong>:</p>
<ol>
<li><strong>解析</strong>: 脚本启动时会解析您提供的字符串 (例如 <code>"1:2 5:3"</code>)，并将其转换为一个字典：<code>{1: 2, 5: 3}</code>。</li>
<li><strong>传递</strong>: 这个字典被传递给 <code>QchemInputGenerator</code>。</li>
<li><strong>覆盖</strong>: 当脚本为激发态（如 <code>FCH</code>）准备输入文件时，在 <code>_get_excited_orbital</code> 函数中，它会首先检查当前原子编号是否在您的 &quot;覆盖字典&quot; 中。</li>
<li><strong>跳过检测</strong>:
<ul>
<li><strong>如果原子在字典中</strong> (例如原子 1)，脚本会打印一条 &quot;命令行覆盖&quot; 消息，并立即使用您指定的轨道号 (轨道 2)。它<strong>不会</strong>尝试读取 <code>1GS_orbital.cache</code> 文件，也不会运行 <code>extract_orbital_composition.py</code>。</li>
<li><strong>如果原子不在字典中</strong> (例如原子 2)，脚本将回退到标准的自动检测流程（读取缓存或运行外部脚本）。</li>
</ul></li>
</ol>
</li>
</ul>
<p><strong>示例命令</strong>:<br />
假设 <code>input.ini</code> 中 <code>num = "N 2"</code> (即原子 1 和 2)。自动检测发现原子 1 的芯轨道是 2，但原子 2 (C) 的检测失败了。您手动检查发现原子 2 的芯轨道是 3。您可以使用以下命令：</p>
<pre><code class="language-bash"># 运行 FCH
# - Atom 1: 使用 -co 指定的轨道 2
# - Atom 2: 使用 -co 指定的轨道 3
qchem_xray.py FCH -co "1:2 2:3"</code></pre>
<h4>C. 自定义计算类型</h4>
<ul>
<li>
<p><strong>功能</strong>:<br />
这是一个非常灵活的选项，允许您自定义一个计算类型， 您只需要修改该程序表头部分， 指定一个计算类型， 并标记其采用的轨道处理类型即可。</p>
</li>
<li>
<p><strong>修改.py格式</strong>:</p>
<pre><code class="language-python"># ==============================================================================
#  全局配置区域: 计算模式与轨道处理策略定义
# ==============================================================================

# 您可以在此处添加自定义的计算类型。
# 格式说明:
#   '计算类型名': {
#       'description': '描述文本',
#       'strategy':    '轨道处理策略', 
#                      可选值: 'none' (无操作), 'occupied' ($occupied), 
#                             'reorder' ($reorder_mo), 'alist' ($alist), 'lumo' (LUMO+N)
#       'requires_gs': True/False, (是否需要读取GS的轨道缓存和MO文件)
#       'handler':     '处理逻辑',
#                      可选值: 'standard' (标准生成), 'z_plus_1' (Z+1近似), 'cache' (仅缓存)
#   }
# === 在下方添加您的自定义计算类型 ===
# 'CUSTOM': {
#     'description': '自定义计算示例',
#     'strategy': 'occupied',  # 假设使用 $occupied 方法
#     'requires_gs': True,     # 假设基于GS
#     'handler': 'standard'
# },
# ===================================</code></pre>
</li>
<li>
<p><strong>修改.ini格式</strong>:</p>
<p>在 <code>[xyz]</code> 部分添加相应计算类型的电荷和自旋多重度, 例如:</p>
<pre><code class="language-ini">CUSTOM_charge_mult = """
1 2
"""</code></pre>
<p>在 <code>[keys]</code> 部分添加相应计算类型的关键词部分, 例如:</p>
<pre><code class="language-ini">CUSTOM = """
PURECART 1111
INTEGRAL_SYMMETRY false
POINT_GROUP_SYMMETRY false
IQMOL_FCHK TRUE
MAX_SCF_CYCLES 300
"""</code></pre>
</li>
</ul>]]></description>
    <pubDate>Fri, 05 Dec 2025 14:43:25 +0800</pubDate>
    <dc:creator>wangsy</dc:creator>
    <guid>https://www.wangsy.fun/post/80</guid>
</item>
<item>
    <title>一键式轨道生成脚本</title>
    <link>https://www.wangsy.fun/post/78</link>
    <description><![CDATA[<ul>
<li>
<p>FCH（Q-Chem）</p>
<ol>
<li>在FCH文件夹下的文件中，查高强度峰对应的是哪个轨道<br />
bardata_beta.XAS（闭壳层情况下）；bardata.XAS（开壳层情况）</li>
<li>在GS文件夹内运行<br />
Multiwfn  XXX.fchk ➡ 200 ➡ 3 ➡ 输入轨道号（如519-530） ➡ 2 ➡ 1</li>
<li>
<p>vmd</p>
<ul>
<li>shell下： orb 519 ➡ obiso 0.02</li>
<li>本地电脑：拷贝XXX.cube到本地电脑<br />
在cube文件夹下，shift+右键 ➡ Powershell<br />
vmd ➡ orb 519 ➡ obiso 0.02 摆好位置<br />
vmd操作：Graphics ➡ colors ➡ element ➡<br />
Graphics ➡ colors ➡ Prepre..➡ CPK ➡ Coloring Method ➡ Element<br />
Graphics ➡ colors ➡ Prepre..➡ isosurface ➡ coborID ➡ 改颜色<br />
File ➡ save visuali.. ➡ orbnumb (保存的文件名称)</li>
</ul>
<p>将orbnumb拷贝到集群cub所在的位置 ➡ cub2bmp(对所有cub以orbnumb为模板进行渲染)</p>
</li>
</ol>
</li>
<li>
<p>Z+1</p>
<ol>
<li>gzip -d XXX.gz</li>
<li>Multiwfn XXX.fch</li>
<li>同FCH</li>
</ol>
</li>
<li>
<p>TDDFT（Q-Chem）</p>
<ol>
<li>在XAS.analyze下，拷贝GS/XXX.fchk ➡ XAS.fchk</li>
<li>Muttiwfn XAS.fchk ➡ 18 ➡ 6 ➡ 回车 ➡（在XAS.data内找高强度峰对应的轨道，如轨道30） ➡ 2 ➡ S30.fch ➡ 退出</li>
<li>Muttiwfn S30.fch ➡ 0 (看轨道) ➡ 找HOMO/LUMO, 即找2/0，如485（hoLe）,486(part) ➡ 退出</li>
<li>Muttiwfn S30.fch ➡ 200 ➡ 3 ➡ 485-486 ➡ 2 ➡ 退出</li>
<li>将orbnumb拷贝到集群cub所在的位置 ➡ cub2bmp(对所有cub以orbnumb为模板进行渲染)</li>
</ol>
</li>
</ul>]]></description>
    <pubDate>Mon, 17 Nov 2025 18:32:32 +0800</pubDate>
    <dc:creator>zhangjr</dc:creator>
    <guid>https://www.wangsy.fun/post/78</guid>
</item>
<item>
    <title>在Windows上使用ORCA计算旋轨耦合（SOC）矩阵元</title>
    <link>https://www.wangsy.fun/post/72</link>
    <description><![CDATA[<h2>1. 引言</h2>
<p>本文主要面向无Linux使用经验的实验组本科以及研究生，能够实现在windows上直接使用ORCA软件包进行旋轨耦合矩阵元的计算与分析， 打破实验与理论分析的壁垒。<br />
如有Linux使用经验，还有一批更简洁的使用脚本。准备好输入文件，能够做到Linux下一键式计算于结果分析。<br />
任何问题可以联系作者：wang.sy@vip.163.com</p>
<h3>1.1 为什么要计算旋轨耦合？</h3>
<p>在非相对论量子力学的世界里，电子的自旋和它的轨道运动是完全独立的。这存在一个严格的规则：<strong>自旋多重度在电子跃迁过程中必须保持不变</strong>。也就是说，单重态（Singlet, S）只能跃迁到单重态，三重态（Triplet, T）只能跃迁到三重态。因此，像<strong>系间窜越（Intersystem Crossing, ISC）</strong>（例如，从S₁态到T₁态）和<strong>磷光发射</strong>（从T₁态回到S₀基态）这类改变自旋的“禁阻”过程，其理论上的发生概率为零。</p>
<p>然而，在现实世界中，这些过程广泛存在于有机发光二OLED、光动力疗法等领域。这背后的“魔法”就是<strong>旋轨耦合（Spin-Orbit Coupling, SOC）</strong>。</p>
<p>SOC是一种相对论效应，它描述了电子自旋磁矩和其轨道运动产生的磁场之间的相互作用。当考虑SOC时，哈密顿算符中会增加一项$H_{SO}$，它打破了自旋与轨道运动的独立性。这使得原本纯粹的单重态会“混入”一些三重态的成分，反之亦然。这样一来，S→T或T→S的跃迁就不再是完全禁阻的了，其跃迁概率的大小就直接与这两个态之间的旋轨耦合强度有关。</p>
<p>我们通常用<strong>旋轨耦合矩阵元</strong> $\langle\Psi<em>i|H</em>{SO}|\Psi_j\rangle$ 来定量描述两个电子态（例如一个单重态和一个三重态）之间的耦合强度。这个值越大，它们之间发生自旋翻转过程的速率就越快。因此，计算SOC矩阵元对于理解和设计具有特定光物理性质（如高磷光效率）的分子至关重要。</p>
<h3>1.2 教程章节</h3>
<p>本教程旨在为计算化学零基础的本科和研究生提供一个清晰、详尽的指南。我们将遵循以下步骤：<br />
<strong>理论背景</strong>：用最通俗的语言解释SOC计算的核心思想。<br />
<strong>准备工作与Windows系统操作</strong>：讲解如何在Windows上准备并运行ORCA计算。<br />
<strong>实例一：简单有机分子（甲醛）</strong>：最基础的SOC计算流程，不涉及复杂的标量相对论效应。<br />
<strong>实例二：重金属配合物（Ir(ppy)₃）</strong>：如何处理含有重金属的体系，必须考虑标量相对论效应。<br />
<strong>实例三：周期性结构（石墨烯量子点）</strong>：如何将晶体等周期性结构简化为分子模型进行计算。<br />
<strong>输出文件解读</strong>：如何从ORCA输出文件中提取和理解所有与SOC相关的数据。</p>
<h2>2. 理论背景简介</h2>
<p>我们计算的目标是求解旋轨耦合矩阵元 $\langle S<em>m | H</em>{SO} | T<em>n \rangle$。这里的$H</em>{SO}$就是旋轨耦合哈密顿算符。在ORCA等量子化学软件中，主要通过以下两种方法来处理$$H_{SO}$$：</p>
<ol>
<li><strong>旋轨耦合平均场 (Spin-Orbit Mean-Field, SOMF)</strong>：这是一种精度较高的方法。它将复杂的双电子SOC项通过平均场的方式进行简化，在保证精度的同时极大地降低了计算成本。这是ORCA中处理SOC的<strong>默认且推荐</strong>的方法。</li>
<li><strong>有效核电荷 (Effective Nuclear Charge, Zeff)</strong>：这是一种更近似的方法。它认为双电子的SOC贡献与单电子的贡献有较好的比例关系，因此通过修正单电子项中的核电荷（使用一个“有效”值Zeff），来近似地包含双电子的贡献。这种方法计算速度最快，但精度相对较低。在pysoc中就是使用该方法。</li>
</ol>
<p>对于含有重金属（如Ir, Os, Pt, Au等）的体系，除了SOC效应，<strong>标量相对论效应</strong>也非常重要。它主要影响电子的动能和势能，导致轨道收缩或扩张。在ORCA中，我们通常使用<strong>ZORA</strong> (Zeroth-Order Regular Approximation) 或 <strong>DKH2</strong> (Douglas-Kroll-Hess, 2nd order) 哈密顿来处理标量相对论效应。</p>
<p>因此，我们的计算策略是：</p>
<ul>
<li>对轻元素体系：直接在非相对论框架下计算SOC。</li>
<li>对重元素体系：同时使用标量相对论哈密顿（如ZORA/DKH2）和SOC计算。</li>
</ul>
<h2>3. 准备工作与Windows系统操作</h2>
<h3>3.1 必备软件</h3>
<ol>
<li><strong>ORCA程序</strong>：<a href="https://www.faccts.de/customer" title="点击此处">点击此处</a>免费注册并下载。下载后解压到一个没有中文和空格的路径，例如 <code>D:\orca</code>。</li>
<li><strong>Windows环境变量配置</strong>：
<ul>
<li>右键“此电脑” -&gt; 属性 -&gt; 高级系统设置 -&gt; 环境变量。</li>
<li>在“系统变量”中找到 <code>Path</code>，点击“编辑”。</li>
<li>点击“新建”，然后将你的ORCA程序路径（例如 <code>D:\orca</code>）添加进去。</li>
<li>这样，你就可以在任何位置通过命令行调用ORCA了。</li>
</ul></li>
<li><strong>文本编辑器</strong>：推荐使用 Notepad++ 或 Sublime Text。不要使用Windows自带的记事本，它可能会导致格式问题。</li>
</ol>
<h3>3.2 如何在Windows上运行ORCA计算</h3>
<p>ORCA是一个命令行程序，操作流程如下：</p>
<ol>
<li><strong>创建工作文件夹</strong>：在电脑上创建一个新的文件夹用于存放计算文件，例如 <code>D:\orca_calc\formaldehyde</code>。</li>
<li><strong>编写输入文件</strong>：在该文件夹中，使用文本编辑器创建一个新的文本文件，并将其命名为 <code>calc.inp</code>（<code>.inp</code> 是ORCA输入文件的常用扩展名）。将下文例子中的输入代码复制进去。</li>
<li>
<p><strong>打开命令提示符 (CMD)</strong>：</p>
<ul>
<li>在工作文件夹的地址栏输入 <code>cmd</code> 然后按回车，可以直接在该目录下打开命令提示符。</li>
<li>或者，通过开始菜单搜索 <code>cmd</code> 打开，然后使用 <code>cd</code> 命令切换到你的工作目录，例如：
<pre><code class="language-bash">D:
cd D:\orca_calc\formaldehyde</code></pre></li>
</ul>
</li>
<li>
<p><strong>执行计算命令</strong>：在命令提示符窗口中，输入以下命令并按回车：</p>
<pre><code class="language-bash">orca calc.inp &gt; calc.out</code></pre>
<ul>
<li><code>orca calc.inp</code>：调用ORCA程序执行 <code>calc.inp</code> 文件中的计算任务。</li>
<li><code>&gt;</code>：这是一个重定向符号，意思是将屏幕上本应显示的所有输出信息，全部“重定向”并写入到后面的文件中。</li>
<li><code>calc.out</code>：这是指定的输出文件名。计算过程和所有结果都将保存在这个文件里。</li>
</ul>
</li>
<li><strong>监控计算</strong>：计算开始后，你可以用文本编辑器打开 <code>calc.out</code> 文件。文件会实时更新，你可以通过查看文件末尾来判断计算是否正常进行。当命令提示符窗口出现新的可输入行，并且 <code>calc.out</code> 文件末尾出现 <code>****ORCA TERMINATED NORMALLY****</code> 时，表示计算成功结束。</li>
</ol>
<h2>4. 实例一：简单有机分子（甲醛 H₂CO）</h2>
<p>甲醛是一个不含重元素的典型小分子，我们用它来演示最基本的SOC-TDDFT计算(默认使用SOMF处理旋轨耦合)。</p>
<h3>4.1 步骤一：基态结构优化 (可选但推荐)</h3>
<p>在计算激发态性质之前，通常需要先获得分子在基态下的稳定结构。<br />
创建一个名为 <code>formaldehyde_opt.inp</code> 的输入文件。</p>
<pre><code class="language-inp">! B3LYP def2-SVP Opt TightSCF

%pal
  nprocs 8
end

* xyz 0 1
  C    0.000000   0.000000  -0.525135
  H    0.000000   0.939879  -1.112613
  H    0.000000  -0.939879  -1.112613
  O    0.000000   0.000000   0.672004
*</code></pre>
<ul>
<li><code>! B3LYP def2-SVP Opt TightSCF</code>：这是关键词行。
<ul>
<li><code>B3LYP</code>: 使用B3LYP泛函。</li>
<li><code>def2-SVP</code>: 使用def2-SVP基组。</li>
<li><code>Opt</code>: 进行几何结构优化。</li>
<li><code>TightSCF</code>: 使用更严格的SCF收敛标准，推荐用于后续的激发态计算。</li>
</ul></li>
<li><code>%pal nprocs 8 end</code>：设置并行计算，使用8个CPU核心。请根据你的电脑配置修改。</li>
<li><code>* xyz 0 1 ... *</code>：分子坐标部分。
<ul>
<li><code>xyz</code>: 表示坐标格式为XYZ。</li>
<li><code>0</code>: 分子总电荷。</li>
<li><code>1</code>: 自旋多重度 (2S+1)，1表示单重态。</li>
<li>后面是原子和其三维坐标。</li>
</ul></li>
</ul>
<p>运行优化后，你会得到一个 <code>formaldehyde_opt.xyz</code> 文件，里面包含了优化好的结构坐标。</p>
<h3>4.2 步骤二：旋轨耦合计算</h3>
<p>使用上一步优化好的结构，创建 <code>formaldehyde_soc.inp</code> 文件。</p>
<pre><code class="language-inp">! B3LYP def2-SVP TightSCF

%pal
  nprocs 8
end

%tddft
  nroots 5
  dosoc true
  tda false
end

* xyzfile 0 1 formaldehyde_opt.xyz</code></pre>
<ul>
<li><code>! B3LYP def2-SVP TightSCF</code>：计算级别与优化保持一致。</li>
<li><code>%tddft ... end</code>：这是TD-DFT计算的设置模块。
<ul>
<li><code>nroots 5</code>：计算5个激发态。当 <code>dosoc</code>开启时，ORCA会自动计算5个单重态激发态(S₁-S₅)和5个三重态激发态(T₁-T₅)。</li>
<li><code>dosoc true</code>：<strong>这是计算旋轨耦合的核心关键词</strong>。</li>
<li><code>tda false</code>：使用标准的、完整的TD-DFT方法，而不是TDA近似。通常结果更准确。</li>
</ul></li>
<li><code>* xyzfile 0 1 formaldehyde_opt.xyz</code>：从 <code>formaldehyde_opt.xyz</code> 文件中直接读取分子坐标、电荷和多重度。</li>
</ul>
<p>运行此计算，结束后在 <code>formaldehyde_soc.out</code> 文件中就可以找到旋轨耦合矩阵元的结果了。具体如何解读，请见本文第7节。</p>
<h2>5. 实例二：重金属配合物 (Ir(ppy)₃)</h2>
<p>Ir(ppy)₃是磷光OLED中经典的绿光材料，含有重金属Ir，必须考虑相对论效应。</p>
<h3>5.1 步骤一：基态结构优化</h3>
<p>对于含重金属的配合物，优化时常用赝势基组（ECP）来替代重金属的内层电子。对于Ir这类重金属来收，def2系列基组直接采用了ECP形式，因此无需再newgto来指定ECP基组。其余基组需要基组使用规则来创建输入文件。</p>
<p>创建 <code>Ir_ppy3_opt.inp</code> 文件：</p>
<pre><code class="language-inp">! B3LYP D3BJ def2-SVP def2/J CPCM(CH2Cl2) Opt TightSCF

%pal
  nprocs 8
end

* xyz 0 1
C        3.393895879     -0.289566719      2.776304932
C        4.076284431     -1.374299959      2.244246939
C        3.562788518     -2.026286944      1.144617313
C        2.365194919     -1.600441421      0.563698783
C        1.656920791     -0.490717084      1.087023288
C        2.209908242      0.138316955      2.204838066
C        1.779556093     -2.262575837     -0.593808565
C        2.310998596     -3.397126504     -1.214621244
C        1.678633212     -3.946679457     -2.310344980
C        0.513725976     -3.353425417     -2.779039051
C        0.041132843     -2.238327622     -2.115943483
N        0.643735830     -1.703611386     -1.062120264
C       -3.228320892     -2.843015891      2.244246939
C       -1.947720074     -2.794416690      2.776304932
C       -0.985168124     -1.982995155      2.204838066
C       -1.253433856     -1.189576955      1.087023288
C       -2.568620388     -1.248098174      0.563698783
C       -3.536210228     -2.072321893      1.144617313
C       -2.849226199     -0.409852865     -0.593808565
N       -1.797238653      0.294314111     -1.062120264
C       -1.959015004      1.083541724     -2.115943483
C       -3.161014589      1.231812963     -2.779039051
C       -4.257241276      0.519600723     -2.310344980
C       -4.097497151     -0.302820240     -1.214621244
C       -0.403486935      1.680294039      1.087023288
C       -1.224740118      1.844678200      2.204838066
C       -1.446175805      3.083983409      2.776304932
C       -0.847963539      4.217315849      2.244246939
C       -0.026578290      4.098608837      1.144617313
C        0.203425469      2.848539595      0.563698783
C        1.069670107      2.672428702     -0.593808565
C        1.786498555      3.699946745     -1.214621244
C        2.578608064      3.427078734     -2.310344980
C        2.647288613      2.121612454     -2.779039051
C        1.917882161      1.154785898     -2.115943483
N        1.153502823      1.409297275     -1.062120264
Ir       0.000000000      0.000000000      0.043448572
H        3.792342787      0.222162593      3.641507453
H        5.002872009     -1.707739869      2.689139743
H        4.102575829     -2.869480849      0.738507580
H        1.696641422      0.983426029      2.641159087
H        3.213678708     -3.847263406     -0.836341679
H        2.081671478     -4.823466100     -2.794933558
H       -0.013921102     -3.747584685     -3.633027960
H       -0.865398626     -1.751267403     -2.451342694
H       -3.980382114     -3.478744318      2.689139743
H       -1.703772945     -3.395346490      3.641507453
H        0.003351213     -1.961047587      2.641159087
H       -4.536331226     -2.118194464      0.738507580
H       -1.083942747      1.625090897     -2.451342694
H       -3.238542989      1.885848371     -3.633027960
H       -5.218079916      0.608952668     -2.794933558
H       -4.938667199     -0.859495698     -0.836341679
H       -1.699992635      0.977621558      2.641159087
H       -2.088569843      3.173183897      3.641507453
H       -1.022489895      5.186484186      2.689139743
H        0.433755396      4.987675313      0.738507580
H        1.724988490      4.706759104     -0.836341679
H        3.136408438      4.214513433     -2.794933558
H        3.252464091      1.861736314     -3.633027960
H        1.949341373      0.126176507     -2.451342694
*</code></pre>
<ul>
<li><code>D3BJ</code>: 加入 Grimme 的 D3 色散校正（带BJ dampening），对于配合物这类大体系很重要。</li>
<li><code>def2/J</code>: 使用 <code>def2/J</code> 作为 RI (Resolution of Identity) 近似的辅助基组，可以加速计算。</li>
<li><code>CPCM(CH2Cl2)</code>: 使用 CPCM 溶剂化模型模拟二氯甲烷溶剂环境。</li>
</ul>
<h3>5.2 步骤二：旋轨耦合计算</h3>
<p>对于重金属，激发态计算必须包含标量相对论效应，此时需要使用全电子基组，而非优化时候的赝势基组。这里标量相对论效应有两种处理方法：ZORA/DKH。</p>
<h4>5.21 使用ZORA方法考虑标量相对论效应</h4>
<p>创建 <code>Ir_ppy3_soc.inp</code> 文件：</p>
<pre><code class="language-inp">! B3LYP ZORA ZORA-def2-TZVP SARC/J RI-SOMF(1X) CPCM(CH2Cl2) TightSCF

%basis
  newgto Ir "SARC-ZORA-TZVP" end
end

%pal
  nprocs 8
end

%tddft
  nroots 10
  dosoc true
  tda false
end

* xyzfile 0 1 Ir_ppy3_opt.xyz</code></pre>
<ul>
<li><code>ZORA</code>: <strong>使用ZORA哈密顿来考虑标量相对论效应</strong>。</li>
<li><code>ZORA-def2-TZVP</code>: 这是一个专门为ZORA方法优化的全电子基组，用于轻元素。</li>
<li><code>SARC/J</code>: 用于ZORA计算的通用辅助基组。</li>
<li><code>RI-SOMF(1X)</code>: 使用RI近似来加速SOMF方法的SOC积分计算，兼顾速度和精度。</li>
<li><code>%basis ... end</code>:
<ul>
<li><code>newgto Ir "SARC-ZORA-TZVP" end</code>: 为Ir原子指定专门适配ZORA的全电子基组 <code>SARC-ZORA-TZVP</code>。<strong>注意：在做含SOC的相对论计算时，重金属必须使用全电子基组，不能用赝势</strong>。</li>
</ul></li>
<li><code>%tddft nroots 10 ... end</code>：计算10个激发态并开启SOC。</li>
</ul>
<h4>5.22 使用DKH方法考虑标量相对论效应</h4>
<p>创建 <code>Ir_ppy3_soc.inp</code> 文件：</p>
<pre><code class="language-inp">! B3LYP DKH2 DKH-def2-TZVP SARC/J RI-SOMF(1X) CPCM(CH2Cl2) TightSCF

%basis
  newgto Ir "SARC-DKH-TZVP" end
end

%pal
  nprocs 8
end

%tddft
  nroots 10
  dosoc true
  tda false
end

* xyzfile 0 1 Ir_ppy3_opt.xyz</code></pre>
<ul>
<li><code>DKH</code>: <strong>使用DKHA哈密顿来考虑标量相对论效应</strong>。</li>
<li><code>DKH-def2-TZVP</code>: 这是一个专门为DKH方法优化的全电子基组，用于轻元素。</li>
<li><code>SARC/J</code>: 用于DKH计算的通用辅助基组。</li>
<li><code>RI-SOMF(1X)</code>: 使用RI近似来加速SOMF方法的SOC积分计算，兼顾速度和精度。</li>
<li><code>%basis ... end</code>:
<ul>
<li><code>newgto Ir "SARC-DKH-TZVP" end</code>: 为Ir原子指定专门适配DKH的全电子基组 <code>SARC-DKH-TZVP</code>。<strong>注意：在做含SOC的相对论计算时，重金属必须使用全电子基组，不能用赝势</strong>。</li>
</ul></li>
<li><code>%tddft nroots 10 ... end</code>：计算10个激发态并开启SOC。</li>
</ul>
<p>运行此计算，由于体系较大且计算级别较高，会比甲醛耗时得多。</p>
<h2>6. 实例三：周期性结构（石墨烯量子点）</h2>
<p>对于晶体、MOF等周期性结构，我们无法直接用ORCA计算。常用的方法是<strong>“团簇模型”</strong>：</p>
<ol>
<li>从周期性结构中切出一个有代表性的、足够大的团簇。</li>
<li>对于团簇边缘被切断的化学键，用氢原子进行“饱和”，以消除悬挂键带来的不合理电子结构。</li>
<li>对这个饱和后的分子团簇进行计算。</li>
</ol>
<p>这里，我们以单层石墨烯为例，构建一个 <code>C₂₄H₁₂</code> 的石墨烯量子点模型。</p>
<h3>6.1 步骤一：构建团簇模型</h3>
<p>这一步通常使用 VESTA, Materials Studio, Avogadro 等软件完成。这里我们直接提供构建好的模型坐标。这个模型可以看作是一个普通的有机分子，不含重金属。<br />
构建模型后，一般需要对用于饱和的H原子位置进行限制性优化，也就是冻结除H原子以外的所有原子进行优化。</p>
<h3>6.2 步骤二：旋轨耦合计算</h3>
<p>由于模型较大，我们可以使用计算成本稍低的泛函和基组。<br />
创建 <code>graphene_dot_soc.inp</code> 文件：</p>
<pre><code class="language-inp">! PBE0 def2-SVP def2/J RIJCOSX TightSCF

%pal
  nprocs 8
end

%tddft
  nroots 10
  dosoc true
  tda false
end

* xyz 0 1
 C   -1.22500000   -2.12176200    0.00000000
 C    1.22500000   -2.12176200    0.00000000
 C    2.45000000    0.00000000    0.00000000
 C    1.22500000    2.12176200    0.00000000
 C   -1.22500000    2.12176200    0.00000000
 C   -2.45000000    0.00000000    0.00000000
 H   -2.14500000   -3.71533400    0.00000000
 H    2.14500000   -3.71533400    0.00000000
 H    4.29000000    0.00000000    0.00000000
 H    2.14500000    3.71533400    0.00000000
 H   -2.14500000    3.71533400    0.00000000
 H   -4.29000000    0.00000000    0.00000000
 C    0.00000000   -2.83606200    0.00000000
 C    2.45000000   -1.41803100    0.00000000
 C    2.45000000    1.41803100    0.00000000
 C    0.00000000    2.83606200    0.00000000
 C   -2.45000000    1.41803100    0.00000000
 C   -2.45000000   -1.41803100    0.00000000
 C   -1.22500000   -0.70703100    0.00000000
 C    1.22500000   -0.70703100    0.00000000
 C    1.22500000    0.70703100    0.00000000
 C   -1.22500000    0.70703100    0.00000000
 C    0.00000000   -1.41406200    0.00000000
 C    0.00000000    1.41406200    0.00000000
 C    0.00000000    4.25412400    0.00000000
 H    0.00000000    5.17412400    0.00000000
 C    3.67500000    2.12176200    0.00000000
 H    4.59500000    2.12176200    0.00000000
 C    3.67500000   -2.12176200    0.00000000
 H    4.59500000   -2.12176200    0.00000000
 C    0.00000000   -4.25412400    0.00000000
 H    0.00000000   -5.17412400    0.00000000
 C   -3.67500000   -2.12176200    0.00000000
 H   -4.59500000   -2.12176200    0.00000000
 C   -3.67500000    2.12176200    0.00000000
 H   -4.59500000    2.12176200    0.00000000
*</code></pre>
<ul>
<li><code>! PBE0 def2-SVP ... RIJCOSX</code>:
<ul>
<li><code>PBE0</code>: 使用PBE0杂化泛函。</li>
<li><code>RIJCOSX</code>: 一种加速DFT计算的组合近似方法，对大体系非常有效。</li>
</ul></li>
<li>计算流程与甲醛的例子完全一样，只是分子体系变大了。</li>
</ul>
<h2>7. 详细解读ORCA输出文件中的旋轨耦合部分</h2>
<p>无论你计算的是哪个体系，解读输出文件中SOC结果的方法都是一样的。用文本编辑器打开 <code>.out</code> 文件，查看计算结果。</p>
<h3>7.1 TD-DFT 激发能</h3>
<p>在SOC部分之前，ORCA会先列出常规的TD-DFT计算结果，包括单重态和三重态的激发能。这是未考虑SOC时的结果，可见单重态和三重态是分开的，这是由于未考虑旋轨耦合时，单重态和三重态之间的跃迁几率始终为0。<br />
单重态结果：</p>
<pre><code>------------------------------------
TD-DFT/TDA EXCITED STATES (SINGLETS)
------------------------------------

the weight of the individual excitations are printed if larger than 1.0e-02

STATE  1:  E=   0.011499 au      0.313 eV     2523.8 cm**-1 &lt;S**2&gt; =   0.000000 Mult 1
   688a -&gt; 691a  :     0.045345 (c= -0.21294353)
   688a -&gt; 692a  :     0.937045 (c= -0.96801095)

STATE  2:  E=   0.011578 au      0.315 eV     2541.1 cm**-1 &lt;S**2&gt; =   0.000000 Mult 1
   688a -&gt; 690a  :     0.039691 (c= -0.19922532)
   688a -&gt; 693a  :     0.942490 (c= -0.97081944)
   688a -&gt; 695a  :     0.010863 (c= -0.10422655)

STATE  3:  E=   0.029631 au      0.806 eV     6503.2 cm**-1 &lt;S**2&gt; =   0.000000 Mult 1
   688a -&gt; 690a  :     0.040855 (c= -0.20212531)
   688a -&gt; 695a  :     0.811000 (c=  0.90055524)
   688a -&gt; 699a  :     0.131057 (c= -0.36201761)

STATE  4:  E=   0.029682 au      0.808 eV     6514.5 cm**-1 &lt;S**2&gt; =   0.000000 Mult 1
   688a -&gt; 691a  :     0.022647 (c= -0.15048828)
   688a -&gt; 694a  :     0.824565 (c= -0.90805567)
   688a -&gt; 698a  :     0.131656 (c=  0.36284478)
   688a -&gt; 700a  :     0.010673 (c=  0.10331240)
...</code></pre>
<p>三重态结果：</p>
<pre><code>------------------------------------
TD-DFT/TDA EXCITED STATES (TRIPLETS)
------------------------------------

the weight of the individual excitations are printed if larger than 1.0e-02

STATE  6:  E=  -0.023756 au     -0.646 eV    -5213.9 cm**-1 &lt;S**2&gt; =   2.000000 Mult 3
   688a -&gt; 689a  :     0.975173 (c=  0.98750825)

STATE  7:  E=   0.001091 au      0.030 eV      239.4 cm**-1 &lt;S**2&gt; =   2.000000 Mult 3
   688a -&gt; 691a  :     0.937900 (c=  0.96845245)
   688a -&gt; 692a  :     0.033122 (c= -0.18199350)
   688a -&gt; 694a  :     0.010180 (c= -0.10089691)
   688a -&gt; 698a  :     0.011507 (c= -0.10726846)

STATE  8:  E=   0.001401 au      0.038 eV      307.5 cm**-1 &lt;S**2&gt; =   2.000000 Mult 3
   688a -&gt; 690a  :     0.944689 (c= -0.97195090)
   688a -&gt; 693a  :     0.024687 (c=  0.15712210)

STATE  9:  E=   0.008003 au      0.218 eV     1756.4 cm**-1 &lt;S**2&gt; =   2.000000 Mult 3
   688a -&gt; 691a  :     0.035685 (c=  0.18890439)
   688a -&gt; 692a  :     0.955382 (c=  0.97743630)
...</code></pre>
<h3>7.2 SOC矩阵元</h3>
<p>ORCA输出单重态与三重态三个子态（磁量子数 $M_S = -1, 0, +1$）之间的耦合矩阵。</p>
<pre><code>            CALCULATED SOCME BETWEEN TRIPLETS AND SINGLETS
     --------------------------------------------------------------------------------
           Root                      &lt;T|HSO|S&gt;  (Re, Im) cm-1
         T     S           MS= 0                 -1                   +1
     --------------------------------------------------------------------------------
         1     0     (   0.00 ,  -63.78)   (  -0.00 ,    0.00)   (  -0.00 ,   -0.00)
         1     1     (   0.00 ,    0.00)   (  -0.00 ,   -0.00)   (  -0.00 ,    0.00)
         1     2     (   0.00 ,    0.00)   (   5.62 ,    0.00)   (   5.62 ,   -0.00)
...</code></pre>
<ul>
<li><strong>解读</strong>:
<ul>
<li><code>T</code> 和 <code>S</code> 列表示三重态和单重态的序号（0代表基态S₀）。</li>
<li><code>MS= 0, -1, +1</code> 分别对应三重态的三个子态。</li>
<li>每个括号里是该单重态与特定三重态子态耦合的 <code>(实部, 虚部)</code>。</li>
<li><strong>总SOC矩阵元大小</strong>: 将这一行6个数字（3个子态，每个子态有实部和虚部）全部平方求和再开根号，得到的结果就是我们需要SOC矩阵元的大小。例如，对于 $\langle T<em>1 | H</em>{SO} | S_0 \rangle$，总大小为 $\sqrt{(-63.78)^2} = 63.78$ cm⁻¹。<br />
<a href="https://www.wangsy.fun/?resource_alias=S6yy5SlaFX8hrEDH&amp;resource_filename=dfb41755250459" title="点击这里">点击这里</a>下载python写的提取旋轨耦合矩阵元的小程序，运行方式：python3 orca_soc.py XXX.out。 生成XXX.txt，里面的数据就是计算完的所有旋轨耦合矩阵元。</li>
</ul></li>
</ul>
<h3>7.3 考虑SOC修正后的光谱</h3>
<p>计算的最后，ORCA会输出一个非常重要的部分：<strong>考虑SOC修正后的激发光谱</strong>。</p>
<pre><code>-------------------------------------------
SOC CORRECTED TD-DFT/TDA-EXCITATION SPECTRA
--------------------------------------------
Generating SOC_CIS transition densities           ... done 

--------------------------------------------------------------------------------------------------------
      SOC CORRECTED ABSORPTION SPECTRUM VIA TRANSITION ELECTRIC DIPOLE MOMENTS    
--------------------------------------------------------------------------------------------------------
      Transition         Energy     Energy  Wavelength fosc(D2)      D2       |DX|      |DY|      |DZ|  
                          (eV)      (cm-1)    (nm)                 (au**2)    (au)      (au)      (au)  
--------------------------------------------------------------------------------------------------------
  0-3.0A  -&gt;  1-3.0A    0.000000       0.0     0.0   0.000000000   0.00000   0.00000   0.00000   0.00000
  0-3.0A  -&gt;  2-3.0A    0.000000       0.0     0.0   0.000000000   0.00000   0.00000   0.00000   0.00000
  0-3.0A  -&gt;  3-1.0A    0.646430    5213.8  1918.0   0.000000210   0.00001   0.00057   0.00025   0.00359
  0-3.0A  -&gt;  4-3.0A    0.676123    5453.3  1833.8   0.006709842   0.40507   0.10334   0.07064   0.62402
  0-3.0A  -&gt;  5-3.0A    0.676123    5453.3  1833.8   0.429775649  25.94526   0.83286   0.53841   4.99617
  0-3.0A  -&gt;  6-3.0A    0.676127    5453.3  1833.7   0.001908716   0.11523   0.05612   0.03633   0.33280
...
--------------------------------------------------------------------------------------------------------</code></pre>
<ul>
<li><strong>解读</strong>:
<ul>
<li>这里的 <code>Transition</code> 不再是纯粹的单重态或三重态，而是经过SOC混合后的新态。</li>
<li><code>Energy</code>: 激发能(eV/cm-1)。</li>
<li><code>Wavelength</code>: 波长（nm）。</li>
<li><code>fosc</code>: <strong>振子强度 (Oscillator Strength)</strong>。这是最重要的信息！对于原本自旋禁阻的跃迁（如 T₁→S₀），其振子强度本应为0。在这里，由于态的混合，它会获得一个非零的 <code>fosc</code> 值。这个值可以直接用来评估磷光发射的速率。</li>
<li><code>D2, DX, DY, DZ</code>: 跃迁偶极矩的平方和以及各分量。</li>
</ul></li>
</ul>
<p>只需要把Energy(eV)和fosc这两列数据拷贝到一个文件中，就可以获得棍状光谱。 对棍状光谱使用高斯或者洛伦兹展宽即可获得传统意义上的可与实验光谱对应的光谱。<br />
<a href="https://www.wangsy.fun/?resource_alias=772Ro4Q7K32B6Sq9&amp;resource_filename=2eb31755250015" title="点击这里下载">点击这里下载</a>matlab程序，用于光谱展宽。</p>
<h3>7.4 零场分裂 (Zero-Field Splitting, ZFS)</h3>
<p>对于重金属配合物，输出文件中还会包含一个名为 <code>Eigenvalues of the SOC matrix</code> 的部分。</p>
<pre><code>Eigenvalues of the SOC matrix:

   State:         cm-1            eV
      0:         0.00          0.0000
      1:     19166.96          2.3764
      2:     19201.28          2.3807
      3:     19269.86          2.3892
...</code></pre>
<ul>
<li><strong>解读</strong>:
<ul>
<li>在没有SOC时，T₁态的三个子态是能量简并的。</li>
<li>考虑SOC后，这种简并会解除，能量发生分裂，这就是<strong>零场分裂 (ZFS)</strong>。</li>
<li>在上表中，能量相近的 <code>State 1, 2, 3</code> 就对应于原来的T₁态分裂成的三个新子态。</li>
<li>ZFS的大小通常定义为能量最高和最低的子态之间的能量差。在此例中，ZFS = 19269.86 - 19166.96 = 102.9 cm⁻¹。这个值可以和实验值进行比较。</li>
</ul></li>
</ul>
<h2>参考：</h2>
<ol>
<li><a href="http://sobereva.com/462" title="使用ORCA在TDDFT下计算旋轨耦合矩阵元和绘制旋轨耦合校正的UV-Vis光谱">使用ORCA在TDDFT下计算旋轨耦合矩阵元和绘制旋轨耦合校正的UV-Vis光谱</a></li>
<li><a href="http://sobereva.com/411" title="使用Gaussian+PySOC在TDDFT下计算旋轨耦合矩阵元">使用Gaussian+PySOC在TDDFT下计算旋轨耦合矩阵元</a></li>
<li><a href="https://mp.weixin.qq.com/s/P3tr9bSF6baDl35he7wQ-g?click_id=1" title="用ORCA计算旋轨耦合矩阵元">用ORCA计算旋轨耦合矩阵元</a></li>
</ol>]]></description>
    <pubDate>Fri, 15 Aug 2025 11:35:26 +0800</pubDate>
    <dc:creator>wangsy</dc:creator>
    <guid>https://www.wangsy.fun/post/72</guid>
</item>
<item>
    <title>X射线光谱的理论模拟(芯激发态光谱模拟)</title>
    <link>https://www.wangsy.fun/post/61</link>
    <description><![CDATA[<p>[该文章已设置加密]</p>]]></description>
    <pubDate>Tue, 07 Jan 2025 22:38:52 +0800</pubDate>
    <dc:creator>wangsy</dc:creator>
    <guid>https://www.wangsy.fun/post/61</guid>
</item>
</channel>
</rss>