Caret7:Development/DevelopmentStrategy102011

From Van Essen Lab

Jump to: navigation, search

Coding (For October, 2011)

Carryover from Sept, 2011

  1. (Gifti, Jon, ETC:9/2/2011, Status:In-Progrss, NOTE from JWH: These items have been separated and are in GIFTI directory) Separate read of MetaData, LabelTable, and other elements that are present in multiple files. These implementation should be moved to the NIFTI library so that they can be used by NIFTI, GIFTI, CIFTI, and Caret XML files.
  2. (Nifti Header Reader/Writer, Caret5/6/New, Jon ETC:, Status: DONE) NiftiReader - Implement reading that reads the NIFTI header (version 1 or 2) and any extensions.
  3. (Nifti Volume File Extension, moved to Nifti Reader Writer status update below)....
  4. (Common) Implement or remove any stubbed functions.
  5. (Files, Caret XML, Caret6) SpecFile (is there a better name, DataSet, DataInventory, DataFileList??? Also write its SAXReader. For each surface-based data file listed, there will be an attribute that identifies its structure. UPDATE by JWH: Should a 'SpecFile' be a standardized file like the '*IFTI' files? Does this relate to what Dan presented, the CFF file?

New Tasks

  1. (Nifti, Caret5, Jon, Status: in development)
    1. Nifti Header Reader/Writer (Jon, Status:Done)
    2. Nifti Extension Reader/Writer (Jon, Status:On hold until after SFN) - currently reads and writes existing extensions, but is unable to parse or interpret extension data.
    3. Nifti Matrix Reader/Writer (Jon, Status: On hold until after SFN) Currently reads/writes Nifti Matrix data stored as float32 or float64, and handles byte ordering issues gracefully. TODO below:
      • (Jon, Status: DONE) Add support for reading RGB volumes, along with volumes that are stored using integer data types (i.e. 32 bit ints, 64 bit ints, etc.)
      • (Jon, Status: DONE) Implement slope/intercept data value scaling
      • (Jon, Status: DONE) Add handling for compressed nifti files (nii.gz)
      • (Jon, Status: On hold, until after SFN) Add support for loading entire time series into memory (vs. reading a volume frame at a time.) (low priority)
  2. (NiftiHelper, Caret5, Jon, Status:On hold until after SFN) - port NiftiHelper from caret5 to caret7. Nifti helper includes functions for interpreting Nifti matrix scaling, orientation, and center using the NiftiHeader supplied sform and qform matrices. It also includes conversion routines for sform and qform orientation matrices stored in the Nifti Header file. This extra level of interpretation will be necessary for caret7 to make use of volumes laid out in non-standard (non-LPI) orientation.
  3. (Cifti, Jon, Status: in development) Rewrite Cifti to use Nifti Header Reader/Writer and NiftiMatrix reader so that they both share a common code-base. Ideally, Cifti will inherit interface from NiftiFile so that they share a common interface.
  4. (Cifti, Jon, Status: taken) Add helper routines to Cifti to create sensible defaults for time series and connectivity files. This should reduce errors when creating files from scratch, and make it quite a bit easier to work with. Add other helper function to Cifti as needed.
  5. (Cifti, Jon, Status: taken) Add row-wise reading to Cifti and test it. Allow for editing Cifti files on disk, without loading the entire file into memory. This should happen when rewriting Cifti to use the newly written NiftMatrix reader/writer, but some extra methods and testing will need to happen.
  6. (CiftiXML, Tim, Status: DONE) Implement a more friendly set of functions for accessing the Cifti XML extension
  7. (ConnectomeDB, Tim, Status: DONE) Implement Cifti subclass to interface with ConnectomeDB
  8. (Common, Tim, Status: DONE) Implement a class for Caret to do http requests through
  9. (Brain, Caret6 John, Status: in development) Brain will organize all data loaded into Caret. It will contain multiple brain structures. Files that are structure independent are kept within the Brain. Multiple subjects, which require a one spec file per subject, will require a SessionManager.
  10. (Brain, Caret6 John, Status: in development) BrainStructure will contain data for a specific brain structure. At this time it is used for surface-based data related to the cerebral cortices and the cerebellum. In the future, it could contain models of sub-cortical structures. Files are associated with a brain structure by the structure attribute and the number of nodes. The brain structure will contain all of its surface-based files.
  11. (Brain, Caret6 John, Status: in development) Surface extends the SurfaceFile class and contains methods for some surface operations.
  12. (Brain, Caret6) DisplaySettings (perhaps DataController) and its subclasses are needed to manage the display status of different data types.
  13. (Brain, Caret6/New, John, Status: in development) Controllers (formerly Viewers) control the display of surfaces, volumes, etc. in the Main and Viewing Window graphics areas.
  14. (Brain, Caret6, Done, 12 Oct 2011 JWH) DataFileReader Uses Files project classes to read a file. Note: 'Brain' reads data files.
  15. (Brain, Caret6, Done, 12 Oct 2011, JWH) SpecFileReader Reads the selected files into Caret from a SpecFile. Note: 'Brain' reads the selected files in a Spec File.
  16. (Brain, New, Taken, JS) Develop a container format for caret 'projects'. This could include using CFF as Dan Marcus mentioned, cdb, sqlite, or any other number of approaches. Since this also may tie into how we manage caret projects with spec files, I will attempt to coordinate this with JWH, among others.
  17. (Brain, CIFTI, Files, Caret5/6/New, Status: Taken, Jon) Connectivity data loading and processing. A bit more clarity needs to be added to describe what kinds of processing we want (cifti average to start?, should this be located in Brain?)
  18. (GuiQt, New John, Status: in development) Main Window, toolbar, and menus.
  19. (GuiQt, Caret5/New)
  20. (GuiQt, Caret6) A window manager class that launches and updates all open windows.
  21. (GuiQt, New) Viewing Windows and yoking.
  22. (GuiQt, Caret5/New, Done, 12 Oct 2011, JWH) One file selection dialog for all files types (including SpecFile). It defaults to spec file for the filter. If additional information is needed, it appear in another dialog.
  23. (GuiQt, Caret5/6) Manage Loaded Files Window.
  24. (GuiQt, Caret6/New) A multi-page window for use by Display Control and the various operation windows.
  25. (Brain, Caret6, Done, 12 Oct 2011, JWH) SurfaceOverlay Maintains data related to a single surface overlay.
  26. (Brain, Caret6), Done, 12 Oct 2011, JWH SurfaceOverlayColoring Colors brain structure nodes for specific windows using a set of surface overlays.
  27. (Brain, Caret6, Done, 12 Oct 2011, JWH) SurfaceOverlaySet Maintains a set of surface overlays for a specific window.
  28. (Brain, Caret6, On hold until overlay system clearly defined, JWH) Volume Overlays.
  29. (Brain, Caret5/Caret6/New, In Work, 12 Oct 2011, JWH) OpenGL rendering, selection. Initially support fixed pipeline but provide interface that will allow programmable pipeline in the future.
  30. (Brain/GuiQt, New) Create mouse and keyboard processing mechanism. Active one receives input events and provides labels for status bar.
  31. (GuiQt, Caret6/New) Display Control Window.
  32. (GuiQt. Caret5/6/New) Identification Window.
  33. (GuiQt, New) Help system that may use Qt's WebKit implementation.
  34. (GuiQt, Brain, Files, Caret6/New, Tim/John, status: in progress) Interface to Connectome DataBase. Currently supports dense connectivity, should discuss how to communicate what type of cifti a URL is associated with.
  35. (GuiQt, New) Capture image(s) dialog.
  36. (GuiQt, New, JS) Animation system (rotation, time point sequencing, etc) JS - I spent roughly a year creating an animation toolkit at a previous job. Many of the concepts could carry over, however, interface design will likely involve JWH, Jenn, and Will.
  37. (Common or Animation, New, JS) This will handle the back-end work involved in calculating timelines, performing analysis of dense time series to highlight areas of interest on the timeline, creating smooth spatial rotation to different areas of interest as the time sequence is saved, etc. It will start very simple, but in the end could have quite a bit of power.) I think Animation is generic enough that it could be it's own library, or perhaps put in Common.
  38. (GuiQt, New) Extend toolbox to allow display of more than one toolbox at a time. Allow for putting them side by side at the bottom of the viewer to take advantage of wide format displays.
  39. (GuiQt, New) Design and implement a Dense Connectivity tab to the toolbox. Potential features may include saving and loading previously selected nodes, setting threshholds for what connections are displayed, controlling the palette that is used to display connectivity, etc.
  40. (GuiQt, New) Closely coupled with the Animation system. Add a Dense Time Series tab to the toolbox window. Potential interface elements to start would include a time line, pause, start, stop, rewind, fast-foward. Buttons could be added for loading a dense time series. The above interface elements don't even cover the minimum requirements for such a windows, but should highlight that it needs it's own space.
Personal tools
Sums Database