areaDetector Release Notes
Release 2-0 and later
Starting with areaDetector R2-0 the release notes are no longer in this document,
but are in the following locations.
Release 1-9-1 (11-March-2013)
- R1-9 does not work with detectors that use TCP socket servers (Pilatus, marCCD,
mar345, PSL, and Bruker) because drvAsynIPPort.dbd was not being included.
- marCCD: Fixed mutex bug introduced in R1-9.
- commonDriverPlugins.cmd: Added loading yySseq.db for string sequence record. This
allows creation of simple acquisition sequences, for example:
- Close shutter, wait 0.1 seconds
- Take image (dark current), wait for acquisition to complete
- Open shutter, wait 0.1 seconds
- Take image
- Pilatus driver:
- Added new HeaderString record which writes a string in the comments of a CBF file.
Thanks to Richard Fearn from DLS for this.
- Added documentation for the CbfTemplateFile record which was added in R1-8.
Release 1-9 (27-February-2013)
- NDArray
- Changed some variables that were previously
int
to size_t
.
This allows areaDetector to handle arrays with more elements than an int
can represent. This is not backwards compatible with some drivers and plugins, because
for example, the dims[]
argument to NDArrayPool->alloc()
has been changed from int
to size_t
. All drivers and plugins
in areaDetector have been modified to reflect this change, but user-written drivers
and plugins may need some minor modifications.
- Drivers
- New Andor3 driver for sCMOS (e.g. Neo and Zyla) cameras from Andor. This uses
Version 3 of the Andor Software Development Kit (SDK). Orginal version was written
by Phillip Sorensen from Cornell University. It runs on 32-bit and 64-bit Linux
and 32-bit and 64-bit Windows.
- Bruker, Pilatus, marCCD, and mar345 drivers. The driver lock was not being taken
in a few places when the parameter library was being accessed. This could lead to
crashes.
- Prosilica driver. Thanks to Jason Abernathy from University of Victoria for these
enhancements.
- Implemented connection management. Cameras no longer need to be accessible when
the IOC starts up, and can be power-cycled or disconnected and reconnected from
the Ethernet without restarting the IOC. If the camera is not accessible when the
IOC boots, or is power-cycled then the EPICS output records may not match the actual
camera settings and readbacks. They can be made to agree by processing the output
record, e.g. by pressing Enter or Return in the medm output widget.
- Added new record PSTimestampType which contains the type of time stamp in the
NDArrays. Choices are "NativeTicks", "NativeSeconds","POSIX", and "EPICS". Previously
the time stamp was always "NativeTicks".
- Added new record PSResetTimer which resets the time offset for time stamps.
- Plugins
- NDPluginDriver:
- Fixed a bug that could result in plugins being registered for callbacks multiple
times.
- Fixed a bug that could result in plugins not running when they should if MinCallbackTime
was 0 and the time between callbacks was less than one system clock tick.
- Fixed a bug that could result in plugins not being registered for callbacks when
setting EnableCallbacks=1. This problem was restricted to the case where the port
and address were not being autoconnected, because no EPICS records were connected
to that port and address. Removed incorrect code that was using exceptionDisconnect
and exceptionConnect when connecting a plugin to a port and address.
- Changed the names of the plugin threads from "NDPluginTask" to portName+"_Plugin"
to make them more meaningful.
- NDPluginStats: Changes to allow centroid and profile calculations for 1-D arrays.
- NDPluginROI: Added new parameters AutoSize[X,Y,Z]. If these are true then the
size of the ROI in that dimension is automatically set to be the size of the input
array minus the Min[X,Y,Z] value. This allows the ROI plugin to be used for binning
or reversing in that dimension without having to change the ROI Size[X,Y,Z] when
the input array size changes.
- NDFileNexus: Changed the version of the Nexus SDK being used from 4-2-1 to version
4-3-0. Modified the files in this distribution to eliminate all compiler warnings
on Windows, Linux, and Darwin. Sent these changes back to the Nexus developers,
so hopefully they will be in the next Nexus release as well.
- NDFileNetCDF:
- Fixed bug that caused invalid files to be written on big-endian machines, e.g.
vxWorks.
- Increased default stack size from epicsThreadStackMedium to epicsThreadStackBig
because netCDF needs a relatively large stack and it was crashing on vxWorks.
- NDFileDummy: Added NDFileHDF5Register and NDFileNullRegister, needed for running
areaDetector on vxWorks.
- ImageJ Viewer
- Upgraded CAJ from 1.1.5 to 1.1.10, and JCA from 2.3.2 to 2.3.6. This fixes a problem
on some platforms (e.g. Windows 7 64-bit) where the display viewer would occasionally
stop receiving CA monitor callbacks, and so the display would freeze until the PVs
were disconnected and reconnected.
- The previous version of CAJ did not require setting EPICS_CA_MAX_ARRAY_BYTES,
because it would increase the receive buffer size to whatever was required. This
is no longer true, so EPICS_CA_MAX_ARRAY_BYTES must be set to at least the size
of the largest array to be displayed.
- The previous version of CAJ required setting the EPICS Channel Access parameters
in a JCALibrary.properties file. The parameters could not be set from the normal
environment variables (e.g. EPICS_CA_MAX_ARRAY_BYTES, EPICS_CA_ADDR_LIST, etc.)
used by the IOC and C language clients. The new versions of CAJ and JCA now support
a Java system property called "jca.use_env". If this is set to "true" then it enables
the use of the normal EPICS environment variables. This is very convenient, since
there is now a single place to set the CA parameters for IOCs, C clients, and Java
clients.
- EPICS_AD_Display now sets "jca.use_env=true" before it initializes CAJ, enabling
the use of the normal EPICS environment variables.
- Build system
- Changed the build system so that the use of GraphicsMagick is optional. If the
RELEASE file defines USE_GRAPHICSMAGICK=YES then the URL driver and the NDFileMagick
plugin will be built. This makes it easy to build without GraphicsMagick, which
can be necessary when using compiler versions which are incompatible with the GraphicsMagick
libraries included with areaDetector.
- On Windows the TIFF and JPEG support comes from GraphicsMagick DLLs if USE_GRAPHICSMAGICK=YES.
To enable the use of TIFF and JPEG when GraphicsMagick is not being used the TIFF
and JPEG libraries are now also built from source code in the ADApp/tiffSupport
directory on Windows. Which version of the TIFF and JPEG library to link with is
chosen in commonDriverMakefile based on the value of USE_GRAPHICSMAGICK.
- Fixes to allow building on Darwin. Thanks to Lewis Muir for these.
- Many minor changes to avoid compiler warnings on Linux, Windows, and Darwin. The
only remaining compiler warnings come from imported packages, such as netCDF.
Release 1-8 (6-October-2012)
- Base classes
- ADDriver
- Added new parameter ADTemperatureActual and new record TemperatureActual, so that
the setpoint temperature and actual temperature are now separate parameters.
- Added 3 new values to the ADStatus_t enum: ADStatusInitializing, ADStatusDisconnected,
and ADStatusAborted.
- NDArray
- The documented behavior of the maxBuffers and maxMemory arguments to the constructor
has been changed. Previously the value -1 was documented to indicate "unlimited".
- However, these arguments have type size_t, so -1 is actually not a valid value,
and in fact "unlimited" was being used if the value was < 1. The new documented
behavior is that 0 should be used to indicate "unlimited".
- Startup scripts should be modified to reflect this change, but old startup scripts
using -1 will continue to work. Example startup scripts have all been corrected.
- asynNDArrayDriver
- Added new parameters: NDPoolMaxMemory, NDPoolUsedMemory, NDPoolMaxBuffers, NDPoolAllocBuffers,
NDPoolFreeBuffers) to monitor memory and buffer usage. Thanks to Ulrik Pedersen
for this addition.
- Always create an NDArrayPool. Previously it did not create an NDArrayPool if maxMemory
and maxBuffers were both 0. 0 now means unlimited, so we need to create always.
- Drivers
- New Andor driver. Orginal version by Matt Pearson from Diamond Light Source. This
driver supports both USB and PCI cameras from Andor. It runs on 32-bit and 64-bit
Linux and 32-bit and 64-bit Windows. This driver only supports the Andor CCD cameras,
not the new Neo and Zyla sCMOS cameras. The sCMOS cameras use a new SDK library,
and will be supported in the next release.
- Perkin Elmer driver. Many new features:
- Added support for detectors with Gigabit Ethernet interfaces (e.g. model 0822).
- Added support for 64-bit Windows.
- Added support for binning. The allowed binning modes (X,Y) are (1,1), (2,2), (4,4),
(1,2), and (1,4).
- Added shutter control for EPICS shutter. Shutter opens and closes automatically
when collecting gain images or normal images, and always closes before collecting
offset images.
- Added new records (PECurrentOffsetFrame, PECurrentGainFrame) to provide operator
feedback when acquiring offset and gain images. The PEAcquireOffset and PEAcquireGain
records have been changed to "busy" records so that clients can use ca_put_callback
to wait for the operation to complete.
- Added an additional ImageMode="Average". In this mode NumImages frames are averaged
in the Perkin Elmer driver. This is useful for long acquisition times, because the
maximum acquisition time that the hardware supports in Internal trigger mode is
5 seconds. NOTE: There is a bug in the current Perkin Elmer SDK library which causes
a memory leak if the number of frames to average is 2^N (2,4,8,16, etc.) on optical
interface frame grabbers. This problem can be worked around by average a different
number of frames (7 rather than 8 for example). It will be fixed in the next release
of their SDK.
- Removed the maxSizeX, maxSizeY, and dataType arguments from the PerkinElmerConfig()
command. These values are now determined automatically. This means that startup
scripts need to be modified.
- Improved performance of driver, eliminated unneeded copying of data, reduced lines
of code by 10%.
- Demonstrated ability to stream data continuously to local disk at 15 frames/s
at 2048x2048 (120 MB/s) and 30 frames/s at 1024x1024 (60 MB/s). These tests were
done on a Windows 7 64-bit machine with 2 disk drives (SAS, 15K RPM, RAID 0).
- PSL driver.
- Added support for getting images from the camera for callbacks.
- Changes to support new version of PSL socket server syntax.
- Many improvements from testing with working detector.
- Pilatus driver. Thanks to Matt Pearson from Diamond Light Source for most of these
changes.
- Allow NumExposures > 1 in all modes. It was previously limiting NumExposures
to 1 in all modes except ExternalEnable. It is actually only very useful in ExternalEnable
mode, but we now allow it in all modes.
- Fixed bug with the driver timeout when NumExposures > 1. Previously the driver
could time out before the exposure sequence was complete.
- Improved documentation to emphasize the importance of setting AcquireTime and
AcquirePeriod correctly in ExternalEnable mode.
- New records for detector temperature and humidity, and a driver thread to poll
these values.
- Read back the actual value of the threshold.
- Read the Tau value when setting the exposure time.
- New record with TVX version number, read at startup.
- Disabled unused records from ADBase.template.
- Fixed a problem reporting a read timeout error from camserver each time an image
was acquired.
- Fixed a problem if the user aborted an acquisition twice in a row.
- Fixed thread polling for Threshold, as it wasn't working for 2M or 6M detectors.
- Added a 2s delay when aborting an acquisition, which seems to be needed to allow
camserver time to clean up in some modes.
- Improved error reporting for multi frame acqusitions, when callbacks are turned
off.
- Fixed a race condition to ensure we don't miss a stopEvent if we are doing a successful
read from camserver.
- Added an automatic stop when getting a timeout from camserver, if we got no response
(this prevents camserver and the pilatus driver getting out of sync.)
- Fixed race conditions that meant we occasionally read back the wrong ADStatus
at the end of an exposure.
- Fixed a race condition in pilatusTask, that can cause a problem reading ADStatus
if we sent a start and a stop in quick succession (before the pilatusTask thread
had time to run).
- Added support for setting cbf_template_file.
- Turned off auto reconnect on the Asyn port, to force a IOC reboot if camserver
if has been restarted.
- Fixed logic for setting the threshold, if we have auto apply turned off.
- Modified the Pilatus driver to take advantage of the new aborted state, ie. replaced
some of the ADErrors with ADStatusAborted.
- Prosilica driver. Added support for the following:
- FrameStartTriggerDelay: Delay between trigger signal and actual frame start.
- FrameStartTriggerEvent: Edge or level of signal to use for trigger.
- FrameStartTriggerOverlap: Trigger handling when the previous frame is incomplete.
- FrameStartTriggerSoftware: Software trigger when TriggerMode=Software.
- PacketSize: When connecting to the camera the driver has always automatically
found the largest packet size that the camera and IOC computer support. This new
read-only record provides the actual packet size.
- Fixed bug which arose if MinX + SizeX was greater than MaxSizeX (same for Y).
This is an invalid geometry, but their library does not return an error status,
and silently reduces SizeX. However, it has a subtle bad side-effect; subsequent
attempts to change the AcquireTime or AcquirePeriod do not return errors, but they
do not take effect until the IOC is rebooted! Fixed the problem by reducing SizeX
or SizeY if the requested region would be larger than the chip.
- Updated the support libraries to PvAPI V1.26. This means that Windows users should
install V1.26 of the Sample Viewer program so that they are running a compatible
version (V1.22) of the packet filter driver.
- Added the PvAPI library version to the report() function, to see what version
of the library the driver was built with.
- Firewire Windows driver. Added READOUT_TIME parameter. The sum of the AcquireTime
plus the READOUT_TIME controls how long to wait before a frame timeout occurs. Previously
a hardcoded value of 1.0 second was used, which was too short for some slow cameras.
- URL driver. Bug fix to prevent infinite loop if there is an error reading the
image. Thanks to Wang Xiaoqiang from PSI for finding this problem.
- Simulation driver. Improvements in handling of ADStatus and ADStatusMessage, support
new ADStatusAborted status.
- Plugins
- General
- Added new records (QueueSize, QueueFree, QueueFreeLow) to monitor queue usage
by all plugins. Thanks to Ulrik Pedersen for this addition.
- Added new records (PoolMaxMem, PoolUsedMem, PoolMaxBuffers, PoolAllocBuffers,
PoolFreeBuffers, PoolUsedBuffers) to monitor memory and buffer usage by plugins
that produce NDArray outputs that other plugins attach to. Thanks to Ulrik Pedersen
for this addition.
- NDPluginFile.
- Added 2 new records, WriteStatus and WriteMessage to display status of file writing
operations. Write status is a bi record with values "WriteOK" (0) and "WriteError"
(1). WriteMessage is a waveform record containing a string with any error messages.
The NDFilePlugin base class now updates these records for each file open or file
write operation. All of the file plugin medm screens have been updated to display
these new PVs.
- Fixed bugs that caused crashes if memory allocation failed in Capture Mode.
- NDFileTIFF.
- Previously TIFF files were being written without the SampleFormat TIFF tag. This
meant that the file did not distinguish between signed and unsigned integers, and
floating point TIFF files were not supported. Some readers, notably the Python Imaging
Library (PIL), do not recognize 32-bit TIFF files unless they contain the SampleFormat
tag.
- Added the SampleFormat TIFF tag, and added support for 32-bit and 64-bit floating
point arrays. The plugin can now write TIFF files with any NDArray type (Int8, UInt8,
Int16, UInt16, Int32, UInt32, Float32, and Float64). IDL can read TIFF files with
all of these data types. ImageJ can read all except Float64. PIL can read all except
Int8, UInt32, and Float64.
- Write the timestamp of the array to a special TIFF tag. TIFF has a standard timestamp
field, but unfortunately it has to be 20 characters in a standard date/time format
so it cannot store time to sub-second precision, so a custom tag was necessary.
Thanks to Tom Cobb for this.
- Added a NULL file name pointer check.
- NDFileHDF5.
- The first change below is from Michael Davidsaver, the rest are from Ulrik Pedersen.
- Added a flag to allow building with HDF5 1.8.4 and above.
- Fixed segfault that could occur when trying to write a single frame with an uninitialised
plugin.
- Added feature to do file flushing on every Nth frame.
- Added feature to write the current hostname to the metadata in the output file.
- Changed to not close and reopen datasets for each write as this causes a crash
on windows-x64 platform when using caching in the hdf5 library -i.e. when chunking
a 3D dataset in the first (frame) dimension,
- Various fixes to reduce buildtime errors and warnings on the 64bit windows platform.
- Added HDF5 library version number to the module name string.
- Added ability to change the chunking size for columns and captured frames in addition
to the number of rows.
- Improved error handling when failing to open file, create dataset or write a frame.
- Added boundary alignment, boundary threshold, and setting istore_k parameter.
- Check for failure to create a new file.
- NDFileNexus.
- Fixed a bug which caused the plugin to crash with the example iocSimDetector/NexusTemplate.xml
template file. It could use a null object pointer in some circumstances.
- Fixed a bug which cause the plugin to use stale attributes when creating files
in Stream or Capture modes. Thanks to Kevin Peterson for this fix.
- Fixed a bug that caused it to ignore the NDArrayPort PV, so the array source could
not be changed from that in the startup script (i.e. change to ROI1, etc.).
- Increased the stack size for this plugin in iocBoot/commonPlugins.cmd, because
it was crashing with a stack overflow on windows-x64.
- NDFileNull.
- New file plugin which does not write anything. It is designed only delete the
original driver file after it has been read back in using the DeleteDriverFile support.
- NDPluginProcess
- Renamed the filter type "RecursiveSum" to "Average", which is a more accurate
description.
- Added new filter type "Sum" which is a true sum of NumFilter arrays.
- Added new bo record, AutoResetFilter. If enabled then when NumFiltered=NumFilter
the filter automatically resets. This can be very useful when using the Average
or Sum filter modes. As soon as N sums or averages have been performed the filter
resets so the next sum or average is computed.
- Added new bo record, FilterCallbacks with choices "Every array" and "Array N only".
"Every array" selects the previous behavior, where the plugin does callbacks for
every incoming array it receives. "Array N only" causes the plugin to only do callbacks
when NumFiltered=NumFilter. This can be very useful when using the Sum or Average
filter modes. Callbacks are then done only when N sums or averages have been performed.
If used with AutoResetFilter then as input arrays arrive the plugin will continually
output one summed or averaged array after every N incoming arrays.
- Improved the logic of the SaveBackground and SaveFlatField parameters. Previously
they saved the next frame received after the Save request as the background
or flat field. This behavior was not what was documented, expected or desired. The
documented behaviour is to save the current frame when the SaveBackground
or SaveFlatField is done, and the driver has been changed to do this.
- Set default values for the recursive filter coefficients in the template file
for recursive filter with scale factors of 1.0. The previous defaults were 0.0 for
all coefficients, which produced all zero output arrays. Selecting a predefined
filter did not fix this problem, because that does not set the values of OScale
and FScale.
- Fixed errors in the template file for the readback values of the filter coefficients.
They had DTYP=asynInt32, corrected to asynFloat64.
- Added new record AutoOffsetScale. Processing this record will enable Offset and
Scale calculations, and set the Offset=-min(input) and Scale=MaxScale/(max(input)-min(input)),
where MaxScale is the maximum value of the output data type. The input image will
thus be scaled to completely fill the range of the output data type. Thanks to Tom
Cobb for this addition.
- NDPluginStats
- New statistics added which give the X and Y pixel locations of the minimum and
maximum values, MinX_RBV, MinY_RBV, MaxX_RBV, MaY_RBV. Note that these are only
valid for 2-D monochromatic images. Thanks to Tom Cobb for these additions.
- Time-series arrays
- Changed code so that time series are collected internally in the plugin, rather
than using callbacks to the fastSweep device support for the mca record. This is
more efficient, and eliminates the dependence of the areaDetector module on the
mca module.
- NOTE: This change is not backwards compatible. Clients that are collecting time-series
data with the mca record will need to be modified to use the new PVs that are now
provided in this plugin.
- Time series data is now available for all basic statistics and centroid statistics.
Previously it was only available for Total, Net, and Max.
- New PVs to control time series collection and provide status on it.
- New medm screen, NDTimeSeries.adl, to display time series data.
- Fixed a bug that degraded driver performance in some circumstances. The plugin
was not releasing the lock during come computationally expensive operations, which
would cause the driver to wait when queueing the next array during a callback.
- NDPluginROI
- Added new demonstration database, NDROI_sync.template, that synchronizes an ROI
to be the size of the entire detector. This is useful when the detector binning
or readout region is changed.
- Support libraries. The static Linux support libraries provided in R1-7 were built
on a Fedora Core 9 system (gcc 4.3.0) for 32-bit linux-x86, and on a Fedora Core
14 system (gcc 4.5.1) for 64-bit linux-x86_64. Problems arose when trying to build
with these libraries or to run the pre-built binaries on older Linux systems, e.g.
those with gcc 4.1.2. These were fixed as follows:
- The Prosilica libPvAPI.a file had been taken from the AVT gcc 4.3 directory. This
was replaced with the one from the gcc 4.1 directory because the 4.3 version requires
a newer version of GLIBCXX.
- The HDF5 library had been built with the default -std=c99. This caused the function
isoc99_sscanf() to be called instead of sscanf(), and the former function does not
exist on older Linux systems. The HDF library was rebuilt with -std=gnu89 on 32-bit
and 64-bit Linux.
- libGraphicsMagic++.a on 64-bit was invoking std::_List_mode_base functions that
do not exist in earlier versions of GLIBCXX. GraphicsMagick was rebuilt on an older
Linux system (gcc 4.2.1) for 64-bit Linux.
- New host architectures, linux-x86-gcc43 and linxux-86_64-gcc42. Most libraries
and binaries for the linux-86 and linux-x86_64 architectures are now built with
gcc 4.6.3 on a 2.6.43 Linux kernel. These binaries will not run on older Linux systems
because of incompatibilities in the GCC and C run-time libraries. Binaries built
on older Linux architectures are now also provided. For 32-bits the architecture
is called linux-x86-gcc43 and is built with gcc 4.3.0 on a 2.6.27 Linux kernel.
For 64-bits the architecture is called linux-x86_64-gcc42 and is built with gcc
4.2.1 on a 2.6.27 Linux kernel. Users with older Linux systems should be able to
run one of these architectures.
- OPI files
- New medm screen, commonPlugins.adl. This screen provides an overview of the status
of all the common plugins, and allows one to enable/disable and change the asyn
source port. ADPlugins.adl which is included on all the detector medm screens now
contains an "All" button to load commonPlugins.adl.
- New directory, ADApp/op/opi, which contains CSS-BOY screens. Thanks to Erik Hanson
for providing these.
- New directory, ADApp/op/edl, which contains EDM screens. Thanks to the folks from
Diamond for providing these.
- Miscellaneous
- Fixes to commonDriverMakefile to build on Darwin (OS X).
- Removed dependence of areaDetector on the synApps mca module. The mca module was
being used only to collect time-series data of the statistics in the NDPluginStats
plugin. NDPluginStats has been changed to collect this time-series itself, using
only standard waveform records with asyn device support.
- Fixes to build on Darwin.
- Increased stack size for HDF5 plugin in commonPlugins.cmd to avoid stack overflow
on Windows.
- Fixed memory leak in constructor for paramAttribute. Thanks to Jason Abernathy
from the University of Victoria for finding this.
- Renamed netCDFSrc/include to netCDFSrc/inc to work around a bug in make 3.82 on
Cygwin.
Release 1-7 (09-August-2011)
- General
- Added support for Mac OS X (Darwin). Thanks to Eric Norum and Lewis Muir for this.
- Added support for 64-bit Windows, windows-x64.
- Replaced FTVL=UCHAR with FTVL=CHAR in all waveform records, so they can be written
to with dbpf from the IOC shell.
- Improved XML files for NDArray attributes and Nexus template files. Added a shell
script to validate XML files. Note: the attribute values for datatype
and dbrtype have been case-insensitive in the past. In the next release of areaDetector
this will be changed to require uppercase for these values. The
next release will also change the syntax of the
Attribute
element by
moving the content of the type
attribute to become the element name.
For example the line:
<Attribute name="AcquireTime" type="EPICS_PV" source="13SIM1:cam1:AcquireTime"
dbrtype="dbr_native" description="Camera acquire time"/>
must be changed to
<EPICS_PV name="AcquireTime" source="13SIM1:cam1:AcquireTime" dbrtype="DBR_NATIVE"
description="Camera acquire time"/>
and
<Attribute name="CameraManufacturer" type="PARAM" source="MANUFACTURER" datatype="string"
description="Camera manufacturer"/>
must be changed to
<PARAM name="CameraManufacturer" source="MANUFACTURER" datatype="STRING"
description="Camera manufacturer"/>
This change will make it much easier to validate the XML files. Thanks to Pete Jemian
for these changes.
- On Windows if NDFilePath has a trailing '\' then preserve it, else add a '/' character
if one is not present.
- Drivers
- New URL driver which reads images from any URL, including Web cameras and Axis
video servers. This driver uses GraphicsMagick to read the images, and can thus
handle a large number of image formats (JPEG, TIFF, PNG, etc.).
- New driver for Bruker BIS (Bruker Instrument Service) detectors. There was a preliminary
version of this driver in the apex2Src directory in R1-6. It is now fully functional.
and should work with any BIS detector, not just the Apex2.
- New driver for Photonic Sciences Ltd. (PSL) detectors. This driver currently can
do everything except read the data back from the detector. That capability needs
to be added, which requires access to a PSL detector for development and testing.
- Simulation driver. Added additional simulation mode for Gaussian peaks. John Hammonds
added this feature.
- Changed the setShutter() function in ADDriver.h to be a virtual function, which
it should have been all along. The base-class implementation for an EPICS shutter
is now used by default. Changed the drivers to use the virtual function.
- Initialized ADAcquire to 0 in ADDriver::ADDriver. In R1-6 ADAcquire was not initialized,
and if it had a non-zero value at iocInit then the IOC could crash with some drivers,
e.g. simDetector.
- Pilatus driver.
- Added support for camserver saving data in the CBF file format, which is ~4X smaller
than TIFF, and for additional header information in the files for crystallography.
Thanks to Lewis Muir for these additions.
- Set FullFilename_RBV for each file in a multi-image sequence, which was not previously
being done.
- Several changes from Emma Shepherd at DLS to improve error handling.
- Added GapFill record to control what value camserver puts in the data files in
the gaps between modules in multi-element Pilatus detectors.
- Added ThresholdAutoApply and ThresholdApply records. These allow only sending
the gain and threshold energy once to camserver, rather than each time either is
changed. This can speed operations significantly on larger detectors. For example,
on the 6M it takes 78 seconds for camserver to execute the SetThreshold command.
- Prosilica driver.
- Added support for opening cameras by IP address or IP DNS name, in addition to
UniqueID. This allows communicating with cameras that are not on the local subnet.
The change is backwards compatible with existing iocsh startup scripts.
- Added new records PSByteRate and PSByteRate_RBV that control and read the StreamBytesPerSecond
parameter in the Prosilica PvAPI driver. This allows limiting the bandwidth that
a camera uses. It also allows operation of GigE cameras on non-Gigabit Ethernet
networks.
- Added new parameter, maxPvAPIFrames, to the prosilicaConfig command in the startup
script. This parameter controls how many frame buffers are allocated in the PvAPI
driver. This is the last parameter in the prosilicaConfig command, and if it is
absent the default value of 2 is used, which is sufficient in most circumstances.
However, with very high frame rates or busy IOCs increasing this value can reduce
dropped frames.
- Removed support for writing TIFF files using the driver library. This was a problem
because their driver uses an incompatible version of libtiff that conflicts with
the new version used by GraphicsMagick. The driver TIFF writer had no advantage
over using the NDFileTIFF and NDFileMagick plugins, which have more features and
can run in their own threads.
- Fixed a bug that could cause a blue-screen crash on Windows 7. The new version
of their library requires clearing a structure to 0 before using it.
- Send command to stop acquistion when first connecting to a camera. This fixes
a problem when connecting to CMOS cameras that were left in the acquiring state
when the IOC exited.
- Upgraded to version 1.24 of the AVT SDK, and 1.20 of the Windows filter driver.
Users should install the latest Sample Viewer and filter driver 1.20 on Windows
machines so that the areaDetector application can use the filter driver. The filter
driver version in areaDetector must match the one installed on Windows in order
to use it.
- Plugins
- NDPluginFile: Added a new record called DeleteDriverFile. This record allows the
file writing plugins to delete the "original" file that the driver created for that
array. This can be useful for detectors that must write the data to disk in order
for the areaDetector driver to read it back. Once a file-writing plugin has rewritten
the data in another format it can be desireable to then delete the original file.
The file is only deleted if the following are all true:
- The DeleteDriverFile record is "Yes".
- The file plugin has successfully written a new file.
- The array contains an attribute called "DriverFileName" that contains the full
file name of the original file. The driver attributes XML file should contain a
line like the following:
<Attribute name="DriverFileName" type="PARAM" source="FULL_FILE_NAME" datatype="string"
description="Driver file name"/>
- NDPluginFile: Added support for getting the file name and file number from array
attributes rather than from the normal EPICS PVs. Having the file information come
from the array allows the driver to control which plugin saves a particular array.
For example, there may be two file writing plugins active; the first saves the flat
field files for a tomography experiment, and the second saves the normal projections,
each streaming data to a separate file. The driver knows which files are flat fields
and which are normal projections, and adds the appropriate attributes to control
which plugin saves each array. Thanks to Ulrik Pedersen for this addition.
- NDPluginFile: Added XML Schema file (iocBoot/attributes.xsd) to allow
syntax validation of an NDArray driver attributes XML file.
- New file writing plugin, NDFileHDF5. This plugin writes HDF5 files with the native
HDF5 API, unlike the NeXus plugin which uses the NeXus API. It supports 3 types
of compression. Thanks to Ulrik Pedersen at Diamond Light Source for providing this
plugin.
- New file writing plugin, NDFileMagick. This uses GraphicsMagick to write files,
and can write in dozens of file formats, including JPEG, TIFF, PNG, PDF, etc.
- Fixed problem with NDPluginTransform. It was holding the lock while it did computationally
intensive tasks. This slowed down the driver from which the plugin was getting its
data, because the driver was forced to wait to queue the next frame until the plugin
was done processing. The new version behaves correctly, dropping frames when the
plugin cannot keep up, rather than slowing down the driver.
- NDPluginColorConvert. Added support for false color when converting 8-bit mono
to RGB1, RGB2, or RGB3. Thanks to Tom Cobb for this addition.
- NDPluginStats. Removed duplicate record for MeanValue_RBV from NDStats.template.
- NDFileNetCDF. Upgraded from netCDF 3.6.2 to netCDF 4.1.3. Fixed bug which was
causing crashes when when writing files >2GB on win32-x86. netCDF files of any size
can now be written on all platforms.
- NDFileNexus. This is now built from the NeXus source code on all platforms, rather
than including prebuilt binaries in nexusSupport. Upgraded from Nexus 4.2.0 to 4.2.1,
which fixes a stack overflow problem with the default stack size on win32-x86. Removed
support for HDF4 and XML files, only HDF5 is now supported. Thanks to Jeff Gebhardt
for initially doing this.
- NDFileNexus: Added Schematron file (iocBoot/template.sch) to allow syntax
validation of a NeXus template XML file.
- NDFileNexus: Now recognizes all current NeXus base class names (was missing some
newer base classes such as NXcollection).
- Viewers
- ImageJ EPICS_AD_Viewer. Additional sanity check in code to see if EPICS PVs are
connected, prevent dereferencing a null pointer. Thanks to Lewis Muir for this.
- Internals
- Greatly simplified the Makefiles in each driver source directory by having them
each include a common Makefile.
- Greatly simplified the dbd files in each driver source directory by having them
each include a common dbd file.
- Renamed pluginSupport.dbd to NDPluginSupport.dbd, and made individual DBD files
for each plugin to make it easy for external software to use only a subset of the
plugins.
- Removed nexusSupport directory, which had previously contained prebuilt versions
of the NeXus library, as well as prebuilt versions of the HDF5 support library.
This was replaced with a NeXusSrc directory which builds the NeXus library from
source code on all platforms. This is currently version NeXus 4.2.1. A new support
directory, hdf5Support, was added which contains the header files and prebuilt libraries
for HDF5. This is currently version 1.8.7 of HDF5.
- Use CYCGWIN_RPC_LIB variable when building on Cygwin to allow either Cygwin 1.5.x
or 1.7.x.
- Minor changes to many drivers and plugins to allow building dynamically (DLLs)
on WIN32.
- Added methods to the NDArray class to provide access to maxBuffers, numBuffers,
etc.
- Removed JPEG and TIFF libraries on win32-x86, they are not needed because the
libraries are part of GraphicsMagick.
- Changed Makefiles so they will work correctly with the -debug variant on the target
archs.
- Install ADApp/Db/*.template files as part of build process.
- Changed NDArrayPool so that it will free the memory in NDArrays in the pool to
permit allocating one with sufficient memory to satisfy an alloc() request. Thanks
to Tim Madden for the initial version of this.
Release 1-6 (20-May-2010)
- General
- Converted to be compatible with asynPortDriver in asyn R4-13, which changes parameter
handling.
- Changes to support 64-bit architectures, including linux-x86_64. This also required
changes to the synApps modules on which areaDetector applications depend (autosave,
busy, etc.)
- Changes in Makefiles to support the win32-x86-debug architecture.
- Added status parameter to indicate if the specified file path (NDFilePath) exists.
Added a record to NDFile.template and a status indicator to all medm file saving
screens.
- Append a trailing '/' character to file path (NDFilePath) if one is not present.
- Drivers
- Fixed a bug in the Roper driver. There was a buffer overflow problem in the function
that converts C strings to Windows BSTR strings. This would cause the IOC to crash
when saving SPE files with Comment PVs longer than 40 characters.
- Many fixes to Windows Firewire driver:
- Added dropped frame counter.
- Fixed timeout problem with acquire times > 1 second.
- Fixed logic when acquisition was turned off
- Fixed problem with constructor when it encountered a minor error; was causing
capture thread not to be started for some cameras.
- Implemented AcquireTime parameter, previously the time could only be changed via
a Firewire feature.
- Fixed bug when setting a feature value in non-absolute mode after it was set in
absolute mode.
- Removed the ability to change video modes, formats or rates when acquiring because
it is too complex to stop and wait for it to be done.
- Report details for all supported Firewire "features" in report() function, called
by asynReport() and dbior().
- pvCam driver. Fixed problem with exposure time being rounded to integer. Add PVs
to provide version information for software and firmware where possible. Add PVs
to provide serial numbers where possible. Perform checks on parameters that are
not available for all cameras.
- ADSC driver. Fixed a bug where it would not correctly load the per-image parameters
for the first image in a dataset if they were changed after the acquisition was
started but before the first image was taken. Added ability to write simulated data
to disk in the simulation driver.
- Pilatus driver. Increased the timeout for the SetThreshold command to camserver
from 3 seconds to 90 seconds, because it takes almost this long to execute on the
Pilatus 6M.
- marCCD driver. Added support for baseline stabilization, which is done with the
"set stability" and "get stability" remote commands. Baseline stabilization is an
extra-cost option for marCCD, so this command only has any affect if that option
is present. But all versions of marCCD understand the command remote command syntax,
so there is no problem if the option is not installed.
Changed the TwoTheta record from a stringout to ao, and this value is now always
sent with the "header" remote command. This requires that the string "theta_display_name
TwoTheta" be present in one of the marCCD configuration files that gets loaded,
typically in goniostat_none.conf or goniostat_sw.conf.
- Plugins
- NDPluginROI. Major rewrite. Previously the ROI plugin supported multiple ROIs,
performed statistics calculations, and highlighted the ROIs. The new version is
much simpler; it supports only a single ROI, and does not calculate statistics or
do highlighting. Those functions have been moved to new plugins. One new function
has been added, the ability to divide the array by a scale factor, which is useful
for avoiding overflow when binning. Fixed problem when a single color is extracted
from a color image; it now removes the unused dimension and changes the colorMode
to mono.
- NDPluginColorConvert. Added conversions from mono to RGB1, RGB2, and RGB3, and
from RGB1, RGB2, and RGB3 to mono. Previously this plugin only built on Linux and
WIN32. Now it builds and does all conversions except Bayer on all architectures.
Bayer conversion is restricted to Linux and WIN32.
- Added new NDPluginStats plugin. This plugin calculates statistics on an array.
It replaces the statistics calculations that were previously performed in the ROI
plugin. It adds new statistics, including the centroid position and width. It also
computes X and Y profiles, including average profiles, profiles at the centroid
position, and profiles at a user-defined cursor position. Thanks to Stephen Mudie
from the Australian Synchrotron, John Dobbins from Cornell, and Huijuan Xu from
Brookhaven National Lab for the initial versions of these calculations.
- Added new NDPluginProcess plugin. This plugin does arithmetic processing on arrays:
- Background subtraction.
- Flat field normalization.
- Offset and scale.
- Low and high clipping.
- Recursive filtering in the time domain.
- Conversion to a different output data type.
- Added new NDPluginOverlay plugin. This plugin adds graphic overlays to an image.
It replaces the "Highligh ROIs" function that was previously provided in the ROI
plugin. But it is much more general, and can be used to display not only ROIs, but
multiple cursors, user-defined boxes, etc.
- Example IOCs
- Greatly simplified the st.cmd and auto_settings.req files for each IOC. This was
done by creating two new files: iocBoot/commonPlugins.cmd and iocBoot/commonPlugin_settings.req.
These files define a common set of plugins that are loaded for all example IOCs.
They load all of the plugins except the NDPluginStdArrays plugin, because that plugin
needs to have its data type and waveform size matched to the specific detector.
- medm screens
- Created medm screen "components" which are used in actual screens via the "composite
file" mechanism wherever possible. This simplifies the maintenance of the medm screens
for detectors and plugins.
- Viewers
- Fixed a bug in the ImageJ EPICS_AD_Viewer.java that required restarting the plugin
if it was told to start displaying before any frames had been acquired by the IOC.
- Fixed bugs in the ImageJ EPICS_AD_Viewer.java that caused an exception when trying
to deference a null window pointer. Some of these bugs only became apparent when
running the latest version of ImageJ (1.43U) which will not work with previous releases
of EPICS_AD_Viewer.java.
- Internals
- Added new form of NDArrayPool::convert that only changed data type, does not take
dims argument.
- Added more fields to the NDArrayInfo_t structure and the NDArray::getInfo method
to simplify handling color images.
- Known problems. This release of areaDetector exposed two bugs in EPICS 3.14.11.
Links to the required patches can be found on the
EPICS 3.4.11 Known Problems page.
- The epicsThreadOnceOsd problem can cause crashes with an "assert" error on IOC
initialization on Win32 systems.
- The macLib problem can cause crashes or memory corruption when the commonPlugins.cmd
script expands lines with macros longer than 256 characters.
Release 1-5 (23-August-2009)
- General
- Added "attributes" to NDArray. Attributes are used to contain metadata about the
array. Each attribute has a name, description, datatype and value. Attributes can
be added by drivers or plugins, and travel with the array through the plugin chain,
and can ultimately be written with the array data to a file. Attributes can come
from driver or plugin parameters, or from EPICS PVs anywhere on the network.
- Separated parameters and functions which are general to NDArray data (asynNDArrayDriver
base class) from those which are specific to areaDetector data (ADDriver base class).
This makes it easy and clean to use asynNDArray driver for future applications beyond
areaDetector, such as drivers for the XIA xMAP digital spectroscopy system.
- Drivers
- New driver for mar345 online image plate detector. This driver communicates via
a TCP/IP socket with the mar345dtb program, which must be used to control the detector.
- New driver for Firewire IIDC/DCAM cameras under Windows. This driver uses the
Windows 1394 camera driver from Carnegie Mellon University.
- New driver for the Perkin-Elmer amorphous silicon flat panel detectors. Thanks
to Brian Tieman and John Hammonds for this driver.
- New driver for the Roper Scientific detectors using the PVCAM library. Thanks
to Brian Tieman for this driver.
- Added support for color to the simulation detector driver. It now supports color
modes Mono, RGB1, RGB2 and RGB3.
- Fixed 2 serious bugs in the Roper driver. It was not selecting ROI mode correctly.
When NumAcquisitions was > 1 it was only collecting the first frame correctly,
subsequent frames were the same as a first one. This has been isolated to a bug
in the WinView COM interface, and a workaround for the problem has been implemented.
- Solved problem of Prosilica driver crashing on Linux. The problem was with the
SIGALARM signal handlers in EPICS base (R3.14.10 and earlier). There is a patch
for base to fix this problem, and this fix will be included in EPICS base 3.14.11.
- Added an additional state, "Initializing" to DetectorState_RBV record.
- Added support for ADTriggerMode=External in marCCD driver. In this mode the AcquireTime
is not used to stop acquisition; acquisition must be stopped by external software
settings Acquire=0. The AcquireTime PV is written to the marCCD TIFF file header
as usual. This allows an external timing control of the shutter but with the actual
exposure time written to the header. Fixed minor problem with marCCD driver. If
Acquire was set to Stop when it was not acquiring then the next time acquisition
was started it would stop immediately.
- Plugins
- Changed NDPluginFile from directly supporting netCDF to be a base class from which
actual file plugins derive.
- Changed netCDF file support to be derived class inheriting from NDPluginFile.
Added support for writing NDArray attributes to the netCDF file.
- New file plugin for TIFF files. The TIFF support includes 8, 16 and 32-bit integers.
It supports monochrome and color images, including all 3 color interleave modes
(RGB1, RGB2 and RGB3. areaDetector contains all required support files to build
and run the TIFF file plugin on win32-x86, cygwin-x86 and Linux. To build on other
operating systems it is necessary to install the libtiff and libtiffstatic packages.
Thanks to John Hammonds for the initial work on this plugin.
- New file plugin for JPEG files. The JPEG support is limited to 8-bit integers,
but it supports monochrome and color images, including all 3 color interleave modes
(RGB1, RGB2 and RGB3). Control is provided for the JPEG quality (compression) on
a scale of 0 (worst) to 100 (best). areaDetector contains all required support files
to build and run the JPEG file plugin on win32-x86, cygwin-x86, and Linux. To build
on other operating systems it is necessary to install the libjpeg and libjpegstatic
packages.
- New file plugin for NeXus HDF files written by John Hammonds. The NeXus support
has not been extensively tested, and is currently limited to writing a single array
per file. Support for multiple arrays per file will be added in a future release.
areaDetector contains all required support files to build and run the NeXus file
plugin on win32-x86, cygwin-x86 and Linux. To build on other operating systems it
is necessary to install the Nexus, HDF4, HDF5, and MXML packages.
- Fixed bug in NDPluginFile: was not closing file properly when stream mode was
stopped before the requested number of frames.
- Fixed logic problem with FileNumber record in NDFile.template database. The previous
logic that kept the ao record in sync with the ai record was causing the ao record
to process when it should not have been, causing an extra call to the driver.
- Added an additional record to NDPluginBase.template, PluginType_RBV. All plugins
set this to a unique string to identify the plugin type.
- medm displays
- Added new top-level detector-specific displays for Prosilica (prosilica.adl),
Firewire (firewire.adl), and simDetector (simDetector.adl). ADBase.adl should no
longer be used for these cameras.
- Viewers
- Added new ImageJ plugin viewer. This was begun by Tim Madden from APS, and now
includes support for all NDArray data types and color modes, i.e. Mono, RGB1 (pixel
interleave), RGB2 (row interleave) and RGB3 (plane interleave). The plugin directory
includes a plugin written elsewhere for reading and writing netCDF files, so ImageJ
can be used to display images and image sequences (movies) saved with the NDFileNetCDF
plugin. It also includes a dynamic profile plugin written elsewhere for line profiles
that update in real time as new images are displayed.
- Improved IDL epics_ad_display viewer. The last image is now stored in the program,
and it is now redisplayed if the view mode is changed (TVSCL to iimage, etc.) or
if the display parameters are changed (autoscale, flip Y, minimum, maximum, etc.).
- Documentation
- Documented the source code with comments that doxygen can process to produce HTML
documentation directly from the source. This provides documentation for each class,
as well as the class inheritance tree. Thanks to John Hammonds for starting this.
- Internals
- Moved the asynPortDriver base C++ class from the areaDetector module to the asyn
module. The asynPortDriver base class was modified slightly to make it more general.
In particular the constructor no longer hardcodes ASYN_CANBLOCK, ASYN_MULTIDEVICE,
epicsThreadPriorityMedium, and epicsThreadStackMedium. This requires that asyn R4-11
or later be used, and requires 2 additional arguments to the constructor (priority
and stackSize) for all areaDetector drivers and plugins.
- Removed mutexId from asynPortDriver base class, and added lock() and unlock()
methods. This hides the implementation of the locking, since we might want to implement
these with asynManager->lockPort in the future.
- Removed the file ADStdParams.h. Moved the definition of parameters that are general
to NDArray drivers into asynNDArrayDriver.h, and those that are specific to areaDetector
drivers into ADDriver.h.
- Added an XML parser which is used for attribute definition files.
- Fixed Makefiles to instantiate templates on vxWorks.
- Moved createFileName() from ADDriver and NDPluginDriver to their base class, asynNDArrayDriver.
- Changed colorMode and bayerPattern from being properties of NDArray to being attributes,
since they are not general to NDArray but are specific to areaDetector.
- Added new method asynPortDriver::drvUserCreateParam, which simplifies drvUserCreate
code in all drivers and plugins.
- Reduced number of files for all plugins and drivers. Previously there was an XXX.cpp,
drvXXX.h, and drvXXXEpics.c. The .h and .c files were used to keep the drivers and
plugins independent of EPICS IOC code. It was decided that that extra 2 files per
driver and plugin were not worth the added complexity. If it is desired to run drivers
and plugins outside of an IOC it could be done with conditional compilation of the
IOC dependent code, which is all at the end of the .cpp file. The iocsh commands
to create plugins have been changed from drvNDxxxConfigure to NDxxxConfigure, for
example drvNDStdArraysConfigure was changed to NDStdArraysConfigure. This requires
changes to all st.cmd files.
- Renamed a few parameters and the drvInfo strings to logically separate things
that are general to NDArrays and things that are specific to area detectors. For
example, the drvInfo fields IMAGE_SIZE_xxx were renamed to ARRAY_SIZE_xxx, and IMAGE_COUNTER
was renamed to ARRAY_COUNTER.
- Added call to epicsExit() to all driver IOC main programs. This is important for
allowing EPICS to exit cleanly. Without this on Linux it was often necessary to
kill the IOC with ^C, rather than just typing "exit".
- NDStdArrays.template had the DTYP field of the waveform record changed from asynInt$(SIZE)ArrayIn
to asyn$(TYPE)ArrayIn. This was needed to allow it to be used with asynFloat32 and
asynFloat64 data types. This requires a change to all iocBoot st.cmd files that
load this template file.
- Plugins can now add attributes to an NDArray, which means they can modify the
array and hence need to make a copy of it. This requires that NDArray->release()
must be called in the plugin itself, rather than in the NDPluginDriver base class
as was done previously.
Release 1-4 (30-January-2009)
- Added a driver for Roper Scientific (i.e. Princeton Instruments and Photometrics)
detectors. It uses the Microsoft COM interface to control the WinView or WinSpec
programs. The previous support in the "ccd" module used a Visual Basic socket server
and an SNL program to accomplish this. It was hard to maintain, because Visual Basic
changed incompatibly from one release of Visual Studio to the next, and because
it could not be built with the EPICS build system. The new driver is written in
C++, and is built entirely with the EPICS build system. It also supports more WinView
features than the ccd version, and makes the detector data available via callbacks.
This allows detector data to be displayed with EPICS clients, permits ROI or other
plugin calculations, and allows saving in other file formats if desired.
- Added support for color:
- Added NDColorMode_t and NDBayerPattern_t to NDArray.h. Added new fields colorMode
and bayerPattern to NDArray structure to indicate the color mode.
- Added new parameter ADColorMode to ADStdDriverParams.h and new record ColorMode
to ADBase.template.
- Added new parameter NDColorMode and NDBayerPattern to NDPluginBase.h and new records
ColorMode and BayerPattern to NDPluginBase.template. Added these records to all
plugin medm screens.
- Added a new plugin NDPluginColorConvert to convert colors. It currently converts
Bayer to RGB1, RGB2 or RGB3, RGB1 to RGB2 or RGB3 and RGB3 to RGB1 or RGB2.
- The Prosilica driver now supports color. It supports RGB1 and Bayer directly,
and RGB2 and RGB3 through the NDPluginColorConvert plugin.
- The NDPluginFile driver now saves the ColorMode and BayerPattern to the netCDF
files.
- Added a Viewers directory. This contains an IDL viewer for displaying images.
The viewer supports color and several different viewing modes. It can be run for
free under the IDL Virtual Machine, and should work on any platform with a version
of ezcaIDL.so or ezcaIDL.dll built with EPICS 3.14. This directory also contains
IDL class libraries for accessing areaDetector. These classes are used by the viewers,
but can also be used for other IDL applications.
- Added new parameters in ADStdDriverParams.h
- ADTemperature
- ADReadStatus
- ADImageSizeZ
- ADNumExposuresCounter
- ADColorMode
- ADPortNameSelf
- Pilatus driver
- Send the imgpath command to camserver when the ADFilePath parameter is changed.
camserver will then create directories if they do not exist, whereas specifying
a path with non-existant directories in the "exposure" or acquire commands will
not create directories.
- Prosilica driver
- Added support for color.
- Added support for the external sync in, sync out and strobe signals. The sync
signals can also be used for general-purpose digital I/O.
- Made minor changes to the code and to the build system to add support for running
the driver under Linux. There are some issues with this drivers use of SIGARLM via
Posix Timer library and EPICS signal handlers. I have made some minor modifications
to EPICS base 3.14.10 to allow the IOC to run. Prosilica is working on a new version
of their driver that should fix these issues, but it is not yet working. The prebuilt
binary version of this release of areaDetector includes the fixes to EPICS base
and does work satisfactorily.
- NDPluginROI
- Fixed bug with missing roi argument to setIntegerParam call, some parameters not
updating correctly.
- Added maxBuffers argument to constructor and to iocsh configuration command. This
was a serious oversight in the previous versions. maxROIs was being used where the
missing maxBuffers parameter should have been used. Unfortunately it requires a
new argument to the iocsh drvNDROIConfigure command, which is not backwards compatible
with previous startup scripts.
- NDArray
- Changed the NDArray::copy() methods to NDArrayPool::copy(). Previously the copy
was being allocated from the NDArrayPool of the copy source, rather than from the
caller's array pool.
- Added colorMode and bayerPattern fields to NDArray class.
- Fixed a bug in the NDArray::convertDim function that could cause an array bounds
error if a dimension was reversed.
- asynPortDriver
- Renamed the pasynUser member to pasynUserSelf. This avoids a name conflict with
the local variable pasynUser used in many derived classes. Unfortunately this requires
changes to derived class code where this->pasynUser was used.
- Added simulation code to ADSC driver. This allows it to be built and tested on
systems that do not have the ADSC hardware or software installed.
- Added $(P)$(R)AutoSave to the save/restore settings in NDFile_settings.req so
it will be restored on reboot. This requires care when using drivers such as the
Prosilica which can rapidly save very large data files, since file saving may be
resumed on reboot.
- Removed abusy record, replaced with new version of busy record from new busy module.
- Renamed ADPlugin library to NDPlugin, because it is really N-dimensional.
- Renamed marCCD library to marCCD_AD, because marCCD is already used in the ccd
module, and it conflicts. Changed marCCDSupport.dbd to marCCD_ADSupport.dbd, name
of register command, etc.
- Added PortName_RBV record to ADBase.template and NDPluginBase.template and to
all driver and plugin medm screens. This allows the user to see the asyn port name
of the driver or plugin, which is useful when switching the NDArray callback source.
- Modified the detector medm screens to contain links to the plugins that are normally
loaded for that driver, e.g. a single instance each of NDStdArrays, NDROI, NDFile
and NDColorConvert (for detectors that support color).
Release 1-3 (24-November-2008)
- Added a driver for MarCCD detectors. Compared to the previous support in the "ccd"
module, this driver uses the faster Version 1 protocol for the Mar server. It also
makes the detector data available via callbacks (by reading the TIFF files as soon
as they are written). This allows detector data to be displayed with EPICS clients,
and for ROI calculations.
- Added support for shutter control. Supports shutters that are driven directly
from the detector hardware, as well as shutters controlled by EPICS records. Shutter
support is implemented for the MarCCD, Pilatus, and simulation detectors.
- Added new methods for shutter support to the detector base class ADDriver.cpp
- ADDriver::setShutter()
- ADDriver::writeInt32
- Reorganized the file I/O parameters, template files and medm screens
- Moved the file capture parameters from NDPluginFile.h and NDPluginFile.cpp to
ADStdDriverParams.h. This allows a detector driver to use these capture parameters
if desired.
- Removed all of the file I/O records from ADBase.template and ADBase_settings.req.
These previously duplicated the records in NDFile.template and NDFile_settings.req,
which was hard to maintain. IOCs for detector drivers that can do file I/O now need
to load NDFile.template, while those that cannot no longer need to load these records.
They also need to have NDFile_settings.req added to auto_settings.req. This does
not effect the file plugin support, only drivers that directly do file I/O.
- Removed the file I/O PVs from ADBase.adl. Added a related display link to NDFile.adl.
- NDFile.adl now contains only the file related PVs, not the plugin related PVs.
The new file NDPluginFile.adl replaces the previous version of NDFile.adl, and contains
both the file PVs and the plugin PVs.
- Added new enums in ADStdDriverParams.h
- ADFrameType_t
- ADShutterMode_t
- ADFileMode_t
- Added new parameters in ADStdDriverParams.h
- ADShutterControl (replaces ADShutter)
- ADShutterControlEPICS
- ADShutterStatus
- ADShutterMode
- ADShutterOpenDelay
- ADShutterCloseDelay
- ADTimeRemaining
- ADNumImagesCounter
- ADFrameType
- ADArrayCallbacks
- ADFileWriteMode
- ADFileNumCapture
- ADFileNumCaptured
- ADFileCapture
ADArrayCallbacks can be set to 0 to disable callbacks with detector data. For the
MarCCD and Pilatus detectors setting this to 0 will disable reading the disk files
after collection. This can be used to reduce overhead when EPICS is being used just
for control, rather than to access the data.
- Added variant of NDPluginDriver::createFileName that returns the filePath and
fileName separately, rather than a complete file name including the path.
Release 1-2 (24-October-2008)
- Major update to documentation
- Significant enhancement to ROI plugin. Added net counts, ROI highlighting.
- Added driver for Pilatus detectors. This has undergone limited testing.
- Added driver for ADSC detectors (done by Lewis Muir, IMCA-CAT)
- Removed separate readback parameters in drivers and template files
- Changed from mbbi/mbbo records to bi/bo records where possible now that the asynInt32
interface supports bi/bo records.
- Internals
- Renamed asynParamBase to asynPortDriver.
- Renamed NDArrayBase to NDArrayDriver
- Renamed NDPluginBase to NDPluginDriver
- Renamed NDArrayBuff to NDArrayPool, now in NDArray.cpp.
- Renamed ADDriverBase to ADDriver
- Removed ADUtils
- The asynHandle interface in asyn was renamed to asynGenericPointer, many changes
to incorporate this.
- Base class constructor no longer initializes all asyn interfaces, only the selected
ones.
- NDArray pool is no longer global, each server creates its own pool if needed.
- Implemented real routines for writeInt32, writeFloat64, and writeOctet in asynPortDriver.cpp,
removed them from ADDriver.cpp where they were not needed.
Release 1-1 (10-May-2008)
- Major rewrite. Converted device drivers and plugins from C to C++ with C++ base
classes that handle many of the details of asyn and of callbacks and threading for
plugins.
- Everything except device drivers and top-level EPICS databases and channel access
clients are now fully N-dimensional, not restricted to 2-D.
- NDPluginFile now uses netCDF format, which is a portable self-describing binary
file format.
- Added NDPluginROI which implements region-of-interest.
Release 1-0 (11-Apr-2008)
- Initial release, still many things remaining to be done.
Suggestions and Comments to:
Mark Rivers : (rivers@cars.uchicago.edu)


|
Scheduler
|
#include <stateSpace.h>
Public Member Functions | |
| StateSpace (const StateSpace &)=delete | |
| StateSpace & | operator= (const StateSpace &)=delete |
| ~StateSpace () | |
| virtual size_t | size () |
| virtual state_t | getState () |
| virtual void | updateCurrentState () |
| virtual double | getReward () |
| virtual size_t | getNbOfDimensions () |
| virtual std::vector< size_t > * | factorize (state_t state) |
| virtual std::vector< size_t > | getDimensionSizes () |
Protected Member Functions | |
| StateSpace () | |
| void | updateInternalState () |
| int | getPriorityStateInternal () |
| StateSpace (size_t nbOfStates, size_t nbOfPriorityStates, std::vector< StateSpaceDimension * > dimensions, std::vector< PriorityState * > priorityStates) | |
| state_t | convertState (StateInternal) |
Protected Attributes | |
| size_t | nbOfStates {0} |
| size_t | nbOfPriorityStates {0} |
| std::vector< StateSpaceDimension * > | dimensions |
| std::vector< PriorityState * > | priorityStates |
| StateInternal | currentState |
| std::shared_ptr< DomainModel > | domainModel {nullptr} |
| state_t | currentExternalState {0} |
| StateInternal | internalState |
Friends | |
| class | StateSpaceBuilder |
Definition at line 29 of file stateSpace.h.
|
delete |
| StateSpace::~StateSpace | ( | ) |
Definition at line 34 of file stateSpace.cpp.
|
inlineprotected |
Definition at line 57 of file stateSpace.h.
|
protected |
Definition at line 25 of file stateSpace.cpp.
|
protected |
Definition at line 132 of file stateSpace.cpp.
|
virtual |
Returns the state as a factorized vector: one element for each dimension
Definition at line 81 of file stateSpace.cpp.
|
virtual |
Returns for each state dimension, the number of positions
Definition at line 120 of file stateSpace.cpp.
|
virtual |
Returns the number of dimensions in the state space
Definition at line 75 of file stateSpace.cpp.
|
protected |
Definition at line 150 of file stateSpace.cpp.
|
virtual |
Return the immediate reward corresponding to the current state
Reimplemented in CustomStateSpace, and CustomStateSpace.
Definition at line 166 of file stateSpace.cpp.
|
virtual |
Reimplemented in CustomStateSpace, and CustomStateSpace.
Definition at line 54 of file stateSpace.cpp.
|
delete |
|
virtual |
Reimplemented in CustomStateSpace, and CustomStateSpace.
Definition at line 160 of file stateSpace.cpp.
|
virtual |
The only reason why getState and updateCurrentState are two different functions is for performance
Reimplemented in CustomStateSpace, and CustomStateSpace.
Definition at line 59 of file stateSpace.cpp.
|
protected |
This returns the state in the part of the state space that has dimensions. If the current state is actually a priority state, this value is not the real current state.
Definition at line 42 of file stateSpace.cpp.
|
friend |
Definition at line 31 of file stateSpace.h.
|
protected |
Definition at line 76 of file stateSpace.h.
|
protected |
Definition at line 74 of file stateSpace.h.
|
protected |
Definition at line 72 of file stateSpace.h.
|
protected |
Definition at line 75 of file stateSpace.h.
|
protected |
Definition at line 78 of file stateSpace.h.
|
protected |
Definition at line 71 of file stateSpace.h.
|
protected |
Definition at line 70 of file stateSpace.h.
|
protected |
Definition at line 73 of file stateSpace.h.


ERIN BROCKOVICH (M). (Columbia Tristar) Director: Steven Soderbergh Stars: Julia Roberts, Albert Finney, Aaron Eckhart, Peter Coyote, Marg Helgenberger, Scotty Leavenworth, Gemmenner De La Penna, Cherry Jones, Tracey Walter, Dawn Didawick Running time: 131 minutes.
 But when she lands a job as a secretary in the small law firm run by Ed Masry (Oscar winning veteran Albert Finney) she eventually gains respect as the key player in a multi- million dollar law suit against a giant energy corporation.
Masry has been in the business for years and thinks he has earned a little bit of peace and quiet. He has become a little set in his ways after years of dealing with civil matters and trivial litigation. But even he finds himself actively involved when Erin discovers that a power company has, for several decades, been polluting the water supply of a small town and lying about it. Erin investigates why real estate records for the sale of houses within the town also contain private medical records. Eventually she rallies the townsfolk together in a frustrating effort to sue the power company.
It is a David versus Goliath like struggle in which the underdog eventually triumphs. Victory also enables Erin to break away from that stereotype in which most people have neatly pigeon holed her for so long. Erin Brockovich is based on a true story, and although it takes a few liberties along the way, it is, for the most part, an involving tale.
Steven Soderbergh's direction is a tad manipulative, as he takes great pains to make us feel sympathy for the small town victims of the faceless corporation's greed. There are few subtleties to be found in this film, as Soderbergh (the superb crime film Out Of Sight, etc) tends to paint everything in broad strokes. But the script, from Susannah Grant (Ever After, etc) and Soderbergh, contains plenty of winning humour and is not without its charms.
When the film explores Erin's troubled and unconventional personal life it becomes bogged down and occasionally repetitive, and many within the audience will become restless during these scenes. However, while depicting Erin's tenacious paper chase through the daunting amount of documents and legal technicalities and her patient attempts at gathering evidence, the film works a treat.
Like a few other recent films based on true stories about an unlikely triumph against the odds (The Insider, The Hurricane, etc), Erin Brockovich becomes a compelling and inspiring drama that should please audiences. Like its appealing heroine, Erin Brockovich should also effectively change a few misconceptions about Roberts' abilities.
Comfortable with roles in lightweight romantic comedies, Roberts has sometimes struggled with the demands of portraying more dramatic characters. However, she finds a role that perfectly suits her here, and delivers one of her best performances for quite some time. She delivers a warts and all characterisation of a woman unafraid to speak her mind and exploit of her sexuality in getting what she wants. Her well rounded and complex performance captures Erin's prickly nature, her hidden strengths, her driven nature, yet also hints at the vulnerability and insecurity that lies just below the surface.
Finney is also superb as her initially blustering boss, who originally underestimates his unusual new employee, but gradually grows to admire and respect Erin's ability. Aaron Eckhart (In The Company Of Men, etc) makes the most of the lesser developed role of George, the bikie who befriends Erin and her kids, but is driven away by his own inability to cope with her growing sense of confidence and assurance. The real Erin Brockovich contributes a brief cameo as a waitress in a restaurant early in the movie.
*** greg king http://www.netau.com.au/gregking
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


SC St. takes on Wilberforce
by EndPlayORANGEBURG, S.C. - Wilberforce vs. South Carolina State (1-2)
Smith-Hammond-Middleton Center, Orangeburg, South Carolina; Monday, 7 p.m. EST
BOTTOM LINE: The South Carolina State Bulldogs will be taking on the Bulldogs of NAIA member Wilberforce. South Carolina State lost 65-39 at Liberty in its most recent game.
TEAM LEADERS: Damni Applewhite has averaged 9.7 points and 6.7 rebounds to lead the way for South Carolina State. Jahmari Etienne is also a big contributor, with 11.7 points per game.AWESOME APPLEWHITE: In three appearances this season, South Carolina State's Damni Applewhite has shot 38.9 percent.
DID YOU KNOW: South Carolina State went 0-14 overall when facing out-of-conference opponents last season. The Bulldogs offense scored 63.2 points per matchup across those 14 games.
___
For more AP college basketball coverage: https://apnews.com/Collegebasketball and http://twitter.com/AP_Top25
___
This was generated by Automated Insights, http://www.automatedinsights.com/ap, using data from STATS LLC, https://www.stats.com


You can print your entire presentation e.g the slides, outline, notes and audience handouts in color, grayscale, or pure black and white. You can also print specific slides, handouts, notes pages, or outline pages.
Handouts are basically thumbnails of slides printed together on a sheet of paper such that they also provide some space next to the thumbnail for notes to be written/printed. Handouts are often printed to be sent for review to those who matter before an actual presentation is shown to an audience. During the presentation itself, Handouts can be distributed to the audience.
To get hard copy of Slides and/or Handouts, follow the given steps :-
1.Select the file which you want to print.
2.Click at the File menu Bar.
3.Click at the print option from the File Menu Bar, then the print window will appear.
4. In the "Full Page Slides"box ,click the "item" you want to print.If you select Handouts, you can then select a number of slides per page and whether the order should be horizontal or vertical. To print slides, select "Slides" from the "Print What" box.
5.Select any other options you want
6. Click Print.


val month: Month
Month of the event when the event first took place (e.g. February)
month - Month of the event when the event first took place (e.g. February)
month


First and most important, I love Jesus and I have given my life to him. I am a mother, a wife, a daughter and a grandmother (Mimi). I love to spend time with my husband, Paul, and our granddaughter, Leia.
I am also a runner. I love running marathons. I have a goal to run an ultra marathon (50+ miles). Hopefully I will have one under my belt by the time I reach 50 years old. That will be in a year and a few months.
I really hope to do well in this coding bootcamp I am currently in.


The purpose of this link generator is to help you to properly structure Branch + Tune integrated deeplinks.
Want more information on Pre-defined Events? Visit Tune's Docs on the topic.
Want more information on setting up Custom Events with Tune? Visit Tune's Docs on the topic.
Required Tune Information | |
Custom Query Parameters |


War of the Worlds cast: Who's who from Robert Carlyle to Eleanor Tomlinson
The new glossy BBC adaptation of HG Wells classic The War of the Worlds features an all-star cast including Robert Carlyle and Poldark star Eleanor Tomlinson
by Lewis Knight, https://www.mirror.co.uk/authors/lewis-knight/Who is ready for a new literary adaptation for Sunday nights on the BBC?
A new take on HG Wells classic The War of the Worlds is coming to UK screens and is set in England in 1905, as the world is about to face an alien threat.
The series primarily centres on unconventional Victorian couple Amy and George who try to defy societal mores by living together despite George already being married.
But the pair will face an even bigger fight for survival as alien life finds its way to Earth and causes unimaginable chaos.
So, who plays who's in the new BBC drama series?
War of the Worlds cast
Eleanor Tomlinson as Amy
The Poldark star plays a woman in love with a married man who becomes a social pariah, just before an alien threat arrives from Mars.
Tomlinson has also had roles in the film Colette and other television series such as The White Queen.
Rafe Spall as George
The Prometheus actor plays the part of a married journalist named George who becomes an outcast due to his adulterous new domestic situation.
Spall is best known for his roles in films such as Hot Fuzz, Shaun of the Dead, The World's End, One Day, Jurassic World: Fallen Kingdom, and The Ritual.
Rupert Graves as Frederick
The Sherlock star plays the Secretary to the British Minister for War.
Graves is best known for his roles in A Room with a View, The Madness of King George, Maurice, and The Forsythe Saga.
Nicholas Le Prevost as Chamberlain
The Father Brown star has a lead role in the series.
Harry Melling as Artilleryman
The Harry Potter star will play a military man in the series.
Best known as Dudley Dursley, Melling has also starred in The Ballad of Buster Scruggs.
Jonathan Aris as Priest
The documentary narrator plays a man of faith in the series.
Aris has voiced many series for the National Geographic Channel and has appeared in series such as Sherlock and The Night Manager.
Robert Carlyle OBE as Ogilvy
The Trainspotting star plays the pivotal role of outcast astronomer Ogilvy.
Carylye is also known for his roles in the films The Full Monty, The World Is Not Enough, Angela's Ashes, alongside roles in television series like Stargate Universe and Once Upon a Time.
The War of the Worlds airs on Sundays at 9pm on BBC One.
What do you think of the BBC adaptation of The War of the Worlds? Let us know in the comments below.


TeeChart for JavaScript
Pie
Options
Change the animation options
Axis
From Left
From Top
From Right
From Bottom
Scale from Left
Scale from Top
Each Point
All Points
Zoom in
Zoom out
100 msec
250 msec
500 msec
1 second
2 seconds
5 seconds
Linear
Exponential
Fade:
In
Out
In-Out
Out-In
Loop
Fade-in Line Animation
Animate
This browser does not seem to support HTML5 Canvas.
Fade-in Horizontal Bar Animation
Animate
Fade-in Pie Animation
Animate


{% extends 'employer/base/base.html' %} {% load class_name %} {% load staticfiles %} {% load crispy_forms_tags %} {% block body %} Explore Thousand Of Jobs With Just Simple Search... {% for job in object_list %} {{ job.job_title }} {{ job.category }} / {{ job.job_description }} {{ job.job_type.name }} {{ job.location }} APPLY NOW {% endfor %} View More


Dreams bucketlist
Welcome to Dreams bucketlist! Create a list of your dreams and knock them off one by one!


This small, pleasant yacht haven is north of the commercial port, about 6km from the city centre. It is administered by the yacht club there and has all facilities, including a good restaurant. No fuel. Shops, provisions and banks are close by.
It is advisable to call ahead. To berth at Kalkbraedrihavnen, after entering the harbour, ignore the large harbour to sta'board and continue past Nordhavn. The canal is ahead and the visitors' berth are to port, just after the bend.
Lat 55deg 41'.3N, Long 12deg 37'.1E
700 moorings with boatyard facilities and marine engineers. Slip and motorised crane, fuel and chandlery. Clubhouse with restaurant/bar, showers and laundrette.
Frequent bus service (No 8) to Copenhagen central railway station and Copenhagen International Airport.
S/I Ishoj Havn
Havnekontoret - Søhesten 3 B
, 2635 Ishoj
, Denmark
Sailing and yacht club with excellent facilities. Mooring is bow-on. Fuel, water, gaz, chandlery and bike hire. Travel to downtown Copenhagen via the #40 bus (very near the marina and runs once per hour) or by ferry (15 minute walk but frequent service).
Opening hours: Tues- Thurs 0900-1500 and Fri 0900-1400
Originally the commercial harbour for the Tuborg brewery. A full facility marina; electricity, water, showers, WiFi, fuel. Depths 3-5.5m.
Visitors should tie up on the pier near the restaurant or go alongside on the pier located to port as you enter the harbour. All visitor berths have green signs. BBQ grill area and swimming jetty available with beach nearby.
Tuborg Harbour is also the head office for the Royal Danish Yacht Club, the oldest yacht club in Denmark founded in 1866.
Bus to Copenhagen takes 15 minutes from Waterfront Centre where all shopping can be found.
Bikes available to borrow in the harbour.
This small, pleasant yacht haven is north of the commercial port, about 6km from the city centre. It is administered by the yacht club there and has all facilities, including a good restaurant. No fuel. Shops, provisions and banks are close by.
Lat 55deg 41'.3N, Long 12deg 37'.1E
700 moorings with boatyard facilities and marine engineers. Slip and motorised crane, fuel and chandlery. Clubhouse with restaurant/bar, showers and laundrette.
Frequent bus service (No 8) to Copenhagen central railway station and Copenhagen International Airport.
Opening hours: Tues- Thurs 0900-1500 and Fri 0900-1400
Originally the commercial harbour for the Tuborg brewery. A full facility marina; electricity, water, showers, WiFi, fuel. Depths 3-5.5m.
Visitors should tie up on the pier near the restaurant or go alongside on the pier located to port as you enter the harbour. All visitor berths have green signs. BBQ grill area and swimming jetty available with beach nearby.
Tuborg Harbour is also the head office for the Royal Danish Yacht Club, the oldest yacht club in Denmark founded in 1866.
Bus to Copenhagen takes 15 minutes from Waterfront Centre where all shopping can be found.
Bikes available to borrow in the harbour.


${1:“There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.”}
${2:Jeff Atwood}


Effective Tax Rates in Minnesota
| Income | Percent of Total Household Income | Ind Income Tax | State Sales Tax Total | Total Residential Local Property Taxes | Total State and Local Taxes |
|---|---|---|---|---|---|
| $11,298 & under | 0.87% | -1.6% | 10.4% | 10.2% | 30.5% |
| $11,299 - $18,732 | 2.00% | -0.8% | 5.2% | 3.8% | 12.1% |
| $18,733 - $26,788 | 3.00% | 0.2% | 4.0% | 3.5% | 11.0% |
| $26,789 - $35,561 | 4.12% | 1.3% | 3.4% | 3.7% | 11.6% |
| $35,562 - $46,044 | 5.38% | 2.5% | 3.0% | 3.5% | 12.1% |
| $46,045 - $59,437 | 5.38% | 3.1% | 2.7% | 3.3% | 12.1% |
| $59,438 - $76,276 | 8.97% | 3.5% | 2.5% | 3.1% | 12.1% |
| $76,277 - $99,386 | 11.58% | 4.1% | 2.3% | 3.0% | 12.3% |
| $99,387 - $142,225 | 15.59% | 4.5% | 2.1% | 2.6% | 11.9% |
| $142,226 & over | 41.47% | 5.4% | 1.5% | 1.7% | 10.4% |
| $200,907 & over (top 5%) | 30.44% | 5.6% | 1.4% | 1.4% | 10.1% |
| $472,626 & over (top 1%) | 15.60% | 6.0% | 1.2% | 1.0% | 9.7% |
Projected 2013 Effective Tax Rates by Population Deciles for Minnesota. Projected 2013 data from the 2011 Minnesota Tax Incidence Study. Total projected household income is $198,138,396,000. Each row represents 10 percent of the households in Minnesota unless otherwise noted.


| dplyr_extending {dplyr} | R Documentation |
These three functions, along with names<-
and 1d numeric [
(i.e. x[loc]
) methods, provide a minimal interface for extending dplyr
to work with new data frame subclasses. This means that for simple cases
you should only need to provide a couple of methods, rather than a method
for every dplyr verb.
These functions are a stop-gap measure until we figure out how to solve the problem more generally, but it's likely that any code you write to implement them will find a home in what comes next.
dplyr_row_slice(data, i, ...) dplyr_col_modify(data, cols) dplyr_reconstruct(data, template)
data |
A tibble. We use tibbles because they avoid some inconsistent subset-assignment use cases |
i |
A numeric or logical vector that indexes the rows of |
cols |
A named list used modify columns. A |
template |
Template to use for restoring attributes |
This section gives you basic advice if you want to extend dplyr to work with your custom data frame subclass, and you want the dplyr methods to behave in basically the same way.
If you have data frame attributes that don't depend on the rows or columns (and should unconditionally be preserved), you don't need to do anything.
If you have scalar attributes that depend on rows, implement a
dplyr_reconstruct()
method. Your method should recompute the attribute
depending on rows now present.
If you have scalar attributes that depend on columns, implement a
dplyr_reconstruct()
method and a 1d [
method. For example, if your
class requires that certain columns be present, your method should return
a data.frame or tibble when those columns are removed.
If your attributes are vectorised over rows, implement a
dplyr_row_slice()
method. This gives you access to i
so you can
modify the row attribute accordingly. You'll also need to think carefully
about how to recompute the attribute in dplyr_reconstruct()
, and
you will need to carefully verify the behaviour of each verb, and provide
additional methods as needed.
If your attributes that are vectorised over columns, implement
dplyr_col_modify()
, 1d [
, and names<-
methods. All of these methods
know which columns are being modified, so you can update the column
attribute according. You'll also need to think carefully about how to
recompute the attribute in dplyr_reconstruct()
, and you will need to
carefully verify the behaviour of each verb, and provide additional
methods as needed.
arrange()
, filter()
, slice()
, semi_join()
, and anti_join()
work by generating a vector of row indices, and then subsetting
with dplyr_row_slice()
.
mutate()
generates a list of new column value (using NULL
to indicate
when columns should be deleted), then passes that to dplyr_col_modify()
.
transmute()
does the same then uses 1d [
to select the columns.
summarise()
works similarly to mutate()
but the data modified by
dplyr_col_modify()
comes from group_data()
.
select()
uses 1d [
to select columns, then names<-
to rename them.
rename()
just uses names<-
. relocate()
just uses 1d [
.
inner_join()
, left_join()
, right_join()
, and full_join()
coerces x
to a tibble, modify the rows, then uses dplyr_reconstruct()
to convert back to the same type as x
.
nest_join()
uses dplyr_col_modify()
to cast the key variables to
common type and add the nested-df that y
becomes.
distinct()
does a mutate()
if any expressions are present, then
uses 1d [
to select variables to keep, then dplyr_row_slice()
to
select distinct rows.
Note that group_by()
and ungroup()
don't use any these generics and
you'll need to provide methods directly.


SimpleSolar
Home
Hey
Earth dweller!
Welcome!
Is your solar panel as big as a piece of this? or twice or half?
Select Your solar panel manufacturer
Product Manufacturer
Sunpower
LG Electronics
SunEdison
First-Solar
TopSCN
SchucoUSA
Proceed to select appliances


FORM WIZARD
1
First Name
Last Name
2
Email Address
Password
3
Subject
Your Subject
Finance
Marketing
IT Support
Comment


Keep the process running even if the build has finished.
Example: keepRunning { sh '/usr/local/apache-tomact/bin/startup.sh }
keepRunning { sh '/usr/local/apache-tomact/bin/startup.sh }


{% macro getPitch(pitches) %} {% if pitches %} {% for pitch in pitches %}
{{pitch.post}}
Posted on: {{pitch.time}}
No posts yet in this category


Email : {{email}}
Address: {{address.street}}, {{address.city}}, {{address.state}}
{{showHobbies ? "Hide Hobbies" : "Show Hobbies" }}
Hobbies:
{{details.id}}
{{details.title}}
{{details.body}}


Margaret Cabourn-Smith (born 1975[ref]) has appeared in 39 episodes between 2011-2017. Margaret Cabourn-Smith on IMDB. Margaret Cabourn-Smith on Wikipedia. Margaret Cabourn-Smith on Chortle.


Used to describe a function with a volatile cv-qualifier.
The <cxxFunctionVolatile> element is present when the function has a volatile cv-qualifier . The two mandatory attributes name and value both have the value “volatile”.
See ISO/IEC 14882:2003(E) <IP_ADDRESS> The cv-qualifiers [dcl.type.cv]
Given this code:
struct X { void g() volatile; };
Then function g would have the cxxFunctionVolatile element:
<cxxFunctionVolatile />
If the mandatory attributes are present they must be set thus:
<cxxFunctionVolatile name="volatile" value="volatile" />


SubscribeACK Struct Reference
#include <dji_error.hpp>
Static Public Attributes | |
| static const uint8_t | SUCCESS |
| static const uint8_t | ILLEGAL_INPUT |
| static const uint8_t | VERSION_DOES_NOT_MATCH |
| static const uint8_t | PACKAGE_OUT_OF_RANGE |
| static const uint8_t | PACKAGE_ALREADY_EXISTS |
| static const uint8_t | PACKAGE_DOES_NOT_EXIST |
| static const uint8_t | ILLEGAL_FREQUENCY |
| static const uint8_t | PACKAGE_TOO_LARGE |
| static const uint8_t | PIPELINE_OVERFLOW |
| static const uint8_t | INTERNAL_ERROR_0X09 |
| static const uint8_t | PACKAGE_EMPTY |
| static const uint8_t | INPUT_SEGMENTATION_FAULT |
| static const uint8_t | ILLEGAL_UID |
| static const uint8_t | PERMISSION_DENY |
| static const uint8_t | MULTIPLE_SUBSCRIBE |
| static const uint8_t | SOUCE_DEVICE_OFFLINE |
| static const uint8_t | PAUSED |
| static const uint8_t | RESUMED |
| static const uint8_t | INTERNAL_ERROR_0X4A |
| static const uint8_t | INTERNAL_ERROR_0X50 |
| static const uint8_t | VERSION_VERSION_TOO_FAR |
| static const uint8_t | VERSION_UNKNOWN_ERROR |
| static const uint8_t | INTERNAL_ERROR_0XFF |
Detailed Description
- Note
- New in 3.3 release
CMDSet: Subscribe
Member Data Documentation
|
static |
Discovered during database version verification with wrong versions
The documentation for this struct was generated from the following file:
- osdk-core/api/inc/dji_error.hpp


[[In order to sign in, please enter your user name, login and e-mail address]] [[User name]]: [[Login]]: [[e-mail]]:


JavaScript Practice Problems - W3Resource - Basic
Problem 1
Write a JavaScript program to display the current day and time.
Solution Output


TcSymbols are indexable, in case they are structured types, and can nest children TcSymbols
.
Alternatively, if a TcSymbol
has Rpc Methods enabled, this methods can be also invoked over
the index.
NOTE: In order to avoid naming collisions with the Symbols declared in the Target PLC, all public
methods of TcSymbol
start with the '$' character.
The TcSymbol
should not be directly created, as it serves as a Template for the Derived TcSymbols
Constructs the foundation of a TcSymbol
Object
The Path of this Symbol, relative to its origin point
Potential parent of this TcSymbol
and to whom events will propagate to
Flag which marks this TcSymbol
as a ReadOnly symbol, and no operation of write-type can be issued to the TcSymbol
If enabled, will produce debug information
Access the TcBinding
information of this TcSymbol
Returns the value of this TcSymbol
from the Target PLC Symbol,
which the TcSymbol.$binding
is linked to.
Access the potential parent of this TcSymbol
Access the path of this TcSymbol
from its origin point
Returns true if this TcSymbol
is ReadOnly
Clears the data of the Target PLC Symbol to their implicit default values, or the explicitly specified ones
Removes a listener from the specified event
The event name, from which the listener is to be removed
The listener, which is to be removed from the specified event
Attached a listener to an event, which is only invoked once. For the full list
of events, see TcSymbol.$on()
The event name, which the listener will listen for
The listener, which is called when the event is emitted
Writes the provided value to the Target PLC Symbol, and when completed returns what was written to the Target PLC Symbol
The value that is to be written to the Target PLC Symbol
Activates value change detection of the Target PLC Symbol. The sampling rate can be explicitly set, in case the value changes uneseceraly too fast.
The speed at which change in the Target PLC Symbol value is detected
Deactivated value change detection of the Target PLC Symbol. Does not remove the event handlers though, they simply will not be invoked.
Invalidates the TcBinding
of this symbol, as well as, if a callback as provided
in case of invalidation - will invoke it
Generated using TypeDoc
Class representing an instance of a PLC Symbol, mapped to the
TcContext
. TheTcSymbol
itself acts as a bridge to theTcBinding
, which has the responsibility of low-level ADS operations.NOTE: In order to avoid naming collisions with the Symbols declared in the Target PLC, all public methods of
TcSymbol
start with the '$' character.The
TcSymbol
should not be directly created, as it serves as a Template for the DerivedTcSymbols


two friends, in love with flowers and nature, curious of scents and the memories they evoke.
we started this website for those who carry a curious nose; for those who want to explore the small wonders of nature that are condensed into every glass bottle.
ABOUT
what we do!
redolence.
/ˈred.əl.əns/
the very best of scents, redolence is the online re-imagining of alexandria's library; the digital archive of perfumes and all things that smell good. here, you can explore smells; here, you can find out your signature scent.


How could we store a list of our friends?
Mark
Lisa
Denny
What if we wanted to store a list of information? Well, we can! Arrays allow us to store a comma separated set of values. It can contain any combination of data types (numbers, booleans, strings, undefined, NaN).
View syntax example
// this will create an array with three positions
var friends = ["Mark","Lisa","Denny"];
console.log(friends);


Interactive Data Editor
A Software to interactively edit data in a graphical manner
Version 2.9.1
Developed by Koushik Naskar
Copyright © January,2022 Koushik Naskar
X
Plots
X
Y
Z
⇆
Order of polynomial
Fitted Equation
Function
Parameters List
Solve
Save
Close
Max Iterations
Initial Values
Max Values
Min Values
Damping factor
Step Size
Error Tolerance
Error gradient
Start
End
Extrapolate
Grid Spacing
Grid Number
Closest
Regression
Extend from
Extend times
Extend by
0 to
Repeat
Mirror
Condition
Fill with
Columns
>
<
=
Smoothing parameter
Apply to all column
Apply to all blocks
Smoothness
Cutoff
Save Image
X
File Name
File Type
PDF
JPEG
PNG
SVG
WEBP
Resolution
Change Value
X
Set value
Save Options
X
Use column
Format
🛈
Complete Format Specification
Developed by
Koushik Naskar


The map shows the concentration of different air components that can have negative health effects.
The colour on the map represents the health risk at that point, green indicates no health risk while red indicates a substantial health risk.
At the bottom left corner you can pick the air component you want to display such as PM10 or PM2.5.
NILU releases new data which our prediction is based off every 3 hours. Range indicates how many predictions back you want to display. For example 5 would mean 15 hours back.
This webapp is part of a bachelor's project at Oslo Metropolitan University. We were tasked with creating a tool for displaying the air quality in Oslo and this webapp was the result.
This webapp is running on IBM Cloud a cloud developement platform.
To generate this data we use the NILU public api which is also used by luftkvalitet.info.


XNG
Maker
BETA
Video
Images
XNG Player
Drop Your Images Here
You SVG File Is Ready For Download!
DOWNLOAD


A class representing the binding between two types of data in a list.
More...
|
| static IEnumerable< Tuple< T, W > > | Bind (IEnumerable< T > list1, IEnumerable< W > list2) |
| | Bind the element in list1 to the corresponding element in list2. This will only associate as many elements as are in either list. More...
|
| |
| static IEnumerable< Tuple< T, W > > | Cross (IEnumerable< T > list1, IEnumerable< W > list2) |
| | Cross the specified list1 and list2. This will return a list where every possible combination of 2 elements is returned. More...
|
| |
A class representing the binding between two types of data in a list.
Definition at line 13 of file BindingsTable.cs.
Associate the specified key and value.
- Parameters
-
| key | The key |
| value | The value |
Definition at line 63 of file BindingsTable.cs.
Associate the key with multiple values. This will put it into the structure as multiple pairs with the same key.
- Parameters
-
| key | The key to use |
| value | All of the values to use |
Definition at line 75 of file BindingsTable.cs.
Add a pre-bound list of associations to the table
- Parameters
-
| associations | The associations to add to the list |
Definition at line 86 of file BindingsTable.cs.
Bind the element in list1 to the corresponding element in list2. This will only associate as many elements as are in either list.
- Parameters
-
| list1 | The first list (keyset) |
| list2 | The second list (values) |
Definition at line 35 of file BindingsTable.cs.
Cross the specified list1 and list2. This will return a list where every possible combination of 2 elements is returned.
- Parameters
-
| list1 | The first list |
| list2 | The second list. |
Definition at line 48 of file BindingsTable.cs.
Determines whether this instance has key.
- Returns
true
if this instance has key; otherwise, false
.
- Parameters
-
Definition at line 136 of file BindingsTable.cs.
Return all of the values associated with this key
- Parameters
-
| key | The key to look up in the bindings table |
Definition at line 113 of file BindingsTable.cs.
Goes through this BindingsTable and finds the first occurence of the key, returning its value
- Returns
- The first value associated with this key
- Parameters
-
Definition at line 126 of file BindingsTable.cs.
The documentation for this class was generated from the following file: