[Mne_analysis] epoching mismatch between python and matlab

Tommaso Fedele fedele.tm at gmail.com
Sun Nov 24 16:01:16 EST 2019
Search archives:

        External Email - Use Caution        

Dear MNE people,

I got a problem when epoching data in MNE Python using mne.Epochs.

I am running some analysis with a Matlab code and I would like to transfer
the same analysis to MNE Python.

My problem is that if I compare one epoch from Matlab with the output of
mne.Epochs in Python they do not correspond.

Here below the code and a figure explaining the problem

My question is: why

  spike1[295, :]  # epoch from matlab data
  data[295, (np.arange(index-100,index+100))]   # epoch from data imported
in python and manually extracted with a sample reference 'index'

do not correspond with

  epochs9[0,295,:] # which is the output of mne.Epochs for the very same
epoch?

They both should refer to the sample 75650, with a pre- and post-trigger of
100 samples.

I am not applying any SSP projection or baseline. What am I missing?

Thanks in advance for your help,

Best,
Tommaso

%%%%%%%%%%%%%%%%% code

import numpy as np
import mne
import xlrd
import scipy.io as sio
import pandas as pd
from mne.viz import plot_evoked_topo
import matplotlib.pyplot as plt

spike = sio.loadmat(
        'E:/../spike75650.mat'
        )# data imported from Matlab as dict spike.
         #The field 'spike is an array float64 (404, 201) channels, samples


raw = mne.io.read_raw_fif('E:/.../B1C2_ii_run1_raw_tsss_mc_art_corr.fif')
#data after tsss
excel = xlrd.open_workbook('E:/.../list raw detections B1C2.xlsx') #trigger
info from excel file

# create an array for mne.Epochs
sheet = excel.sheet_by_index(2)
sp=list()
for i in range(1,61):
    sp.append(sheet.cell_value(i,2))
spevents     = np.array(sp, ndmin=2, dtype=int)
zeros        = np.zeros((1,60), dtype=int)
event_id_int = np.ones((1,60), dtype=int)
event_id_int[:,:] = np.arange(0,60)
event_id_str = list(map(str,np.arange(0,60)))
events = np.hstack((spevents.T, zeros.T, event_id_int.T)) # array int32
(60,3) Nevents,3

               # one row is 75650 0 9

# Create epochs including different events
event_id = dict(zip(event_id_str, np.arange(0,60)))
epochs   = mne.Epochs(raw, events, event_id, tmin = -0.1, tmax = 0.1, proj
= False)

# Generate list of evoked objects from conditions names
evokeds = [epochs[name].average() for name in np.arange(0,60)]


##################### Figure
plt.close('all')
plt.figure()

ep_id = 9
index = spevents[0,ep_id] # trigger sample for continuous data, value 75650

# spike from matlab
spike1 = spike['spike']
plt.plot(spike1[295, :],
                       label = ['Matlab: spike from raw data - MEG2613'])

# spike from continuous data
plt.plot(data[295, (np.arange(index-100,index+100))]-5*10**-11,
                            label = ['Python: spike from raw data -
MEG2613'])

 # spike from MNE epochs
epochs9 = epochs[ep_id].get_data()
plt.plot(epochs9[0,295,:]-5*2*10**-11,
                        label = ['MNE Python: spike from EPOCHED data -
MEG2613'])

# spike from MNE average
evoked9 = epochs[ep_id].average()
plt.plot(evoked9.data[295]-5*3*10**-11,
                        label = ['MNE Python: spike from averaged data -
MEG2613'])

plt.legend()

# check that the channel labels is the same
print(epochs.ch_names[295]), print(raw.ch_names[295])

%%%%%%%%%%%%%%%%%%%%%% FIGURE

[image: image.png]
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.nmr.mgh.harvard.edu/pipermail/mne_analysis/attachments/20191124/144beac2/attachment-0001.html 
-------------- next part --------------
A non-text attachment was scrubbed...
Name: image.png
Type: image/png
Size: 202423 bytes
Desc: not available
Url : http://mail.nmr.mgh.harvard.edu/pipermail/mne_analysis/attachments/20191124/144beac2/attachment-0001.png 


More information about the Mne_analysis mailing list