示例#1
0
    def test_init_no_rack_data_file(self):
        path = 'p1000_tips.json'
        new_path = 'p1000_tips_temp.json'
        if os.path.exists(path):
            os.rename(path, new_path)

        p1000 = racks.rack(rack_name="p1000_1")
        self.assertEqual(p1000.rack_data, {'name': 'p1000_1'})

        p1000 = racks.rack(rack_name="p1000_1", x_slot=0, y_slot=0)
        self.assertEqual(p1000.rack_data, {
            'name': 'p1000_1',
            'n_x': 0,
            'n_y': 0
        })

        p1000 = racks.rack(rack_name="p1000_1", rack_type='p1000_tips')
        self.assertEqual(p1000.rack_data, {
            'name': 'p1000_1',
            'type': 'p1000_tips'
        })
        self.assertEqual(p1000.z_height, 76.0)

        if os.path.exists(new_path):
            os.rename(new_path, path)
示例#2
0
    def test_saveTool(self):
        path = 'p1000_1.json'
        new_path = 'p1000_1_temp.json'
        if os.path.exists(path):
            os.rename(path, new_path)

        self.assertFalse(os.path.exists(path))

        p1000 = racks.rack(rack_name="p1000_1",
                           rack_data={
                               'n_x': 0,
                               'n_y': 2,
                               'type': 'p1000_tips',
                               'position': [100, 200, 600]
                           })
        p1000.save()

        self.assertTrue(os.path.exists(path))

        p1000 = racks.rack(rack_name="p1000_1")
        self.assertEqual(
            p1000.rack_data, {
                'name': "p1000_1",
                'n_x': 0,
                'n_y': 2,
                'type': 'p1000_tips',
                'position': [100, 200, 600]
            })

        os.remove(path)
        self.assertFalse(os.path.exists(path))
        if os.path.exists(new_path):
            os.rename(new_path, path)
示例#3
0
    def test__calibrateRack__returns(self, mock_arnie, mock_mtp):
        # Defining mock objects
        ar = mock_arnie('COM1', 'COM2')
        mtp = mock_mtp('COM3')
        path = 'RackThatCannotBeNamed.json'
        if os.path.exists(path):
            os.remove(path)

        rack = racks.rack(rack_name='RackThatCannotBeNamed',
                          rack_type='p1000_tips',
                          x_slot=0,
                          y_slot=2)

        mtp.findCenterOuter = mock.MagicMock()
        mtp.findWall = mock.MagicMock()
        mtp.getStalagmyteCoord = mock.MagicMock()
        mtp.findCenterOuter.return_value = 266
        mtp.findWall.return_value = 420
        mtp.getStalagmyteCoord.return_value = (66, 66, 500)

        # Testing
        x, y, z = calibration.calibrateRack(mtp, rack)

        # Evaluating
        self.assertEqual(x, 266)
        self.assertEqual(y, 266)
        self.assertEqual(z, 420)

        # Cleaning up
        try:
            os.remove(path)
        except:
            pass
示例#4
0
    def test_calcWorkingPosition_noStalagmyteDataProvided(self):
        p1000 = racks.rack(rack_name="p1000_1",
                           rack_data={
                               'n_x': 0,
                               'n_y': 2,
                               'type': 'p1000_tips'
                           })
        p1000.rack_data['position'] = [100, 200, 600]
        p1000.z_working_height = 0

        # Mock class to provide tool calibration data
        class tool():
            def __init__(self):
                self.tool_data = {}
                self.tool_data['pos_stalagmyte'] = [91, 65, 400]

        tool = tool()

        # not corrected coordinates
        x_nc, y_nc = p1000.calcWellXY(well_col=0, well_row=0)
        x_slot, y_slot, z_calibr = p1000.getCalibratedRackCenter()
        z_nc = z_calibr - p1000.z_working_height

        # corrected coordinates
        x_corr, y_corr, z_corr = p1000.calcWorkingPosition(well_col=0,
                                                           well_row=0,
                                                           tool=tool)

        self.assertEqual(x_corr - x_nc, 0)
        self.assertEqual(y_corr - y_nc, 0)
        self.assertEqual(z_corr - z_nc, 0)
示例#5
0
    def test_init_loading_data(self):
        path = 'p1000_1.json'
        new_path = 'p1000_1_temp.json'

        if os.path.exists(path):
            try:
                os.rename(path, new_path)
            except:
                pass

        # Creating test file
        f = open(path, 'w')
        f.write(
            json.dumps({
                'name': 'p1000_1',
                'n_x': 0,
                'n_y': 0,
                'type': 'p1000_tips'
            }))
        f.close()
        p1000 = racks.rack(rack_name="p1000_1")
        self.assertEqual(p1000.rack_data, {
            'name': 'p1000_1',
            'n_x': 0,
            'n_y': 0,
            'type': 'p1000_tips'
        })

        os.remove(path)
        if os.path.exists(new_path):
            os.rename(new_path, path)
示例#6
0
    def test_calcWorkingPosition_NoToolProvided(self):
        p1000 = racks.rack(rack_name="p1000_1",
                           rack_data={
                               'n_x': 0,
                               'n_y': 2,
                               'type': 'p1000_tips'
                           })
        p1000.updateCenter(x=100,
                           y=200,
                           z=600,
                           x_btm_touch=90,
                           y_btm_touch=66,
                           z_btm_touch=500)
        p1000.z_working_height = 0

        # not corrected coordinates
        x_nc, y_nc = p1000.calcWellXY(well_col=0, well_row=0)
        x_slot, y_slot, z_calibr = p1000.getCalibratedRackCenter()
        z_nc = z_calibr - p1000.z_working_height

        # corrected coordinates
        x_corr, y_corr, z_corr = p1000.calcWorkingPosition(well_col=0,
                                                           well_row=0)

        self.assertEqual(x_corr - x_nc, 0)
        self.assertEqual(y_corr - y_nc, 0)
        self.assertEqual(z_corr - z_nc, 0)
示例#7
0
    def test_getSavedSlotCenter(self):
        p1000 = racks.rack(rack_name="p1000_1", rack_data={'n_x': 0, 'n_y': 2})
        x, y, z = p1000.getSavedSlotCenter()

        self.assertAlmostEqual(x, 92.195, 1)
        self.assertAlmostEqual(y, 285.6, 1)
        self.assertAlmostEqual(z, 604.4, 1)
示例#8
0
    def test__setGrippingProperties(self):

        # Cleaning rack data file that may remain after previous manipulations
        try:
            os.remove('RackThatCannotBeNamed.json')
        except:
            pass

        r = racks.rack(rack_name='RackThatCannotBeNamed',
                       rack_type='test_rack')

        self.assertFalse('gripper' in r.rack_data)

        class tool():
            def __init__(self):
                self.tool_data = {}
                self.tool_data['name'] = 'test_gripper'

        mock_tool = tool()

        r.setGrippingProperties(90, 80, 20, gripper=mock_tool)

        self.assertTrue('gripper' in r.rack_data)
        self.assertTrue('test_gripper' in r.rack_data['gripper'])
        self.assertTrue('open_diam' in r.rack_data['gripper']['test_gripper'])
        self.assertTrue('grip_diam' in r.rack_data['gripper']['test_gripper'])
        self.assertTrue('z_grip' in r.rack_data['gripper']['test_gripper'])

        del r

        # Repeating same checks to see if the data will be properly loaded
        # from file
        r = racks.rack(rack_name='RackThatCannotBeNamed',
                       rack_type='test_rack')
        self.assertTrue('gripper' in r.rack_data)
        self.assertTrue('test_gripper' in r.rack_data['gripper'])
        self.assertTrue('open_diam' in r.rack_data['gripper']['test_gripper'])
        self.assertTrue('grip_diam' in r.rack_data['gripper']['test_gripper'])
        self.assertTrue('z_grip' in r.rack_data['gripper']['test_gripper'])

        # Cleaning rack data file after manipulations
        try:
            os.remove('RackThatCannotBeNamed.json')
        except:
            pass
