Configuration Examples#
These examples show the parts of nextflow.config that are most commonly
changed between studies. Keep the global path settings, container settings, and
cluster settings consistent with your local environment.
Full MEG Preprocessing with Existing Anatomy#
Use this when fs_subjects_dir already contains FreeSurfer or DeepPrep
reconstructions for the MEG subjects.
params {
dataset_dir = "/input"
output_dir = "/output"
preproc_dir = "${params.output_dir}/preprocessed"
fs_subjects_dir = "/smri"
steps = "meg_all"
dataset_format = "auto"
meg_import_config = """
subject_id: null
session_id: null
task: null
run_id: null
"""
preproc_config = """
preproc:
- filter: {l_freq: 0.5, h_freq: 125, method: iir, iir_params: {order: 5, ftype: butter}}
- notch_filter: {freqs: 50 100}
- resample: {sfreq: 250}
"""
}
Structural MRI and MEG in One Run#
Use steps = "all" when MEGPrep should run anatomical reconstruction before
the full MEG pipeline.
params {
steps = "all"
is_bids = true
anatomy_preprocess_method = "freesurfer"
t1_dir = "/input"
fs_subjects_dir = "/smri"
fs_license = "/fs_license.txt"
mri_import_config = """
subject_id: null
session_id: null
task: null
run_id: null
"""
}
Resting-State MEG#
For resting-state recordings, the continuous preprocessing and ICA stages are unchanged. The epoching stage creates fixed-length epochs from the cleaned raw recording.
params {
steps = "meg_epochs"
epoch_config = """
task_type: resting
resting:
fixed_length_duration: 2.0
event_source: find_events
autoreject: false
interpolate_bads: false
drop_bad_channels: false
exclude_event_id:
- 255
epochs:
event_id: null
tmin: 0.0
tmax: 2.0
reject_by_annotation: true
picks: meg
baseline: null
preload: true
detrend: null
"""
}
Task-Based MEG with Trigger Channel Events#
Use this when events can be recovered from a stimulus channel with
mne.find_events.
params {
steps = "meg_epochs"
meg_import_config = """
subject_id:
- "01"
- "02"
session_id: null
task:
- aef
run_id: null
"""
epoch_config = """
task_type: task
event_source: find_events
autoreject: false
find_events:
stim_channel: null
shortest_event: 1
min_duration: 0.0
epochs:
event_id: null
tmin: -0.2
tmax: 0.8
reject_by_annotation: true
picks: meg
baseline: null
reject:
mag: 4e-12
preload: true
detrend: null
"""
}
Task-Based MEG with BIDS Events#
Use event_source = "event_file" when trial definitions should come from
*_events.tsv files.
params {
epoch_config = """
task_type: task
event_source: event_file
autoreject: false
event_file:
trial_type:
word_onset_01: 1
phoneme_onset_01: 2
epochs:
event_id: null
tmin: -0.2
tmax: 1.0
reject_by_annotation: true
picks: meg
baseline: null
preload: true
detrend: null
"""
}
Empty-Room Style Covariance#
MEGPrep currently handles empty-room or noise recordings through
covar_type = "raw" and raw_covariance_task_id. The workflow pairs each
experimental recording with a raw recording whose filename has the same BIDS
entities except for the task label.
params {
steps = "meg_all"
covar_type = "raw"
raw_covariance_task_id = "emptyroom"
covar_config = """
compute_raw_covariance:
tmin: 0
tmax: null
method: auto
reject:
mag: 4e-12
reject_by_annotation: true
rank: info
"""
}
If a dataset contains empty-room files that should not be imported as ordinary experimental recordings in raw discovery mode, exclude them during import and use a BIDS-style or task-specific layout for covariance pairing.
raw_include_keywords:
- task-rest
raw_exclude_keywords:
- phantom
- crosstalk
For CTF raw folders, set file_suffix = ".ds". For BTI/4D folders whose
primary data file is named c,rfDC, set file_suffix = "c,rfDC".
Report-Only Run#
Use report to rebuild the static HTML report without re-running MEG or MRI
processing.
docker run --rm -it \
-v /data/bids:/input \
-v /data/out:/output \
-v /data/smri:/smri \
cmrlab/megprep:0.0.3 \
-i /input -o /output --fs_subjects_dir /smri --steps report
Docker End-to-End Example#
The Docker entrypoint prepares mounted output permissions and then drops to the
host UID/GID inferred from /input. The host output directory may be absent
when the command starts. Report-only runs that only mount /output infer
ownership from /output. If neither mount should determine the output owner,
add -e LOCAL_UID="$(id -u)" -e LOCAL_GID="$(id -g)".
docker run --rm -it \
-v /data/bids:/input \
-v /data/out:/output \
-v /data/smri:/smri \
-v /data/license.txt:/fs_license.txt \
-v /data/nextflow.config:/program/nextflow/nextflow.config \
cmrlab/megprep:0.0.3 \
-i /input \
-o /output \
--fs_license_file /fs_license.txt \
--fs_subjects_dir /smri \
--steps meg_all \
--resume
Cluster Example#
On a SLURM cluster, use a Nextflow config profile or process block to select the SLURM executor and container runtime. The important MEGPrep parameters stay the same.
workDir = "/scratch/project/megprep_work"
singularity.enabled = true
singularity.autoMounts = true
process {
executor = "slurm"
queue = "general"
cpus = 4
memory = "16 GB"
container = "/containers/megprep_0.0.3.sif"
}
params {
dataset_dir = "/project/study/bids"
output_dir = "/project/study/derivatives/megprep"
fs_subjects_dir = "/project/study/derivatives/smri"
steps = "meg_all"
}