NSLS-II / Bug-Reports

Unified issue-tracker for bugs in the data acquisition, management, and analysis software at NSLS-II
BSD 3-Clause "New" or "Revised" License
2 stars 5 forks source link

Problems with detectors not being subscribed correctly #169

Closed bisogni closed 7 years ago

bisogni commented 7 years ago

Up to yesterday no problem in scanning, now instead


In [17]: gs.DETS.pop()
Out[17]: SIXQuadEM(prefix='XF:02IDC-BI{EM:7}EM180:', name='qem07', read_attrs=['current1.mean_value', 'current2.mean_value'], configuration_attrs=['integration_time', 'averaging_time', 'em_range', 'num_averaged', 'values_per_read'])

In [18]: gs.DETS.append(qem06)

In [19]: gs.DETS
Out[19]: [SIXQuadEM(prefix='XF:02IDC-BI{EM:6}EM180:', name='qem06', read_attrs=['current1.mean_value', 'current2.mean_value'], configuration_attrs=['integration_time', 'averaging_time', 'em_range', 'num_averaged', 'values_per_read'])]

In [20]: RE(ct())
Subscription type not set and object qem08 of class SIXQuadEM has no default subscription set
Subscription type not set and object qem07 of class SIXQuadEM has no default subscription set
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-20-56fcb0ec22e7> in <module>()
----> 1 RE(ct())

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/run_engine.py in __call__(self, plan, subs, raise_if_interrupted, **metadata_kw)
    596                     # it (unless it is a canceled error)
    597                     if exc is not None:
--> 598                         raise exc
    599 
    600             if raise_if_interrupted and self._interrupted:

/opt/conda_envs/collection-17Q1.0/lib/python3.5/asyncio/tasks.py in _step(***failed resolving arguments***)
    237                 # We use the `send` method directly, because coroutines
    238                 # don't have `__iter__` and `__next__` methods.
--> 239                 result = coro.send(None)
    240             else:
    241                 result = coro.throw(exc)

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/run_engine.py in _run(self)
   1002             self.log.error("Run aborted")
   1003             self.log.error("%r", err)
-> 1004             raise err
   1005         finally:
   1006             # Some done_callbacks may still be alive in other threads.

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/run_engine.py in _run(self)
    900                         resp = self._response_stack.pop()
    901                         try:
--> 902                             msg = self._plan_stack[-1].send(resp)
    903                         # We have exhausted the top generator
    904                         except StopIteration:

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/spec_api.py in ct(num, delay, time, md)
    270     inner = inner_spec_decorator('ct', time, [], num=num)(count)
    271 
--> 272     return (yield from inner(gs.DETS, num, delay, md=md))
    273 gs.SUB_FACTORIES['ct'] = [setup_livetable, setup_ct_plot]
    274 

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in dec_inner(*inner_args, **inner_kwargs)
     45                 plan = gen_func(*inner_args, **inner_kwargs)
     46                 plan = wrapper(plan, *args, **kwargs)
---> 47                 return (yield from plan)
     48             return dec_inner
     49         return dec

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in subs_wrapper(plan, subs)
    928 
    929     return (yield from finalize_wrapper(_inner_plan(),
--> 930                                         _unsubscribe()))
    931 
    932 

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in finalize_wrapper(plan, final_plan, pause_for_debug)
   1023     cleanup = True
   1024     try:
-> 1025         ret = yield from plan
   1026     except GeneratorExit:
   1027         cleanup = False

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in _inner_plan()
    925     def _inner_plan():
    926         yield from _subscribe()
--> 927         return (yield from plan)
    928 
    929     return (yield from finalize_wrapper(_inner_plan(),

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in dec_inner(*inner_args, **inner_kwargs)
     45                 plan = gen_func(*inner_args, **inner_kwargs)
     46                 plan = wrapper(plan, *args, **kwargs)
---> 47                 return (yield from plan)
     48             return dec_inner
     49         return dec

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in configure_count_time_wrapper(plan, time)
   1664     if time is None:
   1665         # no-op
-> 1666         return (yield from plan)
   1667     else:
   1668         return (yield from finalize_wrapper(plan_mutator(plan, insert_set),

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in dec_inner(*inner_args, **inner_kwargs)
     45                 plan = gen_func(*inner_args, **inner_kwargs)
     46                 plan = wrapper(plan, *args, **kwargs)
---> 47                 return (yield from plan)
     48             return dec_inner
     49         return dec

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in fly_during_wrapper(plan, flyers)
   1381     plan1 = plan_mutator(plan, insert_after_open)
   1382     plan2 = plan_mutator(plan1, insert_before_close)
-> 1383     return (yield from plan2)
   1384 
   1385 

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in plan_mutator(plan, msg_proc)
    188                     continue
    189                 else:
--> 190                     raise ex
    191         # if inserting / mutating, put new generator on the stack
    192         # and replace the current msg with the first element from the

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in plan_mutator(plan, msg_proc)
    141             ret = result_stack.pop()
    142             try:
--> 143                 msg = plan_stack[-1].send(ret)
    144             except StopIteration as e:
    145                 # discard the exhausted generator

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in plan_mutator(plan, msg_proc)
    188                     continue
    189                 else:
--> 190                     raise ex
    191         # if inserting / mutating, put new generator on the stack
    192         # and replace the current msg with the first element from the

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in plan_mutator(plan, msg_proc)
    141             ret = result_stack.pop()
    142             try:
--> 143                 msg = plan_stack[-1].send(ret)
    144             except StopIteration as e:
    145                 # discard the exhausted generator

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in dec_inner(*inner_args, **inner_kwargs)
     45                 plan = gen_func(*inner_args, **inner_kwargs)
     46                 plan = wrapper(plan, *args, **kwargs)
---> 47                 return (yield from plan)
     48             return dec_inner
     49         return dec

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in monitor_during_wrapper(plan, signals)
   1323     plan1 = plan_mutator(plan, insert_after_open)
   1324     plan2 = plan_mutator(plan1, insert_before_close)
-> 1325     return (yield from plan2)
   1326 
   1327 

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in plan_mutator(plan, msg_proc)
    188                     continue
    189                 else:
--> 190                     raise ex
    191         # if inserting / mutating, put new generator on the stack
    192         # and replace the current msg with the first element from the

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in plan_mutator(plan, msg_proc)
    141             ret = result_stack.pop()
    142             try:
--> 143                 msg = plan_stack[-1].send(ret)
    144             except StopIteration as e:
    145                 # discard the exhausted generator

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in plan_mutator(plan, msg_proc)
    188                     continue
    189                 else:
--> 190                     raise ex
    191         # if inserting / mutating, put new generator on the stack
    192         # and replace the current msg with the first element from the

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in plan_mutator(plan, msg_proc)
    141             ret = result_stack.pop()
    142             try:
--> 143                 msg = plan_stack[-1].send(ret)
    144             except StopIteration as e:
    145                 # discard the exhausted generator

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in dec_inner(*inner_args, **inner_kwargs)
     45                 plan = gen_func(*inner_args, **inner_kwargs)
     46                 plan = wrapper(plan, *args, **kwargs)
---> 47                 return (yield from plan)
     48             return dec_inner
     49         return dec

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in baseline_wrapper(plan, devices, name)
   1713         return (yield from plan)
   1714     else:
-> 1715         return (yield from plan_mutator(plan, insert_baseline))
   1716 
   1717 

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in plan_mutator(plan, msg_proc)
    188                     continue
    189                 else:
--> 190                     raise ex
    191         # if inserting / mutating, put new generator on the stack
    192         # and replace the current msg with the first element from the

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in plan_mutator(plan, msg_proc)
    141             ret = result_stack.pop()
    142             try:
--> 143                 msg = plan_stack[-1].send(ret)
    144             except StopIteration as e:
    145                 # discard the exhausted generator

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/spec_api.py in inner_spec_plan(md, *args, **kwargs)
    243                    gs.MD_TIME_KEY: time}
    244             _md.update(md or {})
--> 245             return (yield from func(*args, md=_md, **kwargs))
    246         return inner_spec_plan
    247     return outer

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in count(detectors, num, delay, md)
   1992         return (yield from infinite_plan())
   1993     else:
-> 1994         return (yield from finite_plan())
   1995 
   1996 

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in dec_inner(*inner_args, **inner_kwargs)
     45                 plan = gen_func(*inner_args, **inner_kwargs)
     46                 plan = wrapper(plan, *args, **kwargs)
---> 47                 return (yield from plan)
     48             return dec_inner
     49         return dec

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in stage_wrapper(plan, devices)
   1508         return (yield from plan)
   1509 
-> 1510     return (yield from finalize_wrapper(inner(), unstage_devices()))
   1511 
   1512 

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in finalize_wrapper(plan, final_plan, pause_for_debug)
   1023     cleanup = True
   1024     try:
-> 1025         ret = yield from plan
   1026     except GeneratorExit:
   1027         cleanup = False

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in inner()
   1506     def inner():
   1507         yield from stage_devices()
-> 1508         return (yield from plan)
   1509 
   1510     return (yield from finalize_wrapper(inner(), unstage_devices()))

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in dec_inner(*inner_args, **inner_kwargs)
     45                 plan = gen_func(*inner_args, **inner_kwargs)
     46                 plan = wrapper(plan, *args, **kwargs)
---> 47                 return (yield from plan)
     48             return dec_inner
     49         return dec

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in run_wrapper(plan, md)
    870         metadata to be passed into the 'open_run' message
    871     """
--> 872     yield from open_run(md)
    873     yield from plan
    874     rs_uid = yield from close_run()

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in open_run(md)
    949     :func:`bluesky.plans.close_run`
    950     """
--> 951     return (yield Msg('open_run', **(md or {})))
    952 
    953 

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in plan_mutator(plan, msg_proc)
    125             # if we have a stashed exception, pass it along
    126             try:
--> 127                 msg = plan_stack[-1].throw(exception)
    128             except Exception as e:
    129                 # if we catch an exception,

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in pre_baseline()
   1695         if msg.command == 'open_run':
   1696             def pre_baseline():
-> 1697                 ret = yield msg
   1698                 yield from trigger_and_read(devices, name=name)
   1699                 return ret

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in plan_mutator(plan, msg_proc)
    213         try:
    214             # yield out the 'current message' and collect the return
--> 215             inner_ret = yield msg
    216         except GeneratorExit:
    217             # special case GeneratorExit.  We must clean up all of our plans

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in plan_mutator(plan, msg_proc)
    125             # if we have a stashed exception, pass it along
    126             try:
--> 127                 msg = plan_stack[-1].throw(exception)
    128             except Exception as e:
    129                 # if we catch an exception,

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in new_gen()
   1306         if msg.command == 'open_run':
   1307             def new_gen():
-> 1308                 yield from ensure_generator(monitor_msgs)
   1309             return single_gen(msg), new_gen()
   1310         else:

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/utils.py in <genexpr>(.0)
     98     if not isinstance(gen, PLAN_TYPES):
     99         # If plan does not support .send, we must wrap it in a generator.
--> 100         gen = (msg for msg in gen)
    101 
    102     return gen

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in plan_mutator(plan, msg_proc)
    213         try:
    214             # yield out the 'current message' and collect the return
--> 215             inner_ret = yield msg
    216         except GeneratorExit:
    217             # special case GeneratorExit.  We must clean up all of our plans

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in plan_mutator(plan, msg_proc)
    213         try:
    214             # yield out the 'current message' and collect the return
--> 215             inner_ret = yield msg
    216         except GeneratorExit:
    217             # special case GeneratorExit.  We must clean up all of our plans

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in plan_mutator(plan, msg_proc)
    213         try:
    214             # yield out the 'current message' and collect the return
--> 215             inner_ret = yield msg
    216         except GeneratorExit:
    217             # special case GeneratorExit.  We must clean up all of our plans

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in plan_mutator(plan, msg_proc)
    213         try:
    214             # yield out the 'current message' and collect the return
--> 215             inner_ret = yield msg
    216         except GeneratorExit:
    217             # special case GeneratorExit.  We must clean up all of our plans

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/run_engine.py in _run(self)
    951                         # exceptions (coming in via throw) can be
    952                         # raised
--> 953                         response = yield from coro(msg)
    954                     # special case `CancelledError` and let the outer
    955                     # exception block deal with it.

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/run_engine.py in _monitor(self, msg)
   1357 
   1358         self._monitor_params[obj] = emit_event, kwargs
-> 1359         obj.subscribe(emit_event, **kwargs)
   1360         yield from self.emit(DocumentNames.descriptor, desc_doc)
   1361         yield from self._reset_checkpoint_state_coro()

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/ophyd/ophydobj.py in subscribe(self, cb, event_type, run)
    145             raise ValueError('Subscription type not set and object {} of class'
    146                              ' {} has no default subscription set'
--> 147                              ''.format(self.name, self.__class__.__name__))
    148 
    149         try:

ValueError: Subscription type not set and object qem06 of class SIXQuadEM has no default subscription set

In [21]: gs.DETS.pop()
Out[21]: SIXQuadEM(prefix='XF:02IDC-BI{EM:6}EM180:', name='qem06', read_attrs=['current1.mean_value', 'current2.mean_value'], configuration_attrs=['integration_time', 'averaging_time', 'em_range', 'num_averaged', 'values_per_read'])

In [22]: gs.DETS.append(gc_cam)
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-22-7826ada4eec4> in <module>()
----> 1 gs.DETS.append(gc_cam)

NameError: name 'gc_cam' is not defined

In [23]: gs.DETS.append(gc_diag_cam)

In [24]: gs.DETS
Out[24]: [StandardProsilica(prefix='XF:02IDC-BI{Mir:4-Cam:18_1}', name='gc_diag_cam', read_attrs=['stats1', 'stats2', 'stats3', 'stats4', 'stats5'], configuration_attrs=['cam.acquire_time'])]

In [25]: RE(ct())
Subscription type not set and object qem08 of class SIXQuadEM has no default subscription set
Subscription type not set and object qem07 of class SIXQuadEM has no default subscription set
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-25-56fcb0ec22e7> in <module>()
----> 1 RE(ct())

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/run_engine.py in __call__(self, plan, subs, raise_if_interrupted, **metadata_kw)
    596                     # it (unless it is a canceled error)
    597                     if exc is not None:
--> 598                         raise exc
    599 
    600             if raise_if_interrupted and self._interrupted:

/opt/conda_envs/collection-17Q1.0/lib/python3.5/asyncio/tasks.py in _step(***failed resolving arguments***)
    237                 # We use the `send` method directly, because coroutines
    238                 # don't have `__iter__` and `__next__` methods.
--> 239                 result = coro.send(None)
    240             else:
    241                 result = coro.throw(exc)

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/run_engine.py in _run(self)
   1002             self.log.error("Run aborted")
   1003             self.log.error("%r", err)
-> 1004             raise err
   1005         finally:
   1006             # Some done_callbacks may still be alive in other threads.

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/run_engine.py in _run(self)
    900                         resp = self._response_stack.pop()
    901                         try:
--> 902                             msg = self._plan_stack[-1].send(resp)
    903                         # We have exhausted the top generator
    904                         except StopIteration:

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/spec_api.py in ct(num, delay, time, md)
    270     inner = inner_spec_decorator('ct', time, [], num=num)(count)
    271 
--> 272     return (yield from inner(gs.DETS, num, delay, md=md))
    273 gs.SUB_FACTORIES['ct'] = [setup_livetable, setup_ct_plot]
    274 

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in dec_inner(*inner_args, **inner_kwargs)
     45                 plan = gen_func(*inner_args, **inner_kwargs)
     46                 plan = wrapper(plan, *args, **kwargs)
---> 47                 return (yield from plan)
     48             return dec_inner
     49         return dec

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in subs_wrapper(plan, subs)
    928 
    929     return (yield from finalize_wrapper(_inner_plan(),
--> 930                                         _unsubscribe()))
    931 
    932 

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in finalize_wrapper(plan, final_plan, pause_for_debug)
   1023     cleanup = True
   1024     try:
-> 1025         ret = yield from plan
   1026     except GeneratorExit:
   1027         cleanup = False

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in _inner_plan()
    925     def _inner_plan():
    926         yield from _subscribe()
--> 927         return (yield from plan)
    928 
    929     return (yield from finalize_wrapper(_inner_plan(),

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in dec_inner(*inner_args, **inner_kwargs)
     45                 plan = gen_func(*inner_args, **inner_kwargs)
     46                 plan = wrapper(plan, *args, **kwargs)
---> 47                 return (yield from plan)
     48             return dec_inner
     49         return dec

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in configure_count_time_wrapper(plan, time)
   1664     if time is None:
   1665         # no-op
-> 1666         return (yield from plan)
   1667     else:
   1668         return (yield from finalize_wrapper(plan_mutator(plan, insert_set),

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in dec_inner(*inner_args, **inner_kwargs)
     45                 plan = gen_func(*inner_args, **inner_kwargs)
     46                 plan = wrapper(plan, *args, **kwargs)
---> 47                 return (yield from plan)
     48             return dec_inner
     49         return dec

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in fly_during_wrapper(plan, flyers)
   1381     plan1 = plan_mutator(plan, insert_after_open)
   1382     plan2 = plan_mutator(plan1, insert_before_close)
-> 1383     return (yield from plan2)
   1384 
   1385 

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in plan_mutator(plan, msg_proc)
    188                     continue
    189                 else:
--> 190                     raise ex
    191         # if inserting / mutating, put new generator on the stack
    192         # and replace the current msg with the first element from the

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in plan_mutator(plan, msg_proc)
    141             ret = result_stack.pop()
    142             try:
--> 143                 msg = plan_stack[-1].send(ret)
    144             except StopIteration as e:
    145                 # discard the exhausted generator

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in plan_mutator(plan, msg_proc)
    188                     continue
    189                 else:
--> 190                     raise ex
    191         # if inserting / mutating, put new generator on the stack
    192         # and replace the current msg with the first element from the

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in plan_mutator(plan, msg_proc)
    141             ret = result_stack.pop()
    142             try:
--> 143                 msg = plan_stack[-1].send(ret)
    144             except StopIteration as e:
    145                 # discard the exhausted generator

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in dec_inner(*inner_args, **inner_kwargs)
     45                 plan = gen_func(*inner_args, **inner_kwargs)
     46                 plan = wrapper(plan, *args, **kwargs)
---> 47                 return (yield from plan)
     48             return dec_inner
     49         return dec

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in monitor_during_wrapper(plan, signals)
   1323     plan1 = plan_mutator(plan, insert_after_open)
   1324     plan2 = plan_mutator(plan1, insert_before_close)
-> 1325     return (yield from plan2)
   1326 
   1327 

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in plan_mutator(plan, msg_proc)
    188                     continue
    189                 else:
--> 190                     raise ex
    191         # if inserting / mutating, put new generator on the stack
    192         # and replace the current msg with the first element from the

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in plan_mutator(plan, msg_proc)
    141             ret = result_stack.pop()
    142             try:
--> 143                 msg = plan_stack[-1].send(ret)
    144             except StopIteration as e:
    145                 # discard the exhausted generator

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in plan_mutator(plan, msg_proc)
    188                     continue
    189                 else:
--> 190                     raise ex
    191         # if inserting / mutating, put new generator on the stack
    192         # and replace the current msg with the first element from the

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in plan_mutator(plan, msg_proc)
    141             ret = result_stack.pop()
    142             try:
--> 143                 msg = plan_stack[-1].send(ret)
    144             except StopIteration as e:
    145                 # discard the exhausted generator

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in dec_inner(*inner_args, **inner_kwargs)
     45                 plan = gen_func(*inner_args, **inner_kwargs)
     46                 plan = wrapper(plan, *args, **kwargs)
---> 47                 return (yield from plan)
     48             return dec_inner
     49         return dec

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in baseline_wrapper(plan, devices, name)
   1713         return (yield from plan)
   1714     else:
-> 1715         return (yield from plan_mutator(plan, insert_baseline))
   1716 
   1717 

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in plan_mutator(plan, msg_proc)
    188                     continue
    189                 else:
--> 190                     raise ex
    191         # if inserting / mutating, put new generator on the stack
    192         # and replace the current msg with the first element from the

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in plan_mutator(plan, msg_proc)
    141             ret = result_stack.pop()
    142             try:
--> 143                 msg = plan_stack[-1].send(ret)
    144             except StopIteration as e:
    145                 # discard the exhausted generator

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/spec_api.py in inner_spec_plan(md, *args, **kwargs)
    243                    gs.MD_TIME_KEY: time}
    244             _md.update(md or {})
--> 245             return (yield from func(*args, md=_md, **kwargs))
    246         return inner_spec_plan
    247     return outer

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in count(detectors, num, delay, md)
   1992         return (yield from infinite_plan())
   1993     else:
-> 1994         return (yield from finite_plan())
   1995 
   1996 

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in dec_inner(*inner_args, **inner_kwargs)
     45                 plan = gen_func(*inner_args, **inner_kwargs)
     46                 plan = wrapper(plan, *args, **kwargs)
---> 47                 return (yield from plan)
     48             return dec_inner
     49         return dec

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in stage_wrapper(plan, devices)
   1508         return (yield from plan)
   1509 
-> 1510     return (yield from finalize_wrapper(inner(), unstage_devices()))
   1511 
   1512 

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in finalize_wrapper(plan, final_plan, pause_for_debug)
   1023     cleanup = True
   1024     try:
-> 1025         ret = yield from plan
   1026     except GeneratorExit:
   1027         cleanup = False

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in inner()
   1506     def inner():
   1507         yield from stage_devices()
-> 1508         return (yield from plan)
   1509 
   1510     return (yield from finalize_wrapper(inner(), unstage_devices()))

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in dec_inner(*inner_args, **inner_kwargs)
     45                 plan = gen_func(*inner_args, **inner_kwargs)
     46                 plan = wrapper(plan, *args, **kwargs)
---> 47                 return (yield from plan)
     48             return dec_inner
     49         return dec

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in run_wrapper(plan, md)
    870         metadata to be passed into the 'open_run' message
    871     """
--> 872     yield from open_run(md)
    873     yield from plan
    874     rs_uid = yield from close_run()

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in open_run(md)
    949     :func:`bluesky.plans.close_run`
    950     """
--> 951     return (yield Msg('open_run', **(md or {})))
    952 
    953 

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in plan_mutator(plan, msg_proc)
    125             # if we have a stashed exception, pass it along
    126             try:
--> 127                 msg = plan_stack[-1].throw(exception)
    128             except Exception as e:
    129                 # if we catch an exception,

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in pre_baseline()
   1695         if msg.command == 'open_run':
   1696             def pre_baseline():
-> 1697                 ret = yield msg
   1698                 yield from trigger_and_read(devices, name=name)
   1699                 return ret

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in plan_mutator(plan, msg_proc)
    213         try:
    214             # yield out the 'current message' and collect the return
--> 215             inner_ret = yield msg
    216         except GeneratorExit:
    217             # special case GeneratorExit.  We must clean up all of our plans

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in plan_mutator(plan, msg_proc)
    125             # if we have a stashed exception, pass it along
    126             try:
--> 127                 msg = plan_stack[-1].throw(exception)
    128             except Exception as e:
    129                 # if we catch an exception,

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in new_gen()
   1306         if msg.command == 'open_run':
   1307             def new_gen():
-> 1308                 yield from ensure_generator(monitor_msgs)
   1309             return single_gen(msg), new_gen()
   1310         else:

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/utils.py in <genexpr>(.0)
     98     if not isinstance(gen, PLAN_TYPES):
     99         # If plan does not support .send, we must wrap it in a generator.
--> 100         gen = (msg for msg in gen)
    101 
    102     return gen

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in plan_mutator(plan, msg_proc)
    213         try:
    214             # yield out the 'current message' and collect the return
--> 215             inner_ret = yield msg
    216         except GeneratorExit:
    217             # special case GeneratorExit.  We must clean up all of our plans

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in plan_mutator(plan, msg_proc)
    213         try:
    214             # yield out the 'current message' and collect the return
--> 215             inner_ret = yield msg
    216         except GeneratorExit:
    217             # special case GeneratorExit.  We must clean up all of our plans

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in plan_mutator(plan, msg_proc)
    213         try:
    214             # yield out the 'current message' and collect the return
--> 215             inner_ret = yield msg
    216         except GeneratorExit:
    217             # special case GeneratorExit.  We must clean up all of our plans

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in plan_mutator(plan, msg_proc)
    213         try:
    214             # yield out the 'current message' and collect the return
--> 215             inner_ret = yield msg
    216         except GeneratorExit:
    217             # special case GeneratorExit.  We must clean up all of our plans

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/run_engine.py in _run(self)
    951                         # exceptions (coming in via throw) can be
    952                         # raised
--> 953                         response = yield from coro(msg)
    954                     # special case `CancelledError` and let the outer
    955                     # exception block deal with it.

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/run_engine.py in _monitor(self, msg)
   1357 
   1358         self._monitor_params[obj] = emit_event, kwargs
-> 1359         obj.subscribe(emit_event, **kwargs)
   1360         yield from self.emit(DocumentNames.descriptor, desc_doc)
   1361         yield from self._reset_checkpoint_state_coro()

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/ophyd/ophydobj.py in subscribe(self, cb, event_type, run)
    145             raise ValueError('Subscription type not set and object {} of class'
    146                              ' {} has no default subscription set'
--> 147                              ''.format(self.name, self.__class__.__name__))
    148 
    149         try:

ValueError: Subscription type not set and object gc_diag_cam of class StandardProsilica has no default subscription set

In [26]: 

any detector (tried several electrometers and a camera, as shown above) gives the same errors. Could you please help me? Thanks, Valentina

danielballan commented 7 years ago

Starting from the basics, the errors we are debugging have the form:

ValueError: Subscription type not set and object <device.name> of class <type(device)> has no default subscription set.

I would expect this kind of error if you tried to monitor a Device. (For context: ophyd lets you monitor a Signal -- loosely speaking, one PV -- but if you ask it to monitor a Device, which is a whole bucket of Signals, it requires additional information about what exactly you want it to watch.)

Can you reproduce this error in a fresh session? The first line in your example is In [17] so what you've shown here could be missing some relevant context.

If so, what you get when you type gs.MONITORS?

@tacaswell I'm perplexed that changing the contents of gs.DETS seems to change the devices that bluesky is attempting to monitor....

bisogni commented 7 years ago

Below, the output of a fresh Bluesky session, where I tried few commands involving the use of 'qem08'. If I try to 'read' the device, it works. If I do a 'ct' (or a scan, as I was trying earlier today), then it gives errors.

xf02id1@xf02id1-ws2:~$ bsui
Python 3.5.1 |Continuum Analytics, Inc.| (default, Dec  7 2015, 11:16:01) 
Type "copyright", "credits" or "license" for more information.

IPython 5.1.0 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object', use 'object??' for extra details.

IPython profile: collection
/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/databroker/databroker.py:20: UserWarning: No default DataBroker object will be created because the necessary configuration was not found: "The configuration field(s) ['port', 'database', 'timezone', 'host'] were not found in any file or environmental variable."
  "the necessary configuration was not found: %s" % exc)
Loading metadata history from /home/xf02id1/.config/bluesky/bluesky_history.db

In [1]: gs.DETS
Out[1]: []

In [2]: gs.DETS.append(qem08)

In [3]: gs.DETS
Out[3]: [SIXQuadEM(prefix='XF:02IDC-BI{EM:8}EM180:', name='qem08', read_attrs=['current1.mean_value', 'current2.mean_value', 'current3.mean_value'], configuration_attrs=['integration_time', 'averaging_time', 'em_range', 'num_averaged', 'values_per_read'])]

In [4]: RE(ct(num=3))
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-4-02a9be618f8a> in <module>()
----> 1 RE(ct(num=3))

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/run_engine.py in __call__(self, plan, subs, raise_if_interrupted, **metadata_kw)
    596                     # it (unless it is a canceled error)
    597                     if exc is not None:
--> 598                         raise exc
    599 
    600             if raise_if_interrupted and self._interrupted:

/opt/conda_envs/collection-17Q1.0/lib/python3.5/asyncio/tasks.py in _step(***failed resolving arguments***)
    237                 # We use the `send` method directly, because coroutines
    238                 # don't have `__iter__` and `__next__` methods.
--> 239                 result = coro.send(None)
    240             else:
    241                 result = coro.throw(exc)

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/run_engine.py in _run(self)
   1002             self.log.error("Run aborted")
   1003             self.log.error("%r", err)
-> 1004             raise err
   1005         finally:
   1006             # Some done_callbacks may still be alive in other threads.

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/run_engine.py in _run(self)
    900                         resp = self._response_stack.pop()
    901                         try:
--> 902                             msg = self._plan_stack[-1].send(resp)
    903                         # We have exhausted the top generator
    904                         except StopIteration:

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/spec_api.py in ct(num, delay, time, md)
    270     inner = inner_spec_decorator('ct', time, [], num=num)(count)
    271 
--> 272     return (yield from inner(gs.DETS, num, delay, md=md))
    273 gs.SUB_FACTORIES['ct'] = [setup_livetable, setup_ct_plot]
    274 

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in dec_inner(*inner_args, **inner_kwargs)
     45                 plan = gen_func(*inner_args, **inner_kwargs)
     46                 plan = wrapper(plan, *args, **kwargs)
---> 47                 return (yield from plan)
     48             return dec_inner
     49         return dec

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in subs_wrapper(plan, subs)
    928 
    929     return (yield from finalize_wrapper(_inner_plan(),
--> 930                                         _unsubscribe()))
    931 
    932 

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in finalize_wrapper(plan, final_plan, pause_for_debug)
   1023     cleanup = True
   1024     try:
-> 1025         ret = yield from plan
   1026     except GeneratorExit:
   1027         cleanup = False

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in _inner_plan()
    925     def _inner_plan():
    926         yield from _subscribe()
--> 927         return (yield from plan)
    928 
    929     return (yield from finalize_wrapper(_inner_plan(),

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in dec_inner(*inner_args, **inner_kwargs)
     45                 plan = gen_func(*inner_args, **inner_kwargs)
     46                 plan = wrapper(plan, *args, **kwargs)
---> 47                 return (yield from plan)
     48             return dec_inner
     49         return dec

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in configure_count_time_wrapper(plan, time)
   1664     if time is None:
   1665         # no-op
-> 1666         return (yield from plan)
   1667     else:
   1668         return (yield from finalize_wrapper(plan_mutator(plan, insert_set),

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in dec_inner(*inner_args, **inner_kwargs)
     45                 plan = gen_func(*inner_args, **inner_kwargs)
     46                 plan = wrapper(plan, *args, **kwargs)
---> 47                 return (yield from plan)
     48             return dec_inner
     49         return dec

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in fly_during_wrapper(plan, flyers)
   1381     plan1 = plan_mutator(plan, insert_after_open)
   1382     plan2 = plan_mutator(plan1, insert_before_close)
-> 1383     return (yield from plan2)
   1384 
   1385 

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in plan_mutator(plan, msg_proc)
    188                     continue
    189                 else:
--> 190                     raise ex
    191         # if inserting / mutating, put new generator on the stack
    192         # and replace the current msg with the first element from the

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in plan_mutator(plan, msg_proc)
    141             ret = result_stack.pop()
    142             try:
--> 143                 msg = plan_stack[-1].send(ret)
    144             except StopIteration as e:
    145                 # discard the exhausted generator

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in plan_mutator(plan, msg_proc)
    188                     continue
    189                 else:
--> 190                     raise ex
    191         # if inserting / mutating, put new generator on the stack
    192         # and replace the current msg with the first element from the

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in plan_mutator(plan, msg_proc)
    141             ret = result_stack.pop()
    142             try:
--> 143                 msg = plan_stack[-1].send(ret)
    144             except StopIteration as e:
    145                 # discard the exhausted generator

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in dec_inner(*inner_args, **inner_kwargs)
     45                 plan = gen_func(*inner_args, **inner_kwargs)
     46                 plan = wrapper(plan, *args, **kwargs)
---> 47                 return (yield from plan)
     48             return dec_inner
     49         return dec

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in monitor_during_wrapper(plan, signals)
   1323     plan1 = plan_mutator(plan, insert_after_open)
   1324     plan2 = plan_mutator(plan1, insert_before_close)
-> 1325     return (yield from plan2)
   1326 
   1327 

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in plan_mutator(plan, msg_proc)
    188                     continue
    189                 else:
--> 190                     raise ex
    191         # if inserting / mutating, put new generator on the stack
    192         # and replace the current msg with the first element from the

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in plan_mutator(plan, msg_proc)
    141             ret = result_stack.pop()
    142             try:
--> 143                 msg = plan_stack[-1].send(ret)
    144             except StopIteration as e:
    145                 # discard the exhausted generator

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in plan_mutator(plan, msg_proc)
    188                     continue
    189                 else:
--> 190                     raise ex
    191         # if inserting / mutating, put new generator on the stack
    192         # and replace the current msg with the first element from the

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in plan_mutator(plan, msg_proc)
    141             ret = result_stack.pop()
    142             try:
--> 143                 msg = plan_stack[-1].send(ret)
    144             except StopIteration as e:
    145                 # discard the exhausted generator

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in dec_inner(*inner_args, **inner_kwargs)
     45                 plan = gen_func(*inner_args, **inner_kwargs)
     46                 plan = wrapper(plan, *args, **kwargs)
---> 47                 return (yield from plan)
     48             return dec_inner
     49         return dec

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in baseline_wrapper(plan, devices, name)
   1713         return (yield from plan)
   1714     else:
-> 1715         return (yield from plan_mutator(plan, insert_baseline))
   1716 
   1717 

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in plan_mutator(plan, msg_proc)
    188                     continue
    189                 else:
--> 190                     raise ex
    191         # if inserting / mutating, put new generator on the stack
    192         # and replace the current msg with the first element from the

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in plan_mutator(plan, msg_proc)
    141             ret = result_stack.pop()
    142             try:
--> 143                 msg = plan_stack[-1].send(ret)
    144             except StopIteration as e:
    145                 # discard the exhausted generator

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/spec_api.py in inner_spec_plan(md, *args, **kwargs)
    243                    gs.MD_TIME_KEY: time}
    244             _md.update(md or {})
--> 245             return (yield from func(*args, md=_md, **kwargs))
    246         return inner_spec_plan
    247     return outer

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in count(detectors, num, delay, md)
   1992         return (yield from infinite_plan())
   1993     else:
-> 1994         return (yield from finite_plan())
   1995 
   1996 

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in dec_inner(*inner_args, **inner_kwargs)
     45                 plan = gen_func(*inner_args, **inner_kwargs)
     46                 plan = wrapper(plan, *args, **kwargs)
---> 47                 return (yield from plan)
     48             return dec_inner
     49         return dec

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in stage_wrapper(plan, devices)
   1508         return (yield from plan)
   1509 
-> 1510     return (yield from finalize_wrapper(inner(), unstage_devices()))
   1511 
   1512 

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in finalize_wrapper(plan, final_plan, pause_for_debug)
   1023     cleanup = True
   1024     try:
-> 1025         ret = yield from plan
   1026     except GeneratorExit:
   1027         cleanup = False

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in inner()
   1506     def inner():
   1507         yield from stage_devices()
-> 1508         return (yield from plan)
   1509 
   1510     return (yield from finalize_wrapper(inner(), unstage_devices()))

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in dec_inner(*inner_args, **inner_kwargs)
     45                 plan = gen_func(*inner_args, **inner_kwargs)
     46                 plan = wrapper(plan, *args, **kwargs)
---> 47                 return (yield from plan)
     48             return dec_inner
     49         return dec

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in run_wrapper(plan, md)
    870         metadata to be passed into the 'open_run' message
    871     """
--> 872     yield from open_run(md)
    873     yield from plan
    874     rs_uid = yield from close_run()

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in open_run(md)
    949     :func:`bluesky.plans.close_run`
    950     """
--> 951     return (yield Msg('open_run', **(md or {})))
    952 
    953 

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in plan_mutator(plan, msg_proc)
    125             # if we have a stashed exception, pass it along
    126             try:
--> 127                 msg = plan_stack[-1].throw(exception)
    128             except Exception as e:
    129                 # if we catch an exception,

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in pre_baseline()
   1695         if msg.command == 'open_run':
   1696             def pre_baseline():
-> 1697                 ret = yield msg
   1698                 yield from trigger_and_read(devices, name=name)
   1699                 return ret

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in plan_mutator(plan, msg_proc)
    213         try:
    214             # yield out the 'current message' and collect the return
--> 215             inner_ret = yield msg
    216         except GeneratorExit:
    217             # special case GeneratorExit.  We must clean up all of our plans

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in plan_mutator(plan, msg_proc)
    125             # if we have a stashed exception, pass it along
    126             try:
--> 127                 msg = plan_stack[-1].throw(exception)
    128             except Exception as e:
    129                 # if we catch an exception,

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in new_gen()
   1306         if msg.command == 'open_run':
   1307             def new_gen():
-> 1308                 yield from ensure_generator(monitor_msgs)
   1309             return single_gen(msg), new_gen()
   1310         else:

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/utils.py in <genexpr>(.0)
     98     if not isinstance(gen, PLAN_TYPES):
     99         # If plan does not support .send, we must wrap it in a generator.
--> 100         gen = (msg for msg in gen)
    101 
    102     return gen

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in plan_mutator(plan, msg_proc)
    213         try:
    214             # yield out the 'current message' and collect the return
--> 215             inner_ret = yield msg
    216         except GeneratorExit:
    217             # special case GeneratorExit.  We must clean up all of our plans

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in plan_mutator(plan, msg_proc)
    213         try:
    214             # yield out the 'current message' and collect the return
--> 215             inner_ret = yield msg
    216         except GeneratorExit:
    217             # special case GeneratorExit.  We must clean up all of our plans

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in plan_mutator(plan, msg_proc)
    213         try:
    214             # yield out the 'current message' and collect the return
--> 215             inner_ret = yield msg
    216         except GeneratorExit:
    217             # special case GeneratorExit.  We must clean up all of our plans

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in plan_mutator(plan, msg_proc)
    213         try:
    214             # yield out the 'current message' and collect the return
--> 215             inner_ret = yield msg
    216         except GeneratorExit:
    217             # special case GeneratorExit.  We must clean up all of our plans

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/run_engine.py in _run(self)
    951                         # exceptions (coming in via throw) can be
    952                         # raised
--> 953                         response = yield from coro(msg)
    954                     # special case `CancelledError` and let the outer
    955                     # exception block deal with it.

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/run_engine.py in _monitor(self, msg)
   1357 
   1358         self._monitor_params[obj] = emit_event, kwargs
-> 1359         obj.subscribe(emit_event, **kwargs)
   1360         yield from self.emit(DocumentNames.descriptor, desc_doc)
   1361         yield from self._reset_checkpoint_state_coro()

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/ophyd/ophydobj.py in subscribe(self, cb, event_type, run)
    145             raise ValueError('Subscription type not set and object {} of class'
    146                              ' {} has no default subscription set'
--> 147                              ''.format(self.name, self.__class__.__name__))
    148 
    149         try:

ValueError: Subscription type not set and object qem08 of class SIXQuadEM has no default subscription set

In [5]: gs.MONITORS
Out[5]: [SIXQuadEM(prefix='XF:02IDC-BI{EM:8}EM180:', name='qem08', read_attrs=['current1.mean_value', 'current2.mean_value', 'current3.mean_value'], configuration_attrs=['integration_time', 'averaging_time', 'em_range', 'num_averaged', 'values_per_read'])]

In [6]: gs.DETS.pop()
Out[6]: SIXQuadEM(prefix='XF:02IDC-BI{EM:8}EM180:', name='qem08', read_attrs=['current1.mean_value', 'current2.mean_value', 'current3.mean_value'], configuration_attrs=['integration_time', 'averaging_time', 'em_range', 'num_averaged', 'values_per_read'])

In [7]: gs.DETS.append(qem08)

In [8]: qem08.read()
Out[8]: 
OrderedDict([('rs_diag_1_tey',
              {'timestamp': 1491002994.277162, 'value': 4403.912}),
             ('rs_diag_2_tey',
              {'timestamp': 1491002994.277274, 'value': 4410.431999999999}),
             ('rs_diag_3_tey',
              {'timestamp': 1491002994.277268, 'value': 4409.088})])

In [9]: qem08.read()
Out[9]: 
OrderedDict([('rs_diag_1_tey',
              {'timestamp': 1491003018.357833, 'value': 4398.152}),
             ('rs_diag_2_tey',
              {'timestamp': 1491003018.35772, 'value': 4411.392}),
             ('rs_diag_3_tey',
              {'timestamp': 1491003018.357939, 'value': 4408.552})])

In [10]: 
hhslepicka commented 7 years ago

Isn't it the case where the same device/PVs are in the scan and monitor at the same time? What happens if you remove everything from the gs.MONITORS?

gs.MONITORS = []
bisogni commented 7 years ago

Interesting output:

In [10]: gs.MONITORS = []

In [11]: gs.MONITORS
Out[11]: []

In [12]: gs.DETS
Out[12]: [SIXQuadEM(prefix='XF:02IDC-BI{EM:8}EM180:', name='qem08', read_attrs=['current1.mean_value', 'current2.mean_value', 'current3.mean_value'], configuration_attrs=['integration_time', 'averaging_time', 'em_range', 'num_averaged', 'values_per_read'])]

In [13]: RE(ct(num=3))
+-----------+------------+
|   seq_num |       time |
+-----------+------------+
|         2 | 19:38:41.0 |
|         3 | 19:38:41.3 |
|         4 | 19:38:41.7 |
LivePlot did not get any data that corresponds to the x axis. None
LivePlot did not get any data that corresponds to the y axis. 
+-----------+------------+
generator ct ['003c36'] (scan num: 213)
Subscription type not set and object qem08 of class SIXQuadEM has no default subscription set
Out[13]: ['003c3674-d87c-46d7-a7c1-ec0ca213af2f']
danielballan commented 7 years ago

Thanks for chiming in, @hhslepicka. Beyond the call of duty!

It worked. That last command successfully took readings and saved the data. So, now we know what changed: at some point between ct() working and not working, someone added a Device to gs.MONITORS, which causes errors, as explained in my previous comment.

About those messages at the end:

bisogni commented 7 years ago

Thanks All for the help! I am now on track with making scans again!

Unfortunately, given my little experience with Bluesky, I confess I didn't know the command gs.MONITORS, so I exclude I could have added a 'monitor' at some point this afternoon. What I tried to do, was to change the electrometer integration time from CSS, when no scan was being done in Bluesky, and after I stopped the device from acquiring. I didn't expect this change to cause problems, but probably it did interfere with something...

Thanks again. Valentina

hhslepicka commented 7 years ago

Awesome @bisogni!😄 The only point is that I don't see how the change at integration time at CSS would affect the MONITORS in Bluesky, maybe something happened in the middle there.

danielballan commented 7 years ago

Yeah, I can't think how it's possible. But I couldn't ask for a more exemplary (or timely) cautionary tale about the risks of global state. We're working on a better way.

bisogni commented 7 years ago

Hi All, Sorry to continue populating this 'bug report'. This morning, I tried to change the EM integration time again in CSS, and like yesterday, when I returned to Bluesky, I could not not take scan anymore. So, I exit the session, and below is the code and output from a new session. You can see that no MONITOR is defined at the beginning. As soon as I try to make a ct, an error comes out, and as a consequence, a MONITOR populates the list. Any idea for this behavior?

xf02id1@xf02id1-ws2:~$ bsui
Python 3.5.1 |Continuum Analytics, Inc.| (default, Dec  7 2015, 11:16:01) 
Type "copyright", "credits" or "license" for more information.

IPython 5.1.0 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object', use 'object??' for extra details.

IPython profile: collection
/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/databroker/databroker.py:20: UserWarning: No default DataBroker object will be created because the necessary configuration was not found: "The configuration field(s) ['host', 'port', 'timezone', 'database'] were not found in any file or environmental variable."
  "the necessary configuration was not found: %s" % exc)
Loading metadata history from /home/xf02id1/.config/bluesky/bluesky_history.db

In [1]: gs.MONITORS
Out[1]: []

In [2]: gs.DETS
Out[2]: []

In [3]: gs.DETS.append(qem08)

In [4]: gs.TABLE_COLS=['rs_diag_1_tey']

In [5]: gs.PLOT_Y = 'rs_diag_1_tey'

In [6]: RE(ct(num=3))
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-6-02a9be618f8a> in <module>()
----> 1 RE(ct(num=3))

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/run_engine.py in __call__(self, plan, subs, raise_if_interrupted, **metadata_kw)
    596                     # it (unless it is a canceled error)
    597                     if exc is not None:
--> 598                         raise exc
    599 
    600             if raise_if_interrupted and self._interrupted:

/opt/conda_envs/collection-17Q1.0/lib/python3.5/asyncio/tasks.py in _step(***failed resolving arguments***)
    237                 # We use the `send` method directly, because coroutines
    238                 # don't have `__iter__` and `__next__` methods.
--> 239                 result = coro.send(None)
    240             else:
    241                 result = coro.throw(exc)

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/run_engine.py in _run(self)
   1002             self.log.error("Run aborted")
   1003             self.log.error("%r", err)
-> 1004             raise err
   1005         finally:
   1006             # Some done_callbacks may still be alive in other threads.

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/run_engine.py in _run(self)
    900                         resp = self._response_stack.pop()
    901                         try:
--> 902                             msg = self._plan_stack[-1].send(resp)
    903                         # We have exhausted the top generator
    904                         except StopIteration:

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/spec_api.py in ct(num, delay, time, md)
    270     inner = inner_spec_decorator('ct', time, [], num=num)(count)
    271 
--> 272     return (yield from inner(gs.DETS, num, delay, md=md))
    273 gs.SUB_FACTORIES['ct'] = [setup_livetable, setup_ct_plot]
    274 

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in dec_inner(*inner_args, **inner_kwargs)
     45                 plan = gen_func(*inner_args, **inner_kwargs)
     46                 plan = wrapper(plan, *args, **kwargs)
---> 47                 return (yield from plan)
     48             return dec_inner
     49         return dec

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in subs_wrapper(plan, subs)
    928 
    929     return (yield from finalize_wrapper(_inner_plan(),
--> 930                                         _unsubscribe()))
    931 
    932 

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in finalize_wrapper(plan, final_plan, pause_for_debug)
   1023     cleanup = True
   1024     try:
-> 1025         ret = yield from plan
   1026     except GeneratorExit:
   1027         cleanup = False

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in _inner_plan()
    925     def _inner_plan():
    926         yield from _subscribe()
--> 927         return (yield from plan)
    928 
    929     return (yield from finalize_wrapper(_inner_plan(),

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in dec_inner(*inner_args, **inner_kwargs)
     45                 plan = gen_func(*inner_args, **inner_kwargs)
     46                 plan = wrapper(plan, *args, **kwargs)
---> 47                 return (yield from plan)
     48             return dec_inner
     49         return dec

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in configure_count_time_wrapper(plan, time)
   1664     if time is None:
   1665         # no-op
-> 1666         return (yield from plan)
   1667     else:
   1668         return (yield from finalize_wrapper(plan_mutator(plan, insert_set),

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in dec_inner(*inner_args, **inner_kwargs)
     45                 plan = gen_func(*inner_args, **inner_kwargs)
     46                 plan = wrapper(plan, *args, **kwargs)
---> 47                 return (yield from plan)
     48             return dec_inner
     49         return dec

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in fly_during_wrapper(plan, flyers)
   1381     plan1 = plan_mutator(plan, insert_after_open)
   1382     plan2 = plan_mutator(plan1, insert_before_close)
-> 1383     return (yield from plan2)
   1384 
   1385 

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in plan_mutator(plan, msg_proc)
    188                     continue
    189                 else:
--> 190                     raise ex
    191         # if inserting / mutating, put new generator on the stack
    192         # and replace the current msg with the first element from the

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in plan_mutator(plan, msg_proc)
    141             ret = result_stack.pop()
    142             try:
--> 143                 msg = plan_stack[-1].send(ret)
    144             except StopIteration as e:
    145                 # discard the exhausted generator

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in plan_mutator(plan, msg_proc)
    188                     continue
    189                 else:
--> 190                     raise ex
    191         # if inserting / mutating, put new generator on the stack
    192         # and replace the current msg with the first element from the

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in plan_mutator(plan, msg_proc)
    141             ret = result_stack.pop()
    142             try:
--> 143                 msg = plan_stack[-1].send(ret)
    144             except StopIteration as e:
    145                 # discard the exhausted generator

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in dec_inner(*inner_args, **inner_kwargs)
     45                 plan = gen_func(*inner_args, **inner_kwargs)
     46                 plan = wrapper(plan, *args, **kwargs)
---> 47                 return (yield from plan)
     48             return dec_inner
     49         return dec

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in monitor_during_wrapper(plan, signals)
   1323     plan1 = plan_mutator(plan, insert_after_open)
   1324     plan2 = plan_mutator(plan1, insert_before_close)
-> 1325     return (yield from plan2)
   1326 
   1327 

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in plan_mutator(plan, msg_proc)
    188                     continue
    189                 else:
--> 190                     raise ex
    191         # if inserting / mutating, put new generator on the stack
    192         # and replace the current msg with the first element from the

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in plan_mutator(plan, msg_proc)
    141             ret = result_stack.pop()
    142             try:
--> 143                 msg = plan_stack[-1].send(ret)
    144             except StopIteration as e:
    145                 # discard the exhausted generator

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in plan_mutator(plan, msg_proc)
    188                     continue
    189                 else:
--> 190                     raise ex
    191         # if inserting / mutating, put new generator on the stack
    192         # and replace the current msg with the first element from the

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in plan_mutator(plan, msg_proc)
    141             ret = result_stack.pop()
    142             try:
--> 143                 msg = plan_stack[-1].send(ret)
    144             except StopIteration as e:
    145                 # discard the exhausted generator

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in dec_inner(*inner_args, **inner_kwargs)
     45                 plan = gen_func(*inner_args, **inner_kwargs)
     46                 plan = wrapper(plan, *args, **kwargs)
---> 47                 return (yield from plan)
     48             return dec_inner
     49         return dec

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in baseline_wrapper(plan, devices, name)
   1713         return (yield from plan)
   1714     else:
-> 1715         return (yield from plan_mutator(plan, insert_baseline))
   1716 
   1717 

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in plan_mutator(plan, msg_proc)
    188                     continue
    189                 else:
--> 190                     raise ex
    191         # if inserting / mutating, put new generator on the stack
    192         # and replace the current msg with the first element from the

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in plan_mutator(plan, msg_proc)
    141             ret = result_stack.pop()
    142             try:
--> 143                 msg = plan_stack[-1].send(ret)
    144             except StopIteration as e:
    145                 # discard the exhausted generator

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/spec_api.py in inner_spec_plan(md, *args, **kwargs)
    243                    gs.MD_TIME_KEY: time}
    244             _md.update(md or {})
--> 245             return (yield from func(*args, md=_md, **kwargs))
    246         return inner_spec_plan
    247     return outer

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in count(detectors, num, delay, md)
   1992         return (yield from infinite_plan())
   1993     else:
-> 1994         return (yield from finite_plan())
   1995 
   1996 

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in dec_inner(*inner_args, **inner_kwargs)
     45                 plan = gen_func(*inner_args, **inner_kwargs)
     46                 plan = wrapper(plan, *args, **kwargs)
---> 47                 return (yield from plan)
     48             return dec_inner
     49         return dec

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in stage_wrapper(plan, devices)
   1508         return (yield from plan)
   1509 
-> 1510     return (yield from finalize_wrapper(inner(), unstage_devices()))
   1511 
   1512 

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in finalize_wrapper(plan, final_plan, pause_for_debug)
   1023     cleanup = True
   1024     try:
-> 1025         ret = yield from plan
   1026     except GeneratorExit:
   1027         cleanup = False

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in inner()
   1506     def inner():
   1507         yield from stage_devices()
-> 1508         return (yield from plan)
   1509 
   1510     return (yield from finalize_wrapper(inner(), unstage_devices()))

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in dec_inner(*inner_args, **inner_kwargs)
     45                 plan = gen_func(*inner_args, **inner_kwargs)
     46                 plan = wrapper(plan, *args, **kwargs)
---> 47                 return (yield from plan)
     48             return dec_inner
     49         return dec

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in run_wrapper(plan, md)
    870         metadata to be passed into the 'open_run' message
    871     """
--> 872     yield from open_run(md)
    873     yield from plan
    874     rs_uid = yield from close_run()

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in open_run(md)
    949     :func:`bluesky.plans.close_run`
    950     """
--> 951     return (yield Msg('open_run', **(md or {})))
    952 
    953 

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in plan_mutator(plan, msg_proc)
    125             # if we have a stashed exception, pass it along
    126             try:
--> 127                 msg = plan_stack[-1].throw(exception)
    128             except Exception as e:
    129                 # if we catch an exception,

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in pre_baseline()
   1695         if msg.command == 'open_run':
   1696             def pre_baseline():
-> 1697                 ret = yield msg
   1698                 yield from trigger_and_read(devices, name=name)
   1699                 return ret

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in plan_mutator(plan, msg_proc)
    213         try:
    214             # yield out the 'current message' and collect the return
--> 215             inner_ret = yield msg
    216         except GeneratorExit:
    217             # special case GeneratorExit.  We must clean up all of our plans

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in plan_mutator(plan, msg_proc)
    125             # if we have a stashed exception, pass it along
    126             try:
--> 127                 msg = plan_stack[-1].throw(exception)
    128             except Exception as e:
    129                 # if we catch an exception,

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in new_gen()
   1306         if msg.command == 'open_run':
   1307             def new_gen():
-> 1308                 yield from ensure_generator(monitor_msgs)
   1309             return single_gen(msg), new_gen()
   1310         else:

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/utils.py in <genexpr>(.0)
     98     if not isinstance(gen, PLAN_TYPES):
     99         # If plan does not support .send, we must wrap it in a generator.
--> 100         gen = (msg for msg in gen)
    101 
    102     return gen

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in plan_mutator(plan, msg_proc)
    213         try:
    214             # yield out the 'current message' and collect the return
--> 215             inner_ret = yield msg
    216         except GeneratorExit:
    217             # special case GeneratorExit.  We must clean up all of our plans

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in plan_mutator(plan, msg_proc)
    213         try:
    214             # yield out the 'current message' and collect the return
--> 215             inner_ret = yield msg
    216         except GeneratorExit:
    217             # special case GeneratorExit.  We must clean up all of our plans

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in plan_mutator(plan, msg_proc)
    213         try:
    214             # yield out the 'current message' and collect the return
--> 215             inner_ret = yield msg
    216         except GeneratorExit:
    217             # special case GeneratorExit.  We must clean up all of our plans

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in plan_mutator(plan, msg_proc)
    213         try:
    214             # yield out the 'current message' and collect the return
--> 215             inner_ret = yield msg
    216         except GeneratorExit:
    217             # special case GeneratorExit.  We must clean up all of our plans

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/run_engine.py in _run(self)
    951                         # exceptions (coming in via throw) can be
    952                         # raised
--> 953                         response = yield from coro(msg)
    954                     # special case `CancelledError` and let the outer
    955                     # exception block deal with it.

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/run_engine.py in _monitor(self, msg)
   1357 
   1358         self._monitor_params[obj] = emit_event, kwargs
-> 1359         obj.subscribe(emit_event, **kwargs)
   1360         yield from self.emit(DocumentNames.descriptor, desc_doc)
   1361         yield from self._reset_checkpoint_state_coro()

/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/ophyd/ophydobj.py in subscribe(self, cb, event_type, run)
    145             raise ValueError('Subscription type not set and object {} of class'
    146                              ' {} has no default subscription set'
--> 147                              ''.format(self.name, self.__class__.__name__))
    148 
    149         try:

ValueError: Subscription type not set and object qem08 of class SIXQuadEM has no default subscription set

In [7]: gs.MONITORS
Out[7]: [SIXQuadEM(prefix='XF:02IDC-BI{EM:8}EM180:', name='qem08', read_attrs=['current1.mean_value', 'current2.mean_value', 'current3.mean_value'], configuration_attrs=['integration_time', 'averaging_time', 'em_range', 'num_averaged', 'values_per_read'])]

In [8]: 
hhslepicka commented 7 years ago

Hi @bisogni,

Is your profile up to date to the GitHub repo? https://github.com/NSLS-II-SIX/profile_collection

If not please commit so it gets easier to debug. On Sat, Apr 1, 2017 at 8:18 AM bisogni notifications@github.com wrote:

Hi All, Sorry to continue populating this 'bug report'. This morning, I tried to change the EM integration time again in CSS, and like yesterday, when I returned to Bluesky, I could not not take scan anymore. So, I exit the session, and below is the code and output from a new session. You can see that no MONITOR is defined at the beginning. As soon as I try to make a ct, an error comes out, and as a consequence, a MONITOR populates the list. Any idea for this behavior?

xf02id1@xf02id1-ws2:~$ bsui Python 3.5.1 |Continuum Analytics, Inc.| (default, Dec 7 2015, 11:16:01) Type "copyright", "credits" or "license" for more information.

IPython 5.1.0 -- An enhanced Interactive Python. ? -> Introduction and overview of IPython's features. %quickref -> Quick reference. help -> Python's own help system. object? -> Details about 'object', use 'object??' for extra details.

IPython profile: collection /opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/databroker/databroker.py:20: UserWarning: No default DataBroker object will be created because the necessary configuration was not found: "The configuration field(s) ['host', 'port', 'timezone', 'database'] were not found in any file or environmental variable." "the necessary configuration was not found: %s" % exc) Loading metadata history from /home/xf02id1/.config/bluesky/bluesky_history.db

In [1]: gs.MONITORS Out[1]: []

In [2]: gs.DETS Out[2]: []

In [3]: gs.DETS.append(qem08)

In [4]: gs.TABLE_COLS=['rs_diag_1_tey']

In [5]: gs.PLOT_Y = 'rs_diag_1_tey'

In [6]: RE(ct(num=3))

ValueError Traceback (most recent call last)

in () ----> 1 RE(ct(num=3)) /opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/run_engine.py in __call__(self, plan, subs, raise_if_interrupted, **metadata_kw) 596 # it (unless it is a canceled error) 597 if exc is not None: --> 598 raise exc 599 600 if raise_if_interrupted and self._interrupted: /opt/conda_envs/collection-17Q1.0/lib/python3.5/asyncio/tasks.py in _step(***failed resolving arguments***) 237 # We use the `send` method directly, because coroutines 238 # don't have `__iter__` and `__next__` methods. --> 239 result = coro.send(None) 240 else: 241 result = coro.throw(exc) /opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/run_engine.py in _run(self) 1002 self.log.error("Run aborted") 1003 self.log.error("%r", err) -> 1004 raise err 1005 finally: 1006 # Some done_callbacks may still be alive in other threads. /opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/run_engine.py in _run(self) 900 resp = self._response_stack.pop() 901 try: --> 902 msg = self._plan_stack[-1].send(resp) 903 # We have exhausted the top generator 904 except StopIteration: /opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/spec_api.py in ct(num, delay, time, md) 270 inner = inner_spec_decorator('ct', time, [], num=num)(count) 271 --> 272 return (yield from inner(gs.DETS, num, delay, md=md)) 273 gs.SUB_FACTORIES['ct'] = [setup_livetable, setup_ct_plot] 274 /opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in dec_inner(*inner_args, **inner_kwargs) 45 plan = gen_func(*inner_args, **inner_kwargs) 46 plan = wrapper(plan, *args, **kwargs) ---> 47 return (yield from plan) 48 return dec_inner 49 return dec /opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in subs_wrapper(plan, subs) 928 929 return (yield from finalize_wrapper(_inner_plan(), --> 930 _unsubscribe())) 931 932 /opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in finalize_wrapper(plan, final_plan, pause_for_debug) 1023 cleanup = True 1024 try: -> 1025 ret = yield from plan 1026 except GeneratorExit: 1027 cleanup = False /opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in _inner_plan() 925 def _inner_plan(): 926 yield from _subscribe() --> 927 return (yield from plan) 928 929 return (yield from finalize_wrapper(_inner_plan(), /opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in dec_inner(*inner_args, **inner_kwargs) 45 plan = gen_func(*inner_args, **inner_kwargs) 46 plan = wrapper(plan, *args, **kwargs) ---> 47 return (yield from plan) 48 return dec_inner 49 return dec /opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in configure_count_time_wrapper(plan, time) 1664 if time is None: 1665 # no-op -> 1666 return (yield from plan) 1667 else: 1668 return (yield from finalize_wrapper(plan_mutator(plan, insert_set), /opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in dec_inner(*inner_args, **inner_kwargs) 45 plan = gen_func(*inner_args, **inner_kwargs) 46 plan = wrapper(plan, *args, **kwargs) ---> 47 return (yield from plan) 48 return dec_inner 49 return dec /opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in fly_during_wrapper(plan, flyers) 1381 plan1 = plan_mutator(plan, insert_after_open) 1382 plan2 = plan_mutator(plan1, insert_before_close) -> 1383 return (yield from plan2) 1384 1385 /opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in plan_mutator(plan, msg_proc) 188 continue 189 else: --> 190 raise ex 191 # if inserting / mutating, put new generator on the stack 192 # and replace the current msg with the first element from the /opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in plan_mutator(plan, msg_proc) 141 ret = result_stack.pop() 142 try: --> 143 msg = plan_stack[-1].send(ret) 144 except StopIteration as e: 145 # discard the exhausted generator /opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in plan_mutator(plan, msg_proc) 188 continue 189 else: --> 190 raise ex 191 # if inserting / mutating, put new generator on the stack 192 # and replace the current msg with the first element from the /opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in plan_mutator(plan, msg_proc) 141 ret = result_stack.pop() 142 try: --> 143 msg = plan_stack[-1].send(ret) 144 except StopIteration as e: 145 # discard the exhausted generator /opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in dec_inner(*inner_args, **inner_kwargs) 45 plan = gen_func(*inner_args, **inner_kwargs) 46 plan = wrapper(plan, *args, **kwargs) ---> 47 return (yield from plan) 48 return dec_inner 49 return dec /opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in monitor_during_wrapper(plan, signals) 1323 plan1 = plan_mutator(plan, insert_after_open) 1324 plan2 = plan_mutator(plan1, insert_before_close) -> 1325 return (yield from plan2) 1326 1327 /opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in plan_mutator(plan, msg_proc) 188 continue 189 else: --> 190 raise ex 191 # if inserting / mutating, put new generator on the stack 192 # and replace the current msg with the first element from the /opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in plan_mutator(plan, msg_proc) 141 ret = result_stack.pop() 142 try: --> 143 msg = plan_stack[-1].send(ret) 144 except StopIteration as e: 145 # discard the exhausted generator /opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in plan_mutator(plan, msg_proc) 188 continue 189 else: --> 190 raise ex 191 # if inserting / mutating, put new generator on the stack 192 # and replace the current msg with the first element from the /opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in plan_mutator(plan, msg_proc) 141 ret = result_stack.pop() 142 try: --> 143 msg = plan_stack[-1].send(ret) 144 except StopIteration as e: 145 # discard the exhausted generator /opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in dec_inner(*inner_args, **inner_kwargs) 45 plan = gen_func(*inner_args, **inner_kwargs) 46 plan = wrapper(plan, *args, **kwargs) ---> 47 return (yield from plan) 48 return dec_inner 49 return dec /opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in baseline_wrapper(plan, devices, name) 1713 return (yield from plan) 1714 else: -> 1715 return (yield from plan_mutator(plan, insert_baseline)) 1716 1717 /opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in plan_mutator(plan, msg_proc) 188 continue 189 else: --> 190 raise ex 191 # if inserting / mutating, put new generator on the stack 192 # and replace the current msg with the first element from the /opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in plan_mutator(plan, msg_proc) 141 ret = result_stack.pop() 142 try: --> 143 msg = plan_stack[-1].send(ret) 144 except StopIteration as e: 145 # discard the exhausted generator /opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/spec_api.py in inner_spec_plan(md, *args, **kwargs) 243 gs.MD_TIME_KEY: time} 244 _md.update(md or {}) --> 245 return (yield from func(*args, md=_md, **kwargs)) 246 return inner_spec_plan 247 return outer /opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in count(detectors, num, delay, md) 1992 return (yield from infinite_plan()) 1993 else: -> 1994 return (yield from finite_plan()) 1995 1996 /opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in dec_inner(*inner_args, **inner_kwargs) 45 plan = gen_func(*inner_args, **inner_kwargs) 46 plan = wrapper(plan, *args, **kwargs) ---> 47 return (yield from plan) 48 return dec_inner 49 return dec /opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in stage_wrapper(plan, devices) 1508 return (yield from plan) 1509 -> 1510 return (yield from finalize_wrapper(inner(), unstage_devices())) 1511 1512 /opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in finalize_wrapper(plan, final_plan, pause_for_debug) 1023 cleanup = True 1024 try: -> 1025 ret = yield from plan 1026 except GeneratorExit: 1027 cleanup = False /opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in inner() 1506 def inner(): 1507 yield from stage_devices() -> 1508 return (yield from plan) 1509 1510 return (yield from finalize_wrapper(inner(), unstage_devices())) /opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in dec_inner(*inner_args, **inner_kwargs) 45 plan = gen_func(*inner_args, **inner_kwargs) 46 plan = wrapper(plan, *args, **kwargs) ---> 47 return (yield from plan) 48 return dec_inner 49 return dec /opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in run_wrapper(plan, md) 870 metadata to be passed into the 'open_run' message 871 """ --> 872 yield from open_run(md) 873 yield from plan 874 rs_uid = yield from close_run() /opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in open_run(md) 949 :func:`bluesky.plans.close_run` 950 """ --> 951 return (yield Msg('open_run', **(md or {}))) 952 953 /opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in plan_mutator(plan, msg_proc) 125 # if we have a stashed exception, pass it along 126 try: --> 127 msg = plan_stack[-1].throw(exception) 128 except Exception as e: 129 # if we catch an exception, /opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in pre_baseline() 1695 if msg.command == 'open_run': 1696 def pre_baseline(): -> 1697 ret = yield msg 1698 yield from trigger_and_read(devices, name=name) 1699 return ret /opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in plan_mutator(plan, msg_proc) 213 try: 214 # yield out the 'current message' and collect the return --> 215 inner_ret = yield msg 216 except GeneratorExit: 217 # special case GeneratorExit. We must clean up all of our plans /opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in plan_mutator(plan, msg_proc) 125 # if we have a stashed exception, pass it along 126 try: --> 127 msg = plan_stack[-1].throw(exception) 128 except Exception as e: 129 # if we catch an exception, /opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in new_gen() 1306 if msg.command == 'open_run': 1307 def new_gen(): -> 1308 yield from ensure_generator(monitor_msgs) 1309 return single_gen(msg), new_gen() 1310 else: /opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/utils.py in (.0) 98 if not isinstance(gen, PLAN_TYPES): 99 # If plan does not support .send, we must wrap it in a generator. --> 100 gen = (msg for msg in gen) 101 102 return gen /opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in plan_mutator(plan, msg_proc) 213 try: 214 # yield out the 'current message' and collect the return --> 215 inner_ret = yield msg 216 except GeneratorExit: 217 # special case GeneratorExit. We must clean up all of our plans /opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in plan_mutator(plan, msg_proc) 213 try: 214 # yield out the 'current message' and collect the return --> 215 inner_ret = yield msg 216 except GeneratorExit: 217 # special case GeneratorExit. We must clean up all of our plans /opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in plan_mutator(plan, msg_proc) 213 try: 214 # yield out the 'current message' and collect the return --> 215 inner_ret = yield msg 216 except GeneratorExit: 217 # special case GeneratorExit. We must clean up all of our plans /opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/plans.py in plan_mutator(plan, msg_proc) 213 try: 214 # yield out the 'current message' and collect the return --> 215 inner_ret = yield msg 216 except GeneratorExit: 217 # special case GeneratorExit. We must clean up all of our plans /opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/run_engine.py in _run(self) 951 # exceptions (coming in via throw) can be 952 # raised --> 953 response = yield from coro(msg) 954 # special case `CancelledError` and let the outer 955 # exception block deal with it. /opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/bluesky/run_engine.py in _monitor(self, msg) 1357 1358 self._monitor_params[obj] = emit_event, kwargs -> 1359 obj.subscribe(emit_event, **kwargs) 1360 yield from self.emit(DocumentNames.descriptor, desc_doc) 1361 yield from self._reset_checkpoint_state_coro() /opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/ophyd/ophydobj.py in subscribe(self, cb, event_type, run) 145 raise ValueError('Subscription type not set and object {} of class' 146 ' {} has no default subscription set' --> 147 ''.format(self.name, self.__class__.__name__)) 148 149 try: ValueError: Subscription type not set and object qem08 of class SIXQuadEM has no default subscription set In [7]: gs.MONITORS Out[7]: [SIXQuadEM(prefix='XF:02IDC-BI{EM:8}EM180:', name='qem08', read_attrs=['current1.mean_value', 'current2.mean_value', 'current3.mean_value'], configuration_attrs=['integration_time', 'averaging_time', 'em_range', 'num_averaged', 'values_per_read'])] In [8]: — You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub , or mute the thread .
bisogni commented 7 years ago

Done! GitHub repository just updated. Thanks. Valentina

tacaswell commented 7 years ago

Can you do gs.DETS is gs.MONITORS ?

bisogni commented 7 years ago

Hi Tom, Below some code, including the outcome to the command line you suggested: False. By the way, the numbering of points during a 'ct' starts from 2 instead of 1? Is this ok? During a motion scan, we often find a straight line in the plot starting from the position/value that the motor had before starting the scan.

In [98]: gs.DETS
Out[98]: [SIXQuadEM(prefix='XF:02IDC-BI{EM:8}EM180:', name='qem08', read_attrs=['current1.mean_value', 'current2.mean_value', 'current3.mean_value'], configuration_attrs=['integration_time', 'averaging_time', 'em_range', 'num_averaged', 'values_per_read'])]

In [99]: gs.MONITORS
Out[99]: []

In [100]: RE(ct(num=3))
+-----------+------------+---------------+
|   seq_num |       time | rs_diag_1_tey |
+-----------+------------+---------------+
|         2 | 19:18:03.5 |          4083 |
|         3 | 19:18:05.5 |          4233 |
|         4 | 19:18:07.5 |          4168 |
+-----------+------------+---------------+
generator ct ['c6e13c'] (scan num: 424)
MoveStatus(done=True, pos=m4_diag1, elapsed=1.8, success=False, settle_time=0.0)
Out[100]: ['c6e13c2e-41b2-4a16-a1ab-7f3129daf40d']

In [101]: gs.DETS is gs.MONITORS
Out[101]: False

In [102]: gs.DETS
Out[102]: [SIXQuadEM(prefix='XF:02IDC-BI{EM:8}EM180:', name='qem08', read_attrs=['current1.mean_value', 'current2.mean_value', 'current3.mean_value'], configuration_attrs=['integration_time', 'averaging_time', 'em_range', 'num_averaged', 'values_per_read'])]

In [103]: gs.MONITORS
Out[103]: []
tacaswell commented 7 years ago

That is a bug which is fixed by https://github.com/NSLS-II/bluesky/pull/650 :smiling_imp:

I am very confused how anything ended up in your gs.MONITORS.