code itself, basically a copy of Dan's subtracted tiff exporter:
class SubtractedTiffExporter(LiveTiffExporter):
"Intercept images before saving and subtract dark image"
def start(self, doc):
# The metadata refers to the scan uid of the dark scan.
#if 'dark_frame' not in doc:
dark_sub = True
if 'dark_frame' not in doc:
if 'sc_dk_field_uid' not in doc:
raise ValueError("No dark_frame was recorded.")
uid = doc['sc_dk_field_uid']
dark_header = glbl.db[uid]
self.dark_img, = glbl.get_images(glbl.db[uid], 'pe1_image')
elif 'dark_frame'in doc:
print('WOOOP, dark frame')
super().start(doc)
def event(self, doc):
img = doc['data'][self.field]
subtracted_img = img - self.dark_img
doc['data'][self.field] = subtracted_img
super().event(doc)
xpd_template = "/home/xf28id1/xpdUser/tiff_base/{start.sa_name}/{start.time}_{start.uid}_step{event.seq_num}.tif"
xpd_exporter = SubtractedTiffExporter('pe1_image', xpd_template)
When applied with processs, following error popped out:
In [4]: process(db[-10], xpd_exporter)
--------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-4-4e2ce1b114af> in <module>()
----> 1 process(db[-10], xpd_exporter)
/home/xf28id1/conda_envs/collection-dev/lib/python3.4/site-packages/databroker/broker.py in process(self, headers, func, fields, fill)
470 """
471 _process(mds=self.mds, fs=self.fs, headers=headers, func=func,
--> 472 fields=fields, fill=fill)
473
474
/home/xf28id1/conda_envs/collection-dev/lib/python3.4/site-packages/databroker/core.py in process(mds, fs, headers, func, fields, fill)
431 """
432 for name, doc in restream(mds, fs, headers, fields, fill):
--> 433 func(name, doc)
434
435
/home/xf28id1/conda_envs/collection-dev/lib/python3.4/site-packages/bluesky/callbacks/core.py in __call__(self, name, doc)
20 def __call__(self, name, doc):
21 "Dispatch to methods expecting particular doc types."
---> 22 return getattr(self, name)(doc)
23
24 def event(self, doc):
/home/xf28id1/xpdAcq/xpdacq/new_xpdacq/tiff_export.py in start(self, doc)
15 uid = doc['sc_dk_field_uid']
16 dark_header = glbl.db[uid]
---> 17 self.dark_img, = glbl.get_images(glbl.db[uid], 'pe1_image')
18 elif 'dark_frame'in doc:
19 print('WOOOP, dark frame')
/home/xf28id1/conda_envs/collection-dev/lib/python3.4/site-packages/databroker/pims_readers.py in get_images(headers, name, handler_registry, handler_override)
29 res = DataBroker.get_images(headers=headers, name=name,
30 handler_registry=handler_registry,
---> 31 handler_override=handler_override)
32 return res
33
/home/xf28id1/conda_envs/collection-dev/lib/python3.4/site-packages/databroker/broker.py in get_images(self, headers, name, handler_registry, handler_override)
388 """
389 return Images(self.mds, self.fs, headers, name, handler_registry,
--> 390 handler_override)
391
392
/home/xf28id1/conda_envs/collection-dev/lib/python3.4/site-packages/databroker/core.py in __init__(self, mds, fs, headers, name, handler_registry, handler_override)
538 self.fs = fs
539 events = get_events(mds, fs, headers, [name], fill=False)
--> 540 self._datum_uids = [event.data[name] for event in events
541 if name in event.data]
542 self._len = len(self._datum_uids)
/home/xf28id1/conda_envs/collection-dev/lib/python3.4/site-packages/databroker/core.py in <listcomp>(.0)
538 self.fs = fs
539 events = get_events(mds, fs, headers, [name], fill=False)
--> 540 self._datum_uids = [event.data[name] for event in events
541 if name in event.data]
542 self._len = len(self._datum_uids)
/home/xf28id1/conda_envs/collection-dev/lib/python3.4/site-packages/databroker/core.py in get_events(mds, fs, headers, fields, name, fill, handler_registry, handler_overrides, plugins, **kwargs)
149 if fields is None:
150 fields = []
--> 151 fields = set(fields)
152 _check_fields_exist(fields, headers)
153
TypeError: unhashable type: 'Header'
In pdb, fields is a stop document:
yeah, it gave the same error
fields is still stop document.
Would it be some subtle bugs with
prun?