Visualization module for dataforge
Go to file
2023-12-31 18:09:36 +03:00
.github/workflows Update build.yml 2023-08-23 09:24:17 +03:00
cern-root-loader 0.3.0-RC 2023-12-12 09:17:14 +03:00
demo Optimize UI 2023-12-31 18:09:36 +03:00
docs Add event display tutorial 2023-12-10 16:02:26 +03:00
gradle/wrapper DataForge 0.7.1 and other version updates 2023-12-05 16:39:15 +03:00
ui Moving to compose 2023-12-18 09:41:05 +03:00
visionforge-compose-html Optimize UI 2023-12-31 18:09:36 +03:00
visionforge-core Optimize UI 2023-12-31 18:09:36 +03:00
visionforge-fx Add quaternion support 2022-08-21 17:21:36 +03:00
visionforge-gdml 0.3.0-RC 2023-12-12 09:17:14 +03:00
visionforge-jupyter More or less working muon monitor 2023-12-27 12:01:55 +03:00
visionforge-markdown 0.3.0-RC 2023-12-12 09:17:14 +03:00
visionforge-plotly 0.3.0-RC 2023-12-12 09:17:14 +03:00
visionforge-server Fix vision sharing between pages 2023-12-24 19:45:05 +03:00
visionforge-solid Optimize UI 2023-12-28 10:20:02 +03:00
visionforge-tables More or less working muon monitor 2023-12-27 12:01:55 +03:00
visionforge-threejs Optimize UI 2023-12-31 18:09:36 +03:00
.gitattributes Create .gitattributes 2019-04-05 15:45:59 +03:00
.gitignore Cleanup and fix ROOT bug 2023-05-16 21:12:24 +03:00
.space.kts Build 2021-09-28 12:27:58 +00:00
build.gradle.kts Fix vision sharing between pages 2023-12-24 19:45:05 +03:00
CHANGELOG.md Merge branch 'dev' into feature/compose 2023-12-25 21:31:56 +03:00
gradle.properties DataForge 0.7.1 and other version updates 2023-12-05 16:39:15 +03:00
gradlew Use standard GA configuration 2021-08-06 06:28:55 +07:00
gradlew.bat GDML optimization 2020-08-26 10:16:55 +03:00
LICENSE Geometry update 2019-07-14 22:08:15 +03:00
README.md 0.3.0-RC 2023-12-12 09:17:14 +03:00
settings.gradle.kts More or less working muon monitor 2023-12-27 12:01:55 +03:00

JetBrains Research DOI

Gradle build

Slack

DataForge Visualization Platform

Table of Contents

Introduction

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.

Requirements

JVM backend requires JDK 11 or later

Features

The main framework's features for now include:

  • 3D visualization of complex experimental set-ups
  • Event display such as particle tracks, etc.
  • Scales up to few hundred thousands of elements
  • Camera move, rotate, zoom-in and zoom-out
  • Scene graph as an object tree with property editor
  • Settings export and import
  • Multiple platform support

About DataForge

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:

Modules contained in this repository

cern-root-loader

Maturity: EXPERIMENTAL

demo

Maturity: EXPERIMENTAL

ui

Maturity: EXPERIMENTAL

visionforge-core

Maturity: DEVELOPMENT

visionforge-gdml

Maturity: EXPERIMENTAL

visionforge-jupyter

Common visionforge jupyter module

Maturity: EXPERIMENTAL

visionforge-markdown

Maturity: EXPERIMENTAL

visionforge-plotly

Maturity: EXPERIMENTAL

visionforge-server

Maturity: EXPERIMENTAL

visionforge-solid

Maturity: DEVELOPMENT

visionforge-tables

Maturity: PROTOTYPE

visionforge-threejs

Maturity: EXPERIMENTAL

demo/gdml

Maturity: EXPERIMENTAL

demo/js-playground

Maturity: EXPERIMENTAL

demo/muon-monitor

Maturity: EXPERIMENTAL

demo/playground

Maturity: EXPERIMENTAL

demo/sat-demo

Maturity: EXPERIMENTAL

demo/solid-showcase

Maturity: EXPERIMENTAL

ui/bootstrap

Maturity: EXPERIMENTAL

ui/compose

Maturity: EXPERIMENTAL

ui/react

Maturity: EXPERIMENTAL

ui/ring

Maturity: EXPERIMENTAL

visionforge-jupyter/visionforge-jupyter-common

Jupyter api artifact including all common modules

Maturity: EXPERIMENTAL

visionforge-threejs/visionforge-threejs-server

Maturity: EXPERIMENTAL

Class diagram:

Prototypes

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.

Styles

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.

visionforge-threejs

Visualization for External Systems

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.

Demonstrations

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.

Simple Example - Solid Showcase

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.

More details

Example view:

Full-Stack Application Example - Muon Monitor Visualization

A full-stack application example, showing the Muon Monitor experiment set-up.

More details

Example view:

GDML Example

Visualization example for geometry defined as GDML file.

More details

Example view:

Stability and documentation

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:

  • PROTOTYPE. On this level there are no compatibility guarantees. All methods and classes form those modules could break any moment. You can still use it, but be sure to fix the specific version.
  • EXPERIMENTAL. The general API is decided, but some changes could be made. Volatile API is marked with @DFExperimental or other stability warning annotations.
  • DEVELOPMENT. API breaking generally follows semantic versioning ideology. There could be changes in minor versions, but not in patch versions. API is protected with binary-compatibility-validator tool.
  • STABLE. The API stabilized. Breaking changes are allowed only in major releases.

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.

Thanks and references

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.