diff --git a/workflows/imaging/histological-staining-area-quantification/README.md b/workflows/imaging/histological-staining-area-quantification/README.md new file mode 100644 index 0000000000..1f7135d3e3 --- /dev/null +++ b/workflows/imaging/histological-staining-area-quantification/README.md @@ -0,0 +1,33 @@ +# Histological Staining Area Quantification + +## Overview +This workflow quantifies stained tissue areas in brightfield histological images +using colour deconvolution and automated thresholding. It is designed for +3-channel stainings compatible with the H-E-DAB (HED) colour space, such as +Masson's Trichrome (MT) and Immunohistochemistry (IHC). + +## Inputs +- **Format:** TIFF +- **Type:** Brightfield microscopy images (whole slide or pre-cropped ROIs) +- **Structure:** Dataset collection (list) — one image per sample + +## Outputs +A tabular file (TSV) with one row per sample: +- `sample_id` — sample identifier +- `label` — pixel label (1 = stained region) +- `area` — total number of stained pixels +- `mean_intensity` — mean pixel intensity within the stained region +- `percent_area` — staining area as percentage of total image area + +## Compatible stainings +| Staining | Target channel | +|----------|---------------| +| Masson's Trichrome (MT) | Channel 2 | +| Immunohistochemistry (IHC) | Channel 2 (DAB) | + +## Notes +- Images must be pre-cropped to the region of interest before use. +- Verify that Channel 2 corresponds to your stain of interest before running. + +## Citation +If you use this workflow, please cite it via its WorkflowHub DOI. \ No newline at end of file diff --git a/workflows/imaging/histological-staining-area-quantification/histological-staining-area-quantification-test.yml b/workflows/imaging/histological-staining-area-quantification/histological-staining-area-quantification-test.yml new file mode 100644 index 0000000000..6b08e4a4c0 --- /dev/null +++ b/workflows/imaging/histological-staining-area-quantification/histological-staining-area-quantification-test.yml @@ -0,0 +1,147 @@ +- doc: Test outline for Histological-Staining-Area-Quantification + job: + ROI image for staining analysis: + class: Collection + collection_type: list + elements: + - class: File + identifier: control_1 + path: test-data/ROI image for staining analysis_control_1.tiff + - class: File + identifier: control_2 + path: test-data/ROI image for staining analysis_control_2.tiff + - class: File + identifier: control_3 + path: test-data/ROI image for staining analysis_control_3.tiff + - class: File + identifier: treatment_1 + path: test-data/ROI image for staining analysis_treatment_1.tiff + - class: File + identifier: treatment_2 + path: test-data/ROI image for staining analysis_treatment_2.tiff + - class: File + identifier: treatment_3 + path: test-data/ROI image for staining analysis_treatment_3.tiff + outputs: + 'Tabular File: Staining Feature Results': + path: 'test-data/Tabular File: Staining Feature Results.tabular' + output: + element_tests: + control_1: + path: test-data/output_control_1.txt + control_2: + path: test-data/output_control_2.txt + control_3: + path: test-data/output_control_3.txt + treatment_1: + path: test-data/output_treatment_1.txt + treatment_2: + path: test-data/output_treatment_2.txt + treatment_3: + path: test-data/output_treatment_3.txt + Selected Stain Channel: + element_tests: + control_1: + path: test-data/Selected Stain Channel_control_1.tiff + control_2: + path: test-data/Selected Stain Channel_control_2.tiff + control_3: + path: test-data/Selected Stain Channel_control_3.tiff + treatment_1: + path: test-data/Selected Stain Channel_treatment_1.tiff + treatment_2: + path: test-data/Selected Stain Channel_treatment_2.tiff + treatment_3: + path: test-data/Selected Stain Channel_treatment_3.tiff + 'Collection of Tabular: Staining Quantification Results': + element_tests: + control_1: + path: 'test-data/Collection of Tabular: Staining Quantification Results_control_1.tabular' + control_2: + path: 'test-data/Collection of Tabular: Staining Quantification Results_control_2.tabular' + control_3: + path: 'test-data/Collection of Tabular: Staining Quantification Results_control_3.tabular' + treatment_1: + path: 'test-data/Collection of Tabular: Staining Quantification Results_treatment_1.tabular' + treatment_2: + path: 'test-data/Collection of Tabular: Staining Quantification Results_treatment_2.tabular' + treatment_3: + path: 'test-data/Collection of Tabular: Staining Quantification Results_treatment_3.tabular' + 'Collection: Individual Deconvolved Channels': + element_tests: + control_1: + elements: + 1.tiff: + path: 'test-data/Collection: Individual Deconvolved Channels_1.tiff.tiff' + 2.tiff: + path: 'test-data/Collection: Individual Deconvolved Channels_2.tiff.tiff' + 3.tiff: + path: 'test-data/Collection: Individual Deconvolved Channels_3.tiff.tiff' + control_2: + elements: + 1.tiff: + path: 'test-data/Collection: Individual Deconvolved Channels_1.tiff.tiff' + 2.tiff: + path: 'test-data/Collection: Individual Deconvolved Channels_2.tiff.tiff' + 3.tiff: + path: 'test-data/Collection: Individual Deconvolved Channels_3.tiff.tiff' + control_3: + elements: + 1.tiff: + path: 'test-data/Collection: Individual Deconvolved Channels_1.tiff.tiff' + 2.tiff: + path: 'test-data/Collection: Individual Deconvolved Channels_2.tiff.tiff' + 3.tiff: + path: 'test-data/Collection: Individual Deconvolved Channels_3.tiff.tiff' + treatment_1: + elements: + 1.tiff: + path: 'test-data/Collection: Individual Deconvolved Channels_1.tiff.tiff' + 2.tiff: + path: 'test-data/Collection: Individual Deconvolved Channels_2.tiff.tiff' + 3.tiff: + path: 'test-data/Collection: Individual Deconvolved Channels_3.tiff.tiff' + treatment_2: + elements: + 1.tiff: + path: 'test-data/Collection: Individual Deconvolved Channels_1.tiff.tiff' + 2.tiff: + path: 'test-data/Collection: Individual Deconvolved Channels_2.tiff.tiff' + 3.tiff: + path: 'test-data/Collection: Individual Deconvolved Channels_3.tiff.tiff' + treatment_3: + elements: + 1.tiff: + path: 'test-data/Collection: Individual Deconvolved Channels_1.tiff.tiff' + 2.tiff: + path: 'test-data/Collection: Individual Deconvolved Channels_2.tiff.tiff' + 3.tiff: + path: 'test-data/Collection: Individual Deconvolved Channels_3.tiff.tiff' + Deconvolved Image: + element_tests: + control_1: + path: test-data/Deconvolved Image_control_1.tiff + control_2: + path: test-data/Deconvolved Image_control_2.tiff + control_3: + path: test-data/Deconvolved Image_control_3.tiff + treatment_1: + path: test-data/Deconvolved Image_treatment_1.tiff + treatment_2: + path: test-data/Deconvolved Image_treatment_2.tiff + treatment_3: + path: test-data/Deconvolved Image_treatment_3.tiff + Selected Stain Channel Thresholded: + element_tests: + control_1: + path: test-data/Selected Stain Channel Thresholded_control_1.tiff + control_2: + path: test-data/Selected Stain Channel Thresholded_control_2.tiff + control_3: + path: test-data/Selected Stain Channel Thresholded_control_3.tiff + treatment_1: + path: test-data/Selected Stain Channel Thresholded_treatment_1.tiff + treatment_2: + path: test-data/Selected Stain Channel Thresholded_treatment_2.tiff + treatment_3: + path: test-data/Selected Stain Channel Thresholded_treatment_3.tiff diff --git a/workflows/imaging/histological-staining-area-quantification/histological-staining-area-quantification.ga b/workflows/imaging/histological-staining-area-quantification/histological-staining-area-quantification.ga new file mode 100644 index 0000000000..a2ca5ef22a --- /dev/null +++ b/workflows/imaging/histological-staining-area-quantification/histological-staining-area-quantification.ga @@ -0,0 +1,1335 @@ +{ + "a_galaxy_workflow": "true", + "annotation": "Colour deconvolution-based workflow for staining area quantification in brightfield histological images (MT, IHC). Accepts whole slides or pre-cropped ROIs.", + "comments": [ + { + "child_steps": [ + 2, + 4, + 12, + 24, + 6, + 7, + 9, + 10, + 14, + 18, + 21 + ], + "color": "none", + "data": { + "title": "Total Area Computing" + }, + "id": 1, + "position": [ + 0.7999999999999999, + 555.8000000000001 + ], + "size": [ + 2789.4, + 503 + ], + "type": "frame" + }, + { + "child_steps": [ + 25, + 26, + 27 + ], + "color": "pink", + "data": { + "title": "Final Results - Tabular File" + }, + "id": 4, + "position": [ + 2841.7000000000003, + 227.1 + ], + "size": [ + 809, + 490 + ], + "type": "frame" + }, + { + "child_steps": [ + 13, + 15, + 22, + 23, + 16, + 17, + 19, + 20, + 1 + ], + "color": "green", + "data": { + "title": "Quantification and Sanitation Steps for Outfile" + }, + "id": 3, + "position": [ + 1408, + 1.9000000000000004 + ], + "size": [ + 1377, + 501 + ], + "type": "frame" + }, + { + "child_steps": [ + 3, + 5, + 8, + 0 + ], + "color": "turquoise", + "data": { + "title": "Image Preparation" + }, + "id": 0, + "position": [ + 0, + 0 + ], + "size": [ + 1084, + 502 + ], + "type": "frame" + }, + { + "child_steps": [ + 11 + ], + "color": "black", + "data": { + "title": "Stained Area Detection" + }, + "id": 2, + "position": [ + 1102.7, + 1.5 + ], + "size": [ + 290, + 501 + ], + "type": "frame" + } + ], + "creator": [ + { + "class": "Person", + "identifier": "https://orcid.org/0000-0002-5857-1477", + "name": "Diana Chiang Jurado" + } + ], + "format-version": "0.1", + "license": "CC-BY-4.0", + "name": "Histological Staining Area Quantification", + "readme": "# Histological Staining Area Quantification\n\n## Overview\nThis workflow quantifies stained tissue areas in brightfield histological images \nusing colour deconvolution and automated thresholding. It is designed for \n3-channel stainings compatible with the H-E-DAB (HED) colour space, such as \nMasson's Trichrome (MT) and Immunohistochemistry (IHC).\n\n## What does this workflow do?\n1. **Colour deconvolution** separates the input image into individual stain channels (HED).\n2. **Channel splitting and extraction** isolates the target stain channel (default: Channel 2).\n3. **Automated thresholding** (Li method) generates a binary mask of stained vs. unstained regions.\n4. **Feature extraction** quantifies staining area and intensity per sample.\n5. **Output collation** merges all per-sample results into a single tabular file.\n\n## Input data requirements\n- **Format:** TIFF\n- **Type:** Brightfield microscopy images\n- **Staining:** Compatible with HED colour deconvolution (e.g., Masson's Trichrome, IHC)\n- **Content:** Whole slide images or pre-cropped regions of interest (ROIs)\n- **Structure:** Dataset collection (list) \u2014 one image per sample\n\n> \u26a0\ufe0f Images must be pre-cropped to the region of interest before use.\n> The workflow does not perform ROI selection.\n\n## Output\nA tabular file (TSV) containing one row per sample with the following columns:\n- `sample_id` \u2014 sample identifier\n- `label` \u2014 pixel label (1 = stained region)\n- `area` \u2014 total number of stained pixels\n- `mean_intensity` \u2014 mean pixel intensity within the stained region\n\n## Important notes\n- Verify that **Channel 2** corresponds to your stain of interest before running.\n This can be checked by inspecting the deconvolved image output.\n- The thresholding method is **Li**. If results are suboptimal, adjust the offset \n in the Threshold step.\n- The workflow processes images as a **collection**, enabling batch analysis \n of multiple samples in a single run.\n\n## Compatible stainings\n| Staining | Target channel |\n|----------|---------------|\n| Masson's Trichrome (MT) | Channel 2 (Eosin/collagen) |\n| Immunohistochemistry (IHC) | Channel 2 (DAB) |\n\n## Citation\nIf you use this workflow, please cite it via its WorkflowHub DOI.", + "report": { + "markdown": "# Histological Staining Area Quantification\n\n```galaxy\ninvocation_time()\n```\n\n---\n\n## Summary\n\nThis workflow is designed to quantify the area and intensity of a specific stain in brightfield histological images. It takes a collection of input images, applies H-E-DAB colour deconvolution to separate the target stain channel from the haematoxylin counterstain, then uses automated thresholding to segment positive-staining pixels. Per-sample measurements are collated into a single tabular output.\n\nCompatible staining types include immunohistochemistry (IHC) with a DAB chromogen and Masson's Trichrome (MT). The workflow expects RGB TIFF images — one region of interest (ROI) per collection element.\n\n```galaxy\nworkflow_image()\n```\n\n---\n\n## Input Images\n\nThe input to this workflow is a list collection of brightfield microscopy images. Each element should represent one region of interest from a tissue section. The images provided for this run are shown below.\n\n```galaxy\nhistory_dataset_as_image(input=\"ROI image for staining analysis\")\n```\n\n---\n\n## Staining Mask\n\nIf the run completed successfully, each input image will have been converted into a binary mask via colour deconvolution and automated thresholding. In this mask, **white pixels** represent regions classified as positively stained and **black pixels** represent background. This mask is what the quantification measurements are derived from.\n\n```galaxy\nhistory_dataset_as_image(output=\"Selected Stain Channel Thresholded\")\n```\n\n---\n\n## Results\n\nIf the workflow completed successfully, the table below shows per-sample staining measurements — one row per input image. The expected columns are described below.\n\n| Column | Description |\n|--------|-------------|\n| `sample_id` | Identifier derived from the input image filename |\n| `label` | Region label assigned by the thresholding step |\n| `mean_intensity` | Average pixel intensity within the detected region (lower = stronger stain, due to deconvolution inversion) |\n| `area` | Pixel count of the positively stained region |\n| `area_filled` | Stained area with internal holes filled |\n\n```galaxy\nhistory_dataset_as_table(output=\"Tabular File: Staining Feature Results\", title=\"Staining Feature Results\")\n```\n\n```galaxy\nhistory_dataset_link(output=\"Tabular File: Staining Feature Results\", label=\"Download results (TSV)\")\n```\n\n---\n\n## Reproducibility\n\n```galaxy\nhistory_link()\n```\n\n```galaxy\nworkflow_license()\n```\n" + }, + "steps": { + "0": { + "annotation": "Brightfield histological image (whole slide or pre-cropped ROI) for staining quantification. Compatible stainings include Masson's Trichrome and IHC. Accepted format: TIFF.", + "content_id": null, + "errors": null, + "id": 0, + "input_connections": {}, + "inputs": [ + { + "description": "Brightfield histological image (whole slide or pre-cropped ROI) for staining quantification. Compatible stainings include Masson's Trichrome and IHC. Accepted format: TIFF.", + "name": "ROI image for staining analysis" + } + ], + "label": "ROI image for staining analysis", + "name": "Input dataset collection", + "outputs": [], + "position": { + "left": 35.834880187343316, + "top": 117.27942958436938 + }, + "tool_id": null, + "tool_state": "{\"optional\": false, \"tag\": null, \"collection_type\": \"list\", \"fields\": null, \"column_definitions\": null}", + "tool_version": null, + "type": "data_collection_input", + "uuid": "8d8971e7-b29d-428c-a2ec-9f964f89b4d3", + "when": null, + "workflow_outputs": [] + }, + "1": { + "annotation": "Add Sample ID column name .", + "content_id": "toolshed.g2.bx.psu.edu/repos/bgruening/text_processing/tp_text_file_with_recurring_lines/9.5+galaxy3", + "errors": null, + "id": 1, + "input_connections": {}, + "inputs": [], + "label": "Sample ID", + "name": "Create text file", + "outputs": [ + { + "name": "outfile", + "type": "txt" + } + ], + "position": { + "left": 1995.9443671595936, + "top": 48.612483339030995 + }, + "post_job_actions": {}, + "tool_id": "toolshed.g2.bx.psu.edu/repos/bgruening/text_processing/tp_text_file_with_recurring_lines/9.5+galaxy3", + "tool_shed_repository": { + "changeset_revision": "ab83aa685821", + "name": "text_processing", + "owner": "bgruening", + "tool_shed": "toolshed.g2.bx.psu.edu" + }, + "tool_state": "{\"token_set\": [{\"__index__\": 0, \"line\": \"sample_id\", \"repeat_select\": {\"repeat_select_opts\": \"user\", \"__current_case__\": 0, \"times\": \"1\"}}], \"__page__\": 0, \"__rerun_remap_job_id__\": null}", + "tool_uuid": null, + "tool_version": "9.5+galaxy3", + "type": "tool", + "uuid": "61caad88-c33b-4221-ac3d-4dda727b324d", + "when": null, + "workflow_outputs": [] + }, + "2": { + "annotation": "", + "content_id": "toolshed.g2.bx.psu.edu/repos/bgruening/text_processing/tp_text_file_with_recurring_lines/9.5+galaxy3", + "errors": null, + "id": 2, + "input_connections": {}, + "inputs": [], + "label": "header for total area", + "name": "Create text file", + "outputs": [ + { + "name": "outfile", + "type": "txt" + } + ], + "position": { + "left": 2305.1936948064526, + "top": 646.6197455008507 + }, + "post_job_actions": { + "ChangeDatatypeActionoutfile": { + "action_arguments": { + "newtype": "tabular" + }, + "action_type": "ChangeDatatypeAction", + "output_name": "outfile" + } + }, + "tool_id": "toolshed.g2.bx.psu.edu/repos/bgruening/text_processing/tp_text_file_with_recurring_lines/9.5+galaxy3", + "tool_shed_repository": { + "changeset_revision": "ab83aa685821", + "name": "text_processing", + "owner": "bgruening", + "tool_shed": "toolshed.g2.bx.psu.edu" + }, + "tool_state": "{\"token_set\": [{\"__index__\": 0, \"line\": \"total_area\", \"repeat_select\": {\"repeat_select_opts\": \"user\", \"__current_case__\": 0, \"times\": \"1\"}}], \"__page__\": 0, \"__rerun_remap_job_id__\": null}", + "tool_uuid": null, + "tool_version": "9.5+galaxy3", + "type": "tool", + "uuid": "23f140e5-d09d-45bf-9b72-47d9b0c21882", + "when": null, + "workflow_outputs": [] + }, + "3": { + "annotation": "Performs colour deconvolution using the H-E-DAB (HED) transformation, separating the image into individual stain channels. Channel 1 = Hematoxylin, Channel 2 = Eosin/target stain, Channel 3 = Residuals. Higher pixel intensity indicates lower stain concentration.", + "content_id": "toolshed.g2.bx.psu.edu/repos/imgteam/color_deconvolution/ip_color_deconvolution/0.9+galaxy0", + "errors": null, + "id": 3, + "input_connections": { + "input": { + "id": 0, + "output_name": "output" + } + }, + "inputs": [], + "label": "Color Deconvolution", + "name": "Perform color deconvolution or transformation", + "outputs": [ + { + "name": "output", + "type": "tiff" + } + ], + "position": { + "left": 314.5770676873433, + "top": 59.5059920843694 + }, + "post_job_actions": { + "ChangeDatatypeActionoutput": { + "action_arguments": { + "newtype": "tiff" + }, + "action_type": "ChangeDatatypeAction", + "output_name": "output" + } + }, + "tool_id": "toolshed.g2.bx.psu.edu/repos/imgteam/color_deconvolution/ip_color_deconvolution/0.9+galaxy0", + "tool_shed_repository": { + "changeset_revision": "0cbdf78fee14", + "name": "color_deconvolution", + "owner": "imgteam", + "tool_shed": "toolshed.g2.bx.psu.edu" + }, + "tool_state": "{\"__input_ext\": \"tiff\", \"chromInfo\": \"/opt/galaxy/tool-data/shared/ucsc/chrom/?.len\", \"convtype\": \"rgb2hed\", \"input\": {\"__class__\": \"ConnectedValue\"}, \"isolate_channel\": null, \"__page__\": 0, \"__rerun_remap_job_id__\": null}", + "tool_uuid": null, + "tool_version": "0.9+galaxy0", + "type": "tool", + "uuid": "13541484-b1a4-4b3e-aeea-7385334f1cbf", + "when": null, + "workflow_outputs": [ + { + "label": "Deconvolved Image", + "output_name": "output", + "uuid": "b4393dde-25b8-49ad-b48c-5d2df47c1408" + } + ] + }, + "4": { + "annotation": "", + "content_id": "toolshed.g2.bx.psu.edu/repos/imgteam/image_info/ip_imageinfo/5.7.1+galaxy1", + "errors": null, + "id": 4, + "input_connections": { + "input_file": { + "id": 0, + "output_name": "output" + } + }, + "inputs": [], + "label": null, + "name": "Show image info", + "outputs": [ + { + "name": "output", + "type": "txt" + } + ], + "position": { + "left": 314.22044193788025, + "top": 707.7997227256178 + }, + "post_job_actions": {}, + "tool_id": "toolshed.g2.bx.psu.edu/repos/imgteam/image_info/ip_imageinfo/5.7.1+galaxy1", + "tool_shed_repository": { + "changeset_revision": "f8b4eada923c", + "name": "image_info", + "owner": "imgteam", + "tool_shed": "toolshed.g2.bx.psu.edu" + }, + "tool_state": "{\"input_file\": {\"__class__\": \"ConnectedValue\"}, \"__page__\": 0, \"__rerun_remap_job_id__\": null}", + "tool_uuid": null, + "tool_version": "5.7.1+galaxy1", + "type": "tool", + "uuid": "8ffc6557-6365-46b2-961e-28019975c4b9", + "when": null, + "workflow_outputs": [ + { + "label": "output", + "output_name": "output", + "uuid": "d7e180d9-d5b4-4782-a007-57ad88aba292" + } + ] + }, + "5": { + "annotation": "Splits multi-channel image into single-channel images. Extracts the target stain channel from the split image collection. Default index: 1 (Channel 2). Verify this corresponds to your stain of interest before running the workflow. The pixel data type is preserved.", + "content_id": "toolshed.g2.bx.psu.edu/repos/imgteam/split_image/ip_split_image/2.3.5+galaxy0", + "errors": null, + "id": 5, + "input_connections": { + "input": { + "id": 3, + "output_name": "output" + } + }, + "inputs": [], + "label": "Split Image Channels for Staining Detection", + "name": "Split image along axes", + "outputs": [ + { + "name": "output", + "type": "input" + } + ], + "position": { + "left": 572.5380051873433, + "top": 51.052867084369424 + }, + "post_job_actions": {}, + "tool_id": "toolshed.g2.bx.psu.edu/repos/imgteam/split_image/ip_split_image/2.3.5+galaxy0", + "tool_shed_repository": { + "changeset_revision": "390943df8a35", + "name": "split_image", + "owner": "imgteam", + "tool_shed": "toolshed.g2.bx.psu.edu" + }, + "tool_state": "{\"axis\": \"C\", \"input\": {\"__class__\": \"ConnectedValue\"}, \"squeeze\": false, \"__page__\": 0, \"__rerun_remap_job_id__\": null}", + "tool_uuid": null, + "tool_version": "2.3.5+galaxy0", + "type": "tool", + "uuid": "32f6700c-df06-4bcc-a070-22d77b2d01c7", + "when": null, + "workflow_outputs": [ + { + "label": "Collection: Individual Deconvolved Channels", + "output_name": "output", + "uuid": "cbd8deec-7ea2-4715-bc9b-c1eea3c787fc" + } + ] + }, + "6": { + "annotation": "", + "content_id": "Grep1", + "errors": null, + "id": 6, + "input_connections": { + "input": { + "id": 4, + "output_name": "output" + } + }, + "inputs": [], + "label": "Width Extraction", + "name": "Select", + "outputs": [ + { + "name": "out_file1", + "type": "input" + } + ], + "position": { + "left": 611.4736628752854, + "top": 651.3293738519943 + }, + "post_job_actions": {}, + "tool_id": "Grep1", + "tool_state": "{\"input\": {\"__class__\": \"ConnectedValue\"}, \"invert\": \"\", \"keep_header\": false, \"pattern\": \"Width =\", \"__page__\": 0, \"__rerun_remap_job_id__\": null}", + "tool_uuid": null, + "tool_version": "1.0.4", + "type": "tool", + "uuid": "da2dce81-e316-4a7a-8272-0cbbd7da5b54", + "when": null, + "workflow_outputs": [] + }, + "7": { + "annotation": "", + "content_id": "Grep1", + "errors": null, + "id": 7, + "input_connections": { + "input": { + "id": 4, + "output_name": "output" + } + }, + "inputs": [], + "label": "Height Extraction", + "name": "Select", + "outputs": [ + { + "name": "out_file1", + "type": "input" + } + ], + "position": { + "left": 612.1340187674641, + "top": 854.0653822735306 + }, + "post_job_actions": {}, + "tool_id": "Grep1", + "tool_state": "{\"input\": {\"__class__\": \"ConnectedValue\"}, \"invert\": \"\", \"keep_header\": false, \"pattern\": \"Height =\", \"__page__\": 0, \"__rerun_remap_job_id__\": null}", + "tool_uuid": null, + "tool_version": "1.0.4", + "type": "tool", + "uuid": "2dae9581-507e-442e-9beb-86ab0cdd85be", + "when": null, + "workflow_outputs": [] + }, + "8": { + "annotation": "This step extracts the second image (usually the relevant stain channel) from each sub-collection in a collection of collections. Please verify the selected channel is correct before proceeding. The current index is set to extract dataset 2.", + "content_id": "__EXTRACT_DATASET__", + "errors": null, + "id": 8, + "input_connections": { + "input": { + "id": 5, + "output_name": "output" + } + }, + "inputs": [], + "label": "Collection: Extract Stain Channel from Sub-Collections", + "name": "Extract dataset", + "outputs": [ + { + "name": "output", + "type": "data" + } + ], + "position": { + "left": 836.1708176873433, + "top": 54.84974208436942 + }, + "post_job_actions": { + "ChangeDatatypeActionoutput": { + "action_arguments": { + "newtype": "tiff" + }, + "action_type": "ChangeDatatypeAction", + "output_name": "output" + } + }, + "tool_id": "__EXTRACT_DATASET__", + "tool_state": "{\"input\": {\"__class__\": \"ConnectedValue\"}, \"which\": {\"which_dataset\": \"by_index\", \"__current_case__\": 2, \"index\": \"1\"}, \"__page__\": 0, \"__rerun_remap_job_id__\": null}", + "tool_uuid": null, + "tool_version": "1.0.2", + "type": "tool", + "uuid": "01518895-46e2-4ec3-aa0e-1898357255fa", + "when": null, + "workflow_outputs": [ + { + "label": "Selected Stain Channel", + "output_name": "output", + "uuid": "23ea738b-06ae-4688-ab4a-b29c196a9cfa" + } + ] + }, + "9": { + "annotation": "", + "content_id": "toolshed.g2.bx.psu.edu/repos/bgruening/text_processing/tp_sed_tool/9.5+galaxy3", + "errors": null, + "id": 9, + "input_connections": { + "infile": { + "id": 6, + "output_name": "out_file1" + } + }, + "inputs": [], + "label": null, + "name": "Text transformation", + "outputs": [ + { + "name": "output", + "type": "input" + } + ], + "position": { + "left": 953.4203075074834, + "top": 651.8928760243856 + }, + "post_job_actions": {}, + "tool_id": "toolshed.g2.bx.psu.edu/repos/bgruening/text_processing/tp_sed_tool/9.5+galaxy3", + "tool_shed_repository": { + "changeset_revision": "ab83aa685821", + "name": "text_processing", + "owner": "bgruening", + "tool_shed": "toolshed.g2.bx.psu.edu" + }, + "tool_state": "{\"adv_opts\": {\"adv_opts_selector\": \"basic\", \"__current_case__\": 0}, \"code\": \"s/.*= //\", \"infile\": {\"__class__\": \"ConnectedValue\"}, \"__page__\": 0, \"__rerun_remap_job_id__\": null}", + "tool_uuid": null, + "tool_version": "9.5+galaxy3", + "type": "tool", + "uuid": "5f158fe1-70f9-4c38-806c-88417993a83b", + "when": null, + "workflow_outputs": [] + }, + "10": { + "annotation": "", + "content_id": "toolshed.g2.bx.psu.edu/repos/bgruening/text_processing/tp_sed_tool/9.5+galaxy3", + "errors": null, + "id": 10, + "input_connections": { + "infile": { + "id": 7, + "output_name": "out_file1" + } + }, + "inputs": [], + "label": null, + "name": "Text transformation", + "outputs": [ + { + "name": "output", + "type": "input" + } + ], + "position": { + "left": 950.8939905212409, + "top": 891.2273472144357 + }, + "post_job_actions": {}, + "tool_id": "toolshed.g2.bx.psu.edu/repos/bgruening/text_processing/tp_sed_tool/9.5+galaxy3", + "tool_shed_repository": { + "changeset_revision": "ab83aa685821", + "name": "text_processing", + "owner": "bgruening", + "tool_shed": "toolshed.g2.bx.psu.edu" + }, + "tool_state": "{\"adv_opts\": {\"adv_opts_selector\": \"basic\", \"__current_case__\": 0}, \"code\": \"s/.*= //\", \"infile\": {\"__class__\": \"ConnectedValue\"}, \"__page__\": 0, \"__rerun_remap_job_id__\": null}", + "tool_uuid": null, + "tool_version": "9.5+galaxy3", + "type": "tool", + "uuid": "3023c1cf-e64e-49d9-9238-1e4020304824", + "when": null, + "workflow_outputs": [] + }, + "11": { + "annotation": "Applies a threshold to the selected stain channel to segment stained areas for quantification.\nTool only process tiff files with 1 channel. ", + "content_id": "toolshed.g2.bx.psu.edu/repos/imgteam/2d_auto_threshold/ip_threshold/0.25.2+galaxy0", + "errors": null, + "id": 11, + "input_connections": { + "input": { + "id": 8, + "output_name": "output" + } + }, + "inputs": [ + { + "description": "runtime parameter for tool Threshold image", + "name": "input" + } + ], + "label": "Threshold Stain Channel Collection", + "name": "Threshold image", + "outputs": [ + { + "name": "output", + "type": "tiff" + } + ], + "position": { + "left": 1166.546875, + "top": 52.84375 + }, + "post_job_actions": {}, + "tool_id": "toolshed.g2.bx.psu.edu/repos/imgteam/2d_auto_threshold/ip_threshold/0.25.2+galaxy0", + "tool_shed_repository": { + "changeset_revision": "2ee04d2ebdcf", + "name": "2d_auto_threshold", + "owner": "imgteam", + "tool_shed": "toolshed.g2.bx.psu.edu" + }, + "tool_state": "{\"input\": {\"__class__\": \"RuntimeValue\"}, \"invert_output\": false, \"th_method\": {\"method_id\": \"otsu\", \"__current_case__\": 1, \"offset\": \"0.0\"}, \"__page__\": 0, \"__rerun_remap_job_id__\": null}", + "tool_uuid": null, + "tool_version": "0.25.2+galaxy0", + "type": "tool", + "uuid": "54fdcc2b-82f3-499e-950d-58f26f97bbba", + "when": null, + "workflow_outputs": [ + { + "label": "Selected Stain Channel Thresholded", + "output_name": "output", + "uuid": "a3923c7b-8253-4578-9647-b11f5bbd91a6" + } + ] + }, + "12": { + "annotation": "", + "content_id": "Paste1", + "errors": null, + "id": 12, + "input_connections": { + "input1": { + "id": 9, + "output_name": "output" + }, + "input2": { + "id": 10, + "output_name": "output" + } + }, + "inputs": [], + "label": null, + "name": "Paste", + "outputs": [ + { + "name": "out_file1", + "type": "input" + } + ], + "position": { + "left": 1284.258474326124, + "top": 765.2227638855851 + }, + "post_job_actions": { + "ChangeDatatypeActionout_file1": { + "action_arguments": { + "newtype": "tabular" + }, + "action_type": "ChangeDatatypeAction", + "output_name": "out_file1" + } + }, + "tool_id": "Paste1", + "tool_state": "{\"delimiter\": \"T\", \"input1\": {\"__class__\": \"ConnectedValue\"}, \"input2\": {\"__class__\": \"ConnectedValue\"}, \"__page__\": 0, \"__rerun_remap_job_id__\": null}", + "tool_uuid": null, + "tool_version": "1.0.0", + "type": "tool", + "uuid": "992876bb-8d03-4f22-a1d7-5f2bb479db30", + "when": null, + "workflow_outputs": [] + }, + "13": { + "annotation": "Extracts quantitative features (e.g., mean intensity) from the thresholded image to support staining analysis.\n\n", + "content_id": "toolshed.g2.bx.psu.edu/repos/imgteam/2d_feature_extraction/ip_2d_feature_extraction/0.25.2+galaxy1", + "errors": null, + "id": 13, + "input_connections": { + "labels": { + "id": 11, + "output_name": "output" + }, + "setup|intensities": { + "id": 8, + "output_name": "output" + } + }, + "inputs": [ + { + "description": "runtime parameter for tool Extract image features", + "name": "setup" + } + ], + "label": "Extract Image Features", + "name": "Extract image features", + "outputs": [ + { + "name": "output", + "type": "tabular" + } + ], + "position": { + "left": 1444.203125, + "top": 257.1953125 + }, + "post_job_actions": {}, + "tool_id": "toolshed.g2.bx.psu.edu/repos/imgteam/2d_feature_extraction/ip_2d_feature_extraction/0.25.2+galaxy1", + "tool_shed_repository": { + "changeset_revision": "519fad2c552a", + "name": "2d_feature_extraction", + "owner": "imgteam", + "tool_shed": "toolshed.g2.bx.psu.edu" + }, + "tool_state": "{\"labels\": {\"__class__\": \"ConnectedValue\"}, \"setup\": {\"mode\": \"with-intensities\", \"__current_case__\": 1, \"intensities\": {\"__class__\": \"ConnectedValue\"}, \"features\": [\"label\", \"mean_intensity\", \"area\", \"area_filled\"]}, \"__page__\": 0, \"__rerun_remap_job_id__\": null}", + "tool_uuid": null, + "tool_version": "0.25.2+galaxy1", + "type": "tool", + "uuid": "d61dfcc3-4ccd-4c47-96bf-e49da6be08fd", + "when": null, + "workflow_outputs": [ + { + "label": "Collection of Tabular: Staining Quantification Results", + "output_name": "output", + "uuid": "19b9fc98-e80e-48f6-8bd9-a23a59e09e84" + } + ] + }, + "14": { + "annotation": "", + "content_id": "toolshed.g2.bx.psu.edu/repos/devteam/column_maker/Add_a_column1/2.1+galaxy0", + "errors": null, + "id": 14, + "input_connections": { + "input": { + "id": 12, + "output_name": "out_file1" + } + }, + "inputs": [], + "label": null, + "name": "Compute", + "outputs": [ + { + "name": "out_file1", + "type": "input" + } + ], + "position": { + "left": 1547.6132267477944, + "top": 774.7239899335315 + }, + "post_job_actions": {}, + "tool_id": "toolshed.g2.bx.psu.edu/repos/devteam/column_maker/Add_a_column1/2.1+galaxy0", + "tool_shed_repository": { + "changeset_revision": "61f9ddbc63ca", + "name": "column_maker", + "owner": "devteam", + "tool_shed": "toolshed.g2.bx.psu.edu" + }, + "tool_state": "{\"avoid_scientific_notation\": false, \"error_handling\": {\"auto_col_types\": true, \"fail_on_non_existent_columns\": true, \"non_computable\": {\"action\": \"--fail-on-non-computable\", \"__current_case__\": 0}}, \"input\": {\"__class__\": \"ConnectedValue\"}, \"ops\": {\"header_lines_select\": \"no\", \"__current_case__\": 0, \"expressions\": [{\"__index__\": 0, \"cond\": \"c1 * c2\", \"add_column\": {\"mode\": \"\", \"__current_case__\": 0, \"pos\": \"\"}}]}, \"__page__\": 0, \"__rerun_remap_job_id__\": null}", + "tool_uuid": null, + "tool_version": "2.1+galaxy0", + "type": "tool", + "uuid": "ba077df7-adad-4e74-8527-02422379502e", + "when": null, + "workflow_outputs": [] + }, + "15": { + "annotation": "Extracts a dataset that will be used to obtain the header row for the final concatenated tabular file in a subsequent step.", + "content_id": "__EXTRACT_DATASET__", + "errors": null, + "id": 15, + "input_connections": { + "input": { + "id": 13, + "output_name": "output" + } + }, + "inputs": [], + "label": "Prepare Header Source Dataset", + "name": "Extract dataset", + "outputs": [ + { + "name": "output", + "type": "data" + } + ], + "position": { + "left": 1724.8037421595936, + "top": 78.98748333903099 + }, + "post_job_actions": { + "ChangeDatatypeActionoutput": { + "action_arguments": { + "newtype": "tabular" + }, + "action_type": "ChangeDatatypeAction", + "output_name": "output" + } + }, + "tool_id": "__EXTRACT_DATASET__", + "tool_state": "{\"input\": {\"__class__\": \"ConnectedValue\"}, \"which\": {\"which_dataset\": \"first\", \"__current_case__\": 0}, \"__page__\": 0, \"__rerun_remap_job_id__\": null}", + "tool_uuid": null, + "tool_version": "1.0.2", + "type": "tool", + "uuid": "1097a76b-4cba-4881-8f8c-9f97817df691", + "when": null, + "workflow_outputs": [] + }, + "16": { + "annotation": "", + "content_id": "Show tail1", + "errors": null, + "id": 16, + "input_connections": { + "input": { + "id": 13, + "output_name": "output" + } + }, + "inputs": [], + "label": "Extract", + "name": "Select last", + "outputs": [ + { + "name": "out_file1", + "type": "input" + } + ], + "position": { + "left": 1722.2334907503193, + "top": 231.30444924927417 + }, + "post_job_actions": {}, + "tool_id": "Show tail1", + "tool_state": "{\"header\": false, \"input\": {\"__class__\": \"ConnectedValue\"}, \"lineNum\": \"1\", \"__page__\": 0, \"__rerun_remap_job_id__\": null}", + "tool_uuid": null, + "tool_version": "1.0.1", + "type": "tool", + "uuid": "f10a01b1-051d-49da-b13d-110abed4ab75", + "when": null, + "workflow_outputs": [] + }, + "17": { + "annotation": "", + "content_id": "toolshed.g2.bx.psu.edu/repos/iuc/collection_element_identifiers/collection_element_identifiers/0.0.2", + "errors": null, + "id": 17, + "input_connections": { + "input_collection": { + "id": 13, + "output_name": "output" + } + }, + "inputs": [], + "label": null, + "name": "Extract element identifiers", + "outputs": [ + { + "name": "output", + "type": "txt" + } + ], + "position": { + "left": 1721.2881171595936, + "top": 362.15935833903103 + }, + "post_job_actions": {}, + "tool_id": "toolshed.g2.bx.psu.edu/repos/iuc/collection_element_identifiers/collection_element_identifiers/0.0.2", + "tool_shed_repository": { + "changeset_revision": "d3c07d270a50", + "name": "collection_element_identifiers", + "owner": "iuc", + "tool_shed": "toolshed.g2.bx.psu.edu" + }, + "tool_state": "{\"input_collection\": {\"__class__\": \"ConnectedValue\"}, \"__page__\": 0, \"__rerun_remap_job_id__\": null}", + "tool_uuid": null, + "tool_version": "0.0.2", + "type": "tool", + "uuid": "d1deeb80-d601-43a7-a6f8-0e8fac4db155", + "when": null, + "workflow_outputs": [] + }, + "18": { + "annotation": "", + "content_id": "Cut1", + "errors": null, + "id": 18, + "input_connections": { + "input": { + "id": 14, + "output_name": "out_file1" + } + }, + "inputs": [], + "label": null, + "name": "Cut", + "outputs": [ + { + "name": "out_file1", + "type": "tabular" + } + ], + "position": { + "left": 1821.639814485518, + "top": 779.3774559344525 + }, + "post_job_actions": {}, + "tool_id": "Cut1", + "tool_state": "{\"columnList\": \"c3\", \"delimiter\": \"T\", \"input\": {\"__class__\": \"ConnectedValue\"}, \"__page__\": 0, \"__rerun_remap_job_id__\": null}", + "tool_uuid": null, + "tool_version": "1.0.2", + "type": "tool", + "uuid": "116344ab-b0c5-4557-abcc-3083046abb01", + "when": null, + "workflow_outputs": [] + }, + "19": { + "annotation": "Extracting header from source dataset to use in the final tabular file. ", + "content_id": "Show beginning1", + "errors": null, + "id": 19, + "input_connections": { + "input": { + "id": 15, + "output_name": "output" + } + }, + "inputs": [], + "label": "Header Extraction", + "name": "Select first", + "outputs": [ + { + "name": "out_file1", + "type": "input" + } + ], + "position": { + "left": 2001.5068671595936, + "top": 154.956233339031 + }, + "post_job_actions": {}, + "tool_id": "Show beginning1", + "tool_state": "{\"header\": false, \"input\": {\"__class__\": \"ConnectedValue\"}, \"lineNum\": \"1\", \"__page__\": 0, \"__rerun_remap_job_id__\": null}", + "tool_uuid": null, + "tool_version": "1.0.2", + "type": "tool", + "uuid": "486c9721-6243-418e-8100-81f631210307", + "when": null, + "workflow_outputs": [] + }, + "20": { + "annotation": "Allows to collapse a collection of tabular files with the individual samples quantification into one tabular file. ", + "content_id": "toolshed.g2.bx.psu.edu/repos/nml/collapse_collections/collapse_dataset/5.1.0", + "errors": null, + "id": 20, + "input_connections": { + "input_list": { + "id": 16, + "output_name": "out_file1" + } + }, + "inputs": [], + "label": "Collapse Collection into one file", + "name": "Collapse Collection", + "outputs": [ + { + "name": "output", + "type": "input" + } + ], + "position": { + "left": 2057.5745298512807, + "top": 304.2237088011985 + }, + "post_job_actions": {}, + "tool_id": "toolshed.g2.bx.psu.edu/repos/nml/collapse_collections/collapse_dataset/5.1.0", + "tool_shed_repository": { + "changeset_revision": "90981f86000f", + "name": "collapse_collections", + "owner": "nml", + "tool_shed": "toolshed.g2.bx.psu.edu" + }, + "tool_state": "{\"filename\": {\"add_name\": false, \"__current_case__\": 1}, \"input_list\": {\"__class__\": \"ConnectedValue\"}, \"one_header\": false, \"__page__\": 0, \"__rerun_remap_job_id__\": null}", + "tool_uuid": null, + "tool_version": "5.1.0", + "type": "tool", + "uuid": "60409625-0798-4941-8e99-c584bb7829d7", + "when": null, + "workflow_outputs": [] + }, + "21": { + "annotation": "", + "content_id": "toolshed.g2.bx.psu.edu/repos/nml/collapse_collections/collapse_dataset/5.1.0", + "errors": null, + "id": 21, + "input_connections": { + "input_list": { + "id": 18, + "output_name": "out_file1" + } + }, + "inputs": [], + "label": null, + "name": "Collapse Collection", + "outputs": [ + { + "name": "output", + "type": "input" + } + ], + "position": { + "left": 2080.5522041064874, + "top": 769.3383369547973 + }, + "post_job_actions": {}, + "tool_id": "toolshed.g2.bx.psu.edu/repos/nml/collapse_collections/collapse_dataset/5.1.0", + "tool_shed_repository": { + "changeset_revision": "90981f86000f", + "name": "collapse_collections", + "owner": "nml", + "tool_shed": "toolshed.g2.bx.psu.edu" + }, + "tool_state": "{\"filename\": {\"add_name\": false, \"__current_case__\": 1}, \"input_list\": {\"__class__\": \"ConnectedValue\"}, \"one_header\": false, \"__page__\": 0, \"__rerun_remap_job_id__\": null}", + "tool_uuid": null, + "tool_version": "5.1.0", + "type": "tool", + "uuid": "6ad7fa67-192f-4b34-8719-fac6d5939d27", + "when": null, + "workflow_outputs": [] + }, + "22": { + "annotation": "Combined the Sample ID with the header of the remaining columns.", + "content_id": "Paste1", + "errors": null, + "id": 22, + "input_connections": { + "input1": { + "id": 1, + "output_name": "outfile" + }, + "input2": { + "id": 19, + "output_name": "out_file1" + } + }, + "inputs": [], + "label": "Paste header with Sample ID", + "name": "Paste", + "outputs": [ + { + "name": "out_file1", + "type": "input" + } + ], + "position": { + "left": 2415.7071646002028, + "top": 82.25477667007088 + }, + "post_job_actions": { + "ChangeDatatypeActionout_file1": { + "action_arguments": { + "newtype": "tabular" + }, + "action_type": "ChangeDatatypeAction", + "output_name": "out_file1" + } + }, + "tool_id": "Paste1", + "tool_state": "{\"delimiter\": \"T\", \"input1\": {\"__class__\": \"ConnectedValue\"}, \"input2\": {\"__class__\": \"ConnectedValue\"}, \"__page__\": 0, \"__rerun_remap_job_id__\": null}", + "tool_uuid": null, + "tool_version": "1.0.0", + "type": "tool", + "uuid": "160d6bf6-4083-4b7f-830a-d066d01c3636", + "when": null, + "workflow_outputs": [] + }, + "23": { + "annotation": "This step joins a list of sample names with their corresponding quantification results. It pastes both files side by side, ensuring that each sample name is aligned with the correct row of the quantification table.", + "content_id": "Paste1", + "errors": null, + "id": 23, + "input_connections": { + "input1": { + "id": 17, + "output_name": "output" + }, + "input2": { + "id": 20, + "output_name": "output" + } + }, + "inputs": [], + "label": "Paste Sample Names with Tabular Results", + "name": "Paste", + "outputs": [ + { + "name": "out_file1", + "type": "input" + } + ], + "position": { + "left": 2413.60233468274, + "top": 267.4472261757905 + }, + "post_job_actions": { + "ChangeDatatypeActionout_file1": { + "action_arguments": { + "newtype": "tabular" + }, + "action_type": "ChangeDatatypeAction", + "output_name": "out_file1" + } + }, + "tool_id": "Paste1", + "tool_state": "{\"delimiter\": \"T\", \"input1\": {\"__class__\": \"ConnectedValue\"}, \"input2\": {\"__class__\": \"ConnectedValue\"}, \"__page__\": 0, \"__rerun_remap_job_id__\": null}", + "tool_uuid": null, + "tool_version": "1.0.0", + "type": "tool", + "uuid": "6cbf6c3b-20de-4be5-88c2-995705eec215", + "when": null, + "workflow_outputs": [] + }, + "24": { + "annotation": "", + "content_id": "toolshed.g2.bx.psu.edu/repos/bgruening/text_processing/tp_cat/9.5+galaxy3", + "errors": null, + "id": 24, + "input_connections": { + "inputs": { + "id": 2, + "output_name": "outfile" + }, + "queries_0|inputs2": { + "id": 21, + "output_name": "output" + } + }, + "inputs": [], + "label": null, + "name": "Concatenate datasets", + "outputs": [ + { + "name": "out_file1", + "type": "input" + } + ], + "position": { + "left": 2420.8549134661503, + "top": 854.5412694791082 + }, + "post_job_actions": { + "ChangeDatatypeActionout_file1": { + "action_arguments": { + "newtype": "tabular" + }, + "action_type": "ChangeDatatypeAction", + "output_name": "out_file1" + } + }, + "tool_id": "toolshed.g2.bx.psu.edu/repos/bgruening/text_processing/tp_cat/9.5+galaxy3", + "tool_shed_repository": { + "changeset_revision": "ab83aa685821", + "name": "text_processing", + "owner": "bgruening", + "tool_shed": "toolshed.g2.bx.psu.edu" + }, + "tool_state": "{\"inputs\": {\"__class__\": \"ConnectedValue\"}, \"queries\": [{\"__index__\": 0, \"inputs2\": {\"__class__\": \"ConnectedValue\"}}], \"__page__\": 0, \"__rerun_remap_job_id__\": null}", + "tool_uuid": null, + "tool_version": "9.5+galaxy3", + "type": "tool", + "uuid": "9b79bf68-1433-4dab-be49-300101e29451", + "when": null, + "workflow_outputs": [] + }, + "25": { + "annotation": "This final output file contains the merged measurement results for all samples, and can be used for further statistical analysis.", + "content_id": "cat1", + "errors": null, + "id": 25, + "input_connections": { + "input1": { + "id": 22, + "output_name": "out_file1" + }, + "queries_0|input2": { + "id": 23, + "output_name": "out_file1" + } + }, + "inputs": [], + "label": "Tabular: Staining Feature Results", + "name": "Concatenate multiple datasets or collections", + "outputs": [ + { + "name": "out_file1", + "type": "input" + } + ], + "position": { + "left": 2894.0496656392556, + "top": 312.73216970255874 + }, + "post_job_actions": { + "ChangeDatatypeActionout_file1": { + "action_arguments": { + "newtype": "tabular" + }, + "action_type": "ChangeDatatypeAction", + "output_name": "out_file1" + } + }, + "tool_id": "cat1", + "tool_state": "{\"input1\": {\"__class__\": \"ConnectedValue\"}, \"queries\": [{\"__index__\": 0, \"input2\": {\"__class__\": \"ConnectedValue\"}}], \"__page__\": 0, \"__rerun_remap_job_id__\": null}", + "tool_uuid": null, + "tool_version": "1.0.0", + "type": "tool", + "uuid": "7c99c8bf-d351-44d4-8c39-30a566de4f8e", + "when": null, + "workflow_outputs": [ + { + "label": "Tabular File: Staining Feature Results", + "output_name": "out_file1", + "uuid": "1c3f7fd0-bad7-4891-9f95-f1346e44c20f" + } + ] + }, + "26": { + "annotation": "", + "content_id": "Paste1", + "errors": null, + "id": 26, + "input_connections": { + "input1": { + "id": 25, + "output_name": "out_file1" + }, + "input2": { + "id": 24, + "output_name": "out_file1" + } + }, + "inputs": [], + "label": null, + "name": "Paste", + "outputs": [ + { + "name": "out_file1", + "type": "input" + } + ], + "position": { + "left": 3120.6040125290237, + "top": 490.1511016847111 + }, + "post_job_actions": { + "ChangeDatatypeActionout_file1": { + "action_arguments": { + "newtype": "tabular" + }, + "action_type": "ChangeDatatypeAction", + "output_name": "out_file1" + } + }, + "tool_id": "Paste1", + "tool_state": "{\"delimiter\": \"T\", \"input1\": {\"__class__\": \"ConnectedValue\"}, \"input2\": {\"__class__\": \"ConnectedValue\"}, \"__page__\": 0, \"__rerun_remap_job_id__\": null}", + "tool_uuid": null, + "tool_version": "1.0.0", + "type": "tool", + "uuid": "8121cab5-9830-4f73-9c1f-16640c7cbf90", + "when": null, + "workflow_outputs": [] + }, + "27": { + "annotation": "Computes the proportion of positive signal area relative to total image area, expressed as percentage.", + "content_id": "toolshed.g2.bx.psu.edu/repos/devteam/column_maker/Add_a_column1/2.1+galaxy0", + "errors": null, + "id": 27, + "input_connections": { + "input": { + "id": 26, + "output_name": "out_file1" + } + }, + "inputs": [], + "label": "Percent area computation", + "name": "Compute", + "outputs": [ + { + "name": "out_file1", + "type": "input" + } + ], + "position": { + "left": 3382.046758866749, + "top": 489.49161853309903 + }, + "post_job_actions": {}, + "tool_id": "toolshed.g2.bx.psu.edu/repos/devteam/column_maker/Add_a_column1/2.1+galaxy0", + "tool_shed_repository": { + "changeset_revision": "61f9ddbc63ca", + "name": "column_maker", + "owner": "devteam", + "tool_shed": "toolshed.g2.bx.psu.edu" + }, + "tool_state": "{\"avoid_scientific_notation\": false, \"error_handling\": {\"auto_col_types\": true, \"fail_on_non_existent_columns\": true, \"non_computable\": {\"action\": \"--fail-on-non-computable\", \"__current_case__\": 0}}, \"input\": {\"__class__\": \"ConnectedValue\"}, \"ops\": {\"header_lines_select\": \"yes\", \"__current_case__\": 1, \"expressions\": [{\"__index__\": 0, \"cond\": \"c4 / c6 * 100\", \"add_column\": {\"mode\": \"\", \"__current_case__\": 0, \"pos\": \"\"}, \"new_column_name\": \"percent_area\"}]}, \"__page__\": 0, \"__rerun_remap_job_id__\": null}", + "tool_uuid": null, + "tool_version": "2.1+galaxy0", + "type": "tool", + "uuid": "ae102451-2b3c-4ede-89db-a18e52b7bb2a", + "when": null, + "workflow_outputs": [] + } + }, + "tags": [ + "name:Histology", + "name:HistologyStaining", + "name:MassonTrichrome", + "name:Immunohistochemistry", + "name:BrightfieldMicroscopy", + "name:ColorDeconvolution" + ], + "uuid": "218d214d-1142-4888-914b-9108e8f9f253", + "version": 41 +} \ No newline at end of file