3434from .. import fieldmaps as fm
3535
3636
37+ def _normalize_intent (
38+ intent : str ,
39+ subject : str
40+ ) -> str | None :
41+ """Convert BIDS-URI intent to subject-relative intent
42+
43+ SDCFlows currently makes strong assumptions about old-style intents,
44+ and a change to that needs to be carefully considered and tested.
45+ """
46+ if intent .startswith ("bids::" ):
47+ # bids::sub-<subject>/
48+ # ^- 10 ^- 11
49+ return intent [11 + len (subject ):]
50+ return intent
51+
52+
3753def _resolve_intent (
3854 intent : str ,
3955 layout : BIDSLayout ,
@@ -47,6 +63,17 @@ def _resolve_intent(
4763 return intent
4864
4965
66+ def _filter_metadata (
67+ metadata : Dict [str , Any ],
68+ subject : str
69+ ) -> Dict [str , Any ]:
70+ intents = metadata .get ("IntendedFor" )
71+ if intents :
72+ updated = [_normalize_intent (intent , subject ) for intent in listify (intents )]
73+ return {** metadata , "IntendedFor" : updated }
74+ return metadata
75+
76+
5077def find_estimators (
5178 * ,
5279 layout : BIDSLayout ,
@@ -377,7 +404,10 @@ def find_estimators(
377404 ):
378405 try :
379406 e = fm .FieldmapEstimation (
380- fm .FieldmapFile (fmap .path , metadata = fmap .get_metadata ())
407+ fm .FieldmapFile (
408+ fmap .path ,
409+ metadata = _filter_metadata (fmap .get_metadata (), subject ),
410+ )
381411 )
382412 except (ValueError , TypeError ) as err :
383413 _log_debug_estimator_fail (
@@ -405,7 +435,10 @@ def find_estimators(
405435 if len (dirs ) > 1 :
406436 by_intent = {}
407437 for fmap in layout .get (** {** entities , ** {'direction' : dirs }}):
408- fmapfile = fm .FieldmapFile (fmap .path , metadata = fmap .get_metadata ())
438+ fmapfile = fm .FieldmapFile (
439+ fmap .path ,
440+ metadata = _filter_metadata (fmap .get_metadata (), subject ),
441+ )
409442 by_intent .setdefault (
410443 tuple (fmapfile .metadata .get ('IntendedFor' , ())), []
411444 ).append (fmapfile )
0 commit comments