Add docstrings to public methods
This commit is contained in:
parent
a30b726b91
commit
1bbbfeef0f
7 changed files with 30 additions and 1 deletions
|
|
@ -129,7 +129,6 @@ ignore = [
|
||||||
"D213", # incompatible with D212
|
"D213", # incompatible with D212
|
||||||
"D400", # A stricter version of #415 that doesn't allow !
|
"D400", # A stricter version of #415 that doesn't allow !
|
||||||
# The checkers below should be turned on as they complain about missing docstrings.
|
# The checkers below should be turned on as they complain about missing docstrings.
|
||||||
"D102",
|
|
||||||
"D103",
|
"D103",
|
||||||
"D104",
|
"D104",
|
||||||
"D105",
|
"D105",
|
||||||
|
|
|
||||||
|
|
@ -235,6 +235,16 @@ class JPEGSharpnessMonitor:
|
||||||
self.running = False
|
self.running = False
|
||||||
|
|
||||||
def focus_rel(self, dz: int, **kwargs) -> tuple[int, int]:
|
def focus_rel(self, dz: int, **kwargs) -> tuple[int, int]:
|
||||||
|
"""Move the stage by dz, monitoring the position over time.
|
||||||
|
|
||||||
|
This performs exactly one move. Multiple calls of this method
|
||||||
|
will append to the internal postition storage for more complex
|
||||||
|
autofocus procedures.
|
||||||
|
|
||||||
|
This should be run from within the JPEGSharpnessMonitor.run
|
||||||
|
context manager so that sharpness data and timestamps are also
|
||||||
|
collected.
|
||||||
|
"""
|
||||||
# Store the start time and position
|
# Store the start time and position
|
||||||
self.stage_times.append(time.time())
|
self.stage_times.append(time.time())
|
||||||
self.stage_positions.append(self.stage.position)
|
self.stage_positions.append(self.stage.position)
|
||||||
|
|
|
||||||
|
|
@ -154,6 +154,7 @@ class BackgroundDetectThing(lt.Thing):
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def thing_state(self) -> Mapping:
|
def thing_state(self) -> Mapping:
|
||||||
|
"""Summary metadata describing the current state of the Thing."""
|
||||||
bd = self.background_distributions
|
bd = self.background_distributions
|
||||||
return {
|
return {
|
||||||
"background_distributions": bd.model_dump() if bd else None,
|
"background_distributions": bd.model_dump() if bd else None,
|
||||||
|
|
|
||||||
|
|
@ -194,6 +194,7 @@ class BaseCamera(lt.Thing):
|
||||||
stream_name: Literal["main", "lores", "raw", "full"] = "main",
|
stream_name: Literal["main", "lores", "raw", "full"] = "main",
|
||||||
wait: Optional[float] = 5,
|
wait: Optional[float] = 5,
|
||||||
) -> NDArray:
|
) -> NDArray:
|
||||||
|
"""Acquire one image from the camera and return as an array."""
|
||||||
raise NotImplementedError(
|
raise NotImplementedError(
|
||||||
"CameraThings must define their own capture_array method"
|
"CameraThings must define their own capture_array method"
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -166,6 +166,7 @@ class StreamingPiCamera2(BaseCamera):
|
||||||
|
|
||||||
@lt.thing_setting
|
@lt.thing_setting
|
||||||
def analogue_gain(self) -> float:
|
def analogue_gain(self) -> float:
|
||||||
|
"""The Analogue gain applied by the camera sensor."""
|
||||||
if not self._setting_save_in_progress and self.streaming:
|
if not self._setting_save_in_progress and self.streaming:
|
||||||
with self._streaming_picamera() as cam:
|
with self._streaming_picamera() as cam:
|
||||||
cam_value = cam.capture_metadata()["AnalogueGain"]
|
cam_value = cam.capture_metadata()["AnalogueGain"]
|
||||||
|
|
@ -185,6 +186,7 @@ class StreamingPiCamera2(BaseCamera):
|
||||||
|
|
||||||
@lt.thing_setting
|
@lt.thing_setting
|
||||||
def colour_gains(self) -> tuple[float, float]:
|
def colour_gains(self) -> tuple[float, float]:
|
||||||
|
"""The red and blue colour gains, must be betwen 0.0 and 32.0."""
|
||||||
if not self._setting_save_in_progress and self.streaming:
|
if not self._setting_save_in_progress and self.streaming:
|
||||||
with self._streaming_picamera() as cam:
|
with self._streaming_picamera() as cam:
|
||||||
cam_value = cam.capture_metadata()["ColourGains"]
|
cam_value = cam.capture_metadata()["ColourGains"]
|
||||||
|
|
@ -204,6 +206,11 @@ class StreamingPiCamera2(BaseCamera):
|
||||||
|
|
||||||
@lt.thing_setting
|
@lt.thing_setting
|
||||||
def exposure_time(self) -> int:
|
def exposure_time(self) -> int:
|
||||||
|
"""The camera exposure time in microseconds.
|
||||||
|
|
||||||
|
When setting this property the camera will adjust the set value
|
||||||
|
to the nearest allowed value that is lower than the current setting.
|
||||||
|
"""
|
||||||
if not self._setting_save_in_progress and self.streaming:
|
if not self._setting_save_in_progress and self.streaming:
|
||||||
with self._streaming_picamera() as cam:
|
with self._streaming_picamera() as cam:
|
||||||
cam_value = cam.capture_metadata()["ExposureTime"]
|
cam_value = cam.capture_metadata()["ExposureTime"]
|
||||||
|
|
|
||||||
|
|
@ -115,10 +115,20 @@ class SimulatedCamera(BaseCamera):
|
||||||
def attach_to_server(
|
def attach_to_server(
|
||||||
self, server: lt.ThingServer, path: str, setting_storage_path: str
|
self, server: lt.ThingServer, path: str, setting_storage_path: str
|
||||||
):
|
):
|
||||||
|
"""Wrap the attach_to_server method so the server instance can be stored.
|
||||||
|
|
||||||
|
Direct access to the server instance is needed to get the stage position while
|
||||||
|
maintianing the same public API as a real camera that doesn't need this access.
|
||||||
|
"""
|
||||||
self._server = server
|
self._server = server
|
||||||
return super().attach_to_server(server, path, setting_storage_path)
|
return super().attach_to_server(server, path, setting_storage_path)
|
||||||
|
|
||||||
def get_stage_position(self):
|
def get_stage_position(self):
|
||||||
|
"""Return the stage position.
|
||||||
|
|
||||||
|
The simulation camera has access to the stage position so it can generate a
|
||||||
|
different image as the stage moves.
|
||||||
|
"""
|
||||||
if not self._stage and self._server:
|
if not self._stage and self._server:
|
||||||
self._stage = self._server.things["/stage/"]
|
self._stage = self._server.things["/stage/"]
|
||||||
return self._stage.instantaneous_position
|
return self._stage.instantaneous_position
|
||||||
|
|
|
||||||
|
|
@ -128,6 +128,7 @@ class SettingsManager(lt.Thing):
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def thing_state(self) -> Mapping:
|
def thing_state(self) -> Mapping:
|
||||||
|
"""Summary metadata describing the current state of the Thing."""
|
||||||
state = {
|
state = {
|
||||||
"hostname": self.hostname,
|
"hostname": self.hostname,
|
||||||
"microscope-uuid": str(self.microscope_id),
|
"microscope-uuid": str(self.microscope_id),
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue