Files
uLib/.agents/skills/geant_simulation.md

40 lines
1.5 KiB
Markdown

# Skill: HEP/Geant Simulation Rules
This skill provides instructions for developing the Geant4 simulation components within `uLib`.
## Context
- **Domain Objects**: `Material`, `Solid`, `LogicalVolume`, `PhysicalVolume`.
- **Integration**: `mutomGeant` library wraps Geant4 classes into `uLib::Object`s.
## Patterns
### 1. Adding a New Solid
New solids must implement `GetPolyhedron()` to support VTK visualization.
```cpp
G4Polyhedron* MySolid::GetPolyhedron() const {
// Return the tessellated representation of the Geant4 solid
return m_G4Solid->GetPolyhedron();
}
```
### 2. Physical Volume Hierarchy
Maintain the relationship between `PhysicalVolume` and its parent `LogicalVolume`.
```cpp
auto* world = new LogicalVolume(worldSolid, worldMat);
auto* detector = new PhysicalVolume(detectorLogic, world, "Detector1");
detector->SetPosition({0, 0, 100}); // Relative to parent
```
### 3. Transformation Synchronization
Use the centralized `TRS` object to manage position and rotation. Synchronization with Geant4's internal stores should be reactive.
- Listen to `Object::Updated` on the `Solid` or `PhysicalVolume`.
- Update the underlying `G4VPhysicalVolume` position/rotation.
## Material Management
Use the `Matter` class to manage Geant4 materials. Ensure materials are registered in the `G4NistManager` or custom material store if needed.
## Checklist
- [ ] Does the solid implement `GetPolyhedron()`?
- [ ] Are parents correctly assigned in `PhysicalVolume` constructors?
- [ ] Is the `TRS` object used for all spatial transformations?