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']
183 for key
in target_list:
184 if existing_property[key] == constants.SwitchState.ON:
187 if current_state
not in new_message:
189 for key
in target_list:
190 existing_property[key] = constants.SwitchState.OFF
191 if key
in new_message:
192 existing_property[key] = new_message[key]
196 self.properties[
'fsm'][
'state'] = StateCodes.READY.name
198 self.log.debug(
'State changed to idle')
199 elif key ==
'SRLoop':
200 self.
_state = States.CLOSED_LOOP
202 self.properties[
'fsm'][
'state'] = StateCodes.OPERATING.name
203 self.log.debug(
'State changed to continuous')
204 elif key ==
'oneshot':
205 self.
_state = States.ONESHOT
207 self.properties[
'fsm'][
'state'] = StateCodes.OPERATING.name
208 self.log.debug(
'State changed to oneshot')
210 self.update_property(existing_property)
211 self.update_property(self.properties[
'fsm'])