l Visualization attributes and trajectories
|
Important: Every time you open a new shell you need
to set your environment up correctly. |
By the end of this Hands-on you should be able to:
l
Define simple materials
l
Access NIST material definitions
l
Construct simple volumes
l
Apply visualisation attributes
l
Visualise geometries and trajectories using the HepRApp
visualisation tool
This exercise is based on an experimental setup developed for bremsstrahlung benchmarking at UCSF. The simplified experiment is made up of the following components:
l
Vacuum beam pipe
l
Titanium beam window
l
Iron evacuation chamber window
l
Silicon monitor
l
Beryllium target
Electrons are generated with an energy of 15 MeV in the beam pipe. The electrons interact with the target and generate bremsstrahlung photons. Scoring of these photons will be left for another exercise. The diagram below demonstrates the simulated experiment.

The following files are provided with the exercise:
l beamTest.cc - main program
l BeamTestDetectorConstruction - material and geometry definition
l BeamTestPrimaryGeneratorAction - primary particle generator
l BeamTestPhysicsList - user defined physics list
Only the beam pipe and beam window are implemented in BeamTestDetectorConstruction. The other components are implemented over the course of this exercise.
If using windows, make sure G4UI_USE_TCSH is not set.
To start this exercise, unpack HandsOn2.tgz to your working directory.
Compile and link it using following commands:
$ cd HandsOn2
$ make
Once you have successfully compiled and linked the code, try it to see how it runs:
$ ./bin/$G4SYSTEM/beamTest
After initialisation, a prompt Idle> should be appear. At this point, enter the following UI command to execute the macro file run.mac:
Idle> /control/execute run.mac
Idle> exit
This will produce a file named G4Data0.heprep, which can be viewed by invoking the HepRApp visualization tool. It may be useful to use a dedicated HepRApp window.
$ java Ðjar HepRApp.jar
G4Data0.heprep
After rotating the drawing you should be able to view the following:

