The bh_spc.spcm module
Low-level wrappers of SPCM-DLL functions and data structures.
This extension module aims to provide straightforward Python wrappers for the C functions, structs, and enums in SPCM-DLL. Currently, only the functions required to acquire data in FIFO mode are wrapped (excluding those that are specific to the DPC-230).
Error codes returned by functions are converted to exceptions (SPCMError). Functions that take output arguments are wrapped so that they provide the data as a return value. A few other small changes are made to facilitate usage from Python. In some cases enum names have been changed for readability.
A design goal of this module is to generally avoid artificially restricting user code from performing operations that the C functions allow, even if they are logically questionable or lead to unexpected return values. This is so that this module can be used to experiment with the C API and discover its behavior. A higher-level interface that guides the user toward correct usage can be built on top of this module.
As such, to fully understand the correct usage of these functions and data types, you will need to refer to the Becker & Hickl SPCM-DLL documentation.
          AdjustPara
  Adjustment parameters (wraps the SPC_Adjust_Para struct).
Wraps the SPCM-DLL SPC_Adjust_Para struct. Values of this type are
returned by get_adjust_parameters and (as an attribute of EEPData) by
get_eeprom_data.
Instances have the attributes corresponding to the C struct fields. All are read-only.
          as_dict() -> dict[str, int | float]
  
  
      method descriptor
  
  Return a dictionary containing the fields and values.
Returns:
| Type | Description | 
|---|---|
| dict | Every field and its value. | 
          items() -> Iterable[tuple[str, int | float]]
  
  
      method descriptor
  
  Return an iterable yielding the fields and values in fixed order.
Returns:
| Type | Description | 
|---|---|
| Iterable | An iterable yielding the pair (name, value) for every field. | 
          DLLOperationMode
  
            Bases: enum.Enum
Enum for the operation mode of SPCM-DLL.
Values of this type are returned by get_mode and are given to
set_mode.
Not to be confused with ModuleType, which has similar (but slightly
different) values.
Examples:
>>> for e in DLLOperationMode:
...     print(e.name, e.value)
HARDWARE 0
SIMULATE_SPC_600 600
...
SIMULATE_SPC_150NX 152
SIMULATE_SPC_150NXX 153
...
Print a table of all the enum members.
          Data
  The collection of values for all SPC parameters.
Wraps the SPCM-DLL SPCdata struct. Values of this type are returned by
get_parameters and are passed to set_parameters.
Instances have attributes that match the ParID enum member names, but in
lowercase. Attribute types match the type attribute of the corresponding
ParID enum member.
An instance created by calling Data() contains zero for every
parameter.
Instances can be duplicated using copy.copy() (or copy.deepcopy()),
and can also be compared with == for (exact) equality (see Notes
below).
Examples:
>>> for p, v in Data().items():
...     print(f"{p} = {v}")
cfd_limit_low = 0.0
cfd_limit_high = 0.0
...
mode = 0
...
Print the values of all parameters of a default instance (more interesting
if you replace Data() with, say, get_parameters(0)).
See Also
ParID : Enum of SPC parameter ids.
Notes
The C struct fields base_adr, init, pci_card_no, and
test_eep are hidden from this Python wrapper. These fields are either
not currently meaningful or are redundant with information that can be
obtained from get_module_info or get_eeprom_data. However, these fields
are included in the equality comparison, so an instance created as
Data() may never compare equal to an instance returned by
get_parameters even if all attributes are set to be equal. Usually it is
best to avoid creating an instance from scratch except in special
situations such as testing. Always obtain an instance from
get_parameters.
          as_dict() -> dict[str, int | float]
  
  
      method descriptor
  
  Return a dictionary containing the fields and values.
Returns:
| Type | Description | 
|---|---|
| dict | Every field and its value. | 
          diff_as_dict(other: Data) -> dict[str, int | float]
  
  
      method descriptor
  
  Return a dictionary containing the fields and their values where they differ from the given other instance.
Parameters:
| Name | Type | Description | Default | 
|---|---|---|---|
| other | Data | The instance to compare to. | required | 
Returns:
| Type | Description | 
|---|---|
| dict | Every field that differs from  | 
          diff_items(other: Data) -> Iterable[tuple[str, int | float]]
  
  
      method descriptor
  
  Return an iterable yielding the fields and values where they differ from the given other instance, in fixed order.
