Skip to content

Instantly share code, notes, and snippets.

@chiahaoliu
Created July 14, 2016 15:37
Show Gist options
  • Select an option

  • Save chiahaoliu/4b4a94d9855d5929c58a70dcf88ee3fa to your computer and use it in GitHub Desktop.

Select an option

Save chiahaoliu/4b4a94d9855d5929c58a70dcf88ee3fa to your computer and use it in GitHub Desktop.
my trial on subtracted tiff exporter

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:

@chiahaoliu
Copy link
Author

chiahaoliu commented Jul 14, 2016

yeah, it gave the same error

> /home/xf28id1/conda_envs/collection-dev/lib/python3.4/site-packages/databroker/core.py(151)get_events()
    149     if fields is None:
    150         fields = []
--> 151     fields = set(fields)
    152     _check_fields_exist(fields, headers)
    153

TypeError: unhashable type: 'Header'

fields is still stop document.

Would it be some subtle bugs with prun ?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment