Geant4: Detector description Gabriele Cosmo,

Slides:



Advertisements
Similar presentations
Geant4 v9.2p02 Geometry I Makoto Asai (SLAC) Geant4 Tutorial Course.
Advertisements

CS447/ Realistic Rendering -- Solids Modeling -- Introduction to 2D and 3D Computer Graphics.
Makoto Asai (SLAC) Geant4 Tutorial Course
Defining Material and Geometry Makoto Asai (SLAC) Geant4 Tutorial Course the 2nd Finnish Geant4 Workshop June , Helsinki Institute of Physics June.
Geant4 v9.4 Geometry II Makoto Asai (SLAC) Geant4 Tutorial Course.
Detector Description Gabriele Cosmo, Geant4 Users’ Workshop Tutorial SLAC February 18-22, 2002.
2003 by Jim X. Chen: Introduction to Modeling Jim X. Chen George Mason University.
Geant4 v9.4 Geometry I Makoto Asai (SLAC) Geant4 Tutorial Course.
Makoto Asai (SLAC) Geant4 Tutorial Course
Geometry I Makoto Asai (SLAC) Geant4 Tutorial Course Geant4 v8.2p01.
Detector Description Gabriele Cosmo, Geant4 Users’ Workshop Tutorial SLAC February 18-22, 2002.
Makoto Asai (SLAC) Geant4 Users CERN Nov. 12 th, 2002 Detector Sensitivity.
Makoto Asai (SLAC) Geant4 Users SLAC Feb. 18 th, 2002 Detector Sensitivity.
Nested Parameterization
Geant4 v9.4 Geometry II Makoto Asai (SLAC) Geant4 Tutorial Course.
Geometry II Makoto Asai (SLAC) Geant4 Tutorial Course Geant4 v8.2p01.
Geometry III Makoto Asai (SLAC) Geant4 Tutorial Course Geant4 v8.2p01.
Some tips for geometries of medical applications Makoto Asai (SLAC)
Geometry 5 I.Hrivnacova¹, J.Apostolakis² ¹IPN, Orsay; ²CERN Cours Paris June 2007.
Detector Description – basic concepts The full set of lecture notes of this Geant4 Course is available at
Modeling and representation 1 – comparative review and polygon mesh models 2.1 Introduction 2.2 Polygonal representation of three-dimensional objects 2.3.
Geant4 Geometry – building your virtual experiment
Detector Description – advanced features The full set of lecture notes of this Geant4 Course is available at
Detector Description – Part II Ivana Hrivnacova, IPN Orsay Tatiana Nikitina, CERN Aknowledgement: Slides by: J.Apostolakis, G.Cosmo, A. Lechner.
Geometry Detector geometry A detector geometry in Geant4 is made of a number of volumes. The largest volume is called the World volume. It must contain.
17-19 Oct, 2007Geant4 Japan Oct, 2007Geant4 Japan Oct, 2007Geant4 Japan 2007 Geant4 Collaboration.
17-19 Oct, 2007Geant4 Japan Oct, 2007Geant4 Japan Oct, 2007Geant4 Japan 2007 Geant4 Collaboration.
Maria Grazia Pia Detector Response Acknowledgements: A. Lechner, J. Apostolakis, M. Asai, G. Cosmo, A. Howard.
Detector Description: Basics
Detector Description – Part I Ivana Hrivnacova, IPN Orsay Tatiana Nikitina, CERN Aknowledgement: Slides by: J.Apostolakis, G.Cosmo, A. Lechner
Geometry 4 I.Hrivnacova IPN, Orsay Most slides thanks to M. Asai, SLAC Cours Paris June 2007.
The GeoModel Toolkit for Detector Description Joe Boudreau Vakho Tsulaia University of Pittsburgh CHEP’04 Interlaken.
VMC workshop1 Ideas for G4 navigation interface using ROOT geometry A.Gheata ALICE offline week, 30 May 05.
BREPS & STEP what's up and coming... Gabriele Cosmo CERN - IT/ASD GEANT4 Workshop September, 20th 1999 ESTEC, Noordwijk, The Netherlands.
Detector Description – Part III Ivana Hrivnacova, IPN Orsay Tatiana Nikitina, CERN Aknowledgement: Slides by: J.Apostolakis, G.Cosmo, A. Lechner.
May 20, 2005Wah-kai Ngai1 Basic Visualization Tutorial Using Geant4.
Detector Description: Basics
Detector Description – basic concepts The full set of lecture notes of this Geant4 Course is available at
Pedro Arce G4WS’10 October 6th, Voxelised geometries intersected with a volume Pedro Arce CIEMAT, Madrid 2010 Geant4 Workshop ESA, 4-8 October 2010.
Read-out and detector response
Geometry 3 I.Hrivnacova IPN, Orsay Most slides thanks to M. Asai, SLAC Cours Paris June 2007.
1 The Geant4 Monte Carlo toolkit Sebasten Incerti / Alfonso Mantero IN2P3/CNRS Centre d’Etudes Nucléaires de Bordeaux Gradignan France
Detector Description – Part I Ivana Hrivnacova, IPN Orsay Tatiana Nikitina, CERN Aknowledgement: Slides by: J.Apostolakis, G.Cosmo, A. Lechner
3-D Modeling Concepts V part 2.
Fits and Tolerances: Linear and Geometry.
Detector Description: Advanced Features
J. Apostolakis, M. Asai, G. Cosmo, A. Howard
Geant4: Detector description module
3-D Modeling Concepts V part 2.
Detector Description - Advanced
Geant4 Geometry Speed-ups
Detector Description – advanced features
Introduction A chef takes a knife and slices a carrot in half. What shape results? Depending on the direction of the cut, the resulting shape may resemble.
Sketching.
Engineering Geometry Engineering geometry is the basic geometric elements and forms used in engineering design. Engineering and technical graphics are.
Ideas for G4 navigation interface using ROOT geometry
Detector Description – basic concepts
Detector Description - Advanced
C++ for Geant4 users A collection of most useful and/or common features used in and to use Geant4 Marc Verderi LLR – Ecole polytechnique 14/11/2018 Marc.
Detector Description – advanced features
Geant4 introduction 2008/03/18 Nobu Katayama KEK
Geant4: Detector description module Authors: J.Apostolakis, G.Cosmo
Detector Description Overview
3-D Modeling Concepts V part B.
Read-out and detector response
Detector sensitivity Makoto Asai (SLAC Computing Services)
Read-out and detector response
3-D Modeling Concepts V part 2.
Detector description News
Geant4: Detector description module
Presentation transcript:

