Version 1.1.0 (2022-08-03)#
Enhancements#
Added new built-in montage R-Net 128 Ch (Brain Products) (#10974 by new contributor Ilias Machairas)
DigMontageobjects can now be checked for equality via==(#10942 by new contributor Tziona NessAiver)Add a note to clarify the inclusion of average referencing gain matrix during whitening (#10922 by new contributor Mingjian He)
Add time axis scale bar for
mne.Epochs.plot()using matplotlib backend (#10736 by new contributor Jordan Drew)Add
mne.bem.distance_to_bem()to find depth of source positions (#10632 by new contributor Matt Courtemanche)Add support for ahdr files in
mne.io.read_raw_brainvision()(#10515 by new contributor Alessandro Tonin)Add support for reading data from Gowerlabs devices to
mne.io.read_raw_snirf()(#10555 by new contributor Samuel Powell and Robert Luke)Add built-in sensor layout files for Geodesic Head Web 130 and 280 devices (#10627 by Evan Hathaway)
Add
mne-icalabeltomne.sys_info()(#10615 by Adam Li)Add support for
overview_modeinraw.plot()and related functions/methods (#10501 by Eric Larson)Add
mne.io.Raw.crop_by_annotations()method to get chunks of Raw data based onmne.Annotations. (#10460 by Alex Gramfort)The
pick_channelsmethod gained averboseparameter, allowing e.g. to suppress messages about removed projectors (#10544 by Richard Höchenberger)Add
mne.viz.plot_projs_joint()for joint plotting of projectors and Evoked (#10720 by Eric Larson)The
mne.make_forward_dipole()function can now take a list of dipoles to make a multi-dipole forward models (#10464 by Marijn van Vliet)Add
mode='outlines'support tomne.Dipole.plot_locations()andmne.viz.plot_dipole_locations()(#10699 by Eric Larson)Add
mne.preprocessing.ICA.find_bads_muscle()to find muscle-related ICA components with an example, Removing muscle ICA components (#10534 by Alex Rockhill)Add example of Xfit-style ECD modeling using multiple dipoles (#10464 by Marijn van Vliet)
Add
head_sourceargument tomne.make_field_map()to allow selecting which head source to use (#10568 by Eric Larson)Add support for
n_jobs=Noneto supportjoblib:joblib.parallel_backendfor more precise control over parallelization (#10567 by Eric Larson)It is now possible to compute inverse solutions with restricted source orientations using discrete forward models (#10464 by Marijn van Vliet)
The new function
mne.preprocessing.maxwell_filter_prepare_emptyroom()simplifies the preconditioning of an empty-room recording for our Maxwell filtering operations (#10533 by Richard Höchenberger and Eric Larson)Add keyboard shortcuts to toggle
mne.preprocessing.ICA.plot_properties()topomap channel types (‘t’) and power spectral density log-scale (‘l’) (#10557 by Alex Rockhill)Add
--mri, and--thresholdoptions to mne make_scalp_surfaces to improve head surface mesh extraction (#10591 by Eric Larson)Add
mne.preprocessing.compute_bridged_electrodes()to detect EEG electrodes with shared spatial sources due to a conductive medium connecting two or more electrodes, add Identify EEG Electrodes Bridged by too much Gel for an example andmne.viz.plot_bridged_electrodes()to help visualize (#10571 by Alex Rockhill)Add
'nearest'as an option for theimage_interpargument inmne.viz.plot_topomap()to plot a topomap without interpolation using a Voronoi parcelation (#10571 by Alex Rockhill)Add
mne.preprocessing.interpolate_bridged_electrodes()to use the spatially smeared signal to get a better interpolation rather than dropping those channels (#10587 by Alex Rockhill)Add support for hemoglobin type fNIRS data to temporal derivative distribution repair (TDDR)
mne.preprocessing.nirs.temporal_derivative_distribution_repair()(#10125 by Johann Benerradi)mne.viz.plot_evoked_topomap()andmne.Evoked.plot_topomap()now display the time range the map was averaged over ifaveragewas passed (#10606 by Richard Höchenberger)mne.viz.plot_evoked_topomap()andmne.Evoked.plot_topomap()can now average the topographic maps across different time periods for each time point. To do this, pass a list of periods via theaverageparameter (#10610 by Richard Höchenberger)mne.viz.plot_evoked()andmne.Evoked.plot()gained a new parameter,highlight, to visually highlight time periods of interest (#10614 by Richard Höchenberger)Added fNIRS support to
mne.Info.get_montage()(#10611 by Robert Luke)Add
mne.viz.plot_ch_adjacency()to visualize and manually edit the channel adjacency matrix (#10633 by Mikołaj Magnuski)Add
mne.viz.Brain.get_view()to get the current camera parameters such that they can be passed tomne.viz.Brain.show_view()(#10661 by Alex Rockhill)Added support for Aurora version 2021.9.0.6 to
mne.io.read_raw_nirx()(#10668 by Robert Luke)Added BrainVision format (
.vhdr,.vmrk,.eeg) tomne.export.export_raw()(#10681 by Stefan Appelhoff)Added
exportmethod tomne.Evoked(#10681 by Stefan Appelhoff)Add timeformat
YYYY/MM/DDtomne.io.ctf.info._convert_time(#10674 by Simon Kern)mne.Report.add_figure()andmne.Report.add_image()gained a new parameter,section, allowing to put multiple figures or images into the same “content block”. Previously, the only way to group figures and images was by means of a slider, which sometimes made content hard to discover. The slider remains available as an alternative (#10694 by Richard Höchenberger)All functions and methods that plot topographic maps for EEG (2D projections of the EEG sensor locations) now accept the parameter value
sphere='eeglab'to lay out the sensors with respect to the head circle in a similar way to how EEGLAB does, i.e., T7/T8 and Fpz/Oz are placed directly on the circle for template montages (#10572 by Richard Höchenberger)mne.channels.get_builtin_montages()gained a new parameter,descriptions, which allows to retrieve the descriptions of the montages in addition to their names (#10373 by Richard Höchenberger)Add
includeoption tomne.io.read_raw_edf(),mne.io.read_raw_bdf()andmne.io.read_raw_gdf(). (#10734 by Michiru Kaneda)mne.gui.coregistration()gained a new parameter,fullscreen, to start the GUI in fullscreen mode (#10284 by Richard Höchenberger)The built-in FieldTrip channel adjacency matrices, which can be read via
read_ch_adjacency(), have been synchronized with FieldTrip again. This means that numerous new adjacencies have been added, most notably those for standard 10-05 and 10-20 montages (#10749 by Richard Höchenberger)mne.Evoked.plot_field()gained a new parameter,interaction, to control the rotation axes when interacting with the head (#10788 by Richard Höchenberger)Add
mne.read_evoked_besa()for reading evokeds from BESA.avrand.mulfiles. (#10892 by Marijn van Vliet)Add
mne.time_frequency.EpochsTFR.decimate()to reduce size of time-frequency epochs objects (#10940 by Alex Rockhill)Add an alias that maps EGI reference channel names (
VREForVertex Reference) to the electrode name in the standard EGI montages (Cz). Now setting standard EGI montages withset_montage()withmatch_alias=Truewill avoid raising an error (#10823 by Scott Huberty)Add provenance in
mne.time_frequency.EpochsTFR.apply_baseline()(#10979 by Alex Rockhill)
Bugs#
Fix bug in
mne.surface._project_onto_surfacefor the conditionmethod != 'accurate' and return_nn(#10930 by Christian O’Reilly)Fix bug in
mne.export.export_raw()to ignore None value in filenames attribute ofmne.io.RawArray(#10927 by new contributor Reza Nasri)Fix bug in
mne.io.read_raw_edf()to allow reading in all Hypnodyne ZMax EDFs to be read in without issues (#10754 by new contributor Frederik Weber)Fix bug in
mne.Epochs.drop_bad()where data was loaded although no rejection had to be performed (#10718 by new contributor Lukas Gemein)Pick also bad channels when selecting T1T2 magnetometers in
mne.preprocessing.maxwell_filter()(#10639 by new contributor Matti Toivonen)Make
colorparameter check in inmne.viz.plot_evoked_topo()consistent (#10217 by new contributor T. Wang and Stefan Appelhoff)Fix bug in
mne.io.read_raw_brainvision()when BrainVision data are acquired with the Brain Products “V-Amp” amplifier and disabled lowpass filter is marked with value0(#10517 by new contributor Alessandro Tonin)Fix bug in
mne.pick_types()and related methods wherecsd=Truewas not passed handled properly (#10470 by new contributor Matthias Dold)Fix bug where plots produced using the
'qt'/mne_qt_browserbackend could not be added usingmne.Report.add_figure()(#10485 by Eric Larson)Fix bug where
themewas not handled properly inmne.io.Raw.plot()(#10487, #10500 by Mathieu Scheltienne and Eric Larson)Fix bug in
raw.crop(start, stop)that would cause annotations to be erroneously shifted whenstart != 0and no measurement date was set. (#10491 by Eric Larson)Fix bug in
mne.io.read_raw_bti()where unknown electrode locations were not handled properly (#10662 by Eric Larson)Fix bug in
mne.io.read_raw_ctf()on Windows where large files could not be read (#10866 by Eric Larson)Fix bug in
mne.io.read_raw_ctf()where invalid measurement dates were not handled properly (#10957 by Jean-Rémi King and Eric Larson)Rendering issues with recent MESA releases can be avoided by setting the new environment variable
MNE_3D_OPTION_MULTI_SAMPLES=1or usingmne.viz.set_3d_options()(#10513 by Eric Larson)Fix behavior for the
pyvista3D renderer’squiver3Dfunction so that default arguments plot a glyph inarrowmode (#10493 by Alex Rockhill)Retain epochs metadata when using
mne.channels.combine_channels()(#10504 by Clemens Brunner)Fix epochs indexing with metadata containing boolean type and missing values (#10705 by Clemens Brunner and Alex Gramfort)
Fix reading of fiducial locations in
mne.io.read_raw_eeglab()(#10521 by Alex Gramfort)Prevent creation of montage with invalid
[x, y, z]coordinates withmne.channels.make_dig_montage()(#10547 by Mathieu Scheltienne)Fix bug in coregistration GUI that prevented it from starting up if only a high-resolution head model was available (#10543 by Richard Höchenberger)
Fix bug with
mne.Epochs.add_reference_channelswhere attributes were not updated properly so subsequentpick_typescalls were broken (#10912 by Eric Larson)Fix bug in the
mne.viz.Braintool bar that prevented the buttons to call the corresponding feature (#10560 by Guillaume Favelier)Fix issue with saving epochs once
compute_current_source_density()has been used if a rejection threshold was used first (#10619 by Alex Rockhill and Richard Höchenberger)Fix bug in
mne.viz.plot_evoked_image()that would cause incorrect sub-titles when usinggroup_by(#10618 by Reza Shoorangiz)Reduce memory usage when loading an EDF file with
preload=False(#10638 by Clemens Brunner)Fix bug in
mne.io.Raw.get_channel_types()and related methods whereunique=Truewould return asetwith arbitrary order rather than alistthat preserves the same order asinst.ch_names(#10720 by Eric Larson)In
mne.preprocessing.find_bad_channels_maxwell(), do not re-filter the data if a low-pass filter with the requested frequency has already been applied (#10664 by Richard Höchenberger)Fix a problem in
mne.Evoked.get_peak(), where under certain circumstances themodeparameters'pos'and'neg'were not honored whentminand/ortmaxwere passed as well (#10686 by Richard Höchenberger)mne.read_evokeds(),mne.channels.read_custom_montage(),mne.channels.read_dig_hpts(),mne.channels.read_dig_polhemus_isotrak(), andmne.channels.read_polhemus_fastscan()now correctly expand~in the provided path to the user’s home directory (#10685, #10688 by Richard Höchenberger)Fix bug in
mne.io.read_raw_eeglab()andmne.read_epochs_eeglab(), where the presence of channels without position in the.setfile caused positions incorrectly assigned to all further channels (#8754 by Mikołaj Magnuski)Combining channels of
mne.Epochsormne.Evokedobjects now properly retains baseline information (#10703 by Clemens Brunner)In
mne.Report, some figures would have an undesired border added to the edges; this has now been resolved (#10730 by Richard Höchenberger)Fix selection of EEG channels and selected sphere when plotting bridged electrodes with
mne.viz.plot_bridged_electrodes()(#10753 by Mathieu Scheltienne)Fix broken links in Fixing BEM and head surfaces (#10765 by Alex Rockhill)
The built-in FieldTrip channel adjacency matrix for
easycapM1had a bug, where the channelPO8was incorrectly labeled asPO6This has been resolved by updating the adjacency matrix to the latest version provided by FieldTrip (#10749 by Richard Höchenberger)Add a YouTube video tutorial for editing Freesurfer surfaces in Blender to Fixing BEM and head surfaces (#10778 by Alex Rockhill)
The default interaction style of
mne.Evoked.plot_field()has been changed such that if behaves likeplot_alignment()when trying to rotate the head (#10788 by Richard Höchenberger)Add a video on how to operate the intracranial electrode contact location GUI in Locating intracranial electrode contacts (#10800 by Alex Rockhill)
Add a video on how to operate the coregistration GUI in Source alignment and coordinate frames (#10802 by Alex Rockhill)
Add
showandblockarguments tomne.gui.coregistration()andmne.gui.locate_ieegto pop up the GUIs and halt execution of subsequent code respectively (#10802 by Alex Rockhill)Correctly report the number of available projections when printing measurement info in a Jupyter notebook (#10471 by Clemens Brunner)
Fix value set in
raw.orig_formatfor readers of BrainVision (ASCII format), EGI and Artemis123 files (#10851 by Mathieu Scheltienne)When reading EGI MFF files, channel names are no longer ignored and reference channel information is properly incorporated (#10898 by Scott Huberty and Daniel McCloy)
Fix bug in
mne.time_frequency.psd_array_welch()and related functions/methods where the bias was not accounted for whenaverage='median'(#10990 by Eric Larson)Fix bug in
mne.decoding.TemporalFilterwhere filter parameters were not handled properly (#10968 by Eric Larson)Fix documentation bug in
ica.plot_sourcesto specify thatpickskeyword argument is for picking ICA components to plot (#10936 by Adam Li)Annotations contained in EDF files are correctly read as UTF-8 according to the EDF specification (#10963 by Clemens Brunner)
Fix bug where complex-valued topoplots caused an error, convert to amplitude instead (#10978 by Alex Rockhill)
API and behavior changes#
When creating BEM surfaces via
mne.bem.make_watershed_bem()andmne.bem.make_flash_bem(), thecopyparameter now defaults toTrue. This means that instead of creating symbolic links inside the FreeSurfer subject’sbemfolder, we now create “actual” files. This should avoid troubles when sharing files across different operating systems and file systems (#10531 by Richard Höchenberger)The ordering of channels returned by
mne.io.read_raw_nirx()is now ordered by channel name, rather than the order provided by the manufacturer. This enables consistent ordering of channels across different file types (#10555 by Robert Luke)For
mne.viz.plot_topomap(),mne.viz.plot_evoked_topomap(),mne.viz.plot_arrowmap(),mne.viz.plot_ica_components(),mne.Covariance.plot_topomap(),mne.Evoked.plot_topomap(),mne.Evoked.animate_topomap(),mne.decoding.CSP.plot_patterns(),mne.Projection.plot_topomap()andmne.preprocessing.ICA.plot_components()the topomap image interpolation was previously a cubic interpolation but now can be'linear'and'nearest'as well. Unlessimage_interp='nearest'is passed mne uses a subsequent matplotlib bilinear interpolation to make the interpolated image smoother. Previously,'image_interp'controlled this second interpolation step and, for the first interpolation, the only option was cubic. To simplify,image_interpis now responsible for the main interpolation and the subsequent matplotlib image interpolation is bilinear but can be changed afterward usingim.set_interpolation(#10617 by Alex Rockhill)The FLASH BEM surface generation via
mne.bem.make_flash_bem()or the mne flash_bem command has now been clarified in terms of expected inputs. Inmne.bem.convert_flash_mris()theconvertparameter is now deprecated and theflash5andflash30now accept list of file names or nibabel images. One breaking change is that now the flash files are looked for as mef05_*.mgz and mef30_*.mgz in mri/flash folder (#10715 by Alex Gramfort)plot_compare_evokeds()gets a new parametertime_unitwhich can be"s"or"ms"(#10950 by Daniel McCloy)The
to_data_framemethods forRaw,Epochs,Evoked,SourceEstimate,EpochsTFR, andAverageTFRall now have defaulttime_format=None(keep time in seconds) instead oftime_format='ms'(convert time to milliseconds) (#10925 by Daniel McCloy)mne.Evoked.decimate()now aligns to the sample at time=0 (so that the exact sample when the event occurred is preserved) to be consistent withmne.Epochs.decimate()(#10945 by Alex Rockhill)