Esempio n. 1
0
def compute_sources(subject, run, mri_available=True):
    epochs_fname = get_SAflow_bids(FOLDERPATH, subject, run, stage='epo')[1]
    epochs = read_epochs(epochs_fname)

    info = epochs.info
    noise_fname = '/storage/Yann/saflow_DATA/saflow_bids/sub-06/ses-recording/meg/sub-06_ses-recording_NOISE_meg.ds'
    noise_raw = read_raw_ctf(noise_fname, preload=True)

    noise_raw.pick_channels(epochs.info['ch_names'])  # Choose channels
    cov = mne.compute_raw_covariance(noise_raw,
                                     method='shrunk',
                                     cv=5,
                                     tmin=0,
                                     tmax=0.8)  #change tmin and tmax ?
    src = mne.setup_source_space('sub-' + str(subject),
                                 subjects_dir=subjects_dir,
                                 add_dist=False)
    fname_src_fsaverage = subjects_dir + '/fsaverage/bem/fsaverage-vol-5-src.fif'

    surface = op.join(subjects_dir, 'sub-' + str(subject), 'bem',
                      'inner_skull.surf')
    vol_src = mne.setup_volume_source_space(
        'sub-' + str(subject),
        subjects_dir=subjects_dir,
        mri='aseg.mgz',
        surface=surface)  #,volume_label='Right-Pallidum')

    trans = get_SAflow_bids(FOLDERPATH, subject, run, stage='epotrans')[1]

    conductivity = (0.3, )  # for single layer
    fwd_filename = get_SAflow_bids(FOLDERPATH, subject, run, stage='epofwd')[1]
    #if not op.isfile(fwd_filename):
    model = mne.make_bem_model(subject='sub-' + str(subject),
                               ico=4,
                               conductivity=conductivity,
                               subjects_dir=subjects_dir)
    bem = mne.make_bem_solution(model)
    fwd = mne.make_forward_solution(info, trans, vol_src, bem, eeg=False)
    mne.write_forward_solution(fwd_filename, fwd, overwrite=True)
    #         else:
    #             fwd = mne.read_forward_solution(fwd_filename)
    inverse_operator = make_inverse_operator(info, fwd, cov, loose=1)

    snr = 1.0
    lambda2 = 1.0 / snr**2

    for j, epoch in enumerate(epochs):
        print('Epoch {} of {}'.format(j, len(epochs)))
        epoch = epoch[np.newaxis, ...]
        epoch = EpochsArray(epoch, info)
        epoch.pick_types(meg='mag')
        if method == 'dSPM':
            stc = apply_inverse_epochs(epoch,
                                       inverse_operator,
                                       lambda2,
                                       method='dSPM')
            src_fs = mne.read_source_spaces(fname_src_fsaverage)
            morph = mne.compute_source_morph(inverse_operator['src'],
                                             subject_from='sub-' +
                                             str(subject),
                                             subjects_dir=subjects_dir,
                                             src_to=src_fs,
                                             verbose=True)

            stc_fsaverage = morph.apply(stc[0])

            savepath = get_SAflow_bids(FOLDERPATH,
                                       subject,
                                       run,
                                       stage='eposources')[1]
            stc_fsaverage.save(savepath)

            del stc_fsaverage
def compute_sources(s):
    filenames  =  [s + '_Fast1',s + '_Fast2',s + '_Fast3',s + '_Fast4',
          s + '_Slow1',s + '_Slow2',s + '_Slow3',s + '_Slow4']
    for f in filenames:
        for t in triggs:
            epochs_fname = path + 'MEG_data/' + s + '/MEG_data_epoched_' + t +  '/' + f + '.fif'
            stc_fname = path +'source_rec/stc_' + t +  '/'

            epochs = read_epochs(epochs_fname)
            epochs = epochs.copy().resample(600, npad='auto')

            info = epochs.info
            noise_raw = read_raw_fif(path + 'MEG_data/' + s + '/MEG_data_epoched/' + s + '_noise.fif',
                                    preload=True)

            noise_raw.pick_channels(epochs.info['ch_names']) # Choose channels
            cov = mne.compute_raw_covariance(noise_raw,method='shrunk', cv=5, tmin = 0., tmax = 10.) #change tmin and tmax ?
            src = mne.setup_source_space(s,subjects_dir=subjects_dir, add_dist=False)
            fname_src_fsaverage = subjects_dir + '/fsaverage/bem/fsaverage-vol-5-src.fif'


            surface = op.join(subjects_dir, s, 'bem', 'inner_skull.surf')
            vol_src = mne.setup_volume_source_space(s, subjects_dir=subjects_dir,mri='aseg.mgz',
                                                    surface=surface)#,volume_label='Right-Pallidum')

            trans = path + 'MEG_data/' + s + '/MEG_data_epoched/' + f + '-trans.fif'

            conductivity = (0.3,)  # for single layer
            fwd_filename = path_meg+ f + '-fwd.fif' 
            #if not op.isfile(fwd_filename):
            model = mne.make_bem_model(subject=s, ico=4,
                           conductivity=conductivity,
                           subjects_dir=subjects_dir)
            bem = mne.make_bem_solution(model)
            fwd = mne.make_forward_solution(info,trans,vol_src,bem,eeg=False)
            mne.write_forward_solution(fwd_filename,fwd,overwrite=True)
    #         else:
    #             fwd = mne.read_forward_solution(fwd_filename)
            inverse_operator = make_inverse_operator(info, fwd, cov,loose=1)
            
            snr = 1.0
            lambda2 = 1.0 / snr ** 2 
    

        for j, epoch in enumerate(epochs):  
            epoch = epoch[np.newaxis,...]
            epoch = EpochsArray(epoch,info)
            epoch.pick_types(meg='mag')
            if method == 'dSPM':
                stc = apply_inverse_epochs(epoch,inverse_operator,lambda2,method='dSPM')
                src_fs = mne.read_source_spaces(fname_src_fsaverage)
                morph = mne.compute_source_morph(
                    inverse_operator['src'], subject_from=s, subjects_dir=subjects_dir,
                    src_to=src_fs, verbose=True)

                stc_fsaverage = morph.apply(stc[0])

                savepath = path_stc + '/stc_block_' + t +'_volume/'
                directory = os.path.dirname(savepath + s + '/')
                if not os.path.exists(directory):
                    os.makedirs(directory)
                else:
                    pass
                stc_fsaverage.save(savepath + s + '/' + f + '_epoch_' + str(j)) 

                del stc_fsaverage