From Van Essen Lab

Jump to: navigation, search


Caret7 Plan


  • Support multi-structure.
  • Minimize third party libraries.
  • Code is as platform independent and third party library independent as reasonable.
  • Caret7 will be a mixture of caret5 and caret6.
  • The underlying architecture for multi-structure ("brain", files) comes from Caret6.
  • Most algorithms and command line operations will come from Caret5.
  • GUI will be a mixture of Caret5, Caret6, and new.
  • Use OpenMP for all parallel processing. Parallel processing enabled by default.
  • Use CMake for configuring projects. CMake can do much more than qmake. CMake can find libraries, package executables, and run tests.
  • 64-bit only.


Third Party

  • Minimize third-party libraries due to compilation difficulties, bugs with newer versions, API changes, slowing compilation, etc.
  • QT is used for User-Interface and XML parsing only.
  • Minimizing third-party libraries will also facilitate future platforms (Tablets). Past platforms used by Caret include SGI and Sun.
  • No VTK or MINC.


Contains classes for 'generic' functions such as mathematical operations, data compression, etc.


  • A class for unicode strings will be needed. Plan may be to get source for QT's QString and use it to build a string class.
  • C++ has a 'wide' string but its use was quite cumbersome and it is different on UNIX and Windows platforms.


  • Uses QT for SAX Parsing.
  • QT is hidden from user so that QT's XML parsing can be replaced with another XML parsing library.


  • Used to read NIFTI header and extensions.
  • No flipping of NIFTI volumes (leave NIFTI header unchanged).


  • Reads, writes and manipulates GIFTI format files.


  • Reads, writes, and manipulates CIFTI format files.


  • Use CIFTI, GIFTI, and NIFTI whenever possible. Use XML for all other files.
  • NO Text files (too many unicode and other problems).
  • No Coordinate or Topology File. They are merged into SurfaceFile.
  • Node-based files will need a structure in the metadata.

Supported File Types

  • Annotation (XML)
  • Border Projection File (XML)
  • Foci Projection File (XML)
  • Label FIle (GIFTI)
  • Metric File (XML)
  • Palette File (XML)
  • Scenes Full and Generic (XML)
  • Spec File (XML)
  • Study Collection (XML)
  • Study Metadata (XML)
  • Surface File (GIFTI)
  • Surface Region of Interest (GIFTI)
  • Vocabulary (XML)
  • Volume File (NIFTI)


For Border and Foci projection files, use a common "projected coordinate" that may be Cartesian, Barycentric, or "Van Essen".


  • Brain - This class is the "brain" and contains BrainStructures, Model Settings, and volumes and other items that are not part of a cerebral hemisphere.
  • BrainStructure - Used for cerebral hemispheres and contains files such as Surface, Label, Metric, etc.
  • Controllers - Interfaces between OpenGL drawing ("view") and the models (Surfaces, volumes, etc).
  • Model coloring is assigned to windows.
  • Surface Projectors need to support multiple structures.
  • Identification uses "color picking".

Statistic Operations

  • Inferential operations
  • Significance testing.


  • Initially target fixed pipeline with programmable pipeline in future.


  • SureFit will be a low priority.
  • If added to Caret7, it will be an optional library as it may require VTK.


This library contains classes for graphical-user interface operations/objects that are independent of the GUI library (QT).

  • Mouse processing class that is derived for each mode mode (like Caret6).


This library contains classes for implementing the user-interface using QT.

  • Use multi-page "Operation Dialogs" in place of millions of menu items.


The desktop application(s)

Command Line

Command line (caret_command). Determine commands that are needed (Matt and Donna).


Command line statistical processing (replaces caret_stats). Determine commands needed (Donna).

Caret7 Prototype

  • A Caret7 prototype has been created. It contains the architecture of Caret6 with some code from Caret5.
  • It displays a single surface.
  • Code is locate in /Volumes/DS4600/caret_future/caret7_source.
  • Documentation is in /Volumes/DS4600/caret_future/documentation/html/index.html
  • The only third-party libraries are QT and ZLIB.
  • Libraries:
    • Common
    • XML - Encapsulates QT's XML parsing for reading XML files.
    • NIFTI - A little bit of NIFTI that is required for GIFTI.
    • GIFTI - Reads and manipulates GIFTI format files.
    • files - Contains a Surface File that encapsulates a GIFTI file.
    • brain - Contains Caret6 multi-structure architecture.
    • gui_qt -Contains classes for the QT user-interface.
    • desktop - Desktop application that displays a surface.
  • Uses CMake for project configuration.
  • "java2cpp" is a new command that given and Java source file, generates C++ header and source files that include the documentation comments.
  • Source files contains "Doxygen" styled comments.
Personal tools
Sums Database