You can see that only the beam pipe and beam window have been implemented.
Simple
materials
We need to define beryllium for the target, iron for the evacuation chamber window and silicon for the silicon monitor. These are simple materials with the following parameters:
Beryllium:
Z = 4
A = 9.012182 g/mol
Density = 1.8480 g/cm3
Iron:
Z = 26
A = 55.845 g/mol
Density = 7.87 g/cm3
Silicon:
Z = 14
A =
28.0855 g/mol
Density = 2.33 g/cm3
Define these materials in BeamTestDetectorConstruction as shown below.
|
BeamTestDetectorConstruction.cc |
|
void
BeamTestDetectorConstruction::DefineMaterials() {
G4String symbol;
G4double a, z, density;
G4int ncomponents;
G4double fractionmass;
//
Define simple materials //
HandsOn2 : Define beryllium, silicon and iron
new G4Material("Beryllium", z=4., a=9.012182*g/mole,
density=1.8480*g/cm3);
new G4Material("Silicon", z=14., a=28.0855*g/mole, density=2.330*g/cm3);
new G4Material("Iron", z=26.,
a=55.845*g/mole,
density=7.87*g/cm3); new
G4Material("Titanium",
z=22., a=47.90*g/mole, density=4.540*g/cm3); ---- snipped ---- |
Then compile and link the program. Run the executable:
$ ./bin/$G4SYSTEM/beamTest
run.mac
You should see information on beryllium, silicon and iron in the printout, as shown below.
|
Printout showing defined materials |
|
---- snipped ---- ***** Table : Nb of materials = 6 ***** Material:
Beryllium
density: 1.848 g/cm3 temperature: 273.15 K pressure: 1.00 atm RadLength: 35.276 cm ---> Element: Beryllium ( ) Z = 4.0 N = 9.0 A = 9.01 g/mole fractionMass: 100.00 % Abundance 100.00 % Material: Silicon density: 2.330 g/cm3 temperature: 273.15 K pressure: 1.00 atm RadLength: 9.366 cm ---> Element: Silicon ( ) Z = 14.0 N = 28.1 A = 28.09 g/mole fractionMass: 100.00 % Abundance 100.00 % Material: Iron density: 7.870 g/cm3 temperature: 273.15 K pressure: 1.00 atm RadLength: 1.758 cm ---> Element: Iron ( ) Z = 26.0 N = 55.8 A = 55.84 g/mole fractionMass: 100.00 % Abundance 100.00 % Material: Titanium density: 4.540 g/cm3 temperature: 273.15 K pressure: 1.00 atm RadLength: 3.563 cm ---> Element: Titanium ( ) Z = 22.0 N = 47.9 A = 47.90 g/mole fractionMass: 100.00 % Abundance 100.00 % ---- snipped ---- |
NIST
materials
If you look in BeamTestDetectorConstruction, you will see that air is defined as a composition of Nitrogen and Oxygen, ie,
|
BeamTestDetectorConstruction.cc |
|
---- snipped ---- //
Define air
G4Material* air = new G4Material("Air", density=
1.290*mg/cm3, ncomponents=2);
air->AddElement(N, fractionmass=0.7);
air->AddElement(O, fractionmass=0.3); ---- snipped ---- |
The NIST definition of air is also available (see the application developers user guide for more information). To use the NIST definition of air, make the following modifications to BeamTestDetectorConstruction:
|
BeamTestDetectorConstruction.cc |
|
---- snipped ---- #include "G4LogicalVolume.hh" #include "G4Material.hh" // HandsOn2: Include G4NistManager #include "G4NistManager.hh" #include "G4PVParameterised.hh" ---- snipped ---- void
BeamTestDetectorConstruction::SetupGeometry() { //
HandsOn2: NIST definition of air
// G4Material* air = G4Material::GetMaterial("Air");
G4Material* air =
G4NistManager::Instance()->FindOrBuildMaterial("G4_AIR"); //
World volume
G4Box* worldSolid = new G4Box("World_Solid",
// Name
2.0*m, 2.0*m, 2.0*m);
// Half lengths ---- snipped ---- |
Then compile, link and run the program. You should see the NIST definition of air printed out, as shown below.
|
Printout showing use of NIST definition of air |
|
----- snipped ----- Region <DefaultRegionForTheWorld> -- appears in <World_Physical> world volume Materials : G4_AIR Titanium Vacuum Production cuts : gamma 1 mm e- 1 mm e+ 1 mm ========= Table of registered couples ============================== Index : 0 used in the geometry : Yes recalculation needed : No Material : G4_AIR Range cuts : gamma 1 mm e- 1 mm e+ 1 mm Energy thresholds : gamma 990 eV e- 990 eV e+ 990 eV Region(s) which use this couple : DefaultRegionForTheWorld ----- snipped ----- |
Target
volume
The target volume is cylindrical in shape and is constructed of Beryllium. It has an outer radius of 3.63cm, with a full length of 6.31cm. It is to be placed along the beam line, with its back surface located at the center of the world volume. We will use G4Tubs for the solid, and G4PVPlacement to generate the physical volume. The full implementation is shown below.
|
BeamTestDetectorConstruction.cc |
|
void
BeamTestDetectorConstruction::SetupGeometry() { ----- snipped ----- //////////////////////////////////////////////////////////////////////// // HandsOn2: Target geometry // Target (Default parameters for Be ) G4Material*
beryllium = G4Material::GetMaterial("Beryllium"); G4Tubs* targetTubs =
new G4Tubs("Target_Solid", // Name
0.*cm,
// Inner radius
3.63*cm, //
Outer radius
3.155*cm, // Half
length in z
0.*deg,
// Starting phi angle 360.*deg); // Segment
angle G4LogicalVolume*
targetLogical = new
G4LogicalVolume(targetTubs, //
Solid
beryllium,
// Material
"Target_Logical"); // Name new
G4PVPlacement(0,
// Rotation matrix pointer
G4ThreeVector(0.,0., 3.155*cm), // Translation vector
targetLogical,
// Logical volume
"Target_Physical",
// Name
fpWorldLogical,
// Mother volume
false,
// Unused boolean
0);
// Copy number //////////////////////////////////////////////////////////////////////// ---- snipped ----- |
After implementing the above, check that the program compiles and links.
Evacuation
Chamber Window and Silicon Monitor
The evacuation chamber window and silicon monitor are also cylindrical in shape. The evacuation chamber window is constructed of iron, with an outer radius of 2 cm and a full length of 0.00510 cm. The silicon monitor is constructed of silicon, with an outer radius of 2 cm and a full length of 0.01 cm. Both volumes are to be placed along the beam line. Again, we will use G4Tubs to define the cylindrical solid, and G4PVPlacement to construct the physical volumes. The full implementation is shown below.
|
BeamTestDetectorConstruction.cc |
|
void
BeamTestDetectorConstruction::SetupGeometry() { ---- snipped ----- //////////////////////////////////////////////////////////////////////// ---- snipped ----- |
After implementing the above, compile, link and execute the program. Use HepRApp to check that all the geometry is now in place. You should see something like:

Attributes
Visualisation attributes are extra pieces of information that are associated with visualisable objects. Attributes can be used to set the colour, visibility, wire frame/solid drawing style etc of these objects. The three volumes that were implemented above are coloured white by default. We can use attributes to change this default colouring scheme, and set various other features. See the application user guide for more details.
The example below uses attributes to set volume colours through predefined G4ColourÕs and also by setting the individual the red, blue, green and alpha components of G4Colour. The target is coloured light blue, the evacuation chamber magenta and the silicon monitor cyan. Drawing styles are also set to solid by default. This is useful when visualising volumes using OpenGL for example.
|
BeamTestDetectorConstruction.cc |
|
void
BeamTestDetectorConstruction::SetupGeometry() { ----- snipped ----- // HandsOn2: Visualisation attributes // Target Volume - light blue G4VisAttributes* targetAttributes = new G4VisAttributes(G4Colour(0.0,0.5,0.5,1.0));
targetAttributes->SetForceSolid(true);
targetLogical->SetVisAttributes(targetAttributes); // Evacuation chamber - magenta G4VisAttributes* evacChamberAttributes
= new G4VisAttributes(G4Colour::Magenta());
evacChamberAttributes->SetForceSolid(true);
evacChamberLogical->SetVisAttributes(evacChamberAttributes); // Silicon Monitor - cyan G4VisAttributes*
siliconMonitorAttributes = new G4VisAttributes(G4Colour::Cyan()); siliconMonitorAttributes->SetForceSolid(true);
siliconMonitorLogical->SetVisAttributes(siliconMonitorAttributes); ---- snipped
----- |
After implementing the above, compile, link and execute the program. Check that the volumes are now coloured as specified above. You should see something like:

Visualization of
trajectories
Trajectory visualization can be controlled using interactive commands. The macro file run.mac contains example commands. Uncomment the lines highlighted below and run the program.
|
run.mac |
|
-----
snipped ----- # HandsOn 2: Trajectory visualisation # Add trajectories to the visualization. /vis/scene/add/trajectories # Accumulate multiple events in one picture. /vis/scene/endOfEventAction accumulate # Trajectory colouring scheme /vis/modeling/trajectories/create/drawByCharge /vis/modeling/trajectories/drawByCharge-0/set -1 blue /vis/modeling/trajectories/drawByCharge-0/set 1 blue /vis/modeling/trajectories/drawByCharge-0/set 0 red /run/beamOn 10 |
The trajectories should be drawn the G4Data1.heprep file. You should be able to see the electrons interacting in the target:

You can download the complete source of this exercise from HandsOn2_complete.tgz
Geant4
Tutorial Course
May 2007
Geant4.v8.2.p01
Tatsumi
Koi Ð Change visualisation tool from wired to HepRApp
Sep 2006
Gean4.v8.1p01
Tatsumi
Koi Ð Migrate to v8.1.p01 and modified for McGill Univ. Tutorial
Gean4.v8.0p01
May 2006
Jane
Tinslay Ð Heavily based on a tutorial given at a SLAC in March 2006 by Tsukasa
Aso