Folks,
quadEM R4-0 is now available.
This is from the release notes:
************************************
Major update of the module. The device-dependent classes (AHxxx, APS_EM) have not changed significantly. However the base quadEM class has been rewritten. In R3-x the quadEM base class worked as follows:
- The ai records for the 11 parameters (Current[1-3],Sum[12,34,1234],Diff[12,34], and Position[12,34]) were computed using the asynInt32Average device support.
- This meant that there were 11 callbacks each time a new value came from the electrometer, or more than 70,000 callbacks per second under some circumstances. This was a significant CPU load.
- This approach produced average values, but it did not produce other useful statistics like the standard deviation, histogram of values, etc.
- There was no good way to stream all of the readings to a disk file for an arbitrarily long time. The TimeSeries support was limited to a fixed time length, limited by available memory.
R4-0 addresses these problems as follows:
- The quadEM base class is now derived from the asynNDArray class in areaDetector, rather than directly from asynPortDriver.
- The data from the device-dependent drivers are now first placed into a ring buffer whose size is defined in the constructor.
- There is a new PV called AveragingTime that determines the time period over which to average the readings. The AveragingTime divided by the SampleTime determines the number of samples to average, NumAverage_RBV. When this number of samples have been accumulated in the ring buffer a separate thread copies them to a set of NDArrays and calls any registered plugins.
- There is a separate NDPluginStats plugin loaded for each of the 11 data values. This plugin receives an array of dimensions [NumAverage_RBV]. This plugin computes not only the mean (as in the previous version), but also the standard deviation, histogram of values, etc.
- One of the NDArrays contains all of the data values, and has dimensions [11,NumAverage_RBV]. This array can be passed to any of the file writing plugins, which can thus stream all of the data to disk for arbitrarily long time periods.
- An NDStdArrays plugin is also loaded. This can be used to pass all of the data [11,NumAverage_RBV] or any of the individual data arrays to any channel access client.
- This new approach provides much more information and flexibility. But it also significantly reduces the number of callbacks. For example if the averaging time is 1 second the number of callbacks is reduced from thousands per second to 12 per second, because the data are being passed in arrays.
- The computationally intensive work of calculating the statistics is now being done in plugins, so can be done in different threads, each potentially running in a separate core on modern CPUs.
************************************
The home page is here:
http://cars9.uchicago.edu/software/epics/quadEM.html
The documentation is here:
http://cars9.uchicago.edu/software/epics/quadEMDoc.html
The release notes are here:
http://cars9.uchicago.edu/software/epics/quadEMReleaseNotes.html
Let me know of any problems or suggestions.
Mark
- Navigate by Date:
- Prev:
Re: CSS/RDB Archiver Martin Konrad
- Next:
Re: mbboDirect record questions Vikram Bhagat
- Index:
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
<2013>
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
- Navigate by Thread:
- Prev:
Re: CSS/RDB Archiver Martin Konrad
- Next:
asynInt32 pass 2 value Vikram Bhagat
- Index:
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
<2013>
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
|