pennmem / cmlreaders

CML data reading made easier...
https://pennmem.github.io/cmlreaders/html/index.html
4 stars 6 forks source link

Rereferencing EEG data fails for some subjects #52

Closed mivade closed 6 years ago

mivade commented 6 years ago

Example with R1264P:

IndexError                                Traceback (most recent call last)
<ipython-input-12-724e0abfb97a> in <module>()
----> 1 get_resting_connectivity(subject, rootdir)

<ipython-input-11-2a66889ef259> in get_resting_connectivity(subject, rootdir)
     11         events = connectivity.get_countdown_events(reader)
     12         resting = connectivity.countdown_to_resting(events, rate)
---> 13         eeg = connectivity.read_eeg_data(reader, resting, reref=True)
     14         eeg_data.append(eeg)
     15 

~/src/thetamod/thetamod/connectivity.py in read_eeg_data(reader, events, reref)
    112 
    113     eeg = reader.load_eeg(events=events, rel_start=0, rel_stop=1000,
--> 114                           scheme=scheme)
    115 
    116     return eeg

~/src/cmlreaders/cmlreaders/cmlreader.py in load_eeg(self, events, rel_start, rel_stop, epochs, contacts, scheme)
    162             })
    163 
--> 164         return self.load('eeg', **kwargs)

~/src/cmlreaders/cmlreaders/cmlreader.py in load(self, data_type, file_path, **kwargs)
     92                                        montage=self.montage,
     93                                        file_path=file_path,
---> 94                                        rootdir=self.rootdir).load(**kwargs)
     95 
     96     def load_eeg(self, events: Optional[pd.DataFrame] = None,

~/src/cmlreaders/cmlreaders/readers/eeg.py in load(self, **kwargs)
    272             kwargs['epochs'] = epochs
    273 
--> 274         return self.as_timeseries(**kwargs)
    275 
    276     def as_dataframe(self):

~/src/cmlreaders/cmlreaders/readers/eeg.py in as_timeseries(self, epochs, contacts, scheme)
    346             if not reader.rereferencing_possible:
    347                 raise RereferencingNotPossibleError
--> 348             data = self.rereference(data, scheme)
    349 
    350         # TODO: channels, tstart

~/src/cmlreaders/cmlreaders/readers/eeg.py in rereference(self, data, scheme)
    377         c1, c2 = scheme.contact_1 - 1, scheme.contact_2 - 1
    378         reref = np.array(
--> 379             [data[i, c1, :] - data[i, c2, :] for i in range(data.shape[0])]
    380         )
    381         return reref

~/src/cmlreaders/cmlreaders/readers/eeg.py in <listcomp>(.0)
    377         c1, c2 = scheme.contact_1 - 1, scheme.contact_2 - 1
    378         reref = np.array(
--> 379             [data[i, c1, :] - data[i, c2, :] for i in range(data.shape[0])]
    380         )
    381         return reref

IndexError: index 78 is out of bounds for axis 1 with size 78

I've only checked a few cases, but it looks like this is happening with pre-System 3 subjects. I have not encountered this problem with any monopolar Ramulator subjects.

mivade commented 6 years ago

I have a feeling this is related to #66 and/or #59, so I'm closing this in favor of those.