Blue Sky Run Engine

Contents:

  • The Run Engine processes messages
  • There is two-way communication between the message generator and the Run Engine
  • Control timing with 'sleep' and 'wait'
  • Runs can be paused and cleanly resumed or aborted
  • Any functions can subscribe to the live data stream (e.g., live plotting)
  • Fly Scan Prototype

In [3]:
from bluesky import Mover, SynGauss, Msg, RunEngine

motor = Mover('motor', ['pos'])
det = SynGauss('det', motor, 'pos', center=0, Imax=1, sigma=1)

The Run Engine processes messages

A message has four parts: a command string, an object, a tuple of positional arguments, and a dictionary of keyword arguments.


In [2]:
Msg('set', motor, {'pos': 5})


Out[2]:
set: (mover: motor), ({'pos': 5},), {}

In [3]:
Msg('trigger', motor)


Out[3]:
trigger: (mover: motor), (), {}

In [4]:
Msg('read', motor)


Out[4]:
read: (mover: motor), (), {}

In [5]:
RE = RunEngine()

In [6]:
def simple_scan(motor):
    "Set, trigger, read"
    yield Msg('set', motor, {'pos': 5})
    yield Msg('trigger', motor)
    yield Msg('read', motor)
    
RE.run(simple_scan(motor))


*** Emitted RunStart:
{'scan_id': 123, 'beamline_id': 'test', 'time': 1433200333.711525, 'uid': '0c501179-663e-4c59-8fa1-c1f08d5abd5a', 'owner': 'tester'}
set: (mover: motor), ({'pos': 5},), {}
   ret: None
trigger: (mover: motor), (), {}
   ret: None
read: (mover: motor), (), {}
   ret: {'pos': {'timestamp': 1433200333.816046, 'value': 5}}
*** Emitted RunStop:
{'time': 1433200333.816548, 'reason': '', 'run_start': '0c501179-663e-4c59-8fa1-c1f08d5abd5a', 'exit_status': 'success'}

Moving a motor and reading it back is boring. Let's add a detector.


In [7]:
def simple_scan2(motor, det):
    "Set, trigger motor, trigger detector, read"
    yield Msg('set', motor, {'pos': 5})
    yield Msg('trigger', motor)
    yield Msg('trigger', det)
    yield Msg('read', det)
    
RE.run(simple_scan2(motor, det))


*** Emitted RunStart:
{'scan_id': 123, 'beamline_id': 'test', 'time': 1433200334.450315, 'uid': 'b748a661-92a5-478e-929f-f01d21d20cbf', 'owner': 'tester'}
set: (mover: motor), ({'pos': 5},), {}
   ret: None
trigger: (mover: motor), (), {}
   ret: None
trigger: (reader: sg), (), {}
   ret: None
read: (reader: sg), (), {}
   ret: {'det': {'timestamp': 1433200334.554163, 'value': 3.7266531720786709e-06}}
*** Emitted RunStop:
{'time': 1433200334.554385, 'reason': '', 'run_start': 'b748a661-92a5-478e-929f-f01d21d20cbf', 'exit_status': 'success'}

There is two-way communication between the message generator and the Run Engine

Above we the three messages with the responses they generated from the RunEngine. We can use these responses to make our scan adaptive.


In [8]:
def adaptive_scan(motor, det, threshold):
    """Set, trigger, read until the detector reads intensity < threshold"""
    i = 0
    while True:
        print("LOOP %d" % i)
        yield Msg('set', motor, {'pos': i})
        yield Msg('trigger', motor)
        yield Msg('trigger', det)
        reading = yield Msg('read', det)
        if reading['det']['value'] < threshold:
            print('DONE')
            break
        i += 1

RE.run(adaptive_scan(motor, det, 0.2))


*** Emitted RunStart:
{'scan_id': 123, 'beamline_id': 'test', 'time': 1433200335.067558, 'uid': '6fd64ba4-4243-4b13-a440-6daca20a21dd', 'owner': 'tester'}
LOOP 0
set: (mover: motor), ({'pos': 0},), {}
   ret: None
trigger: (mover: motor), (), {}
   ret: None
trigger: (reader: sg), (), {}
   ret: None
read: (reader: sg), (), {}
   ret: {'det': {'timestamp': 1433200335.170066, 'value': 1.0}}
LOOP 1
set: (mover: motor), ({'pos': 1},), {}
   ret: None
trigger: (mover: motor), (), {}
   ret: None
trigger: (reader: sg), (), {}
   ret: None
read: (reader: sg), (), {}
   ret: {'det': {'timestamp': 1433200335.272588, 'value': 0.60653065971263342}}
LOOP 2
set: (mover: motor), ({'pos': 2},), {}
   ret: None
trigger: (mover: motor), (), {}
   ret: None
trigger: (reader: sg), (), {}
   ret: None
read: (reader: sg), (), {}
   ret: {'det': {'timestamp': 1433200335.373499, 'value': 0.1353352832366127}}
DONE
*** Emitted RunStop:
{'time': 1433200335.373757, 'reason': '', 'run_start': '6fd64ba4-4243-4b13-a440-6daca20a21dd', 'exit_status': 'success'}

Control timing with 'sleep' and 'wait'

The 'sleep' command is as simple as it sounds.


In [9]:
def sleepy_scan(motor, det):
    "Set, trigger motor, sleep for a fixed time, trigger detector, read"
    yield Msg('set', motor, {'pos': 5})
    yield Msg('trigger', motor)
    yield Msg('sleep', None, 2)  # units: seconds
    yield Msg('trigger', det)
    yield Msg('read', det)
    
RE.run(sleepy_scan(motor, det))


*** Emitted RunStart:
{'scan_id': 123, 'beamline_id': 'test', 'time': 1433200335.621367, 'uid': 'aa3261a4-3754-4d10-91cb-9f8633d98716', 'owner': 'tester'}
set: (mover: motor), ({'pos': 5},), {}
   ret: None
trigger: (mover: motor), (), {}
   ret: None
sleep: (None), (2,), {}
   ret: None
trigger: (reader: sg), (), {}
   ret: None
read: (reader: sg), (), {}
   ret: {'det': {'timestamp': 1433200337.727224, 'value': 3.7266531720786709e-06}}
*** Emitted RunStop:
{'time': 1433200337.727427, 'reason': '', 'run_start': 'aa3261a4-3754-4d10-91cb-9f8633d98716', 'exit_status': 'success'}

The 'wait' command is more powerful. It watches for Movers (e.g., motor) to report being done.

Wait for one motor to be done moving


In [10]:
def wait_one(motor, det):
    "Set, trigger, read"
    yield Msg('set', motor, {'pos': 5})
    yield Msg('trigger', motor, block_group='A')  # Add motor to group 'A'.
    yield Msg('wait', None, 'A')  # Wait for everything in group 'A' to report done.
    yield Msg('trigger', det)
    yield Msg('read', det)
    
RE.run(wait_one(motor, det))


*** Emitted RunStart:
{'scan_id': 123, 'beamline_id': 'test', 'time': 1433200338.061751, 'uid': '3a6878f1-7f0e-42be-9fd8-166b8e693dfc', 'owner': 'tester'}
set: (mover: motor), ({'pos': 5},), {}
   ret: None
trigger: (mover: motor), (), {'block_group': 'A'}
   ret: None
wait: (None), ('A',), {}
   ret: {mover: motor}
trigger: (reader: sg), (), {}
   ret: None
read: (reader: sg), (), {}
   ret: {'det': {'timestamp': 1433200338.163799, 'value': 3.7266531720786709e-06}}
*** Emitted RunStop:
{'time': 1433200338.16401, 'reason': '', 'run_start': '3a6878f1-7f0e-42be-9fd8-166b8e693dfc', 'exit_status': 'success'}

Notice, in the log, that the response to wait is the set of Movers the scan was waiting on.

Wait for two motors to both be done moving


In [11]:
def wait_multiple(motors, det):
    "Set motors, trigger all motors, wait for all motors to move."
    for motor in motors:
        yield Msg('set', motor, {'pos': 5})
        yield Msg('trigger', motor, block_group='A')  # Trigger each motor and add it to group 'A'.
    yield Msg('wait', None, 'A')  # Wait for everything in group 'A' to report done.
    yield Msg('trigger', det)
    yield Msg('read', det)

motor1 = Mover('motor1', ['pos'])
motor2 = Mover('motor2', ['pos'])

RE.run(wait_multiple([motor1, motor2], det))


*** Emitted RunStart:
{'scan_id': 123, 'beamline_id': 'test', 'time': 1433200338.440964, 'uid': '1efb65b6-9c3c-4b3f-ba05-c4413af72f9c', 'owner': 'tester'}
set: (mover: motor1), ({'pos': 5},), {}
   ret: None
trigger: (mover: motor1), (), {'block_group': 'A'}
   ret: None
set: (mover: motor2), ({'pos': 5},), {}
   ret: None
trigger: (mover: motor2), (), {'block_group': 'A'}
   ret: None
wait: (None), ('A',), {}
   ret: {mover: motor2, mover: motor1}
trigger: (reader: sg), (), {}
   ret: None
read: (reader: sg), (), {}
   ret: {'det': {'timestamp': 1433200338.646742, 'value': 3.7266531720786709e-06}}
*** Emitted RunStop:
{'time': 1433200338.646963, 'reason': '', 'run_start': '1efb65b6-9c3c-4b3f-ba05-c4413af72f9c', 'exit_status': 'success'}

Advanced Example: Wait for different groups of motors at different points in the run

If the 'A' bit seems pointless, the payoff is here. We trigger all the motors at once, wait for the first two, read, wait for the last one, and read again. This is merely meant to show that complex control flow is possible.


In [12]:
def wait_complex(motors, det):
    "Set motors, trigger motors, wait for all motors to move."
    # Same as above...
    for motor in motors[:-1]:
        yield Msg('set', motor, {'pos': 5})
        yield Msg('trigger', motor, block_group='A')
        
    # ...but put the last motor is separate group.
    yield Msg('set', motors[-1], {'pos': 5})
    yield Msg('trigger', motors[-1], block_group='B')
    
    yield Msg('wait', None, 'A')  # Wait for everything in group 'A' to report done.
    yield Msg('trigger', det)
    yield Msg('read', det)
    
    yield Msg('wait', None, 'B')  # Wait for everything in group 'B' to report done.
    yield Msg('trigger', det)
    yield Msg('read', det)
    
motor3 = Mover('motor3', ['pos'])

RE.run(wait_complex([motor1, motor2, motor3], det))


*** Emitted RunStart:
{'scan_id': 123, 'beamline_id': 'test', 'time': 1433200338.991371, 'uid': '604c092e-372b-4000-9955-f461ecc8e699', 'owner': 'tester'}
set: (mover: motor1), ({'pos': 5},), {}
   ret: None
trigger: (mover: motor1), (), {'block_group': 'A'}
   ret: None
set: (mover: motor2), ({'pos': 5},), {}
   ret: None
trigger: (mover: motor2), (), {'block_group': 'A'}
   ret: None
set: (mover: motor3), ({'pos': 5},), {}
   ret: None
trigger: (mover: motor3), (), {'block_group': 'B'}
   ret: None
wait: (None), ('A',), {}
   ret: {mover: motor2, mover: motor1}
trigger: (reader: sg), (), {}
   ret: None
read: (reader: sg), (), {}
   ret: {'det': {'timestamp': 1433200339.304084, 'value': 3.7266531720786709e-06}}
wait: (None), ('B',), {}
   ret: {mover: motor3}
trigger: (reader: sg), (), {}
   ret: None
read: (reader: sg), (), {}
   ret: {'det': {'timestamp': 1433200339.304396, 'value': 3.7266531720786709e-06}}
*** Emitted RunStop:
{'time': 1433200339.304572, 'reason': '', 'run_start': '604c092e-372b-4000-9955-f461ecc8e699', 'exit_status': 'success'}

Runs can be paused and safely resumed or aborted

"Hard Pause": Stop immediately. On resume, rerun messages from last 'checkpoint' command.

The Run Engine does not guess where it is safe to resume. The 'pause' command must follow a 'checkpoint' command, indicating a safe point to go back to in the event of a hard pause.


In [23]:
def conditional_hard_pause(motor, det):
    for i in range(5):
        yield Msg('checkpoint')
        yield Msg('set', motor, {'pos': i})
        yield Msg('trigger', motor)
        yield Msg('trigger', det)
        reading = yield Msg('read', det)
        if reading['det']['value'] < 0.2:
            yield Msg('pause', hard=True)

RE.run(conditional_hard_pause(motor, det))


*** Emitted RunStart:
{'scan_id': 123, 'beamline_id': 'test', 'time': 1433200391.553959, 'uid': 'c7d1c2f6-aa33-4afd-8274-87c88b9e95b2', 'owner': 'tester'}
checkpoint: (None), (), {}
   ret: None
set: (mover: motor), ({'pos': 0},), {}
   ret: None
trigger: (mover: motor), (), {}
   ret: None
trigger: (reader: sg), (), {}
   ret: None
read: (reader: sg), (), {}
   ret: {'det': {'timestamp': 1433200391.657081, 'value': 1.0}}
checkpoint: (None), (), {}
   ret: None
set: (mover: motor), ({'pos': 1},), {}
   ret: None
trigger: (mover: motor), (), {}
   ret: None
trigger: (reader: sg), (), {}
   ret: None
read: (reader: sg), (), {}
   ret: {'det': {'timestamp': 1433200391.758711, 'value': 0.60653065971263342}}
checkpoint: (None), (), {}
   ret: None
set: (mover: motor), ({'pos': 2},), {}
   ret: None
trigger: (mover: motor), (), {}
   ret: None
trigger: (reader: sg), (), {}
   ret: None
read: (reader: sg), (), {}
   ret: {'det': {'timestamp': 1433200391.864589, 'value': 0.1353352832366127}}
pause: (None), (), {'hard': True}
   ret: None
*** Hard pause requested. Sleeping until resume() is called. Will rerun from last 'checkpoint' command.

The scan thread sleeps and waits for more user input, to resume or abort. (On resume, this example will obviously hit the same pause condition again --- nothing has changed.)


In [24]:
RE.state


Out[24]:
'idle'

In [20]:
RE.resume()


*** Rerunning from checkpoint...
set: (mover: motor), ({'pos': 2},), {}
   ret: None (On rerun, responses are not sent.)
trigger: (mover: motor), (), {}
   ret: None (On rerun, responses are not sent.)
trigger: (reader: sg), (), {}
   ret: None (On rerun, responses are not sent.)
read: (reader: sg), (), {}
   ret: {'det': {'timestamp': 1433200371.401848, 'value': 0.1353352832366127}} (On rerun, responses are not sent.)
pause: (None), (), {'hard': True}
   ret: None (On rerun, responses are not sent.)
checkpoint: (None), (), {}
   ret: None
*** Hard pause requested. Sleeping until resume() is called. Will rerun from last 'checkpoint' command.

In [21]:
RE.state


Out[21]:
'idle'

In [22]:
RE.abort()


*** Emitted RunStop:
{'time': 1433200378.940203, 'reason': '', 'run_start': 'f2c85740-29f7-4b91-81f5-94e21eb95706', 'exit_status': 'abort'}
*** Rerunning from checkpoint...
checkpoint: (None), (), {}
   ret: None
set: (mover: motor), ({'pos': 3},), {}
   ret: None
trigger: (mover: motor), (), {}
   ret: None
trigger: (reader: sg), (), {}
   ret: None
read: (reader: sg), (), {}
   ret: {'det': {'timestamp': 1433200379.389682, 'value': 0.011108996538242306}}
*** Emitted RunStop:
{'time': 1433200379.389933, 'reason': "Cannot transit from 'idle' to 'hard_pausing'.", 'run_start': 'f2c85740-29f7-4b91-81f5-94e21eb95706', 'exit_status': 'fail'}
Exception in thread Thread-11:
Traceback (most recent call last):
  File "/Users/dallan/miniconda/envs/py3/lib/python3.4/threading.py", line 920, in _bootstrap_inner
    self.run()
  File "/Users/dallan/miniconda/envs/py3/lib/python3.4/threading.py", line 868, in run
    self._target(*self._args, **self._kwargs)
  File "/Users/dallan/Documents/Repos/bluesky/bs.py", line 302, in func
    return self.run_engine(gen)
  File "/Users/dallan/Documents/Repos/bluesky/bs.py", line 374, in run_engine
    raise RunInterrupt("Run aborted.")
RunInterrupt: Run aborted.

Exception in thread Thread-12:
Traceback (most recent call last):
  File "/Users/dallan/miniconda/envs/py3/lib/python3.4/threading.py", line 920, in _bootstrap_inner
    self.run()
  File "/Users/dallan/miniconda/envs/py3/lib/python3.4/threading.py", line 868, in run
    self._target(*self._args, **self._kwargs)
  File "/Users/dallan/Documents/Repos/bluesky/bs.py", line 302, in func
    return self.run_engine(gen)
  File "/Users/dallan/Documents/Repos/bluesky/bs.py", line 396, in run_engine
    raise err
  File "/Users/dallan/Documents/Repos/bluesky/bs.py", line 388, in run_engine
    response = self._command_registry[msg.command](msg)
  File "/Users/dallan/Documents/Repos/bluesky/bs.py", line 517, in _pause
    self.request_pause(*msg.args, **msg.kwargs)
  File "/Users/dallan/Documents/Repos/bluesky/bs.py", line 273, in request_pause
    self._sm.hard_pause()
  File "/Users/dallan/miniconda/envs/py3/lib/python3.4/site-packages/super_state_machine/utils.py", line 95, in setter
    self.set_(value)
  File "/Users/dallan/miniconda/envs/py3/lib/python3.4/site-packages/super_state_machine/utils.py", line 39, in set_
    self.actual_state.value, state.value))
super_state_machine.errors.TransitionError: Cannot transit from 'idle' to 'hard_pausing'.


In [111]:
def conditional_soft_pause(motor, det):
    for i in range(5):
        yield Msg('checkpoint')
        yield Msg('set', motor, {'pos': i})
        yield Msg('trigger', motor)
        yield Msg('trigger', det)
        reading = yield Msg('read', det)
        if reading['det']['value'] < 0.2:
            yield Msg('pause', hard=False)
        # If a soft pause is requested, the Run Engine will
        # still execute these messages before pausing.
        yield Msg('set', motor, {'pos': i + 0.5})
        yield Msg('trigger', motor)

RE.run(conditional_soft_pause(motor, det))


*** Emitted RunStart:
{'owner': 'tester', 'beamline_id': 'test', 'uid': 'd3bebb1d-3482-4135-842e-fa77c5ad44cd', 'time': 1433200224.459399, 'scan_id': 123}
checkpoint: (None), (), {}
   ret: None
set: (mover: motor), ({'pos': 0},), {}
   ret: None
trigger: (mover: motor), (), {}
   ret: None
trigger: (reader: sg), (), {}
   ret: None
read: (reader: sg), (), {}
   ret: {'det': {'timestamp': 1433200224.564059, 'value': 1.0}}
set: (mover: motor), ({'pos': 0.5},), {}
   ret: None
trigger: (mover: motor), (), {}
   ret: None
checkpoint: (None), (), {}
   ret: None
set: (mover: motor), ({'pos': 1},), {}
   ret: None
trigger: (mover: motor), (), {}
   ret: None
trigger: (reader: sg), (), {}
   ret: None
read: (reader: sg), (), {}
   ret: {'det': {'timestamp': 1433200224.774573, 'value': 0.60653065971263342}}
set: (mover: motor), ({'pos': 1.5},), {}
   ret: None
trigger: (mover: motor), (), {}
   ret: None
checkpoint: (None), (), {}
   ret: None
set: (mover: motor), ({'pos': 2},), {}
   ret: None
trigger: (mover: motor), (), {}
   ret: None
trigger: (reader: sg), (), {}
   ret: None
read: (reader: sg), (), {}
   ret: {'det': {'timestamp': 1433200224.985466, 'value': 0.1353352832366127}}
pause: (None), (), {'hard': False}
   ret: None
*** Soft pause requested. Continuing to process messages until the next 'checkpoint' command.
set: (mover: motor), ({'pos': 2.5},), {}
   ret: None
*** Soft pause requested. Continuing to process messages until the next 'checkpoint' command.
trigger: (mover: motor), (), {}
   ret: None
*** Soft pause requested. Continuing to process messages until the next 'checkpoint' command.
*** Checkpoint reached. Sleeping until resume() is called. Will resume from checkpoint.

Other threads can request a pause

Calling RE.request_pause(hard=True) or RE.request_pause(hard=False) has the same affect as a 'pause' command.

SIGINT (Ctrl+C) is reliably caught before each message is processed, even across threads.

SIGINT triggers a hard pause. If no checkpoint commands have been issued, CTRL+C causes the Run Engine to abort.


In [113]:
RE.run(sleepy_scan(motor, det))


*** Emitted RunStart:
{'owner': 'tester', 'beamline_id': 'test', 'uid': '321f502e-d91f-4ce3-ab45-f948783c6a81', 'time': 1433200230.725803, 'scan_id': 123}
set: (mover: motor), ({'pos': 5},), {}
   ret: None
trigger: (mover: motor), (), {}
   ret: None
checkpoint: (None), (), {}
   ret: None
set: (mover: motor), ({'pos': 4},), {}
   ret: None
trigger: (mover: motor), (), {}
   ret: None
trigger: (reader: sg), (), {}
   ret: None
read: (reader: sg), (), {}
   ret: {'det': {'timestamp': 1433200230.94288, 'value': 0.00033546262790251185}}
pause: (None), (), {'hard': False}
   ret: None
*** Soft pause requested. Continuing to process messages until the next 'checkpoint' command.
set: (mover: motor), ({'pos': 4.5},), {}
   ret: None
*** Soft pause requested. Continuing to process messages until the next 'checkpoint' command.
trigger: (mover: motor), (), {}
   ret: None
*** Soft pause requested. Continuing to process messages until the next 'checkpoint' command.
*** Emitted RunStop:
{'reason': '', 'run_start': '321f502e-d91f-4ce3-ab45-f948783c6a81', 'exit_status': 'success', 'time': 1433200231.046236}
sleep: (None), (2,), {}
   ret: None
RunEngine detected a SIGINT (Ctrl+C)
*** Emitted RunStop:
{'reason': '', 'run_start': '321f502e-d91f-4ce3-ab45-f948783c6a81', 'exit_status': 'abort', 'time': 1433200232.832458}
Exception in thread Thread-49:
Traceback (most recent call last):
  File "/Users/dallan/miniconda/envs/py3/lib/python3.4/threading.py", line 920, in _bootstrap_inner
    self.run()
  File "/Users/dallan/miniconda/envs/py3/lib/python3.4/threading.py", line 868, in run
    self._target(*self._args, **self._kwargs)
  File "/Users/dallan/Documents/Repos/bluesky/bs.py", line 302, in func
    return self.run_engine(gen)
  File "/Users/dallan/Documents/Repos/bluesky/bs.py", line 405, in run_engine
    self._state.stop()
  File "/Users/dallan/miniconda/envs/py3/lib/python3.4/site-packages/super_state_machine/utils.py", line 95, in setter
    self.set_(value)
  File "/Users/dallan/miniconda/envs/py3/lib/python3.4/site-packages/super_state_machine/utils.py", line 39, in set_
    self.actual_state.value, state.value))
super_state_machine.errors.TransitionError: Cannot transit from 'paused' to 'idle'.

Exception in thread Thread-48:
Traceback (most recent call last):
  File "/Users/dallan/miniconda/envs/py3/lib/python3.4/threading.py", line 920, in _bootstrap_inner
    self.run()
  File "/Users/dallan/miniconda/envs/py3/lib/python3.4/threading.py", line 868, in run
    self._target(*self._args, **self._kwargs)
  File "/Users/dallan/Documents/Repos/bluesky/bs.py", line 302, in func
    return self.run_engine(gen)
  File "/Users/dallan/Documents/Repos/bluesky/bs.py", line 405, in run_engine
    self._state.stop()
  File "/Users/dallan/miniconda/envs/py3/lib/python3.4/site-packages/super_state_machine/utils.py", line 95, in setter
    self.set_(value)
  File "/Users/dallan/miniconda/envs/py3/lib/python3.4/site-packages/super_state_machine/utils.py", line 39, in set_
    self.actual_state.value, state.value))
super_state_machine.errors.TransitionError: Cannot transit from 'soft_pausing' to 'idle'.

