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 Wired 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 HandsOn3.tgz to your working directory.
Compile and link it using following commands:
$ cd HandsOn3
$ 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 Wired visualization tool. It may be useful to use a dedicated Wired window.
$ wired 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 // HandsOn3 : 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" //
HandsOn3: Include G4NistManager #include "G4NistManager.hh" #include
"G4PVParameterised.hh" ---- snipped ---- void
BeamTestDetectorConstruction::SetupGeometry() { // HandsOn3: 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.
|
BeamDetectorConstruction.cc |
|
void BeamTestDetectorConstruction::SetupGeometry() { ----- snipped ----- //////////////////////////////////////////////////////////////////////// //
HandsOn3: 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.
|
BeamDetectorConstruction.cc |
|
void BeamTestDetectorConstruction::SetupGeometry() { ---- snipped ----- //////////////////////////////////////////////////////////////////////// ---- snipped ----- |
After implementing the above, compile, link and execute the program. Use Wired 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 ----- // HandsOn3: 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 3: 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 HandsOn3_complete.tgz
Geant4 Tutorial Course
Gean4.v8.0p01
May 2006
Jane Tinslay – Heavily based on a tutorial given at
a SLAC in March 2006 by Tsukasa
Aso