[Mne_analysis] [merge/add/replace events & save - not?]

Virginie van Wassenhove virginie.van.wassenhove at gmail.com
Wed Aug 1 07:37:26 EDT 2018
Search archives:

        External Email - Use Caution        

Here are simplified steps + 4 cases used to try and explain what I would
think as inconsistencies from the user's viewpoint:

#__________________________
#load raw, maxfilter, find events
#__________________________
raw = mne.io.Raw(fname, allow_maxshield=True, preload=True)
sss = maxwell_filter(raw, calibration=cal_path, cross_talk=ct_path,
                     verbose=False, destination=refrun_path,
                     bad_condition='warning')
#find events
evts = mne.find_events(sss, stim_channel=stim_channel, output='onset',
                         min_duration=0.001, uint_cast=True,
initial_event=True)
print(evts)
2 events found
Event IDs: [1 2]
[[ 63196      0      1]
 [363197      0      2]]

_________________________________________________________
(1) Case 1: does "merge" (or here, add) events but does not save
_________________________________________________________
#add events
evts = mne.merge_events(evts, [1],
runs_info['evts_list'][r-1][0],replace_events=False)
evts = mne.merge_events(evts, [2],
runs_info['evts_list'][r-1][1],replace_events=False)

print(evts)
[[ 63196      0      1]
 [ 63196      0    102]
 [363197      0      2]
 [363197      0    202]]

sss.resample(returnResampFreq(), npad="auto", events=evts)
sss.save(sss_fname, overwrite=True, verbose=False)
del raw, evts, sss

# reload and check after saving
tmp = mne.io.Raw(sss_fname, preload=True)
evts = mne.find_events(tmp, stim_channel=stim_channel, output='onset',
                         min_duration=0.001,
                         uint_cast=True, initial_event=True)
print(evts)
2 events found
Event IDs: [1 2]
[[15799     0     1]
 [90799     0     2]]

__________________________________________________
(2) Case 2: does "merge" (or here, add) events but does not save
[same as Case 1 w/o resampling] => resampling not an issue just to check
_________________________________________________________
evts = mne.merge_events(evts, [1],
runs_info['evts_list'][r-1][0],replace_events=False)
evts = mne.merge_events(evts, [2],
runs_info['evts_list'][r-1][1],replace_events=False)
print(evts)
[[ 63196      0      1]
 [ 63196      0    102]
 [363197      0      2]
 [363197      0    202]]
sss.save(sss_fname, overwrite=True, verbose=False)

# reload and check after saving
tmp = mne.io.Raw(sss_fname, preload=True)
evts = mne.find_events(tmp, stim_channel=stim_channel, output='onset',
                         min_duration=0.001,
                         uint_cast=True, initial_event=True)
print(evts)
2 events found
Event IDs: [1 2]
[[ 63196      0      1]
 [363197      0      2]]

_______________________________________________________
(3) Case 3: does merge events but also add values and save
_________________________________________________________
same as (1) with add_events and no  resampling of sss before saving
sss.add_events(evts,stim_channel)
sss.save(sss_fname, overwrite=True, verbose=False)

# reload and check after saving
tmp = mne.io.Raw(sss_fname, preload=True)
evts = mne.find_events(tmp, stim_channel=stim_channel, output='onset',
                         min_duration=0.001, uint_cast=True,
initial_event=True)
2 events found
Event IDs: [103 204]
[[ 63196      0    103]
 [363197      0    204]]

_______________________________________________________
(4) Case 4: file in which there is no trigger to start with but I want to
create some
_________________________________________________________
print(evts)
[]

#add evt on 50 consecutive samples (tried with 1 to 100, same outcome)
for si in range(0,50):
    tmpevts += ([[sss.first_samp+si, 0, runs_info['evts_list'][r-1][0]]])
for si in range(0,50):
    tmpevts += ([[sss.last_samp-si, 0, runs_info['evts_list'][r-1][1]]])

sss.add_events(tmpevts,stim_channel)
sss.save(sss_fname, overwrite=True, verbose=False)

# reload and check after saving
tmp = mne.io.Raw(sss_fname, preload=True)
evts = mne.find_events(tmp, stim_channel=stim_channel, output='onset',
                         min_duration=0.001, uint_cast=True,
initial_event=True)
2 events found
Event IDs: [101 201]
____________________________________

From these, I conclude that adding events with add_events may be saved when
the initial event values are 0 and there are no triggers in the file.
If there are triggers at the sample I wish to transform  w/o preserving
existing triggers (value adding), it is saved.
If there are triggers at the sample I wish to transform  while preserving
existing triggers (duplicating sample and adding new values) it is not
saved (*that's what I wish)
So the only option to save changes in events is to do a merge with
replacement (aka adding value) but then I lose initial triggers.



Virginie van Wassenhove






On Wed, Aug 1, 2018 at 11:54 AM Alexandre Gramfort <
alexandre.gramfort at inria.fr> wrote:

>         External Email - Use Caution
>
> hi Virginie,
>
> did you use:
>
>
> https://martinos.org/mne/dev/generated/mne.io.Raw.html#mne.io.Raw.add_events
>
> ?
>
> if you create events and add them with this method it should then be
> save to disk
> when writing the updated file. If it's not the case we have a bug.
>
> Alex
> On Wed, Aug 1, 2018 at 9:57 AM Virginie van Wassenhove
> <virginie.van.wassenhove at gmail.com> wrote:
> >
> >         External Email - Use Caution
> >
> > Hi everyone,
> >
> > long story short, why saving a raw/sss file to which I either added or
> merged events do not actually preserve the new events?  (longer story below)
> >
> > Thanks,
> > Virginie
> >
> >
> > Longer story:
> >
> > My goal: mark the initial/final few samples of raw data (not just with
> annotations but with my own new trigger) or replace existing triggers with
> new ones. This is so I can crop again preprocessed data (sss post-reject
> post-ICA raw) as I wish, after I concatenated runs to apply ICA.
> >
> > I tried:
> > - using merge/add operations (all going fine detecting the events I want
> to replace) but some events are systematically missing after I saved the
> file and reload it;
> > - tried to catch missing triggers again and redo the same operations
> before concatenation but the sss file is still not being saved with the
> added/replaced events
> >
> > What am I missing? Do you consider it no desirable to be able to rewrite
> a preprocessed sss file with new events?
> > Thanks.
> >
> >
> > Virginie van Wassenhove
> > https://brainthemind.com/
> >
> >
> >
> > _______________________________________________
> > Mne_analysis mailing list
> > Mne_analysis at nmr.mgh.harvard.edu
> > https://mail.nmr.mgh.harvard.edu/mailman/listinfo/mne_analysis
> >
> >
> > The information in this e-mail is intended only for the person to whom
> it is
> > addressed. If you believe this e-mail was sent to you in error and the
> e-mail
> > contains patient information, please contact the Partners Compliance
> HelpLine at
> > http://www.partners.org/complianceline . If the e-mail was sent to you
> in error
> > but does not contain patient information, please contact the sender and
> properly
> > dispose of the e-mail.
>
> _______________________________________________
> Mne_analysis mailing list
> Mne_analysis at nmr.mgh.harvard.edu
> https://mail.nmr.mgh.harvard.edu/mailman/listinfo/mne_analysis
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.nmr.mgh.harvard.edu/pipermail/mne_analysis/attachments/20180801/353acf56/attachment-0001.html 


More information about the Mne_analysis mailing list