def setup_camera_hardware_source( self, stem_controller: stem_controller.STEMController, camera_exposure: float, is_eels: bool) -> HardwareSource.HardwareSource: instrument = typing.cast(InstrumentDevice.Instrument, stem_controller) camera_id = "usim_ronchigram_camera" if not is_eels else "usim_eels_camera" camera_type = "ronchigram" if not is_eels else "eels" camera_name = "uSim Camera" camera_settings = CameraDevice.CameraSettings(camera_id) camera_device = CameraDevice.Camera(camera_id, camera_type, camera_name, instrument) if getattr(camera_device, "camera_version", 2) == 3: camera_hardware_source = camera_base.CameraHardwareSource3( "usim_stem_controller", camera_device, camera_settings, None, None) else: camera_hardware_source = camera_base.CameraHardwareSource2( "usim_stem_controller", camera_device, camera_settings, None, None) if is_eels: camera_hardware_source.features["is_eels_camera"] = True camera_hardware_source.add_channel_processor( 0, HardwareSource.SumProcessor( Geometry.FloatRect(Geometry.FloatPoint(0.25, 0.0), Geometry.FloatSize(0.5, 1.0)))) camera_hardware_source.set_frame_parameters( 0, camera_base.CameraFrameParameters({ "exposure_ms": camera_exposure * 1000, "binning": 2 })) camera_hardware_source.set_frame_parameters( 1, camera_base.CameraFrameParameters({ "exposure_ms": camera_exposure * 1000, "binning": 2 })) camera_hardware_source.set_frame_parameters( 2, camera_base.CameraFrameParameters({ "exposure_ms": camera_exposure * 1000 * 2, "binning": 1 })) camera_hardware_source.set_selected_profile_index(0) return camera_hardware_source
def rectangle_from_origin_size(origin: Core.NormPointType, size: Core.NormSizeType) -> Core.NormRectangleType: return typing.cast(Core.NormRectangleType, tuple(Geometry.FloatRect(origin, size)))