diff --git a/LCL_run.py b/LCL_run.py index 32a2a3067a616314b9bb651c583a6e17df4f3713..11446163e3bf5291f1ff3f186f977bd5580eeaa2 100755 --- a/LCL_run.py +++ b/LCL_run.py @@ -293,7 +293,8 @@ class main_window(QMainWindow): # 71:self.toggle_dmf_or_lysis, 84:stage.move_left_one_well_slot, 89:stage.move_right_one_well_slot, - 96:self.screen_shooter.save_target_image + 96:self.screen_shooter.save_target_image, + 16777216:self.localizer.stop_auto_lysis } if event.key() in key_control_dict.keys(): key_control_dict[event.key()]() diff --git a/__pycache__/localizer.cpython-36.pyc b/__pycache__/localizer.cpython-36.pyc index 236d6d446e625984d77201c9e6efb6c84d645fd1..713a3b1263045e7fc6d7dc089058244b04e1a169 100755 Binary files a/__pycache__/localizer.cpython-36.pyc and b/__pycache__/localizer.cpython-36.pyc differ diff --git a/__pycache__/stage_controller.cpython-36.pyc b/__pycache__/stage_controller.cpython-36.pyc index b73ee54fd96a0a88e3465de936ae6ab212ee6fd1..9d0f81fbe4d76e71c9a83aac39dd4da997b53d09 100755 Binary files a/__pycache__/stage_controller.cpython-36.pyc and b/__pycache__/stage_controller.cpython-36.pyc differ diff --git a/localizer.py b/localizer.py index c5b7a2ba380b582e122dff94c7754453f19737a1..b6558c821c5db122b8684c377f4d16f3895ef100 100755 --- a/localizer.py +++ b/localizer.py @@ -27,7 +27,7 @@ class Localizer(QtCore.QObject): super(Localizer, self).__init__(parent) self.localizer_model = load_model(os.path.join(experiment_folder_location,'multiclass_localizer14.hdf5')) self.norm = StandardScaler() - self.hallucination_img = cv2.imread(os.path.join(experiment_folder_location,'target___28_06_2018___15.16.37.613192.tif')) + self.hallucination_img = cv2.imread(os.path.join(experiment_folder_location,'before_qswitch___06_07_2018___11.48.59.274395.tif')) # self.localizer_model = load_model(os.path.join(experiment_folder_location,'binary_localizer6.hdf5')) self.localizer_model._make_predict_function() self.position = np.zeros((1,2)) @@ -35,12 +35,17 @@ class Localizer(QtCore.QObject): self.lysed_cell_count = 0 self.get_well_center = True self.delay_time = .2 - self.cells_to_lyse = 0 + self.cells_to_lyse = 1 self.cell_type_to_lyse = 'red' self.lysis_mode = 'direct' + self.auto_lysis = False + # cv2.imshow('img',self.get_network_output(self.hallucination_img,'multi')) + def stop_auto_lysis(self): + self.auto_lysis = False + def change_type_to_lyse(self,index): map_dict = { 0:'red', @@ -120,6 +125,7 @@ class Localizer(QtCore.QObject): ''' # first get our well center position self.lysed_cell_count = 0 + self.auto_lysis = True self.well_center = self.get_stage_position() # now start moving and lysing all in view self.lyse_all_in_view() @@ -128,6 +134,9 @@ class Localizer(QtCore.QObject): self.get_well_center = False for num,let in directions: for i in range(num): + if self.auto_lysis == False: + self.stop_laser_flash_signal.emit() + return if self.lysed_cell_count >= self.cells_to_lyse: self.return_to_original_position(self.well_center) return @@ -163,13 +172,18 @@ class Localizer(QtCore.QObject): view_center = self.get_stage_position() print('lysing all in view...') self.delay() - segmented_image = self.get_network_output(self.image,'multi') - # segmented_image = self.get_network_output(self.hallucination_img,'multi') - cv2.imshow('Cell Outlines and Centers',segmented_image) + # segmented_image = self.get_network_output(self.image,'multi') + segmented_image = self.get_network_output(self.hallucination_img,'multi') + # cv2.imshow('Cell Outlines and Centers',segmented_image) # lyse all cells in view self.lyse_cells(segmented_image,self.cell_type_to_lyse,self.lysis_mode) + if self.auto_lysis == False: + self.stop_laser_flash_signal.emit() + return if self.lysed_cell_count >= self.cells_to_lyse: + self.delay() self.return_to_original_position(self.well_center) + self.stop_laser_flash_signal.emit() return # now return to our original position self.delay() @@ -202,37 +216,55 @@ class Localizer(QtCore.QObject): for i in range(len(cell_contours)): contour = cell_contours[i] point_number = contour.shape[0] - old_center = contour[0].reshape(2) - self.hit_target(old_center-window_center,True,7) - time.sleep(.2) + if i == 0: + old_center = contour[0].reshape(2) + self.hit_target(old_center-window_center,True,0) + print('SLEEPING') + time.sleep(2) + for j in range(1,point_number,2): new_center = contour[j].reshape(2) move_vec = -old_center + new_center scaled_move_vec = move_vec*1.5 - self.hit_target(scaled_move_vec,False,1) + self.hit_target(scaled_move_vec,False,0) old_center = new_center time.sleep(.1) self.lysed_cell_count += 1 + if self.auto_lysis == False: + self.stop_laser_flash_signal.emit() + return if self.lysed_cell_count >= self.cells_to_lyse: + self.delay() self.return_to_original_position(self.well_center) + self.stop_laser_flash_signal.emit() return def direct_lysis(self,cell_centers): window_center = np.array([125./2,125./2]) print('centers:',cell_centers) old_center = cell_centers[0] - self.hit_target(old_center-window_center,True,10) + self.hit_target(old_center-window_center,True,0) self.lysed_cell_count += 1 + if self.lysed_cell_count >= self.cells_to_lyse: + self.delay() + self.return_to_original_position(self.well_center) + self.stop_laser_flash_signal.emit() + return self.delay() if len(cell_centers) > 1: for i in range(1,len(cell_centers)): - self.hit_target(-old_center + cell_centers[i],False,3) + self.hit_target(-old_center + cell_centers[i],False,0) old_center = cell_centers[i] self.delay() - self.lysed_cell_count += 1 - if self.lysed_cell_count >= self.cells_to_lyse: - self.return_to_original_position(self.well_center) - return + self.lysed_cell_count += 1 + if self.auto_lysis == False: + self.stop_laser_flash_signal.emit() + return + if self.lysed_cell_count >= self.cells_to_lyse: + self.delay() + self.return_to_original_position(self.well_center) + self.stop_laser_flash_signal.emit() + return def get_contours_and_centers(self,confidence_image): _, contours, _ = cv2.findContours(np.uint8(confidence_image), cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) @@ -240,7 +272,7 @@ class Localizer(QtCore.QObject): cell_contours = [] cell_centers = [] for contour in contours: - print(cv2.contourArea(contour)) + # print(cv2.contourArea(contour)) if cv2.contourArea(contour) > 20: (x,y),radius = cv2.minEnclosingCircle(contour) center = (int(x),int(y)) @@ -269,7 +301,9 @@ class Localizer(QtCore.QObject): x = center[0]*851/125 y = center[1]*681/125 self.localizer_move_signal.emit(np.array([x,y]),goto_reticle,True,True) + self.delay() self.ai_fire_qswitch_signal.emit(num_frames) + self.delay() # for i in range(1): # self.ai_fire_qswitch_signal.emit() # time.sleep(.1) diff --git a/models/before_qswitch___06_07_2018___11.48.59.274395.tif b/models/before_qswitch___06_07_2018___11.48.59.274395.tif new file mode 100755 index 0000000000000000000000000000000000000000..b8093622c4d0aa87729c25bb07c3925d9abae861 Binary files /dev/null and b/models/before_qswitch___06_07_2018___11.48.59.274395.tif differ diff --git a/stage_controller.py b/stage_controller.py index 9de8043b70c5e53ad19d249c5a41a581f2d39666..af50f3cd489b3fad455249635187b03a24143849 100755 --- a/stage_controller.py +++ b/stage_controller.py @@ -36,7 +36,7 @@ class stage_controller(QtCore.QObject): self.center_y = center_y self.reticle_x = reticle_x self.reticle_y = reticle_y - print('RETICLE RECEIVED!') + # print('RETICLE RECEIVED!') def change_magnification(self,index): map_dict = { @@ -180,7 +180,7 @@ class stage_controller(QtCore.QObject): move_vector = self.scale_move_vector(move_vector) self.move_relative(move_vector) elif move_relative == False and scale_vector == False: - print(move_vector) + # print(move_vector) self.go_to_position(move_vector) elif move_relative == True and scale_vector == False: self.move_relative(move_vector)