Jon Schindler/Caret7 Organization

From Van Essen Lab

Jump to: navigation, search


Project Organization


Listed below are the names of the projects. A project may rely on any project that is listed under the project. For example, Brain may call anything in Files since Files is under Brain. However, File MAY NOT call anything in Brain.

  • Desktop, CommandLine
  • Commands
  • GuiQt
  • OpenGL
  • Statistics
  • Brain
  • Files
  • Cifti
  • Gifti
  • Nifti
  • Palette
  • Xml
  • Common



Brain contains classes that manage all data loaded into Caret and algorithms that operate on the data.

OpenGL rendering is currently in Brain but may be moved to its own class and further split into fixed (version 2) and programmable pipelines (version 4 and ES).

Composition of Brain Objects

My first comment is that Brain Objects knows too much, and has it's hands on way too many things. BrainObjects is related to BrainModel in caret5, and if we are going with this usage, then we should consider getting rid of stuff that doesn't have to do anything with being a brain model. Things like the communication between a display controller and it's corresponding class can probably be managed without any real participation by BrainObjects. Therefore, BrainObjects doesn't need to keep a handle for them.

Overall, the less stuff that BrainObjects has to keep direct track of, the better.

A few other questions I have are: 1. Why are we putting SceneFiles in Brain Objects? Are we saying that we want BrainObjects to handle drawing a scene? Isn't that more appropriate for the Windowing objects to handle? Or, does this mean that Brain Objects isn't the right name? 2. Why do we group stuff like Surfaces under a Brain Structure, but not Foci? Is it because the same Foci can be displayed in multiple windows?

  • Brain (Manages data loaded into Caret).
    • Data Persistence and Management (the parts below manage data persistence. Data can be stored in a database, a file, in memory on a different server, etc.)
      • AnnotationFile
      • BorderProjectionFile
        • BrainIdentificationTextGenerator (Generates text of identified items for display in IdentifyWindow)
      • BrainStructure(s)
        • LabelFile
        • MetricFile
        • RGBA File
        • Surface(s)
        • SurfaceRegionOfInterestFile
        • SurfaceNodeAttributes (Attributes of nodes including identification status, morphing forces, and others).
        • SurfaceOverlayColoring (Colors nodes using surface overlay selections)
    • ConnectivitySelectionManager (Manages connectivity selectors).
      • ConnectivitySelector[number-of-selectors] (Loads connectivity data for display on surfaces, volumes, and in time chart).
        • ConnectivitySelectorDense (Loads Dense Connectivity Data)
        • ConnectivitySelectorDenseTimeOverlay (Loads Dense Time Series Data)
        • ConnectivitySelectorDenseTimeTimeCourse (Loads Dense Time Course Data).

    • FociProjectionFile
    • FociSearchFile
    • Palette File
    • Scene File
    • Study Metadata File
    • Study Collection File
    • SurfaceOverlaySet[number-of-windows]
      • SurfaceOverlay[number-of-surface-overlays]
    • Volume Files - Anatomy
    • Volume Files - Functional
    • Volume Files - Label
    • Volume Files - Probabilistic Atlas
    • Volume Files - RGBA
    • Volume Files - Segmentation
    • Volume Files - Vector
    • VolumeOverlaySet[number-of-windows]
      • VolumeOverlay[number-of-volume-overlays]
    • VolumeOverlayColoring

Brain Algorithm

