In this project we want to reconstruct an approximate 3D voxel model of some object/structure, for simplicity, consisting only of filled or empty voxels, or to improve the precision of the already existing 3D model. Reconstruction is performed with data from a set of detectors, represented by 2D angular projections - histograms, where each bin corresponds to filled (or empty) distance in that direction from detector to the Earth surface (boundary of the voxel model).
- Initial approximate 3D voxel model of the object (0 and 1 represent filled and empty voxels).
- (optional) True 3D voxel model (only for cross-checking the output)
- True (experimental) 2D angular histograms for all the detectors
- Initial approximate 2D angular histograms (optional, can be obtained from the approximate voxel model)
- simulation parameters: learning rate for gradient descent, scene shape (can be obtained from angular binning)
- optimized 2D angular histograms
- optimized 3D voxel model (voxel values in range [0,1.0], but a threshold can be applied to obtain binary representation)
- Remaining voxel error score - sum of voxel errors (number of wrong voxels) divided by number of initially wrong voxels.
- muon_reconstruction.ipynb - illustrative jupyter notebook showing the example of step by step simulation with visualisation of the outputs.
- 3dSimulation.py - main simulation script. Can take model and detector files to perform a simulation or run with the default setting. For help on command line arguments use '-h'.
- create_scene.py - script to create default scene and save into input files.
- muon_utils.py - set of functions used in simulation: creating voxels, detectors, performing gradient steps, visualising detectors and voxels, saving and reading detectors and models.
- Sandbox.py - script for playing around with potential new features.
- tests - folder with scripts for testing the performance of different configurations
of experiment and/or simulation
- detectors.py - comparing performance for different configurations and number of detectors.
- fixed_cavities.py - comparing results depending on whether initially known cavities are fixed during iterations (reduces amount of unknown parameters).
- multi_detectors.py - step is added to the voxel value only if there are contributions to the error from several detectors. This tests different minimum number of contributing detectors.
- scale.py - comparing performance for the same spheres&tunnels setting, but for different scale: 16x16x16 - 64x64x64
- *_results.txt - outputs of the corresponding tests.