示例#9
0
 def test_calcAbsoluteTopZ(self):
     p1000 = racks.rack(rack_name="p1000_1",
                        rack_data={
                            'n_x': 0,
                            'n_y': 2,
                            'type': 'p1000_tips'
                        })
     p1000.max_height = 200
     p1000.getSavedSlotCenter = mock.MagicMock()
     p1000.getSavedSlotCenter.return_value = [100, 200, 600]
     calculated_max_z = p1000.calcAbsoluteTopZ()
     self.assertEqual(calculated_max_z, 400)
示例#10
0
 def test_getSimpleCalibrationPoints_raiseHeightRelativeNotAbsoute(self):
     p1000 = racks.rack(rack_name="p1000_1",
                        rack_data={
                            'n_x': 0,
                            'n_y': 2,
                            'type': 'p1000_tips'
                        })
     x, y, z, opposite_x, retract_y, raise_z = p1000.getSimpleCalibrationPoints(
     )
     x_cntr, y_cntr, z_cntr = p1000.getSavedSlotCenter()
     self.assertLess(raise_z, p1000.max_height)
     self.assertLess(z - raise_z, z_cntr - p1000.max_height)
示例#11
0
 def test_getSimpleCalibrationPoints_StartingTooCloseToObject(self):
     p1000 = racks.rack(rack_name="p1000_1",
                        rack_data={
                            'n_x': 0,
                            'n_y': 2,
                            'type': 'p1000_tips'
                        })
     x, y, z, opposite_x, retract_y, raise_z = p1000.getSimpleCalibrationPoints(
     )
     x_cntr, y_cntr, z_cntr = p1000.getSavedSlotCenter()
     self.assertLess(x_cntr - x, 150 / 2.0)
     self.assertGreater(x_cntr - x, p1000.x_width / 2.0)
     self.assertLess(x, x_cntr - p1000.x_width / 2.0)
示例#12
0
 def test_sanity_getSimpleCalibrationPoints(self):
     p1000 = racks.rack(rack_name="p1000_1",
                        rack_data={
                            'n_x': 0,
                            'n_y': 2,
                            'type': 'p1000_tips'
                        })
     x, y, z, opposite_x, retract_y, raise_z = p1000.getSimpleCalibrationPoints(
     )
     self.assertGreater(opposite_x, x)
     self.assertGreater(raise_z, 0)
     self.assertLess(opposite_x - x, 150)
     self.assertLess(retract_y * 2, 110)
示例#13
0
    def test__init__noRackDataFile__2(self):
        path = 'RackThatCannotBeNamed.json'
        if os.path.exists(path):
            os.remove(path)
        p1000 = racks.rack(rack_name='RackThatCannotBeNamed',
                           rack_type='p1000_tips',
                           x_slot=0,
                           y_slot=2)

        self.assertIn('name', p1000.rack_data)
        self.assertIn('n_x', p1000.rack_data)
        self.assertIn('n_y', p1000.rack_data)
        self.assertIn('type', p1000.rack_data)
示例#14
0
 def test_sanity_calcWellXY(self):
     p1000 = racks.rack(rack_name="p1000_1",
                        rack_data={
                            'n_x': 0,
                            'n_y': 2,
                            'type': 'p1000_tips',
                            'position': [100, 200, 600]
                        })
     x1, y1 = p1000.calcWellXY(0, 0)
     x2, y2 = p1000.calcWellXY(11, 7)
     self.assertGreater(x2, x1)
     self.assertGreater(y2, y1)
     self.assertAlmostEqual(x2 - x1, 11 * 8.89, 1)
     self.assertAlmostEqual(y2 - y1, 7 * 8.89, 1)
示例#15
0
 def test_updateCenter_NotCalibrated(self):
     p1000 = racks.rack(rack_name="p1000_1",
                        rack_data={
                            'n_x': 0,
                            'n_y': 2,
                            'type': 'p1000_tips'
                        })
     p1000.updateCenter(x=100,
                        y=200,
                        z=600,
                        x_btm_touch=90,
                        y_btm_touch=66,
                        z_btm_touch=500)
     self.assertEqual(p1000.rack_data['position'], [100, 200, 600])
     self.assertEqual(p1000.rack_data['pos_stalagmyte'], [90, 66, 500])
