# 高通量筛选与扩胞项目 ## 环境配置需求 项目需要配置两个 Conda 环境,名称分别为 **screen** 和 **zeo**。 ### 1. zeo 环境 (用于几何结构分析) * **Python**: 2 * **核心库**: `zeo++` (需编译), `pymatgen==2018.12.12`, `numpy==1.16.6` * **其他**: `os`, `argparse`, `PrettyTable`, `monty`, `future` ### 2. screen 环境 (用于逻辑筛选与数据处理) * **Python**: 3.11.4 * **核心库**: `pymatgen==2024.11.13`, `pandas` (新增,用于处理CSV) ## 快速开始 1. **数据准备**: * 如果数据来源为 **Materials Project (MP)**,请将 CIF 文件放入 `data/input_pre`。 * 如果数据来源为 **ICSD**,请直接将 CIF 文件放入 `data/input`。 2. **运行**: * 确保已创建上述两个 Conda 环境。 * 在根目录下运行自动化脚本: ```bash bash main.sh ``` ## 处理流程详解 ### Stage 1: 预处理与基础筛选 (Step 1) * **Pre-process**: 清洗数据,统一放入 `input` 文件夹。 * **Step 1**: * 读取 CIF 文件,利用 `crystal_2` 库检查电荷平衡与化学式。 * **文件重组**: 将通过筛选的文件按阴离子类型分类。 * **新结构**: 每个材料拥有独立的文件夹(例如 `after_step1/O/141/141.cif`),便于管理后续的计算日志。 * **Make SH**: 自动生成用于调用 Zeo++ 的 `analyze.sh` 脚本。 ### Stage 2: Zeo++ 计算 * 切换至 `zeo` 环境。 * 计算材料的孔径 (Percolation diameter)、比表面积等几何参数。 * 结果输出为每个文件夹下的 **`log.txt`**。 ### Stage 3: 数据提取与联合筛选 (Step 2-4) * **数据提取 (`extract_data.py`)**: * 自动遍历所有文件夹中的 `log.txt`。 * 提取关键参数:`Percolation Diameter` (Step 2), `Minimum of d` (Step 3), `Maximum Node Length` (Step 4)。 * 结果汇总为 CSV 文件保存在 `output/` 目录下(例如 `output/O/O.csv`)。 * **联合筛选 (`step2_4_combined.py`)**: * 读取 CSV 文件,根据预设的阈值(如 O: Perc>0.5, Min_d<3.0, Node>2.2)进行过滤。 * **结果**: 将符合所有条件的材料,以**软链接**的形式汇聚到 `data/after_screening` 文件夹中。 --- ## 扩胞逻辑 (Step 5 - 待后续执行) 目前扩胞逻辑维持原状,基于筛选后的结构进行处理。 ### 算法分解 1. **读取结构**: 解析 CIF 文件。 2. **统计 Occupation**: * 将具有相同 Occupation 值的原子归为一类。 * 生成 `Occupation_list` 字典。 3. **计算扩大倍数**: * 根据 Occupation 的分子分母情况(如 0.5 对应 1/2),计算公约数。 4. **生成结构列表**: * 根据分子与分母生成 `structure_list`。 5. **对称性处理与扩胞**: * 根据材料结构的对称性,生成三个方向的扩胞列表 (如 `{"x":1, "y":2, "z":1}`)。 6. **生成新文件**: * 结合 `structure_list` 与扩胞倍数生成最终的超胞 CIF。 ### 假设条件 * 只考虑两个原子在同一位置上的共占位情况。 * 不考虑 Li 原子的共占位情况,对 Li 原子不做处理。