# licel-gmbh/licel_tcpip_python architecture

> Architecture diagram of the GitHub repository licel-gmbh/licel_tcpip_python, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-25). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/licel-gmbh/licel_tcpip_python
- Repository: https://github.com/licel-gmbh/licel_tcpip_python

## Overview

Licel_TCPIP Python is a device-control and acquisition library for Licel Ethernet controllers and instruments. Applications configure devices, initiate transient-recorder or Waverider/SP32 acquisitions, retrieve data, and then process or save it. The README also documents PMT voltage control, powermeter trace and push acquisition, and simultaneous multi-recorder MPUSH. Sampled source supports the controller, transient-recorder, parser, SP32, and Waverider flows; several other documented instrument capabilities are represented by their module paths, with uncertain internal wiring omitted.

Main entry points: [`Licel/licel_tcpip.py`](https://github.com/licel-gmbh/licel_tcpip_python/blob/main/Licel/licel_tcpip.py) (Ethernet controller), [`Licel/licel_tr_tcpip.py`](https://github.com/licel-gmbh/licel_tcpip_python/blob/main/Licel/licel_tr_tcpip.py) (Transient recorder), [`Licel/licel_wind.py`](https://github.com/licel-gmbh/licel_tcpip_python/blob/main/Licel/licel_wind.py) (Waverider control), [`Licel/licel_SP32.py`](https://github.com/licel-gmbh/licel_tcpip_python/blob/main/Licel/licel_SP32.py) (SP32 control)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_network["Controller networking"]
  node_controller["Ethernet controller<br/>[licel_tcpip.py]"]
  node_tcp["Socket utilities<br/>[TCP_util.py]"]
end

subgraph group_instruments["Instrument control"]
  node_tr["Transient recorder<br/>[licel_tr_tcpip.py]"]
  node_wind["Waverider control<br/>[licel_wind.py]"]
  node_sp32["SP32 control<br/>[licel_SP32.py]"]
  node_pmt["Photomultiplier control<br/>[photomultiplier.py]"]
  node_power["Powermeter control<br/>[powermeter.py]"]
  node_silentstat["SilentStat control"]
  node_laser["Laser synchronization<br/>[licel_LaserSync.py]"]
  node_timing["Timing control<br/>[licel_timing.py]"]
end

subgraph group_data["Acquisition data"]
  node_parser["Data parsing<br/>[licel_data.py]"]
  node_netcdf["NetCDF output<br/>[licel_netCDF.py]"]
end

subgraph group_configuration["Configuration and utilities"]
  node_config["Acquisition configuration<br/>[licel_Config.py]"]
  node_sp32config["SP32 configuration"]
  node_timingconfig["Timing configuration"]
  node_search["Controller discovery"]
end

node_application(("User application"))
node_device{{"Licel controller"}}
node_file["Acquisition files"]

node_application -->|"opens connection"| node_controller
node_controller -->|"initializes sockets"| node_tcp
node_controller -->|"creates recorder"| node_tr
node_controller -->|"creates control"| node_pmt
node_controller -->|"creates control"| node_silentstat
node_controller -->|"connects sockets"| node_device
node_tr -->|"sends commands"| node_device
node_tr -->|"receives push data"| node_device
node_application -->|"starts acquisition"| node_tr
node_application -->|"parses datasets"| node_parser
node_parser -->|"writes Licel format"| node_file
node_application -->|"reads settings"| node_config
node_application -->|"configures and acquires"| node_wind
node_wind -->|"sends requests"| node_device
node_application -->|"writes spectra"| node_netcdf
node_netcdf -->|"stores NetCDF"| node_file
node_application -->|"configures and acquires"| node_sp32
node_sp32 -->|"sends commands"| node_device
node_application -->|"reads settings"| node_sp32config
node_application -->|"sets voltage"| node_pmt
node_application -->|"acquires traces"| node_power
node_application -->|"uses runtime or store"| node_silentstat
node_application -.->|"synchronizes laser"| node_laser
node_application -.->|"controls timing"| node_timing
node_application -.->|"reads settings"| node_timingconfig
node_application -.->|"discovers controllers"| node_search

click node_controller "https://github.com/licel-gmbh/licel_tcpip_python/blob/main/Licel/licel_tcpip.py"
click node_tcp "https://github.com/licel-gmbh/licel_tcpip_python/blob/main/Licel/TCP_util.py"
click node_tr "https://github.com/licel-gmbh/licel_tcpip_python/blob/main/Licel/licel_tr_tcpip.py"
click node_wind "https://github.com/licel-gmbh/licel_tcpip_python/blob/main/Licel/licel_wind.py"
click node_sp32 "https://github.com/licel-gmbh/licel_tcpip_python/blob/main/Licel/licel_SP32.py"
click node_pmt "https://github.com/licel-gmbh/licel_tcpip_python/blob/main/Licel/photomultiplier.py"
click node_power "https://github.com/licel-gmbh/licel_tcpip_python/blob/main/Licel/powermeter.py"
click node_silentstat "https://github.com/licel-gmbh/licel_tcpip_python/blob/main/Licel/licel_SilentStat.py"
click node_laser "https://github.com/licel-gmbh/licel_tcpip_python/blob/main/Licel/licel_LaserSync.py"
click node_timing "https://github.com/licel-gmbh/licel_tcpip_python/blob/main/Licel/licel_timing.py"
click node_parser "https://github.com/licel-gmbh/licel_tcpip_python/blob/main/Licel/licel_data.py"
click node_netcdf "https://github.com/licel-gmbh/licel_tcpip_python/blob/main/Licel/licel_netCDF.py"
click node_config "https://github.com/licel-gmbh/licel_tcpip_python/blob/main/Licel/licel_Config.py"
click node_sp32config "https://github.com/licel-gmbh/licel_tcpip_python/blob/main/Licel/licel_SP32_Config.py"
click node_timingconfig "https://github.com/licel-gmbh/licel_tcpip_python/blob/main/Licel/licel_TimingConfig.py"
click node_search "https://github.com/licel-gmbh/licel_tcpip_python/blob/main/SearchControllers.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_controller,node_tcp,node_application toneBlue
class node_tr,node_wind,node_sp32,node_pmt,node_power,node_silentstat,node_laser,node_timing toneAmber
class node_parser,node_netcdf toneMint
class node_config,node_sp32config,node_timingconfig,node_search toneRose
class node_device,node_file toneIndigo
```

## Components

### Controller networking

- [Ethernet controller](https://github.com/licel-gmbh/licel_tcpip_python/blob/main/Licel/licel_tcpip.py): `Licel/licel_tcpip.py`
- [Socket utilities](https://github.com/licel-gmbh/licel_tcpip_python/blob/main/Licel/TCP_util.py): `Licel/TCP_util.py`

### Instrument control

- [Transient recorder](https://github.com/licel-gmbh/licel_tcpip_python/blob/main/Licel/licel_tr_tcpip.py): `Licel/licel_tr_tcpip.py`
- [Waverider control](https://github.com/licel-gmbh/licel_tcpip_python/blob/main/Licel/licel_wind.py): `Licel/licel_wind.py`
- [SP32 control](https://github.com/licel-gmbh/licel_tcpip_python/blob/main/Licel/licel_SP32.py): `Licel/licel_SP32.py`
- [Photomultiplier control](https://github.com/licel-gmbh/licel_tcpip_python/blob/main/Licel/photomultiplier.py): `Licel/photomultiplier.py`
- [Powermeter control](https://github.com/licel-gmbh/licel_tcpip_python/blob/main/Licel/powermeter.py): `Licel/powermeter.py`
- [SilentStat control](https://github.com/licel-gmbh/licel_tcpip_python/blob/main/Licel/licel_SilentStat.py): `Licel/licel_SilentStat.py`
- [Laser synchronization](https://github.com/licel-gmbh/licel_tcpip_python/blob/main/Licel/licel_LaserSync.py): `Licel/licel_LaserSync.py`
- [Timing control](https://github.com/licel-gmbh/licel_tcpip_python/blob/main/Licel/licel_timing.py): `Licel/licel_timing.py`

### Acquisition data

- [Data parsing](https://github.com/licel-gmbh/licel_tcpip_python/blob/main/Licel/licel_data.py): `Licel/licel_data.py`
- [NetCDF output](https://github.com/licel-gmbh/licel_tcpip_python/blob/main/Licel/licel_netCDF.py): `Licel/licel_netCDF.py`

### Configuration and utilities

- [Acquisition configuration](https://github.com/licel-gmbh/licel_tcpip_python/blob/main/Licel/licel_Config.py): `Licel/licel_Config.py`
- [SP32 configuration](https://github.com/licel-gmbh/licel_tcpip_python/blob/main/Licel/licel_SP32_Config.py): `Licel/licel_SP32_Config.py`
- [Timing configuration](https://github.com/licel-gmbh/licel_tcpip_python/blob/main/Licel/licel_TimingConfig.py): `Licel/licel_TimingConfig.py`
- [Controller discovery](https://github.com/licel-gmbh/licel_tcpip_python/blob/main/SearchControllers.py): `SearchControllers.py`

### Other components

- **User application**
- **Licel controller**
- **Acquisition files**

## Connections

- User application → Ethernet controller: opens connection
- Ethernet controller → Socket utilities: initializes sockets
- Ethernet controller → Transient recorder: creates recorder
- Ethernet controller → Photomultiplier control: creates control
- Ethernet controller → SilentStat control: creates control
- Ethernet controller → Licel controller: connects sockets
- Transient recorder → Licel controller: sends commands
- Transient recorder → Licel controller: receives push data
- User application → Transient recorder: starts acquisition
- User application → Data parsing: parses datasets
- Data parsing → Acquisition files: writes Licel format
- User application → Acquisition configuration: reads settings
- User application → Waverider control: configures and acquires
- Waverider control → Licel controller: sends requests
- User application → NetCDF output: writes spectra
- NetCDF output → Acquisition files: stores NetCDF
- User application → SP32 control: configures and acquires
- SP32 control → Licel controller: sends commands
- User application → SP32 configuration: reads settings
- User application → Photomultiplier control: sets voltage
- User application → Powermeter control: acquires traces
- User application → SilentStat control: uses runtime or store
- User application → Laser synchronization: synchronizes laser
- User application → Timing control: controls timing
- User application → Timing configuration: reads settings
- User application → Controller discovery: discovers controllers
