专栏首页人芳觅回答某一个同学Geant4问题;建立了一个Geant4群聊,欢迎大家来踩

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

一:

要想熟练得使用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^~

本文分享自微信公众号 - 人芳觅(lililiangzuozuo),作者:梁佐佐

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-08-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Geant4-怎样设置你的粒子源--精简注释+收藏版

    一个通用的粒子发生函数源文件,即MYPrimaryGeneratorAction.cc大致就是本文的全部了。同现实场景相符,你需要知道每个发射的模拟粒子的特点,...

    梁佐佐
  • Geant4--G4ParticleGun定义射线源的发射能谱

    “ G4ParticleGun作为Geant4模拟中常用的粒子产生器,本文代码讲解怎样模拟发射符合自定义能量分布的粒子。”

    梁佐佐
  • ROOT-数据读取-直方图-Roofit拟合基本流程-(入门实用)

    笔者最近在测核素能谱,测出的能谱需要分析,比如计算某全能峰的分辨率。用到的数据处理分析工具是ROOT(cern),整个能谱读取分析的流程可给各位看官当入门或干货...

    梁佐佐
  • Excel简单应用

    对应函数=IF(AND(B13=1,C13=1)=TRUE,"男神",IF(AND(B13=1,C13=0)=TRUE,"靠脸吃饭",IF(AND(B13=...

    hankleo
  • Flutter中的常见表单组件

    在Flutter中,常见的表单组件有TextField单行文本框、TextField多行文本框、CheckBox、Radio、Switch、CheckBoxLi...

    拉维
  • 写给前端工程师的 Serverless 入门

    Serverless 是前端圈近两年比较火热的词汇,但其第一次被提出已经是 7 年前的事情,那么什么是 Serverless 服务,其架构由哪些部分组成,又有什...

    政采云前端团队
  • ZK实现分布式锁

    上一篇说了ZK是什么以及能干什么,今儿这篇就来用ZK实现分布式锁,分别用java原生的zookeeper客户端、ZKClient实现。

    Liusy
  • CSS3新特性应用之用户体验

    一、光标 新增加not-allowed光标,不允许访问 隐藏光标,在触模应用上很有用,css2.1需要一个透明的图片来实现,而css3直接用cursor:non...

    sam dragon
  • 这次只学一点 Rust 语法大概不会怀孕了吧(2)

    本文来自喵哥的知乎:https://zhuanlan.zhihu.com/p/105733343

    MikeLoveRust
  • 游戏服务器端有什么特别

    在游戏服务器端开发所有要面对的问题中,有两个是最核心和最普遍的:一是和客户端的通讯;二是游戏登录用户的数据处理。

    韩伟

扫码关注云+社区

领取腾讯云代金券