Geant 4 射线源定义(初学笔记)

一、面源

源代码可参考basic/B1,表面 z=z0(x0/y0为一定范围内的随机数)

:如果未指定方向,将沿(1., 0., 0.)即 X 轴

  // default particle kinematic
  // gamma particle
  G4ParticleTable* particleTable = G4ParticleTable::GetParticleTable();
  G4String particleName;
  G4ParticleDefinition* particle
    = particleTable->FindParticle(particleName="gamma");
  fParticleGun->SetParticleDefinition(particle);

  // energy
  fParticleGun->SetParticleEnergy(6.*MeV);

  // position
  G4double x0 = G4UniformRand()-0.5;
  G4double y0 = G4UniformRand()-0.5;
  G4double z0 = -0.5;
  
  fParticleGun->SetParticlePosition(G4ThreeVector(x0,y0,z0));

  // direction
  fParticleGun->SetParticleMomentumDirection(G4ThreeVector(0.,0.,1.));

  fParticleGun->GeneratePrimaryVertex(anEvent);

二、点源

1. 各向同性:thetaMax = 180;

2. Co-60源:1.17/1.33 MeV;锥束的圆锥半角:21度。

  // default particle kinematic
  // gamma partical
  G4ParticleDefinition* particleDefinition 
    = G4ParticleTable::GetParticleTable()->FindParticle("gamma");
  fParticleGun->SetParticleDefinition(particleDefinition);

  // energy: Co-60 source
  G4double Flag = G4UniformRand();
  if(Flag<0.5){
      fParticleGun->SetParticleEnergy(1173.2*keV);}
  else{
      fParticleGun->SetParticleEnergy(1332.5*keV);
  }

  // position
  fParticleGun->SetParticlePosition(G4ThreeVector(0,0,-14*cm));

  // direction
  G4double phi = G4UniformRand()*360.*deg;                                                       
  G4double thetaMax = G4UniformRand()*21*deg;
  G4double mu = std::cos(thetaMax);
  
  G4double v1=std::sqrt(1-mu*mu)*std::cos(phi) ;
  G4double v2=std::sqrt(1-mu*mu)*std::sin(phi) ;
  G4double v3=mu;

  fParticleGun->SetParticleMomentumDirection(G4ThreeVector(v1,v2,v3));

  fParticleGun->GeneratePrimaryVertex(anEvent);

方向定义部分等同于:

  // direction
  G4double phi = G4UniformRand()*360.*deg;                                                       
  G4double thetaMax=21*deg;
  G4double muMin=std::cos(thetaMax);
  G4double mu=muMin+G4UniformRand()*(1.0-muMin);

 

  • 4
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
Geant4 中,可以使用 G4OpticalSurface 类来定义 LaBr3 探测器的光学属性。G4OpticalSurface 类表示两个介质之间的光学界面,可以定义反射、折射、透射等光学过程。以下是一个示例代码,演示如何定义 LaBr3 探测器的光学属性: ```c++ // 定义 LaBr3 闪烁体材料和光电倍增管材料 G4Material* lBr3 = ...; G4Material* PMT = ...; // 定义 LaBr3 闪烁体和光电倍增管的光学属性 G4OpticalSurface* opLBr3Surface = new G4OpticalSurface("LBr3Surface"); opLBr3Surface->SetType(dielectric_dielectric); opLBr3Surface->SetFinish(polished); opLBr3Surface->SetModel(unified); G4LogicalSkinSurface* lBr3Surface = new G4LogicalSkinSurface("LBr3Surface",lBr3Surface->GetLogicalVolume(),opLBr3Surface); G4OpticalSurface* opPMTSurface = new G4OpticalSurface("PMTSurface"); opPMTSurface->SetType(dielectric_dielectric); opPMTSurface->SetFinish(polished); opPMTSurface->SetModel(unified); G4LogicalSkinSurface* PMTSurface = new G4LogicalSkinSurface("PMTSurface",PMTSurface->GetLogicalVolume(),opPMTSurface); // 定义 LaBr3 探测器的光学特性 G4double lBr3_Reflectivity = 0.90; G4double lBr3_Efficiency = 0.95; G4double PMT_Reflectivity = 0.50; G4double PMT_Efficiency = 0.25; G4MaterialPropertiesTable* lBr3_MPT = new G4MaterialPropertiesTable(); G4MaterialPropertiesTable* PMT_MPT = new G4MaterialPropertiesTable(); lBr3_MPT->AddProperty("REFLECTIVITY",energy,lBr3_Reflectivity); lBr3_MPT->AddProperty("EFFICIENCY",energy,lBr3_Efficiency); PMT_MPT->AddProperty("REFLECTIVITY",energy,PMT_Reflectivity); PMT_MPT->AddProperty("EFFICIENCY",energy,PMT_Efficiency); opLBr3Surface->SetMaterialPropertiesTable(lBr3_MPT); opPMTSurface->SetMaterialPropertiesTable(PMT_MPT); ``` 在上述代码中,首先定义了 LaBr3 闪烁体和光电倍增管的材料,并使用 G4OpticalSurface 类来定义它们之间的光学界面。接着,定义了 LaBr3 探测器的光学特性,包括反射率和效率,并将它们定义为材料属性表。最后,将材料属性表分配给相应的光学界面。需要注意的是,反射率和效率的值需要根据实际情况进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值