48 fsm = properties.TextVector(name=
'fsm')
49 fsm.add_element(DefText(name=
'state', _value=StateCodes.INITIALIZED.name))
50 self.add_property(fsm)
53 sv = properties.SwitchVector(
55 rule=constants.SwitchRule.ONE_OF_MANY,
56 perm=constants.PropertyPerm.READ_WRITE,
58 sv.add_element(DefSwitch(name=
"idle", _value=constants.SwitchState.ON))
59 sv.add_element(DefSwitch(name=
"SRLoop", _value=constants.SwitchState.OFF))
60 sv.add_element(DefSwitch(name=
"oneshot", _value=constants.SwitchState.OFF))
64 nv = properties.NumberVector(name=
'n_avg')
65 nv.add_element(DefNumber(
66 name=
'current', label=
'Number of frames', format=
'%i',
67 min=1, max=150, step=1, _value=1
69 nv.add_element(DefNumber(
70 name=
'target', label=
'Number of frames', format=
'%i',
71 min=1, max=150, step=1, _value=1
76 nv = properties.NumberVector(name=
'n_jitter')
77 nv.add_element(DefNumber(
78 name=
'current', label=
'Number of frames', format=
'%i',
79 min=1, max=150, step=1, _value=1
81 nv.add_element(DefNumber(
82 name=
'target', label=
'Number of frames', format=
'%i',
83 min=1, max=150, step=1, _value=1
88 nv = properties.NumberVector(name=
'SR_est')
89 nv.add_element(DefNumber(
90 name=
'current', label=
'SR_est', format=
'%i',
91 min=0, max=1, step=0.01, _value=1
96 nv = properties.NumberVector(name=
'SR_EE')
97 nv.add_element(DefNumber(
98 name=
'current', label=
'SR_EE', format=
'%i',
99 min=0, max=1, step=0.01, _value=1
101 self.add_property(nv)
104 nv = properties.NumberVector(name=
'jitter_RMS')
105 nv.add_element(DefNumber(
106 name=
'current', label=
'jitter_RMS', format=
'%i',
107 min=0, max=100, step=0.1, _value=0.0
109 self.add_property(nv)
112 nv = properties.NumberVector(name=
'jitter_x')
113 nv.add_element(DefNumber(
114 name=
'current', label=
'jitter_x', format=
'%i',
115 min=-20, max=20, step=0.1, _value=0.0
117 self.add_property(nv)
120 nv = properties.NumberVector(name=
'jitter_y')
121 nv.add_element(DefNumber(
122 name=
'current', label=
'jitter_y', format=
'%i',
123 min=-20, max=20, step=0.1, _value=0.0
125 self.add_property(nv)
132 self.client.get_properties([
'modwfs'])
134 self.
modRadius = self.client[
'modwfs.modRadius.current']
135 self.log.info(f
"Mod radius is {self.modRadius}")
138 self.log.info(
"Found camera: {:s}".format(self.
config.camera.shmim))
143 indi_client=self.client,
168 self.
labf =
'lab_2000_3ld_ND2.fits'
170 self.
labf =
'lab_3000_2ld_ND2.fits'
172 self.log.exception(
" Not a calibrated mod radius, applying a bogus lab file!")
173 self.
labf =
'lab_2000_3ld_ND2.fits'
177 self.properties[
'fsm'][
'state'] = StateCodes.READY.name
178 self.update_property(self.properties[
'fsm'])
181 target_list = [
'idle',
'SRLoop',
'oneshot']
182 for key
in target_list:
183 if existing_property[key] == constants.SwitchState.ON:
186 if current_state
not in new_message:
188 for key
in target_list:
189 existing_property[key] = constants.SwitchState.OFF
190 if key
in new_message:
191 existing_property[key] = new_message[key]
195 self.properties[
'fsm'][
'state'] = StateCodes.READY.name
197 self.log.debug(
'State changed to idle')
198 elif key ==
'SRLoop':
199 self.
_state = States.CLOSED_LOOP
201 self.properties[
'fsm'][
'state'] = StateCodes.OPERATING.name
202 self.log.debug(
'State changed to continuous')
203 elif key ==
'oneshot':
204 self.
_state = States.ONESHOT
206 self.properties[
'fsm'][
'state'] = StateCodes.OPERATING.name
207 self.log.debug(
'State changed to oneshot')
209 self.update_property(existing_property)
210 self.update_property(self.properties[
'fsm'])