diff --git a/dcm2bids/acquisition.py b/dcm2bids/acquisition.py index 16d16843..752aaa1d 100644 --- a/dcm2bids/acquisition.py +++ b/dcm2bids/acquisition.py @@ -46,22 +46,9 @@ def __init__( self.modalityLabel = modalityLabel self.customEntities = customEntities self.srcSidecar = srcSidecar - - if sidecarChanges is None: - self.sidecarChanges = {} - else: - self.sidecarChanges = sidecarChanges - - if intendedFor is None: - self.intendedFor = IntendedFor - else: - self.intendedFor = intendedFor - - if id is None: - self.id = None - else: - self.id = id - + self.sidecarChanges = {} if sidecarChanges is None else sidecarChanges + self.intendedFor = IntendedFor if intendedFor is None else intendedFor + self.id = None if id is None else id self.dstFile = '' def __eq__(self, other): @@ -162,12 +149,15 @@ def dstIntendedFor(self): def setDstFile(self): """ Return: - The destination filename formatted following the v1.7.0 BIDS entity key table - https://bids-specification.readthedocs.io/en/v1.7.0/99-appendices/04-entity-table.html + The destination filename formatted following the v1.8.0 + BIDS entity key table + https://bids-specification.readthedocs.io/en/v1.8.0/99-appendices/04-entity-table.html """ current_name = self.participant.prefix + self.suffix new_name = '' - current_dict = dict(x.split("-") for x in current_name.split("_") if len(x.split('-')) == 2) + current_dict = dict( + x.split("-") for x in current_name.split("_") if len(x.split('-')) == 2 + ) suffix_list = [x for x in current_name.split("_") if len(x.split('-')) == 1] for current_key in DEFAULT.entityTableKeys: @@ -181,10 +171,11 @@ def setDstFile(self): new_name += f"_{current_key}-{current_dict[current_key]}" if current_dict: - self.logger.warning("Entity \"{}\"".format(list(current_dict.keys())) + - " is not a valid BIDS entity.") + self.logger.warning(f"Entity \"{list(current_dict.keys())}\" is" + "not a valid BIDS entity.") - new_name += f"_{'_'.join(suffix_list)}" # Allow multiple single keys (without value) + # Allow multiple single keys (without value) + new_name += f"_{'_'.join(suffix_list)}" if len(suffix_list) != 1: self.logger.warning("There was more than one suffix found " @@ -230,14 +221,28 @@ def dstSidecarData(self, intendedForList): intendedValue = intendedValue + [intendedForList[index]] else: logging.warning(f"No id found for IntendedFor value '{index}'.") - logging.warning(f"No sidecar changes for field IntendedFor will be made for json file {self.dstFile}.json with this id.") + logging.warning(f"No sidecar changes for field IntendedFor" + f"will be made " + f"for json file {self.dstFile}.json with this id.") logging.warning("Check: https://unfmontreal.github.io/Dcm2Bids/docs/how-to/create-config-file/#id-and-intendedFor.\n") - data["IntendedFor"] = [item for sublist in intendedValue for item in sublist] - + data["IntendedFor"] = [ + item for sublist in intendedValue for item in sublist + ] # sidecarChanges for key, value in self.sidecarChanges.items(): - data[key] = value + if key == "Sources": + values = [intendedForList.get(val, val) for val in value] + # handle if nested list vs str + flat_value_list = [] + for item in values: + if isinstance(item, list): + flat_value_list += item + else: + flat_value_list.append(item) + data[key] = flat_value_list + else: + data[key] = value return data diff --git a/dcm2bids/utils/utils.py b/dcm2bids/utils/utils.py index b4aed687..9c631766 100644 --- a/dcm2bids/utils/utils.py +++ b/dcm2bids/utils/utils.py @@ -64,7 +64,7 @@ class DEFAULT(object): caseSensitive = True # Entity table: - # https://bids-specification.readthedocs.io/en/v1.7.0/99-appendices/04-entity-table.html + # https://bids-specification.readthedocs.io/en/v1.8.0/99-appendices/04-entity-table.html entityTableKeys = ["sub", "ses", "task", "acq", "ce", "rec", "dir", "run", "mod", "echo", "flip", "inv", "mt", "part", "recording"]