Skip to content
Merged
Show file tree
Hide file tree
Changes from 48 commits
Commits
Show all changes
57 commits
Select commit Hold shift + click to select a range
b3ffee2
Bump version to 4.2.0dev
johandahlberg Jun 4, 2026
5050af7
Merge pull request #224 from nf-core/post-release-4.1.2
johandahlberg Jun 4, 2026
29edc94
update pna_graph_refinement_stage_leiden_resolution and pna_graph_ref…
ptajvar Jun 15, 2026
dbadda3
update CHANGELOG.md
ptajvar Jun 15, 2026
234b741
lower pna_graph_component_size_min_threshold for v2 test
ptajvar Jun 15, 2026
873851e
lower pna_graph_component_size_min_threshold for v2 test to 2
ptajvar Jun 15, 2026
cdaec15
set pna_graph_component_size_min_threshold to 10 for both v1 and v2
ptajvar Jun 15, 2026
17e0f0e
update to pixelator 0.29.0
elhb Jun 15, 2026
3109c73
update default layout wpmds_3d -> coarsened_pmds_3d
elhb Jun 15, 2026
c4c7089
Empty commit to retrigger tests
elhb Jun 16, 2026
ff5c27d
update confidence threshold to the new enrichment threshold
elhb Jun 17, 2026
da36081
update to latest pixelatorES version
elhb Jun 17, 2026
4cd4a45
update tests to use the prerelease v2 panel
elhb Jun 17, 2026
c5f74ef
fix: make test use the correct technology parameter i.e. proxiome-v2
elhb Jun 17, 2026
00ee092
update a missed test to use the prerelease v2 panel
elhb Jun 17, 2026
660d8ba
update ES test, denoise now on pool level before sample calling
elhb Jun 17, 2026
b9dfa13
fall back to wpmds_3d when components in test data are too small
elhb Jun 17, 2026
fdbc9be
fix pna_layout_layout_algorithm
elhb Jun 17, 2026
40dc85f
temporary change of test-data location to make sure tests pass with u…
elhb Jun 17, 2026
7fbe929
update snaps
elhb Jun 17, 2026
5b973d3
Merge branch 'dev' into update-to-pixelator-0.29.0
elhb Jun 17, 2026
f31b7a1
update changelog and output.md
elhb Jun 17, 2026
a398397
lint fix
elhb Jun 17, 2026
3ec7e58
set test pna_graph_component_size_min_threshold to 25
ptajvar Jun 18, 2026
8a9e5e4
point datasets to specific commit rather than branch (set point rathe…
elhb Jun 18, 2026
2d0dc1b
fix: point to commit sha on nf-core/test-datasets rather than branch …
elhb Jun 18, 2026
dcfa53a
Merge pull request #228 from nf-core/lock-test-dataset-version
elhb Jun 18, 2026
417c561
update test data paths
elhb Jun 22, 2026
6294d82
Merge branch 'dev' into update-to-pixelator-0.29.0
elhb Jun 22, 2026
feeaa9d
update commit sha
elhb Jun 22, 2026
3400962
Revert "temporary change of test-data location to make sure tests pas…
Aratz Jun 22, 2026
6375266
Merge pull request #227 from nf-core/update-to-pixelator-0.29.0
Aratz Jun 22, 2026
43edcd2
Update pixelatorES to 0.11.2
Aratz Jun 15, 2026
93de027
Merge remote-tracking branch 'origin/dev' into update-graph-refinemen…
Aratz Jun 22, 2026
7225268
Roll back graph parameters for test profile
Aratz Jun 22, 2026
a2470e2
Merge pull request #226 from nf-core/update-graph-refinement-default-…
Aratz Jun 22, 2026
cefd572
Save undetermined cells by default
Aratz Jun 23, 2026
a0de6b9
Condense ES debug output
Aratz Jun 29, 2026
d633901
Update Changelog
Aratz Jun 29, 2026
d326ca2
Update missing snapshots
Aratz Jun 29, 2026
e1fd7e8
Set save_pna_sample_calling_pixelfile on by default
Aratz Jun 30, 2026
14d2492
Revert save_pna_sample_calling_pixelfile to false by default
Aratz Jul 8, 2026
1d59754
Publish undetermined in root output
Aratz Jul 9, 2026
d1f9a45
Merge pull request #229 from Aratz/pna-2844/default_undetermined
Aratz Jul 9, 2026
9f71b4e
Clean-up changelog
Aratz Jul 13, 2026
28601cd
Bump version to 5.0.0
Aratz Jul 13, 2026
1b43d45
Load custom config
Aratz Jul 13, 2026
80b7c1e
Merge pull request #230 from Aratz/pre-release_5.0.0
Aratz Jul 13, 2026
15c7aad
Add missing changelog attributions
Aratz Jul 13, 2026
3270108
Fix typo
Aratz Jul 13, 2026
19a207a
Revert "Merge pull request #229 from Aratz/pna-2844/default_undetermi…
Aratz Jul 15, 2026
5a263af
Condense ES debug output
Aratz Jun 29, 2026
3941a11
Update changelog
Aratz Jul 15, 2026
9281070
Clean up obsolete snapshot
Aratz Jul 15, 2026
ca3d64d
Merge pull request #232 from Aratz/revert_undetermined
Aratz Jul 15, 2026
1d3f36e
Expose `pna_graph_component_size_max_threshold`
Aratz Jul 15, 2026
97c7107
Merge pull request #233 from Aratz/feature/expose_max_component_size
Aratz Jul 15, 2026
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
2 changes: 1 addition & 1 deletion .nf-core.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,4 +24,4 @@ template:
- fastqc
- multiqc
- igenomes
version: 4.1.2
version: 5.0.0
33 changes: 33 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,39 @@
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [[5.0.0](https://github.com/nf-core/pixelator/releases/tag/5.0.0)] - 2026-07-13

### Changed

- **(breaking change)** Rename `pna_sample_calling_confidence_threshold` to `pna_sample_calling_enrichment_threshold` to match pixelator 0.29.0. By @elhb [#227](https://github.com/nf-core/pixelator/pull/227)
- Change default layout algorithm from `wpmds_3d` to `coarsened_pmds_3d`. By @elhb [#227](https://github.com/nf-core/pixelator/pull/227)
- Change `pna_graph_refinement_stage_leiden_resolution` and `pna_graph_refinement_stage_max_edges_to_remove` default values
to 0.5, and 20 respectively based on latest evaluations. By @ptajvar [#226](https://github.com/nf-core/pixelator/pull/226)
- Set `pna_sample_calling_save_undetermined` by default and deliver the undetermined PXL file at the `pixelator/` output root, next to the final (layout) PXL files. By @Aratz [#229](https://github.com/nf-core/pixelator/pull/229)

### Enhancements & fixes

- Update pixelator container to 0.29.0
- Update pixelatorES to 0.11.2

### Software dependencies

| Dependency | Old version | New version |
| ------------- | ----------- | ----------- |
| `pixelator` | 0.28.0 | 0.29.0 |
| `pixelatorES` | 0.10.4 | 0.11.2 |

### Parameters

| Old parameter | New parameter |
| ----------------------------------------- | ----------------------------------------- |
| `pna_sample_calling_confidence_threshold` | `pna_sample_calling_enrichment_threshold` |

> [!NOTE]
> Parameter has been **updated** if both old and new parameter information is present.
> Parameter has been **added** if just the new parameter information is present.
> Parameter has been **removed** if new parameter information isn't present.

## [[4.1.2](https://github.com/nf-core/pixelator/releases/tag/4.1.2)] - 2026-06-04

### Enhancements & fixes
Expand Down
13 changes: 11 additions & 2 deletions conf/modules.pna.config
Original file line number Diff line number Diff line change
Expand Up @@ -160,15 +160,24 @@ process {
[
params.pna_sample_calling_remove_incompatible ? "--remove-incompatible" : '',
params.pna_sample_calling_save_undetermined ? "--save-undetermined" : '',
params.pna_sample_calling_confidence_threshold != null ? "--confidence-threshold ${params.pna_sample_calling_confidence_threshold}" : '',
params.pna_sample_calling_enrichment_threshold != null ? "--enrichment-threshold ${params.pna_sample_calling_enrichment_threshold}" : '',
].join(' ').trim()
}
publishDir = [
[
// Deliver the undetermined PXL file next to the final (layout) PXL files
path: { "${params.outdir}/pixelator" },
mode: params.publish_dir_mode,
pattern: 'sample_calling/*undetermined*.pxl',
saveAs: { filename -> params.pna_sample_calling_save_undetermined || params.save_all ? new File(filename).name : null },
],
[
// The undetermined PXL file is delivered at the pixelator root above, so
// exclude it here to avoid publishing it twice.
path: { "${params.outdir}/pixelator" },
mode: params.publish_dir_mode,
pattern: 'sample_calling/*.pxl',
saveAs: { params.save_pna_sample_calling_pixelfile || params.save_all ? it : null },
saveAs: { (params.save_pna_sample_calling_pixelfile || params.save_all) && !it.contains('undetermined') ? it : null },
],
[
path: { "${params.outdir}/pixelator/logs/${meta.id}" },
Expand Down
10 changes: 8 additions & 2 deletions conf/test_proxiome_v1.config
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,15 @@ params {

// Input data
input = params.pipelines_testdata_base_path + '/samplesheet/pna/samplesheet_proxiome_v1.csv'
input_basedir = params.pipelines_testdata_base_path + '/testdata/pna'
input_basedir = params.pipelines_testdata_base_path + '/new-test-data/pna'

pna_graph_component_size_min_threshold = 100
// Synthetic data was generated to pass with the test with lower than default resolution
pna_graph_refinement_stage_leiden_resolution = 0.01
pna_graph_component_size_min_threshold = 100

// Synthetic nf-core test datasets include components too small for
// coarsened_pmds_3d. Keep wpmds_3d in test profiles.
pna_layout_layout_algorithm = "wpmds_3d"

skip_layout = false
technology = "proxiome-v1"
Expand Down
12 changes: 9 additions & 3 deletions conf/test_proxiome_v2.config
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,16 @@ params {
config_profile_description = 'Minimal test dataset to check pipeline function'

// Input data
input = params.pipelines_testdata_base_path + '/samplesheet/pna/samplesheet_proxiome_v2.csv'
input_basedir = params.pipelines_testdata_base_path + '/testdata/pna'
input = params.pipelines_testdata_base_path + '/new-test-data/samplesheet/pna/samplesheet_proxiome_v2.csv'
input_basedir = params.pipelines_testdata_base_path + '/new-test-data/pna'

pna_graph_component_size_min_threshold = 100
// Synthetic data was generated to pass with the test with lower than default resolution
pna_graph_refinement_stage_leiden_resolution = 0.01
pna_graph_component_size_min_threshold = 100

// Synthetic nf-core test datasets include components too small for
// coarsened_pmds_3d. Keep wpmds_3d in test profiles.
pna_layout_layout_algorithm = "wpmds_3d"

skip_layout = false
technology = "proxiome-v2"
Expand Down
134 changes: 67 additions & 67 deletions docs/images/nf-core-pixelator-metromap.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
20 changes: 15 additions & 5 deletions docs/output.md
Original file line number Diff line number Diff line change
Expand Up @@ -151,19 +151,26 @@ This step uses the `pixelator single-cell-pna sample-calling` command. It takes
the graph PXL file and the sample sheet as input and assigns each component to
the most likely sample in pooled experiments.

Components with assignment confidence below the selected threshold are marked
as undetermined and can be saved to a separate output file. The resulting
per-sample dehashed PXL files are then used as input for the analysis step.
Components with sample enrichment below `pna_sample_calling_enrichment_threshold`
(default 10.0) are marked as undetermined and can be saved to a separate output
file. The resulting per-sample dehashed PXL files are then used as input for
the analysis step.

The undetermined components do not continue through the rest of the pipeline, so
their PXL file is delivered directly at the `pixelator/` root, next to the final
(layout) PXL files. This is only done when `pna_sample_calling_save_undetermined = true`
(the default). The intermediate per-sample dehashed PXL files continue downstream
and are only copied to the `sample_calling` folder when `save_pna_sample_calling_pixelfile = true`.

<details markdown="1">
<summary>Output files</summary>

- `pixelator`
- `<pool-id>_undetermined.dehashed.pxl`: The pixel file containing data that could not be associated with any sample. This is only output when `pna_sample_calling_save_undetermined = true`.
- `sample_calling`
- `<sample-id>.dehashed.pxl`: The pixel file containing the data associated with each samples.
- `<sample-id>.dehashed.pxl`: The pixel file containing the data associated with each samples. Only saved when `save_pna_sample_calling_pixelfile = true`.
- `<sample-id>.meta.json`: Command invocation metadata.
- `<sample-id>.report.json`: QC metrics for the sample calling step.
- `<pool-id>_undetermined.dehashed.pxl`: The pixel file containing data that could not be associated with any sample. This is only output when `pna_sample_calling_save_undetermined = true`.
- `<pool-id>_undetermined.meta.json`: Command invocation metadata.
- `<pool-id>_undetermined.report.json`: QC metrics for the sample calling step.

Expand Down Expand Up @@ -257,6 +264,8 @@ generated by the pipeline (with the most "complete" information) and an interact
The PXL dataset files can be from either the `graph`, `analysis` or `layout` step.

With default parameters, the `<sample-id>.layout.pxl` will be copied to the output directory.
The `<pool-id>_undetermined.dehashed.pxl` file is also delivered here by default, since these
components are not processed any further by the pipeline.

Various flags are available to store intermediate files and are described in the input parameter documentation. Alternatively, you can keep all intermediate files using `--save_all`.

Expand All @@ -275,3 +284,4 @@ Below is an example output structure for a pipeline run using the default settin
- `pbmcs_unstimulated.qc-report.html`
- `uropod_control.layout.pxl`
- `uropod_control.qc-report.html`
- `<pool-id>_undetermined.dehashed.pxl`
25 changes: 16 additions & 9 deletions modules/local/experiment_summary/main.nf
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ process EXPERIMENT_SUMMARY {
label "error_retry"

container "${params.experiment_summary_container?: workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container
? 'quay.io/pixelgen-technologies/pixelatores:0.10.4'
: 'quay.io/pixelgen-technologies/pixelatores:0.10.4'}"
? 'quay.io/pixelgen-technologies/pixelatores:0.11.2'
: 'quay.io/pixelgen-technologies/pixelatores:0.11.2'}"

input:
path samplesheet_path
Expand All @@ -22,17 +22,24 @@ process EXPERIMENT_SUMMARY {
assert results_data instanceof List : "Expected results_data to be a List, got ${results_data?.getClass()?.simpleName ?: 'null'}"
assert results_data.size() == result_stages.size(): "Mismatch between result files (${results_data.size()}) and stage labels (${result_stages.size()})"

def stageCopies = [result_stages, results_data].transpose().collect { stage, file ->
"""
mkdir -p "results/${stage}"
ln -s "../../${file}" "results/${stage}/"
"""
}.join('\n')
def stageArray = result_stages.collect { "\"${it}\"" }.join(' ')
"""
# Copy the full quarto dir from the read-only image into the workdir
cp -r /workspace/inst/quarto/ ./quarto/
mkdir -p results
${stageCopies}

# Stage each result file into results/<stage>/. Files are staged into
# results_raw/1, results_raw/2, ... in the same order as the stage names.
stages=(${stageArray})
for i in "\${!stages[@]}"; do
idx=\$((i + 1))
dest="results/\${stages[\$i]}"
mkdir -p "\$dest"
for f in "results_raw/\${idx}"/*; do
ln -s "../../\$f" "\$dest/"
done
done

quarto render ./quarto/pixelatorES.qmd \\
-P sample_sheet="\$PWD/${samplesheet_path}" \\
-P data_folder="\$PWD/results/" \\
Expand Down
Loading
Loading