Welcome to the Developer’s blog. On the Whole Brain Catalog developer’s site, we’ll be putting up materials that explain the current design and architecture of the WBC, outline the future directions we have for the system, and interact with the user and developer community to make the WBC the best tool available for synthesizing neuroscience information. While the system may appear fairly large and sprawling, a few key concepts will take you a long way to understanding how it works.
First and foremost, the Whole Brain Catalog is client/server system, which means that we have separate code bases for the code that runs on your personal computer, and the code which runs on the back end systems. The client is composed of 3 sub-modules: wbc-core, wbc-client and wbc-view. The wbc-core module is the heart of the Whole Brain Catalog, containing code whose modification has sweeping implications for the whole system. It is here that we have a master schema (expressed as an XSD) which describes the way that data is fundamentally expressed within the Whole Brain Catalog. If you don’t have a good viewer for reading XSD files, I recommend you check out Oxygen, which will do a nice job of visualizing its structure. There you will see the fundamental data types of the WBC, which include “TangibleStates” and “DataWrappers”. A TangibleState is any item that can be visualized or interacted with in the WBC, and stores information about its position, rotation, scale, and other properties. A DataWrapper is a generic envelope for any kind of data. DataWrappers can wrap time series data, mesh models, tree structures, web services, and anything else. A fundamental relationship in the WBC is between TangibleStates and DataWrappers. A special sub-type of Tangible State called DataTangibleState allows the connection between these two types to be made. For example, a SlideState is a DataTangibleState that has a relationship through a DataWrapper to an image. So the SlideState says where the image should be located in the space of the WBC, and the DataWrapper says where to go get the data that will be visualized.
The wbc-client module depends on the wbc-core module and provides the code that manages TangibleStates for the purposes of user interaction, editing, updating, and deleting. A key class within this module is the TangibleManager class, which holds on to references for all TangibleStates in the system. In the client, the TangibleState is wrapped inside of a “Tangible” which is the root class for all of the types that can be visualized. The reason for using a different class for TangibleState and Tangible is that the TangibleState provides the basic setters and getters of the data model, while the Tangible class contains the functions to express how to manipulate that data model with respect to the other parts of the system.
Finally the wbc-view module depends on the wbc-client module, and contains the code that produces the Swing GUI as well as the JMonkeyEngine 3D GUI. This is the code that processes mouse clicks and button presses and translates it into the manipulation of objects in the world. The wbc-view contains counterpart classes to the TangibleManager and Tangible classes in wbc-client called TangibleViewManager and TangibleView, respectively. Our team has had to learn a lot about the JMonkeyEngine to produce this code. Hopefully you can find some quick solutions to problems you run into using JME here.
On the server side there is a single module called wbc-server. This depends on the wbc-core module. Both the client and the server use the Restlet library for its interactions via a REST interface. We have specified our REST API to the WBC server on our wiki.
We hope that you’ll get started looking into the code base and playing around. You can find a page explaining how to get started on our wiki. Please don’t hesitate to ask us questions on our forum. Also, please follow us on Twitter!