{
  "schemaVersion": 4,
  "meta": {
    "name": "Spot count",
    "shortDescription": "Count the number of spots in an image channel.",
    "description": "Count the number of spots in an image channel.",
    "authors": [
      {
        "fullName": "Melanie Schuerz",
        "organization": "University of Salzburg"
      }
    ],
    "creationTime": "2026-06-11T00:00:00Z",
    "category": "Spot Detection",
    "tags": [
      "spot-count",
      "particle-analysis"
    ],
    "appVersion": ""
  },
  "classification": {
    "classes": [
      {
        "id": 0,
        "color": "#97978f",
        "name": "Background",
        "notes": ""
      },
      {
        "id": 21,
        "color": "#33cfff",
        "name": "ch1@spot",
        "notes": ""
      },
      {
        "id": 5,
        "color": "#66ff33",
        "name": "tetraspeck@spot",
        "notes": ""
      }
    ]
  },
  "plate": {
    "groupingMode": "AUTO",
    "groupingRegex": "",
    "plateSize": "PLATE1X1",
    "wellLayout": {
      "FIXED": {
        "rows": 4,
        "cols": 4
      }
    },
    "wellImageOrder": [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12,
      13,
      14,
      15,
      16
    ]
  },
  "pipelines": [
    {
      "id": 2,
      "name": "Tetraspeck",
      "enabled": false,
      "imageSource": {
        "channel": 1
      },
      "description": "Detects calibration beads (e.g. tetraspeck) that are fluorescent in all channels; the analysis removes every spot overlapping one.\n1. Enable this pipeline\n2. Select the tetraspeck image channel (channel showing only tetraspecks)\n3. Adapt the threshold",
      "steps": [
        {
          "id": 1,
          "enabled": true,
          "module": {
            "key": "EV_DETECTION",
            "values": {
              "evs": "5",
              "threshold_method": "Manual",
              "min_threshold": 200.0,
              "min_area": 5.0
            }
          }
        }
      ]
    },
    {
      "id": 1,
      "name": "Spot count",
      "enabled": true,
      "imageSource": "NONE",
      "description": "Set image channels, classes and detection settings on the module.",
      "steps": [
        {
          "id": 1,
          "enabled": true,
          "module": {
            "key": "SPOT_COUNT",
            "values": {}
          }
        }
      ]
    }
  ],
  "modules": [
    {
      "key": "SPOT_COUNT",
      "meta": {
        "name": "Spot count",
        "shortDescription": "Count the number of spots in an image channel.",
        "description": "Count the number of spots in an image channel.",
        "authors": [
          {
            "fullName": "Melanie Schuerz",
            "organization": "University of Salzburg"
          }
        ],
        "creationTime": "2026-06-11T00:00:00Z",
        "version": 1,
        "category": "Spot Detection",
        "tags": [
          "spot-count",
          "particle-analysis"
        ]
      },
      "classes": [],
      "steps": [
        {
          "id": 1,
          "enabled": true,
          "command": {
            "type": "LOAD_CHANNEL",
            "channel": 0
          }
        },
        {
          "id": 2,
          "enabled": true,
          "module": {
            "key": "EV_DETECTION",
            "values": {
              "evs": "21",
              "threshold_method": "Manual",
              "min_threshold": 200.0,
              "min_area": 3.0
            }
          }
        },
        {
          "id": 3,
          "enabled": true,
          "command": {
            "type": "CLASSIFY_OBJECTS",
            "inputClasses": [
              {
                "GLOBAL": 21
              }
            ],
            "matchHandling": "REMOVE_ALL_CLASSES_IF_NOT_MATCH",
            "outputClass": "UNSET",
            "overlappingWith": "UNSET",
            "originSegmentation": [],
            "minIntersectionArea": 0.0,
            "sizeUnit": "PIXELS",
            "minArea": 0.0,
            "maxArea": 2147483600.0,
            "minCircularity": 0.1,
            "maxCircularity": 1.0,
            "minSolidity": 0.0,
            "maxSolidity": 1.0,
            "minAspectRatio": 0.0,
            "maxAspectRatio": 2147483600.0,
            "minEccentricity": 0.0,
            "maxEccentricity": 1.0,
            "minFeret": 0.0,
            "maxFeret": 2147483600.0,
            "allowEdgeTouching": true
          }
        },
        {
          "id": 4,
          "enabled": true,
          "command": {
            "type": "CLASSIFY_OBJECTS",
            "inputClasses": [
              {
                "GLOBAL": 21
              }
            ],
            "matchHandling": "REMOVE_ALL_CLASSES_IF_MATCH",
            "outputClass": "UNSET",
            "overlappingWith": {
              "GLOBAL": 5
            },
            "originSegmentation": [],
            "minIntersectionArea": 0.0,
            "sizeUnit": "PIXELS",
            "minArea": 0.0,
            "maxArea": 2147483600.0,
            "minCircularity": 0.0,
            "maxCircularity": 1.0,
            "minSolidity": 0.0,
            "maxSolidity": 1.0,
            "minAspectRatio": 0.0,
            "maxAspectRatio": 2147483600.0,
            "minEccentricity": 0.0,
            "maxEccentricity": 1.0,
            "minFeret": 0.0,
            "maxFeret": 2147483600.0,
            "allowEdgeTouching": true
          }
        }
      ],
      "parameters": [
        {
          "key": "channels_spots_ch1",
          "label": "Spots ch1",
          "description": "",
          "section": "Channels",
          "default": 0,
          "bindings": [
            {
              "step": 1,
              "param": "channel"
            }
          ]
        },
        {
          "key": "classes_ch1_spot",
          "label": "ch1@spot",
          "description": "",
          "section": "Classes",
          "default": "21",
          "bindings": [
            {
              "step": 2,
              "param": "evs"
            },
            {
              "step": 3,
              "param": "input_classes"
            },
            {
              "step": 4,
              "param": "input_classes"
            }
          ]
        },
        {
          "key": "classes_tetraspeck_spot",
          "label": "tetraspeck@spot",
          "description": "",
          "section": "Classes",
          "default": "5",
          "bindings": [
            {
              "step": 4,
              "param": "overlapping_with"
            }
          ]
        },
        {
          "key": "spots_ch1_threshold_method",
          "label": "Threshold method",
          "description": "",
          "section": "Spots ch1",
          "default": "Manual",
          "bindings": [
            {
              "step": 2,
              "param": "threshold_method"
            }
          ]
        },
        {
          "key": "spots_ch1_min_threshold",
          "label": "Min threshold",
          "description": "",
          "section": "Spots ch1",
          "default": 200.0,
          "bindings": [
            {
              "step": 2,
              "param": "min_threshold"
            }
          ]
        },
        {
          "key": "spots_ch1_min_area",
          "label": "Min area",
          "description": "",
          "section": "Spots ch1",
          "default": 3.0,
          "bindings": [
            {
              "step": 2,
              "param": "min_area"
            }
          ]
        },
        {
          "key": "spots_ch1_min_circularity",
          "label": "Min circularity",
          "description": "",
          "section": "Spots ch1",
          "default": 0.1,
          "bindings": [
            {
              "step": 3,
              "param": "min_circularity"
            }
          ]
        }
      ]
    },
    {
      "key": "EV_DETECTION",
      "meta": {
        "name": "EV detection",
        "shortDescription": "EV detection",
        "description": "Detects extracellular vesicles (EVs) in a fluorescence channel using rolling ball background subtraction, blurring and Li thresholding. The class the objects get is the module's \"EVs\" parameter.",
        "authors": [
          {
            "fullName": "Melanie Schuerz",
            "organization": "University of Salzburg"
          }
        ],
        "creationTime": "2026-10-20T17:24:19.175336003Z",
        "version": 2,
        "category": "Spot Detection",
        "tags": [
          "spot"
        ],
        "appVersion": "0.1.0"
      },
      "classes": [],
      "steps": [
        {
          "id": 1,
          "enabled": true,
          "command": {
            "type": "ROLLING_BALL",
            "radius": 4.0,
            "ballType": "PARABOLOID",
            "preSmooth": true
          }
        },
        {
          "id": 2,
          "enabled": true,
          "command": {
            "type": "BLUR",
            "kernelSize": 3
          }
        },
        {
          "id": 3,
          "enabled": true,
          "command": {
            "type": "BLUR",
            "kernelSize": 3
          }
        },
        {
          "id": 4,
          "enabled": true,
          "command": {
            "type": "THRESHOLD",
            "thresholds": [
              {
                "method": {
                  "type": "LI"
                },
                "minThreshold": 0.0,
                "maxThreshold": 65535.0,
                "unit": "BIT",
                "segmentationClass": 1,
                "valueSource": "ACTUAL_IMAGE"
              }
            ]
          }
        },
        {
          "id": 5,
          "enabled": true,
          "command": {
            "type": "CONNECTED_COMPONENTS",
            "minSize": 0
          }
        },
        {
          "id": 6,
          "enabled": true,
          "command": {
            "type": "EXTRACT_OBJECTS",
            "maxObjectsBeforeFail": 100000,
            "classMapping": [
              {
                "segmentationClass": 1,
                "objectClass": {
                  "GLOBAL": 1
                }
              }
            ]
          }
        },
        {
          "id": 7,
          "enabled": true,
          "command": {
            "type": "CLASSIFY_OBJECTS",
            "originSegmentation": [],
            "inputClasses": [
              {
                "GLOBAL": 1
              }
            ],
            "matchHandling": "REMOVE_ALL_CLASSES_IF_NOT_MATCH",
            "outputClass": {
              "GLOBAL": 1
            },
            "overlappingWith": "UNSET",
            "minIntersectionArea": 0.0,
            "sizeUnit": "PIXELS",
            "minArea": 4.0,
            "maxArea": 2147483600.0,
            "minCircularity": 0.0,
            "maxCircularity": 1.0,
            "minSolidity": 0.0,
            "maxSolidity": 1.0,
            "minAspectRatio": 0.0,
            "maxAspectRatio": 2147483600.0,
            "minEccentricity": 0.0,
            "maxEccentricity": 1.0,
            "minFeret": 0.0,
            "maxFeret": 2147483600.0,
            "allowEdgeTouching": true,
            "intensityFilters": []
          }
        }
      ],
      "parameters": [
        {
          "key": "evs",
          "label": "EVs",
          "description": "",
          "section": "Classes",
          "default": "1",
          "bindings": [
            {
              "step": 6,
              "param": "class_mapping.0.object_class"
            },
            {
              "step": 7,
              "param": "output_class"
            },
            {
              "step": 7,
              "param": "input_classes"
            }
          ]
        },
        {
          "key": "threshold_method",
          "label": "Threshold method",
          "description": "",
          "section": "Detection",
          "default": "Li",
          "bindings": [
            {
              "step": 4,
              "param": "thresholds.0.method"
            }
          ]
        },
        {
          "key": "min_threshold",
          "label": "Min threshold",
          "description": "",
          "section": "Detection",
          "default": 0,
          "bindings": [
            {
              "step": 4,
              "param": "thresholds.0.min_threshold"
            }
          ]
        },
        {
          "key": "min_area",
          "label": "Min area",
          "description": "",
          "section": "Filter",
          "default": 4,
          "bindings": [
            {
              "step": 7,
              "param": "min_area"
            }
          ]
        },
        {
          "key": "size_unit",
          "label": "Size unit",
          "description": "",
          "section": "Filter",
          "default": "px",
          "bindings": [
            {
              "step": 7,
              "param": "size_unit"
            }
          ]
        }
      ],
      "origin": {
        "originModuleKey": "EV_DETECTION",
        "library": "ev_detection.evacomp",
        "version": 2,
        "contentHash": "c30e99d5bd4fefde"
      }
    }
  ]
}
