gpt4 book ai didi

c++ - 使用 Geant4/GATE MonteCarlo 模拟校准较小源的输出(输出因子)

转载 作者:行者123 更新时间:2023-12-05 05:46:35 24 4
gpt4 key购买 nike

我正在使用 GATE(使用 Geant4)对剂量输出进行 MC 研究。我正在使用 80 cm SAD 处的圆柱形钴源来测量水体模中的 PDD,并在 10 cm 深度处进行剂量测量。

我现在想模拟一个较小的源(比如 r/2 和 h/2)并比较 10 厘米深度处的剂量输出。除了几何形状,我发现我能够控制模拟的粒子数量和时间。更改这两个参数以模拟较小来源的较低输出的最佳方法是什么?或者是否有任何其他参数可以更改以模仿较小的源?我正在尝试计算较小源 w.r.t. 的输出因子。到原始来源。

最佳答案

不确定是否有帮助,这是带有 Co60 的圆柱形光源

Source::Source():
_particleGun{nullptr},
_sourceMessenger{nullptr},
_radius{-1.0},
_halfz{-1.0},
_nof_particles{10}
{
_particleGun = new G4ParticleGun( 1 );

G4ParticleTable* particleTable = G4ParticleTable::GetParticleTable();
G4String particleName = "gamma"; // "geantino"
_particleGun->SetParticleDefinition(particleTable->FindParticle(particleName));

_particleGun->SetParticlePosition(G4ThreeVector(0., 0., 0.));
_particleGun->SetParticleMomentumDirection(G4ThreeVector(0., 0., 1.));
_particleGun->SetParticleEnergy(1000.0*MeV);

_sourceMessenger = new SourceMessenger(this);
}


Source::~Source()
{
delete _particleGun;
delete _sourceMessenger;
}


troika Source::sample_direction()
{
double phi = 2.0 * M_PI * G4UniformRand();

double cos_z = 2.0 * G4UniformRand() - 1.0;
double sin_z = sqrt( (1.0 - cos_z) * (1.0 + cos_z) );

return troika{ sin_z * cos(phi), sin_z * sin(phi), cos_z };
}


double Source::sample_energy()
{
return (G4UniformRand() < P_lo) ? E_lo : E_hi;
}


void Source::GeneratePrimaries(G4Event* anEvent)
{
for(int k = 0; k != _nof_particles; ++k) // we generate _nof_particles at once
{
// here we sample spatial decay vertex uniformly in the cylinder
double z = _halfz * ( 2.0*G4UniformRand() - 1.0 );
double phi = 2.0 * M_PI * G4UniformRand();
double r = _radius * sqrt(G4UniformRand());

auto x = r * cos(phi);
auto y = r * sin(phi);
_particleGun->SetParticlePosition(G4ThreeVector(x, y, z));

// now uniform-on-the-sphere direction
auto dir = sample_direction();
_particleGun->SetParticleMomentumDirection(G4ThreeVector(dir._wx, dir._wy, dir._wz));

// energy 50/50 1.17 or 1.33
auto e = sample_energy();
_particleGun->SetParticleEnergy(e);

// all together in a vertex
_particleGun->GeneratePrimaryVertex(anEvent);
}
}

关于c++ - 使用 Geant4/GATE MonteCarlo 模拟校准较小源的输出(输出因子),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71147347/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com