diff --git a/.github/workflows/bump_version.yml b/.github/workflows/bump_version.yml index 0ab3e332..74f6cfaf 100644 --- a/.github/workflows/bump_version.yml +++ b/.github/workflows/bump_version.yml @@ -1,13 +1,16 @@ +--- name: Bump version on: push: branches: - master + jobs: build: runs-on: ubuntu-latest steps: - - uses: actions/checkout@master + - name: Checkout main branch + uses: actions/checkout@v4 - name: Update changelog uses: release-drafter/release-drafter@v5 @@ -15,6 +18,9 @@ jobs: env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + # Can replace the below with (until pipeline description) with + # khanlab/actions/.github/workflows/workflow-version_task-semverGithub.yml + # after adding PAT token - name: Get previous release version run: | echo "PREV_VER=$(cat pyproject.toml | grep -o -E '(version\s=\s)([[:punct:]])([0-9]+\.[0-9]+\.[0-9]+.+)([[:punct:]])' | cut -d ' ' -f 3 | tr -d '"')" >> $GITHUB_ENV @@ -35,28 +41,27 @@ jobs: run: | echo "NEW_BUMP=$(($BUMP_VER + 1))" >> $GITHUB_ENV - - name: Update version in pyproject - uses: jacobtomlinson/gha-find-replace@master + - name: Update version in pyproject.toml + uses: jacobtomlinson/gha-find-replace@v3 with: - include: 'pyproject.toml' + include: "pyproject.toml" find: 'version = "(?:([0-9]+\.[0-9]+\.[0-9]+.+)|([0-9]+\.[0-9]+\.[0-9]+))"' replace: 'version = "${{ steps.release-drafter.outputs.name }}-pre.${{ env.NEW_BUMP }}"' - name: Update version in pipeline_description (not actually used) - uses: jacobtomlinson/gha-find-replace@master + uses: jacobtomlinson/gha-find-replace@v3 with: - include: 'hippunfold/pipeline_description.json' + include: "hippunfold/pipeline_description.json" find: '"Version": "(?:([0-9]+\.[0-9]+\.[0-9]+.+)|([0-9]+\.[0-9]+\.[0-9]+))"' replace: '"Version": "${{ steps.release-drafter.outputs.name }}-pre.${{ env.NEW_BUMP }}"' - name: Update version in config/snakebids.yml - uses: jacobtomlinson/gha-find-replace@master + uses: jacobtomlinson/gha-find-replace@v3 with: - include: 'hippunfold/config/snakebids.yml' + include: "hippunfold/config/snakebids.yml" find: 'version: "(?:([0-9]+\.[0-9]+\.[0-9]+.+)|([0-9]+\.[0-9]+\.[0-9]+))"' replace: 'version: "${{ steps.release-drafter.outputs.name }}-pre.${{ env.NEW_BUMP }}"' - - name: Commit updates env: SNAKEBIDS_VERSION: ${{ steps.release-drafter.outputs.name }}-pre.${{ env.NEW_BUMP }} @@ -66,10 +71,7 @@ jobs: git diff-index --quiet HEAD || git commit -m "Bump version to $SNAKEBIDS_VERSION" -a - name: Push changes - uses: ad-m/github-push-action@master + uses: ad-m/github-push-action@v0.8.0 with: github_token: ${{ secrets.GITHUB_TOKEN }} tags: false - - - diff --git a/.github/workflows/dags.yml b/.github/workflows/dags.yml index e3f27d3d..4be2bc88 100644 --- a/.github/workflows/dags.yml +++ b/.github/workflows/dags.yml @@ -1,31 +1,26 @@ +--- name: Generate DAG visualizations - on: workflow_dispatch: inputs: - author: - description: "Author" - required: true - default: "github-actions[bot] (user publishing release)" - date: - description: "Date" - required: true - default: "YYYY-MM-DD" comments: description: "Comments" jobs: generate_dag: runs-on: ubuntu-latest + strategy: + matrix: + python-version: ["3.9"] steps: - name: Print author run: | - echo "Author: ${{ github.event.inputs.author }}" - echo "Date: ${{ github.event.inputs.date }}" + echo "Author: ${{ github.triggering_actor }}" echo "Comments: ${{ github.event.inputs.comments }}" - - uses: actions/checkout@master + - name: Checkout main branch + uses: actions/checkout@v3 with: ref: refs/heads/master @@ -33,34 +28,32 @@ jobs: uses: actions/setup-python@v4 with: python-version: ${{ matrix.python-version }} + - name: Install non-python dependencies run: | sudo apt-get install -y graphviz-dev graphviz + - name: Install dependencies run: | python -m pip install --upgrade pip python -m pip install snakebids - - name: Set-up env for hippunfold + - name: Set-up env for hippunfold run: | echo "HIPPUNFOLD_CACHE_DIR=`pwd`/test_data/fake_models" >> $GITHUB_ENV echo "HIPPUNFOLD=./hippunfold/run.py" >> $GITHUB_ENV + - name: Generate rulegraph single T2w bids run: | $HIPPUNFOLD test_data/bids_singleT2w test_out participant -np --modality T2w --rulegraph | dot -Tsvg > docs/images/rulegraph_T2w.svg - name: Commit updates - env: - LATEST_VERSION: ${{ steps.release-drafter.outputs.name }} run: | git config --local user.email "41898282+github-actions[bot]@users.noreply.github.com" git config --local user.name "github-actions[bot]" - git diff-index --quiet HEAD || git add docs/images || commit -m "Add updated dags [skip ci]" + git diff-index --quiet HEAD || git add docs/images || commit -m "Add updated dags [skip ci]" - name: Push changes - uses: ad-m/github-push-action@master + uses: ad-m/github-push-action@v0.8.0 with: github_token: ${{ secrets.GITHUB_TOKEN }} - - - diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index fb1fcfe9..f832ef4a 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -1,16 +1,8 @@ +--- name: Deploy workflow - on: workflow_dispatch: inputs: - author: - description: "Author" - required: true - default: "github-actions[bot] (user publishing release)" - date: - description: "Date" - required: true - default: "YYYY-MM-DD" comments: description: "Comments" branch: @@ -25,11 +17,10 @@ jobs: steps: - name: Print author run: | - echo "Author: ${{ github.event.inputs.author }}" - echo "Date: ${{ github.event.inputs.date }}" + echo "Author: ${{ github.triggering_actor }}" echo "Comments: ${{ github.event.inputs.comments }}" - - uses: actions/checkout@master + - uses: actions/checkout@v4 with: ref: ${{ github.event.inputs.branch }} @@ -37,10 +28,13 @@ jobs: uses: release-drafter/release-drafter@v5 id: release-drafter with: - commitish: ${{ github.event.inputs.branch }} + commitish: ${{ github.event.inputs.branch }} env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + # Can replace the below with (until pipeline description) with + # khanlab/actions/.github/workflows/workflow-version_task-publishGithub.yml + # after adding PAT token - name: Set new release version env: RD_RELEASE: ${{ steps.release-drafter.outputs.name }} @@ -52,27 +46,26 @@ jobs: fi - name: Update version in pyproject.toml - uses: jacobtomlinson/gha-find-replace@master + uses: jacobtomlinson/gha-find-replace@v3 with: - include: 'pyproject.toml' + include: "pyproject.toml" find: 'version = "(?:([0-9]+\.[0-9]+\.[0-9]+.+)|([0-9]+\.[0-9]+\.[0-9]+))"' replace: 'version = "${{ env.NEW_RELEASE }}"' - name: Update version in pipeline_description (not actually used) - uses: jacobtomlinson/gha-find-replace@master + uses: jacobtomlinson/gha-find-replace@v3 with: - include: 'hippunfold/pipeline_description.json' + include: "hippunfold/pipeline_description.json" find: '"Version": "(?:([0-9]+\.[0-9]+\.[0-9]+.+)|([0-9]+\.[0-9]+\.[0-9]+))"' replace: '"Version": "${{ env.NEW_RELEASE }}"' - name: Update version in config/snakebids.yml - uses: jacobtomlinson/gha-find-replace@master + uses: jacobtomlinson/gha-find-replace@v3 with: - include: 'hippunfold/config/snakebids.yml' + include: "hippunfold/config/snakebids.yml" find: 'version: "(?:([0-9]+\.[0-9]+\.[0-9]+.+)|([0-9]+\.[0-9]+\.[0-9]+))"' replace: 'version: "${{ env.NEW_RELEASE }}"' - - name: Commit updates env: LATEST_VERSION: ${{ env.NEW_RELEASE }} @@ -82,7 +75,7 @@ jobs: git diff-index --quiet HEAD || git commit -m "Bump version to $LATEST_VERSION" -a - name: Push changes - uses: ad-m/github-push-action@master + uses: ad-m/github-push-action@v0.8.0 with: github_token: ${{ secrets.GITHUB_TOKEN }} @@ -92,5 +85,3 @@ jobs: publish: true env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - diff --git a/.github/workflows/manual_release_drafter.yml b/.github/workflows/manual_release_drafter.yml index 1d7294f4..2a8a214c 100644 --- a/.github/workflows/manual_release_drafter.yml +++ b/.github/workflows/manual_release_drafter.yml @@ -1,12 +1,8 @@ +--- name: Manual release-drafter update - on: workflow_dispatch: inputs: - author: - description: "Author" - required: true - default: "github-actions[bot] (user publishing release)" comments: description: "Update release drafter notes" @@ -16,11 +12,11 @@ jobs: steps: - name: Print workflow information run: | - echo "Author: ${{ github.event.inputs.author }}" - echo "Date: ${{ github.event.inputs.date }}" + echo "Author: ${{ github.triggering_actor }}" echo "Comments: ${{ github.event.inputs.comments }}" - - uses: actions/checkout@master + - name: Checkout main branch + uses: actions/checkout@v4 - name: Update changelog uses: release-drafter/release-drafter@v5 diff --git a/.github/workflows/push_container.yml b/.github/workflows/push_container.yml index f0acba28..3b2c3388 100644 --- a/.github/workflows/push_container.yml +++ b/.github/workflows/push_container.yml @@ -1,53 +1,18 @@ +--- # This workflow uses actions that are not certified by GitHub. # They are provided by a third-party and are governed by # separate terms of service, privacy policy, and support # documentation. name: Publish Docker image - -on: +on: workflow_dispatch: release: types: [published] jobs: push_to_registries: - name: Push Docker image to multiple registries - runs-on: ubuntu-latest - permissions: - packages: write - contents: read - steps: - - name: Check out the repo - uses: actions/checkout@master - - - name: Log in to Docker Hub - uses: docker/login-action@f054a8b539a109f9f41c372932f1ae047eff08c9 - with: - username: ${{ secrets.DOCKER_USERNAME }} - password: ${{ secrets.DOCKER_PASSWORD }} - - - name: Log in to the Container registry - uses: docker/login-action@f054a8b539a109f9f41c372932f1ae047eff08c9 - with: - registry: ghcr.io - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - - - name: Extract metadata (tags, labels) for Docker - id: meta - uses: docker/metadata-action@v4 - with: - images: | - ${{ github.repository }} - ghcr.io/${{ github.repository }} - flavor: | - latest=auto - - - name: Build and push Docker images - uses: docker/build-push-action@ad44023a93711e3deb337508980b4b5e9bcdc5dc - with: - context: . - push: true - tags: ${{ steps.meta.outputs.tags }} - labels: ${{ steps.meta.outputs.labels }} + uses: khanlab/actions/.github/workflows/workflow-release_task-deployDocker.yml@v0.3.2 + secrets: + DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} + DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} diff --git a/.github/workflows/python-testing.yml b/.github/workflows/python-testing.yml index af0efacb..88734d54 100644 --- a/.github/workflows/python-testing.yml +++ b/.github/workflows/python-testing.yml @@ -1,189 +1,136 @@ +--- # This workflow will install Python dependencies, run tests and lint with a variety of Python versions # For more information see: https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions -name: Python package - +name: Lint and test workflow on: push: workflow_dispatch: -# branches: [ main ] -# pull_request: -# branches: [ main ] jobs: - quality: runs-on: ubuntu-latest + steps: - - name: Clone repo - uses: actions/checkout@master - - name: Setup Python - uses: actions/setup-python@v4 - with: - python-version: '3.8' - - uses: actions/cache@v3 - with: - path: ~/.cache/pip - key: ${{ runner.os }}-pip-3.8 - restore-keys: ${{ runner.os }}-pip-3.8 - name: Install non-python dependencies run: | sudo apt-get install -y graphviz-dev - #---------------------------------------------- - # ----- install & configure poetry ----- - #---------------------------------------------- - - name: Install Poetry - uses: snok/install-poetry@v1 - with: - virtualenvs-create: true - virtualenvs-in-project: true - - name: Disable Poetry modern installation - run: | - poetry config installer.modern-installation false - #---------------------------------------------- - #---------------------------------------------- - # load cached venv if cache exists - #---------------------------------------------- - - name: Load cached venv - id: cached-poetry-dependencies - uses: actions/cache@v3 + + - name: Setup Python environment + uses: khanlab/actions/.github/actions/action-setup_task-installPyProject@v0.3.2 with: - path: .venv - key: venv-${{ runner.os }}-${{ hashFiles('**/poetry.lock') }}-3.8 - #---------------------------------------------- - # install dependencies if cache does not exist - #---------------------------------------------- - - name: Install dependencies - if: steps.cached-poetry-dependencies.outputs.cache-hit != 'true' - run: poetry install --no-interaction --no-root - #---------------------------------------------- - # install your root project, if required - #---------------------------------------------- - - name: Install library - run: poetry install --no-interaction - - #---------------------------------------------- - # run python style checks - #---------------------------------------------- + python-version: "3.9" + - name: isort run: poetry run isort hippunfold/*.py -c + - name: Black run: poetry run black hippunfold --check + - name: snakefmt run: poetry run snakefmt hippunfold --check - - test: + test: runs-on: ubuntu-latest - needs: [ 'quality' ] + needs: ["quality"] strategy: matrix: - python-version: ['3.8'] + python-version: ["3.7", "3.8", "3.9"] + steps: - - uses: actions/checkout@master - - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v3 - with: - python-version: ${{ matrix.python-version }} - - uses: actions/cache@v3 - with: - path: ~/.cache/pip - key: ${{ runner.os }}-pip-${{ matrix.python-version }} - restore-keys: ${{ runner.os }}-pip-${{ matrix.python-version }} - - name: Install non-python dependencies - run: | - sudo apt-get install -y graphviz-dev - #---------------------------------------------- - # ----- install & configure poetry ----- - #---------------------------------------------- - - name: Install Poetry - uses: snok/install-poetry@v1 - with: - virtualenvs-create: true - virtualenvs-in-project: true - - name: Disable Poetry modern installation - run: | - poetry config installer.modern-installation false - #---------------------------------------------- - # load cached venv if cache exists - #---------------------------------------------- - - name: Load cached venv - id: cached-poetry-dependencies - uses: actions/cache@v3 - with: - path: .venv - key: venv-${{ runner.os }}-${{ hashFiles('**/poetry.lock') }}-${{ matrix.python-version }} - #---------------------------------------------- - # install dependencies if cache does not exist - #---------------------------------------------- - - name: Install dependencies - if: steps.cached-poetry-dependencies.outputs.cache-hit != 'true' - run: poetry install --no-interaction --no-root - #---------------------------------------------- - # install your root project, if required - #---------------------------------------------- - - name: Install library - run: poetry install --no-interaction - - name: Set-up env for hippunfold - run: | - echo "HIPPUNFOLD_CACHE_DIR=`pwd`/test_data/fake_models" >> $GITHUB_ENV - - name: Test single T2w bids - run: | - poetry run hippunfold test_data/bids_singleT2w test_out participant -np --modality T2w - - name: Test running on existing folder - run: | - mkdir test_newout - poetry run hippunfold test_data/bids_singleT2w test_newout participant -np --modality T2w - - name: Test single T2w bids, right hemi - run: | - poetry run hippunfold test_data/bids_singleT2w test_out participant -np --modality T2w --hemi R - - name: Test single T2w bids, left hemi - run: | - poetry run hippunfold test_data/bids_singleT2w test_out participant -np --modality T2w --hemi L - - name: Test multiple T2w bids - run: | - poetry run hippunfold test_data/bids_multiT2w test_out participant -np --modality T2w - - name: Test T1w bids - run: | - poetry run hippunfold test_data/bids_T1w test_out participant -np --modality T1w - - name: Test hipp b500 bids - run: | - poetry run hippunfold test_data/bids_hippb500 test_out participant -np --modality hippb500 - - name: Test T1w multi-session/longitudinal bids - run: | - poetry run hippunfold test_data/bids_T1w_longitudinal test_out participant -np --modality T1w - - name: Test single T2w multi-session/longitudinal bids - run: | - poetry run hippunfold test_data/bids_singleT2w_longitudinal test_out participant -np --modality T2w - - name: Test manual seg T2w bids - run: | - poetry run hippunfold test_data/bids_segT2w test_out participant -np --modality segT2w - - name: Test cropseg bids, with path override - run: | - poetry 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: | - poetry run hippunfold . test_out participant -np --modality cropseg --path_cropseg test_data/data_cropseg_1hemi/sub-{subject}_hemi-{hemi}_dseg.nii.gz --hemi L - - name: Test T2w with T1w template registration - run: | - poetry run hippunfold test_data/bids_singleT2w test_out participant -np --modality T2w --t1_reg_template - - name: Test T2w with T1w output space - run: | - poetry run hippunfold test_data/bids_singleT2w test_out participant -np --modality T2w --output_space T1w - - name: Test modality T2w with myelin map - run: | - poetry run hippunfold test_data/bids_singleT2w test_out participant -np --modality T2w --generate-myelin-map - - name: Test modality T1w with myelin map - run: | - poetry run hippunfold test_data/bids_singleT2w test_out participant -np --modality T1w --generate-myelin-map - - name: Test modality T1w with magdeburg atlas - run: | - poetry run hippunfold test_data/bids_T1w test_out participant -np --modality T1w --atlas magdeburg - - name: Test modality T1w with freesurfer atlas - run: | - poetry run hippunfold test_data/bids_T1w test_out participant -np --modality T1w --atlas freesurfer + + - name: Install non-python dependencies + run: | + sudo apt-get install -y graphviz-dev + + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v3 + with: + python-version: ${{ matrix.python-version }} + + - name: Setup Python environments + uses: khanlab/actions/.github/actions/action-setup_task-installPyProject@v0.3.2 + with: + python-version: ${{ matrix.python-version }} + install-library: true + + - name: Setup env for hippunfold + run: | + echo "HIPPUNFOLD_CACHE_DIR=`pwd`/test_data/fake_models" >> $GITHUB_ENV + + - name: Test single T2w bids + run: | + poetry run hippunfold test_data/bids_singleT2w test_out participant -np --modality T2w + + - name: Test running on existing folder + run: | + mkdir test_newout + poetry run hippunfold test_data/bids_singleT2w test_newout participant -np --modality T2w + + - name: Test single T2w bids, right hemi + run: | + poetry run hippunfold test_data/bids_singleT2w test_out participant -np --modality T2w --hemi R + - name: Test single T2w bids, left hemi + run: | + poetry run hippunfold test_data/bids_singleT2w test_out participant -np --modality T2w --hemi L + + - name: Test multiple T2w bids + run: | + poetry run hippunfold test_data/bids_multiT2w test_out participant -np --modality T2w + + - name: Test T1w bids + run: | + poetry run hippunfold test_data/bids_T1w test_out participant -np --modality T1w + + - name: Test hipp b500 bids + run: | + poetry run hippunfold test_data/bids_hippb500 test_out participant -np --modality hippb500 + - name: Test T1w multi-session/longitudinal bids + run: | + poetry run hippunfold test_data/bids_T1w_longitudinal test_out participant -np --modality T1w + + - name: Test single T2w multi-session/longitudinal bids + run: | + poetry run hippunfold test_data/bids_singleT2w_longitudinal test_out participant -np --modality T2w + - name: Test manual seg T2w bids + run: | + poetry run hippunfold test_data/bids_segT2w test_out participant -np --modality segT2w + - name: Test cropseg bids, with path override + run: | + poetry 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: | + poetry run hippunfold . test_out participant -np --modality cropseg --path_cropseg test_data/data_cropseg_1hemi/sub-{subject}_hemi-{hemi}_dseg.nii.gz --hemi L + - name: Test T2w with T1w template registration + run: | + poetry run hippunfold test_data/bids_singleT2w test_out participant -np --modality T2w --t1_reg_template + + - name: Test T2w with T1w output space + run: | + poetry run hippunfold test_data/bids_singleT2w test_out participant -np --modality T2w --output_space T1w + + - name: Test modality T2w with myelin map + run: | + poetry run hippunfold test_data/bids_singleT2w test_out participant -np --modality T2w --generate-myelin-map + + - name: Test modality T1w with myelin map + run: | + poetry run hippunfold test_data/bids_singleT2w test_out participant -np --modality T1w --generate-myelin-map + + - name: Test modality T1w with magdeburg atlas + run: | + poetry run hippunfold test_data/bids_T1w test_out participant -np --modality T1w --atlas magdeburg + + - name: Test modality T1w with freesurfer atlas + run: | + poetry run hippunfold test_data/bids_T1w test_out participant -np --modality T1w --atlas freesurfer + + - name: Test modality T1w with bigbrain and freesurfer atlas + run: | + poetry run hippunfold test_data/bids_T1w test_out participant -np --modality T1w --atlas bigbrain freesurfer diff --git a/README.md b/README.md index fcdc6d03..37fb51d7 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,7 @@ [![Documentation Status](https://readthedocs.org/projects/hippunfold/badge/?version=latest)](https://hippunfold.readthedocs.io/en/latest/?badge=latest) ![Docker Pulls](https://img.shields.io/docker/pulls/khanlab/hippunfold) ![Version](https://img.shields.io/github/v/tag/khanlab/hippunfold?label=version) + **Full Documentation:** [here](https://hippunfold.readthedocs.io/en/latest/?badge=latest) @@ -8,7 +9,6 @@ This tool aims to automatically model the topological folding structure of the human hippocampus, and computationally unfold it. -https://raw.githubusercontent.com//khanlab/hippunfold/master/docs/images/subfields_foldunfold.png ![Hippo Fold Unfold](https://raw.githubusercontent.com//khanlab/hippunfold/master/docs/images/subfields_foldunfold.png) This is especially useful for: @@ -24,7 +24,7 @@ Major changes include the addition of unfolded space registration to a reference *Note: this replaces the default workflow, however you can revert to the legacy workflow, disabling unfolded space registration, by setting `--atlas bigbrain` or `--no-unfolded-reg`* -Read more in our [preprinted manuscript](https://www.biorxiv.org/content/10.1101/2023.03.30.534978v1) +Read more in our [ manuscript](https://doi.org/10.7554/eLife.88404.3) Also the ability to specify a new **experimental** UNet model that is contrast-agnostic using [synthseg](https://github.com/BBillot/SynthSeg) and trained using more detailed segmentations. This generally produces more detailed results but has not been extensively tested yet. @@ -45,11 +45,22 @@ For plotting, mapping fMRI, DWI or other data, and manipulating surfaces, see [h For statistical testing (spin tests) in unfolded space, see [here](https://github.com/Bradley-Karat/Hippo_Spin_Testing) -## Relevant papers: -- DeKraker, J., Palomero-Gallagher, N., Kedo, O., Ladbon-Bernasconi, N., Muenzing, S. E., Axer, M., ... & Evans, A. C. (2023). Evaluation of surface-based hippocampal registration using ground-truth subfield definitions. bioRxiv, 2023-03. [link](https://www.biorxiv.org/content/10.1101/2023.03.30.534978v1) +## Publications + +### HippUnfold methods paper + - DeKraker, J., Haast, R. A., Yousif, M. D., Karat, B., Lau, J. C., Köhler, S., & Khan, A. R. (2022). Automated hippocampal unfolding for morphometry and subfield segmentation with HippUnfold. Elife, 11, e77945. [link](https://doi.org/10.7554/eLife.77945) -- DeKraker J, Ferko KM, Lau JC, Köhler S, Khan AR. Unfolding the hippocampus: An intrinsic coordinate system for subfield segmentations and quantitative mapping. Neuroimage. 2018 Feb 15;167:408-418. doi: 10.1016/j.neuroimage.2017.11.054. Epub 2017 Nov 23. PMID: 29175494. [link](https://pubmed.ncbi.nlm.nih.gov/29175494/) -- DeKraker J, Lau JC, Ferko KM, Khan AR, Köhler S. Hippocampal subfields revealed through unfolding and unsupervised clustering of laminar and morphological features in 3D BigBrain. Neuroimage. 2020 Feb 1;206:116328. doi: 10.1016/j.neuroimage.2019.116328. Epub 2019 Nov 1. PMID: 31682982. [link](https://pubmed.ncbi.nlm.nih.gov/31682982/) + - **Please cite this if you use any version of HippUnfold)** + +### Unfolded space registration and multihist7 atlas +- DeKraker Jordan, Palomero-Gallagher Nicola, Kedo Olga, Ladbon-Bernasconi Neda, Muenzing Sascha E.A., Axer Markus, Amunts Katrin, Khan Ali R., Bernhardt Boris, Evans Alan C. (2023) Evaluation of surface-based hippocampal registration using ground-truth subfield definitions eLife 12:RP88404 [link](https://doi.org/10.7554/eLife.88404.3) + - **Please cite this if you use HippUnfold version >= 1.3.0)** + +### Commentary on surface-based hippocampal segmentation - DeKraker J, Köhler S, Khan AR. Surface-based hippocampal subfield segmentation. Trends Neurosci. 2021 Nov;44(11):856-863. doi: 10.1016/j.tins.2021.06.005. Epub 2021 Jul 22. PMID: 34304910. [link](https://pubmed.ncbi.nlm.nih.gov/34304910/) +### Related papers +- DeKraker J, Ferko KM, Lau JC, Köhler S, Khan AR. Unfolding the hippocampus: An intrinsic coordinate system for subfield segmentations and quantitative mapping. Neuroimage. 2018 Feb 15;167:408-418. doi: 10.1016/j.neuroimage.2017.11.054. Epub 2017 Nov 23. PMID: 29175494. [link](https://pubmed.ncbi.nlm.nih.gov/29175494/) +- DeKraker J, Lau JC, Ferko KM, Khan AR, Köhler S. Hippocampal subfields revealed through unfolding and unsupervised clustering of laminar and morphological features in 3D BigBrain. Neuroimage. 2020 Feb 1;206:116328. doi: 10.1016/j.neuroimage.2019.116328. Epub 2019 Nov 1. PMID: 31682982. [link](https://pubmed.ncbi.nlm.nih.gov/31682982/) +- Karat BG, DeKraker J, Hussain U, Köhler S, Khan AR. Mapping the macrostructure and microstructure of the in vivo human hippocampus using diffusion MRI. Hum Brain Mapp. 2023 Nov;44(16):5485-5503. Epub 2023 Aug 24. PMID: 37615057; PMCID: PMC10543110.[link](https://doi.org/10.1002/hbm.26461) diff --git a/docs/requirements.txt b/docs/requirements.txt index d4962a84..713e48d4 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -4,3 +4,4 @@ sphinx_rtd_theme>=1.0.0 snakebids>=0.4.0 myst-parser sphinxcontrib.asciinema +pulp<2.8.0 diff --git a/hippunfold/config/snakebids.yml b/hippunfold/config/snakebids.yml index 65ce94c9..537722da 100644 --- a/hippunfold/config/snakebids.yml +++ b/hippunfold/config/snakebids.yml @@ -128,7 +128,7 @@ parse_args: --version: help: 'Print the version of HippUnfold' action: version - version: "1.4.2-pre.29" + version: "1.4.2-pre.33" --modality: diff --git a/hippunfold/pipeline_description.json b/hippunfold/pipeline_description.json index a91e1e09..98c8da8f 100644 --- a/hippunfold/pipeline_description.json +++ b/hippunfold/pipeline_description.json @@ -5,7 +5,7 @@ "GeneratedBy": [ { "Name": "hippunfold", - "Version": "1.4.2-pre.29", + "Version": "1.4.2-pre.33", "CodeURL": "https://github.com/khanlab/hippunfold", "Author": "Jordan DeKraker & Ali Khan", "AuthorEmail": "ali.khan@uwo.ca" diff --git a/pyproject.toml b/pyproject.toml index 0d4d4527..a5c9fe54 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "hippunfold" -version = "1.4.2-pre.29" +version = "1.4.2-pre.33" description = "BIDS App for Hippocampal AutoTop (automated hippocampal unfolding and subfield segmentation)" authors = ["Jordan DeKraker & Ali Khan "]