def test_07_01_get_measurement_columns(self):
        '''Test the get_measurement_columns method'''
        colnames = ('Integer_Measurement', 'Float_Measurement',
                    'String_Measurement')
        coltypes = [
            cellprofiler.measurement.COLTYPE_INTEGER,
            cellprofiler.measurement.COLTYPE_FLOAT,
            cellprofiler.measurement.COLTYPE_VARCHAR_FORMAT % 9
        ]
        csv_text = '''"%s","%s","%s"
1,1,1
2,1.5,"Hi"
3,1,"Hello"
4,1.7,"Hola"
5,1.2,"Bonjour"
6,1.5,"Gutentag"
7,1.1,"Hej"
8,2.3,"Bevakasha"
''' % colnames
        pipeline, module, filename = self.make_pipeline(csv_text)
        columns = module.get_measurement_columns(pipeline)
        for colname, coltype in zip(colnames, coltypes):
            self.assertTrue(
                any([(column[0] == cellprofiler.measurement.IMAGE
                      and column[1] == colname and column[2] == coltype)
                     for column in columns]), 'Failed to find %s' % colname)
        os.remove(filename)
    def test_03_03_metadata_row_and_column_and_well(self):
        csv_text = '''"Metadata_Row","Metadata_Column","Metadata_Well"
"C","03","B14"
'''
        pipeline, module, filename = self.make_pipeline(csv_text)
        columns = module.get_measurement_columns(pipeline)
        self.assertTrue(
            any([
                c[0] == cellprofiler.measurement.IMAGE
                and c[1] == "Metadata_Row" and c[2] == "varchar(1)"
                for c in columns
            ]))
        self.assertTrue(
            any([
                c[0] == cellprofiler.measurement.IMAGE
                and c[1] == "Metadata_Column" and c[2] == "varchar(2)"
                for c in columns
            ]))
        self.assertTrue(
            any([
                c[0] == cellprofiler.measurement.IMAGE
                and c[1] == "Metadata_Well" and c[2] == "varchar(3)"
                for c in columns
            ]))
        m = pipeline.run()
        features = module.get_measurements(pipeline,
                                           cellprofiler.measurement.IMAGE,
                                           cellprofiler.measurement.C_METADATA)
        for feature, expected in (("Row", "C"), ("Column", "03"), ("Well",
                                                                   "B14")):
            self.assertTrue(feature in features)
            value = m.get_current_image_measurement('_'.join(
                (cellprofiler.measurement.C_METADATA, feature)))
            self.assertEqual(value, expected)
Beispiel #3
0
    def test_get_measurement_columns(self):
        module = cellprofiler.module.ObjectProcessing()

        module.x_name.value = "Objects"

        actual = module.get_measurement_columns(None)

        expected = [
            ("ObjectProcessing", cellprofiler.measurement.M_LOCATION_CENTER_X,
             cellprofiler.measurement.COLTYPE_FLOAT),
            ("ObjectProcessing", cellprofiler.measurement.M_LOCATION_CENTER_Y,
             cellprofiler.measurement.COLTYPE_FLOAT),
            ("ObjectProcessing", cellprofiler.measurement.M_LOCATION_CENTER_Z,
             cellprofiler.measurement.COLTYPE_FLOAT),
            ("ObjectProcessing",
             cellprofiler.measurement.M_NUMBER_OBJECT_NUMBER,
             cellprofiler.measurement.COLTYPE_INTEGER),
            (cellprofiler.measurement.IMAGE,
             cellprofiler.measurement.FF_COUNT % "ObjectProcessing",
             cellprofiler.measurement.COLTYPE_INTEGER),
            ("Objects",
             cellprofiler.measurement.FF_CHILDREN_COUNT % "ObjectProcessing",
             cellprofiler.measurement.COLTYPE_INTEGER),
            ("ObjectProcessing",
             cellprofiler.measurement.FF_PARENT % "Objects",
             cellprofiler.measurement.COLTYPE_INTEGER)
        ]

        assert actual == expected
Beispiel #4
0
def test_get_measurement_columns():
    """Test the get_measurement_columns method"""
    colnames = ("Integer_Measurement", "Float_Measurement",
                "String_Measurement")
    coltypes = [
        cellprofiler.measurement.COLTYPE_INTEGER,
        cellprofiler.measurement.COLTYPE_FLOAT,
        cellprofiler.measurement.COLTYPE_VARCHAR_FORMAT % 9,
    ]
    csv_text = (""""%s","%s","%s"
                1,1,1
                2,1.5,"Hi"
                3,1,"Hello"
                4,1.7,"Hola"
                5,1.2,"Bonjour"
                6,1.5,"Gutentag"
                7,1.1,"Hej"
                8,2.3,"Bevakasha"
                """ % colnames)
    pipeline, module, filename = make_pipeline(csv_text)
    columns = module.get_measurement_columns(pipeline)
    for colname, coltype in zip(colnames, coltypes):
        assert any([(column[0] == cellprofiler.measurement.IMAGE
                     and column[1] == colname and column[2] == coltype)
                    for column in columns]), ("Failed to find %s" % colname)
    os.remove(filename)
    def test_04_01_get_measurement_columns(self):
        workspace, module = self.make_workspace(
            dict(image=numpy.zeros((20, 10), bool)),
            dict(image=numpy.zeros((20, 10), bool)),
        )

        assert isinstance(
            module,
            cellprofiler.modules.measureimageoverlap.MeasureImageOverlap)
        name = TEST_IMAGE_NAME

        columns = module.get_measurement_columns(workspace.pipeline)
        # All columns should be unique
        self.assertEqual(len(columns), len(set([x[1] for x in columns])))
        # All columns should be floats and done on images
        x = columns[-1]
        self.assertTrue(all([x[0] == cellprofiler.measurement.IMAGE]))
        self.assertTrue(all([x[2] == cellprofiler.measurement.COLTYPE_FLOAT]))
        for feature in cellprofiler.modules.measureimageoverlap.FTR_ALL:
            field = "_".join((
                cellprofiler.modules.measureimageoverlap.C_IMAGE_OVERLAP,
                feature,
                name,
            ))
            self.assertTrue(field in [x[1] for x in columns])
