Loading noctua/devices/stx.py +94 −118 Original line number Diff line number Diff line Loading @@ -4,29 +4,6 @@ """ Interface with a SBIG STX camera device Imager Internal External BinX BinX BinX BinY BinY BinY CoolerState CoolerState --- CCDTemperature CCDTemperature --- CCDTemperatureSetpoint --- --- CoolerPower CoolerPower --- CameraXSize CameraXSize CameraXSize CameraYSize CameraYSize CameraYSize ElectronsPerADU ElectronsPerADU ElectronsPerADU FullWellCapacity FullWellCapacity FullWellCapacity AmbientTemperature AmbientTemperature AmbientTemperature MaxADU MaxADU MaxADU MaxBinX MaxBinX MaxBinX MaxBinY MaxBinY MaxBinY StartX StartX StartX StartY StartY StartY NumX NumX NumX NumY NumY NumY PixelSizeX PixelSizeX PixelSizeX PixelSizeY PixelSizeY PixelSizeY """ # System modules Loading Loading @@ -188,11 +165,11 @@ class Camera(STX): """ super().__init__(url) self.sensor = "Imager" self.element = "Imager" def abort(self): """Aborts the current exposure.""" self.put(f"{self.sensor}AbortExposure") self.put(f"{self.element}AbortExposure") def start(self, duration, frametype, datetime=None): """ Loading Loading @@ -222,7 +199,7 @@ class Camera(STX): params = {"Duration": duration, "FrameType": frametype, "DateTime": datetime} self.put(f"{self.sensor}StartExposure", params=params) self.put(f"{self.element}StartExposure", params=params) def download(self, filepath=temp_fits): Loading @@ -238,7 +215,7 @@ class Camera(STX): self._wait_if_needed() log.debug(f"Getting original FITS") res = requests.get(f"{self.addr}/{self.sensor}.FIT") res = requests.get(f"{self.addr}/{self.element}.FIT") log.debug(f"Got original FITS") with open(filepath, 'wb') as f: Loading Loading @@ -278,14 +255,14 @@ class Camera(STX): "NumY": height } self.put(f"{self.sensor}SetSettings", params=params) self.put(f"{self.element}SetSettings", params=params) def full_frame(self): """Sets the camera to use the full sensor area.""" params = ["CameraXSize", "CameraYSize"] try: cam_x, cam_y = self.get(f"{self.sensor}GetSettings", params=params) cam_x, cam_y = self.get(f"{self.element}GetSettings", params=params) except ValueError as e: msg = f"Device exception: {e}" log.error(msg) Loading @@ -301,7 +278,7 @@ class Camera(STX): params = ["CameraXSize", "CameraYSize"] try: cam_x, cam_y = self.get(f"{self.sensor}GetSettings", params=params) cam_x, cam_y = self.get(f"{self.element}GetSettings", params=params) except ValueError as e: msg = f"Device exception: {e}" log.error(msg) Loading @@ -322,7 +299,7 @@ class Camera(STX): params = ["CameraXSize", "CameraYSize"] try: cam_x, cam_y = self.get(f"{self.sensor}GetSettings", params=params) cam_x, cam_y = self.get(f"{self.element}GetSettings", params=params) except ValueError as e: msg = f"Device exception: {e}" log.error(msg) Loading @@ -344,7 +321,7 @@ class Camera(STX): params = ["BinX", "BinY"] try: binx, biny = self.get(f"{self.sensor}GetSettings", params=params) binx, biny = self.get(f"{self.element}GetSettings", params=params) except ValueError as e: msg = f"Device exception: {e}" log.error(msg) Loading @@ -366,7 +343,7 @@ class Camera(STX): return params = {"BinX": b[0], "BinY": b[1]} self.put(f"{self.sensor}SetSettings", params=params) self.put(f"{self.element}SetSettings", params=params) @property def filter(self): Loading Loading @@ -397,7 +374,7 @@ class Camera(STX): """bool: The current state of the CCD cooler (True=On, False=Off).""" params = ["CoolerState"] res = self.get(f"{self.sensor}GetSettings", params=params) res = self.get(f"{self.element}GetSettings", params=params) if self.error: return None Loading @@ -414,14 +391,14 @@ class Camera(STX): return params = {"CoolerState": "1" if b else "0"} self.put(f"{self.sensor}SetSettings", params=params) self.put(f"{self.element}SetSettings", params=params) @property def temperature(self): """float: The current CCD temperature in degrees Celsius.""" params = ["CCDTemperature"] res = self.get(f"{self.sensor}GetSettings", params=params) res = self.get(f"{self.element}GetSettings", params=params) if self.error: return None Loading @@ -438,7 +415,7 @@ class Camera(STX): return params = {"CCDTemperatureSetpoint": t} self.put(f"{self.sensor}SetSettings", params=params) self.put(f"{self.element}SetSettings", params=params) @property def all(self): Loading @@ -458,7 +435,7 @@ class Camera(STX): "StartY", "NumX", "NumY"] res = self.get(f"{self.sensor}GetSettings", params=params) res = self.get(f"{self.element}GetSettings", params=params) if self.error or not res or len(res) != len(params): return {} Loading Loading @@ -509,7 +486,7 @@ class Camera(STX): """float: The ambient temperature in degrees Celsius.""" params = ["AmbientTemperature"] res = self.get(f"{self.sensor}GetSettings", params=params) res = self.get(f"{self.element}GetSettings", params=params) if self.error: return None Loading @@ -521,7 +498,7 @@ class Camera(STX): params = ["CameraXSize", "CameraYSize", "BinX", "BinY"] try: camx, camy, binx, biny = self.get(f"{self.sensor}GetSettings", params=params) camx, camy, binx, biny = self.get(f"{self.element}GetSettings", params=params) except ValueError as e: msg = f"Device exception: {e}" log.error(msg) Loading @@ -547,7 +524,7 @@ class Camera(STX): """int: The current cooler power level in percent.""" params = ["CoolerPower"] res = self.get(f"{self.sensor}GetSettings", params=params) res = self.get(f"{self.element}GetSettings", params=params) if self.error: return None Loading @@ -570,7 +547,7 @@ class Camera(STX): """list of int: The maximum sensor dimensions [X, Y] for current binning.""" params = ["CameraXSize", "CameraYSize"] res = self.get(f"{self.sensor}GetSettings", params=params) res = self.get(f"{self.element}GetSettings", params=params) if self.error: return [None, None] Loading @@ -582,7 +559,7 @@ class Camera(STX): """float: The current CCD temperature setpoint in degrees Celsius.""" params = ["CCDTemperatureSetpoint"] res = self.get(f"{self.sensor}GetSettings", params=params) res = self.get(f"{self.element}GetSettings", params=params) if self.error: return None Loading @@ -594,7 +571,7 @@ class Camera(STX): 0=Idle, 2=Exposing, 3=Reading, 5=Error. """ res = self.get(f"{self.sensor}State") res = self.get(f"{self.element}State") if self.error: return None Loading @@ -606,7 +583,7 @@ class Camera(STX): 1 if an image is ready for download, 0 otherwise. """ res = self.get(f"{self.sensor}ImageReady") res = self.get(f"{self.element}ImageReady") if self.error: return None Loading @@ -628,7 +605,7 @@ class Camera(STX): params = ["StartX", "NumX", "BinX"] try: startx, numx, binx = self.get(f"{self.sensor}GetSettings", params=params) startx, numx, binx = self.get(f"{self.element}GetSettings", params=params) except ValueError as e: msg = f"Device exception: {e}" log.error(msg) Loading @@ -647,7 +624,7 @@ class Camera(STX): params = ["StartY", "NumY", "BinY"] try: starty, numy, biny = self.get(f"{self.sensor}GetSettings", params=params) starty, numy, biny = self.get(f"{self.element}GetSettings", params=params) except ValueError as e: msg = f"Device exception: {e}" log.error(msg) Loading @@ -667,7 +644,7 @@ class Camera(STX): params = ["StartX", "StartY", "BinX", "BinY"] try: startx, starty, binx, biny = self.get( f"{self.sensor}GetSettings", params=params) f"{self.element}GetSettings", params=params) except ValueError as e: msg = f"Device exception: {e}" log.error(msg) Loading @@ -685,7 +662,7 @@ class Camera(STX): params = ["StartX", "StartY", "NumX", "NumY", "BinX", "BinY"] try: startx, starty, numx, numy, binx, biny = self.get( f"{self.sensor}GetSettings", params=params) f"{self.element}GetSettings", params=params) except ValueError as e: msg = f"Device exception: {e}" log.error(msg) Loading @@ -710,7 +687,7 @@ class Guider(Camera): """ super().__init__(url) self.sensor = "ExtGuider" self.element = "ExtGuider" @property Loading Loading @@ -770,7 +747,7 @@ class Guider(Camera): "StartY", "NumX", "NumY"] res = self.get(f"{self.sensor}GetSettings", params=params) res = self.get(f"{self.element}GetSettings", params=params) if self.error or not res or len(res) != len(params): return {} Loading Loading @@ -819,49 +796,48 @@ class Ao(STX): """ super().__init__(url) self.sensor = "AO" self.element = "AO" def init(self): """ Perform AO initialization sequence. """ self.position = [50,50] @property def state(self): def is_moving(self): """int: The current state of the imaging CCD. 0=Idle, 1=Moving. """ res = self.get(f"{self.sensor}Status") res = self.get(f"{self.element}Status") if self.error: return None if res is None: return res if self.state != 0: log.error( f"Cannot change position, AO is not idle. State: { self.state}") self.error.append("AO not idle") return params = {"XPosition": b[0], "Yposition": b[1]} self.put(f"{self.sensor}Guide", params=params) else: return True if res else False @property def position(self): log.warning(f"Not available in AO. Only setter [x,y]") log.warning(f"Not available in AO. Only setter [0:100,0:100]") return None @position.setter def position(self, b): if self.state != 0: if self.is_moving != 0: log.error( f"Cannot change position, AO is not idle. State: { self.state}") self.is_moving}") self.error.append("AO not idle") return params = {"XPosition": b[0], "YPosition": b[1]} self.put(f"{self.sensor}Guide", params=params) self.put(f"{self.element}Guide", params=params) Loading
noctua/devices/stx.py +94 −118 Original line number Diff line number Diff line Loading @@ -4,29 +4,6 @@ """ Interface with a SBIG STX camera device Imager Internal External BinX BinX BinX BinY BinY BinY CoolerState CoolerState --- CCDTemperature CCDTemperature --- CCDTemperatureSetpoint --- --- CoolerPower CoolerPower --- CameraXSize CameraXSize CameraXSize CameraYSize CameraYSize CameraYSize ElectronsPerADU ElectronsPerADU ElectronsPerADU FullWellCapacity FullWellCapacity FullWellCapacity AmbientTemperature AmbientTemperature AmbientTemperature MaxADU MaxADU MaxADU MaxBinX MaxBinX MaxBinX MaxBinY MaxBinY MaxBinY StartX StartX StartX StartY StartY StartY NumX NumX NumX NumY NumY NumY PixelSizeX PixelSizeX PixelSizeX PixelSizeY PixelSizeY PixelSizeY """ # System modules Loading Loading @@ -188,11 +165,11 @@ class Camera(STX): """ super().__init__(url) self.sensor = "Imager" self.element = "Imager" def abort(self): """Aborts the current exposure.""" self.put(f"{self.sensor}AbortExposure") self.put(f"{self.element}AbortExposure") def start(self, duration, frametype, datetime=None): """ Loading Loading @@ -222,7 +199,7 @@ class Camera(STX): params = {"Duration": duration, "FrameType": frametype, "DateTime": datetime} self.put(f"{self.sensor}StartExposure", params=params) self.put(f"{self.element}StartExposure", params=params) def download(self, filepath=temp_fits): Loading @@ -238,7 +215,7 @@ class Camera(STX): self._wait_if_needed() log.debug(f"Getting original FITS") res = requests.get(f"{self.addr}/{self.sensor}.FIT") res = requests.get(f"{self.addr}/{self.element}.FIT") log.debug(f"Got original FITS") with open(filepath, 'wb') as f: Loading Loading @@ -278,14 +255,14 @@ class Camera(STX): "NumY": height } self.put(f"{self.sensor}SetSettings", params=params) self.put(f"{self.element}SetSettings", params=params) def full_frame(self): """Sets the camera to use the full sensor area.""" params = ["CameraXSize", "CameraYSize"] try: cam_x, cam_y = self.get(f"{self.sensor}GetSettings", params=params) cam_x, cam_y = self.get(f"{self.element}GetSettings", params=params) except ValueError as e: msg = f"Device exception: {e}" log.error(msg) Loading @@ -301,7 +278,7 @@ class Camera(STX): params = ["CameraXSize", "CameraYSize"] try: cam_x, cam_y = self.get(f"{self.sensor}GetSettings", params=params) cam_x, cam_y = self.get(f"{self.element}GetSettings", params=params) except ValueError as e: msg = f"Device exception: {e}" log.error(msg) Loading @@ -322,7 +299,7 @@ class Camera(STX): params = ["CameraXSize", "CameraYSize"] try: cam_x, cam_y = self.get(f"{self.sensor}GetSettings", params=params) cam_x, cam_y = self.get(f"{self.element}GetSettings", params=params) except ValueError as e: msg = f"Device exception: {e}" log.error(msg) Loading @@ -344,7 +321,7 @@ class Camera(STX): params = ["BinX", "BinY"] try: binx, biny = self.get(f"{self.sensor}GetSettings", params=params) binx, biny = self.get(f"{self.element}GetSettings", params=params) except ValueError as e: msg = f"Device exception: {e}" log.error(msg) Loading @@ -366,7 +343,7 @@ class Camera(STX): return params = {"BinX": b[0], "BinY": b[1]} self.put(f"{self.sensor}SetSettings", params=params) self.put(f"{self.element}SetSettings", params=params) @property def filter(self): Loading Loading @@ -397,7 +374,7 @@ class Camera(STX): """bool: The current state of the CCD cooler (True=On, False=Off).""" params = ["CoolerState"] res = self.get(f"{self.sensor}GetSettings", params=params) res = self.get(f"{self.element}GetSettings", params=params) if self.error: return None Loading @@ -414,14 +391,14 @@ class Camera(STX): return params = {"CoolerState": "1" if b else "0"} self.put(f"{self.sensor}SetSettings", params=params) self.put(f"{self.element}SetSettings", params=params) @property def temperature(self): """float: The current CCD temperature in degrees Celsius.""" params = ["CCDTemperature"] res = self.get(f"{self.sensor}GetSettings", params=params) res = self.get(f"{self.element}GetSettings", params=params) if self.error: return None Loading @@ -438,7 +415,7 @@ class Camera(STX): return params = {"CCDTemperatureSetpoint": t} self.put(f"{self.sensor}SetSettings", params=params) self.put(f"{self.element}SetSettings", params=params) @property def all(self): Loading @@ -458,7 +435,7 @@ class Camera(STX): "StartY", "NumX", "NumY"] res = self.get(f"{self.sensor}GetSettings", params=params) res = self.get(f"{self.element}GetSettings", params=params) if self.error or not res or len(res) != len(params): return {} Loading Loading @@ -509,7 +486,7 @@ class Camera(STX): """float: The ambient temperature in degrees Celsius.""" params = ["AmbientTemperature"] res = self.get(f"{self.sensor}GetSettings", params=params) res = self.get(f"{self.element}GetSettings", params=params) if self.error: return None Loading @@ -521,7 +498,7 @@ class Camera(STX): params = ["CameraXSize", "CameraYSize", "BinX", "BinY"] try: camx, camy, binx, biny = self.get(f"{self.sensor}GetSettings", params=params) camx, camy, binx, biny = self.get(f"{self.element}GetSettings", params=params) except ValueError as e: msg = f"Device exception: {e}" log.error(msg) Loading @@ -547,7 +524,7 @@ class Camera(STX): """int: The current cooler power level in percent.""" params = ["CoolerPower"] res = self.get(f"{self.sensor}GetSettings", params=params) res = self.get(f"{self.element}GetSettings", params=params) if self.error: return None Loading @@ -570,7 +547,7 @@ class Camera(STX): """list of int: The maximum sensor dimensions [X, Y] for current binning.""" params = ["CameraXSize", "CameraYSize"] res = self.get(f"{self.sensor}GetSettings", params=params) res = self.get(f"{self.element}GetSettings", params=params) if self.error: return [None, None] Loading @@ -582,7 +559,7 @@ class Camera(STX): """float: The current CCD temperature setpoint in degrees Celsius.""" params = ["CCDTemperatureSetpoint"] res = self.get(f"{self.sensor}GetSettings", params=params) res = self.get(f"{self.element}GetSettings", params=params) if self.error: return None Loading @@ -594,7 +571,7 @@ class Camera(STX): 0=Idle, 2=Exposing, 3=Reading, 5=Error. """ res = self.get(f"{self.sensor}State") res = self.get(f"{self.element}State") if self.error: return None Loading @@ -606,7 +583,7 @@ class Camera(STX): 1 if an image is ready for download, 0 otherwise. """ res = self.get(f"{self.sensor}ImageReady") res = self.get(f"{self.element}ImageReady") if self.error: return None Loading @@ -628,7 +605,7 @@ class Camera(STX): params = ["StartX", "NumX", "BinX"] try: startx, numx, binx = self.get(f"{self.sensor}GetSettings", params=params) startx, numx, binx = self.get(f"{self.element}GetSettings", params=params) except ValueError as e: msg = f"Device exception: {e}" log.error(msg) Loading @@ -647,7 +624,7 @@ class Camera(STX): params = ["StartY", "NumY", "BinY"] try: starty, numy, biny = self.get(f"{self.sensor}GetSettings", params=params) starty, numy, biny = self.get(f"{self.element}GetSettings", params=params) except ValueError as e: msg = f"Device exception: {e}" log.error(msg) Loading @@ -667,7 +644,7 @@ class Camera(STX): params = ["StartX", "StartY", "BinX", "BinY"] try: startx, starty, binx, biny = self.get( f"{self.sensor}GetSettings", params=params) f"{self.element}GetSettings", params=params) except ValueError as e: msg = f"Device exception: {e}" log.error(msg) Loading @@ -685,7 +662,7 @@ class Camera(STX): params = ["StartX", "StartY", "NumX", "NumY", "BinX", "BinY"] try: startx, starty, numx, numy, binx, biny = self.get( f"{self.sensor}GetSettings", params=params) f"{self.element}GetSettings", params=params) except ValueError as e: msg = f"Device exception: {e}" log.error(msg) Loading @@ -710,7 +687,7 @@ class Guider(Camera): """ super().__init__(url) self.sensor = "ExtGuider" self.element = "ExtGuider" @property Loading Loading @@ -770,7 +747,7 @@ class Guider(Camera): "StartY", "NumX", "NumY"] res = self.get(f"{self.sensor}GetSettings", params=params) res = self.get(f"{self.element}GetSettings", params=params) if self.error or not res or len(res) != len(params): return {} Loading Loading @@ -819,49 +796,48 @@ class Ao(STX): """ super().__init__(url) self.sensor = "AO" self.element = "AO" def init(self): """ Perform AO initialization sequence. """ self.position = [50,50] @property def state(self): def is_moving(self): """int: The current state of the imaging CCD. 0=Idle, 1=Moving. """ res = self.get(f"{self.sensor}Status") res = self.get(f"{self.element}Status") if self.error: return None if res is None: return res if self.state != 0: log.error( f"Cannot change position, AO is not idle. State: { self.state}") self.error.append("AO not idle") return params = {"XPosition": b[0], "Yposition": b[1]} self.put(f"{self.sensor}Guide", params=params) else: return True if res else False @property def position(self): log.warning(f"Not available in AO. Only setter [x,y]") log.warning(f"Not available in AO. Only setter [0:100,0:100]") return None @position.setter def position(self, b): if self.state != 0: if self.is_moving != 0: log.error( f"Cannot change position, AO is not idle. State: { self.state}") self.is_moving}") self.error.append("AO not idle") return params = {"XPosition": b[0], "YPosition": b[1]} self.put(f"{self.sensor}Guide", params=params) self.put(f"{self.element}Guide", params=params)