Logger and extractor of time-series data (e.g. EPICS PVs or liteServer LDOs).
Project description
apstrim
Logger and extractor of time-series data (e.g. EPICS PVs).
- Data are objects, indexed in time order.
- Supported Control Infrastructures: EPICS, ADO, LITE. Easy extendable.
- Wide range of data objects: strings, lists, maps, numpy arrays, custom.
- Data objects could be inhomogeneous and have arbitrary frequency.
- Self-describing data format, no schema required.
- Data objects are binary-serialized using MessagePack.
- Fast online compression.
- Fast random-access retrieval of data objects for selected time interval.
- Simultaneous writing and reading.
- Typical speed of compressed serialization to a logbook file is 80 MB/s.
- De-serialization speed is up to 1200 MB/s when the logbook is cached in memory.
- Basic plotting of the logged data.
Installation
Dependencies: msgpack, caproto, lz4framed. These packages will be installed using pip:
pip3 install apstrim
The example program for deserialization and plotting apstrim.view, requires additional package: pyqtgraph.
API refrerence
Examples
Serialization
# Serialization of one float64 parameter from an EPICS simulated scope IOC:
:python -m apstrim -nEPICS -T59 testAPD:scope1:MeanValue_RBV
Logging finished for 1 sections, 1 parLists, 7.263 KB.
...
# The same with compression:
:python -m apstrim -nEPICS -T59 testAPD:scope1:MeanValue_RBV --compress
Logging finished for 1 sections, 1 parLists, 6.101 KB. Compression ratio:1.19
...
# Serialization 1000-element array and one scalar of floats:
:python -m apstrim -nEPICS -T59 testAPD:scope1:MeanValue_RBV,Waveform_RBV --compress
Logging finished for 1 sections, 2 parLists, 2405.354 KB. Compression ratio:1.0
...
# Note, Compression is poor for floating point arrays with high entropy.
# Serialization of an incrementing integer parameter:
:python -m apstrim -nLITE --compress liteHost:dev1:cycle
Logging finished for 1 sections, 1 parLists, 56.526 KB. Compression ratio:1.25
...
# In this case the normalized compressed volume is 9.3 bytes per entry.
# Each entry consist of an int64 timestamp and an int64 value, which would
# occupy 16 bytes per entry using standard writing.
De-serialization
Example of deserialization and plotting of all parameters from several logbooks.
python -m apstrim.view -i all -p *.aps
Python code snippet to extract items 1,2 and 3 from a logbook for 20 seconds interval starting on 2021-08-12 at 23:31:31.
from apstrim.scan import APScan
apscan = APScan('aLogbook.aps')
headers = apscan.get_headers()
print(f'{headers["Index"]}')
extracted = apscan.extract_objects(span=20, items=[1,2,3], startTime='210812_233131')
print(f'{extracted[3]}')# print the extracted data for item[3]
# returned:
{'par': 'liteBridge.peakSimulator:rps', # object (PV) name of the item[3]
'times': [1628825500.8938403, 1628825510.898658], # list of the item[3] timestamps
'values': [95.675125, 95.55396]} # list of the item[3] values
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
apstrim-3.1.0.tar.gz
(5.3 MB
view details)
Built Distribution
apstrim-3.1.0-py3-none-any.whl
(46.1 kB
view details)
File details
Details for the file apstrim-3.1.0.tar.gz
.
File metadata
- Download URL: apstrim-3.1.0.tar.gz
- Upload date:
- Size: 5.3 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.11.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5ee88da4f5cca09dfeb3606309849d7f3a39b03ba58a79db198ed858ef674219 |
|
MD5 | 0826aba49444c8378626d53507d735a4 |
|
BLAKE2b-256 | b2bf5b20d24e98f336069efa7441e9d457f7446515f2d3775508fbb8c727ab2b |
File details
Details for the file apstrim-3.1.0-py3-none-any.whl
.
File metadata
- Download URL: apstrim-3.1.0-py3-none-any.whl
- Upload date:
- Size: 46.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.11.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3ec9233c7b499ea7cabde9e6ed4e256275a15d9131b7b892dcde5925dcc1d84d |
|
MD5 | 12db0b257d4b8814675bcc754ff93b61 |
|
BLAKE2b-256 | 185714914bf4ed890d0c16aa26ae0cd536409ce0bbd9844c8ad4071bb4c7dff9 |