Beispiel #6
0
def test_metadata_row_and_column_and_well():
    csv_text = """"Metadata_Row","Metadata_Column","Metadata_Well"
"C","03","B14"
"""
    pipeline, module, filename = make_pipeline(csv_text)
    columns = module.get_measurement_columns(pipeline)
    assert any([
        c[0] == cellprofiler.measurement.IMAGE and c[1] == "Metadata_Row"
        and c[2] == "varchar(1)" for c in columns
    ])
    assert any([
        c[0] == cellprofiler.measurement.IMAGE and c[1] == "Metadata_Column"
        and c[2] == "varchar(2)" for c in columns
    ])
    assert any([
        c[0] == cellprofiler.measurement.IMAGE and c[1] == "Metadata_Well"
        and c[2] == "varchar(3)" for c in columns
    ])
    m = pipeline.run()
    features = module.get_measurements(pipeline,
                                       cellprofiler.measurement.IMAGE,
                                       cellprofiler.measurement.C_METADATA)
    for feature, expected in (("Row", "C"), ("Column", "03"), ("Well", "B14")):
        assert feature in features
        value = m.get_current_image_measurement("_".join(
            (cellprofiler.measurement.C_METADATA, feature)))
        assert value == expected
    def test_07_03_long_integer_column(self):
        '''This is a regression test of IMG-644 where a 13-digit number got turned into an int'''
        colnames = ('Long_Integer_Measurement', 'Float_Measurement', 'String_Measurement')
        coltypes = [cellprofiler.measurement.COLTYPE_VARCHAR_FORMAT % 13, cellprofiler.measurement.COLTYPE_FLOAT,
                    cellprofiler.measurement.COLTYPE_VARCHAR_FORMAT % 9]
        csv_text = '''"%s","%s","%s"
1,1,1
2,1.5,"Hi"
3,1,"Hello"
4,1.7,"Hola"
5,1.2,"Bonjour"
6,1.5,"Gutentag"
7,1.1,"Hej"
1234567890123,2.3,"Bevakasha"
''' % colnames
        pipeline, module, filename = self.make_pipeline(csv_text)
        columns = module.get_measurement_columns(pipeline)
        fmt = "%15s %30s %20s"
        print(fmt % ("Object", "Feature", "Type"))
        for object_name, feature, coltype in columns:
            print(fmt % (object_name, feature, coltype))
        for colname, coltype in zip(colnames, coltypes):
            self.assertTrue(any([(column[0] == cellprofiler.measurement.IMAGE and
                                  column[1] == colname and
                                  column[2] == coltype) for column in columns]),
                            'Failed to find %s' % colname)
        os.remove(filename)
    def test_07_03_long_integer_column(self):
        '''This is a regression test of IMG-644 where a 13-digit number got turned into an int'''
        colnames = ('Long_Integer_Measurement', 'Float_Measurement',
                    'String_Measurement')
        coltypes = [
            cellprofiler.measurement.COLTYPE_VARCHAR_FORMAT % 13,
            cellprofiler.measurement.COLTYPE_FLOAT,
            cellprofiler.measurement.COLTYPE_VARCHAR_FORMAT % 9
        ]
        csv_text = '''"%s","%s","%s"
1,1,1
2,1.5,"Hi"
3,1,"Hello"
4,1.7,"Hola"
5,1.2,"Bonjour"
6,1.5,"Gutentag"
7,1.1,"Hej"
1234567890123,2.3,"Bevakasha"
''' % colnames
        pipeline, module, filename = self.make_pipeline(csv_text)
        columns = module.get_measurement_columns(pipeline)
        fmt = "%15s %30s %20s"
        print(fmt % ("Object", "Feature", "Type"))
        for object_name, feature, coltype in columns:
            print(fmt % (object_name, feature, coltype))
        for colname, coltype in zip(colnames, coltypes):
            self.assertTrue(
                any([(column[0] == cellprofiler.measurement.IMAGE
                      and column[1] == colname and column[2] == coltype)
                     for column in columns]), 'Failed to find %s' % colname)
        os.remove(filename)
Beispiel #9
0
def test_01_03_image_and_objects(image, measurements, module, objects,
                                 workspace):
    """Test operation on an image masked by objects"""
    numpy.random.seed(0)

    pixels = numpy.random.uniform(size=(10, 10)).astype(numpy.float32) * 0.99

    pixels[1:3, 1:3] = 1

    image.pixel_data = pixels

    labels = numpy.zeros((10, 10), int)

    labels[1:9, 1:5] = 1

    labels[1:9, 5:9] = 2

    objects.segmented = labels

    module.images[0].wants_objects.value = True

    module.run(workspace)

    assert (measurements.get_current_measurement(
        cellprofiler.measurement.IMAGE,
        "Intensity_TotalArea_image_objects") == 64)

    assert measurements.get_current_measurement(
        cellprofiler.measurement.IMAGE,
        "Intensity_TotalIntensity_image_objects") == numpy.sum(pixels[1:9,
                                                                      1:9])

    assert (measurements.get_current_measurement(
        cellprofiler.measurement.IMAGE,
        "Intensity_MeanIntensity_image_objects") == numpy.sum(pixels[1:9, 1:9])
            / 64.0)

    numpy.testing.assert_almost_equal(
        measurements.get_current_measurement(
            cellprofiler.measurement.IMAGE,
            "Intensity_PercentMaximal_image_objects"),
        400.0 / 64.0,
    )

    assert len(measurements.get_object_names()) == 1

    assert measurements.get_object_names()[0] == cellprofiler.measurement.IMAGE

    columns = module.get_measurement_columns(workspace.pipeline)

    features = measurements.get_feature_names(cellprofiler.measurement.IMAGE)

    assert len(columns) == len(features)

    for column in columns:
        assert column[1] in features
