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); // HandsOn2 : Define silicon, iron and
titanium in the same way // define silicon material // define iron material // define titanium material ---- 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 implementation is
analogous to the previous one for the target volume.
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()); // set the
visualization attributes to the evacuation chamber logical volume // … // Silicon Monitor - cyan defined as G4Colour::Cyan() // define visualization attributes // set the visualization attributes to the
silicon monitor logical volume ---- 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
Cours Geant4 @ Paris 2007
June 2007
Geant4 v8.3
Ivana Hrivnacova – Hide
some pieces of code which are fully analogous to given code lines
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
Gean4.v8.0p01
May 2006
Jane Tinslay – Heavily based on a tutorial given at a SLAC in March 2006 by
Tsukasa
Aso