Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 23 additions & 21 deletions .github/workflows/lint-and-dryrun-testing.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,40 +10,42 @@ jobs:
name: Lint code
runs-on: ubuntu-latest
steps:
- name: Clone repo
uses: actions/checkout@v4

- name: Install non-python dependencies
run: |
sudo apt-get install -y graphviz-dev

- name: Setup Python environment
uses: khanlab/actions/.github/actions/action-setup_task-installPyProject@v0.3.6
uses: prefix-dev/setup-pixi@v0.8.14
with:
python-version: '3.10'
- name: yamlfix
run: poetry run poe yamlfix-check
- name: ruff
run: poetry run poe ruff-lint-check
environments: >-
dev-only
activate-environment: dev-only

- name: isort
run: isort autoafids/*.py -c

- name: black
run: black autoafids --check

- name: snakefmt
run: poetry run poe snakefmt-check
run: snakefmt autoafids --check

test:
runs-on: ubuntu-latest
needs: [quality]
defaults:
run:
shell: bash -l {0}

steps:
- name: checkout repository
uses: actions/checkout@v4
- name: Setup Miniforge and mamba
uses: conda-incubator/setup-miniconda@v3

- name: Setup Pixi environment
uses: prefix-dev/setup-pixi@v0.8.14
with:
miniforge-variant: Miniforge3
miniforge-version: latest
mamba-version: '*'
use-mamba: true
conda-solver: libmamba
auto-activate-base: true
- name: Install snakebids
run: |
mamba install snakebids -c bioconda -c conda-forge -y
activate-environment: true

- name: Setup env for autoafids
run: |
echo "AUTOAFIDS_CACHE_DIR=`pwd`/test_data/autoafids_cache_dir" >> $GITHUB_ENV
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/push_conda.yml
Original file line number Diff line number Diff line change
Expand Up @@ -74,4 +74,4 @@ jobs:
--user khanlab \
--label main \
--force \
"$PACKAGE_PATH"
"$PACKAGE_PATH"
24 changes: 3 additions & 21 deletions .github/workflows/wetrun-testing.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,25 +15,10 @@ jobs:
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Setup Miniforge and mamba
uses: conda-incubator/setup-miniconda@v3
- name: Setup Pixi environment
uses: prefix-dev/setup-pixi@v0.8.14
with:
miniforge-variant: Miniforge3
miniforge-version: latest
mamba-version: '*'
use-mamba: true
conda-solver: libmamba
auto-activate-base: true
- name: Create environment with snakebids
run: |
mamba create -n snakebids-env snakebids scikit-learn pandas -c bioconda -c conda-forge -y
- name: Cache Snakemake Conda environments
uses: actions/cache@v4
with:
path: test_data/autoafids_cache_dir/conda
key: conda-env-${{ hashFiles('autoafids/workflow/envs/*.yaml') }}
restore-keys: |
conda-env-
activate-environment: true
- name: Restore cached CNN model
uses: actions/cache@v4
with:
Expand All @@ -45,19 +30,16 @@ jobs:
- name: Run wet-run test for T1w modality
shell: bash -l {0}
run: |
conda activate snakebids-env
./autoafids/run.py test_data/bids_wetrun_testing/bids_T1w test_out participant \
--cores all --force-output --stereotaxy STN --fidqc --conda-frontend mamba | tee autoafids_output.log
- name: Model accuracy check
shell: bash -l {0}
run: |
conda activate snakebids-env
python ./tests/test_fcsv_output.py \
--autoafids_fcsv ./test_out/sub-001/afids-cnn/*.fcsv \
--baseline_fcsv ./test_data/bids_wetrun_testing/bids_T1w/sub-001/anat/sub-001*.fcsv | tee test_fcsv_output.log
- name: Run wet-run test for T2w modality
shell: bash -l {0}
run: |-
conda activate snakebids-env
./autoafids/run.py test_data/bids_wetrun_testing/bids_T2w test_out participant \
--modality T2w --cores all --force-output --conda-frontend mamba
2 changes: 1 addition & 1 deletion .readthedocs.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ formats: [pdf]
build:
os: ubuntu-20.04
tools:
python: '3.10'
python: '3.11'
python:
install:
- requirements: docs/requirements.txt
Expand Down
14 changes: 0 additions & 14 deletions autoafids-dev.yml

This file was deleted.

5 changes: 2 additions & 3 deletions autoafids/run.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,7 @@
from snakebids import bidsapp, plugins

try:
from autoafids.workflow.lib import (
utils as utils, # Works when run as a package
)
from autoafids.workflow.lib import utils as utils # Works when run as a package
except ImportError:
from workflow.lib import utils as utils # Works when run directly

Expand All @@ -30,6 +28,7 @@
if "SNAKEMAKE_CONDA_PREFIX" not in os.environ:
os.environ["SNAKEMAKE_CONDA_PREFIX"] = str(conda_prefix)


def get_parser():
"""Exposes parser for sphinx doc generation, cwd is the docs dir"""
return app.build_parser().parser
Expand Down
192 changes: 104 additions & 88 deletions autoafids/workflow/Snakefile
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,7 @@ if config["modality"] != "T1w":
bids(
root="logs",
suffix="synthsr_output.txt",
**inputs[config["modality"]].wildcards
**inputs[config["modality"]].wildcards,
),
resources:
mem_mb=10000,
Expand All @@ -147,27 +147,29 @@ if "n4_bias_correction" in profile_settings and config["modality"] == "T1w":

rule n4_bias_correction:
input:
im=bids(
root=str(Path(config["bids_dir"])),
datatype="anat",
suffix="T1w.nii.gz",
**inputs[config["modality"]].wildcards,
)
if config["modality"] == "T1w"
else bids(
root=work,
datatype="SynthSR",
desc=f"{config['modality']}-SynthSR",
suffix="T1w.nii.gz",
**inputs[config["modality"]].wildcards,
im=(
bids(
root=str(Path(config["bids_dir"])),
datatype="anat",
suffix="T1w.nii.gz",
**inputs[config["modality"]].wildcards,
)
if config["modality"] == "T1w"
else bids(
root=work,
datatype="SynthSR",
desc=f"{config['modality']}-SynthSR",
suffix="T1w.nii.gz",
**inputs[config["modality"]].wildcards,
)
),
output:
corrected_im=bids(
root=work,
datatype="n4biascorr",
desc="n4corrected",
suffix="T1w.nii.gz",
**inputs[config["modality"]].wildcards
**inputs[config["modality"]].wildcards,
),
conda:
"envs/ants.yaml"
Expand All @@ -177,36 +179,42 @@ if "n4_bias_correction" in profile_settings and config["modality"] == "T1w":

rule norm_im:
input:
im_raw=lambda wildcards: bids(
root=work,
datatype="synthstrip",
desc="synthstrip",
suffix="T1w.nii.gz",
**inputs[config["modality"]].wildcards,
)
if "skull_strip" in profile_settings
else bids(
root=work,
datatype="n4biascorr",
desc="n4corrected",
suffix="T1w.nii.gz",
**inputs[config["modality"]].wildcards,
)
if "n4_bias_correction" in profile_settings
and config["modality"] == "T1w"
else bids(
root=str(Path(config["bids_dir"])),
datatype="anat",
suffix="T1w.nii.gz",
**inputs[config["modality"]].wildcards,
)
if config["modality"] == "T1w"
else bids(
root=work,
datatype="SynthSR",
desc=f"{config['modality']}-SynthSR",
suffix="T1w.nii.gz",
**inputs[config["modality"]].wildcards,
im_raw=lambda wildcards: (
bids(
root=work,
datatype="synthstrip",
desc="synthstrip",
suffix="T1w.nii.gz",
**inputs[config["modality"]].wildcards,
)
if "skull_strip" in profile_settings
else (
bids(
root=work,
datatype="n4biascorr",
desc="n4corrected",
suffix="T1w.nii.gz",
**inputs[config["modality"]].wildcards,
)
if "n4_bias_correction" in profile_settings
and config["modality"] == "T1w"
else (
bids(
root=str(Path(config["bids_dir"])),
datatype="anat",
suffix="T1w.nii.gz",
**inputs[config["modality"]].wildcards,
)
if config["modality"] == "T1w"
else bids(
root=work,
datatype="SynthSR",
desc=f"{config['modality']}-SynthSR",
suffix="T1w.nii.gz",
**inputs[config["modality"]].wildcards,
)
)
)
),
output:
im_norm=bids(
Expand Down Expand Up @@ -254,28 +262,32 @@ if "resample_im" in profile_settings and config["modality"] == "T1w":

rule regmni2sub:
input:
im_resamp=bids(
root=work,
datatype="n4biascorr",
desc="n4corrected",
suffix="T1w.nii.gz",
**inputs[config["modality"]].wildcards,
)
if "n4_bias_correction" in profile_settings
and config["modality"] == "T1w"
else bids(
root=str(Path(config["bids_dir"])),
datatype="anat",
suffix="T1w.nii.gz",
**inputs[config["modality"]].wildcards,
)
if config["modality"] == "T1w"
else bids(
root=work,
datatype="SynthSR",
desc=f"{config['modality']}-SynthSR",
suffix="T1w.nii.gz",
**inputs[config["modality"]].wildcards,
im_resamp=(
bids(
root=work,
datatype="n4biascorr",
desc="n4corrected",
suffix="T1w.nii.gz",
**inputs[config["modality"]].wildcards,
)
if "n4_bias_correction" in profile_settings
and config["modality"] == "T1w"
else (
bids(
root=str(Path(config["bids_dir"])),
datatype="anat",
suffix="T1w.nii.gz",
**inputs[config["modality"]].wildcards,
)
if config["modality"] == "T1w"
else bids(
root=work,
datatype="SynthSR",
desc=f"{config['modality']}-SynthSR",
suffix="T1w.nii.gz",
**inputs[config["modality"]].wildcards,
)
)
),
output:
xfm_slicer=bids(
Expand Down Expand Up @@ -351,29 +363,33 @@ rule all:
datatype="afids-cnn",
desc="afidscnn",
suffix="afids.fcsv",
**inputs[config["modality"]].wildcards
**inputs[config["modality"]].wildcards,
),
),
fidqc=inputs[config["modality"]].expand(
bids(
root=root,
datatype="fidqc",
desc="fidqc",
suffix="afids.html",
**inputs[config["modality"]].wildcards
fidqc=(
inputs[config["modality"]].expand(
bids(
root=root,
datatype="fidqc",
desc="fidqc",
suffix="afids.html",
**inputs[config["modality"]].wildcards,
)
)
)
if config["fidqc"]
else [],
afidspred=inputs[config["modality"]].expand(
bids(
root=root,
datatype="stereotaxy",
desc=stereotaxy_target,
suffix="native.fcsv",
**inputs[config["modality"]].wildcards
if config["fidqc"]
else []
),
afidspred=(
inputs[config["modality"]].expand(
bids(
root=root,
datatype="stereotaxy",
desc=stereotaxy_target,
suffix="native.fcsv",
**inputs[config["modality"]].wildcards,
)
)
)
if config["stereotaxy"]
else [],
if config["stereotaxy"]
else []
),
default_target: True
Loading