The combos module¶
The combos are cobinations of other PyExpLabSys components in commonly used configurations. Currently the only implemented combination are:
LiveContinuousLoggerwhich combines aLiveSocketwith aContinuousDataSaverand
Table of Contents
Examples¶
LiveContinuousLogger¶
This example shows the case of using the combo to log values individually, using the “now”
variety of the method (LiveContinuousLogger.log_point_now()), which uses the time
now as the x-value:
from time import sleep
from random import random
from math import sin
from PyExpLabSys.combos import LiveContinuousLogger
# Initialize the combo and start it
combo = LiveContinuousLogger(
name='test',
codenames=['dummy_sine_one', 'dummy_sine_two'],
continuous_data_table='dateplots_dummy',
username='dummy',
password='dummy',
time_criteria=0.1,
)
combo.start()
# Measurement loop (typically runs forever, here just for 10 sec)
for _ in range(10):
# The two sine values here emulate a value to be logged
sine_one = sin(random())
sine_two = sin(random())
combo.log_point_now('dummy_sine_one', sine_one)
combo.log_point_now('dummy_sine_two', sine_two)
sleep(1)
combo.stop()
or if it is preferred to keep track of the timestamp manually, the
LiveContinuousLogger.log_point() method which can be used instead:
from time import sleep, time
from math import sin, pi
from PyExpLabSys.combos import LiveContinuousLogger
# Initialize the combo and start it
combo = LiveContinuousLogger(
name='test',
codenames=['dummy_sine_one', 'dummy_sine_two'],
continuous_data_table='dateplots_dummy',
username='dummy',
password='dummy',
time_criteria=0.1,
)
combo.start()
# Measurement loop (typically runs forever, here just for 10 sec)
for _ in range(10):
# The two sine values here emulate a value to be logged
now = time()
sine_one = sin(now)
sine_two = sin(now + pi)
combo.log_point('dummy_sine_one', (now, sine_one))
combo.log_point('dummy_sine_two', (now, sine_two))
sleep(1)
combo.stop()
Of course, like most of the underlying code, the combo also takes data at batches, as
shown in the following example (using LiveContinuousLogger.log_batch()):
from time import sleep, time
from math import sin, pi
from PyExpLabSys.combos import LiveContinuousLogger
# Initialize the combo and start it
combo = LiveContinuousLogger(
name='test',
codenames=['dummy_sine_one', 'dummy_sine_two'],
continuous_data_table='dateplots_dummy',
username='dummy',
password='dummy',
time_criteria=0.1,
)
combo.start()
# Measurement loop (typically runs forever, here just for 10 sec)
for _ in range(10):
# The two sine values here emulate a value to be logged
now = time()
points = {
'dummy_sine_one': (now, sin(now)),
'dummy_sine_two': (now, sin(now + pi)),
}
combo.log_batch(points)
sleep(1)
combo.stop()
For the bacthes there is of course also a “now” variety
(LiveContinuousLogger.log_batch_now()), which there is no example for, but the
difference is same as for the single point/value.
Auto-generated module documentation¶
This module contains socket, database saver and logger heuristic combinations
-
class
PyExpLabSys.combos.LiveContinuousLogger(name, codenames, continuous_data_table, username, password, time_criteria=None, absolute_criteria=None, relative_criteria=None, live_server_kwargs=None)[source]¶ Bases:
objectA combination of a
LiveSocketand aContinuousDataSaverthat also does logging heuristicsFIXME explain the term log
-
__init__(name, codenames, continuous_data_table, username, password, time_criteria=None, absolute_criteria=None, relative_criteria=None, live_server_kwargs=None)[source]¶ Initialize local data
Parameters: - name (str) – The name to be used in the sockets
- codenames (sequence) – A sequence of codenames. These codenames are the
measurements codenames for the
ContinuousDataSaverand they will also be used as the codenames for theLiveSocket. - continuous_data_table (str) – The continuous data table to log data to
- username (str) – The MySQL username
- password (str) – The password for
usernamein the database - time_criteria (float or dict) – (Optional) The time after which a point will always be saved in the database. Either a single value, which will be used for all codenames or a dict of codenames to values. If supplying a dict, each codename must be present as a key.
- absolute_criteria (float or dict) – (Optional) The absolute value difference criteria. Either a single value or one for each codename, see time_criteria for details.
- relative_criteria (float or dict) – (Optional) The relative value difference criteria. Either a single value or one for each codename, see time_criteria for details.
- lives_server_kwargs (dict) – (Optinal) A dict of keyword arguments for the
LiveSocket. See the doc string forLiveSocket.__init__()for additional details.
-
start()[source]¶ Start the underlying
LiveSocketandContinuousDataSaver
-
stop()[source]¶ Stop the underlying
LiveSocketandContinuousDataSaver
-
log_point_now(codename, value)[source]¶ Log a point now
As the time will be attached the time now.
For an explanation of what is meant by the term “log”, see the
class docstring.Parameters: - codename (str) – The codename to log this point for
- value (float) – The value to store with the time now (
time.time())
-
log_point(codename, point)[source]¶ Log a point
For an explanation of what is meant by the term “log”, see the
class docstring.Parameters: - codename (str) – The codename to log this point for
- point (sequence) – A (unix_time, value) two item sequence (e.g. list or tuple), that represents a point
-
log_batch_now(values)[source]¶ Log a batch of values now
For an explanation of what is meant by the term “log”, see the
class docstring.Parameters: values (dict) – Dict of codenames to values. The values will be stored with the time now ( time.time())
-
log_batch(points)[source]¶ Log a batch of points
For an explanation of what is meant by the term “log”, see the
class docstring.Parameters: points (dict) – Dict of codenames to points
-