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 ad02b65..c687a23 100644 --- a/csaxs_bec/bec_ipython_client/plugins/omny/omny_rt.py +++ b/csaxs_bec/bec_ipython_client/plugins/omny/omny_rt.py @@ -20,3 +20,538 @@ class OMNYTools: raise ValueError(f"Device {device} has no user parameter definition for {var}.") return param.get(var) + + +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) + +} +}' + + + +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 + } +}' + + + + diff --git a/csaxs_bec/devices/omny/rt/rt_omny_ophyd.py b/csaxs_bec/devices/omny/rt/rt_omny_ophyd.py index 60a059d..0278617 100644 --- a/csaxs_bec/devices/omny/rt/rt_omny_ophyd.py +++ b/csaxs_bec/devices/omny/rt/rt_omny_ophyd.py @@ -2,6 +2,7 @@ import threading import time from typing import List import builtins +import socket import numpy as np from bec_lib import bec_logger, messages @@ -33,8 +34,10 @@ from csaxs_bec.devices.omny.rt.rt_ophyd import ( logger = bec_logger.logger +class RtOMNY_mirror_switchbox_Error(Exception): + pass -class RtFlomniController(Controller): +class RtOMNYController(Controller): _axes_per_controller = 3 USER_ACCESS = [ "socket_put_and_receive", @@ -59,7 +62,7 @@ class RtFlomniController(Controller): def __init__( self, *, - name="RtFlomniController", + name="RtOMNYController", socket_cls=None, socket_host=None, socket_port=None, @@ -81,6 +84,7 @@ class RtFlomniController(Controller): self.tracker_info = {} self.ssi = {} self._min_scan_buffer_reached = False + self.switchbox_socket = socket.socket() def is_axis_moving(self, axis_Id) -> bool: # this checks that axis is on target @@ -188,7 +192,7 @@ class RtFlomniController(Controller): @threadlocked def clear_trajectory_generator(self): self.socket_put("sc") - logger.info("flomni scan stopped and deleted, moving to start position") + logger.info("omny scan stopped and deleted, moving to start position") def feedback_disable(self): self.clear_trajectory_generator() @@ -372,724 +376,104 @@ class RtFlomniController(Controller): 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_switch_open_socket(self): + # open a socket connection to the laser interferometer server + host = "mpc2844.psi.ch" # as both code is running on same pc + port = 3335 # socket server port number + + self.switchbox_socket.connect((host, port)) # connect to the server + + self._omny_interferometer_switch_put_and_receive("?000") + time.sleep(1) -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 -} + def _omny_interferometer_switch_channel(self, channel): + self._omny_interferometer_switch_alloff() + time.sleep(0.1) + if channel == 1: #Relais 1 and 2 + if "|0003\r" != self._omny_interferometer_switch_put_and_receive("\!0020003"): + raise RtOMNY_mirror_switchbox_Error("Channel switching failed.") + elif channel == 2: #Relais 3 and 4 + if "|000C\r" != self._omny_interferometer_switch_put_and_receive("\!002000C"): + raise RtOMNY_mirror_switchbox_Error("Channel switching failed.") + elif channel == 3: #Relais 5 and 6 + if "|0030\r" != self._omny_interferometer_switch_put_and_receive("\!0020030"): + raise RtOMNY_mirror_switchbox_Error("Channel switching failed.") + elif channel == 4: #Relais 7 and 8 + if "|00C0\r" != self._omny_interferometer_switch_put_and_receive("\!00200C0"): + raise RtOMNY_mirror_switchbox_Error("Channel switching failed.") + elif channel == 5: #Relais 9 and 10 + if "|0300\r" != self._omny_interferometer_switch_put_and_receive("\!0020300"): + raise RtOMNY_mirror_switchbox_Error("Channel switching failed.") + elif channel == 6: #Relais 11 and 12 + if "|0C00\r" != self._omny_interferometer_switch_put_and_receive("\!0020C00"): + raise RtOMNY_mirror_switchbox_Error("Channel switching failed.") + elif channel == 7: #Relais 13 and 14 + if "|3000\r" != self._omny_interferometer_switch_put_and_receive("\!0023000"): + raise RtOMNY_mirror_switchbox_Error("Channel switching failed.") + elif channel == 8: #Relais 7 and 8 SPECIAL CASE use osafzp y signal to align osa y + if "|00C0\r" != self._omny_interferometer_switch_put_and_receive("\!00200C0"): + raise RtOMNY_mirror_switchbox_Error("Channel switching failed.") + elif channel == 9: #Relais 15 and 16 + if "|C000\r" != self._omny_interferometer_switch_put_and_receive("\!002C000"): + raise RtOMNY_mirror_switchbox_Error("Channel switching failed.") - -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 _omny_interferometer_switch_put_and_receive(self, command_str: str) -> str: + self.switchbox_socket.send(command_str.encode()) + recv = self.switchbox_socket.recv(1024).decode() + print(f"Sent {command_str} to switchbox and received {recv}") + return recv + + def _omny_interferometer_switch_LED_on(self): + self._omny_interferometer_switch_put_and_receive("\!00S01") + + def _omny_interferometer_switch_alloff(self): + #switch all off + self._omny_interferometer_switch_put_and_receive("\!0020000") + #LED OFF + self._omny_interferometer_switch_put_and_receive("\!00S00") + #check all off + if "_0000\r" != self._omny_interferometer_switch_put_and_receive("?002"): + raise RtOMNY_mirror_switchbox_Error("Not all channels switched off.") + + def _rt_start_averaging_SSI(self): + self.socket_put("J3") + + def _omny_interferometer_get_signalsample(self, channel, averaging_duration): + #channel is string, eg ssi_1 + #ensure no averaging running currently + self.feedback_is_running() + + #measure first sample + self._rt_start_averaging_SSI() + time.sleep(averaging_duration) + self.feedback_is_running() + return self.ssi[channel] def _get_signals_from_table(self, return_table) -> dict: - self.average_stdeviations_x_st_fzp += float(return_table[4]) - self.average_stdeviations_y_st_fzp += float(return_table[7]) + self.average_stdeviations_x_st_fzp += float(return_table[16]) + self.average_stdeviations_y_st_fzp += float(return_table[18]) signals = { - "target_x": {"value": float(return_table[2])}, - "average_x_st_fzp": {"value": float(return_table[3])}, - "stdev_x_st_fzp": {"value": float(return_table[4])}, - "target_y": {"value": float(return_table[5])}, - "average_y_st_fzp": {"value": float(return_table[6])}, - "stdev_y_st_fzp": {"value": float(return_table[7])}, - "average_rotz": {"value": float(return_table[8])}, - "stdev_rotz": {"value": float(return_table[9])}, + "target_x": {"value": float(return_table[3])}, + "average_x_st_osa": {"value": float(return_table[4])}, + "stdev_x_st_osa": {"value": float(return_table[5])}, + "target_y": {"value": float(return_table[6])}, + "average_y_st_osa": {"value": float(return_table[7])}, + "stdev_y_st_osa": {"value": float(return_table[8])}, + "average_x_osa_fzp": {"value": float(return_table[9])}, + "stdev_x_osa_fzp": {"value": float(return_table[10])}, + "average_y_osa_fzp": {"value": float(return_table[11])}, + "stdev_y_osa_fzp": {"value": float(return_table[12])}, + "average_rotz_st": {"value": float(return_table[13])}, + "stdev_rotz_st": {"value": float(return_table[14])}, + "average_x_st_fzp": {"value": float(return_table[15])}, + "stdev_x_st_fzp": {"value": float(return_table[16])}, + "average_y_st_fzp": {"value": float(return_table[17])}, + "stdev_y_st_fzp": {"value": float(return_table[18])}, + "average_stdeviations_x_st_fzp": { "value": self.average_stdeviations_x_st_fzp / (int(return_table[0]) + 1) }, @@ -1098,7 +482,7 @@ def _omny_interferometer_align_tracking '{ }, } return signals - + @threadlocked def start_scan(self): if not self.feedback_is_running(): @@ -1120,6 +504,7 @@ def _omny_interferometer_align_tracking '{ # start a point-by-point scan (for cont scan in flomni it would be "sa") self.socket_put_and_receive("sd") + @retry_once @threadlocked def get_scan_status(self): @@ -1138,6 +523,7 @@ def _omny_interferometer_align_tracking '{ current_position_in_scan = int(float(return_table[2])) return (mode, number_of_positions_planned, current_position_in_scan) + def get_device_manager(self): for axis in self._axis: if hasattr(axis, "device_manager") and axis.device_manager: @@ -1152,7 +538,6 @@ def _omny_interferometer_align_tracking '{ self.average_stdeviations_x_st_fzp = 0 self.average_stdeviations_y_st_fzp = 0 - self.average_lamni_angle = 0 mode, number_of_positions_planned, current_position_in_scan = self.get_scan_status() @@ -1201,14 +586,14 @@ def _omny_interferometer_align_tracking '{ ) logger.info( - "Flomni statistics: Average of all standard deviations: x" + "OMNY statistics: Average of all standard deviations: x" f" {self.average_stdeviations_x_st_fzp/number_of_samples_to_read}, y" f" {self.average_stdeviations_y_st_fzp/number_of_samples_to_read}." ) def publish_device_data(self, signals, point_id): self.get_device_manager().connector.set_and_publish( - MessageEndpoints.device_read("rt_flomni"), + MessageEndpoints.device_read("rt_omny"), messages.DeviceMessage( signals=signals, metadata={"point_id": point_id, **self.readout_metadata} ), @@ -1227,7 +612,7 @@ def _omny_interferometer_align_tracking '{ self.start_readout() -class RtFlomniReadbackSignal(RtReadbackSignal): +class RtOMNYReadbackSignal(RtReadbackSignal): @retry_once @threadlocked def _socket_get(self) -> float: @@ -1246,7 +631,7 @@ class RtFlomniReadbackSignal(RtReadbackSignal): return current_pos -class RtFlomniSetpointSignal(RtSetpointSignal): +class RtOMNYSetpointSignal(RtSetpointSignal): setpoint = 0 @retry_once @@ -1279,16 +664,16 @@ class RtFlomniSetpointSignal(RtSetpointSignal): self.controller.socket_put(f"pa{self.parent.axis_Id_numeric},{target_val:.4f}") -class RtFlomniFeedbackRunning(RtSignalRO): +class RtOMNYFeedbackRunning(RtSignalRO): @threadlocked def _socket_get(self): return int(self.parent.controller.feedback_is_running()) -class RtFlomniMotor(Device, PositionerBase): +class RtOMNYMotor(Device, PositionerBase): USER_ACCESS = ["controller"] - readback = Cpt(RtFlomniReadbackSignal, signal_name="readback", kind="hinted") - user_setpoint = Cpt(RtFlomniSetpointSignal, signal_name="setpoint") + readback = Cpt(RtOMNYReadbackSignal, signal_name="readback", kind="hinted") + user_setpoint = Cpt(RtOMNYSetpointSignal, signal_name="setpoint") high_limit_travel = Cpt(Signal, value=0, kind="omitted") low_limit_travel = Cpt(Signal, value=0, kind="omitted") @@ -1307,7 +692,7 @@ class RtFlomniMotor(Device, PositionerBase): read_attrs=None, configuration_attrs=None, parent=None, - host="mpc2844.psi.ch", + host="mpc3217.psi.ch", port=2222, sign=1, socket_cls=SocketIO, @@ -1317,7 +702,7 @@ class RtFlomniMotor(Device, PositionerBase): ): self.axis_Id = axis_Id self.sign = sign - self.controller = RtFlomniController( + self.controller = RtOMNYController( socket_cls=socket_cls, socket_host=host, socket_port=port ) self.controller.set_axis(axis=self, axis_nr=self.axis_Id_numeric) @@ -1410,7 +795,7 @@ class RtFlomniMotor(Device, PositionerBase): self.user_setpoint.put(position, wait=False) def move_and_finish(): - while not self.controller.slew_rate_limiters_on_target() and not self._stopped: + while not self._stopped: print("motor is moving") val = self.readback.read() self._run_subs(sub_type=self.SUB_READBACK, value=val, timestamp=time.time()) @@ -1472,7 +857,7 @@ class RtFlomniMotor(Device, PositionerBase): if __name__ == "__main__": - rtcontroller = RtFlomniController( + rtcontroller = RtOMNYController( socket_cls=SocketIO, socket_host="mpc2844.psi.ch", socket_port=2222 ) rtcontroller.on()