@@ -312,11 +312,18 @@ def update_buffer(self):
312
312
Size dictated by x_pixels, y_pixels, an number_of_frames in
313
313
configuration file.
314
314
"""
315
+ microscope_name = self .configuration ["experiment" ]["MicroscopeState" ][
316
+ "microscope_name"
317
+ ]
315
318
img_width = int (
316
- self .configuration ["experiment" ]["CameraParameters" ]["img_x_pixels" ]
319
+ self .configuration ["experiment" ]["CameraParameters" ][microscope_name ][
320
+ "img_x_pixels"
321
+ ]
317
322
)
318
323
img_height = int (
319
- self .configuration ["experiment" ]["CameraParameters" ]["img_y_pixels" ]
324
+ self .configuration ["experiment" ]["CameraParameters" ][microscope_name ][
325
+ "img_y_pixels"
326
+ ]
320
327
)
321
328
if img_width == self .img_width and img_height == self .img_height :
322
329
return
@@ -325,11 +332,6 @@ def update_buffer(self):
325
332
self .img_width = img_width
326
333
self .img_height = img_height
327
334
328
- # virtual microscopes
329
- for microscope_name in list (self .additional_microscopes .keys ()):
330
- self .destroy_virtual_microscope (microscope_name )
331
- self .additional_microscopes = {}
332
-
333
335
def update_acquire_control (self ):
334
336
"""Update the acquire control based on the current experiment parameters."""
335
337
self .view .acqbar .stop_stage .config (
@@ -356,6 +358,7 @@ def change_microscope(self, microscope_name, zoom=None):
356
358
self .stage_controller .initialize ()
357
359
self .channels_tab_controller .initialize ()
358
360
self .camera_setting_controller .update_camera_device_related_setting ()
361
+ self .camera_setting_controller .populate_experiment_values ()
359
362
self .camera_setting_controller .calculate_physical_dimensions ()
360
363
self .camera_view_controller .update_snr ()
361
364
@@ -451,10 +454,15 @@ def update_experiment_setting(self):
451
454
452
455
"""
453
456
warning_message = self .camera_setting_controller .update_experiment_values ()
457
+ microscope_name = self .configuration ["experiment" ]["MicroscopeState" ][
458
+ "microscope_name"
459
+ ]
454
460
455
461
# set waveform template
456
462
if self .acquire_bar_controller .mode in ["live" , "single" , "z-stack" ]:
457
- camera_setting = self .configuration ["experiment" ]["CameraParameters" ]
463
+ camera_setting = self .configuration ["experiment" ]["CameraParameters" ][
464
+ microscope_name
465
+ ]
458
466
if camera_setting ["sensor_mode" ] == "Light-Sheet" and camera_setting [
459
467
"readout_direction"
460
468
] in ["Bidirectional" , "Rev. Bidirectional" ]:
@@ -482,6 +490,13 @@ def update_experiment_setting(self):
482
490
# TODO: validate experiment dict
483
491
484
492
warning_message += self .channels_tab_controller .verify_experiment_values ()
493
+
494
+ # additional microscopes
495
+ for microscope_name in self .additional_microscopes_configs :
496
+ if hasattr (self , f"{ microscope_name .lower ()} _camera_setting_controller" ):
497
+ getattr (
498
+ self , f"{ microscope_name .lower ()} _camera_setting_controller"
499
+ ).update_experiment_values ()
485
500
if warning_message :
486
501
return warning_message
487
502
return ""
@@ -557,6 +572,14 @@ def set_mode_of_sub(self, mode):
557
572
self .camera_setting_controller .set_mode (mode )
558
573
self .mip_setting_controller .set_mode (mode )
559
574
self .waveform_tab_controller .set_mode (mode )
575
+
576
+ # additional microscopes
577
+ for microscope_name in self .additional_microscopes_configs :
578
+ if hasattr (self , f"{ microscope_name .lower ()} _camera_setting_controller" ):
579
+ getattr (
580
+ self , f"{ microscope_name .lower ()} _camera_setting_controller"
581
+ ).set_mode (mode )
582
+
560
583
if mode == "stop" :
561
584
# GUI Failsafe
562
585
self .acquire_bar_controller .stop_acquire ()
@@ -987,15 +1010,18 @@ def capture_image(self, command, mode, *args):
987
1010
return
988
1011
self .acquire_bar_controller .view .acquire_btn .configure (text = "Stop" )
989
1012
self .acquire_bar_controller .view .acquire_btn .configure (state = "normal" )
1013
+ microscope_name = self .configuration ["experiment" ]["MicroscopeState" ][
1014
+ "microscope_name"
1015
+ ]
990
1016
991
1017
self .camera_view_controller .initialize_non_live_display (
992
1018
self .configuration ["experiment" ]["MicroscopeState" ],
993
- self .configuration ["experiment" ]["CameraParameters" ],
1019
+ self .configuration ["experiment" ]["CameraParameters" ][ microscope_name ] ,
994
1020
)
995
1021
996
1022
self .mip_setting_controller .initialize_non_live_display (
997
1023
self .configuration ["experiment" ]["MicroscopeState" ],
998
- self .configuration ["experiment" ]["CameraParameters" ],
1024
+ self .configuration ["experiment" ]["CameraParameters" ][ microscope_name ] ,
999
1025
)
1000
1026
1001
1027
self .stop_acquisition_flag = False
@@ -1076,11 +1102,15 @@ def capture_image(self, command, mode, *args):
1076
1102
def launch_additional_microscopes (self ):
1077
1103
"""Launch additional microscopes."""
1078
1104
1079
- def display_images (camera_view_controller , show_img_pipe , data_buffer ):
1105
+ def display_images (
1106
+ microscope_name , camera_view_controller , show_img_pipe , data_buffer
1107
+ ):
1080
1108
"""Display images from additional microscopes.
1081
1109
1082
1110
Parameters
1083
1111
----------
1112
+ microscope_name : str
1113
+ Microscope name
1084
1114
camera_view_controller : CameraViewController
1085
1115
Camera View Controller object.
1086
1116
show_img_pipe : multiprocessing.Pipe
@@ -1091,9 +1121,8 @@ def display_images(camera_view_controller, show_img_pipe, data_buffer):
1091
1121
configuration file.
1092
1122
"""
1093
1123
camera_view_controller .initialize_non_live_display (
1094
- data_buffer ,
1095
1124
self .configuration ["experiment" ]["MicroscopeState" ],
1096
- self .configuration ["experiment" ]["CameraParameters" ],
1125
+ self .configuration ["experiment" ]["CameraParameters" ][ microscope_name ] ,
1097
1126
)
1098
1127
images_received = 0
1099
1128
while True :
@@ -1122,72 +1151,51 @@ def display_images(camera_view_controller, show_img_pipe, data_buffer):
1122
1151
break
1123
1152
images_received += 1
1124
1153
1125
- # destroy unnecessary additional microscopes
1126
- temp = []
1127
- for microscope_name in self .additional_microscopes :
1128
- if microscope_name not in self .additional_microscopes_configs :
1129
- temp .append (microscope_name )
1130
- for microscope_name in temp :
1154
+ # destroy all additional microscopes
1155
+ for microscope_name in list (self .additional_microscopes .keys ()):
1131
1156
self .destroy_virtual_microscope (microscope_name )
1157
+ self .additional_microscopes = {}
1132
1158
1133
1159
# show additional camera view popup
1134
1160
for microscope_name in self .additional_microscopes_configs :
1135
- if microscope_name not in self .additional_microscopes :
1136
- show_img_pipe = self .model .create_pipe (
1137
- f"{ microscope_name } _show_img_pipe"
1138
- )
1139
- data_buffer = self .model .launch_virtual_microscope (
1140
- microscope_name ,
1141
- self .additional_microscopes_configs [microscope_name ],
1142
- )
1161
+ show_img_pipe = self .model .create_pipe (f"{ microscope_name } _show_img_pipe" )
1162
+ data_buffer = self .model .launch_virtual_microscope (
1163
+ microscope_name ,
1164
+ self .additional_microscopes_configs [microscope_name ],
1165
+ )
1143
1166
1144
- self .additional_microscopes [microscope_name ] = {
1145
- "show_img_pipe" : show_img_pipe ,
1146
- "data_buffer" : data_buffer ,
1147
- }
1148
- if (
1149
- self .additional_microscopes [microscope_name ].get (
1150
- "camera_view_controller" , None
1151
- )
1152
- is None
1153
- ):
1154
- popup_window = CameraViewPopupWindow (self .view , microscope_name )
1155
- camera_view_controller = CameraViewController (
1156
- popup_window .camera_view , self
1157
- )
1158
- camera_view_controller .data_buffer = self .additional_microscopes [
1159
- microscope_name
1160
- ]["data_buffer" ]
1161
- popup_window .popup .bind ("<Configure>" , camera_view_controller .resize )
1162
- self .additional_microscopes [microscope_name ][
1163
- "popup_window"
1164
- ] = popup_window
1165
- self .additional_microscopes [microscope_name ][
1166
- "camera_view_controller"
1167
- ] = camera_view_controller
1168
- popup_window .popup .protocol (
1169
- "WM_DELETE_WINDOW" ,
1170
- combine_funcs (
1171
- popup_window .popup .dismiss ,
1172
- lambda : self .additional_microscopes [microscope_name ].pop (
1173
- "camera_view_controller"
1174
- ),
1167
+ self .additional_microscopes [microscope_name ] = {
1168
+ "show_img_pipe" : show_img_pipe ,
1169
+ "data_buffer" : data_buffer ,
1170
+ }
1171
+ popup_window = CameraViewPopupWindow (self .view , microscope_name )
1172
+ camera_view_controller = CameraViewController (
1173
+ popup_window .camera_view , self
1174
+ )
1175
+ camera_view_controller .data_buffer = self .additional_microscopes [
1176
+ microscope_name
1177
+ ]["data_buffer" ]
1178
+ camera_view_controller .microscope_name = microscope_name
1179
+ popup_window .popup .bind ("<Configure>" , camera_view_controller .resize )
1180
+ self .additional_microscopes [microscope_name ]["popup_window" ] = popup_window
1181
+ self .additional_microscopes [microscope_name ][
1182
+ "camera_view_controller"
1183
+ ] = camera_view_controller
1184
+ popup_window .popup .protocol (
1185
+ "WM_DELETE_WINDOW" ,
1186
+ combine_funcs (
1187
+ popup_window .popup .dismiss ,
1188
+ lambda : self .additional_microscopes [microscope_name ].pop (
1189
+ "camera_view_controller"
1175
1190
),
1176
- )
1177
-
1178
- # clear show_img_pipe
1179
- show_img_pipe = self .additional_microscopes [microscope_name ][
1180
- "show_img_pipe"
1181
- ]
1182
- while show_img_pipe .poll ():
1183
- image_id = show_img_pipe .recv ()
1184
- if image_id == "stop" :
1185
- break
1191
+ ),
1192
+ )
1186
1193
1187
1194
# start thread
1188
1195
capture_img_thread = threading .Thread (
1189
1196
target = display_images ,
1190
1197
args = (
1198
+ microscope_name ,
1191
1199
self .additional_microscopes [microscope_name ][
1192
1200
"camera_view_controller"
1193
1201
],
0 commit comments