Dear forum members,
I'm trying to simulate an x-ray tube using Geant4. Unfortunately there are no gammas produced (or they are not visualised). Please see the attached image.
1.) Building the geometry is done like this:
/** This method constructs the X-Ray Tube. This covers the following parts:
- the anode (Wolfram)
- the filter (Aluminium)
- the sensitive read-out region (Water :-)
- the tube itself (filled with nothing -> vacuum)
See the simulation model for the detailed placement and orientation of these parts.
@returns A pointer to the physical volume of the world (tube).
*/
G4VPhysicalVolume* XRayTubeConstruction::Construct()
{
// === define the needed materials ===
G4NistManager* man = G4NistManager::Instance();
// 1.) Vacuum (absolute vacuum is not possible in Geant4, because the density would be 0; see Example 4.10 of G4BookForAppliDev.pdf)
G4Material* vacuum = new G4Material("vacuum_pseudo", 1, 1.01*g/mole, universe_mean_density, kStateGas, 0.1*kelvin, 1.e-19*pascal);
// 2.) Wolfram (= Tungsten)
G4Material* W = new G4Material("Wolfram", 74, 179.95*g/mole, 18.4*g/cm3);
// 3. Aluminium
G4Material* Al = new G4Material("Aluminum", 13, 26.98*g/mole, 2.7*g/cm3);
// 4. Water
G4Material* H2O = man->FindOrBuildMaterial("G4_WATER");
// === define the parts of the X-Ray Tube ===
// 1.) tube = world volume (size.x=440mm, size.y=1080mm, size.z=440mm)
G4Box* xr_tube_shape = new G4Box("xr_tube_box", 220.0*mm, 540.0*mm, 220.0*mm);
G4LogicalVolume* xr_tube_log = new G4LogicalVolume(xr_tube_shape, vacuum, "xr_tube_log", 0, 0, 0);
xr_tube = new G4PVPlacement(0, G4ThreeVector(), xr_tube_log, "xr_tube", 0, false, 0);
// 2.) anode (size.x=10mm, size.y=30mm, size.z=30mm, alpha=-45°, theta=0°, phi=270°)
G4Para* xr_anode_shape = new G4Para("xr_anode_parallelepiped", 5.0*mm, 15.0*mm, 15.0*mm, -0.7854, 0.0, 4.7124);
G4LogicalVolume* xr_anode_log = new G4LogicalVolume(xr_anode_shape, W, "xr_anode_log", 0, 0, 0);
xr_anode = new G4PVPlacement(0, G4ThreeVector(5.0, 500.0, 0.0), xr_anode_log, "xr_anode", xr_tube_log, false, 0);
// 3.) filter (size.x=50mm, size.y=2mm, size.z=50mm)
G4Box* xr_filter_shape = new G4Box("xr_filter_box", 25.0*mm, 1.0*mm, 25.0*mm);
G4LogicalVolume* xr_filter_log = new G4LogicalVolume(xr_filter_shape, Al, "xr_filter_log", 0, 0, 0);
xr_filter = new G4PVPlacement(0, G4ThreeVector(0.0, 449.0, 0.0), xr_filter_log, "xr_filter", xr_tube_log, false, 0);
// 4.) sensitive region (size.x=400mm, size.y=2mm, size.z=400mm) having 40 stripes each (size.x=10mm, size.y=2mm, size.z=400mm)
G4Box* xr_sensitive_shape = new G4Box("xr_sensitive_box", 200.0*mm, 1.0*mm, 200.0*mm);
G4LogicalVolume* xr_sensitive_log = new G4LogicalVolume(xr_sensitive_shape, H2O, "xr_sensitive_log", 0, 0, 0);
xr_sensitive = new G4PVPlacement(0, G4ThreeVector(0.0, -501.0, 0.0), xr_sensitive_log, "xr_sensitive", xr_tube_log, false, 0);
G4Box* xr_sensitive_stripe = new G4Box("xr_sensitive_stripe_box", 5.0*mm, 1.0*mm, 200.0*mm);
G4LogicalVolume* xr_sensitive_stripe_log = new G4LogicalVolume(xr_sensitive_stripe, H2O, "xr_sensitive_stripe_log", 0, 0, 0);
xr_sensitive_stripes = new G4PVReplica("xr_sensitive", xr_sensitive_stripe_log, xr_sensitive, kXAxis, 40, 10.0, 0.0);
// TODO: assign a G4SensitiveDetector to the sensitive_stripes
return xr_tube;
}
2.) I registered the processes of interest:
/** Register the needed low energy (electromagnetic) processes with Geant4.
*/
void XRayTubePhysicsList::ConstructEMProcess()
{
theParticleIterator->reset();
while((*theParticleIterator)())
{
G4ParticleDefinition* particle = theParticleIterator->value();
G4ProcessManager* pmanager = particle->GetProcessManager();
G4String particleName = particle->GetParticleName();
// assign processes to the process manager of the particles
if(particleName == "gamma")
{
// gamma
pmanager->AddDiscreteProcess(new G4LowEnergyRayleigh); // Rayleigh-Scattering
pmanager->AddDiscreteProcess(new G4LowEnergyPhotoElectric); // Photo-Electric effects
pmanager->AddDiscreteProcess(new G4LowEnergyCompton); // Compton-Scattering
}
else if(particleName == "e-")
{
// electron
pmanager->AddProcess(new G4MultipleScattering, -1, 1, 1); // Coulomb-Scattering
pmanager->AddProcess(new G4LowEnergyBremsstrahlung, -1,-1, 2); // Bremsstrahlung by electrons
pmanager->AddProcess(new G4LowEnergyIonisation, -1, 2, 3); // Ionisation and energy loss by electrons
}
}
3.) I use a GarticleGun to shoot electrons:
/** Construct a particle gun and make it shoot electrons of 100 keV.
*/
XRayTubePrimaryAction::XRayTubePrimaryAction()
{
particleGun = new G4ParticleGun(1);
particleGun->SetParticleDefinition(G4Electron::ElectronDefinition());
particleGun->SetParticleEnergy(100*keV);
particleGun->SetParticlePosition(G4ThreeVector(-100.0, 500.0, 0.0));
}
If I'm not mistaken, gammas should show up in the visulation as green tracks. Unfortunately I only see red (electron-) tracks.
Could somebody please help me?
Thanks in advance,
Krisztián
Attachment:
http://hypernews.slac.stanford.edu/HyperNews/geant4/get/AUX/2009/01/24/03.11-11010-xray-tube01.png
|