Build branch build/main with version build_main (491efce)

Build pipeline: openpipelines-bio.openpipeline-spatial.build-main-kj8js

Source commit: 491efceaaf

Source message: deploy: 7f820d2607f3e1fabc0183915d1bb427715e18ae
This commit is contained in:
CI
2025-07-10 12:45:04 +00:00
parent 4d10ea15db
commit 096d01f274
31 changed files with 7789 additions and 27 deletions

5
CHANGELOG.md Normal file
View File

@@ -0,0 +1,5 @@
# openpipeline_spatial 0.0.0
## NEW FUNCTIONALITY
* `mapping/spaceranger_count`: Added a spaceranger count component (PR #2).

View File

@@ -0,0 +1,19 @@
#!/bin/bash
set -eo pipefail
# get the root of the directory
REPO_ROOT=$(git rev-parse --show-toplevel)
# ensure that the command below is run from the root of the repository
cd "$REPO_ROOT"
DIR="resources_test/GRCh38"
mkdir -p $DIR
aws s3 sync \
--profile di \
s3://openpipelines-bio/openpipeline_spatial/resources_test/GRCh38 \
"$DIR" \
--delete \
--dryrun

View File

@@ -0,0 +1,35 @@
#!/bin/bash
set -eo pipefail
# get the root of the directory
REPO_ROOT=$(git rev-parse --show-toplevel)
# Define absolute directory path
DIR="$REPO_ROOT/resources_test/visium"
# from https://www.10xgenomics.com/resources/datasets/human-ovarian-cancer-1-standard
mkdir -p "$DIR"
# Input Files - download to the specific directory
curl -o "$DIR/Visium_FFPE_Human_Ovarian_Cancer_fastqs.tar" https://cf.10xgenomics.com/samples/spatial-exp/1.3.0/Visium_FFPE_Human_Ovarian_Cancer/Visium_FFPE_Human_Ovarian_Cancer_fastqs.tar
curl -o "$DIR/Visium_FFPE_Human_Ovarian_Cancer_image.jpg" https://cf.10xgenomics.com/samples/spatial-exp/1.3.0/Visium_FFPE_Human_Ovarian_Cancer/Visium_FFPE_Human_Ovarian_Cancer_image.jpg
curl -o "$DIR/Visium_FFPE_Human_Ovarian_Cancer_probe_set.csv" https://cf.10xgenomics.com/samples/spatial-exp/1.3.0/Visium_FFPE_Human_Ovarian_Cancer/Visium_FFPE_Human_Ovarian_Cancer_probe_set.csv
# Extract in the specific directory
tar xvf "$DIR/Visium_FFPE_Human_Ovarian_Cancer_fastqs.tar" -C "$DIR"
# Create subsampled dataset with ImageMagick
# https://imagemagick.org/index.php
mkdir -p "$DIR/subsampled"
convert "$DIR/Visium_FFPE_Human_Ovarian_Cancer_image.jpg" -resize 2000x2000 "$DIR/subsampled/Visium_FFPE_Human_Ovarian_Cancer_image.jpg"
for f in "$DIR"/Visium_FFPE_Human_Ovarian_Cancer_fastqs/*L001*R*; do
gzip -cdf "$f" | head -n 40000 | gzip -c > "$DIR/subsampled/$(basename "$f")";
done
aws s3 sync \
--profile di \
"$DIR" \
s3://openpipelines-bio/openpipeline_spatial/resources_test/visium \
--delete \
--dryrun

View File

@@ -5,12 +5,10 @@ set -eo pipefail
# get the root of the directory # get the root of the directory
REPO_ROOT=$(git rev-parse --show-toplevel) REPO_ROOT=$(git rev-parse --show-toplevel)
# ensure that the command below is run from the root of the repository # Define absolute directory paths
cd "$REPO_ROOT" DIR="$REPO_ROOT/resources_test/xenium"
DIR="resources_test/xenium/"
ID="xenium_tiny" ID="xenium_tiny"
OUT="$DIR/$ID/" OUT="$DIR/$ID"
# create tempdir # create tempdir
MY_TEMP="${VIASH_TEMP:-/tmp}" MY_TEMP="${VIASH_TEMP:-/tmp}"
@@ -29,11 +27,11 @@ if [ ! -d "$OUT" ]; then
mv "$TMPDIR/xenium_tiny/Xenium_Prime_Mouse_Ileum_tiny_outs/"* "$OUT/" mv "$TMPDIR/xenium_tiny/Xenium_Prime_Mouse_Ileum_tiny_outs/"* "$OUT/"
fi fi
viash run src/convert/from_xenium_to_spatialdata/config.vsh.yaml -- \ viash run "$REPO_ROOT/src/convert/from_xenium_to_spatialdata/config.vsh.yaml" -- \
--input "$OUT" \ --input "$OUT" \
--output "$DIR/$ID.zarr" --output "$DIR/$ID.zarr"
viash run src/convert/from_spatialdata_to_h5mu/config.vsh.yaml -- \ viash run "$REPO_ROOT/src/convert/from_spatialdata_to_h5mu/config.vsh.yaml" -- \
--input "$DIR/$ID.zarr" \ --input "$DIR/$ID.zarr" \
--output "$DIR/$ID.h5mu" --output "$DIR/$ID.h5mu"

View File

@@ -0,0 +1,208 @@
name: spaceranger_count
namespace: mapping
description: Count gene expression and protein expression reads from a single capture area.
keywords: [spaceranger]
links:
documentation: https://www.10xgenomics.com/support/software/space-ranger/latest/analysis/running-pipelines/space-ranger-count
authors:
- __merge__: /src/authors/jakub_majercik.yaml
roles: [ author ]
argument_groups:
- name: Inputs
arguments:
- type: file
name: --gex_reference
required: true
description: Path of folder containing 10x-compatible reference
example: "/path/to/refdata-gex-GRCh38-2020-A"
- type: file
name: --input
required: true
description: |
Path to a directory containing input FASTQ data. Individual FASTQ files should follow the naming convention of 10x Genomics:
[Sample Name]_S[Sample Number]_L[Lane Number]_[Read Type]_001.fastq.gz
Where:
[Sample Name] is the name assigned during sample preparation/sequencing
S[Sample Number] is the sample index (usually S1, S2, etc.)
L[Lane Number] identifies the sequencing lane (L001, L002, etc.)
[Read Type] will be one of:
R1 - Read 1 (contains the spatial barcode and UMI)
R2 - Read 2 (contains the actual cDNA sequence)
I1 - Index Read 1 (if applicable)
I2 - Index Read 2 (if applicable)
example: "/path/to/fastq_folder"
- type: file
name: --probe_set
required: true
description: CSV file specifying the probe set used
example: "Visium_Human_Transcriptome_Probe_Set_v2.0_GRCh38-2020-A.csv"
- type: file
name: --cytaimage
required: false
description: |
Brightfield image generated by the CytAssist instrument.
When using CytAssist workflow, either this or --image must be provided.
example: "cyta_image.tif"
- type: file
name: --image
required: false
description: |
H&E or fluorescence microscope image in TIFF or JPG format.
Required for standard Visium workflow, optional when using --cytaimage for CytAssist workflow.
example: "brightfield.tif"
- name: Outputs
arguments:
- type: file
name: --output
required: true
direction: output
description: The folder to store the alignment results
example: "/path/to/output"
- name: Slide Information
arguments:
- type: string
name: --slide
description: Visium slide serial number (e.g., 'V10J25-015')
required: false
example: "V10J25-015"
- type: string
name: --area
description: Visium capture area identifier (e.g., 'A1')
required: false
example: "A1"
- type: string
name: --unknown_slide
description: |
Use this option if the slide serial number and area were entered incorrectly on the CytAssist
instrument and the correct values are unknown. Not compatible with --slide, --area, or
--slide-file options
required: false
choices: [visium-1, visium-2, visium-2-large, visium-hd]
- type: file
name: --slidefile
description: Slide design file for offline use
required: false
example: "slide_design.gpr"
- type: boolean_true
name: --override_id
description: Overrides the slide serial number and capture area provided in the Cytassist image metadata
- name: Image Options
arguments:
- type: file
name: --darkimage
description: Multi-channel, dark-background fluorescence image
required: false
example: "fluorescence.tif"
- type: file
name: --colorizedimage
description: Color image representing pre-colored dark-background fluorescence images
required: false
example: "colored_fluorescence.tif"
- type: integer
name: --dapi_index
description: Index of DAPI channel (1-indexed) of fluorescence image
required: false
example: 1
min: 1
- type: double
name: --image_scale
description: Microns per microscope image pixel
required: false
example: 0.65
min: 0.01
max: 10
- type: boolean
name: --reorient_images
default: true
description: Whether to rotate and mirror image to align fiducial pattern
- name: Processing Options
arguments:
- type: boolean
name: --create_bam
required: true
description: Enable or disable BAM file generation
default: true
- type: boolean_true
name: --nosecondary
description: Disable secondary analysis (e.g., clustering)
- type: integer
name: --r1_length
required: false
description: Hard trim the input Read 1 to this length before analysis
min: 1
- type: integer
name: --r2_length
required: false
description: Hard trim the input Read 2 to this length before analysis
min: 1
- type: boolean
name: --filter_probes
default: true
description: Whether to filter the probe set using the "included" column
- type: integer
name: --custom_bin_size
description: Bin Visium HD data to specified size in microns (4-100, even values only) in addition to the standard binning size (2 µm, 8 µm, 16 µm)
min: 4
max: 100
- name: Input Selection
arguments:
- type: string
name: --project
required: false
description: Project folder name within mkfastq output
- type: string
name: --sample
required: false
description: Prefix of FASTQ filenames to select
- type: integer
name: --lanes
multiple: true
required: false
description: Only use FASTQs from selected lanes
example: [1,2,3]
resources:
- type: bash_script
path: script.sh
test_resources:
- type: bash_script
path: test.sh
- path: /resources_test/visium
- path: /resources_test/GRCh38
engines:
- type: docker
image: ghcr.io/data-intuitive/spaceranger:3.1
setup:
- type: docker
run: |
DEBIAN_FRONTEND=noninteractive apt update && \
apt upgrade -y && apt install -y procps && rm -rf /var/lib/apt/lists/*
runners:
- type: executable
- type: nextflow

View File

@@ -0,0 +1,45 @@
#!/bin/bash
set -eo pipefail
unset_if_false=(
par_override_id
par_nosecondary
)
for par in ${unset_if_false[@]}; do
test_val="${!par}"
[[ "$test_val" == "false" ]] && unset $par
done
spaceranger count \
${par_output:+--id="$par_output"} \
${par_gex_reference:+--transcriptome="$par_gex_reference"} \
${par_input:+--fastqs="$par_input"} \
${par_probe_set:+--probe-set="$par_probe_set"} \
${par_cytaimage:+--cytaimage="$par_cytaimage"} \
${par_image:+--image="$par_image"} \
${par_slide:+--slide="$par_slide"} \
${par_area:+--area="$par_area"} \
${par_unknown_slide:+--unknown-slide="$par_unknown_slide"} \
${par_slidefile:+--slidefile="$par_slidefile"} \
${par_override_id:+--override-id} \
${par_darkimage:+--darkimage="$par_darkimage"} \
${par_colorizedimage:+--colorizedimage="$par_colorizedimage"} \
${par_dapi_index:+--dapi-index="$par_dapi_index"} \
${par_image_scale:+--image-scale="$par_image_scale"} \
${par_reorient_images:+--reorient-images="$par_reorient_images"} \
${par_create_bam:+--create-bam="$par_create_bam"} \
${par_nosecondary:+--nosecondary} \
${par_r1_length:+--r1-length="$par_r1_length"} \
${par_r2_length:+--r2-length="$par_r2_length"} \
${par_filter_probes:+--filter-probes="$par_filter_probes"} \
${par_custom_bin_size:+--custom-bin-size="$par_custom_bin_size"} \
${par_project:+--project="$par_project"} \
${par_sample:+--sample="$par_sample"} \
${par_lanes:+--lanes="$par_lanes"} \
${meta_cpus:+--localcores="$meta_cpus"} \
${meta_memory_gb:+--localmem=$(($meta_memory_gb-2))}
mv -f "$par_output"/outs/* "$par_output"/
rm -rf "$par_output"/outs

View File

@@ -0,0 +1,47 @@
#!/bin/bash
set -eo pipefail
## VIASH START
meta_executable="target/native/spaceranger/spaceranger_count/spaceranger_count"
meta_resources_dir="resources_test"
## VIASH END
test_data="$meta_resources_dir/visium"
echo "> Default test run"
"$meta_executable" \
--output test_spaceranger \
--gex_reference "$meta_resources_dir/GRCh38" \
--input "$test_data/subsampled" \
--probe_set "$test_data/Visium_FFPE_Human_Ovarian_Cancer_probe_set.csv" \
--image "$test_data/subsampled/Visium_FFPE_Human_Ovarian_Cancer_image.jpg" \
--unknown_slide visium-1 \
--create_bam false
echo "> Checking outputs..."
# Define output directory
OUT_DIR="test_spaceranger"
# Function to check if file exists and is non-empty
check_file() {
local file=$1
local description=$2
echo -n "Checking $description... "
if [ ! -f "$file" ]; then
echo "FAIL (file not found)"
exit 1
elif [ ! -s "$file" ]; then
echo "FAIL (file is empty)"
exit 1
else
echo "OK"
fi
}
# Check essential files
check_file "$OUT_DIR/web_summary.html" "web summary"
check_file "$OUT_DIR/metrics_summary.csv" "metrics summary"
echo "> All tests passed successfully!"

View File

@@ -231,7 +231,7 @@ build_info:
output: "target/executable/convert/from_cosmx_to_h5mu" output: "target/executable/convert/from_cosmx_to_h5mu"
executable: "target/executable/convert/from_cosmx_to_h5mu/from_cosmx_to_h5mu" executable: "target/executable/convert/from_cosmx_to_h5mu/from_cosmx_to_h5mu"
viash_version: "0.9.3" viash_version: "0.9.3"
git_commit: "9f2a3e68cb0ae7fc97924d8872376ec7a58afe16" git_commit: "491efceaaf171f50aaa1d28f690c1e974cffc456"
git_remote: "https://github.com/openpipelines-bio/openpipeline_spatial" git_remote: "https://github.com/openpipelines-bio/openpipeline_spatial"
package_config: package_config:
name: "openpipeline_spatial" name: "openpipeline_spatial"

View File

@@ -458,9 +458,9 @@ RUN pip install --upgrade pip && \
LABEL org.opencontainers.image.authors="Dorien Roosen, Weiwei Schultz" LABEL org.opencontainers.image.authors="Dorien Roosen, Weiwei Schultz"
LABEL org.opencontainers.image.description="Companion container for running component convert from_cosmx_to_h5mu" LABEL org.opencontainers.image.description="Companion container for running component convert from_cosmx_to_h5mu"
LABEL org.opencontainers.image.created="2025-06-11T09:39:26Z" LABEL org.opencontainers.image.created="2025-07-10T12:30:15Z"
LABEL org.opencontainers.image.source="https://github.com/openpipelines-bio/openpipeline_spatial" LABEL org.opencontainers.image.source="https://github.com/openpipelines-bio/openpipeline_spatial"
LABEL org.opencontainers.image.revision="9f2a3e68cb0ae7fc97924d8872376ec7a58afe16" LABEL org.opencontainers.image.revision="491efceaaf171f50aaa1d28f690c1e974cffc456"
LABEL org.opencontainers.image.version="build_main" LABEL org.opencontainers.image.version="build_main"
VIASHDOCKER VIASHDOCKER

View File

@@ -217,7 +217,7 @@ build_info:
output: "target/executable/convert/from_spatialdata_to_h5mu" output: "target/executable/convert/from_spatialdata_to_h5mu"
executable: "target/executable/convert/from_spatialdata_to_h5mu/from_spatialdata_to_h5mu" executable: "target/executable/convert/from_spatialdata_to_h5mu/from_spatialdata_to_h5mu"
viash_version: "0.9.3" viash_version: "0.9.3"
git_commit: "9f2a3e68cb0ae7fc97924d8872376ec7a58afe16" git_commit: "491efceaaf171f50aaa1d28f690c1e974cffc456"
git_remote: "https://github.com/openpipelines-bio/openpipeline_spatial" git_remote: "https://github.com/openpipelines-bio/openpipeline_spatial"
package_config: package_config:
name: "openpipeline_spatial" name: "openpipeline_spatial"

View File

@@ -458,9 +458,9 @@ RUN pip install --upgrade pip && \
LABEL org.opencontainers.image.authors="Dorien Roosen, Weiwei Schultz" LABEL org.opencontainers.image.authors="Dorien Roosen, Weiwei Schultz"
LABEL org.opencontainers.image.description="Companion container for running component convert from_spatialdata_to_h5mu" LABEL org.opencontainers.image.description="Companion container for running component convert from_spatialdata_to_h5mu"
LABEL org.opencontainers.image.created="2025-06-11T09:39:26Z" LABEL org.opencontainers.image.created="2025-07-10T12:30:14Z"
LABEL org.opencontainers.image.source="https://github.com/openpipelines-bio/openpipeline_spatial" LABEL org.opencontainers.image.source="https://github.com/openpipelines-bio/openpipeline_spatial"
LABEL org.opencontainers.image.revision="9f2a3e68cb0ae7fc97924d8872376ec7a58afe16" LABEL org.opencontainers.image.revision="491efceaaf171f50aaa1d28f690c1e974cffc456"
LABEL org.opencontainers.image.version="build_main" LABEL org.opencontainers.image.version="build_main"
VIASHDOCKER VIASHDOCKER

View File

@@ -314,7 +314,7 @@ build_info:
output: "target/executable/convert/from_xenium_to_spatialdata" output: "target/executable/convert/from_xenium_to_spatialdata"
executable: "target/executable/convert/from_xenium_to_spatialdata/from_xenium_to_spatialdata" executable: "target/executable/convert/from_xenium_to_spatialdata/from_xenium_to_spatialdata"
viash_version: "0.9.3" viash_version: "0.9.3"
git_commit: "9f2a3e68cb0ae7fc97924d8872376ec7a58afe16" git_commit: "491efceaaf171f50aaa1d28f690c1e974cffc456"
git_remote: "https://github.com/openpipelines-bio/openpipeline_spatial" git_remote: "https://github.com/openpipelines-bio/openpipeline_spatial"
package_config: package_config:
name: "openpipeline_spatial" name: "openpipeline_spatial"

View File

@@ -458,9 +458,9 @@ RUN pip install --upgrade pip && \
LABEL org.opencontainers.image.authors="Dorien Roosen, Weiwei Schultz" LABEL org.opencontainers.image.authors="Dorien Roosen, Weiwei Schultz"
LABEL org.opencontainers.image.description="Companion container for running component convert from_xenium_to_spatialdata" LABEL org.opencontainers.image.description="Companion container for running component convert from_xenium_to_spatialdata"
LABEL org.opencontainers.image.created="2025-06-11T09:39:25Z" LABEL org.opencontainers.image.created="2025-07-10T12:30:14Z"
LABEL org.opencontainers.image.source="https://github.com/openpipelines-bio/openpipeline_spatial" LABEL org.opencontainers.image.source="https://github.com/openpipelines-bio/openpipeline_spatial"
LABEL org.opencontainers.image.revision="9f2a3e68cb0ae7fc97924d8872376ec7a58afe16" LABEL org.opencontainers.image.revision="491efceaaf171f50aaa1d28f690c1e974cffc456"
LABEL org.opencontainers.image.version="build_main" LABEL org.opencontainers.image.version="build_main"
VIASHDOCKER VIASHDOCKER

View File

@@ -217,7 +217,7 @@ build_info:
output: "target/executable/filter/subset_cosmx" output: "target/executable/filter/subset_cosmx"
executable: "target/executable/filter/subset_cosmx/subset_cosmx" executable: "target/executable/filter/subset_cosmx/subset_cosmx"
viash_version: "0.9.3" viash_version: "0.9.3"
git_commit: "9f2a3e68cb0ae7fc97924d8872376ec7a58afe16" git_commit: "491efceaaf171f50aaa1d28f690c1e974cffc456"
git_remote: "https://github.com/openpipelines-bio/openpipeline_spatial" git_remote: "https://github.com/openpipelines-bio/openpipeline_spatial"
package_config: package_config:
name: "openpipeline_spatial" name: "openpipeline_spatial"

View File

@@ -458,9 +458,9 @@ RUN pip install --upgrade pip && \
LABEL org.opencontainers.image.authors="Dorien Roosen, Weiwei Schultz" LABEL org.opencontainers.image.authors="Dorien Roosen, Weiwei Schultz"
LABEL org.opencontainers.image.description="Companion container for running component filter subset_cosmx" LABEL org.opencontainers.image.description="Companion container for running component filter subset_cosmx"
LABEL org.opencontainers.image.created="2025-06-11T09:39:25Z" LABEL org.opencontainers.image.created="2025-07-10T12:30:14Z"
LABEL org.opencontainers.image.source="https://github.com/openpipelines-bio/openpipeline_spatial" LABEL org.opencontainers.image.source="https://github.com/openpipelines-bio/openpipeline_spatial"
LABEL org.opencontainers.image.revision="9f2a3e68cb0ae7fc97924d8872376ec7a58afe16" LABEL org.opencontainers.image.revision="491efceaaf171f50aaa1d28f690c1e974cffc456"
LABEL org.opencontainers.image.version="build_main" LABEL org.opencontainers.image.version="build_main"
VIASHDOCKER VIASHDOCKER

View File

@@ -0,0 +1,457 @@
name: "spaceranger_count"
namespace: "mapping"
version: "build_main"
authors:
- name: "Jakub Majercik"
roles:
- "author"
info:
role: "Contributor"
links:
email: "jakub@data-intuitive.com"
github: "jakubmajercik"
linkedin: "jakubmajercik"
organizations:
- name: "Data Intuitive"
href: "https://www.data-intuitive.com"
role: "Bioinformatics Engineer"
argument_groups:
- name: "Inputs"
arguments:
- type: "file"
name: "--gex_reference"
description: "Path of folder containing 10x-compatible reference"
info: null
example:
- "/path/to/refdata-gex-GRCh38-2020-A"
must_exist: true
create_parent: true
required: true
direction: "input"
multiple: false
multiple_sep: ";"
- type: "file"
name: "--input"
description: "Path to a directory containing input FASTQ data. Individual FASTQ\
\ files should follow the naming convention of 10x Genomics:\n[Sample Name]_S[Sample\
\ Number]_L[Lane Number]_[Read Type]_001.fastq.gz\n\nWhere:\n[Sample Name] is\
\ the name assigned during sample preparation/sequencing\nS[Sample Number] is\
\ the sample index (usually S1, S2, etc.)\nL[Lane Number] identifies the sequencing\
\ lane (L001, L002, etc.)\n\n[Read Type] will be one of:\nR1 - Read 1 (contains\
\ the spatial barcode and UMI)\nR2 - Read 2 (contains the actual cDNA sequence)\n\
I1 - Index Read 1 (if applicable)\nI2 - Index Read 2 (if applicable)\n"
info: null
example:
- "/path/to/fastq_folder"
must_exist: true
create_parent: true
required: true
direction: "input"
multiple: false
multiple_sep: ";"
- type: "file"
name: "--probe_set"
description: "CSV file specifying the probe set used"
info: null
example:
- "Visium_Human_Transcriptome_Probe_Set_v2.0_GRCh38-2020-A.csv"
must_exist: true
create_parent: true
required: true
direction: "input"
multiple: false
multiple_sep: ";"
- type: "file"
name: "--cytaimage"
description: "Brightfield image generated by the CytAssist instrument. \nWhen\
\ using CytAssist workflow, either this or --image must be provided.\n"
info: null
example:
- "cyta_image.tif"
must_exist: true
create_parent: true
required: false
direction: "input"
multiple: false
multiple_sep: ";"
- type: "file"
name: "--image"
description: "H&E or fluorescence microscope image in TIFF or JPG format. \nRequired\
\ for standard Visium workflow, optional when using --cytaimage for CytAssist\
\ workflow.\n"
info: null
example:
- "brightfield.tif"
must_exist: true
create_parent: true
required: false
direction: "input"
multiple: false
multiple_sep: ";"
- name: "Outputs"
arguments:
- type: "file"
name: "--output"
description: "The folder to store the alignment results"
info: null
example:
- "/path/to/output"
must_exist: true
create_parent: true
required: true
direction: "output"
multiple: false
multiple_sep: ";"
- name: "Slide Information"
arguments:
- type: "string"
name: "--slide"
description: "Visium slide serial number (e.g., 'V10J25-015')"
info: null
example:
- "V10J25-015"
required: false
direction: "input"
multiple: false
multiple_sep: ";"
- type: "string"
name: "--area"
description: "Visium capture area identifier (e.g., 'A1')"
info: null
example:
- "A1"
required: false
direction: "input"
multiple: false
multiple_sep: ";"
- type: "string"
name: "--unknown_slide"
description: "Use this option if the slide serial number and area were entered\
\ incorrectly on the CytAssist \ninstrument and the correct values are unknown.\
\ Not compatible with --slide, --area, or \n--slide-file options\n"
info: null
required: false
choices:
- "visium-1"
- "visium-2"
- "visium-2-large"
- "visium-hd"
direction: "input"
multiple: false
multiple_sep: ";"
- type: "file"
name: "--slidefile"
description: "Slide design file for offline use"
info: null
example:
- "slide_design.gpr"
must_exist: true
create_parent: true
required: false
direction: "input"
multiple: false
multiple_sep: ";"
- type: "boolean_true"
name: "--override_id"
description: "Overrides the slide serial number and capture area provided in the\
\ Cytassist image metadata"
info: null
direction: "input"
- name: "Image Options"
arguments:
- type: "file"
name: "--darkimage"
description: "Multi-channel, dark-background fluorescence image"
info: null
example:
- "fluorescence.tif"
must_exist: true
create_parent: true
required: false
direction: "input"
multiple: false
multiple_sep: ";"
- type: "file"
name: "--colorizedimage"
description: "Color image representing pre-colored dark-background fluorescence\
\ images"
info: null
example:
- "colored_fluorescence.tif"
must_exist: true
create_parent: true
required: false
direction: "input"
multiple: false
multiple_sep: ";"
- type: "integer"
name: "--dapi_index"
description: "Index of DAPI channel (1-indexed) of fluorescence image"
info: null
example:
- 1
required: false
min: 1
direction: "input"
multiple: false
multiple_sep: ";"
- type: "double"
name: "--image_scale"
description: "Microns per microscope image pixel"
info: null
example:
- 0.65
required: false
min: 0.01
max: 10.0
direction: "input"
multiple: false
multiple_sep: ";"
- type: "boolean"
name: "--reorient_images"
description: "Whether to rotate and mirror image to align fiducial pattern"
info: null
default:
- true
required: false
direction: "input"
multiple: false
multiple_sep: ";"
- name: "Processing Options"
arguments:
- type: "boolean"
name: "--create_bam"
description: "Enable or disable BAM file generation"
info: null
default:
- true
required: true
direction: "input"
multiple: false
multiple_sep: ";"
- type: "boolean_true"
name: "--nosecondary"
description: "Disable secondary analysis (e.g., clustering)"
info: null
direction: "input"
- type: "integer"
name: "--r1_length"
description: "Hard trim the input Read 1 to this length before analysis"
info: null
required: false
min: 1
direction: "input"
multiple: false
multiple_sep: ";"
- type: "integer"
name: "--r2_length"
description: "Hard trim the input Read 2 to this length before analysis"
info: null
required: false
min: 1
direction: "input"
multiple: false
multiple_sep: ";"
- type: "boolean"
name: "--filter_probes"
description: "Whether to filter the probe set using the \"included\" column"
info: null
default:
- true
required: false
direction: "input"
multiple: false
multiple_sep: ";"
- type: "integer"
name: "--custom_bin_size"
description: "Bin Visium HD data to specified size in microns (4-100, even values\
\ only) in addition to the standard binning size (2 µm, 8 µm, 16 µm)"
info: null
required: false
min: 4
max: 100
direction: "input"
multiple: false
multiple_sep: ";"
- name: "Input Selection"
arguments:
- type: "string"
name: "--project"
description: "Project folder name within mkfastq output"
info: null
required: false
direction: "input"
multiple: false
multiple_sep: ";"
- type: "string"
name: "--sample"
description: "Prefix of FASTQ filenames to select"
info: null
required: false
direction: "input"
multiple: false
multiple_sep: ";"
- type: "integer"
name: "--lanes"
description: "Only use FASTQs from selected lanes"
info: null
example:
- 1
- 2
- 3
required: false
direction: "input"
multiple: true
multiple_sep: ";"
resources:
- type: "bash_script"
path: "script.sh"
is_executable: true
- type: "file"
path: "nextflow_labels.config"
dest: "nextflow_labels.config"
description: "Count gene expression and protein expression reads from a single capture\
\ area."
test_resources:
- type: "bash_script"
path: "test.sh"
is_executable: true
- type: "file"
path: "visium"
- type: "file"
path: "GRCh38"
info: null
status: "enabled"
scope:
image: "public"
target: "public"
repositories:
- type: "github"
name: "openpipeline"
repo: "openpipelines-bio/openpipeline"
tag: "main_build"
keywords:
- "spaceranger"
links:
repository: "https://github.com/openpipelines-bio/openpipeline_spatial"
docker_registry: "ghcr.io"
documentation: "https://www.10xgenomics.com/support/software/space-ranger/latest/analysis/running-pipelines/space-ranger-count"
runners:
- type: "executable"
id: "executable"
docker_setup_strategy: "ifneedbepullelsecachedbuild"
- type: "nextflow"
id: "nextflow"
directives:
tag: "$id"
auto:
simplifyInput: true
simplifyOutput: false
transcript: false
publish: false
config:
labels:
mem1gb: "memory = 1000000000.B"
mem2gb: "memory = 2000000000.B"
mem5gb: "memory = 5000000000.B"
mem10gb: "memory = 10000000000.B"
mem20gb: "memory = 20000000000.B"
mem50gb: "memory = 50000000000.B"
mem100gb: "memory = 100000000000.B"
mem200gb: "memory = 200000000000.B"
mem500gb: "memory = 500000000000.B"
mem1tb: "memory = 1000000000000.B"
mem2tb: "memory = 2000000000000.B"
mem5tb: "memory = 5000000000000.B"
mem10tb: "memory = 10000000000000.B"
mem20tb: "memory = 20000000000000.B"
mem50tb: "memory = 50000000000000.B"
mem100tb: "memory = 100000000000000.B"
mem200tb: "memory = 200000000000000.B"
mem500tb: "memory = 500000000000000.B"
mem1gib: "memory = 1073741824.B"
mem2gib: "memory = 2147483648.B"
mem4gib: "memory = 4294967296.B"
mem8gib: "memory = 8589934592.B"
mem16gib: "memory = 17179869184.B"
mem32gib: "memory = 34359738368.B"
mem64gib: "memory = 68719476736.B"
mem128gib: "memory = 137438953472.B"
mem256gib: "memory = 274877906944.B"
mem512gib: "memory = 549755813888.B"
mem1tib: "memory = 1099511627776.B"
mem2tib: "memory = 2199023255552.B"
mem4tib: "memory = 4398046511104.B"
mem8tib: "memory = 8796093022208.B"
mem16tib: "memory = 17592186044416.B"
mem32tib: "memory = 35184372088832.B"
mem64tib: "memory = 70368744177664.B"
mem128tib: "memory = 140737488355328.B"
mem256tib: "memory = 281474976710656.B"
mem512tib: "memory = 562949953421312.B"
cpu1: "cpus = 1"
cpu2: "cpus = 2"
cpu5: "cpus = 5"
cpu10: "cpus = 10"
cpu20: "cpus = 20"
cpu50: "cpus = 50"
cpu100: "cpus = 100"
cpu200: "cpus = 200"
cpu500: "cpus = 500"
cpu1000: "cpus = 1000"
script:
- "includeConfig(\"nextflow_labels.config\")"
debug: false
container: "docker"
engines:
- type: "docker"
id: "docker"
image: "ghcr.io/data-intuitive/spaceranger:3.1"
target_registry: "images.viash-hub.com"
target_tag: "build_main"
namespace_separator: "/"
setup:
- type: "docker"
run:
- "DEBIAN_FRONTEND=noninteractive apt update && \\\napt upgrade -y && apt install\
\ -y procps && rm -rf /var/lib/apt/lists/*\n"
entrypoint: []
cmd: null
- type: "native"
id: "native"
build_info:
config: "src/mapping/spaceranger_count/config.vsh.yaml"
runner: "executable"
engine: "docker|native"
output: "target/executable/mapping/spaceranger_count"
executable: "target/executable/mapping/spaceranger_count/spaceranger_count"
viash_version: "0.9.3"
git_commit: "491efceaaf171f50aaa1d28f690c1e974cffc456"
git_remote: "https://github.com/openpipelines-bio/openpipeline_spatial"
package_config:
name: "openpipeline_spatial"
version: "build_main"
info:
test_resources:
- type: "s3"
path: "s3://openpipelines-bio/openpipeline_spatial/resources_test"
dest: "resources_test"
repositories:
- type: "github"
name: "openpipeline"
repo: "openpipelines-bio/openpipeline"
tag: "main_build"
viash_version: "0.9.3"
source: "src"
target: "target"
config_mods:
- ".resources += {path: '/src/labels.config', dest: 'nextflow_labels.config'}\n\
.runners[.type == 'nextflow'].config.script := 'includeConfig(\"nextflow_labels.config\"\
)'"
- ".engines += { type: \"native\" }"
- ".engines[.type == 'docker'].target_registry := 'images.viash-hub.com'"
- ".engines[.type == 'docker'].target_tag := 'build_main'"
organization: "vsh"
links:
repository: "https://github.com/openpipelines-bio/openpipeline_spatial"
docker_registry: "ghcr.io"

View File

@@ -0,0 +1,68 @@
process {
// Default resources for components that hardly do any processing
memory = { 2.GB * task.attempt }
cpus = 1
// Retry for exit codes that have something to do with memory issues
errorStrategy = { task.exitStatus in 137..140 ? 'retry' : 'terminate' }
maxRetries = 3
maxMemory = null
// CPU resources
withLabel: singlecpu { cpus = 1 }
withLabel: lowcpu { cpus = 4 }
withLabel: midcpu { cpus = 10 }
withLabel: highcpu { cpus = 20 }
// Memory resources
withLabel: lowmem { memory = { get_memory( 50.GB * task.attempt ) } }
withLabel: midmem { memory = { get_memory( 50.GB * task.attempt ) } }
withLabel: highmem { memory = { get_memory( 50.GB * task.attempt ) } }
withLabel: veryhighmem { memory = { get_memory( 75.GB * task.attempt ) } }
// Disk space
// Nextflow apparently can't handle empty directives, i.e.
// withLabel: lowdisk {}
// so for that reason we have to add a dummy directive
withLabel: lowdisk {
dummyDirective = "dummyValue"
}
withLabel: middisk {
dummyDirective = "dummyValue"
}
withLabel: highdisk {
dummyDirective = "dummyValue"
}
withLabel: veryhighdisk {
dummyDirective = "dummyValue"
}
// NOTE: The above labels intentionally do not have an effect by default.
// The user should set the disk space requirements by adding the following
// to the compute environment:
//
// withLabel: lowdisk { disk = { 20.GB * task.attempt } }
// withLabel: middisk { disk = { 100.GB * task.attempt } }
// withLabel: highdisk { disk = { 200.GB * task.attempt } }
// withLabel: veryhighdisk { disk = { 500.GB * task.attempt } }
}
def get_memory(to_compare) {
if (!process.containsKey("maxMemory") || !process.maxMemory) {
return to_compare
}
try {
if (process.containsKey("maxRetries") && process.maxRetries && task.attempt == (process.maxRetries as int)) {
return process.maxMemory
}
else if (to_compare.compareTo(process.maxMemory as nextflow.util.MemoryUnit) == 1) {
return max_memory as nextflow.util.MemoryUnit
}
else {
return to_compare
}
} catch (all) {
println "Error processing memory resources. Please check that process.maxMemory '${process.maxMemory}' and process.maxRetries '${process.maxRetries}' are valid!"
System.exit(1)
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -231,7 +231,7 @@ build_info:
output: "target/nextflow/convert/from_cosmx_to_h5mu" output: "target/nextflow/convert/from_cosmx_to_h5mu"
executable: "target/nextflow/convert/from_cosmx_to_h5mu/main.nf" executable: "target/nextflow/convert/from_cosmx_to_h5mu/main.nf"
viash_version: "0.9.3" viash_version: "0.9.3"
git_commit: "9f2a3e68cb0ae7fc97924d8872376ec7a58afe16" git_commit: "491efceaaf171f50aaa1d28f690c1e974cffc456"
git_remote: "https://github.com/openpipelines-bio/openpipeline_spatial" git_remote: "https://github.com/openpipelines-bio/openpipeline_spatial"
package_config: package_config:
name: "openpipeline_spatial" name: "openpipeline_spatial"

View File

@@ -3340,7 +3340,7 @@ meta = [
"engine" : "docker|native", "engine" : "docker|native",
"output" : "/workdir/root/repo/target/nextflow/convert/from_cosmx_to_h5mu", "output" : "/workdir/root/repo/target/nextflow/convert/from_cosmx_to_h5mu",
"viash_version" : "0.9.3", "viash_version" : "0.9.3",
"git_commit" : "9f2a3e68cb0ae7fc97924d8872376ec7a58afe16", "git_commit" : "491efceaaf171f50aaa1d28f690c1e974cffc456",
"git_remote" : "https://github.com/openpipelines-bio/openpipeline_spatial" "git_remote" : "https://github.com/openpipelines-bio/openpipeline_spatial"
}, },
"package_config" : { "package_config" : {

View File

@@ -217,7 +217,7 @@ build_info:
output: "target/nextflow/convert/from_spatialdata_to_h5mu" output: "target/nextflow/convert/from_spatialdata_to_h5mu"
executable: "target/nextflow/convert/from_spatialdata_to_h5mu/main.nf" executable: "target/nextflow/convert/from_spatialdata_to_h5mu/main.nf"
viash_version: "0.9.3" viash_version: "0.9.3"
git_commit: "9f2a3e68cb0ae7fc97924d8872376ec7a58afe16" git_commit: "491efceaaf171f50aaa1d28f690c1e974cffc456"
git_remote: "https://github.com/openpipelines-bio/openpipeline_spatial" git_remote: "https://github.com/openpipelines-bio/openpipeline_spatial"
package_config: package_config:
name: "openpipeline_spatial" name: "openpipeline_spatial"

View File

@@ -3332,7 +3332,7 @@ meta = [
"engine" : "docker|native", "engine" : "docker|native",
"output" : "/workdir/root/repo/target/nextflow/convert/from_spatialdata_to_h5mu", "output" : "/workdir/root/repo/target/nextflow/convert/from_spatialdata_to_h5mu",
"viash_version" : "0.9.3", "viash_version" : "0.9.3",
"git_commit" : "9f2a3e68cb0ae7fc97924d8872376ec7a58afe16", "git_commit" : "491efceaaf171f50aaa1d28f690c1e974cffc456",
"git_remote" : "https://github.com/openpipelines-bio/openpipeline_spatial" "git_remote" : "https://github.com/openpipelines-bio/openpipeline_spatial"
}, },
"package_config" : { "package_config" : {

View File

@@ -314,7 +314,7 @@ build_info:
output: "target/nextflow/convert/from_xenium_to_spatialdata" output: "target/nextflow/convert/from_xenium_to_spatialdata"
executable: "target/nextflow/convert/from_xenium_to_spatialdata/main.nf" executable: "target/nextflow/convert/from_xenium_to_spatialdata/main.nf"
viash_version: "0.9.3" viash_version: "0.9.3"
git_commit: "9f2a3e68cb0ae7fc97924d8872376ec7a58afe16" git_commit: "491efceaaf171f50aaa1d28f690c1e974cffc456"
git_remote: "https://github.com/openpipelines-bio/openpipeline_spatial" git_remote: "https://github.com/openpipelines-bio/openpipeline_spatial"
package_config: package_config:
name: "openpipeline_spatial" name: "openpipeline_spatial"

View File

@@ -3430,7 +3430,7 @@ meta = [
"engine" : "docker|native", "engine" : "docker|native",
"output" : "/workdir/root/repo/target/nextflow/convert/from_xenium_to_spatialdata", "output" : "/workdir/root/repo/target/nextflow/convert/from_xenium_to_spatialdata",
"viash_version" : "0.9.3", "viash_version" : "0.9.3",
"git_commit" : "9f2a3e68cb0ae7fc97924d8872376ec7a58afe16", "git_commit" : "491efceaaf171f50aaa1d28f690c1e974cffc456",
"git_remote" : "https://github.com/openpipelines-bio/openpipeline_spatial" "git_remote" : "https://github.com/openpipelines-bio/openpipeline_spatial"
}, },
"package_config" : { "package_config" : {

View File

@@ -217,7 +217,7 @@ build_info:
output: "target/nextflow/filter/subset_cosmx" output: "target/nextflow/filter/subset_cosmx"
executable: "target/nextflow/filter/subset_cosmx/main.nf" executable: "target/nextflow/filter/subset_cosmx/main.nf"
viash_version: "0.9.3" viash_version: "0.9.3"
git_commit: "9f2a3e68cb0ae7fc97924d8872376ec7a58afe16" git_commit: "491efceaaf171f50aaa1d28f690c1e974cffc456"
git_remote: "https://github.com/openpipelines-bio/openpipeline_spatial" git_remote: "https://github.com/openpipelines-bio/openpipeline_spatial"
package_config: package_config:
name: "openpipeline_spatial" name: "openpipeline_spatial"

View File

@@ -3322,7 +3322,7 @@ meta = [
"engine" : "docker|native", "engine" : "docker|native",
"output" : "/workdir/root/repo/target/nextflow/filter/subset_cosmx", "output" : "/workdir/root/repo/target/nextflow/filter/subset_cosmx",
"viash_version" : "0.9.3", "viash_version" : "0.9.3",
"git_commit" : "9f2a3e68cb0ae7fc97924d8872376ec7a58afe16", "git_commit" : "491efceaaf171f50aaa1d28f690c1e974cffc456",
"git_remote" : "https://github.com/openpipelines-bio/openpipeline_spatial" "git_remote" : "https://github.com/openpipelines-bio/openpipeline_spatial"
}, },
"package_config" : { "package_config" : {

View File

@@ -0,0 +1,457 @@
name: "spaceranger_count"
namespace: "mapping"
version: "build_main"
authors:
- name: "Jakub Majercik"
roles:
- "author"
info:
role: "Contributor"
links:
email: "jakub@data-intuitive.com"
github: "jakubmajercik"
linkedin: "jakubmajercik"
organizations:
- name: "Data Intuitive"
href: "https://www.data-intuitive.com"
role: "Bioinformatics Engineer"
argument_groups:
- name: "Inputs"
arguments:
- type: "file"
name: "--gex_reference"
description: "Path of folder containing 10x-compatible reference"
info: null
example:
- "/path/to/refdata-gex-GRCh38-2020-A"
must_exist: true
create_parent: true
required: true
direction: "input"
multiple: false
multiple_sep: ";"
- type: "file"
name: "--input"
description: "Path to a directory containing input FASTQ data. Individual FASTQ\
\ files should follow the naming convention of 10x Genomics:\n[Sample Name]_S[Sample\
\ Number]_L[Lane Number]_[Read Type]_001.fastq.gz\n\nWhere:\n[Sample Name] is\
\ the name assigned during sample preparation/sequencing\nS[Sample Number] is\
\ the sample index (usually S1, S2, etc.)\nL[Lane Number] identifies the sequencing\
\ lane (L001, L002, etc.)\n\n[Read Type] will be one of:\nR1 - Read 1 (contains\
\ the spatial barcode and UMI)\nR2 - Read 2 (contains the actual cDNA sequence)\n\
I1 - Index Read 1 (if applicable)\nI2 - Index Read 2 (if applicable)\n"
info: null
example:
- "/path/to/fastq_folder"
must_exist: true
create_parent: true
required: true
direction: "input"
multiple: false
multiple_sep: ";"
- type: "file"
name: "--probe_set"
description: "CSV file specifying the probe set used"
info: null
example:
- "Visium_Human_Transcriptome_Probe_Set_v2.0_GRCh38-2020-A.csv"
must_exist: true
create_parent: true
required: true
direction: "input"
multiple: false
multiple_sep: ";"
- type: "file"
name: "--cytaimage"
description: "Brightfield image generated by the CytAssist instrument. \nWhen\
\ using CytAssist workflow, either this or --image must be provided.\n"
info: null
example:
- "cyta_image.tif"
must_exist: true
create_parent: true
required: false
direction: "input"
multiple: false
multiple_sep: ";"
- type: "file"
name: "--image"
description: "H&E or fluorescence microscope image in TIFF or JPG format. \nRequired\
\ for standard Visium workflow, optional when using --cytaimage for CytAssist\
\ workflow.\n"
info: null
example:
- "brightfield.tif"
must_exist: true
create_parent: true
required: false
direction: "input"
multiple: false
multiple_sep: ";"
- name: "Outputs"
arguments:
- type: "file"
name: "--output"
description: "The folder to store the alignment results"
info: null
example:
- "/path/to/output"
must_exist: true
create_parent: true
required: true
direction: "output"
multiple: false
multiple_sep: ";"
- name: "Slide Information"
arguments:
- type: "string"
name: "--slide"
description: "Visium slide serial number (e.g., 'V10J25-015')"
info: null
example:
- "V10J25-015"
required: false
direction: "input"
multiple: false
multiple_sep: ";"
- type: "string"
name: "--area"
description: "Visium capture area identifier (e.g., 'A1')"
info: null
example:
- "A1"
required: false
direction: "input"
multiple: false
multiple_sep: ";"
- type: "string"
name: "--unknown_slide"
description: "Use this option if the slide serial number and area were entered\
\ incorrectly on the CytAssist \ninstrument and the correct values are unknown.\
\ Not compatible with --slide, --area, or \n--slide-file options\n"
info: null
required: false
choices:
- "visium-1"
- "visium-2"
- "visium-2-large"
- "visium-hd"
direction: "input"
multiple: false
multiple_sep: ";"
- type: "file"
name: "--slidefile"
description: "Slide design file for offline use"
info: null
example:
- "slide_design.gpr"
must_exist: true
create_parent: true
required: false
direction: "input"
multiple: false
multiple_sep: ";"
- type: "boolean_true"
name: "--override_id"
description: "Overrides the slide serial number and capture area provided in the\
\ Cytassist image metadata"
info: null
direction: "input"
- name: "Image Options"
arguments:
- type: "file"
name: "--darkimage"
description: "Multi-channel, dark-background fluorescence image"
info: null
example:
- "fluorescence.tif"
must_exist: true
create_parent: true
required: false
direction: "input"
multiple: false
multiple_sep: ";"
- type: "file"
name: "--colorizedimage"
description: "Color image representing pre-colored dark-background fluorescence\
\ images"
info: null
example:
- "colored_fluorescence.tif"
must_exist: true
create_parent: true
required: false
direction: "input"
multiple: false
multiple_sep: ";"
- type: "integer"
name: "--dapi_index"
description: "Index of DAPI channel (1-indexed) of fluorescence image"
info: null
example:
- 1
required: false
min: 1
direction: "input"
multiple: false
multiple_sep: ";"
- type: "double"
name: "--image_scale"
description: "Microns per microscope image pixel"
info: null
example:
- 0.65
required: false
min: 0.01
max: 10.0
direction: "input"
multiple: false
multiple_sep: ";"
- type: "boolean"
name: "--reorient_images"
description: "Whether to rotate and mirror image to align fiducial pattern"
info: null
default:
- true
required: false
direction: "input"
multiple: false
multiple_sep: ";"
- name: "Processing Options"
arguments:
- type: "boolean"
name: "--create_bam"
description: "Enable or disable BAM file generation"
info: null
default:
- true
required: true
direction: "input"
multiple: false
multiple_sep: ";"
- type: "boolean_true"
name: "--nosecondary"
description: "Disable secondary analysis (e.g., clustering)"
info: null
direction: "input"
- type: "integer"
name: "--r1_length"
description: "Hard trim the input Read 1 to this length before analysis"
info: null
required: false
min: 1
direction: "input"
multiple: false
multiple_sep: ";"
- type: "integer"
name: "--r2_length"
description: "Hard trim the input Read 2 to this length before analysis"
info: null
required: false
min: 1
direction: "input"
multiple: false
multiple_sep: ";"
- type: "boolean"
name: "--filter_probes"
description: "Whether to filter the probe set using the \"included\" column"
info: null
default:
- true
required: false
direction: "input"
multiple: false
multiple_sep: ";"
- type: "integer"
name: "--custom_bin_size"
description: "Bin Visium HD data to specified size in microns (4-100, even values\
\ only) in addition to the standard binning size (2 µm, 8 µm, 16 µm)"
info: null
required: false
min: 4
max: 100
direction: "input"
multiple: false
multiple_sep: ";"
- name: "Input Selection"
arguments:
- type: "string"
name: "--project"
description: "Project folder name within mkfastq output"
info: null
required: false
direction: "input"
multiple: false
multiple_sep: ";"
- type: "string"
name: "--sample"
description: "Prefix of FASTQ filenames to select"
info: null
required: false
direction: "input"
multiple: false
multiple_sep: ";"
- type: "integer"
name: "--lanes"
description: "Only use FASTQs from selected lanes"
info: null
example:
- 1
- 2
- 3
required: false
direction: "input"
multiple: true
multiple_sep: ";"
resources:
- type: "bash_script"
path: "script.sh"
is_executable: true
- type: "file"
path: "nextflow_labels.config"
dest: "nextflow_labels.config"
description: "Count gene expression and protein expression reads from a single capture\
\ area."
test_resources:
- type: "bash_script"
path: "test.sh"
is_executable: true
- type: "file"
path: "visium"
- type: "file"
path: "GRCh38"
info: null
status: "enabled"
scope:
image: "public"
target: "public"
repositories:
- type: "github"
name: "openpipeline"
repo: "openpipelines-bio/openpipeline"
tag: "main_build"
keywords:
- "spaceranger"
links:
repository: "https://github.com/openpipelines-bio/openpipeline_spatial"
docker_registry: "ghcr.io"
documentation: "https://www.10xgenomics.com/support/software/space-ranger/latest/analysis/running-pipelines/space-ranger-count"
runners:
- type: "executable"
id: "executable"
docker_setup_strategy: "ifneedbepullelsecachedbuild"
- type: "nextflow"
id: "nextflow"
directives:
tag: "$id"
auto:
simplifyInput: true
simplifyOutput: false
transcript: false
publish: false
config:
labels:
mem1gb: "memory = 1000000000.B"
mem2gb: "memory = 2000000000.B"
mem5gb: "memory = 5000000000.B"
mem10gb: "memory = 10000000000.B"
mem20gb: "memory = 20000000000.B"
mem50gb: "memory = 50000000000.B"
mem100gb: "memory = 100000000000.B"
mem200gb: "memory = 200000000000.B"
mem500gb: "memory = 500000000000.B"
mem1tb: "memory = 1000000000000.B"
mem2tb: "memory = 2000000000000.B"
mem5tb: "memory = 5000000000000.B"
mem10tb: "memory = 10000000000000.B"
mem20tb: "memory = 20000000000000.B"
mem50tb: "memory = 50000000000000.B"
mem100tb: "memory = 100000000000000.B"
mem200tb: "memory = 200000000000000.B"
mem500tb: "memory = 500000000000000.B"
mem1gib: "memory = 1073741824.B"
mem2gib: "memory = 2147483648.B"
mem4gib: "memory = 4294967296.B"
mem8gib: "memory = 8589934592.B"
mem16gib: "memory = 17179869184.B"
mem32gib: "memory = 34359738368.B"
mem64gib: "memory = 68719476736.B"
mem128gib: "memory = 137438953472.B"
mem256gib: "memory = 274877906944.B"
mem512gib: "memory = 549755813888.B"
mem1tib: "memory = 1099511627776.B"
mem2tib: "memory = 2199023255552.B"
mem4tib: "memory = 4398046511104.B"
mem8tib: "memory = 8796093022208.B"
mem16tib: "memory = 17592186044416.B"
mem32tib: "memory = 35184372088832.B"
mem64tib: "memory = 70368744177664.B"
mem128tib: "memory = 140737488355328.B"
mem256tib: "memory = 281474976710656.B"
mem512tib: "memory = 562949953421312.B"
cpu1: "cpus = 1"
cpu2: "cpus = 2"
cpu5: "cpus = 5"
cpu10: "cpus = 10"
cpu20: "cpus = 20"
cpu50: "cpus = 50"
cpu100: "cpus = 100"
cpu200: "cpus = 200"
cpu500: "cpus = 500"
cpu1000: "cpus = 1000"
script:
- "includeConfig(\"nextflow_labels.config\")"
debug: false
container: "docker"
engines:
- type: "docker"
id: "docker"
image: "ghcr.io/data-intuitive/spaceranger:3.1"
target_registry: "images.viash-hub.com"
target_tag: "build_main"
namespace_separator: "/"
setup:
- type: "docker"
run:
- "DEBIAN_FRONTEND=noninteractive apt update && \\\napt upgrade -y && apt install\
\ -y procps && rm -rf /var/lib/apt/lists/*\n"
entrypoint: []
cmd: null
- type: "native"
id: "native"
build_info:
config: "src/mapping/spaceranger_count/config.vsh.yaml"
runner: "nextflow"
engine: "docker|native"
output: "target/nextflow/mapping/spaceranger_count"
executable: "target/nextflow/mapping/spaceranger_count/main.nf"
viash_version: "0.9.3"
git_commit: "491efceaaf171f50aaa1d28f690c1e974cffc456"
git_remote: "https://github.com/openpipelines-bio/openpipeline_spatial"
package_config:
name: "openpipeline_spatial"
version: "build_main"
info:
test_resources:
- type: "s3"
path: "s3://openpipelines-bio/openpipeline_spatial/resources_test"
dest: "resources_test"
repositories:
- type: "github"
name: "openpipeline"
repo: "openpipelines-bio/openpipeline"
tag: "main_build"
viash_version: "0.9.3"
source: "src"
target: "target"
config_mods:
- ".resources += {path: '/src/labels.config', dest: 'nextflow_labels.config'}\n\
.runners[.type == 'nextflow'].config.script := 'includeConfig(\"nextflow_labels.config\"\
)'"
- ".engines += { type: \"native\" }"
- ".engines[.type == 'docker'].target_registry := 'images.viash-hub.com'"
- ".engines[.type == 'docker'].target_tag := 'build_main'"
organization: "vsh"
links:
repository: "https://github.com/openpipelines-bio/openpipeline_spatial"
docker_registry: "ghcr.io"

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,126 @@
manifest {
name = 'mapping/spaceranger_count'
mainScript = 'main.nf'
nextflowVersion = '!>=20.12.1-edge'
version = 'build_main'
description = 'Count gene expression and protein expression reads from a single capture area.'
author = 'Jakub Majercik'
}
process.container = 'nextflow/bash:latest'
// detect tempdir
tempDir = java.nio.file.Paths.get(
System.getenv('NXF_TEMP') ?:
System.getenv('VIASH_TEMP') ?:
System.getenv('TEMPDIR') ?:
System.getenv('TMPDIR') ?:
'/tmp'
).toAbsolutePath()
profiles {
no_publish {
process {
withName: '.*' {
publishDir = [
enabled: false
]
}
}
}
mount_temp {
docker.temp = tempDir
podman.temp = tempDir
charliecloud.temp = tempDir
}
docker {
docker.enabled = true
// docker.userEmulation = true
singularity.enabled = false
podman.enabled = false
shifter.enabled = false
charliecloud.enabled = false
}
singularity {
singularity.enabled = true
singularity.autoMounts = true
docker.enabled = false
podman.enabled = false
shifter.enabled = false
charliecloud.enabled = false
}
podman {
podman.enabled = true
docker.enabled = false
singularity.enabled = false
shifter.enabled = false
charliecloud.enabled = false
}
shifter {
shifter.enabled = true
docker.enabled = false
singularity.enabled = false
podman.enabled = false
charliecloud.enabled = false
}
charliecloud {
charliecloud.enabled = true
docker.enabled = false
singularity.enabled = false
podman.enabled = false
shifter.enabled = false
}
}
process{
withLabel: mem1gb { memory = 1000000000.B }
withLabel: mem2gb { memory = 2000000000.B }
withLabel: mem5gb { memory = 5000000000.B }
withLabel: mem10gb { memory = 10000000000.B }
withLabel: mem20gb { memory = 20000000000.B }
withLabel: mem50gb { memory = 50000000000.B }
withLabel: mem100gb { memory = 100000000000.B }
withLabel: mem200gb { memory = 200000000000.B }
withLabel: mem500gb { memory = 500000000000.B }
withLabel: mem1tb { memory = 1000000000000.B }
withLabel: mem2tb { memory = 2000000000000.B }
withLabel: mem5tb { memory = 5000000000000.B }
withLabel: mem10tb { memory = 10000000000000.B }
withLabel: mem20tb { memory = 20000000000000.B }
withLabel: mem50tb { memory = 50000000000000.B }
withLabel: mem100tb { memory = 100000000000000.B }
withLabel: mem200tb { memory = 200000000000000.B }
withLabel: mem500tb { memory = 500000000000000.B }
withLabel: mem1gib { memory = 1073741824.B }
withLabel: mem2gib { memory = 2147483648.B }
withLabel: mem4gib { memory = 4294967296.B }
withLabel: mem8gib { memory = 8589934592.B }
withLabel: mem16gib { memory = 17179869184.B }
withLabel: mem32gib { memory = 34359738368.B }
withLabel: mem64gib { memory = 68719476736.B }
withLabel: mem128gib { memory = 137438953472.B }
withLabel: mem256gib { memory = 274877906944.B }
withLabel: mem512gib { memory = 549755813888.B }
withLabel: mem1tib { memory = 1099511627776.B }
withLabel: mem2tib { memory = 2199023255552.B }
withLabel: mem4tib { memory = 4398046511104.B }
withLabel: mem8tib { memory = 8796093022208.B }
withLabel: mem16tib { memory = 17592186044416.B }
withLabel: mem32tib { memory = 35184372088832.B }
withLabel: mem64tib { memory = 70368744177664.B }
withLabel: mem128tib { memory = 140737488355328.B }
withLabel: mem256tib { memory = 281474976710656.B }
withLabel: mem512tib { memory = 562949953421312.B }
withLabel: cpu1 { cpus = 1 }
withLabel: cpu2 { cpus = 2 }
withLabel: cpu5 { cpus = 5 }
withLabel: cpu10 { cpus = 10 }
withLabel: cpu20 { cpus = 20 }
withLabel: cpu50 { cpus = 50 }
withLabel: cpu100 { cpus = 100 }
withLabel: cpu200 { cpus = 200 }
withLabel: cpu500 { cpus = 500 }
withLabel: cpu1000 { cpus = 1000 }
}
includeConfig("nextflow_labels.config")

View File

@@ -0,0 +1,68 @@
process {
// Default resources for components that hardly do any processing
memory = { 2.GB * task.attempt }
cpus = 1
// Retry for exit codes that have something to do with memory issues
errorStrategy = { task.exitStatus in 137..140 ? 'retry' : 'terminate' }
maxRetries = 3
maxMemory = null
// CPU resources
withLabel: singlecpu { cpus = 1 }
withLabel: lowcpu { cpus = 4 }
withLabel: midcpu { cpus = 10 }
withLabel: highcpu { cpus = 20 }
// Memory resources
withLabel: lowmem { memory = { get_memory( 50.GB * task.attempt ) } }
withLabel: midmem { memory = { get_memory( 50.GB * task.attempt ) } }
withLabel: highmem { memory = { get_memory( 50.GB * task.attempt ) } }
withLabel: veryhighmem { memory = { get_memory( 75.GB * task.attempt ) } }
// Disk space
// Nextflow apparently can't handle empty directives, i.e.
// withLabel: lowdisk {}
// so for that reason we have to add a dummy directive
withLabel: lowdisk {
dummyDirective = "dummyValue"
}
withLabel: middisk {
dummyDirective = "dummyValue"
}
withLabel: highdisk {
dummyDirective = "dummyValue"
}
withLabel: veryhighdisk {
dummyDirective = "dummyValue"
}
// NOTE: The above labels intentionally do not have an effect by default.
// The user should set the disk space requirements by adding the following
// to the compute environment:
//
// withLabel: lowdisk { disk = { 20.GB * task.attempt } }
// withLabel: middisk { disk = { 100.GB * task.attempt } }
// withLabel: highdisk { disk = { 200.GB * task.attempt } }
// withLabel: veryhighdisk { disk = { 500.GB * task.attempt } }
}
def get_memory(to_compare) {
if (!process.containsKey("maxMemory") || !process.maxMemory) {
return to_compare
}
try {
if (process.containsKey("maxRetries") && process.maxRetries && task.attempt == (process.maxRetries as int)) {
return process.maxMemory
}
else if (to_compare.compareTo(process.maxMemory as nextflow.util.MemoryUnit) == 1) {
return max_memory as nextflow.util.MemoryUnit
}
else {
return to_compare
}
} catch (all) {
println "Error processing memory resources. Please check that process.maxMemory '${process.maxMemory}' and process.maxRetries '${process.maxRetries}' are valid!"
System.exit(1)
}
}

View File

@@ -0,0 +1,237 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "spaceranger_count",
"description": "Count gene expression and protein expression reads from a single capture area.",
"type": "object",
"$defs": {
"inputs": {
"title": "Inputs",
"type": "object",
"description": "No description",
"properties": {
"gex_reference": {
"type": "string",
"format": "path",
"exists": true,
"description": "Path of folder containing 10x-compatible reference",
"help_text": "Type: `file`, multiple: `False`, required, direction: `input`, example: `\"/path/to/refdata-gex-GRCh38-2020-A\"`. "
},
"input": {
"type": "string",
"format": "path",
"exists": true,
"description": "Path to a directory containing input FASTQ data",
"help_text": "Type: `file`, multiple: `False`, required, direction: `input`, example: `\"/path/to/fastq_folder\"`. "
},
"probe_set": {
"type": "string",
"format": "path",
"exists": true,
"description": "CSV file specifying the probe set used",
"help_text": "Type: `file`, multiple: `False`, required, direction: `input`, example: `\"Visium_Human_Transcriptome_Probe_Set_v2.0_GRCh38-2020-A.csv\"`. "
},
"cytaimage": {
"type": "string",
"format": "path",
"description": "Brightfield image generated by the CytAssist instrument",
"help_text": "Type: `file`, multiple: `False`, direction: `input`, example: `\"cyta_image.tif\"`. "
},
"image": {
"type": "string",
"format": "path",
"description": "H&E or fluorescence microscope image in TIFF or JPG format",
"help_text": "Type: `file`, multiple: `False`, direction: `input`, example: `\"brightfield.tif\"`. "
}
}
},
"outputs": {
"title": "Outputs",
"type": "object",
"description": "No description",
"properties": {
"output": {
"type": "string",
"format": "path",
"description": "The folder to store the alignment results",
"help_text": "Type: `file`, multiple: `False`, required, default: `\"$id.$key.output\"`, direction: `output`, example: `\"/path/to/output\"`. ",
"default": "$id.$key.output"
}
}
},
"slide information": {
"title": "Slide Information",
"type": "object",
"description": "No description",
"properties": {
"slide": {
"type": "string",
"description": "Visium slide serial number (e.g., 'V10J25-015')",
"help_text": "Type: `string`, multiple: `False`, example: `\"V10J25-015\"`. "
},
"area": {
"type": "string",
"description": "Visium capture area identifier (e.g., 'A1')",
"help_text": "Type: `string`, multiple: `False`, example: `\"A1\"`. "
},
"unknown_slide": {
"type": "string",
"description": "Use this option if the slide serial number and area were entered incorrectly on the CytAssist \ninstrument and the correct values are unknown",
"help_text": "Type: `string`, multiple: `False`, choices: ``visium-1`, `visium-2`, `visium-2-large`, `visium-hd``. ",
"enum": [
"visium-1",
"visium-2",
"visium-2-large",
"visium-hd"
]
},
"slidefile": {
"type": "string",
"format": "path",
"description": "Slide design file for offline use",
"help_text": "Type: `file`, multiple: `False`, direction: `input`, example: `\"slide_design.gpr\"`. "
},
"override_id": {
"type": "boolean",
"description": "Overrides the slide serial number and capture area provided in the Cytassist image metadata",
"help_text": "Type: `boolean_true`, multiple: `False`, default: `false`. ",
"default": false
}
}
},
"image options": {
"title": "Image Options",
"type": "object",
"description": "No description",
"properties": {
"darkimage": {
"type": "string",
"format": "path",
"description": "Multi-channel, dark-background fluorescence image",
"help_text": "Type: `file`, multiple: `False`, direction: `input`, example: `\"fluorescence.tif\"`. "
},
"colorizedimage": {
"type": "string",
"format": "path",
"description": "Color image representing pre-colored dark-background fluorescence images",
"help_text": "Type: `file`, multiple: `False`, direction: `input`, example: `\"colored_fluorescence.tif\"`. "
},
"dapi_index": {
"type": "integer",
"description": "Index of DAPI channel (1-indexed) of fluorescence image",
"help_text": "Type: `integer`, multiple: `False`, example: `1`. "
},
"image_scale": {
"type": "number",
"description": "Microns per microscope image pixel",
"help_text": "Type: `double`, multiple: `False`, example: `0.65`. "
},
"reorient_images": {
"type": "boolean",
"description": "Whether to rotate and mirror image to align fiducial pattern",
"help_text": "Type: `boolean`, multiple: `False`, default: `true`. ",
"default": true
}
}
},
"processing options": {
"title": "Processing Options",
"type": "object",
"description": "No description",
"properties": {
"create_bam": {
"type": "boolean",
"description": "Enable or disable BAM file generation",
"help_text": "Type: `boolean`, multiple: `False`, required, default: `true`. ",
"default": true
},
"nosecondary": {
"type": "boolean",
"description": "Disable secondary analysis (e.g., clustering)",
"help_text": "Type: `boolean_true`, multiple: `False`, default: `false`. ",
"default": false
},
"r1_length": {
"type": "integer",
"description": "Hard trim the input Read 1 to this length before analysis",
"help_text": "Type: `integer`, multiple: `False`. "
},
"r2_length": {
"type": "integer",
"description": "Hard trim the input Read 2 to this length before analysis",
"help_text": "Type: `integer`, multiple: `False`. "
},
"filter_probes": {
"type": "boolean",
"description": "Whether to filter the probe set using the \"included\" column",
"help_text": "Type: `boolean`, multiple: `False`, default: `true`. ",
"default": true
},
"custom_bin_size": {
"type": "integer",
"description": "Bin Visium HD data to specified size in microns (4-100, even values only) in addition to the standard binning size (2 µm, 8 µm, 16 µm)",
"help_text": "Type: `integer`, multiple: `False`. "
}
}
},
"input selection": {
"title": "Input Selection",
"type": "object",
"description": "No description",
"properties": {
"project": {
"type": "string",
"description": "Project folder name within mkfastq output",
"help_text": "Type: `string`, multiple: `False`. "
},
"sample": {
"type": "string",
"description": "Prefix of FASTQ filenames to select",
"help_text": "Type: `string`, multiple: `False`. "
},
"lanes": {
"type": "array",
"items": {
"type": "integer"
},
"description": "Only use FASTQs from selected lanes",
"help_text": "Type: `integer`, multiple: `True`, example: `[1;2;3]`. "
}
}
},
"nextflow input-output arguments": {
"title": "Nextflow input-output arguments",
"type": "object",
"description": "Input/output parameters for Nextflow itself. Please note that both publishDir and publish_dir are supported but at least one has to be configured.",
"properties": {
"publish_dir": {
"type": "string",
"description": "Path to an output directory.",
"help_text": "Type: `string`, multiple: `False`, required, example: `\"output/\"`. "
}
}
}
},
"allOf": [
{
"$ref": "#/$defs/inputs"
},
{
"$ref": "#/$defs/outputs"
},
{
"$ref": "#/$defs/slide information"
},
{
"$ref": "#/$defs/image options"
},
{
"$ref": "#/$defs/processing options"
},
{
"$ref": "#/$defs/input selection"
},
{
"$ref": "#/$defs/nextflow input-output arguments"
}
]
}