示例#16
0
    def test__getHeigthBelowGripper(self):
        r = racks.rack(rack_name='RackThatCannotBeNamed',
                       rack_type='test_rack')
        gripper_dict = {'test_gripper': {'z_grip': 20}}
        r.rack_data['gripper'] = gripper_dict
        r.max_height = 100

        class tool():
            def __init__(self):
                self.tool_data = {}
                self.tool_data['name'] = 'test_gripper'

        mock_tool = tool()

        h = r.getHeightBelowGripper(tool=mock_tool)
        self.assertEqual(h, 80)
示例#17
0
    def test__getRackCenterFullCalibration(self):
        r = racks.rack(rack_name='RackThatCannotBeNamed',
                       rack_type='test_rack')

        r.rack_data['position'] = [400, 200, 500]
        r.rack_data['pos_stalagmyte'] = [200, 100, 400]

        class tool():
            def getStalagmyteCoord(self):
                return [210, 95, 420]

        mock_tool = tool()

        x, y, z = r.calcRackCenterFullCalibration(mock_tool)

        self.assertEqual(x, 410)
        self.assertEqual(y, 195)
        self.assertEqual(z, 520)
示例#18
0
    def test__getGrippingCloseDiam(self):
        r = racks.rack(rack_name='RackThatCannotBeNamed',
                       rack_type='test_rack')

        r.calcRackCenterFullCalibration = mock.MagicMock()
        r.calcRackCenterFullCalibration.return_value = (200, 100, 500)
        gripper_dict = {'test_gripper': {'grip_diam': 80}}
        r.rack_data['gripper'] = gripper_dict

        class tool():
            def __init__(self):
                self.tool_data = {}
                self.tool_data['name'] = 'test_gripper'

        mock_tool = tool()

        d = r.getGrippingCloseDiam(tool=mock_tool)
        self.assertEqual(d, 80)
示例#19
0
 def test_calcWellXY_Calibrated(self):
     p1000 = racks.rack(rack_name="p1000_1",
                        rack_data={
                            'n_x': 0,
                            'n_y': 2,
                            'type': 'p1000_tips',
                            'position': [100, 200, 600]
                        })
     x, y = p1000.calcWellXY(0, 0)
     self.assertGreater(x, 40)
     self.assertLess(x, 60)
     self.assertGreater(y, 150)
     self.assertLess(y, 180)
     x, y = p1000.calcWellXY(11, 7)
     self.assertGreater(x, 140)
     self.assertLess(x, 160)
     self.assertGreater(y, 220)
     self.assertLess(y, 240)
示例#20
0
    def test__getRelativeZCalibrationPoint(self):

        r = racks.rack(rack_name='RackThatCannotBeNamed',
                       rack_type='p1000_tips',
                       x_slot=0,
                       y_slot=2)

        config = configparser.ConfigParser()
        config_path = 'configs/p1000_tips.ini'
        config.read(config_path)

        saved_dxdy_list = [
            float(config['calibration']['z_calibration_dx_coord']),
            float(config['calibration']['z_calibration_dy_coord']),
        ]

        self.assertEqual(r.z_calibration_dxdy_coord, saved_dxdy_list)
        self.assertEqual(r.z_calibration_dz,
                         float(config['calibration']['z_calibration_dz']))
示例#21
0
    def test_init_external_data_provided(self):
        path = 'p1000_tips.json'
        new_path = 'p1000_tips_temp.json'
        if os.path.exists(path):
            os.rename(path, new_path)

        p1000 = racks.rack(rack_name="p1000_1",
                           rack_data={
                               'n_x': 0,
                               'n_y': 0,
                               'type': 'p1000_tips'
                           })
        self.assertEqual(p1000.rack_data, {
            'name': 'p1000_1',
            'n_x': 0,
            'n_y': 0,
            'type': 'p1000_tips'
        })

        if os.path.exists(new_path):
            os.rename(new_path, path)
