The combos module

The combos are cobinations of other PyExpLabSys components in commonly used configurations. Currently the only implemented combination are:

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: object

A combination of a LiveSocket and a ContinuousDataSaver that also does logging heuristics

FIXME 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 ContinuousDataSaver and they will also be used as the codenames for the LiveSocket.
  • continuous_data_table (str) – The continuous data table to log data to
  • username (str) – The MySQL username
  • password (str) – The password for username in 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 for LiveSocket.__init__() for additional details.
start()[source]

Start the underlying LiveSocket and ContinuousDataSaver

stop()[source]

Stop the underlying LiveSocket and ContinuousDataSaver

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