BioImager  3.9.1
A .NET microscopy imaging library. Supports various microscopes by using imported libraries & GUI automation. Supported libraries include PriorĀ® & ZeissĀ® & all devices supported by Micromanager 2.0 and python-microscope.
Loading...
Searching...
No Matches
microscope.testsuite.mock_devices.CoboltLaserMock Class Reference
Inheritance diagram for microscope.testsuite.mock_devices.CoboltLaserMock:
microscope.testsuite.mock_devices.SerialMock

Public Member Functions

def __init__ (self, *args, **kwargs)
 
def handle (self, command)
 
- Public Member Functions inherited from microscope.testsuite.mock_devices.SerialMock
def __init__ (self, *args, **kwargs)
 
def open (self)
 
def close (self)
 
def handle (self, command)
 
def write (self, data)
 
def read (self, size=1)
 
def readline (self, size=-1)
 
def reset_input_buffer (self)
 
def reset_output_buffer (self)
 

Public Attributes

 power
 
 light
 
 interlock_open
 
 auto_start
 
 direct_control
 
 on_after_interlock
 
 fault
 
- Public Attributes inherited from microscope.testsuite.mock_devices.SerialMock
 in_buffer
 
 out_buffer
 
 out_pending_bytes
 
 out_parsed_bytes
 
 in_read_bytes
 

Static Public Attributes

string eol = b"\r"
 
int baudrate = 115200
 
 parity = serial.PARITY_NONE
 
 bytesize = serial.EIGHTBITS
 
 stopbits = serial.STOPBITS_ONE
 
bool rtscts = False
 
bool dsrdtr = False
 
float default_power = 50.0
 
float min_power = 0.0
 
float max_power = 600.0
 

Detailed Description

Modelled after a Cobolt Jive laser 561nm.

Definition at line 316 of file mock_devices.py.

Constructor & Destructor Documentation

◆ __init__()

def microscope.testsuite.mock_devices.CoboltLaserMock.__init__ (   self,
args,
**  kwargs 
)

Reimplemented from microscope.testsuite.mock_devices.SerialMock.

Definition at line 333 of file mock_devices.py.

333 def __init__(self, *args, **kwargs):
334 super().__init__(*args, **kwargs)
335
336 self.power = CoboltLaserMock.default_power
337 self.light = False
338
339 self.interlock_open = False
340
341 self.auto_start = False
342 self.direct_control = False
343
344 self.on_after_interlock = False
345
346 self.fault = None
347

Member Function Documentation

◆ handle()

def microscope.testsuite.mock_devices.CoboltLaserMock.handle (   self,
  command 
)

Reimplemented from microscope.testsuite.mock_devices.SerialMock.

Definition at line 348 of file mock_devices.py.

348 def handle(self, command):
349 # Leading and trailing whitespace is ignored.
350 command = command.strip()
351
352 # Acknowledgment string if command is not a query and there
353 # is no error.
354 answer = b"OK"
355
356 if command == b"sn?": # serial number
357 answer = b"7863"
358 elif command == b"gcn?":
359 answer = b"Macro-Gen5b-SHG-0501_4W-RevA"
360 elif command == b"ver?" or command == b"gfv?":
361 answer = b"50070"
362 elif command == b"gfvlas?":
363 answer = b"This laser head does not have firmware."
364 elif command == b"hrs?": # System operating hours
365 answer = b"828.98"
366
367 # TODO: This whole @cob0 and @cob1 need better testing on
368 # what it actually does. Documentation says that @cob1 is
369 # "Laser ON after interlock. Forces laser into
370 # autostart. without checking if autostart is enabled".
371 # @cob0 is undocumented.
372
373 # May be a bug but the commands @cob0 and @cob1 both have the
374 # effect of also turning off the laser.
375 elif command == b"@cob1":
376 self.on_after_interlock = True
377 self.light = False
378 elif command == b"@cob0":
379 self.on_after_interlock = False
380 self.light = False
381
382 elif command == b"@cobas?":
383 answer = b"1" if self.auto_start else b"0"
384 elif command == b"@cobas 0":
385 self.auto_start = False
386 elif command == b"@cobas 1":
387 self.auto_start = True
388
389 # Laser state
390 elif command == b"l?":
391 answer = b"1" if self.light else b"0"
392 elif command == b"l1":
393 if self.auto_start:
394 answer = b"Syntax error: not allowed in autostart mode."
395 else:
396 self.light = True
397 elif command == b"l0":
398 self.light = False
399
400 # Output power
401 elif command.startswith(b"p "):
402 # The p command takes values in W so convert to mW
403 new_power = float(command[2:]) * 1000.0
404 if new_power > self.max_power or new_power < self.min_power:
405 answer = b"Syntax error: Value is out of range."
406 else:
407 self.power = new_power
408 elif command == b"p?":
409 answer = b"%.4f" % (self.power / 1000.0)
410 elif command == b"pa?":
411 if self.light:
412 answer = b"%.4f" % (self.power / 1000.0)
413 else:
414 answer = b"0.0000"
415
416 # Undocumented. Seems to be the same as 'p ...'
417 elif command.startswith(b"@cobasp "):
418 return self.handle(command[6:])
419
420 # Direct control
421 elif command == b"@cobasdr?":
422 answer = b"1" if self.direct_control else b"0"
423 elif command == b"@cobasdr 0":
424 self.direct_control = False
425 elif command == b"@cobasdr 1":
426 self.direct_control = False
427
428 # Undocumented. Seems to returns maximum laser power in mW.
429 elif command == b"gmlp?":
430 answer = b"600.000000"
431
432 # Are you there?
433 elif command == b"?":
434 answer = b"OK"
435
436 # Get operating fault
437 elif command == b"f?":
438 # The errors (which we don't model yet) are:
439 # 1 = temperature error
440 # 3 = interlock
441 # 4 = constant power fault
442 answer = b"0"
443
444 # Interlock state
445 elif command == b"ilk?":
446 answer = b"1" if self.interlock_open else b"0"
447
448 # Autostart program state
449 elif command == b"cobast?":
450 # This is completely undocumented. Manual
451 # experimentation seems to be:
452 # 0 = laser off with @cob0
453 # 1 = laser off with @cob1
454 # 2 = waiting for temperature
455 # 3 = warming up
456 # 4 = completed (laser on)
457 # 5 = fault (such as interlock)
458 # 6 = aborted
459 if self.light:
460 answer = b"4"
461 else:
462 answer = b"1" if self.on_after_interlock else b"0"
463
464 else:
465 raise NotImplementedError(
466 "no handling for command '%s'" % command.decode("utf-8")
467 )
468
469 # Sending a command is done with '\r' only. However,
470 # responses from the hardware end with '\r\n'.
471 self.in_buffer.write(answer + b"\r\n")
472
473

Referenced by microscope.cameras._SDK3Cam.SDK3Camera.__init__(), microscope.cameras.pvcam.PVCamera.abort(), microscope.cameras.andorsdk3.AndorSDK3.get_id(), microscope.cameras.andorsdk3.AndorSDK3.initialize(), microscope.cameras.pvcam.PVCamera.initialize(), microscope.cameras.andorsdk3.AndorSDK3.invalidate_buffers(), microscope.cameras.pvcam.PVCamera.set_trigger(), and microscope.cameras.pvcam.PVCamera.soft_trigger().

Member Data Documentation

◆ auto_start

microscope.testsuite.mock_devices.CoboltLaserMock.auto_start

Definition at line 341 of file mock_devices.py.

◆ baudrate

int microscope.testsuite.mock_devices.CoboltLaserMock.baudrate = 115200
static

Definition at line 321 of file mock_devices.py.

◆ bytesize

microscope.testsuite.mock_devices.CoboltLaserMock.bytesize = serial.EIGHTBITS
static

Definition at line 323 of file mock_devices.py.

◆ default_power

float microscope.testsuite.mock_devices.CoboltLaserMock.default_power = 50.0
static

Definition at line 329 of file mock_devices.py.

◆ direct_control

microscope.testsuite.mock_devices.CoboltLaserMock.direct_control

Definition at line 342 of file mock_devices.py.

◆ dsrdtr

bool microscope.testsuite.mock_devices.CoboltLaserMock.dsrdtr = False
static

Definition at line 326 of file mock_devices.py.

◆ eol

string microscope.testsuite.mock_devices.CoboltLaserMock.eol = b"\r"
static

◆ fault

microscope.testsuite.mock_devices.CoboltLaserMock.fault

Definition at line 346 of file mock_devices.py.

◆ interlock_open

microscope.testsuite.mock_devices.CoboltLaserMock.interlock_open

Definition at line 339 of file mock_devices.py.

◆ light

microscope.testsuite.mock_devices.CoboltLaserMock.light

Definition at line 337 of file mock_devices.py.

◆ max_power

float microscope.testsuite.mock_devices.CoboltLaserMock.max_power = 600.0
static

Definition at line 331 of file mock_devices.py.

◆ min_power

float microscope.testsuite.mock_devices.CoboltLaserMock.min_power = 0.0
static

Definition at line 330 of file mock_devices.py.

◆ on_after_interlock

microscope.testsuite.mock_devices.CoboltLaserMock.on_after_interlock

Definition at line 344 of file mock_devices.py.

◆ parity

microscope.testsuite.mock_devices.CoboltLaserMock.parity = serial.PARITY_NONE
static

Definition at line 322 of file mock_devices.py.

◆ power

microscope.testsuite.mock_devices.CoboltLaserMock.power

Definition at line 336 of file mock_devices.py.

◆ rtscts

bool microscope.testsuite.mock_devices.CoboltLaserMock.rtscts = False
static

Definition at line 325 of file mock_devices.py.

◆ stopbits

microscope.testsuite.mock_devices.CoboltLaserMock.stopbits = serial.STOPBITS_ONE
static

Definition at line 324 of file mock_devices.py.


The documentation for this class was generated from the following file: