Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
57 changes: 44 additions & 13 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,8 @@ flowchart TB
comp_method[/"<a href='https://github.com/openproblems-bio/task_cyto_batch_integration#component-type-method'>Method</a>"/]
comp_control_method[/"<a href='https://github.com/openproblems-bio/task_cyto_batch_integration#component-type-control-method'>Control Method</a>"/]
comp_metric[/"<a href='https://github.com/openproblems-bio/task_cyto_batch_integration#component-type-metric'>Metric</a>"/]
file_integrated("<a href='https://github.com/openproblems-bio/task_cyto_batch_integration#file-format-integrated'>Integrated</a>")
file_integrated_split1("<a href='https://github.com/openproblems-bio/task_cyto_batch_integration#file-format-integrated'>Integrated</a>")
file_integrated_split2("<a href='https://github.com/openproblems-bio/task_cyto_batch_integration#file-format-integrated'>Integrated</a>")
file_score("<a href='https://github.com/openproblems-bio/task_cyto_batch_integration#file-format-score'>Score</a>")
file_common_dataset---comp_data_processor
comp_data_processor-->file_censored
Expand All @@ -60,12 +61,12 @@ flowchart TB
file_censored---comp_method
file_unintegrated---comp_control_method
file_unintegrated---comp_metric
comp_method-->file_integrated
comp_control_method-->file_integrated
comp_control_method-->file_integrated
comp_method-->file_integrated_split1
comp_control_method-->file_integrated_split1
comp_control_method-->file_integrated_split2
comp_metric-->file_score
file_integrated---comp_metric
file_integrated---comp_metric
file_integrated_split1---comp_metric
file_integrated_split2---comp_metric
```

## File format: Common Dataset
Expand Down Expand Up @@ -131,8 +132,8 @@ Arguments:
| Name | Type | Description |
|:---|:---|:---|
| `--input` | `file` | A subset of the common dataset. |
| `--output_censored_left` | `file` | (*Output*) An unintegrated dataset with certain columns (cells metadata), such as the donor information, hidden. These columns are intentionally hidden to prevent bias. |
| `--output_censored_right` | `file` | (*Output*) An unintegrated dataset with certain columns (cells metadata), such as the donor information, hidden. These columns are intentionally hidden to prevent bias. |
| `--output_censored_split1` | `file` | (*Output*) An unintegrated dataset with certain columns (cells metadata), such as the donor information, hidden. These columns are intentionally hidden to prevent bias. |
| `--output_censored_split2` | `file` | (*Output*) An unintegrated dataset with certain columns (cells metadata), such as the donor information, hidden. These columns are intentionally hidden to prevent bias. |
| `--output_unintegrated` | `file` | (*Output*) The complete unintegrated dataset. |

</div>
Expand Down Expand Up @@ -274,8 +275,8 @@ Arguments:
| Name | Type | Description |
|:---|:---|:---|
| `--input_unintegrated` | `file` | The complete unintegrated dataset. |
| `--output_integrated_left` | `file` | (*Output*) Integrated dataset which batch effect was corrected by an algorithm. |
| `--output_integrated_right` | `file` | (*Output*) Integrated dataset which batch effect was corrected by an algorithm. |
| `--output_integrated_split1` | `file` | (*Output*) Integrated dataset which batch effect was corrected by an algorithm. |
| `--output_integrated_split2` | `file` | (*Output*) Integrated dataset which batch effect was corrected by an algorithm. |

</div>

Expand All @@ -290,8 +291,8 @@ Arguments:
| Name | Type | Description |
|:---|:---|:---|
| `--input_unintegrated` | `file` | The complete unintegrated dataset. |
| `--input_integrated_left` | `file` | Integrated dataset which batch effect was corrected by an algorithm. |
| `--input_integrated_right` | `file` | Integrated dataset which batch effect was corrected by an algorithm. |
| `--input_integrated_split1` | `file` | Integrated dataset which batch effect was corrected by an algorithm. |
| `--input_integrated_split2` | `file` | Integrated dataset which batch effect was corrected by an algorithm. |
| `--output` | `file` | (*Output*) File indicating the score of a metric. |

</div>
Expand All @@ -301,7 +302,37 @@ Arguments:
Integrated dataset which batch effect was corrected by an algorithm

Example file:
`resources_test/task_cyto_batch_integration/mouse_spleen_flow_cytometry_subset/integrated.h5ad`
`resources_test/task_cyto_batch_integration/mouse_spleen_flow_cytometry_subset/integrated_split1.h5ad`

Format:

<div class="small">

AnnData object
layers: 'integrated'
uns: 'dataset_id', 'method_id', 'parameters'

</div>

Data structure:

<div class="small">

| Slot | Type | Description |
|:---|:---|:---|
| `layers["integrated"]` | `double` | The integrated data as returned by a batch correction method. |
| `uns["dataset_id"]` | `string` | A unique identifier for the dataset. |
| `uns["method_id"]` | `string` | A unique identifier for the method. |
| `uns["parameters"]` | `object` | (*Optional*) The parameters used for the integration. |

</div>

## File format: Integrated

Integrated dataset which batch effect was corrected by an algorithm

Example file:
`resources_test/task_cyto_batch_integration/mouse_spleen_flow_cytometry_subset/integrated_split2.h5ad`

Format:

Expand Down
2 changes: 1 addition & 1 deletion scripts/create_resources/process_raw_datasets.sh
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ cat > /tmp/params.yaml << 'HERE'
input_states: s3://openproblems-data/resources/task_cyto_batch_integration/datasets_raw/**/state.yaml
rename_keys: 'input:output_dataset'
output_state: '$id/state.yaml'
settings: '{"output_unintegrated": "$id/unintegrated.h5ad", "output_censored_left": "$id/censored_left.h5ad", "output_censored_right": "$id/censored_right.h5ad"}'
settings: '{"output_unintegrated": "$id/unintegrated.h5ad", "output_censored_split1": "$id/censored_split1.h5ad", "output_censored_split2": "$id/censored_split2.h5ad"}'
publish_dir: s3://openproblems-data/resources/task_cyto_batch_integration/datasets/
HERE

Expand Down
24 changes: 12 additions & 12 deletions scripts/create_test_resources/mouse_spleen_flow_cytometry_subset.sh
Original file line number Diff line number Diff line change
Expand Up @@ -52,34 +52,34 @@ HERE
viash run src/data_processors/process_dataset/config.vsh.yaml -- \
--input $DATASET_DIR/common_dataset.h5ad \
--output_unintegrated $DATASET_DIR/unintegrated.h5ad \
--output_censored_left $DATASET_DIR/censored_left.h5ad \
--output_censored_right $DATASET_DIR/censored_right.h5ad
--output_censored_split1 $DATASET_DIR/censored_split1.h5ad \
--output_censored_split2 $DATASET_DIR/censored_split2.h5ad

# run one method
viash run src/methods/harmonypy/config.vsh.yaml -- \
--input $DATASET_DIR/censored_left.h5ad \
--output $DATASET_DIR/integrated_left.h5ad
--input $DATASET_DIR/censored_split1.h5ad \
--output $DATASET_DIR/integrated_split1.h5ad

# run one method
viash run src/methods/harmonypy/config.vsh.yaml -- \
--input $DATASET_DIR/censored_right.h5ad \
--output $DATASET_DIR/integrated_right.h5ad
--input $DATASET_DIR/censored_split2.h5ad \
--output $DATASET_DIR/integrated_split2.h5ad

# run one metric
viash run src/metrics/emd/config.vsh.yaml -- \
--input_unintegrated $DATASET_DIR/unintegrated.h5ad \
--input_integrated_left $DATASET_DIR/integrated_left.h5ad \
--input_integrated_right $DATASET_DIR/integrated_right.h5ad \
--input_integrated_split1 $DATASET_DIR/integrated_split1.h5ad \
--input_integrated_split2 $DATASET_DIR/integrated_split2.h5ad \
--output $DATASET_DIR/score.h5ad

# write manual state.yaml
cat > $DATASET_DIR/state.yaml << HERE
id: $DATASET_ID
unintegrated: !file unintegrated.h5ad
censored_left: !file censored_left.h5ad
censored_right: !file censored_right.h5ad
integrated_left: !file integrated_left.h5ad
integrated_right: !file integrated_right.h5ad
censored_split1: !file censored_split1.h5ad
censored_split2: !file censored_split2.h5ad
integrated_split1: !file integrated_split1.h5ad
integrated_split2: !file integrated_split2.h5ad
score: !file score.h5ad
HERE

Expand Down
2 changes: 1 addition & 1 deletion scripts/run_benchmark/run_full_local.sh
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ publish_dir="resources/results/${RUN_ID}"
# write the parameters to file
cat > /tmp/params.yaml << HERE
input_states: resources/datasets/**/state.yaml
rename_keys: 'input_censored_left:output_censored_left;input_censored_right:output_censored_right;input_unintegrated:output_unintegrated'
rename_keys: 'input_censored_split1:output_censored_split1;input_censored_split2:output_censored_split2;input_unintegrated:output_unintegrated'
output_state: "state.yaml"
publish_dir: "$publish_dir"
HERE
Expand Down
2 changes: 1 addition & 1 deletion scripts/run_benchmark/run_full_seqeracloud.sh
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ publish_dir="s3://openproblems-data/resources/task_cyto_batch_integration/result
# write the parameters to file
cat > /tmp/params.yaml << HERE
input_states: s3://openproblems-data/resources/task_cyto_batch_integration/datasets/**/state.yaml
rename_keys: 'input_censored_left:output_censored_left;input_censored_right:output_censored_right;input_unintegrated:output_unintegrated'
rename_keys: 'input_censored_split1:output_censored_split1;input_censored_split2:output_censored_split2;input_unintegrated:output_unintegrated'
output_state: "state.yaml"
publish_dir: "$publish_dir"
HERE
Expand Down
4 changes: 2 additions & 2 deletions scripts/run_benchmark/run_test_local.sh
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ nextflow run . \
-c common/nextflow_helpers/labels_ci.config \
--id mouse_spleen_flow_cytometry_subset \
--input_unintegrated resources_test/task_cyto_batch_integration/mouse_spleen_flow_cytometry_subset/unintegrated.h5ad \
--input_censored_left resources_test/task_cyto_batch_integration/mouse_spleen_flow_cytometry_subset/censored_left.h5ad \
--input_censored_right resources_test/task_cyto_batch_integration/mouse_spleen_flow_cytometry_subset/censored_right.h5ad \
--input_censored_split1 resources_test/task_cyto_batch_integration/mouse_spleen_flow_cytometry_subset/censored_split1.h5ad \
--input_censored_split2 resources_test/task_cyto_batch_integration/mouse_spleen_flow_cytometry_subset/censored_split2.h5ad \
--output_state state.yaml \
--publish_dir "$publish_dir"
8 changes: 4 additions & 4 deletions src/api/comp_control_method.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,12 @@ arguments:
__merge__: file_unintegrated.yaml
required: true
direction: input
- name: --output_integrated_left
__merge__: file_integrated.yaml
- name: --output_integrated_split1
__merge__: file_integrated_split1.yaml
required: true
direction: output
- name: --output_integrated_right
__merge__: file_integrated.yaml
- name: --output_integrated_split2
__merge__: file_integrated_split2.yaml
required: true
direction: output
test_resources:
Expand Down
4 changes: 2 additions & 2 deletions src/api/comp_data_processor.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,11 @@ arguments:
__merge__: file_common_dataset.yaml
direction: input
required: true
- name: "--output_censored_left"
- name: "--output_censored_split1"
__merge__: file_censored.yaml
direction: output
required: true
- name: "--output_censored_right"
- name: "--output_censored_split2"
__merge__: file_censored.yaml
direction: output
required: true
Expand Down
2 changes: 1 addition & 1 deletion src/api/comp_method.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ arguments:
required: true
direction: input
- name: --output
__merge__: file_integrated.yaml
__merge__: file_integrated_split1.yaml
required: true
direction: output
test_resources:
Expand Down
8 changes: 4 additions & 4 deletions src/api/comp_metric.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,12 @@ arguments:
__merge__: file_unintegrated.yaml
direction: input
required: true
- name: "--input_integrated_left"
__merge__: file_integrated.yaml
- name: "--input_integrated_split1"
__merge__: file_integrated_split1.yaml
direction: input
required: true
- name: "--input_integrated_right"
__merge__: file_integrated.yaml
- name: "--input_integrated_split2"
__merge__: file_integrated_split2.yaml
direction: input
required: true
- name: "--output"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
type: file
example: "resources_test/task_cyto_batch_integration/mouse_spleen_flow_cytometry_subset/integrated_left.h5ad"
example: "resources_test/task_cyto_batch_integration/mouse_spleen_flow_cytometry_subset/integrated_split1.h5ad"
label: Integrated
summary: "Integrated dataset which batch effect was corrected by an algorithm"
info:
Expand Down
25 changes: 25 additions & 0 deletions src/api/file_integrated_split2.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
type: file
example: "resources_test/task_cyto_batch_integration/mouse_spleen_flow_cytometry_subset/integrated_split2.h5ad"
label: Integrated
summary: "Integrated dataset which batch effect was corrected by an algorithm"
info:
format:
type: h5ad
layers:
- type: double
name: integrated
description: The integrated data as returned by a batch correction method
required: true
uns:
- type: string
name: dataset_id
description: "A unique identifier for the dataset"
required: true
- type: string
name: method_id
description: "A unique identifier for the method"
required: true
- type: object
name: parameters
description: "The parameters used for the integration"
required: false
32 changes: 16 additions & 16 deletions src/control_methods/no_integration/script.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@
# The following code has been auto-generated by Viash.
par = {
'input_unintegrated': r'resources_test/task_cyto_batch_integration/mouse_spleen_flow_cytometry_subset/unintegrated.h5ad',
'output_integrated_left': r'resources_test/task_cyto_batch_integration/mouse_spleen_flow_cytometry_subset/integrated.h5ad',
'output_integrated_right': r'resources_test/task_cyto_batch_integration/mouse_spleen_flow_cytometry_subset/integrated.h5ad'
'output_integrated_split1': r'resources_test/task_cyto_batch_integration/mouse_spleen_flow_cytometry_subset/integrated.h5ad',
'output_integrated_split2': r'resources_test/task_cyto_batch_integration/mouse_spleen_flow_cytometry_subset/integrated.h5ad'
}
meta = {
'name': r'no_integration',
Expand All @@ -18,35 +18,35 @@

print("Extracting and splitting unintegrated data", flush=True)
#split 1
adata_left = adata[(adata.obs.is_control>0) | (adata.obs.split==1)]
integrated_left = adata_left.layers["preprocessed"]
adata_split1 = adata[(adata.obs.is_control>0) | (adata.obs.split==1)]
integrated_split1 = adata_split1.layers["preprocessed"]
#split 2
adata_right = adata[(adata.obs.is_control>0) | (adata.obs.split==2)]
integrated_right = adata_right.layers["preprocessed"]
adata_split2 = adata[(adata.obs.is_control>0) | (adata.obs.split==2)]
integrated_split2 = adata_split2.layers["preprocessed"]

print("Write output AnnData to files", flush=True)
#split 1
output_left = ad.AnnData(
obs=adata_left.obs[[]],
var=adata_left.var[[]],
layers={"integrated": integrated_left},
output_split1 = ad.AnnData(
obs=adata_split1.obs[[]],
var=adata_split1.var[[]],
layers={"integrated": integrated_split1},
uns={
"dataset_id": adata.uns["dataset_id"],
"method_id": meta["name"],
"parameters": {},
},
)
#split 2
output_right = ad.AnnData(
obs=adata_right.obs[[]],
var=adata_right.var[[]],
layers={"integrated": integrated_right},
output_split2 = ad.AnnData(
obs=adata_split2.obs[[]],
var=adata_split2.var[[]],
layers={"integrated": integrated_split2},
uns={
"dataset_id": adata.uns["dataset_id"],
"method_id": meta["name"],
"parameters": {},
},
)

output_left.write_h5ad(par["output_integrated_left"], compression="gzip")
output_right.write_h5ad(par["output_integrated_right"], compression="gzip")
output_split1.write_h5ad(par["output_integrated_split1"], compression="gzip")
output_split2.write_h5ad(par["output_integrated_split2"], compression="gzip")
28 changes: 14 additions & 14 deletions src/control_methods/perfect_integration/script.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@
# The following code has been auto-generated by Viash.
par = {
"input_unintegrated": "resources_test/task_cyto_batch_integration/mouse_spleen_flow_cytometry_subset/unintegrated.h5ad",
"output_integrated_left": "resources_test/task_cyto_batch_integration/mouse_spleen_flow_cytometry_subset/integrated_left.h5ad",
"output_integrated_right": "resources_test/task_cyto_batch_integration/mouse_spleen_flow_cytometry_subset/integrated_right.h5ad",
"output_integrated_split1": "resources_test/task_cyto_batch_integration/mouse_spleen_flow_cytometry_subset/integrated_split1.h5ad",
"output_integrated_split2": "resources_test/task_cyto_batch_integration/mouse_spleen_flow_cytometry_subset/integrated_split2.h5ad",
}
meta = {"name": "perfect_integration"}

Expand All @@ -17,34 +17,34 @@
print("Extracting and splitting unintegrated data", flush=True)

# split 1
adata_left = adata[(adata.obs.is_control > 0) | (adata.obs.batch == 1)]
integrated_left = adata_left.layers["preprocessed"]
adata_split1 = adata[(adata.obs.is_control > 0) | (adata.obs.batch == 1)]
integrated_split1 = adata_split1.layers["preprocessed"]

# split 2 == split 1 in this case

print("Write output AnnData to file", flush=True)
# split 1
output_left = ad.AnnData(
obs=adata_left.obs[[]],
var=adata_left.var[[]],
layers={"integrated": integrated_left},
output_split1 = ad.AnnData(
obs=adata_split1.obs[[]],
var=adata_split1.var[[]],
layers={"integrated": integrated_split1},
uns={
"dataset_id": adata.uns["dataset_id"],
"method_id": meta["name"],
"parameters": {},
},
)
# split 2
output_right = ad.AnnData(
obs=adata_left.obs[[]],
var=adata_left.var[[]],
layers={"integrated": integrated_left},
output_split2 = ad.AnnData(
obs=adata_split1.obs[[]],
var=adata_split1.var[[]],
layers={"integrated": integrated_split1},
uns={
"dataset_id": adata.uns["dataset_id"],
"method_id": meta["name"],
"parameters": {},
},
)

output_left.write_h5ad(par["output_integrated_left"], compression="gzip")
output_right.write_h5ad(par["output_integrated_right"], compression="gzip")
output_split1.write_h5ad(par["output_integrated_split1"], compression="gzip")
output_split2.write_h5ad(par["output_integrated_split2"], compression="gzip")
Loading