宇宙线 Geant4 模拟 (ver. 0.1)
对老师给的 ReadMe 的补注
注: 该部分原始放在 cosmic01
账户的 ~/
(home
) 文件夹下的: hey-if-you-donnot-get-understand-yet-look-at-me.txt
的文件中. 你可以直接阅读该文件, 或者你也可以选择直接看这个. 不知道为什么我登陆不上去, 估计是被拉黑了, 或者是服务器寄了, 希望不会
- 按下面命令进行操作:
cd ~
mkdir debug
cd debug
cmake ../class
make
里面的 cmake ../class
需要修改为 cmake ../cosmic
, 因为文件夹名称不一样.
注: ~
下的文件应该有类似如下的结构:
ReadMe
cosmic
├── CMakeLists.txt
├── G4History.macro
├── GNUmakefile
├── History
├── build
├── cxb.mac
├── exampleB1.cc
├── exampleB1.in
├── exampleB1.out
├── include
├── init_vis.mac
├── run1.mac
├── run2.mac
├── run3.mac
├── src
└── vis.mac
(可选的) 步骤 2 中的 debug
文件夹名称真的是可以随便取的
(可选的) 如果你觉得对于直接运行 ./exampleB1
那一堆截图得到的结果不太好看的话 (下面是一个可能的截图例子, 建议你别抄):
如果你觉得这个截图里面的宇宙线径迹太稀疏, 你可以设置粒子源的尺寸让它比较集中一点, 比如: /mySimulation/gun/setSiz 5 5 0 cm
(和 run3.mac
里面的设置一样, 只是能量不同). 效果大概如下:
这样做感觉没啥别的作用, 但是会好看一点.
注: 虽然理论上应该是延长探测时间, 增加探测事例数 /run/beamOn 1000
之类的, 但是缺点就是算起来慢, 所以不建议.
(曲线救国) 在 ReadMe 中说使用 TBrowser b
可以开启图形界面, 但是你在运行 root cosmicTelescope.root
的时候, 如果遇到了 Error: cannot open directory: localhost:13.0
的报错, 那么你可以通过设置端口转发的方式来通过自己的游览器来打开 ROOT 的图形界面 (Web).
在不同系统上使用 SSH 进行端口转发的一些方法:
macOS/Linux 上使用终端:
ssh -L 8877:localhost:8877 用户名称@服务器地址
Windows 上使用 XManager 等工具:
(图片来源: Using X11 forwarding)
假如你是穷逼, 在 Windows 下可以考虑使用 PuTTy (SSH 用) 和 vcxsrv (X11 Forwarding 用) 来做, 缺点就是麻烦一点而已. 你也可以参考一下: Installing/Configuring VcXsrv and PuTTy.
下载好两个软件
配置好服务器连接地址和用户名, 密码等信息
(图片来源: How to Use PuTTY on Windows, 填 Host Name, Port, 设置为 SSH 连接. )
请参考 putty ssh forwarding
等关键词搜索的结果配置你的服务器连接设置, 这里给出一个链接以供参考: How to use X11 forwarding with PuTTY.
(图片来源: How to use X11 forwarding with PuTTY, 直接打开 X11 forwarding, 注意在 X display location 这里需要填写安装 VcXsrv 后并运行该软件后告诉你的端口号)
配置端口转发:
(图片来源: Set Up SSH Port Forwarding in Putty, 在 Source port 里面填远程服务器对应的端口, Destination 里面填本地对应的端口)
其他工具请自行搜索关键词: ssh forward
, ssh 端口转发
等.
在设置好端口转发后, 使用 root cosmicTelescope.root --web=server:8877
来运行 ROOT, 然后在输入 TBrowser b
后, 在自己的电脑的游览器中访问 http://localhost:8877/win1/
即可.
注: 如果你恰好是欧皇, 在使用的过程中和别人恰好撞了端口, 你可能会发现自己的端口无法映射之类的问题, 如果你懒的话, 可以直接等一等, 或者你可以修改端口映射方案, 下面是一个模版:
ssh -L 服务器上的端口号:localhost:本地电脑的端口号 用户名@服务器地址
, 然后在本地电脑访问游览器的地址为: http://localhost:本电脑的端口号/win1/
. 理论上这两个端口号你可以填任意的数字. (但是应该不能为 22
, 80
, 2200
, 8800
)
注: 其实不应该算是曲线救国了, 因为我仔细阅读了一下 ROOT 的报告信息, 这样使用 SSH 进行端口转发应该才是官方推荐的标准做法:
ROOT web-based widget started in the session where DISPLAY set to localhost:11.0. Means web browser will be displayed on remote X11 server which is usually very inefficient. One can start ROOT session in server mode like "root -b --web=server:8877" and forward http port to display node.
(曲线救国 ver.2) 你可以使用 scp
命令把结果文件拷贝到本地, 然后在本地使用自己的 ROOT 程序进行分析, (仅限于已有 ROOT 程序, 或者以后会用到 ROOT 的同学, 或者比较闲愿意安装一个 ROOT 的同学)
scp 服务器用户名@服务器地址:~/到/你的/文件/的/路径/地址 /你/本地/的/文件/地址
注: 为什么你会需要进行这样的曲线救国的方法? 应该是服务器端的游览器没有配置好? 或者是别的什么的问题, 因为我用自己的电脑跑并没有出现报错.
注: 先鸽一会, 服务器登不上去, 实在不行我跑自己的电脑给大伙截个图. 手动狗头
假设你运行起来了 ROOT 的界面, 大概如下图所示:
以及一些更加详细的一些说明:
注: 显然你可以通过在画布 (canvas) 上右键 - Save as canvas png 来保存截屏, 保存的图片会放在你游览器的下载目录下面.
以及对于曲线拟合这样的更加稍微复杂一些的操作:
首先还是在要操作的对象 (这个时候就是绘制出来的一维直方图 TH1) 上右键, 然后选择 TH1
子菜单下的 Fit
的拟合操作.
根据你拟合需要的函数类型, 你需要在接下来的拟合菜单里面填入需要拟合用的一些参数:
这里用的是指数拟合, 不过你也可以用其他的拟合方法和拟合参数, 常见的 ROOT 中预设的有:
然后, 你应当可以看到一条比较优雅的拟合曲线:
当然, 你可以修改 frame 的设置来改变对拟合结果的显示与否, 以及修改拟合曲线的颜色之类的, 不过那个就是另外的问题了.
ROOT 拟合的第二种方法
(暂时存疑的) 在 ReadMe 中的 4, 5, 6, 7 中的截屏保存三维模拟结果的部分我不太能够看到一个合理的三维图像输出, 目前怀疑是我的 XQuartz 的问题, 我会在用本机跑一遍之后再更新如何解决这个问题的方法.
啊, 一个坏消息, 貌似是这样的, XQuartz 没法很好地渲染出元件. 所以如果你恰好和我一样, 在使用过程中没法使用 ssh -Y
来访问 X Server 提供的软件窗口中的 3D 渲染的话, 你可以试试看换一个 X Client (比如用 Windows 的 XManager 之类的类似软件, 换一个电脑等操作来试试; 或者在自己的电脑上安装一个 Geant4 也不是不行. )
(没啥必要的) 如果你想要在自己的电脑上也安装 Geant4 的话 (对于粒子物理探测器方向的同学应该是比较推荐的), 可以参考 Build Geant 4 on macOS 的说明来配置 Geant 4.
注: 唯一需要注意的是, Geant 4 的数据可能比较难下载 (约 2 GB 左右, 看网速了), 因为可能会有网络问题, 不过这个大家可以各显神通.
修改 MyDetectorConstruction.cc
中的探测器构建过程:
G4VPhysicalVolume *MyDetectorConstruction::DefineVolumes
:
if (detSettings == 1) {
nDetector = 9;
detSiz = {20 * cm, 5 * cm, 100 * cm};
detPos = {{-22 * cm, 140 * cm, 0}, {0, 140 * cm, 0}, {22 * cm, 140 * cm, 0}, {-22 * cm, 40 * cm, 0}, {0, 40 * cm, 0}, {22 * cm, 40 * cm, 0}, {-22 * cm, 0 * cm, 0}, {0, 0 * cm, 0}, {22 * cm, 0 * cm, 0}};
} else if (detSettings == 2) { // settings for 2X1 detectors
nDetector = 2;
detSiz = {22 * cm, 5 * cm, 15 * cm};
detPos = {{pos[0][0], pos[0][1], pos[0][2]}, {pos[1][0], pos[1][1], pos[1][2]}};
} else { // settings for 5x1 detectors
nDetector = 5;
detSiz = {22 * cm, 5 * cm, 15 * cm};
detPos = {{0, 0, 0}, {0, 20 * cm, 0}, {0, 40 * cm, 0}, {0, 60 * cm, 0}, {0, 80 * cm, 0}};
}
模拟结果如下:
在 cosmicTelescope.root
中的 ElossLayer0
到 ElossLayer4
为五个探测器的能量-事例数分布记录谱. 但是为了要能够计算计数率, 应当对事件进行区分? 诶, 好麻烦.