The order matches with the ParID enum members.
Returns:
| Type | Description | 
|---|---|
| Iterable | An iterable yielding the pair (name, value) for every field in this instance where the value differs from the other instance. | 
          items() -> Iterable[tuple[str, int | float]]
  
  
      method descriptor
  
  Return an iterable yielding the fields and values in fixed order.
The order matches with the ParID enum members.
Returns:
| Type | Description | 
|---|---|
| Iterable | An iterable yielding the pair (name, value) for every field. | 
          EEPData
  Information read from an SPC modules non-volatile memory.
Wraps the SPCM-DLL SPC_EEP_Data struct. Values of this type are
returned by get_eeprom_data.
Attributes:
| Name | Type | Description | 
|---|---|---|
| module_type | str | The module type as a string, such as  | 
| serial_no | str | The serial number (read-only). | 
| date | str | Production date, such as  | 
| adj_para | AdjustPara | Adjustment parameters (read-only). | 
          as_dict() -> dict[str, Any]
  
  
      method descriptor
  
  Return a dictionary containing the fields and values.
Returns:
| Type | Description | 
|---|---|
| dict | Every field and its value. | 
          items() -> Iterable[tuple[str, Any]]
  
  
      method descriptor
  
  Return an iterable yielding the fields and values in fixed order.
Returns:
| Type | Description | 
|---|---|
| Iterable | An iterable yielding the pair (name, value) for every field. | 
          ErrorEnum
  
            Bases: enum.Enum
Enum of SPCM-DLL error codes.
The members' values are SPCM-DLL error codes (except for UNKNOWN). An
additional member, UNKNOWN, which does not appear in SPCM-DLL, is used
for any unknown error code that is encountered.
Usually you will get a value of this type from the enum attribute of an
SPCMError exception.
Examples:
>>> for e in ErrorEnum:
...     print(e.value, e.name, get_error_string(e))
0 NONE No error
-1 OPEN_FILE Can't open file
...
-32769 UNKNOWN Unknown SPCM error
Print a list of all enum members and the corresponding error message.
See Also
SPCMError : Exception class for SPCM-DLL errors.
          FIFOInitVars
  Dataclass aggregating the return values of get_fifo_init_vars.
Attributes:
| Name | Type | Description | 
|---|---|---|
| fifo_type | FIFOType | FIFO data format. | 
| stream_type | StreamType | Stream properties. | 
| mt_clock | int | Macrotime clock units in units of 0.1 ns (or 1 fs in the case of DPC-230). | 
| spc_header | array | 4-byte .spc file header. In the case of SPC-600/630 FIFO-48 format, two zero bytes should be appended to form the 6-byte file header. | 
          FIFOType
  
            Bases: enum.Enum
Enum of FIFO data formats.
Values of this type are returned by get_fifo_init_vars as an attribute of
FIFOInitVars.
Examples:
>>> for e in FIFOType:
...     print(e.name, e.value)
SPC_600_48BIT 2
SPC_600_32BIT 3
SPC_130 4
SPC_830 5
SPC_140 6
SPC_150 7
DPC_230 8
IMAGE 9
TDC 11
TDC_ABS 12
UNKNOWN 0
Print a table of all enum members.
          InUseStatus
  
            Bases: enum.Enum
Enum representing whether an SPC module is in use.
Possible values are NOT_IN_USE (0), IN_USE_HERE (1), and
IN_USE_ELSEWHERE (-1), "elsewhere" meaning by another program or process.
Values of this type are returned (as an attribute of ModInfo) by
get_module_info.
          InitStatus
  
            Bases: enum.Enum
Enum for the initialization status of an SPC module.
Values of this type are returned by get_init_status and (as an attribute
of ModInfo) by get_module_info.
Attributes:
| Name | Type | Description | 
|---|---|---|
| message | str | Human-readable message string | 
Examples:
>>> for e in InitStatus:
...     print(e.name, e.value, e.message)
OK 0 Initialized
NOT_DONE -1 Initialization not requested
...
XILINX_ERR -100 FPGA configuration error
Print a table of all the enum members and corresponding messages.
Notes
The member XILINX_ERR is used for all possible Xilinx (FPGA
configuration) errors (-100 through -199) returned by SPCM-DLL functions.
          MeasurementState
  
            Bases: enum.Flag
