Beispiel #1
0
 def test_02_00_no_measurements(self):
     m = cpmeas.Measurements()
     m.add_measurement(OBJECT_NAME, M_FEATURES[0], np.array([],float))
     rules = R.Rules()
     rules.rules += [R.Rules.Rule(OBJECT_NAME, M_FEATURES[0],">",0,
                                  np.array([[1.0,-1.0],[-1.0,1.0]]))]
     score = rules.score(m)
     self.assertEqual(score.shape[0], 0)
     self.assertEqual(score.shape[1], 2)
Beispiel #2
0
 def test_02_03_score_one_nan(self):
     m = cpmeas.Measurements()
     m.add_measurement(OBJECT_NAME, M_FEATURES[0], np.array([np.NaN], float))
     rules = R.Rules()
     rules.rules += [R.Rules.Rule(OBJECT_NAME, M_FEATURES[0],">",2.0,
                                  np.array([[1.0,-0.5],[-2.0,0.6]]))]
     score = rules.score(m)
     self.assertEqual(score.shape[0], 1)
     self.assertEqual(score.shape[1], 2)
     self.assertTrue(np.all(np.isnan(score)))
Beispiel #3
0
 def test_02_02_score_one_negative(self):
     m = cpmeas.Measurements()
     m.add_measurement(OBJECT_NAME, M_FEATURES[0], np.array([1.5], float))
     rules = R.Rules()
     rules.rules += [R.Rules.Rule(OBJECT_NAME, M_FEATURES[0],">",2.0,
                                  np.array([[1.0,-0.5],[-2.0,0.6]]))]
     score = rules.score(m)
     self.assertEqual(score.shape[0], 1)
     self.assertEqual(score.shape[1], 2)
     self.assertAlmostEqual(score[0,0],-2.0)
     self.assertAlmostEqual(score[0,1],0.6)
Beispiel #4
0
 def get_rules(self, measurement_group):
     '''Read the rules from a file'''
     rules_file = measurement_group.rules_file_name.value
     rules_directory = measurement_group.rules_directory.get_absolute_path()
     path = os.path.join(rules_directory, rules_file)
     if not os.path.isfile(path):
         raise cps.ValidationError("No such rules file: %s"%path, rules_file)
     else:
         rules = cprules.Rules()
         rules.parse(path)
         return rules
Beispiel #5
0
 def test_03_01_score_two_rules(self):
     m = cpmeas.Measurements()
     m.add_measurement(OBJECT_NAME, M_FEATURES[0], np.array([1.5], float))
     m.add_measurement(OBJECT_NAME, M_FEATURES[1], np.array([-1.5], float))
     rules = R.Rules()
     rules.rules += [R.Rules.Rule(OBJECT_NAME, M_FEATURES[0],">",0,
                                  np.array([[1.0,-0.5],[-2.0,0.6]])),
                     R.Rules.Rule(OBJECT_NAME, M_FEATURES[1],">",0,
                                  np.array([[1.5,-0.7],[-2.3,0.9]]))]
     score = rules.score(m)
     self.assertEqual(score.shape[0], 1)
     self.assertEqual(score.shape[1], 2)
     self.assertAlmostEqual(score[0,0],1.0-2.3)
     self.assertAlmostEqual(score[0,1],-0.5+0.9)
Beispiel #6
0
 def test_03_02_score_two_objects(self):
     m = cpmeas.Measurements()
     m.add_measurement(OBJECT_NAME, M_FEATURES[0], np.array([1.5, 2.5], float))
     rules = R.Rules()
     rules.rules += [
         R.Rules.Rule(
             OBJECT_NAME,
             M_FEATURES[0],
             "<",
             2.0,
             np.array([[1.0, -0.5], [-2.0, 0.6]]),
         )
     ]
     score = rules.score(m)
     self.assertEqual(score.shape[0], 2)
     self.assertEqual(score.shape[1], 2)
     self.assertAlmostEqual(score[0, 0], 1.0)
     self.assertAlmostEqual(score[0, 1], -0.5)
     self.assertAlmostEqual(score[1, 0], -2.0)
     self.assertAlmostEqual(score[1, 1], 0.6)
    def test_01_01_load_rules(self):
        data = """IF (Nuclei_Intensity_UpperQuartileIntensity_CorrDend > 0.12762499999999999, [0.79607587785712131, -0.79607587785712131], [-0.94024303819690347, 0.94024303819690347])
IF (Nuclei_Intensity_MinIntensity_CorrAxon > 0.026831299999999999, [0.68998040630066426, -0.68998040630066426], [-0.80302016375137986, 0.80302016375137986])
IF (Nuclei_Intensity_UpperQuartileIntensity_CorrDend > 0.19306000000000001, [0.71934712791500899, -0.71934712791500899], [-0.47379648809429048, 0.47379648809429048])
IF (Nuclei_Intensity_UpperQuartileIntensity_CorrDend > 0.100841, [0.24553066971563919, -0.24553066971563919], [-1.0, 1.0])
IF (Nuclei_Location_Center_Y > 299.32499999999999, [-0.61833689824912363, 0.61833689824912363], [0.33384091087462237, -0.33384091087462237])
IF (Nuclei_Intensity_MaxIntensity_CorrNuclei > 0.76509499999999997, [-0.95683305069726121, 0.95683305069726121], [0.22816438860290775, -0.22816438860290775])
IF (Nuclei_Neighbors_NumberOfNeighbors_5 > 2.0, [-0.92848043428127192, 0.92848043428127192], [0.20751332434602923, -0.20751332434602923])
IF (Nuclei_Intensity_MedianIntensity_CorrDend > 0.15327499999999999, [0.79784566567342285, -0.79784566567342285], [-0.35665314560825129, 0.35665314560825129])
IF (Nuclei_Neighbors_SecondClosestXVector_5 > -11.5113, [-0.21859862538067179, 0.21859862538067179], [0.71270785008847592, -0.71270785008847592])
IF (Nuclei_Intensity_StdIntensity_CorrDend > 0.035382299999999998, [0.28838229530755011, -0.28838229530755011], [-0.75312050069265968, 0.75312050069265968])
IF (Nuclei_Intensity_MaxIntensityEdge_CorrNuclei > 0.63182899999999997, [-0.93629855522957672, 0.93629855522957672], [0.1710257492070047, -0.1710257492070047])
IF (Nuclei_Intensity_StdIntensityEdge_CorrNuclei > 0.037909400000000003, [0.28514731668218346, -0.28514731668218346], [-0.60783543053602795, 0.60783543053602795])
IF (Nuclei_Intensity_MedianIntensity_CorrAxon > 0.042631500000000003, [0.20227787378316109, -0.20227787378316109], [-0.78282539096589077, 0.78282539096589077])
IF (Nuclei_Intensity_MinIntensity_CorrDend > 0.042065400000000003, [0.52616744135942872, -0.52616744135942872], [-0.32613209033812068, 0.32613209033812068])
IF (Nuclei_Neighbors_FirstClosestYVector_5 > 3.8226100000000001, [0.69128399165300047, -0.69128399165300047], [-0.34874605597401531, 0.34874605597401531])
IF (Nuclei_Intensity_MeanIntensity_CorrNuclei > 0.283188, [-0.79881507037552979, 0.79881507037552979], [0.24825909570051025, -0.24825909570051025])
IF (Nuclei_Location_Center_Y > 280.154, [-0.50545174099468504, 0.50545174099468504], [0.3297202808867149, -0.3297202808867149])
IF (Nuclei_Intensity_UpperQuartileIntensity_CorrDend > 0.132241, [0.35771841831789791, -0.35771841831789791], [-0.63545019489162846, 0.63545019489162846])
IF (Nuclei_AreaShape_MinorAxisLength > 6.4944899999999999, [0.5755128363506562, -0.5755128363506562], [-0.41737581982462335, 0.41737581982462335])
IF (Nuclei_Intensity_LowerQuartileIntensity_CorrDend > 0.075424000000000005, [0.50557978238660795, -0.50557978238660795], [-0.35606081901385256, 0.35606081901385256])
"""
        fd = StringIO(data)
        rules = R.Rules()
        rules.parse(fd)
        self.assertEqual(len(rules.rules), 20)
        for rule in rules.rules:
            self.assertEqual(rule.object_name, "Nuclei")
            self.assertEqual(rule.comparitor, ">")

        rule = rules.rules[0]
        self.assertEqual(rule.feature,
                         "Intensity_UpperQuartileIntensity_CorrDend")
        self.assertAlmostEqual(rule.threshold, 0.127625)
        self.assertAlmostEqual(rule.weights[0, 0], 0.79607587785712131)
        self.assertAlmostEqual(rule.weights[0, 1], -0.79607587785712131)
        self.assertAlmostEqual(rule.weights[1, 0], -0.94024303819690347)
        self.assertAlmostEqual(rule.weights[1, 1], 0.94024303819690347)