Git Commits

Stable branch

Devel branch

v0.26.4 (01/04/2026)

  • plot: plot_mep() use embedded peaks
  • analyze: entropy() differential entropy added
  • analyze: negentropy() three different entropy method can be used, optional signal normalization and demeaning
  • analyze: psd() remove DC component for each epoch by default (demean argument)
  • process: ica_remove() removes ICA components properly; ica_reconstruct() removed since doubled by ica_remove()
  • significantly reduced multi-threading overhead
  • updated website
  • updated tutorials (still in progress)
  • entire code has been cleaned up
  • almost all code is nicely commented
  • almost all functions have complete docstrings

v0.26.3 (01/03/2026)

  • breaking change: frq_n argument replaced with nfrq
  • breaking change: channel_info() accepts channel by name
  • breaking change: channel_cluster() returns list of labels
  • breaking change: channel_pick() returns list of labels
  • fix: trim() removal of markers
  • plot: use exclude_bads when plotting
  • plot: plot_filter() is interactive
  • plot: plot_gfp() Global Field Power for ERP/ERF
  • plot: plot() delete segments
  • plot: plot() show two objects
  • plot: plot() show channel info
  • plot: plot() toggle channel good/bad status
  • process: filter_create() default rp and rs values changed to 0.5 and 20, respectively
  • analyzer: erp_auc() measure area under curve for ERP/ERF/MEP
  • analyze: erp_gfp() Global Field Power
  • edit: channel_reject() and epoch_reject()
  • multitaper: default number of tapers is now 16
  • code cleanup
  • many minor modifications and fixes

v0.26.2 (01/02/2026)

  • breaking change: GUI functions (i*()) are disabled and being rewritten
  • breaking change: transition from Plots.jl to GLMakie.jl
  • breaking change: frq_lim argument replaced with flim
  • breaking change: removed GPU support
  • breaking change: removed components
  • breaking change: time points are rounded to 4 decimals
  • breaking change: list of bad channels is a vector for all epochs, not a matrix for each epoch separately
  • breaking change: trim() can be applied to a continuous signal only
  • breaking change: default woverlap is round(Int64, wlen * 0.90)
  • plot: plot() is completely new
  • plot: plot_locs() and plot_locs3d() are now separate functions
  • plot: plot_locs() is interactive
  • plot: plot_topo() does not use time segment, only time point
  • plot: plot_topo() can also plot external data (vector or matrix; matrix will be averaged)
  • plot: plot_topo() can mark significant channels
  • plot: plot_topo() thresholding improved, can now be also applied to locs
  • plot: plot_psd() head shape can be added in topographical map
  • plot: plot_psd() multichannel plot is removed, butterfly is default
  • plot: plot_coherence() multichannel plot is removed, butterfly is default
  • plot: plot_phsd() multichannel plot is removed, butterfly is default
  • plot: plot_spectrogram() thresholding improved
  • plot: plot_spectrogram() head shape can be added in topographical map
  • plot: plot_spectrogram() can plot topographical map of spectrograms
  • plot: plot_spectrogram_topo() and plot_psd_topo() are interactive
  • plot: adding plot locs to plots is improved
  • edit: crop()
  • edit: trim() adds “NA/DELETED” marker at deletion point
  • io: when loading/adding locs, make locs order consistent with labels
  • new thresholding methods: :in and :bin
  • code cleanup
  • many minor modifications and fixes

v0.26.1 (01/01/2026)

  • some changes to GUI
  • code cleanup
  • many minor modifications and fixes

v0.25.12 (01/12/2025)

  • Gtk.jl replaced with Gtk4.jl
  • code cleanup
  • many minor modifications and fixes

v0.25.11 (01/11/2025)

  • breaking change: na_set_use_cuda() renamed to na_set_use_gpu()
  • MKL library is not used anymore for FFTW (does not work with Phase Slope Index package)
  • analyze: psi() - calculate Phase Slope Index
  • analyze: escor() - calculate Envelope-to-Signal Correlation
  • analyze: aecor() - calculate Amplitude Envelope Correlation
  • analyze: psa() - calculate Phase Synchronization Analysis
  • analyze: cosim() - calculate Cosine Similarity
  • analyze: corr() - calculate Pearson Correlation
  • analyze: iplv() - calculate Imaginary Phase Locking Value
  • analyze: plv() - calculate Phase Locking Value
  • analyze: dpli() - calculate Directed Phase Lag Index
  • analyze: wpli() - calculate weighted Phase Locking Index
  • analyze: cpsd() - calculate using short time Fourier transform
  • analyze: coherence() - calculate imaginary part of coherence
  • changing preferences does not require restarting anymore
  • initial support for AMDGPU added
  • tested under Julia 1.12
  • code cleanup
  • many minor modifications and fixes

v0.25.10 (01/10/2025)

  • breaking change: process: filter_create() - order is not translated into attenuation, transition band width is required for :firls, :remez and :iirnotch filters
  • breaking change: process: new structure of discrete wavelet decomposition coefficients
  • updated tutorials
  • analyze: ghexp() - calculate Generalised Hurst Exponents (GHEs)
  • process: many changes in discrete and continuous wavelet decomposition functions
  • process: denoise_dwd() - denoise using discrete wavelet decomposition
  • plot: plot_dwc() - plot discrete wavelet decomposition coefficients
  • plot: plot_filter_response() - plot group delay for FIR filters
  • plot: plot_polezero() - plot filter poles and zeros
  • plot: plot_locs() - plot brain or head mesh together with electrodes
  • code cleanup
  • many minor modifications and fixes

v0.25.9 (01/09/2025)

  • breaking change: time points are internally rounded to 3 digits
  • updated tutorials
  • updated documentation format
  • plot: plot_phase() - plot phases
  • plot: plot_fi() - plot instantaneous frequencies
  • plot: plot_hs() - plot Hilbert spectrum
  • plot: plot_imf() - plot IMFs produced by EMD
  • plot: plot_gridlocs() - plot a simplified plot of 10-20 EEG channels on a grid
  • plot: plot_spectrogram() - plot Hilbert-Huang spectrogram
  • analyze: hmspectrum() - calculate Hilbert marginal spectrum
  • analyze: hhtspectrogram() - calculate Hilbert-Huang spectrogram
  • analyze: zipratio() - calculate zip ratio of the object data
  • analyze: emd() - perform Empirical Mode Decomposition (EMD)
  • analyze: transform(), ftransform() and htransform() replaced spectrum() - Fourier and Hilbert transforms
  • process: reference_slap() - perform spherical Laplacian referencing
  • new preference: colors - enable/disable colored output
  • code cleanup
  • many minor modifications and fixes

v0.25.8 (01/08/2025)

  • tester: iavh() - interactive module for subjective recreation of auditory hallucinations
  • analyze: dirinrg() - calculate Dirichlet energy
  • model: efield2d() - model 2-dimensional electric field
  • plot: plot_efield2d() - plot 2-dimensional electric field
  • NeuroStats.jl merged with NeuroAnalyzer.jl
  • Markdown documentation is no longer maintained
  • code cleanup
  • many minor modifications and fixes

v0.25.7 (01/07/2025)

  • analyze: entropy() - calculates sample entropy and normalized sample entropy
  • analyze: hfd() - calculates the Higuchi fractal dimension
  • analyze: sumsim() - calculates summed similarity using an exponential decay model
  • code cleanup
  • many minor modifications and fixes

v0.25.6 (01/06/2025)

  • code cleanup
  • many minor modifications and fixes

v0.25.5 (01/05/2025)

  • plot: plot_connectivity_circle()
  • plot: plot_heatmap(), plot_topo() and plot_spectrogram() now can also draw thresholded region
  • analyze: topo_var(), diss(), gfp() and gfp_norm() for ERP/ERF objects
  • code cleanup
  • many minor modifications and fixes

v0.25.4 (01/04/2025)

  • breaking change: channel_cluster() returns channel numbers, not names
  • breaking change: referencing changes locs labels
  • plot: default palette changed to bluesreds for some plots (topomap, heatmap, matrix)
  • exclude_bads preference was added (default is false) to automatically ignore channels marked as bad from analysis
  • all tutorials are automatically generated using Quarto-based Markdown notebooks
  • code cleanup
  • many minor modifications and fixes

v0.25.3 (01/03/2025)

  • Julia ≥1.11 is required
  • greedy threads scheduler is used: significant speed increase of many functions
  • statistical functions moved to (NeuroStats.jl)
  • code cleanup
  • many minor modifications and fixes

v0.25.2 (01/02/2025)

  • gui: ifilter() - interactive filter design
  • code cleanup
  • many minor modifications and fixes

v0.25.1 (01/01/2025)

  • io: import_ft() imports EEG channels data for MEG+EEG recordings
  • analyze: lat_idx() - calculates lateralization index
  • analyze: tpt_detect() and tpt_analyze() - detects and analyzes pinches in TPT recordings
  • recorder: tpt() - records Two-point Pinch Test
  • channels list may now be defined using Julia regex, e.g. plot(eeg, ch=r"Fp.*")
  • new data types: TPT
  • code cleanup
  • many minor modifications and fixes

v0.24.12 (01/12/2024)

  • io: import_ft() - FieldTrip EEG, MEG, events
  • io: import_fiff() imports SSP projections
  • gui: iedit() - move locs origin
  • process: generate_ssp_projectors() and apply_ssp_projectors()
  • code cleanup
  • many minor modifications and fixes

Breaking changes:

  • markers field description renamed to value
  • MEG recording header must contain SSP labels, SSP channels and SSP data fields

v0.24.11 (01/11/2024)

  • plot: plot_heatmap()
  • tested against Julia 1.11 release
  • code cleanup
  • many minor modifications and fixes

v0.24.10 (01/10/2024)

  • return types added to all functions for better error handling
  • code cleanup
  • many minor modifications and fixes

v0.24.9 (01/09/2024)

  • gui: iview():
    • butterfly / mean mode
    • time/epoch slider
  • gui: ipsd():
    • time/epoch slider
    • new channel selector
  • gui: ispectrogram():
    • time/epoch slider
    • new channel selector
  • gui: itopo():
    • time/epoch entry field
    • compatible with EEG/MEG
  • gui: iview_ica():
    • preview and remove ICA components
  • code cleanup
  • many minor modifications and fixes

v0.24.8 (01/08/2024)

  • breaking change: channels are addressed by their labels, not numbers; to convert numbers to labels, use get_channel(obj, type="eeg") or get_channel(obj, ch=["Fp1", "Fp2"])
  • breaking change: channels are stored as they are in the recording (physical order); list of channels sorted by their type is stored in OBJ.header.recording[:channel_order] (logical order)
  • breaking change: channels label is stored in OBJ.header.recording[:label], channel unit is stored in OBJ.header.recording[:unit]
  • list of bad channels is stored in the OBJ.header.recording[:bad_channel]
  • utils: get_channel()
    • channels may be addressed by name, e.g. ch="Fp1" or ch=["C3", "C4"] or by type, e.g. ch="all", ch="eeg" or ch=["mag", "grad"]
    • supports exclude options (default value is “bad”, so bad channels are excluded from the list)
  • initial support for MEG data
  • io: import_fiff() - both MEG and EEG data
  • gui: iview() - lots of changes:
    • select time segment
    • delete time segment / epoch
    • left click channel label to display its properties
    • right click channel label to mark it as bad
    • zoom in and out
    • scroll with mouse wheel
    • toggle scale bars, monochromatic mode, snapping
  • plot: plot_signal() - lots of changes:
    • finally displays properly data with > 100 channels
    • gets list of bad channels from the header
    • channels of different type are not displayed separately, but in logical order
    • scale bars and units are drawn for each channel type
  • process: denoise_cwt() - denoise using continuous wavelet transformation
  • process: remove_cwt() - remove artifacts using continuous wavelet transformation
  • analyze: cwtspectrogram() - improved CWT scaleogram
  • analyze: psd() - new methods: :gh, :cwt
  • code cleanup
  • many minor modifications and fixes

v0.24.7 (01/07/2024)

  • stim: tdcs_dose(), tacs_dose(), tpcs_dose() - calculate effective parameters of tES dosages
  • process: filter_create() - new filter type: weighted least-squares FIR filter
  • gui: iview() can show bad channels
  • process: erp() - baseline segment is defined by two time points, may be subtracted before or after averaging
  • analyze: PSD- and spectrogram-, EROS-, EROP-related functions - log scaling of frequencies removed, moved to plotting functions
  • code cleanup
  • many minor modifications and fixes

v0.24.6 (01/06/2024)

  • recorder: eda() and ieda() - record electrodermal activity using GSR sensor and Arduino via serial port
  • recorder: ftt() and iftt() - can record data from a console attached to Raspberry Pi via GPIO pin or to Raspberry Pi/Arduino via serial port
  • edit: add_channel() and add_chanel!() - channel(s) may be added to an object already containing channels
  • analyze: symmetry() - calculate signal symmetry
  • misc: iplay() and play() - play signal as audio file
  • code cleanup
  • many minor modifications and fixes

v0.24.5 (01/05/2024)

  • process: mlinterpolate_channel() - interpolate bad channel using MLJ regressor
  • process: use reference epochs for mlinterpolate_channel() and lrinterpolate_channel()
  • edit: subepoch() - extract sub-epochs of reduced time range
  • plugins: na_plugin_install() - plugins can be installed from a local .zip/.tar.gz archive or using Git repository URL
  • code cleanup
  • many minor modifications and fixes

