PDF Lecture-Geometry
PDF Lecture-Geometry
4
http://geant4.org
Geant4 Geometry
Introduction
Detector geometry
• Three conceptual layers
– G4VSolid -- shape, size
– G4LogicalVolume -- daughter physical volumes,
material, sensitivity, user limits, magnetic field,
visualization attributes, etc.
– G4VPhysicalVolume -- position, rotation
has a
G4VSolid G4LogicalVolume G4VPhysicalVolume
Derives
from
G4Tubs G4VSensitiveDetector
G4PVParameterised
3
Define detector geometry
• Basic strategy Logical
Solidvolume : and size
: shape
G4VSolid* pBoxSolid = + material, sensitivity, etc.
new G4Box(“aBoxSolid”,
1.*m, 2.*m, 3.*m);
G4LogicalVolume* pBoxLog =
new G4LogicalVolume( pBoxSolid,
pBoxMaterial, “aBoxLog”, 0, 0, 0); Physical volume :
+ rotation and position
G4VPhysicalVolume* aBoxPhys =
new G4PVPlacement( pRotation,
G4ThreeVector(posX, posY, posZ),
pBoxLog, “aBoxPhys”, pMotherLog,
0, copyNo);
• A volume is placed in its mother volume. Position and rotation of the daughter volume is
described with respect to the local coordinate system of the mother volume. The origin of
mother volume’s local coordinate system is at the center of the mother volume.
– Daughter volume cannot protrude from mother volume.
Geometry I - M.Asai (SLAC) 4
Geometrical hierarchy
• One logical volume can be placed more than
once. One or more volumes can be placed in a
mother volume.
• Note that the mother-daughter relationship is an
information of G4LogicalVolume.
– If the mother volume is placed more than
once, all daughters are by definition to
appear in all of mother physical volumes.
• The world volume must be a unique physical
volume which fully contains all the other
volumes.
– The world volume defines the global
coordinate system. The origin of the global
coordinate system is at the center of the
world volume.
– Position of a track is given with respect to
the global coordinate system.
5
Geant4 v9.4
G4VUserDetectorConstruction
User classes
• main()
– Geant4 does not provide main().
Note : classes written in red are mandatory.
• Initialization classes
– Use G4RunManager::SetUserInitialization() to define in main()
– Invoked at the initialization
• G4VUserDetectorConstruction
• G4VUserPhysicsList
• Action classes
– Use G4RunManager::SetUserAction() to define in main()
– Invoked during an event loop
• G4VUserPrimaryGeneratorAction
• G4UserRunAction
• G4UserEventAction
• G4UserStackingAction
• G4UserTrackingAction
• G4UserSteppingAction
7
G4VUserDetectorConstruction
8
Describe your detector
• Derive your own concrete class from G4VUserDetectorConstruction abstract
base class.
• Implement the method Construct()
1) Construct all necessary materials
2) Define shapes/solids
3) Define logical volumes
4) Place volumes of your detector geometry
5) Associate (magnetic) field to geometry (optional)
6) Instantiate sensitive detectors / scorers and set them to corresponding volumes
(optional)
7) Define visualization attributes for the detector elements (optional)
8) Define regions (optional)
• Set your construction class to G4RunManager
• It is suggested to modularize Construct() method w.r.t. each component or sub-
detector for easier maintenance of your code.
9
Geant4 v9.4
1) Shape of volume
G4VSolid
• Abstract class. All solids in Geant4
are derived from it.
• It defines but does not implement all
functions required to:
– compute distances between the
shape and a given point
– check whether a point is inside
the shape
– compute the extent of the shape
– compute the surface normal to
the shape at a given point
• User can create his/her own solid
class.
11
Solids
Solids defined in Geant4:
G4BREPSolidPolycone, G4BSplineSurface, …
Boolean solids
G4UnionSolid, G4SubtractionSolid, …
12
CSG: G4Box, G4Tubs
13
Other CSG solids
G4Para
G4Trap (parallelepiped)
G4Cons
G4Trd
G4Torus
15
Other Specific CSG solids
G4Tet G4Hype
G4Polyhedra (tetrahedra)
G4EllipticalTube G4Ellipsoid
17
Boolean Solids
Solids can be combined using boolean operations:
G4UnionSolid, G4SubtractionSolid, G4IntersectionSolid
Requires: 2 solids, 1 boolean operation, and an (optional) transformation for
the 2nd solid
2nd solid is positioned relative to the coordinate system of the 1st solid
Result of boolean operation becomes a solid. Thus the third solid can be
combined to the resulting solid of first operation.
Solids to be combined can be either CSG or other Boolean solids.
Note: tracking cost for the navigation in a complex Boolean solid is proportional to
the number of constituent CSG solids
18
Boolean solid
19
Boolean Solids - example
G4VSolid* box = new G4Box(“Box",50*cm,60*cm,40*cm);
G4VSolid* cylinder
= new G4Tubs(“Cylinder”,0.,50.*cm,50.*cm,0.,2*M_PI*rad);
G4VSolid* union
= new G4UnionSolid("Box+Cylinder", box, cylinder);
G4VSolid* subtract
= new G4SubtractionSolid("Box-Cylinder", box, cylinder,
0, G4ThreeVector(30.*cm,0.,0.));
20
Tessellated solids
• G4TessellatedSolid (since 8.1)
– Generic solid defined by a number of facets (G4VFacet)
• Facets can be triangular (G4TriangularFacet) or quadrangular
(G4QuadrangularFacet)
– Constructs especially important for conversion of complex
geometrical shapes imported from CAD systems
– But can also be explicitly defined:
• By providing the vertices of the facets in anti-clock wise order, in
absolute or relative reference frame
– GDML binding
21
Geant4 v9.4
2) Logical Volume
G4LogicalVolume
G4LogicalVolume(G4VSolid* pSolid,
G4Material* pMaterial,
const G4String &name,
G4FieldManager* pFieldMgr=0,
G4VSensitiveDetector* pSDetector=0,
G4UserLimits* pULimits=0);
• Contains all information of volume except position and rotation
– Shape and dimension (G4VSolid)
– Material, sensitivity, visualization attributes
– Position of daughter volumes
– Magnetic field, User limits, Region
• Physical volumes of same type can share a common logical volume object.
• The pointers to solid must NOT be null.
• The pointers to material must NOT be null for tracking geometry.
• It is not meant to act as a base class.
24
Computing volumes and weights
• Geometrical volume of a generic solid or boolean composition can be
computed from the solid volume:
G4double GetCubicVolume();
– Exact volume is determinatively calculated for most of CSG solids, while
estimation based on Monte Carlo integration is given for other solids.
• Overall weight of a geometry setup (sub-geometry) can be computed from the
logical volume:
G4double GetMass(G4bool forced=false,
G4bool propagate=true, G4Material* pMaterial=0);
– The computation may require a considerable amount of time, depending
on the complexity of the geometry.
– The return value is cached and reused until forced=true.
– Daughter volumes will be neglected if propagate=false.
25
Geant4 v9.4
Logical volume
Region
Region
• A region may have its unique
– Production thresholds (cuts)
• If a region in the mass geometry does not have its own production
thresholds, those of the default region are used (i.e., may not be those of
the parent region).
– User limits
• Artificial limits affecting to the tracking, e.g. max step length, max
number of steps, min kinetic energy left, etc.
• You can set user limits directly to logical volume as well. If both logical
volume and associated region have user limits, those of logical volume
wins.
– User region information
• E.g. to implement a fast Boolean method to identify the nature of the
region.
– Fast simulation manager
– Regional user stepping action
– Field manager
• Please note :
– World logical volume is recognized as the default region. User is not allowed
to define a region to the world logical volume.
Geometry III - M.Asai (SLAC) 27
Root logical volume
• A logical volume can be a region. More
than one logical volumes may belong to
World Volume - Default Region
a region.
• A region is a part of the geometrical Root logical - Region A
hierarchy, i.e. a set of geometry
volumes, typically of a sub-system.
• A logical volume becomes a root logical Root logical -
volume once a region is assigned to it. Region B
– All daughter volumes belonging to
the root logical volume share the
same region, unless a daughter
volume itself belongs to another
root.
• Important restriction :
– No logical volume can be shared by
more than one regions, regardless
of root volume or not.
28
G4Region
29
G4Region class
• G4Region class may take following quantities:
– void SetProductionCuts(G4ProductionCuts* cut);
• Please note:
– If any of the above properties are not set for a region, properties of the world
volume (i.e. default region) are used. Properties of mother region do not
propagate to daughter region.
30
Geant4 v9.4
3) Physical volume
Physical Volumes
• Placement volume : it is one positioned volume
– One physical volume object represents one “real” volume.
• Repeated volume : a volume placed many times
– One physical volume object represents any number of
“real” volumes.
– reduces use of memory.
– Parameterised
• repetition w.r.t. copy number placement
– Replica and Division
• simple repetition along one axis
• A mother volume can contain either
– many placement volumes
– or, one repeated volume
repeated
32
Physical volume
• G4PVPlacement 1 Placement = One Placement Volume
– A volume instance positioned once in its mother volume
• G4PVParameterised 1 Parameterized = Many Repeated Volumes
– Parameterized by the copy number
• Shape, size, material, sensitivity, vis attributes, position and rotation can
be parameterized by the copy number.
• You have to implement a concrete class of G4VPVParameterisation.
– Reduction of memory consumption
– Currently: parameterization can be used only for volumes that either
a) have no further daughters, or
b) are identical in size & shape (so that grand-daughters are safely fit inside).
– By implementing G4PVNestedParameterisation instead of
G4VPVParameterisation, material, sensitivity and vis attributes can be
parameterized by the copy numbers of ancestors.
33
Physical volume
• G4PVReplica 1 Replica = Many Repeated Volumes
– Daughters of same shape are aligned along one axis
– Daughters fill the mother completely without gap in between.
• G4PVDivision 1 Division = Many Repeated Volumes
– Daughters of same shape are aligned along one axis and fill the mother.
– There can be gaps between mother wall and outmost daughters.
– No gap in between daughters.
• G4ReflectionFactory 1 Placement = a pair of Placement volumes
– generating placements of a volume and its reflected volume
– Useful typically for end-cap calorimeter
• G4AssemblyVolume 1 Placement = a set of Placement volumes
– Position a group of volumes
34
Geant4 v9.4
Physical volume
1) G4PVPlacement
G4PVPlacement
G4PVPlacement(G4RotationMatrix* pRot, // rotation of mother frame
const G4ThreeVector &tlate, // position in mother frame
G4LogicalVolume *pDaughterLogical,
const G4String &pName,
G4LogicalVolume *pMotherLogical,
G4bool pMany, // ‘true’ is not supported yet…
G4int pCopyNo, // unique arbitrary integer
G4bool pSurfChk=false); // optional boundary check
• Single volume positioned relatively to the mother volume.
Mother volume
an s la t ion in
tr
o t h e r frame
m
rotation
Physical volume
2) G4PVParameterised
G4PVParameterised
• Volumes are also often positioned in a same volume with the intent of not provoking
intersections between themselves. When volumes in a common mother actually
intersect themselves they are defined as overlapping.
• Geant4 does not allow for malformed geometries, neither protruding nor overlapping.
protruding overlapping 41
Optional checks at construction
• Constructors of G4PVPlacement and G4PVParameterised have an optional
argument “pSurfChk”.
G4PVPlacement(G4RotationMatrix* pRot,
const G4ThreeVector &tlate,
G4LogicalVolume *pDaughterLogical,
const G4String &pName,
G4LogicalVolume *pMotherLogical,
G4bool pMany, G4int pCopyNo,
G4bool pSurfChk=false);
• If this flag is true, overlap check is done at the construction.
– Some number of points are randomly sampled on the surface of creating
volume.
– Each of these points are examined
• If it is outside of the mother volume, or
• If it is inside of already existing other volumes in the same mother
volume.
• This check requires lots of CPU time, but it is worth to try at least once when you
implement your geometry of some complexity.
42
Debugging run-time commands
• Built-in run-time commands to activate verification tests for the user geometry
are defined
– to start verification of geometry for overlapping regions based on a
standard grid setup, limited to the first depth level
geometry/test/run or geometry/test/grid_test
– applies the grid test to all depth levels (may require lots of CPU time!)
geometry/test/recursive_test
– shoots lines according to a cylindrical pattern
geometry/test/cylinder_test
– to shoot a line along a specified direction and position
geometry/test/line_test
– to specify position for the line_test
geometry/test/position
– to specify direction for the line_test
geometry/test/direction
43
Debugging tools: DAVID
• DAVID is a graphical debugging tool for detecting
potential intersections of volumes
• Accuracy of the graphical representation can be
tuned to the exact geometrical description.
– physical-volume surfaces are automatically
decomposed into 3D polygons
– intersections of the generated polygons are
parsed.
– If a polygon intersects with another one, the
physical volumes associated to these polygons
are highlighted in color (red is the default).
• DAVID can be downloaded from the Web as
external tool for Geant4
– http://geant4.kek.jp/~tanaka/
46
THANK YOU
47
Geant4 v9.4
To learn more
48
Your detector construction
#ifndef MyDetectorConstruction_h
#define MyDetectorConstruction_h 1
#include “G4VUserDetectorConstruction.hh”
class MyDetectorConstruction
: public G4VUserDetectorConstruction
{
public:
G4VUserDetectorConstruction();
virtual ~G4VUserDetectorConstruction();
virtual G4VPhysicalVolume* Construct();
public:
// set/get methods if needed
private:
// granular private methods if needed
// data members if needed
};
#endif
49
G4PVPlacement
G4PVPlacement(
G4Transform3D(G4RotationMatrix &pRot, // rotation of daughter volume
const G4ThreeVector &tlate), // position in mother frame
G4LogicalVolume *pDaughterLogical,
const G4String &pName,
G4LogicalVolume *pMotherLogical,
G4bool pMany, // ‘true’ is not supported yet…
G4int pCopyNo, // unique arbitrary integer
G4bool pSurfChk=false); // optional boundary check
• Single volume positioned relatively to the mother volume.
Mother volume
rotation
ion in
translat ame
fr
mother
G4VSolid* solidChamber =
G4LogicalVolume* logicChamber =
new G4LogicalVolume
G4VPVParameterisation* chamberParam =
new ChamberParameterisation();
G4VPhysicalVolume* physChamber =
51
G4VPVParameterisation : example
class ChamberParameterisation : public G4VPVParameterisation
{
public:
ChamberParameterisation();
virtual ~ChamberParameterisation();
virtual void ComputeTransformation // position, rotation
(const G4int copyNo, G4VPhysicalVolume* physVol) const;
virtual void ComputeDimensions // size
(G4Box& trackerLayer, const G4int copyNo,
const G4VPhysicalVolume* physVol) const;
virtual G4VSolid* ComputeSolid // shape
(const G4int copyNo, G4VPhysicalVolume* physVol);
virtual G4Material* ComputeMaterial // material, sensitivity, visAtt
(const G4int copyNo, G4VPhysicalVolume* physVol,
const G4VTouchable *parentTouch=0);
// G4VTouchable should not be used for ordinary parameterization
};
void ChamberParameterisation::ComputeDimensions
(G4Box& trackerChamber, const G4int copyNo,
const G4VPhysicalVolume* physVol) const
{
G4double XhalfLength = … // w.r.t. copyNo
trackerChamber.SetXHalfLength(XhalfLength);
trackerChamber.SetYHalfLength(YhalfLength);
trackerChamber.SetZHalfLength(ZHalfLength);
}
53
G4VPVParameterisation : example
G4VSolid* ChamberParameterisation::ComputeSolid
(const G4int copyNo, G4VPhysicalVolume* physVol)
{
G4VSolid* solid;
if(copyNo == …) solid = myBox;
else if(copyNo == …) solid = myTubs;
…
return solid;
}
54
Geant4 v9.4
Divided volume
G4PVDivision
• G4PVDivision is a special kind of G4PVParameterised.
– G4VPVParameterisation is automatically generated
according to the parameters given in G4PVDivision.
• G4PVDivision is similar to G4PVReplica but
– It currently allows gaps in between mother and daughter
volumes
– We are extending G4PVDivision to allow gaps between
daughters, and also gaps on side walls. We plan to
release this extension in near future.
• Shape of all daughter volumes must be same shape as the
mother volume.
– G4VSolid (to be assigned to the daughter logical
volume) must be the same type, but different object.
• Replication must be aligned along one axis.
• If your geometry does not have gaps, use G4Replica.
mother volume
– For identical geometry, navigation of G4Replica is
faster. 56
G4PVDivision - 1
nDivisions
offset
57
G4PVDivision - 2
G4PVDivision(const G4String& pName,
G4LogicalVolume* pDaughterLogical,
G4LogicalVolume* pMotherLogical,
const EAxis pAxis,
const G4double width, // width of daughter volume is given
const G4double offset);
• The number of daughter volumes is calculated as
int( ( (size of mother) - offset ) / width )
– As many daughters as width and offset allow
width
offset
58
G4PVDivision - 3
G4PVDivision(const G4String& pName,
G4LogicalVolume* pDaughterLogical,
G4LogicalVolume* pMotherLogical,
const EAxis pAxis,
const G4int nDivisions,
const G4double width, // both number of division and width are given
const G4double offset);
• nDivisions daughters of width thickness
nDivisions
width
offset
59
G4PVDivision
• G4PVDivision currently supports following shapes / axes.
– G4Box : kXAxis, kYAxis, kZAxis
– G4Tubs : kRho, kPhi, kZAxis
– G4Cons : kRho, kPhi, kZAxis
– G4Trd : kXAxis, kYAxis, kZAxis
– G4Para : kXAxis, kYAxis, kZAxis
– G4Polycone : kRho, kPhi, kZAxis
• kZAxis - the number of divisions has to be the same as solid sections,
(i.e. numZPlanes-1), the width will not be taken into account.
– G4Polyhedra : kRho, kPhi, kZAxis
• kPhi - the number of divisions has to be the same as solid sides, (i.e.
numSides), the width will not be taken into account.
• kZAxis - the number of divisions has to be the same as solid sections,
(i.e. numZPlanes-1), the width will not be taken into account.
• In the case of division along kRho of G4Cons, G4Polycone, G4Polyhedra, if
width is provided, it is taken as the width at the -Z radius; the width at other radii
will be scaled to this one.
60
G4ReplicatedSlice
• New extension of G4Division introduced with version 9.4.
• It allows gaps in between divided volumes.
G4PVDivision(const G4String& pName, G4LogicalVolume* pDaughterLogical,
G4LogicalVolume* pMotherLogical, const EAxis pAxis,
const G4int nDivisions, const G4double half_gap, const G4double offset);
G4PVDivision(const G4String& pName, G4LogicalVolume* pDaughterLogical,
G4LogicalVolume* pMotherLogical, const EAxis pAxis,
const G4double width, const G4double half_gap, const G4double offset);
G4PVDivision(const G4String& pName, G4LogicalVolume* pDaughterLogical,
G4LogicalVolume* pMotherLogical, const EAxis pAxis,
const G4int nDivisions, const G4double width,
const G4double half_gap, const G4double offset);
half_gap nDivisions
offset
Geometry II - M.Asai (SLAC) 61
Geant4 v9.4
Physical volume
Replicated volume: G4PVReplica
Replicated Volumes
63
G4PVReplica
64
Replica - axis, width, offset
67