Pulsar QRM¶
The Pulsar QRM driver is separated into three layers:
QCoDeS driver: Instrument driver based on QCoDeS and the instrument’s native interface.
Native interface: Instrument API that provides control over the instrument and is an extension of the the SCPI interface.
SCPI interface: Instrument API based on the SCPI standard which in turn is based on IEEE488.2.
QCoDeS driver¶
- class pulsar_qrm.pulsar_qrm.pulsar_qrm_qcodes(name, transport_inst, debug=0)[source]¶
Bases:
pulsar_qrm.pulsar_qrm_ifc.pulsar_qrm_ifc
,qcodes.instrument.base.Instrument
This class connects QCoDeS to the Pulsar QRM native interface. Do not directly instantiate this class, but instead instantiate either the
pulsar_qrm
orpulsar_qrm_dummy
.- __init__(name, transport_inst, debug=0)[source]¶
Creates Pulsar QRM QCoDeS class and adds all relevant instrument parameters. These instrument parameters call the associated methods provided by the native interface.
- Parameters
name (str) – Instrument name.
transport_inst (
transport
) – Transport class responsible for the lowest level of communication (e.g. ethernet).debug (int) – Debug level (0 = normal, 1 = no version check, >1 = no version or error checking).
- Raises
Exception – Debug level is 0 and there is a version mismatch.
Note
To get a complete of list of the QCoDeS parameters, run the following code.
from pulsar_qrm.pulsar_qrm import pulsar_qrm_dummy qrm = pulsar_qrm_dummy("qrm") for call in qrm.snapshot()['parameters']: print(getattr(qrm, call).__doc__)
- class pulsar_qrm.pulsar_qrm.pulsar_qrm(name, host, port=5025, debug=0)[source]¶
Bases:
pulsar_qrm.pulsar_qrm.pulsar_qrm_qcodes
Pulsar QRM driver class based on QCoDeS that uses an IP socket to communicate with the instrument.
- __init__(name, host, port=5025, debug=0)[source]¶
Creates Pulsar QRM driver object.
- Parameters
name (str) – Instrument name.
host (str) – Instrument IP address.
port (int) – Instrument port.
debug (int) – Debug level (0 = normal, 1 = no version check, >1 = no version or error checking).
- Raises
Exception – Debug level is 0 and there is a version mismatch.
- class pulsar_qrm.pulsar_qrm.pulsar_qrm_dummy(name, debug=1)[source]¶
Bases:
pulsar_qrm.pulsar_qrm.pulsar_qrm_qcodes
Pulsar QRM driver class based on QCoDeS that uses the
pulsar_dummy_transport
layer to substitute an actual Pulsar QRM to allow software stack development without hardware.
QCoDeS parameters¶
QCoDeS parameters generated by pulsar_qrm_qcodes
.
Note
Only sequencer 0’s parameters are listed, but all other sequencers have the same parameters.
pulsar_qrm.IDN
¶
Please see QCoDeS for a description.
- Properties
value: Anything
pulsar_qrm.reference_source
¶
Sets/gets reference source (‘internal’ = internal 10 MHz, ‘external’ = external 10 MHz).
- Properties
value: Enum: {‘external’, ‘internal’}
pulsar_qrm.in0_amp_gain
¶
Sets/gets input 0 amplifier gain in a range of -6dB to 26dB with a resolution of 1dB per step.
- Properties
unit: dB
value: Numbers -6<=v<=26
pulsar_qrm.in1_amp_gain
¶
Sets/gets input 1 amplifier gain in a range of -6dB to 26dB with a resolution of 1dB per step.
- Properties
unit: dB
value: Numbers -6<=v<=26
pulsar_qrm.sequencer0_sync_en
¶
Sets/gets sequencer 0 synchronization enable which enables party-line synchronization.
- Properties
value: Boolean
pulsar_qrm.sequencer0_nco_freq
¶
Sets/gets sequencer 0 NCO frequency in Hz with a resolution of 0.25 Hz.
- Properties
unit: Hz
value: Numbers -300000000.0<=v<=300000000.0
pulsar_qrm.sequencer0_nco_phase_offs
¶
Sets/gets sequencer 0 NCO phase offset in degrees with a resolution of 3.6e-7 degrees.
- Properties
unit: Degrees
value: Numbers 0<=v<=360
pulsar_qrm.sequencer0_marker_ovr_en
¶
Sets/gets sequencer 0 marker override enable.
- Properties
value: Boolean
pulsar_qrm.sequencer0_marker_ovr_value
¶
Sets/gets sequencer 0 marker override value. Bit index corresponds to marker channel index.
- Properties
value: Numbers 0<=v<=15
pulsar_qrm.sequencer0_waveforms_and_program
¶
Sets sequencer 0 AWG and acquistion waveforms and ASM program. Valid input is a string representing the JSON filename.
- Properties
value: Strings
pulsar_qrm.sequencer0_cont_mode_en_awg_path0
¶
Sets/gets sequencer 0 continous waveform mode enable for AWG path 0.
- Properties
value: Boolean
pulsar_qrm.sequencer0_cont_mode_en_awg_path1
¶
Sets/gets sequencer 0 continous waveform mode enable for AWG path 1.
- Properties
value: Boolean
pulsar_qrm.sequencer0_cont_mode_waveform_idx_awg_path0
¶
Sets/gets sequencer 0 continous waveform mode waveform index or AWG path 0.
- Properties
value: Numbers 0<=v<=1023
pulsar_qrm.sequencer0_cont_mode_waveform_idx_awg_path1
¶
Sets/gets sequencer 0 continous waveform mode waveform index or AWG path 1.
- Properties
value: Numbers 0<=v<=1023
pulsar_qrm.sequencer0_upsample_rate_awg_path0
¶
Sets/gets sequencer 0 upsample rate for AWG path 0.
- Properties
value: Numbers 0<=v<=65535
pulsar_qrm.sequencer0_upsample_rate_awg_path1
¶
Sets/gets sequencer 0 upsample rate for AWG path 1.
- Properties
value: Numbers 0<=v<=65535
pulsar_qrm.sequencer0_gain_awg_path0
¶
Sets/gets sequencer 0 gain for AWG path 0.
- Properties
value: Numbers -1.0<=v<=1.0
pulsar_qrm.sequencer0_gain_awg_path1
¶
Sets/gets sequencer 0 gain for AWG path 1.
- Properties
value: Numbers -1.0<=v<=1.0
pulsar_qrm.sequencer0_offset_awg_path0
¶
Sets/gets sequencer 0 offset for AWG path 0.
- Properties
value: Numbers -1.0<=v<=1.0
pulsar_qrm.sequencer0_offset_awg_path1
¶
Sets/gets sequencer 0 offset for AWG path 1.
- Properties
value: Numbers -1.0<=v<=1.0
pulsar_qrm.sequencer0_mod_en_awg
¶
Sets/gets sequencer 0 modulation enable for AWG.
- Properties
value: Boolean
pulsar_qrm.sequencer0_trigger_mode_acq_path0
¶
Sets/gets sequencer 0 trigger mode for acquisition path 0 (‘sequencer’ = triggered by sequencer, ‘level’ = triggered by input level).
- Properties
value: Enum: {‘level’, ‘sequencer’}
pulsar_qrm.sequencer0_trigger_mode_acq_path1
¶
Sets/gets sequencer 0 trigger mode for acquisition path 1 (‘sequencer’ = triggered by sequencer, ‘level’ = triggered by input level).
- Properties
value: Enum: {‘level’, ‘sequencer’}
pulsar_qrm.sequencer0_trigger_level_acq_path0
¶
Sets/gets sequencer 0 trigger level when using input level trigger mode for acquisition path 0.
- Properties
value: Numbers -1.0<=v<=1.0
pulsar_qrm.sequencer0_trigger_level_acq_path1
¶
Sets/gets sequencer 0 trigger level when using input level trigger mode for acquisition path 1.
- Properties
value: Numbers -1.0<=v<=1.0
pulsar_qrm.sequencer0_avg_mode_en_acq_path0
¶
Sets/gets sequencer 0 averaging mode enable for acquisition path 0.
- Properties
value: Boolean
pulsar_qrm.sequencer0_avg_mode_en_acq_path1
¶
Sets/gets sequencer 0 averaging mode enable for acquisition path 1.
- Properties
value: Boolean
Native interface¶
- class pulsar_qrm.pulsar_qrm_ifc.pulsar_qrm_ifc(transport_inst, debug=0)[source]¶
Bases:
pulsar_qrm.pulsar_qrm_scpi_ifc.pulsar_qrm_scpi_ifc
Class that provides the native API for the Pulsar QrM. It provides methods to control all functions and features provided by the Pulsar QRM, like sequencer, waveform and acquistion handling.
- __init__(transport_inst, debug=0)[source]¶
Creates Pulsar QRM native interface object.
- Parameters
transport_inst (
transport
) – Transport class responsible for the lowest level of communication (e.g. ethernet).debug (int) – Debug level (0 = normal, 1 = no version check, >1 = no version or error checking).
- Returns
Pulsar QRM native interface object.
- Return type
- Raises
Exception – Debug level is 0 and there is a version mismatch.
- get_idn()[source]¶
Get device identity and build information.
- Returns
Dictionary containing manufacturer, model, serial number and build information. The build information is subdivided into FPGA firmware, kernel module software, application software and driver software build information. Each of those consist of the version, build date, build Git hash and Git build dirty indication.
- Return type
dict
- Raises
Exception – An error is reported in system error and debug <= 1. All errors are read from system error and listed in the exception.
- get_system_status()[source]¶
Get general system state.
- Returns
Dictionary containing general status and corresponding flags:
- Status
OKAY: System is okay.
CRITICAL: An error indicated by the flags occured, but has been resolved.
ERROR: An error indicated by the flags is occuring.
- Flags
CARRIER_PLL_UNLOCK: Carrier board PLL is unlocked.
FPGA_PLL_UNLOCK: FPGA PLL is unlocked.
FPGA_TEMP_OR: FPGA temperature is out-of-range.
CARRIER_TEMP_OR: Carrier board temperature is out-of-range.
AFE_TEMP_OR: Analog frontend board temperature is out-of-range.
- Return type
str
- Raises
Exception – An error is reported in system error and debug <= 1. All errors are read from system error and listed in the exception.
- arm_sequencer(sequencer=None)[source]¶
Prepare the indexed sequencer to start by putting it in the armed state. If no sequencer index is given, all sequencers are armed. Any sequencer that was already running is stopped and rearmed. If an invalid sequencer index is given, an error is set in system error.
- Parameters
sequencer (int) – Sequencer index.
- Raises
Exception – Invalid input parameter type.
Exception – An error is reported in system error and debug <= 1. All errors are read from system error and listed in the exception.
- start_sequencer(sequencer=None)[source]¶
Start the indexed sequencer, thereby putting it in the running state. If an invalid sequencer index is given or the indexed sequencer was not yet armed, an error is set in system error. If no sequencer index is given, all armed sequencers are started and any sequencer not in the armed state is ignored. However, if no sequencer index is given and no sequencers are armed, and error is set in system error.
- Parameters
sequencer (int) – Sequencer index.
- Raises
Exception – Invalid input parameter type.
Exception – An error is reported in system error and debug <= 1. All errors are read from system error and listed in the exception.
- stop_sequencer(sequencer=None)[source]¶
Stop the indexed sequencer, thereby putting it in the stopped state. If an invalid sequencer index is given, an error is set in system error. If no sequencer index is given, all sequencers are stopped.
- Parameters
sequencer (int) – Sequencer index.
- Raises
Exception – Invalid input parameter type.
Exception – An error is reported in system error and debug <= 1. All errors are read from system error and listed in the exception.
- get_sequencer_state(sequencer, timeout=0.0, timeout_poll_res=0.1)[source]¶
Get the sequencer state. If an invalid sequencer index is given, an error is set in system error. If the timeout is set to zero, the function returns the state immediately. If a positive non-zero timeout is set, the function blocks until the sequencer completes. If the sequencer hasn’t stopped before the timeout expires, a timeout exception is thrown.
- Parameters
sequencer (int) – Sequencer index.
timeout (float) – Timeout in seconds.
timeout_poll_res (float) – Timeout polling resolution in seconds.
- Returns
Concatinated list of strings separated by the semicolon character. Status is indicated by one status string and an optional number of flags respectively ordered as:
- Status
IDLE: Sequencer waiting to be armed and started.
ARMED: Sequencer is armed and ready to start.
RUNNING: Sequencer is running.
Q1 STOPPED: Classical part of the sequencer has stopped; waiting for real-time part to stop.
STOPPED: Sequencer has completely stopped.
- Flags
DISARMED: Sequencer was disarmed.
FORCED STOP: Sequencer was stopped while still running.
SEQUENCE PROCESSOR Q1 ILLEGAL INSTRUCTION: Classical sequencer part executed an unknown instruction.
SEQUENCE PROCESSOR RT EXEC ILLEGAL INSTRUCTION: Real-time sequencer part executed an unknown instruction.
AWG WAVE PLAYBACK INVALID PATH 0: AWG path 0 tried to play an unknown waveform.
AWG WAVE PLAYBACK INVALID PATH 1: AWG path 1 tried to play an unknown waveform.
ACQ WAVE PLAYBACK INVALID PATH 0: Acquisition path 0 tried to play an unknown waveform.
ACQ WAVE PLAYBACK INVALID PATH 1: Acquisition path 1 tried to play an unknown waveform.
ACQ WAVE CAPTURE OUT-OF-RANGE PATH 0: Acquisition path 0 data was out-of-range.
ACQ WAVE CAPTURE DONE PATH 0: Acquisition path 0 has finished.
ACQ WAVE CAPTURE OVERWRITTEN PATH 0: Acquisition path 0 data was overwritten.
ACQ WAVE CAPTURE OUT-OF-RANGE PATH 1: Acquisition path 1 data was out-of-range.
ACQ WAVE CAPTURE DONE PATH 1: Acquisition path 1 has finished.
ACQ WAVE CAPTURE OVERWRITTEN PATH 1: Acquisition path 1 data was overwritten.
CLOCK INSTABILITY: Clock source instability occurred.
- Return type
str
- Raises
Exception – Invalid input parameter type.
Exception – An error is reported in system error and debug <= 1. All errors are read from system error and listed in the exception.
TimeoutError – Timeout
- get_waveforms(sequencer)[source]¶
Get all waveforms in AWG and acquisition waveform lists of indexed sequencer.
- Parameters
sequencer (int) – Sequencer index.
- Returns
Dictionary with waveforms.
- Return type
dict
- Raises
Exception – Invalid input parameter type.
Exception – An error is reported in system error and debug <= 1. All errors are read from system error and listed in the exception.
- get_acquisition_state(sequencer, timeout=0.0, timeout_poll_res=0.1)[source]¶
Return acquisition completion state of both acquisition paths of the indexed sequencer. If an invalid sequencer is given, an error is set in system error. If the timeout is set to zero, the function returns the state immediately. If a positive non-zero timeout is set, the function blocks until the acquisition completes on both paths. If the acquisition hasn’t completed before the timeout expires, a timeout exception is thrown.
- Parameters
sequencer (int) – Sequencer index.
timeout (float) – Timeout in seconds.
timeout_poll_res (float) – Timeout polling resolution in seconds.
- Returns
Tuple of booleans indicating the acquisition completion state of both acquisition paths (False = uncompleted, True = completed).
- Return type
tuple
- Raises
Exception – Invalid input parameter type.
Exception – An error is reported in system error and debug <= 1. All errors are read from system error and listed in the exception.
TimeoutError – Timeout
- store_acquisition(sequencer, name, size=2147483648)[source]¶
After an acquisition has completed, store the results of both acquisition paths in the acquisition list of the indexed sequencers. If an invalid sequencer index is given an error is set in system error. The acquisition names ‘all’ and ‘ALL’ are reserved and adding waveforms with those names will also result in an error being set in system error. The size argument can be used to specify the number of samples to store of the acquisition results of both acquisition paths. If the size argument is not provided, all samples will be stored. To get access to the acquisition results, the sequencer will be stopped when calling this function.
- Parameters
sequencer (int) – Sequencer index.
name (str) – Acquisition name.
size (int) – Number of samples to store of both acquisition results.
- Raises
Exception – Invalid input parameter type.
Exception – An error is reported in system error and debug <= 1. All errors are read from system error and listed in the exception.
- delete_acquisitions(sequencer)[source]¶
Delete all acquisitions from acquisition list of indexed sequencer.
- Parameters
sequencer (int) – Sequencer index.
- Raises
Exception – Invalid input parameter type.
Exception – An error is reported in system error and debug <= 1. All errors are read from system error and listed in the exception.
- get_acquisitions(sequencer)[source]¶
Get all acquisitions in acquisition lists of indexed sequencer.
- Parameters
sequencer (int) – Sequencer index.
- Returns
Dictionary with acquisitions.
- Return type
dict
- Raises
Exception – Invalid input parameter type.
Exception – An error is reported in system error and debug <= 1. All errors are read from system error and listed in the exception.
SCPI interface¶
- class pulsar_qrm.pulsar_qrm_scpi_ifc.pulsar_qrm_scpi_ifc(transport_inst, debug=0)[source]¶
Bases:
ieee488_2.ieee488_2.ieee488_2
This interface provides an API for the mandatory and required SCPI calls and adds Pulsar related functionality (see SCPI).
- __init__(transport_inst, debug=0)[source]¶
Creates SCPI interface object.
- Parameters
transport_inst (
transport
) – Transport class responsible for the lowest level of communication (e.g. ethernet).debug (int) – Debug level (0 = normal, 1 = no version check, >1 = no version or error checking).
- Returns
SCPI interface object.
- Return type
- Raises
Exception – Debug level is 0 and there is a version mismatch.
- reset()[source]¶
Reset device and clear all status and event registers (see SCPI).
- Raises
Exception – An error is reported in system error and debug <= 1. All errors are read from system error and listed in the exception.
- clear()[source]¶
Clear all status and event registers (see SCPI).
- Raises
Exception – An error is reported in system error and debug <= 1. All errors are read from system error and listed in the exception.
- get_status_byte()[source]¶
Get status byte register. Register is only cleared when feeding registers are cleared (see SCPI).
- Returns
Status byte register.
- Return type
int
- Raises
Exception – An error is reported in system error and debug <= 1. All errors are read from system error and listed in the exception.
- set_service_request_enable(reg)[source]¶
Set service request enable register (see SCPI).
- Parameters
reg (int) – Service request enable register.
- Raises
Exception – Invalid input parameter type.
Exception – An error is reported in system error and debug <= 1. All errors are read from system error and listed in the exception.
- get_service_request_enable()[source]¶
Get service request enable register. The register is cleared after reading it (see SCPI).
- Returns
Service request enable register.
- Return type
int
- Raises
Exception – An error is reported in system error and debug <= 1. All errors are read from system error and listed in the exception.
- set_standard_event_status_enable(reg)[source]¶
Get standard event status enable register. The register is cleared after reading it (see SCPI).
- Returns
Standard event status enable register.
- Return type
int
- Raises
Exception – An error is reported in system error and debug <= 1. All errors are read from system error and listed in the exception.
- get_standard_event_status_enable()[source]¶
Set standard event status enable register (see SCPI).
- Parameters
reg (int) – Standard event status enable register.
- Raises
Exception – Invalid input parameter type.
Exception – An error is reported in system error and debug <= 1. All errors are read from system error and listed in the exception.
- get_standard_event_status()[source]¶
Get standard event status register. The register is cleared after reading it (see SCPI).
- Returns
Standard event status register.
- Return type
int
- Raises
Exception – An error is reported in system error and debug <= 1. All errors are read from system error and listed in the exception.
- set_operation_complete()[source]¶
Set device in operation complete query active state (see SCPI).
- Raises
Exception – An error is reported in system error and debug <= 1. All errors are read from system error and listed in the exception.
- get_operation_complete()[source]¶
Get operation complete state (see SCPI).
- Returns
Operation complete state (False = running, True = completed).
- Return type
bool
- Raises
Exception – An error is reported in system error and debug <= 1. All errors are read from system error and listed in the exception.
- test()[source]¶
Run self-test. Currently not implemented (see SCPI).
- Returns
Test result (False = failed, True = success).
- Return type
bool
- Raises
Exception – An error is reported in system error and debug <= 1. All errors are read from system error and listed in the exception.
- wait()[source]¶
Wait until operations completed before continuing (see SCPI).
- Raises
Exception – An error is reported in system error and debug <= 1. All errors are read from system error and listed in the exception.
- get_system_error()[source]¶
Get system error from queue (see SCPI).
- Returns
System error description string.
- Return type
str
- get_num_system_error()[source]¶
Get number of system errors (see SCPI).
- Returns
Current number of number of system errors.
- Return type
int
- get_system_version()[source]¶
Get SCPI system version (see SCPI).
- Returns
SCPI system version.
- Return type
str
- Raises
Exception – An error is reported in system error and debug <= 1. All errors are read from system error and listed in the exception.
- preset_system_status()[source]¶
Preset system status registers. Connects general system status flags for PLL unlock and temperature out-of-range indications to event status enable, status questionable temperature and status questionable frequency registers respectively (see SCPI).
- Raises
Exception – An error is reported in system error and debug <= 1. All errors are read from system error and listed in the exception.
- get_questionable_condition()[source]¶
Get status questionable condition register (see SCPI).
- Returns
Status questionable condition register.
- Return type
int
- Raises
Exception – An error is reported in system error and debug <= 1. All errors are read from system error and listed in the exception.
- get_questionable_event()[source]¶
Get status questionable event register (see SCPI).
- Returns
Status questionable event register.
- Return type
int
- Raises
Exception – An error is reported in system error and debug <= 1. All errors are read from system error and listed in the exception.
- set_questionable_enable(reg)[source]¶
Set status questionable enable register (see SCPI).
- Parameters
reg (int) – Status questionable enable register.
- Raises
Exception – Invalid input parameter type.
Exception – An error is reported in system error and debug <= 1. All errors are read from system error and listed in the exception.
- get_questionable_enable()[source]¶
Get status questionable enable register (see SCPI).
- Returns
Status questionable enable register.
- Return type
int
- Raises
Exception – An error is reported in system error and debug <= 1. All errors are read from system error and listed in the exception.
- get_current_fpga_temperature()[source]¶
Get current FPGA junction temperature (inside device).
- Returns
Current FPGA junction temperature.
- Return type
float
- Raises
Exception – An error is reported in system error and debug <= 1. All errors are read from system error and listed in the exception.
- get_maximum_fpga_temperature()[source]¶
Get maximum FPGA junction temperature since boot or clear (inside device).
- Returns
Maximum FPGA junction temperature.
- Return type
float
- Raises
Exception – An error is reported in system error and debug <= 1. All errors are read from system error and listed in the exception.
- get_current_carrier_temperature()[source]¶
Get current carrier board temperature (inside device).
- Returns
Current carrier board temperature.
- Return type
float
- Raises
Exception – An error is reported in system error and debug <= 1. All errors are read from system error and listed in the exception.
- get_maximum_carrier_temperature()[source]¶
Get maximum carrier board temperature since boot or clear (inside device).
- Returns
Maximum carrier board temperature.
- Return type
float
- Raises
Exception – An error is reported in system error and debug <= 1. All errors are read from system error and listed in the exception.
- get_current_afe_temperature()[source]¶
Get current analog frontend board temperature (inside device).
- Returns
Current analog frontend board temperature.
- Return type
float
- Raises
Exception – An error is reported in system error and debug <= 1. All errors are read from system error and listed in the exception.
- get_maximum_afe_temperature()[source]¶
Get maximum analog frontend board temperature since boot or clear (inside device).
- Returns
Maximum analog frontend board temperature.
- Return type
float
- Raises
Exception – An error is reported in system error and debug <= 1. All errors are read from system error and listed in the exception.
- get_operation_condition()[source]¶
Get status operation condition register (see SCPI).
- Returns
Status operation condition register.
- Return type
int
- Raises
Exception – An error is reported in system error and debug <= 1. All errors are read from system error and listed in the exception.
- get_operation_events()[source]¶
Get status operation event register (see SCPI).
- Returns
Status operation event register.
- Return type
int
- Raises
Exception – An error is reported in system error and debug <= 1. All errors are read from system error and listed in the exception.
- set_operation_enable(reg)[source]¶
Set status operation enable register (see SCPI).
- Parameters
reg (int) – Status operation enable register.
- Raises
Exception – Invalid input parameter type.
Exception – An error is reported in system error and debug <= 1. All errors are read from system error and listed in the exception.
- get_operation_enable()[source]¶
Get status operation enable register (see SCPI).
- Returns
Status operation enable register.
- Return type
int
- Raises
Exception – An error is reported in system error and debug <= 1. All errors are read from system error and listed in the exception.
- get_assembler_status()[source]¶
Get assembler status. Refer to the assembler log to get more information regarding the assembler result.
- Returns
Assembler status (False = failed, True = success).
- Return type
bool
- Raises
Exception – An error is reported in system error and debug <= 1. All errors are read from system error and listed in the exception.