Skip to content
Merged
Show file tree
Hide file tree
Changes from 26 commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
94e0e36
update pipeline level test
CaroAMN Aug 27, 2025
ab0542d
update subworkflows + modules, update meta.yml of numorph subworkflows
CaroAMN Aug 27, 2025
44543df
update stub pipeline test
CaroAMN Aug 27, 2025
48e6e39
update snapshots pipeline level tests, update config files
CaroAMN Aug 27, 2025
bb0c650
update pipeline level test + snapshot
CaroAMN Aug 28, 2025
500cea6
update preprocess snapshots
CaroAMN Aug 29, 2025
b8ae277
update all modules and subworkflow tests
CaroAMN Aug 29, 2025
4806886
update snapshots + nftignore
CaroAMN Aug 29, 2025
0e634df
update test config
CaroAMN Aug 30, 2025
fe77cd4
update config
CaroAMN Aug 30, 2025
1c80693
update test profile
CaroAMN Sep 1, 2025
a5494c3
update snapshot pipeline level tests
CaroAMN Sep 1, 2025
2b23657
fix nf-test-gpu.yml
CaroAMN Sep 1, 2025
4c943b0
update modules + container images
CaroAMN Sep 2, 2025
8f8b5f1
update nftignore, subworkflow(test)
CaroAMN Sep 3, 2025
f37b9bb
debug statements
CaroAMN Sep 4, 2025
7406876
profile gpu in test file
CaroAMN Sep 4, 2025
7393310
profile test,gpu in test file
CaroAMN Sep 4, 2025
70c77b5
remove nextflow config in test
CaroAMN Sep 4, 2025
669b9ac
config file
CaroAMN Sep 4, 2025
165b3c4
add gpu profile to test
CaroAMN Sep 5, 2025
4b41cb6
reset profiles in default test + add svg metromap +hirse promo badge
CaroAMN Sep 5, 2025
27f44f1
profile test in test script, deleted obsolete config test_gpu
CaroAMN Sep 11, 2025
7fdbd45
lint
CaroAMN Sep 11, 2025
61f7e6d
add nextflow debug var and get conatiner launch information...
CaroAMN Sep 11, 2025
afd820f
find nextflow log on ci
CaroAMN Sep 11, 2025
4159eeb
removed pwd + resolved symlinks for registration and resampling modul…
CaroAMN Sep 22, 2025
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
13 changes: 12 additions & 1 deletion .github/workflows/nf-test-gpu.yml
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ jobs:
needs.get-shards.outputs.total_shards > 0 &&
(
github.event_name != 'push' ||
( github.event_name == 'push' && github.repository == 'nf-core/methylseq' )
( github.event_name == 'push' && github.repository == 'nf-core/lsmquant' )
)
strategy:
fail-fast: false
Expand All @@ -88,6 +88,13 @@ jobs:
with:
fetch-depth: 0

- name: Test CUDA
run: |
nvidia-smi -L

- name: Enable Nextflow debug logging
run: echo "NXF_DEBUG=2" >> $GITHUB_ENV

- name: Run nf-test Action
uses: ./.github/actions/nf-test
with:
Expand All @@ -97,6 +104,10 @@ jobs:
filters: ${{ matrix.filters }}
tags: "gpu"

- name: Show Singularity run commands
run: |
find . -name ".nextflow.log" -exec grep "singularity exec" {} + || echo "No singularity exec found"

confirm-pass:
runs-on:
- runs-on=${{ github.run_id }}-confirm-pass
Expand Down
3 changes: 2 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,14 @@
[![Launch on Seqera Platform](https://img.shields.io/badge/Launch%20%F0%9F%9A%80-Seqera%20Platform-%234256e7)](https://cloud.seqera.io/launch?pipeline=https://github.com/nf-core/lsmquant)

[![Get help on Slack](http://img.shields.io/badge/slack-nf--core%20%23lsmquant-4A154B?labelColor=000000&logo=slack)](https://nfcore.slack.com/channels/lsmquant)[![Follow on Bluesky](https://img.shields.io/badge/bluesky-%40nf__core-1185fe?labelColor=000000&logo=bluesky)](https://bsky.app/profile/nf-co.re)[![Follow on Mastodon](https://img.shields.io/badge/mastodon-nf__core-6364ff?labelColor=FFFFFF&logo=mastodon)](https://mstdn.science/@nf_core)[![Watch on YouTube](http://img.shields.io/badge/youtube-nf--core-FF0000?labelColor=000000&logo=youtube)](https://www.youtube.com/c/nf-core)
![HiRSE Code Promo Badge](https://img.shields.io/badge/Promo-8db427?style=plastic&label=HiRSE&labelColor=005aa0&link=https%3A%2F%2Fgo.fzj.de%2FCodePromo)

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I got an email that says:

[...] The selected style seems to affect the size.
To fix that, please remove the 'style=plastic&' from the link to the badge's image (retaining the leading '?')
![HiRSE Code Promo Badge](https://img.shields.io/badge/Promo-8db427?label=HiRSE&labelColor=005aa0&link=https%3A%2F%2Fgo.fzj.de%2FCodePromo)

Not sure if thats really an improvement though

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

will change it in the next PR :)


## Introduction

**nf-core/lsmquant** is a bioinformatics pipeline that performs preprocessing and analysis of light-sheet microscopy images of tissue cleard samples. The pipeline takes 2D single-channel 16-bit `.tif` images as input. The preprocessing consists of intesity adjustment, channel alignemnt, and tile stitching to reconstruct the 3D image. For mousebrain samples it offers a regsitration to the Allen Mouse Brain Reference Atlas for precise region annotation. Cell nuclei quantification is perfomed on the nuclear channel by a 3D-Unet.

<div style="text-align: center;">
<img src="docs/images/lsmquant.png" alt="lasmquant metromap">
<img src="docs/images/lsmquant-metromap.svg" alt="lasmquant metromap">
</div>

### Basic workflow
Expand Down
114 changes: 21 additions & 93 deletions conf/modules.config
Original file line number Diff line number Diff line change
Expand Up @@ -30,174 +30,102 @@ process {
saveAs: { filename -> filename.equals('versions.yml') ? null : filename }
]
}

/*
withName: 'MAT2JSON' {
publishDir = [
path: { "${params.outdir}/${meta.id}/mat2json" },
mode: params.publish_dir_mode
]
}
*/

withName: 'NUMORPHINTENSITY' {
publishDir = [
path: { "${params.outdir}/${meta.id}/intensity/samples" },
mode: params.publish_dir_mode,
pattern: 'results/samples/intensity_adjustment/*',
saveAs: { filename ->
if (filename.equals('versions.yml')) {
null
} else {
filename.replaceFirst('^results/samples/intensity_adjustment/', 'samples/intensity_adjustment/')
}
}
]
publishDir = [
path: { "${params.outdir}/${meta.id}/intensity/variables" },
path: { "${params.outdir}/numorphintensity/" },
mode: params.publish_dir_mode,
pattern: 'results/variables/*',
pattern: 'results/**/*',
saveAs: { filename ->
if (filename.equals('versions.yml')) {
null
} else {
filename.replaceFirst('^results/variables/', 'variables/')
filename.replaceFirst("^results/", "${meta.id}/")
}
}
]
publishDir = [
path: { "${params.outdir}/${meta.id}/intensity/" },
mode: params.publish_dir_mode,
saveAs: { filename -> filename.equals('versions.yml') ? null : filename }

]

}

withName: 'NUMORPHALIGN' {
publishDir = [
path: { "${params.outdir}/${meta.id}/alignment/samples" },
path: { "${params.outdir}/numorphalign/" },
mode: params.publish_dir_mode,
pattern: 'results/samples/alignment/*',
pattern: 'results/**/*',
saveAs: { filename ->
if (filename.equals('versions.yml')) {
null
} else {
filename.replaceFirst('^results/samples/alignment/', 'samples/alignment/')
filename.replaceFirst("^results/", "${meta.id}/")
}
}
]
publishDir = [
path: { "${params.outdir}/${meta.id}/alignment/variables" },
mode: params.publish_dir_mode,
pattern: 'results/variables/*',
saveAs: { filename ->
if (filename.equals('versions.yml')) {
null
} else {
filename.replaceFirst('^results/variables/', 'variables/')
}
}
]
publishDir = [
path: { "${params.outdir}/${meta.id}/alignment/" },
mode: params.publish_dir_mode,
saveAs: { filename -> filename.equals('versions.yml') ? null : filename }
]
}

withName: 'NUMORPHSTITCH' {
publishDir = [
path: { "${params.outdir}/${meta.id}/stitching/variables" },
path: { "${params.outdir}/numorphstitch/" },
mode: params.publish_dir_mode,
pattern: 'results/variables/*',
pattern: 'results/**/*',
saveAs: { filename ->
if (filename.equals('versions.yml')) {
null
} else {
filename.replaceFirst('^results/variables/', 'variables/')
filename.replaceFirst("^results/", "${meta.id}/")
}
}
]
publishDir = [
path: { "${params.outdir}/${meta.id}/stitching/stitched" },
mode: params.publish_dir_mode,
pattern: 'results/stitched/*',
saveAs: { filename ->
if (filename.equals('versions.yml')) {
null
} else {
filename.replaceFirst('^results/stitched/', 'stitched/')
}
}
]
publishDir = [
path: { "${params.outdir}/${meta.id}/stitching/" },
mode: params.publish_dir_mode,
saveAs: { filename -> filename.equals('versions.yml') ? null : filename }
]
}

withName: 'NUMORPHRESAMPLE' {
publishDir = [
path: { "${params.outdir}/${meta.id}/resampling/resampled/" },
path: { "${params.outdir}/numorphresample/" },
mode: params.publish_dir_mode,
pattern: 'results/resampled/*',
pattern: 'results/**/*',
saveAs: { filename ->
if (filename.equals('versions.yml')) {
null
} else {
filename.replaceFirst('^results/resampled/', 'resampled/')
filename.replaceFirst("^results/", "${meta.id}/")
}
}
]
publishDir = [
path: { "${params.outdir}/${meta.id}/resampling/" },
mode: params.publish_dir_mode,
saveAs: { filename -> filename.equals('versions.yml') ? null : filename }
]
}
withName: 'NUMORPHREGISTER' {
publishDir = [
path: { "${params.outdir}/${meta.id}/register/registered/" },
path: { "${params.outdir}/numorphregister/" },
mode: params.publish_dir_mode,
pattern: 'results/registered/*',
pattern: 'results/**/*',
saveAs: { filename ->
if (filename.equals('versions.yml')) {
null
} else {
filename.replaceFirst('^results/registered/', 'registered/')
filename.replaceFirst("^results/", "${meta.id}/")
}
}
]
publishDir = [
path: { "${params.outdir}/${meta.id}/register/variables" },
mode: params.publish_dir_mode,
pattern: 'results/variables/*',
saveAs: { filename ->
if (filename.equals('versions.yml')) {
null
} else {
filename.replaceFirst('^results/variables/', 'variables/')
}
}
]
publishDir = [
path: { "${params.outdir}/${meta.id}/register/" },
mode: params.publish_dir_mode,
saveAs: { filename -> filename.equals('versions.yml') ? null : filename }
]
}
withName: 'NUMORPH3DUNET' {
publishDir = [
path: { "${params.outdir}/${meta.id}/segmentation/" },
path: { "${params.outdir}/numorph3dunet/" },
mode: params.publish_dir_mode,
pattern: 'results/*',
saveAs: { filename ->
if (filename.equals('versions.yml')) {
null
}
else {
filename.replaceFirst('^results/', '')
filename.replaceFirst("^results/", "${meta.id}/")
}
}
]
}

}
9 changes: 8 additions & 1 deletion conf/test.config
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,18 @@ process {
memory: '15.GB',
time: '1.h'
]

withLabel: process_gpu {
ext.use_gpu = true
accelerator = 1
//containerOptions = { workflow.containerEngine == 'docker' ? '--gpus all' : '--nv' }
memory = { 15.GB * task.attempt }
}
}

params {
config_profile_name = 'Test profile'
config_profile_description = 'Minimal test dataset to check pipeline function'
input = params.pipelines_testdata_base_path + '/test_data/samplesheets/sample_sheet.csv'
stage = 'preprocessing'
stage = 'full'
}
33 changes: 0 additions & 33 deletions conf/test_gpu.config

This file was deleted.

4 changes: 4 additions & 0 deletions docs/images/lsmquant-metromap.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file removed docs/images/lsmquant.png
Binary file not shown.
12 changes: 6 additions & 6 deletions modules.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
"nf-core": {
"basicpy": {
"branch": "master",
"git_sha": "666652151335353eef2fcd58880bcef5bc2928e1",
"git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46",
"installed_by": ["modules"]
},
"fastqc": {
Expand All @@ -17,12 +17,12 @@
},
"multiqc": {
"branch": "master",
"git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46",
"git_sha": "a4488d3d09244f29fb4606ba4eef85d59dcc6ad8",
"installed_by": ["modules"]
},
"unzip": {
"branch": "master",
"git_sha": "81880787133db07d9b4c1febd152c090eb8325dc",
"git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46",
"installed_by": ["modules"]
},
"unzipfiles": {
Expand All @@ -36,17 +36,17 @@
"nf-core": {
"utils_nextflow_pipeline": {
"branch": "master",
"git_sha": "c2b22d85f30a706a3073387f30380704fcae013b",
"git_sha": "05954dab2ff481bcb999f24455da29a5828af08d",
"installed_by": ["subworkflows"]
},
"utils_nfcore_pipeline": {
"branch": "master",
"git_sha": "51ae5406a030d4da1e49e4dab49756844fdd6c7a",
"git_sha": "05954dab2ff481bcb999f24455da29a5828af08d",
"installed_by": ["subworkflows"]
},
"utils_nfschema_plugin": {
"branch": "master",
"git_sha": "2fd2cd6d0e7b273747f32e465fdc6bcc3ae0814e",
"git_sha": "dcd088f483cede0c3df4034d405126f05a764cc7",
"installed_by": ["subworkflows"]
}
}
Expand Down
2 changes: 1 addition & 1 deletion modules/local/mat2json/main.nf
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ process MAT2JSON {
"""
mkdir -p ${process}
for matfile in ${matfiles.join(' ')}; do
/usr/bin/mlrtapp/mat2json \$matfile
mat2json \$matfile
done

mv -f *.json ${process}/ 2>/dev/null || true
Expand Down
Loading
Loading