Flag enum for measurement state.
Values of this type are returned by test_state.
For the sake of readability, the enum members are named differently from SPCM-DLL. See the example below for how to view the correspondence.
Examples:
>>> for n in MeasurementState.__members__:
...     e = MeasurementState[n]
...     print(e.name, e.value)
STOPPED_ON_OVERFLOW 1
OVERFLOW 2
...
Print a table of all enum members, including aliases.
>>> for name in MeasurementState.__members__:
...     e = MeasurementState[name]
...     print(
...         f"{measurement_state_bh_name(name):16} {e.value: 6} {name}"
...     )
SPC_OVERFL            1 STOPPED_ON_OVERFLOW
SPC_OVERFLOW          2 OVERFLOW
SPC_TIME_OVER         4 STOPPED_ON_COLLECT_TIME
SPC_COLTIM_OVER       8 COLLECT_TIME_ELAPSED
SPC_CMD_STOP         16 STOPPED_ON_COMMAND
SPC_REPTIM_OVER      32 REPEAT_TIME_ELAPSED
SPC_ARMED           128 ARMED
SPC_COLTIM_2OVER    256 COLLECT_TIME_ELAPSED_2ND_TIME
SPC_REPTIM_2OVER    512 REPEAT_TIME_ELAPSED_2ND_TIME
SPC_FOVFL          1024 FIFO_OVERFLOW
SPC_FEMPTY         2048 FIFO_EMPTY
SPC_WAIT_FR        8192 WAITING_FOR_FRAME
SPC_MEASURE          64 MEASUREMENT_ACTIVE
SPC_SCRDY          1024 SCAN_READY
SPC_FBRDY          2048 SCAN_FLOWBACK_READY
SPC_WAIT_TRG       4096 WAITING_FOR_TRIGGER
SPC_HFILL_NRDY    32768 HARDWARE_FILL_NOT_READY
SPC_SEQ_STOP      16384 STOPPED_BY_SEQUENCER
SPC_SEQ_GAP150     8192 SEQUENCER_GAP_150
SPC_SEQ_GAP          64 SEQUENCER_GAP
SPC_ARMED1          128 TDC1_ARMED
SPC_CTIM_OVER1        8 TDC1_COLLECT_TIME_ELAPSED
SPC_FEMPTY1         256 TDC1_FIFO_EMPTY
SPC_FOVFL1         1024 TDC1_FIFO_OVERFLOW
SPC_ARMED2        16384 TDC2_ARMED
SPC_CTIM_OVER2       32 TDC2_COLLECT_TIME_ELAPSED
SPC_FEMPTY2         512 TDC2_FIFO_EMPTY
SPC_FOVFL2         2048 TDC2_FIFO_OVERFLOW
Print the correspondence from SPCM-DLL names to pybhspc names.
See Also
measurement_state_bh_name
          ModInfo
  SPC module information.
Wraps the SPCM-DLL SPCModInfo struct. Values of this type are returned
by get_module_info.
Attributes:
| Name | Type | Description | 
|---|---|---|
| module_type | ModuleType | The module type (read-only). | 
| bus_number | int | The PCI bus number (read-only). | 
| slot_number | int | The PCI slot number (read-only). | 
| in_use | InUseStatus | Whether the module is in use (read-only). | 
| init | InitStatus | Whether the module is initialized, and the reason why if not (read-only). | 
          as_dict() -> dict[str, Any]
  
  
      method descriptor
  
  Return a dictionary containing the fields and values.
Returns:
| Type | Description | 
|---|---|
| dict | Every field and its value. | 
          items() -> Iterable[tuple[str, Any]]
  
  
      method descriptor
  
  Return an iterable yielding the fields and values in fixed order.
Returns:
| Type | Description | 
|---|---|
| Iterable | An iterable yielding the pair (name, value) for every field. | 
          ModuleType
  
            Bases: enum.Enum
