# hemcvalidate **Repository Path**: graviton/hemcvalidate ## Basic Information - **Project Name**: hemcvalidate - **Description**: helium geant4 - **Primary Language**: Unknown - **License**: LGPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-10-29 - **Last Updated**: 2026-01-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # readme.md ## 说明 项目分成两部分 ```bash ## c++ 部分 G4/ include/ src/ # 源代码 build/ # 构建产物 Release/ # g4test.exe 所在目录 ## python 部分 pyauto/ src/ pyauto/ # 源代码, python package 格式 config/ # json配置文件 pydantic model scripts/ # 真正干活的脚本 __init__.py # 自动注册所有 task 函数到 router energyscan.py # 批量运行 geant4, 扫描能量点 plotnpz1D.py # 对 geant4 输出的 .npz 作图 findpeaks.py # 从数据搜索 peaks 的位置 templates/ # jinja2 模板, 用于生成 geant4 macros g4_macro.j2 utils/ # python 辅助 class, functions main.py # 脚本, 运行 各种 后处理任务 config.json # 默认配置文件路径, 与 main,py 同目录 tests/ # pytest 测试 logs/ # python dump 各种内部状态, debug post/ # python batch 和 后处理目录 macros/ # geant4 输入文件, 日志文件 g4out/ # geant4 scorer 输出数据 result/ # python 脚本输出结果目录 ## 一些单独的小脚本, 主要是 dev, debug 使用 pyscripts/ ``` - 本项目通过 装饰器 `@router.register()`, 将函数自动注册到 dict 中, 然后根据 `config.json` 中 `/call/../func` 的值, call 对应名称的函数, 例如 ```python ## 注册了名称为 energyscan 的函数 @router.register() def energyscan(config: HEMCConfig): ``` - 函数参数就是整个 `config.json` 反序列化对应的 pydantic 数据模型, 数据模型具体定义见 `pyauto/src/pyauto/config/models.py` - `config.json` 对应 `class HEMCConfig` ## 单位制 MeV, 保留两位小数 mm, 保留两位小数 ## 项目开发环境工具 - c++ 部分使用 conan2, cmake, ninja, clangd 作为开发工具链 - python 部分使用 uv 作为开发工具 ### 安装 uv 使用 curl 下载脚本并通过 sh 执行: ```bash curl -LsSf https://astral.sh/uv/install.sh | sh ``` 如果系统没有 curl,可以使用 wget: ```bash wget -qO- https://astral.sh/uv/install.sh | sh ``` 通过在 URL 中包含版本号来请求特定版本: ```bash curl -LsSf https://astral.sh/uv/0.7.4/install.sh | sh ``` ### 使用 uv 安装 conan2 ```bash uv tool install conan ``` ## 编译, 运行 - 需要先编译 c++ 项目,生成对应的 `g4test` executable 给 python 项目调用. - c++ 编译流程见子目录的 readme.md ## 服务器运行 ```bash tmux ls ## new named session tmux new -s heli ## attatch session tmux attach -t heli ## detach session Ctrl+b d ``` ## G4 约定 cylinder, 多维数组 Dump 的坐标次序是 iZ, iPHI, iR, 按照 `C` 约定 iZ 变化最慢, iR 变化最快 ```bash # mesh name: mesh2 # primitive scorer name: LDose_ZAll # iZ, iPHI, iR, total(value) [Gy], total(val^2), entry ```