celeritas icon indicating copy to clipboard operation
celeritas copied to clipboard

Convert Geant4 geometry to ORANGE

Open sethrj opened this issue 1 year ago • 1 comments

Objects and structure

Transforms

Geant4 CSG solids:

  • [x] IntersectionSolid
  • [x] UnionSolid
  • [ ] ReflectedSolid
  • [x] SubtractionSolid

Booleans in Geant4 have some restrictions: they must be contiguous, subtractions can't delete a face, ...

Solids

VecGeom/Geant4 solids with radial/azimuthal sections:

  • [x] Cone/Cons
  • [ ] CutTube/CutTubs
  • [ ] Hype (hyperbola)
  • [x] Sphere (missing polar section)
  • [ ] Torus2/Torus
  • [x] Tube/Tubs

VecGeom/Geant4 "csg" solids:

  • [ ] SExtruVolume/ExtrudedSolid[^1]
  • [ ] GenericPolycone
  • [x] Polycone/PCON
  • [x] Polyhedron/Polyhedra/PGON
  • [ ] Tessellated/TessellatedSolid[^2]

Geant4 solids (not implemented in vecgeom):

  • ~~Twisted box~~
  • ~~Twisted trap~~
  • ~~Twisted trd~~
  • ~~Twisted tubs~~
  • ~~Multi-union (accelerated union)~~

[^1]: vecgeom supports extruded solid only with 2 sections, unit scale factors, and zero offsets [^2]: tesselated solid isn't implemented in vecgeom GPU

Logical volumes

Logical volumes start off as a solid with an extra name. They can be reflected using the G4ReflectionFactory, which effectively adjusts their transformation.

They also have daughters, which are physical volumes (see below). As a first pass, logical volumes should be created as solids with a vector of daughters. We can then convert some of these into protos.

  • If a logical volume has no daughters, it's just a "material". It's a leaf in the tree.
  • If a logical volume only appears in one location, we could simply propagate its transform to its daughters.
  • If a logical volume has daughters and is reused multiple times, it should be a "unit proto".

Physical volumes

Physical volumes are some kind of modification of a logical volume:

  • A G4PVPlacement is just a transformed logical volumes
  • A G4VPVParameterisation is a repeated logical volumes (which could potentially be represented as an array, or just expanded out as a "pseudo-array")

The world is a physical volume.

Use cases

HGCAL

  • [x] Box
  • [x] Polyhedra with 2 z planes (aka prism) with a rotated start angle
  • [x] Subtraction (box minus polyhedron)
  • [x] Tube
  • [x] Polycone with 2 planes and equal radii (aka a translated cylinder)

There are no reflections, and the maximum depth of logical volumes is 9.

hgcal-volumes.pdf

TrackML

  • [x] Box
  • [x] Tube
  • [x] Turd

Dune

  • [x] Box
  • [x] Subtraction
  • [x] Tube

EMEC (generic trapezoid)

  • [x] Polycone with multiple planes and different radii, and deltaphi slices
  • [x] arb8 (generic trapezoid)
  • [x] tubes with cuts (rmin/rmax, startphi/deltaphi)
  • [x] hollow cones with wedge slices
  • [x] parallelepiped

TileCal

  • [x] Polycone is used for acceleration only! It's air enclosed by air.
  • [x] Box
  • [x] Turd
  • [x] Union
  • [x] Tube
  • [x] Trap

ZDC

  • [x] Box
  • [x] Tube
  • [x] Polyhedron (8 regular 8-sided prism)
  • [x] Subtraction
  • [x] Polycone
  • [ ] Torus
  • [x] Intersection
  • [x] Union
  • [x] Assembly?! (pv replica I guess?)
  • [x] Turd
  • [x] Arb8
  • [x] Eltube
  • [ ] Para
  • [x] Cone

LEGEND

  • [ ] GenericPolycone
  • [ ] tesselated
  • [x] ellipsoid

LZ

  • [x] Box
  • [x] Cone
  • [x] Ellipsoid
  • [ ] ExtrudedSolid
  • [x] Intersection
  • [x] Polyhedra
  • [x] Subtraction
  • [ ] Torus
  • [x] Trd
  • [x] Tube
  • [x] Union

XLZD

  • [x] Box
  • [x] Cone
  • [ ] GenericPolyCone
  • [x] Ellipsoid
  • [x] Orb
  • [ ] MultiUnion
  • [x] PolyCone
  • [x] Subtraction
  • [ ] Torus
  • [x] Tube

sethrj avatar Mar 26 '24 20:03 sethrj

See #1642, #1638 , #1617, #1271

sethrj avatar Mar 05 '25 20:03 sethrj

Support added for unaccelerated MultiUnion via https://github.com/celeritas-project/celeritas/pull/1987. Checking all MultiUnion boxes.

elliottbiondo avatar Sep 25 '25 15:09 elliottbiondo