Geant4: Detector description Gabriele Cosmo, Gabriele.Cosmo@cern.ch Geant4 Users’ Workshop Tutorial SLAC February 18-22, 2002

Geant4: Detector description Part I Logical and physical volumes Part II Solids, touchables Part III Visualization attributes & Optimization technique Part IV Advanced features

Detector Description: Logical and Physical Volumes PART 1 Detector Description: Logical and Physical Volumes

Describe your detector Geant4: Detector description Describe your detector Derive your own concrete class from G4VUserDetectorConstruction abstract base class. Implementing the method Construct(): Modularize it according to each detector component or sub-detector: Construct all necessary materials Define shapes/solids required to describe the geometry Construct and place volumes of your detector geometry Define sensitive detectors and identify detector volumes which to associate them Associate magnetic field to detector regions Define visualization attributes for the detector elements The main class defining the detector geometry is derived from G4VUserDetectorConstruction. It is advised to modularize its design according to the geometry components (I.e. define a class for each geometry component), especially for complex geometry structures. Definition of attributes, like sensitive detectors, local fields or visualization are optional.

Creating a Detector Volume Geant4: Detector description Creating a Detector Volume Start with its Shape & Size Box 3x5x7 cm, sphere R=8m Add properties: material, B/E field, make it sensitive Place it in another volume in one place repeatedly using a function Solid Logical-Volume Physical-Volume So you can re-use i) one solid for 10 or 100 or any number of logical volumes. ii) one logical volume for 100 or 1000 physical volumes. Solids are geometrical entities. can also be used to describe sensitive volumes, ...

Define detector geometry Geant4: Detector description Define detector geometry Three conceptual layers G4VSolid -- shape, size G4LogicalVolume -- daughter physical volumes, material, sensitivity, user limits, etc. G4VPhysicalVolume -- position, rotation G4Box G4Tubs G4VSolid G4VPhysicalVolume G4Material G4VSensitiveDetector G4PVPlacement G4PVParameterised G4VisAttributes G4LogicalVolume Possible attributes associated to a G4LogicalVolume: Magnetic field Material If sensitive, associated sensitive detector Quality of geometry optimization (smartless) Visualization attributes User limits (maximum allowed step, track length, minimum kinetic energy, …) …

Define detector geometry Basic strategy G4VSolid* pBoxSolid = new G4Box(“aBoxSolid”, 1.*m, 2.*m, 3.*m); G4LogicalVolume* pBoxLog = new G4LogicalVolume( pBoxSolid, pBoxMaterial, “aBoxLog”, 0, 0, 0); G4VPhysicalVolume* aBoxPhys = new G4PVPlacement( pRotation, G4ThreeVector(posX, posY, posZ), pBoxLog, “aBoxPhys”, pMotherLog, 0, copyNo); A unique physical volume which represents the experimental area must exist and fully contains all other components. The world volume

G4LogicalVolume Contains all information of volume except position: G4LogicalVolume(G4VSolid *pSolid, G4Material *pMaterial, const G4String& name, G4FieldManager *pFieldMgr=0, G4VSensitiveDetector *pSDetector=0, G4UserLimits *pULimits=0); Contains all information of volume except position: Shape and dimension (G4VSolid) Material, sensitivity, visualization attributes Position of daughter volumes Magnetic field, User limits Shower parameterization Physical volumes of same type can share a logical volume. The pointers to solid and material must be NOT null Once created it is automatically entered in the LV store It is not meant to act as a base class

G4VPhysicalVolume G4PVPlacement 1 Placement = One Volume A volume instance positioned once in a mother volume G4PVParameterized 1 Parameterized = Many Volumes Parameterized by the copy number Shape, size, material, position and rotation can be parameterized, by implementing 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. G4PVReplica 1 Replica = Many Volumes Slicing a volume into smaller pieces (if it has a symmetry)

Geant4: Detector description Physical Volumes Placement: it is one positioned volume Repeated: a volume placed many times can represent any number of volumes reduces use of memory. Replica: simple repetition, similar to G3 divisions Parameterised A mother volume can contain either many placement volumes OR one repeated volume repeated placement

Geant4: Detector description G4PVPlacement G4PVPlacement(G4RotationMatrix *pRot, const G4ThreeVector &tlate, const G4String &pName, G4LogicalVolume *pLogical, G4VPhysicalVolume *pMother, G4bool pMany, G4int pCopyNo); Single volume positioned relatively to the mother volume In a frame rotated and translated relative to the coordinate system of the mother volume Three additional constructors: A simple variation: specifying the mother volume as a pointer to its logical volume instead of its physical volume. Using G4Transform3D to represent the direct rotation and translation of the solid instead of the frame The combination of the two variants above Adopting the constructor using the pointer to the logical volume of the mother, is a very natural way of defining a physical volume, and is especially useful when creating sub-detectors: the mother volumes is not placed until a later stage of the assembly program. The G4Transform3D argument should be constructed by: i) First rotating it to align the solid to the system of reference of its mother volume *pMother, and ii) Then placing the solid at the location Transform3D.getTranslation(), with respect to the origin of the system of coordinates of the mother volume. This is useful for the people who prefer to think in terms of moving objects in a given reference frame.

Parameterised Physical Volumes Geant4: Detector description Parameterised Physical Volumes User written functions define: the size of the solid (dimensions) Function ComputeDimensions(…) where it is positioned (transformation) Function ComputeTransformations(…) Optional: the type of the solid Function ComputeSolid(…) the material Function ComputeMaterial(…) Limitations: Applies to simple CSG solids only Daughter volumes allowed only for special cases Very powerful Consider parameterised volumes as “leaf” volumes For parameterised volumes the mother volume must be always specified, therefore the world volume can never be a parameterised volume. All methods in G4VPVParameterisation provides an argument (integer) for specifying the copy number of the parameterisation instance under consideration. Only parameterised volumes in which all the solids have the same size, currently allows the addition of daughter volumes.

Uses of Parameterised Volumes Geant4: Detector description Uses of Parameterised Volumes Complex detectors with large repetition of volumes regular or irregular Medical applications the material in animal tissue is measured. G4 geometry: cubes with varying material

