Version 0.20 (2020-03-27)#
Changelog#
Improved
mne.viz.plot_epochs()to label epoch counts starting from 0, by Sophie HerbstAdd
minimum_norm.apply_inverse_cov()to compute static power by applying inverse solutions to a data covariance matrix by Denis Engemann, Luke Bloy, and Eric LarsonAdd
mne.minimum_norm.resolution_metrics()to compute various resolution metrics for inverse solutions, by Olaf HaukAdd current source density
mne.preprocessing.compute_current_source_density()to compute the surface Laplacian in order to reduce volume conduction in data by Alex RockhillAdd
mne.chpi.extract_chpi_locs_ctf()to extract cHPI coil locations from CTF data by Luke BloyAdd
mne.chpi.compute_chpi_amplitudes(),mne.chpi.compute_chpi_locs(), andmne.chpi.compute_head_pos()to compute head positions from cHPI coil locations by Eric Larson and Luke BloyAdd
allow_line_onlyoption tomne.chpi.filter_chpi()to allow filtering line frequencies only in files that do not have cHPI information by Eric LarsonAdd
mne.Epochs.as_type()to allow remapping data in MEG channels to virtual magnetometer or gradiometer channels by Sophie Herbst and Alex GramfortAdd
copyparameter tomne.Epochs.iter_evoked()by Alex GramfortAdd command mne setup_source_space to quickly set up bilateral hemisphere surface-based source space with subsampling by Victor Ferat.
Add command mne sys_info to print system information by Eric Larson
Add function
mne.make_fixed_length_epochs()to segment raw into fixed length epochs by Mohammad DaneshzandAdd support for computing patch information only in surface source space creation with
add_dist='patch'inmne.setup_source_space()anddist_limit=0inmne.add_source_space_distances()by Eric LarsonAdd
mne.Label.restrictto restrict a label to vertices within a source space by Eric LarsonAdd support for passing a destination source space
src_toinmne.compute_source_morph()to ensure morphing for multiple subjects results in consistent STCs, by Eric LarsonAdd support for
smooth='nearest'for surfaces inmne.compute_source_morph()by Eric LarsonAdd support for plotting fNIRS channels in
mne.viz.plot_alignment(),mne.viz.plot_evoked_topo()andmne.Evoked.animate_topomap()by Eric Larson and Robert LukeAdd command line tool mne anonymize for anonymizing raw fiff files by Luke Bloy
Add
mne.preprocessing.find_bad_channels_maxwell()for automatic bad channel detection via Maxwell filtering by Eric LarsonAdd support to
mne.io.anonymize_info()to allow time offset to be applied to dates by Luke BloyAdd support for computing resolution matrix to get point spread functions (PSF) and cross-talk functions (CTF) in
mne.minimum_norm.make_inverse_resolution_matrix(),mne.beamformer.make_lcmv_resolution_matrix(),mne.minimum_norm.get_cross_talk(),mne.minimum_norm.get_point_spread()by Olaf HaukAdd
mne.preprocessing.read_ica_eeglab()to read EEGLAB ICA decompositions by Christian O’ReillyAdd keyboard functionality to interactive colorbar plotting TFRs by Stefan Repplinger
Add the ability to
return_event_idinmne.read_events()for use with MNE-C produced-annot.fiffiles, by Eric LarsonAdd option to
mne.connectivity.spectral_connectivityto compute corrected imaginary PLV by Adonay NunesAdd
mne.SourceEstimate.estimate_snr()to estimate source-space SNR, by Kaisu Lankinen and Padma SundaramAdd option to specify the coordinate frame in
mne.channels.read_custom_montage()by Eric LarsonAdd option to use
match_case=Falsetomne.io.Raw.set_montage()and related functions by Eric LarsonAdd reader for NIRx data in
mne.io.read_raw_nirx()by Robert LukeAdd function to convert NIRS data to optical density
mne.preprocessing.nirs.optical_density()by Robert LukeAdd function to convert NIRS data to haemoglobin concentration
mne.preprocessing.nirs.beer_lambert_law()by Robert LukeAdd
figargument tomne.viz.plot_evoked_field()by Eric LarsonAdd functions to calculate spatial information of NIRS channels
mne.preprocessing.nirs.source_detector_distances()andmne.preprocessing.nirs.short_channels()by Robert LukeAdd reader for
*.datelectrode position filesmne.channels.read_dig_dat()by Christian BrodbeckImproved
mne.viz.plot_events()to always show event counts by Eric LarsonImproved LIMO Dataset usage and example for usage of
mne.stats.linear_regression()by Jose AlanisAdd support for
reduce_rank=Truefor vector beamformers by Eric LarsonAdd
method='sphere'support for using Freesurfer spherical inflation inmne.decimate_surface()to facilitate mesh downsampling for use withmne.make_bem_model()by Eric LarsonSpeed up
mne.beamformer.make_lcmv()andmne.beamformer.make_dics()calculations by vectorizing linear algebra calls by Dmitrii Altukhov and Eric LarsonSpeed up
mne.make_forward_solution()using Numba, by Eric LarsonSpeed up
mne.io.read_raw_fif()data reading when the recording is long and there are many data tags repeatedly accessed, by Eric LarsonFor KIT systems without built-in layout,
mne.channels.find_layout()now falls back on an automatically generated layout, by Christian Brodbeckmne.Epochs.plot()now takes aepochs_colorsparameter to color specific epoch segments by Mainak JasAdd command mne setup_forward_model to quickly create a BEM model for a subject by Victor Ferat.
Add command mne prepare_bem_model to quickly create a BEM solution using the linear collocation approach by Victor Ferat.
Add support for reading
.bdipXfit binary dipole fit files inmne.read_dipole()by Eric LarsonAllow returning vector source estimates from sparse inverse solvers through
pick_ori='vector'by Christian BrodbeckAdd NIRS support to
mne.viz.plot_topomap()andmne.viz.plot_ica_components()by Robert LukeAdd the ability to
mne.channels.equalize_channels()to also re-order the channels and also operate on instances ofmne.Info,mne.Forward,mne.Covarianceandmne.time_frequency.CrossSpectralDensityby Marijn van VlietAllow
mne.channels.read_custom_montageto handle fiducial points for BESA spherical (.elp) files by Richard HöchenbergerAdd
rankargument tomne.fit_dipole()by Eric LarsonAdd function to convert events to annotations
mne.annotations_from_events()by Nicolas BarascudAdd function to calculate scalp coupling index for fNIRS data
mne.preprocessing.nirs.scalp_coupling_index()by Robert LukeAdd
itemargument tomne.Epochs.get_data()for faster access to NumPy data arrays compared tomne.Epochs.__getitem__()for frequent access on largemne.Epochsobjects, by Eric LarsonMore accurate coordinate system for Easycap montages in
mne.channels.make_standard_montage()by Christian BrodbeckAdd
borderargument tomne.viz.plot_topomap().bordercontrols the value of the edge points to which topomap values are extrapolated.border='mean'sets these points value to the average of their neighbours. By Mikołaj MagnuskiAdd function
mne.viz.link_brains()to link time properties of multiple brain objects interactively by Guillaume FavelierAdd function
mne.preprocessing.annotate_movement()to annotate periods with head motion andmne.preprocessing.compute_average_dev_head_t()to re-estimate the device to head transform with average head position during segments with acceptable head movement. by Adonay NunesMake selected channels more distinguishable in
mne.Epochs.plot_sensors()when usingkind='select'by Mikołaj MagnuskiAllow retrieval of the number of Infomax ICA iterations via the new
return_n_iterkeyword argument ofmne.preprocessing.infomax()by Richard HöchenbergerExpose the number of ICA iterations during the fitting procedure via the
n_iter_attribute ofmne.preprocessing.ICAby Richard Höchenbergermne.grand_average()now produces a warning when only a single dataset was passed, instead of raising an error by Richard HöchenbergerAdd
nrowsandncolsparameters tomne.viz.plot_evoked_topomap(), which allows to create multiline topomap plots for Evoked. By Federico RaimondoImprove repr of
mne.Info(empty items are not shown anymore) by Clemens Brunner
Bug#
Fix the
reduce_rankparameter inmne.beamformer.make_lcmv()andmne.beamformer.make_dics()to reduce the rank of the leadfield first before then reducing the rank of the denominator of the beamformer formula for the inversion by Britta Westner and Eric Larson.Fix bug with
mne.beamformer.make_lcmv()with data where rank was incorrectly checked by Eric Larson.Allow
mne.channels.read_dig_hpts()to accept point categories (eg. EEG) to be specified in upper case by Alex Gramfort.Fix a bug in
mne.MixedSourceEstimate.plot_surfacethat prevented plotting in latest PySurfer by Christian O’Reilly.Fix
method='eLORETA'inmne.minimum_norm.apply_inverse(), by Eric Larson:regularization, which was off by roughly a factor of a square root
units, which are now nAm instead of being arbitrary
explained variance and residuals, which were previously unavailable
force_equalin the case of loose orientations, which previously defaulted toTruenow defaults toFalse. Reapplying orientation priors at each iteration of the algorithm sufficiently preserves a smooth transition between loose=0. to loose=1. without compromising localization accuracy in testing.
Fix bug in
method='eLORETA'formne.minimum_norm.apply_inverse()(and variants) to allow restricting source estimation to a label by Luke BloyFix bug in
mne.compute_covariance()andmne.compute_raw_covariance()where biased normalization (based on degrees of freedom) was used andcov.nfreewas not set properly by Eric LarsonFix
mne.VectorSourceEstimate.normalto account for cortical patch statistics usinguse_cps=Trueby Eric LarsonFix
pick_ori='normal'formne.minimum_norm.apply_inverse()when the inverse was computed withloose=1.and the forward solution was not in surface orientation, by Eric LarsonFix missing xlabel for
mne.io.Raw.plot_psd()and similar functions when passing a subset of axes from a figure by Alex GramfortFix wrong DataFrame index when
index=Nonein methodsmne.io.Raw.to_data_frame(),mne.Epochs.to_data_frame(),mne.Evoked.to_data_frame(), andmne.SourceEstimate.to_data_frame(), by Daniel McCloy.Fix incorrect scaling of cluster temporal extent in
mne.stats.summarize_clusters_stc()by Daniel McCloy.Fix
mne.time_frequency.read_tfrs()to properly readInfotransforms by Eric LarsonFix
mne.viz.plot_sensors()to always plot in head coordinate frame by Daniel McCloy.Fix
mne.io.read_raw_cnt()for version 1 of format in the presence of annotations by Alex Gramfort.Fix
mne.decoding.GeneralizingEstimatorand related classes to support multi-class sklearn scorers such as'roc_auc_ovo'and'roc_auc_ovo_weighted'by Eric LarsonFix
mne.io.read_raw_ctf()to set measurement date from CTF ds files by Luke Bloy.Fix
mne.read_epochs_eeglab()that ignored channel locations by Alex Gramfort.Fix
mne.io.read_raw_brainvision()when channel names have spaces by Sebastian Major.Fix
mne.io.read_raw_brainvision()when"Core"is in the data header by Eric LarsonFix
mne.io.Raw.anonymize()to correctly resetraw.annotations.orig_timeby Luke Bloy.Fix
mne.io.Raw.anonymize()to correctly avoid shiftingraw.annotations.onsetrelative toraw.first_sampby Eric LarsonFix
mne.io.Raw.set_channel_types()andmne.io.Raw.rename_channels()and related methods to return the instance instead ofNoneby Eric Larsonmne.Epochs.iter_evoked()now does not return a copy of info whencopy=False(default parameter) by Alex GramfortThe attribute
mne.Annotations.orig_timeis now read-only, and is adatetimeobject (or None) rather than float, by Eric LarsonFix bug where MRI distances were not properly initialized in mne coreg by Eric Larson
Fix
xscale='log'inmne.io.Raw.plot_psd()and related functions by Alex GramfortUnify behavior of
raw.annotations.append(...)whenraw.info['meas_date']is None to make onsets absolute relative tofirst_sampas they are whenraw.info['meas_date']is not None; i.e., you might need to doraw.annotations.append(old_time + raw.first_time), by Eric LarsonThe
info['meas_date']entry is now adatetimeobject (or None) rather than float, by Eric LarsonFix
mne.time_frequency.AverageTFR.save()and related functions to deal withdatetimeobjects properly by Eric LarsonFix date reading before Unix time zero (1970 Jan 1) on Windows by Alex Rockhill.
Fix bug running subprocesses (e.g., in
mne.bem.make_watershed_bem()) in Jupyter notebooks, by Eric LarsonFix
mne.io.read_raw_artemis123()to add HPI locations to digitization points, by Luke BloyFix
mne.Epochs.shift_time()andmne.Evoked.shift_time()to return the modifiedEpochsorEvokedinstance (instead ofNone) by Daniel McCloy.Fix
mne.read_annotations()for text files with zero or one annotations, by Adonay NunesFix bug in
ICAwhere requesting extended infomax viafit_params={'extended': True}was overridden, by Daniel McCloy.Fix bug in
mne.Epochs.interpolate_bads()where theoriginwas not used during MEG or EEG data interpolation by Eric Larson. Old behavior can be achieved usingorigin=(0., 0., 0.)for EEG andorigin=(0., 0., 0.04)for MEG, and the new default isorigin='auto', which uses a head-digitization-based fit.Fix bug in
mne.write_evokeds()whereevoked.navewas not saved properly when multipleEvokedinstances were written to a single file, by Eric LarsonFix bug in
mne.preprocessing.mark_flatwhere acquisition skips were not handled properly, by Eric LarsonFix bug in
mne.viz.plot_bem()where some sources were not plotted by Jean-Rémi King and Eric LarsonFix TAL channel parsing (annotations) for EDF-D files by Clemens Brunner
Fix bug with
mne.viz.plot_dipole_locations()when plotting in head coordinates by Eric LarsonFix handling in cases where no components are found in
mne.preprocessing.corrmap()by Eric LarsonFix handling of repeated events in
mne.Epochsby Fahimeh Mamashli and Alex GramfortFix many bugs with plotting sensors overlaid on a head outline. All plotting is now done in head coordinates and scaled by
head_radius, which defaults to 0.095, by Eric LarsonFix
mne.io.anonymize_info()to allow shifting dates of service and to match anticipated changes in mne-cpp by Luke BloyFix reading of cardinals in .htps files (identifier are int not strings) by Alex Gramfort
Fix IO of TFRs when event_id contain a / in one of the keys by Alex Gramfort
Fix plotting of TFRs with linear y-scale (misaligned frequency bins), by Stefan Repplinger and Eric Larson
Fix
info['sfreq']when decimating inmne.time_frequency.tfr_multitaper()andmne.time_frequency.tfr_morlet()and make sure an error is raised when exceed Nyquist frequency by Adonay NunesFix bug in EDF(+) loading, filter values ignored by insufficient regex, by Demetres Kostas
Fix missing scaling of tolerance parameter in
mne.inverse_sparse.tf_mixed_norm()andmne.inverse_sparse.mixed_norm(), by Mathurin MassiasFix the automatic scaling of the glyphs in
mne.viz.plot_vector_source_estimates()by using 10% of the brain width, by Guillaume FavelierFix handling of missing values (NaNs) in
mne.time_frequency.psd_welchby Clemens BrunnerFix
mne.decoding.LinearModelto support the refitted estimator ofGridSearchCVinsklearnby Chun-Hui LiFix
mne.viz.plot_topomap()when there are bad channels in the providedmne.Infoinstance by Eric LarsonFix check for subject definition existing in source space in
mne.compute_source_morph()and related functions by Eric LarsonFix creation of new figures in
mne.Epochs.plot_image()andmne.viz.plot_epochs_image()by Eric LarsonFix bug in
Xdawnwhere filters where selected along the incorrect axis, by Henrich KolkhorstFix bug in
mne.bem.make_watershed_bem()where some surfaces were saved incorrectly in the working directory by Yu-Han LuoFix support for multiple TAL (annotations) channels in BDF reader by Clemens Brunner
Fix missing
brainmaskfile type inmne.bem.make_watershed_bem()by changing its default value tows.mgzby Fu-Te WongFix bug in
mne.channels.make_standard_montage()which would returneasycap-M1even when requestingeasycap-M10by Christian BrodbeckFix the way planar gradiometers are combined in
mne.viz.plot_tfr_topomap()andmne.Epochs.plot_psd_topomap()by Geoff BrookshireImprove error message when trying to load FieldTrip data from a cell array by Thomas Hartmann
Fix bug in
mne.read_evoked_fieldtrip()causing it to crash when channels were present in the provided Info object but were not present in the data by Thomas HartmannFix placement of extrapolation points in
mne.Evoked.plot_topomap()and related functions when exactly three channels were used by Mikołaj Magnuski.Fix bug in reading annotations in
read_annotations(), which would not accept “;” character by Adam LiFix bug in
mne.Report.parse_folder(), which would not recognize*meg.fiffiles by Dmitrii Altukhov.Include
fit_paramswhen saving anICAinstance to disk by Richard HöchenbergerUpdate old url link in
mne.datasets.eegbci.load_data()toEEGMI_URL = 'https://physionet.org/files/eegmmidb/1.0.0/'by Ramiro GattiEnsure corrected p-values calculated by
mne.stats.bonferroni_correction()never exceed the value of 1.0 by Richard Höchenberger
API#
mne.io.pick.get_channel_typesis now calledmne.io.pick.get_channel_type_constantsto better reflect its return values, by Daniel McCloy.mne.Evoked.as_type()now returns an instance ofmne.EvokedArrayby Sophie Herbst and Alex GramfortBumped minimum requirements to fall 2017 versions by Eric Larson:
NumPy 1.13.3
SciPy 1.0.0
matplotlib 2.1
scikit-learn 0.19.1 (optional requirement)
pandas 0.21 (optional requirement)
mne.Epochs.plot()now accepts anevent_idparameter (useful in tandem withevent_colorsfor specifying event colors by name) by Daniel McCloy.Passing
ch_types=Nonehas been deprecated in favor of explicitly passingch_types='misc'inmne.create_info()by Eric LarsonNew time conversion options for methods
mne.io.Raw.to_data_frame(),mne.Epochs.to_data_frame(),mne.Evoked.to_data_frame(), andmne.SourceEstimate.to_data_frame(), by Daniel McCloy.mne.Epochs.shift_time()andmne.Evoked.shift_time()now allow shifting times by arbitrary amounts (previously only by integer multiples of the sampling period), by Daniel McCloy and Eric Larson.The
head_posargument ofmne.Evoked.plot_topomap()and related functions has been deprecated in favor ofhead_radius, by Eric Larson.The
layoutargument to topomap-related functions such asmne.Evoked.plot_topomap()andmne.viz.plot_tfr_topomap()has been deprecated in favor of channel-position based flattening based on theinfoandsphereargument, by Eric Larson.The APIs of
mne.io.Raw.plot_projs_topomap(),mne.Epochs.plot_projs_topomap()andmne.Evoked.plot_projs_topomap()are now more similar tomne.viz.plot_projs_topomap()by Daniel McCloy.The function
mne.setup_volume_source_space()has asphere_unitsargument that defaults to'mm'in 0.20 but will change to'm'in 0.21, set it to avoid a warning by Eric Larson.mne.viz.plot_projs_topomap()and the related methodsmne.io.Raw.plot_projs_topomap(),mne.Epochs.plot_projs_topomap()andmne.Evoked.plot_projs_topomap()now accept parametervlimto control the colormap, with keyword'joint'computing the colormap jointly across all projectors of a given channel type, by Daniel McCloy.New methods
mne.io.Raw.get_channel_types(),mne.Epochs.get_channel_types(),mne.Evoked.get_channel_types()by Daniel McCloy.Deprecate
mne.minimum_norm.point_spread_functionandmne.minimum_norm.cross_talk_functionby Alex GramfortDeprecate
montageparameter ofmne.create_info()in favor ofmne.io.Raw.set_montage(),mne.Info.set_montage(), and related functions by Eric Larsonmne.channels.equalize_channels()no longer operates in-place by default, but instead makes copies of the objects when necessary (seecopyparameter) by Marijn van Vlietmne.channels.equalize_channels()now uses the first object in the list as a template for channel ordering by Marijn van Vlietmne.channels.equalize_channels()now also re-orders the channels to match, in addition to dropping channels that are not shared by all objects by Marijn van Vlietmne.io.Raw.pick_channels(),mne.Epochs.pick_channels()andmne.Evoked.pick_channels()now have anorderedparameter to enforce the ordering of the picked channels by Marijn van VlietNew methods
mne.Forward.pick_channels(),mne.Covariance.pick_channels(),mne.Info.pick_channels,mne.time_frequency.CrossSpectralDensity.pick_channels()by Marijn van VlietNew attributes
mne.Forward.ch_namesandmne.Info.ch_namesby Marijn van VlietIn
Xdawn, the components are stored in the rows of attributesfilters_andpatterns_to be consistent withCSPandICAby Henrich KolkhorstDrop
unitkeyword argument frommne.channels.read_custom_montage(), as it was unused by Richard HöchenbergerDeprecate
mne.preprocessing.run_ica, usemne.preprocessing.ICA.detect_artifactsinstead by Richard Höchenberger