Novanta Opus Lasers#

The Opus family are continuous-wave diode lasers manufactured by Novanta. Three models are supported, differentiated by wavelength and output power. QOpus is the shared base class; the model subclasses add the correct power limits and wavelength as class-level constants.

Base class#

class QInstrument.instruments.Novanta.Opus.instrument.QOpus(portName=None, **kwargs)[source]#

Bases: QSerialInstrument

Laser Quantum Opus Continuous-wave Laser

The Opus command interface uses plain text:

  • Queries end in ? and return a value with a units suffix (e.g. POWER?'0123.4mW').

  • Setpoint commands use CMD=value syntax (e.g. POWER=100.0).

  • Boolean commands are sent as plain mnemonics (ON, OFF).

Properties#

Control#

powerfloat [mW]

Getter returns the actual output power. Setter transmits a new power setpoint, clamped to maximum_power.

maximum_powerfloat [mW]

Software upper bound on the power setpoint. Default: 1000. Not discoverable from the hardware; set at startup and persisted via the saved configuration.

wavelengthfloat [nm]

Emission wavelength of the specific laser unit. Default: 532. Not discoverable from the hardware; set at startup and persisted via the saved configuration.

currentfloat [%]

Diode current as a percentage of maximum.

emissionbool

True: laser emission enabled. False: emission disabled.

Status (read-only)#

statusbool

True if the laser is ENABLED (interlock satisfied and ready to emit). False if DISABLED (keyswitch off or enable button not pressed); a warning is logged when DISABLED is received.

laser_temperaturefloat [°C]

Laser head temperature.

psu_temperaturefloat [°C]

Power supply unit temperature.

comm = {'baudRate': qtpy.QtSerialPort.QSerialPort.BaudRate.Baud19200, 'dataBits': qtpy.QtSerialPort.QSerialPort.DataBits.Data8, 'eol': '\r\n', 'flowControl': qtpy.QtSerialPort.QSerialPort.FlowControl.NoFlowControl, 'parity': qtpy.QtSerialPort.QSerialPort.Parity.NoParity, 'stopBits': qtpy.QtSerialPort.QSerialPort.StopBits.OneStop, 'timeout': 500}#
identify()[source]#

Return True if the connected device identifies as an Opus laser.

Queries the firmware version and checks for the 'MPC-D' controller model token in the response. On success, sends CONTROL=POWER to ensure the controller regulates output power rather than diode current for all subsequent setpoint commands.

Return type:

bool

version()[source]#

Return the firmware version string.

Return type:

str

timers()[source]#

Return laser and PSU on-time readings.

Sends TIMERS? and collects response lines until a line not containing 'Hours' is received. The terminating line is discarded.

Return type:

list[str]

Returns:

list[str] – Lines containing timer readings (e.g. 'Laser head: 12345 Hours').

class QInstrument.instruments.Novanta.Opus.fake.QFakeOpus(*args, **kwargs)[source]#

Bases: QFakeInstrument, QOpus

Fake Opus laser for UI development without hardware.

The Opus property getters call hardware query helpers (_getPower, _getCurrent, _parseTemp) rather than using the _register() convention, so all properties are registered explicitly with _store-backed getters.

identify()[source]#

Return True if the connected device identifies as an Opus laser.

Queries the firmware version and checks for the 'MPC-D' controller model token in the response. On success, sends CONTROL=POWER to ensure the controller regulates output power rather than diode current for all subsequent setpoint commands.

Return type:

bool

class QInstrument.instruments.Novanta.Opus.widget.QOpusWidget(*args, device=None, **kwargs)[source]#

Bases: QInstrumentWidget

Control widget for a Laser Quantum Opus diode laser.

Shows actual output power [W] and diode current [%] as read-only displays. The requested power setpoint is controlled with a rotary encoder spinbox (in Watts; converted to mW for the instrument). Laser emission is toggled with a push-button; a red LED alongside the button reflects the current emission state.

The widget polls the instrument every poll_interval ms to refresh the read-only displays and the emission indicator.

UIFILE = 'OpusWidget.ui'#
poll_interval: int = 2000#
wsetter = {'QCheckBox': 'setChecked', 'QComboBox': 'setCurrentIndex', 'QDoubleSpinBox': 'setValue', 'QGroupBox': 'setChecked', 'QLabel': 'setText', 'QLedWidget': 'setValue', 'QLineEdit': 'setText', 'QPushButton': 'setChecked', 'QRadioButton': 'setChecked', 'QRotaryEncoderSpinBox': 'setValue', 'QSpinBox': 'setValue'}#
wgetter = {'QCheckBox': 'isChecked', 'QComboBox': 'currentIndex', 'QDoubleSpinBox': 'value', 'QGroupBox': 'isChecked', 'QLabel': 'text', 'QLedWidget': 'value', 'QLineEdit': 'text', 'QPushButton': 'isChecked', 'QRadioButton': 'isChecked', 'QRotaryEncoderSpinBox': 'value', 'QSpinBox': 'value'}#
wsignal = {'QCheckBox': 'toggled', 'QComboBox': 'currentIndexChanged', 'QDoubleSpinBox': 'valueChanged', 'QGroupBox': 'toggled', 'QLineEdit': 'editingFinished', 'QPushButton': 'toggled', 'QRadioButton': 'toggled', 'QRotaryEncoderSpinBox': 'valueChanged', 'QSpinBox': 'valueChanged'}#
showEvent(event)[source]#

Re-apply power range after the first-show config restore.

Return type:

None

class QInstrument.instruments.Novanta.Opus.tree.QOpusTree(*args, device=None, fields=None, **kwargs)[source]#

Bases: QInstrumentTree

Parameter tree for a Laser Quantum Opus laser.

INSTRUMENT#

alias of QOpus

Opus532 (532 nm, 0–6 W)#

class QInstrument.instruments.Novanta.Opus532.instrument.QOpus532(portName=None, **kwargs)[source]#

Bases: QOpus

Novanta Opus532 continuous-wave laser (532 nm, 0–6 W).

WAVELENGTH: float = 532.0#
MINIMUM_POWER: float = 0.0#
MAXIMUM_POWER: float = 6000.0#
class QInstrument.instruments.Novanta.Opus532.fake.QFakeOpus532(*args, **kwargs)[source]#

Bases: QFakeOpus, QOpus532

Fake Opus532 laser for UI development without hardware.

class QInstrument.instruments.Novanta.Opus532.widget.QOpus532Widget(*args, device=None, **kwargs)[source]#

Bases: QOpusWidget

Control widget for a Novanta Opus532 laser (532 nm, 0–6 W).

INSTRUMENT#

alias of QOpus532

class QInstrument.instruments.Novanta.Opus532.tree.QOpus532Tree(*args, device=None, fields=None, **kwargs)[source]#

Bases: QInstrumentTree

Parameter tree for a Novanta Opus532 laser.

INSTRUMENT#

alias of QOpus532

Opus660 (660 nm, 0–1.5 W)#

class QInstrument.instruments.Novanta.Opus660.instrument.QOpus660(portName=None, **kwargs)[source]#

Bases: QOpus

Novanta Opus660 continuous-wave laser (660 nm, 0–1.5 W).

WAVELENGTH: float = 660.0#
MINIMUM_POWER: float = 0.0#
MAXIMUM_POWER: float = 1500.0#
class QInstrument.instruments.Novanta.Opus660.fake.QFakeOpus660(*args, **kwargs)[source]#

Bases: QFakeOpus, QOpus660

Fake Opus660 laser for UI development without hardware.

class QInstrument.instruments.Novanta.Opus660.widget.QOpus660Widget(*args, device=None, **kwargs)[source]#

Bases: QOpusWidget

Control widget for a Novanta Opus660 laser (660 nm, 0–1.5 W).

INSTRUMENT#

alias of QOpus660

class QInstrument.instruments.Novanta.Opus660.tree.QOpus660Tree(*args, device=None, fields=None, **kwargs)[source]#

Bases: QInstrumentTree

Parameter tree for a Novanta Opus660 laser.

INSTRUMENT#

alias of QOpus660

Opus1064 (1064 nm, 2–10 W)#

class QInstrument.instruments.Novanta.Opus1064.instrument.QOpus1064(portName=None, **kwargs)[source]#

Bases: QOpus

Novanta Opus1064 continuous-wave laser (1064 nm, 2–10 W).

WAVELENGTH: float = 1064.0#
MINIMUM_POWER: float = 2000.0#
MAXIMUM_POWER: float = 10000.0#
class QInstrument.instruments.Novanta.Opus1064.fake.QFakeOpus1064(*args, **kwargs)[source]#

Bases: QFakeOpus, QOpus1064

Fake Opus1064 laser for UI development without hardware.

class QInstrument.instruments.Novanta.Opus1064.widget.QOpus1064Widget(*args, device=None, **kwargs)[source]#

Bases: QOpusWidget

Control widget for a Novanta Opus1064 laser (1064 nm, 2–10 W).

INSTRUMENT#

alias of QOpus1064

class QInstrument.instruments.Novanta.Opus1064.tree.QOpus1064Tree(*args, device=None, fields=None, **kwargs)[source]#

Bases: QInstrumentTree

Parameter tree for a Novanta Opus1064 laser.

INSTRUMENT#

alias of QOpus1064