def test_load_v3(): with open("./tests/resources/modules/resize/v3.pipeline", "r") as fd: data = fd.read() pipeline = cellprofiler_core.pipeline.Pipeline() def callback(caller, event): assert not isinstance(event, cellprofiler_core.pipeline.event.LoadException) pipeline.add_listener(callback) pipeline.load(io.StringIO(data)) assert len(pipeline.modules()) == 2 module = pipeline.modules()[0] assert isinstance(module, cellprofiler.modules.resize.Resize) assert module.x_name == "DNA" assert module.y_name == "ResizedDNA" assert module.size_method == cellprofiler.modules.resize.R_TO_SIZE assert round(abs(module.resizing_factor.value - 0.25), 7) == 0 assert module.specific_width == 141 assert module.specific_height == 169 assert module.interpolation == cellprofiler.modules.resize.I_BILINEAR assert module.additional_image_count.value == 1 additional_image = module.additional_images[0] assert additional_image.input_image_name == "Actin" assert additional_image.output_image_name == "ResizedActin" module = pipeline.modules()[1] assert isinstance(module, cellprofiler.modules.resize.Resize) assert module.interpolation == cellprofiler.modules.resize.I_BICUBIC
def make_tile_workspace(images): module = cellprofiler.modules.tile.Tile() module.set_module_num(1) module.tile_method.value = cellprofiler.modules.tile.T_ACROSS_CYCLES module.input_image.value = INPUT_IMAGE_NAME module.output_image.value = OUTPUT_IMAGE_NAME pipeline = cellprofiler_core.pipeline.Pipeline() def callback(caller, event): assert not isinstance(event, cellprofiler_core.pipeline.event.RunException) pipeline.add_listener(callback) pipeline.add_module(module) image_set_list = cellprofiler_core.image.ImageSetList() for i, image in enumerate(images): image_set = image_set_list.get_image_set(i) image_set.add(INPUT_IMAGE_NAME, cellprofiler_core.image.Image(image)) workspace = cellprofiler_core.workspace.Workspace( pipeline, module, image_set_list.get_image_set(0), cellprofiler_core.object.ObjectSet(), cellprofiler_core.measurement.Measurements(), image_set_list, ) return workspace, module
def test_load_v5(): file = tests.modules.test_resources_directory( "splitormergeobjects/v5.pipeline") with open(file, "r") as fd: data = fd.read() pipeline = cellprofiler_core.pipeline.Pipeline() def callback(caller, event): assert not isinstance(event, cellprofiler_core.pipeline.event.LoadException) pipeline.add_listener(callback) pipeline.loadtxt(six.moves.StringIO(data)) module = pipeline.modules()[0] assert module.objects_name.value == "IdentifyPrimaryObjects" assert module.output_objects_name.value == "SplitOrMergeObjects" assert module.relabel_option.value == "Merge" assert module.distance_threshold.value == 0 assert not module.wants_image.value assert module.image_name.value == "None" assert module.minimum_intensity_fraction.value == 0.9 assert module.where_algorithm.value == "Closest point" assert module.merge_option.value == "Distance" assert module.parent_object.value == "None" assert module.merging_method.value == "Disconnected"
def test_load_v5(): with open("./tests/resources/modules/displaydataonimage/v5.pipeline", "r") as fd: data = fd.read() pipeline = cellprofiler_core.pipeline.Pipeline() def callback(caller, event): assert not isinstance(event, cellprofiler_core.pipeline.event.LoadException) pipeline.add_listener(callback) pipeline.load(six.moves.StringIO(data)) assert len(pipeline.modules()) == 1 module = pipeline.modules()[0] assert isinstance( module, cellprofiler.modules.displaydataonimage.DisplayDataOnImage ) assert module.objects_or_image == cellprofiler.modules.displaydataonimage.OI_OBJECTS assert module.measurement == "AreaShape_Zernike_0_0" assert module.image_name == "DNA" assert module.text_color == "green" assert module.objects_name == "Nuclei" assert module.display_image == "Zernike" assert module.font_size == 10 assert module.decimals == 2 assert module.saved_image_contents == cellprofiler.modules.displaydataonimage.E_AXES assert module.offset == 5 assert module.color_or_text == cellprofiler.modules.displaydataonimage.CT_COLOR assert module.colormap == "jet" assert not module.wants_image assert ( module.color_map_scale_choice == cellprofiler.modules.displaydataonimage.CMS_USE_MEASUREMENT_RANGE ) assert module.color_map_scale.min == 0 assert module.color_map_scale.max == 1
def test_load_v1(): file = tests.modules.test_resources_directory("tile/v1.pipeline") with open(file, "r") as fd: data = fd.read() pipeline = cellprofiler_core.pipeline.Pipeline() def callback(caller, event): assert not isinstance(event, cellprofiler_core.pipeline.event.LoadException) pipeline.add_listener(callback) pipeline.load(six.moves.StringIO(data)) assert len(pipeline.modules()) == 1 module = pipeline.modules()[0] assert isinstance(module, cellprofiler.modules.tile.Tile) assert module.input_image == "ResizedColorImage" assert module.output_image == "TiledImage" assert module.tile_method == cellprofiler.modules.tile.T_ACROSS_CYCLES assert module.rows == 2 assert module.columns == 12 assert module.wants_automatic_rows assert not module.wants_automatic_columns assert module.place_first == cellprofiler.modules.tile.P_TOP_LEFT assert module.tile_style == cellprofiler.modules.tile.S_ROW assert not module.meander assert len(module.additional_images) == 3 for g, expected in zip( module.additional_images, ("Cytoplasm", "ColorImage", "DNA") ): assert g.input_image_name == expected
def make_workspace(image, labels): module = cellprofiler.modules.definegrid.DefineGrid() module.set_module_num(1) module.grid_image.value = GRID_NAME module.manual_image.value = INPUT_IMAGE_NAME module.display_image_name.value = INPUT_IMAGE_NAME module.object_name.value = OBJECTS_NAME module.save_image_name.value = OUTPUT_IMAGE_NAME image_set_list = cellprofiler_core.image.ImageSetList() image_set = image_set_list.get_image_set(0) image_set.add(INPUT_IMAGE_NAME, cellprofiler_core.image.Image(image)) object_set = cellprofiler_core.object.ObjectSet() objects = cellprofiler_core.object.Objects() objects.segmented = labels object_set.add_objects(objects, OBJECTS_NAME) pipeline = cellprofiler_core.pipeline.Pipeline() def callback(caller, event): assert not isinstance(event, cellprofiler_core.pipeline.event.LoadException) assert not isinstance(event, cellprofiler_core.pipeline.event.RunException) pipeline.add_listener(callback) pipeline.add_module(module) measurements = cellprofiler_core.measurement.Measurements() workspace = cellprofiler_core.workspace.Workspace(pipeline, module, image_set, object_set, measurements, image_set_list) return workspace, module
def test_load_v3(): file = tests.modules.get_test_resources_directory( "measuregranularity/v3.pipeline") with open(file, "r") as fd: data = fd.read() pipeline = cellprofiler_core.pipeline.Pipeline() def callback(caller, event): assert not isinstance(event, cellprofiler_core.pipeline.event.LoadException) pipeline.add_listener(callback) pipeline.load(six.moves.StringIO(data)) assert len(pipeline.modules()) == 1 module = pipeline.modules()[0] assert isinstance( module, cellprofiler.modules.measuregranularity.MeasureGranularity) assert len(module.images_list.value) == 2 for image_name, subsample_size, bsize, elsize, glen, objs in ( ("DNA", 0.25, 0.25, 10, 16, ("Nuclei", "Cells")), ("Actin", 0.33, 0.50, 12, 20, ("Nuclei", "Cells", "Cytoplasm")), ): assert image_name in module.images_list.value assert module.subsample_size.value == 0.25 assert module.image_sample_size.value == 0.25 assert module.element_size.value == 10 assert module.granular_spectrum_length.value == 16 assert len(module.objects_list.value) == 3 assert all([obj in module.objects_list.value for obj in objs])
def test_load_v4(): with open("./tests/resources/modules/loaddata/v4.pipeline", "r") as fd: data = fd.read() pipeline = cellprofiler_core.pipeline.Pipeline() def callback(caller, event): assert not isinstance(event, cellprofiler_core.pipeline.event.LoadException) pipeline.add_listener(callback) pipeline.load(io.StringIO(data)) assert len(pipeline.modules()) == 1 module = pipeline.modules()[0] assert isinstance(module, cellprofiler.modules.loaddata.LoadData) assert module.csv_file_name == "1049_Metadata.csv" assert ( module.csv_directory.dir_choice == cellprofiler_core.preferences.DEFAULT_INPUT_FOLDER_NAME ) assert module.wants_images assert module.rescale assert not module.wants_image_groupings assert not module.wants_rows assert module.row_range.min == 10 assert module.row_range.max == 36 assert len(module.metadata_fields.selections) == 1 assert module.metadata_fields.selections[0] == "Well"
def test_load_v6(): with open("./tests/resources/modules/loaddata/v6.pipeline", "r") as fd: data = fd.read() pipeline = cellprofiler_core.pipeline.Pipeline() def callback(caller, event): assert not isinstance(event, cellprofiler_core.pipeline.event.LoadException) pipeline.add_listener(callback) pipeline.load(io.StringIO(data)) assert len(pipeline.modules()) == 1 module = pipeline.modules()[0] assert isinstance(module, cellprofiler.modules.loaddata.LoadData) assert module.csv_file_name == "1049_Metadata.csv" assert module.csv_directory.dir_choice == cellprofiler_core.setting.ABSOLUTE_FOLDER_NAME assert ( module.csv_directory.custom_path == r"x:\projects\NightlyBuild\trunk\ExampleImages\ExampleSBSImages" ) assert module.wants_images assert ( module.image_directory.dir_choice == cellprofiler_core.preferences.DEFAULT_INPUT_FOLDER_NAME ) assert module.rescale assert module.wants_image_groupings assert not module.wants_rows assert module.row_range.min == 1 assert module.row_range.max == 100000 assert len(module.metadata_fields.selections) == 2 assert module.metadata_fields.selections[0] == "Column" assert module.metadata_fields.selections[1] == "Row"
def test_load_v3(): with open("./tests/resources/modules/flagimages/v3.pipeline", "r") as fd: data = fd.read() pipeline = cellprofiler_core.pipeline.Pipeline() def callback(caller, event): assert not isinstance(event, cellprofiler_core.pipeline.event.LoadException) pipeline.add_listener(callback) pipeline.load(six.moves.StringIO(data)) assert len(pipeline.modules()) == 1 module = pipeline.modules()[0] assert isinstance(module, cellprofiler.modules.flagimage.FlagImage) expected = ( ( "QCFlag", cellprofiler.modules.flagimage.C_ANY, False, ( ("Intensity_MaxIntensity_DNA", None, 0.95, "foo.txt"), ("Intensity_MinIntensity_Cytoplasm", 0.05, None, "bar.txt"), ("Intensity_MeanIntensity_DNA", 0.1, 0.9, "baz.txt"), ), ), ( "HighCytoplasmIntensity", None, True, (("Intensity_MeanIntensity_Cytoplasm", None, 0.8, "dunno.txt"), ), ), ) assert len(expected) == module.flag_count.value for flag, (feature_name, combine, skip, measurements) in zip(module.flags, expected): assert isinstance(flag, cellprofiler_core.setting.SettingsGroup) assert flag.category == "Metadata" assert flag.feature_name == feature_name assert flag.wants_skip == skip if combine is not None: assert flag.combination_choice == combine assert len(measurements) == flag.measurement_count.value for (measurement, (measurement_name, min_value, max_value, rules_file)) in zip(flag.measurement_settings, measurements): assert isinstance(measurement, cellprofiler_core.setting.SettingsGroup) assert measurement.source_choice == cellprofiler.modules.flagimage.S_IMAGE assert measurement.measurement == measurement_name assert measurement.wants_minimum.value == (min_value is not None) if measurement.wants_minimum.value: assert round(abs(measurement.minimum_value.value - min_value), 7) == 0 assert measurement.wants_maximum.value == (max_value is not None) if measurement.wants_maximum.value: assert round(abs(measurement.maximum_value.value - max_value), 7) == 0 assert measurement.rules_file_name == rules_file assert measurement.rules_class == "1"
def test_load_v3(): """ Tests a pipeline that was produced with module revision 3. The channel names are named according to the schema: Channel(#new_imagenumber)_(#channel_number), e.g. Channel3_2 would be the image number 3 that contains channel number 2. Thus it can be easily checked via the new image name, if the channel number is correctly parsed. """ with open("./tests/resources/modules/colortogray/v3.pipeline", "r") as fd: data = fd.read() pipeline = cellprofiler_core.pipeline.Pipeline() def callback(caller, event): assert not isinstance(event, cellprofiler_core.pipeline.event.LoadException) pipeline.add_listener(callback) pipeline.load(six.moves.StringIO(data)) assert len(pipeline.modules()) == 1 module = pipeline.modules()[0] assert isinstance(module, cellprofiler.modules.colortogray.ColorToGray) assert module.image_name == "DNA" assert module.channel_count.value == 8 for i in range(module.channel_count.value): c = module.channels[i].image_name.value.split("_")[1] assert module.channels[i].channel_choice.value == int(c) assert module.channels[6].image_name.value == "Channel7_7"
def test_load_v2(): path = tests.modules.get_test_resources_directory( "calculatestatistics/v2.pipeline") with open(path, "r") as fd: data = fd.read() pipeline = cellprofiler_core.pipeline.Pipeline() def callback(caller, event): assert not isinstance(event, cellprofiler_core.pipeline.event.LoadException) pipeline.add_listener(callback) pipeline.load(six.moves.StringIO(data)) assert len(pipeline.modules()) == 1 module = pipeline.modules()[0] assert isinstance( module, cellprofiler.modules.calculatestatistics.CalculateStatistics) assert module.grouping_values == "Metadata_Controls" assert len(module.dose_values) == 1 dv = module.dose_values[0] assert dv.measurement == "Metadata_SBS_Doses" assert not dv.log_transform assert dv.wants_save_figure assert dv.figure_name == "DoseResponsePlot" assert (dv.pathname.dir_choice == cellprofiler_core.preferences.DEFAULT_OUTPUT_FOLDER_NAME) assert dv.pathname.custom_path == "Test"
def test_load_v2(): file = tests.modules.get_test_resources_directory( "measureobjectneighbors/v2.pipeline") with open(file, "r") as fd: data = fd.read() pipeline = cellprofiler_core.pipeline.Pipeline() def callback(caller, event): assert not isinstance(event, cellprofiler_core.pipeline.event.LoadException) pipeline.add_listener(callback) pipeline.load(six.moves.StringIO(data)) assert len(pipeline.modules()) == 1 module = pipeline.modules()[0] assert isinstance( module, cellprofiler.modules.measureobjectneighbors.MeasureObjectNeighbors) assert module.object_name == "glia" assert module.neighbors_name == "neurites" assert (module.distance_method == cellprofiler.modules.measureobjectneighbors.D_EXPAND) assert module.distance == 2 assert not module.wants_count_image assert module.count_image_name == "countimage" assert module.count_colormap == "pink" assert not module.wants_percent_touching_image assert module.touching_image_name == "touchingimage" assert module.touching_colormap == "purple"
def test_load_v3(): with open("./tests/resources/modules/measurecolocalization/v3.pipeline", "r") as fd: data = fd.read() fd = six.moves.StringIO(data) pipeline = cellprofiler_core.pipeline.Pipeline() def callback(caller, event): assert not isinstance(event, cellprofiler_core.pipeline.event.LoadException) pipeline.add_listener(callback) pipeline.load(fd) assert len(pipeline.modules()) == 1 module = pipeline.modules()[-1] assert ( module.images_or_objects.value == cellprofiler.modules.measurecolocalization.M_IMAGES_AND_OBJECTS ) assert len(module.images_list.value) == 2 assert module.thr == 25.0 for name in module.images_list.value: assert name in ["DNA", "Cytoplasm"] assert len(module.objects_list.value) == 2 for name in module.objects_list.value: assert name in ["Nuclei", "Cells"]
def test_load_v4(): data = """CellProfiler Pipeline: http://www.cellprofiler.org Version:3 DateRevision:20141015195823 GitHash:051040e ModuleCount:1 HasImagePlaneDetails:False MeasureImageOverlap:[module_num:1|svn_version:\'Unknown\'|variable_revision_number:4|show_window:False|notes:\x5B\x5D|batch_state:array(\x5B\x5D, dtype=uint8)|enabled:True|wants_pause:False] Compare segmented objects, or foreground/background?:Foreground/background segmentation Select the image to be used as the ground truth basis for calculating the amount of overlap:Foo Select the image to be used to test for overlap:Bar Select the objects to be used as the ground truth basis for calculating the amount of overlap:Cell2_0 Select the objects to be tested for overlap against the ground truth:Cell2_1 Calculate earth mover\'s distance?:Yes Maximum # of points:101 Point selection method:Skeleton Maximum distance:102 Penalize missing pixels:Yes """ pipeline = cellprofiler_core.pipeline.Pipeline() def callback(caller, event): assert not isinstance(event, cellprofiler_core.pipeline.event.LoadException) pipeline.add_listener(callback) pipeline.load(io.StringIO(data)) module = pipeline.modules()[0] assert isinstance( module, cellprofiler.modules.measureimageoverlap.MeasureImageOverlap) assert module.ground_truth == "Foo" assert module.test_img == "Bar"
def make_workspace(pixel_data, mask=None): image = cellprofiler_core.image.Image(pixel_data, mask) image_set_list = cellprofiler_core.image.ImageSetList() image_set = image_set_list.get_image_set(0) image_set.add(IMAGE_NAME, image) module = cellprofiler.modules.identifydeadworms.IdentifyDeadWorms() module.set_module_num(1) module.image_name.value = IMAGE_NAME module.object_name.value = OBJECTS_NAME pipeline = cellprofiler_core.pipeline.Pipeline() def callback(caller, event): assert not isinstance(event, cellprofiler_core.pipeline.event.LoadException) assert not isinstance(event, cellprofiler_core.pipeline.event.RunException) pipeline.add_listener(callback) pipeline.add_module(module) workspace = cellprofiler_core.workspace.Workspace( pipeline, module, image_set, cellprofiler_core.object.ObjectSet(), cellprofiler_core.measurement.Measurements(), image_set_list, ) return workspace, module
def test_load_v5(): pipeline_file = os.path.join(get_data_directory(), "modules/metadata/v5.pipeline") with open(pipeline_file, "r") as fd: data = fd.read() pipeline = cellprofiler_core.pipeline.Pipeline() def callback(caller, event): assert not isinstance(event, cellprofiler_core.pipeline.event.LoadException) pipeline.add_listener(callback) pipeline.load(io.StringIO(data)) assert len(pipeline.modules()) == 1 module = pipeline.modules()[0] em0, em1 = module.extraction_methods assert (em0.csv_location.get_dir_choice() == cellprofiler_core.preferences.ABSOLUTE_FOLDER_NAME) assert em0.csv_location.get_custom_path() == "/imaging/analysis" assert em0.csv_filename.value == "metadata.csv" assert (em1.csv_location.get_dir_choice() == cellprofiler_core.preferences.URL_FOLDER_NAME) assert em1.csv_location.get_custom_path() == "https://cellprofiler.org" assert em1.csv_filename.value == "metadata.csv"
def test_load_v3(): file = tests.modules.test_resources_directory("filterobjects/v3.pipeline") with open(file, "r") as fd: data = fd.read() pipeline = cellprofiler_core.pipeline.Pipeline() def callback(caller, event): assert not isinstance(event, cellprofiler_core.pipeline.event.LoadException) pipeline.add_listener(callback) pipeline.load(io.StringIO(data)) assert len(pipeline.modules()) == 1 module = pipeline.modules()[-1] assert isinstance(module, cellprofiler.modules.filterobjects.FilterObjects) assert module.x_name == "Things" assert module.y_name == "FilteredThings" assert module.mode == cellprofiler.modules.filterobjects.MODE_MEASUREMENTS assert ( module.rules_directory.dir_choice == cellprofiler_core.preferences.DEFAULT_OUTPUT_FOLDER_NAME ) assert module.rules_file_name == "myrules.txt" assert module.measurements[0].measurement == "Intensity_MeanIntensity_DNA" assert module.filter_choice == cellprofiler.modules.filterobjects.FI_MINIMAL
def make_workspace(gridding, labels=None): module = cellprofiler.modules.identifyobjectsingrid.IdentifyObjectsInGrid() module.set_module_num(1) module.grid_name.value = GRID_NAME module.output_objects_name.value = OUTPUT_OBJECTS_NAME module.guiding_object_name.value = GUIDING_OBJECTS_NAME image_set_list = cellprofiler_core.image.ImageSetList() object_set = cellprofiler_core.object.ObjectSet() if labels is not None: my_objects = cellprofiler_core.object.Objects() my_objects.segmented = labels object_set.add_objects(my_objects, GUIDING_OBJECTS_NAME) pipeline = cellprofiler_core.pipeline.Pipeline() def callback(caller, event): assert not isinstance(event, cellprofiler_core.pipeline.event.RunException) pipeline.add_listener(callback) pipeline.add_module(module) workspace = cellprofiler_core.workspace.Workspace( pipeline, module, image_set_list.get_image_set(0), object_set, cellprofiler_core.measurement.Measurements(), image_set_list, ) workspace.set_grid(GRID_NAME, gridding) return workspace, module
def test_load_v4(): file = tests.modules.get_test_resources_directory("displaydataonimage/v4.pipeline") with open(file, "r") as fd: data = fd.read() pipeline = cellprofiler_core.pipeline.Pipeline() def callback(caller, event): assert not isinstance(event, cellprofiler_core.pipeline.event.LoadException) pipeline.add_listener(callback) pipeline.load(six.moves.StringIO(data)) assert len(pipeline.modules()) == 1 module = pipeline.modules()[0] assert isinstance( module, cellprofiler.modules.displaydataonimage.DisplayDataOnImage ) assert module.objects_or_image == cellprofiler.modules.displaydataonimage.OI_OBJECTS assert module.measurement == "AreaShape_Zernike_0_0" assert module.image_name == "DNA" assert module.text_color == "green" assert module.objects_name == "Nuclei" assert module.display_image == "Zernike" assert module.font_size == 10 assert module.decimals == 2 assert module.saved_image_contents == cellprofiler.modules.displaydataonimage.E_AXES assert module.offset == 5 assert module.color_or_text == cellprofiler.modules.displaydataonimage.CT_COLOR assert module.colormap == "jet" assert module.wants_image
def test_load_v4(): file = tests.modules.get_test_resources_directory("imagemath/v4.pipeline") with open(file, "r") as fd: data = fd.read() pipeline = cellprofiler_core.pipeline.Pipeline() def callback(caller, event): assert not isinstance(event, cellprofiler_core.pipeline.event.LoadException) pipeline.add_listener(callback) pipeline.load(six.moves.StringIO(data)) module = pipeline.modules()[-1] assert isinstance(module, cellprofiler.modules.imagemath.ImageMath) assert module.operation == cellprofiler.modules.imagemath.O_LOG_TRANSFORM assert module.exponent == 1.5 assert module.after_factor == 0.5 assert module.addend == 0.1 assert module.truncate_low assert not module.truncate_high assert module.ignore_mask assert module.output_image_name == "LogTransformed" assert (module.images[0].image_or_measurement == cellprofiler.modules.imagemath.IM_IMAGE) assert module.images[0].image_name == "DNA" assert module.images[0].factor == 1.2 assert (module.images[1].image_or_measurement == cellprofiler.modules.imagemath.IM_MEASUREMENT) assert module.images[1].measurement == "Count_Nuclei" assert module.images[1].factor == 1.5
def test_load_v1(): file = tests.modules.get_test_resources_directory( "maskobjects/v1.pipeline") with open(file, "r") as fd: data = fd.read() pipeline = cellprofiler_core.pipeline.Pipeline() def callback(caller, event): assert not isinstance(event, cellprofiler_core.pipeline.event.LoadException) pipeline.add_listener(callback) pipeline.load(six.moves.StringIO(data)) assert len(pipeline.modules()) == 4 module = pipeline.modules()[0] assert isinstance(module, cellprofiler.modules.maskobjects.MaskObjects) assert module.object_name.value == "Nuclei" assert module.mask_choice.value == cellprofiler.modules.maskobjects.MC_OBJECTS assert module.masking_objects.value == "Wells" assert module.remaining_objects.value == "MaskedNuclei" assert (module.retain_or_renumber.value == cellprofiler.modules.maskobjects.R_RENUMBER) assert module.overlap_choice.value == cellprofiler.modules.maskobjects.P_MASK assert not module.wants_inverted_mask module = pipeline.modules()[1] assert isinstance(module, cellprofiler.modules.maskobjects.MaskObjects) assert module.object_name.value == "Cells" assert module.mask_choice.value == cellprofiler.modules.maskobjects.MC_IMAGE assert module.masking_image.value == "WellBoundary" assert module.remaining_objects.value == "MaskedCells" assert module.retain_or_renumber.value == cellprofiler.modules.maskobjects.R_RETAIN assert module.overlap_choice.value == cellprofiler.modules.maskobjects.P_KEEP assert not module.wants_inverted_mask module = pipeline.modules()[2] assert isinstance(module, cellprofiler.modules.maskobjects.MaskObjects) assert module.object_name.value == "Cytoplasm" assert module.mask_choice.value == cellprofiler.modules.maskobjects.MC_OBJECTS assert module.masking_objects.value == "Cells" assert module.remaining_objects.value == "MaskedCytoplasm" assert (module.retain_or_renumber.value == cellprofiler.modules.maskobjects.R_RENUMBER) assert module.overlap_choice.value == cellprofiler.modules.maskobjects.P_REMOVE assert not module.wants_inverted_mask module = pipeline.modules()[3] assert isinstance(module, cellprofiler.modules.maskobjects.MaskObjects) assert module.object_name.value == "Speckles" assert module.mask_choice.value == cellprofiler.modules.maskobjects.MC_OBJECTS assert module.masking_objects.value == "Cells" assert module.remaining_objects.value == "MaskedSpeckles" assert (module.retain_or_renumber.value == cellprofiler.modules.maskobjects.R_RENUMBER) assert (module.overlap_choice.value == cellprofiler.modules.maskobjects.P_REMOVE_PERCENTAGE) assert round(abs(module.overlap_fraction.value - 0.3), 7) == 0 assert not module.wants_inverted_mask
def test_load_v3(): with open("./tests/resources/modules/graytocolor/v3.pipeline", "r") as fd: data = fd.read() pipeline = cellprofiler_core.pipeline.Pipeline() def callback(caller, event): assert not isinstance(event, cellprofiler_core.pipeline.event.LoadException) pipeline.add_listener(callback) pipeline.load(six.moves.StringIO(data)) assert len(pipeline.modules()) == 1 module = pipeline.modules()[0] assert isinstance(module, cellprofiler.modules.graytocolor.GrayToColor) assert module.scheme_choice == cellprofiler.modules.graytocolor.SCHEME_COMPOSITE assert module.rgb_image_name == "myimage" assert module.red_image_name == "1" assert module.green_image_name == "2" assert module.blue_image_name == "3" assert module.cyan_image_name == "4" assert module.magenta_image_name == "5" assert module.yellow_image_name == "6" assert module.gray_image_name == "7" assert numpy.round(numpy.abs(module.red_adjustment_factor.value - 2.1), 7) == 0 assert numpy.round(numpy.abs(module.green_adjustment_factor.value - 2.2), 7) == 0 assert numpy.round(numpy.abs(module.blue_adjustment_factor.value - 2.3), 7) == 0 assert numpy.round(numpy.abs(module.cyan_adjustment_factor.value - 1.1), 7) == 0 assert numpy.round(numpy.abs(module.magenta_adjustment_factor.value - 1.2), 7) == 0 assert numpy.round(numpy.abs(module.yellow_adjustment_factor.value - 1.3), 7) == 0 assert numpy.round(numpy.abs(module.gray_adjustment_factor.value - 1.4), 7) == 0 assert len(module.stack_channels) == 2 assert module.stack_channels[0].image_name == "DNA" assert module.stack_channels[1].image_name == "GFP" assert module.stack_channels[0].color.to_rgb() == (127, 0, 255) assert module.stack_channels[1].color.to_rgb() == (127, 255, 0)
def test_non_contiguous(): """make sure MeasureObjectAreaShape doesn't crash if fed non-contiguous objects""" module = cellprofiler.modules.measureobjectsizeshape.MeasureObjectAreaShape() module.objects_list.value.append("SomeObjects") module.calculate_zernikes.value = True object_set = cellprofiler_core.object.ObjectSet() labels = numpy.zeros((10, 20), int) labels[1:9, 1:5] = 1 labels[4:6, 6:19] = 1 objects = cellprofiler_core.object.Objects() objects.segmented = labels object_set.add_objects(objects, "SomeObjects") module.set_module_num(1) image_set_list = cellprofiler_core.image.ImageSetList() measurements = cellprofiler_core.measurement.Measurements() pipeline = cellprofiler_core.pipeline.Pipeline() pipeline.add_module(module) def callback(caller, event): assert not isinstance(event, cellprofiler_core.pipeline.event.RunException) pipeline.add_listener(callback) workspace = cellprofiler_core.workspace.Workspace( pipeline, module, image_set_list.get_image_set(0), object_set, measurements, image_set_list, ) module.run(workspace) values = measurements.get_current_measurement("SomeObjects", "AreaShape_Perimeter") assert len(values) == 1 assert values[0] == 54
def test_load_v3(): file = tests.modules.get_test_resources_directory( "maskobjects/v3.pipeline") with open(file, "r") as fd: data = fd.read() pipeline = cellprofiler_core.pipeline.Pipeline() def callback(caller, event): assert not isinstance(event, cellprofiler_core.pipeline.event.LoadException) pipeline.add_listener(callback) pipeline.loadtxt(six.moves.StringIO(data)) module = pipeline.modules()[0] assert module.object_name.value == "IdentifyPrimaryObjects" assert module.remaining_objects.value == "MaskObjects" assert module.mask_choice.value == "Objects" assert module.masking_objects.value == "FilterObjects" assert module.masking_image.value == "None" assert module.overlap_choice.value == "Keep overlapping region" assert module.overlap_fraction.value == 0.5 assert module.retain_or_renumber.value == "Renumber" assert not module.wants_inverted_mask.value
def test_load_v1(): file = tests.modules.test_resources_directory("labelimages/v1.pipeline") with open(file, "r") as fd: data = fd.read() pipeline = cellprofiler_core.pipeline.Pipeline() def callback(caller, event): assert not isinstance(event, cellprofiler_core.pipeline.event.LoadException) pipeline.add_listener(callback) pipeline.load(six.moves.StringIO(data)) assert len(pipeline.modules()) == 2 module = pipeline.modules()[0] assert isinstance(module, cellprofiler.modules.labelimages.LabelImages) assert module.site_count == 3 assert module.row_count == 32 assert module.column_count == 48 assert module.order == cellprofiler.modules.labelimages.O_COLUMN module = pipeline.modules()[1] assert isinstance(module, cellprofiler.modules.labelimages.LabelImages) assert module.site_count == 1 assert module.row_count == 8 assert module.column_count == 12 assert module.order == cellprofiler.modules.labelimages.O_ROW
def test_load_v2(): file = tests.modules.test_resources_directory("maskobjects/v2.pipeline") with open(file, "r") as fd: data = fd.read() pipeline = cellprofiler_core.pipeline.Pipeline() def callback(caller, event): assert not isinstance(event, cellprofiler_core.pipeline.event.LoadException) pipeline.add_listener(callback) pipeline.load(six.moves.StringIO(data)) assert len(pipeline.modules()) == 1 module = pipeline.modules()[0] assert isinstance(module, cellprofiler.modules.maskobjects.MaskObjects) assert module.object_name.value == "Nuclei" assert module.mask_choice.value == cellprofiler.modules.maskobjects.MC_OBJECTS assert module.masking_objects.value == "Wells" assert module.remaining_objects.value == "MaskedNuclei" assert ( module.retain_or_renumber.value == cellprofiler.modules.maskobjects.R_RENUMBER ) assert module.overlap_choice.value == cellprofiler.modules.maskobjects.P_MASK assert module.wants_inverted_mask
def test_load_v1(): file = tests.modules.test_resources_directory("straightenworms/v1.pipeline") with open(file, "r") as fd: data = fd.read() pipeline = cellprofiler_core.pipeline.Pipeline() def callback(caller, event): assert not isinstance(event, cellprofiler_core.pipeline.event.LoadException) pipeline.add_listener(callback) pipeline.load(six.moves.StringIO(data)) assert len(pipeline.modules()) == 1 module = pipeline.modules()[0] assert isinstance(module, cellprofiler.modules.straightenworms.StraightenWorms) assert module.objects_name == "OverlappingWorms" assert module.straightened_objects_name == "StraightenedWorms" assert module.width == 20 assert ( module.training_set_directory.dir_choice == cellprofiler_core.preferences.DEFAULT_OUTPUT_FOLDER_NAME ) assert module.training_set_file_name == "TrainingSet.xml" assert module.image_count.value == 2 for group, input_name, output_name in ( (module.images[0], "Brightfield", "StraightenedBrightfield"), (module.images[1], "Fluorescence", "StraightenedFluorescence"), ): assert group.image_name == input_name assert group.straightened_image_name == output_name
def test_load_v4(): pipeline_file = os.path.join(get_data_directory(), "modules/metadata/v4.pipeline") with open(pipeline_file, "r") as fd: data = fd.read() pipeline = cellprofiler_core.pipeline.Pipeline() def callback(caller, event): assert not isinstance(event, cellprofiler_core.pipeline.event.LoadException) pipeline.add_listener(callback) pipeline.load(io.StringIO(data)) assert len(pipeline.modules()) == 1 module = pipeline.modules()[0] assert isinstance(module, cellprofiler_core.modules.metadata.Metadata) assert module.wants_metadata assert (module.data_type_choice == cellprofiler_core.constants.modules.metadata.DTC_CHOOSE) d = cellprofiler_core.setting.DataTypes.decode_data_types( module.data_types.value_text) for k, v in ( ("Index", cellprofiler_core.setting.DataTypes.DT_NONE), ("WellRow", cellprofiler_core.setting.DataTypes.DT_TEXT), ("WellColumn", cellprofiler_core.setting.DataTypes.DT_FLOAT), ("ChannelNumber", cellprofiler_core.setting.DataTypes.DT_INTEGER), ): assert k in d assert d[k] == v assert len(module.extraction_methods) == 2 em0, em1 = module.extraction_methods assert (em0.extraction_method == cellprofiler_core.constants.modules.metadata.X_MANUAL_EXTRACTION) assert em0.source == cellprofiler_core.constants.modules.metadata.XM_FILE_NAME assert ( em0.file_regexp.value == r"^Channel(?P<ChannelNumber>[12])-(?P<Index>[0-9]+)-(?P<WellRow>[A-H])-(?P<WellColumn>[0-9]{2}).tif$" ) assert em0.folder_regexp.value == r"(?P<Date>[0-9]{4}_[0-9]{2}_[0-9]{2})$" assert (em0.filter_choice == cellprofiler_core.constants.modules.metadata.F_ALL_IMAGES) assert em0.filter == 'or (file does contain "Channel2")' assert not em0.wants_case_insensitive assert (em1.extraction_method == cellprofiler_core.constants.modules.metadata.X_IMPORTED_EXTRACTION) assert em1.source == cellprofiler_core.constants.modules.metadata.XM_FOLDER_NAME assert (em1.filter_choice == cellprofiler_core.constants.modules.metadata.F_FILTERED_IMAGES) assert (em1.csv_location.get_dir_choice() == cellprofiler_core.preferences.ABSOLUTE_FOLDER_NAME) assert em1.csv_location.get_custom_path() == "/imaging/analysis" assert em1.csv_filename.value == "metadata.csv" assert ( em1.csv_joiner.value == "[{'Image Metadata': u'ChannelNumber', 'CSV Metadata': u'Wavelength'}]" ) assert em1.wants_case_insensitive
def test_load_v3(): data = """CellProfiler Pipeline: http://www.cellprofiler.org Version:1 SVNRevision:10865 MeasureTexture:[module_num:1|svn_version:\'1\'|variable_revision_number:3|show_window:True|notes:\x5B\x5D] Hidden:2 Hidden:2 Hidden:2 Select an image to measure:rawDNA Select an image to measure:rawGFP Select objects to measure:Cells Select objects to measure:Nuclei Texture scale to measure:3 Angles to measure:Horizontal,Vertical Texture scale to measure:5 Angles to measure:Diagonal,Anti-diagonal Measure Gabor features?:Yes Number of angles to compute for Gabor:6 MeasureTexture:[module_num:2|svn_version:\'1\'|variable_revision_number:3|show_window:True|notes:\x5B\x5D] Hidden:2 Hidden:2 Hidden:2 Select an image to measure:rawDNA Select an image to measure:rawGFP Select objects to measure:Cells Select objects to measure:Nuclei Texture scale to measure:3 Angles to measure:Horizontal,Vertical Texture scale to measure:5 Angles to measure:Diagonal,Anti-diagonal Measure Gabor features?:No Number of angles to compute for Gabor:6 """ pipeline = cellprofiler_core.pipeline.Pipeline() def callback(caller, event): assert not isinstance(event, cellprofiler_core.pipeline.event.LoadException) pipeline.add_listener(callback) pipeline.load(io.StringIO(data)) assert len(pipeline.modules()) == 2 for i, wants_gabor in enumerate((True, False)): module = pipeline.modules()[i] assert isinstance(module, cellprofiler.modules.measuretexture.MeasureTexture) assert len(module.image_groups) == 2 assert module.image_groups[0].image_name.value == "rawDNA" assert module.image_groups[1].image_name.value == "rawGFP" assert len(module.object_groups) == 2 assert module.object_groups[0].object_name.value == "Cells" assert module.object_groups[1].object_name.value == "Nuclei" assert len(module.scale_groups) == 2 assert module.scale_groups[0].scale == 3 assert module.scale_groups[1].scale == 5 assert module.images_or_objects == cellprofiler.modules.measuretexture.IO_BOTH