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

Alexandre Gramfort alexandre.gramfort at inria.fr
Wed Aug 1 07:43:59 EDT 2018
Search archives:

        External Email - Use Caution        

hi Virginie,

as you have a single stim channel you cannot have 2 events with different values
at the same instant. So what you wish is not possible like this.

What you can do however is to store the events you want in a distinct file.

You can use:

https://martinos.org/mne/stable/generated/mne.write_events.html

Note that you can pass events to raw.plot to see when are the events you used.
It's a good sanity check that they are correct.

HTH
Ale


On Wed, Aug 1, 2018 at 1:38 PM Virginie van Wassenhove
<virginie.van.wassenhove at gmail.com> wrote:
>
>         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
>
> _______________________________________________
> 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.



More information about the Mne_analysis mailing list