def test_03_01_get_measurement_columns(module):
    image_names = ['image%d' % i for i in range(3)]

    object_names = ['object%d' % i for i in range(3)]

    first = True

    expected_suffixes = []

    for image_name in image_names:
        if first:
            first = False
        else:
            module.add_image_measurement()

        im = module.images[-1]

        im.image_name.value = image_name

        im.wants_objects.value = False

        expected_suffixes.append(image_name)

        for object_name in object_names:
            module.add_image_measurement()

            im = module.images[-1]

            im.image_name.value = image_name

            im.wants_objects.value = True

            im.object_name.value = object_name

            expected_suffixes.append("%s_%s" % (image_name, object_name))

    columns = module.get_measurement_columns(None)

    assert all([column[0] == cellprofiler.measurement.IMAGE for column in columns])

    for expected_suffix in expected_suffixes:
        for feature, coltype in (
                (cellprofiler.modules.measureimageintensity.F_TOTAL_INTENSITY, cellprofiler.measurement.COLTYPE_FLOAT),
                (cellprofiler.modules.measureimageintensity.F_MEAN_INTENSITY, cellprofiler.measurement.COLTYPE_FLOAT),
                (cellprofiler.modules.measureimageintensity.F_MIN_INTENSITY, cellprofiler.measurement.COLTYPE_FLOAT),
                (cellprofiler.modules.measureimageintensity.F_MAX_INTENSITY, cellprofiler.measurement.COLTYPE_FLOAT),
                (cellprofiler.modules.measureimageintensity.F_TOTAL_AREA, cellprofiler.measurement.COLTYPE_INTEGER),
                (cellprofiler.modules.measureimageintensity.F_PERCENT_MAXIMAL, cellprofiler.measurement.COLTYPE_FLOAT),
                (cellprofiler.modules.measureimageintensity.F_MAD_INTENSITY, cellprofiler.measurement.COLTYPE_FLOAT),
                (cellprofiler.modules.measureimageintensity.F_LOWER_QUARTILE, cellprofiler.measurement.COLTYPE_FLOAT),
                (cellprofiler.modules.measureimageintensity.F_UPPER_QUARTILE, cellprofiler.measurement.COLTYPE_FLOAT)):
            # feature names are now formatting strings
            feature_name = feature % expected_suffix

            assert any([(column[1] == feature_name and column[2] == coltype) for column in columns])
def test_02_get_zernike_columns():
    module = (cellprofiler.modules.measureobjectintensitydistribution.
              MeasureObjectIntensityDistribution())
    for wants_zernikes, ftrs in (
        (
            cellprofiler.modules.measureobjectintensitydistribution.
            Z_MAGNITUDES,
            (cellprofiler.modules.measureobjectintensitydistribution.
             FF_ZERNIKE_MAGNITUDE, ),
        ),
        (
            cellprofiler.modules.measureobjectintensitydistribution.
            Z_MAGNITUDES_AND_PHASE,
            (
                cellprofiler.modules.measureobjectintensitydistribution.
                FF_ZERNIKE_MAGNITUDE,
                cellprofiler.modules.measureobjectintensitydistribution.
                FF_ZERNIKE_PHASE,
            ),
        ),
    ):
        module.wants_zernikes.value = wants_zernikes
        module.zernike_degree.value = 2
        for i, image_name in ((0, "DNA"), (1, "Cytoplasm"), (2, "Actin")):
            if i:
                module.add_image()
            module.images[i].image_name.value = image_name
        for i, object_name, center_name in (
            (0, "Nucleii", None),
            (1, "Cells", "Nucleii"),
            (2, "Cytoplasm", "Nucleii"),
        ):
            if i:
                module.add_object()
            module.objects[i].object_name.value = object_name
        columns = module.get_measurement_columns(None)
        for image_name in "DNA", "Cytoplasm", "Actin":
            for object_name in "Nucleii", "Cells", "Cytoplasm":
                for n, m in ((0, 0), (1, 1), (2, 0), (2, 2)):
                    for ftr in ftrs:
                        name = "_".join((
                            cellprofiler.modules.
                            measureobjectintensitydistribution.M_CATEGORY,
                            ftr,
                            image_name,
                            str(n),
                            str(m),
                        ))
                        col = (
                            object_name,
                            name,
                            cellprofiler.measurement.COLTYPE_FLOAT,
                        )
                        assert col in columns
def test_01_get_measurement_columns():
    module = (cellprofiler.modules.measureobjectintensitydistribution.
              MeasureObjectIntensityDistribution())
    for i, image_name in ((0, "DNA"), (1, "Cytoplasm"), (2, "Actin")):
        if i:
            module.add_image()
        module.images[i].image_name.value = image_name
    for i, object_name, center_name in (
        (0, "Nucleii", None),
        (1, "Cells", "Nucleii"),
        (2, "Cytoplasm", "Nucleii"),
    ):
        if i:
            module.add_object()
        module.objects[i].object_name.value = object_name
        if center_name is None:
            module.objects[i].center_choice.value = (
                cellprofiler.modules.measureobjectintensitydistribution.C_SELF)
        else:
            module.objects[i].center_choice.value = (
                cellprofiler.modules.measureobjectintensitydistribution.
                C_CENTERS_OF_OTHER)
            module.objects[i].center_object_name.value = center_name
    for i, bin_count in enumerate((4, 5, 6)):
        if i:
            module.add_bin_count()
        module.bin_counts[i].bin_count.value = bin_count
    module.bin_counts[2].wants_scaled.value = False

    columns = module.get_measurement_columns(None)
    column_dictionary = {}
    for object_name, feature, coltype in columns:
        key = (object_name, feature)
        assert not (key in column_dictionary)
        assert coltype == cellprofiler.measurement.COLTYPE_FLOAT
        column_dictionary[key] = (object_name, feature, coltype)

    for object_name in [x.object_name.value for x in module.objects]:
        for image_name in [x.image_name.value for x in module.images]:
            for bin_count, wants_scaled in [(x.bin_count.value,
                                             x.wants_scaled.value)
                                            for x in module.bin_counts]:
                for bin in range(1, bin_count + (1 if wants_scaled else 2)):
                    for feature_fn in (
                            feature_frac_at_d,
                            feature_mean_frac,
                            feature_radial_cv,
                    ):
                        measurement = feature_fn(bin, bin_count, image_name)
                        key = (object_name, measurement)
                        assert key in column_dictionary
                        del column_dictionary[key]
    assert len(column_dictionary) == 0
Beispiel #13
0
    def test_07_04_objects_measurement_columns(self):
        csv_text = """%s_%s,%s_%s
Channel1-01-A-01.tif,/imaging/analysis/trunk/ExampleImages/ExampleSBSImages
""" % (
            cellprofiler.measurement.C_OBJECTS_FILE_NAME,
            OBJECTS_NAME,
            cellprofiler.measurement.C_OBJECTS_PATH_NAME,
            OBJECTS_NAME,
        )
        pipeline, module, filename = self.make_pipeline(csv_text)
        columns = module.get_measurement_columns(pipeline)
        expected_columns = (
            (
                cellprofiler.measurement.IMAGE,
                cellprofiler.measurement.C_OBJECTS_URL + "_" + OBJECTS_NAME,
            ),
            (
                cellprofiler.measurement.IMAGE,
                cellprofiler.measurement.C_OBJECTS_FILE_NAME + "_" + OBJECTS_NAME,
            ),
            (
                cellprofiler.measurement.IMAGE,
                cellprofiler.measurement.C_OBJECTS_PATH_NAME + "_" + OBJECTS_NAME,
            ),
            (
                cellprofiler.measurement.IMAGE,
                cellprofiler.measurement.C_COUNT + "_" + OBJECTS_NAME,
            ),
            (OBJECTS_NAME, cellprofiler.measurement.M_LOCATION_CENTER_X),
            (OBJECTS_NAME, cellprofiler.measurement.M_LOCATION_CENTER_Y),
            (OBJECTS_NAME, cellprofiler.measurement.M_NUMBER_OBJECT_NUMBER),
        )
        for column in columns:
            self.assertTrue(
                any(
                    [
                        True
                        for object_name, feature in expected_columns
                        if object_name == column[0] and feature == column[1]
                    ]
                )
            )
        for object_name, feature in expected_columns:
            self.assertTrue(
                any(
                    [
                        True
                        for column in columns
                        if object_name == column[0] and feature == column[1]
                    ]
                )
            )
    def test_04_03_means_of_distances(self):
        #
        # Regression test of issue #1409
        #
        # Make sure means of minimum and mean distances of children
        # are recorded properly
        #
        i, j = numpy.mgrid[0:14, 0:30]
        #
        # Make the objects different sizes to exercise more code
        #
        parent_labels = (i >= 7) * 1 + (j >= 15) * 2 + 1
        child_labels = numpy.zeros(i.shape)
        numpy.random.seed(0)
        # Take 12 random points and label them
        child_centers = numpy.random.permutation(numpy.prod(i.shape))[:12]
        child_centers = numpy.vstack((i.flatten()[child_centers],
                                      j.flatten()[child_centers]))
        child_labels[child_centers[0], child_centers[1]] = numpy.arange(1, 13)
        parent_centers = numpy.array([[3, 7], [10, 7], [3, 22], [10, 22]], float)
        parent_indexes = parent_labels[child_centers[0],
                                       child_centers[1]] - 1
        expected = numpy.sqrt(numpy.sum((parent_centers[parent_indexes, :] -
                                         child_centers.transpose()) ** 2, 1))

        workspace, module = self.make_workspace(parent_labels, child_labels)
        self.assertTrue(isinstance(module, cellprofiler.modules.relateobjects.Relate))
        module.find_parent_child_distances.value = cellprofiler.modules.relateobjects.D_CENTROID
        module.wants_per_parent_means.value = True
        mnames = module.get_measurements(workspace.pipeline,
                                         PARENT_OBJECTS,
                                         "_".join((cellprofiler.modules.relateobjects.C_MEAN, CHILD_OBJECTS)))
        self.assertTrue(cellprofiler.modules.relateobjects.FF_CENTROID % PARENT_OBJECTS in mnames)
        feat_mean = cellprofiler.modules.relateobjects.FF_MEAN % (CHILD_OBJECTS, cellprofiler.modules.relateobjects.FF_CENTROID % PARENT_OBJECTS)
        mcolumns = module.get_measurement_columns(workspace.pipeline)
        self.assertTrue(any([c[0] == PARENT_OBJECTS and c[1] == feat_mean
                             for c in mcolumns]))
        m = workspace.measurements
        m[CHILD_OBJECTS, cellprofiler.measurement.M_LOCATION_CENTER_X, 1] = child_centers[1]
        m[CHILD_OBJECTS, cellprofiler.measurement.M_LOCATION_CENTER_Y, 1] = child_centers[0]
        module.run(workspace)

        v = m[PARENT_OBJECTS, feat_mean, 1]

        plabel = m[CHILD_OBJECTS, "_".join((cellprofiler.measurement.C_PARENT, PARENT_OBJECTS)), 1]

        self.assertEqual(len(v), 4)
        for idx in range(4):
            if numpy.any(plabel == idx + 1):
                self.assertAlmostEqual(
                        v[idx], numpy.mean(expected[plabel == idx + 1]), 4)
    def test_04_03_means_of_distances(self):
        #
        # Regression test of issue #1409
        #
        # Make sure means of minimum and mean distances of children
        # are recorded properly
        #
        i, j = numpy.mgrid[0:14, 0:30]
        #
        # Make the objects different sizes to exercise more code
        #
        parent_labels = (i >= 7) * 1 + (j >= 15) * 2 + 1
        child_labels = numpy.zeros(i.shape)
        numpy.random.seed(0)
        # Take 12 random points and label them
        child_centers = numpy.random.permutation(numpy.prod(i.shape))[:12]
        child_centers = numpy.vstack((i.flatten()[child_centers],
                                      j.flatten()[child_centers]))
        child_labels[child_centers[0], child_centers[1]] = numpy.arange(1, 13)
        parent_centers = numpy.array([[3, 7], [10, 7], [3, 22], [10, 22]], float)
        parent_indexes = parent_labels[child_centers[0],
                                       child_centers[1]] - 1
        expected = numpy.sqrt(numpy.sum((parent_centers[parent_indexes, :] -
                                         child_centers.transpose()) ** 2, 1))

        workspace, module = self.make_workspace(parent_labels, child_labels)
        self.assertTrue(isinstance(module, cellprofiler.modules.relateobjects.Relate))
        module.find_parent_child_distances.value = cellprofiler.modules.relateobjects.D_CENTROID
        module.wants_per_parent_means.value = True
        mnames = module.get_measurements(workspace.pipeline,
                                         PARENT_OBJECTS,
                                         "_".join((cellprofiler.modules.relateobjects.C_MEAN, CHILD_OBJECTS)))
        self.assertTrue(cellprofiler.modules.relateobjects.FF_CENTROID % PARENT_OBJECTS in mnames)
        feat_mean = cellprofiler.modules.relateobjects.FF_MEAN % (CHILD_OBJECTS, cellprofiler.modules.relateobjects.FF_CENTROID % PARENT_OBJECTS)
        mcolumns = module.get_measurement_columns(workspace.pipeline)
        self.assertTrue(any([c[0] == PARENT_OBJECTS and c[1] == feat_mean
                             for c in mcolumns]))
        m = workspace.measurements
        m[CHILD_OBJECTS, cellprofiler.measurement.M_LOCATION_CENTER_X, 1] = child_centers[1]
        m[CHILD_OBJECTS, cellprofiler.measurement.M_LOCATION_CENTER_Y, 1] = child_centers[0]
        module.run(workspace)

        v = m[PARENT_OBJECTS, feat_mean, 1]

        plabel = m[CHILD_OBJECTS, "_".join((cellprofiler.measurement.C_PARENT, PARENT_OBJECTS)), 1]

        self.assertEqual(len(v), 4)
        for idx in range(4):
            if numpy.any(plabel == idx + 1):
                self.assertAlmostEqual(
                        v[idx], numpy.mean(expected[plabel == idx + 1]), 4)
 def features_and_columns_match(self, workspace):
     module = workspace.module
     pipeline = workspace.pipeline
     measurements = workspace.measurements
     object_names = [x for x in measurements.get_object_names()
                     if x != cellprofiler.measurement.IMAGE]
     features = [[feature
                  for feature in measurements.get_feature_names(object_name)
                  if feature not in (MEASUREMENT, IGNORED_MEASUREMENT)]
                 for object_name in object_names]
     columns = module.get_measurement_columns(pipeline)
     self.assertEqual(sum([len(f) for f in features]), len(columns))
     for column in columns:
         index = object_names.index(column[0])
         self.assertTrue(column[1] in features[index])
 def features_and_columns_match(self, workspace):
     module = workspace.module
     pipeline = workspace.pipeline
     measurements = workspace.measurements
     object_names = [x for x in measurements.get_object_names()
                     if x != cellprofiler.measurement.IMAGE]
     features = [[feature
                  for feature in measurements.get_feature_names(object_name)
                  if feature not in (MEASUREMENT, IGNORED_MEASUREMENT)]
                 for object_name in object_names]
     columns = module.get_measurement_columns(pipeline)
     self.assertEqual(sum([len(f) for f in features]), len(columns))
     for column in columns:
         index = object_names.index(column[0])
         self.assertTrue(column[1] in features[index])