The idea is that we can separate algorithms from Brain Objects. Brain Objects can then focus on managing the data, and this will allow us to keep a bit more of a barrier between how the data is stored, and how we execute algorithms

  • Algorithm (located in Common)
    • AlgorithmDataFileReader (reads data file into Brain or BrainStructure).
    • AlgorithmDataFileReaderInfo (Information about a file (structure, type, name for use by AlgorithmDataFileReader).
    • AlgorithmSpecFileDataFileReader (reads the files selected in a spec file).
    • AlgorithmSurfaceCurvature (computes surface curvature)
    • AlgorithmSurfaceSulcalDepth (computers surface sulcal depth).
    • Many others for implementation later.
  • MouseAndKeyboardProcessingInterface (Implemented for each mouse mode)


Main program for command line operations.


Contains classes for execution of commands on the command line.


Common contains classes that are essentially utility classes that may be used by any other project. Some examples include data compression, mathematical operations, etc.

Would Utilities be a better name for this library?

Common Objects

  • Algorithm (Base class for all algorithms)
  • Base64 (Performs base64 encoding/decoding)
  • BoundingBox
  • ByteOrderEnum (byte order operations)
  • ByteSwapping (performs byte swapping due to byte order differences).
  • CaretLogger (Logs messages in place of print statements)
  • CaretObject (base class for all classes not derived from a class)
  • CaretPreferences (Handles user preferences; foreground color, etc.)
  • CaretWindowEnum (Enumerated type for items that manage data on a per-window basis).
  • DataCompressZLib (Compression/decompression using ZLIB).
  • DataFile (Abstract class for all files)
  • HtmlStringBuilder (Simplifies construction of HTML for display in GUI).
  • MathFunctions (Various mathematical operations)
  • Plane (Operations related to Plane).
  • Polygon (Operations related to Polygons)
  • ProgramParameters (Simplifies processing of command line options)
  • SpeciesEnum (enumerated type for species)
  • StereotaxicSpaceEnum (enumerated type for stereotaxic space).
  • StringUtilities (Operations on String -- Replace with new String class.
  • SystemUtilities (Operating system operations)
  • TracksModificationInterface (Interface for objects whose modification status needs to be tracked such as files).


Desktop is a small main program that creates the desktop application.


Files contains classes for all data files that Caret supports. It may also contain some algorithms that operate on Caret classes. The class for each file is a descendant of DataFile or one of its descendants such as GiftiFile.

Files Objects

  • AlgorithmSurfaceGeodesicDistance
  • AnnotationFile
  • AnnotationFileSaxReader
  • CaretFileNameParser (Decomposes caret file names into components)
  • DataFileTypeEnum (Identifies file, spec file tag, extensions, etc).
  • GeodesicHelper
  • GiftiTypeFile (Encapsulates a GiftiFile).
  • LabelFile
  • MetricFile
  • Palette
  • PaletteFile
  • PaletteScaleAndColor
  • RGBA File
  • SpecFile
  • SurfaceFile
  • SurfaceRegionOfInterestFile
  • Volume (May have Sparse and Full)
  • VolumeFile

Files Objects Needed Later

  • BorderProjectionFile
  • BorderProjectionFileSaxReader
  • BorderProjection
  • FociProjectionFile
  • FociProjectionFileSaxReader
  • FociSearchFile
  • FocusProjection
  • SurfaceNodeLocator
  • SurfaceNodeLocatorBucketSearch
  • SurfaceProjector
  • Study...
  • SurfaceProjectedItem
  • Vocabulary...


CIFTI contains classes for manipulating CIFTI connectivity files.


GIFTI contains classes for manipulating GIFTI surface-based data files.

GIFTI Objects

  • GiftiArrayIndexingOrderEnum (Indicates row/column major order of data array)
  • GiftiDataArray (dimensions and data type may vary)
  • GiftiFile (Contains the data arrays)
  • GiftiFileSaxReader (Reads a GiftiFile).
  • GiftiEncodingEnum (Data encoding: Ascii/base64,gzip-base64,external binary)
  • GiftiEndianEnum (byte order of binary data)
  • GiftiException
  • GiftiLabel (Label name, color)
  • GiftiLabelTable (Organizes labels)
  • GiftiXmlElements (GIFTI File XML names)


GuiQt contains classes for constructing the graphical user-interface using Qt.

Gui Objects

  • Actions (Contains actions attached to menus and other GUI components).
  • AlgorithmExecutorDialog (Executes Algorithm subclasses in the background and allows cancellation).
  • BrainOpenGLWidget (Extends Qt widgets for OpenGL graphics)
  • CaptureImageDialog (Captures images of graphics)
  • ChartLineDialog (Displays charts such as time series)
  • ConnectivitySelectorDialog (Sets up connectivity selectors - Move to Display Control)
  • DataEntryDialog (Generic dialog for data entry).
  • DataFileOpenDialog (Dialogs for opening files).
  • DisplayControlDialog (Display Control Dialog)
  • DisplayControlPage (one or more for each data type).
  • Globals (Contains a few global variables and functions such as redrawing graphics)
  • IdentifyDialog Lists identification information.
  • ManageLoadedFilesDialog (Manage and save loaded files)
  • MultiPageDialog (Dialog with multiple pages subclasses by display control and operation dialogs).
  • MultiPageDialogPage (Page in multipage dialog).
  • NonModalDialogInterface (Interface implemented by non-modal windows so that they can be updated due changes in data).
  • NonModalDialogManager (Manages non-modal windows and issues updates to windows registered with this).
  • OpenGLMouseEvent (Mouse event, may belong in Brain or OpenGL projects).
  • PaletteColorMappingPanel (Widget for editing palettes used by connectivity, metric, shape).
  • SpecFileDialog (Select and load files from a SpecFile).
  • WindowMain (Main window, toolbar, status bar, menus)


NIFTI contains classes for manipulating NIFTI volume files. Both CIFTI and GIFTI use components from Nifti.

  • Matrix4x4 (4x4 matrix for viewing and coordinate transformation)
  • NiftiDataTypeEnum (enumerated type for nifti data type)
  • NiftiException
  • NIftiFile (extends BinaryFile, manages NIFTI file data, reads/writes header, extensions, and data. Also allows random access to data).
  • NiftiHeaderExtension (contains bytes and code for an extension)
  • NiftiIntentEnum (enumerated type for nifti intent)
  • NiftiSpacingUnitsEnum (enumerated type for spacing units)
  • NiftiTimeUnitsEnum (enumerated type for nifti time units)
  • NiftiTransformEnum (enumerated type for nifti transform)
  • NiftiUtilities
  • NiftiVersionEnum (enumerated type for nifti version)


This library may be split into OpenGL, OpenGLFixedPipeline, OpenGLProgrammablePipeline

  • BrainOpenGL (performs all OpenGL rendering).

Items below are probably OpenGL independent and can move to Brain:

  • BrainOpenGLDataSelectionManager (Processes raw selection data reported by BrainOpenGL).
  • BrainOpenGLSelectedItemAnnotation
  • BrainOpenGLSelectedItemSurface
  • BrainOpenGLSelectedItemSurfaceBorder
  • BrainOpenGLSelectedItemSurfaceFocus
  • BrainOpenGLSelectedItemSurfaceNode
  • BrainOpenGLSelectedItemSurfaceTriangle
  • BrainOpenGLSelectedItemVolumeBorder
  • BrainOpenGLSelectedItemVolumeFocus
  • BrainOpenGLSelectedItemVoxel


  • PaletteColoringMapping (palette color mapping used by functional volumes, metric, connectivity)
  • PaletteScaleModeEnum (enumerated type for scale mode)
  • PaletteThresholdTestEnum (enumerated type for threshold test)
  • PaletteThresholdTypeEnum (enumerated type for threshold type)


Statistics contains classes for statistical operations on Metric and Shape files.


Xml contains classes for SAX Parsing and writing XML formatted files.

Xml Objects

  • XmlAttributes (Contains attributes for an XML start element).
  • XmlException
  • XmlSaxParser (Abstract class for parsing XML files).
  • XmlSaxParserException
  • XmlSaxParserHandlerInterface (Delegate implemented by objects that read XML files).
  • XmlSaxParserWithQt (Concrete implementation of XmlSaxParser using QT).
  • XmlUtilities
  • XmlWriter (Writes XML files).
Personal tools
Sums Database