v0.24.4 (01/04/2024)

  • NeuroAnalyzer has been added to JuliaHealth
  • submodule NeuroTester added - design and run psychological studies
  • submodule NeuroStim added - process and model neurostimulation techniques
  • recorder: ftt() - Finger Tapping Test (CLI mode)
  • analyze: cpsd() - cross-power spectral density
  • analyze: pacf() - partial auto-correlation
  • analyze: coherence()
  • plot: plot_coherence()
  • code cleanup
  • many minor modifications and fixes

v0.24.3 (01/03/2024)

  • submodule NeuroRecorder added - record neurophysiological data
  • recorder: iftt() - Finger Tapping Test
  • gui: iselect_seg() - select matrix segment
  • analyze: hjorth()
  • analyze: peak_frq()
  • analyze: sef() - spectral edge frequency
  • analyze: phsd() - phase spectral density
  • analyze: axc2frq() - detect peaks in auto-/cross- correlation/covariance and transform them into frequencies
  • plot: plot_phsd()
  • statistics: seg_extract() - extract rectangular or circular segment from a matrix
  • code cleanup
  • many minor modifications and fixes

v0.24.2 (01/02/2024)

  • NeuroAnalyzer is registered in the Julia general registry
  • new data types: iEEG, sEEG, ECoG
  • new channel types: ieeg, seeg, ecog
  • io: import_ncs()
  • io: import_xdf()
  • gui: itopo()
  • gui: iselect_ts()
  • plots: plot_ci()
  • analysis: gradient()
  • analysis: biased or unbiased auto-/cross- correlation/covariance
  • edit: sort_epochs()
  • statistics: many new statistical functions
  • code cleanup
  • many minor modifications and fixes

v0.24.1 (01/01/2024)

  • Julia ≥1.10 is required
  • new data type: MEP
  • io: import_cnt()
  • io: import_duomag()
  • io: import_thymatron()
  • io: load_locs_dat()
  • io: load_locs_asc()
  • io: detect montage when importing EEG files
  • plots: plot_mep()
  • analysis: mep_peaks()
  • process: improved artifacts detection (using tkeo())
  • process: rename channels when referencing
  • gui: iview() use mouse wheel to scroll channels
  • code cleanup
  • many minor modifications and fixes

v0.23.12 (01/12/2023)

  • locs: locs_generate() - generate spherical coordinates according to 10/10 system
  • io: import_npy()
  • statistics: ci_median(), ci_r(), ci2z(), r_test()
  • code cleanup
  • many minor modifications and fixes

v0.23.11 (01/11/2023)

  • gui: iplot_icatopo() - interactive ICA viewer
  • gui: iview() plots components and two NEURO objects
  • gui: iedit() snapping to time points
  • edit: delete_optode()
  • locs: load_locs() generates locs for EMG/EOG/M1/M2/A1/A2 electrodes
  • new data type: sensors
  • code cleanup
  • many minor modifications and fixes

v0.23.10 (01/10/2023)

  • gui: iedit_ch() - interactive channel and locations editor
  • gui: iview_plot() - interactive plot viewer
  • gui: iplot_locs3d() - interactive 3D locs preview
  • gui: improved iview(), iplot(), ipsd(), ispectrogram()
  • locs: improved locs architecture and functions
  • plot: rewritten plot_locs(), plot_topo(), plot_weights() and plot_connections() functions - locs can be projected in 3 planes (XY, XZ and YZ)
  • plot: add_locs() - locs preview can be placed over another plot
  • analysis: improved methods of calculating PSD and spectrogram
  • fix: FFTW provider on non-Intel/AMD architectures
  • plot: GLMakie dependencies removed - significantly reduced startup time
  • code cleanup
  • many minor modifications and fixes

v0.23.9 (01/09/2023)

  • updated interactive editor
  • plot: iplot(), ipsd(), ispectrogram()
  • plot: plot PSD and spectrograms for a time segment
  • initial SEEG support
  • IO: import_montage()
  • IO: import_nwb() (WIP)
  • created lite branch (with graphical functions removed)
  • code cleanup
  • many minor modifications and fixes