Enum for the module type (model number) of an SPC module.
Values of this type are returned by test_id and (as an attribute of
ModInfo) by get_module_info.
Not to be confused with DLLOperationMode, which has similar (but slightly
different) values.
Examples:
>>> for e in ModuleType:
...     print(e.name, e.value)
SPC_600 600
SPC_630 630
...
SPC_150NX_OR_150NXX 152
...
Print a table of all the enum members.
          ParID
  
            Bases: enum.Enum
Enum of SPC parameter ids.
The members' values are the SPCM-DLL parameter ids. Members also have an
attribute type which is either int or float.
Values of this type are passed to get_parameter and set_parameter. The
attributes of the Data class match the lowercased version of the enum
member names.
C language parameter types short, unsigned short, and unsigned
long all map to Python int. C language float maps to Python
float.
Attributes:
| Name | Type | Description | 
|---|---|---|
| type | type | The parameter type:  | 
Examples:
>>> for e in ParID:
...     print(e.value, e.name, e.type.__name__)
0 CFD_LIMIT_LOW float
1 CFD_LIMIT_HIGH float
...
27 MODE int
...
Print a list of all parameter ids, their names, and types.
See Also
Data : Aggregate object of all the parameters and their values.
          RateValues
  Rate counter values.
Wraps the SPCM-DLL rate_values struct. Values of this type are returned
by read_rates.
Attributes:
| Name | Type | Description | 
|---|---|---|
| sync_rate | float | The SYNC rate (counts/s, read-only). | 
| cfd_rate | float | The CFD rate (counts/s, read-only). | 
| tac_rate | float | The TAC rate (counts/s, read-only). | 
| adc_rate | float | The ADC rate (counts/s, read-only). | 
          as_dict() -> dict[str, float]
  
  
      method descriptor
  
  Return a dictionary containing the fields and values.
Returns:
| Type | Description | 
|---|---|
| dict | Every field and its value. | 
          items() -> Iterable[tuple[str, float]]
  
  
      method descriptor
  
  Return an iterable yielding the fields and values in fixed order.
Returns:
| Type | Description | 
|---|---|
| Iterable | An iterable yielding the pair (name, value) for every field. | 
          SPCMError
  
            Bases: builtins.RuntimeError
Exception raised when an SPCM function returns an error.
Attributes:
| Name | Type | Description | 
|---|---|---|
| enum | ErrorEnum | The error enum (read-only). | 
| code | int | The raw error code, a negative value (read-only). This is usually
redundant with the  | 
See Also
ErrorEnum : Enum of SPCM-DLL error codes.
          StreamType
  
            Bases: enum.Flag
Flag enum for properties of SPCM-DLL streams.
Values of this type are returned by get_fifo_init_vars as an attribute of
FIFOInitVars.
Examples:
>>> for f in StreamType:
...     print(f.name, f.value)
HAS_SPC_HEADER 1
HAS_MARKERS 512
RAW_DATA 1024
SPC_QC 2048
BUFFERED 4096
AUTOFREE_BUFFER 8192
RING_BUFFER 16384
DPC_TDC1_RAW_DATA 2
DPC_TDC2_RAW_DATA 4
DPC_TDC_TTL_RAW_DATA 8
DPC 256
Print a table of all flag members.
Notes
pybhspc does not support SPCM-DLL stream functions.
          SyncState
  
            Bases: enum.Flag
Flag enum for sync state.
Values of this type are returned by get_sync_state.
There are two flags: SYNC_OK (bit 0) and SYNC_OVERLOAD (bit 1). When
the SYNC_OVERLOAD bit is set, the SYNC_OK bit is invalid.
          clear_rates(mod_no: int) -> None
  
  
      method descriptor
  
  Initialize and clear the rate counters and start a count cycle.
Parameters:
| Name | Type | Description | Default | 
|---|---|---|---|
| mod_no | int | The SPC module index. | required | 
          close() -> None
  
  
      method descriptor
  
  Uninitialize SPCM-DLL.
          get_actual_coltime(mod_no: int) -> float
  
  
      method descriptor
  
  Get the remaining time to the end of the measurement, taking dead time compensation into account.
