{
  "analysis_tasks": [
    {
      "task": "FiducialCorrelationWarp",
      "module": "merlin.analysis.warp",
      "parameters": {
        "write_fiducial_images": false
      }
    },
    {
      "task": "DeconvolutionPreprocessGuo",
      "module": "merlin.analysis.preprocess",
      "parameters": {
        "warp_task": "FiducialCorrelationWarp",
        "highpass_sigma": 2,
        "decon_sigma": 1.4,
        "decon_iterations": 4,
        "decon_filter_size": 9,
        "dependencies": [
          "RunSegmentationOnTile"
        ]
      }
    },
    {
      "task": "CorrelationGlobalAlignment",
      "module": "merlin.analysis.corralign",
      "parameters": {
        "crop_width": 100,
        "write_log": true
      }
    },
    {
      "task": "AverageImageTask",
      "module": "merlin.analysis.aveimage",
      "analysis_name": "AverageImageTask",
      "parameters": {
        "global_align_task": "CorrelationGlobalAlignment",
        "converge_epsilon": "1.0e-4",
        "gauss_smooth_size": "15",
        "write_log": true
      }
    },
    {
      "task": "OptimizeIteration",
      "module": "merlin.analysis.optimize",
      "analysis_name": "Optimize1",
      "parameters": {
        "preprocess_task": "DeconvolutionPreprocessGuo",
        "warp_task": "FiducialCorrelationWarp",
        "area_threshold": 5,
        "fov_per_iteration": 50
      }
    },
    {
      "task": "OptimizeIteration",
      "module": "merlin.analysis.optimize",
      "analysis_name": "Optimize2",
      "parameters": {
        "preprocess_task": "DeconvolutionPreprocessGuo",
        "warp_task": "FiducialCorrelationWarp",
        "area_threshold": 5,
        "fov_per_iteration": 50,
        "previous_iteration": "Optimize1"
      }
    },
    {
      "task": "OptimizeIteration",
      "module": "merlin.analysis.optimize",
      "analysis_name": "Optimize3",
      "parameters": {
        "preprocess_task": "DeconvolutionPreprocessGuo",
        "warp_task": "FiducialCorrelationWarp",
        "area_threshold": 5,
        "fov_per_iteration": 50,
        "previous_iteration": "Optimize2"
      }
    },
    {
      "task": "OptimizeIteration",
      "module": "merlin.analysis.optimize",
      "analysis_name": "Optimize4",
      "parameters": {
        "preprocess_task": "DeconvolutionPreprocessGuo",
        "warp_task": "FiducialCorrelationWarp",
        "area_threshold": 5,
        "fov_per_iteration": 50,
        "previous_iteration": "Optimize3"
      }
    },
    {
      "task": "OptimizeIteration",
      "module": "merlin.analysis.optimize",
      "analysis_name": "Optimize5",
      "parameters": {
        "preprocess_task": "DeconvolutionPreprocessGuo",
        "warp_task": "FiducialCorrelationWarp",
        "area_threshold": 5,
        "fov_per_iteration": 50,
        "previous_iteration": "Optimize4"
      }
    },
    {
      "task": "OptimizeIteration",
      "module": "merlin.analysis.optimize",
      "analysis_name": "Optimize6",
      "parameters": {
        "preprocess_task": "DeconvolutionPreprocessGuo",
        "warp_task": "FiducialCorrelationWarp",
        "area_threshold": 5,
        "fov_per_iteration": 50,
        "previous_iteration": "Optimize5"
      }
    },
    {
      "task": "OptimizeIteration",
      "module": "merlin.analysis.optimize",
      "analysis_name": "Optimize7",
      "parameters": {
        "preprocess_task": "DeconvolutionPreprocessGuo",
        "warp_task": "FiducialCorrelationWarp",
        "area_threshold": 5,
        "fov_per_iteration": 50,
        "previous_iteration": "Optimize6"
      }
    },
    {
      "task": "OptimizeIteration",
      "module": "merlin.analysis.optimize",
      "analysis_name": "Optimize8",
      "parameters": {
        "preprocess_task": "DeconvolutionPreprocessGuo",
        "warp_task": "FiducialCorrelationWarp",
        "area_threshold": 5,
        "fov_per_iteration": 50,
        "previous_iteration": "Optimize7"
      }
    },
    {
      "task": "OptimizeIteration",
      "module": "merlin.analysis.optimize",
      "analysis_name": "Optimize9",
      "parameters": {
        "preprocess_task": "DeconvolutionPreprocessGuo",
        "warp_task": "FiducialCorrelationWarp",
        "area_threshold": 5,
        "fov_per_iteration": 50,
        "previous_iteration": "Optimize8"
      }
    },
    {
      "task": "OptimizeIteration",
      "module": "merlin.analysis.optimize",
      "analysis_name": "Optimize10",
      "parameters": {
        "preprocess_task": "DeconvolutionPreprocessGuo",
        "warp_task": "FiducialCorrelationWarp",
        "area_threshold": 5,
        "fov_per_iteration": 50,
        "previous_iteration": "Optimize9"
      }
    },
    {
      "task": "Decode",
      "module": "merlin.analysis.decode",
      "parameters": {
        "preprocess_task": "DeconvolutionPreprocessGuo",
        "optimize_task": "Optimize10",
        "global_align_task": "CorrelationGlobalAlignment",
        "minimum_area": 1,
        "lowpass_sigma": 0.6,
        "crop_width": 100,
        "write_decoded_images": false
      }
    },
    {
      "task": "ExportBarcodes",
      "module": "merlin.analysis.exportbarcodes",
      "parameters": {
        "filter_task": "AdaptiveFilterBarcodes",
        "exclude_blanks": false,
        "columns": [
          "barcode_id",
          "global_x",
          "global_y",
          "global_z",
          "x",
          "y",
          "fov"
        ]
      }
    },
    {
      "task": "GenerateAdaptiveThreshold",
      "module": "merlin.analysis.filterbarcodes",
      "parameters": {
        "decode_task": "Decode",
        "run_after_task": "Optimize10"
      }
    },
    {
      "task": "AdaptiveFilterBarcodes",
      "module": "merlin.analysis.filterbarcodes",
      "parameters": {
        "decode_task": "Decode",
        "adaptive_task": "GenerateAdaptiveThreshold"
      }
    },
    {
      "task": "BlendMosaic",
      "module": "merlin.analysis.blendmosaic",
      "parameters": {
        "global_align_task": "CorrelationGlobalAlignment",
        "warp_task": "FiducialCorrelationWarp",
        "microns_per_pixel": 0.108,
        "flat_field_correction": true,
        "average_image_task": "AverageImageTask",
        "max_tasks": 10,
        "deps_tasks": []
      }
    },
    {
      "task": "FitMERFISHSpots",
      "module": "merlin.analysis.spotfit",
      "parameters": {
        "warp_task": "FiducialCorrelationWarp"
      }
    },
    {
      "task": "PyramidalMosaic",
      "module": "merlin.analysis.pyrmosaic",
      "parameters": {
        "blend_mosaic": "BlendMosaic"
      }
    },
    {
      "task": "PrepareSegmentationTask",
      "module": "merlin.analysis.vpt.prepare",
      "analysis_name": "PrepareSegmentation",
      "parameters": {
        "mosaic_task": "BlendMosaic",
        "tile_size": 1000,
        "tile_overlap": 200,
        "algorithm": {
          "name": "watershed_default",
          "arguments": {
            "stardist_model": "2D_versatile_fluo",
            "seed_channel": "DAPI",
            "entity_types_detected": "cell",
            "entity_fill_channel": "PolyT"
          }
        }
      }
    },
    {
      "task": "TileSegmentation",
      "module": "merlin.analysis.vpt.segmentation",
      "analysis_name": "RunSegmentationOnTile",
      "parameters": {
        "prepare_task": "PrepareSegmentation",
        "mosaic_task": "BlendMosaic",
        "fragment_count": 35
      }
    },
    {
      "task": "CombineResultsTask",
      "module": "merlin.analysis.vpt.combine",
      "analysis_name": "CombineTask",
      "parameters": {
        "prepare_task": "PrepareSegmentation",
        "segmentation_task": "RunSegmentationOnTile"
      }
    },
    {
      "task": "PartitionGeometries",
      "module": "merlin.analysis.vpt.partitiongeometries",
      "analysis_name": "PartitionGeometries",
      "parameters": {
        "combine_task": "CombineTask"
      }
    },
    {
      "task": "SumSignalsTask",
      "module": "merlin.analysis.vpt.sumsignals",
      "analysis_name": "SumSignalsTask",
      "parameters": {
        "mosaic_task": "BlendMosaic",
        "partition_geometries_task": "PartitionGeometries",
        "fragment_count": 8,
        "entity_types": [
          "cell"
        ]
      }
    },
    {
      "task": "PartitionTranscripts",
      "module": "merlin.analysis.vpt.partition",
      "analysis_name": "PartitionTranscripts",
      "parameters": {
        "combine_task": "CombineTask",
        "export_barcodes_task": "ExportBarcodes",
        "entity_types": [
          "cell"
        ]
      }
    },
    {
      "task": "DeriveEntityMetadataTask",
      "module": "merlin.analysis.vpt.entitymetadata",
      "analysis_name": "DeriveEntityMetadataTask",
      "parameters": {
        "combine_task": "CombineTask",
        "partition_task": "PartitionTranscripts",
        "sum_signals": "SumSignalsTask",
        "entity_types": [
          "cell"
        ]
      }
    },
    {
      "task": "CellsAssemble",
      "module": "merlin.analysis.vpt.cellsassemble",
      "analysis_name": "CellsAssemble",
      "parameters": {
        "metadata_task": "DeriveEntityMetadataTask",
        "partition_task": "PartitionTranscripts"
      }
    },
    {
      "task": "EntityPreprocess",
      "module": "merlin.analysis.vpt.entityprocess",
      "analysis_name": "EntityPreprocess",
      "parameters": {
        "partition_geometries_task": "PartitionGeometries",
        "mosaic_task": "BlendMosaic",
        "fragment_count": 16,
        "entity_types": [
          "cell"
        ]
      }
    },
    {
      "task": "EntityPostProcess",
      "module": "merlin.analysis.vpt.entityprocess",
      "analysis_name": "EntityPostProcess",
      "parameters": {
        "metadata_task": "DeriveEntityMetadataTask",
        "process_task": "EntityPreprocess",
        "mosaic_task": "BlendMosaic"
      }
    },
    {
      "task": "UpdateExperimentJSON",
      "module": "merlin.analysis.updateexperimentjson",
      "parameters": {
        "blend_mosaic_task": "BlendMosaic",
        "prepare_task": "PrepareSegmentation",
        "partition_task": "PartitionTranscripts",
        "derive_cell_metadata_task": "DeriveEntityMetadataTask",
        "sum_signals_task": "SumSignalsTask",
        "viz_barcodes_task": "VizBarcodes"
      }
    },
    {
      "task": "VizBarcodes",
      "module": "merlin.analysis.vizbarcodes",
      "analysis_name": "VizBarcodes",
      "parameters": {
        "filter_task": "AdaptiveFilterBarcodes",
        "columns": [
          "barcode_id",
          "global_x",
          "global_y",
          "global_z",
          "fov"
        ],
        "alignment_task": "CorrelationGlobalAlignment",
        "mosaic_task": "BlendMosaic",
        "dependencies": [
          "PartitionGeometries"
        ]
      }
    },
    {
      "task": "VizManifest",
      "module": "merlin.analysis.vizmanifest",
      "parameters": {
        "process_task": "EntityPostProcess",
        "vizbarcodes_task": "VizBarcodes",
        "vizassemble_task": "CellsAssemble",
        "mosaic_task": "BlendMosaic"
      }
    },
    {
      "task": "AnalysisDataTransfer",
      "module": "merlin.analysis.transfer",
      "parameters": {
        "dependencies": [
          "ExportBarcodes",
          "PartitionTranscripts",
          "DeriveEntityMetadataTask",
          "CombineTask",
          "BlendMosaic",
          "VizManifest",
          "UpdateExperimentJSON"
        ]
      }
    }
  ]
}