From dd2f20fba45368d76ae28c55be21e325a3564ae9 Mon Sep 17 00:00:00 2001 From: Holler Mirko Date: Tue, 6 Aug 2024 15:31:58 +0200 Subject: [PATCH] interferometer tuning added to rt client --- .../plugins/omny/omny_rt.py | 875 +++++++----------- 1 file changed, 325 insertions(+), 550 deletions(-) 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 2bf07b1..97ef4cf 100644 --- a/csaxs_bec/bec_ipython_client/plugins/omny/omny_rt.py +++ b/csaxs_bec/bec_ipython_client/plugins/omny/omny_rt.py @@ -13,572 +13,347 @@ class OMNY_rt_clientError(Exception): pass class OMNY_rt_client: - @staticmethod - def _get_user_param_safe(device, var): - param = dev[device].user_parameter - if not param or param.get(var) is None: - raise OMNY_rt_clientError(f"Device {device} has no user parameter definition for {var}.") - return param.get(var) + def __init__(self): + self.mirror_channel = -1 + self.mirror_amplitutde_increase=0 + self.mirror_parameters = { + 1: { + "opt_signalchannel": 4, + "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": 1, + "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": 0, + "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": 1, + "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": 0, + "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": 3, + "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": 2, + "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": 0, + "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, + } + } - -def start_tweak_cursor(): - curses.wrapper(_tweak_cursor) - -def _tweak_cursor(stdscr): - # Set up the curses environment - #curses.curs_set(0) # Hide the cursor - stdscr.nodelay(True) # Do not wait for user input - stdscr.timeout(100) # Refresh every 100ms - - while True: - key = stdscr.getch() - - if key == ord('q'): - break - elif key == ord('1'): - print("1 pushed\n") - elif key == ord('1'): - print("2 pushed\n") - elif key == curses.KEY_UP: - print("arrow key up pushed\n") - elif key == curses.KEY_DOWN: - print("arrow key down pushed\n") - elif key == curses.KEY_LEFT: - print("arrow key left pushed\n") - elif key == curses.KEY_RIGHT: - print("arrow key right pushed\n") - - -# 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) - -# } -# }' + @staticmethod + def _get_user_param_safe(device, var): + param = dev[device].user_parameter + if not param or param.get(var) is None: + raise OMNY_rt_clientError(f"Device {device} has no user parameter definition for {var}.") + return param.get(var) -# 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 + def _omny_interferometer_openloop_steps(self, 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) -# ##################################### -# #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) -# } + def _omny_interferometer_optimize(self, mirror_channel, channel): + #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"]) + + + if previous_signal < self.mirror_parameters[mirror_channel]["opt_signal_min_begin"]: + raise OMNY_rt_clientError(f"Minimum signal of axis {self.mirror_parameters[mirror_channel]["opt_mirrorname"]} to start alignment not present.") + + elif previous_signal > self.mirror_parameters[mirror_channel]["opt_signal_stop"]: + print(f"Interferometer signal of axis {self.mirror_parameters[mirror_channel]["opt_mirrorname"]} is good.") + + 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"]) + + while current_sample < self.mirror_parameters[mirror_channel]["opt_signal_stop"] and cycle_counter0: + self._omny_interferometer_openloop_steps(channel, steps_pos, self.mirror_parameters[mirror_channel]["opt_amplitude_pos"]) + else: + self._omny_interferometer_openloop_steps(channel, steps_neg, self.mirror_parameters[mirror_channel]["opt_amplitude_neg"]) + 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"]) + 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"Finished aligning axis {self.mirror_parameters[mirror_channel]["opt_mirrorname"]}. Target: {self.mirror_parameters[mirror_channel]["opt_signal_stop"]}, current {current_sample}") + + def omny_tweak_interferometer(self): + curses.wrapper(self._tweak_interferometer) + + def _tweak_interferometer(self, stdscr): + # global _omny_interferometer_opt_signalchannel + # global _omny_interferometer_opt_mirrorname + self.mirror_channel=-1 + + # Set up the curses environment + #curses.curs_set(0) # Hide the cursor + stdscr.nodelay(True) # Do not wait for user input + stdscr.timeout(100) # Refresh every 100ms + + print("Ready to tweak the interferometer. Press q to quit.") + print("The arrows adjust directions.") + print("Numbers select the mirror aligner.") + + while True: + key = stdscr.getch() + -# 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" -# } -# }' + if key == ord('q'): + self.mirror_amplitutde_increase=0 + self.mirror_channel=-1 + break -# 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) -# } -# }' + if key == curses.KEY_LEFT: + if self.mirror_channel != -1: + self._omny_interferometer_openloop_steps(self.mirror_channel, self.mirror_parameters[self.mirror_channel]["opt_steps1_pos"], self.mirror_parameters[self.mirror_channel]["opt_amplitude1_pos"]+self.mirror_amplitutde_increase) -# def _omny_interferometer_tweak '{ -# global _omny_interferometer_opt_signalchannel -# global _omny_interferometer_opt_mirrorname -# local _key1 -# local _mirror_channel -# _mirror_channel=-1 + elif key == curses.KEY_RIGHT: + if self.mirror_channel != -1: + self._omny_interferometer_openloop_steps(self.mirror_channel, self.mirror_parameters[self.mirror_channel]["opt_steps1_neg"], self.mirror_parameters[self.mirror_channel]["opt_amplitude1_neg"]+self.mirror_amplitutde_increase) -# 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 + elif key == curses.KEY_DOWN: + if self.mirror_channel != -1: + self._omny_interferometer_openloop_steps(self.mirror_channel, self.mirror_parameters[self.mirror_channel]["opt_steps2_pos"], self.mirror_parameters[self.mirror_channel]["opt_amplitude2_pos"]+self.mirror_amplitutde_increase) -# 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 -# } + elif key == curses.KEY_UP: + if self.mirror_channel != -1: + self._omny_interferometer_openloop_steps(self.mirror_channel, self.mirror_parameters[self.mirror_channel]["opt_steps2_neg"], self.mirror_parameters[self.mirror_channel]["opt_amplitude2_neg"]+self.mirror_amplitutde_increase) -# 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) -# } + elif key == ord('1'): + self.mirror_channel = 1 + elif key == ord('2'): + self.mirror_channel = 2 + elif key == ord('3'): + self.mirror_channel = 3 + elif key == ord('4'): + self.mirror_channel = 4 + elif key == ord('5'): + self.mirror_channel = 5 + elif key == ord('6'): + self.mirror_channel = 6 + elif key == ord('7'): + self.mirror_channel = 7 + elif key == ord('8'): + self.mirror_channel = 8 + elif key == ord('+'): + print("Increasing voltage amplitudes by 100.") + self.mirror_amplitutde_increase+=100 + elif key == ord('-'): + print("Decreasing voltage amplitudes by 100.") + self.mirror_amplitutde_increase-=100 + elif key == ord('a'): + if self.mirror_channel != -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) -# 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 key >= ord('1') and key <= ord('8'): + dev.rtx.controller._omny_interferometer_switch_channel(self.mirror_channel) -# 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 -# } -# }' + 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"]) + time.sleep(0.01) + print(f"Channel {self.mirror_channel} - {self.mirror_parameters[self.mirror_channel]['opt_mirrorname']} - Autostop {self.mirror_parameters[self.mirror_channel]['opt_signal_stop']} - Signal {signal}") + + dev.rtx.controller._omny_interferometer_switch_alloff() + self.mirror_channel = -1 + self.mirror_amplitutde_increase = 0 + dev.rtx.controller.show_signal_strength_interferometer() + 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 + + + def omny_interferometer_align_tracking(self): + 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 +