-
Zhou Zhihao authored
- /src/MyPhysicsMessenger.cc - /README.md - /README_English.md
291183ff
README.md 3.13 KiB
G4EmCaptureCascadeWithMudirac
项目简介
Geant4默认使用波尔模型计算mu-和介子被原子俘获后跃迁释放的能量,仅仅使用缪子的质量替换电子的质量。这个模型计算得到的Muonic X-ray的能量与实验得到的结果存在一定的偏差,ISIS的研究人员开发的mudirac程序能够提供更好的结果。本项目使用mudirac计算得到Muonic X-ray的能量替换原有的使用玻尔模型计算得到的能量。
生成数据的方式
- 从下面的仓库下载并编译mudirac。编译完成后,配置环境变量,将mudirac/bin的路径添加到PATH中
https://github.com/muon-spectroscopy-computational-project/mudirac - 使用PythonScripts中的脚本多进程地生成数据文件
python3 PythonScripts/ParseOutputToDat.py N(N是可用的核心数,N is the number of available CPU cores)
python Xrout2Data.py N(N是可用的核心数,N is the number of available CPU cores) - 默认情况下,上述脚本执行完成后,会在PythonScripts中创建一个muonicxraydata子文件夹,且所有可用的数据都被保存在这个子文件夹中。如果要修改默认位置,可以修改Xrout2Data.py中的路径。
使用方式
- 编译生成共享对象(shared object)即.so文件
mkdir build
cd build
cmake ..
make - 在自己的项目中使用此动态链接库
- 在PhysicsLists被初始化之前,创建一个MyPhysics对象,并调用RegisterPhysics成员函数
MyPhysics* myPhysics = new MyPhysics;
physicsList->RegisterPhysics(myPhysics); - 修改自己的项目的CMakeLists.txt,添加当前项目的include路径并使自己的target链接到本项目产生的.so文件;
- 将.so文件的路径添加到环境变量LD_LIBRARY_PATH之后以使得程序可以找到该.so文件
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:xxx(xxx表示编译本项目生成的.so文件所在的文件夹的绝对路径) - 在宏文件中添加命令行
使用Mudirac的文件
/EmCaptureCascade/mudirac/useData true
使用Geant4默认的过程
/EmCaptureCascade/mudirac/useData false
- 设置环境变量,配置环境变量MUONCAPCAS_DIR,指定mudiracdata的路径
export MUONCAPCAS_DIR=xxx/mudiracdata
这个路径既可以是自己运行Xrout2Data.py得到的数据的路径,也可以是解压mudiracdata得到的数据的路径。
示例
以G4beamline-3.06为例
- 在${g4bl_source_path}/g4bl/BLCMDphysics.cc中引入头文件MyPhysics.hh
- 在 G4VModularPhysicsList pl = dynamic_cast<G4VModularPhysicsList>(physicsList);下面添加
MyPhysics* myPhysics = new MyPhysics();
pl->RegisterPhysics(myPhysics); - 修改${g4bl_source_path}/g4bl/CMakeLists.txt
1> 添加include_directories(/path_to_MyMuonMinusAtomicCapture/include)和link_directories(/path_to_libMyMuonMinusAtomicCapture.so) 2> 修改
target_link_libraries(g4bl ${LIBS})
为
target_link_libraries(g4bl ${LIBS} libMuDiracMuonMinusAtomicCaptureCascade.so) - 编译G4beamline
- 在输入文件中添加/EmCaptureCascade/mudirac/useData true,进行测试。