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);
}
相关推荐
_李小白3 小时前
【OSG学习笔记】Day 22: StateSet 与 StateAttribute (渲染状态)
笔记·学习
zzh0814 小时前
Mysql数据库备份与恢复笔记
数据库·笔记·mysql
童园管理札记5 小时前
【回归儿童本位,重构专业底色】学前教育行业的深度思辨与价值坚守(二)
经验分享·重构·生活·学习方法·微信公众平台
丝斯20115 小时前
AI学习笔记整理(79)——Python学习8
人工智能·笔记·学习
A小码哥5 小时前
Harness Engineering:用规则约束AI的方向
人工智能·ai·学习方法
Z.风止6 小时前
Large Model-learning(2)
开发语言·笔记·python·leetcode
脆皮炸鸡7556 小时前
Linux开发工具~~~版本控制器Git以及调试工具GDB
linux·服务器·开发语言·经验分享·git·学习方法
烛之武6 小时前
SpringCloud基础(上)
笔记·spring·spring cloud
南境十里·墨染春水6 小时前
C++ 笔记 深赋值 浅赋值(面向对象)
开发语言·jvm·c++·笔记
今儿敲了吗6 小时前
算法复盘——差分
数据结构·c++·笔记·学习·算法