Opticks Packages Overview¶
Opticks is structured as a collection of ~20 modular projects organized by their dependencies. This structure allows Opticks to be useful is different circumstances, for example on machines without an NVIDIA GPU capable of running CUDA and OptiX the OpenGL visualization functionality can still be used.
This structure also provides fast rebuilding as typically during development it is only necessary to rebuild one or two packages.
Show Package Dependencies with opticks-deps¶
opticks-deps parses CMakeList.txt files to discern dependencies between packages:
epsilon:opticks blyth$ opticks-deps
[2021-01-14 18:57:39,007] p90686 {/Users/blyth/opticks/bin/CMakeLists.py:165} INFO - home /Users/blyth/opticks
API_TAG : reldir : bash- : Proj.name : dep Proj.names
10 OKCONF : okconf : okconf : OKConf : OpticksCUDA OptiX G4
20 SYSRAP : sysrap : sysrap : SysRap : OKConf PLog
30 BRAP : boostrap : brap : BoostRap : Boost BoostAsio NLJSON PLog SysRap Threads
40 NPY : npy : npy : NPY : PLog GLM BoostRap
50 OKCORE : optickscore : okc : OpticksCore : NPY
60 GGEO : ggeo : ggeo : GGeo : OpticksCore
90 OKGEO : opticksgeo : okg : OpticksGeo : OpticksCore GGeo
100 CUDARAP : cudarap : cudarap : CUDARap : SysRap OpticksCUDA
110 THRAP : thrustrap : thrap : ThrustRap : OpticksCore CUDARap
120 OXRAP : optixrap : oxrap : OptiXRap : OKConf OptiX OpticksGeo ThrustRap
130 OKOP : okop : okop : OKOP : OptiXRap
140 OGLRAP : oglrap : oglrap : OGLRap : ImGui OpticksGLEW BoostAsio OpticksGLFW OpticksGeo
150 OKGL : opticksgl : okgl : OpticksGL : OGLRap OKOP
160 OK : ok : ok : OK : OpticksGL
165 X4 : extg4 : x4 : ExtG4 : G4 GGeo OpticksXercesC CLHEP
170 CFG4 : cfg4 : cfg4 : CFG4 : G4 ExtG4 OpticksXercesC OpticksGeo ThrustRap
180 OKG4 : okg4 : okg4 : OKG4 : OK CFG4
190 G4OK : g4ok : g4ok : G4OK : CFG4 ExtG4 OKOP
200 None : integration : integration : Integration :
Roles of the Opticks projects¶
- okconf
- detects versions of Geant4, OptiX available
- sysrap
- logging, string handling, envvar handling
- boostrap
- filesystem utils, regular expression matching, commandline parsing
- npy
- array handling, persistency in NumPy format, mesh handling/polygonization, nnode, NCSG (currently this package is too big, it needs to be split)
- optickscore
- definitions, loosely the model of the app
- ggeo
- geometry representation appropriate for uploading to the GPU
- opticksgeo
- following removals of assimprap and openmeshrap this has started to become vestigial middle management
- oglrap
- wrapper for OpenGL, visualization of geometry and photon propagations : OpenGL rendering, including GLSL shader sources
- cudarap
- loading curand persisted state
- thrustrap
- fast GPU photon indexing using interop techniques
- optixrap
- conversion of GGeo geometry into OptiX GPU geometry, OptiX programs for propagation
- okop
- pure compute propagation, with no OpenGL dependency, operations, high level OptiX control
- opticksgl
- OpenGL/OptiX/CUDA interop propagation using shared OpenGL buffers, allowing visualization of propagations directly from the shared interop GPU buffers
- ok
- high level OKMgr and OKPropagator, pulling together all the above
- extg4
- translates Geant4 solids into NCSG trees and Geant4 trees of volumes into GGeo geometries
- cfg4
- contained geant4, comparison of Geant4 and Opticks simulations
- okg4
full integration of Opticks and Geant4 including:
- Geant4 non-optical simulation (and optical too whilst testing)
- Geant4 GDML detector geometry loading
- Opticks DAE geometry loading etc…
- optixrap: OptiX optical propagation
- oglrap: OpenGL visualization
- thrustrap: Thrust GPU indexing
- g4ok
- top level (non-visualization) project intended to provide simple interface between Geant4 code with embedded Opticks : to be used from Geant4 examples
Roles of former packages¶
- assimprap
- wrapper for Assimp 3D geometry importer, can load G4DAE COLLADA geometry files (no longer needed with ExtG4 direct from Geant4 conversion)
- openmeshrap
- wrapper for OpenMesh, providing mesh traversal : used for mesh fixing (no longer needed with analytic geometry)
- yoctoglrap
- wrapper for the YoctoGL external, providing glTF 2.0 3D file format parsing/writing
Geant4 Dependency¶
Only a few of the very highest level packages depend on Geant4.
- extg4
- geometry translation
- cfg4
- validation comparisons
- okg4
- integrated Opticks+G4 for “gun running”
- g4ok
- minimal interface for embedding Opticks inside Geant4 applications
Opticks dependency on Geant4 is intended to be loose in order to allow working with multiple G4 versions (within a certain version range), using version preprocessor macros to accommodate differences. So please send copy/paste reports of incompatibilities together with G4 versions.
The weak G4 dependency allows testing of much of Opticks even without G4 installed.