前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Geant4--root和csv文件存储

Geant4--root和csv文件存储

作者头像
梁佐佐
发布2020-10-10 17:17:02
2.7K1
发布2020-10-10 17:17:02
举报
文章被收录于专栏:人芳觅

root直方图适合数据统计;csv文件适合原始数据保存。

01

Geant4调用root/csv文件存储格式方法

a) 在/include/中添加文件MYHistoManager.hh:

代码语言:javascript
复制
#ifndefMYHistoManager_h
#defineMYHistoManager_h 1
#include"globals.hh"

#include"g4root.hh" //选择root
//#include"g4csv.hh"//选择csv
//#include"g4xml.hh"   
#endif

b) 在/src/MYRunAction.cc中#include"MYHistoManager.hh":

MYRunAction初始化结构体中:

代码语言:javascript
复制
MYRunAction::MYRunAction()
: G4UserRunAction()
{
auto analysisManager =G4AnalysisManager::Instance();
G4cout << "Using " <<analysisManager->GetType() << G4endl;
//analysisManager->SetNtupleMerging(true);
analysisManager->SetVerboseLevel(1);
analysisManager->SetFileName("myfile");
analysisManager->CreateH1("Eabs","Edepin absorber", 100, 0., 200*MeV); 
//analysisManager->CreateH3("Eabstest","Edepin test", 100, 0., 200*MeV,100, 0., 200*MeV,100, 0., 200*MeV); 
analysisManager->CreateNtuple("tuple","Edep"); 
analysisManager->CreateNtupleDColumn("Eabs"); 
analysisManager->FinishNtuple(); 
}
       在run开始之前打开文件输出流:
void B1RunAction::BeginOfRunAction(constG4Run*)
{
auto analysisManager =G4AnalysisManager::Instance();
// Open an output file, its name can beoverwritten in a macro
analysisManager->OpenFile();
}
       在run结束时将统计量写入文件:
void B1RunAction::EndOfRunAction(constG4Run* run)
{
auto analysisManager =G4AnalysisManager::Instance();
analysisManager->Write();
analysisManager->CloseFile();
}

c) 在/src/MYSteppingAction.cc或MYEventAction.cc读取数据:

代码语言:javascript
复制
void MYEventAction::EndOfEventAction(const G4Event*evt)
{
auto analysisManager =G4AnalysisManager::Instance();
if (fEdep>0.)
{
analysisManager->FillH1(0, fEdep);
analysisManager->FillNtupleDColumn(0,fEdep);
analysisManager->AddNtupleRow();
}
}

d) 对于csv文件,不支持*.mac中修改名字,也不支持NTuple多线程合并,但支持histogram合并:

假设有8个线程G4WT0~7,运行完* run1.mac之后将会生成一个myfile_h1_Eabs.csv,其中存储了一个直方图;还有一个myfile_nt_tuple.csv(数据内容为空),和8个myfile_nt_tuple_t0~7.csv,对应存放了各个线程的抽取信息。

--与root直方图相对应,打开myfile_h1_Eabs.csv会看见数值格式的直方图。

图1 root直方图内容

图2 csv文件存储的直方图内容

其中,

entries:当前bin获取了多少个满足信息抽取条件的数据,对应hist中的Y轴counts;

Sw:每个数据填充时配置权重weight(默认为1),当前bin中所有数据的权重和;

Sw2:当前bin中所有填充数据权重平方的和;

Sxw0:当前bin中所有数据的和,w0表示w的0次幂(=1);

Sx2w0:当前bin中所有数据的平方的和;

--而8个myfile_nt_tuple_t0~7.csv中的数据个数总共为17个,对应hist中的Entries。

02

扩展阅读

a) Geant4 User's Guide->Analysis->g4tools

b) https://geant4-forum.web.cern.ch/t/making-more-than-one-csv-file/1933

c) Analysis Tools in Geant4 10.2 and10.3:https://gbarrand.github.io/documents/g4analysis_2.pdf

d) https://www.slac.stanford.edu/xorg/geant4/CNL2019/HandsOn4/

03

多线程下NTuple生成多个的csv文件的处理

a) 删除多个线程生成的多个csv文件的标头:

将目标*.csv移到同一个文件夹下;

find*.csv |xargs sed -i '1,5d'。

b) 合并多个csv文件:

cat*.csv > full.csv。

流程示意如图3图4所示:

图3 命令行演示csv数据文件的处理

图4 多个csv文件中的数据合并

04

总结展望

Root和csv文件流的优点在于它们的多线程管理能力,对于直方图两者均能在EndofRunAction中实现数据合并;而对于ntuple原始数据的存储,root总会在数据流实例打开的时候自动存入数据,如果不满足条件则填充0,csv则是每个线程互不干涉,只保存筛选数据,后期经过简单处理每个线程的csv文件,即可获得预期数据列表。

总结来看:如果倾向数据统计,则root直方图直接存储合理;倾向于保存原始数据,csv文件存储更高效,方便后续做集中数据处理分析。

下期内容:

1)通过ParticleGun实现球(壳)状体积源的模拟。

图5 球状体积源

2)给一个brain模型,包括了左右脑、小脑、垂体等6个小模块,obj格式。

图6 人脑模型

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-10-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 人芳觅 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档