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

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

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

一:

要想熟练得使用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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
geant4入门讲解篇-2
让我们继续以B1例子为主,讲解Geant4的模拟流程。如下图所示,Run是由多个Event组成的,PrimaryGenerator每执行一次,就会产生一个独立的Event,每个Event又是由多个Step组成的。Step是物理过程反应的最小模拟单元,从长度上可以小到nm甚至fm,可以通过蒙卡抽样得到当前传输粒子发生某种物理过程的信息,比如是否发生了光电效应,如果是,则会产生次级粒子即有动能的自由电子,然后继续模拟抽样该电子的物理过程,比如发生电离,沉积了多少能量等。
梁佐佐
2020/09/04
1.6K0
geant4入门讲解篇-2
八、特殊成员
在C++中,静态成员是属于类的变量或函数,而不是属于类的某个特定对象的。这意味着无论创建了多少个类的对象,静态成员只有一份拷贝。静态成员在类的所有对象之间共享。
用户11332765
2024/10/28
550
一步步分析-C语言如何面向对象编程
在嵌入式开发中,C/C++语言是使用最普及的,在C++11版本之前,它们的语法是比较相似的,只不过C++提供了面向对象的编程方式。
IOT物联网小镇
2021/05/13
9020
一步步分析-C语言如何面向对象编程
C++教程(凯格尔训练法教程)
七种基本的C++数据类型:bool、char、int、float、double、void、wchar_t 类型修饰符:signed、unsigned、short、long 注:一些基本类型可以使用一个或多个类型修饰符进行修饰,比如:signed short int简写为short、signed long int 简写为long。
全栈程序员站长
2022/08/01
3K0
C++教程(凯格尔训练法教程)
【C++进阶学习】第二弹——继承(下)——挖掘继承深处的奥秘
继承(上):【C++进阶学习】第一弹——继承(上)——探索代码复用的乐趣-CSDN博客
GG Bond1
2024/06/18
1280
【C++进阶学习】第二弹——继承(下)——挖掘继承深处的奥秘
【专业技术】C++虚函数的缺省参数
编者按:缺省参数,缺省函数,缺省构造函数,如果你有些迷糊,本文可以让你把它看个清楚。呵呵。 前些日子,有个同学问我一个关于虚函数的缺省参数问题。他是从某个论坛上看到的,但是自己没想通,便来找我。现在分享一下这个问题。先看一小段代码: #include <iostream> using namespace std; class A { public: virtual void Fun(int number = 10) { cout <<
程序员互动联盟
2018/03/14
1.3K0
《逆袭进大厂》之C++篇49问49答(绝对的干货)
,这些都是我自己整理的秋招笔记,一把屎一把尿慢慢总结出来的那种,这些笔记可以说对我帮助良多。
拓跋阿秀
2021/03/21
2.6K0
一个优秀的程序员应该养成哪些好的习惯?
多次担任技术面试官,遇到很多优秀的名校毕业生。凡此种种,从自己和别人身上总结出如下一些好的习惯。
范蠡
2023/01/04
1.4K1
一个优秀的程序员应该养成哪些好的习惯?
【c++】基础知识——快速入门c++
c++是在c语言的基础上,增加了面向对象编程、引用、函数重载、模板库STL等新特性,使得c++成为一门功能强大、灵活多变的语言。c++在语法上兼容大部分c语言,因而学习了c语言之后,会对c++学习有一定的帮助。相比java,c++语法的学习难度较高,但是它难学易用,也有利于我们理解底层,是一门十分值得深入学习的语言。
ephemerals__
2024/10/24
1240
【c++】基础知识——快速入门c++
全网最硬核 JVM 内存解析 - 5.压缩对象指针相关机制
现代机器大部分是 64 位的,JVM 也从 9 开始仅提供 64 位的虚拟机。在 JVM 中,一个对象指针,对应进程存储这个对象的虚拟内存的起始位置,也是 64 位大小:
干货满满张哈希
2023/05/01
5120
全网最硬核 JVM 内存解析 - 5.压缩对象指针相关机制
Geant4--是怎样使用的?--(1.信息抽取)
对于Geant4模拟,我们关心它到底是怎样使用的,到底是怎样获取我们想要的信息,即信息抽取。前面几篇入门教程有提到,Geant4的模拟流程中从信息流的整合来看,物理过程框架可从大到小分为Run、Event、(Track)、Step(对应各自的*Action.cc)。
梁佐佐
2020/09/04
2.4K0
Geant4--是怎样使用的?--(1.信息抽取)
Geant4入门讲解篇-1
Geant4,是模拟辐射粒子与物质相互作用的可靠软件工具,有着丰富的物理过程截面库,涉及中子、伽玛(X)、电子、质子、各种重离子乃至可衰变核素等各种辐射粒子。
梁佐佐
2020/09/04
1.9K2
Geant4入门讲解篇-1
C++:28 --- C++内存布局(上)
首先,我们顺次考察C兼容的结构(struct)的布局,单继承,多重继承,以及虚继承; 接着,我们讲成员变量和成员函数的访问,当然,这里面包含虚函数的情况; 再接下来,我们考察构造函数,析构函数,以及特殊的赋值操作符成员函数是如何工作的,数组是如何动态构造和销毁的;
用户3479834
2021/02/03
1.1K0
C++:28 --- C++内存布局(上)
《C++面向对象程序设计》✍千处细节、万字总结(建议收藏)「建议收藏」
面向对象程序设计(Object-Oriented Programming,OOP)是一种新的程序设计范型。程序设计范型是指设计程序的规范、模型和风格,它是一类程序设计语言的基础。
全栈程序员站长
2022/09/10
3.4K0
《C++面向对象程序设计》✍千处细节、万字总结(建议收藏)「建议收藏」
Geant4--一次编译,运行多个Run,极大提升模拟效率
应唐光毅博士/后之约,对于Geant4模拟,我们看是否能解决这么一个问题:我现在想模拟探测器不同角度下的响应,每次模拟需要/run/beamOn 100, 可是我真的不想一遍一遍的去DetectorConstruction.cc中修改几何放置角度,然后编译完怒敲exampleB1 run1.mac;或者,我想只编译运行一次G4就可以跑几百次/run/beamOn 100 且需要每次Run的时候射线源的出射位置、能量等参数不同?
梁佐佐
2020/09/04
1.9K0
Geant4--一次编译,运行多个Run,极大提升模拟效率
C++:29 --- C++继承关系下的内存布局(下)
C++ 提供继承的目的是在不同的类型之间提取共性。比如,科学家对物种进行分类,从而有种、属、纲等说法。有了这种层次结构,我们才可能将某些具备特定性质的东西归入到最合适的分类层次上,如“怀孩子的是哺乳动物”。由于这些属性可以被子类继承,所以,我们只要知道“鲸鱼、人”是哺乳动物,就可以方便地指出“鲸鱼、人都可以怀孩子”。那些特例,如鸭嘴兽(生蛋的哺乳动物),则要求我们对缺省的属性或行为进行覆盖。 C++中的继承语法很简单,在子类后加上“:base”就可以了。下面的D继承自基类C。
用户3479834
2021/02/03
1.3K0
C++:29 --- C++继承关系下的内存布局(下)
C++的三种单例模式—–深度解析
因为在设计或开发中,肯定会有这么一种情况,一个类只能有一个对象被创建,如果有多个对象的话,可能会导致状态的混乱和不一致。这种情况下,单例模式是最恰当的解决办法。它有很多种实现方式,各自的特性不相同,使用的情形也不相同。今天要实现的是常用的三种,分别是饿汉式、懒汉式和多线程式。这个分类有点不准确,也可以说成 两类,懒汉式,饿汉式,然后要保证二者的线程安全。
全栈程序员站长
2022/09/01
2.6K0
C++引用高级使用!
(4)引用声明完毕后,相当于目标变量有两个名称即该目标原名称和引用名,且不能再把该引用名作为其他变量名的别名。
用户6280468
2022/03/21
5550
聊几道面试题
Runtime System实际上是一个C、C++写的底层库,即一套API,系统在编译完代码之后,在运行的时候还需要依赖Runtime System才能够完整的、确定的代码。这就是Runtime。
拉维
2021/03/25
3240
聊几道面试题
谈谈.net对象生命周期
程序在计算机上跑着,就难免会占用内存资源来存储在程序运行过程中的数据,我们按照内存资源的存取方式将内存划分为堆内存和栈内存。
梁规晓
2019/12/17
1.3K0
谈谈.net对象生命周期
相关推荐
geant4入门讲解篇-2
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文