Beispiel #18
0
    def find_measurements(self, modules, pipeline):
        """Scan the modules for features

        modules - modules to scan for features
        pipeline - the pipeline they came from

        returns a two tuple of
            Java types, e.g., "java.lang.Integer"
            A dictionary whose key is the object name and whose
            value is a list of two-tuples of feature name and index into
            the java types array.
        """
        jtypes = ["java.lang.Integer"]
        features = {}
        for module in modules:
            assert isinstance(module, cellprofiler.module.Module)
            for column in module.get_measurement_columns(pipeline):
                objects, name, dbtype = column[:3]
                qualifiers = {} if len(column) < 4 else column[3]
                if (objects == cellprofiler.measurement.EXPERIMENT
                        and qualifiers.get(
                            cellprofiler.measurement.MCA_AVAILABLE_POST_RUN,
                            False) == True):
                    continue
                if dbtype == cellprofiler.measurement.COLTYPE_FLOAT:
                    jtype = "java.lang.Double"
                elif dbtype == cellprofiler.measurement.COLTYPE_INTEGER:
                    jtype = "java.lang.Integer"
                elif dbtype.startswith(
                        cellprofiler.measurement.COLTYPE_VARCHAR):
                    jtype = "java.lang.String"
                else:
                    continue
                if jtype in jtypes:
                    type_idx = jtypes.index(jtype)
                else:
                    type_idx = len(jtypes)
                    jtypes.append(jtype)
                if objects not in features:
                    ofeatures = features[objects] = {}
                else:
                    ofeatures = features[objects]
                if name not in ofeatures:
                    ofeatures[name] = type_idx
        for key in features:
            features[key][cellprofiler.measurement.IMAGE_NUMBER] = 0
        features_out = dict([(k, v.items()) for k, v in features.items()])
        return jtypes, features_out
    def test_04_01_get_measurement_columns(self):
        workspace, module = self.make_obj_workspace(
                numpy.zeros((0, 3), int),
                numpy.zeros((0, 3), int),
                dict(image=numpy.zeros((20, 10), bool)),
                dict(image=numpy.zeros((20, 10), bool)))

        columns = module.get_measurement_columns(workspace.pipeline)
        # All columns should be unique
        self.assertEqual(len(columns), len(set([x[1] for x in columns])))
        # All columns should be floats and done on images
        self.assertTrue(all([x[0] == cellprofiler.measurement.IMAGE]))
        self.assertTrue(all([x[2] == cellprofiler.measurement.COLTYPE_FLOAT]))
        for feature in cellprofiler.modules.measureobjectoverlap.FTR_ALL:
            field = '_'.join((cellprofiler.modules.measureobjectoverlap.C_IMAGE_OVERLAP, feature, GROUND_TRUTH_OBJ, ID_OBJ))
            self.assertTrue(field in [x[1] for x in columns])
