在运行我们前面的模拟代码中,是否发现一个现象
这将会造成一个问题:如果总共需要模拟 10 亿个事件,分 10 次运行,每次运行 1 亿个事件。那模拟结果将是 1 亿个模拟事件的 10 倍重复。
这是因为默认随机数种子是与电脑硬件相关的,每个电脑是一个固定值(不同电脑不同),因此由该随机种子产生的随机数序列每次都一样。避免这个问题的一个简单方式是人为每次设置不同的随机种子。一个简单的方式是随机种子与当前程序执行的时刻相关联,那么不同次运行时的随机种子就不一样。
main.cc
#include "Randomize.hh"
int main(int argc,char** argv)
{
G4Random::setTheEngine(new CLHEP::RanecuEngine);
G4int seconds = time(NULL);
G4Random::setTheSeed(seconds);
// 这里省略
}
```bash
## 设置运行模拟的事件数
/run/beamOn 1000000
```
```cpp
// 设置模拟事件数
G4MTRunManager::BeamOn(int )
```
由于设置模拟的事件数类型为 int 型,因此一次 Run 最大的事件数为 2147483647。
如果某个 4000000000 个事件的模拟,最少需要分成两次 2000000000 的 Run
!date
!jupyter nbconvert Random.ipynb --to html
2022年 05月 08日 星期日 13:14:46 CST [NbConvertApp] Converting notebook Random.ipynb to html [NbConvertApp] Writing 561799 bytes to Random.html