Geant4中报错:“已放弃(核心已转储)”可能的原因
- 问题描述:
在模拟50亿粒子(多于20亿)run.mac中单个Run只能最多模拟20亿 - 错误截图:

- 错误原因:
超过EventID的最大数量 也就是int定义的数量 - 解决方案:
对Run进行计数 不同的Run生成不同的文件 每个run最多含有20亿的粒子
RunAction中输出 RunID
点击查看代码
void RunAction::BeginOfRunAction(const G4Run* aRun)
{
G4RunManager::GetRunManager()->SetRandomNumberStore(false);
//获得runID
fhisto->SetRunID(aRun->GetRunID());
//输出当前runID
printf("!!!!!!!!!!!RUN!!!!!!!");
G4cout<<aRun->GetRunID()<<G4endl;
fhisto->Book();
}
HistoManger中使用RunID判断 并分别输出root文件
点击查看代码
//输出对应的文件
G4bool fileOpen = analysisManager->OpenFile(fFileName+"_"+suffix1+"_sp"+suffix2);
G4cout<<"##########"<<suffix2<<"###########"<<G4endl;
//创建画布
if(suffix2=="0")
{
analysisManager->CreateH1("ssp0", "sspEne", 256, 0, 0.662*MeV); //Id=0
analysisManager->CreateH1("lsp0", "lspEne", 256, 0, 0.662*MeV); //Id=1
}
if(suffix2=="1")
{
analysisManager->CreateH1("ssp1", "sspEne", 256, 0, 0.662*MeV);
analysisManager->CreateH1("lsp1", "lspEne", 256, 0, 0.662*MeV);
}
if(suffix2=="2")
{
analysisManager->CreateH1("ssp2", "sspEne", 256, 0, 0.662*MeV);
analysisManager->CreateH1("lsp2", "lspEne", 256, 0, 0.662*MeV);
}
修改后的效果:可见有三个result_0_sp0.root 数据组合即可

本文作者:绿巨鼠
文字编辑:Geant4Cat
本文链接:https://www.cnblogs.com/Geant4/articles/16445466.html
⛔转载请附上Geant4Cat的原文链接,并通过 E-mail 等方式告知,谢谢!否则举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?