diff --git a/csaxs_bec/bec_ipython_client/plugins/omny/omny_rt.py b/csaxs_bec/bec_ipython_client/plugins/omny/omny_rt.py index 1b71893..3520c90 100644 --- a/csaxs_bec/bec_ipython_client/plugins/omny/omny_rt.py +++ b/csaxs_bec/bec_ipython_client/plugins/omny/omny_rt.py @@ -20,136 +20,9 @@ class OMNY_rt_client: def __init__(self): self.mirror_channel = -1 self.mirror_amplitutde_increase=0 - self.mirror_parameters = { - 1: { - "opt_signalchannel": "ssi_5", - "opt_mirrorname": "Inc Angle", - "opt_averaging_time": 0.1, - "opt_steps1_pos": 1, - "opt_steps1_neg": 1, - "opt_steps2_pos": 10, - "opt_steps2_neg": 10, - "opt_signal_stop": 2400, - "opt_signal_min_begin": 1000, - "opt_step_divider": 1, - "opt_amplitude1_pos": 2000, - "opt_amplitude1_neg": 2000, - "opt_amplitude2_pos": 2000, - "opt_amplitude2_neg": 2000, - }, - 2: { - "opt_signalchannel": "ssi_2", - "opt_mirrorname": "Inc ST OSA Y", - "opt_averaging_time": 0.1, - "opt_steps1_pos": 1, - "opt_steps1_neg": 1, - "opt_steps2_pos": 1, - "opt_steps2_neg": 1, - "opt_signal_stop": 5000, - "opt_signal_min_begin": 2000, - "opt_step_divider": 1, - "opt_amplitude1_pos": 2000, - "opt_amplitude1_neg": 2000, - "opt_amplitude2_pos": 2000, - "opt_amplitude2_neg": 2000, - }, - 3: { - "opt_signalchannel": "ssi_1", - "opt_mirrorname": "Inc OSA FZP Y", - "opt_averaging_time": 0.25, - "opt_steps1_pos": 1, - "opt_steps1_neg": 2, - "opt_steps2_pos": 1, - "opt_steps2_neg": 3, - "opt_signal_stop": 7200, - "opt_signal_min_begin": 3000, - "opt_step_divider": 1, - "opt_amplitude1_pos": 2500, - "opt_amplitude1_neg": 2500, - "opt_amplitude2_pos": 2500, - "opt_amplitude2_neg": 2500, - }, - 4: { - "opt_signalchannel": "ssi_2", - "opt_mirrorname": "OSA Y", - "opt_averaging_time": 0.1, - "opt_steps1_pos": 1, - "opt_steps1_neg": 1, - "opt_steps2_pos": 1, - "opt_steps2_neg": 1, - "opt_signal_stop": 5000, - "opt_signal_min_begin": 2000, - "opt_step_divider": 1, - "opt_amplitude1_pos": 3000, - "opt_amplitude1_neg": 3000, - "opt_amplitude2_pos": 3000, - "opt_amplitude2_neg": 3000, - }, - 5: { - "opt_signalchannel": "ssi_1", - "opt_mirrorname": "FZP Y", - "opt_averaging_time": 0.2, - "opt_steps1_pos": 6, - "opt_steps1_neg": 6, - "opt_steps2_pos": 8, - "opt_steps2_neg": 4, - "opt_signal_stop": 8000, - "opt_signal_min_begin": 3000, - "opt_step_divider": 1, - "opt_amplitude1_pos": 3000, - "opt_amplitude1_neg": 3000, - "opt_amplitude2_pos": 3000, - "opt_amplitude2_neg": 3000, - }, - 6: { - "opt_signalchannel": "ssi_4", - "opt_mirrorname": "OSA X", - "opt_averaging_time": 0.2, - "opt_steps1_pos": 2, - "opt_steps1_neg": 1, - "opt_steps2_pos": 1, - "opt_steps2_neg": 1, - "opt_signal_stop": 8850, - "opt_signal_min_begin": 3000, - "opt_step_divider": 1, - "opt_amplitude1_pos": 3000, - "opt_amplitude1_neg": 3000, - "opt_amplitude2_pos": 3700, - "opt_amplitude2_neg": 2500, - }, - 7: { - "opt_signalchannel": "ssi_3", - "opt_mirrorname": "FZP X", - "opt_averaging_time": 0.2, - "opt_steps1_pos": 4, - "opt_steps1_neg": 4, - "opt_steps2_pos": 4, - "opt_steps2_neg": 4, - "opt_signal_stop": 8000, - "opt_signal_min_begin": 4000, - "opt_step_divider": 1, - "opt_amplitude1_pos": 2500, - "opt_amplitude1_neg": 2500, - "opt_amplitude2_pos": 2500, - "opt_amplitude2_neg": 2500, - }, - 8: { - "opt_signalchannel": "ssi_1", - "opt_mirrorname": "OSA Y USING SIGNAL OSA FZP", - "opt_averaging_time": 0.2, - "opt_steps1_pos": 1, - "opt_steps1_neg": 1, - "opt_steps2_pos": 1, - "opt_steps2_neg": 1, - "opt_signal_stop": 5000, - "opt_signal_min_begin": 2000, - "opt_step_divider": 1, - "opt_amplitude1_pos": 3000, - "opt_amplitude1_neg": 3000, - "opt_amplitude2_pos": 3000, - "opt_amplitude2_neg": 3000, - } - } + self.mirror_parameters = {} + for j in range(1,9): + self.mirror_parameters[j] = dev.rtx.controller.get_mirror_parameters(j) @staticmethod def _get_user_param_safe(device, var): @@ -158,118 +31,15 @@ class OMNY_rt_client: raise OMNY_rt_clientError(f"Device {device} has no user parameter definition for {var}.") return param.get(var) - - - def _omny_interferometer_openloop_steps(self, channel, steps, amplitude): dev.rtx.controller._omny_interferometer_openloop_steps(channel, steps, amplitude) - # if channel not in range(3,5): - # raise OMNY_rt_clientError(f"invalid channel number {channel}.") - - # if amplitude > 4090: - # amplitude = 4090 - # elif amplitude < 10: - # amplitude = 10 - - # dev.oshield.controller.move_open_loop_steps( - # channel, steps, amplitude=amplitude, frequency=500 - # ) - # time.sleep(0.01) - # while dev.oshield.controller.is_axis_moving(channel): - # time.sleep(0.002) - - - # def _omny_interferometer_optimize(self, mirror_channel, channel): - # if mirror_channel == -1: - # raise OMNY_rt_clientError("no mirror channel selected") - # #mirror channel is mirror number and channel is smaract channel, i.e. axis of the mirror - # if channel == 3: - # steps_pos = self.mirror_parameters[mirror_channel]["opt_steps1_pos"] - # steps_neg = self.mirror_parameters[mirror_channel]["opt_steps1_neg"] - # opt_amplitude_pos = self.mirror_parameters[mirror_channel]["opt_amplitude1_pos"] - # opt_amplitude_neg = self.mirror_parameters[mirror_channel]["opt_amplitude1_neg"] - # elif channel == 4: - # steps_pos = self.mirror_parameters[mirror_channel]["opt_steps2_pos"] - # steps_neg = self.mirror_parameters[mirror_channel]["opt_steps2_neg"] - # opt_amplitude_pos = self.mirror_parameters[mirror_channel]["opt_amplitude2_pos"] - # opt_amplitude_neg = self.mirror_parameters[mirror_channel]["opt_amplitude2_neg"] - # else: - # raise OMNY_rt_clientError(f"invalid channel number {channel}.") - - # previous_signal = dev.rtx.controller._omny_interferometer_get_signalsample(self.mirror_parameters[mirror_channel]["opt_signalchannel"], self.mirror_parameters[mirror_channel]["opt_averaging_time"]) - - # min_begin = self.mirror_parameters[mirror_channel]["opt_signal_min_begin"] - # if previous_signal < min_begin: - # #raise OMNY_rt_clientError("error1") #(f"Minimum signal of axis {self.mirror_parameters[mirror_channel]["opt_mirrorname"]} to start alignment not present.") - # print(f"\rMinimum signal for auto alignment {min_begin} not reached.") - # return - # elif previous_signal > self.mirror_parameters[mirror_channel]["opt_signal_stop"]: - # print(f"\rInterferometer signal of axis is good") # {self.mirror_parameters[mirror_channel]["opt_mirrorname"]} is good.") - # return - # else: - # direction = 1 - # cycle_counter=0 - # cycle_max=20 - # reversal_counter=0 - # reversal_max=4 - # self.mirror_amplitutde_increase=0 - - # current_sample = dev.rtx.controller._omny_interferometer_get_signalsample(self.mirror_parameters[mirror_channel]["opt_signalchannel"], self.mirror_parameters[mirror_channel]["opt_averaging_time"]) - # max=current_sample - - # while current_sample < self.mirror_parameters[mirror_channel]["opt_signal_stop"] and cycle_counter0: - # self._omny_interferometer_openloop_steps(channel, steps_pos, opt_amplitude_pos) - # verbose_str = f"channel {channel}, steps {steps_pos}" - # else: - # self._omny_interferometer_openloop_steps(channel, -steps_neg, opt_amplitude_neg) - # verbose_str = f"auto action {channel}, steps {-steps_pos}" - # #print(f"Aligning axis ") #{self.mirror_parameters[mirror_channel]["opt_mirrorname"]}. Target: {self.mirror_parameters[mirror_channel]["opt_signal_stop"]}, current {current_sample}") - - # current_sample = dev.rtx.controller._omny_interferometer_get_signalsample(self.mirror_parameters[mirror_channel]["opt_signalchannel"], self.mirror_parameters[mirror_channel]["opt_averaging_time"]) - - # opt_mirrorname = self.mirror_parameters[self.mirror_channel]["opt_mirrorname"] - - # info_str = f"\rAuto aligning Channel {self.mirror_channel}, {opt_mirrorname}, Current signal: {current_sample:.0f}" - # filling = " " * (50-len(info_str)) - # # Calculate the number of filled and unfilled segments - # length = 30 - # percentage = current_sample / max - # filled_length = int(length * percentage) - # unfilled_length = length - filled_length - # bar = '#' * filled_length + '-' * unfilled_length - # print(info_str + filling + " " + bar + f" {max:.0f} "+verbose_str+" (q)uit \r", end='') - - - - # if previous_signal>current_sample: - # if direction<0: - # steps_pos=int(steps_pos/2) - # steps_neg=int(steps_neg/2) - # if steps_pos<1: - # steps_pos=1 - # if steps_neg<1: - # steps_neg=1 - # direction=direction*(-1) - # reversal_counter+=1 - # previous_signal=current_sample - # cycle_counter+=1 - - # print(f"\r\nFinished aligning channel {channel} of mirror {mirror_channel}\n\r") # {self.mirror_parameters[mirror_channel]["opt_mirrorname"]}. Target: {self.mirror_parameters[mirror_channel]["opt_signal_stop"]}, current {current_sample}") - def interferometer_tweaking(self): self._tweak_interferometer() def _tweak_interferometer(self): - # global _omny_interferometer_opt_signalchannel - # global _omny_interferometer_opt_mirrorname self.mirror_channel=-1 - # Save the current terminal settings fd = sys.stdin.fileno() old_term = termios.tcgetattr(fd) @@ -374,22 +144,7 @@ class OMNY_rt_client: def omny_interferometer_align_incoupling_angle(self): - self.mirror_channel=1 - signal = dev.rtx.controller._omny_interferometer_get_signalsample(self.mirror_parameters[self.mirror_channel]["opt_signalchannel"], self.mirror_parameters[self.mirror_channel]["opt_averaging_time"]) - - if signal > self.mirror_parameters[self.mirror_channel]["opt_signal_stop"]: - print(f"Interferometer signal of axis {self.mirror_parameters[self.mirror_channel]['opt_mirrorname']} is good, no alignment needed.") - else: - dev.rtx.controller._omny_interferometer_switch_channel(self.mirror_channel) - time.sleep(0.1) - self._omny_interferometer_optimize(self.mirror_channel, 3) - self._omny_interferometer_optimize(self.mirror_channel, 4) - self._omny_interferometer_optimize(self.mirror_channel, 3) - self._omny_interferometer_optimize(self.mirror_channel, 4) - dev.rtx.controller._omny_interferometer_switch_alloff() - dev.rtx.controller.show_signal_strength_interferometer() - - self.mirror_channel=-1 + dev.rtx.controller.omny_interferometer_align_incoupling_angle() def omny_interferometer_tweak_otrack(self): self.OMNYTools.tweak_cursor(dev.otrackz,.1,dev.otracky,.1,special_command=dev.rtx.controller.laser_tracker_print_intensity_for_otrack_tweaking) @@ -413,42 +168,7 @@ class OMNY_rt_client: def omny_interferometer_align_tracking(self): dev.rtx.controller.omny_interferometer_align_tracking() - # self.mirror_channel=6 - # signal = dev.rtx.controller._omny_interferometer_get_signalsample(self.mirror_parameters[self.mirror_channel]["opt_signalchannel"], self.mirror_parameters[self.mirror_channel]["opt_averaging_time"]) - - # if signal > self.mirror_parameters[self.mirror_channel]["opt_signal_stop"]: - # print(f"Interferometer signal of axis {self.mirror_parameters[self.mirror_channel]['opt_mirrorname']} is good, no alignment needed.") - # else: - # dev.rtx.controller._omny_interferometer_switch_channel(self.mirror_channel) - # time.sleep(0.1) - # self._omny_interferometer_optimize(self.mirror_channel, 3) - # self._omny_interferometer_optimize(self.mirror_channel, 4) - # self._omny_interferometer_optimize(self.mirror_channel, 3) - # self._omny_interferometer_optimize(self.mirror_channel, 4) - # dev.rtx.controller._omny_interferometer_switch_alloff() - # dev.rtx.controller.show_signal_strength_interferometer() - - # self.mirror_channel=-1 def laser_tracker_check_and_wait_for_signalstrength(self): dev.rtx.controller.laser_tracker_check_and_wait_for_signalstrength() - # #first check on target - # dev.rtx.controller.laser_tracker_wait_on_target() - # signal = dev.rtx.controller._omny_interferometer_get_signalsample("ssi_4",0.1) - # min_signal = self.OMNYTools._get_user_param_safe("rtx","min_signal") - # low_signal = self.OMNYTools._get_user_param_safe("rtx","low_signal") - # wait_counter = 0 - # while signal < min_signal and wait_counter<10: - # print( - # f"The signal of the tracker {signal} is below the minimum required signal of {min_signal}. Waiting..." - # ) - # wait_counter+=1 - # time.sleep(0.4) - # self.feedback_get_status_and_ssi() - # signal = dev.rtx.controller._omny_interferometer_get_signalsample("ssi_4",0.1) - - # if signal < low_signal: - # print( - # f"\x1b[91mThe signal of the tracker {signal} is below the low limit of {low_signal}. Auto readjustment...\x1b[0m" - # ) - # self.omny_interferometer_align_tracking() \ No newline at end of file + \ No newline at end of file diff --git a/csaxs_bec/devices/omny/rt/rt_omny_ophyd.py b/csaxs_bec/devices/omny/rt/rt_omny_ophyd.py index b7e09fc..9581bb2 100644 --- a/csaxs_bec/devices/omny/rt/rt_omny_ophyd.py +++ b/csaxs_bec/devices/omny/rt/rt_omny_ophyd.py @@ -237,7 +237,6 @@ class RtOMNYController(Controller): "opt_amplitude2_neg": 3000, } } - self.mirror_channel = -1 # def is_axis_moving(self, axis_Id) -> bool: # # this checks that axis is on target @@ -263,8 +262,8 @@ class RtOMNYController(Controller): threading.Thread(target=send_positions, args=(self, positions), daemon=True).start() - def get_mirror_parameters(self, mirror_number): - return self.mirror_parameters[mirror_number] + def get_mirror_parameters(self,channel): + return self.mirror_parameters[channel] def laser_tracker_check_and_wait_for_signalstrength(self): @@ -294,22 +293,43 @@ class RtOMNYController(Controller): print("Checking laser tracker completed.") def omny_interferometer_align_tracking(self): - self.mirror_channel=6 - signal = self._omny_interferometer_get_signalsample(self.mirror_parameters[self.mirror_channel]["opt_signalchannel"], self.mirror_parameters[self.mirror_channel]["opt_averaging_time"]) + mirror_channel=6 + signal = self._omny_interferometer_get_signalsample(self.mirror_parameters[mirror_channel]["opt_signalchannel"], self.mirror_parameters[mirror_channel]["opt_averaging_time"]) - if signal > self.mirror_parameters[self.mirror_channel]["opt_signal_stop"]: - print(f"Interferometer signal of axis {self.mirror_parameters[self.mirror_channel]['opt_mirrorname']} is good, no alignment needed.") + if signal > self.mirror_parameters[mirror_channel]["opt_signal_stop"]: + print(f"Interferometer signal of axis {self.mirror_parameters[mirror_channel]['opt_mirrorname']} is good, no alignment needed.") else: - self._omny_interferometer_switch_channel(self.mirror_channel) + self._omny_interferometer_switch_channel(mirror_channel) time.sleep(0.1) - self._omny_interferometer_optimize(self.mirror_channel, 3) - self._omny_interferometer_optimize(self.mirror_channel, 4) - self._omny_interferometer_optimize(self.mirror_channel, 3) - self._omny_interferometer_optimize(self.mirror_channel, 4) + self._omny_interferometer_optimize(mirror_channel, 3) + self._omny_interferometer_optimize(mirror_channel, 4) + self._omny_interferometer_optimize(mirror_channel, 3) + self._omny_interferometer_optimize(mirror_channel, 4) self._omny_interferometer_switch_alloff() self.show_signal_strength_interferometer() - self.mirror_channel=-1 + mirror_channel=-1 + + + + def omny_interferometer_align_incoupling_angle(self): + mirror_channel=1 + signal = self._omny_interferometer_get_signalsample(self.mirror_parameters[mirror_channel]["opt_signalchannel"], self.mirror_parameters[mirror_channel]["opt_averaging_time"]) + + if signal > self.mirror_parameters[mirror_channel]["opt_signal_stop"]: + print(f"Interferometer signal of axis {self.mirror_parameters[mirror_channel]['opt_mirrorname']} is good, no alignment needed.") + else: + self._omny_interferometer_switch_channel(mirror_channel) + time.sleep(0.1) + self._omny_interferometer_optimize(mirror_channel, 3) + self._omny_interferometer_optimize(mirror_channel, 4) + self._omny_interferometer_optimize(mirror_channel, 3) + self._omny_interferometer_optimize(mirror_channel, 4) + self._omny_interferometer_switch_alloff() + self.show_signal_strength_interferometer() + + mirror_channel=-1 + def _omny_interferometer_openloop_steps(self, channel, steps, amplitude): if channel not in range(3,5):