def get_config( subject: Optional[str] = None, session: Optional[str] = None ) -> BunchConst: cfg = BunchConst( process_er=config.process_er, runs=config.get_runs(subject=subject), use_maxwell_filter=config.use_maxwell_filter, proc=config.proc, task=config.get_task(), datatype=config.get_datatype(), session=session, acq=config.acq, rec=config.rec, space=config.space, bids_root=config.get_bids_root(), deriv_root=config.get_deriv_root(), interactive=config.interactive, epochs_tmin=config.epochs_tmin, epochs_tmax=config.epochs_tmax, epochs_metadata_tmin=config.epochs_metadata_tmin, epochs_metadata_tmax=config.epochs_metadata_tmax, epochs_metadata_keep_first=config.epochs_metadata_keep_first, epochs_metadata_keep_last=config.epochs_metadata_keep_last, event_repeated=config.event_repeated, decim=config.decim, ch_types=config.ch_types, eeg_reference=config.get_eeg_reference() ) return cfg
def get_config(subject: Optional[str] = None, session: Optional[str] = None) -> SimpleNamespace: # Deal with configurations where `deriv_root` was specified, but not # `fs_subjects_dir`. We normally raise an exception in this case in # `get_fs_subjects_dir()`. However, in situations where users only run the # sensor-space scripts, we never call this function, so everything works # totally fine at first (which is expected). Yet, when creating the # reports, the pipeline would fail with an exception – which is # unjustified, as it would not make sense to force users to provide an # `fs_subjects_dir` if they don't care about source analysis anyway! So # simply assign a dummy value in such cases. # `get_fs_subject()` calls `get_fs_subjects_dir()`, so take care of this # too. try: fs_subjects_dir = config.get_fs_subjects_dir() except ValueError: fs_subjects_dir = None fs_subject = None else: fs_subject = config.get_fs_subject(subject=subject) cfg = SimpleNamespace( task=config.get_task(), runs=config.get_runs(subject=subject), datatype=config.get_datatype(), acq=config.acq, rec=config.rec, space=config.space, proc=config.proc, analyze_channels=config.analyze_channels, process_er=config.process_er, find_noisy_channels_meg=config.find_noisy_channels_meg, h_freq=config.h_freq, spatial_filter=config.spatial_filter, ica_reject=config.ica_reject, conditions=config.conditions, contrasts=config.contrasts, time_frequency_conditions=config.time_frequency_conditions, decode=config.decode, decoding_metric=config.decoding_metric, n_boot=config.n_boot, inverse_method=config.inverse_method, fs_subject=fs_subject, fs_subjects_dir=fs_subjects_dir, deriv_root=config.get_deriv_root(), bids_root=config.get_bids_root(), use_template_mri=config.use_template_mri, interactive=config.interactive, plot_psd_for_runs=config.plot_psd_for_runs, ) return cfg
def main() -> None: """Run freesurfer recon-all command on BIDS dataset. The script allows to run the freesurfer recon-all command on all subjects of your BIDS dataset. It can run in parallel with the --n_jobs parameter. It is built on top of the FreeSurfer BIDS app: https://github.com/BIDS-Apps/freesurfer and the MNE BIDS Pipeline https://mne.tools/mne-bids-pipeline You must have freesurfer available on your system. Run via the MNE BIDS Pipeline's `run.py`: python run.py --steps=freesurfer --config=your_pipeline_config.py """ # noqa logger.info('Running FreeSurfer') subjects = config.get_subjects() root_dir = config.get_bids_root() subjects_dir = Path(config.get_fs_subjects_dir()) subjects_dir.mkdir(parents=True, exist_ok=True) with config.get_parallel_backend(): n_jobs = config.get_n_jobs() parallel, run_func, _ = parallel_func(run_recon, n_jobs=n_jobs) parallel(run_func(root_dir, subject, fs_bids_app) for subject in subjects) # Handle fsaverage fsaverage_dir = subjects_dir / 'fsaverage' if fsaverage_dir.exists(): if fsaverage_dir.is_symlink(): fsaverage_dir.unlink() else: shutil.rmtree(fsaverage_dir) env = os.environ shutil.copytree(f"{env['FREESURFER_HOME']}/subjects/fsaverage", subjects_dir / 'fsaverage')
def get_config(subject: Optional[str] = None, session: Optional[str] = None) -> SimpleNamespace: cfg = SimpleNamespace( task=config.get_task(), runs=config.get_runs(subject=subject), datatype=config.get_datatype(), acq=config.acq, rec=config.rec, space=config.space, mindist=config.mindist, spacing=config.spacing, use_template_mri=config.use_template_mri, source_info_path_update=config.source_info_path_update, ch_types=config.ch_types, fs_subject=config.get_fs_subject(subject=subject), fs_subjects_dir=config.get_fs_subjects_dir(), deriv_root=config.get_deriv_root(), bids_root=config.get_bids_root(), n_jobs=config.get_n_jobs()) return cfg
def get_config(subject: Optional[str] = None, session: Optional[str] = None) -> BunchConst: cfg = BunchConst( process_er=config.process_er, runs=config.get_runs(subject=subject), use_maxwell_filter=config.use_maxwell_filter, proc=config.proc, task=config.get_task(), datatype=config.get_datatype(), acq=config.acq, rec=config.rec, space=config.space, bids_root=config.get_bids_root(), deriv_root=config.get_deriv_root(), l_freq=config.l_freq, h_freq=config.h_freq, l_trans_bandwidth=config.l_trans_bandwidth, h_trans_bandwidth=config.h_trans_bandwidth, resample_sfreq=config.resample_sfreq, crop_runs=config.crop_runs, interactive=config.interactive, rename_events=config.rename_events, eeg_bipolar_channels=config.eeg_bipolar_channels, eeg_template_montage=config.eeg_template_montage, fix_stim_artifact=config.fix_stim_artifact, stim_artifact_tmin=config.stim_artifact_tmin, stim_artifact_tmax=config.stim_artifact_tmax, find_flat_channels_meg=config.find_flat_channels_meg, find_noisy_channels_meg=config.find_noisy_channels_meg, reference_run=config.get_mf_reference_run(), drop_channels=config.drop_channels, find_breaks=config.find_breaks, min_break_duration=config.min_break_duration, t_break_annot_start_after_previous_event=config. t_break_annot_start_after_previous_event, # noqa:E501 t_break_annot_stop_before_next_event=config. t_break_annot_stop_before_next_event, # noqa:E501 ) return cfg
def get_config( subject: Optional[str] = None, session: Optional[str] = None ) -> BunchConst: cfg = BunchConst( task=config.get_task(), runs=config.get_runs(subject=subject), datatype=config.get_datatype(), acq=config.acq, rec=config.rec, space=config.space, mindist=config.mindist, spacing=config.spacing, use_template_mri=config.use_template_mri, ch_types=config.ch_types, fs_subject=config.get_fs_subject(subject=subject), fs_subjects_dir=config.get_fs_subjects_dir(), deriv_root=config.get_deriv_root(), bids_root=config.get_bids_root(), n_jobs=config.get_n_jobs() ) return cfg
def get_config( subject: Optional[str] = None, session: Optional[str] = None ) -> BunchConst: cfg = BunchConst( mf_cal_fname=config.get_mf_cal_fname(subject, session), mf_ctc_fname=config.get_mf_ctc_fname(subject, session), mf_st_duration=config.mf_st_duration, mf_head_origin=config.mf_head_origin, process_er=config.process_er, runs=config.get_runs(subject=subject), # XXX needs to accept session! use_maxwell_filter=config.use_maxwell_filter, proc=config.proc, task=config.get_task(), datatype=config.get_datatype(), acq=config.acq, rec=config.rec, space=config.space, bids_root=config.get_bids_root(), deriv_root=config.get_deriv_root(), crop_runs=config.crop_runs, interactive=config.interactive, rename_events=config.rename_events, eeg_template_montage=config.eeg_template_montage, fix_stim_artifact=config.fix_stim_artifact, stim_artifact_tmin=config.stim_artifact_tmin, stim_artifact_tmax=config.stim_artifact_tmax, find_flat_channels_meg=config.find_flat_channels_meg, find_noisy_channels_meg=config.find_noisy_channels_meg, mf_reference_run=config.get_mf_reference_run(), drop_channels=config.drop_channels, find_breaks=config.find_breaks, min_break_duration=config.min_break_duration, t_break_annot_start_after_previous_event=config.t_break_annot_start_after_previous_event, # noqa:E501 t_break_annot_stop_before_next_event=config.t_break_annot_stop_before_next_event, # noqa:E501 ) return cfg