Exception in thread Thread-50:
Traceback (most recent call last):
  File "/Users/dallan/miniconda/envs/py3/lib/python3.4/threading.py", line 920, in _bootstrap_inner
    self.run()
  File "/Users/dallan/miniconda/envs/py3/lib/python3.4/threading.py", line 868, in run
    self._target(*self._args, **self._kwargs)
  File "/Users/dallan/Documents/Repos/bluesky/bs.py", line 302, in func
    return self.run_engine(gen)
  File "/Users/dallan/Documents/Repos/bluesky/bs.py", line 362, in run_engine
    raise RunInterrupt("*** Hard pause requested. There "
RunInterrupt: *** Hard pause requested. There are no checkpoints. Cannot resume; must abort. Run aborted.

If the scan contains checkpoints, it's possible to resume after Ctrl+C.


In [114]:
def sleepy_scan_checkpoints(motor, det):
    "Set, trigger motor, sleep for a fixed time, trigger detector, read"
    yield Msg('checkpoint')
    yield Msg('set', motor, {'pos': 5})
    yield Msg('trigger', motor)
    yield Msg('sleep', None, 2)  # units: seconds
    yield Msg('trigger', det)
    yield Msg('read', det)

RE.run(sleepy_scan_checkpoints(motor, det))


*** Emitted RunStart:
{'owner': 'tester', 'beamline_id': 'test', 'uid': '6527d3ca-acbb-4734-a4de-f125a3e6a71b', 'time': 1433200261.587403, 'scan_id': 123}
checkpoint: (None), (), {}
   ret: None
set: (mover: motor), ({'pos': 5},), {}
   ret: None
trigger: (mover: motor), (), {}
   ret: None
sleep: (None), (2,), {}
   ret: None
RunEngine detected a SIGINT (Ctrl+C)
*** Hard pause requested. Sleeping until resume() is called. Will rerun from last 'checkpoint' command.

In [115]:
RE.resume()


*** Rerunning from checkpoint...
set: (mover: motor), ({'pos': 5},), {}
   ret: None (On rerun, responses are not sent.)
trigger: (mover: motor), (), {}
   ret: None (On rerun, responses are not sent.)
sleep: (None), (2,), {}
   ret: None (On rerun, responses are not sent.)
trigger: (reader: sg), (), {}
   ret: None
read: (reader: sg), (), {}
   ret: {'det': {'timestamp': 1433200268.807895, 'value': 3.7266531720786709e-06}}
*** Emitted RunStop:
{'reason': '', 'run_start': '6527d3ca-acbb-4734-a4de-f125a3e6a71b', 'exit_status': 'success', 'time': 1433200268.808127}

Threading is optional -- switch it off for easier debugging

Again, we'll interrupt the scan. We get exactly the same result, but this time we see a full Traceback.


In [116]:
RE.run(simple_scan(motor), use_threading=False)


*** Emitted RunStart:
{'owner': 'tester', 'beamline_id': 'test', 'uid': '3f259ad5-b973-402d-9e20-10ffeea3d4d7', 'time': 1433200275.711591, 'scan_id': 123}
set: (mover: motor), ({'pos': 5},), {}
   ret: None
trigger: (mover: motor), (), {}
   ret: None
read: (mover: motor), (), {}
   ret: {'pos': {'timestamp': 1433200275.813738, 'value': 5}}
*** Emitted RunStop:
{'reason': '', 'run_start': '3f259ad5-b973-402d-9e20-10ffeea3d4d7', 'exit_status': 'success', 'time': 1433200275.814685}

Any functions can subscribe to the live data stream (e.g., live plotting)

In the examples above, the runs have been emitting RunStart and RunStop Documents, but no Events or Event Descriptors. We will add those now.

Emitting Events and Event Descriptors

The 'create' and 'save' commands collect all the reads between them into one Event.

If that particular set of objects has never been bundled into an Event during this run, then an Event Descriptor is also created.

All four Documents -- RunStart, RunStop, Event, and EventDescriptor -- are simply Python dictionaries.


In [17]:
def simple_scan_saving(motor, det):
    "Set, trigger, read"
    yield Msg('create')
    yield Msg('set', motor, {'pos': 5})
    yield Msg('trigger', motor)
    yield Msg('read', motor)
    yield Msg('read', det)
    yield Msg('save')
    
RE.run(simple_scan_saving(motor, det))


*** Emitted RunStart:
{'uid': '5aa153e8-4d98-4ce6-91db-e120a814f4b2', 'beamline_id': 'test', 'scan_id': 123, 'owner': 'tester', 'time': 1433039540.5331757}
MSG_CACHE None
create: (None), (), {}
   ret: None
MSG_CACHE None
set: (mover: motor), ({'pos': 5},), {}
   ret: None
MSG_CACHE None
trigger: (mover: motor), (), {}
   ret: None
MSG_CACHE None
read: (mover: motor), (), {}
   ret: {'pos': {'timestamp': 1433039540.6636298, 'value': 5}}
MSG_CACHE None
read: (reader: sg), (), {}
   ret: {'det': {'timestamp': 1433039539.5095928, 'value': 3.7266531720786709e-06}}
MSG_CACHE None
*** Emitted Event Descriptor:
{'run_start': '5aa153e8-4d98-4ce6-91db-e120a814f4b2', 'uid': 'f193d35d-42c0-40fb-b707-5643aa7b878a', 'time': 1433039540.6943512, 'data_keys': {'pos': {'source': 'motor', 'dtype': 'number'}, 'I': {'source': 'det', 'dtype': 'number'}}}
*** Emitted Event:
{'descriptor': 'f193d35d-42c0-40fb-b707-5643aa7b878a', 'uid': '3d872a53-9495-42cf-aa29-011961e28cf3', 'seq_num': 1, 'time': 1433039540.694491, 'data': {'pos': {'timestamp': 1433039540.6636298, 'value': 5}, 'det': {'timestamp': 1433039539.5095928, 'value': 3.726653172078671e-06}}}
save: (None), (), {}
   ret: None
MSG_CACHE None
*** Emitted RunStop:
{'run_start': '5aa153e8-4d98-4ce6-91db-e120a814f4b2', 'reason': '', 'exit_status': 'success', 'time': 1433039540.704733}

Very Simple Example

Any user function that accepts a Python dictionary can be registered as a "consumer" of these Event Documents. Here's a toy example.


In [18]:
def print_event_time(doc):
    print('===== EVENT TIME:', doc['time'], '=====')

To use this consumer function during a run:


In [19]:
RE.run(simple_scan_saving(motor, det), subscriptions={'event': print_event_time})


*** Emitted RunStart:
{'uid': 'faea34d4-63b2-476b-8a82-b10a78959df7', 'beamline_id': 'test', 'scan_id': 123, 'owner': 'tester', 'time': 1433039540.9631882}
MSG_CACHE None
create: (None), (), {}
   ret: None
MSG_CACHE None
set: (mover: motor), ({'pos': 5},), {}
   ret: None
MSG_CACHE None
trigger: (mover: motor), (), {}
   ret: None
MSG_CACHE None
read: (mover: motor), (), {}
   ret: {'pos': {'timestamp': 1433039541.0937507, 'value': 5}}
MSG_CACHE None
read: (reader: sg), (), {}
   ret: {'det': {'timestamp': 1433039539.5095928, 'value': 3.726653172078671e-06}}
MSG_CACHE None
*** Emitted Event Descriptor:
{'run_start': 'faea34d4-63b2-476b-8a82-b10a78959df7', 'uid': 'e63b36e4-5400-47c0-b381-76d0597ba196', 'time': 1433039541.124398, 'data_keys': {'pos': {'source': 'motor', 'dtype': 'number'}, 'I': {'source': 'det', 'dtype': 'number'}}}
*** Emitted Event:
{'descriptor': 'e63b36e4-5400-47c0-b381-76d0597ba196', 'uid': 'e8ffb9e1-315d-4946-b9a4-1a88c28852c3', 'seq_num': 1, 'time': 1433039541.1244798, 'data': {'pos': {'timestamp': 1433039541.0937507, 'value': 5}, 'det': {'timestamp': 1433039539.5095928, 'value': 3.726653172078671e-06}}}
save: (None), (), {}
   ret: None
MSG_CACHE None
*** Emitted RunStop:
{'run_start': 'faea34d4-63b2-476b-8a82-b10a78959df7', 'reason': '', 'exit_status': 'success', 'time': 1433039541.1346457}
===== EVENT TIME: 1433039541.1244798 =====

The use it by default on every run for this instance of the Run Engine:


In [20]:
token = RE.subscribe('event', print_event_time)
token


Out[20]:
1

The output token, an integer, can be use to unsubscribe later.


In [21]:
RE.unsubscribe(token)

Live Plotting

First, we'll create some axes. The code below updates the plot while the run is ongoing.


In [22]:
%matplotlib notebook
import matplotlib.pyplot as plt

fig, ax = plt.subplots()



In [23]:
def stepscan(motor, detector):
    for i in range(-5, 5):
        yield Msg('create')
        yield Msg('set', motor, {'pos': i})
        yield Msg('trigger', motor)
        yield Msg('trigger', det)
        yield Msg('read', motor)
        yield Msg('read', detector)
        yield Msg('save')

def live_scalar_plotter(ax, y, x):
    x_data, y_data = [], []
    line, = ax.plot([], [], 'ro', markersize=10)
    def update_plot(doc):
        # Update with the latest data.
        x_data.append(doc['data'][x]['value'])
        y_data.append(doc['data'][y]['value'])
        line.set_data(x_data, y_data)
        # Rescale and redraw.
        ax.relim(visible_only=True)
        ax.autoscale_view(tight=True)
        ax.figure.canvas.draw()
    return update_plot

# Point the function to our axes above, and specify what to plot.
my_plotter = live_scalar_plotter(ax, 'det', 'pos')

RE.run(stepscan(motor, det), subscriptions={'event': my_plotter})


*** Emitted RunStart:
{'uid': '1bcd8b51-21ae-4c80-ad5b-8f1cd895ff8d', 'beamline_id': 'test', 'scan_id': 123, 'owner': 'tester', 'time': 1433039541.4556851}
MSG_CACHE None
create: (None), (), {}
   ret: None
MSG_CACHE None
set: (mover: motor), ({'pos': -5},), {}
   ret: None
MSG_CACHE None
trigger: (mover: motor), (), {}
   ret: None
MSG_CACHE None
trigger: (reader: sg), (), {}
   ret: None
MSG_CACHE None
read: (mover: motor), (), {}
   ret: {'pos': {'timestamp': 1433039541.5864153, 'value': -5}}
MSG_CACHE None
read: (reader: sg), (), {}
   ret: {'det': {'timestamp': 1433039541.596735, 'value': 3.7266531720786709e-06}}
MSG_CACHE None
*** Emitted Event Descriptor:
{'run_start': '1bcd8b51-21ae-4c80-ad5b-8f1cd895ff8d', 'uid': '1eb1f096-d2e6-4bd4-86ab-a3fa35a8137b', 'time': 1433039541.627659, 'data_keys': {'pos': {'source': 'motor', 'dtype': 'number'}, 'I': {'source': 'det', 'dtype': 'number'}}}
*** Emitted Event:
{'descriptor': '1eb1f096-d2e6-4bd4-86ab-a3fa35a8137b', 'uid': '7bcd16b5-e885-44c2-9059-b2bd63d03c2c', 'seq_num': 1, 'time': 1433039541.6279492, 'data': {'pos': {'timestamp': 1433039541.5864153, 'value': -5}, 'det': {'timestamp': 1433039541.596735, 'value': 3.726653172078671e-06}}}
save: (None), (), {}
   ret: None
MSG_CACHE None
create: (None), (), {}
   ret: None
MSG_CACHE None
set: (mover: motor), ({'pos': -4},), {}
   ret: None
MSG_CACHE None
trigger: (mover: motor), (), {}
   ret: None
MSG_CACHE None
trigger: (reader: sg), (), {}
   ret: None
MSG_CACHE None
read: (mover: motor), (), {}
   ret: {'pos': {'timestamp': 1433039541.7587812, 'value': -4}}
MSG_CACHE None
read: (reader: sg), (), {}
   ret: {'det': {'timestamp': 1433039541.7690506, 'value': 0.00033546262790251185}}
MSG_CACHE None
*** Emitted Event:
{'descriptor': '1eb1f096-d2e6-4bd4-86ab-a3fa35a8137b', 'uid': '487de680-ff29-490b-8385-f80eac830e3e', 'seq_num': 2, 'time': 1433039541.8007095, 'data': {'pos': {'timestamp': 1433039541.7587812, 'value': -4}, 'det': {'timestamp': 1433039541.7690506, 'value': 0.00033546262790251185}}}
save: (None), (), {}
   ret: None
MSG_CACHE None
create: (None), (), {}
   ret: None
MSG_CACHE None
set: (mover: motor), ({'pos': -3},), {}
   ret: None
MSG_CACHE None
trigger: (mover: motor), (), {}
   ret: None
MSG_CACHE None
trigger: (reader: sg), (), {}
   ret: None
MSG_CACHE None
read: (mover: motor), (), {}
   ret: {'pos': {'timestamp': 1433039541.9313443, 'value': -3}}
MSG_CACHE None
read: (reader: sg), (), {}
   ret: {'det': {'timestamp': 1433039541.9416196, 'value': 0.011108996538242306}}
MSG_CACHE None
*** Emitted Event:
{'descriptor': '1eb1f096-d2e6-4bd4-86ab-a3fa35a8137b', 'uid': '7d79cd1b-5ed3-4cca-838d-393d11fbda2f', 'seq_num': 3, 'time': 1433039541.9722161, 'data': {'pos': {'timestamp': 1433039541.9313443, 'value': -3}, 'det': {'timestamp': 1433039541.9416196, 'value': 0.011108996538242306}}}
save: (None), (), {}
   ret: None
MSG_CACHE None
create: (None), (), {}
   ret: None
MSG_CACHE None
set: (mover: motor), ({'pos': -2},), {}
   ret: None
MSG_CACHE None
trigger: (mover: motor), (), {}
   ret: None
MSG_CACHE None
trigger: (reader: sg), (), {}
   ret: None
MSG_CACHE None
read: (mover: motor), (), {}
   ret: {'pos': {'timestamp': 1433039542.1158118, 'value': -2}}
MSG_CACHE None
read: (reader: sg), (), {}
   ret: {'det': {'timestamp': 1433039542.1260862, 'value': 0.1353352832366127}}
MSG_CACHE None
*** Emitted Event:
{'descriptor': '1eb1f096-d2e6-4bd4-86ab-a3fa35a8137b', 'uid': 'bf21a332-2df5-4a7a-baac-78e0b2fad421', 'seq_num': 4, 'time': 1433039542.1569147, 'data': {'pos': {'timestamp': 1433039542.1158118, 'value': -2}, 'det': {'timestamp': 1433039542.1260862, 'value': 0.1353352832366127}}}
save: (None), (), {}
   ret: None
MSG_CACHE None
create: (None), (), {}
   ret: None
MSG_CACHE None
set: (mover: motor), ({'pos': -1},), {}
   ret: None
MSG_CACHE None
trigger: (mover: motor), (), {}
   ret: None
MSG_CACHE None
trigger: (reader: sg), (), {}
   ret: None
MSG_CACHE None
read: (mover: motor), (), {}
   ret: {'pos': {'timestamp': 1433039542.3093874, 'value': -1}}
MSG_CACHE None
read: (reader: sg), (), {}
   ret: {'det': {'timestamp': 1433039542.3196592, 'value': 0.60653065971263342}}
MSG_CACHE None
*** Emitted Event:
{'descriptor': '1eb1f096-d2e6-4bd4-86ab-a3fa35a8137b', 'uid': 'f0b1da2c-2337-4d3f-8ed2-9bca102885f6', 'seq_num': 5, 'time': 1433039542.3503654, 'data': {'pos': {'timestamp': 1433039542.3093874, 'value': -1}, 'det': {'timestamp': 1433039542.3196592, 'value': 0.6065306597126334}}}
save: (None), (), {}
   ret: None
MSG_CACHE None
create: (None), (), {}
   ret: None
MSG_CACHE None
set: (mover: motor), ({'pos': 0},), {}
   ret: None
MSG_CACHE None
trigger: (mover: motor), (), {}
   ret: None
MSG_CACHE None
trigger: (reader: sg), (), {}
   ret: None
MSG_CACHE None
read: (mover: motor), (), {}
   ret: {'pos': {'timestamp': 1433039542.5042408, 'value': 0}}
MSG_CACHE None
read: (reader: sg), (), {}
   ret: {'det': {'timestamp': 1433039542.51452, 'value': 1.0}}
MSG_CACHE None
*** Emitted Event:
{'descriptor': '1eb1f096-d2e6-4bd4-86ab-a3fa35a8137b', 'uid': 'c4e183d9-a194-461e-b418-a61b302b317d', 'seq_num': 6, 'time': 1433039542.545132, 'data': {'pos': {'timestamp': 1433039542.5042408, 'value': 0}, 'det': {'timestamp': 1433039542.51452, 'value': 1.0}}}
save: (None), (), {}
   ret: None
MSG_CACHE None
create: (None), (), {}
   ret: None
MSG_CACHE None
set: (mover: motor), ({'pos': 1},), {}
   ret: None
MSG_CACHE None
trigger: (mover: motor), (), {}
   ret: None
MSG_CACHE None
trigger: (reader: sg), (), {}
   ret: None
MSG_CACHE None
read: (mover: motor), (), {}
   ret: {'pos': {'timestamp': 1433039542.6950617, 'value': 1}}
MSG_CACHE None
read: (reader: sg), (), {}
   ret: {'det': {'timestamp': 1433039542.705322, 'value': 0.60653065971263342}}
MSG_CACHE None
*** Emitted Event:
{'descriptor': '1eb1f096-d2e6-4bd4-86ab-a3fa35a8137b', 'uid': 'd114ee77-15e6-43be-9166-745d5d427785', 'seq_num': 7, 'time': 1433039542.7359445, 'data': {'pos': {'timestamp': 1433039542.6950617, 'value': 1}, 'det': {'timestamp': 1433039542.705322, 'value': 0.6065306597126334}}}
save: (None), (), {}
   ret: None
MSG_CACHE None
create: (None), (), {}
   ret: None
MSG_CACHE None
set: (mover: motor), ({'pos': 2},), {}
   ret: None
MSG_CACHE None
trigger: (mover: motor), (), {}
   ret: None
MSG_CACHE None
trigger: (reader: sg), (), {}
   ret: None
MSG_CACHE None
read: (mover: motor), (), {}
   ret: {'pos': {'timestamp': 1433039542.886333, 'value': 2}}
MSG_CACHE None
read: (reader: sg), (), {}
   ret: {'det': {'timestamp': 1433039542.8965862, 'value': 0.1353352832366127}}
MSG_CACHE None
*** Emitted Event:
{'descriptor': '1eb1f096-d2e6-4bd4-86ab-a3fa35a8137b', 'uid': '997dcc7d-1061-437a-a655-7cdac42ed4ad', 'seq_num': 8, 'time': 1433039542.9272115, 'data': {'pos': {'timestamp': 1433039542.886333, 'value': 2}, 'det': {'timestamp': 1433039542.8965862, 'value': 0.1353352832366127}}}
save: (None), (), {}
   ret: None
MSG_CACHE None
create: (None), (), {}
   ret: None
MSG_CACHE None
set: (mover: motor), ({'pos': 3},), {}
   ret: None
MSG_CACHE None
trigger: (mover: motor), (), {}
   ret: None
MSG_CACHE None
trigger: (reader: sg), (), {}
   ret: None
MSG_CACHE None
read: (mover: motor), (), {}
   ret: {'pos': {'timestamp': 1433039543.077164, 'value': 3}}
MSG_CACHE None
read: (reader: sg), (), {}
   ret: {'det': {'timestamp': 1433039543.0874474, 'value': 0.011108996538242306}}
MSG_CACHE None
*** Emitted Event:
{'descriptor': '1eb1f096-d2e6-4bd4-86ab-a3fa35a8137b', 'uid': 'da2c828e-53ad-4593-92ec-3143c3ce4468', 'seq_num': 9, 'time': 1433039543.1181424, 'data': {'pos': {'timestamp': 1433039543.077164, 'value': 3}, 'det': {'timestamp': 1433039543.0874474, 'value': 0.011108996538242306}}}
save: (None), (), {}
   ret: None
MSG_CACHE None
create: (None), (), {}
   ret: None
MSG_CACHE None
set: (mover: motor), ({'pos': 4},), {}
   ret: None
MSG_CACHE None
trigger: (mover: motor), (), {}
   ret: None
MSG_CACHE None
trigger: (reader: sg), (), {}
   ret: None
MSG_CACHE None
read: (mover: motor), (), {}
   ret: {'pos': {'timestamp': 1433039543.2693634, 'value': 4}}
MSG_CACHE None
read: (reader: sg), (), {}
   ret: {'det': {'timestamp': 1433039543.27964, 'value': 0.00033546262790251185}}
MSG_CACHE None
*** Emitted Event:
{'descriptor': '1eb1f096-d2e6-4bd4-86ab-a3fa35a8137b', 'uid': '42f7db2e-cee7-46d5-9b72-0d609635f1df', 'seq_num': 10, 'time': 1433039543.3103335, 'data': {'pos': {'timestamp': 1433039543.2693634, 'value': 4}, 'det': {'timestamp': 1433039543.27964, 'value': 0.00033546262790251185}}}
save: (None), (), {}
   ret: None
MSG_CACHE None
*** Emitted RunStop:
{'run_start': '1bcd8b51-21ae-4c80-ad5b-8f1cd895ff8d', 'reason': '', 'exit_status': 'success', 'time': 1433039543.3205254}

Saving Documents to metadatastore

Mission-critical consumers can be run on the scan thread, where they will block the scan until they return from processing the emitted Documents. This should not be used for computationally heavy tasks like visualization. Its only intended use is for saving data to metadatastore, but users can register any consumers they want, at risk of slowing down the scan.

RE._register_scan_callback('event', some_critical_func)

The convenience function register_mds registers metadatastore's four insert_* functions to consume their four respective Documents. These are registered on the scan thread, so data is guaranteed to be saved in metadatastore.


In [20]:
%run register_mds.py

register_mds(RE)

We can verify that this worked by loading this one-point scan from the DataBroker and displaying the data using DataMuxer.


In [25]:
RE.run(simple_scan_saving(motor, det))


*** Emitted RunStart:
{'uid': 'd50c62b5-1127-4174-b4b9-8c022b73fa5a', 'beamline_id': 'test', 'scan_id': 123, 'owner': 'tester', 'time': 1433039543.7722633}
MSG_CACHE None
create: (None), (), {}
   ret: None
MSG_CACHE None
set: (mover: motor), ({'pos': 5},), {}
   ret: None
MSG_CACHE None
trigger: (mover: motor), (), {}
   ret: None
MSG_CACHE None
read: (mover: motor), (), {}
   ret: {'pos': {'timestamp': 1433039543.9101195, 'value': 5}}
MSG_CACHE None
read: (reader: sg), (), {}
   ret: {'det': {'timestamp': 1433039543.27964, 'value': 0.00033546262790251185}}
MSG_CACHE None
*** Emitted Event Descriptor:
{'run_start': 'd50c62b5-1127-4174-b4b9-8c022b73fa5a', 'uid': 'b1f40a88-d736-4eab-a23e-95fc8f21ceac', 'time': 1433039543.9409378, 'data_keys': {'pos': {'source': 'motor', 'dtype': 'number'}, 'I': {'source': 'det', 'dtype': 'number'}}}
*** Emitted Event:
{'descriptor': 'b1f40a88-d736-4eab-a23e-95fc8f21ceac', 'uid': '22e73259-60bf-4a20-8d27-1f18c4211075', 'seq_num': 1, 'time': 1433039543.9432592, 'data': {'pos': {'timestamp': 1433039543.9101195, 'value': 5}, 'det': {'timestamp': 1433039543.27964, 'value': 0.00033546262790251185}}}
save: (None), (), {}
   ret: None
MSG_CACHE None
*** Emitted RunStop:
{'run_start': 'd50c62b5-1127-4174-b4b9-8c022b73fa5a', 'reason': '', 'exit_status': 'success', 'time': 1433039543.955212}

In [26]:
from dataportal import DataBroker as db

header = db[-1]
header


Out[26]:
beamline_config
config_params
time1433039543.7723243
time_as_datetime2015-05-30 22:32:23.772324 (now)
uid33cfe9be-8f75-4ff5-b428-3b730d04b23b
beamline_idtest
event_descriptors
data_keys
I
dtypenumber
externalNone
shape
sourcesg
pos
dtypenumber
externalNone
shape
sourcemotor
run_startd50c62b5-1127-4174-b4b9-8c022b73fa5a
time1433039543.9409378
time_as_datetime2015-05-30 22:32:23.940937 (now)
uidb1f40a88-d736-4eab-a23e-95fc8f21ceac
exit_reason
exit_statussuccess
group
ownertester
project
run_start_uidd50c62b5-1127-4174-b4b9-8c022b73fa5a
run_stop_uid8c831180-5e1c-4884-a319-ad85b80a9102
sample
scan_id123
start_datetime2015-05-30 22:32:23.772263 (now)
start_time1433039543.7722633
stop_datetime2015-05-30 22:32:23.955212 (now)
stop_time1433039543.955212

In [27]:
from dataportal import DataMuxer as dm

dm.from_events(db.fetch_events(header)).to_sparse_dataframe()


Out[27]:
intensity pos time
0 0.000335 5 1.433040e+09

Flyscan prototype

Asserts that flyscans are managed by an object which has three methods:

 - describe : same as for everything else
 - kickoff : method which starts the flyscan.  This should be a fast-to-
            execute function that is assumed to just poke at some external
             hardware.
 - collect : collects the data from flyscan.  This method yields partial
             event documents.  The 'time' and 'data' fields should be
             filled in, the rest will be filled in by the run engine.

In [21]:
flyer = FlyMagic('flyer', 'theta', 'sin')

In [22]:
def fly_scan(flyer):
    yield Msg('kickoff', flyer)
    yield Msg('collect', flyer)
    yield Msg('kickoff', flyer)
    yield Msg('collect', flyer)
    # Note that there is no 'create'/'save' here. That is managed by 'collect'.

RE.run(fly_gen(flyer), use_threading=False)


*** Emitted RunStart:
{'time': 1433074217.910113, 'uid': 'b3bb171d-2be6-4ca8-9552-11de7161ffa5', 'owner': 'tester', 'scan_id': 123, 'beamline_id': 'test'}
MSG_CACHE None
kickoff: (flyer: flyer), (), {}
   ret: None
MSG_CACHE None
Emitted Event Descriptor:
{'uid': '7e929477-0150-4d36-a125-d48886b8262a', 'data_keys': {'sin': {'dtype': 'number', 'source': 'flyer'}, 'theta': {'dtype': 'number', 'source': 'flyer'}}, 'time': 1433074217.960202, 'run_start': 'b3bb171d-2be6-4ca8-9552-11de7161ffa5'}
Emitted Event:
{'time': 1433074217.9497859, 'uid': 'c53082e1-fe69-4462-b68d-fca77c415342', 'descriptor': '7e929477-0150-4d36-a125-d48886b8262a', 'seq_num': 1, 'data': {'sin': {'value': 0.3090169943749474, 'timestamp': 1433074217.9497859}, 'theta': {'value': 0.0, 'timestamp': 1433074217.9497859}}}
Emitted Event:
{'time': 1433074217.9509051, 'uid': 'd865bf65-8341-4beb-8337-87401fbf3193', 'descriptor': '7e929477-0150-4d36-a125-d48886b8262a', 'seq_num': 2, 'data': {'sin': {'value': 0.6910626489868646, 'timestamp': 1433074217.9509051}, 'theta': {'value': 0.4487989505128276, 'timestamp': 1433074217.9509051}}}
Emitted Event:
{'time': 1433074217.9520245, 'uid': '94d42401-11e7-459a-8921-941de66ac55f', 'descriptor': '7e929477-0150-4d36-a125-d48886b8262a', 'seq_num': 3, 'data': {'sin': {'value': 0.9362348706397372, 'timestamp': 1433074217.9520245}, 'theta': {'value': 0.8975979010256552, 'timestamp': 1433074217.9520245}}}
Emitted Event:
{'time': 1433074217.9531436, 'uid': 'f1c83ed1-c2ec-401e-bfcb-a62d913e53ed', 'descriptor': '7e929477-0150-4d36-a125-d48886b8262a', 'seq_num': 4, 'data': {'sin': {'value': 0.9959742939952391, 'timestamp': 1433074217.9531436}, 'theta': {'value': 1.3463968515384828, 'timestamp': 1433074217.9531436}}}
Emitted Event:
{'time': 1433074217.9542627, 'uid': 'df840fba-4494-4243-b93d-de2cfd2b047d', 'descriptor': '7e929477-0150-4d36-a125-d48886b8262a', 'seq_num': 5, 'data': {'sin': {'value': 0.8584487936018662, 'timestamp': 1433074217.9542627}, 'theta': {'value': 1.7951958020513104, 'timestamp': 1433074217.9542627}}}
Emitted Event:
{'time': 1433074217.9553819, 'uid': 'd470eb78-6954-4e6b-9d01-c403826f0830', 'descriptor': '7e929477-0150-4d36-a125-d48886b8262a', 'seq_num': 6, 'data': {'sin': {'value': 0.5508969814521026, 'timestamp': 1433074217.9553819}, 'theta': {'value': 2.243994752564138, 'timestamp': 1433074217.9553819}}}
Emitted Event:
{'time': 1433074217.9565012, 'uid': 'ca66e595-8630-4550-a81c-bba856a19f5a', 'descriptor': '7e929477-0150-4d36-a125-d48886b8262a', 'seq_num': 7, 'data': {'sin': {'value': 0.13423326581765557, 'timestamp': 1433074217.9565012}, 'theta': {'value': 2.6927937030769655, 'timestamp': 1433074217.9565012}}}
Emitted Event:
{'time': 1433074217.9576204, 'uid': 'f0716ca4-20c0-49b5-b193-ad438640e583', 'descriptor': '7e929477-0150-4d36-a125-d48886b8262a', 'seq_num': 8, 'data': {'sin': {'value': -0.3090169943749473, 'timestamp': 1433074217.9576204}, 'theta': {'value': 3.141592653589793, 'timestamp': 1433074217.9576204}}}
Emitted Event:
{'time': 1433074217.9587395, 'uid': '4dacecd7-9ce0-4abf-9975-dcd18e1ec03e', 'descriptor': '7e929477-0150-4d36-a125-d48886b8262a', 'seq_num': 9, 'data': {'sin': {'value': -0.6910626489868645, 'timestamp': 1433074217.9587395}, 'theta': {'value': 3.5903916041026207, 'timestamp': 1433074217.9587395}}}
Emitted Event:
{'time': 1433074217.9598587, 'uid': 'e89e1399-1046-4280-8891-36917c19cc91', 'descriptor': '7e929477-0150-4d36-a125-d48886b8262a', 'seq_num': 10, 'data': {'sin': {'value': -0.9362348706397372, 'timestamp': 1433074217.9598587}, 'theta': {'value': 4.039190554615448, 'timestamp': 1433074217.9598587}}}
Emitted Event:
{'time': 1433074217.960978, 'uid': '654081bf-e0c2-4231-ad15-a93699e53764', 'descriptor': '7e929477-0150-4d36-a125-d48886b8262a', 'seq_num': 11, 'data': {'sin': {'value': -0.9959742939952391, 'timestamp': 1433074217.960978}, 'theta': {'value': 4.487989505128276, 'timestamp': 1433074217.960978}}}
Emitted Event:
{'time': 1433074217.9620972, 'uid': '3bfef05d-f83c-45f6-9d90-59a13dfb3ec0', 'descriptor': '7e929477-0150-4d36-a125-d48886b8262a', 'seq_num': 12, 'data': {'sin': {'value': -0.8584487936018662, 'timestamp': 1433074217.9620972}, 'theta': {'value': 4.9367884556411035, 'timestamp': 1433074217.9620972}}}
Emitted Event:
{'time': 1433074217.9632163, 'uid': '392ee7e3-3138-4a93-8dd2-c3a2130b49eb', 'descriptor': '7e929477-0150-4d36-a125-d48886b8262a', 'seq_num': 13, 'data': {'sin': {'value': -0.5508969814521026, 'timestamp': 1433074217.9632163}, 'theta': {'value': 5.385587406153931, 'timestamp': 1433074217.9632163}}}
Emitted Event:
{'time': 1433074217.9643354, 'uid': '88129e9e-bbf8-4e97-913e-2e2a16e369b8', 'descriptor': '7e929477-0150-4d36-a125-d48886b8262a', 'seq_num': 14, 'data': {'sin': {'value': -0.1342332658176557, 'timestamp': 1433074217.9643354}, 'theta': {'value': 5.834386356666759, 'timestamp': 1433074217.9643354}}}
Emitted Event:
{'time': 1433074217.9654548, 'uid': '4fe193a8-1582-43f7-8b08-f994e87e4f68', 'descriptor': '7e929477-0150-4d36-a125-d48886b8262a', 'seq_num': 15, 'data': {'sin': {'value': 0.3090169943749472, 'timestamp': 1433074217.9654548}, 'theta': {'value': 6.283185307179586, 'timestamp': 1433074217.9654548}}}
collect: (flyer: flyer), (), {}
   ret: None
MSG_CACHE None
kickoff: (flyer: flyer), (), {}
   ret: None
MSG_CACHE None
Emitted Event:
{'time': 1433074218.020009, 'uid': '96bcb72b-fe74-4bd3-b86b-3383f85753da', 'descriptor': '7e929477-0150-4d36-a125-d48886b8262a', 'seq_num': 16, 'data': {'sin': {'value': 0.5877852522924731, 'timestamp': 1433074218.020009}, 'theta': {'value': 0.0, 'timestamp': 1433074218.020009}}}
Emitted Event:
{'time': 1433074218.0207903, 'uid': '1a467f5e-b152-4fd5-9ea4-5c28c3109eed', 'descriptor': '7e929477-0150-4d36-a125-d48886b8262a', 'seq_num': 17, 'data': {'sin': {'value': 0.880595531856738, 'timestamp': 1433074218.0207903}, 'theta': {'value': 0.4487989505128276, 'timestamp': 1433074218.0207903}}}
Emitted Event:
{'time': 1433074218.0215716, 'uid': '8829adb8-eba3-4ebf-951d-f81e94fc2d20', 'descriptor': '7e929477-0150-4d36-a125-d48886b8262a', 'seq_num': 18, 'data': {'sin': {'value': 0.9989930665413146, 'timestamp': 1433074218.0215716}, 'theta': {'value': 0.8975979010256552, 'timestamp': 1433074218.0215716}}}
Emitted Event:
{'time': 1433074218.0223529, 'uid': 'f91b9a2e-6f1c-4a27-839a-757611d16619', 'descriptor': '7e929477-0150-4d36-a125-d48886b8262a', 'seq_num': 19, 'data': {'sin': {'value': 0.9195277725514507, 'timestamp': 1433074218.0223529}, 'theta': {'value': 1.3463968515384828, 'timestamp': 1433074218.0223529}}}
Emitted Event:
{'time': 1433074218.0231345, 'uid': '82724927-164b-4489-a0da-c0d35f4ab97c', 'descriptor': '7e929477-0150-4d36-a125-d48886b8262a', 'seq_num': 20, 'data': {'sin': {'value': 0.6579387259397127, 'timestamp': 1433074218.0231345}, 'theta': {'value': 1.7951958020513104, 'timestamp': 1433074218.0231345}}}
Emitted Event:
{'time': 1433074218.0239158, 'uid': 'ae35bbb6-0816-4d92-a7aa-6a09a1c12a32', 'descriptor': '7e929477-0150-4d36-a125-d48886b8262a', 'seq_num': 21, 'data': {'sin': {'value': 0.26603684556667523, 'timestamp': 1433074218.0239158}, 'theta': {'value': 2.243994752564138, 'timestamp': 1433074218.0239158}}}
Emitted Event:
{'time': 1433074218.0246971, 'uid': '14985a8a-6877-421a-bed5-aadfcaa11b65', 'descriptor': '7e929477-0150-4d36-a125-d48886b8262a', 'seq_num': 22, 'data': {'sin': {'value': -0.17855689479863654, 'timestamp': 1433074218.0246971}, 'theta': {'value': 2.6927937030769655, 'timestamp': 1433074218.0246971}}}
Emitted Event:
{'time': 1433074218.0254784, 'uid': 'e468cfd6-b480-460d-b05f-dc40960981ae', 'descriptor': '7e929477-0150-4d36-a125-d48886b8262a', 'seq_num': 23, 'data': {'sin': {'value': -0.587785252292473, 'timestamp': 1433074218.0254784}, 'theta': {'value': 3.141592653589793, 'timestamp': 1433074218.0254784}}}
Emitted Event:
{'time': 1433074218.0262597, 'uid': '2f313cb0-990a-4dda-b52d-1d1281434fa2', 'descriptor': '7e929477-0150-4d36-a125-d48886b8262a', 'seq_num': 24, 'data': {'sin': {'value': -0.8805955318567379, 'timestamp': 1433074218.0262597}, 'theta': {'value': 3.5903916041026207, 'timestamp': 1433074218.0262597}}}
Emitted Event:
{'time': 1433074218.027041, 'uid': '8b8d1634-4532-4700-bf20-2cb1cc48e671', 'descriptor': '7e929477-0150-4d36-a125-d48886b8262a', 'seq_num': 25, 'data': {'sin': {'value': -0.9989930665413146, 'timestamp': 1433074218.027041}, 'theta': {'value': 4.039190554615448, 'timestamp': 1433074218.027041}}}
Emitted Event:
{'time': 1433074218.0278223, 'uid': 'b168d41d-e2a2-402d-a4fa-910dc69077d4', 'descriptor': '7e929477-0150-4d36-a125-d48886b8262a', 'seq_num': 26, 'data': {'sin': {'value': -0.9195277725514507, 'timestamp': 1433074218.0278223}, 'theta': {'value': 4.487989505128276, 'timestamp': 1433074218.0278223}}}
Emitted Event:
{'time': 1433074218.0286036, 'uid': '161f378c-a58a-405f-8f4c-2367ac21b350', 'descriptor': '7e929477-0150-4d36-a125-d48886b8262a', 'seq_num': 27, 'data': {'sin': {'value': -0.6579387259397128, 'timestamp': 1433074218.0286036}, 'theta': {'value': 4.9367884556411035, 'timestamp': 1433074218.0286036}}}
Emitted Event:
{'time': 1433074218.0293851, 'uid': 'ad931b58-4ca0-4741-8cc3-493261e1262f', 'descriptor': '7e929477-0150-4d36-a125-d48886b8262a', 'seq_num': 28, 'data': {'sin': {'value': -0.2660368455666753, 'timestamp': 1433074218.0293851}, 'theta': {'value': 5.385587406153931, 'timestamp': 1433074218.0293851}}}
Emitted Event:
{'time': 1433074218.0301664, 'uid': '17320064-d5d7-4d6f-a31d-edb71d9b243b', 'descriptor': '7e929477-0150-4d36-a125-d48886b8262a', 'seq_num': 29, 'data': {'sin': {'value': 0.1785568947986364, 'timestamp': 1433074218.0301664}, 'theta': {'value': 5.834386356666759, 'timestamp': 1433074218.0301664}}}
Emitted Event:
{'time': 1433074218.0309477, 'uid': 'bd517faa-7685-4999-b712-7465bd1f0f1f', 'descriptor': '7e929477-0150-4d36-a125-d48886b8262a', 'seq_num': 30, 'data': {'sin': {'value': 0.5877852522924729, 'timestamp': 1433074218.0309477}, 'theta': {'value': 6.283185307179586, 'timestamp': 1433074218.0309477}}}
collect: (flyer: flyer), (), {}
   ret: None
MSG_CACHE None
*** Emitted RunStop:
{'time': 1433074218.085244, 'run_start': 'b3bb171d-2be6-4ca8-9552-11de7161ffa5', 'exit_status': 'success', 'reason': ''}

The fly scan results are in metadatastore....


In [23]:
header = db[-1]
header


Out[23]:
beamline_config
config_params
time1433074217.910222
time_as_datetime2015-05-31 08:10:17.910222 (4 seconds ago)
uid06f45d15-58e0-4187-9361-9a77c0da24a2
beamline_idtest
event_descriptors
data_keys
sin
dtypenumber
externalNone
shape
sourceflyer
theta
dtypenumber
externalNone
shape
sourceflyer
run_startb3bb171d-2be6-4ca8-9552-11de7161ffa5
time1433074217.960202
time_as_datetime2015-05-31 08:10:17.960201 (4 seconds ago)
uid7e929477-0150-4d36-a125-d48886b8262a
exit_reason
exit_statussuccess
group
ownertester
project
run_start_uidb3bb171d-2be6-4ca8-9552-11de7161ffa5
run_stop_uid4e070219-18ca-46cf-a2dd-4eec246766ab
sample
scan_id123
start_datetime2015-05-31 08:10:17.910113 (4 seconds ago)
start_time1433074217.910113
stop_datetime2015-05-31 08:10:18.085243 (4 seconds ago)
stop_time1433074218.085244

In [24]:
res = dm.from_events(db.fetch_events(header)).to_sparse_dataframe()
res


Out[24]:
sin theta time
0 0.309017 0.000000 2015-05-31 12:10:17.949786
1 0.691063 0.448799 2015-05-31 12:10:17.950905
2 0.936235 0.897598 2015-05-31 12:10:17.952024
3 0.995974 1.346397 2015-05-31 12:10:17.953144
4 0.858449 1.795196 2015-05-31 12:10:17.954263
5 0.550897 2.243995 2015-05-31 12:10:17.955382
6 0.134233 2.692794 2015-05-31 12:10:17.956501
7 -0.309017 3.141593 2015-05-31 12:10:17.957620
8 -0.691063 3.590392 2015-05-31 12:10:17.958740
9 -0.936235 4.039191 2015-05-31 12:10:17.959859
10 -0.995974 4.487990 2015-05-31 12:10:17.960978
11 -0.858449 4.936788 2015-05-31 12:10:17.962097
12 -0.550897 5.385587 2015-05-31 12:10:17.963216
13 -0.134233 5.834386 2015-05-31 12:10:17.964335
14 0.309017 6.283185 2015-05-31 12:10:17.965455
15 0.587785 0.000000 2015-05-31 12:10:18.020009
16 0.880596 0.448799 2015-05-31 12:10:18.020790
17 0.998993 0.897598 2015-05-31 12:10:18.021572
18 0.919528 1.346397 2015-05-31 12:10:18.022353
19 0.657939 1.795196 2015-05-31 12:10:18.023134
20 0.266037 2.243995 2015-05-31 12:10:18.023916
21 -0.178557 2.692794 2015-05-31 12:10:18.024697
22 -0.587785 3.141593 2015-05-31 12:10:18.025478
23 -0.880596 3.590392 2015-05-31 12:10:18.026260
24 -0.998993 4.039191 2015-05-31 12:10:18.027041
25 -0.919528 4.487990 2015-05-31 12:10:18.027822
26 -0.657939 4.936788 2015-05-31 12:10:18.028604
27 -0.266037 5.385587 2015-05-31 12:10:18.029385
28 0.178557 5.834386 2015-05-31 12:10:18.030166
29 0.587785 6.283185 2015-05-31 12:10:18.030948

In [25]:
fig, ax = plt.subplots()


---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-25-c49ba9de65d3> in <module>()
----> 1 fig, ax = plt.subplots()

NameError: name 'plt' is not defined

In [33]:
ax.cla()
res = dm.from_events(db.fetch_events(header)).to_sparse_dataframe()
ax.plot(res['sin'], label='sin')
ax.plot(res['theta'], label='theta')
ax.legend()
fig.canvas.draw()

Fly scan + stepscan

Do a step scan with one motor and a fly scan with another


In [33]:
def fly_step(flyer, motor):
    for x in range(-5, 5):
        # step
        yield Msg('create')
        yield Msg('set', motor, {'pos': x})
        yield Msg('trigger', motor)
        yield Msg('read', motor)
        yield Msg('save')
        # fly
        yield Msg('kickoff', flyer)
        yield Msg('collect', flyer)

In [34]:
flyer.reset()
RE.run(fly_step(flyer, motor))


*** Emitted RunStart:
{'time': 1433074300.259759, 'uid': '86012b98-c6f5-4f2c-8f4d-3dfd427232ce', 'owner': 'tester', 'scan_id': 123, 'beamline_id': 'test'}
MSG_CACHE None
create: (None), (), {}
   ret: None
MSG_CACHE None
set: (mover: motor), ({'pos': -5},), {}
   ret: None
MSG_CACHE None
trigger: (mover: motor), (), {}
   ret: None
MSG_CACHE None
read: (mover: motor), (), {}
   ret: {'pos': {'value': -5, 'timestamp': 1433074300.3996}}
MSG_CACHE None
*** Emitted Event Descriptor:
{'uid': '885b1e6f-b8d9-45c8-99bf-5bae20b5897b', 'data_keys': {'pos': {'dtype': 'number', 'source': 'motor'}}, 'time': 1433074300.425076, 'run_start': '86012b98-c6f5-4f2c-8f4d-3dfd427232ce'}
*** Emitted Event:
{'uid': '4691a1a3-2727-4909-b4c1-bca8b31da558', 'time': 1433074300.429001, 'descriptor': '885b1e6f-b8d9-45c8-99bf-5bae20b5897b', 'seq_num': 1, 'data': {'pos': {'value': -5, 'timestamp': 1433074300.3996}}}
save: (None), (), {}
   ret: None
MSG_CACHE None
kickoff: (flyer: flyer), (), {}
   ret: None
MSG_CACHE None
Emitted Event Descriptor:
{'uid': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'data_keys': {'sin': {'dtype': 'number', 'source': 'flyer'}, 'theta': {'dtype': 'number', 'source': 'flyer'}}, 'time': 1433074300.456389, 'run_start': '86012b98-c6f5-4f2c-8f4d-3dfd427232ce'}
Emitted Event:
{'time': 1433074300.4448991, 'uid': '7e13deee-4690-44aa-ba97-0479d584e6bf', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 1, 'data': {'sin': {'value': 0.3090169943749474, 'timestamp': 1433074300.4448991}, 'theta': {'value': 0.0, 'timestamp': 1433074300.4448991}}}
Emitted Event:
{'time': 1433074300.4459479, 'uid': '0f8a27b8-21de-4f3a-8857-5d10779a2382', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 2, 'data': {'sin': {'value': 0.6910626489868646, 'timestamp': 1433074300.4459479}, 'theta': {'value': 0.4487989505128276, 'timestamp': 1433074300.4459479}}}
Emitted Event:
{'time': 1433074300.4469965, 'uid': 'ba2bc1a8-7950-4a28-9a8c-c188ea18c91e', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 3, 'data': {'sin': {'value': 0.9362348706397372, 'timestamp': 1433074300.4469965}, 'theta': {'value': 0.8975979010256552, 'timestamp': 1433074300.4469965}}}
Emitted Event:
{'time': 1433074300.4480453, 'uid': '037c845d-c646-4e7f-8eee-a6b681582611', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 4, 'data': {'sin': {'value': 0.9959742939952391, 'timestamp': 1433074300.4480453}, 'theta': {'value': 1.3463968515384828, 'timestamp': 1433074300.4480453}}}
Emitted Event:
{'time': 1433074300.4490941, 'uid': 'df65aed1-a6de-4f60-9736-9d7af48ddb8a', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 5, 'data': {'sin': {'value': 0.8584487936018662, 'timestamp': 1433074300.4490941}, 'theta': {'value': 1.7951958020513104, 'timestamp': 1433074300.4490941}}}
Emitted Event:
{'time': 1433074300.4501426, 'uid': '19ffba19-5ae4-4324-a5d2-80a004ba9e76', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 6, 'data': {'sin': {'value': 0.5508969814521026, 'timestamp': 1433074300.4501426}, 'theta': {'value': 2.243994752564138, 'timestamp': 1433074300.4501426}}}
Emitted Event:
{'time': 1433074300.4511914, 'uid': 'cd81edbe-39f6-44f4-aec4-a73583835044', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 7, 'data': {'sin': {'value': 0.13423326581765557, 'timestamp': 1433074300.4511914}, 'theta': {'value': 2.6927937030769655, 'timestamp': 1433074300.4511914}}}
Emitted Event:
{'time': 1433074300.4522402, 'uid': '8b0ee1e2-330b-48bb-9e8f-781b420288b4', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 8, 'data': {'sin': {'value': -0.3090169943749473, 'timestamp': 1433074300.4522402}, 'theta': {'value': 3.141592653589793, 'timestamp': 1433074300.4522402}}}
Emitted Event:
{'time': 1433074300.4532888, 'uid': '48564867-6171-415e-90fa-15043b44df2d', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 9, 'data': {'sin': {'value': -0.6910626489868645, 'timestamp': 1433074300.4532888}, 'theta': {'value': 3.5903916041026207, 'timestamp': 1433074300.4532888}}}
Emitted Event:
{'time': 1433074300.4543376, 'uid': '56828754-4a22-4289-9b17-cc4baa5465ae', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 10, 'data': {'sin': {'value': -0.9362348706397372, 'timestamp': 1433074300.4543376}, 'theta': {'value': 4.039190554615448, 'timestamp': 1433074300.4543376}}}
Emitted Event:
{'time': 1433074300.4553864, 'uid': '0d32fb21-fbd6-495d-92df-19528754d4b2', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 11, 'data': {'sin': {'value': -0.9959742939952391, 'timestamp': 1433074300.4553864}, 'theta': {'value': 4.487989505128276, 'timestamp': 1433074300.4553864}}}
Emitted Event:
{'time': 1433074300.456435, 'uid': 'e10ad063-4f37-45f4-bc00-e869aaf684f6', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 12, 'data': {'sin': {'value': -0.8584487936018662, 'timestamp': 1433074300.456435}, 'theta': {'value': 4.9367884556411035, 'timestamp': 1433074300.456435}}}
Emitted Event:
{'time': 1433074300.4574838, 'uid': '83c5c866-63c7-4bd8-ba52-f52f594a4abf', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 13, 'data': {'sin': {'value': -0.5508969814521026, 'timestamp': 1433074300.4574838}, 'theta': {'value': 5.385587406153931, 'timestamp': 1433074300.4574838}}}
Emitted Event:
{'time': 1433074300.4585326, 'uid': 'a40094dc-3638-4438-b39c-3f30f4c6f8ca', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 14, 'data': {'sin': {'value': -0.1342332658176557, 'timestamp': 1433074300.4585326}, 'theta': {'value': 5.834386356666759, 'timestamp': 1433074300.4585326}}}
Emitted Event:
{'time': 1433074300.4595811, 'uid': '54ccb7c7-87a4-4d74-8947-f30efe4eec2f', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 15, 'data': {'sin': {'value': 0.3090169943749472, 'timestamp': 1433074300.4595811}, 'theta': {'value': 6.283185307179586, 'timestamp': 1433074300.4595811}}}
collect: (flyer: flyer), (), {}
   ret: None
MSG_CACHE None
create: (None), (), {}
   ret: None
MSG_CACHE None
set: (mover: motor), ({'pos': -4},), {}
   ret: None
MSG_CACHE None
trigger: (mover: motor), (), {}
   ret: None
MSG_CACHE None
read: (mover: motor), (), {}
   ret: {'pos': {'value': -4, 'timestamp': 1433074300.63424}}
MSG_CACHE None
*** Emitted Event:
{'uid': 'cc76a986-d3c2-4284-bad6-c208cabbeb60', 'time': 1433074300.659869, 'descriptor': '885b1e6f-b8d9-45c8-99bf-5bae20b5897b', 'seq_num': 2, 'data': {'pos': {'value': -4, 'timestamp': 1433074300.63424}}}
save: (None), (), {}
   ret: None
MSG_CACHE None
kickoff: (flyer: flyer), (), {}
   ret: None
MSG_CACHE None
Emitted Event:
{'time': 1433074300.675251, 'uid': '41b0d9fe-0567-41a8-9267-437532d9514c', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 16, 'data': {'sin': {'value': 0.5877852522924731, 'timestamp': 1433074300.675251}, 'theta': {'value': 0.0, 'timestamp': 1433074300.675251}}}
Emitted Event:
{'time': 1433074300.6760914, 'uid': '565807d8-b4e5-466d-bae3-8df27dc55934', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 17, 'data': {'sin': {'value': 0.880595531856738, 'timestamp': 1433074300.6760914}, 'theta': {'value': 0.4487989505128276, 'timestamp': 1433074300.6760914}}}
Emitted Event:
{'time': 1433074300.6769321, 'uid': 'a668cd22-7256-4e69-8709-0f70008ac6b5', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 18, 'data': {'sin': {'value': 0.9989930665413146, 'timestamp': 1433074300.6769321}, 'theta': {'value': 0.8975979010256552, 'timestamp': 1433074300.6769321}}}
Emitted Event:
{'time': 1433074300.6777725, 'uid': '080f2b01-cac7-4ac1-bcd6-6c4e94592236', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 19, 'data': {'sin': {'value': 0.9195277725514507, 'timestamp': 1433074300.6777725}, 'theta': {'value': 1.3463968515384828, 'timestamp': 1433074300.6777725}}}
Emitted Event:
{'time': 1433074300.6786132, 'uid': 'b55bed66-01d4-4e81-9838-d48d8398e711', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 20, 'data': {'sin': {'value': 0.6579387259397127, 'timestamp': 1433074300.6786132}, 'theta': {'value': 1.7951958020513104, 'timestamp': 1433074300.6786132}}}
Emitted Event:
{'time': 1433074300.6794536, 'uid': 'b4967be0-24bc-4af2-a112-73cfeaa155ec', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 21, 'data': {'sin': {'value': 0.26603684556667523, 'timestamp': 1433074300.6794536}, 'theta': {'value': 2.243994752564138, 'timestamp': 1433074300.6794536}}}
Emitted Event:
{'time': 1433074300.6802943, 'uid': '3d93ae6b-9ac0-4977-aa50-cc9d3e2d2300', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 22, 'data': {'sin': {'value': -0.17855689479863654, 'timestamp': 1433074300.6802943}, 'theta': {'value': 2.6927937030769655, 'timestamp': 1433074300.6802943}}}
Emitted Event:
{'time': 1433074300.6811347, 'uid': '110c73c1-5ee8-405c-90b0-9b1556f3acbf', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 23, 'data': {'sin': {'value': -0.587785252292473, 'timestamp': 1433074300.6811347}, 'theta': {'value': 3.141592653589793, 'timestamp': 1433074300.6811347}}}
Emitted Event:
{'time': 1433074300.6819754, 'uid': '947e8353-f022-44e6-a188-9f019ec140bc', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 24, 'data': {'sin': {'value': -0.8805955318567379, 'timestamp': 1433074300.6819754}, 'theta': {'value': 3.5903916041026207, 'timestamp': 1433074300.6819754}}}
Emitted Event:
{'time': 1433074300.6828158, 'uid': 'c920b37e-edeb-4b5b-bb4c-df753f24681d', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 25, 'data': {'sin': {'value': -0.9989930665413146, 'timestamp': 1433074300.6828158}, 'theta': {'value': 4.039190554615448, 'timestamp': 1433074300.6828158}}}
Emitted Event:
{'time': 1433074300.6836565, 'uid': '49c67104-a412-4058-aab9-2b9e927f3352', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 26, 'data': {'sin': {'value': -0.9195277725514507, 'timestamp': 1433074300.6836565}, 'theta': {'value': 4.487989505128276, 'timestamp': 1433074300.6836565}}}
Emitted Event:
{'time': 1433074300.6844969, 'uid': 'dd11bce1-e4ac-49b1-963e-813d60a2e028', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 27, 'data': {'sin': {'value': -0.6579387259397128, 'timestamp': 1433074300.6844969}, 'theta': {'value': 4.9367884556411035, 'timestamp': 1433074300.6844969}}}
Emitted Event:
{'time': 1433074300.6853375, 'uid': 'e55978e6-e39f-4ad9-a22a-4af23f91389e', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 28, 'data': {'sin': {'value': -0.2660368455666753, 'timestamp': 1433074300.6853375}, 'theta': {'value': 5.385587406153931, 'timestamp': 1433074300.6853375}}}
Emitted Event:
{'time': 1433074300.686178, 'uid': '63440fb2-ce01-45d7-ae82-42b960e48d2f', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 29, 'data': {'sin': {'value': 0.1785568947986364, 'timestamp': 1433074300.686178}, 'theta': {'value': 5.834386356666759, 'timestamp': 1433074300.686178}}}
Emitted Event:
{'time': 1433074300.6870186, 'uid': 'da427af6-5e2e-4b83-a3f9-6a66c4dc550e', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 30, 'data': {'sin': {'value': 0.5877852522924729, 'timestamp': 1433074300.6870186}, 'theta': {'value': 6.283185307179586, 'timestamp': 1433074300.6870186}}}
collect: (flyer: flyer), (), {}
   ret: None
MSG_CACHE None
create: (None), (), {}
   ret: None
MSG_CACHE None
set: (mover: motor), ({'pos': -3},), {}
   ret: None
MSG_CACHE None
trigger: (mover: motor), (), {}
   ret: None
MSG_CACHE None
read: (mover: motor), (), {}
   ret: {'pos': {'value': -3, 'timestamp': 1433074300.855163}}
MSG_CACHE None
*** Emitted Event:
{'uid': '99a607c4-cb4d-43c3-8838-6663b9a94096', 'time': 1433074300.881141, 'descriptor': '885b1e6f-b8d9-45c8-99bf-5bae20b5897b', 'seq_num': 3, 'data': {'pos': {'value': -3, 'timestamp': 1433074300.855163}}}
save: (None), (), {}
   ret: None
MSG_CACHE None
kickoff: (flyer: flyer), (), {}
   ret: None
MSG_CACHE None
Emitted Event:
{'time': 1433074300.898983, 'uid': 'cff8335c-36f5-48ab-8f25-827771412b06', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 31, 'data': {'sin': {'value': 0.8090169943749473, 'timestamp': 1433074300.898983}, 'theta': {'value': 0.0, 'timestamp': 1433074300.898983}}}
Emitted Event:
{'time': 1433074300.8997362, 'uid': '82658a0e-9b5e-4813-830c-d5da846dd4af', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 32, 'data': {'sin': {'value': 0.9839295885986297, 'timestamp': 1433074300.8997362}, 'theta': {'value': 0.4487989505128276, 'timestamp': 1433074300.8997362}}}
Emitted Event:
{'time': 1433074300.9004893, 'uid': '7a95286e-0aa7-4ce9-a69f-444ccff45535', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 33, 'data': {'sin': {'value': 0.9639628606958534, 'timestamp': 1433074300.9004893}, 'theta': {'value': 0.8975979010256552, 'timestamp': 1433074300.9004893}}}
Emitted Event:
{'time': 1433074300.9012425, 'uid': '62f3fbf4-e916-4eff-99df-ee27b3ad03e7', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 34, 'data': {'sin': {'value': 0.753071466003611, 'timestamp': 1433074300.9012425}, 'theta': {'value': 1.3463968515384828, 'timestamp': 1433074300.9012425}}}
Emitted Event:
{'time': 1433074300.9019959, 'uid': '6b43bd12-88f3-4dde-b8a9-2cbe96d291e1', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 35, 'data': {'sin': {'value': 0.3930250316539237, 'timestamp': 1433074300.9019959}, 'theta': {'value': 1.7951958020513104, 'timestamp': 1433074300.9019959}}}
Emitted Event:
{'time': 1433074300.9027491, 'uid': '0c50dd9b-1aa2-485b-ae42-ac9daaec5c37', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 36, 'data': {'sin': {'value': -0.0448648303505148, 'timestamp': 1433074300.9027491}, 'theta': {'value': 2.243994752564138, 'timestamp': 1433074300.9027491}}}
Emitted Event:
{'time': 1433074300.9035022, 'uid': '0563a618-275e-4111-abb7-2a617d30962a', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 37, 'data': {'sin': {'value': -0.4738686624729986, 'timestamp': 1433074300.9035022}, 'theta': {'value': 2.6927937030769655, 'timestamp': 1433074300.9035022}}}
Emitted Event:
{'time': 1433074300.9042554, 'uid': '58e410e5-3476-436e-bef1-5fe6efb09760', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 38, 'data': {'sin': {'value': -0.8090169943749473, 'timestamp': 1433074300.9042554}, 'theta': {'value': 3.141592653589793, 'timestamp': 1433074300.9042554}}}
Emitted Event:
{'time': 1433074300.9050086, 'uid': '41312633-b8f7-44d6-a487-29c19b590f26', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 39, 'data': {'sin': {'value': -0.9839295885986297, 'timestamp': 1433074300.9050086}, 'theta': {'value': 3.5903916041026207, 'timestamp': 1433074300.9050086}}}
Emitted Event:
{'time': 1433074300.9057617, 'uid': '30fe36f3-a724-4db7-9590-0870649970ac', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 40, 'data': {'sin': {'value': -0.9639628606958534, 'timestamp': 1433074300.9057617}, 'theta': {'value': 4.039190554615448, 'timestamp': 1433074300.9057617}}}
Emitted Event:
{'time': 1433074300.9065149, 'uid': '478326f3-7293-4e2b-8482-5ce50d782bb5', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 41, 'data': {'sin': {'value': -0.7530714660036111, 'timestamp': 1433074300.9065149}, 'theta': {'value': 4.487989505128276, 'timestamp': 1433074300.9065149}}}
Emitted Event:
{'time': 1433074300.907268, 'uid': 'eafc76c3-279d-463f-9fb6-87d1e22b4240', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 42, 'data': {'sin': {'value': -0.39302503165392383, 'timestamp': 1433074300.907268}, 'theta': {'value': 4.9367884556411035, 'timestamp': 1433074300.907268}}}
Emitted Event:
{'time': 1433074300.9080215, 'uid': '46d9b15f-bd9d-434f-ab15-4d03cddbdaf5', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 43, 'data': {'sin': {'value': 0.04486483035051468, 'timestamp': 1433074300.9080215}, 'theta': {'value': 5.385587406153931, 'timestamp': 1433074300.9080215}}}
Emitted Event:
{'time': 1433074300.9087746, 'uid': 'c58da9a8-7f9d-418e-8198-a2a8cd5cfe5b', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 44, 'data': {'sin': {'value': 0.47386866247299847, 'timestamp': 1433074300.9087746}, 'theta': {'value': 5.834386356666759, 'timestamp': 1433074300.9087746}}}
Emitted Event:
{'time': 1433074300.9095278, 'uid': '41366ba2-3883-4066-aef5-50d0c846541b', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 45, 'data': {'sin': {'value': 0.8090169943749472, 'timestamp': 1433074300.9095278}, 'theta': {'value': 6.283185307179586, 'timestamp': 1433074300.9095278}}}
collect: (flyer: flyer), (), {}
   ret: None
MSG_CACHE None
create: (None), (), {}
   ret: None
MSG_CACHE None
set: (mover: motor), ({'pos': -2},), {}
   ret: None
MSG_CACHE None
trigger: (mover: motor), (), {}
   ret: None
MSG_CACHE None
read: (mover: motor), (), {}
   ret: {'pos': {'value': -2, 'timestamp': 1433074301.089182}}
MSG_CACHE None
*** Emitted Event:
{'uid': '76f967a7-b123-4032-849a-08c68d092cc6', 'time': 1433074301.111085, 'descriptor': '885b1e6f-b8d9-45c8-99bf-5bae20b5897b', 'seq_num': 4, 'data': {'pos': {'value': -2, 'timestamp': 1433074301.089182}}}
save: (None), (), {}
   ret: None
MSG_CACHE None
kickoff: (flyer: flyer), (), {}
   ret: None
MSG_CACHE None
Emitted Event:
{'time': 1433074301.1267681, 'uid': 'e18eb59e-e9f9-4a77-b97c-17367a3afe99', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 46, 'data': {'sin': {'value': 0.9510565162951535, 'timestamp': 1433074301.1267681}, 'theta': {'value': 0.0, 'timestamp': 1433074301.1267681}}}
Emitted Event:
{'time': 1433074301.1275179, 'uid': 'da2e64c4-62a3-4254-85dc-38e295486c0f', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 47, 'data': {'sin': {'value': 0.9909497617679348, 'timestamp': 1433074301.1275179}, 'theta': {'value': 0.4487989505128276, 'timestamp': 1433074301.1275179}}}
Emitted Event:
{'time': 1433074301.1282675, 'uid': '9aae2c9a-83b4-4360-a096-637b3fb17369', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 48, 'data': {'sin': {'value': 0.8345732537213028, 'timestamp': 1433074301.1282675}, 'theta': {'value': 0.8975979010256552, 'timestamp': 1433074301.1282675}}}
Emitted Event:
{'time': 1433074301.1290174, 'uid': 'ac7302ae-e9c0-4bc2-9adb-2876f762818c', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 49, 'data': {'sin': {'value': 0.5128992774059062, 'timestamp': 1433074301.1290174}, 'theta': {'value': 1.3463968515384828, 'timestamp': 1433074301.1290174}}}
Emitted Event:
{'time': 1433074301.1297669, 'uid': 'a6dcbe54-d7c5-43e0-b9d9-4947d9e13eab', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 50, 'data': {'sin': {'value': 0.08963930890343362, 'timestamp': 1433074301.1297669}, 'theta': {'value': 1.7951958020513104, 'timestamp': 1433074301.1297669}}}
Emitted Event:
{'time': 1433074301.1305168, 'uid': 'dce48bda-e61c-4c2a-ace3-11d3073547b7', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 51, 'data': {'sin': {'value': -0.3513748240813426, 'timestamp': 1433074301.1305168}, 'theta': {'value': 2.243994752564138, 'timestamp': 1433074301.1305168}}}
Emitted Event:
{'time': 1433074301.1312666, 'uid': '03296f11-1de9-4456-b264-1ddac6cfcfe6', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 52, 'data': {'sin': {'value': -0.7227948638273913, 'timestamp': 1433074301.1312666}, 'theta': {'value': 2.6927937030769655, 'timestamp': 1433074301.1312666}}}
Emitted Event:
{'time': 1433074301.1320162, 'uid': '67de6970-e40b-4d8c-ab07-fcdc0943ecf2', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 53, 'data': {'sin': {'value': -0.9510565162951535, 'timestamp': 1433074301.1320162}, 'theta': {'value': 3.141592653589793, 'timestamp': 1433074301.1320162}}}
Emitted Event:
{'time': 1433074301.132766, 'uid': '3a5f6042-351c-4c33-a64b-48e258ad4528', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 54, 'data': {'sin': {'value': -0.9909497617679348, 'timestamp': 1433074301.132766}, 'theta': {'value': 3.5903916041026207, 'timestamp': 1433074301.132766}}}
Emitted Event:
{'time': 1433074301.1335156, 'uid': '46a5788b-fc08-442b-991c-c6aa3c2c5f45', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 55, 'data': {'sin': {'value': -0.8345732537213028, 'timestamp': 1433074301.1335156}, 'theta': {'value': 4.039190554615448, 'timestamp': 1433074301.1335156}}}
Emitted Event:
{'time': 1433074301.1342654, 'uid': '08684f12-fc77-4ee7-bcfe-074076c7cd24', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 56, 'data': {'sin': {'value': -0.5128992774059064, 'timestamp': 1433074301.1342654}, 'theta': {'value': 4.487989505128276, 'timestamp': 1433074301.1342654}}}
Emitted Event:
{'time': 1433074301.1350152, 'uid': 'c464b0cb-aa06-4b6b-93ce-578e8e0ba94b', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 57, 'data': {'sin': {'value': -0.08963930890343375, 'timestamp': 1433074301.1350152}, 'theta': {'value': 4.9367884556411035, 'timestamp': 1433074301.1350152}}}
Emitted Event:
{'time': 1433074301.1357648, 'uid': '0ad5e612-c3ff-4f36-a199-8d29498f5d43', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 58, 'data': {'sin': {'value': 0.35137482408134246, 'timestamp': 1433074301.1357648}, 'theta': {'value': 5.385587406153931, 'timestamp': 1433074301.1357648}}}
Emitted Event:
{'time': 1433074301.1365147, 'uid': '104de15a-9be7-4ed8-a823-7d170556d5cf', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 59, 'data': {'sin': {'value': 0.7227948638273913, 'timestamp': 1433074301.1365147}, 'theta': {'value': 5.834386356666759, 'timestamp': 1433074301.1365147}}}
Emitted Event:
{'time': 1433074301.1372643, 'uid': '16a7005f-9fd2-40b2-bddd-5f07cdfb4e0d', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 60, 'data': {'sin': {'value': 0.9510565162951534, 'timestamp': 1433074301.1372643}, 'theta': {'value': 6.283185307179586, 'timestamp': 1433074301.1372643}}}
collect: (flyer: flyer), (), {}
   ret: None
MSG_CACHE None
create: (None), (), {}
   ret: None
MSG_CACHE None
set: (mover: motor), ({'pos': -1},), {}
   ret: None
MSG_CACHE None
trigger: (mover: motor), (), {}
   ret: None
MSG_CACHE None
read: (mover: motor), (), {}
   ret: {'pos': {'value': -1, 'timestamp': 1433074301.322583}}
MSG_CACHE None
*** Emitted Event:
{'uid': 'ddf7492c-d49d-4d39-b8e2-9c2d756c1160', 'time': 1433074301.344698, 'descriptor': '885b1e6f-b8d9-45c8-99bf-5bae20b5897b', 'seq_num': 5, 'data': {'pos': {'value': -1, 'timestamp': 1433074301.322583}}}
save: (None), (), {}
   ret: None
MSG_CACHE None
kickoff: (flyer: flyer), (), {}
   ret: None
MSG_CACHE None
Emitted Event:
{'time': 1433074301.3594451, 'uid': '05fe1c4a-c7fc-4802-b2a7-a11d947c9c68', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 61, 'data': {'sin': {'value': 1.0, 'timestamp': 1433074301.3594451}, 'theta': {'value': 0.0, 'timestamp': 1433074301.3594451}}}
Emitted Event:
{'time': 1433074301.3603077, 'uid': '337d3db3-97a3-4bd1-9983-697a0a967dd3', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 62, 'data': {'sin': {'value': 0.9009688679024191, 'timestamp': 1433074301.3603077}, 'theta': {'value': 0.4487989505128276, 'timestamp': 1433074301.3603077}}}
Emitted Event:
{'time': 1433074301.3611701, 'uid': '848c3868-c234-4a97-94ee-ad108a65547b', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 63, 'data': {'sin': {'value': 0.6234898018587336, 'timestamp': 1433074301.3611701}, 'theta': {'value': 0.8975979010256552, 'timestamp': 1433074301.3611701}}}
Emitted Event:
{'time': 1433074301.3620327, 'uid': '336cdfcc-45b3-4a21-927b-2c961199c306', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 64, 'data': {'sin': {'value': 0.2225209339563145, 'timestamp': 1433074301.3620327}, 'theta': {'value': 1.3463968515384828, 'timestamp': 1433074301.3620327}}}
Emitted Event:
{'time': 1433074301.3628953, 'uid': 'd346688a-7c99-4064-932b-e375b2ffc4ae', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 65, 'data': {'sin': {'value': -0.22252093395631428, 'timestamp': 1433074301.3628953}, 'theta': {'value': 1.7951958020513104, 'timestamp': 1433074301.3628953}}}
Emitted Event:
{'time': 1433074301.3637578, 'uid': '434c5046-7ad9-4d44-ac40-5c23715e4433', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 66, 'data': {'sin': {'value': -0.6234898018587334, 'timestamp': 1433074301.3637578}, 'theta': {'value': 2.243994752564138, 'timestamp': 1433074301.3637578}}}
Emitted Event:
{'time': 1433074301.3646202, 'uid': '4b6cc7e4-0be8-4915-9e1d-716c69a41952', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 67, 'data': {'sin': {'value': -0.900968867902419, 'timestamp': 1433074301.3646202}, 'theta': {'value': 2.6927937030769655, 'timestamp': 1433074301.3646202}}}
Emitted Event:
{'time': 1433074301.3654828, 'uid': '95f5b1f2-5f91-4813-99c8-481349788d3e', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 68, 'data': {'sin': {'value': -1.0, 'timestamp': 1433074301.3654828}, 'theta': {'value': 3.141592653589793, 'timestamp': 1433074301.3654828}}}
Emitted Event:
{'time': 1433074301.3663454, 'uid': 'dfcec1a8-3af7-4b5e-af72-ff29b8cf4bdb', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 69, 'data': {'sin': {'value': -0.9009688679024193, 'timestamp': 1433074301.3663454}, 'theta': {'value': 3.5903916041026207, 'timestamp': 1433074301.3663454}}}
Emitted Event:
{'time': 1433074301.367208, 'uid': '35f6da16-5650-48dc-b637-28099f6a403e', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 70, 'data': {'sin': {'value': -0.6234898018587337, 'timestamp': 1433074301.367208}, 'theta': {'value': 4.039190554615448, 'timestamp': 1433074301.367208}}}
Emitted Event:
{'time': 1433074301.3680704, 'uid': '32a5b44d-549d-438e-a0e2-02f5acd19e1a', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 71, 'data': {'sin': {'value': -0.22252093395631464, 'timestamp': 1433074301.3680704}, 'theta': {'value': 4.487989505128276, 'timestamp': 1433074301.3680704}}}
Emitted Event:
{'time': 1433074301.368933, 'uid': '2557b172-218c-4155-9404-09e7a357e539', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 72, 'data': {'sin': {'value': 0.22252093395631414, 'timestamp': 1433074301.368933}, 'theta': {'value': 4.9367884556411035, 'timestamp': 1433074301.368933}}}
Emitted Event:
{'time': 1433074301.3697956, 'uid': '9584e7db-7d7c-4027-84d7-70a0baea31ae', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 73, 'data': {'sin': {'value': 0.6234898018587334, 'timestamp': 1433074301.3697956}, 'theta': {'value': 5.385587406153931, 'timestamp': 1433074301.3697956}}}
Emitted Event:
{'time': 1433074301.3706582, 'uid': '274174ab-ee87-422a-8bbf-c1eb2889f775', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 74, 'data': {'sin': {'value': 0.900968867902419, 'timestamp': 1433074301.3706582}, 'theta': {'value': 5.834386356666759, 'timestamp': 1433074301.3706582}}}
Emitted Event:
{'time': 1433074301.3715205, 'uid': '84d583a6-2843-48f7-b1c3-11ecc9ffd639', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 75, 'data': {'sin': {'value': 1.0, 'timestamp': 1433074301.3715205}, 'theta': {'value': 6.283185307179586, 'timestamp': 1433074301.3715205}}}
collect: (flyer: flyer), (), {}
   ret: None
MSG_CACHE None
create: (None), (), {}
   ret: None
MSG_CACHE None
set: (mover: motor), ({'pos': 0},), {}
   ret: None
MSG_CACHE None
trigger: (mover: motor), (), {}
   ret: None
MSG_CACHE None
read: (mover: motor), (), {}
   ret: {'pos': {'value': 0, 'timestamp': 1433074301.561603}}
MSG_CACHE None
*** Emitted Event:
{'uid': 'ade4bd0b-8f2e-4b9d-9434-4ce1c6d25e7f', 'time': 1433074301.585177, 'descriptor': '885b1e6f-b8d9-45c8-99bf-5bae20b5897b', 'seq_num': 6, 'data': {'pos': {'value': 0, 'timestamp': 1433074301.561603}}}
save: (None), (), {}
   ret: None
MSG_CACHE None
kickoff: (flyer: flyer), (), {}
   ret: None
MSG_CACHE None
Emitted Event:
{'time': 1433074301.6000521, 'uid': 'de95b997-4deb-4b68-9538-8fbc124bf79b', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 76, 'data': {'sin': {'value': 0.9510565162951536, 'timestamp': 1433074301.6000521}, 'theta': {'value': 0.0, 'timestamp': 1433074301.6000521}}}
Emitted Event:
{'time': 1433074301.600863, 'uid': '2916c721-3f3e-4ee3-b328-3f388d0bd749', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 77, 'data': {'sin': {'value': 0.7227948638273916, 'timestamp': 1433074301.600863}, 'theta': {'value': 0.4487989505128276, 'timestamp': 1433074301.600863}}}
Emitted Event:
{'time': 1433074301.6016741, 'uid': '072ffc7a-497a-4b17-890b-9e0992b7b94e', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 78, 'data': {'sin': {'value': 0.3513748240813428, 'timestamp': 1433074301.6016741}, 'theta': {'value': 0.8975979010256552, 'timestamp': 1433074301.6016741}}}
Emitted Event:
{'time': 1433074301.6024849, 'uid': '549ad9fc-88ae-4dca-939a-d04ceb6d42d1', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 79, 'data': {'sin': {'value': -0.08963930890343337, 'timestamp': 1433074301.6024849}, 'theta': {'value': 1.3463968515384828, 'timestamp': 1433074301.6024849}}}
Emitted Event:
{'time': 1433074301.6032958, 'uid': '18e7ae18-6461-4d9b-bea6-868838acdad6', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 80, 'data': {'sin': {'value': -0.512899277405906, 'timestamp': 1433074301.6032958}, 'theta': {'value': 1.7951958020513104, 'timestamp': 1433074301.6032958}}}
Emitted Event:
{'time': 1433074301.6041067, 'uid': '800df5a0-364b-4003-af46-9fd8f0d027e0', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 81, 'data': {'sin': {'value': -0.8345732537213025, 'timestamp': 1433074301.6041067}, 'theta': {'value': 2.243994752564138, 'timestamp': 1433074301.6041067}}}
Emitted Event:
{'time': 1433074301.6049178, 'uid': '3ede33d3-2733-4145-8053-191b80849004', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 82, 'data': {'sin': {'value': -0.9909497617679347, 'timestamp': 1433074301.6049178}, 'theta': {'value': 2.6927937030769655, 'timestamp': 1433074301.6049178}}}
Emitted Event:
{'time': 1433074301.6057286, 'uid': 'b3d40909-9782-4664-b0ff-07360d685677', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 83, 'data': {'sin': {'value': -0.9510565162951536, 'timestamp': 1433074301.6057286}, 'theta': {'value': 3.141592653589793, 'timestamp': 1433074301.6057286}}}
Emitted Event:
{'time': 1433074301.6065395, 'uid': '20008ce8-a33f-4a30-8675-9b14a6146abc', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 84, 'data': {'sin': {'value': -0.7227948638273918, 'timestamp': 1433074301.6065395}, 'theta': {'value': 3.5903916041026207, 'timestamp': 1433074301.6065395}}}
Emitted Event:
{'time': 1433074301.6073503, 'uid': 'b4642bec-97a5-4e2b-8c45-4f75e2c031be', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 85, 'data': {'sin': {'value': -0.3513748240813429, 'timestamp': 1433074301.6073503}, 'theta': {'value': 4.039190554615448, 'timestamp': 1433074301.6073503}}}
Emitted Event:
{'time': 1433074301.6081614, 'uid': '08b7fec6-3921-4928-9684-2acca2e0813a', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 86, 'data': {'sin': {'value': 0.08963930890343325, 'timestamp': 1433074301.6081614}, 'theta': {'value': 4.487989505128276, 'timestamp': 1433074301.6081614}}}
Emitted Event:
{'time': 1433074301.6089723, 'uid': '56776416-7658-454a-b1e2-058da18630f4', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 87, 'data': {'sin': {'value': 0.5128992774059059, 'timestamp': 1433074301.6089723}, 'theta': {'value': 4.9367884556411035, 'timestamp': 1433074301.6089723}}}
Emitted Event:
{'time': 1433074301.6097832, 'uid': 'da6ad6c8-7a0b-4299-97a6-76b202f2eefb', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 88, 'data': {'sin': {'value': 0.8345732537213024, 'timestamp': 1433074301.6097832}, 'theta': {'value': 5.385587406153931, 'timestamp': 1433074301.6097832}}}
Emitted Event:
{'time': 1433074301.610594, 'uid': 'fa3c28d2-486b-42e2-9d5a-3df495503936', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 89, 'data': {'sin': {'value': 0.9909497617679347, 'timestamp': 1433074301.610594}, 'theta': {'value': 5.834386356666759, 'timestamp': 1433074301.610594}}}
Emitted Event:
{'time': 1433074301.6114051, 'uid': 'eb824203-9f98-4708-8903-8c04f08e332b', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 90, 'data': {'sin': {'value': 0.9510565162951536, 'timestamp': 1433074301.6114051}, 'theta': {'value': 6.283185307179586, 'timestamp': 1433074301.6114051}}}
collect: (flyer: flyer), (), {}
   ret: None
MSG_CACHE None
create: (None), (), {}
   ret: None
MSG_CACHE None
set: (mover: motor), ({'pos': 1},), {}
   ret: None
MSG_CACHE None
trigger: (mover: motor), (), {}
   ret: None
MSG_CACHE None
read: (mover: motor), (), {}
   ret: {'pos': {'value': 1, 'timestamp': 1433074301.787918}}
MSG_CACHE None
*** Emitted Event:
{'uid': '06bfafb2-3c03-42bf-a057-419089f01358', 'time': 1433074301.811426, 'descriptor': '885b1e6f-b8d9-45c8-99bf-5bae20b5897b', 'seq_num': 7, 'data': {'pos': {'value': 1, 'timestamp': 1433074301.787918}}}
save: (None), (), {}
   ret: None
MSG_CACHE None
kickoff: (flyer: flyer), (), {}
   ret: None
MSG_CACHE None
Emitted Event:
{'time': 1433074301.827024, 'uid': '77b9c36b-49f7-4da9-be9a-861a37c3615c', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 91, 'data': {'sin': {'value': 0.8090169943749475, 'timestamp': 1433074301.827024}, 'theta': {'value': 0.0, 'timestamp': 1433074301.827024}}}
Emitted Event:
{'time': 1433074301.8278871, 'uid': '70c8c306-26a4-4bdc-bc27-b746711043b9', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 92, 'data': {'sin': {'value': 0.47386866247299875, 'timestamp': 1433074301.8278871}, 'theta': {'value': 0.4487989505128276, 'timestamp': 1433074301.8278871}}}
Emitted Event:
{'time': 1433074301.8287501, 'uid': 'cb8b205a-0b5d-404b-bbcb-46bb1676caea', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 93, 'data': {'sin': {'value': 0.04486483035051505, 'timestamp': 1433074301.8287501}, 'theta': {'value': 0.8975979010256552, 'timestamp': 1433074301.8287501}}}
Emitted Event:
{'time': 1433074301.8296132, 'uid': '3dbe6604-54eb-4d44-8d63-69a729dd8fcf', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 94, 'data': {'sin': {'value': -0.3930250316539235, 'timestamp': 1433074301.8296132}, 'theta': {'value': 1.3463968515384828, 'timestamp': 1433074301.8296132}}}
Emitted Event:
{'time': 1433074301.8304763, 'uid': 'd1d1e985-2d72-4e8a-93d9-5536df2491c5', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 95, 'data': {'sin': {'value': -0.7530714660036109, 'timestamp': 1433074301.8304763}, 'theta': {'value': 1.7951958020513104, 'timestamp': 1433074301.8304763}}}
Emitted Event:
{'time': 1433074301.8313394, 'uid': '36c1d3e3-90c8-4683-937b-183096b57669', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 96, 'data': {'sin': {'value': -0.9639628606958532, 'timestamp': 1433074301.8313394}, 'theta': {'value': 2.243994752564138, 'timestamp': 1433074301.8313394}}}
Emitted Event:
{'time': 1433074301.8322024, 'uid': '6a1ae64f-b008-4d3a-8cc9-d618bcee1e88', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 97, 'data': {'sin': {'value': -0.9839295885986297, 'timestamp': 1433074301.8322024}, 'theta': {'value': 2.6927937030769655, 'timestamp': 1433074301.8322024}}}
Emitted Event:
{'time': 1433074301.8330655, 'uid': 'cbf05f6e-9a5b-4bf2-8089-a086f6f76d1c', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 98, 'data': {'sin': {'value': -0.8090169943749476, 'timestamp': 1433074301.8330655}, 'theta': {'value': 3.141592653589793, 'timestamp': 1433074301.8330655}}}
Emitted Event:
{'time': 1433074301.8339286, 'uid': '1b997621-35d1-4ac2-9b11-e82d2bc1fcd6', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 99, 'data': {'sin': {'value': -0.47386866247299886, 'timestamp': 1433074301.8339286}, 'theta': {'value': 3.5903916041026207, 'timestamp': 1433074301.8339286}}}
Emitted Event:
{'time': 1433074301.8347917, 'uid': 'e1d11f04-921c-465d-95bf-fc98c4bf0e68', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 100, 'data': {'sin': {'value': -0.04486483035051517, 'timestamp': 1433074301.8347917}, 'theta': {'value': 4.039190554615448, 'timestamp': 1433074301.8347917}}}
Emitted Event:
{'time': 1433074301.8356547, 'uid': 'f77eedd0-8725-4f08-a185-4addfd15bb9f', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 101, 'data': {'sin': {'value': 0.3930250316539234, 'timestamp': 1433074301.8356547}, 'theta': {'value': 4.487989505128276, 'timestamp': 1433074301.8356547}}}
Emitted Event:
{'time': 1433074301.8365178, 'uid': '3e7f9d67-8c81-4fc3-888f-1dce1e4cbe9e', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 102, 'data': {'sin': {'value': 0.7530714660036107, 'timestamp': 1433074301.8365178}, 'theta': {'value': 4.9367884556411035, 'timestamp': 1433074301.8365178}}}
Emitted Event:
{'time': 1433074301.8373809, 'uid': 'cd83df86-9074-4145-b68a-0a56b7cc3d2e', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 103, 'data': {'sin': {'value': 0.9639628606958532, 'timestamp': 1433074301.8373809}, 'theta': {'value': 5.385587406153931, 'timestamp': 1433074301.8373809}}}
Emitted Event:
{'time': 1433074301.838244, 'uid': '79ab0074-9e26-478b-8ba7-3e1102282112', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 104, 'data': {'sin': {'value': 0.9839295885986297, 'timestamp': 1433074301.838244}, 'theta': {'value': 5.834386356666759, 'timestamp': 1433074301.838244}}}
Emitted Event:
{'time': 1433074301.839107, 'uid': '57aac4f4-74f9-421f-9771-46f6578ce522', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 105, 'data': {'sin': {'value': 0.8090169943749477, 'timestamp': 1433074301.839107}, 'theta': {'value': 6.283185307179586, 'timestamp': 1433074301.839107}}}
collect: (flyer: flyer), (), {}
   ret: None
MSG_CACHE None
create: (None), (), {}
   ret: None
MSG_CACHE None
set: (mover: motor), ({'pos': 2},), {}
   ret: None
MSG_CACHE None
trigger: (mover: motor), (), {}
   ret: None
MSG_CACHE None
read: (mover: motor), (), {}
   ret: {'pos': {'value': 2, 'timestamp': 1433074302.021404}}
MSG_CACHE None
*** Emitted Event:
{'uid': '196d4348-ceb1-4b2f-b620-acc47c59e249', 'time': 1433074302.045489, 'descriptor': '885b1e6f-b8d9-45c8-99bf-5bae20b5897b', 'seq_num': 8, 'data': {'pos': {'value': 2, 'timestamp': 1433074302.021404}}}
save: (None), (), {}
   ret: None
MSG_CACHE None
kickoff: (flyer: flyer), (), {}
   ret: None
MSG_CACHE None
Emitted Event:
{'time': 1433074302.0620241, 'uid': 'e2cc64f9-75a8-4b9d-a65e-f80cb36c8e99', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 106, 'data': {'sin': {'value': 0.5877852522924732, 'timestamp': 1433074302.0620241}, 'theta': {'value': 0.0, 'timestamp': 1433074302.0620241}}}
Emitted Event:
{'time': 1433074302.0629013, 'uid': 'ef5ba9c6-a468-4e4b-9965-455c0b9bbc3c', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 107, 'data': {'sin': {'value': 0.17855689479863676, 'timestamp': 1433074302.0629013}, 'theta': {'value': 0.4487989505128276, 'timestamp': 1433074302.0629013}}}
Emitted Event:
{'time': 1433074302.0637784, 'uid': '53655ff6-fb40-43ee-acb5-0f8ab39d0508', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 108, 'data': {'sin': {'value': -0.266036845566675, 'timestamp': 1433074302.0637784}, 'theta': {'value': 0.8975979010256552, 'timestamp': 1433074302.0637784}}}
Emitted Event:
{'time': 1433074302.0646558, 'uid': '0649ed36-ec64-4e96-a3f0-04d2343c3425', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 109, 'data': {'sin': {'value': -0.6579387259397125, 'timestamp': 1433074302.0646558}, 'theta': {'value': 1.3463968515384828, 'timestamp': 1433074302.0646558}}}
Emitted Event:
{'time': 1433074302.0655329, 'uid': '6454d3e8-beca-4656-bab9-a82e00f7cf6e', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 110, 'data': {'sin': {'value': -0.9195277725514506, 'timestamp': 1433074302.0655329}, 'theta': {'value': 1.7951958020513104, 'timestamp': 1433074302.0655329}}}
Emitted Event:
{'time': 1433074302.0664101, 'uid': '321fa5e9-8421-45ce-981f-7eca68fa7027', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 111, 'data': {'sin': {'value': -0.9989930665413147, 'timestamp': 1433074302.0664101}, 'theta': {'value': 2.243994752564138, 'timestamp': 1433074302.0664101}}}
Emitted Event:
{'time': 1433074302.0672872, 'uid': '6cdfc25d-924d-40d9-a4ba-140c110a22d8', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 112, 'data': {'sin': {'value': -0.8805955318567381, 'timestamp': 1433074302.0672872}, 'theta': {'value': 2.6927937030769655, 'timestamp': 1433074302.0672872}}}
Emitted Event:
{'time': 1433074302.0681643, 'uid': 'b681b86f-2c91-4394-81c8-6154be630a85', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 113, 'data': {'sin': {'value': -0.5877852522924732, 'timestamp': 1433074302.0681643}, 'theta': {'value': 3.141592653589793, 'timestamp': 1433074302.0681643}}}
Emitted Event:
{'time': 1433074302.0690417, 'uid': '274ac45c-2579-40aa-b1de-73f90356b6ed', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 114, 'data': {'sin': {'value': -0.1785568947986369, 'timestamp': 1433074302.0690417}, 'theta': {'value': 3.5903916041026207, 'timestamp': 1433074302.0690417}}}
Emitted Event:
{'time': 1433074302.0699189, 'uid': '03490232-bc18-4748-b2cb-dcef0cce7848', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 115, 'data': {'sin': {'value': 0.2660368455666749, 'timestamp': 1433074302.0699189}, 'theta': {'value': 4.039190554615448, 'timestamp': 1433074302.0699189}}}
Emitted Event:
{'time': 1433074302.070796, 'uid': 'c7f8e98f-d240-4a3a-9ccd-a3af51702d1d', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 116, 'data': {'sin': {'value': 0.6579387259397125, 'timestamp': 1433074302.070796}, 'theta': {'value': 4.487989505128276, 'timestamp': 1433074302.070796}}}
Emitted Event:
{'time': 1433074302.0716732, 'uid': '4efc67b4-3eef-41a0-a536-2e72c979b670', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 117, 'data': {'sin': {'value': 0.9195277725514505, 'timestamp': 1433074302.0716732}, 'theta': {'value': 4.9367884556411035, 'timestamp': 1433074302.0716732}}}
Emitted Event:
{'time': 1433074302.0725503, 'uid': 'e704054c-6849-4566-b1c0-a36598c1b7f4', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 118, 'data': {'sin': {'value': 0.9989930665413147, 'timestamp': 1433074302.0725503}, 'theta': {'value': 5.385587406153931, 'timestamp': 1433074302.0725503}}}
Emitted Event:
{'time': 1433074302.0734277, 'uid': '40731c56-520c-41ec-ab52-a2ae906f6383', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 119, 'data': {'sin': {'value': 0.8805955318567381, 'timestamp': 1433074302.0734277}, 'theta': {'value': 5.834386356666759, 'timestamp': 1433074302.0734277}}}
Emitted Event:
{'time': 1433074302.0743048, 'uid': '0d7a0566-1f2b-4d4b-95de-103426fa7a38', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 120, 'data': {'sin': {'value': 0.5877852522924734, 'timestamp': 1433074302.0743048}, 'theta': {'value': 6.283185307179586, 'timestamp': 1433074302.0743048}}}
collect: (flyer: flyer), (), {}
   ret: None
MSG_CACHE None
create: (None), (), {}
   ret: None
MSG_CACHE None
set: (mover: motor), ({'pos': 3},), {}
   ret: None
MSG_CACHE None
trigger: (mover: motor), (), {}
   ret: None
MSG_CACHE None
read: (mover: motor), (), {}
   ret: {'pos': {'value': 3, 'timestamp': 1433074302.260167}}
MSG_CACHE None
*** Emitted Event:
{'uid': 'fe924916-2deb-4468-83b7-070b90952afb', 'time': 1433074302.282946, 'descriptor': '885b1e6f-b8d9-45c8-99bf-5bae20b5897b', 'seq_num': 9, 'data': {'pos': {'value': 3, 'timestamp': 1433074302.260167}}}
save: (None), (), {}
   ret: None
MSG_CACHE None
kickoff: (flyer: flyer), (), {}
   ret: None
MSG_CACHE None
Emitted Event:
{'time': 1433074302.299938, 'uid': '02450d08-2f2e-47aa-950c-0e738e096a8d', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 121, 'data': {'sin': {'value': 0.3090169943749475, 'timestamp': 1433074302.299938}, 'theta': {'value': 0.0, 'timestamp': 1433074302.299938}}}
Emitted Event:
{'time': 1433074302.3006752, 'uid': 'abf996c9-c439-4bfd-8eb8-6ef24a20b823', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 122, 'data': {'sin': {'value': -0.13423326581765535, 'timestamp': 1433074302.3006752}, 'theta': {'value': 0.4487989505128276, 'timestamp': 1433074302.3006752}}}
Emitted Event:
{'time': 1433074302.3014123, 'uid': 'ab97212b-cb23-4ac3-8236-54354d6c5ade', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 123, 'data': {'sin': {'value': -0.5508969814521024, 'timestamp': 1433074302.3014123}, 'theta': {'value': 0.8975979010256552, 'timestamp': 1433074302.3014123}}}
Emitted Event:
{'time': 1433074302.3021495, 'uid': '81824cfe-5ca8-401a-8947-fb28485a32c0', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 124, 'data': {'sin': {'value': -0.858448793601866, 'timestamp': 1433074302.3021495}, 'theta': {'value': 1.3463968515384828, 'timestamp': 1433074302.3021495}}}
Emitted Event:
{'time': 1433074302.3028867, 'uid': 'e02cb73b-bdc2-435a-b08f-deb8c9b1da87', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 125, 'data': {'sin': {'value': -0.9959742939952391, 'timestamp': 1433074302.3028867}, 'theta': {'value': 1.7951958020513104, 'timestamp': 1433074302.3028867}}}
Emitted Event:
{'time': 1433074302.3036239, 'uid': '9972dc0b-4bf5-4318-829a-acc9a8861e7e', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 126, 'data': {'sin': {'value': -0.9362348706397373, 'timestamp': 1433074302.3036239}, 'theta': {'value': 2.243994752564138, 'timestamp': 1433074302.3036239}}}
Emitted Event:
{'time': 1433074302.3043611, 'uid': '2dfc5bcc-1b1a-494a-9fad-45b5fd09462a', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 127, 'data': {'sin': {'value': -0.6910626489868648, 'timestamp': 1433074302.3043611}, 'theta': {'value': 2.6927937030769655, 'timestamp': 1433074302.3043611}}}
Emitted Event:
{'time': 1433074302.3050983, 'uid': '03226441-3274-49b6-8b5c-3b2866bf2ec8', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 128, 'data': {'sin': {'value': -0.3090169943749476, 'timestamp': 1433074302.3050983}, 'theta': {'value': 3.141592653589793, 'timestamp': 1433074302.3050983}}}
Emitted Event:
{'time': 1433074302.3058357, 'uid': '51e50a9e-3dd3-41a0-86f0-a33ba905179f', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 129, 'data': {'sin': {'value': 0.1342332658176552, 'timestamp': 1433074302.3058357}, 'theta': {'value': 3.5903916041026207, 'timestamp': 1433074302.3058357}}}
Emitted Event:
{'time': 1433074302.3065729, 'uid': '0acb63d0-574f-4a3b-bdf0-c7c29fc3dd0f', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 130, 'data': {'sin': {'value': 0.5508969814521023, 'timestamp': 1433074302.3065729}, 'theta': {'value': 4.039190554615448, 'timestamp': 1433074302.3065729}}}
Emitted Event:
{'time': 1433074302.3073101, 'uid': 'a9837724-1331-406a-8e6f-45eb29b5c36c', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 131, 'data': {'sin': {'value': 0.858448793601866, 'timestamp': 1433074302.3073101}, 'theta': {'value': 4.487989505128276, 'timestamp': 1433074302.3073101}}}
Emitted Event:
{'time': 1433074302.3080473, 'uid': '629f816b-2ea8-4460-b62e-de58a7f978e4', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 132, 'data': {'sin': {'value': 0.995974293995239, 'timestamp': 1433074302.3080473}, 'theta': {'value': 4.9367884556411035, 'timestamp': 1433074302.3080473}}}
Emitted Event:
{'time': 1433074302.3087845, 'uid': 'e31cfdfd-730f-44cc-9ef0-0e343a6e34ee', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 133, 'data': {'sin': {'value': 0.9362348706397373, 'timestamp': 1433074302.3087845}, 'theta': {'value': 5.385587406153931, 'timestamp': 1433074302.3087845}}}
Emitted Event:
{'time': 1433074302.3095217, 'uid': '93b41173-d840-42a5-94d3-116720465640', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 134, 'data': {'sin': {'value': 0.6910626489868649, 'timestamp': 1433074302.3095217}, 'theta': {'value': 5.834386356666759, 'timestamp': 1433074302.3095217}}}
Emitted Event:
{'time': 1433074302.3102589, 'uid': 'e7cd3eba-ec0d-4bc6-bdc0-284cf69afeb2', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 135, 'data': {'sin': {'value': 0.3090169943749478, 'timestamp': 1433074302.3102589}, 'theta': {'value': 6.283185307179586, 'timestamp': 1433074302.3102589}}}
collect: (flyer: flyer), (), {}
   ret: None
MSG_CACHE None
create: (None), (), {}
   ret: None
MSG_CACHE None
set: (mover: motor), ({'pos': 4},), {}
   ret: None
MSG_CACHE None
trigger: (mover: motor), (), {}
   ret: None
MSG_CACHE None
read: (mover: motor), (), {}
   ret: {'pos': {'value': 4, 'timestamp': 1433074302.49277}}
MSG_CACHE None
*** Emitted Event:
{'uid': '659ca984-ef73-498e-a850-ec8e0204a88a', 'time': 1433074302.518136, 'descriptor': '885b1e6f-b8d9-45c8-99bf-5bae20b5897b', 'seq_num': 10, 'data': {'pos': {'value': 4, 'timestamp': 1433074302.49277}}}
save: (None), (), {}
   ret: None
MSG_CACHE None
kickoff: (flyer: flyer), (), {}
   ret: None
MSG_CACHE None
Emitted Event:
{'time': 1433074302.534898, 'uid': '0ee5ea01-4dff-42d0-ba52-fc8e46d9089c', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 136, 'data': {'sin': {'value': 1.2246467991473532e-16, 'timestamp': 1433074302.534898}, 'theta': {'value': 0.0, 'timestamp': 1433074302.534898}}}
Emitted Event:
{'time': 1433074302.5357533, 'uid': '202bc31c-54c8-4573-9502-92bfbda1cc76', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 137, 'data': {'sin': {'value': -0.433883739117558, 'timestamp': 1433074302.5357533}, 'theta': {'value': 0.4487989505128276, 'timestamp': 1433074302.5357533}}}
Emitted Event:
{'time': 1433074302.5366087, 'uid': '9f44b5ad-63a3-4d13-994c-e627f075b555', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 138, 'data': {'sin': {'value': -0.7818314824680297, 'timestamp': 1433074302.5366087}, 'theta': {'value': 0.8975979010256552, 'timestamp': 1433074302.5366087}}}
Emitted Event:
{'time': 1433074302.5374639, 'uid': '17e36b2d-ec7b-4ecc-8917-51702ec34b82', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 139, 'data': {'sin': {'value': -0.9749279121818235, 'timestamp': 1433074302.5374639}, 'theta': {'value': 1.3463968515384828, 'timestamp': 1433074302.5374639}}}
Emitted Event:
{'time': 1433074302.5383191, 'uid': '7c785645-c029-4b32-b78b-87dfaa45ae0d', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 140, 'data': {'sin': {'value': -0.9749279121818236, 'timestamp': 1433074302.5383191}, 'theta': {'value': 1.7951958020513104, 'timestamp': 1433074302.5383191}}}
Emitted Event:
{'time': 1433074302.5391743, 'uid': '10aaec3b-69c2-4e14-bc1c-2a420903e869', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 141, 'data': {'sin': {'value': -0.7818314824680299, 'timestamp': 1433074302.5391743}, 'theta': {'value': 2.243994752564138, 'timestamp': 1433074302.5391743}}}
Emitted Event:
{'time': 1433074302.5400298, 'uid': '0a3638b2-5eaf-4ab2-82dc-d3ec3e8409b2', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 142, 'data': {'sin': {'value': -0.4338837391175583, 'timestamp': 1433074302.5400298}, 'theta': {'value': 2.6927937030769655, 'timestamp': 1433074302.5400298}}}
Emitted Event:
{'time': 1433074302.540885, 'uid': '50a74f77-be10-4d93-8f32-6c404c4578a7', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 143, 'data': {'sin': {'value': -2.4492935982947064e-16, 'timestamp': 1433074302.540885}, 'theta': {'value': 3.141592653589793, 'timestamp': 1433074302.540885}}}
Emitted Event:
{'time': 1433074302.5417402, 'uid': '333333ec-ff9d-4074-bc4d-9e0036562857', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 144, 'data': {'sin': {'value': 0.4338837391175579, 'timestamp': 1433074302.5417402}, 'theta': {'value': 3.5903916041026207, 'timestamp': 1433074302.5417402}}}
Emitted Event:
{'time': 1433074302.5425954, 'uid': '896731ff-fa01-4725-8f69-7e6965f037e9', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 145, 'data': {'sin': {'value': 0.7818314824680296, 'timestamp': 1433074302.5425954}, 'theta': {'value': 4.039190554615448, 'timestamp': 1433074302.5425954}}}
Emitted Event:
{'time': 1433074302.5434508, 'uid': 'ee20d864-2882-4e82-8494-86c7d3642289', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 146, 'data': {'sin': {'value': 0.9749279121818235, 'timestamp': 1433074302.5434508}, 'theta': {'value': 4.487989505128276, 'timestamp': 1433074302.5434508}}}
Emitted Event:
{'time': 1433074302.544306, 'uid': 'eb433f6d-2d51-4d7a-becc-ceecfac0acfb', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 147, 'data': {'sin': {'value': 0.9749279121818237, 'timestamp': 1433074302.544306}, 'theta': {'value': 4.9367884556411035, 'timestamp': 1433074302.544306}}}
Emitted Event:
{'time': 1433074302.5451612, 'uid': '48a4edfa-e958-4f3f-938f-99f5e2cd2bd0', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 148, 'data': {'sin': {'value': 0.78183148246803, 'timestamp': 1433074302.5451612}, 'theta': {'value': 5.385587406153931, 'timestamp': 1433074302.5451612}}}
Emitted Event:
{'time': 1433074302.5460165, 'uid': 'd07f0dec-decf-49e9-8faa-2d85a76127ad', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 149, 'data': {'sin': {'value': 0.43388373911755845, 'timestamp': 1433074302.5460165}, 'theta': {'value': 5.834386356666759, 'timestamp': 1433074302.5460165}}}
Emitted Event:
{'time': 1433074302.5468719, 'uid': '63e363d3-ac4c-45a7-b9b5-0597b95ff26e', 'descriptor': '1f3835d1-ff74-4caa-ab44-9637929fd850', 'seq_num': 150, 'data': {'sin': {'value': 3.6739403974420594e-16, 'timestamp': 1433074302.5468719}, 'theta': {'value': 6.283185307179586, 'timestamp': 1433074302.5468719}}}
collect: (flyer: flyer), (), {}
   ret: None
MSG_CACHE None
*** Emitted RunStop:
{'time': 1433074302.593774, 'run_start': '86012b98-c6f5-4f2c-8f4d-3dfd427232ce', 'exit_status': 'success', 'reason': ''}

In [35]:
header = db[-1]
header


Out[35]:
beamline_config
config_params
time1433074300.259856
time_as_datetime2015-05-31 08:11:40.259855 (6 seconds ago)
uid2513a0b4-d6b9-47f6-ab46-22b8c0411a63
beamline_idtest
event_descriptors
data_keys
sin
dtypenumber
externalNone
shape
sourceflyer
theta
dtypenumber
externalNone
shape
sourceflyer
run_start86012b98-c6f5-4f2c-8f4d-3dfd427232ce
time1433074300.456389
time_as_datetime2015-05-31 08:11:40.456388 (5 seconds ago)
uid1f3835d1-ff74-4caa-ab44-9637929fd850
data_keys
pos
dtypenumber
externalNone
shape
sourcemotor
run_start86012b98-c6f5-4f2c-8f4d-3dfd427232ce
time1433074300.425076
time_as_datetime2015-05-31 08:11:40.425076 (5 seconds ago)
uid885b1e6f-b8d9-45c8-99bf-5bae20b5897b
exit_reason
exit_statussuccess
group
ownertester
project
run_start_uid86012b98-c6f5-4f2c-8f4d-3dfd427232ce
run_stop_uidb7f9aa59-184b-4bd1-abc9-9d2ff3cf472f
sample
scan_id123
start_datetime2015-05-31 08:11:40.259758 (6 seconds ago)
start_time1433074300.259759
stop_datetime2015-05-31 08:11:42.593774 (3 seconds ago)
stop_time1433074302.593774

In [36]:
mux = dm.from_events(db.fetch_events(header))

In [37]:
res = mux.bin_on('sin', interpolation={'pos':'nearest'})

In [38]:
%matplotlib notebook
import matplotlib.pyplot as plt

fig, ax = plt.subplots()



In [39]:
sc = ax.scatter(res.theta.val.values, res.pos.val.values, c=res.sin.values, s=150, cmap='RdBu')
cb = fig.colorbar(sc)
cb.set_label('I [arb]')
ax.set_xlabel(r'$\theta$ [rad]')
ax.set_ylabel('pos [arb]')
ax.set_title('async flyscan + step scan')
fig.canvas.draw()

In [40]:
res


Out[40]:
pos sin theta time
val count val val val count std max min
bin
0 -5 1 3.090170e-01 0.000000 2015-05-31 12:11:40.436950 2 NaT 2015-05-31 12:11:40.444899 2015-05-31 12:11:40.429001
1 -5 0 6.910626e-01 0.448799 2015-05-31 12:11:40.445948 1 NaT 2015-05-31 12:11:40.445948 2015-05-31 12:11:40.445948
2 -5 0 9.362349e-01 0.897598 2015-05-31 12:11:40.446996 1 NaT 2015-05-31 12:11:40.446996 2015-05-31 12:11:40.446996
3 -5 0 9.959743e-01 1.346397 2015-05-31 12:11:40.448045 1 NaT 2015-05-31 12:11:40.448045 2015-05-31 12:11:40.448045
4 -5 0 8.584488e-01 1.795196 2015-05-31 12:11:40.449094 1 NaT 2015-05-31 12:11:40.449094 2015-05-31 12:11:40.449094
5 -5 0 5.508970e-01 2.243995 2015-05-31 12:11:40.450143 1 NaT 2015-05-31 12:11:40.450143 2015-05-31 12:11:40.450143
6 -5 0 1.342333e-01 2.692794 2015-05-31 12:11:40.451191 1 NaT 2015-05-31 12:11:40.451191 2015-05-31 12:11:40.451191
7 -5 0 -3.090170e-01 3.141593 2015-05-31 12:11:40.452240 1 NaT 2015-05-31 12:11:40.452240 2015-05-31 12:11:40.452240
8 -5 0 -6.910626e-01 3.590392 2015-05-31 12:11:40.453289 1 NaT 2015-05-31 12:11:40.453289 2015-05-31 12:11:40.453289
9 -5 0 -9.362349e-01 4.039191 2015-05-31 12:11:40.454338 1 NaT 2015-05-31 12:11:40.454338 2015-05-31 12:11:40.454338
10 -5 0 -9.959743e-01 4.487990 2015-05-31 12:11:40.455386 1 NaT 2015-05-31 12:11:40.455386 2015-05-31 12:11:40.455386
11 -5 0 -8.584488e-01 4.936788 2015-05-31 12:11:40.456435 1 NaT 2015-05-31 12:11:40.456435 2015-05-31 12:11:40.456435
12 -5 0 -5.508970e-01 5.385587 2015-05-31 12:11:40.457484 1 NaT 2015-05-31 12:11:40.457484 2015-05-31 12:11:40.457484
13 -5 0 -1.342333e-01 5.834386 2015-05-31 12:11:40.458533 1 NaT 2015-05-31 12:11:40.458533 2015-05-31 12:11:40.458533
14 -5 0 3.090170e-01 6.283185 2015-05-31 12:11:40.459581 1 NaT 2015-05-31 12:11:40.459581 2015-05-31 12:11:40.459581
15 -4 1 5.877853e-01 0.000000 2015-05-31 12:11:40.667560 2 NaT 2015-05-31 12:11:40.675251 2015-05-31 12:11:40.659869
16 -4 0 8.805955e-01 0.448799 2015-05-31 12:11:40.676091 1 NaT 2015-05-31 12:11:40.676091 2015-05-31 12:11:40.676091
17 -4 0 9.989931e-01 0.897598 2015-05-31 12:11:40.676932 1 NaT 2015-05-31 12:11:40.676932 2015-05-31 12:11:40.676932
18 -4 0 9.195278e-01 1.346397 2015-05-31 12:11:40.677773 1 NaT 2015-05-31 12:11:40.677773 2015-05-31 12:11:40.677773
19 -4 0 6.579387e-01 1.795196 2015-05-31 12:11:40.678613 1 NaT 2015-05-31 12:11:40.678613 2015-05-31 12:11:40.678613
20 -4 0 2.660368e-01 2.243995 2015-05-31 12:11:40.679454 1 NaT 2015-05-31 12:11:40.679454 2015-05-31 12:11:40.679454
21 -4 0 -1.785569e-01 2.692794 2015-05-31 12:11:40.680294 1 NaT 2015-05-31 12:11:40.680294 2015-05-31 12:11:40.680294
22 -4 0 -5.877853e-01 3.141593 2015-05-31 12:11:40.681135 1 NaT 2015-05-31 12:11:40.681135 2015-05-31 12:11:40.681135
23 -4 0 -8.805955e-01 3.590392 2015-05-31 12:11:40.681975 1 NaT 2015-05-31 12:11:40.681975 2015-05-31 12:11:40.681975
24 -4 0 -9.989931e-01 4.039191 2015-05-31 12:11:40.682816 1 NaT 2015-05-31 12:11:40.682816 2015-05-31 12:11:40.682816
25 -4 0 -9.195278e-01 4.487990 2015-05-31 12:11:40.683656 1 NaT 2015-05-31 12:11:40.683656 2015-05-31 12:11:40.683656
26 -4 0 -6.579387e-01 4.936788 2015-05-31 12:11:40.684497 1 NaT 2015-05-31 12:11:40.684497 2015-05-31 12:11:40.684497
27 -4 0 -2.660368e-01 5.385587 2015-05-31 12:11:40.685338 1 NaT 2015-05-31 12:11:40.685338 2015-05-31 12:11:40.685338
28 -4 0 1.785569e-01 5.834386 2015-05-31 12:11:40.686178 1 NaT 2015-05-31 12:11:40.686178 2015-05-31 12:11:40.686178
29 -4 0 5.877853e-01 6.283185 2015-05-31 12:11:40.687019 1 NaT 2015-05-31 12:11:40.687019 2015-05-31 12:11:40.687019
... ... ... ... ... ... ... ... ... ...
120 3 1 3.090170e-01 0.000000 2015-05-31 12:11:42.291442 2 00:00:22.627417 2015-05-31 12:11:42.299938 2015-05-31 12:11:42.282946
121 3 0 -1.342333e-01 0.448799 2015-05-31 12:11:42.300675 1 NaT 2015-05-31 12:11:42.300675 2015-05-31 12:11:42.300675
122 3 0 -5.508970e-01 0.897598 2015-05-31 12:11:42.301412 1 NaT 2015-05-31 12:11:42.301412 2015-05-31 12:11:42.301412
123 3 0 -8.584488e-01 1.346397 2015-05-31 12:11:42.302150 1 NaT 2015-05-31 12:11:42.302150 2015-05-31 12:11:42.302150
124 3 0 -9.959743e-01 1.795196 2015-05-31 12:11:42.302887 1 NaT 2015-05-31 12:11:42.302887 2015-05-31 12:11:42.302887
125 3 0 -9.362349e-01 2.243995 2015-05-31 12:11:42.303624 1 NaT 2015-05-31 12:11:42.303624 2015-05-31 12:11:42.303624
126 3 0 -6.910626e-01 2.692794 2015-05-31 12:11:42.304361 1 NaT 2015-05-31 12:11:42.304361 2015-05-31 12:11:42.304361
127 3 0 -3.090170e-01 3.141593 2015-05-31 12:11:42.305098 1 NaT 2015-05-31 12:11:42.305098 2015-05-31 12:11:42.305098
128 3 0 1.342333e-01 3.590392 2015-05-31 12:11:42.305836 1 NaT 2015-05-31 12:11:42.305836 2015-05-31 12:11:42.305836
129 3 0 5.508970e-01 4.039191 2015-05-31 12:11:42.306573 1 NaT 2015-05-31 12:11:42.306573 2015-05-31 12:11:42.306573
130 3 0 8.584488e-01 4.487990 2015-05-31 12:11:42.307310 1 NaT 2015-05-31 12:11:42.307310 2015-05-31 12:11:42.307310
131 3 0 9.959743e-01 4.936788 2015-05-31 12:11:42.308047 1 NaT 2015-05-31 12:11:42.308047 2015-05-31 12:11:42.308047
132 3 0 9.362349e-01 5.385587 2015-05-31 12:11:42.308784 1 NaT 2015-05-31 12:11:42.308784 2015-05-31 12:11:42.308784
133 3 0 6.910626e-01 5.834386 2015-05-31 12:11:42.309522 1 NaT 2015-05-31 12:11:42.309522 2015-05-31 12:11:42.309522
134 3 0 3.090170e-01 6.283185 2015-05-31 12:11:42.310259 1 NaT 2015-05-31 12:11:42.310259 2015-05-31 12:11:42.310259
135 4 1 1.224647e-16 0.000000 2015-05-31 12:11:42.526517 2 00:00:22.627417 2015-05-31 12:11:42.534898 2015-05-31 12:11:42.518136
136 NaN 0 -4.338837e-01 0.448799 2015-05-31 12:11:42.535753 1 NaT 2015-05-31 12:11:42.535753 2015-05-31 12:11:42.535753
137 NaN 0 -7.818315e-01 0.897598 2015-05-31 12:11:42.536609 1 NaT 2015-05-31 12:11:42.536609 2015-05-31 12:11:42.536609
138 NaN 0 -9.749279e-01 1.346397 2015-05-31 12:11:42.537464 1 NaT 2015-05-31 12:11:42.537464 2015-05-31 12:11:42.537464
139 NaN 0 -9.749279e-01 1.795196 2015-05-31 12:11:42.538319 1 NaT 2015-05-31 12:11:42.538319 2015-05-31 12:11:42.538319
140 NaN 0 -7.818315e-01 2.243995 2015-05-31 12:11:42.539174 1 NaT 2015-05-31 12:11:42.539174 2015-05-31 12:11:42.539174
141 NaN 0 -4.338837e-01 2.692794 2015-05-31 12:11:42.540030 1 NaT 2015-05-31 12:11:42.540030 2015-05-31 12:11:42.540030
142 NaN 0 -2.449294e-16 3.141593 2015-05-31 12:11:42.540885 1 NaT 2015-05-31 12:11:42.540885 2015-05-31 12:11:42.540885
143 NaN 0 4.338837e-01 3.590392 2015-05-31 12:11:42.541740 1 NaT 2015-05-31 12:11:42.541740 2015-05-31 12:11:42.541740
144 NaN 0 7.818315e-01 4.039191 2015-05-31 12:11:42.542595 1 NaT 2015-05-31 12:11:42.542595 2015-05-31 12:11:42.542595
145 NaN 0 9.749279e-01 4.487990 2015-05-31 12:11:42.543451 1 NaT 2015-05-31 12:11:42.543451 2015-05-31 12:11:42.543451
146 NaN 0 9.749279e-01 4.936788 2015-05-31 12:11:42.544306 1 NaT 2015-05-31 12:11:42.544306 2015-05-31 12:11:42.544306
147 NaN 0 7.818315e-01 5.385587 2015-05-31 12:11:42.545161 1 NaT 2015-05-31 12:11:42.545161 2015-05-31 12:11:42.545161
148 NaN 0 4.338837e-01 5.834386 2015-05-31 12:11:42.546016 1 NaT 2015-05-31 12:11:42.546016 2015-05-31 12:11:42.546016
149 NaN 0 3.673940e-16 6.283185 2015-05-31 12:11:42.546872 1 NaT 2015-05-31 12:11:42.546872 2015-05-31 12:11:42.546872

150 rows × 9 columns


In [ ]: