CFG4 ====== Control ---------- CG4(OpticksHub* hub) high level steering High Level Geometry -------------------------------- CGeometry(OpticksHub* hub) holder of CDetector CTestDetector G4VUserDetectorConstruction subclass, converts simple russian doll Opticks GGeoTest/NCSG/nnode geometries into Geant4 volume structures, using constituents: CMaker and CPropLib CGDMLDetector G4VUserDetectorConstruction subclass, loads GDML persisted G4 geometries with help from constituent: CPropLib addMPT() fixup info omitted from older GDML CDetector(G4VUserDetectorConstruction) base class of CTestDetector and CGDMLDetector providing geometry to Geant4 holding CMaterialLib, CSurfaceLib. The attachSurfaces() method fixes up info lost by GDML Low Level Geometry : Materials/Surfaces ------------------------------------------ CPropLib CPropLib is a constituent of CTestDetector that converts GGeo materials and surfaces into G4 materials and surfaces CMPT extends G4MaterialPropertiesTable CMaterialLib converts GGeo materials into G4 materials, a CPropLib subclass CMaterial extends G4Material just with a Digest CMaterialBridge wraps GMaterialLib, provides mapping between G4 and Opticks materials CSurfaceBridge wraps GSurfaceLib, contains CSkinSurfaceTable, CBorderSurfaceTable CSkinSurfaceTable subclass of CSurfaceTable CBorderSurfaceTable subclass of CSurfaceTable CSurfaceTable Low Level Geometry : Solids ----------------------------- CSolid wrapper for G4VSolid, providing extent CMaker converts NCSG/nnode shapes into G4VSolid Event ------- CRandomEngine m_engine instance resident of CG4, provides control of random number stream for aligned running CGenstepCollector collects gensteps and primaries CGenerator m_generator instance resident of CG4 initializes CSource.m_source in initSource of subclass CGunSource/CTorchSource/CInputPhotonSource depending of source code of G4GUN/TORCH/EMITSOURCE This converts Opticks photon sources from hub into CSource(G4VPrimaryGenerator) to be consumed by CPrimaryGeneratorAction further down the CG4 initializer list:: m_generator(new CGenerator(m_hub, this)), ... m_pga(new CPrimaryGeneratorAction(m_generator->getSource())), CSource m_source instance resident of CGenerator of type G4GUN/TORCH/EMITSOURCE G4VPrimaryGenerator subclass, with `GeneratePrimaryVertex(G4Event *evt)` providing common functionality for the various source types CTorchSource Provides TorchStepNPY configurable optical photon squadrons just like the GPU eqivalent. Implemented using distribution generators from SingleParticleSource: G4SPSPosDistribution G4SPSAngDistribution G4SPSEneDistribution CInputPhotonSource convert NPY buffer of input photons into an G4Event with primary vertices for each photon up to the maximum configured number per event CGunSource Converts NGunConfig into G4VPrimaryGenerator with `GeneratePrimaryVertex(G4Event *evt)` CPrimaryGeneratorAction isa G4VUserPrimaryGeneratorAction that uses the G4VPrimaryGenerator capabilities of the various CSource subclasses to `GeneratePrimaries(G4Event*)` which is invoked by Geant4 beamOn within CG4::propagate OpStatus G4 status/enum code formatters and translation of G4 codes to Opticks flags Recorder Collects G4Step/G4StepPoint optical photon data into NPY arrays in Opticks array format which are persisted to .npy within an OpticksEvent *RecordStep* is called for all G4Step each of which is comprised of *pre* and *post* G4StepPoint, as a result the same G4StepPoint are "seen" twice, thus *RecordStep* only records the 1st of the pair (the 2nd will come around as the first at the next call) except for the last G4Step pair where both points are recorded Rec Alternative implementation of Recorder using a vector of State instances State holds copy of G4Step together with G4OpBoundaryProcessStatus, a vector of State instances is held by Rec CRecorderLive DEAD CODE Geant4 Plumbing ----------------- CPrimaryGeneratorAction G4VUserPrimaryGeneratorAction subclass, "shell" class just providing GeneratePrimaries(G4Event*) which passes through to CSource::GeneratePrimaryVertex CSteppingAction G4UserSteppingAction subclass, which feeds G4Step to the recorders in method CSteppingAction::UserSteppingAction(G4Step*) ActionInitialization G4VUserActionInitialization subclass, providing UserAction plumbing for CPrimaryGeneratorAction and CSteppingAction PhysicsList G4VModularPhysicsList subclass, follow chroma : registered just G4OpticalPhysics() G4EmPenelopePhysics(0) Geant4 Utilities ------------------- Format G4 object string formatters for debugging CRayTracer interface to G4TheRayTracer, CPU ray tracer for G4 geometries Others -------- :: CAction CBndLib CBoundaryProcess CCheck CDebug CEventAction CG4Ctx CGenerator CGunSource CInputPhotonSource CMaterialSort CMaterialTable CMath COptical COpticalSurface CPhoton CPhysics CPoi CPrimaryGeneratorAction CProcess CProcessManager CProcessSwitches CRec CRecState CRunAction CSource CStage CStep CStepRec CStepStatus CStepping CSteppingAction CSteppingState CStp CSurfaceLib CTorchSource CTrack CTrackingAction CTraverser CVec CVis CWriter Cerenkov Scintillation DebugG4Transportation OpNovicePhysicsList OpNovicePhysicsListMessenger OpRayleigh OpStatus PhysicsList State SteppingVerbose