diff --git a/.github/workflows/python-testing.yml b/.github/workflows/python-testing.yml index 10ff5416..6ad4f3d1 100644 --- a/.github/workflows/python-testing.yml +++ b/.github/workflows/python-testing.yml @@ -31,15 +31,50 @@ jobs: - name: Install dependencies run: | python -m pip install --upgrade pip - python -m pip install flake8 pytest pytest-console-scripts - python -m pip install . + python -m pip install snakebids # - name: Lint with flake8 # run: | # stop the build if there are Python syntax errors or undefined names # flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide # flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics - - name: Test with pytest +# + - name: Set-up env for hippunfold run: | - pytest - + echo "HIPPUNFOLD_CACHE_DIR=`pwd`/test_data/fake_models" >> $GITHUB_ENV + echo "HIPPUNFOLD=./hippunfold/run.py" >> $GITHUB_ENV + - name: Test single T2w bids + run: | + $HIPPUNFOLD test_data/bids_singleT2w test_out participant -np --modality T2w + - name: Test single T2w bids, right hemi + run: | + $HIPPUNFOLD test_data/bids_singleT2w test_out participant -np --modality T2w --hemi R + - name: Test single T2w bids, left hemi + run: | + $HIPPUNFOLD test_data/bids_singleT2w test_out participant -np --modality T2w --hemi L + - name: Test multiple T2w bids + run: | + $HIPPUNFOLD test_data/bids_multiT2w test_out participant -np --modality T2w + - name: Test T1w bids + run: | + $HIPPUNFOLD test_data/bids_T1w test_out participant -np --modality T1w + - name: Test hipp b500 bids + run: | + $HIPPUNFOLD test_data/bids_hippb500 test_out participant -np --modality hippb500 + - name: Test T1w multi-session/longitudinal bids + run: | + $HIPPUNFOLD test_data/bids_T1w_longitudinal test_out participant -np --modality T1w + - name: Test single T2w multi-session/longitudinal bids + run: | + $HIPPUNFOLD test_data/bids_singleT2w_longitudinal test_out participant -np --modality T2w + - name: Test manual seg T2w bids + run: | + $HIPPUNFOLD test_data/bids_segT2w test_out participant -np --modality segT2w + - name: Test cropseg bids, with path override + run: | + $HIPPUNFOLD - test_out participant -np --modality cropseg --path_cropseg test_data/data_cropseg/sub-{subject}_hemi-{hemi}_dseg.nii.gz + - name: Test cropseg bids, with path override, left hemi + run: | + $HIPPUNFOLD - test_out participant -np --modality cropseg --path_cropseg test_data/data_cropseg_1hemi/sub-{subject}_hemi-{hemi}_dseg.nii.gz --hemi L + + diff --git a/docs/getting_started/outputs.rst b/docs/getting_started/outputs.rst index 8ffa77cc..92308cd5 100644 --- a/docs/getting_started/outputs.rst +++ b/docs/getting_started/outputs.rst @@ -1,9 +1,9 @@ Outputs of hippunfold ===================== -The ``results`` folder is a BIDS-derivatives dataset that contains the pre-processed anatomicals used for the segmentation, segmentatioons and hippocampal coordinate images, and HCP-style surfaces of the hippocampus in native and unfolded configurations:: +The ``hippunfold`` folder is a BIDS-derivatives dataset that contains the pre-processed anatomicals used for the segmentation, segmentations and hippocampal coordinate images, and HCP-style surfaces of the hippocampus in native and unfolded configurations:: - results/ + hippunfold/ ├── dataset_description.json └── sub-{subject} ├── anat @@ -143,7 +143,7 @@ The top-level folder structure of hippunfold is:: ├── config ├── logs - ├── results + ├── hippunfold └── work The ``config`` folder contains the hippunfold ``snakebids.yml`` config file, and ``inputs_config.yml`` that contain a record of the parameters used, and paths to the inputs. @@ -152,5 +152,6 @@ Workflow steps that write logs to file are stored in the ``logs`` subfolder, wit Intermediate files are stored in the ``work`` folder. These files and folders, similar to results, are generally named according to BIDS. This folder will have ``tar.gz`` files for each subject, unless the ``--keep_work`` option is used. +If the app is run in workflow mode (`--workflow-mode`/`-W`) which enables direct use of the `snakemake` CLI to run hippunfold, the `hippunfold` and `work` folders will be placed in a `results` folder. diff --git a/hippunfold/config/snakebids.yml b/hippunfold/config/snakebids.yml index 8b9764fa..731529f3 100644 --- a/hippunfold/config/snakebids.yml +++ b/hippunfold/config/snakebids.yml @@ -1,7 +1,7 @@ bids_dir: '../test_data/bids_singleT2w' output_dir: 'test_output' #don't use '.' -snakemake_dir: '.' #do not modify this variable -- is used to refer to files needed by the workflow when running with CLI +#snakemake_dir: '.' #do not modify this variable -- is used to refer to files needed by the workflow when running with CLI #enable printing debug statements during parsing -- disable if generating dag visualization debug: False @@ -418,3 +418,4 @@ skip_coreg: False keep_work: False skip_inject_template_labels: False force_nnunet_model: False +root: results \ No newline at end of file diff --git a/hippunfold/tests/hippunfold_test.py b/hippunfold/tests/hippunfold_test.py deleted file mode 100644 index 9fefe8b8..00000000 --- a/hippunfold/tests/hippunfold_test.py +++ /dev/null @@ -1,57 +0,0 @@ -import os -import tempfile - - -def test_dry_runs(script_runner): - os.environ['HIPPUNFOLD_CACHE_DIR'] = os.path.join(os.getcwd(),'test_data/fake_models') - with tempfile.TemporaryDirectory() as output_dir: - ret = script_runner.run('hippunfold', 'test_data/bids_singleT2w',output_dir,'participant','-np','--modality','T2w') - assert ret.success - - #test help usage - ret = script_runner.run('hippunfold', '-h') - assert ret.success - - #test one hemi at a time - with tempfile.TemporaryDirectory() as output_dir: - ret = script_runner.run('hippunfold', 'test_data/bids_singleT2w',output_dir,'participant','-np','--hemi','R','--modality','T2w') - assert ret.success - - with tempfile.TemporaryDirectory() as output_dir: - ret = script_runner.run('hippunfold', 'test_data/bids_singleT2w',output_dir,'participant','-np','--hemi','L','--modality','T2w') - assert ret.success - - with tempfile.TemporaryDirectory() as output_dir: - ret = script_runner.run('hippunfold', 'test_data/bids_multiT2w',output_dir,'participant','-np','--modality','T2w') - assert ret.success - - with tempfile.TemporaryDirectory() as output_dir: - ret = script_runner.run('hippunfold', 'test_data/bids_T1w',output_dir,'participant','-np','--modality','T1w') - assert ret.success - - with tempfile.TemporaryDirectory() as output_dir: - ret = script_runner.run('hippunfold', 'test_data/bids_hippb500',output_dir,'participant','-np','--modality','hippb500') - assert ret.success - - with tempfile.TemporaryDirectory() as output_dir: - ret = script_runner.run('hippunfold', 'test_data/bids_T1w_longitudinal',output_dir,'participant','-np','--modality','T1w') - assert ret.success - - with tempfile.TemporaryDirectory() as output_dir: - ret = script_runner.run('hippunfold', 'test_data/bids_singleT2w_longitudinal',output_dir,'participant','-np','--modality','T2w') - - with tempfile.TemporaryDirectory() as output_dir: - ret = script_runner.run('hippunfold', 'test_data/bids_segT2w',output_dir,'participant','-np','--modality','segT2w') - assert ret.success - - #test case for cropseg, uses --path_cropseg instead of bids, since pybids (or at least how we use it in snakebids) doesn't like hemi wildcards - with tempfile.TemporaryDirectory() as output_dir: - ret = script_runner.run('hippunfold', '-',output_dir,'participant','-np','--modality','cropseg','--path_cropseg','test_data/data_cropseg/sub-{subject}_hemi-{hemi}_dseg.nii.gz') - assert ret.success - - #cropseg with single hemi -- requires user to specify --hemi - with tempfile.TemporaryDirectory() as output_dir: - ret = script_runner.run('hippunfold', '-',output_dir,'participant','-np','--modality','cropseg','--path_cropseg','test_data/data_cropseg_1hemi/sub-{subject}_hemi-{hemi}_dseg.nii.gz','--hemi','L') - assert ret.success - - diff --git a/hippunfold/workflow/Snakefile b/hippunfold/workflow/Snakefile index 1863809e..206f745b 100644 --- a/hippunfold/workflow/Snakefile +++ b/hippunfold/workflow/Snakefile @@ -2,13 +2,10 @@ import snakebids from snakebids import bids -#from snakebids.utils import get_source_path - configfile: 'config/snakebids.yml' -#config["snakemake_dir"] = get_source_path('../') #make adjustments to input params: # right now hippb500 or cropseg cannot use T1w output space @@ -52,6 +49,10 @@ wildcard_constraints: density='[a-zA-Z0-9]+', +root = os.path.join(config["root"], "hippunfold") +work = os.path.join(config["root"], "work") + + include: 'rules/common.smk' include: 'rules/preproc_t1.smk' diff --git a/hippunfold/workflow/rules/autotop.smk b/hippunfold/workflow/rules/autotop.smk index 8c69b886..2884ea5a 100644 --- a/hippunfold/workflow/rules/autotop.smk +++ b/hippunfold/workflow/rules/autotop.smk @@ -13,7 +13,7 @@ def get_inputs_laplace(wildcards): files = dict() files['lbl'] = get_labels_for_laplace(wildcards) if not config['skip_inject_template_labels']: - files['init_coords'] = bids(root='work',datatype='seg',**config['subj_wildcards'],dir='{dir}',label='hipp',suffix='coords.nii.gz',desc='init',space='corobl',hemi='{hemi}'), + files['init_coords'] = bids(root=work,datatype='seg',**config['subj_wildcards'],dir='{dir}',label='hipp',suffix='coords.nii.gz',desc='init',space='corobl',hemi='{hemi}'), return files rule laplace_coords_hipp: @@ -26,7 +26,8 @@ rule laplace_coords_hipp: convergence_threshold = 1e-5, max_iters = 10000 output: - coords = bids(root='work',datatype='seg',dir='{dir}',label='hipp',suffix='coords.nii.gz',desc='laplace',space='corobl',hemi='{hemi,Lflip|R}', **config['subj_wildcards']), + coords = bids(root=work,datatype='seg',dir='{dir}',label='hipp',suffix='coords.nii.gz',desc='laplace',space='corobl',hemi='{hemi,Lflip|R}', **config['subj_wildcards']), + group: 'subj' resources: time = 30 @@ -35,9 +36,9 @@ rule laplace_coords_hipp: rule laplace_coords_dentate: input: - coords = bids(root='work',datatype='seg',**config['subj_wildcards'],dir='{dir}',label='dentate',suffix='coords.nii.gz',desc='init',space='corobl',hemi='{hemi}') + coords = bids(root=work,datatype='seg',**config['subj_wildcards'],dir='{dir}',label='dentate',suffix='coords.nii.gz',desc='init',space='corobl',hemi='{hemi}') output: - coords = bids(root='work',datatype='seg',dir='{dir}',label='dentate',suffix='coords.nii.gz',desc='laplace',space='corobl',hemi='{hemi,Lflip|R}', **config['subj_wildcards']), + coords = bids(root=work,datatype='seg',dir='{dir}',label='dentate',suffix='coords.nii.gz',desc='laplace',space='corobl',hemi='{hemi,Lflip|R}', **config['subj_wildcards']), group: 'subj' resources: time = 30 @@ -49,20 +50,21 @@ rule prep_equivolume_coords: params: src_labels = lambda wildcards: config['laplace_labels'][wildcards.dir]['src'], output: - outerbin = bids(root='work',datatype='seg',dir='{dir}',desc='all',suffix='mask.nii.gz',space='corobl',hemi='{hemi,Lflip|R}', **config['subj_wildcards']), - innerbin = bids(root='work',datatype='seg',dir='{dir}',desc='SRLM',suffix='mask.nii.gz',space='corobl',hemi='{hemi,Lflip|R}', **config['subj_wildcards']), + outerbin = bids(root=work,datatype='seg',dir='{dir}',desc='all',suffix='mask.nii.gz',space='corobl',hemi='{hemi,Lflip|R}', **config['subj_wildcards']), + innerbin = bids(root=work,datatype='seg',dir='{dir}',desc='SRLM',suffix='mask.nii.gz',space='corobl',hemi='{hemi,Lflip|R}', **config['subj_wildcards']), log: bids(root='logs',**config['subj_wildcards'],dir='{dir}',hemi='{hemi,Lflip|R}',suffix='binarize.txt') group: 'subj' script: '../scripts/prep_equivolume_coords.py' rule equivolume_coords: input: - outerbin = bids(root='work',datatype='seg',dir='{dir}',desc='all',suffix='mask.nii.gz',space='corobl',hemi='{hemi}', **config['subj_wildcards']), - innerbin = bids(root='work',datatype='seg',dir='{dir}',desc='SRLM',suffix='mask.nii.gz',space='corobl',hemi='{hemi}', **config['subj_wildcards']), + outerbin = bids(root=work,datatype='seg',dir='{dir}',desc='all',suffix='mask.nii.gz',space='corobl',hemi='{hemi}', **config['subj_wildcards']), + innerbin = bids(root=work,datatype='seg',dir='{dir}',desc='SRLM',suffix='mask.nii.gz',space='corobl',hemi='{hemi}', **config['subj_wildcards']), params: src_labels = lambda wildcards: config['laplace_labels'][wildcards.dir]['src'], output: - coords = bids(root='work',datatype='seg',dir='{dir}',label='hipp',suffix='coords.nii.gz',desc='equivol',space='corobl',hemi='{hemi,Lflip|R}', **config['subj_wildcards']), + coords = bids(root=work,datatype='seg',dir='{dir}',label='hipp',suffix='coords.nii.gz',desc='equivol',space='corobl',hemi='{hemi,Lflip|R}', **config['subj_wildcards']), + group: 'subj' resources: time = 30 @@ -72,18 +74,19 @@ rule equivolume_coords: rule unflip_coords: input: - nii = bids(root='work',datatype='seg',dir='{dir}',label='{autotop}',suffix='coords.nii.gz', space='corobl',desc='{desc}',hemi='{hemi}flip', **config['subj_wildcards']), + nii = bids(root=work,datatype='seg',dir='{dir}',label='{autotop}',suffix='coords.nii.gz', space='corobl',desc='{desc}',hemi='{hemi}flip', **config['subj_wildcards']), output: - nii = bids(root='work',datatype='seg',dir='{dir}',label='{autotop}',suffix='coords.nii.gz', space='corobl',desc='{desc,laplace}',hemi='{hemi,L}', **config['subj_wildcards']), + nii = bids(root=work,datatype='seg',dir='{dir}',label='{autotop}',suffix='coords.nii.gz', space='corobl',desc='{desc,laplace}',hemi='{hemi,L}', **config['subj_wildcards']), container: config['singularity']['autotop'] group: 'subj' shell: 'c3d {input} -flip x {output}' + rule unflip_coords_equivol: input: - nii = bids(root='work',datatype='seg',dir='{dir}',label='hipp',suffix='coords.nii.gz', space='corobl',desc='{desc}',hemi='{hemi}flip', **config['subj_wildcards']), + nii = bids(root=work,datatype='seg',dir='{dir}',label='hipp',suffix='coords.nii.gz', space='corobl',desc='{desc}',hemi='{hemi}flip', **config['subj_wildcards']), output: - nii = bids(root='work',datatype='seg',dir='{dir}',label='hipp',suffix='coords.nii.gz', space='corobl',desc='{desc,equivol}',hemi='{hemi,L}', **config['subj_wildcards']), + nii = bids(root=work,datatype='seg',dir='{dir}',label='hipp',suffix='coords.nii.gz', space='corobl',desc='{desc,equivol}',hemi='{hemi,L}', **config['subj_wildcards']), container: config['singularity']['autotop'] group: 'subj' shell: 'c3d {input} -flip x {output}' diff --git a/hippunfold/workflow/rules/common.smk b/hippunfold/workflow/rules/common.smk index 5b508f9b..21687833 100644 --- a/hippunfold/workflow/rules/common.smk +++ b/hippunfold/workflow/rules/common.smk @@ -34,14 +34,14 @@ def get_final_spec(): if len(config['hemi']) == 2: specs = expand( - bids(root='results',datatype='surf',den='{density}',space='{space}',label='{autotop}', suffix='surfaces.spec', **config['subj_wildcards']), + bids(root=root,datatype='surf',den='{density}',space='{space}',label='{autotop}', suffix='surfaces.spec', **config['subj_wildcards']), density=config['output_density'], space=surf_spaces, autotop=config['autotop_labels'], allow_missing=True) else: specs = expand( - bids(root='results',datatype='surf',den='{density}',space='{space}',hemi='{hemi}',label='{autotop}',suffix='surfaces.spec', **config['subj_wildcards']), + bids(root=root,datatype='surf',den='{density}',space='{space}',hemi='{hemi}',label='{autotop}',suffix='surfaces.spec', **config['subj_wildcards']), density=config['output_density'], space=surf_spaces, hemi=config['hemi'], @@ -52,7 +52,7 @@ def get_final_spec(): def get_final_subfields(): return expand( bids( - root='results',datatype='seg', + root=root,datatype='seg', desc='subfields',suffix='dseg.nii.gz', space='{space}',hemi='{hemi}', **config['subj_wildcards']), hemi=config['hemi'], @@ -70,7 +70,7 @@ def get_final_coords(): coords.extend( expand( bids( - root='results',datatype='seg',dir='{dir}',suffix='coords.nii.gz', desc='{desc}',space='{space}',hemi='{hemi}', label='{autotop}', **config['subj_wildcards']), + root=root,datatype='seg',dir='{dir}',suffix='coords.nii.gz', desc='{desc}',space='{space}',hemi='{hemi}', label='{autotop}', **config['subj_wildcards']), desc='laplace', dir=['AP','PD','IO'], autotop=config['autotop_labels'], @@ -80,7 +80,7 @@ def get_final_coords(): coords.extend( expand( bids( - root='results',datatype='seg',dir='{dir}',suffix='coords.nii.gz', desc='{desc}',space='{space}',hemi='{hemi}', label='hipp', **config['subj_wildcards']), + root=root,datatype='seg',dir='{dir}',suffix='coords.nii.gz', desc='{desc}',space='{space}',hemi='{hemi}', label='hipp', **config['subj_wildcards']), desc=[desc_io], dir=['IO'], hemi=config['hemi'], @@ -99,7 +99,7 @@ def get_final_transforms(): xfms.extend(expand( bids( - root='results', + root=root, datatype='seg', **config['subj_wildcards'], label='{autotop}', @@ -115,7 +115,7 @@ def get_final_transforms(): xfms.extend(expand( bids( - root='results', + root=root, datatype='seg', **config['subj_wildcards'], label='{autotop}', @@ -130,7 +130,7 @@ def get_final_transforms(): allow_missing=True)) xfms.extend(expand( bids( - root='results', + root=root, datatype='seg', **config['subj_wildcards'], label='{autotop}', @@ -145,7 +145,7 @@ def get_final_transforms(): allow_missing=True)) xfms.extend(expand( bids( - root='results', + root=root, datatype='seg', **config['subj_wildcards'], label='{autotop}', @@ -164,7 +164,7 @@ def get_final_anat(): anat.extend( expand( bids( - root='results', + root=root, datatype='seg', desc='preproc', suffix='{modality_suffix}.nii.gz'.format( @@ -186,7 +186,7 @@ def get_final_qc(): qc.extend( expand( bids( - root='results', + root=root, datatype='qc', suffix='regqc.png', from_='subject', @@ -198,7 +198,7 @@ def get_final_qc(): qc.extend( expand( bids( - root='results', + root=root, datatype='qc', suffix='dseg.png', desc='subfields', @@ -211,7 +211,7 @@ def get_final_qc(): qc.extend( expand( bids( - root='results', + root=root, datatype='qc', suffix='midthickness.surf.png', den='{density}', @@ -229,7 +229,7 @@ def get_final_qc(): qc.extend( expand( bids( - root='results', + root=root, datatype='qc', desc='subfields', suffix='volumes.png', @@ -241,7 +241,7 @@ def get_final_qc(): qc.extend( expand( bids( - root='results', + root=root, datatype='qc', desc='unetf3d', suffix='dice.tsv', @@ -289,21 +289,23 @@ def get_final_output(): rule copy_to_results: """ Generic rule for copying data from work to results""" - input: 'work/{file}' - output: 'results/{file}' + input: + os.path.join(work, "{file}"), + output: + os.path.join(root, "{file}"), group: 'subj' shell: 'cp {input} {output}' def get_final_work_tar(): - return bids(root='work',suffix='work.tar.gz', + return bids(root=work,suffix='work.tar.gz', include_subject_dir=False, include_session_dir=False, **config['subj_wildcards']) def get_work_dir(wildcards): - folder_with_file = expand(bids(root='work',**config['subj_wildcards']),**wildcards) + folder_with_file = expand(bids(root=work,**config['subj_wildcards']),**wildcards) folder_without_file = os.path.dirname(folder_with_file[0]) return folder_without_file @@ -323,19 +325,19 @@ rule archive_work_after_final: def get_input_for_shape_inject(wildcards): if config['modality'] == 'cropseg': - seg = bids(root='work',datatype='anat',**config['subj_wildcards'],suffix='dseg.nii.gz',desc='cropped',space='corobl',hemi='{hemi}').format(**wildcards) + seg = bids(root=work,datatype='anat',**config['subj_wildcards'],suffix='dseg.nii.gz',desc='cropped',space='corobl',hemi='{hemi}').format(**wildcards) elif get_modality_key(config['modality']) == 'seg': modality_suffix = get_modality_suffix(config['modality']) - seg = bids(root='work',datatype='anat',**config['subj_wildcards'],suffix='dseg.nii.gz',desc='cropped',space='corobl',hemi='{hemi}',from_='{modality_suffix}').format( + seg = bids(root=work,datatype='anat',**config['subj_wildcards'],suffix='dseg.nii.gz',desc='cropped',space='corobl',hemi='{hemi}',from_='{modality_suffix}').format( **wildcards, modality_suffix=modality_suffix), else: - seg = bids(root='work',datatype='seg',**config['subj_wildcards'],suffix='dseg.nii.gz',desc='nnunet',space='corobl',hemi='{hemi}').format(**wildcards) + seg = bids(root=work,datatype='seg',**config['subj_wildcards'],suffix='dseg.nii.gz',desc='nnunet',space='corobl',hemi='{hemi}').format(**wildcards) return seg def get_labels_for_laplace(wildcards): if config['skip_inject_template_labels']: seg = get_input_for_shape_inject(wildcards) else: - seg = bids(root='work',datatype='seg',**config['subj_wildcards'],suffix='dseg.nii.gz',desc='postproc',space='corobl',hemi='{hemi}').format(**wildcards) + seg = bids(root=work,datatype='seg',**config['subj_wildcards'],suffix='dseg.nii.gz',desc='postproc',space='corobl',hemi='{hemi}').format(**wildcards) return seg diff --git a/hippunfold/workflow/rules/gifti.smk b/hippunfold/workflow/rules/gifti.smk index 8557f828..49765a4b 100644 --- a/hippunfold/workflow/rules/gifti.smk +++ b/hippunfold/workflow/rules/gifti.smk @@ -7,13 +7,13 @@ surf_to_secondary_type = {'midthickness': 'MIDTHICKNESS', 'inner': 'PIAL', 'oute rule cp_template_to_unfold: """cp template unfold surf to subject""" input: - gii = os.path.join(config['snakemake_dir'],'resources','unfold_template_{autotop}','tpl-avg_space-unfold_den-{density}_{surfname}.surf.gii') + gii = os.path.join(workflow.basedir,'..','resources','unfold_template_{autotop}','tpl-avg_space-unfold_den-{density}_{surfname}.surf.gii') params: structure_type = lambda wildcards: hemi_to_structure[wildcards.hemi], secondary_type = lambda wildcards: surf_to_secondary_type[wildcards.surfname], surface_type = 'FLAT' output: - gii = bids(root='work',datatype='surf',den='{density}',suffix='{surfname}.surf.gii', space='unfolded', hemi='{hemi,R|Lflip}', label='{autotop}', **config['subj_wildcards']) + gii = bids(root=work,datatype='surf',den='{density}',suffix='{surfname}.surf.gii', space='unfolded', hemi='{hemi,R|Lflip}', label='{autotop}', **config['subj_wildcards']) container: config['singularity']['autotop'] group: 'subj' shell: @@ -25,7 +25,7 @@ rule cp_template_to_unfold: rule calc_unfold_template_coords: """ Creates a coords.shape.gii from the unfolded template """ input: - midthickness_gii = os.path.join(config['snakemake_dir'],'resources','unfold_template','tpl-avg_space-unfold_den-{density}_midthickness.surf.gii') + midthickness_gii = os.path.join(workflow.basedir,'..','resources','unfold_template','tpl-avg_space-unfold_den-{density}_midthickness.surf.gii') params: coords_xyz = 'coords-XYZ.shape.gii', coord_AP = 'coord-AP.shape.gii', @@ -35,7 +35,7 @@ rule calc_unfold_template_coords: extent = lambda wildcards: config['{autotop}']['extent'], structure_type = lambda wildcards: hemi_to_structure[wildcards.hemi], output: - coords_gii = bids(root='work',datatype='surf',den='{density}',suffix='coords.shape.gii', space='{space}',hemi='{hemi}',label='{autotop}', **config['subj_wildcards']), + coords_gii = bids(root=work,datatype='surf',den='{density}',suffix='coords.shape.gii', space='{space}',hemi='{hemi}',label='{autotop}', **config['subj_wildcards']), container: config['singularity']['autotop'] shadow: 'minimal' #this is required to use the temporary files defined as params group: 'subj' @@ -55,10 +55,10 @@ rule calc_unfold_template_coords: #subj unfolded surf might have a few vertices outside the bounding box.. this constrains all the vertices to the warp bounding box rule constrain_surf_to_bbox: input: - gii = bids(root='work',datatype='surf',den='{density}',suffix='{surfname}.surf.gii', space='unfolded',hemi='{hemi}', label='{autotop}', **config['subj_wildcards']), - ref_nii = bids(root='work',datatype='seg',space='unfold',label='{autotop}',suffix='refvol.nii.gz',**config['subj_wildcards']), + gii = bids(root=work,datatype='surf',den='{density}',suffix='{surfname}.surf.gii', space='unfolded',hemi='{hemi}', label='{autotop}', **config['subj_wildcards']), + ref_nii = bids(root=work,datatype='seg',space='unfold',label='{autotop}',suffix='refvol.nii.gz',**config['subj_wildcards']), output: - gii = bids(root='work',datatype='surf',den='{density}',suffix='{surfname}.surf.gii',desc='constrainbbox', space='unfolded',hemi='{hemi}', label='{autotop}', **config['subj_wildcards']) + gii = bids(root=work,datatype='surf',den='{density}',suffix='{surfname}.surf.gii',desc='constrainbbox', space='unfolded',hemi='{hemi}', label='{autotop}', **config['subj_wildcards']) group: 'subj' script: '../scripts/constrain_surf_to_bbox.py' @@ -66,14 +66,14 @@ rule constrain_surf_to_bbox: #warp from subj unfolded to corobl rule warp_gii_unfold2native: input: - warp = bids(root='work',datatype='seg',**config['subj_wildcards'],label='{autotop}',suffix='xfm.nii.gz',hemi='{hemi}',from_='unfold',to='corobl',mode='surface'), - gii = bids(root='work',datatype='surf',den='{density}',suffix='{surfname}.surf.gii', desc='constrainbbox',space='unfolded',hemi='{hemi}', label='{autotop}', **config['subj_wildcards']) + warp = bids(root=work,datatype='seg',**config['subj_wildcards'],label='{autotop}',suffix='xfm.nii.gz',hemi='{hemi}',from_='unfold',to='corobl',mode='surface'), + gii = bids(root=work,datatype='surf',den='{density}',suffix='{surfname}.surf.gii', desc='constrainbbox',space='unfolded',hemi='{hemi}', label='{autotop}', **config['subj_wildcards']) params: structure_type = lambda wildcards: hemi_to_structure[wildcards.hemi], secondary_type = lambda wildcards: surf_to_secondary_type[wildcards.surfname], surface_type = 'ANATOMICAL' output: - gii = bids(root='work',datatype='surf',den='{density}',suffix='{surfname}.surf.gii', desc='nonancorrect', space='corobl',hemi='{hemi,R|Lflip}', label='{autotop}', **config['subj_wildcards']) + gii = bids(root=work,datatype='surf',den='{density}',suffix='{surfname}.surf.gii', desc='nonancorrect', space='corobl',hemi='{hemi,R|Lflip}', label='{autotop}', **config['subj_wildcards']) container: config['singularity']['autotop'] group: 'subj' shell: @@ -85,9 +85,9 @@ rule warp_gii_unfold2native: # previous rule seems to be where nan vertices emerge, so we'll correct them here immediately after rule correct_nan_vertices: input: - gii = bids(root='work',datatype='surf',den='{density}',suffix='{surfname}.surf.gii', desc='nonancorrect', space='corobl',hemi='{hemi}', label='{autotop}', **config['subj_wildcards']) + gii = bids(root=work,datatype='surf',den='{density}',suffix='{surfname}.surf.gii', desc='nonancorrect', space='corobl',hemi='{hemi}', label='{autotop}', **config['subj_wildcards']) output: - gii = bids(root='work',datatype='surf',den='{density}',suffix='{surfname}.surf.gii', space='corobl',hemi='{hemi,R|Lflip}', label='{autotop,hipp|dentate}', **config['subj_wildcards']) + gii = bids(root=work,datatype='surf',den='{density}',suffix='{surfname}.surf.gii', space='corobl',hemi='{hemi,R|Lflip}', label='{autotop,hipp|dentate}', **config['subj_wildcards']) group: 'subj' script: '../scripts/fillnanvertices.py' @@ -95,13 +95,13 @@ rule correct_nan_vertices: #unflip surface rule unflip_gii: input: - gii = bids(root='work',datatype='surf',den='{density}',suffix='{surfname}.surf.gii', space='corobl',hemi='{hemi}flip', label='{autotop}', **config['subj_wildcards']) + gii = bids(root=work,datatype='surf',den='{density}',suffix='{surfname}.surf.gii', space='corobl',hemi='{hemi}flip', label='{autotop}', **config['subj_wildcards']) params: structure_type = lambda wildcards: hemi_to_structure[wildcards.hemi], secondary_type = lambda wildcards: surf_to_secondary_type[wildcards.surfname], surface_type = 'ANATOMICAL' output: - gii = bids(root='work',datatype='surf',den='{density}',suffix='{surfname}.surf.gii', space='corobl',hemi='{hemi,L}', label='{autotop}', **config['subj_wildcards']) + gii = bids(root=work,datatype='surf',den='{density}',suffix='{surfname}.surf.gii', space='corobl',hemi='{hemi,L}', label='{autotop}', **config['subj_wildcards']) container: config['singularity']['autotop'] group: 'subj' shell: @@ -113,17 +113,17 @@ rule unflip_gii: def get_unfolded_surf_R_Lflip (wildcards): if wildcards.hemi == 'R': - return bids(root='work',datatype='surf',den='{density}',suffix='{surfname}.surf.gii', space='unfolded',hemi='{hemi}', label='{autotop}', **config['subj_wildcards']).format(**wildcards) + return bids(root=work,datatype='surf',den='{density}',suffix='{surfname}.surf.gii', space='unfolded',hemi='{hemi}', label='{autotop}', **config['subj_wildcards']).format(**wildcards) elif wildcards.hemi == 'L': - return bids(root='work',datatype='surf',den='{density}',suffix='{surfname}.surf.gii', space='unfolded',hemi='{hemi}flip', label='{autotop}', **config['subj_wildcards']).format(**wildcards) + return bids(root=work,datatype='surf',den='{density}',suffix='{surfname}.surf.gii', space='unfolded',hemi='{hemi}flip', label='{autotop}', **config['subj_wildcards']).format(**wildcards) rule unflip_gii_unfolded: """copy unfolded from Lflip to L""" input: - gii = bids(root='work',datatype='surf',den='{density}',suffix='{surfname}.surf.gii', space='unfolded',hemi='{hemi}flip', label='{autotop}', **config['subj_wildcards']) + gii = bids(root=work,datatype='surf',den='{density}',suffix='{surfname}.surf.gii', space='unfolded',hemi='{hemi}flip', label='{autotop}', **config['subj_wildcards']) output: - gii = bids(root='work',datatype='surf',den='{density}',suffix='{surfname}.surf.gii', space='unfolded',hemi='{hemi,L}', label='{autotop}', **config['subj_wildcards']) + gii = bids(root=work,datatype='surf',den='{density}',suffix='{surfname}.surf.gii', space='unfolded',hemi='{hemi,L}', label='{autotop}', **config['subj_wildcards']) container: config['singularity']['autotop'] group: 'subj' shell: @@ -134,10 +134,10 @@ rule unflip_gii_unfolded: #warp from corobl to T1w rule warp_gii_to_T1w: input: - gii = bids(root='work',datatype='surf',den='{density}',suffix='{surfname}.surf.gii', space='corobl',hemi='{hemi}', label='{autotop}', **config['subj_wildcards']), - xfm = bids(root='work',datatype='anat',**config['subj_wildcards'],suffix='xfm.txt',from_='T1w',to='corobl',desc='affine',type_='ras'), + gii = bids(root=work,datatype='surf',den='{density}',suffix='{surfname}.surf.gii', space='corobl',hemi='{hemi}', label='{autotop}', **config['subj_wildcards']), + xfm = bids(root=work,datatype='anat',**config['subj_wildcards'],suffix='xfm.txt',from_='T1w',to='corobl',desc='affine',type_='ras'), output: - gii = bids(root='work',datatype='surf',den='{density}',suffix='{surfname}.surf.gii', space='T1w',hemi='{hemi}', label='{autotop}', **config['subj_wildcards']) + gii = bids(root=work,datatype='surf',den='{density}',suffix='{surfname}.surf.gii', space='T1w',hemi='{hemi}', label='{autotop}', **config['subj_wildcards']) container: config['singularity']['autotop'] group: 'subj' shell: @@ -148,9 +148,9 @@ rule warp_gii_to_T1w: #morphological features, calculated in T1w space: rule calculate_surface_area: input: - gii = bids(root='results',datatype='surf',den='{density}',suffix='midthickness.surf.gii', space='{space}',hemi='{hemi}', label='{autotop}', **config['subj_wildcards']) + gii = bids(root=root,datatype='surf',den='{density}',suffix='midthickness.surf.gii', space='{space}',hemi='{hemi}', label='{autotop}', **config['subj_wildcards']) output: - gii = bids(root='results',datatype='surf',den='{density}',suffix='surfarea.shape.gii', space='{space}',hemi='{hemi}', label='{autotop}', **config['subj_wildcards']) + gii = bids(root=root,datatype='surf',den='{density}',suffix='surfarea.shape.gii', space='{space}',hemi='{hemi}', label='{autotop}', **config['subj_wildcards']) container: config['singularity']['autotop'] group: 'subj' shell: @@ -160,10 +160,10 @@ rule calculate_gyrification: """new gyrification is ratio of nativearea to unfoldarea (e.g. surface scaling or distortion factor. this should be proportional by a constant, to the earlier gyrification on 32k surfaces.""" input: - native_surfarea = bids(root='results',datatype='surf',den='{density}',suffix='surfarea.shape.gii', space='{space}',hemi='{hemi}', label='{autotop}', **config['subj_wildcards']), - unfold_surfarea = os.path.join(config['snakemake_dir'],'resources','unfold_template_{autotop}','tpl-avg_space-unfold_den-{density}_surfarea.shape.gii') + native_surfarea = bids(root=root,datatype='surf',den='{density}',suffix='surfarea.shape.gii', space='{space}',hemi='{hemi}', label='{autotop}', **config['subj_wildcards']), + unfold_surfarea = os.path.join(workflow.basedir,'..','resources','unfold_template_{autotop}','tpl-avg_space-unfold_den-{density}_surfarea.shape.gii') output: - gii = bids(root='results',datatype='surf',den='{density}',suffix='gyrification.shape.gii', space='{space}',hemi='{hemi}', label='{autotop}', **config['subj_wildcards']) + gii = bids(root=root,datatype='surf',den='{density}',suffix='gyrification.shape.gii', space='{space}',hemi='{hemi}', label='{autotop}', **config['subj_wildcards']) container: config['singularity']['autotop'] group: 'subj' shell: @@ -173,12 +173,12 @@ rule calculate_gyrification: rule smooth_surface: input: - gii = bids(root='results',datatype='surf',den='{density}',suffix='midthickness.surf.gii', space='{space}',hemi='{hemi}', label='{autotop}', **config['subj_wildcards']) + gii = bids(root=root,datatype='surf',den='{density}',suffix='midthickness.surf.gii', space='{space}',hemi='{hemi}', label='{autotop}', **config['subj_wildcards']) params: strength = 0.6, iterations = 100 output: - gii = bids(root='results',datatype='surf',den='{density}',suffix='midthickness.surf.gii', space='{space}',hemi='{hemi}', label='{autotop}', desc='smoothed', **config['subj_wildcards']) + gii = bids(root=root,datatype='surf',den='{density}',suffix='midthickness.surf.gii', space='{space}',hemi='{hemi}', label='{autotop}', desc='smoothed', **config['subj_wildcards']) container: config['singularity']['autotop'] group: 'subj' shell: @@ -188,9 +188,9 @@ rule smooth_surface: rule calculate_curvature_from_surface: input: - gii = bids(root='results',datatype='surf',den='{density}',suffix='midthickness.surf.gii', space='{space}',hemi='{hemi}', label='{autotop}', desc='smoothed',**config['subj_wildcards']) + gii = bids(root=root,datatype='surf',den='{density}',suffix='midthickness.surf.gii', space='{space}',hemi='{hemi}', label='{autotop}', desc='smoothed',**config['subj_wildcards']) output: - gii = bids(root='results',datatype='surf',den='{density}',suffix='curvature.shape.gii', space='{space}',hemi='{hemi}', label='{autotop}', **config['subj_wildcards']) + gii = bids(root=root,datatype='surf',den='{density}',suffix='curvature.shape.gii', space='{space}',hemi='{hemi}', label='{autotop}', **config['subj_wildcards']) container: config['singularity']['autotop'] group: 'subj' shell: @@ -199,10 +199,10 @@ rule calculate_curvature_from_surface: rule calculate_thickness_from_surface: input: - inner = bids(root='results',datatype='surf',den='{density}',suffix='inner.surf.gii', space='{space}',hemi='{hemi}', label='{autotop}', **config['subj_wildcards']), - outer = bids(root='results',datatype='surf',den='{density}',suffix='outer.surf.gii', space='{space}',hemi='{hemi}', label='{autotop}', **config['subj_wildcards']) + inner = bids(root=root,datatype='surf',den='{density}',suffix='inner.surf.gii', space='{space}',hemi='{hemi}', label='{autotop}', **config['subj_wildcards']), + outer = bids(root=root,datatype='surf',den='{density}',suffix='outer.surf.gii', space='{space}',hemi='{hemi}', label='{autotop}', **config['subj_wildcards']) output: - gii = bids(root='results',datatype='surf',den='{density}',suffix='thickness.shape.gii', space='{space}',hemi='{hemi}', label='{autotop}', **config['subj_wildcards']) + gii = bids(root=root,datatype='surf',den='{density}',suffix='thickness.shape.gii', space='{space}',hemi='{hemi}', label='{autotop}', **config['subj_wildcards']) container: config['singularity']['autotop'] group: 'subj' shell: @@ -214,20 +214,20 @@ rule resample_bigbrain_subfield_label_gii: note, this creates a Nx1 nii file, for subsequent gifti conversion using wb_command""" input: - label = os.path.join(config['snakemake_dir'],'resources','bigbrain','sub-bigbrain_hemi-{hemi}_subfields.label.gii'), - new_surf = os.path.join(config['snakemake_dir'],'resources','unfold_template_hipp','tpl-avg_space-unfold_den-{density}_midthickness.surf.gii') + label = os.path.join(workflow.basedir,'..','resources','bigbrain','sub-bigbrain_hemi-{hemi}_subfields.label.gii'), + new_surf = os.path.join(workflow.basedir,'..','resources','unfold_template_hipp','tpl-avg_space-unfold_den-{density}_midthickness.surf.gii') output: - label_nii = bids(root='work',datatype='surf',den='{density}',suffix='subfields.label.nii', space='{space}',hemi='{hemi}', label='hipp', **config['subj_wildcards']) + label_nii = bids(root=work,datatype='surf',den='{density}',suffix='subfields.label.nii', space='{space}',hemi='{hemi}', label='hipp', **config['subj_wildcards']) group: 'subj' script: '../scripts/resample_unfolded_label.py' rule label_nii_to_metric_gii: input: - label_nii = bids(root='work',datatype='surf',den='{density}',suffix='subfields.label.nii', space='{space}',hemi='{hemi}', label='hipp', **config['subj_wildcards']), - surf = os.path.join(config['snakemake_dir'],'resources','unfold_template_hipp','tpl-avg_space-unfold_den-{density}_midthickness.surf.gii') + label_nii = bids(root=work,datatype='surf',den='{density}',suffix='subfields.label.nii', space='{space}',hemi='{hemi}', label='hipp', **config['subj_wildcards']), + surf = os.path.join(workflow.basedir,'..','resources','unfold_template_hipp','tpl-avg_space-unfold_den-{density}_midthickness.surf.gii') output: - metric_gii = bids(root='work',datatype='surf',den='{density}',suffix='subfields.label.func.gii', space='{space}',hemi='{hemi}', label='hipp', **config['subj_wildcards']) + metric_gii = bids(root=work,datatype='surf',den='{density}',suffix='subfields.label.func.gii', space='{space}',hemi='{hemi}', label='hipp', **config['subj_wildcards']) group: 'subj' container: config['singularity']['autotop'] shell: 'wb_command -metric-convert -from-nifti {input.label_nii} {input.surf} {output.metric_gii}' @@ -235,10 +235,10 @@ rule label_nii_to_metric_gii: rule metric_to_label_gii: input: - metric_gii = bids(root='work',datatype='surf',den='{density}',suffix='subfields.label.func.gii', space='{space}',hemi='{hemi}', label='hipp', **config['subj_wildcards']), - label_list = os.path.join(config['snakemake_dir'],'resources','bigbrain','sub-bigbrain_labellist.txt') + metric_gii = bids(root=work,datatype='surf',den='{density}',suffix='subfields.label.func.gii', space='{space}',hemi='{hemi}', label='hipp', **config['subj_wildcards']), + label_list = os.path.join(workflow.basedir,'..','resources','bigbrain','sub-bigbrain_labellist.txt') output: - label_gii = bids(root='results',datatype='surf',den='{density}',suffix='subfields.label.gii', space='{space}',hemi='{hemi}', label='hipp', **config['subj_wildcards']) + label_gii = bids(root=root,datatype='surf',den='{density}',suffix='subfields.label.gii', space='{space}',hemi='{hemi}', label='hipp', **config['subj_wildcards']) group: 'subj' container: config['singularity']['autotop'] shell: 'wb_command -metric-label-import {input.metric_gii} {input.label_list} {output.label_gii}' @@ -255,9 +255,9 @@ def get_cmd_cifti_metric(wildcards,input, output): def get_inputs_cifti_metric(wildcards): files = dict() if 'L' in config['hemi']: - files['left_metric'] = bids(root='results',datatype='surf',den='{density}',suffix='{metric}.shape.gii', space='{space}',hemi='L', label='{autotop}', **config['subj_wildcards']).format(**wildcards), + files['left_metric'] = bids(root=root,datatype='surf',den='{density}',suffix='{metric}.shape.gii', space='{space}',hemi='L', label='{autotop}', **config['subj_wildcards']).format(**wildcards), if 'R' in config['hemi']: - files['right_metric'] = bids(root='results',datatype='surf',den='{density}',suffix='{metric}.shape.gii', space='{space}',hemi='R', label='{autotop}', **config['subj_wildcards']).format(**wildcards), + files['right_metric'] = bids(root=root,datatype='surf',den='{density}',suffix='{metric}.shape.gii', space='{space}',hemi='R', label='{autotop}', **config['subj_wildcards']).format(**wildcards), return files rule create_dscalar_metric_cifti: @@ -265,7 +265,7 @@ rule create_dscalar_metric_cifti: params: cmd = get_cmd_cifti_metric output: - cifti = bids(root='results',datatype='surf',den='{density}',suffix='{metric}.dscalar.nii', space='{space}', label='{autotop}', **config['subj_wildcards']) + cifti = bids(root=root,datatype='surf',den='{density}',suffix='{metric}.dscalar.nii', space='{space}', label='{autotop}', **config['subj_wildcards']) container: config['singularity']['autotop'] group: 'subj' shell: '{params.cmd}' @@ -273,9 +273,9 @@ rule create_dscalar_metric_cifti: def get_inputs_cifti_label(wildcards): files = dict() if 'L' in config['hemi']: - files['left_label'] = bids(root='results',datatype='surf',den='{density}',suffix='subfields.label.gii', space='{space}',hemi='L', label='hipp', **config['subj_wildcards']).format(**wildcards), + files['left_label'] = bids(root=root,datatype='surf',den='{density}',suffix='subfields.label.gii', space='{space}',hemi='L', label='hipp', **config['subj_wildcards']).format(**wildcards), if 'R' in config['hemi']: - files['right_label'] = bids(root='results',datatype='surf',den='{density}',suffix='subfields.label.gii', space='{space}',hemi='R', label='hipp', **config['subj_wildcards']).format(**wildcards), + files['right_label'] = bids(root=root,datatype='surf',den='{density}',suffix='subfields.label.gii', space='{space}',hemi='R', label='hipp', **config['subj_wildcards']).format(**wildcards), return files @@ -293,7 +293,7 @@ rule create_dlabel_cifti_subfields: params: cmd = get_cmd_cifti_label output: - cifti = bids(root='results',datatype='surf',den='{density}',suffix='subfields.dlabel.nii', space='{space}', label='hipp', **config['subj_wildcards']) + cifti = bids(root=root,datatype='surf',den='{density}',suffix='subfields.dlabel.nii', space='{space}', label='hipp', **config['subj_wildcards']) container: config['singularity']['autotop'] group: 'subj' shell: '{params.cmd}' @@ -316,17 +316,17 @@ def get_cmd_spec_file(wildcards, input, output): #add surfs and metrics to a spec file rule create_spec_file_hipp: input: - shapes = expand(bids(root='results',datatype='surf',den='{density}',suffix='{shape}.shape.gii', space='{space}',hemi='{hemi}', label='hipp', **config['subj_wildcards']), + shapes = expand(bids(root=root,datatype='surf',den='{density}',suffix='{shape}.shape.gii', space='{space}',hemi='{hemi}', label='hipp', **config['subj_wildcards']), shape=['gyrification','curvature','thickness'], allow_missing=True), - surfs = expand(bids(root='results',datatype='surf',den='{density}',suffix='{surfname}.surf.gii', space='{space}', hemi='{hemi}', label='hipp', **config['subj_wildcards']), + surfs = expand(bids(root=root,datatype='surf',den='{density}',suffix='{surfname}.surf.gii', space='{space}', hemi='{hemi}', label='hipp', **config['subj_wildcards']), surfname=['midthickness','inner','outer'], space=['{space}','unfolded'], allow_missing=True), - subfields = bids(root='results',datatype='surf',den='{density}',suffix='subfields.label.gii', space='{space}',hemi='{hemi}', label='hipp', **config['subj_wildcards']), - cifti = expand(bids(root='results',datatype='surf',den='{density}',suffix='{cifti}.nii', space='{space}', label='hipp', **config['subj_wildcards']), + subfields = bids(root=root,datatype='surf',den='{density}',suffix='subfields.label.gii', space='{space}',hemi='{hemi}', label='hipp', **config['subj_wildcards']), + cifti = expand(bids(root=root,datatype='surf',den='{density}',suffix='{cifti}.nii', space='{space}', label='hipp', **config['subj_wildcards']), cifti=['gyrification.dscalar','curvature.dscalar','thickness.dscalar','subfields.dlabel'], allow_missing=True), params: cmds = get_cmd_spec_file output: - spec_file = bids(root='results',datatype='surf',den='{density}',suffix='surfaces.spec', hemi='{hemi,L|R}',space='{space}', label='hipp', **config['subj_wildcards']) + spec_file = bids(root=root,datatype='surf',den='{density}',suffix='surfaces.spec', hemi='{hemi,L|R}',space='{space}', label='hipp', **config['subj_wildcards']) container: config['singularity']['autotop'] group: 'subj' shell: '{params.cmds}' @@ -334,16 +334,16 @@ rule create_spec_file_hipp: rule create_spec_file_dentate: input: - shapes = expand(bids(root='results',datatype='surf',den='{density}',suffix='{shape}.shape.gii', space='{space}',hemi='{hemi}', label='dentate', **config['subj_wildcards']), + shapes = expand(bids(root=root,datatype='surf',den='{density}',suffix='{shape}.shape.gii', space='{space}',hemi='{hemi}', label='dentate', **config['subj_wildcards']), shape=['gyrification','curvature'], allow_missing=True), - surfs = expand(bids(root='results',datatype='surf',den='{density}',suffix='{surfname}.surf.gii', space='{space}', hemi='{hemi}', label='dentate', **config['subj_wildcards']), + surfs = expand(bids(root=root,datatype='surf',den='{density}',suffix='{surfname}.surf.gii', space='{space}', hemi='{hemi}', label='dentate', **config['subj_wildcards']), surfname=['midthickness'], space=['{space}','unfolded'], allow_missing=True), - cifti = expand(bids(root='results',datatype='surf',den='{density}',suffix='{cifti}.nii', space='{space}', label='dentate', **config['subj_wildcards']), + cifti = expand(bids(root=root,datatype='surf',den='{density}',suffix='{cifti}.nii', space='{space}', label='dentate', **config['subj_wildcards']), cifti=['gyrification.dscalar','curvature.dscalar'], allow_missing=True), params: cmds = get_cmd_spec_file output: - spec_file = bids(root='results',datatype='surf',den='{density}',suffix='surfaces.spec', hemi='{hemi,L|R}',space='{space}', label='dentate', **config['subj_wildcards']) + spec_file = bids(root=root,datatype='surf',den='{density}',suffix='surfaces.spec', hemi='{hemi,L|R}',space='{space}', label='dentate', **config['subj_wildcards']) container: config['singularity']['autotop'] group: 'subj' shell: '{params.cmds}' @@ -351,10 +351,10 @@ rule create_spec_file_dentate: rule merge_lr_spec_file: input: - spec_files = expand(bids(root='results',datatype='surf',den='{density}',suffix='surfaces.spec', hemi='{hemi}',space='{space}', label='{autotop}', **config['subj_wildcards']), + spec_files = expand(bids(root=root,datatype='surf',den='{density}',suffix='surfaces.spec', hemi='{hemi}',space='{space}', label='{autotop}', **config['subj_wildcards']), hemi=['L','R'], allow_missing=True) output: - spec_file = bids(root='work',datatype='surf',den='{density}',space='{space}',suffix='surfaces.spec', label='{autotop}', **config['subj_wildcards']) + spec_file = bids(root=work,datatype='surf',den='{density}',space='{space}',suffix='surfaces.spec', label='{autotop}', **config['subj_wildcards']) container: config['singularity']['autotop'] group: 'subj' shell: 'wb_command -spec-file-merge {input.spec_files} {output}' diff --git a/hippunfold/workflow/rules/nnunet.smk b/hippunfold/workflow/rules/nnunet.smk index 7d86e9d3..79812d5d 100644 --- a/hippunfold/workflow/rules/nnunet.smk +++ b/hippunfold/workflow/rules/nnunet.smk @@ -3,11 +3,11 @@ from appdirs import AppDirs def get_nnunet_input (wildcards): if config['modality'] == 'T2w': - nii = bids(root='work',datatype='anat',**config['subj_wildcards'],suffix='T2w.nii.gz',desc='cropped',space='corobl',hemi='{hemi}'), + nii = bids(root=work,datatype='anat',**config['subj_wildcards'],suffix='T2w.nii.gz',desc='cropped',space='corobl',hemi='{hemi}'), elif config['modality'] == 'T1w': - nii = bids(root='work',datatype='anat',**config['subj_wildcards'],suffix='T1w.nii.gz',desc='cropped',space='corobl',hemi='{hemi}'), + nii = bids(root=work,datatype='anat',**config['subj_wildcards'],suffix='T1w.nii.gz',desc='cropped',space='corobl',hemi='{hemi}'), elif config['modality'] == 'hippb500': - nii = bids(root='work',datatype='dwi',hemi='{hemi}',desc='cropped',space='corobl',suffix='b500.nii.gz',**config['subj_wildcards'] ) + nii = bids(root=work,datatype='dwi',hemi='{hemi}',desc='cropped',space='corobl',suffix='b500.nii.gz',**config['subj_wildcards'] ) else: raise ValueError('modality not supported for nnunet!') return nii @@ -67,7 +67,7 @@ rule run_inference: chkpnt = parse_chkpnt_from_tar, disable_tta = '' if config['nnunet_disable_tta'] else '--disable_tta' output: - nnunet_seg = bids(root='work',datatype='seg',**config['subj_wildcards'],suffix='dseg.nii.gz',desc='nnunet',space='corobl',hemi='{hemi,Lflip|R}') + nnunet_seg = bids(root=work,datatype='seg',**config['subj_wildcards'],suffix='dseg.nii.gz',desc='nnunet',space='corobl',hemi='{hemi,Lflip|R}') shadow: 'minimal' threads: 16 resources: @@ -87,9 +87,9 @@ rule run_inference: rule unflip_nnunet_nii: """Unflip the Lflip nnunet seg""" input: - nnunet_seg = bids(root='work',datatype='seg',**config['subj_wildcards'],suffix='dseg.nii.gz',desc='nnunet',space='corobl',hemi='{hemi}flip') + nnunet_seg = bids(root=work,datatype='seg',**config['subj_wildcards'],suffix='dseg.nii.gz',desc='nnunet',space='corobl',hemi='{hemi}flip') output: - nnunet_seg = bids(root='work',datatype='seg',**config['subj_wildcards'],suffix='dseg.nii.gz',desc='nnunet',space='corobl',hemi='{hemi,L}') + nnunet_seg = bids(root=work,datatype='seg',**config['subj_wildcards'],suffix='dseg.nii.gz',desc='nnunet',space='corobl',hemi='{hemi,L}') container: config['singularity']['autotop'] group: 'subj' shell: 'c3d {input} -flip x {output}' @@ -99,9 +99,9 @@ rule unflip_nnunet_nii: def get_f3d_ref (wildcards): if config['modality'] == 'T2w': - nii = os.path.join(config['snakemake_dir'],config['template_files'][config['template']]['crop_ref']), + nii = os.path.join(workflow.basedir,'..',config['template_files'][config['template']]['crop_ref']), elif config['modality'] == 'T1w': - nii = os.path.join(config['snakemake_dir'],config['template_files'][config['template']]['crop_refT1w']), + nii = os.path.join(workflow.basedir,'..',config['template_files'][config['template']]['crop_refT1w']), else: raise ValueError('modality not supported for nnunet!') return nii @@ -109,12 +109,12 @@ def get_f3d_ref (wildcards): rule qc_nnunet_f3d: input: img = get_nnunet_input, - seg = bids(root='work',datatype='seg',**config['subj_wildcards'],suffix='dseg.nii.gz',desc='nnunet',space='corobl',hemi='{hemi}'), + seg = bids(root=work,datatype='seg',**config['subj_wildcards'],suffix='dseg.nii.gz',desc='nnunet',space='corobl',hemi='{hemi}'), ref = get_f3d_ref, output: - cpp = bids(root='work',datatype='seg',**config['subj_wildcards'],suffix='cpp.nii.gz',desc='f3d',space='corobl',hemi='{hemi}'), - res = bids(root='work',datatype='seg',**config['subj_wildcards'],suffix='{modality}.nii.gz'.format(modality=config['modality']),desc='f3d',space='template',hemi='{hemi}'), - res_mask = bids(root='work',datatype='seg',**config['subj_wildcards'],suffix='mask.nii.gz',desc='f3d',space='template',hemi='{hemi}') + cpp = bids(root=work,datatype='seg',**config['subj_wildcards'],suffix='cpp.nii.gz',desc='f3d',space='corobl',hemi='{hemi}'), + res = bids(root=work,datatype='seg',**config['subj_wildcards'],suffix='{modality}.nii.gz'.format(modality=config['modality']),desc='f3d',space='template',hemi='{hemi}'), + res_mask = bids(root=work,datatype='seg',**config['subj_wildcards'],suffix='mask.nii.gz',desc='f3d',space='template',hemi='{hemi}') container: config['singularity']['autotop'] group: 'subj' shell: @@ -123,12 +123,12 @@ rule qc_nnunet_f3d: rule qc_nnunet_dice: input: - res_mask = bids(root='work',datatype='seg',**config['subj_wildcards'],suffix='mask.nii.gz',desc='f3d',space='template',hemi='{hemi}'), - ref = os.path.join(config['snakemake_dir'],config['template_files'][config['template']]['Mask_crop']) + res_mask = bids(root=work,datatype='seg',**config['subj_wildcards'],suffix='mask.nii.gz',desc='f3d',space='template',hemi='{hemi}'), + ref = os.path.join(workflow.basedir,'..',config['template_files'][config['template']]['Mask_crop']) params: hipp_lbls = [1,2,7,8] output: - dice = report(bids(root='results',datatype='qc',suffix='dice.tsv', desc='unetf3d',hemi='{hemi}', **config['subj_wildcards']), + dice = report(bids(root=root,datatype='qc',suffix='dice.tsv', desc='unetf3d',hemi='{hemi}', **config['subj_wildcards']), caption='../report/nnunet_qc.rst', category='Segmentation QC') group: 'subj' diff --git a/hippunfold/workflow/rules/preproc_cropseg.smk b/hippunfold/workflow/rules/preproc_cropseg.smk index 6c5d9744..fb30cb1b 100644 --- a/hippunfold/workflow/rules/preproc_cropseg.smk +++ b/hippunfold/workflow/rules/preproc_cropseg.smk @@ -1,16 +1,16 @@ rule import_cropseg: input: config['input_path']['cropseg'] output: - nii = bids(root='work',datatype='anat',**config['subj_wildcards'],suffix='dseg.nii.gz',desc='cropped',space='corobl',hemi='{hemi,L|R}'), + nii = bids(root=work,datatype='anat',**config['subj_wildcards'],suffix='dseg.nii.gz',desc='cropped',space='corobl',hemi='{hemi,L|R}'), group: 'subj' shell: 'cp {input} {output}' rule lr_flip_seg: input: - nii = bids(root='work',datatype='anat',**config['subj_wildcards'],suffix='dseg.nii.gz',desc='cropped',space='corobl',hemi='{hemi}'), + nii = bids(root=work,datatype='anat',**config['subj_wildcards'],suffix='dseg.nii.gz',desc='cropped',space='corobl',hemi='{hemi}'), output: - nii = bids(root='work',datatype='anat',**config['subj_wildcards'],suffix='dseg.nii.gz',desc='cropped',space='corobl',hemi='{hemi,L}flip'), + nii = bids(root=work,datatype='anat',**config['subj_wildcards'],suffix='dseg.nii.gz',desc='cropped',space='corobl',hemi='{hemi,L}flip'), container: config['singularity']['autotop'] group: 'subj' shell: diff --git a/hippunfold/workflow/rules/preproc_hippb500.smk b/hippunfold/workflow/rules/preproc_hippb500.smk index 9d332689..0977dc43 100644 --- a/hippunfold/workflow/rules/preproc_hippb500.smk +++ b/hippunfold/workflow/rules/preproc_hippb500.smk @@ -12,7 +12,7 @@ rule resample_hippdwi_to_template: bbox_x = lambda wildcards: config['hippdwi_opts']['bbox_x'][wildcards.hemi], bbox_y = config['hippdwi_opts']['bbox_y'] output: - crop_b500 = bids(root='work',datatype='dwi',hemi='{hemi,L|R}',desc='cropped',space='corobl',suffix='b500.nii.gz',**config['subj_wildcards'] ) + crop_b500 = bids(root=work,datatype='dwi',hemi='{hemi,L|R}',desc='cropped',space='corobl',suffix='b500.nii.gz',**config['subj_wildcards'] ) group: 'subj' shell: 'c3d {input} -resample {params.resample_dim} -as UPSAMPLED ' @@ -26,9 +26,9 @@ rule resample_hippdwi_to_template: rule lr_flip_b500: input: - nii = bids(root='work',datatype='dwi',**config['subj_wildcards'],suffix='b500.nii.gz',desc='cropped',space='corobl',hemi='{hemi}'), + nii = bids(root=work,datatype='dwi',**config['subj_wildcards'],suffix='b500.nii.gz',desc='cropped',space='corobl',hemi='{hemi}'), output: - nii = bids(root='work',datatype='dwi',**config['subj_wildcards'],suffix='b500.nii.gz',desc='cropped',space='corobl',hemi='{hemi,L}flip'), + nii = bids(root=work,datatype='dwi',**config['subj_wildcards'],suffix='b500.nii.gz',desc='cropped',space='corobl',hemi='{hemi,L}flip'), container: config['singularity']['autotop'] group: 'subj' shell: @@ -36,8 +36,8 @@ rule lr_flip_b500: rule cp_b500_to_seg_dir: input: - nii = bids(root='work',datatype='dwi',**config['subj_wildcards'],suffix='b500.nii.gz',desc='cropped',space='corobl',hemi='{hemi}') + nii = bids(root=work,datatype='dwi',**config['subj_wildcards'],suffix='b500.nii.gz',desc='cropped',space='corobl',hemi='{hemi}') output: - nii = bids(root='work',datatype='seg_hippb500',desc='preproc',suffix='b500.nii.gz', space='corobl',hemi='{hemi}', **config['subj_wildcards']) + nii = bids(root=work,datatype='seg_hippb500',desc='preproc',suffix='b500.nii.gz', space='corobl',hemi='{hemi}', **config['subj_wildcards']) group: 'subj' shell: 'cp {input} {output}' diff --git a/hippunfold/workflow/rules/preproc_seg.smk b/hippunfold/workflow/rules/preproc_seg.smk index 14e6b9b5..82b6e5af 100644 --- a/hippunfold/workflow/rules/preproc_seg.smk +++ b/hippunfold/workflow/rules/preproc_seg.smk @@ -1,17 +1,17 @@ rule import_seg: input: lambda wildcards: expand(config['input_path']['seg'],zip,**snakebids.filter_list(config['input_zip_lists']['seg'],wildcards))[0] - output: bids(root='work',datatype='anat',**config['input_wildcards']['seg'],suffix='dseg.nii.gz') + output: bids(root=work,datatype='anat',**config['input_wildcards']['seg'],suffix='dseg.nii.gz') group: 'subj' shell: 'cp {input} {output}' #now, transform to coronal oblique, xfm dependent on the space wildcard rule warp_seg_to_corobl_crop: input: - nii = bids(root='work',datatype='anat',**config['input_wildcards']['seg'],suffix='dseg.nii.gz'), - xfm = bids(root='work',datatype='anat',**config['subj_wildcards'],suffix='xfm.txt',from_='{space}',to='corobl',desc='affine',type_='itk'), - ref = os.path.join(config['snakemake_dir'],config['template_files'][config['template']]['crop_ref']) + nii = bids(root=work,datatype='anat',**config['input_wildcards']['seg'],suffix='dseg.nii.gz'), + xfm = bids(root=work,datatype='anat',**config['subj_wildcards'],suffix='xfm.txt',from_='{space}',to='corobl',desc='affine',type_='itk'), + ref = os.path.join(workflow.basedir,'..',config['template_files'][config['template']]['crop_ref']) output: - nii = bids(root='work',datatype='anat',**config['subj_wildcards'],suffix='dseg.nii.gz',desc='cropped',space='corobl',hemi='{hemi}',from_='{space}'), + nii = bids(root=work,datatype='anat',**config['subj_wildcards'],suffix='dseg.nii.gz',desc='cropped',space='corobl',hemi='{hemi}',from_='{space}'), container: config['singularity']['autotop'] group: 'subj' shell: @@ -21,9 +21,9 @@ rule warp_seg_to_corobl_crop: rule lr_flip_seg: input: - nii = bids(root='work',datatype='anat',**config['subj_wildcards'],suffix='dseg.nii.gz',desc='cropped',space='corobl',hemi='{hemi}',from_='{space}'), + nii = bids(root=work,datatype='anat',**config['subj_wildcards'],suffix='dseg.nii.gz',desc='cropped',space='corobl',hemi='{hemi}',from_='{space}'), output: - nii = bids(root='work',datatype='anat',**config['subj_wildcards'],suffix='dseg.nii.gz',desc='cropped',space='corobl',hemi='{hemi,L}flip',from_='{space}'), + nii = bids(root=work,datatype='anat',**config['subj_wildcards'],suffix='dseg.nii.gz',desc='cropped',space='corobl',hemi='{hemi,L}flip',from_='{space}'), container: config['singularity']['autotop'] group: 'subj' shell: diff --git a/hippunfold/workflow/rules/preproc_t1.smk b/hippunfold/workflow/rules/preproc_t1.smk index ae431afd..4c896ae0 100644 --- a/hippunfold/workflow/rules/preproc_t1.smk +++ b/hippunfold/workflow/rules/preproc_t1.smk @@ -5,7 +5,7 @@ rule import_t1: """Note: this rule only grabs the first T1w TODO: add motion-corrected averaging, like we do for T2w""" input: lambda wildcards: expand(config['input_path']['T1w'],zip,**snakebids.filter_list(config['input_zip_lists']['T1w'],wildcards))[0] - output: bids(root='work',datatype='anat',**config['subj_wildcards'],suffix='T1w.nii.gz') + output: bids(root=work,datatype='anat',**config['subj_wildcards'],suffix='T1w.nii.gz') group: 'subj' shell: 'cp {input} {output}' @@ -13,16 +13,16 @@ rule import_t1: if config['skip_preproc']: rule import_preproc_t1: input: lambda wildcards: expand(config['input_path']['T1w'],zip,**snakebids.filter_list(config['input_zip_lists']['T1w'],wildcards))[0] - output: bids(root='results',datatype='anat',**config['subj_wildcards'],suffix='T1w.nii.gz',desc='preproc') + output: bids(root=root,datatype='anat',**config['subj_wildcards'],suffix='T1w.nii.gz',desc='preproc') group: 'subj' shell: 'cp {input} {output}' else: rule n4_t1: input: - t1 = bids(root='work',datatype='anat',**config['subj_wildcards'],suffix='T1w.nii.gz'), + t1 = bids(root=work,datatype='anat',**config['subj_wildcards'],suffix='T1w.nii.gz'), output: - t1 = bids(root='results',datatype='anat',**config['subj_wildcards'],desc='preproc', suffix='T1w.nii.gz'), + t1 = bids(root=root,datatype='anat',**config['subj_wildcards'],desc='preproc', suffix='T1w.nii.gz'), threads: 8 container: config['singularity']['autotop'] group: 'subj' @@ -41,24 +41,24 @@ def reg_to_template_cmd(wildcards,input,output): rule reg_to_template: input: - flo = bids(root='results',datatype='anat',**config['subj_wildcards'],desc='preproc',suffix='T1w.nii.gz'), - ref = os.path.join(config['snakemake_dir'],config['template_files'][config['template']]['T1w']), - xfm_identity = os.path.join(config['snakemake_dir'], config['xfm_identity']) + flo = bids(root=root,datatype='anat',**config['subj_wildcards'],desc='preproc',suffix='T1w.nii.gz'), + ref = os.path.join(workflow.basedir,'..',config['template_files'][config['template']]['T1w']), + xfm_identity = os.path.join(workflow.basedir,'..', config['xfm_identity']) params: cmd = reg_to_template_cmd, output: - warped_subj = bids(root='work',datatype='anat',**config['subj_wildcards'],suffix='T1w.nii.gz',space=config['template'],desc='affine'), - xfm_ras = bids(root='work',datatype='anat',**config['subj_wildcards'],suffix='xfm.txt',from_='T1w',to=config['template'],desc='affine',type_='ras'), + warped_subj = bids(root=work,datatype='anat',**config['subj_wildcards'],suffix='T1w.nii.gz',space=config['template'],desc='affine'), + xfm_ras = bids(root=work,datatype='anat',**config['subj_wildcards'],suffix='xfm.txt',from_='T1w',to=config['template'],desc='affine',type_='ras'), container: config['singularity']['autotop'] group: 'subj' shell: '{params.cmd}' rule qc_reg_to_template: input: - ref = os.path.join(config['snakemake_dir'],config['template_files'][config['template']]['T1w']), - flo = bids(root='work',datatype='anat',**config['subj_wildcards'],suffix='T1w.nii.gz',space=config['template'],desc='affine'), + ref = os.path.join(workflow.basedir,'..',config['template_files'][config['template']]['T1w']), + flo = bids(root=work,datatype='anat',**config['subj_wildcards'],suffix='T1w.nii.gz',space=config['template'],desc='affine'), output: - png = report(bids(root='results',datatype='qc',**config['subj_wildcards'],suffix='regqc.png',from_='subject', to=config['template']), + png = report(bids(root=root,datatype='qc',**config['subj_wildcards'],suffix='regqc.png',from_='subject', to=config['template']), caption='../report/t1w_template_regqc.rst', category='Registration QC') group: 'subj' @@ -68,9 +68,9 @@ rule qc_reg_to_template: rule convert_template_xfm_ras2itk: input: - bids(root='work',datatype='anat',**config['subj_wildcards'],suffix='xfm.txt',from_='T1w',to=config['template'],desc='affine',type_='ras'), + bids(root=work,datatype='anat',**config['subj_wildcards'],suffix='xfm.txt',from_='T1w',to=config['template'],desc='affine',type_='ras'), output: - bids(root='work',datatype='anat',**config['subj_wildcards'],suffix='xfm.txt',from_='T1w',to=config['template'],desc='affine',type_='itk'), + bids(root=work,datatype='anat',**config['subj_wildcards'],suffix='xfm.txt',from_='T1w',to=config['template'],desc='affine',type_='itk'), container: config['singularity']['autotop'] group: 'subj' shell: @@ -80,10 +80,10 @@ rule convert_template_xfm_ras2itk: #now have subject -> template transform, can compose that with template -> corobl to get subject -> corobl rule compose_template_xfm_corobl: input: - sub_to_std = bids(root='work',datatype='anat',**config['subj_wildcards'],suffix='xfm.txt',from_='T1w',to=config['template'],desc='affine',type_='itk'), - std_to_cor = os.path.join(config['snakemake_dir'],config['template_files'][config['template']]['xfm_corobl']) + sub_to_std = bids(root=work,datatype='anat',**config['subj_wildcards'],suffix='xfm.txt',from_='T1w',to=config['template'],desc='affine',type_='itk'), + std_to_cor = os.path.join(workflow.basedir,'..',config['template_files'][config['template']]['xfm_corobl']) output: - sub_to_cor = bids(root='work',datatype='anat',**config['subj_wildcards'],suffix='xfm.txt',from_='T1w',to='corobl',desc='affine',type_='itk'), + sub_to_cor = bids(root=work,datatype='anat',**config['subj_wildcards'],suffix='xfm.txt',from_='T1w',to='corobl',desc='affine',type_='itk'), container: config['singularity']['autotop'] group: 'subj' shell: @@ -92,9 +92,9 @@ rule compose_template_xfm_corobl: rule invert_template_xfm_itk2ras: input: - xfm_ras = bids(root='work',datatype='anat',**config['subj_wildcards'],suffix='xfm.txt',from_='T1w',to='corobl',desc='affine',type_='itk'), + xfm_ras = bids(root=work,datatype='anat',**config['subj_wildcards'],suffix='xfm.txt',from_='T1w',to='corobl',desc='affine',type_='itk'), output: - xfm_ras = bids(root='work',datatype='anat',**config['subj_wildcards'],suffix='xfm.txt',from_='T1w',to='corobl',desc='affineInverse',type_='ras'), + xfm_ras = bids(root=work,datatype='anat',**config['subj_wildcards'],suffix='xfm.txt',from_='T1w',to='corobl',desc='affineInverse',type_='ras'), container: config['singularity']['autotop'] group: 'subj' shell: @@ -102,9 +102,9 @@ rule invert_template_xfm_itk2ras: rule template_xfm_itk2ras: input: - xfm_ras = bids(root='work',datatype='anat',**config['subj_wildcards'],suffix='xfm.txt',from_='T1w',to='corobl',desc='affine',type_='itk'), + xfm_ras = bids(root=work,datatype='anat',**config['subj_wildcards'],suffix='xfm.txt',from_='T1w',to='corobl',desc='affine',type_='itk'), output: - xfm_ras = bids(root='work',datatype='anat',**config['subj_wildcards'],suffix='xfm.txt',from_='T1w',to='corobl',desc='affine',type_='ras'), + xfm_ras = bids(root=work,datatype='anat',**config['subj_wildcards'],suffix='xfm.txt',from_='T1w',to='corobl',desc='affine',type_='ras'), container: config['singularity']['autotop'] group: 'subj' shell: @@ -114,12 +114,12 @@ rule template_xfm_itk2ras: #apply transform to get subject in corobl cropped space rule warp_t1_to_corobl_crop: input: - t1 = bids(root='results',datatype='anat',**config['subj_wildcards'],desc='preproc', suffix='T1w.nii.gz'), - xfm = bids(root='work',datatype='anat',**config['subj_wildcards'],suffix='xfm.txt',from_='T1w',to='corobl',desc='affine',type_='itk'), - ref = os.path.join(config['snakemake_dir'],config['template_files'][config['template']]['crop_ref']), - std_to_cor = os.path.join(config['snakemake_dir'],config['template_files'][config['template']]['xfm_corobl']) + t1 = bids(root=root,datatype='anat',**config['subj_wildcards'],desc='preproc', suffix='T1w.nii.gz'), + xfm = bids(root=work,datatype='anat',**config['subj_wildcards'],suffix='xfm.txt',from_='T1w',to='corobl',desc='affine',type_='itk'), + ref = os.path.join(workflow.basedir,'..',config['template_files'][config['template']]['crop_ref']), + std_to_cor = os.path.join(workflow.basedir,'..',config['template_files'][config['template']]['xfm_corobl']) output: - t1 = bids(root='work',datatype='anat',**config['subj_wildcards'],desc='cropped', suffix='T1w.nii.gz',space='corobl',hemi='{hemi,L|R}'), + t1 = bids(root=work,datatype='anat',**config['subj_wildcards'],desc='cropped', suffix='T1w.nii.gz',space='corobl',hemi='{hemi,L|R}'), container: config['singularity']['autotop'] group: 'subj' shell: @@ -129,9 +129,9 @@ rule warp_t1_to_corobl_crop: rule lr_flip_t1: input: - nii = bids(root='work',datatype='anat',**config['subj_wildcards'],suffix='T1w.nii.gz',desc='cropped',space='corobl',hemi='{hemi}'), + nii = bids(root=work,datatype='anat',**config['subj_wildcards'],suffix='T1w.nii.gz',desc='cropped',space='corobl',hemi='{hemi}'), output: - nii = bids(root='work',datatype='anat',**config['subj_wildcards'],suffix='T1w.nii.gz',desc='cropped',space='corobl',hemi='{hemi,L}flip'), + nii = bids(root=work,datatype='anat',**config['subj_wildcards'],suffix='T1w.nii.gz',desc='cropped',space='corobl',hemi='{hemi,L}flip'), container: config['singularity']['autotop'] group: 'subj' shell: diff --git a/hippunfold/workflow/rules/preproc_t2.smk b/hippunfold/workflow/rules/preproc_t2.smk index 1e220f35..06b8d1c2 100644 --- a/hippunfold/workflow/rules/preproc_t2.smk +++ b/hippunfold/workflow/rules/preproc_t2.smk @@ -1,12 +1,12 @@ rule import_t2: input: config['input_path']['T2w'] - output: bids(root='work',datatype='anat',**config['input_wildcards']['T2w'],suffix='T2w.nii.gz') + output: bids(root=work,datatype='anat',**config['input_wildcards']['T2w'],suffix='T2w.nii.gz') group: 'subj' shell: 'cp {input} {output}' rule n4_t2: - input: bids(root='work',datatype='anat',**config['input_wildcards']['T2w'],suffix='T2w.nii.gz') - output: bids(root='work',datatype='anat',**config['input_wildcards']['T2w'],suffix='T2w.nii.gz',desc='n4') + input: bids(root=work,datatype='anat',**config['input_wildcards']['T2w'],suffix='T2w.nii.gz') + output: bids(root=work,datatype='anat',**config['input_wildcards']['T2w'],suffix='T2w.nii.gz',desc='n4') threads: 8 container: config['singularity']['autotop'] group: 'subj' @@ -17,12 +17,12 @@ rule n4_t2: def get_ref_n4_t2 (wildcards): #get the first image - t2_imgs = expand(bids(root='work',datatype='anat',**config['input_wildcards']['T2w'],suffix='T2w.nii.gz',desc='n4'), + t2_imgs = expand(bids(root=work,datatype='anat',**config['input_wildcards']['T2w'],suffix='T2w.nii.gz',desc='n4'), zip,**snakebids.filter_list(config['input_zip_lists']['T2w'],wildcards)) return t2_imgs[0] def get_floating_n4_t2 (wildcards): - t2_imgs = expand(bids(root='work',datatype='anat',**config['input_wildcards']['T2w'],suffix='T2w.nii.gz',desc='n4'), + t2_imgs = expand(bids(root=work,datatype='anat',**config['input_wildcards']['T2w'],suffix='T2w.nii.gz',desc='n4'), zip,**snakebids.filter_list(config['input_zip_lists']['T2w'],wildcards)) return t2_imgs[int(wildcards.idx)] @@ -33,9 +33,9 @@ rule reg_t2_to_ref: ref = get_ref_n4_t2, flo = get_floating_n4_t2 output: - xfm_ras = bids(root='work',datatype='anat',**config['subj_wildcards'],suffix='xfm.txt',from_='T2w{idx}',to='T2w0',desc='rigid',type_='ras'), - xfm_itk = bids(root='work',datatype='anat',**config['subj_wildcards'],suffix='xfm.txt',from_='T2w{idx}',to='T2w0',desc='rigid',type_='itk'), - warped = bids(root='work',datatype='anat',**config['subj_wildcards'],suffix='T2w.nii.gz',desc='aligned',floating='{idx}') + xfm_ras = bids(root=work,datatype='anat',**config['subj_wildcards'],suffix='xfm.txt',from_='T2w{idx}',to='T2w0',desc='rigid',type_='ras'), + xfm_itk = bids(root=work,datatype='anat',**config['subj_wildcards'],suffix='xfm.txt',from_='T2w{idx}',to='T2w0',desc='rigid',type_='itk'), + warped = bids(root=work,datatype='anat',**config['subj_wildcards'],suffix='T2w.nii.gz',desc='aligned',floating='{idx}') container: config['singularity']['autotop'] group: 'subj' shell: @@ -51,7 +51,7 @@ def get_aligned_n4_t2 (wildcards): num_scans = len(filtered['subject']) #then, return the path, expanding over range(1,num_scans) -i.e excludes 0 (ref image) - t2_imgs = expand(bids(root='work',datatype='anat',**config['subj_wildcards'],suffix='T2w.nii.gz',desc='aligned',floating='{idx}'), + t2_imgs = expand(bids(root=work,datatype='anat',**config['subj_wildcards'],suffix='T2w.nii.gz',desc='aligned',floating='{idx}'), **wildcards, idx=range(1,num_scans)) return t2_imgs @@ -59,7 +59,7 @@ if config['skip_preproc']: #grabs the first t2w only rule import_preproc_t2: input: lambda wildcards: expand(config['input_path']['T2w'],zip,**snakebids.filter_list(config['input_zip_lists']['T2w'],wildcards))[0] - output: bids(root='work',datatype='anat',**config['subj_wildcards'],suffix='T2w.nii.gz', desc='preproc') + output: bids(root=work,datatype='anat',**config['subj_wildcards'],suffix='T2w.nii.gz', desc='preproc') group: 'subj' shell: 'cp {input} {output}' @@ -73,7 +73,7 @@ else: params: cmd = get_avg_or_cp_scans_cmd output: - bids(root='work',datatype='anat',**config['subj_wildcards'],suffix='T2w.nii.gz',desc='preproc') + bids(root=work,datatype='anat',**config['subj_wildcards'],suffix='T2w.nii.gz',desc='preproc') container: config['singularity']['autotop'] group: 'subj' shell: '{params.cmd}' @@ -84,12 +84,12 @@ else: #register to t1 rule reg_t2_to_t1: input: - flo = bids(root='work',datatype='anat',**config['subj_wildcards'],suffix='T2w.nii.gz',desc='preproc'), - ref = bids(root='results',datatype='anat',**config['subj_wildcards'],desc='preproc',suffix='T1w.nii.gz') + flo = bids(root=work,datatype='anat',**config['subj_wildcards'],suffix='T2w.nii.gz',desc='preproc'), + ref = bids(root=root,datatype='anat',**config['subj_wildcards'],desc='preproc',suffix='T1w.nii.gz') output: - warped = bids(root='results',datatype='anat',**config['subj_wildcards'],suffix='T2w.nii.gz',desc='preproc',space='T1w'), - xfm_ras = bids(root='work',datatype='anat',**config['subj_wildcards'],suffix='xfm.txt',from_='T2w',to='T1w',desc='rigid',type_='ras'), - xfm_itk = bids(root='work',datatype='anat',**config['subj_wildcards'],suffix='xfm.txt',from_='T2w',to='T1w',desc='rigid',type_='itk') + warped = bids(root=root,datatype='anat',**config['subj_wildcards'],suffix='T2w.nii.gz',desc='preproc',space='T1w'), + xfm_ras = bids(root=work,datatype='anat',**config['subj_wildcards'],suffix='xfm.txt',from_='T2w',to='T1w',desc='rigid',type_='ras'), + xfm_itk = bids(root=work,datatype='anat',**config['subj_wildcards'],suffix='xfm.txt',from_='T2w',to='T1w',desc='rigid',type_='itk') container: config['singularity']['autotop'] group: 'subj' shell: @@ -99,10 +99,10 @@ rule reg_t2_to_t1: #now have t2 to t1 xfm, compose this with t1 to corobl xfm rule compose_t2_xfm_corobl: input: - t2_to_t1 = bids(root='work',datatype='anat',**config['subj_wildcards'],suffix='xfm.txt',from_='T2w',to='T1w',desc='rigid',type_='itk'), - t1_to_cor = bids(root='work',datatype='anat',**config['subj_wildcards'],suffix='xfm.txt',from_='T1w',to='corobl',desc='affine',type_='itk'), + t2_to_t1 = bids(root=work,datatype='anat',**config['subj_wildcards'],suffix='xfm.txt',from_='T2w',to='T1w',desc='rigid',type_='itk'), + t1_to_cor = bids(root=work,datatype='anat',**config['subj_wildcards'],suffix='xfm.txt',from_='T1w',to='corobl',desc='affine',type_='itk'), output: - t2_to_cor = bids(root='work',datatype='anat',**config['subj_wildcards'],suffix='xfm.txt',from_='T2w',to='corobl',desc='affine',type_='itk') + t2_to_cor = bids(root=work,datatype='anat',**config['subj_wildcards'],suffix='xfm.txt',from_='T2w',to='corobl',desc='affine',type_='itk') container: config['singularity']['autotop'] group: 'subj' shell: @@ -112,19 +112,19 @@ rule compose_t2_xfm_corobl: #if already have t2w in T1w space, then we don't need to use composed xfm: def get_xfm_to_corobl(): if config['skip_coreg']: - xfm = bids(root='work',datatype='anat',**config['subj_wildcards'],suffix='xfm.txt',from_='T1w',to='corobl',desc='affine',type_='itk') + xfm = bids(root=work,datatype='anat',**config['subj_wildcards'],suffix='xfm.txt',from_='T1w',to='corobl',desc='affine',type_='itk') else: - xfm = bids(root='work',datatype='anat',**config['subj_wildcards'],suffix='xfm.txt',from_='T2w',to='corobl',desc='affine',type_='itk'), + xfm = bids(root=work,datatype='anat',**config['subj_wildcards'],suffix='xfm.txt',from_='T2w',to='corobl',desc='affine',type_='itk'), return xfm #apply transform to get subject in corobl cropped space -- note that this could be marginally improved if we xfm each T2 to the cropped space in single resample (instead of avgT2w first) rule warp_t2_to_corobl_crop: input: - nii = bids(root='work',datatype='anat',**config['subj_wildcards'],suffix='T2w.nii.gz',desc='preproc'), + nii = bids(root=work,datatype='anat',**config['subj_wildcards'],suffix='T2w.nii.gz',desc='preproc'), xfm = get_xfm_to_corobl(), - ref = os.path.join(config['snakemake_dir'],config['template_files'][config['template']]['crop_ref']) + ref = os.path.join(workflow.basedir,'..',config['template_files'][config['template']]['crop_ref']) output: - nii = bids(root='work',datatype='anat',**config['subj_wildcards'],suffix='T2w.nii.gz',desc='cropped',space='corobl',hemi='{hemi}'), + nii = bids(root=work,datatype='anat',**config['subj_wildcards'],suffix='T2w.nii.gz',desc='cropped',space='corobl',hemi='{hemi}'), container: config['singularity']['autotop'] group: 'subj' shell: @@ -138,9 +138,9 @@ rule warp_t2_to_corobl_crop: rule lr_flip_t2: input: - nii = bids(root='work',datatype='anat',**config['subj_wildcards'],suffix='T2w.nii.gz',desc='cropped',space='corobl',hemi='{hemi}'), + nii = bids(root=work,datatype='anat',**config['subj_wildcards'],suffix='T2w.nii.gz',desc='cropped',space='corobl',hemi='{hemi}'), output: - nii = bids(root='work',datatype='anat',**config['subj_wildcards'],suffix='T2w.nii.gz',desc='cropped',space='corobl',hemi='{hemi,L}flip'), + nii = bids(root=work,datatype='anat',**config['subj_wildcards'],suffix='T2w.nii.gz',desc='cropped',space='corobl',hemi='{hemi,L}flip'), container: config['singularity']['autotop'] group: 'subj' shell: diff --git a/hippunfold/workflow/rules/resample_final_to_crop_t1.smk b/hippunfold/workflow/rules/resample_final_to_crop_t1.smk index c5c154f5..0d4fc7ef 100644 --- a/hippunfold/workflow/rules/resample_final_to_crop_t1.smk +++ b/hippunfold/workflow/rules/resample_final_to_crop_t1.smk @@ -2,12 +2,12 @@ rule create_native_crop_ref: """Create ref space for hires crop in native space TODO: expose the resampling factor and size as cmd line args""" input: - seg = bids(root='results',datatype='seg',suffix='dseg.nii.gz', desc='subfields',space='T1w',hemi='{hemi}', **config['subj_wildcards']) + seg = bids(root=root,datatype='seg',suffix='dseg.nii.gz', desc='subfields',space='T1w',hemi='{hemi}', **config['subj_wildcards']) params: resample = '400%', pad_to = '192x256x256vox' output: - ref = bids(root='work',datatype='seg',suffix='cropref.nii.gz', space='T1w',hemi='{hemi}', **config['subj_wildcards']) + ref = bids(root=work,datatype='seg',suffix='cropref.nii.gz', space='T1w',hemi='{hemi}', **config['subj_wildcards']) container: config['singularity']['autotop'] group: 'subj' shell: @@ -17,11 +17,11 @@ rule create_native_crop_ref: rule resample_unet_native_crop: input: - nii = bids(root='work',datatype='seg',**config['subj_wildcards'],suffix='dseg.nii.gz',desc='nnunet',space='corobl',hemi='{hemi}'), - xfm = bids(root='work',datatype='anat',**config['subj_wildcards'],suffix='xfm.txt',from_='T1w',to='corobl',desc='affine',type_='itk'), - ref = bids(root='work',datatype='seg',suffix='cropref.nii.gz', space='T1w',hemi='{hemi}', **config['subj_wildcards']) + nii = bids(root=work,datatype='seg',**config['subj_wildcards'],suffix='dseg.nii.gz',desc='nnunet',space='corobl',hemi='{hemi}'), + xfm = bids(root=work,datatype='anat',**config['subj_wildcards'],suffix='xfm.txt',from_='T1w',to='corobl',desc='affine',type_='itk'), + ref = bids(root=work,datatype='seg',suffix='cropref.nii.gz', space='T1w',hemi='{hemi}', **config['subj_wildcards']) output: - nii = bids(root='work',datatype='seg',suffix='dseg.nii.gz', desc='unet',space='cropT1w',hemi='{hemi}', **config['subj_wildcards']) + nii = bids(root=work,datatype='seg',suffix='dseg.nii.gz', desc='unet',space='cropT1w',hemi='{hemi}', **config['subj_wildcards']) container: config['singularity']['autotop'] group: 'subj' shell: @@ -31,11 +31,11 @@ rule resample_unet_native_crop: rule resample_postproc_native_crop: input: - nii = bids(root='work',datatype='seg',**config['subj_wildcards'],suffix='dseg.nii.gz',desc='postproc',space='corobl',hemi='{hemi}'), - xfm = bids(root='work',datatype='anat',**config['subj_wildcards'],suffix='xfm.txt',from_='T1w',to='corobl',desc='affine',type_='itk'), - ref = bids(root='work',datatype='seg',suffix='cropref.nii.gz', space='T1w',hemi='{hemi}', **config['subj_wildcards']) + nii = bids(root=work,datatype='seg',**config['subj_wildcards'],suffix='dseg.nii.gz',desc='postproc',space='corobl',hemi='{hemi}'), + xfm = bids(root=work,datatype='anat',**config['subj_wildcards'],suffix='xfm.txt',from_='T1w',to='corobl',desc='affine',type_='itk'), + ref = bids(root=work,datatype='seg',suffix='cropref.nii.gz', space='T1w',hemi='{hemi}', **config['subj_wildcards']) output: - nii = bids(root='work',datatype='seg',suffix='dseg.nii.gz', desc='postproc',space='cropT1w',hemi='{hemi}', **config['subj_wildcards']) + nii = bids(root=work,datatype='seg',suffix='dseg.nii.gz', desc='postproc',space='cropT1w',hemi='{hemi}', **config['subj_wildcards']) container: config['singularity']['autotop'] group: 'subj' shell: @@ -45,11 +45,11 @@ rule resample_postproc_native_crop: rule resample_subfields_native_crop: input: - nii = bids(root='work',datatype='seg',desc='subfields',suffix='dseg.nii.gz', space='corobl',hemi='{hemi}', **config['subj_wildcards']), - xfm = bids(root='work',datatype='anat',**config['subj_wildcards'],suffix='xfm.txt',from_='T1w',to='corobl',desc='affine',type_='itk'), - ref = bids(root='work',datatype='seg',suffix='cropref.nii.gz', space='T1w',hemi='{hemi}', **config['subj_wildcards']) + nii = bids(root=work,datatype='seg',desc='subfields',suffix='dseg.nii.gz', space='corobl',hemi='{hemi}', **config['subj_wildcards']), + xfm = bids(root=work,datatype='anat',**config['subj_wildcards'],suffix='xfm.txt',from_='T1w',to='corobl',desc='affine',type_='itk'), + ref = bids(root=work,datatype='seg',suffix='cropref.nii.gz', space='T1w',hemi='{hemi}', **config['subj_wildcards']) output: - nii = bids(root='results',datatype='seg',suffix='dseg.nii.gz', desc='subfields',space='cropT1w',hemi='{hemi}', **config['subj_wildcards']) + nii = bids(root=root,datatype='seg',suffix='dseg.nii.gz', desc='subfields',space='cropT1w',hemi='{hemi}', **config['subj_wildcards']) container: config['singularity']['autotop'] group: 'subj' shell: @@ -59,11 +59,11 @@ rule resample_subfields_native_crop: rule resample_coords_native_crop: input: - nii = bids(root='work',datatype='seg',dir='{dir}',label='{autotop}',suffix='coords.nii.gz', desc='{desc}', space='corobl',hemi='{hemi}', **config['subj_wildcards']), - xfm = bids(root='work',datatype='anat',**config['subj_wildcards'],suffix='xfm.txt',from_='T1w',to='corobl',desc='affine',type_='itk'), - ref = bids(root='work',datatype='seg',suffix='cropref.nii.gz', space='T1w',hemi='{hemi}', **config['subj_wildcards']) + nii = bids(root=work,datatype='seg',dir='{dir}',label='{autotop}',suffix='coords.nii.gz', desc='{desc}', space='corobl',hemi='{hemi}', **config['subj_wildcards']), + xfm = bids(root=work,datatype='anat',**config['subj_wildcards'],suffix='xfm.txt',from_='T1w',to='corobl',desc='affine',type_='itk'), + ref = bids(root=work,datatype='seg',suffix='cropref.nii.gz', space='T1w',hemi='{hemi}', **config['subj_wildcards']) output: - nii = bids(root='results',datatype='seg',dir='{dir}',suffix='coords.nii.gz', desc='{desc}',space='cropT1w',hemi='{hemi}', label='{autotop}', **config['subj_wildcards']) + nii = bids(root=root,datatype='seg',dir='{dir}',suffix='coords.nii.gz', desc='{desc}',space='cropT1w',hemi='{hemi}', label='{autotop}', **config['subj_wildcards']) container: config['singularity']['autotop'] group: 'subj' shell: @@ -72,10 +72,10 @@ rule resample_coords_native_crop: rule resample_t1_to_crop: input: - nii = bids(root='results',datatype='anat',**config['subj_wildcards'],desc='preproc',suffix='T1w.nii.gz'), - ref = bids(root='work',datatype='seg',suffix='cropref.nii.gz', space='T1w',hemi='{hemi}', **config['subj_wildcards']) + nii = bids(root=root,datatype='anat',**config['subj_wildcards'],desc='preproc',suffix='T1w.nii.gz'), + ref = bids(root=work,datatype='seg',suffix='cropref.nii.gz', space='T1w',hemi='{hemi}', **config['subj_wildcards']) output: - nii = bids(root='results',datatype='seg',desc='preproc',suffix='T1w.nii.gz', space='cropT1w',hemi='{hemi}', **config['subj_wildcards']) + nii = bids(root=root,datatype='seg',desc='preproc',suffix='T1w.nii.gz', space='cropT1w',hemi='{hemi}', **config['subj_wildcards']) container: config['singularity']['autotop'] group: 'subj' shell: @@ -86,19 +86,19 @@ def get_xfm_t2_to_t1(): if config['skip_coreg']: xfm = [] else: - xfm = bids(root='work',datatype='anat',**config['subj_wildcards'],suffix='xfm.txt',from_='T2w',to='T1w',desc='rigid',type_='itk') + xfm = bids(root=work,datatype='anat',**config['subj_wildcards'],suffix='xfm.txt',from_='T2w',to='T1w',desc='rigid',type_='itk') return xfm rule resample_t2_to_crop: input: - nii = bids(root='work',datatype='anat',**config['subj_wildcards'],suffix='T2w.nii.gz',desc='preproc'), - ref = bids(root='work',datatype='seg',suffix='cropref.nii.gz', space='T1w',hemi='{hemi}', **config['subj_wildcards']), + nii = bids(root=work,datatype='anat',**config['subj_wildcards'],suffix='T2w.nii.gz',desc='preproc'), + ref = bids(root=work,datatype='seg',suffix='cropref.nii.gz', space='T1w',hemi='{hemi}', **config['subj_wildcards']), xfm = get_xfm_t2_to_t1() params: xfm_opt = lambda wildcards, input: '' if len(input.xfm) == 0 else f'-t {input.xfm}' output: - nii = bids(root='results',datatype='seg',desc='preproc',suffix='T2w.nii.gz', space='cropT1w',hemi='{hemi}', **config['subj_wildcards']) + nii = bids(root=root,datatype='seg',desc='preproc',suffix='T2w.nii.gz', space='cropT1w',hemi='{hemi}', **config['subj_wildcards']) container: config['singularity']['autotop'] group: 'subj' shell: diff --git a/hippunfold/workflow/rules/shape_inject.smk b/hippunfold/workflow/rules/shape_inject.smk index 8a6b2ffc..db2d6f6e 100644 --- a/hippunfold/workflow/rules/shape_inject.smk +++ b/hippunfold/workflow/rules/shape_inject.smk @@ -2,13 +2,13 @@ def get_input_splitseg_for_shape_inject(wildcards): if config['modality'] == 'cropseg': - seg = bids(root='work',datatype='anat',**config['subj_wildcards'],suffix='dsegsplit',desc='cropped',space='corobl',hemi='{hemi}').format(**wildcards) + seg = bids(root=work,datatype='anat',**config['subj_wildcards'],suffix='dsegsplit',desc='cropped',space='corobl',hemi='{hemi}').format(**wildcards) elif get_modality_key(config['modality']) == 'seg': modality_suffix = get_modality_suffix(config['modality']) - seg = bids(root='work',datatype='anat',**config['subj_wildcards'],suffix='dsegsplit',desc='cropped',space='corobl',hemi='{hemi}',from_='{modality_suffix}').format(**wildcards, modality_suffix=modality_suffix) + seg = bids(root=work,datatype='anat',**config['subj_wildcards'],suffix='dsegsplit',desc='cropped',space='corobl',hemi='{hemi}',from_='{modality_suffix}').format(**wildcards, modality_suffix=modality_suffix) else: - seg = bids(root='work',datatype='seg',**config['subj_wildcards'],suffix='dsegsplit',desc='nnunet',space='corobl',hemi='{hemi}').format(**wildcards) + seg = bids(root=work,datatype='seg',**config['subj_wildcards'],suffix='dsegsplit',desc='nnunet',space='corobl',hemi='{hemi}').format(**wildcards) return seg rule prep_segs_for_greedy: @@ -25,9 +25,9 @@ rule prep_segs_for_greedy: rule import_template_shape: input: - template_seg = os.path.join(config['snakemake_dir'],'resources','tpl-upenn','tpl-upenn_desc-hipptissue_dseg.nii.gz'), + template_seg = os.path.join(workflow.basedir,'..','resources','tpl-upenn','tpl-upenn_desc-hipptissue_dseg.nii.gz'), output: - template_seg = bids(root='work',datatype='anat',space='template',**config['subj_wildcards'],desc='hipptissue',suffix='dseg.nii.gz'), + template_seg = bids(root=work,datatype='anat',space='template',**config['subj_wildcards'],desc='hipptissue',suffix='dseg.nii.gz'), group: 'subj' shell: 'cp {input} {output}' @@ -74,7 +74,7 @@ def get_inject_scaling_opt(wildcards): rule template_shape_reg: input: - template_seg = bids(root='work',datatype='anat',space='template',**config['subj_wildcards'],desc='hipptissue',suffix='dsegsplit'), + template_seg = bids(root=work,datatype='anat',space='template',**config['subj_wildcards'],desc='hipptissue',suffix='dsegsplit'), subject_seg = get_input_splitseg_for_shape_inject params: general_opts = '-d 3 -m SSD', @@ -82,8 +82,8 @@ rule template_shape_reg: greedy_opts = get_inject_scaling_opt, img_pairs = get_image_pairs, output: - matrix = bids(root='work',**config['subj_wildcards'],suffix='xfm.txt',datatype='seg',desc='moments',from_='template',to='subject',space='corobl',type_='ras',hemi='{hemi,Lflip|R}'), - warp = bids(root='work',**config['subj_wildcards'],suffix='xfm.nii.gz',datatype='seg',desc='greedy',from_='template',to='subject',space='corobl',hemi='{hemi,Lflip|R}'), + matrix = bids(root=work,**config['subj_wildcards'],suffix='xfm.txt',datatype='seg',desc='moments',from_='template',to='subject',space='corobl',type_='ras',hemi='{hemi,Lflip|R}'), + warp = bids(root=work,**config['subj_wildcards'],suffix='xfm.nii.gz',datatype='seg',desc='greedy',from_='template',to='subject',space='corobl',hemi='{hemi,Lflip|R}'), group: 'subj' container: config['singularity']['autotop'] threads: 8 @@ -95,14 +95,14 @@ rule template_shape_reg: rule template_shape_inject: input: - template_seg = bids(root='work',datatype='anat',space='template',**config['subj_wildcards'],desc='hipptissue',suffix='dseg.nii.gz'), + template_seg = bids(root=work,datatype='anat',space='template',**config['subj_wildcards'],desc='hipptissue',suffix='dseg.nii.gz'), subject_seg = get_input_for_shape_inject, - matrix = bids(root='work',**config['subj_wildcards'],suffix='xfm.txt',datatype='seg',desc='moments',from_='template',to='subject',space='corobl',type_='ras',hemi='{hemi}'), - warp = bids(root='work',**config['subj_wildcards'],suffix='xfm.nii.gz',datatype='seg',desc='greedy',from_='template',to='subject',space='corobl',hemi='{hemi}'), + matrix = bids(root=work,**config['subj_wildcards'],suffix='xfm.txt',datatype='seg',desc='moments',from_='template',to='subject',space='corobl',type_='ras',hemi='{hemi}'), + warp = bids(root=work,**config['subj_wildcards'],suffix='xfm.nii.gz',datatype='seg',desc='greedy',from_='template',to='subject',space='corobl',hemi='{hemi}'), params: interp_opt = '-ri LABEL 0.2vox' output: - inject_seg = bids(root='work',datatype='seg',**config['subj_wildcards'],suffix='dseg.nii.gz',desc='inject',space='corobl',hemi='{hemi,Lflip|R}'), + inject_seg = bids(root=work,datatype='seg',**config['subj_wildcards'],suffix='dseg.nii.gz',desc='inject',space='corobl',hemi='{hemi,Lflip|R}'), group: 'subj' container: config['singularity']['autotop'] threads: 8 @@ -111,14 +111,14 @@ rule template_shape_inject: rule inject_init_laplace_coords: input: - coords = os.path.join(config['snakemake_dir'],'resources','tpl-upenn','tpl-upenn_dir-{dir}_label-{autotop}_coords.nii.gz'), + coords = os.path.join(workflow.basedir,'..','resources','tpl-upenn','tpl-upenn_dir-{dir}_label-{autotop}_coords.nii.gz'), subject_seg = get_input_for_shape_inject, - matrix = bids(root='work',**config['subj_wildcards'],suffix='xfm.txt',datatype='seg',desc='moments',from_='template',to='subject',space='corobl',type_='ras',hemi='{hemi}'), - warp = bids(root='work',**config['subj_wildcards'],suffix='xfm.nii.gz',datatype='seg',desc='greedy',from_='template',to='subject',space='corobl',hemi='{hemi}'), + matrix = bids(root=work,**config['subj_wildcards'],suffix='xfm.txt',datatype='seg',desc='moments',from_='template',to='subject',space='corobl',type_='ras',hemi='{hemi}'), + warp = bids(root=work,**config['subj_wildcards'],suffix='xfm.nii.gz',datatype='seg',desc='greedy',from_='template',to='subject',space='corobl',hemi='{hemi}'), params: interp_opt = '-ri NN' output: - init_coords = bids(root='work',datatype='seg',**config['subj_wildcards'],dir='{dir}',label='{autotop}',suffix='coords.nii.gz',desc='init',space='corobl',hemi='{hemi}'), + init_coords = bids(root=work,datatype='seg',**config['subj_wildcards'],dir='{dir}',label='{autotop}',suffix='coords.nii.gz',desc='init',space='corobl',hemi='{hemi}'), group: 'subj' container: config['singularity']['autotop'] threads: 8 @@ -129,12 +129,12 @@ rule inject_init_laplace_coords: rule reinsert_subject_labels: input: - inject_seg = bids(root='work',datatype='seg',**config['subj_wildcards'],suffix='dseg.nii.gz',desc='inject',space='corobl',hemi='{hemi}'), + inject_seg = bids(root=work,datatype='seg',**config['subj_wildcards'],suffix='dseg.nii.gz',desc='inject',space='corobl',hemi='{hemi}'), subject_seg = get_input_for_shape_inject, params: labels = ' '.join(str(label) for label in config['shape_inject']['labels_reinsert']), output: - postproc_seg = bids(root='work',datatype='seg',**config['subj_wildcards'],suffix='dseg.nii.gz',desc='postproc',space='corobl',hemi='{hemi,Lflip|R}'), + postproc_seg = bids(root=work,datatype='seg',**config['subj_wildcards'],suffix='dseg.nii.gz',desc='postproc',space='corobl',hemi='{hemi,Lflip|R}'), group: 'subj' container: config['singularity']['autotop'] shell: @@ -143,9 +143,9 @@ rule reinsert_subject_labels: rule unflip_postproc: input: - nii = bids(root='work',datatype='seg',suffix='dseg.nii.gz', desc='postproc',space='corobl',hemi='{hemi}flip', **config['subj_wildcards']), + nii = bids(root=work,datatype='seg',suffix='dseg.nii.gz', desc='postproc',space='corobl',hemi='{hemi}flip', **config['subj_wildcards']), output: - nii = bids(root='work',datatype='seg',suffix='dseg.nii.gz', desc='postproc',space='corobl',hemi='{hemi,L}', **config['subj_wildcards']), + nii = bids(root=work,datatype='seg',suffix='dseg.nii.gz', desc='postproc',space='corobl',hemi='{hemi,L}', **config['subj_wildcards']), container: config['singularity']['autotop'] group: 'subj' shell: 'c3d {input} -flip x {output}' diff --git a/hippunfold/workflow/rules/subfields.smk b/hippunfold/workflow/rules/subfields.smk index a8af66e2..65c11f62 100644 --- a/hippunfold/workflow/rules/subfields.smk +++ b/hippunfold/workflow/rules/subfields.smk @@ -2,13 +2,13 @@ rule label_subfields_from_vol_coords_corobl: """ Label subfields using the volumetric coords and bigbrain labels""" input: - subfields_mat = os.path.join(config['snakemake_dir'],'resources','bigbrain','BigBrain_ManualSubfieldsUnfolded.mat'), - nii_ap = bids(root='work',datatype='seg',dir='AP',label='hipp',suffix='coords.nii.gz', desc='laplace',space='corobl',hemi='{hemi}', **config['subj_wildcards']), - nii_pd = bids(root='work',datatype='seg',dir='PD',label='hipp',suffix='coords.nii.gz', desc='laplace',space='corobl',hemi='{hemi}', **config['subj_wildcards']) + subfields_mat = os.path.join(workflow.basedir,'..','resources','bigbrain','BigBrain_ManualSubfieldsUnfolded.mat'), + nii_ap = bids(root=work,datatype='seg',dir='AP',label='hipp',suffix='coords.nii.gz', desc='laplace',space='corobl',hemi='{hemi}', **config['subj_wildcards']), + nii_pd = bids(root=work,datatype='seg',dir='PD',label='hipp',suffix='coords.nii.gz', desc='laplace',space='corobl',hemi='{hemi}', **config['subj_wildcards']) params: mat_name = 'subfields_avg' #avg bigbrain over L/R hemis output: - nii_label = bids(root='work',datatype='seg',desc='subfieldsnotissue',suffix='dseg.nii.gz', space='corobl',hemi='{hemi}', **config['subj_wildcards']) + nii_label = bids(root=work,datatype='seg',desc='subfieldsnotissue',suffix='dseg.nii.gz', space='corobl',hemi='{hemi}', **config['subj_wildcards']) group: 'subj' script: '../scripts/label_subfields_from_vol_coords.py' @@ -27,13 +27,13 @@ rule combine_tissue_subfield_labels_corobl: """ input: tissue = get_labels_for_laplace, - subfields = bids(root='work',datatype='seg',desc='subfieldsnotissue',suffix='dseg.nii.gz', space='corobl',hemi='{hemi}', **config['subj_wildcards']) + subfields = bids(root=work,datatype='seg',desc='subfieldsnotissue',suffix='dseg.nii.gz', space='corobl',hemi='{hemi}', **config['subj_wildcards']) params: remap_dg = '-threshold 8 8 6 0 -popas dg', remap_srlm = '-threshold 2 2 7 0 -popas srlm', remap_cyst = '-threshold 7 7 8 0 -popas cyst', output: - combined = bids(root='work',datatype='seg',desc='subfields',suffix='dseg.nii.gz', space='corobl',hemi='{hemi}', **config['subj_wildcards']) + combined = bids(root=work,datatype='seg',desc='subfields',suffix='dseg.nii.gz', space='corobl',hemi='{hemi}', **config['subj_wildcards']) container: config['singularity']['autotop'] group: 'subj' shell: @@ -45,11 +45,11 @@ rule combine_tissue_subfield_labels_corobl: rule resample_subfields_to_T1w: """Resampling to T1w native space""" input: - nii = bids(root='work',datatype='seg',desc='subfields',suffix='dseg.nii.gz', space='corobl',hemi='{hemi}', **config['subj_wildcards']), - xfm = bids(root='work',datatype='anat',**config['subj_wildcards'],suffix='xfm.txt',from_='T1w',to='corobl',desc='affine',type_='itk'), - ref = bids(root='work',datatype='anat',**config['subj_wildcards'],suffix='T1w.nii.gz') + nii = bids(root=work,datatype='seg',desc='subfields',suffix='dseg.nii.gz', space='corobl',hemi='{hemi}', **config['subj_wildcards']), + xfm = bids(root=work,datatype='anat',**config['subj_wildcards'],suffix='xfm.txt',from_='T1w',to='corobl',desc='affine',type_='itk'), + ref = bids(root=work,datatype='anat',**config['subj_wildcards'],suffix='T1w.nii.gz') output: - nii = bids(root='results',datatype='seg',suffix='dseg.nii.gz', desc='subfields',space='T1w',hemi='{hemi}', **config['subj_wildcards']) + nii = bids(root=root,datatype='seg',suffix='dseg.nii.gz', desc='subfields',space='T1w',hemi='{hemi}', **config['subj_wildcards']) container: config['singularity']['autotop'] group: 'subj' shell: @@ -60,11 +60,11 @@ rule resample_subfields_to_T1w: rule resample_postproc_to_T1w: """Resample post-processed tissue seg to T1w""" input: - nii = bids(root='work',datatype='seg',**config['subj_wildcards'],suffix='dseg.nii.gz',desc='postproc',space='corobl',hemi='{hemi}'), - xfm = bids(root='work',datatype='anat',**config['subj_wildcards'],suffix='xfm.txt',from_='T1w',to='corobl',desc='affine',type_='itk'), - ref = bids(root='work',datatype='anat',**config['subj_wildcards'],suffix='T1w.nii.gz') + nii = bids(root=work,datatype='seg',**config['subj_wildcards'],suffix='dseg.nii.gz',desc='postproc',space='corobl',hemi='{hemi}'), + xfm = bids(root=work,datatype='anat',**config['subj_wildcards'],suffix='xfm.txt',from_='T1w',to='corobl',desc='affine',type_='itk'), + ref = bids(root=work,datatype='anat',**config['subj_wildcards'],suffix='T1w.nii.gz') output: - nii = bids(root='work',datatype='seg',suffix='dseg.nii.gz', desc='postproc',space='T1w',hemi='{hemi}', **config['subj_wildcards']) + nii = bids(root=work,datatype='seg',suffix='dseg.nii.gz', desc='postproc',space='T1w',hemi='{hemi}', **config['subj_wildcards']) container: config['singularity']['autotop'] group: 'subj' shell: @@ -74,11 +74,11 @@ rule resample_postproc_to_T1w: rule resample_unet_to_T1w: """Resample unet tissue seg to T1w""" input: - nii = bids(root='work',datatype='seg',**config['subj_wildcards'],suffix='dseg.nii.gz',desc='nnunet',space='corobl',hemi='{hemi}'), - xfm = bids(root='work',datatype='anat',**config['subj_wildcards'],suffix='xfm.txt',from_='T1w',to='corobl',desc='affine',type_='itk'), - ref = bids(root='work',datatype='anat',**config['subj_wildcards'],suffix='T1w.nii.gz') + nii = bids(root=work,datatype='seg',**config['subj_wildcards'],suffix='dseg.nii.gz',desc='nnunet',space='corobl',hemi='{hemi}'), + xfm = bids(root=work,datatype='anat',**config['subj_wildcards'],suffix='xfm.txt',from_='T1w',to='corobl',desc='affine',type_='itk'), + ref = bids(root=work,datatype='anat',**config['subj_wildcards'],suffix='T1w.nii.gz') output: - nii = bids(root='work',datatype='seg',suffix='dseg.nii.gz', desc='unet',space='T1w',hemi='{hemi}', **config['subj_wildcards']) + nii = bids(root=work,datatype='seg',suffix='dseg.nii.gz', desc='unet',space='T1w',hemi='{hemi}', **config['subj_wildcards']) container: config['singularity']['autotop'] group: 'subj' shell: @@ -89,21 +89,21 @@ rule resample_unet_to_T1w: rule get_subfield_vols_subj: """Export segmentation volume for a subject to TSV""" input: - segs = expand(bids(root='results',**config['subj_wildcards'],datatype='seg',hemi='{hemi}',space='cropT1w',desc='subfields',suffix='dseg.nii.gz'), + segs = expand(bids(root=root,**config['subj_wildcards'],datatype='seg',hemi='{hemi}',space='cropT1w',desc='subfields',suffix='dseg.nii.gz'), hemi=config['hemi'], allow_missing=True), - lookup_tsv = os.path.join(config['snakemake_dir'],'resources','desc-subfields_dseg.tsv') + lookup_tsv = os.path.join(workflow.basedir,'..','resources','desc-subfields_dseg.tsv') group: 'subj' output: - tsv = bids(root='results',datatype='seg',desc='subfields',suffix='volumes.tsv',**config['subj_wildcards']), + tsv = bids(root=root,datatype='seg',desc='subfields',suffix='volumes.tsv',**config['subj_wildcards']), script: '../scripts/gen_volume_tsv.py' rule plot_subj_subfields: input: - tsv = bids(root='results',datatype='seg',desc='subfields',suffix='volumes.tsv',**config['subj_wildcards']) + tsv = bids(root=root,datatype='seg',desc='subfields',suffix='volumes.tsv',**config['subj_wildcards']) output: - png = report(bids(root='results',datatype='qc',desc='subfields',suffix='volumes.png',**config['subj_wildcards']), + png = report(bids(root=root,datatype='qc',desc='subfields',suffix='volumes.png',**config['subj_wildcards']), caption='../report/subj_volume_plot.rst', category='Subfield Volumes') group: 'subj' @@ -118,14 +118,14 @@ def get_bg_img_for_subfield_qc(wildcards): else: bg_modality = config['modality'] - return bids(root='results',datatype='seg',desc='preproc',suffix=f'{bg_modality}.nii.gz', space='cropT1w',hemi='{hemi}', **config['subj_wildcards']) + return bids(root=root,datatype='seg',desc='preproc',suffix=f'{bg_modality}.nii.gz', space='cropT1w',hemi='{hemi}', **config['subj_wildcards']) rule qc_subfield: input: img = get_bg_img_for_subfield_qc, - seg = bids(root='results',datatype='seg',suffix='dseg.nii.gz', desc='subfields',space='cropT1w',hemi='{hemi}', **config['subj_wildcards']), + seg = bids(root=root,datatype='seg',suffix='dseg.nii.gz', desc='subfields',space='cropT1w',hemi='{hemi}', **config['subj_wildcards']), output: - png = report(bids(root='results',datatype='qc',suffix='dseg.png', desc='subfields',space='cropT1w',hemi='{hemi}', **config['subj_wildcards']), + png = report(bids(root=root,datatype='qc',suffix='dseg.png', desc='subfields',space='cropT1w',hemi='{hemi}', **config['subj_wildcards']), caption='../report/subfield_qc.rst', category='Segmentation QC') group: 'subj' @@ -134,9 +134,9 @@ rule qc_subfield: rule qc_subfield_surf: input: - surf = bids(root='results',datatype='surf',suffix='midthickness.surf.gii',den='{density}',space='T1w',hemi='{hemi}', label='{autotop}', **config['subj_wildcards']), + surf = bids(root=root,datatype='surf',suffix='midthickness.surf.gii',den='{density}',space='T1w',hemi='{hemi}', label='{autotop}', **config['subj_wildcards']), output: - png = report(bids(root='results',datatype='qc',suffix='midthickness.surf.png', den='{density}',desc='subfields',space='cropT1w',hemi='{hemi}', label='{autotop}', **config['subj_wildcards']), + png = report(bids(root=root,datatype='qc',suffix='midthickness.surf.png', den='{density}',desc='subfields',space='cropT1w',hemi='{hemi}', label='{autotop}', **config['subj_wildcards']), caption='../report/subfield_qc.rst', category='Segmentation QC') group: 'subj' @@ -146,12 +146,12 @@ rule qc_subfield_surf: rule concat_subj_vols_tsv: """Concatenate all subject tsv files into a single tsv""" input: - tsv = lambda wildcards: expand(bids(root='results',datatype='seg',desc='subfields',suffix='volumes.tsv',**config['subj_wildcards']), + tsv = lambda wildcards: expand(bids(root=root,datatype='seg',desc='subfields',suffix='volumes.tsv',**config['subj_wildcards']), subject=config['input_lists'][get_modality_key(config['modality'])]['subject'], session=config['sessions']) group: 'aggregate' output: - tsv = bids(root='results',prefix='group',desc='subfields',suffix='volumes.tsv'), + tsv = bids(root=root,prefix='group',desc='subfields',suffix='volumes.tsv'), run: import pandas as pd pd.concat([pd.read_table(in_tsv) for in_tsv in input ]).to_csv(output.tsv,sep='\t',index=False) @@ -160,10 +160,10 @@ rule concat_subj_vols_tsv: rule resample_subfields_to_unfold: """Resampling to unfold space""" input: - nii = bids(root='work',datatype='seg',desc='subfields',suffix='dseg.nii.gz', space='corobl',hemi='{hemi}', **config['subj_wildcards']), - xfm = bids(root='work',datatype='seg',**config['subj_wildcards'],suffix='xfm.nii.gz',hemi='{hemi}',from_='corobl',to='unfold',mode='image') + nii = bids(root=work,datatype='seg',desc='subfields',suffix='dseg.nii.gz', space='corobl',hemi='{hemi}', **config['subj_wildcards']), + xfm = bids(root=work,datatype='seg',**config['subj_wildcards'],suffix='xfm.nii.gz',hemi='{hemi}',from_='corobl',to='unfold',mode='image') output: - nii = bids(root='results',datatype='seg',suffix='dseg.nii.gz', desc='subfields',space='unfold',hemi='{hemi}', **config['subj_wildcards']) + nii = bids(root=root,datatype='seg',suffix='dseg.nii.gz', desc='subfields',space='unfold',hemi='{hemi}', **config['subj_wildcards']) container: config['singularity']['autotop'] group: 'subj' shell: diff --git a/hippunfold/workflow/rules/warps.smk b/hippunfold/workflow/rules/warps.smk index 7472f1c6..42703ee4 100644 --- a/hippunfold/workflow/rules/warps.smk +++ b/hippunfold/workflow/rules/warps.smk @@ -1,8 +1,8 @@ rule create_native_coord_ref: input: - coords_ap = bids(root='work',datatype='seg',dir='AP',label='{autotop}',suffix='coords.nii.gz',desc='laplace',space='corobl',hemi='{hemi}', **config['subj_wildcards']), + coords_ap = bids(root=work,datatype='seg',dir='AP',label='{autotop}',suffix='coords.nii.gz',desc='laplace',space='corobl',hemi='{hemi}', **config['subj_wildcards']), output: - nii = bids(root='work',datatype='seg',space='corobl',hemi='{hemi}',label='{autotop}',suffix='refcoords.nii.gz',**config['subj_wildcards']) + nii = bids(root=work,datatype='seg',space='corobl',hemi='{hemi}',label='{autotop}',suffix='refcoords.nii.gz',**config['subj_wildcards']) group: 'subj' container: config['singularity']['autotop'] shell: @@ -16,7 +16,7 @@ rule create_unfold_ref: origin = lambda wildcards: 'x'.join(config['unfold_vol_ref'][wildcards.autotop]['origin']), orient = lambda wildcards: config['unfold_vol_ref'][wildcards.autotop]['orient'] output: - nii = bids(root='work',space='unfold',label='{autotop}',datatype='seg',suffix='refvol.nii.gz',**config['subj_wildcards']) + nii = bids(root=work,space='unfold',label='{autotop}',datatype='seg',suffix='refvol.nii.gz',**config['subj_wildcards']) group: 'subj' container: config['singularity']['autotop'] shell: @@ -25,9 +25,9 @@ rule create_unfold_ref: #this was unfold_phys_coords.nii in matlab implementation rule create_unfold_coord_map: input: - nii = bids(root='work',space='unfold',label='{autotop}',datatype='seg',suffix='refvol.nii.gz',**config['subj_wildcards']) + nii = bids(root=work,space='unfold',label='{autotop}',datatype='seg',suffix='refvol.nii.gz',**config['subj_wildcards']) output: - nii = bids(root='work',datatype='seg',space='unfold',label='{autotop}',suffix='refcoords.nii.gz',**config['subj_wildcards']) + nii = bids(root=work,datatype='seg',space='unfold',label='{autotop}',suffix='refcoords.nii.gz',**config['subj_wildcards']) group: 'subj' container: config['singularity']['autotop'] shell: @@ -36,28 +36,28 @@ rule create_unfold_coord_map: def get_laminar_coords(wildcards): if 'laplace' in config['laminar_coords_method']: - coords_io = bids(root='work',datatype='seg',dir='IO',label='hipp',suffix='coords.nii.gz',desc='laplace',space='corobl',hemi='{hemi}', **config['subj_wildcards']) + coords_io = bids(root=work,datatype='seg',dir='IO',label='hipp',suffix='coords.nii.gz',desc='laplace',space='corobl',hemi='{hemi}', **config['subj_wildcards']) elif 'equivolume' in config['laminar_coords_method']: - coords_io = bids(root='work',datatype='seg',dir='IO',label='hipp',suffix='coords.nii.gz',desc='equivol',space='corobl',hemi='{hemi}', **config['subj_wildcards']) + coords_io = bids(root=work,datatype='seg',dir='IO',label='hipp',suffix='coords.nii.gz',desc='equivol',space='corobl',hemi='{hemi}', **config['subj_wildcards']) return coords_io rule create_warps_hipp: input: - unfold_ref_nii = bids(root='work',space='unfold',label='hipp',datatype='seg',suffix='refvol.nii.gz',**config['subj_wildcards']), - unfold_phys_coords_nii = bids(root='work',space='unfold',label='hipp',datatype='seg',suffix='refcoords.nii.gz',**config['subj_wildcards']), - coords_ap = bids(root='work',datatype='seg',dir='AP',label='hipp',suffix='coords.nii.gz',desc='laplace',space='corobl',hemi='{hemi}', **config['subj_wildcards']), - coords_pd = bids(root='work',datatype='seg',dir='PD',label='hipp',suffix='coords.nii.gz',desc='laplace',space='corobl',hemi='{hemi}', **config['subj_wildcards']), + unfold_ref_nii = bids(root=work,space='unfold',label='hipp',datatype='seg',suffix='refvol.nii.gz',**config['subj_wildcards']), + unfold_phys_coords_nii = bids(root=work,space='unfold',label='hipp',datatype='seg',suffix='refcoords.nii.gz',**config['subj_wildcards']), + coords_ap = bids(root=work,datatype='seg',dir='AP',label='hipp',suffix='coords.nii.gz',desc='laplace',space='corobl',hemi='{hemi}', **config['subj_wildcards']), + coords_pd = bids(root=work,datatype='seg',dir='PD',label='hipp',suffix='coords.nii.gz',desc='laplace',space='corobl',hemi='{hemi}', **config['subj_wildcards']), coords_io = get_laminar_coords, - native_ref_coords_nii = bids(root='work',datatype='seg',space='corobl',hemi='{hemi}',label='hipp',suffix='refcoords.nii.gz',**config['subj_wildcards']) + native_ref_coords_nii = bids(root=work,datatype='seg',space='corobl',hemi='{hemi}',label='hipp',suffix='refcoords.nii.gz',**config['subj_wildcards']) params: interp_method = 'linear' resources: mem_mb = 16000 output: - warp_unfold2native = bids(root='work',datatype='seg',**config['subj_wildcards'],label='hipp',suffix='xfm.nii.gz',hemi='{hemi,Lflip|R}',from_='unfold',to='corobl',mode='surface'), - warp_native2unfold = bids(root='work',datatype='seg',**config['subj_wildcards'],label='hipp',suffix='xfm.nii.gz',hemi='{hemi,Lflip|R}',from_='corobl',to='unfold',mode='surface'), - warpitk_unfold2native = bids(root='work',datatype='seg',**config['subj_wildcards'],label='hipp',suffix='xfm.nii.gz',hemi='{hemi,Lflip|R}',from_='unfold',to='corobl',mode='image'), - warpitk_native2unfold = bids(root='work',datatype='seg',**config['subj_wildcards'],label='hipp',suffix='xfm.nii.gz',hemi='{hemi,Lflip|R}',from_='corobl',to='unfold',mode='image') + warp_unfold2native = bids(root=work,datatype='seg',**config['subj_wildcards'],label='hipp',suffix='xfm.nii.gz',hemi='{hemi,Lflip|R}',from_='unfold',to='corobl',mode='surface'), + warp_native2unfold = bids(root=work,datatype='seg',**config['subj_wildcards'],label='hipp',suffix='xfm.nii.gz',hemi='{hemi,Lflip|R}',from_='corobl',to='unfold',mode='surface'), + warpitk_unfold2native = bids(root=work,datatype='seg',**config['subj_wildcards'],label='hipp',suffix='xfm.nii.gz',hemi='{hemi,Lflip|R}',from_='unfold',to='corobl',mode='image'), + warpitk_native2unfold = bids(root=work,datatype='seg',**config['subj_wildcards'],label='hipp',suffix='xfm.nii.gz',hemi='{hemi,Lflip|R}',from_='corobl',to='unfold',mode='image') group: 'subj' log: bids(root='logs',**config['subj_wildcards'],hemi='{hemi,Lflip|R}',suffix='create_warps-hipp.txt') script: '../scripts/create_warps.py' @@ -65,21 +65,21 @@ rule create_warps_hipp: rule create_warps_dentate: input: - unfold_ref_nii = bids(root='work',space='unfold',label='dentate',datatype='seg',suffix='refvol.nii.gz',**config['subj_wildcards']), - unfold_phys_coords_nii = bids(root='work',space='unfold',label='dentate',datatype='seg',suffix='refcoords.nii.gz',**config['subj_wildcards']), - coords_ap = bids(root='work',datatype='seg',dir='AP',label='dentate',suffix='coords.nii.gz',desc='init',space='corobl',hemi='{hemi}', **config['subj_wildcards']), - coords_pd = bids(root='work',datatype='seg',dir='PD',label='dentate',suffix='coords.nii.gz',desc='init',space='corobl',hemi='{hemi}', **config['subj_wildcards']), - coords_io = bids(root='work',datatype='seg',dir='IO',label='dentate',suffix='coords.nii.gz',desc='init',space='corobl',hemi='{hemi}', **config['subj_wildcards']), - native_ref_coords_nii = bids(root='work',datatype='seg',space='corobl',hemi='{hemi}',label='dentate',suffix='refcoords.nii.gz',**config['subj_wildcards']) + unfold_ref_nii = bids(root=work,space='unfold',label='dentate',datatype='seg',suffix='refvol.nii.gz',**config['subj_wildcards']), + unfold_phys_coords_nii = bids(root=work,space='unfold',label='dentate',datatype='seg',suffix='refcoords.nii.gz',**config['subj_wildcards']), + coords_ap = bids(root=work,datatype='seg',dir='AP',label='dentate',suffix='coords.nii.gz',desc='init',space='corobl',hemi='{hemi}', **config['subj_wildcards']), + coords_pd = bids(root=work,datatype='seg',dir='PD',label='dentate',suffix='coords.nii.gz',desc='init',space='corobl',hemi='{hemi}', **config['subj_wildcards']), + coords_io = bids(root=work,datatype='seg',dir='IO',label='dentate',suffix='coords.nii.gz',desc='init',space='corobl',hemi='{hemi}', **config['subj_wildcards']), + native_ref_coords_nii = bids(root=work,datatype='seg',space='corobl',hemi='{hemi}',label='dentate',suffix='refcoords.nii.gz',**config['subj_wildcards']) params: interp_method = 'linear' resources: mem_mb = 16000 output: - warp_unfold2native = bids(root='work',datatype='seg',**config['subj_wildcards'],label='dentate',suffix='xfm.nii.gz',hemi='{hemi,Lflip|R}',from_='unfold',to='corobl',mode='surface'), - warp_native2unfold = bids(root='work',datatype='seg',**config['subj_wildcards'],label='dentate',suffix='xfm.nii.gz',hemi='{hemi,Lflip|R}',from_='corobl',to='unfold',mode='surface'), - warpitk_unfold2native = bids(root='work',datatype='seg',**config['subj_wildcards'],label='dentate',suffix='xfm.nii.gz',hemi='{hemi,Lflip|R}',from_='unfold',to='corobl',mode='image'), - warpitk_native2unfold = bids(root='work',datatype='seg',**config['subj_wildcards'],label='dentate',suffix='xfm.nii.gz',hemi='{hemi,Lflip|R}',from_='corobl',to='unfold',mode='image') + warp_unfold2native = bids(root=work,datatype='seg',**config['subj_wildcards'],label='dentate',suffix='xfm.nii.gz',hemi='{hemi,Lflip|R}',from_='unfold',to='corobl',mode='surface'), + warp_native2unfold = bids(root=work,datatype='seg',**config['subj_wildcards'],label='dentate',suffix='xfm.nii.gz',hemi='{hemi,Lflip|R}',from_='corobl',to='unfold',mode='surface'), + warpitk_unfold2native = bids(root=work,datatype='seg',**config['subj_wildcards'],label='dentate',suffix='xfm.nii.gz',hemi='{hemi,Lflip|R}',from_='unfold',to='corobl',mode='image'), + warpitk_native2unfold = bids(root=work,datatype='seg',**config['subj_wildcards'],label='dentate',suffix='xfm.nii.gz',hemi='{hemi,Lflip|R}',from_='corobl',to='unfold',mode='image') group: 'subj' log: bids(root='logs',**config['subj_wildcards'],hemi='{hemi,Lflip|R}',suffix='create_warps-dentate.txt') script: '../scripts/create_warps.py' @@ -89,11 +89,11 @@ rule create_warps_dentate: rule compose_warps_corobl2unfold_lhemi: """ Compose corobl to unfold (unfold-template), for left hemi (ie with flip)""" input: - native2unfold = bids(root='work',datatype='seg',**config['subj_wildcards'],label='{autotop}',suffix='xfm.nii.gz',hemi='Lflip',from_='corobl',to='unfold',mode='image'), - ref = bids(root='work',space='unfold',label='{autotop}',datatype='seg',suffix='refvol.nii.gz',**config['subj_wildcards']), - flipLR_xfm = os.path.join(config['snakemake_dir'],'resources','desc-flipLR_type-itk_xfm.txt') + native2unfold = bids(root=work,datatype='seg',**config['subj_wildcards'],label='{autotop}',suffix='xfm.nii.gz',hemi='Lflip',from_='corobl',to='unfold',mode='image'), + ref = bids(root=work,space='unfold',label='{autotop}',datatype='seg',suffix='refvol.nii.gz',**config['subj_wildcards']), + flipLR_xfm = os.path.join(workflow.basedir,'..','resources','desc-flipLR_type-itk_xfm.txt') output: - corobl2unfold = bids(root='work',datatype='seg',**config['subj_wildcards'],label='{autotop}',suffix='xfm.nii.gz',hemi='L',from_='corobl',to='unfold',mode='image') + corobl2unfold = bids(root=work,datatype='seg',**config['subj_wildcards'],label='{autotop}',suffix='xfm.nii.gz',hemi='L',from_='corobl',to='unfold',mode='image') container: config['singularity']['autotop'] group: 'subj' shell: 'ComposeMultiTransform 3 {output.corobl2unfold} -R {input.ref} {input.native2unfold} {input.flipLR_xfm}' @@ -103,12 +103,12 @@ rule compose_warps_corobl2unfold_lhemi: rule compose_warps_unfold2corobl_lhemi: """ Compose unfold (unfold-template) to corobl, for left hemi (ie with flip)""" input: - unfold2native = bids(root='work',datatype='seg',**config['subj_wildcards'],label='{autotop}',suffix='xfm.nii.gz',hemi='Lflip',from_='unfold',to='corobl',mode='image'), - flipLR_xfm = os.path.join(config['snakemake_dir'],'resources','desc-flipLR_type-itk_xfm.txt'), - unfold_ref = bids(root='work',space='unfold',label='{autotop}',datatype='seg',suffix='refvol.nii.gz',**config['subj_wildcards']), - ref = bids(root='work',datatype='seg',dir='AP',label='{autotop}',suffix='coords.nii.gz',desc='laplace',space='corobl',hemi='L', **config['subj_wildcards']), + unfold2native = bids(root=work,datatype='seg',**config['subj_wildcards'],label='{autotop}',suffix='xfm.nii.gz',hemi='Lflip',from_='unfold',to='corobl',mode='image'), + flipLR_xfm = os.path.join(workflow.basedir,'..','resources','desc-flipLR_type-itk_xfm.txt'), + unfold_ref = bids(root=work,space='unfold',label='{autotop}',datatype='seg',suffix='refvol.nii.gz',**config['subj_wildcards']), + ref = bids(root=work,datatype='seg',dir='AP',label='{autotop}',suffix='coords.nii.gz',desc='laplace',space='corobl',hemi='L', **config['subj_wildcards']), output: - unfold2corobl = bids(root='work',datatype='seg',**config['subj_wildcards'],label='{autotop}',suffix='xfm.nii.gz',hemi='L',from_='unfold',to='corobl',mode='image') + unfold2corobl = bids(root=work,datatype='seg',**config['subj_wildcards'],label='{autotop}',suffix='xfm.nii.gz',hemi='L',from_='unfold',to='corobl',mode='image') container: config['singularity']['ants'] group: 'subj' shell: 'antsApplyTransforms -o [{output.unfold2corobl},1] -r {input.ref} -t {input.flipLR_xfm} -t {input.unfold2native} -i {input.unfold_ref} -v' @@ -118,11 +118,11 @@ rule compose_warps_unfold2corobl_lhemi: rule compose_warps_t1_to_unfold: """ Compose warps from T1w to unfold """ input: - corobl2unfold = bids(root='work',datatype='seg',**config['subj_wildcards'],label='{autotop}',suffix='xfm.nii.gz',hemi='{hemi}',from_='corobl',to='unfold',mode='image'), - ref = bids(root='work',space='unfold',label='{autotop}',datatype='seg',suffix='refvol.nii.gz',**config['subj_wildcards']), - t1w2corobl = bids(root='work',datatype='anat',**config['subj_wildcards'],suffix='xfm.txt',from_='T1w',to='corobl',desc='affine',type_='itk'), + corobl2unfold = bids(root=work,datatype='seg',**config['subj_wildcards'],label='{autotop}',suffix='xfm.nii.gz',hemi='{hemi}',from_='corobl',to='unfold',mode='image'), + ref = bids(root=work,space='unfold',label='{autotop}',datatype='seg',suffix='refvol.nii.gz',**config['subj_wildcards']), + t1w2corobl = bids(root=work,datatype='anat',**config['subj_wildcards'],suffix='xfm.txt',from_='T1w',to='corobl',desc='affine',type_='itk'), output: - bids(root='results',datatype='seg',**config['subj_wildcards'],label='{autotop}',suffix='xfm.nii.gz',hemi='{hemi}',from_='T1w',to='unfold',mode='image') + bids(root=root,datatype='seg',**config['subj_wildcards'],label='{autotop}',suffix='xfm.nii.gz',hemi='{hemi}',from_='T1w',to='unfold',mode='image') container: config['singularity']['ants'] group: 'subj' shell: 'ComposeMultiTransform 3 {output} -R {input.ref} {input.corobl2unfold} {input.t1w2corobl}' @@ -131,12 +131,12 @@ rule compose_warps_t1_to_unfold: rule compose_warps_unfold_to_cropt1: """ Compose warps from unfold to cropT1w """ input: - unfold2corobl = bids(root='results',datatype='seg',**config['subj_wildcards'],label='{autotop}',suffix='xfm.nii.gz',hemi='{hemi}',from_='unfold',to='corobl',mode='image'), - ref = bids(root='work',datatype='seg',suffix='cropref.nii.gz', space='T1w',hemi='{hemi}', **config['subj_wildcards']), - t1w2corobl = bids(root='work',datatype='anat',**config['subj_wildcards'],suffix='xfm.txt',from_='T1w',to='corobl',desc='affine',type_='itk'), - unfold_ref = bids(root='work',space='unfold',label='{autotop}',datatype='seg',suffix='refvol.nii.gz',**config['subj_wildcards']), + unfold2corobl = bids(root=root,datatype='seg',**config['subj_wildcards'],label='{autotop}',suffix='xfm.nii.gz',hemi='{hemi}',from_='unfold',to='corobl',mode='image'), + ref = bids(root=work,datatype='seg',suffix='cropref.nii.gz', space='T1w',hemi='{hemi}', **config['subj_wildcards']), + t1w2corobl = bids(root=work,datatype='anat',**config['subj_wildcards'],suffix='xfm.txt',from_='T1w',to='corobl',desc='affine',type_='itk'), + unfold_ref = bids(root=work,space='unfold',label='{autotop}',datatype='seg',suffix='refvol.nii.gz',**config['subj_wildcards']), output: - unfold2cropt1 = bids(root='results',datatype='seg',**config['subj_wildcards'],label='{autotop}',suffix='xfm.nii.gz',hemi='{hemi}',from_='unfold',to='T1w',mode='image') + unfold2cropt1 = bids(root=root,datatype='seg',**config['subj_wildcards'],label='{autotop}',suffix='xfm.nii.gz',hemi='{hemi}',from_='unfold',to='T1w',mode='image') container: config['singularity']['ants'] group: 'subj' shell: 'antsApplyTransforms -o [{output.unfold2cropt1},1] -r {input.ref} -t [{input.t1w2corobl},1] -t {input.unfold2corobl} -i {input.unfold_ref} -v' diff --git a/poetry.lock b/poetry.lock index 97c91d39..b68139f9 100644 --- a/poetry.lock +++ b/poetry.lock @@ -278,11 +278,11 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" [[package]] name = "filelock" -version = "3.4.0" +version = "3.4.2" description = "A platform independent file lock." category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" [package.extras] docs = ["furo (>=2021.8.17b43)", "sphinx (>=4.1)", "sphinx-autodoc-typehints (>=1.12)"] @@ -366,7 +366,7 @@ python-versions = ">=3.5" [[package]] name = "imageio" -version = "2.13.4" +version = "2.13.5" description = "Library for reading and writing a wide range of image, video, scientific, and volumetric data formats." category = "main" optional = false @@ -781,11 +781,11 @@ python-versions = ">=3.6" [[package]] name = "platformdirs" -version = "2.4.0" +version = "2.4.1" description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" [package.extras] docs = ["Sphinx (>=4)", "furo (>=2021.7.5b38)", "proselint (>=0.10.2)", "sphinx-autodoc-typehints (>=1.12)"] @@ -1142,7 +1142,7 @@ test = ["asv", "codecov", "flake8", "matplotlib (>=3.0.3)", "pooch (>=1.3.0)", " [[package]] name = "scikit-learn" -version = "1.0.1" +version = "1.0.2" description = "A set of python modules for machine learning and data mining" category = "main" optional = false @@ -1239,13 +1239,14 @@ python-versions = ">=3.6" [[package]] name = "snakebids" -version = "0.4.0" +version = "0.4.1.post1" description = "BIDS integration into snakemake workflows" category = "main" optional = false python-versions = ">=3.7,<3.11" [package.dependencies] +attrs = ">=21.2.0,<22.0.0" colorama = ">=0.4.4,<0.5.0" cookiecutter = ">=1.7.2,<2.0.0" progress = ">=1.6,<2.0" @@ -1518,7 +1519,7 @@ testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytes [metadata] lock-version = "1.1" python-versions = ">=3.7.1,<3.10" -content-hash = "9ad95c5b813c59d32ec8f15986ad7c9d2753fcb92ddb95888baeccdb8ab43dc3" +content-hash = "4659d89e05ae349b809d9824b0b71153c52152b317e3f1eebb545d6906c8119e" [metadata.files] appdirs = [ @@ -1656,8 +1657,8 @@ docutils = [ {file = "docutils-0.18.1.tar.gz", hash = "sha256:679987caf361a7539d76e584cbeddc311e3aee937877c87346f31debc63e9d06"}, ] filelock = [ - {file = "filelock-3.4.0-py3-none-any.whl", hash = "sha256:2e139a228bcf56dd8b2274a65174d005c4a6b68540ee0bdbb92c76f43f29f7e8"}, - {file = "filelock-3.4.0.tar.gz", hash = "sha256:93d512b32a23baf4cac44ffd72ccf70732aeff7b8050fcaf6d3ec406d954baf4"}, + {file = "filelock-3.4.2-py3-none-any.whl", hash = "sha256:cf0fc6a2f8d26bd900f19bf33915ca70ba4dd8c56903eeb14e1e7a2fd7590146"}, + {file = "filelock-3.4.2.tar.gz", hash = "sha256:38b4f4c989f9d06d44524df1b24bd19e167d851f19b50bf3e3559952dddc5b80"}, ] flake8 = [ {file = "flake8-4.0.1-py2.py3-none-any.whl", hash = "sha256:479b1304f72536a55948cb40a32dce8bb0ffe3501e26eaf292c7e60eb5e0428d"}, @@ -1683,8 +1684,8 @@ idna = [ {file = "idna-3.3.tar.gz", hash = "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"}, ] imageio = [ - {file = "imageio-2.13.4-py3-none-any.whl", hash = "sha256:613c1f9524bfba4f3e71e681c4e9e763cd1799acbb1dbf7da1ba214e4bbbf132"}, - {file = "imageio-2.13.4.tar.gz", hash = "sha256:ca9e2e2e61f1fd25fdbc3274cbeb893debbf1a606e87cea9b5dee7566d68d284"}, + {file = "imageio-2.13.5-py3-none-any.whl", hash = "sha256:a3a18d5d01732557247fba5658d7f75425e97ce49c8fe2cd81bd348f5c71ffb2"}, + {file = "imageio-2.13.5.tar.gz", hash = "sha256:c7ec2be58e401b6eaa838f8eaf8368ed54b2de4a1b001fe6551644f1a30a843d"}, ] importlib-metadata = [ {file = "importlib_metadata-1.7.0-py2.py3-none-any.whl", hash = "sha256:dc15b2969b4ce36305c51eebe62d418ac7791e9a157911d58bfb1f9ccd8e2070"}, @@ -2059,8 +2060,8 @@ pillow = [ {file = "Pillow-8.4.0.tar.gz", hash = "sha256:b8e2f83c56e141920c39464b852de3719dfbfb6e3c99a2d8da0edf4fb33176ed"}, ] platformdirs = [ - {file = "platformdirs-2.4.0-py3-none-any.whl", hash = "sha256:8868bbe3c3c80d42f20156f22e7131d2fb321f5bc86a2a345375c6481a67021d"}, - {file = "platformdirs-2.4.0.tar.gz", hash = "sha256:367a5e80b3d04d2428ffa76d33f124cf11e8fff2acdaa9b43d545f5c7d661ef2"}, + {file = "platformdirs-2.4.1-py3-none-any.whl", hash = "sha256:1d7385c7db91728b83efd0ca99a5afb296cab9d0ed8313a45ed8ba17967ecfca"}, + {file = "platformdirs-2.4.1.tar.gz", hash = "sha256:440633ddfebcc36264232365d7840a970e75e1018d15b4327d11f91909045fda"}, ] pluggy = [ {file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"}, @@ -2347,31 +2348,38 @@ scikit-image = [ {file = "scikit_image-0.19.1-cp39-cp39-win_amd64.whl", hash = "sha256:c3d012c861792b2baec07118ecf31b246cd27051035f527dc2618ad28c6ac29e"}, ] scikit-learn = [ - {file = "scikit-learn-1.0.1.tar.gz", hash = "sha256:ac2ca9dbb754d61cfe1c83ba8483498ef951d29b93ec09d6f002847f210a99da"}, - {file = "scikit_learn-1.0.1-cp37-cp37m-macosx_10_13_x86_64.whl", hash = "sha256:116e05fd990d9b363fc29bd3699ec2117d7da9088f6ca9a90173b240c5a063f1"}, - {file = "scikit_learn-1.0.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:bd78a2442c948536f677e2744917c37cff014559648102038822c23863741c27"}, - {file = "scikit_learn-1.0.1-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:32d941f12fd7e245f01da2b82943c5ce6f1133fa5375eb80caa51457532b3e7e"}, - {file = "scikit_learn-1.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb7214103f6c36c1371dd8c166897e3528264a28f2e2e42573ba8c61ed4d7142"}, - {file = "scikit_learn-1.0.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:46248cc6a8b72490f723c73ff2e65e62633d14cafe9d2df3a7b3f87d332a6f7e"}, - {file = "scikit_learn-1.0.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:fecb5102f0a36c16c1361ec519a7bb0260776ef40e17393a81f530569c916a7b"}, - {file = "scikit_learn-1.0.1-cp37-cp37m-win32.whl", hash = "sha256:02aee3b257617da0ec98dee9572b10523dc00c25b68c195ddf100c1a93b1854b"}, - {file = "scikit_learn-1.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:538f3a85c4980c7572f3e754f0ba8489363976ef3e7f6a94e8f1af5ae45f6f6a"}, - {file = "scikit_learn-1.0.1-cp38-cp38-macosx_10_13_x86_64.whl", hash = "sha256:59b1d6df8724003fa16b7365a3b43449ee152aa6e488dd7a19f933640bb2d7fb"}, - {file = "scikit_learn-1.0.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:515b227f01f569145dc9f86e56f4cea9f00a613fc4d074bbfc0a92ca00bff467"}, - {file = "scikit_learn-1.0.1-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:fc75f81571137b39f9b31766e15a0e525331637e7fe8f8000a3fbfba7da3add9"}, - {file = "scikit_learn-1.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:648f4dbfdd0a1b45bf6e2e4afe3f431774c55dee05e2d28f8394d6648296f373"}, - {file = "scikit_learn-1.0.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:53bb7c605427ab187869d7a05cd3f524a3015a90e351c1788fc3a662e7f92b69"}, - {file = "scikit_learn-1.0.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:a800665527c1a63f7395a0baae3c89b0d97b54d2c23769c1c9879061bb80bc19"}, - {file = "scikit_learn-1.0.1-cp38-cp38-win32.whl", hash = "sha256:ee59da47e18b703f6de17d5d51b16ce086c50969d5a83db5217f0ae9372de232"}, - {file = "scikit_learn-1.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:ebbe4275556d3c02707bd93ae8b96d9651acd4165126e0ae64b336afa2a6dcb1"}, - {file = "scikit_learn-1.0.1-cp39-cp39-macosx_10_13_x86_64.whl", hash = "sha256:11a57405c1c3514227d0c6a0bee561c94cd1284b41e236f7a1d76b3975f77593"}, - {file = "scikit_learn-1.0.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:a51fdbc116974d9715957366df73e5ec6f0a7a2afa017864c2e5f5834e6f494d"}, - {file = "scikit_learn-1.0.1-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:944f47b2d881b9d24aee40d643bfdc4bd2b6dc3d25b62964411c6d8882f940a1"}, - {file = "scikit_learn-1.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fc60e0371e521995a6af2ef3f5d911568506124c272889b318b8b6e497251231"}, - {file = "scikit_learn-1.0.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:62ce4e3ddb6e6e9dcdb3e5ac7f0575dbaf56f79ce2b2edee55192b12b52df5be"}, - {file = "scikit_learn-1.0.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:059c5be0c0365321ddbcac7abf0db806fad8ecb64ee6c7cbcd58313c7d61634d"}, - {file = "scikit_learn-1.0.1-cp39-cp39-win32.whl", hash = "sha256:c6b9510fd2e1642314efb7aa951a0d05d963f3523e01c30b2dadde2395ebe6b4"}, - {file = "scikit_learn-1.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:c604a813df8e7d6dfca3ae0db0a8fd7e5dff4ea9d94081ab263c81bf0b61ab4b"}, + {file = "scikit-learn-1.0.2.tar.gz", hash = "sha256:b5870959a5484b614f26d31ca4c17524b1b0317522199dc985c3b4256e030767"}, + {file = "scikit_learn-1.0.2-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:da3c84694ff693b5b3194d8752ccf935a665b8b5edc33a283122f4273ca3e687"}, + {file = "scikit_learn-1.0.2-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:75307d9ea39236cad7eea87143155eea24d48f93f3a2f9389c817f7019f00705"}, + {file = "scikit_learn-1.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f14517e174bd7332f1cca2c959e704696a5e0ba246eb8763e6c24876d8710049"}, + {file = "scikit_learn-1.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d9aac97e57c196206179f674f09bc6bffcd0284e2ba95b7fe0b402ac3f986023"}, + {file = "scikit_learn-1.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:d93d4c28370aea8a7cbf6015e8a669cd5d69f856cc2aa44e7a590fb805bb5583"}, + {file = "scikit_learn-1.0.2-cp37-cp37m-macosx_10_13_x86_64.whl", hash = "sha256:85260fb430b795d806251dd3bb05e6f48cdc777ac31f2bcf2bc8bbed3270a8f5"}, + {file = "scikit_learn-1.0.2-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:a053a6a527c87c5c4fa7bf1ab2556fa16d8345cf99b6c5a19030a4a7cd8fd2c0"}, + {file = "scikit_learn-1.0.2-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:245c9b5a67445f6f044411e16a93a554edc1efdcce94d3fc0bc6a4b9ac30b752"}, + {file = "scikit_learn-1.0.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:158faf30684c92a78e12da19c73feff9641a928a8024b4fa5ec11d583f3d8a87"}, + {file = "scikit_learn-1.0.2-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:08ef968f6b72033c16c479c966bf37ccd49b06ea91b765e1cc27afefe723920b"}, + {file = "scikit_learn-1.0.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:16455ace947d8d9e5391435c2977178d0ff03a261571e67f627c8fee0f9d431a"}, + {file = "scikit_learn-1.0.2-cp37-cp37m-win32.whl", hash = "sha256:2f3b453e0b149898577e301d27e098dfe1a36943f7bb0ad704d1e548efc3b448"}, + {file = "scikit_learn-1.0.2-cp37-cp37m-win_amd64.whl", hash = "sha256:46f431ec59dead665e1370314dbebc99ead05e1c0a9df42f22d6a0e00044820f"}, + {file = "scikit_learn-1.0.2-cp38-cp38-macosx_10_13_x86_64.whl", hash = "sha256:ff3fa8ea0e09e38677762afc6e14cad77b5e125b0ea70c9bba1992f02c93b028"}, + {file = "scikit_learn-1.0.2-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:9369b030e155f8188743eb4893ac17a27f81d28a884af460870c7c072f114243"}, + {file = "scikit_learn-1.0.2-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:7d6b2475f1c23a698b48515217eb26b45a6598c7b1840ba23b3c5acece658dbb"}, + {file = "scikit_learn-1.0.2-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:285db0352e635b9e3392b0b426bc48c3b485512d3b4ac3c7a44ec2a2ba061e66"}, + {file = "scikit_learn-1.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5cb33fe1dc6f73dc19e67b264dbb5dde2a0539b986435fdd78ed978c14654830"}, + {file = "scikit_learn-1.0.2-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b1391d1a6e2268485a63c3073111fe3ba6ec5145fc957481cfd0652be571226d"}, + {file = "scikit_learn-1.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc3744dabc56b50bec73624aeca02e0def06b03cb287de26836e730659c5d29c"}, + {file = "scikit_learn-1.0.2-cp38-cp38-win32.whl", hash = "sha256:a999c9f02ff9570c783069f1074f06fe7386ec65b84c983db5aeb8144356a355"}, + {file = "scikit_learn-1.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:7626a34eabbf370a638f32d1a3ad50526844ba58d63e3ab81ba91e2a7c6d037e"}, + {file = "scikit_learn-1.0.2-cp39-cp39-macosx_10_13_x86_64.whl", hash = "sha256:a90b60048f9ffdd962d2ad2fb16367a87ac34d76e02550968719eb7b5716fd10"}, + {file = "scikit_learn-1.0.2-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:7a93c1292799620df90348800d5ac06f3794c1316ca247525fa31169f6d25855"}, + {file = "scikit_learn-1.0.2-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:eabceab574f471de0b0eb3f2ecf2eee9f10b3106570481d007ed1c84ebf6d6a1"}, + {file = "scikit_learn-1.0.2-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:55f2f3a8414e14fbee03782f9fe16cca0f141d639d2b1c1a36779fa069e1db57"}, + {file = "scikit_learn-1.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:80095a1e4b93bd33261ef03b9bc86d6db649f988ea4dbcf7110d0cded8d7213d"}, + {file = "scikit_learn-1.0.2-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fa38a1b9b38ae1fad2863eff5e0d69608567453fdfc850c992e6e47eb764e846"}, + {file = "scikit_learn-1.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ff746a69ff2ef25f62b36338c615dd15954ddc3ab8e73530237dd73235e76d62"}, + {file = "scikit_learn-1.0.2-cp39-cp39-win32.whl", hash = "sha256:e174242caecb11e4abf169342641778f68e1bfaba80cd18acd6bc84286b9a534"}, + {file = "scikit_learn-1.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:b54a62c6e318ddbfa7d22c383466d38d2ee770ebdb5ddb668d56a099f6eaf75f"}, ] scipy = [ {file = "scipy-1.7.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:2a0eeaab01258e0870c4022a6cd329aef3b7c6c2b606bd7cf7bb2ba9820ae561"}, @@ -2436,8 +2444,8 @@ smmap = [ {file = "smmap-5.0.0.tar.gz", hash = "sha256:c840e62059cd3be204b0c9c9f74be2c09d5648eddd4580d9314c3ecde0b30936"}, ] snakebids = [ - {file = "snakebids-0.4.0-py3-none-any.whl", hash = "sha256:0cba0232b57e7c57a5c367ad6d638f4459ef3258c23733670dc20492fd4b2a20"}, - {file = "snakebids-0.4.0.tar.gz", hash = "sha256:45b2dd0f327f68fe53e7ea144156667e67f71ffc7d1c26c9c7d404140237ec7a"}, + {file = "snakebids-0.4.1.post1-py3-none-any.whl", hash = "sha256:e99341610821413496edced3478b69a42232e28b94f2efe852cfb66e784dec8b"}, + {file = "snakebids-0.4.1.post1.tar.gz", hash = "sha256:7939d74b0837c48254b11313af76f2267bbe0d8af53bf59b5b39848db5d178f4"}, ] snakefmt = [ {file = "snakefmt-0.4.4-py3-none-any.whl", hash = "sha256:dae4506831639da972449ad650b8d474661a41564206ed81fe56490d9fc70653"}, diff --git a/pyproject.toml b/pyproject.toml index 5990bbad..e0fb185d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -7,7 +7,7 @@ authors = ["Jordan DeKraker & Ali Khan "] [tool.poetry.dependencies] python = ">=3.7.1,<3.10" snakemake = ">=6.0.0" -snakebids = "0.4.0" +snakebids = ">0.4.0" batchgenerators = "0.21" nnunet-inference-on-cpu-and-gpu = "1.6.6" numpy = "1.21.2" diff --git a/requirements.txt b/requirements.txt index 9d60c8f5..679195ed 100644 --- a/requirements.txt +++ b/requirements.txt @@ -3,7 +3,7 @@ argparse==1.4.0 arrow==1.2.1; python_version >= "3.7" and python_full_version < "3.0.0" and python_version < "3.11" or python_version >= "3.7" and python_version < "3.11" and python_full_version >= "3.5.0" astor==0.8.1; python_version >= "3.7" and python_full_version < "3.0.0" and python_version < "3.11" or python_version >= "3.7" and python_version < "3.11" and python_full_version >= "3.4.0" astropy==4.3.1; python_version >= "3.7" -attrs==21.2.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.7" +attrs==21.2.0; python_version >= "3.7" and python_full_version < "3.0.0" and python_version < "3.11" or python_version >= "3.7" and python_version < "3.11" and python_full_version >= "3.5.0" batchgenerators==0.21 bids-validator==1.8.9; python_version >= "3.7" and python_version < "3.11" binaryornot==0.4.4; python_version >= "3.7" and python_full_version < "3.0.0" and python_version < "3.11" or python_version >= "3.7" and python_version < "3.11" and python_full_version >= "3.5.0" @@ -20,13 +20,13 @@ datrie==0.8.2; python_version >= "3.7" and python_full_version < "3.0.0" and pyt dicom2nifti==2.3.0 docopt==0.6.2; python_version >= "3.7" and python_version < "3.11" docutils==0.18.1; python_version >= "3.7" and python_full_version < "3.0.0" and python_version < "3.11" or python_version >= "3.7" and python_version < "3.11" and python_full_version >= "3.5.0" -filelock==3.4.0; python_version >= "3.7" and python_version < "3.11" +filelock==3.4.2; python_version >= "3.7" and python_version < "3.11" formulaic==0.2.4; python_version >= "3.7" and python_version < "3.11" future==0.18.2; python_version >= "2.6" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" gitdb==4.0.9; python_version >= "3.7" gitpython==3.1.24; python_version >= "3.7" and python_version < "3.11" idna==3.3; python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.5" -imageio==2.13.4; python_version >= "3.7" +imageio==2.13.5; python_version >= "3.7" importlib-metadata==1.7.0; python_version == "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version == "3.7" importlib-resources==5.4.0; python_version < "3.9" and python_version >= "3.7" interface-meta==1.2.4; python_version >= "3.7" and python_version < "3.11" @@ -72,7 +72,7 @@ ratelimiter==1.2.0.post0; python_version >= "3.7" and python_version < "3.11" requests==2.26.0; python_version >= "3.7" and python_full_version < "3.0.0" and python_version < "3.11" or python_full_version >= "3.6.0" and python_version >= "3.7" and python_version < "3.11" scikit-fmm==2021.10.29 scikit-image==0.19.1; python_version >= "3.7" -scikit-learn==1.0.1; python_version >= "3.7" +scikit-learn==1.0.2; python_version >= "3.7" scipy==1.7.1; python_version >= "3.7" and python_version < "3.10" seaborn==0.11.2; python_version >= "3.6" simpleitk==2.0.2 @@ -80,7 +80,7 @@ six==1.16.0; python_version >= "3.7" and python_version < "3.11" and python_full sklearn==0.0 smart-open==5.2.1; python_version >= "3.7" and python_version < "3.11" smmap==5.0.0; python_version >= "3.7" -snakebids==0.4.0; python_version >= "3.7" and python_version < "3.11" +snakebids==0.4.1.post1; python_version >= "3.7" and python_version < "3.11" snakemake==6.12.3 sqlalchemy==1.3.24; python_version >= "3.7" and python_full_version < "3.0.0" and python_version < "3.11" or python_version >= "3.7" and python_version < "3.11" and python_full_version >= "3.4.0" stopit==1.1.2; python_version >= "3.7" and python_version < "3.11"