Skip to content

Commit

Permalink
Merge pull request #434 from tsalo/fmapid
Browse files Browse the repository at this point in the history
Remove non-alphanumeric characters from workflow names and output entities
  • Loading branch information
effigies authored May 30, 2024
2 parents 2456489 + a18cdb2 commit b10de08
Show file tree
Hide file tree
Showing 5 changed files with 24 additions and 10 deletions.
3 changes: 2 additions & 1 deletion sdcflows/fieldmaps.py
Original file line number Diff line number Diff line change
Expand Up @@ -446,7 +446,8 @@ def get_workflow(self, set_inputs=True, **kwargs):
return self._wf

# Override workflow name
kwargs["name"] = f"wf_{self.bids_id}"
clean_bids_id = re.sub(r'[^a-zA-Z0-9]', '', self.bids_id)
kwargs["name"] = f"wf_{clean_bids_id}"

if self.method in (EstimatorType.MAPPED, EstimatorType.PHASEDIFF):
from .workflows.fit.fieldmap import init_fmap_wf
Expand Down
11 changes: 7 additions & 4 deletions sdcflows/workflows/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@
# https://www.nipreps.org/community/licensing/
#
"""Estimate fieldmaps for :abbr:`SDC (susceptibility distortion correction)`."""
import re

from nipype import logging
from nipype.pipeline import engine as pe
from nipype.interfaces import utility as niu
Expand Down Expand Up @@ -106,6 +108,7 @@ def init_fmap_preproc_wf(
)

for n, estimator in enumerate(estimators, 1):
clean_bids_id = re.sub(r'[^a-zA-Z0-9]', '', estimator.bids_id)
est_wf = estimator.get_workflow(
omp_nthreads=omp_nthreads,
debug=debug,
Expand All @@ -116,15 +119,15 @@ def init_fmap_preproc_wf(
]

out_map = pe.Node(
niu.IdentityInterface(fields=out_fields), name=f"out_{estimator.bids_id}"
niu.IdentityInterface(fields=out_fields), name=f"out_{clean_bids_id}"
)
out_map.inputs.fmap_id = estimator.bids_id

fmap_derivatives_wf = init_fmap_derivatives_wf(
output_dir=str(output_dir),
write_coeff=True,
bids_fmap_id=estimator.bids_id,
name=f"fmap_derivatives_wf_{estimator.bids_id}",
name=f"fmap_derivatives_wf_{clean_bids_id}",
)
fmap_derivatives_wf.inputs.inputnode.source_files = source_files
fmap_derivatives_wf.inputs.inputnode.fmap_meta = [
Expand All @@ -135,15 +138,15 @@ def init_fmap_preproc_wf(
output_dir=str(output_dir),
fmap_type=str(estimator.method).rpartition(".")[-1].lower(),
bids_fmap_id=estimator.bids_id,
name=f"fmap_reports_wf_{estimator.bids_id}",
name=f"fmap_reports_wf_{clean_bids_id}",
)
fmap_reports_wf.inputs.inputnode.source_files = source_files

if estimator.method not in (EstimatorType.MAPPED, EstimatorType.PHASEDIFF):
fields = INPUT_FIELDS[estimator.method]
inputnode = pe.Node(
niu.IdentityInterface(fields=fields),
name=f"in_{estimator.bids_id}",
name=f"in_{clean_bids_id}",
)
# fmt:off
workflow.connect([
Expand Down
8 changes: 6 additions & 2 deletions sdcflows/workflows/fit/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@

def init_sdcflows_wf():
"""Create a multi-subject, multi-estimator *SDCFlows* workflow."""
import re

from nipype.pipeline.engine import Workflow
from niworkflows.utils.bids import collect_participants

Expand All @@ -51,6 +53,8 @@ def init_sdcflows_wf():

for subject, sub_estimators in estimators_record.items():
for estim in sub_estimators:
clean_bids_id = re.sub(r'[^a-zA-Z0-9]', '', estim.bids_id)

estim_wf = estim.get_workflow(
omp_nthreads=config.nipype.omp_nthreads,
sloppy=False,
Expand All @@ -61,7 +65,7 @@ def init_sdcflows_wf():
output_dir=config.execution.output_dir,
bids_fmap_id=estim.bids_id,
write_coeff=True,
name=f"fmap_derivatives_{estim.bids_id}",
name=f"fmap_derivatives_{clean_bids_id}",
)

source_paths = [
Expand All @@ -76,7 +80,7 @@ def init_sdcflows_wf():
fmap_type=estim.method,
output_dir=config.execution.output_dir,
bids_fmap_id=estim.bids_id,
name=f"fmap_reports_{estim.bids_id}",
name=f"fmap_reports_{clean_bids_id}",
)
reportlets_wf.inputs.inputnode.source_files = source_paths

Expand Down
6 changes: 4 additions & 2 deletions sdcflows/workflows/outputs.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@
# https://www.nipreps.org/community/licensing/
#
"""Writing out outputs."""
import re

from nipype.pipeline import engine as pe
from nipype.interfaces import utility as niu
from niworkflows.interfaces.bids import DerivativesDataSink as _DDS
Expand Down Expand Up @@ -77,7 +79,7 @@ def init_fmap_reports_wf(

custom_entities = custom_entities or {}
if bids_fmap_id:
custom_entities["fmapid"] = bids_fmap_id.replace("_", "")
custom_entities["fmapid"] = re.sub(r'[^a-zA-Z0-9]', '', bids_fmap_id)

workflow = pe.Workflow(name=name)
inputnode = pe.Node(
Expand Down Expand Up @@ -156,7 +158,7 @@ def init_fmap_derivatives_wf(
"""
custom_entities = custom_entities or {}
if bids_fmap_id:
custom_entities["fmapid"] = bids_fmap_id.replace("_", "")
custom_entities["fmapid"] = re.sub(r'[^a-zA-Z0-9]', '', bids_fmap_id)

workflow = pe.Workflow(name=name)
inputnode = pe.Node(
Expand Down
6 changes: 5 additions & 1 deletion sdcflows/workflows/tests/test_base.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,10 @@
"""Test the base workflow."""
from pathlib import Path
import os
import re

import pytest

from sdcflows import fieldmaps as fm
from sdcflows.utils.wrangler import find_estimators
from sdcflows.workflows.base import init_fmap_preproc_wf
Expand Down Expand Up @@ -55,7 +58,8 @@ def test_fmap_wf(tmpdir, workdir, outdir, bids_layouts, dataset, subject):
if estimator.method != fm.EstimatorType.PEPOLAR:
continue

inputnode = wf.get_node(f"in_{estimator.bids_id}")
clean_bids_id = re.sub(r'[^a-zA-Z0-9]', '', estimator.bids_id)
inputnode = wf.get_node(f"in_{clean_bids_id}")
inputnode.inputs.in_data = [str(f.path) for f in estimator.sources]
inputnode.inputs.metadata = [f.metadata for f in estimator.sources]

Expand Down

0 comments on commit b10de08

Please sign in to comment.