Commit 3acbdc36 authored by vertighel's avatar vertighel
Browse files

Updated stx.py

parent 36c7f387
Loading
Loading
Loading
Loading
Loading
+94 −118
Original line number Diff line number Diff line
@@ -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
@@ -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):
        """
@@ -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):
@@ -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:
@@ -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)
@@ -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)
@@ -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)
@@ -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)
@@ -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):
@@ -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

@@ -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

@@ -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):
@@ -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 {}
@@ -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

@@ -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)
@@ -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

@@ -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]

@@ -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

@@ -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

@@ -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

@@ -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)
@@ -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)
@@ -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)
@@ -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)
@@ -710,7 +687,7 @@ class Guider(Camera):
        """

        super().__init__(url)
        self.sensor = "ExtGuider"
        self.element = "ExtGuider"


    @property
@@ -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 {}
@@ -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)