Skip to content

Commit 48b453c

Browse files
committed
Sort DICOMDIR files in the study folder when running bidsmapper/bidscoiner (i.e. do not add a confusing patient parent folder)
1 parent 445ed68 commit 48b453c

File tree

2 files changed

+8
-6
lines changed

2 files changed

+8
-6
lines changed

bidscoin/utilities/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ def unpack(sesfolder: Path, wildcard: str='', workfolder: Path='', _subprefix: U
7373
sessions.update(dicomsort.sortsessions(worksesfolder, _subprefix, recursive=False))
7474

7575
# Sort the DICOM files if not sorted yet (e.g. DICOMDIR)
76-
sessions.update(dicomsort.sortsessions(worksesfolder, _subprefix, recursive=True))
76+
sessions.update(dicomsort.sortsessions(worksesfolder, _subprefix, None, recursive=True))
7777

7878
return sessions, True
7979

bidscoin/utilities/dicomsort.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ def sortsession(sessionfolder: Path, dicomfiles: list[Path], folderscheme: str,
133133
dicomfile.replace(newfilename)
134134

135135

136-
def sortsessions(sourcefolder: Path, subprefix: Union[str,None]='', sesprefix: str='', folderscheme: str='{SeriesNumber:03d}-{SeriesDescription}',
136+
def sortsessions(sourcefolder: Path, subprefix: Union[str,None]='', sesprefix: Union[str,None]='', folderscheme: str='{SeriesNumber:03d}-{SeriesDescription}',
137137
namescheme: str='', pattern: str=r'.*\.(IMA|dcm)$', recursive: bool=True, force: bool=False, dryrun: bool=False) -> set[Path]:
138138
"""
139139
Wrapper around sortsession() to loop over subjects and sessions and map the session DICOM files
@@ -171,7 +171,7 @@ def sortsessions(sourcefolder: Path, subprefix: Union[str,None]='', sesprefix: s
171171
LOGGER.info(f"Searching for subject/session folders in: {sourcefolder}")
172172
for subjectfolder in lsdirs(sourcefolder, (subprefix or '') + '*'):
173173
for sessionfolder in lsdirs(subjectfolder, sesprefix + '*') if sesprefix else [subjectfolder]:
174-
sessions.update(sortsessions(sessionfolder, '', '', folderscheme, namescheme, pattern, recursive, force, dryrun))
174+
sessions.update(sortsessions(sessionfolder, '', '' if sesprefix else None, folderscheme, namescheme, pattern, recursive, force, dryrun))
175175

176176
# Use the DICOMDIR file if it is there
177177
elif (sourcefolder/'DICOMDIR').is_file():
@@ -183,10 +183,12 @@ def sortsessions(sourcefolder: Path, subprefix: Union[str,None]='', sesprefix: s
183183
study = dicomdir.find(PatientID=patientid, StudyInstanceUID=studyuid)
184184
dicomfiles = [Path(instance.path) for instance in study]
185185
if dicomfiles:
186-
if subprefix == '': # == '' -> Recursive call of sortsessions() -> Sort directly in the sourcefolder
186+
if subprefix == '' and sesprefix == '': # -> Recursive call with sesprefix -> Sort directly in the source (=session) folder
187187
sessionfolder = sourcefolder
188-
else: # CLI call -> Sort in subject/session folder
189-
sessionfolder = sourcefolder/f"{subprefix or ''}{cleanup(patient[0].PatientName)}"/f"{sesprefix or ''}{n:02}-{cleanup(study[0].StudyDescription)}"
188+
elif subprefix == '' and sesprefix is None: # -> Without sesprefix + unpack() -> Sort in the study (=session) subfolder
189+
sessionfolder = sourcefolder/f"{n:02}-{cleanup(study[0].StudyDescription)}"
190+
else: # -> CLI call -> Sort in patient/study (=subject/session) subfolder
191+
sessionfolder = sourcefolder/f"{cleanup(patient[0].PatientName)}"/f"{n:02}-{cleanup(study[0].StudyDescription)}"
190192
sortsession(sessionfolder, dicomfiles, folderscheme, namescheme, force, dryrun)
191193
sessions.add(sessionfolder)
192194

0 commit comments

Comments
 (0)