Geant4: Detector description G4PVParameterised G4PVParameterised(const G4String& pName, G4LogicalVolume* pLogical, G4VPhysicalVolume* pMother, const EAxis pAxis, const G4int nReplicas, G4VPVParameterisation *pParam); Replicates the volume nReplicas times using the paramaterisation pParam, within the mother volume pMother The positioning of the replicas is dominant along the specified Cartesian axis Represents many touchable detector elements differing in their positioning and dimensions. Both are calculated by means of a G4VPVParameterisation object Alternative constructor using pointer to logical volume for the mother

Pameterisation: example - 1 Geant4: Detector description Pameterisation: example - 1 G4VSolid* solidChamber = new G4Box("chamber", 100*cm, 100*cm, 10*cm); G4LogicalVolume* logicChamber = new G4LogicalVolume(solidChamber, ChamberMater, "Chamber", 0, 0, 0); G4double firstPosition = -trackerSize + 0.5*ChamberWidth; G4double firstLength = fTrackerLength/10; G4double lastLength = fTrackerLength; G4VPVParameterisation* chamberParam = new ChamberParameterisation( NbOfChambers, firstPosition, ChamberSpacing, ChamberWidth, firstLength, lastLength); G4VPhysicalVolume* physChamber = new G4PVParameterised( "Chamber", logicChamber, physTracker, kZAxis, NbOfChambers, chamberParam); Example of parameterisation along the Z axis (kZAxis) NbOfChambers - Number of chambers firstPosition - Z of center of first chamber ChamberSpacing - Z spacing of centers ChamberWidth - Width of chamber firstLength - initial length lastLength - final length

Pameterisation: example - 2 Geant4: Detector description Pameterisation: example - 2 class ChamberParameterisation : public G4VPVParameterisation { public: ChamberParameterisation( G4int NoChambers, G4double startZ, G4double spacing, G4double widthChamber, G4double lengthInitial, G4double lengthFinal ~ChamberParameterisation(); void ComputeTransformation (const G4int copyNo, G4VPhysicalVolume* physVol) const; void ComputeDimensions (G4Box& trackerLayer, const G4int copyNo, const G4VPhysicalVolume* physVol) const; : } Example of parameterisation along the Z axis (kZAxis) NbOfChambers - Number of chambers firstPosition - Z of center of first chamber ChamberSpacing - Z spacing of centers ChamberWidth - Width of chamber firstLength - initial length lastLength - final length

Pameterisation: example - 3 Geant4: Detector description Pameterisation: example - 3 void ChamberParameterisation::ComputeTransformation (const G4int copyNo, G4VPhysicalVolume* physVol) const { G4double Zposition= fStartZ + (copyNo+1) * fSpacing; G4ThreeVector origin(0, 0, Zposition); physVol->SetTranslation(origin); physVol->SetRotation(0); } void ChamberParameterisation::ComputeDimensions (G4Box& trackerChamber, const G4int copyNo, const G4VPhysicalVolume* physVol) const G4double halfLength= fHalfLengthFirst + copyNo * fHalfLengthIncr; trackerChamber.SetXHalfLength(halfLength); trackerChamber.SetYHalfLength(halfLength); trackerChamber.SetZHalfLength(fHalfWidth); Example of parameterisation along the Z axis (kZAxis) NbOfChambers - Number of chambers firstPosition - Z of center of first chamber ChamberSpacing - Z spacing of centers ChamberWidth - Width of chamber firstLength - initial length lastLength - final length

Replicated Physical Volumes Geant4: Detector description Replicated Physical Volumes repeated The mother volume is sliced into replicas, all of the same size and dimensions. Represents many touchable detector elements differing only in their positioning. Replication may occur along: Cartesian axes (X, Y, Z) – slices are considered perpendicular to the axis of replication Coordinate system at the center of each replica Radial axis (Rho) – cons/tubs sections centered on the origin and un-rotated Coordinate system same as the mother Phi axis (Phi) – phi sections or wedges, of cons/tubs form Coordinate system rotated such as that the X axis bisects the angle made by each wedge The elements positions are calculated by means of a simple linear formula, and the elements completely fill the containing mother volume. If a G4PVReplica is positioned inside a given mother, it must be the only daughter volume for that mother. During tracking, translation and rotation of each replica object are computed according to the current active replication.

Geant4: Detector description G4PVReplica G4PVReplica(const G4String& pName, G4LogicalVolume* pLogical, G4VPhysicalVolume* pMother, const EAxis pAxis, const G4int nReplicas, const G4double width, const G4double offset=0); Alternative constructor: using pointer to logical volume for the mother An offset can only be associated to a mother offset along the axis of replication Features and restrictions: Replicas can be placed inside other replicas Normal placement volumes can be placed inside replicas, assuming no intersection/overlaps with the mother volume or with other replicas No volume can be placed inside a radial replication Parameterised volumes cannot be placed inside a replica The width of the replica refers to its extent along the axis of replication.

Geant4: Detector description Replication: example G4double tube_dPhi = 2.* M_PI; G4Tubs* tube = new G4Tubs("tube", 20*cm, 50*cm, 30*cm, 0., tube_dPhi*rad); G4LogicalVolume * tube_log = new G4LogicalVolume(tube, Ar, "tubeL", 0, 0, 0); G4VPhysicalVolume* tube_phys = new G4PVPlacement(0,G4ThreeVector(-200.*cm, 0., 0.*cm), "tubeP", tube_log, world_phys, false, 0); G4double divided_tube_dPhi = tube_dPhi/6.; G4Tubs* divided_tube = new G4Tubs("divided_tube", 20*cm, 50*cm, 30*cm, -divided_tube_dPhi/2.*rad, divided_tube_dPhi*rad); G4LogicalVolume* divided_tube_log = new G4LogicalVolume(divided_tube, Ar, "div_tubeL", 0, 0, 0); G4VPhysicalVolume* divided_tube_phys = new G4PVReplica("divided_tube_phys", divided_tube_log, tube_log, kPhi, 6, divided_tube_dPhi); Example of replication in Phi

Detector Description: Solids & Touchables PART 2 Detector Description: Solids & Touchables

G4VSolid Abstract class. All solids in Geant4 derive from it Defines but does not implement all functions required to: compute distances to/from the shape 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 Once constructed, each solid is automatically registered in a specific solid store

Geant4: Detector description Solids Solids defined in Geant4: CSG (Constructed Solid Geometry) solids G4Box, G4Tubs, G4Cons, G4Trd, … Analogous to simple GEANT3 CSG solids Specific solids (CSG like) G4Polycone, G4Polyhedra, G4Hype, … BREP (Boundary REPresented) solids G4BREPSolidPolycone, G4BSplineSurface, … Any order surface Boolean solids G4UnionSolid, G4SubtractionSolid, … STEP interface to import BREP solid models from CAD systems - STEP compliant solid modeler

Geant4: Detector description CSG: G4Tubs, G4Cons G4Tubs(const G4String& pname, // name G4double pRmin, // inner radius G4double pRmax, // outer radius G4double pDz, // Z half length G4double pSphi, // starting Phi G4double pDphi); // segment angle G4Cons(const G4String& pname, // name G4double pRmin1, // inner radius -pDz G4double pRmax1, // outer radius -pDz G4double pRmin2, // inner radius +pDz G4double pRmax2, // outer radius +pDz

Specific CSG Solids: G4Polycone Geant4: Detector description Specific CSG Solids: G4Polycone G4Polycone(const G4String& pName, G4double phiStart, G4double phiTotal, G4int numRZ, const G4double r[], const G4double z[]); numRZ - numbers of corners in the r,z space r, z - coordinates of corners Additional constructor using planes Constructor by planes: G4Polycone( const G4String& pName, G4double phiStart, G4double phiTotal, G4int numZPlanes, const G4double zPlane[], const G4double rInner[], const G4double rOuter[])

Geant4: Detector description BREP Solids BREP = Boundary REPresented Solid Listing all its surfaces specifies a solid e.g. 6 squares for a cube Surfaces can be planar, 2nd or higher order elementary BREPS Splines, B-Splines, NURBS (Non-Uniform B-Splines) advanced BREPS Few elementary BREPS pre-defined box, cons, tubs, sphere, torus, polycone, polyhedra Advanced BREPS built through CAD systems In picture: G4double zval[6] = { -4000*mm, -3500*mm, -3500*mm, -1500*mm, -1500*mm, -1000*mm }; G4double rmin[6] = { 500*mm, 500*mm, 500*mm, 500*mm, 500*mm, 500*mm }; G4double rmax[6] = { 500*mm, 2000*mm, 1000*mm, 1000*mm, 2000*mm, 500*mm }; G4BREPSolidPCone *Solid = new G4BREPSolidPCone( "BREPSolidPCone", 0.0*rad, twopi*rad, 6, zval[0], zval, rmin, rmax );

BREPS: G4BREPSolidPolyhedra Geant4: Detector description BREPS: G4BREPSolidPolyhedra G4BREPSolidPolyhedra(const G4String& pName, G4double phiStart, G4double phiTotal, G4int sides, G4int nZplanes, G4double zStart, const G4double zval[], const G4double rmin[], const G4double rmax[]); sides - numbers of sides of each polygon in the x-y plane nZplanes - numbers of planes perpendicular to the z axis zval[] - z coordinates of each plane rmin[], rmax[] - Radii of inner and outer polygon at each plane In picture: #define VECSIZE 6 G4int sides = 5; G4double rmin[VECSIZE] = { 100*mm, 100*mm, 100*mm, 100*mm, 100*mm, 100*mm }; G4double rmax[VECSIZE] = { 700*mm, 800*mm, 400*mm, 400*mm, 600*mm, 500*mm }; G4double zval[VECSIZE] = { 3500*mm, 3800*mm, 4000*mm, 4300*mm, 4500*mm, 5000*mm }; G4BREPSolidPolyhedra *sphedra = new G4BREPSolidPolyhedra( "sphedra", pi/2*rad, 2*pi*rad, sides, VECSIZE, zval[0], zval, rmin, rmax); G4LogicalVolume *lvphedra = new G4LogicalVolume( sphedra, Al, "lvphedra" ); G4PVPlacement *pvphedra = new G4PVPlacement( 0, G4ThreeVector(), "pvphedra1", lvphedra, worldPhysic, false, 0 );

Geant4: Detector description 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 Example: G4Box box(“Box", 20, 30, 40); G4Tubs cylinder(“Cylinder”, 0, 50, 50, 0, 2*M_PI); // r: 0 -> 50 // z: -50 -> 50 // phi: 0 -> 2 pi G4UnionSolid union("Box+Cylinder", &box, &cylinder); G4IntersectionSolid intersect("Box Intersect Cylinder", &box, &cylinder); G4SubtractionSolid subtract("Box-Cylinder", &box, &cylinder); Solids 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 solids Passive transformation: a rotation matrix/translation is provided to transform the coordinate system of the 1st solid to the coordinate system of the 2nd solid. The final transformation in this case is NOT copied, therefore, once defined and used it must not be modified. Active transformation: a transformation (G4Transform3D) is first created to move the 2nd solid to the correct position. The transformation in this case is stored (copied) in the final boolean solid.

How to identify a volume uniquely? Geant4: Detector description How to identify a volume uniquely? Need to identify a volume uniquely Is a physical volume pointer enough? NO! Touchable 5 4 1 2 3 pPV Later Step A physical volume can represent many actual volumes in a detector, due to: Replica, parameterisation Repetition of mother logical volume in different places in the hierarchy To identify a volume uniquely, we must ‘anchor’ it to create a touchable. A touchable may have information on all levels of the hierarchy, from the world volume to the current physical volume.

Geant4: Detector description What can a touchable do ? All generic touchables can reply to these queries: positioning information (rotation, position) GetTranslation(), GetRotation() Specific types of touchable also know: (solids) - their associated shape: GetSolid() (volumes) - their physical volume: GetVolume() (volumes) - their replication number: GetReplicaNumber() (volumes hierarchy or touchable history): info about its hierarchy of placements: GetHistoryDepth() At the top of the history tree is the world volume modify/update touchable: MoveUpHistory(), UpdateYourself() take additional arguments MoveUpHistory(num) moves the current pointer of the touchable to point “num” levels up in the history tree. Therefore, num=1 means moving to point to the mother of the current volume. The state of touchable is changed by calling this method.

Benefits of Touchables in track Geant4: Detector description Benefits of Touchables in track Permanent information stored unlike “live” volume tree which the Navigator creates & G4 used before Full geometrical information available to processes to sensitive detectors to hits A1 A2

Geant4: Detector description Touchable - 1 G4Step has two G4StepPoint objects as its starting and ending points. All the geometrical information of the particular step should be got from “PreStepPoint” Geometrical information associated with G4Track is basically same as “PostStepPoint” Each G4StepPoint object has: position in world coordinate system global and local time material G4TouchableHistory for geometrical information Since release 4.0, handles (or smart-pointers) to touchables are intrinsically used. Touchables are reference counted In release 4.0 touchables are reference counted. the lifetime of a single touchable object is assured for the whole lifetime of the application memory management of the created touchables is performed in an automatic way

Geant4: Detector description Touchable - 2 G4TouchableHistory has information of geometrical hierarchy of the point. G4Step* aStep = ..; G4StepPoint* preStepPoint = aStep->GetPreStepPoint(); G4TouchableHistoryHandle theTouchable = preStepPoint->GetTouchableHandle(); G4int copyNo = theTouchable->GetVolume()->GetCopyNo(); G4int motherCopyNo = theTouchable->GetVolume(1)->GetCopyNo(); G4ThreeVector worldPos = preStepPoint->GetPosition(); G4ThreeVector localPos = theTouchable->GetHistory()-> GetTopTransform().TransformPoint(worldPos); In the example code, it is shown how to use touchables for: Retrieve the copy number of the current volume Retrieve the copy number of the mother volume Retrieve the absolute position in global world coordinates Transform the position to local coordinates

Detector Description: Visualization attributes PART 3 Detector Description: Visualization attributes & optimization technique

Visualization of Detector Each logical volume can have associated a G4VisAttributes object Visibility, visibility of daughter volumes Color, line style, line width Force flag to wire-frame or solid-style mode For parameterised volumes, attributes can be dynamically assigned to the logical volume Lifetime of visualization attributes must be at least as long as the objects they’re assigned to

Visualization of Hits and Trajectories Each G4VHit concrete class must have an implementation of Draw() method. Colored marker Colored solid Change the color of detector element G4Trajectory class has a Draw() method. Blue : positive Green : neutral Red : negative You can implement alternatives by yourself

Volume Intersection Optimisation Geant4: Detector description Volume Intersection Optimisation Encountering volumes is very costly for simple physics it can take 80% of CPU time Must try to avoid intersection calculations ‘Smart voxels’ optimise intersections Much less need to tune geometry Can handle ‘flat’ CAD geometries

Geant4: Detector description Smart voxels For each mother volume a one-dimensional virtual division is performed the virtual division is along a chosen axis the axis is chosen by using an heuristic Subdivisions (slices) containing same volumes are gathered into one Subdivisions containing many volumes are refined applying a virtual division again using a second Cartesian axis the third axis can be used for a further refinement, in case Smart voxels are computed at initialisation time When the detector geometry is closed Do not require large memory or computing resources At tracking time, searching is done in a hierarchy of virtual divisions Time needed to tune the detector description is much reduced

Detector description tuning Geant4: Detector description Detector description tuning Some geometry topologies may require ‘special’ tuning for ideal and efficient optimisation for example: a dense nucleus of volumes included in very large mother volume Granularity of voxelisation can be explicitly set Methods Set/GetSmartless() from G4LogicalVolume Critical regions for optimisation can be detected Helper class G4SmartVoxelStat for monitoring time spent in detector geometry optimisation Automatically activated if /run/verbose greater than 1 Percent Memory Heads Nodes Pointers Total CPU Volume ------- ------ ----- ----- -------- --------- ----------- 91.70 1k 1 50 50 0.00 Calorimeter 8.30 0k 1 3 4 0.00 Layer

Visualizing voxel structure Geant4: Detector description Visualizing voxel structure The computed voxel structure can be visualized with the final detector geometry Helper class G4DrawVoxels Visualize voxels given a logical volume G4DrawVoxels::DrawVoxels(const G4LogicalVolume*) Allows setting of visualization attributes for voxels G4DrawVoxels::SetVoxelsVisAttributes(…) useful for debugging purposes