Beispiel #20
0
    def test_get_measurement_columns(self):
        module = cellprofiler.module.ObjectProcessing()

        module.x_name.value = "Objects"

        actual = module.get_measurement_columns(None)

        expected = [
            (
                "ObjectProcessing",
                cellprofiler.measurement.M_LOCATION_CENTER_X,
                cellprofiler.measurement.COLTYPE_FLOAT
            ),
            (
                "ObjectProcessing",
                cellprofiler.measurement.M_LOCATION_CENTER_Y,
                cellprofiler.measurement.COLTYPE_FLOAT
            ),
            (
                "ObjectProcessing",
                cellprofiler.measurement.M_LOCATION_CENTER_Z,
                cellprofiler.measurement.COLTYPE_FLOAT
            ),
            (
                "ObjectProcessing",
                cellprofiler.measurement.M_NUMBER_OBJECT_NUMBER,
                cellprofiler.measurement.COLTYPE_INTEGER
            ),
            (
                cellprofiler.measurement.IMAGE,
                cellprofiler.measurement.FF_COUNT % "ObjectProcessing",
                cellprofiler.measurement.COLTYPE_INTEGER
            ),
            (
                "Objects",
                cellprofiler.measurement.FF_CHILDREN_COUNT % "ObjectProcessing",
                cellprofiler.measurement.COLTYPE_INTEGER
            ),
            (
                "ObjectProcessing",
                cellprofiler.measurement.FF_PARENT % "Objects",
                cellprofiler.measurement.COLTYPE_INTEGER
            )
        ]

        assert actual == expected
    def test_04_01_get_measurement_columns(self):
        workspace, module = self.make_obj_workspace(
            numpy.zeros((0, 3), int), numpy.zeros((0, 3), int),
            dict(image=numpy.zeros((20, 10), bool)),
            dict(image=numpy.zeros((20, 10), bool)))

        columns = module.get_measurement_columns(workspace.pipeline)
        # All columns should be unique
        self.assertEqual(len(columns), len(set([x[1] for x in columns])))
        # All columns should be floats and done on images
        self.assertTrue(all([x[0] == cellprofiler.measurement.IMAGE]))
        self.assertTrue(all([x[2] == cellprofiler.measurement.COLTYPE_FLOAT]))
        for feature in cellprofiler.modules.measureobjectoverlap.FTR_ALL:
            field = '_'.join(
                (cellprofiler.modules.measureobjectoverlap.C_IMAGE_OVERLAP,
                 feature, GROUND_TRUTH_OBJ, ID_OBJ))
            self.assertTrue(field in [x[1] for x in columns])
    def test_04_01_get_measurement_columns(self):
        workspace, module = self.make_workspace(
                dict(image=numpy.zeros((20, 10), bool)),
                dict(image=numpy.zeros((20, 10), bool)))

        assert isinstance(module, cellprofiler.modules.measureimageoverlap.MeasureImageOverlap)
        name = TEST_IMAGE_NAME

        columns = module.get_measurement_columns(workspace.pipeline)
        # All columns should be unique
        self.assertEqual(len(columns), len(set([x[1] for x in columns])))
        # All columns should be floats and done on images
        self.assertTrue(all([x[0] == cellprofiler.measurement.IMAGE]))
        self.assertTrue(all([x[2] == cellprofiler.measurement.COLTYPE_FLOAT]))
        for feature in cellprofiler.modules.measureimageoverlap.FTR_ALL:
            field = '_'.join((cellprofiler.modules.measureimageoverlap.C_IMAGE_OVERLAP, feature, name))
            self.assertTrue(field in [x[1] for x in columns])
    def test_07_02_file_name_measurement_columns(self):
        '''Regression test bug IMG-315

        A csv header of Image_FileName_Foo or Image_PathName_Foo should
        yield column names of FileName_Foo and PathName_Foo
        '''
        colnames = ('Image_FileName_Foo', 'Image_PathName_Foo')
        csv_text = '''"%s","%s"
"Channel1-01.tif","/imaging/analysis/2500_01_01_Jones"
"Channel1-02.tif","/imaging/analysis/2500_01_01_Jones"
''' % colnames
        pipeline, module, filename = self.make_pipeline(csv_text)
        try:
            columns = module.get_measurement_columns(pipeline)
            self.assertTrue('FileName_Foo' in [c[1] for c in columns])
            self.assertTrue('PathName_Foo' in [c[1] for c in columns])
        finally:
            os.remove(filename)
    def test_07_02_file_name_measurement_columns(self):
        '''Regression test bug IMG-315

        A csv header of Image_FileName_Foo or Image_PathName_Foo should
        yield column names of FileName_Foo and PathName_Foo
        '''
        colnames = ('Image_FileName_Foo', 'Image_PathName_Foo')
        csv_text = '''"%s","%s"
"Channel1-01.tif","/imaging/analysis/2500_01_01_Jones"
"Channel1-02.tif","/imaging/analysis/2500_01_01_Jones"
''' % colnames
        pipeline, module, filename = self.make_pipeline(csv_text)
        try:
            columns = module.get_measurement_columns(pipeline)
            self.assertTrue('FileName_Foo' in [c[1] for c in columns])
            self.assertTrue('PathName_Foo' in [c[1] for c in columns])
        finally:
            os.remove(filename)
Beispiel #25
0
def test_file_name_measurement_columns():
    """Regression test bug IMG-315

    A csv header of Image_FileName_Foo or Image_PathName_Foo should
    yield column names of FileName_Foo and PathName_Foo
    """
    colnames = ("Image_FileName_Foo", "Image_PathName_Foo")
    csv_text = (""""%s","%s"
                "Channel1-01.tif","/imaging/analysis/2500_01_01_Jones"
                "Channel1-02.tif","/imaging/analysis/2500_01_01_Jones"
                """ % colnames)
    pipeline, module, filename = make_pipeline(csv_text)
    try:
        columns = module.get_measurement_columns(pipeline)
        assert "FileName_Foo" in [c[1] for c in columns]
        assert "PathName_Foo" in [c[1] for c in columns]
    finally:
        os.remove(filename)
def test_01_03_image_and_objects(image, measurements, module, objects, workspace):
    '''Test operation on an image masked by objects'''
    numpy.random.seed(0)

    pixels = numpy.random.uniform(size=(10, 10)).astype(numpy.float32) * .99

    pixels[1:3, 1:3] = 1

    image.pixel_data = pixels

    labels = numpy.zeros((10, 10), int)

    labels[1:9, 1:5] = 1

    labels[1:9, 5:9] = 2

    objects.segmented = labels

    module.images[0].wants_objects.value = True

    module.run(workspace)

    assert measurements.get_current_measurement(cellprofiler.measurement.IMAGE, "Intensity_TotalArea_image_objects") == 64

    assert measurements.get_current_measurement(cellprofiler.measurement.IMAGE, "Intensity_TotalIntensity_image_objects") == numpy.sum(pixels[1:9, 1:9])

    assert measurements.get_current_measurement(cellprofiler.measurement.IMAGE, "Intensity_MeanIntensity_image_objects") == numpy.sum(pixels[1:9, 1:9]) / 64.0

    numpy.testing.assert_almost_equal(measurements.get_current_measurement(cellprofiler.measurement.IMAGE, "Intensity_PercentMaximal_image_objects"), 400. / 64.)

    assert len(measurements.get_object_names()) == 1

    assert measurements.get_object_names()[0] == cellprofiler.measurement.IMAGE

    columns = module.get_measurement_columns(workspace.pipeline)

    features = measurements.get_feature_names(cellprofiler.measurement.IMAGE)

    assert len(columns) == len(features)

    for column in columns:
        assert column[1] in features