示例#22
0
    def test__getGrippingHeight(self):

        r = racks.rack(rack_name='RackThatCannotBeNamed',
                       rack_type='test_rack')

        r.calcRackCenterFullCalibration = mock.MagicMock()
        r.calcRackCenterFullCalibration.return_value = (200, 100, 500)
        gripper_dict = {'test_gripper': {'z_grip': 20}}
        r.rack_data['gripper'] = gripper_dict

        class tool():
            def __init__(self):
                self.tool_data = {}
                self.tool_data['name'] = 'test_gripper'

        mock_tool = tool()

        z = r.getGrippingHeight(tool=mock_tool)
        self.assertEqual(z, 520)
        z = r.getGrippingHeight(tool=mock_tool, extra_z=5)
        self.assertEqual(z, 525)
示例#23
0
    def test_getSampleCenter_WithCalibration(self):
        r = racks.rack(rack_name='RackThatCannotBeNamed',
                       rack_type='test_rack')

        r.rack_data['position'] = [400, 200, 500]
        r.rack_data['pos_stalagmyte'] = [200, 100, 400]

        class tool():
            def getStalagmyteCoord(self):
                return [210, 95, 420]

        mock_tool = tool()

        s = samples.sample(sample_name='SampleThatCannotBeNamed',
                           sample_type='test_sample')
        s.place(r, 0, 0)

        x, y = s.getSampleCenterXY(mock_tool)

        self.assertEqual(x, 410 - 51.75)
        self.assertEqual(y, 195 - 33.75)
示例#24
0
    def test__calibrateRack__dataCorrectlySaved(self, mock_arnie, mock_mtp):
        # Defining mock objects
        ar = mock_arnie('COM1', 'COM2')
        mtp = mock_mtp('COM3')
        path = 'RackThatCannotBeNamed.json'
        if os.path.exists(path):
            os.remove(path)

        rack = racks.rack(rack_name='RackThatCannotBeNamed',
                          rack_type='p1000_tips',
                          x_slot=0,
                          y_slot=2)

        mtp.findCenterOuter = mock.MagicMock()
        mtp.findWall = mock.MagicMock()
        mtp.getStalagmyteCoord = mock.MagicMock()
        mtp.findCenterOuter.return_value = 266
        mtp.findWall.return_value = 420
        mtp.getStalagmyteCoord.return_value = (66, 66, 500)

        # Testing
        x, y, z = calibration.calibrateRack(mtp, rack)

        # Evaluating
        with open('RackThatCannotBeNamed.json', 'r') as f:
            saved_dict = json.loads(f.read())

        self.assertEqual(saved_dict['name'], 'RackThatCannotBeNamed')
        self.assertEqual(saved_dict['type'], 'p1000_tips')
        self.assertEqual(saved_dict['n_x'], 0)
        self.assertEqual(saved_dict['n_y'], 2)
        self.assertEqual(saved_dict['position'], [266, 266, 420])
        self.assertEqual(saved_dict['pos_stalagmyte'], [66, 66, 500])

        # Cleaning up
        try:
            os.remove(path)
        except:
            pass
示例#25
0
    def test_calcWorkingPosition(self):
        p1000_rack = racks.rack(rack_name="p1000_1_test",
                                rack_data={
                                    'n_x': 0,
                                    'n_y': 2,
                                    'type': 'p1000_tips'
                                })
        p1000_rack.updateCenter(x=100,
                                y=200,
                                z=600,
                                x_btm_touch=90,
                                y_btm_touch=66,
                                z_btm_touch=500)
        p1000_rack.z_working_height = 0

        # Making sure the rack center outpit is consistent with the input
        self.assertEqual(600, p1000_rack.getCalibratedRackCenter()[2])

        # Mock class to provide tool calibration data
        class tool():
            def getStalagmyteCoord(self):
                return [91, 65, 400]

        tool = tool()

        # not corrected coordinates
        x_nc, y_nc = p1000_rack.calcWellXY(well_col=0, well_row=0)
        x_slot, y_slot, z_calibr = p1000_rack.getCalibratedRackCenter()
        z_nc = z_calibr - p1000_rack.z_working_height

        # corrected coordinates
        x_corr, y_corr, z_corr = p1000_rack.calcWorkingPosition(well_col=0,
                                                                well_row=0,
                                                                tool=tool)

        self.assertEqual(x_corr - x_nc, 1)
        self.assertEqual(y_corr - y_nc, -1)
        self.assertEqual(z_corr - z_nc, -100)