diff --git a/pyscope/observatory/ascom_filter_wheel.py b/pyscope/observatory/ascom_filter_wheel.py index 101a0507..b0d1c0c8 100644 --- a/pyscope/observatory/ascom_filter_wheel.py +++ b/pyscope/observatory/ascom_filter_wheel.py @@ -8,6 +8,23 @@ class ASCOMFilterWheel(ASCOMDevice, FilterWheel): def __init__(self, identifier, alpaca=False, device_number=0, protocol="http"): + """ + ASCOM implementation of the FilterWheel abstract base class. + + This class provides the functionality to control an ASCOM-compatible filter wheel device, + including properties for focus offsets, filter names, and the current filter position. + + Parameters + ---------- + identifier : `str` + The unique device identifier. This can be the ProgID for COM devices or the device number for Alpaca devices. + alpaca : `bool`, default : `False`, optional + Whether the device is an Alpaca device. + device_number : `int`, default : 0, optional + The device number for Alpaca devices. + protocol : `str`, default : "http", optional + The communication protocol to use for Alpaca devices. + """ super().__init__( identifier, alpaca=alpaca, diff --git a/pyscope/observatory/filter_wheel.py b/pyscope/observatory/filter_wheel.py index e69506bc..ee6882b3 100644 --- a/pyscope/observatory/filter_wheel.py +++ b/pyscope/observatory/filter_wheel.py @@ -6,21 +6,55 @@ class FilterWheel(ABC, metaclass=_DocstringInheritee): @abstractmethod def __init__(self, *args, **kwargs): + """ + Abstract base class for filter wheel devices. + + This class defines the common interface for filter wheel devices, including properties + for focus off sets, filter names, and the current filter positon. Subclasses must implement + the abstract methods and properties defined here. + + Parameters + ---------- + *args : `tuple` + Variable length argument list. + **kwargs : `dict` + Arbitrary keyword arguments. + """ pass @property @abstractmethod def FocusOffsets(self): + """ + Focus offsets for each filter in the wheel. (`list` of `int`) + + 0-indexed list of offsets, one offset per valid slot number. + Values are focuser and filter dependant, and are typically set up by standardizations (such as ASCOM) or by the user. + If focuser offsets aren't available, all values will be 0. + """ pass @property @abstractmethod def Names(self): + """ + Name of each filter in the wheel. (`list` of `str`) + + 0-indexed list of filter names, one name per valid slot number. + Values are typically set up by standardizations (such as ASCOM) or by the user. + If filter names aren't available, all values will be "FilterX" such that 1 <= X <= N. + """ pass @property @abstractmethod def Position(self): + """ + The current filter wheel position. (`int`) + + Given as the current slot number, of -1 if wheel is moving. + During motion, a position of -1 is mandatory, no valid slot numbers must be returned during rotation past filter positions. + """ pass @Position.setter