@@ -842,33 +842,51 @@ def parse_args(args=None, namespace=None):
842842 work_dir = config .execution .work_dir
843843 version = config .environment .version
844844 output_layout = config .execution .output_layout
845- config .execution ._config_hash = config .hash_config (config .get ())
846-
847- if config .execution .fs_subjects_dir is None :
848- if output_layout in ('bids' , 'multiverse' ):
849- config .execution .fs_subjects_dir = output_dir / 'sourcedata' / 'freesurfer'
850- elif output_layout == 'legacy' :
851- config .execution .fs_subjects_dir = output_dir / 'freesurfer'
845+ config .execution .parameters_hash = config .hash_config (config .get ())
852846
847+ # Multiverse behaves as a cross between bids and legacy
853848 if config .execution .nibabies_dir is None :
854- if output_layout in 'bids' :
855- config .execution .nibabies_dir = output_dir
856- elif output_layout == 'legacy' :
857- config .execution .nibabies_dir = output_dir / 'nibabies'
858- elif output_layout == 'multiverse' :
859- config .loggers .cli .warning (
860- 'Multiverse output selected - assigning output directory based on version'
861- ' and configuration hash.'
862- )
863- config .execution .nibabies_dir = (
864- output_dir / f'nibabies-{ version .split ("+" , 1 )[0 ]} -{ config .execution ._config_hash } '
865- )
849+ match output_layout :
850+ case 'bids' :
851+ config .execution .nibabies_dir = output_dir
852+ case 'legacy' :
853+ config .execution .nibabies_dir = output_dir / 'nibabies'
854+ case 'multiverse' :
855+ config .loggers .cli .warning (
856+ 'Multiverse output selected - assigning output directory based on version'
857+ ' and configuration hash.'
858+ )
859+ config .execution .nibabies_dir = (
860+ output_dir
861+ / f'nibabies-{ version .split ("+" , 1 )[0 ]} -{ config .execution .parameters_hash } '
862+ )
863+ case _:
864+ config .loggers .cli .warning ('Unknown output layout %s' , output_layout )
865+ pass
866+
867+ nibabies_dir = config .execution .nibabies_dir
868+
869+ if config .execution .fs_subjects_dir is None :
870+ match output_layout :
871+ case 'bids' :
872+ config .execution .fs_subjects_dir = output_dir / 'sourcedata' / 'freesurfer'
873+ case 'legacy' :
874+ config .execution .fs_subjects_dir = output_dir / 'freesurfer'
875+ case 'multiverse' :
876+ config .execution .fs_subjects_dir = nibabies_dir / 'sourcedata' / 'freesurfer'
877+ case _:
878+ pass
866879
867880 if config .workflow .surface_recon_method == 'mcribs' :
868- if output_layout in ('bids' , 'multiverse' ):
869- config .execution .mcribs_dir = output_dir / 'sourcedata' / 'mcribs'
870- elif output_layout == 'legacy' :
871- config .execution .mcribs_dir = output_dir / 'mcribs'
881+ match output_layout :
882+ case 'bids' :
883+ config .execution .mcribs_dir = output_dir / 'sourcedata' / 'mcribs'
884+ case 'legacy' :
885+ config .execution .mcribs_dir = output_dir / 'mcribs'
886+ case 'multiverse' :
887+ config .execution .mcribs_dir = nibabies_dir / 'sourcedata' / 'mcribs'
888+ case _:
889+ pass
872890 # Ensure the directory is created
873891 config .execution .mcribs_dir .mkdir (exist_ok = True , parents = True )
874892
0 commit comments