scexao-org / camstack

EDT cam stack - python + minimal imgtake.c
5 stars 2 forks source link

DCam get_tint and set_tint spurious errors #1

Closed mileslucas closed 1 year ago

mileslucas commented 1 year ago

Errors occur sometimes when using dcam-based cams. I've noticed it specifically for get_tint and set_tint, but haven't tested others.

MWE:

from camstack.pyro_keys import MILES_ORCA
from swmain.network.pyroclient import connect

cam = connect(MILES_ORCA)
while True: # because it only happens sometimes
    cam.get_tint()
 +--- This exception occured remotely (Pyro) - Remote traceback:
 | Traceback (most recent call last):
 |   File "/home/alala/anaconda3/lib/python3.8/site-packages/Pyro4/core.py", line 1424, in handleRequest
 |     data = method(*vargs, **kwargs)  # this is the actual method call to the Pyro object
 |   File "/home/alala/src/camstack/camstack/cams/dcamcam.py", line 249, in get_tint
 |     val = self._dcam_prm_getvalue('EXPTIME', dcamprop.EProp.EXPOSURETIME)
 |   File "/home/alala/src/camstack/camstack/cams/dcamcam.py", line 129, in _dcam_prm_getvalue
 |     return self._dcam_prm_getmultivalue([fits_key], [dcam_key])[0]
 |   File "/home/alala/src/camstack/camstack/cams/dcamcam.py", line 133, in _dcam_prm_getmultivalue
 |     return self._dcam_prm_setgetmultivalue([0.0] * len(fits_keys),
 |   File "/home/alala/src/camstack/camstack/cams/dcamcam.py", line 173, in _dcam_prm_setgetmultivalue
 |     fb_values = [
 |   File "/home/alala/src/camstack/camstack/cams/dcamcam.py", line 174, in <listcomp>
 |     self.control_shm.get_keywords()[dk] for dk in dcam_string_keys
 | KeyError: '801f0110'
 +--- End of remote traceback
while True: # because it only happens sometimes
    cam.set_tint(0.5)
 +--- This exception occured remotely (Pyro) - Remote traceback:
 | Traceback (most recent call last):
 |   File "/home/alala/anaconda3/lib/python3.8/site-packages/Pyro4/core.py", line 1424, in handleRequest
 |     data = method(*vargs, **kwargs)  # this is the actual method call to the Pyro object
 |   File "/home/alala/src/camstack/camstack/cams/dcamcam.py", line 254, in set_tint
 |     return self._dcam_prm_setvalue(tint, 'EXPTIME',
 |   File "/home/alala/src/camstack/camstack/cams/dcamcam.py", line 121, in _dcam_prm_setvalue
 |     return self._dcam_prm_setmultivalue([value], [fits_key], [dcam_key])[0]
 |   File "/home/alala/src/camstack/camstack/cams/dcamcam.py", line 125, in _dcam_prm_setmultivalue
 |     return self._dcam_prm_setgetmultivalue(values, fits_keys, dcam_keys,
 |   File "/home/alala/src/camstack/camstack/cams/dcamcam.py", line 173, in _dcam_prm_setgetmultivalue
 |     fb_values = [
 |   File "/home/alala/src/camstack/camstack/cams/dcamcam.py", line 174, in <listcomp>
 |     self.control_shm.get_keywords()[dk] for dk in dcam_string_keys
 | KeyError: '001f0110'
 +--- End of remote traceback
DasVinch commented 1 year ago

Fixed (I think) by adding a lock on the [python master shell] <-> [C framegrabber] protocol (which is really just the control_shm shared memory and some ad-hoc signaling) in f03b053758b054f8b79da64ebfc397557c82d8a2.

mileslucas commented 1 year ago

I like your funny words magic cam man 👍🏻