What's next
A roadmap to the future developments of Brainstorm.
Current topics
Functionnal connectivity
- Significance thresholding of the connectivity matrices
 
Documentation
- Merging the 12+3 introduction tutorials to illustrate better the latest developments
 
Source modeling
- Implementation of a new unified minimum norm/beamformer framework
 
Compatibility
Reading and writing FieldTrip structures
Calling FieldTrip functions from the pipeline editor
 
Recordings
- Nicer 2D topographies, standardized
 - RAW file viewer: 
- Pre-load next page of recordings
 - Documentation: Add definition of bad segments
 2DLayout: Doesn't work when changing page => need refresh of GlobalData.Preferences.TopoLayoutOptions.TimeWindow
 - EEG reference/storage: 
- Intracranial electrodes: Define in the MRI viewer
 Bad channels that can be specified at the program level (for sites that have permanently bad channels) => AS Dubarry
 - RAW processing: 
- Make it work for all the file formats (at least bandpass filter + sin removal)
 Events: advanced process for recombining. Example: http://www.erpinfo.org/erplab/erplab-documentation/manual/Binlister.html
 - Colormaps: 
- Create a colormap similar to MNE, where extrema are bright
 
 - NIRS: 
- Add new data type
 - Display of sensors by pairs oxy/deoxy (red/blue), overlaid
 
 - Images of amplitude: [sensor x time], [trial x time], scout: [trial x time] 
Can be done with Matrix > View as image: extract cluster, concatenate for all trials
 - 2D Layout for multiple conditions
 Filtering: Use short FIR filters instead of IIR for bandpass, to limit the ringing
Or allow the users to edit the LowStop parameter in bst_bandpass.- Show easily recordings maximum/values in the file viewer
 - Copy figures to clipboard (with the screencapture function)
 
Connectivity
- Tutorial coherence [1xN]
 - Thresholding the connectivity matrices
 - t-tests on connectivity measures
 - Graph view: 
- Fixed scales for intensity sliders
 - Fix zoom in one region
 - Text bigger
 - Too much data in appdata
 
 - Other metrics: 
- Coherence by bands: bst_coherence_band_welch.m
 - Granger by bands: bst_granger_band.m
 - Inter-trial coherence
 
 - Work on progress bars
 
Processes
- Distributed processing: Brainstorm that can run without Java
 - Use Matlab Coder to optimize some processes: Wavelets, bandpass filter, sinusoid removal
 - Allow processes in Python and Java
 Call FieldTrip functions from pipeline editor
- SSP: 
- Make average the default option
 Display warning if changing the ChannelFlag while there is a Projector applied
Show where the attenuation is projected:
(sum(IK,2)-sum(SSP(k,:)*IK,2)./sum(IK,2)
 - Bandpass: 
- Rewrite without the force low-pass filter at Fs/3
 - Show warning when using inappropriate high-pass filter (precision too high)
 - Use FIR filter
 
 Remove line noise: http://www.nitrc.org/projects/cleanline
- Interpolate the bad channels
 - ICA for cleaning eye movements in EEG low density (SSP don't work well)
 - Reports: 
- Save as HTML / PDF
 - Do not display the intermediate files
 
 - Pipeline editor: 
- Add loops over subjects/conditions/trial groups
 
 - Time-frequency: 
- Frequency bands: extended syntax (ex: [2 3 4], 10:5:90, ...)
 - How to combine 3 orientations for unconstrained sources
 - Display logs as negative
 - 2D Layout in spectrum
 - Make much faster and more memory efficient (C functions coded by Matti ?)
 - TF scouts: should display average of TF maps
 
 - Artifact detection: 
- Detection of bad segments in the RAW files (Beth)
 - Artifact rejection like SPM: if bad in 20%, bad everywhere
 - Test difference between adjacent samples
 
 - Average: 
- Remember how many trials were used per channel
 - Save standard deviation
 - Display standard deviation as a halo around the time series
 
 - Co-registration of MEG runs: 
- SSP: Group projectors coming from different files
 - Finish validation of the method
 - Apply to continuous recordings for correcting head movements
 
 - Resample continuous files
 Current Source Density (CSD) => Ghislaine
http://psychophysiology.cpmc.columbia.edu/software/CSDtoolbox/index.htmlOther processes:
- Moving average
 - Max
 - Median
 - Significance test (Dimitrios, Leo)
 - Spatial smoothing: check / document parameters
 
Contact sheets & movies: use average of time windows instead of single instants, for each picture.
- Optical flow
 - Simulation: 
Fix units in simulation processes => no *1e-9 in "simulate recordings"
- Use "add noise" process from Hui-Ling (in Work/Dev/Divers)
 
 
Database
- Optimize startup speed
 - Start Brainstorm without Java (-nodesktop)
 - Sort files by comment
 - MEG protocols: More flexible organization of the database; sub-conditions to allow different runs X different conditions.
 Group matrix files => allow to process matrix files by trial types
- Add notes in the folders (text files, visible as nodes in the tree)
 - Screen captures: save straight to the database
 - Rename multiple files
 - Allow matrix files to be attached to other files
 
Distributed computing
Options from FieldTrip:
Loose collection of computers: https://github.com/fieldtrip/fieldtrip/tree/master/peer
Alternative, with less limitations: http://research.cs.wisc.edu/htcondor/
Single multicore machine: https://github.com/fieldtrip/fieldtrip/tree/master/engine
Batch system: https://github.com/fieldtrip/fieldtrip/tree/master/qsub
Documentation: http://fieldtrip.fcdonders.nl/faq#distributed_computing_with_fieldtrip_and_matlab
Source modeling
- Finish dipole scanning (allow the tab to control multiple figures separately)
 - Dipole fitting
 - Panel Get coordinates: Add button "find maximum"
 - Stenroos 2014 paper: Include the following methods 
Inner and outer skull surfaces generator from FieldTrip (needs SPM, probably not so different from BST)
- Nolte corrected-sphere model (good model re:Alex)
 - Fast BEM models
 
 - Visualize Beamformer results: 
- Read CTF SAM .svl
 - Display as layers in the MRI viewer
 
 - Unconstrained sources: 
- Compute unconstrained and then project on the normal ?
 - Difference and stat should be: norm(A) - norm(B)
 - Stat and connectivity: what to do? (re-send email John+Sylvain)
 
 - Overlapping spheres: improve the estimation of the spheres for the frontal lobes
 - Volume grid: 
- Scouts 3D
 - Test volume sources with all the subsequent processes (timefreq, stat...)
 - Optimize: 3D display (better that 9x9 cubes)
 - Optimize: vol_dilate (with 26 neighbors)
 
 - Magnetic extrapolation: Do the same thing with EEG
 - Noise covariance matrix: 
- Display with figure_image()
 - Storage of multiple noise covariance matrices (just like the head models)
 - Always save as full, then at inversion time, we can decide between full, heteroskedastic (diagonal) or homoskedastic (i.i.d, scalar)
 Problem of having inividual trials + averages in the condition => Display warning or not?
- Save nAvg in noisecov file, to make it easier to scale to other recordings
 When deploying to other conditions: Apply destination SSP (NoiseCov = SSP . NoiseCov . SSP' )
 Sources on surface: Display peak regions over time (time = color) => A.Gramfort
- Simulation: synthesize pseudo data-files from a cortex patch (duration, amplitude, noise)
 Calculate ImagingKernel * Gain for a scout
- EEG Source modeling: Manage references and bipolar montages properly (maybe not necessary)
 - MEG source modeling: Do reconstruction only for a subset of sensors for estimating dipoles?
 - Processes compute head model and sources: Additional option to set the file comment
 - Time-frequency beamformers: 
- Band-pass everything in different frequency bands + Source estimation + TF
 - Ask data to Sarang where he sees effects that cannot be extracted with MN followed by TF
 
 - bst_wmne: Dirty patch with schur() to redo the decompositions where eig return complex values. Should be done in a cleaner way
 
Anatomy
- Project all sub-cortical structures to default anatomy
 - Warping: Scale option has to be fixed, it is currently very unstable
 - Scouts: 
- Display edges in the middle of the faces instead of the vertices
 - Project scouts betweens subjects and between hemispheres
 - Display scouts in a tree: hemisphere, region, subregion
 - Downsample to atlas: allow on timefreq/connect files
 - Sort scouts by region in process options
 
 - Generate mixed density surfaces
 - Import / registration: 
- Major bug when importing surfaces for an MRI that was re-oriented manually
 
 - Use mid-gray instead of pial surface?
 - Smooth surface: Fix little spikes to irregularities in the mesh
 Menu head model > Copy to other conditions/subjects (check if applicable first)
- Add cerebellum to default model generated with "Import FS anatomy"
 - Add eyes models to attract eye activity
 
Statistics
- ANOVA: Use LENA functions 
- Output = 1 file per effect, all grouped in a node "ANOVA"
 - Display several ANOVA maps (from several files) on one single figure, using a "graphic accumulator", towards which one can send any type of graphic object
 
 - Permutation tests: 
- t-test only (wilcoxon? sign-test?): paired, equal var, unequal var
 - nb permutations ~ 1000
 - maximum statistic over "time" or "time and space"
 
 - Permutations / clustering: cf fieldtrip
 Threshold in time: keep only the regions that are significative for contiguous blocks of time, or over a certain number of time points
=> Process that creates a static representation of a temporal window- t-test on volume sources
 Paired t-test on unconstrained sources: (convert to flat + Z-score) => AnneSo
- Question of Gaussianity of the samples: take a subset of samples + Kolmogorov-Smirnov / Shapiro-Wilk test
 http://www.mathworks.fr/fr/help/symbolic/mupad_ug/perform-shapiro-wilk-test.html
http://www.mathworks.fr/fr/help/symbolic/mupad_ref/stats-swgoft.html
http://stackoverflow.com/questions/14383115/shapiro-wilk-test-in-matlab
- Create icons for Stat/PAC, Stat/Sprectrum, etc.
 - One sample t-test across subjects
 
Input / output
- Finish MINC/CIVET integration (finir lecture MINC2: P Bellec) 
- Send email to CIVET mailing list when done
 
 FieldTrip structures: In / Out (see fieldtrip/utilities/ft_datatype_*)
- EEG File formats: 
EEG CeeGraph
- EGI: Finish support for epoched files (formats 3,5,7)
 
 - BCI2000 Input (via EEGLAB plugin)
 - EEGLAB import: 
- Selection of conditions in script mode
 - Support for binary AND epoched files (now it's one or the other)
 - Allow epoched files with recordings saved in external files (now external files implies continuous recordings)
 
 - BST-BIN: Add compression
 - Review raw on all the file formats (ASCII EEG and Cartool missing)
 
Distribution & documentation
- Rewrite basic 12+3 tutorials: group in one series 
- Illustrate 2D Layout
 - Illustrate unconstrained sources
 
 - Cleaning threads on the forum
 Add Help buttons and menus (in popups, dialog windows...) => Links to the website.
- Publication list: Fold by years
 - Finish existing tutorials: 
- Dipoles
 - Auditory: Extend to MNE/EEGLAB/SPM
 - Auditory: Finish scripts
 - Group MEM/Epilepsy + Epilepsy tutorials
 
 - New tutorials: 
- MEG connectome
 - Scrambled faces (SPM/MNE-Python)
 - Describe all the processes
 - Statistics
 - Coherence (cortico-muscular ?)
 - Intra-cranial recordings (Average ref by groups using Comment field)
 - Co-register MEG runs (Beth)
 
 - Missing in the introduction tutorials: 
- Volume scouts
 - First steps: Brainstorm preferences
 - First steps: Temporary folder
 - Exploration: Clusters
 - Headmodel: explain the fields + how to get the constrained leadfield
 - Sources: Model evaluation (by simulating recordings)
 - Sources: Theshold min. size (not documented yet)
 - Time-frequency: Description of "log freq scale" option
 
 - Missing in tutorial "Export to SPM": Add section "Compare with Brainstorm"
 - Missing in page "Cite Brainstorm": Add all the methods used in the software
 - Reference tutorials on Google scholar
 Play videos on wiki with <video> tag (save videos in .ogg)
Current bugs
- Workshops: 
- Create scouts doesn't work: scout created on the other side of the brain
 - Import anatomy folder: Out of memory sometimes (restart Matlab)
 - Bandpass filter: Out of memory (Auditory workshop)
 
 - Bug workshop Michael (Mint 12/gnome3/linux 3.0.0-12, KWin/Mutter/Compiz) 
- Cannot import two .ds folders at once
 - Colors inverted in the PSD/TF plots (power vs. log)
 - Cannot type the name of a channel in "Detect ECG"
 
 - Image viewer: Difficult to get to 100%
 - Canolty maps computation: Fix progress bar
 - Smooth TF windows that contain multiple plots
 - Record tab: Text of epoch number is too big on MacOS
 - in_bst_data_multi: If trials have different sizes, output is random (the one of the first file)
 - tree_dependencies: sources files, reprojected on default anatomy; If based on data files that are bad trials, they should be ignored by tree_dependencies, and they are not
 - Image viewer has some bugs on some systems
 - Screen capture when there is a fading effect in the window manager: captures the window
 - Close figure with coherence results should hide the "frequency" slider
 - Edit scout in MRI: small modifications cause huge increase of the scout size
 - Reports: Text size is too small with Java 1.5 (2006b-2007a)
 - Optimize MRI viewer with patch() instead of image()
 - Matlab 2014b bug with rmdir/movefile: Enter but never returns from the call
 - 2DLayout (time series): 
- Sometimes the lines are not visible
 - Does not work when DC offset is not removed
 
 - 2DLayout (TF): Images are too far apart with EEG 20 channels
 
Geeky programming details
- Removing all the CTRL and SHIFT in the keyboard shortcuts
 - Hide Java panels instead of deleting them
 - mri2scs: convert arguments to meters
 - Interpolations: Use scatteredInterpolant, griddedInterpolant, triangulation.nearestNeighbor (Matlab 2014b)
 - bst_warp and channel_project: Use tess_parametrize_new instead of tess_parametrize
 - Shared kernels: do the "get bad channels" operation in a different way (reading all the files is too slow)
 - Optimize bst_get: 
- Now study and subject have necessarily the same folder name
 - Replace big switch with separate functions
 
 - Progress bar: 
- Add different levels (to handle sub-processes)
 - Make work correctly with RAW on resting tutorial
 - Uniformize calls in bst_process/Run
 - Add a "Cancel" button
 
 - Line smoothing / anti-aliasing (time series figures)
 - Fix all the 'todo' blocks in the code
 - Replace handle "0" with bst_get('groot')
 - At the end of bst_startup in compiled mode, replace loop with waitfor(jFrame)
 - Error message: Add a link to report directly the bug on the forum
 in_bst_results (isFull=1): DataFile should be relative