This repository contains a DataForge-based framework used for visualization in various scientific applications.
The main framework's use case for now is 3D visualization for particle physics experiments. Other applications including 2D plots are planned for the future.
The project is developed as a Kotlin multiplatform application, currently targeting browser JavaScript and JVM.
JVM backend requires JDK 11 or later
The main framework's features for now include:
DataForge is a software framework for automated scientific data processing. DataForge Visualization
Platform uses some of the concepts and modules of DataForge, including: Meta
, Configuration
, Context
,
Provider
, and some others.
To learn more about DataForge, please consult the following URLs:
Maturity: EXPERIMENTAL
Maturity: EXPERIMENTAL
Maturity: EXPERIMENTAL
Maturity: EXPERIMENTAL
Maturity: DEVELOPMENT
Maturity: EXPERIMENTAL
Common visionforge jupyter module
Maturity: EXPERIMENTAL
Maturity: EXPERIMENTAL
Maturity: EXPERIMENTAL
Maturity: EXPERIMENTAL
Maturity: DEVELOPMENT
Maturity: PROTOTYPE
Maturity: EXPERIMENTAL
Maturity: EXPERIMENTAL
Maturity: EXPERIMENTAL
Maturity: EXPERIMENTAL
Maturity: EXPERIMENTAL
Maturity: EXPERIMENTAL
Maturity: EXPERIMENTAL
Maturity: EXPERIMENTAL
Jupyter api artifact including all common modules
Maturity: EXPERIMENTAL
Maturity: EXPERIMENTAL
Class diagram:
One of the important features of the framework is support for 3D object prototypes (sometimes also referred to as templates). The idea is that prototype geometry can be rendered once and reused for multiple objects. This helps to significantly decrease memory usage.
The prototypes
property tree is defined in SolidGroup
class via PrototypeHolder
interface, and
SolidReference
class helps to reuse a template object.
VisionGroup
has a styleSheet
property that can optionally define styles at the Group's
level. Styles are applied to child (descendant) objects using Vision.styles: List<String>
property.
The visionforge
framework can be used to visualize geometry and events from external,
non-Kotlin based systems, such as ROOT. This will require a plugin to convert data model
of the external system to that of visionforge
. Performing such integration is a work
currently in progress.
The demo
module contains several example projects (demonstrations) of using the visionforge
framework.
They are briefly described in this section, for more details please consult the corresponding per-project
README file.
Contains a simple demonstration with a grid including a few shapes that you can rotate, move camera, and so on. Some shapes will also periodically change their color and visibility.
Example view:
A full-stack application example, showing the Muon Monitor experiment set-up.
Example view:
Visualization example for geometry defined as GDML file.
VisionForge is a modular library. Different modules provide different features with different API stability guarantees. All core modules are released with the same version, but with different API change policy. The features are described in module definitions below. The module stability could have the following levels:
@DFExperimental
or other stability warning annotations.Additionally, one should note that the VisionForge Json format impacts the reproducibility of stored vision fragments. There should not be any breaks of the format between major releases. All problems should be reported.
The documentation for the project is a work in progress. Please report any issues with missing, vague or wrong information. The contributions into documentation are quite welcome.
The original three.js bindings were made by Lars Ivar Hatledal, but the project is discontinued right now.
All other libraries are explicitly shown as dependencies. We would like to express specific thanks to JetBrains Kotlin-JS team for consulting us during the work.