v0.23.8 (01/08/2023)

  • license changed to 2-clause BSD
  • analysis: heart rate variability hrv_detect(), hrv_analyze()
  • process: ica_decompose(), ica_reconstruct(), ica_remove()
  • plot: plot_icatopo()
  • plot: plot(obj1, obj2)
  • plot: preview(obj1, obj2)
  • locs: locs_rotx(), locs_roty(), locs_rotz()
  • tested against upcoming Julia 1.10 release
  • code cleanup
  • many minor modifications and fixes

v0.23.7 (01/07/2023)

  • plot: preview(): interactive (Gtk-based) preview and edit epoched/continuous signal
  • process: remove_powerline()
  • process: remove_pops()
  • initial support for ECoG data
  • Docker container
  • code cleanup
  • many minor modifications and fixes

v0.23.6 (01/06/2023)

  • edit: create()
  • edit: join() and join!()
  • analyze: acor(), xcor(), acov(), xcov()
  • Julia ≥ 1.9.0 is now required
  • code cleanup
  • many minor modifications and fixes

v0.23.5 (01/05/2023)

  • new data type: ERP
  • IO: GDF files
  • IO: improved import_set() (epochs, locs, markers)
  • IO: improved import_bv()
  • IO: import_edf() accepts multi-sampling rate files
  • analyze: amp_at() and avgamp_at() for ERPs
  • edit: ch2marker()
  • utils: to_df()
  • time segments are in seconds
  • code cleanup
  • more tutorials
  • many minor modifications and fixes

v0.23.4 (01/04/2023)

  • complete rewriting of NeuroAnalyzer functions
  • new architecture allows easy expanding with new types of neurophysiological data
  • new data types: EEG, NIRS, MEG
  • new channel types (csd, nirs, mag, grad, meg)
  • IO: NIRS/SNIRF/NIRX files (NIRS)
  • IO: MEG FIFF files (very WIP)
  • process: convert intensity to optical density (NIRS)
  • process: convert optical density to HbO/HbR/HbT concentrations (NIRS)
  • plot: new way of plotting channels of different types
  • plot: 2D dipole plot (WIP)
  • unit tests were completely rewritten
  • code cleanup
  • more tutorials
  • many minor modifications and fixes

v0.23.3 (01/03/2023)

  • IO: EEGLAB .set files (WIP)
  • IO: CSV files
  • IO: GEO electrode locations
  • process: transform using surface Laplacian
  • process: improved FIR filter (automated filtering window)
  • process: improved polynomial filter
  • plot: 3D dipole plot (WIP)

v0.23.2 (01/02/2023)

  • import Philips Alice4 polysomnography EDF (non-standard, multi-sampling rate)
  • user defined number of Slepian tapers for PSD
  • processing of electrode locations updated, added rotating and scaling
  • code cleanup
  • more tutorials
  • many minor modifications and fixes

v0.23.1 (01/01/2023)

  • automated epoching by event markers
  • ERP: create, plot
  • interpolate EEG channel using linear regression
  • continuous integration (CI): tests, documentation, website
  • more tutorials
  • many minor modifications and fixes

v0.22.12 (01/12/2022)

  • plotting functions were completely rewritten
  • new plot types added (multi-channel PSD, eeg_plot_stats())
  • import BrainVision
  • tutorials at https://neuroanalyzer.org/#tutorials
  • eeg_*() functions now operate on specified channels
  • improved auto-detection of bad channels/epochs
  • many minor modifications and fixes

v0.22.11 (01/11/2022)

  • user-managed preferences
  • virtual channels
  • progress meter
  • continuous and discrete wavelet transformations
  • Hilbert transformation envelope
  • improved connectivity plot
  • proper handling of negative frequencies in FFT spectrum
  • Jupyter notebook
  • many minor modifications and fixes

v0.22.10 (01/10/2022)

  • project website: https://neuroanalyzer.org
  • IO: Digitrack, CSD
  • Pluto notebook
  • study object (WIP)
  • automatically process only EEG/MEG signals where necessary (WIP)
  • new logo
  • many minor modifications and fixes

v0.22.9 (01/09/2022)

  • name changed to NeuroAnalyzer to comply with Julia package naming policy
  • IO: EDF+, BDF and BDF+ with annotations
  • view/edit annotations
  • interactive 3D preview of electrodes
  • PSD topomap
  • edit electrode locations
  • automated processing of signal channels only (WIP)
  • benchmarking module (WIP)
  • many minor modifications and fixes

v0.22.8 (01/08/2022)

  • initial CUDA support
  • new reference mode: simple (planar) Laplacian
  • plugins use git
  • many minor modifications and fixes

v0.22.7 (01/07/2022)

  • first official release