This idea did not gain much support within DAMA
Speaking for Tom and me, there were a lot of questions about the implementation that was first proposed but the idea is one we are all behind. The utility is clear. Let's make it happen soon. Thanks for providing a good use case for it, @EliotGann.
For the benefit of @EliotGann, @ambarb has used a previous version of this software (that I think is still being used) that I developed at SIX back when I was helping them with their commissioning.
In regards to moving this up to the EPICS IOC level. For simple devices (like linear diagnostic elements) this makes some sense, but this is one of many use- cases for this.
There are more complicated use-cases: like at ESM where it is used to move multiple mirrors etc. around to move the beam from one 'endstation' to another, or like a proposed use-case at IOS where it wold be used to move through a complicated path from the 'sputtering' position to the 'measurement' position. In these cases it is not really practical to do this at the IOC level as it involves motors from multiple IOC's.
I could however imagine that we could publish this back up to a caproto IOC which would allow CS studio to access the 'locations' which would allow the positions to be displayed and for them to be saved in the recorded archiver. Allowing for a PV to request moves between locations is more difficult, as the motion itself makes use of the run-engine (and it's error state handling) so it isn't immediately clear to me how to couple that effectively to being triggered by a PV.
is there some documentation on how to use logging in ophyd devices?
images = 121501 darks = 121502 flat = None stack = get_fastccd_images(db[images], dark_headers=(db[darks], None, None), flat=flat, tag='fccd_image')
Missing dark image for gain setting 2 Missing dark image for gain setting 1 --------------------------------------------------------------------------- AttributeError Traceback (most recent call last) <ipython-input-22-60e6ff70eede> in <module> 2 darks = 121502 3 flat = None ----> 4 stack = get_fastccd_images(db[images], dark_headers=(db[darks], None, None), flat=flat, tag='fccd_image') /opt/conda_envs/analysis-2019-3.0-csx/lib/python3.7/site-packages/csxtools/utils.py in get_fastccd_images(light_header, dark_headers, flat, gain, tag, roi) 127 flat = _crop(flat, roi) 128 --> 129 return _correct_fccd_images(events, bgnd, flat, gain) 130 131 /opt/conda_envs/analysis-2019-3.0-csx/lib/python3.7/site-packages/slicerator.py in process(obj, *args, **kwargs) 597 # Fall back on normal behavior of func, interpreting input 598 # as a single image. --> 599 return func(obj, *args, **kwargs) 600 601 if not retain_doc: /opt/conda_envs/analysis-2019-3.0-csx/lib/python3.7/site-packages/csxtools/utils.py in _correct_fccd_images(image, bgnd, flat, gain) 194 @pipeline 195 def _correct_fccd_images(image, bgnd, flat, gain): --> 196 image = correct_images(image, bgnd, flat, gain) 197 image = rotate90(image, 'cw') 198 return image /opt/conda_envs/analysis-2019-3.0-csx/lib/python3.7/site-packages/csxtools/fastccd/images.py in correct_images(images, dark, flat, gain) 38 t = ttime.time() 39 ---> 40 logger.info("Correcting image stack of shape %s", images.shape) 41 42 if dark is None: AttributeError: 'generator' object has no attribute 'shape'
I have compiled a little tutorial on devices in particular focused on
If interested, please have a look at https://github.com/TMsangohan/bact2/blob/master/tutorials/ophyd_device_drivers.ipynb or https://github.com/TMsangohan/bact2/blob/master/tutorials/ophyd_device_drivers.slides.html
%matplotlib widgetbut nothing i have tried works. Is there some easy fix out there? I just don't know what to google at this point to figure out what I am doing wrong.