Under some conditions (e.g., in FIFO mode with STOP_ON_TIME disabled), the
return value counts up similarly to get_time_from_start.
test_state must be called periodically for this function to work
correctly during measurements that exceed 80 seconds.
Parameters:
| Name | Type | Description | Default | 
|---|---|---|---|
| mod_no | int | The SPC module index. | required | 
Returns:
| Type | Description | 
|---|---|
| float | Remaining or elapsed collection time, in seconds. | 
          get_adjust_parameters(mod_no: int) -> AdjustPara
  
  
      method descriptor
  
  Get adjustment parameters of an SPC module.
Parameters:
| Name | Type | Description | Default | 
|---|---|---|---|
| mod_no | int | The SPC module index. | required | 
Returns:
| Type | Description | 
|---|---|
| AdjustPara | Adjustment parameters of the module. | 
          get_break_time(mod_no: int) -> float
  
  
      method descriptor
  
  Get the time from measurement start to stop or pause.
The return value may not be valid in FIFO mode (to be investigated).
Parameters:
| Name | Type | Description | Default | 
|---|---|---|---|
| mod_no | int | The SPC module index. | required | 
Returns:
| Type | Description | 
|---|---|
| float | Duration of measurement in seconds. | 
          get_eeprom_data(mod_no: int) -> EEPData
  
  
      method descriptor
  
  Get EEPROM data of an SPC module.
Parameters:
| Name | Type | Description | Default | 
|---|---|---|---|
| mod_no | int | The SPC module index. | required | 
Returns:
| Type | Description | 
|---|---|
| EEPData | EEPROM data of the module. | 
          get_error_string(error_id: int | ErrorEnum) -> str
  
  
      method descriptor
  
  Return the error message for the given SPCM error code.
Parameters:
| Name | Type | Description | Default | 
|---|---|---|---|
| error_id | int or ErrorEnum | The error code | required | 
Returns:
| Type | Description | 
|---|---|
| str | The error message | 
          get_fifo_init_vars(mod_no: int) -> FIFOInitVars
  
  
      method descriptor
  
  Get format information on the currently set FIFO mode.
The return value is only meaningful if the module is set to a FIFO mode.
For SPC-600/630, the number of routing bits in the SPCHeader may always be zero (in both FIFO formats).
Parameters:
| Name | Type | Description | Default | 
|---|---|---|---|
| mod_no | int | The SPC module index. | required | 
Returns:
| Type | Description | 
|---|---|
| FIFOInitVars | The FIFO format information. | 
          get_fifo_usage(mod_no: int) -> float
  
  
      method descriptor
  
  Get the used fraction of the FIFO.
Parameters:
| Name | Type | Description | Default | 
|---|---|---|---|
| mod_no | int | The SPC module index. | required | 
Returns:
| Type | Description | 
|---|---|
| float | The fraction of the FIFO occupied (0.0 to 1.0). | 
          get_init_status(mod_no: int) -> InitStatus
  
  
      method descriptor
  
  Get the initialization status of the given SPC module.
Parameters:
| Name | Type | Description | Default | 
|---|---|---|---|
| mod_no | int | The SPC module index. | required | 
Returns:
| Type | Description | 
|---|---|
| InitStatus | Whether the module is initialized, or the reason why if not. | 
          get_mode() -> DLLOperationMode
  
  
      method descriptor
  
  Get the operation mode of SPCM-DLL.
Returns:
| Type | Description | 
|---|---|
| DLLOperationMode | The mode, either hardware or simulation of a module type. | 
Raises:
| Type | Description | 
|---|---|
| SPCMError | If there was an error (e.g., if SPCM-DLL is not initialized). | 
          get_module_info(mod_no: int) -> ModInfo
  
  
      method descriptor
  
  Get information about an SPC module.
Parameters:
| Name | Type | Description | Default | 
|---|---|---|---|
| mod_no | int | The SPC module index. | required | 
Returns:
| Type | Description | 
|---|---|
| ModInfo | Basic information about the module. | 
          get_parameter(mod_no: int, par_id: ParID) -> float | int
  
  
      method descriptor
  
  Get one parameter's value.
Parameters:
| Name | Type | Description | Default | 
|---|---|---|---|
| mod_no | int | The SPC module index. | required | 
| par_id | ParID | The parameter to read. | required | 
Returns:
| Type | Description | 
|---|---|
| float or int | The parameter value. | 
          get_parameters(mod_no: int) -> Data
  
  
      method descriptor
  
  Get all parameter values of an SPC module.
Parameters:
| Name | Type | Description | Default | 
|---|---|---|---|
| mod_no | int | The SPC module index. | required | 
Returns:
| Type | Description | 
|---|---|
| Data | The parameter values. | 
          get_sync_state(mod_no: int) -> SyncState
  
  
      method descriptor
  
  Get the state of the SYNC input.
Parameters:
| Name | Type | Description | Default | 
|---|---|---|---|
| mod_no | int | The SPC module index. | required | 
Returns:
| Type | Description | 
|---|---|
| SyncState | Whether the SYNC signal is triggering and whether it is overloaded. | 
          get_time_from_start(mod_no: int) -> float
  
  
      method descriptor
  
  Get the time since measurement start.
test_state must be called periodically for this function to work
correctly during measurements that exceed 80 seconds.
Parameters:
| Name | Type | Description | Default | 
|---|---|---|---|
| mod_no | int | The SPC module index. | required | 
Returns:
| Type | Description | 
|---|---|
| float | Elapsed time since measurement start, in seconds. | 
          get_version(mod_no: int) -> str
  
  
      method descriptor
  
  Get the FPGA version of an SPC module.
Parameters:
| Name | Type | Description | Default | 
|---|---|---|---|
| mod_no | int | The SPC module index. | required | 
Returns:
| Type | Description | 
|---|---|
| str | The FPGA version (4 hex digits). | 
          init(ini_file: bytes | str) -> None
  
  
      method descriptor
  
  Initialize SPCM-DLL and one or all of the available SPC modules.
Parameters:
| Name | Type | Description | Default | 
|---|---|---|---|
| ini_file | bytes or str | Filename of the .ini file used to specify parameters. | required | 
Raises:
| Type | Description | 
|---|---|
| SPCMError | If initialization fails or there were no available SPC modules. | 
          measurement_state_bh_name(name: str) -> str
  
  
      method descriptor
  
  Map MeasurementState enum member names to their SPCM-DLL names.
Parameters:
| Name | Type | Description | Default | 
|---|---|---|---|
| name | str | The pybhspc  | required | 
Returns:
| Type | Description | 
|---|---|
| str | The corresponding SPCM-DLL constant name. | 
See Also
MeasurementState
          read_fifo(mod_no: int, data) -> int
  
  
      method descriptor
  
  Read data from a FIFO mode measurement.
Parameters:
| Name | Type | Description | Default | 
|---|---|---|---|
| mod_no | int | The SPC module index. | required | 
| data | array_like | The destination buffer for the data read. The object must implement the
buffer protocol, be typed unsigned short (uint16), be 1-dimentional,
and be C-contiguous. For example,  | required | 
Returns:
| Type | Description | 
|---|---|
| int | The number of 16-bit words read. Thus, if the return value is  | 
          read_fifo_to_array(mod_no: int, max_words: int) -> array.array
  
  
      method descriptor
  
  Convenience wrapper around read_fifo that allocates an array for the
output.
Parameters:
| Name | Type | Description | Default | 
|---|---|---|---|
| mod_no | int | The SPC module index. | required | 
| max_words | int | Maximum number of 16-bit words to read. | required | 
Returns:
| Type | Description | 
|---|---|
| array.array of unsigned short | The FIFO data read. The length of the array is between 0 and
 | 
          read_parameters_from_inifile(inifile: bytes | str) -> Data
  
  
      method descriptor
  
  Read an .ini file in the spcm.ini format.
The .ini file must contain a first-line comment starting with (whitespace
followed by) SPCM, an [spc_base] section, and an [spc_module]
section. The sections may be empty but the section headers need to be
terminated with a newline.
Parameters:
| Name | Type | Description | Default | 
|---|---|---|---|
| inifile | bytes or str | Filename of the .ini file. | required | 
Returns:
| Type | Description | 
|---|---|
| Data | The parameters read from the .ini file. | 
          read_rates(mod_no: int) -> RateValues | None
  
  
      method descriptor
  
  Read the rate counters and start a new count cycle.
Parameters:
| Name | Type | Description | Default | 
|---|---|---|---|
| mod_no | int | The SPC module index. | required | 
Returns:
| Type | Description | 
|---|---|
| RateValues or None | The rate counts, or None if a count cycle has not yet completed. | 
          save_parameters_to_inifile(data: Data, dest_inifile: bytes | str, *, source_inifile: bytes | str | None = None, with_comments: bool = False) -> None
  
  
      method descriptor
  
  Save parameters to an .ini file in the spcm.ini format.
A source .ini file is required for this function to work, optionally given
by source_inifile. If not given, the filename previously passed to init
is used. Either way, this file must exist and must contain a first-line
comment starting with (whitespace followed by) SPCM, an [spc_base]
section, and an [spc_module] section. The sections may be empty but the
section headers need to be terminated with a newline.
When with_comments is True, it appears that there need to be at least 2
fields set in the [spc_module] section of the source_inifile. The
precise requirements have not been determined.
Parameters:
| Name | Type | Description | Default | 
|---|---|---|---|
| data | Data | The parameters to save. | required | 
| dest_inifile | bytes or str | Filename of the .ini file to write. | required | 
| source_inifile | bytes or str or None | Filename of an .ini file from which to copy initial comment lines and
the  | None | 
| with_comments | bool | If True, also copy parameter comments from  | False | 
          set_mode(mode: DLLOperationMode, force_use: bool, use: Sequence[bool]) -> None
  
  
      method descriptor
  
  Set the operation mode of SPCM-DLL and activate or deactivate each of the SPC modules.
Parameters:
| Name | Type | Description | Default | 
|---|---|---|---|
| mode | DLLOperationMode | The operation mode specifying hardware or simulation module type. | required | 
| force_use | bool | If true, try to obtain control of the requested modules even if they are in use by another process. | required | 
| use | sequence of bool | Which SPC modules to activate. Currently up to 8 are supported. If fewer are given, the remaining modules will be deactivated. | required | 
Raises:
| Type | Description | 
|---|---|
| SPCMError | If there was an error or if no modules were activated. | 
          set_parameter(mod_no: int, par_id: ParID, value: float | int) -> None
  
  
      method descriptor
  
  Set one parameter's value.
Parameters:
| Name | Type | Description | Default | 
|---|---|---|---|
| mod_no | int | The SPC module index. | required | 
| par_id | ParID | The parameter to write. | required | 
| value | float or int | The parameter value. | required | 
          set_parameters(mod_no: int, data: Data) -> None
  
  
      method descriptor
  
  Set all parameter values of an SPC module.
Parameters:
| Name | Type | Description | Default | 
|---|---|---|---|
| mod_no | int | The SPC module index. | required | 
| data | Data | The parameter values. | required | 
          start_measurement(mod_no: int) -> None
  
  
      method descriptor
  
  Start a measurement.
Parameters:
| Name | Type | Description | Default | 
|---|---|---|---|
| mod_no | int | The SPC module index. | required | 
          stop_measurement(mod_no: int) -> None
  
  
      method descriptor
  
  Stop any ongoing measurement.
Parameters:
| Name | Type | Description | Default | 
|---|---|---|---|
| mod_no | int | The SPC module index. | required | 
          test_id(mod_no: int) -> ModuleType
  
  
      method descriptor
  
  Return the module type (model number) of the given SPC module.
The return value is not accurate if called before init.
Parameters:
| Name | Type | Description | Default | 
|---|---|---|---|
| mod_no | int | The SPC module index. | required | 
Returns:
| Type | Description | 
|---|---|
| ModuleType | The module type enum. | 
          test_state(mod_no: int) -> MeasurementState
  
  
      method descriptor
  
  Get various status flags for the last-started measurement.
This function should be called periodically during a measurement in order to detect when the measurement is stopped (among other things).
Parameters:
| Name | Type | Description | Default | 
|---|---|---|---|
| mod_no | int | The SPC module index. | required | 
Returns:
| Type | Description | 
|---|---|
| MeasurementState | Flags indicating timer and FIFO states, reason for measurement stop, etc. |