Day 09(下) B2a实例解说----exampleB2a.cc+ActionInitialization+PrimaryGeneratorAction

Day 09(下)exampleB2a.cc+ActionInitialization+PrimaryGeneratorAction

一、exampleB2a.cc

拿到实例怎么样运行(没有类似于cline的软件):首先打开程序所在的文件夹,新建文件夹,进入新文件夹,在终端打开,再cmake

c++ 复制代码
// 打开所在文件夹,进入终端
// 创建新文件夹"b2a",名字任意
mkdir b2a
// 进入文件夹
cd b2a/
// 准备编译
cmake ..
// 编译,正常最好不要出现warning
make
// 打开并可视化生成的范例文件exampleB2a
./exampleB2a  // 此时参数个数为1
./exampleB2a test.mac // 此时参数大于1,运行自写的mac文件test

exampleB2a.cc

c++ 复制代码
// 定义了step max,并且使用了G4写好的physicslist,若不使用,就自写step max
physicsList->RegisterPhysics(new G4StepLimiterPhysics());
// 给可视化界面+一个菜单gui.mac
if (ui->IsGUI()) {
      UImanager->ApplyCommand("/control/execute gui.mac");
    }
二、ActionInitialization

该程序中的所有Action类需要在此中进行初始化

c++ 复制代码
// 初始化
void ActionInitialization::BuildForMaster() const
{
  SetUserAction(new RunAction);//针对于多线程的设置
}
void ActionInitialization::Build() const
{
  SetUserAction(new PrimaryGeneratorAction);
  SetUserAction(new RunAction);
  SetUserAction(new EventAction);
}
三、PrimaryGeneratorAction

G4单位定义上是一个数值,所以设置时的单位都是带上的用*连接,其中

Mev<<Gev<<mm<<cm<<G4endl

c++ 复制代码
// 设置相关数值
G4ParticleDefinition* particleDefinition =
    G4ParticleTable::GetParticleTable()->FindParticle("proton");//"proton"发射的为质子

  fParticleGun->SetParticleDefinition(particleDefinition);//发射的是一个质子
  fParticleGun->SetParticleMomentumDirection(G4ThreeVector(0., 0., 1.));//发射方向001
  fParticleGun->SetParticleEnergy(3.0 * GeV);//发射能量3Gev

void PrimaryGeneratorAction::GeneratePrimaries(G4Event* event)
{
  G4double worldZHalfLength = 0;
  //设置粒子枪大小时,根据世界大小进行设置,该方法获得设置的世界的logicalvolume
  G4LogicalVolume* worldLV = G4LogicalVolumeStore::GetInstance()->GetVolume("World");
  G4Box* worldBox = nullptr;
  //根据logicalvolume获取solidvolume,也就是worldBox
  if (worldLV) worldBox = dynamic_cast<G4Box*>(worldLV->GetSolid());
  //然后根据solidvolume获取一半的长度,然后就可以设置粒子枪的位置,一半初始在边界的位置
  if (worldBox)
    worldZHalfLength = worldBox->GetZHalfLength();
  else {
    G4cerr << "World volume of box not found." << G4endl;
    G4cerr << "Perhaps you have changed geometry." << G4endl;
    G4cerr << "The gun will be place in the center." << G4endl;
  }
  //粒子枪的位置
  fParticleGun->SetParticlePosition(G4ThreeVector(0., 0., -worldZHalfLength + 1 * um));
//发射event
  fParticleGun->GeneratePrimaryVertex(event);
}
相关推荐
buyicn4 分钟前
低成本低成本低成本
笔记
小龙报8 分钟前
《赋能AI解锁Coze智能体搭建核心技能(2)--- 智能体开发基础》
人工智能·程序人生·面试·职场和发展·创业创新·学习方法·业界资讯
烟花落o11 分钟前
指针深入第二弹--字符指针、数组指针、函数指针、函数指针数组、转移表的理解加运用
c语言·开发语言·笔记·vscode·算法
小龙报1 小时前
《算法通关指南算法千题篇(5)--- 1.最长递增,2.交换瓶子,3.翻硬币》
c语言·开发语言·数据结构·c++·算法·学习方法·visual studio
报错小能手2 小时前
C++笔记(面向对象)定义虚函数规则 运行时多态原理
开发语言·c++·笔记
_dindong2 小时前
【递归、回溯、搜索】专题六:记忆化搜索
数据结构·c++·笔记·学习·算法·深度优先·哈希算法
云外天ノ☼3 小时前
一、Node.js入门实战指南:从零搭建你的第一个后端
前端·javascript·笔记·node.js
小龙报3 小时前
《算法通关指南:数据结构和算法篇 --- 顺序表相关算法题》--- 1.移动零,2.颜色分类
c语言·开发语言·数据结构·c++·算法·学习方法·visual studio
再睡一夏就好3 小时前
【C++闯关笔记】使用红黑树简单模拟实现map与set
java·c语言·数据结构·c++·笔记·语法·1024程序员节
MeowKnight9583 小时前
【数据结构】双链表 二叉树 练习记录
笔记