User:Bborucki/sandbox

VisNow is an multi-platform open-source dataflow driven modular visual data analysis platform with extensive data processing and scientific visualization capabilities. It is built entirely in Java and works seamlessly across Linux, Windows and macOS platforms. It is thought to be a Java alternative to other existing generic visualization platforms. VisNow is easily extendable to incorporate new modules and module libraries.

VisNow follows three basic principles:
 * high-level modules for ease of network creation;
 * fast generation of approximate visualization (Read-And-Watch principle);
 * reasonably determined default parameters.

Summary
VisNow is a generic framework for scientific visualization and visual data analysis. It follows a paradigm of a modular, dataflow driven system, where modules serve as functional nodes providing certain functionality in the visualization pipeline (e.g. data access, filtration, mapping, presentation), and connections between modules represent data.

The module-centric, dataflow driven concept of VisNow system is based on visualization systems like AVS/AVS Express or OpenDX, in contrast to a data-centric paradigm of many popular systems. The module-centric approach can be more flexible in the case of a complex dataflow with modules requiring multiple inputs.

VisNow application allows to create networks of modules for reading data, numerically processing them, converting to geometric objects (mapping) and presenting in viewer windows. Each module provides an immediate graphical output that is automatically connected to the viewer, providing an immediate view of a default visualization of module processing results.

History
VisNow concept was designed in the early 2000s by Krzysztof Nowiński (PhD). The main reason VisNow was born, were the limitations of the visualization platforms existing back then, significantly in user experience, complexity and High-Performance Computing tasks.

It was originally designed, developed and distributed as open-source software by the Laboratory of Visual Analysis at the Interdisciplinary Centre for Mathematical and Computational Modelling (ICM, University of Warsaw, Poland) where all the conceptual work and programming took place. Until 2020 approximately 1 million lines of code and 2,500 Java classes were developed around this project by ICM team to answer visualization and image processing needs of the scientific community.

In December 2019 visnow.org association was founded as a Non-Government Organisation in Poland with the goals of scientific visualization methods popularization, open visualization software development, and promulgation and development of domain applications of visual methods, in particular within medicine and biomedicine. Since then, visnow.org confederates contributors for VisNow development and as a community it supports source code and distribution of VisNow and its core libraries.

Design principles
The majority of existing or previous-generation systems based on the dataflow paradigm implement a fine-grained concept of relatively small building blocks requiring complicated networks to perform even simple tasks. Systems like SciRun or OpenDX require to instantiate “technical” modules like a colormap manager, 3D scene etc. to make the first geometrical object visible. In contrast, VisNow system uses a limited number of high-level modules, e.g. it is enough to use data reader, a single flow visualization module, and a viewer to obtain streamlines visualization of a 3D vector data set.

VisNow follows the Read-And-Watch principle: the user needs to see a default visual representation of the dataset as soon as possible. The Read-And-Watch policy is further supported by an intelligent selection of default parameters of data processing and mapping, e.g. mapping modules that could create large objects (e.g. 100,000,000 of sphere glyphs representing 512x512x400 dataset) automatically choose downsize of the input to reasonable dimensions leaving the final control over the geometry size to the user. Both data mapping and graphic presentation of datasets are controlled independently by each module – a module’s GUI has a standard set of data mapping and presentation controls.

The network area and module controls area are always synchronized, so that the controls of the module selected in the network area are displayed. In addition, picking a geometry object in the 3D window chooses automatically its creator in the network area and displays its controls. Functionally, VisNow platform provides all required layers of the visualization pipeline, starting from data access, through data processing (filtration), creation of visual data representation (mapping), up to presentation layers (rendering and display).

Data model
VisNow uses a generic data model called field. A field combines data structure (data nodes and relations between nodes), geometry (spatial positioning of data nodes in a 3D space) and data components (data values defined over nodes or cells). Three subtypes of field are supported to represent more common scientific data types: As fields support multivariate data, multiple data components can be defined over nodes or cells. Both scalar and vector components are supported with datatypes of byte (unsigned), short, integer, long, float, double, logic, string, and complex. Field mask is supported for data nodes validity. Time variability is supported within data components, geometry and mask independently (each with own time steps).
 * regular field - being a regular structure of a uniform 1D, 2D or 3D grid,
 * irregular field - being a structure of nodes and cells (points, segments, triangles, quads, tetrahedrons, pyramids, prisms and hexahedrons), often addressed as unstructured field,
 * point field - being a set of points.

Features
Data access modules (readers) support most common data formats (e.g. AVS field, UCD, VTK, images, DICOM, OBJ,  STL,  CSV, common HPC software files). The baseline format for VisNow is its own metadata format called VNF or serialised format VNS. Practically, any type of ASCII or binary file(s) containing data defined on a regular mesh can be described with a .vnf file and read in with the VNF reader module. Also point and irregular fields are supported.

Processing capabilities of VisNow include re-meshing, data arithmetic, differential operations, transforms (e.g. Fourier, Radon), data interpolation and denoising, as well as image and volume analysis including segmentation and skeletonization. VisNow provides advanced data mapping for multivariate data including scalar and vector components with a range of colour mapping, transparency and texture mapping algorithms. The mapping modules include slicing, isosurface, volume rendering, glyph representations, streamlines, and 3D/2D graphs. Several data analysis modules are provided – e.g. parallel coordinates plot or correlation analysis. Various formats are supported to write the resulting fields or store visualization images or videos.

Large regular and point fields are supported with up to 2^61 nodes.

VisNow provides a high level of support of spatial geometry and physical values and units in calculations. Data arithmetics (e.g. in component calculator module) incorporates proper units handling and units remapping - e.g. properly adding meters to milimeters. Differential computations cover proper time scale and proper spatial relations for non-orthogonal regular grids.

Implementation
VisNow is implemented in Java with Java3D/ JOGL as its 3D graphic engine layer. It can be run on any operating system providing Java Runtime Environment and OpenGL. A generic data type (field) used in VisNow for data representation is based on | Java Scientific Containers (JSciC) and JLargeArrays libraries supporting Java arrays with more than 2^31 nodes. The source code of VisNow and the above libraries serve as a pure-Java toolkit of visualization blocks, similarly to VTK in C/C++ or VTK Java wrappers. VisNow and the baseline libraries provide a high level of automated parallelisation for multi-core processing. Several compute-intensive fragments (e.g. anisotropic denoising) are also implemented as accelerated libraries in CUDA.

Extensions and application building
VisNow functionality can be easily extended by programming new modules and adding module libraries (plugins), which can be created as separate Java projects (JAR files), also with different licensing. New plugins (module libraries) can be dynamically added and modified at runtime. With runtime Java code modifications VisNow can serve as an integrated development environment for rapid visual prototyping. The user running the newly created or modified program encapsulated into the VisNow module can use sophisticated GUI for program parameters and visual debugging.

Additionally, with low programming effort, VisNow platform may serve as a framework for creating applications. Any module network created in VisNow can be easily converted to a single Java program and released as a standalone application with hidden network creation GUI.

Applications
VisNow have been successfully applied in multiple practical problems and research projects, utilizing all layers of functionality – as a data visualization tool for communication of results, a visual data analysis tool for interactive data exploration, a dedicated visual data processing tool based on specialized modules or as a standalone dedicated application for research purposes.

Medical image processing under visual control was applied in many Computer Assisted Radiology projects, including coronary arteries reconstruction and blood flow modelling.

A large data challenge was addressed in the visualization of 4D numerical weather forecast data, where multivariate dataset on non-uniform grid of approximately 0.7 TB per simulation was processed.