B2a实例学习记录

news2024/9/25 1:18:32

B2a简介

只是把hit存到了hitcollection,只是统计了各自event结果,将每次event的运行结果存起来了,并没有做总的求和
在这里插入图片描述
在这里插入图片描述

如何在B2a的基础上,实现对某一个chamber的能量的累加

1 hit和SD(sensitive detector)

每一个step的能量沉积的结果就是一个hit。
在这里插入图片描述

2 Hitcollection

用来装hit的
在这里插入图片描述

3 sensitive detector的使用,ProcessHits

其实将某个物体设置为 sensitive detector之后,他就有点像真实实际的探测器了,程序就可以后续获取这个物体里面的相关信息了。也就是使用SD的第一步是要人为指定SD; SD必须和logicalVolume联系起来、

B1里面获取每一个step的信息是通过steppingAction函数来获取的,但是在B2里面是通过ProcessHits来实现hit的获取
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
####(a) 在DetectorConstruction里面,提前锁定要提取的物理信息所相关的体积
关键点记录,5个chamber,他们的logicalVolumne被整体的存在一个指针数组里面

DetectorConstruction.hh文件
//二级指针存放重复结构 logicalVolume
  G4LogicalVolume** fLogicChamber = nullptr; // pointer to the logical Chamber

DetectorConstruction.cc文件,5重复结构,公用一个logicalVolume名字

fLogicChamber[copyNo] =
              new G4LogicalVolume(chamberS,fChamberMaterial,"Chamber_LV",0,0,0);

DetectorConstruction.cc文件
探测器的名字

void DetectorConstruction::ConstructSDandField()
{
  // Sensitive detectors

//"/TrackerChamberSD";最后一个/后面的名字就是SD的名字探测器的名字
  G4String trackerChamberSDname = "/TrackerChamberSD";
  //实例化SD
  TrackerSD* aTrackerSD = new TrackerSD(trackerChamberSDname,
                                        "TrackerHitsCollection");
  G4SDManager::GetSDMpointer()->AddNewDetector(aTrackerSD);
  // Setting aTrackerSD to all logical volumes with the same name
  // of "Chamber_LV".connetc 建立的SD和要检测物理量的logicalvolume
  SetSensitiveDetector("Chamber_LV", aTrackerSD, true);
  G4AutoDelete::Register(fMagFieldMessenger);
}

####(b) 先定义Hit所要收集和存储的信息
定义hitcollection来装hit,使用的是G4HitsCollection,B5建立了多个SD和多个hit,
当需要统计不同类型的粒子的能量沉积的时候,就需要多个G4HitsCollection,
真正决定统计的物理量的不同,是靠建立G4HitsCollection。也就是一个SD可以对其建立多个SD

每一个G4HitsCollection需要给他一个名字,也就是colNam
该函数需要传两个参数,detName,是SD的名字
在这里插入图片描述

在TrackerHit.hh文件里面

//创建别名,之后实例化 collection 来庄hit的时候,就可以直接 new  TrackerHitsCollection即可
typedef G4THitsCollection<TrackerHit> TrackerHitsCollection;

//模拟的时候,会产生很多的hit,然后需要很多的实例化,这个函数就是用来释放内存的
extern G4ThreadLocal G4Allocator<TrackerHit>* TrackerHitAllocator;

不需要太纠结,就两个一块用就行。
注意这两个参数都在什么地方被调用即可,模仿别人的应用

在TrackerSD.cc文件里面
对TrackerHitsCollection进行了初始化

void TrackerSD::Initialize(G4HCofThisEvent* hce)
{
  // Create hits collection
  //TrackerHitsCollection类似vector
  fHitsCollection
    = new TrackerHitsCollection(SensitiveDetectorName, collectionName[0]);
 }

####(c) 自定义自己的SD,UserSteppingAction和SD统计信息的区别和联系
UserSteppingAction如何实现信息的采集
在这里插入图片描述

SD方法不需要去判断step是否有效以及判断step在不在要统计信息的volume里面,G4自己做了
在这里插入图片描述
在这里插入图片描述

collection调用,ReverrMc01案例SD里面定义多个hitcollection,
在这里插入图片描述

ProcesssHit是用来访问step,获取信息的
在这里插入图片描述

G4HCofThisEvent作用

G4HCofThisEvent是用来存hitCollection的,一个SD可能有多个hit。信息统计是以event为周期的。SD区别于userSteppingAction的很大的区别,一个event结束之后,可以通过event直接来获取hitCollection的每一个hit,那就先要用event访问每一个hitCollection,然后再获取到hitCollection里的hit。
在这里插入图片描述

使用方法
1.TrackerSD.cc文件里面

void TrackerSD::Initialize(G4HCofThisEvent* hce)
{
  // Create hits collection
  //TrackerHitsCollection类似vector
  fHitsCollection
    = new TrackerHitsCollection(SensitiveDetectorName, collectionName[0]);
    // SensitiveDetectorName :SD的名字 ,hitcollection的索引,如果一个SD有多个hitcollection
  // Add this collection in hce
  //告诉G4HCofThisEvent,现在要把hitcollection是fHitsCollection,
  //那么G4HCofThisEvent就可以来访问fHitsCollection了,这里只是初始化
  //是在EventAction.cc use it
  G4int hcID
    = G4SDManager::GetSDMpointer()->GetCollectionID(collectionName[0]);
  hce->AddHitsCollection( hcID, fHitsCollection );
}

4 stepMax的作用

保证粒子在SD里面至少走10多步,有时候SD太小,如果步长太大,可能走一两步反应就结束了,什么也统计不到
需要在主函数里面初始化

用下列初始化的前提是使用G4自带的physicilist
physicsList->RegisterPhysics(new G4StepLimiterPhysics());

5 如果要修改可视化的具体细节

修改 vis.mac即可

6 多线程

主函数里面
auto* runManager = G4RunManagerFactory::CreateRunManager();
G4int nThreads = 24;
runManager->SetNumberOfThreads(nThreads);

ActionInitialization.hh函数里面定义
void BuildForMaster() const override;  //对多线程情况初始化
然后 ActionInitialization.cc函数
void ActionInitialization::BuildForMaster() const
{
  SetUserAction(new RunAction);  //再度对RunAction初始化
}

7

获取某个物体的logicalVolume

  G4LogicalVolume* worldLV
    = G4LogicalVolumeStore::GetInstance()->GetVolume("World");

8 提取物理信息的四种方式

在这里插入图片描述

9 可视化设置 线形和表面绘制,世界可视化

在vis.mac里面注释和取消注释就可以在线形和表面表示之间切换

# Specify style (surface, wireframe, auxiliary edges,...)
/vis/viewer/set/style wireframe
/vis/viewer/set/auxiliaryEdge true
/vis/viewer/set/lineSegmentsPerCircle 100

10 查看已有的所有案例对某个函数的调用

会显示所有example里面用到这个函数二点语句,然后参考别人是怎么用的

输入
grep -r 函数名, 
如
grep -r G4BOX,

11 获取粒子的id

newHit->SetTrackID  (aStep->GetTrack()->GetTrackID());

在 TrackerSD.cc

