前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >回答某一个同学Geant4问题;建立了一个Geant4群聊,欢迎大家来踩

回答某一个同学Geant4问题;建立了一个Geant4群聊,欢迎大家来踩

作者头像
梁佐佐
发布2020-09-04 17:28:06
9840
发布2020-09-04 17:28:06
举报
文章被收录于专栏:人芳觅人芳觅

一:

要想熟练得使用Geant4,C++的基本知识是要掌握的,其学习参考教材可任意选,刚入门的同学推荐比较薄的谭浩强版本《C++面向对象程序设计》,网上资源也丰富,比如:https://blog.csdn.net/zdh1995/article/details/78215863,一个星期左右就能把基础知识了解的差不多,然后再买本C++ primer(白皮的)有时间就慢慢看。在C++中,类/对象可以看作是一种带有很多自定义函数的数据类型(像int,double等),这个概念本身简洁,但需要啃一啃C++基础知识才印象深刻。类是一种特殊的类型,带有成员函数,成员变量(某一C++大佬是这么官方解释的)。

好啦,让我们回到要解决的问题本身,“为什么我在B1SteppingAction.hh中已经定义了fEventAction这个变量,但却无法在B1SteppingAction.cc中正常使用fEventAction ->AddEdep()函数?”。

解决方案是:

1. 在B1SteppingAction.hh中定义fEventAction这个变量,注意fEventAction的数据类型是B1EventAction;

2. 在直接定义fEventAction这个对象指针的类(B1EventAction.hh)中,声明AddEdep()这个函数。

用C++的语法解释分析这个问题,答案是:

1. fEventAction->AddEdep(),表明fEventAction是某一个对象(B1EventAction)的指针,而AddEdep()是该对象中声明的一个public函数;

2. B1SteppingAction.hh中声明fEventAction时,一定要先囊括B1EventAction这个对象/类,然后在private:中定义fEventAction,即B1EventAction*fEventAction;

3. 在B1EventAction.hh中,声明定义AddEdep()这个函数。

Geant4中具体的代码表现为:

总结来看这个问题:1)在调用某个对象指针的函数功能时,确保该对象指针的声明是合理的;2)G4中,SteppingAction中可以调用EventAction中的函数或变量,而EventAction中可以调用RunAction中的函数变量,即细节上的信息总是统计给上一级的没那么细节的目标,具体的调用关系参见往期教程。

另外,Geant4.9.6版本与Geant4.10往后的版本相比较,最明显的改动是4.10后的“多线程RunManager”和4.10后的#include"G4SystemOfUnits.hh"。

二:

Geant4的学习入门,两三个月是需要的,熟练掌握B1例子至关重要,包括其中涉及的基本C++语法。然后过了这个阶段后,就需要考虑怎样发挥主观能动性去干实际的项目?通常的途径包括:1)找学长学姐要往届的例子;2)学会谷歌检索(关键词当然得英文),此公众号后台回复“学术”即可获得教程,真是无比感谢那些无偿作技术分享的人;3)多看Geant4自带的例子。

ROOT同样是开源的数据分析工具,题主目前尝试用ROOT画一遍常见的SCI论文数据插图,并将于今年年底前发送全部例子和代码。ROOT的学习套路与G4一模一样,大家坚持。

应几位同学的呼声,刚建了个微信群聊,群里大佬很多,欢迎大家加入,具体说明见简单的群公告。

喜欢的话,分享一下吧~^o^~

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档