Skip to content

Commit

Permalink
initial nf-neuro commit (following nf-scil:PR#54)
Browse files Browse the repository at this point in the history
  • Loading branch information
anroy1 committed Sep 30, 2024
1 parent 28d2a37 commit 99ff581
Show file tree
Hide file tree
Showing 6 changed files with 194 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
name: "registration_synthregistration"
channels:
- Docker
- Apptainer
dependencies:
- "Freesurfer:synthmorph"
63 changes: 63 additions & 0 deletions modules/nf-neuro/registration/synthregistration/main.nf
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
process REGISTRATION_SYNTHREGISTRATION {
tag "$meta.id"
label 'process_single'

container "freesurfer/synthmorph:3"
containerOptions "--entrypoint ''"

input:
tuple val(meta), path(moving), path(fixed)

output:
tuple val(meta), path("*__output_warped.nii.gz"), emit: warped_image
tuple val(meta), path("*__deform_warp.nii.gz"), emit: deform_transform
tuple val (meta), path("*__init_warp.lta"), emit: init_transform
path "versions.yml" , emit: versions

when:
task.ext.when == null || task.ext.when

script:
def args = task.ext.args ?: ''
def prefix = task.ext.prefix ?: "${meta.id}"

def init = task.ext.init ? "-m " + task.ext.init : "-m affine"
def warp = task.ext.warp ? "-m " + task.ext.warp : "-m deform"
def header = task.ext.header ? "-H" : ""
def gpu = task.ext.gpu ? "-g" : ""
def lambda = task.ext.lambda ? "-r " + task.ext.lambda : ""
def steps = task.ext.steps ? "-n " + task.ext.steps : ""
def extent = task.ext.extent ? "-e " + task.ext.extent : ""
def weight = task.ext.weight ? "-w " + task.ext.weight : ""

"""
export ITK_GLOBAL_DEFAULT_NUMBER_OF_THREADS=1
export OMP_NUM_THREADS=1
export OPENBLAS_NUM_THREADS=1
mri_synthmorph -j $task.cpus ${init} -t ${prefix}__init_warp.lta $moving $fixed
mri_synthmorph -j $task.cpus ${warp} ${gpu} ${lambda} ${steps} ${extent} ${weight} -i ${prefix}__init_warp.lta -t ${prefix}__deform_warp.nii.gz -o ${prefix}__output_warped.nii.gz $moving $fixed
cat <<-END_VERSIONS > versions.yml
"${task.process}":
Freesurfer: 7.4
END_VERSIONS
"""

stub:
def args = task.ext.args ?: ''
def prefix = task.ext.prefix ?: "${meta.id}"

"""
mri_synthmorph -h
touch ${prefix}__output_warped.nii.gz
touch ${prefix}__deform_warp.nii.gz
touch ${prefix}__init_warp.lta
cat <<-END_VERSIONS > versions.yml
"${task.process}":
Freesurfer: 7.4
END_VERSIONS
"""
}
58 changes: 58 additions & 0 deletions modules/nf-neuro/registration/synthregistration/meta.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
---
name: "registration_synthregistration"
description: Perform registration using SynthMorph from Freesurfer. Outputs transforms in Freesurfer format .lta for affine and .nii.gz (synthmorph also supports .mgz) for deform, both in RAS orientation, which can be converted for ANTs with respectively lta_convert and mri_warp_convert, which support a wide range of conversion formats and orientations. Conversion can be processed using the registration/convert module which can be used successively to this one.
keywords:
- registration
- Brain imaging
- MRI
tools:
- "Freesurfer":
description: "Freesurfer Synthmorph"
homepage: "https://martinos.org/malte/synthmorph/"

input:
- meta:
type: map
description: |
Groovy Map containing sample information
e.g. `[ id:'test', single_end:false ]`
- moving:
type: file
description: Nifti volume moving for registration
pattern: "*.{nii,nii.gz}"

- fixed:
type: file
description: Nifti volume fixed for registration
pattern: "*.{nii,nii.gz}"

output:
- meta:
type: map
description: |
Groovy Map containing sample information
e.g. `[ id:'test', single_end:false ]`
- init_transform:
type: file
description: Affine transform for initialization
pattern: "*.{lta}"

- deform_transform:
type: file
description: Deform transformation
pattern: "*.{nii.gz}"

- warped_image:
type: file
description: Warped image
pattern: "*.{nii,.nii.gz}"

- versions:
type: file
description: File containing software versions
pattern: "versions.yml"

authors:
- "@anroy1"
53 changes: 53 additions & 0 deletions modules/nf-neuro/registration/synthregistration/tests/main.nf.test
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
nextflow_process {

name "Test Process REGISTRATION_SYNTHREGISTRATION"
script "../main.nf"
process "REGISTRATION_SYNTHREGISTRATION"

tag "modules"
tag "modules_nfcore"
tag "registration"
tag "registration/synthregistration"

tag "subworkflows"
tag "subworkflows/load_test_data"

setup {
run("LOAD_TEST_DATA", alias: "LOAD_DATA") {
script "../../../../../subworkflows/nf-scil/load_test_data/main.nf"
process {
"""
input[0] = Channel.from( [ "freesurfer.zip" ] )
input[1] = "test.load-test-data"
"""
}
}
}

test("registration - synthregistration") {
config "./nextflow.config"
when {
process {
"""
input[0] = LOAD_DATA.out.test_data_directory
.map{ test_data_directory -> [
[ id:'test', single_end:false ],
file("\${test_data_directory}/t1.nii.gz"),
file("\${test_data_directory}/fa.nii.gz")
]}
"""
}
}
then {
assertAll(
{ assert process.success },
{ assert snapshot(
niftiMD5SUM(process.out.warped_image.get(0).get(1)),
niftiMD5SUM(process.out.deform_transform.get(0).get(1)),
process.out.init_transform,
process.out.versions
).match() }
)
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
process {
withName: "REGISTRATION_SYNTHREGISTRATION" {
publishDir = { "${params.outdir}/${task.process.tokenize(':')[-1].tokenize('_')[0].toLowerCase()}" }
memory = 20
ext.init = "affine"
ext.warp = "deform"
ext.threads = 1
ext.lambda = 0.9
ext.steps = 9
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
registration/synthregistration:
- "modules/nf-neuro/registration/synthregistration/**"

0 comments on commit 99ff581

Please sign in to comment.