Skip to content

Add "fudge factor" for samplerate when concatenating EEGs #224

@ariel215

Description

@ariel215
  • CML Data Readers version: 0.9.4
  • Python version: 3.6?
  • Operating System: N/A

Description

You should be able to concatenate TimeSeries objects with nearly identical samplerates.

What I Did

>>>reader = CMLReader(subject='R1006P', experiment='FR1')
>>>events = reader.load_events(subjects=['R1006P'],experiments=['FR1'])
>>>eeg = reader.load_eeg(events,rel_start=0, rel_stop=50)

ValueError                                Traceback (most recent call last)
<ipython-input-28-267956422d60> in <module>()
      1 events = reader.load_events(subjects=['R1006P'],experiments=['FR1'])
----> 2 eeg = reader.load_eeg(events,rel_start=0, rel_stop=50)

~/miniconda3/envs/cmlreaders/lib/python3.6/site-packages/cmlreaders/cmlreader.py in load_eeg(self, events, rel_start, rel_stop, scheme)
    281             })
    282 
--> 283         return self.load('eeg', **kwargs)
    284 
    285     @classmethod

~/miniconda3/envs/cmlreaders/lib/python3.6/site-packages/cmlreaders/cmlreader.py in load(self, data_type, **kwargs)
    223             )
    224 
--> 225         return cls.load(**kwargs)
    226 
    227     def load_eeg(self, events: Optional[pd.DataFrame] = None,

~/miniconda3/envs/cmlreaders/lib/python3.6/site-packages/cmlreaders/readers/eeg.py in load(self, **kwargs)
    504 
    505         events = self._eegfile_absolute(events.copy())
--> 506         return self.as_timeseries(events, kwargs["rel_start"], kwargs["rel_stop"])
    507 
    508     def as_dataframe(self):

~/miniconda3/envs/cmlreaders/lib/python3.6/site-packages/cmlreaders/readers/eeg.py in as_timeseries(self, events, rel_start, rel_stop)
    611             )
    612 
--> 613         eegs = EEGContainer.concatenate(eegs)
    614         eegs.attrs["rereferencing_possible"] = reader.rereferencing_possible
    615         return eegs

~/miniconda3/envs/cmlreaders/lib/python3.6/site-packages/cmlreaders/eeg_container.py in concatenate(cls, containers, dim)
    121         samplerate = containers[0].samplerate
    122         if not all([s.samplerate == samplerate for s in containers]):
--> 123             raise ValueError("Sample rates must be the same for all series")
    124 
    125         def check_samples():

ValueError: Sample rates must be the same for all series

The samplerates in question:

>>> eegs = [reader.load_eeg(events.loc[events.session==s],rel_start=0,rel_stop=50)
        for s in events.session.unique()]
>>> [x.samplerate for x in eegs]
[500, 499.70710000000003]

Metadata

Metadata

Assignees

Labels

enhancementNew feature or request

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions