Convert Geant4 geometry to ORANGE
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
G4PVPlacementis just a transformed logical volumes - A
G4VPVParameterisationis 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.
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
See #1642, #1638 , #1617, #1271
Support added for unaccelerated MultiUnion via https://github.com/celeritas-project/celeritas/pull/1987. Checking all MultiUnion boxes.