Title: MedINRIA 2.0 Platform architecture overview
1- MedINRIA 2.0 - Platform architecture overview
Olivier Clatz Julien Wintz
2Context
- Multiple software
- MedINRIA
- CardioViz3D
- YAV
- Multiple operating systems
- Linux
- MacOSX
- Windows
- Multiple data to deal with
- Scalar, vector, tensor images
- Static or dynamic images
- Static or dynamic meshes
- Diverse algorithms
- image processing
- visualization
- FEM models
- Different users
- Clinicians
- Research scientists
- Many contributors
- Internal
- External
3Problem
- Non compatible codes - constrained architectures
- Integration policy - compilation and dependencies
- Code maintenance
- Hard to get familiar with concepts for newcomers
- Divergence of philosophy
4A modular architecture
- No prior knowledge of its functionalities
- Low level behavior furnished by plugins
- High level behavior furnished by scripts
5A modular architecture
6Kernel
7Kernel
- Organized into layers (dtkCore, dtkScript,
dtkSql, dtkGui ) - Qt based (only)
- Cross platform library handling
- Cross platform introspection
- Graphical user interface
- Built using cmake
A set of software components developed and
maintained at INRIA for scientific software
development
8Kernel core layer
- Provides hierarchies of virtual data classes
- Provides hierarchies of virtual processing
classes - Provides hierarchies of virtual visualization
classes - Provides factories to manage them all
- Provides a plugin abstract interface
- Provides a plugin manager
9Kernel script layer
- An abstract interpretation engine
- Embeds interpreters through specializations
10Plugin
11Plugin
- Technically speaking
- A dynamic library
- Built independently
- Relying on a common basis than the target
application
- Conceptually speaking
- A container of concrete concept types
- Specializing abstract concept types
- Registers these types to a factory
- An optional user interface
- An optional glue to external libraries
Should be as atomic as possible to provide the
highest modularity level possible
Define low level behavior
12Script
13Script
- Manipulate wrapped layers
- No matter the language
Manipulate plugins, external libraries wrappers
and the application to define a high level
workflow
14Platform
15Platform
- Domain specific use of dtks layers
- Manipulate abstract concepts data, processing
and visualization - Plugin manager (dtkCore)
- Script interpreter (dtkScript, dtkGui)
- Domain specific specialization of dtks layers
- User interface (medGui dtkGui - QtGui)
- Database (medSql dtkSql QtSql)
Browsing area
Viewer area
Workspace area
16Platform Operating systems
17Dependencies licensing
18Examples
- Tensor visualization
- ITK based plugins (data)
- VTK based plugins (visualization)
- Static user interface (from plugin)
- Dynamic user interface (from script)
19Examples
- Tensor visualization
- ITK based plugins (data)
- VTK based plugins (visualization)
- Static user interface (from plugin)
- Dynamic user interface (from script)
- Design
20Examples
- Tensor visualization
- ITK based plugins (data)
- VTK based plugins (visualization)
- Static user interface (from plugin)
- Dynamic user interface (from script)
- Usage scenario - plugins
21Examples
- Tensor visualization
- ITK based plugins (data)
- VTK based plugins (visualization)
- Static user interface (from plugin)
- Dynamic user interface (from script)
- Usage scenario - script
def init() buttn widgetFactory.createButton
("Run", "run()") group widgetFactory.create
GroupBox("Tensor") group.addButton(buttn)
holder.addWidget(group.widget()) def run()
global data, view, imdata, viewer tndata
dataFactory.create("itkDataImageTensor")
tndata.read("...") imdata
dataFactory.create("itkDataImageDouble3")
imdata.enableReader("itkDataImageDouble3Reader")
imdata.read("...") view
viewFactory.create("vtkViewImage3DO")
view.enableInteractor("vtkViewInteractorTensors")
tndata.update() imdata.update()
proxy workspace.viewer().newView()
proxy.attach(view.widget())
view.setData(tndata) view.setData(imdata)
22Examples
23Roadmap
- Next months
- First LGPL software release
- Image visualization for clinical usage
- Limited computational capacities
- Access to existing wrapped libraries through
script - Tutorials for scripts plugins development
- Documentation
- Website
- Next year
- Advanced image processing and visualization
- Visual programming
- Advanced user interface elements
24What's most important for a common platform /
toolkit?
- Unified development process
- Open-source community
- Powerful end-user application
- Extensible end-user application
- Heterogeneous plugins
- Scripting support
- Rapid prototyping
- General extension concept
- Workflow modeling
- Multiple consistent views
- Scene graphs
- Pipeline concept
- Visual programming
25How could a collaboration look like?
- Possible ways of collaboration
- Common Toolkit, composed from existing toolkits
- Common Toolkit, implemented from scratch
- Funding sources ?