Beispiel #27
0
    def test_04_01_get_measurement_columns(self):
        workspace, module = self.make_workspace(
                dict(image=numpy.zeros((20, 10), bool)),
                dict(image=numpy.zeros((20, 10), bool)))

        assert isinstance(module, cellprofiler.modules.measureimageoverlap.MeasureImageOverlap)
        module.object_name_GT.value = GROUND_TRUTH_OBJ
        module.object_name_ID.value = ID_OBJ
        for obj_or_img, name in ((O_IMG, TEST_IMAGE_NAME),
                                 (O_OBJ, "_".join((GROUND_TRUTH_OBJ, ID_OBJ)))):
            module.obj_or_img.value = obj_or_img
            columns = module.get_measurement_columns(workspace.pipeline)
            # All columns should be unique
            self.assertEqual(len(columns), len(set([x[1] for x in columns])))
            # All columns should be floats and done on images
            self.assertTrue(all([x[0] == cellprofiler.measurement.IMAGE]))
            self.assertTrue(all([x[2] == cellprofiler.measurement.COLTYPE_FLOAT]))
            for feature in cellprofiler.modules.measureimageoverlap.FTR_ALL:
                field = '_'.join((cellprofiler.modules.measureimageoverlap.C_IMAGE_OVERLAP, feature, name))
                self.assertTrue(field in [x[1] for x in columns])
def test_00_00_zeros(image, measurements, module, workspace):
    '''Test operation on a completely-masked image'''
    image.pixel_data = numpy.zeros((10, 10))

    image.mask = numpy.zeros((10, 10), bool)

    module.run(workspace)

    assert measurements.get_current_measurement(cellprofiler.measurement.IMAGE, "Intensity_TotalArea_image") == 0

    assert len(measurements.get_object_names()) == 1

    assert measurements.get_object_names()[0] == cellprofiler.measurement.IMAGE

    columns = module.get_measurement_columns(workspace.pipeline)

    features = measurements.get_feature_names(cellprofiler.measurement.IMAGE)

    assert len(columns) == len(features)

    for column in columns:
        assert column[1] in features
Beispiel #29
0
    def test_get_measurement_columns(self):
        module = cellprofiler.module.ImageSegmentation()

        module.x_name.value = "Image"

        actual = module.get_measurement_columns(None)

        expected = [
            ("ImageSegmentation", cellprofiler.measurement.M_LOCATION_CENTER_X,
             cellprofiler.measurement.COLTYPE_FLOAT),
            ("ImageSegmentation", cellprofiler.measurement.M_LOCATION_CENTER_Y,
             cellprofiler.measurement.COLTYPE_FLOAT),
            ("ImageSegmentation", cellprofiler.measurement.M_LOCATION_CENTER_Z,
             cellprofiler.measurement.COLTYPE_FLOAT),
            ("ImageSegmentation",
             cellprofiler.measurement.M_NUMBER_OBJECT_NUMBER,
             cellprofiler.measurement.COLTYPE_INTEGER),
            (cellprofiler.measurement.IMAGE,
             cellprofiler.measurement.FF_COUNT % "ImageSegmentation",
             cellprofiler.measurement.COLTYPE_INTEGER)
        ]

        assert actual == expected
def test_00_00_zeros(image, measurements, module, workspace):
    '''Test operation on a completely-masked image'''
    image.pixel_data = numpy.zeros((10, 10))

    image.mask = numpy.zeros((10, 10), bool)

    module.run(workspace)

    assert measurements.get_current_measurement(
        cellprofiler.measurement.IMAGE, "Intensity_TotalArea_image") == 0

    assert len(measurements.get_object_names()) == 1

    assert measurements.get_object_names()[0] == cellprofiler.measurement.IMAGE

    columns = module.get_measurement_columns(workspace.pipeline)

    features = measurements.get_feature_names(cellprofiler.measurement.IMAGE)

    assert len(columns) == len(features)

    for column in columns:
        assert column[1] in features
