From f359e326104a945ac955aed2f1bba5c6f4e72b95 Mon Sep 17 00:00:00 2001 From: Holler Mirko Date: Mon, 22 Jul 2024 14:16:20 +0200 Subject: [PATCH] continue rt and laser --- csaxs_bec/devices/omny/rt/rt_omny_ophyd.py | 799 +++++++++++++++++++-- 1 file changed, 755 insertions(+), 44 deletions(-) diff --git a/csaxs_bec/devices/omny/rt/rt_omny_ophyd.py b/csaxs_bec/devices/omny/rt/rt_omny_ophyd.py index d42e2d0..60a059d 100644 --- a/csaxs_bec/devices/omny/rt/rt_omny_ophyd.py +++ b/csaxs_bec/devices/omny/rt/rt_omny_ophyd.py @@ -79,8 +79,8 @@ class RtFlomniController(Controller): kind=kind, ) self.tracker_info = {} + self.ssi = {} self._min_scan_buffer_reached = False - self.rt_pid_voltage = None def is_axis_moving(self, axis_Id) -> bool: # this checks that axis is on target @@ -115,9 +115,29 @@ class RtFlomniController(Controller): self.get_axis_by_name("rtz").user_setpoint.setpoint = 0 time.sleep(0.05) + def feedback_get_status_and_ssi(self): + ret = self.socket_put_and_receive("J2") + + # remove trailing \n + ret = ret.split("\n")[0] + + status_and_ssi_values = [float(val) for val in ret.split(",")] + self.ssi = { + "feedback_error": status_and_ssi_values[0], + "ssi_1": status_and_ssi_values[1], + "ssi_2": status_and_ssi_values[2], + "ssi_3": status_and_ssi_values[3], + "ssi_4": status_and_ssi_values[4], + "ssi_5": status_and_ssi_values[5], + } + + + + def feedback_is_running(self) -> bool: - status = int(float(self.socket_put_and_receive("l2").strip())) - if status == 1: + self.feedback_get_status_and_ssi() + interferometer_feedback_not_running = int(self.tracker_info["feedback_error"]) + if interferometer_feedback_not_running == 1: return False return True @@ -285,8 +305,8 @@ class RtFlomniController(Controller): def laser_tracker_check_and_wait_for_signalstrength(self): #first check on target self.laser_tracker_wait_on_target(self) - - signal = self.read_ssi_interferometer(3) + self.feedback_get_status_and_ssi() + signal = self.ssi["ssi_3"] rtx = self.get_device_manager().devices.rtx min_signal = rtx.user_parameter.get("min_signal") low_signal = rtx.user_parameter.get("low_signal") @@ -297,75 +317,766 @@ class RtFlomniController(Controller): ) wait_counter+=1 time.sleep(1) - signal = self.read_ssi_interferometer(3) - + self.feedback_get_status_and_ssi() + signal = self.ssi["ssi_3"] 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" ) + #todo self.interferometer_align_tracking() - - -########## old code. above is checked for omny - - - - - - - - - - - def laser_tracker_show_all(self): - self.laser_update_tracker_info() + self.feedback_get_status_and_ssi() t = PrettyTable() - t.title = f"Laser Tracker Info" + t.title = f"Laser SSI Info" t.field_names = ["Name", "Value"] - for key, val in self.tracker_info.items(): + for key, val in self.ssi.items(): t.add_row([key, val]) print(t) def laser_tracker_galil_enable(self): - ftrackz_con = self.get_device_manager().devices.ftrackz.obj.controller - ftrackz_con.socket_put_confirmed("tracken=1") - ftrackz_con.socket_put_confirmed("trackyct=0") - ftrackz_con.socket_put_confirmed("trackzct=0") - ftrackz_con.socket_put_confirmed("XQ#Tracker") + otracky_con = self.get_device_manager().devices.otracky.obj.controller + otracky_con.socket_put_confirmed("tracken=1") + otracky_con.socket_put_confirmed("trackyct=0") + otracky_con.socket_put_confirmed("trackzct=0") + def laser_tracker_galil_disable(self): + otracky_con = self.get_device_manager().devices.otracky.obj.controller + otracky_con.socket_put_confirmed("tracken=0") - def slew_rate_limiters_on_target(self) -> bool: - ret = int(float(self.socket_put_and_receive("y").strip())) - if ret == 3: - return True - return False - - def pid_y(self) -> float: - ret = float(self.socket_put_and_receive("G").strip()) - return ret - - def read_ssi_interferometer(self, axis_number): - val = float(self.socket_put_and_receive(f"j{axis_number}").strip()) - return val - - + def laser_tracker_galil_status(self): + otracky_con = self.get_device_manager().devices.otracky.obj.controller + if bool(float(otracky_con.socket_put_and_receive("MGtracken").strip())) == 0: + print("Tracking in the Galil Controller is disabled.") + print("Use laser_tracker_galil_enable to enable.\n") + return(0) + else: + print("Tracking in the Galil Controller is enabled.") + trackyct=bool(float(otracky_con.socket_put_and_receive("MGtrackyct").strip())) + trackzct=bool(float(otracky_con.socket_put_and_receive("MGtrackzct").strip())) + print(f"Galil Trackcounters y={trackyct}, z={trackzct}") def show_signal_strength_interferometer(self): + self.feedback_get_status_and_ssi() t = PrettyTable() t.title = f"Interferometer signal strength" t.field_names = ["Axis", "Value"] for i in range(4): t.add_row([i, self.read_ssi_interferometer(i)]) print(t) +########## old code. above is checked for omny + + +def _omny_interferometer_openloop_steps(channel, steps, amplitude) '{ +_smar_rt_move_openloop_steps(0,channel,steps,amplitude) +printf("Channel %d, steps %d, Amplitude %d ",channel,steps,amplitude) +sleep(0.01) +while(_smar_rt_is_stepping_open_loop(0,channel)) { + sleep(0.002) +} +}' + + +def _omny_interferometer_optimize(channel) '{ + +global _omny_interferometer_opt_signalchannel +global _omny_interferometer_opt_mirrorname +global _omny_interferometer_opt_averaging_time +global _omny_interferometer_opt_steps1_pos +global _omny_interferometer_opt_steps1_neg +global _omny_interferometer_opt_steps2_pos +global _omny_interferometer_opt_steps2_neg +global _omny_interferometer_opt_signal_stop +global _omny_interferometer_opt_signal_min_begin +global _omny_interferometer_opt_step_divider +global _omny_interferometer_opt_amplitude1_pos +global _omny_interferometer_opt_amplitude1_neg +global _omny_interferometer_opt_amplitude2_pos +global _omny_interferometer_opt_amplitude2_neg + +if (channel != 3 && channel != 4) { + printf("invalid channel number %d.\n", channel) + exit +} + +local previous_signal +local current_sample +local direction +local cycle_counter +local cycle_max +local reversal_counter +local reversal_max +local steps_pos +local steps_neg +local _omny_interferometer_opt_amplitude_pos +local _omny_interferometer_opt_amplitude_neg + + +if (channel == 3) { + steps_pos = _omny_interferometer_opt_steps1_pos + steps_neg = _omny_interferometer_opt_steps1_neg + _omny_interferometer_opt_amplitude_pos = _omny_interferometer_opt_amplitude1_pos + _omny_interferometer_opt_amplitude_neg = _omny_interferometer_opt_amplitude1_neg +} + +if (channel == 4) { + steps_pos = _omny_interferometer_opt_steps2_pos + steps_neg = _omny_interferometer_opt_steps2_neg + _omny_interferometer_opt_amplitude_pos = _omny_interferometer_opt_amplitude2_pos + _omny_interferometer_opt_amplitude_neg = _omny_interferometer_opt_amplitude2_neg +} + + +previous_signal=_omny_interferometer_get_signalsample() + +if (previous_signal<_omny_interferometer_opt_signal_min_begin) { + printf("Minimum signal of axis \"%s\" to start alignment not present. Aborting.\n", _omny_interferometer_opt_mirrorname) + exit +} + +if (previous_signal>_omny_interferometer_opt_signal_stop) { + printf("Interferometer signal of axis \"%s\" is good, no alignment needed anymore.\n", _omny_interferometer_opt_mirrorname) +} +else { + +direction = 1 +cycle_counter=0 +cycle_max=20 +reversal_counter=0 +reversal_max=4 + +while(_omny_interferometer_ssi[_omny_interferometer_opt_signalchannel]<_omny_interferometer_opt_signal_stop && cycle_counter0) { + _omny_interferometer_openloop_steps(channel, steps_pos,_omny_interferometer_opt_amplitude_pos) + printf("Aligning axis \"%s\". target: %d, current %d, step %d.\r", _omny_interferometer_opt_mirrorname, _omny_interferometer_opt_signal_stop, previous_signal, steps_pos) + } + else { + _omny_interferometer_openloop_steps(channel, -steps_neg,_omny_interferometer_opt_amplitude_neg) + printf("Aligning axis \"%s\". target: %d, current %d, step %d.\r", _omny_interferometer_opt_mirrorname, _omny_interferometer_opt_signal_stop, previous_signal, -steps_neg) + } + current_sample = _omny_interferometer_get_signalsample() + if (previous_signal>current_sample) { +# if (direction<0||cycle_counter>1) { + 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++ + } + previous_signal=current_sample + cycle_counter++ +} +printf("Finished aligning axis \"%s\". target: %d, current %d.\n", _omny_interferometer_opt_mirrorname, _omny_interferometer_opt_signal_stop, previous_signal) + +} +}' + +constant _omny_interferometer_switch_server_and_port_name "mpc1887:3335" + +#debug options +constant _omny_interferometer_switch_debug_put_and_receive 0x0001 +constant _omny_interferometer_switch_debug_verbose 0x8000 + +# ---------------------------------------------------------------------- +def _omny_interferometer_switch_put(command_str) '{ + + # send a command to the omnyscan server, exit upon failure, return upon success + if (sock_put(_omny_interferometer_switch_server_and_port_name,sprintf("%s\r",command_str)) < 1) { + printf("_omny_interferometer_switch_put(\"%s\"): could not send the command to %s\n",\ + command_str,_omny_interferometer_switch_server_and_port_name) + exit + } +}' + + +# -------------omicreturnvalue--------------------------------------------------------- +def _omny_interferometer_switch_put_and_receive(command_str) '{ + local ret_str + + # send a command to the omnyscan server, exit upon failure + _omny_interferometer_switch_put(command_str) + + # read a reply from the omnyscan server, exit upon failure + ret_str = "" + ret_str = sock_get(_omny_interferometer_switch_server_and_port_name) + if (ret_str == "") { + printf("_omny_interferometer_switch_put_and_receive(\"%s\"): did not receive a return string upon sending the command to %s\n",\ + command_str,_omny_interferometer_switch_server_and_port_name) + exit + } + + # return the string upon success + return(ret_str) +}' + + +# ---------------------------------------------------------------------- +def _omny_interferometer_switch_open_socket() '{ + # open a socket connection to the laser interferometer server + if (!sock_par(_omny_interferometer_switch_server_and_port_name,"connect")) { + printf("$0 : error upon opening a socket connection to %s\n",_omny_interferometer_switch_server_and_port_name) + exit + } + printf("A socket connection to %s has been established.\n",_omny_interferometer_switch_server_and_port_name) +}' + + + +# ---------------------------------------------------------------------- +def _omny_interferometer_switch_flush_socket() '{ + # flush pending input from the socket connection to the server + sock_par(_omny_interferometer_switch_server_and_port_name,"flush") +}' + + + +# ---------------------------------------------------------------------- +def _omny_interferometer_switch_close_socket() '{ + sock_par(_omny_interferometer_switch_server_and_port_name,"close") + printf("The socket connection to %s has been closed.\n",_omny_interferometer_switch_server_and_port_name) +}' + + + +# ---------------------------------------------------------------------- +def _omny_interferometer_switch_connect '{ + global _omny_interferometer_switch_enabled + + # open a socket connection + _omny_interferometer_switch_open_socket() + + _omny_interferometer_switch_put("?000") + sleep(1) + _omny_interferometer_switch_flush_socket( ) + +}' + + +# ---------------------------------------------------------------------- +def _omny_interferometer_switch_disconnect '{ + global _omny_interferometer_switch_enabled + + _omny_interferometer_switch_close_socket() + +}' + +# ---------------------------------------------------------------------- +def _omny_interferometer_switch_LED_on '{ + global _omny_interferometer_switch_enabled + + _omny_interferometer_switch_put_and_receive("\!00S01") + +}' + +# ---------------------------------------------------------------------- +def _omny_interferometer_switch_alloff '{ + global _omny_interferometer_switch_enabled + #switch all off + _omny_interferometer_switch_put_and_receive("\!0020000") + #check all off + if ("_0000\r" != _omny_interferometer_switch_put_and_receive("?002")) + { + printf ("Not all channels switched off. Aborting.\n") + exit + } + #LED OFF + _omny_interferometer_switch_put_and_receive("\!00S00") +}' + +# ---------------------------------------------------------------------- +def _omny_interferometer_switch_channel(channel) '{ + global _omny_interferometer_switch_enabled + _omny_interferometer_switch_alloff + sleep(0.1) + if (channel == 1) #Relais 1 and 2 + if("|0003\r" != _omny_interferometer_switch_put_and_receive("\!0020003")) + {printf("Channel switching failed. Aborting.\n"); exit } + if (channel == 2) #Relais 3 and 4 + if("|000C\r" != _omny_interferometer_switch_put_and_receive("\!002000C")) + {printf("Channel switching failed. Aborting.\n"); exit } + if (channel == 3) #Relais 5 and 6 + if("|0030\r" != _omny_interferometer_switch_put_and_receive("\!0020030")) + {printf("Channel switching failed. Aborting.\n"); exit } + if (channel == 4) #Relais 7 and 8 + if("|00C0\r" != _omny_interferometer_switch_put_and_receive("\!00200C0")) + {printf("Channel switching failed. Aborting.\n"); exit } + if (channel == 5) #Relais 9 and 10 + if("|0300\r" != _omny_interferometer_switch_put_and_receive("\!0020300")) + {printf("Channel switching failed. Aborting.\n"); exit } + if (channel == 6) #Relais 11 and 12 + if("|0C00\r" != _omny_interferometer_switch_put_and_receive("\!0020C00")) + {printf("Channel switching failed. Aborting.\n"); exit } + if (channel == 7) #Relais 13 and 14 + if("|3000\r" != _omny_interferometer_switch_put_and_receive("\!0023000")) + {printf("Channel switching failed. Aborting.\n"); exit } + if (channel == 8) #Relais 7 and 8 SPECIAL CASE use osafzp y signal to align osa y + if("|00C0\r" != _omny_interferometer_switch_put_and_receive("\!00200C0")) + {printf("Channel switching failed. Aborting.\n"); exit } + if (channel == 9) #Relais 15 and 16 + if("|C000\r" != _omny_interferometer_switch_put_and_receive("\!002C000")) + {printf("Channel switching failed. Aborting.\n"); exit } +}' + +def _omny_interferometer_get_signalsample() '{ +global _omny_interferometer_opt_signalchannel +global _omny_interferometer_opt_averaging_time + +#ensure no averaging running currently +_rt_status_feedback() + +#measure first sample +_rt_start_averaging_SSI +sleep(_omny_interferometer_opt_averaging_time) +_rt_status_feedback() +return(_omny_interferometer_ssi[_omny_interferometer_opt_signalchannel]) +}' + +def _omny_interferometer_setup_channel(mirror_channel) '{ +global _omny_interferometer_opt_signalchannel +global _omny_interferometer_opt_mirrorname +global _omny_interferometer_opt_averaging_time +global _omny_interferometer_opt_steps1_pos +global _omny_interferometer_opt_steps1_neg +global _omny_interferometer_opt_steps2_pos +global _omny_interferometer_opt_steps2_neg +global _omny_interferometer_opt_signal_stop +global _omny_interferometer_opt_signal_min_begin +global _omny_interferometer_opt_step_divider +global _omny_interferometer_opt_amplitude1_pos +global _omny_interferometer_opt_amplitude1_neg +global _omny_interferometer_opt_amplitude2_pos +global _omny_interferometer_opt_amplitude2_neg + +#default +_omny_interferometer_opt_amplitude1_pos=2500 +_omny_interferometer_opt_amplitude1_neg=2500 +_omny_interferometer_opt_amplitude2_pos=2500 +_omny_interferometer_opt_amplitude2_neg=2500 + + +##################################### +#incoupling of angle interferometer +##################################### +if(mirror_channel==1) + { + _omny_interferometer_opt_signalchannel = 4 + _omny_interferometer_opt_mirrorname = "Inc Angle" + _omny_interferometer_opt_averaging_time = 0.1 + _omny_interferometer_opt_steps1_pos = 1 + _omny_interferometer_opt_steps1_neg = 1 + _omny_interferometer_opt_steps2_pos = 10 + _omny_interferometer_opt_steps2_neg = 10 + _omny_interferometer_opt_signal_stop = 2400 + _omny_interferometer_opt_signal_min_begin = 1000 + _omny_interferometer_opt_step_divider = 1 + _omny_interferometer_opt_amplitude1_pos=2000 + _omny_interferometer_opt_amplitude1_neg=2000 + _omny_interferometer_opt_amplitude2_pos=2000 + _omny_interferometer_opt_amplitude2_neg=2000 + } +##################################### +#incoupling of ST OSA Y +##################################### +if(mirror_channel==2) + { + _omny_interferometer_opt_signalchannel = 1 + _omny_interferometer_opt_mirrorname = "Inc ST OSA Y" + _omny_interferometer_opt_averaging_time = 0.1 + _omny_interferometer_opt_steps1_pos = 1 + _omny_interferometer_opt_steps1_neg = 1 + _omny_interferometer_opt_steps2_pos = 1 + _omny_interferometer_opt_steps2_neg = 1 + _omny_interferometer_opt_signal_stop = 5000 + _omny_interferometer_opt_signal_min_begin = 2000 + _omny_interferometer_opt_step_divider = 1 + _omny_interferometer_opt_amplitude1_pos=2000 + _omny_interferometer_opt_amplitude1_neg=2000 + _omny_interferometer_opt_amplitude2_pos=2000 + _omny_interferometer_opt_amplitude2_neg=2000 + } +##################################### +#incoupling of OSA FZP Y +##################################### +if(mirror_channel==3) + { + _omny_interferometer_opt_signalchannel = 0 + _omny_interferometer_opt_mirrorname = "Inc OSA FZP Y" + _omny_interferometer_opt_averaging_time = 0.25 + _omny_interferometer_opt_steps1_pos = 1 + _omny_interferometer_opt_steps1_neg = 2 + _omny_interferometer_opt_steps2_pos = 1 + _omny_interferometer_opt_steps2_neg = 3 + _omny_interferometer_opt_signal_stop = 7200 + _omny_interferometer_opt_signal_min_begin = 3000 + _omny_interferometer_opt_step_divider = 1 + _omny_interferometer_opt_amplitude1_pos=2500 + _omny_interferometer_opt_amplitude1_neg=2500 + _omny_interferometer_opt_amplitude2_pos=2500 + _omny_interferometer_opt_amplitude2_neg=2500 + } +##################################### +#OSA Y +##################################### +if(mirror_channel==4) + { + _omny_interferometer_opt_signalchannel = 1 + _omny_interferometer_opt_mirrorname = "OSA Y" + _omny_interferometer_opt_averaging_time = 0.1 + _omny_interferometer_opt_steps1_pos = 1 + _omny_interferometer_opt_steps1_neg = 1 + _omny_interferometer_opt_steps2_pos = 1 + _omny_interferometer_opt_steps2_neg = 1 + _omny_interferometer_opt_signal_stop = 5000 + _omny_interferometer_opt_signal_min_begin = 2000 + _omny_interferometer_opt_step_divider = 1 + _omny_interferometer_opt_amplitude1_pos=3000 + _omny_interferometer_opt_amplitude1_neg=3000 + _omny_interferometer_opt_amplitude2_pos=3000 + _omny_interferometer_opt_amplitude2_neg=3000 + } +##################################### +#FZP Y +##################################### +if(mirror_channel==5) + { + _omny_interferometer_opt_signalchannel = 0 + _omny_interferometer_opt_mirrorname = "FZP Y" + _omny_interferometer_opt_averaging_time = 0.2 + _omny_interferometer_opt_steps1_pos = 6 + _omny_interferometer_opt_steps1_neg = 6 + _omny_interferometer_opt_steps2_pos = 8 + _omny_interferometer_opt_steps2_neg = 4 + _omny_interferometer_opt_signal_stop = 8000 + _omny_interferometer_opt_signal_min_begin = 3000 + _omny_interferometer_opt_step_divider = 1 + _omny_interferometer_opt_amplitude1_pos=3000 + _omny_interferometer_opt_amplitude1_neg=3000 + _omny_interferometer_opt_amplitude2_pos=3000 + _omny_interferometer_opt_amplitude2_neg=3000 + } +##################################### +#OSA X +##################################### +if(mirror_channel==6) + { + if (!_laser_tracker_check_on_target()) { + sleep(5) + } + + if (_laser_tracker_check_on_target()) { + _omny_interferometer_opt_signalchannel = 3 + _omny_interferometer_opt_mirrorname = "OSA X" + _omny_interferometer_opt_averaging_time = 0.2 + _omny_interferometer_opt_steps1_pos = 2 + _omny_interferometer_opt_steps1_neg = 1 + _omny_interferometer_opt_steps2_pos = 1 + _omny_interferometer_opt_steps2_neg = 1 +# _omny_interferometer_opt_signal_stop = 9000 + _omny_interferometer_opt_signal_stop = 8850 + _omny_interferometer_opt_signal_min_begin = 3000 + _omny_interferometer_opt_step_divider = 1 + _omny_interferometer_opt_amplitude1_pos=3000 + _omny_interferometer_opt_amplitude1_neg=3000 + _omny_interferometer_opt_amplitude2_pos=3700 + _omny_interferometer_opt_amplitude2_neg=2500 + } + else { + text_bf + printf("Tracker is not on target! Not aligning!\n") + text_non_bf + _omny_interferometer_opt_signalchannel = -1 + _omny_interferometer_opt_steps1_pos = 0 + _omny_interferometer_opt_steps1_neg = 0 + _omny_interferometer_opt_steps2_pos = 0 + _omny_interferometer_opt_steps2_neg = 0 + } + } +##################################### +#FZP Y +##################################### +if(mirror_channel==7) + { + _omny_interferometer_opt_signalchannel = 2 + _omny_interferometer_opt_mirrorname = "FZP X" + _omny_interferometer_opt_averaging_time = 0.2 + _omny_interferometer_opt_steps1_pos = 4 + _omny_interferometer_opt_steps1_neg = 4 + _omny_interferometer_opt_steps2_pos = 4 + _omny_interferometer_opt_steps2_neg = 4 + _omny_interferometer_opt_signal_stop = 8000 + _omny_interferometer_opt_signal_min_begin = 4000 + _omny_interferometer_opt_step_divider = 1 + _omny_interferometer_opt_amplitude1_pos=2500 + _omny_interferometer_opt_amplitude1_neg=2500 + _omny_interferometer_opt_amplitude2_pos=2500 + _omny_interferometer_opt_amplitude2_neg=2500 + } +##################################### +#OSA Y +##################################### +if(mirror_channel==8) + { + _omny_interferometer_opt_signalchannel = 0 + _omny_interferometer_opt_mirrorname = "OSA Y USING SIGNAL OSA FZP" + _omny_interferometer_opt_averaging_time = 0.2 + _omny_interferometer_opt_steps1_pos = 1 + _omny_interferometer_opt_steps1_neg = 1 + _omny_interferometer_opt_steps2_pos = 1 + _omny_interferometer_opt_steps2_neg = 1 + _omny_interferometer_opt_signal_stop = 5000 + _omny_interferometer_opt_signal_min_begin = 2000 + _omny_interferometer_opt_step_divider = 1 + _omny_interferometer_opt_amplitude1_pos=3000 + _omny_interferometer_opt_amplitude1_neg=3000 + _omny_interferometer_opt_amplitude2_pos=3000 + _omny_interferometer_opt_amplitude2_neg=3000 + } +if(mirror_channel<1 || mirror_channel>8) + { + _omny_interferometer_opt_signalchannel = -1 + _omny_interferometer_opt_mirrorname = "none" + } +}' + +def _omny_interferometer_channel_is_selected(channel) '{ +if(channel == -1) { + printf("Sorry, no channel is selected. Use numbers to select.\n") + printf("1: Incoupling angle interferometer\n") + return(-1) +} +else +{ + return(1) +} +}' + +def _omny_interferometer_tweak '{ +global _omny_interferometer_opt_signalchannel +global _omny_interferometer_opt_mirrorname +local _key1 +local _mirror_channel +_mirror_channel=-1 + +global _omny_interferometer_opt_steps1_pos +global _omny_interferometer_opt_steps1_neg +global _omny_interferometer_opt_steps2_pos +global _omny_interferometer_opt_steps2_neg +global _omny_interferometer_opt_amplitude1_pos +global _omny_interferometer_opt_amplitude1_neg +global _omny_interferometer_opt_amplitude2_pos +global _omny_interferometer_opt_amplitude2_neg + +printf("This macro allows you to tweak the laser tracker.\n") +#printf("First checking that the tracker is running.\n") +global _rt_enabled +if(!_rt_enabled){ + printf("rt is not enabled. please enable rt and try again.\n") + exit + } + + + + # loop until stopped by pressing ESC or CTRL-C + _key1 = 0 + printf("Ready to tweak the interferometer. Press q to quit.\n") + printf("The arrows adjust directions.\n") + printf("Numbers select the mirror aligner.\n") + + local gotkey + while ((_key1 != 27) && (_key1 != asc("q")) && (_key1 != asc("Q"))) { + gotkey=0 + _key1 = asc(input(-1)) + if (_key1 == _key_esc) { + _key1 = _get_esc_key() + } + + if (_key1 == _key_left) { + if(_omny_interferometer_channel_is_selected(_mirror_channel)==1) + _omny_interferometer_openloop_steps(3, _omny_interferometer_opt_steps1_pos,_omny_interferometer_opt_amplitude1_pos) + gotkey=1 + } + + if (_key1 == _key_right) { + if(_omny_interferometer_channel_is_selected(_mirror_channel)==1) + _omny_interferometer_openloop_steps(3, -_omny_interferometer_opt_steps1_neg,_omny_interferometer_opt_amplitude1_neg) + gotkey=1 + } + + if (_key1 == _key_down) { + if(_omny_interferometer_channel_is_selected(_mirror_channel)==1) + _omny_interferometer_openloop_steps(4, _omny_interferometer_opt_steps2_pos,_omny_interferometer_opt_amplitude2_pos) + gotkey=1 + } + + if (_key1 == _key_up) { + if(_omny_interferometer_channel_is_selected(_mirror_channel)==1) + _omny_interferometer_openloop_steps(4, -_omny_interferometer_opt_steps2_neg,_omny_interferometer_opt_amplitude2_neg) + gotkey=1 + } + + if (_key1 == asc("1")) { + _mirror_channel=1 + gotkey=1 + } + if (_key1 == asc("2")) { + _mirror_channel=2 + gotkey=1 + } + if (_key1 == asc("3")) { + _mirror_channel=3 + gotkey=1 + } + if (_key1 == asc("4")) { + _mirror_channel=4 + gotkey=1 + } + if (_key1 == asc("5")) { + _mirror_channel=5 + gotkey=1 + } + if (_key1 == asc("6")) { + _mirror_channel=6 + gotkey=1 + } + if (_key1 == asc("7")) { + _mirror_channel=7 + gotkey=1 + } + if (_key1 == asc("8")) { + _mirror_channel=8 + gotkey=1 + } + if (_key1 >= asc("1") && _key1 <= asc("8")) { + _omny_interferometer_setup_channel(_mirror_channel) + _omny_interferometer_switch_channel(_mirror_channel) + } + + if (_key1 == asc("+")) { + printf("Increasing voltage amplitudes by 100.\n") + _omny_interferometer_opt_amplitude1_pos=_omny_interferometer_opt_amplitude1_pos+100 + _omny_interferometer_opt_amplitude1_neg=_omny_interferometer_opt_amplitude1_neg+100 + _omny_interferometer_opt_amplitude2_pos=_omny_interferometer_opt_amplitude2_pos+100 + _omny_interferometer_opt_amplitude2_neg=_omny_interferometer_opt_amplitude2_neg+100 + } + if (_key1 == asc("-")) { + printf("Decreasing voltage amplitudes by 100.\n") + _omny_interferometer_opt_amplitude1_pos=_omny_interferometer_opt_amplitude1_pos-100 + _omny_interferometer_opt_amplitude1_neg=_omny_interferometer_opt_amplitude1_neg-100 + _omny_interferometer_opt_amplitude2_pos=_omny_interferometer_opt_amplitude2_pos-100 + _omny_interferometer_opt_amplitude2_neg=_omny_interferometer_opt_amplitude2_neg-100 + } + + if (_key1 == asc("a")) { + if(_omny_interferometer_channel_is_selected(_mirror_channel)==1) { + _omny_interferometer_optimize(3) + _omny_interferometer_optimize(4) + _omny_interferometer_optimize(3) + _omny_interferometer_optimize(4) + } + } + + + if(_omny_interferometer_opt_amplitude1_pos<1) + _omny_interferometer_opt_amplitude1_pos=100 + if(_omny_interferometer_opt_amplitude1_neg<1) + _omny_interferometer_opt_amplitude1_neg=100 + if(_omny_interferometer_opt_amplitude2_pos<1) + _omny_interferometer_opt_amplitude2_pos=100 + if(_omny_interferometer_opt_amplitude2_neg<1) + _omny_interferometer_opt_amplitude2_neg=100 + + if(_omny_interferometer_opt_amplitude1_pos>4090) + _omny_interferometer_opt_amplitude1_pos=4090 + if(_omny_interferometer_opt_amplitude1_neg>4090) + _omny_interferometer_opt_amplitude1_neg=4090 + if(_omny_interferometer_opt_amplitude2_pos>4090) + _omny_interferometer_opt_amplitude2_pos=4090 + if(_omny_interferometer_opt_amplitude2_neg>4090) + _omny_interferometer_opt_amplitude2_neg=4090 + + + sleep(0.01) + if (gotkey==1) + if(_omny_interferometer_channel_is_selected(_mirror_channel)==1) + printf("Channel %d - %s - Autostop %d - Signal %d\n",_mirror_channel,_omny_interferometer_opt_mirrorname,_omny_interferometer_opt_signal_stop,_omny_interferometer_get_signalsample()) + } +_omny_interferometer_switch_alloff +rt_show_signalstrength_interferometer +}' + +def _omny_interferometer_align_incoupling_angle '{ + local _mirror_channel + _mirror_channel=1 + + _omny_interferometer_setup_channel(_mirror_channel) + + if (_omny_interferometer_get_signalsample()>_omny_interferometer_opt_signal_stop) { + printf("Interferometer signal of axis \"%s\" is good, no alignment needed.\n", _omny_interferometer_opt_mirrorname) + } + else { + _omny_interferometer_switch_channel(_mirror_channel) + _omny_interferometer_optimize(3) + _omny_interferometer_optimize(4) + _omny_interferometer_optimize(3) + _omny_interferometer_optimize(4) + _omny_interferometer_switch_alloff + rt_show_signalstrength_interferometer + } +}' + +def _omny_interferometer_align_tracking '{ + local _mirror_channel + _mirror_channel=6 + + _omny_interferometer_setup_channel(_mirror_channel) + + if (_omny_interferometer_get_signalsample()>_omny_interferometer_opt_signal_stop) { + printf("Interferometer signal of axis \"%s\" is good, no alignment needed.\n", _omny_interferometer_opt_mirrorname) + } + else { + _omny_interferometer_switch_channel(_mirror_channel) + _omny_interferometer_optimize(4) + _omny_interferometer_optimize(4) + _omny_interferometer_optimize(3) + _omny_interferometer_optimize(4) + _omny_interferometer_optimize(3) + _omny_interferometer_switch_alloff + rt_show_signalstrength_interferometer + } +}' + + + + + + + + + + + + +########## below code from flomni + + def _get_signals_from_table(self, return_table) -> dict: self.average_stdeviations_x_st_fzp += float(return_table[4])