//用来进入到每一个有效的step获取信息
G4bool TrackerSD::ProcessHits(G4Step* aStep,
                                     G4TouchableHistory*)
{
  // energy deposit
  G4double edep = aStep->GetTotalEnergyDeposit();

  if (edep==0.) return false;

  TrackerHit* newHit = new TrackerHit();

  newHit->SetTrackID  (aStep->GetTrack()->GetTrackID());
  newHit->SetChamberNb(aStep->GetPreStepPoint()->GetTouchableHandle()
                                               ->GetCopyNumber());
  newHit->SetEdep(edep);
  newHit->SetPos (aStep->GetPostStepPoint()->GetPosition());

  //fHitsCollection在这个实例里面是hitCollection,use for containing hits
  fHitsCollection->insert( newHit );

  //newHit->Print();

  return true;
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/712978.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

越权访问漏洞

越权漏洞 越权访问漏洞示意图 一、越权访问漏洞简介 1.类型 水平越权&#xff1a;通过更换的某个ID之类的身份标识&#xff0c;从而使A账号获得&#xff08;增删查改&#xff09;B账号的数据 垂直越权&#xff1a;使用低权限身份的账号&#xff0c;发送高权限账号的请求&…

Java——内部类

一、成员内部类 类中的东西都是成员&#xff0c; 1.1、成员内部类定义 定义成员内部类的格式&#xff1a; class OuterClass {//外部类class InnerClass{//内部类&#xff08;内部类实际是外部类的一个属性&#xff09;} }示例 public class Outer {private static int r…

使用Selenium-PO设计模式提高Web自动化测试效率

PO&#xff08;page object&#xff09;设计模式是在自动化中已经流行起来的一种易于维护和减少代码的设计模式。在自动化测试中&#xff0c;PO对象作为一个与页面交互的接口。测试中需要与页面的UI进行交互时&#xff0c;便调用PO的方法。这样做的好处是&#xff0c;如果页面的…

.Net之AOP - 使用Fody的代码静态编织实现AOP

简介&#xff08;好久没写博客了&#xff09; 万物皆可AOP&#xff0c;本篇文章主要讲解在.Net7中使用Fody的代码静态编织实现AOP。 一、前言 AOP AOP是指面向切面编程 &#xff08;Aspect Oriented Programming&#xff09;&#xff0c;相信大家都再熟悉不过了&#xff0c;…

上海市“小巨人”竞争力指数榜单发布!上海三思居全市总榜第四!分项NO.1!

6月25日下午&#xff0c;2022 年上海市专精特新“小巨人”市场竞争力指数榜单”在上海市上海联合产权交易所正式发布。上海三思电子工程有限公司多项荣登指数榜单&#xff1a; ●指数总榜TOP10&#xff0c;上海三思以83.69的高分位居全市8072家“小巨人”企业第四位&#xff0…

军用电子设备人工智能时代正在到来

源自&#xff1a; 战略前沿技术 Al的应用快速增长 更大的图景 人工智能技术的多面性 增强作战人员能力 数据依赖 人工智能和机器学习:前面的路 对人工智能应用保持警惕 声明:公众号转载的文章及图片出于非商业性的教育和科研目的供大家参考和探讨&#xff0c;并不意味着支持其观…

vue+elementui实现联想购物商城,样式美观大方

目录 一、首页效果图对比 1.联想商城首页截图&#xff1a; 2.作者项目效果图&#xff1a; 二、商品详情效果图对比 1.联想官方截图&#xff1a; 2.作者项目截图&#xff1a; 三、项目实现 1.数据分离维护 2.首页推荐列表数据处理 3.商品详情数据动态获取完成交互 4.商品详…

MySQL原理探索——20幻读

20 幻读是什么&#xff1f;幻读会造成什么后果&#xff1f; 在上一篇文章最后&#xff0c;遗留了一个关于加锁规则的问题。今天&#xff0c;我们就从这个问题说起。 为了便于说明问题&#xff0c;这篇文章&#xff0c;我们就先使用一个小一点的表。建表和初始化语句如下&#…

【MySQL】MySQL PHP 语法,PHP MySQL 简介,查询,下载 MySQL 数据库, SQL 教程

作者简介&#xff1a; 辭七七&#xff0c;目前大一&#xff0c;正在学习C/C&#xff0c;Java&#xff0c;Python等 作者主页&#xff1a; 七七的个人主页 文章收录专栏&#xff1a; 七七的闲谈 欢迎大家点赞 &#x1f44d; 收藏 ⭐ 加关注哦&#xff01;&#x1f496;&#x1f…

探究Vue源码:mustache模板引擎(4) 了解mustache转换概念,简述tokens转换

上文 探究Vue源码:mustache模板引擎(3) 通过编写简单正则了解mustache转换思路我们用正则表达式构建了一个简易版的render模板编译函数 但是 我们有特意强调过 mustache的render函数并非用简单正则实现的 因为这样无法实现循环和一些比较复杂的逻辑处理 它的实现基理可以参考这…

Ubuntu系统安装JDK教程

今天新买了一台阿里云服务器&#xff0c;因为centos 不提供了更新支持&#xff0c;所以Linux系统选择了Ubuntu 系统&#xff0c;今天就出一期 Ubuntu上安装的一系列教程&#xff0c;今天就先从JDK开始。 Ubuntu系统安装JDK教程 1、 jdk下载2、安装 lrzsz 命令 &#xff08;仅限…

FreeRTOS_系统内核控制函数

目录 1. 系统内核控制函数预览 2. 系统内核函数详解 2.1 函数 taskYIELD() 2.2 函数 taskENTER_CRITICAL() 2.3 函数 taskEXIT_CRITICAL() 2.4 函数 taskENTER_CRITICAL_FROM_ISR() 2.5 函数 taskEXIT_CRITICAL_FROM_ISR() 2.6 函数 taskDISABLE_INTERRUPTS() 2.7 函数…

1. 数字mic驱动分析

一般遇到的音频硬件都是这样的 由于项目不需要播放只需要录音&#xff0c;于是将模拟的mic换成了数字mic&#xff0c;直接通过i2s连接到soc 由于还要使用alsa架构进行录音&#xff0c;所以这里不能简单的写个代码读i2s数据&#xff0c;需要虚拟出一个codec 上面就是我们这次要分…

第九十六天学习记录:Linux基础:实用操作Ⅰ

注&#xff1a;第一张图与学习记录无关&#xff0c;是为了参与CSDN的AI绘图活动 CtrlC强制停止 1、Linux某些程序的运行&#xff0c;如果想要强制停止它&#xff0c;可以使用快捷键CtrlC中止 2、在命令输入错误时&#xff0c;也可以通过快捷键CtrlC快速退出当前输入 CtrlD…

projection介绍及EPSG:4326和EPSG:3857的投射转换

每个地图数据在Web端加载显示时&#xff0c;都需要设罝其投影坐标系。众所周知&#xff0c;地图是不规则的椭球体&#xff0c;如果我们将其展开到二维平面上&#xff0c;会发现地图与实际情况有出入。所以&#xff0c;人们提出 投影的方式来尽量减小失真的程度。 openlayers的…

技术驱动美丽:动态贴纸与美颜SDK的应用实践与创新

随着科技的迅速发展&#xff0c;智能手机的普及以及社交媒体的兴起&#xff0c;人们对于美颜和创意贴纸的需求日益增长。动态贴纸和美颜技术的应用已经成为当今互联网时代的一种趋势。本文将重点讨论动态贴纸与美颜SDK的应用实践与创新&#xff0c;探讨它们对美容美妆行业和社交…

运维必学 | 变量定义调用-从零开始学Windows批处理(Batch)编程系列教程

欢迎关注「全栈工程师修炼指南」公众号 设为「星标⭐」每天带你 基础入门 到 进阶实践 再到 放弃学习&#xff01; 专注 企业运维实践、网络安全、系统运维、应用开发、物联网实战、全栈文章 等知识分享 “ 花开堪折直须折&#xff0c;莫待无花空折枝。 ” 作者主页&#xff1…

vue中如何封装一个基础组件---demo

在 Vue 中封装基础组件可以提高代码的可复用性和维护性&#xff0c;使开发过程更高效。下面是封装基础组件的一般步骤&#xff1a; 确定组件功能&#xff1a;首先确定要封装的基础组件的功能和用途。基础组件通常是具有单一功能的&#xff0c;可以在不同的项目中多次使用的组件…

【C++初阶】C++入门——缺省参数、函数重载

目录 一、缺省参数1.1 定义1.2 缺省参数分类1.3 缺省参数只能出现在函数声明中 二、函数重载2.1 定义2.2 构成重载的几种情况2.3 C支持函数重载的原理 一、缺省参数 1.1 定义 缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时&#xff0c;如果没有指定实…

下一代Windows被披露,任何硬件都能运行

这么些年来&#xff0c;微软似乎一直没能打破 Windows 系统隔代香魔咒。 继 Win XP 惊艳世界后 Win Vista 表现平平&#xff0c;到 Win 7 引领一个时代&#xff1b; 接着 Win 8 含泪淹没在前代耀眼光环之下&#xff0c;直到 Win 10 再创辉煌成功走入家家户户。 而最新的 Win …