def test_get_measurement_columns():
    workspace, module = make_obj_workspace(
        numpy.zeros((0, 3), int),
        numpy.zeros((0, 3), int),
        dict(image=numpy.zeros((20, 10), bool)),
        dict(image=numpy.zeros((20, 10), bool)),
    )

    columns = module.get_measurement_columns(workspace.pipeline)
    # All columns should be unique
    assert len(columns) == len(set([x[1] for x in columns]))
    # All columns should be floats and done on images
    x = columns[-1]
    assert all([x[0] == cellprofiler.measurement.IMAGE])
    assert all([x[2] == cellprofiler.measurement.COLTYPE_FLOAT])
    for feature in cellprofiler.modules.measureobjectoverlap.FTR_ALL:
        field = "_".join((
            cellprofiler.modules.measureobjectoverlap.C_IMAGE_OVERLAP,
            feature,
            GROUND_TRUTH_OBJ,
            ID_OBJ,
        ))
        assert field in [x[1] for x in columns]
    def test_07_04_objects_measurement_columns(self):
        csv_text = """%s_%s,%s_%s
Channel1-01-A-01.tif,/imaging/analysis/trunk/ExampleImages/ExampleSBSImages
""" % (cellprofiler.measurement.C_OBJECTS_FILE_NAME, OBJECTS_NAME,
       cellprofiler.measurement.C_OBJECTS_PATH_NAME, OBJECTS_NAME)
        pipeline, module, filename = self.make_pipeline(csv_text)
        columns = module.get_measurement_columns(pipeline)
        expected_columns = (
            (cellprofiler.measurement.IMAGE, cellprofiler.measurement.C_OBJECTS_URL + "_" + OBJECTS_NAME),
            (cellprofiler.measurement.IMAGE, cellprofiler.measurement.C_OBJECTS_FILE_NAME + "_" + OBJECTS_NAME),
            (cellprofiler.measurement.IMAGE, cellprofiler.measurement.C_OBJECTS_PATH_NAME + "_" + OBJECTS_NAME),
            (cellprofiler.measurement.IMAGE, cellprofiler.measurement.C_COUNT + "_" + OBJECTS_NAME),
            (OBJECTS_NAME, cellprofiler.measurement.M_LOCATION_CENTER_X),
            (OBJECTS_NAME, cellprofiler.measurement.M_LOCATION_CENTER_Y),
            (OBJECTS_NAME, cellprofiler.measurement.M_NUMBER_OBJECT_NUMBER))
        for column in columns:
            self.assertTrue(any([
                                    True for object_name, feature in expected_columns
                                    if object_name == column[0] and feature == column[1]]))
        for object_name, feature in expected_columns:
            self.assertTrue(any([
                                    True for column in columns
                                    if object_name == column[0] and feature == column[1]]))
    def test_07_01_get_measurement_columns(self):
        '''Test the get_measurement_columns method'''
        colnames = ('Integer_Measurement', 'Float_Measurement', 'String_Measurement')
        coltypes = [cellprofiler.measurement.COLTYPE_INTEGER, cellprofiler.measurement.COLTYPE_FLOAT,
                    cellprofiler.measurement.COLTYPE_VARCHAR_FORMAT % 9]
        csv_text = '''"%s","%s","%s"
1,1,1
2,1.5,"Hi"
3,1,"Hello"
4,1.7,"Hola"
5,1.2,"Bonjour"
6,1.5,"Gutentag"
7,1.1,"Hej"
8,2.3,"Bevakasha"
''' % colnames
        pipeline, module, filename = self.make_pipeline(csv_text)
        columns = module.get_measurement_columns(pipeline)
        for colname, coltype in zip(colnames, coltypes):
            self.assertTrue(any([(column[0] == cellprofiler.measurement.IMAGE and
                                  column[1] == colname and
                                  column[2] == coltype) for column in columns]),
                            'Failed to find %s' % colname)
        os.remove(filename)
    def test_get_measurement_columns(self):
        module = cellprofiler.module.ImageSegmentation()

        module.x_name.value = "Image"

        actual = module.get_measurement_columns(None)

        expected = [
            (
                "ImageSegmentation",
                cellprofiler.measurement.M_LOCATION_CENTER_X,
                cellprofiler.measurement.COLTYPE_FLOAT
            ),
            (
                "ImageSegmentation",
                cellprofiler.measurement.M_LOCATION_CENTER_Y,
                cellprofiler.measurement.COLTYPE_FLOAT
            ),
            (
                "ImageSegmentation",
                cellprofiler.measurement.M_LOCATION_CENTER_Z,
                cellprofiler.measurement.COLTYPE_FLOAT
            ),
            (
                "ImageSegmentation",
                cellprofiler.measurement.M_NUMBER_OBJECT_NUMBER,
                cellprofiler.measurement.COLTYPE_INTEGER
            ),
            (
                cellprofiler.measurement.IMAGE,
                cellprofiler.measurement.FF_COUNT % "ImageSegmentation",
                cellprofiler.measurement.COLTYPE_INTEGER
            )
        ]

        assert actual == expected
    def test_03_03_metadata_row_and_column_and_well(self):
        csv_text = '''"Metadata_Row","Metadata_Column","Metadata_Well"
"C","03","B14"
'''
        pipeline, module, filename = self.make_pipeline(csv_text)
        columns = module.get_measurement_columns(pipeline)
        self.assertTrue(any([c[0] == cellprofiler.measurement.IMAGE and
                             c[1] == "Metadata_Row" and
                             c[2] == "varchar(1)" for c in columns]))
        self.assertTrue(any([c[0] == cellprofiler.measurement.IMAGE and
                             c[1] == "Metadata_Column" and
                             c[2] == "varchar(2)" for c in columns]))
        self.assertTrue(any([c[0] == cellprofiler.measurement.IMAGE and
                             c[1] == "Metadata_Well" and
                             c[2] == "varchar(3)" for c in columns]))
        m = pipeline.run()
        features = module.get_measurements(pipeline, cellprofiler.measurement.IMAGE,
                                           cellprofiler.measurement.C_METADATA)
        for feature, expected in (("Row", "C"),
                                  ("Column", "03"),
                                  ("Well", "B14")):
            self.assertTrue(feature in features)
            value = m.get_current_image_measurement('_'.join((cellprofiler.measurement.C_METADATA, feature)))
            self.assertEqual(value, expected)
def test_03_01_get_measurement_columns(module):
    image_names = ['image%d' % i for i in range(3)]

    object_names = ['object%d' % i for i in range(3)]

    first = True

    expected_suffixes = []

    for image_name in image_names:
        if first:
            first = False
        else:
            module.add_image_measurement()

        im = module.images[-1]

        im.image_name.value = image_name

        im.wants_objects.value = False

        expected_suffixes.append(image_name)

        for object_name in object_names:
            module.add_image_measurement()

            im = module.images[-1]

            im.image_name.value = image_name

            im.wants_objects.value = True

            im.object_name.value = object_name

            expected_suffixes.append("%s_%s" % (image_name, object_name))

    columns = module.get_measurement_columns(None)

    assert all(
        [column[0] == cellprofiler.measurement.IMAGE for column in columns])

    for expected_suffix in expected_suffixes:
        for feature, coltype in (
            (cellprofiler.modules.measureimageintensity.F_TOTAL_INTENSITY,
             cellprofiler.measurement.COLTYPE_FLOAT),
            (cellprofiler.modules.measureimageintensity.F_MEAN_INTENSITY,
             cellprofiler.measurement.COLTYPE_FLOAT),
            (cellprofiler.modules.measureimageintensity.F_MIN_INTENSITY,
             cellprofiler.measurement.COLTYPE_FLOAT),
            (cellprofiler.modules.measureimageintensity.F_MAX_INTENSITY,
             cellprofiler.measurement.COLTYPE_FLOAT),
            (cellprofiler.modules.measureimageintensity.F_TOTAL_AREA,
             cellprofiler.measurement.COLTYPE_INTEGER),
            (cellprofiler.modules.measureimageintensity.F_PERCENT_MAXIMAL,
             cellprofiler.measurement.COLTYPE_FLOAT),
            (cellprofiler.modules.measureimageintensity.F_MAD_INTENSITY,
             cellprofiler.measurement.COLTYPE_FLOAT),
            (cellprofiler.modules.measureimageintensity.F_LOWER_QUARTILE,
             cellprofiler.measurement.COLTYPE_FLOAT),
            (cellprofiler.modules.measureimageintensity.F_UPPER_QUARTILE,
             cellprofiler.measurement.COLTYPE_FLOAT)):
            # feature names are now formatting strings
            feature_name = feature % expected_suffix

            assert any([(column[1] == feature_name and column[2] == coltype)
                        for column in columns])