Code Monkey home page Code Monkey logo

adandor's Introduction

areaDetector

Build Status

The top-level repository for the EPICS areaDetector software. This repository contains mostly documentation, configuration files, and a top-level Makefile to build the entire areaDetector package.

The areaDetector code is contained in submodules under this module. Four of these are "core" submodules:

  1. ADSupport. This contains the source code for support libraries (TIFF, JPEG, HDF5, XML2, etc.). This is required for Windows and vxWorks, and can optionally be used on Linux and Darwin.
  2. ADCore. This contains the base classes, plugins, and documentation.
  3. ADSimDetector. This contains an example 2-D simulation detector driver and IOC.
  4. ADViewers. This contains viewers for displaying areaDetector images in ImageJ and IDL.

All of the other submodules (ADProsilica, ADPilatus, etc.) contain drivers and EPICS IOC applications for specific detectors.

Additional information:

See the following documentation about the git submodule feature and how it can be used:

To get a clone of the full areaDetector distribution (core, plugins and drivers) do a recursive clone of this repository:

git clone --recursive https://github.com/areaDetector/areaDetector.git

adandor's People

Contributors

emiliopeju avatar hinxx avatar jerryjiahaha avatar jsouter avatar keenanlang avatar markrivers avatar mdmoo1978 avatar mp49 avatar mpdunning avatar stuwilkins avatar sudilav avatar timmmooney avatar tomtrafford avatar whs92 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

adandor's Issues

HDF plugin saves frame with fill value in single capture mode with SWMR mode on

I'm using NDFileHDF5 ver. 1.10.1 with ADCore 3.10.0 and areaDetector-master. SWMR mode is set to "on", the "flush on N'th frame" field is set to 1, and "frames cached per chunk" is set to 1. When write mode is either set to "single" or "stream" with # capture set to 1, the saved frame is filled with the "fill value" parameter. When I turn SWMR off, both the "single" and "stream" modes save a single image frame correctly, as expected. The problem goes away when >1 image is saved.

Andor camera not found

I can run vendor supplied example programs without problems. But IOC startup error shows:
andorCCD::AndorCCD camera not detected!
================================ IOC startup output==============================
../../bin/linux-x86_64/andorCCDApp st.cmd 
< envPaths
epicsEnvSet("IOC","iocAndor")
epicsEnvSet("TOP","/opt/epics/modules/synApps_6_1_epics7/support/areaDetector-R3-7/ADAndor/iocs/andorIOC")
epicsEnvSet("ADANDOR","/opt/epics/modules/synApps_6_1_epics7/support/areaDetector-R3-7/ADAndor/iocs/andorIOC/../..")
epicsEnvSet("SUPPORT","/opt/epics/base-7.0.4/../modules/synApps_6_1_epics7/support")
epicsEnvSet("ASYN","/opt/epics/base-7.0.4/../modules/synApps_6_1_epics7/support/asyn-R4-38")
epicsEnvSet("AREA_DETECTOR","/opt/epics/base-7.0.4/../modules/synApps_6_1_epics7/support/areaDetector-R3-7")
epicsEnvSet("ADSUPPORT","/opt/epics/base-7.0.4/../modules/synApps_6_1_epics7/support/areaDetector-R3-7/ADSupport")
epicsEnvSet("ADCORE","/opt/epics/base-7.0.4/../modules/synApps_6_1_epics7/support/areaDetector-R3-7/ADCore")
epicsEnvSet("AUTOSAVE","/opt/epics/base-7.0.4/../modules/synApps_6_1_epics7/support/autosave-R5-10")
epicsEnvSet("BUSY","/opt/epics/base-7.0.4/../modules/synApps_6_1_epics7/support/busy-R1-7-2")
epicsEnvSet("CALC","/opt/epics/base-7.0.4/../modules/synApps_6_1_epics7/support/calc-R3-7-4")
epicsEnvSet("SNCSEQ","/opt/epics/base-7.0.4/../modules/synApps_6_1_epics7/support/seq-2-2-7")
epicsEnvSet("SSCAN","/opt/epics/base-7.0.4/../modules/synApps_6_1_epics7/support/sscan-R2-11-3")
epicsEnvSet("DEVIOCSTATS","/opt/epics/base-7.0.4/../modules/synApps_6_1_epics7/support/iocStats-3-1-16")
epicsEnvSet("STD","/opt/epics/base-7.0.4/../modules/synApps_6_1_epics7/support/std-R3-6-1")
epicsEnvSet("EPICS_BASE","/opt/epics/base-7.0.4")
errlogInit(20000)

dbLoadDatabase("/opt/epics/modules/synApps_6_1_epics7/support/areaDetector-R3-7/ADAndor/iocs/andorIOC/dbd/andorCCDApp.dbd")
andorCCDApp_registerRecordDeviceDriver(pdbbase) 

epicsEnvSet("PREFIX", "BL7ANDOR1:")
epicsEnvSet("PORT",   "ANDOR")
epicsEnvSet("QSIZE",  "20")
epicsEnvSet("XSIZE",  "2048")
epicsEnvSet("YSIZE",  "2048")
epicsEnvSet("NCHANS", "2048")
# The maximum number of frames buffered in the NDPluginCircularBuff plugin
epicsEnvSet("CBUFFS", "500")
# The search path for database files
epicsEnvSet("EPICS_DB_INCLUDE_PATH", "/opt/epics/base-7.0.4/../modules/synApps_6_1_epics7/support/areaDetector-R3-7/ADCore/db")

# andorCCDConfig(const char *portName, const char *installPath, int cameraSerial, int shamrockID,
#                int maxBuffers, size_t maxMemory, int priority, int stackSize)
#andorCCDConfig("$(PORT)", "/usr/local/etc/andor/", 0, 0, 0, 0, 0 ,0)
# select the camera with serial number 1370
#andorCCDConfig("$(PORT)", "", 1370, 0, 0, 0, 0, 0)
# select a camera with any serial number
andorCCDConfig("ANDOR", "", 0, 0, 0, 0, 0, 0)
andorCCD:AndorCCD: initializing camera with handle 100
andorCCD:AndorCCD: initialization error for camera handle 100: 20096
2022/06/30 12:30:21.273 andorCCD::AndorCCD camera not detected!

dbLoadRecords("/opt/epics/modules/synApps_6_1_epics7/support/areaDetector-R3-7/ADAndor/iocs/andorIOC/../../db/andorCCD.template",   "P=BL7ANDOR1:,R=cam1:,PORT=ANDOR,ADDR=0,TIMEOUT=1")

# Comment out the following lines if there is no Shamrock spectrograph
#shamrockConfig(const char *portName, int shamrockId, const char *iniPath, int priority, int stackSize)
shamrockConfig("SR1", 0, "", 0, 0)
2022/06/30 12:30:21.302 shamrock:shamrock:  No Shamrock spectrographs found, numDevices=0
dbLoadRecords("/opt/epics/modules/synApps_6_1_epics7/support/areaDetector-R3-7/ADAndor/iocs/andorIOC/../../db/shamrock.template",   "P=BL7ANDOR1:,R=sham1:,PORT=SR1,TIMEOUT=1,PIXELS=1024")

# Create a standard arrays plugin
NDStdArraysConfigure("Image1", 5, 0, "ANDOR", 0, 0)
# Make NELEMENTS in the following be a little bigger than 2048*2048
# Use the following command for 32-bit images.  This is needed for 32-bit detectors or for 16-bit detectors in acccumulate mode if it would overflow 16 bits
#dbLoadRecords("$(ADCORE)/db/NDStdArrays.template", "P=$(PREFIX),R=image1:,PORT=Image1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=$(PORT),TYPE=Int32,FTVL=LONG,NELEMENTS=4200000")
# Use the following command for 16-bit images.  This can be used for 16-bit detector as long as accumulate mode would not result in 16-bit overflow
dbLoadRecords("/opt/epics/base-7.0.4/../modules/synApps_6_1_epics7/support/areaDetector-R3-7/ADCore/db/NDStdArrays.template", "P=BL7ANDOR1:,R=image1:,PORT=Image1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=ANDOR,TYPE=Int16,FTVL=SHORT,NELEMENTS=4200000")

# Load all other plugins using commonPlugins.cmd
< /opt/epics/base-7.0.4/../modules/synApps_6_1_epics7/support/areaDetector-R3-7/ADCore/iocBoot/commonPlugins.cmd
# This is an example file for creating plugins
# It uses the following environment variable macros
# Many of the parameters defined in this file are also in commonPlugins_settings.req so if autosave is being
# use the autosave value will replace the value passed to this file.

# $(PREFIX)      Prefix for all records
# $(PORT)        The port name for the detector.  In autosave.
# $(QSIZE)       The queue size for all plugins.  In autosave.
# $(XSIZE)       The maximum image width; used to set the maximum size for row profiles in the NDPluginStats plugin and 1-D FFT
#                   profiles in NDPluginFFT.
# $(YSIZE)       The maximum image height; used to set the maximum size for column profiles in the NDPluginStats plugin
# $(NCHANS)      The maximum number of time series points in the NDPluginStats, NDPluginROIStats, and NDPluginAttribute plugins
# $(CBUFFS)      The maximum number of frames buffered in the NDPluginCircularBuff plugin
# $(MAX_THREADS) The maximum number of threads for plugins which can run in multiple threads. Defaults to 5.

# Create a netCDF file saving plugin
NDFileNetCDFConfigure("FileNetCDF1", 20, 0, "ANDOR", 0)
dbLoadRecords("NDFileNetCDF.template","P=BL7ANDOR1:,R=netCDF1:,PORT=FileNetCDF1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=ANDOR")

# Create a TIFF file saving plugin
NDFileTIFFConfigure("FileTIFF1", 20, 0, "ANDOR", 0)
dbLoadRecords("NDFileTIFF.template",  "P=BL7ANDOR1:,R=TIFF1:,PORT=FileTIFF1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=ANDOR")

# Create a JPEG file saving plugin
NDFileJPEGConfigure("FileJPEG1", 20, 0, "ANDOR", 0)
dbLoadRecords("NDFileJPEG.template",  "P=BL7ANDOR1:,R=JPEG1:,PORT=FileJPEG1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=ANDOR")

# Create a NeXus file saving plugin
NDFileNexusConfigure("FileNexus1", 20, 0, "ANDOR", 0)
dbLoadRecords("NDFileNexus.template", "P=BL7ANDOR1:,R=Nexus1:,PORT=FileNexus1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=ANDOR")

# Create an HDF5 file saving plugin
NDFileHDF5Configure("FileHDF1", 20, 0, "ANDOR", 0)
dbLoadRecords("NDFileHDF5.template",  "P=BL7ANDOR1:,R=HDF1:,PORT=FileHDF1,ADDR=0,TIMEOUT=1,XMLSIZE=2048,NDARRAY_PORT=ANDOR")

# Create a Magick file saving plugin
#NDFileMagickConfigure("FileMagick1", $(QSIZE), 0, "$(PORT)", 0)
#dbLoadRecords("NDFileMagick.template","P=$(PREFIX),R=Magick1:,PORT=FileMagick1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=$(PORT)")

# Create 4 ROI plugins
NDROIConfigure("ROI1", 20, 0, "ANDOR", 0, 0, 0, 0, 0, 5)
dbLoadRecords("NDROI.template",       "P=BL7ANDOR1:,R=ROI1:,  PORT=ROI1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=ANDOR")
NDROIConfigure("ROI2", 20, 0, "ANDOR", 0, 0, 0, 0, 0, 5)
dbLoadRecords("NDROI.template",       "P=BL7ANDOR1:,R=ROI2:,  PORT=ROI2,ADDR=0,TIMEOUT=1,NDARRAY_PORT=ANDOR")
NDROIConfigure("ROI3", 20, 0, "ANDOR", 0, 0, 0, 0, 0, 5)
dbLoadRecords("NDROI.template",       "P=BL7ANDOR1:,R=ROI3:,  PORT=ROI3,ADDR=0,TIMEOUT=1,NDARRAY_PORT=ANDOR")
NDROIConfigure("ROI4", 20, 0, "ANDOR", 0, 0, 0, 0, 0, 5)
dbLoadRecords("NDROI.template",       "P=BL7ANDOR1:,R=ROI4:,  PORT=ROI4,ADDR=0,TIMEOUT=1,NDARRAY_PORT=ANDOR")

# Create 8 ROIStat plugins
NDROIStatConfigure("ROISTAT1", 20, 0, "ANDOR", 0, 8, 0, 0, 0, 0, 5)
dbLoadRecords("NDROIStat.template",   "P=BL7ANDOR1:,R=ROIStat1:  ,PORT=ROISTAT1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=ANDOR,NCHANS=2048")
dbLoadRecords("NDROIStatN.template",  "P=BL7ANDOR1:,R=ROIStat1:1:,PORT=ROISTAT1,ADDR=0,TIMEOUT=1,NCHANS=2048")
dbLoadRecords("NDROIStatN.template",  "P=BL7ANDOR1:,R=ROIStat1:2:,PORT=ROISTAT1,ADDR=1,TIMEOUT=1,NCHANS=2048")
dbLoadRecords("NDROIStatN.template",  "P=BL7ANDOR1:,R=ROIStat1:3:,PORT=ROISTAT1,ADDR=2,TIMEOUT=1,NCHANS=2048")
dbLoadRecords("NDROIStatN.template",  "P=BL7ANDOR1:,R=ROIStat1:4:,PORT=ROISTAT1,ADDR=3,TIMEOUT=1,NCHANS=2048")
dbLoadRecords("NDROIStatN.template",  "P=BL7ANDOR1:,R=ROIStat1:5:,PORT=ROISTAT1,ADDR=4,TIMEOUT=1,NCHANS=2048")
dbLoadRecords("NDROIStatN.template",  "P=BL7ANDOR1:,R=ROIStat1:6:,PORT=ROISTAT1,ADDR=5,TIMEOUT=1,NCHANS=2048")
dbLoadRecords("NDROIStatN.template",  "P=BL7ANDOR1:,R=ROIStat1:7:,PORT=ROISTAT1,ADDR=6,TIMEOUT=1,NCHANS=2048")
dbLoadRecords("NDROIStatN.template",  "P=BL7ANDOR1:,R=ROIStat1:8:,PORT=ROISTAT1,ADDR=7,TIMEOUT=1,NCHANS=2048")

# Create a processing plugin
NDProcessConfigure("PROC1", 20, 0, "ANDOR", 0, 0, 0)
dbLoadRecords("NDProcess.template",   "P=BL7ANDOR1:,R=Proc1:,  PORT=PROC1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=ANDOR")
# Create a TIFF file plugin to read dark and flatfield images into the processing plugin
NDFileTIFFConfigure("PROC1TIFF", 20, 0, "ANDOR", 0)
dbLoadRecords("NDFileTIFF.template",  "P=BL7ANDOR1:,R=Proc1:TIFF:,PORT=PROC1TIFF,ADDR=0,TIMEOUT=1,NDARRAY_PORT=ANDOR")

# Create a scatter plugin
NDScatterConfigure("SCATTER1", 20, 0, "ANDOR", 0, 0, 0)
dbLoadRecords("NDScatter.template",   "P=BL7ANDOR1:,R=Scatter1:,  PORT=SCATTER1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=ANDOR")

# Create a gather plugin with 8 ports
NDGatherConfigure("GATHER1", 20, 0, 8, 0, 0)
dbLoadRecords("NDGather.template",   "P=BL7ANDOR1:,R=Gather1:, PORT=GATHER1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=ANDOR")
dbLoadRecords("NDGatherN.template",   "P=BL7ANDOR1:,R=Gather1:, N=1, PORT=GATHER1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=ANDOR")
dbLoadRecords("NDGatherN.template",   "P=BL7ANDOR1:,R=Gather1:, N=2, PORT=GATHER1,ADDR=1,TIMEOUT=1,NDARRAY_PORT=ANDOR")
dbLoadRecords("NDGatherN.template",   "P=BL7ANDOR1:,R=Gather1:, N=3, PORT=GATHER1,ADDR=2,TIMEOUT=1,NDARRAY_PORT=ANDOR")
dbLoadRecords("NDGatherN.template",   "P=BL7ANDOR1:,R=Gather1:, N=4, PORT=GATHER1,ADDR=3,TIMEOUT=1,NDARRAY_PORT=ANDOR")
dbLoadRecords("NDGatherN.template",   "P=BL7ANDOR1:,R=Gather1:, N=5, PORT=GATHER1,ADDR=4,TIMEOUT=1,NDARRAY_PORT=ANDOR")
dbLoadRecords("NDGatherN.template",   "P=BL7ANDOR1:,R=Gather1:, N=6, PORT=GATHER1,ADDR=5,TIMEOUT=1,NDARRAY_PORT=ANDOR")
dbLoadRecords("NDGatherN.template",   "P=BL7ANDOR1:,R=Gather1:, N=7, PORT=GATHER1,ADDR=6,TIMEOUT=1,NDARRAY_PORT=ANDOR")
dbLoadRecords("NDGatherN.template",   "P=BL7ANDOR1:,R=Gather1:, N=8, PORT=GATHER1,ADDR=7,TIMEOUT=1,NDARRAY_PORT=ANDOR")

# Create 5 statistics plugins
NDStatsConfigure("STATS1", 20, 0, "ANDOR", 0, 0, 0, 0, 0, 5)
dbLoadRecords("NDStats.template",     "P=BL7ANDOR1:,R=Stats1:,  PORT=STATS1,ADDR=0,TIMEOUT=1,HIST_SIZE=256,XSIZE=2048,YSIZE=2048,NCHANS=2048,NDARRAY_PORT=ANDOR")
NDTimeSeriesConfigure("STATS1_TS", 20, 0, "STATS1", 1, 23)
dbLoadRecords("/opt/epics/base-7.0.4/../modules/synApps_6_1_epics7/support/areaDetector-R3-7/ADCore/db/NDTimeSeries.template",  "P=BL7ANDOR1:,R=Stats1:TS:, PORT=STATS1_TS,ADDR=0,TIMEOUT=1,NDARRAY_PORT=STATS1,NDARRAY_ADDR=1,NCHANS=2048,ENABLED=1")

NDStatsConfigure("STATS2", 20, 0, "ROI1",    0, 0, 0, 0, 0, 5)
dbLoadRecords("NDStats.template",     "P=BL7ANDOR1:,R=Stats2:,  PORT=STATS2,ADDR=0,TIMEOUT=1,HIST_SIZE=256,XSIZE=2048,YSIZE=2048,NCHANS=2048,NDARRAY_PORT=ANDOR")
NDTimeSeriesConfigure("STATS2_TS", 20, 0, "STATS2", 1, 23)
dbLoadRecords("/opt/epics/base-7.0.4/../modules/synApps_6_1_epics7/support/areaDetector-R3-7/ADCore/db/NDTimeSeries.template",  "P=BL7ANDOR1:,R=Stats2:TS:, PORT=STATS2_TS,ADDR=0,TIMEOUT=1,NDARRAY_PORT=STATS2,NDARRAY_ADDR=1,NCHANS=2048,ENABLED=1")

NDStatsConfigure("STATS3", 20, 0, "ROI2",    0, 0, 0, 0, 0, 5)
dbLoadRecords("NDStats.template",     "P=BL7ANDOR1:,R=Stats3:,  PORT=STATS3,ADDR=0,TIMEOUT=1,HIST_SIZE=256,XSIZE=2048,YSIZE=2048,NCHANS=2048,NDARRAY_PORT=ANDOR")
NDTimeSeriesConfigure("STATS3_TS", 20, 0, "STATS3", 1, 23)
dbLoadRecords("/opt/epics/base-7.0.4/../modules/synApps_6_1_epics7/support/areaDetector-R3-7/ADCore/db/NDTimeSeries.template",  "P=BL7ANDOR1:,R=Stats3:TS:, PORT=STATS3_TS,ADDR=0,TIMEOUT=1,NDARRAY_PORT=STATS3,NDARRAY_ADDR=1,NCHANS=2048,ENABLED=1")

NDStatsConfigure("STATS4", 20, 0, "ROI3",    0, 0, 0, 0, 0, 5)
dbLoadRecords("NDStats.template",     "P=BL7ANDOR1:,R=Stats4:,  PORT=STATS4,ADDR=0,TIMEOUT=1,HIST_SIZE=256,XSIZE=2048,YSIZE=2048,NCHANS=2048,NDARRAY_PORT=ANDOR")
NDTimeSeriesConfigure("STATS4_TS", 20, 0, "STATS4", 1, 23)
dbLoadRecords("/opt/epics/base-7.0.4/../modules/synApps_6_1_epics7/support/areaDetector-R3-7/ADCore/db/NDTimeSeries.template",  "P=BL7ANDOR1:,R=Stats4:TS:, PORT=STATS4_TS,ADDR=0,TIMEOUT=1,NDARRAY_PORT=STATS4,NDARRAY_ADDR=1,NCHANS=2048,ENABLED=1")

NDStatsConfigure("STATS5", 20, 0, "ROI4",    0, 0, 0, 0, 0, 5)
dbLoadRecords("NDStats.template",     "P=BL7ANDOR1:,R=Stats5:,  PORT=STATS5,ADDR=0,TIMEOUT=1,HIST_SIZE=256,XSIZE=2048,YSIZE=2048,NCHANS=2048,NDARRAY_PORT=ANDOR")
NDTimeSeriesConfigure("STATS5_TS", 20, 0, "STATS5", 1, 23)
dbLoadRecords("/opt/epics/base-7.0.4/../modules/synApps_6_1_epics7/support/areaDetector-R3-7/ADCore/db/NDTimeSeries.template",  "P=BL7ANDOR1:,R=Stats5:TS:, PORT=STATS5_TS,ADDR=0,TIMEOUT=1,NDARRAY_PORT=STATS5,NDARRAY_ADDR=1,NCHANS=2048,ENABLED=1")

# Create a transform plugin
NDTransformConfigure("TRANS1", 20, 0, "ANDOR", 0, 0, 0, 0, 0, 5)
dbLoadRecords("NDTransform.template", "P=BL7ANDOR1:,R=Trans1:,  PORT=TRANS1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=ANDOR")

# Create an overlay plugin with 8 overlays
NDOverlayConfigure("OVER1", 20, 0, "ANDOR", 0, 8, 0, 0, 0, 0, 5)
dbLoadRecords("NDOverlay.template", "P=BL7ANDOR1:,R=Over1:, PORT=OVER1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=ANDOR")
dbLoadRecords("NDOverlayN.template","P=BL7ANDOR1:,R=Over1:1:,NAME=ROI1,   SHAPE=1,O=Over1:,XPOS=BL7ANDOR1:ROI1:MinX_RBV,YPOS=BL7ANDOR1:ROI1:MinY_RBV,XSIZE=BL7ANDOR1:ROI1:SizeX_RBV,YSIZE=BL7ANDOR1:ROI1:SizeY_RBV,PORT=OVER1,ADDR=0,TIMEOUT=1")
dbLoadRecords("NDOverlayN.template","P=BL7ANDOR1:,R=Over1:2:,NAME=ROI2,   SHAPE=1,O=Over1:,XPOS=BL7ANDOR1:ROI2:MinX_RBV,YPOS=BL7ANDOR1:ROI2:MinY_RBV,XSIZE=BL7ANDOR1:ROI2:SizeX_RBV,YSIZE=BL7ANDOR1:ROI2:SizeY_RBV,PORT=OVER1,ADDR=1,TIMEOUT=1")
dbLoadRecords("NDOverlayN.template","P=BL7ANDOR1:,R=Over1:3:,NAME=ROI3,   SHAPE=1,O=Over1:,XPOS=BL7ANDOR1:ROI3:MinX_RBV,YPOS=BL7ANDOR1:ROI3:MinY_RBV,XSIZE=BL7ANDOR1:ROI3:SizeX_RBV,YSIZE=BL7ANDOR1:ROI3:SizeY_RBV,PORT=OVER1,ADDR=2,TIMEOUT=1")
dbLoadRecords("NDOverlayN.template","P=BL7ANDOR1:,R=Over1:4:,NAME=ROI4,   SHAPE=1,O=Over1:,XPOS=BL7ANDOR1:ROI4:MinX_RBV,YPOS=BL7ANDOR1:ROI4:MinY_RBV,XSIZE=BL7ANDOR1:ROI4:SizeX_RBV,YSIZE=BL7ANDOR1:ROI4:SizeY_RBV,PORT=OVER1,ADDR=3,TIMEOUT=1")
dbLoadRecords("NDOverlayN.template","P=BL7ANDOR1:,R=Over1:5:,NAME=Cursor1,SHAPE=1,O=Over1:,XPOS=junk,                  YPOS=junk,                  XSIZE=junk,                   YSIZE=junk,                   PORT=OVER1,ADDR=4,TIMEOUT=1")
dbLoadRecords("NDOverlayN.template","P=BL7ANDOR1:,R=Over1:6:,NAME=Cursor2,SHAPE=1,O=Over1:,XPOS=junk,                  YPOS=junk,                  XSIZE=junk,                   YSIZE=junk,                   PORT=OVER1,ADDR=5,TIMEOUT=1")
dbLoadRecords("NDOverlayN.template","P=BL7ANDOR1:,R=Over1:7:,NAME=Box1,   SHAPE=1,O=Over1:,XPOS=junk,                  YPOS=junk,                  XSIZE=junk,                   YSIZE=junk,                   PORT=OVER1,ADDR=6,TIMEOUT=1")
dbLoadRecords("NDOverlayN.template","P=BL7ANDOR1:,R=Over1:8:,NAME=Box2,   SHAPE=1,O=Over1:,XPOS=junk,                  YPOS=junk,                  XSIZE=junk,                   YSIZE=junk,                   PORT=OVER1,ADDR=7,TIMEOUT=1")

# Create 2 color conversion plugins
NDColorConvertConfigure("CC1", 20, 0, "ANDOR", 0, 0, 0, 0, 0, 5)
dbLoadRecords("NDColorConvert.template", "P=BL7ANDOR1:,R=CC1:,  PORT=CC1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=ANDOR")
NDColorConvertConfigure("CC2", 20, 0, "ANDOR", 0, 0, 0, 0, 0, 5)
dbLoadRecords("NDColorConvert.template", "P=BL7ANDOR1:,R=CC2:,  PORT=CC2,ADDR=0,TIMEOUT=1,NDARRAY_PORT=ANDOR")

# Create a circular buffer plugin
NDCircularBuffConfigure("CB1", 20, 0, "ANDOR", 0, 500, 0)
dbLoadRecords("NDCircularBuff.template", "P=BL7ANDOR1:,R=CB1:,  PORT=CB1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=ANDOR")

# Create an NDAttribute plugin with 8 attributes
NDAttrConfigure("ATTR1", 20, 0, "ANDOR", 0, 8, 0, 0, 0)
dbLoadRecords("NDAttribute.template",  "P=BL7ANDOR1:,R=Attr1:,    PORT=ATTR1,ADDR=0,TIMEOUT=1,NCHANS=2048,NDARRAY_PORT=ANDOR")
dbLoadRecords("NDAttributeN.template", "P=BL7ANDOR1:,R=Attr1:1:,  PORT=ATTR1,ADDR=0,TIMEOUT=1,NCHANS=2048")
dbLoadRecords("NDAttributeN.template", "P=BL7ANDOR1:,R=Attr1:2:,  PORT=ATTR1,ADDR=1,TIMEOUT=1,NCHANS=2048")
dbLoadRecords("NDAttributeN.template", "P=BL7ANDOR1:,R=Attr1:3:,  PORT=ATTR1,ADDR=2,TIMEOUT=1,NCHANS=2048")
dbLoadRecords("NDAttributeN.template", "P=BL7ANDOR1:,R=Attr1:4:,  PORT=ATTR1,ADDR=3,TIMEOUT=1,NCHANS=2048")
dbLoadRecords("NDAttributeN.template", "P=BL7ANDOR1:,R=Attr1:5:,  PORT=ATTR1,ADDR=4,TIMEOUT=1,NCHANS=2048")
dbLoadRecords("NDAttributeN.template", "P=BL7ANDOR1:,R=Attr1:6:,  PORT=ATTR1,ADDR=5,TIMEOUT=1,NCHANS=2048")
dbLoadRecords("NDAttributeN.template", "P=BL7ANDOR1:,R=Attr1:7:,  PORT=ATTR1,ADDR=6,TIMEOUT=1,NCHANS=2048")
dbLoadRecords("NDAttributeN.template", "P=BL7ANDOR1:,R=Attr1:8:,  PORT=ATTR1,ADDR=7,TIMEOUT=1,NCHANS=2048")
NDTimeSeriesConfigure("ATTR1_TS", 20, 0, "ATTR1", 1, 8)
dbLoadRecords("/opt/epics/base-7.0.4/../modules/synApps_6_1_epics7/support/areaDetector-R3-7/ADCore/db/NDTimeSeries.template",  "P=BL7ANDOR1:,R=Attr1:TS:, PORT=ATTR1_TS,ADDR=0,TIMEOUT=1,NDARRAY_PORT=ATTR1,NDARRAY_ADDR=1,NCHANS=2048,ENABLED=1")

# Create an FFT plugin
NDFFTConfigure("FFT1", 20, 0, "ANDOR", 0, 0, 0, 0, 0, 5)
dbLoadRecords("NDFFT.template", "P=BL7ANDOR1:, R=FFT1:, PORT=FFT1, ADDR=0, TIMEOUT=1, NDARRAY_PORT=ANDOR, NAME=FFT1, NCHANS=2048")

# Create 2 Codec plugins
NDCodecConfigure("CODEC1", 20, 0, "ANDOR", 0, 0, 0, 0, 0, 5)
dbLoadRecords("NDCodec.template", "P=BL7ANDOR1:, R=Codec1:, PORT=CODEC1, ADDR=0, TIMEOUT=1, NDARRAY_PORT=ANDOR")
NDCodecConfigure("CODEC2", 20, 0, "ANDOR", 0, 0, 0, 0, 0, 5)
dbLoadRecords("NDCodec.template", "P=BL7ANDOR1:, R=Codec2:, PORT=CODEC2, ADDR=0, TIMEOUT=1, NDARRAY_PORT=ANDOR")

set_requestfile_path("./")
set_requestfile_path("/opt/epics/base-7.0.4/../modules/synApps_6_1_epics7/support/areaDetector-R3-7/ADCore/ADApp/Db")
set_requestfile_path("/opt/epics/base-7.0.4/../modules/synApps_6_1_epics7/support/areaDetector-R3-7/ADCore/iocBoot")
set_savefile_path("./autosave")
set_pass0_restoreFile("auto_settings.sav")
set_pass1_restoreFile("auto_settings.sav")
save_restoreSet_status_prefix("BL7ANDOR1:")
dbLoadRecords("/opt/epics/base-7.0.4/../modules/synApps_6_1_epics7/support/autosave-R5-10/asApp/Db/save_restoreStatus.db", "P=BL7ANDOR1:")

# Optional: load NDPluginPva plugin
#NDPvaConfigure("PVA1", $(QSIZE), 0, "$(PORT)", 0, $(PREFIX)Pva1:Image, 0, 0, 0)
#dbLoadRecords("NDPva.template",  "P=$(PREFIX),R=Pva1:, PORT=PVA1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=$(PORT)")
# Must start PVA server if this is enabled
#startPVAServer

# Optional: load ffmpegServer plugin
#ffmpegServerConfigure(8081)
#ffmpegStreamConfigure("FfmStream1", 2, 0, "$(PORT)", 0, -1, 0)
#dbLoadRecords("$(FFMPEGSERVER)/db/ffmpegStream.template", "P=$(PREFIX),R=ffmstream1:,PORT=FfmStream1,NDARRAY_PORT=$(PORT)")
#ffmpegFileConfigure("FfmFile1", 16, 0, "$(PORT)", 0, -1, 0)
#dbLoadRecords("$(FFMPEGSERVER)/db/ffmpegFile.template", "P=$(PREFIX),R=ffmfile1:,PORT=FfmFile1,NDARRAY_PORT=$(PORT)")

# Optional: load NDPluginEdge plugin
#NDEdgeConfigure("EDGE1", $(QSIZE), 0, "$(PORT)", 0, 0, 0, 0)
#dbLoadRecords("$(ADPLUGINEDGE)/db/NDEdge.template",  "P=$(PREFIX),R=Edge1:, PORT=EDGE1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=$(PORT)")
#set_requestfile_path("$(ADPLUGINEDGE)/edgeApp/Db")

# Optional: load NDPluginCV plugin
#NDCVConfigure("CV1", $(QSIZE), 0, "$(PORT)", 0, 0, 0, 0, 0, $(MAX_THREADS=5))
#dbLoadRecords("$(ADCOMPVISION)/db/NDCV.template",  "P=$(PREFIX),R=CV1:, PORT=CV1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=$(PORT)")
#set_requestfile_path("$(ADCOMPVISION)/adcvApp/Db")

# Optional: load NDPluginBar plugin
#NDBarConfigure("BAR1", $(QSIZE), 0, "$(PORT)", 0, 0, 0, 0, 0, $(MAX_THREADS=5))
#dbLoadRecords("$(ADPLUGINBAR)/db/NDBar.template",  "P=$(PREFIX),R=Bar1:, PORT=BAR1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=$(PORT)")
#set_requestfile_path("$(ADPLUGINBAR)/barApp/Db")

# Optional: load scan records
#dbLoadRecords("$(SSCAN)/sscanApp/Db/scan.db", "P=$(PREFIX),MAXPTS1=2000,MAXPTS2=200,MAXPTS3=20,MAXPTS4=10,MAXPTSH=10")
#set_requestfile_path("$(SSCAN)/sscanApp/Db")

# Optional: load sseq record for acquisition sequence
#dbLoadRecords("$(CALC)/calcApp/Db/sseqRecord.db", "P=$(PREFIX), S=AcquireSequence")
#set_requestfile_path("$(CALC)/calcApp/Db")

# Optional: load devIocStats records (requires DEVIOCSTATS module)
#dbLoadRecords("$(DEVIOCSTATS)/db/iocAdminSoft.db", "IOC=$(PREFIX)")

# Optional: load alive record (requires ALIVE module)
#dbLoadRecords("$(ALIVE)/aliveApp/Db/alive.db", "P=$(PREFIX),RHOST=192.168.1.254")

# Set the callback queue size to 5000, up from default of 2000 in base.
# This can be needed to avoid errors "callbackRequest: cbLow ring buffer full".
callbackSetQueueSize(5000)
set_requestfile_path("/opt/epics/modules/synApps_6_1_epics7/support/areaDetector-R3-7/ADAndor/iocs/andorIOC/../../andorApp/Db")

#asynSetTraceMask("$(PORT)",0,3)
#asynSetTraceIOMask("$(PORT)",0,4)

iocInit()
Starting iocInit
############################################################################
## EPICS R7.0.4
## Rev. 2022-06-08T15:11-0700
############################################################################
![Screenshot from 2022-06-30 12-39-49](https://user-images.githubusercontent.com/15041332/176763375-30d54abc-a12a-49ae-b3d4-03c53a0a7cae.png)

No LICENSE information

There is no LICENSE file to inform the user of terms of use. Most likely overlooked when splitting out as a submodule.

Moreover, even the parent areaDetector LICENSE file has no information about the (propietary? closed-source?) atmcd{32,64}m/shamrockcif/libandor library files in andorSupport

Overhead time on image acquisition

The detector model I'm using is DW936A_BV, driver version 2.8.0, firmware ver. 14.136, SDK version 2.102.30034.0 and ADCore version 3.11.0. I am running the detector in full frame with 5MHz ADC speed. For a 1 s exposure, my "accumulate period" read back is 2.069s; from the Andor detector datasheet I'm expecting a frame rate of 0.953 fps or 1.049 s readout per frame which is not too far off the accumulate period overhead of 1.069s. When I do a callback on the acquire button and run the detector in single image mode, I see that my image acquisition time is more like 2.6s on a 1 s exposure, i.e. a 1.6 s overhead, and about 500 ms more than expected. Any insight as to why I have this overhead is appreciated, thanks.

Destuctor can hang forever if checkStatus returns an error.

We had observed that if the checkStatus() methods return an error, (eg. if the driver is uninitialised) the destructor would hang forever. We would then have to force quit the ioc. Unfortunately, at least on our systems, if the IOC has been forced quit it does not initialise properly the next time it starts up, and the ioc is unusable until it has been safely restarted. However as it is uninitialised the checkStatus methods in the destructor would again return an error so the destructor would hang and we would have to force quit the ioc.

I have added a check in the destructor in PR #37 , where if the methods return an error it won't enter the while loop as it's condition won't occur. I'm hoping that this does not interfere with the original intention of this wait functionality.

ADAcquireBusy goes to 0 before camera is really done

Sebastian Eckert reported on EPICS tech-talk:

we are using AreaDetector with an Andor IKON usb 2.0 camera. Acquisitions are triggered with a monitor on the AcquireBusy field and wait for plugins enabled which should guarantee that the camera and all connected routines are done before a new acquisition is triggered (the only active plugins are image and the HDF5). Frequently we have cases where AcquireBusy has returned already to zero after an acquisition, while the DetectorState_RBV is still 1. This condition is present for roughly 10ms.
In these cases a new trigger sets AcquireBusy to 1 while DetectorState_RBV eventually goes to zero after the completed (previous) acquisition. A fresh camera image is not taken and AcquireBusy stays 1 until aborted manually.
As a workaround, we can also monitor DetectorState_RBV to guarantee it is 0 before triggering a new acquisition.
Is this behavior expected, or should the scenario AcquireBusy=0 and DetectorState_RBV=1 not be possible?

Add support for Frame Transfer Mode, Vertical & Horizontal Shift Speed

I have a user with an iXon 897 who wants to read out their CCD at the highest possible frame rate. Andor Tech Support told us that we should enable Frame Transfer Mode and set Vertical & Horizontal Shift Speeds to the max. We tried this with Solis on Windows and it works as expected.

So I'd like to add support for these features to ADAndor, but I first wanted to see if anyone else is currently working on this. Or if anyone has any comments, please let me know.

Thanks,
Mike Dunning
SLAC

Incorrect number of parameters

The line:
static const iocshFuncDef configAndorCCD = {"andorCCDConfig", 7, andorCCDConfigArgs};
in andorCCD.cpp is in error.
The number of parameters is not 7, it is 8.
This results in the stackSize parameter being passed as unitialised data, with unpredictable consequences.

Andor SDK error with Master branch

When I use driver ver. R2-9 with the Andor SDK 2.102.30034.0 and ADCore ver. 3.12.1, I get the following errors in my IOC terminal:

2022/02/01 13:57:10.821 andorCCD:setupAcquisition: ERROR: Unknown error code=20992 returned from Andor SDK.
2022/02/01 13:57:10.821 andorCCD:writeFloat64: error, status=3 function=77, value=1.000000
2022/02/01 13:57:10.821 ANDOR1:cam1:AcquireTime devAsynFloat64::processCallbackOutput process write error
2022/02/01 13:57:10.824 andorCCD:setupAcquisition: ERROR: Unknown error code=20992 returned from Andor SDK.
2022/02/01 13:57:10.824 andorCCD:writeFloat64: error, status=3 function=78, value=0.100000
2022/02/01 13:57:10.824 ANDOR1:cam1:AcquirePeriod devAsynFloat64::processCallbackOutput process write error
2022/02/01 13:57:10.827 andorCCD:setupAcquisition: ERROR: Unknown error code=20992 returned from Andor SDK.
2022/02/01 13:57:10.827 andorCCD:writeFloat64: error, status=3 function=103, value=0.000000
2022/02/01 13:57:10.827 ANDOR1:cam1:AndorAccumulatePeriod devAsynFloat64::processCallbackOutput process write error
2022/02/01 13:57:10.830 andorCCD:setupAcquisition: ERROR: Unknown error code=20992 returned from Andor SDK.
2022/02/01 13:57:10.830 andorCCD:writeInt32: error, status=3 function=61, value=1
2022/02/01 13:57:10.830 ANDOR1:cam1:BinX devAsynInt32::processCallbackOutput process write error
2022/02/01 13:57:10.833 andorCCD:setupAcquisition: ERROR: Unknown error code=20992 returned from Andor SDK.
2022/02/01 13:57:10.833 andorCCD:writeInt32: error, status=3 function=62, value=1
2022/02/01 13:57:10.833 ANDOR1:cam1:BinY devAsynInt32::processCallbackOutput process write error
2022/02/01 13:57:10.841 andorCCD:setupAcquisition: ERROR: Unknown error code=20992 returned from Andor SDK.
2022/02/01 13:57:10.841 andorCCD:writeInt32: error, status=3 function=63, value=0

When I try to change a PV value in the MEDM window or take an image, I get the following:
epics> 2022/02/01 14:07:06.075 andorCCD:setupAcquisition: ERROR: Unknown error code=20992 returned from Andor SDK. 2022/02/01 14:07:06.076 andorCCD:writeInt32: Setup acquisition failed 2022/02/01 14:07:06.076 andorCCD:writeInt32: error, status=3 function=8, value=1
Please note that this is without applying PR #45, although when I do apply it, the result is the same.

Multiple cameras

As far as I can tell current ADAndor supports single camera only.

How big of an effort would it be to support 2 or more cameras?

If I'm not mistaken, one could not run two IOCs and have each instantiate a single ADAndor driver, as-is. The reason being that there is no way of telling a particular ADAndor instance which camera should it talk to.

The Andor SDK seems to support up to 8 cameras. I'm not sure if the way vendor envisioned the access to multiple cameras would work for us.

ADAndor: Document time units

From communication with Mark Rivers, and the hard way, I learned that ALL timings in area detector are in seconds. Please document this. May be in text, may be by setting the EU field in the database.

TemperatureActual only updates when not acquiring

I've noticed that TemperatureActual only updates when the camera is not acquiring, and also on only a 30s refresh cycle.

The relevant portion of the code seems to be here:

status = setDoubleParam(ADTemperatureActual, temperature);

Could it possible to measure TemperatureActual with this device during continuous acquisition? I'm not sure if this is a bug or needs to be a feature request.

Acquire parameter callback occurs before camera acquisition has started

Currently when you set Acquire in EPICS the callback happens before the camera has finished setting up and starting the acquisition.
At Diamond we have software which monitors the acquire PV which then believes the detector is ready for an acquisition early (and then misses external triggers).

Ikon-M not configuring shutter

I am trying to use the Andor Ikon-M USB camera with area detector ADAndor. I tried debugging this problem and placed a breakpoint in AndorCCD::setupShutter(). I found that the shutter mode value was 0 and not the 2 I configured it to be. I then configured the driver into trace mode and in the trace I found lines like this:

2019/11/19 09:51:39.618 asynPortDriver:getIntegerParam: port=ANDOR error getting parameter 81 SHUTTER_MODE, in list 0, value u\

The trace also contains other, similar, lines for other parameters. I now assume that this the root cause of my problem. I did not modify anything in the drivers parameter handling. What can this be?

I attach the full trace:
andortrace.log

andorCCD:dataTask:, Data thread is running but main thread thinks we are not acquiring.

I'm using Andor master branch with PR45, Andor sdk 2.102.30034.0. Somewhat randomly, my detector stops being able to acquire images, and the IOC outputs:

andorCCD:dataTask:, Data thread is running but main thread thinks we are not acquiring.

Usually a restart to the IOC will fix the issue. I need to test for longer, but am currently suspicious that it has to do with using PR45. I reverted back to only the master branch and will see if the issue still arises.

Problem with Ikon-M under Scientific Linux 6

Hi,

I have a problem trying to run a Andor Ikon-M on Scientific Linux 6 using the latest release of areaDetector. It appears to be halfway good as it reads back values from the camera. But it does not react to commands. I see AsynIO exceptions 3 and 7 when I try to do something to the camera and
ANDOR addr -1 queueRequest priority 0 not lockHolder messages in the EPICS log. (Attached below).
The other thing which might help to figure out what is going are the messages from dmesg when
starting the areaDetector module:

usb 1-1.2: new high speed USB device number 23 using ehci_hcd
usb 1-1.2: config 1 interface 0 altsetting 0 bulk endpoint 0x1 has invalid maxpacket 64
usb 1-1.2: New USB device found, idVendor=136e, idProduct=000c
usb 1-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
usb 1-1.2: Product: USB CAM
usb 1-1.2: Manufacturer: ANDOR
usb 1-1.2: configuration #1 chosen from 1 choice
usb 1-1.2: usbfs: interface 0 claimed by usbfs while 'startboaandor' sets config #1

Especially the queueRequest priority thing could indicate some threading issue. I am sure that the camera herself is OK because I can operate the camera OK from the same machine through another interface.

What am I doing wrong? What can I do to get to the bottom of this? Is this a known issue?

Best Regards,

            Mark Koennecke

The epics IOC log:

!/usr/local/epics/support/areaDetector24/bin/linux-x86-debug/andorCCDApp

epicsEnvSet("ARCH","linux-x86-debug")
epicsEnvSet("EPICS_BASE","/usr/local/epics")
epicsEnvSet("TOP","/usr/local/epics/support/areaDetector24")
epicsEnvSet("SSCAN","/usr/local/epics/support/sscan-2-7")
epicsEnvSet("CALC","/usr/local/epics/support/calc-3-4-1")
epicsEnvSet("ADCORE","/usr/local/epics/support/areaDetector24")
errlogInit(20000)
dbLoadDatabase("/usr/local/epics/support/areaDetector24/dbd/andorCCDApp.dbd")
andorCCDApp_registerRecordDeviceDriver(pdbbase)
epicsEnvSet("PREFIX", "SQBOA-CCD:")
epicsEnvSet("PORT", "ANDOR")
epicsEnvSet("QSIZE", "20")
epicsEnvSet("XSIZE", "1024")
epicsEnvSet("YSIZE", "1024")
epicsEnvSet("NCHANS", "1024")

andorCCDConfig(const char *portName, int maxBuffers, size_t maxMemory,

const char *installPath, int priority, int stackSize)

andorCCDConfig("ANDOR","/usr/local/etc/andor", 0, 0, 0, 0, 0)
andorCCD:AndorCCD: initializing camera
andorCCD:statusTask: Status thread started...
CCD initialized OK!
andorCCD:dataTask: Data thread started...

andorCCDConfig("$(PORT)", 0, 0, "", 0, 0)

dbLoadRecords("/usr/local/epics/support/areaDetector24/db/ADBase.template","P=SQBOA-CCD:,R=CCD:,PORT=ANDOR,ADDR=0,TIMEOUT=1")
dbLoadRecords("/usr/local/epics/support/areaDetector24/db/NDFile.template","P=SQBOA-CCD:,R=CCD:,PORT=ANDOR,ADDR=0,TIMEOUT=1")
dbLoadRecords("/usr/local/epics/support/areaDetector24/db/andorCCD.template", "P=SQBOA-CCD:,R=CCD:,PORT=ANDOR,ADDR=0,TIMEOUT=1")

Comment out the following lines on Linux or if there is no Shamrock spectrograph on Windows

shamrockConfig("SR1", 0, "")

dbLoadRecords("$(ADANDOR)/db/shamrock.template", "P=$(PREFIX),R=sham1:,PORT=SR1,TIMEOUT=1,PIXELS=1024")

Create a standard arrays plugin

NDStdArraysConfigure("Image1", 5, 0, "ANDOR", 0, 0)
dbLoadRecords("/usr/local/epics/support/areaDetector24/db/NDPluginBase.template","P=SQBOA-CCD:,R=image1:,PORT=Image1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=ANDOR,NDARRAY_ADDR=0")

Make NELEMENTS in the following be a little bigger than 2048*2048

Use the following command for 32-bit images. This is needed for 32-bit detectors or for 16-bit detectors in acccumulate mode if it would overflow 16 bits

dbLoadRecords("$(ADCORE)/db/NDStdArrays.template", "P=$(PREFIX),R=image1:,PORT=Image1,ADDR=0,TIMEOUT=1,TYPE=Int32,FTVL=LONG,NELEMENTS=4200000")

Use the following command for 16-bit images. This can be used for 16-bit detector as long as accumulate mode would not result in 16-bit overflow

dbLoadRecords("/usr/local/epics/support/areaDetector24/db/NDStdArrays.template", "P=SQBOA-CCD:,R=image1:,PORT=Image1,ADDR=0,TIMEOUT=1,TYPE=Int16,FTVL=SHORT,NELEMENTS=1050000")

Load all other plugins using commonPlugins.cmd

< /usr/local/epics/support/areaDetector24/iocBoot/commonPlugins.cmd

Create a netCDF file saving plugin.

NDFileNetCDFConfigure("FileNetCDF1", 20, 0, "ANDOR", 0)
dbLoadRecords("/usr/local/epics/support/areaDetector24/db/NDPluginBase.template","P=SQBOA-CCD:,R=netCDF1:,PORT=FileNetCDF1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=ANDOR,NDARRAY_ADDR=0")
dbLoadRecords("/usr/local/epics/support/areaDetector24/db/NDFile.template", "P=SQBOA-CCD:,R=netCDF1:,PORT=FileNetCDF1,ADDR=0,TIMEOUT=1")
dbLoadRecords("/usr/local/epics/support/areaDetector24/db/NDFileNetCDF.template","P=SQBOA-CCD:,R=netCDF1:,PORT=FileNetCDF1,ADDR=0,TIMEOUT=1")

Create a TIFF file saving plugin

NDFileTIFFConfigure("FileTIFF1", 20, 0, "ANDOR", 0)
dbLoadRecords("/usr/local/epics/support/areaDetector24/db/NDPluginBase.template","P=SQBOA-CCD:,R=TIFF1:,PORT=FileTIFF1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=ANDOR,NDARRAY_ADDR=0")
dbLoadRecords("/usr/local/epics/support/areaDetector24/db/NDFile.template", "P=SQBOA-CCD:,R=TIFF1:,PORT=FileTIFF1,ADDR=0,TIMEOUT=1")
dbLoadRecords("/usr/local/epics/support/areaDetector24/db/NDFileTIFF.template", "P=SQBOA-CCD:,R=TIFF1:,PORT=FileTIFF1,ADDR=0,TIMEOUT=1")

Create a JPEG file saving plugin

NDFileJPEGConfigure("FileJPEG1", $(QSIZE), 0, "$(PORT)", 0)

dbLoadRecords("$(ADCORE)/db/NDPluginBase.template","P=$(PREFIX),R=JPEG1:,PORT=FileJPEG1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=$(PORT),NDARRAY_ADDR=0")

dbLoadRecords("$(ADCORE)/db/NDFile.template", "P=$(PREFIX),R=JPEG1:,PORT=FileJPEG1,ADDR=0,TIMEOUT=1")

dbLoadRecords("$(ADCORE)/db/NDFileJPEG.template", "P=$(PREFIX),R=JPEG1:,PORT=FileJPEG1,ADDR=0,TIMEOUT=1")

Create a NeXus file saving plugin

NDFileNexusConfigure("FileNexus1", 20, 0, "ANDOR", 0)
dbLoadRecords("/usr/local/epics/support/areaDetector24/db/NDPluginBase.template","P=SQBOA-CCD:,R=Nexus1:,PORT=FileNexus1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=ANDOR,NDARRAY_ADDR=0")
dbLoadRecords("/usr/local/epics/support/areaDetector24/db/NDFile.template", "P=SQBOA-CCD:,R=Nexus1:,PORT=FileNexus1,ADDR=0,TIMEOUT=1")
dbLoadRecords("/usr/local/epics/support/areaDetector24/db/NDFileNexus.template", "P=SQBOA-CCD:,R=Nexus1:,PORT=FileNexus1,ADDR=0,TIMEOUT=1")

Create an HDF5 file saving plugin

NDFileHDF5Configure("FileHDF1", 20, 0, "ANDOR", 0)
dbLoadRecords("/usr/local/epics/support/areaDetector24/db/NDPluginBase.template","P=SQBOA-CCD:,R=HDF1:,PORT=FileHDF1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=ANDOR,NDARRAY_ADDR=0")
dbLoadRecords("/usr/local/epics/support/areaDetector24/db/NDFile.template", "P=SQBOA-CCD:,R=HDF1:,PORT=FileHDF1,ADDR=0,TIMEOUT=1")
dbLoadRecords("/usr/local/epics/support/areaDetector24/db/NDFileHDF5.template", "P=SQBOA-CCD:,R=HDF1:,PORT=FileHDF1,ADDR=0,TIMEOUT=1")

Create a Magick file saving plugin

NDFileMagickConfigure("FileMagick1", 20, 0, "ANDOR", 0)
dbLoadRecords("/usr/local/epics/support/areaDetector24/db/NDPluginBase.template","P=SQBOA-CCD:,R=Magick1:,PORT=FileMagick1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=ANDOR,NDARRAY_ADDR=0")
dbLoadRecords("/usr/local/epics/support/areaDetector24/db/NDFile.template", "P=SQBOA-CCD:,R=Magick1:,PORT=FileMagick1,ADDR=0,TIMEOUT=1")
dbLoadRecords("/usr/local/epics/support/areaDetector24/db/NDFileMagick.template","P=SQBOA-CCD:,R=Magick1:,PORT=FileMagick1,ADDR=0,TIMEOUT=1")

Create 4 ROI plugins

NDROIConfigure("ROI1", 20, 0, "ANDOR", 0, 0, 0)
dbLoadRecords("/usr/local/epics/support/areaDetector24/db/NDPluginBase.template","P=SQBOA-CCD:,R=ROI1:, PORT=ROI1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=ANDOR,NDARRAY_ADDR=0")
dbLoadRecords("/usr/local/epics/support/areaDetector24/db/NDROI.template", "P=SQBOA-CCD:,R=ROI1:, PORT=ROI1,ADDR=0,TIMEOUT=1")
NDROIConfigure("ROI2", 20, 0, "ANDOR", 0, 0, 0)
dbLoadRecords("/usr/local/epics/support/areaDetector24/db/NDPluginBase.template","P=SQBOA-CCD:,R=ROI2:, PORT=ROI2,ADDR=0,TIMEOUT=1,NDARRAY_PORT=ANDOR,NDARRAY_ADDR=0")
dbLoadRecords("/usr/local/epics/support/areaDetector24/db/NDROI.template", "P=SQBOA-CCD:,R=ROI2:, PORT=ROI2,ADDR=0,TIMEOUT=1")
NDROIConfigure("ROI3", 20, 0, "ANDOR", 0, 0, 0)
dbLoadRecords("/usr/local/epics/support/areaDetector24/db/NDPluginBase.template","P=SQBOA-CCD:,R=ROI3:, PORT=ROI3,ADDR=0,TIMEOUT=1,NDARRAY_PORT=ANDOR,NDARRAY_ADDR=0")
dbLoadRecords("/usr/local/epics/support/areaDetector24/db/NDROI.template", "P=SQBOA-CCD:,R=ROI3:, PORT=ROI3,ADDR=0,TIMEOUT=1")
NDROIConfigure("ROI4", 20, 0, "ANDOR", 0, 0, 0)
dbLoadRecords("/usr/local/epics/support/areaDetector24/db/NDPluginBase.template","P=SQBOA-CCD:,R=ROI4:, PORT=ROI4,ADDR=0,TIMEOUT=1,NDARRAY_PORT=ANDOR,NDARRAY_ADDR=0")
dbLoadRecords("/usr/local/epics/support/areaDetector24/db/NDROI.template", "P=SQBOA-CCD:,R=ROI4:, PORT=ROI4,ADDR=0,TIMEOUT=1")

Create a processing plugin

NDProcessConfigure("PROC1", 20, 0, "ANDOR", 0, 0, 0)
dbLoadRecords("/usr/local/epics/support/areaDetector24/db/NDPluginBase.template","P=SQBOA-CCD:,R=Proc1:, PORT=PROC1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=ANDOR,NDARRAY_ADDR=0")
dbLoadRecords("/usr/local/epics/support/areaDetector24/db/NDProcess.template", "P=SQBOA-CCD:,R=Proc1:, PORT=PROC1,ADDR=0,TIMEOUT=1")

Create 5 statistics plugins

NDStatsConfigure("STATS1", 20, 0, "ANDOR", 0, 0, 0)
dbLoadRecords("/usr/local/epics/support/areaDetector24/db/NDPluginBase.template","P=SQBOA-CCD:,R=Stats1:, PORT=STATS1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=ROI1,NDARRAY_ADDR=0")
dbLoadRecords("/usr/local/epics/support/areaDetector24/db/NDStats.template", "P=SQBOA-CCD:,R=Stats1:, PORT=STATS1,ADDR=0,TIMEOUT=1,HIST_SIZE=256,XSIZE=1024,YSIZE=1024,NCHANS=1024")
NDStatsConfigure("STATS2", 20, 0, "ROI1", 0, 0, 0)
dbLoadRecords("/usr/local/epics/support/areaDetector24/db/NDPluginBase.template","P=SQBOA-CCD:,R=Stats2:, PORT=STATS2,ADDR=0,TIMEOUT=1,NDARRAY_PORT=ROI2,NDARRAY_ADDR=0")
dbLoadRecords("/usr/local/epics/support/areaDetector24/db/NDStats.template", "P=SQBOA-CCD:,R=Stats2:, PORT=STATS2,ADDR=0,TIMEOUT=1,HIST_SIZE=256,XSIZE=1024,YSIZE=1024,NCHANS=1024")
NDStatsConfigure("STATS3", 20, 0, "ROI2", 0, 0, 0)
dbLoadRecords("/usr/local/epics/support/areaDetector24/db/NDPluginBase.template","P=SQBOA-CCD:,R=Stats3:, PORT=STATS3,ADDR=0,TIMEOUT=1,NDARRAY_PORT=ROI3,NDARRAY_ADDR=0")
dbLoadRecords("/usr/local/epics/support/areaDetector24/db/NDStats.template", "P=SQBOA-CCD:,R=Stats3:, PORT=STATS3,ADDR=0,TIMEOUT=1,HIST_SIZE=256,XSIZE=1024,YSIZE=1024,NCHANS=1024")
NDStatsConfigure("STATS4", 20, 0, "ROI3", 0, 0, 0)
dbLoadRecords("/usr/local/epics/support/areaDetector24/db/NDPluginBase.template","P=SQBOA-CCD:,R=Stats4:, PORT=STATS4,ADDR=0,TIMEOUT=1,NDARRAY_PORT=ROI4,NDARRAY_ADDR=0")
dbLoadRecords("/usr/local/epics/support/areaDetector24/db/NDStats.template", "P=SQBOA-CCD:,R=Stats4:, PORT=STATS4,ADDR=0,TIMEOUT=1,HIST_SIZE=256,XSIZE=1024,YSIZE=1024,NCHANS=1024")
NDStatsConfigure("STATS5", 20, 0, "ROI4", 0, 0, 0)
dbLoadRecords("/usr/local/epics/support/areaDetector24/db/NDPluginBase.template","P=SQBOA-CCD:,R=Stats5:, PORT=STATS5,ADDR=0,TIMEOUT=1,NDARRAY_PORT=ANDOR,NDARRAY_ADDR=0")
dbLoadRecords("/usr/local/epics/support/areaDetector24/db/NDStats.template", "P=SQBOA-CCD:,R=Stats5:, PORT=STATS5,ADDR=0,TIMEOUT=1,HIST_SIZE=256,XSIZE=1024,YSIZE=1024,NCHANS=1024")

Create a transform plugin

NDTransformConfigure("TRANS1", 20, 0, "ANDOR", 0, 0, 0)
dbLoadRecords("/usr/local/epics/support/areaDetector24/db/NDPluginBase.template","P=SQBOA-CCD:,R=Trans1:, PORT=TRANS1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=ANDOR,NDARRAY_ADDR=0")
dbLoadRecords("/usr/local/epics/support/areaDetector24/db/NDTransform.template", "P=SQBOA-CCD:,R=Trans1:, PORT=TRANS1,ADDR=0,TIMEOUT=1")

Create an overlay plugin with 8 overlays

NDOverlayConfigure("OVER1", 20, 0, "ANDOR", 0, 8, 0, 0)
dbLoadRecords("/usr/local/epics/support/areaDetector24/db/NDPluginBase.template","P=SQBOA-CCD:,R=Over1:, PORT=OVER1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=ANDOR,NDARRAY_ADDR=0")
dbLoadRecords("/usr/local/epics/support/areaDetector24/db/NDOverlay.template", "P=SQBOA-CCD:,R=Over1:, PORT=OVER1,ADDR=0,TIMEOUT=1")
dbLoadRecords("/usr/local/epics/support/areaDetector24/db/NDOverlayN.template","P=SQBOA-CCD:,R=Over1:1:,NAME=ROI1, SHAPE=1,O=Over1:,XPOS=SQBOA-CCD:ROI1:MinX_RBV,YPOS=SQBOA-CCD:ROI1:MinY_RBV,XSIZE=SQBOA-CCD:ROI1:SizeX_RBV,YSIZE=SQBOA-CCD:ROI1:SizeY_RBV,PORT=OVER1,ADDR=0,TIMEOUT=1")
dbLoadRecords("/usr/local/epics/support/areaDetector24/db/NDOverlayN.template","P=SQBOA-CCD:,R=Over1:2:,NAME=ROI2, SHAPE=1,O=Over1:,XPOS=SQBOA-CCD:ROI2:MinX_RBV,YPOS=SQBOA-CCD:ROI2:MinY_RBV,XSIZE=SQBOA-CCD:ROI2:SizeX_RBV,YSIZE=SQBOA-CCD:ROI2:SizeY_RBV,PORT=OVER1,ADDR=1,TIMEOUT=1")
dbLoadRecords("/usr/local/epics/support/areaDetector24/db/NDOverlayN.template","P=SQBOA-CCD:,R=Over1:3:,NAME=ROI3, SHAPE=1,O=Over1:,XPOS=SQBOA-CCD:ROI3:MinX_RBV,YPOS=SQBOA-CCD:ROI3:MinY_RBV,XSIZE=SQBOA-CCD:ROI3:SizeX_RBV,YSIZE=SQBOA-CCD:ROI3:SizeY_RBV,PORT=OVER1,ADDR=2,TIMEOUT=1")
dbLoadRecords("/usr/local/epics/support/areaDetector24/db/NDOverlayN.template","P=SQBOA-CCD:,R=Over1:4:,NAME=ROI4, SHAPE=1,O=Over1:,XPOS=SQBOA-CCD:ROI4:MinX_RBV,YPOS=SQBOA-CCD:ROI4:MinY_RBV,XSIZE=SQBOA-CCD:ROI4:SizeX_RBV,YSIZE=SQBOA-CCD:ROI4:SizeY_RBV,PORT=OVER1,ADDR=3,TIMEOUT=1")
dbLoadRecords("/usr/local/epics/support/areaDetector24/db/NDOverlayN.template","P=SQBOA-CCD:,R=Over1:5:,NAME=Cursor1,SHAPE=1,O=Over1:,XPOS=junk, YPOS=junk, XSIZE=junk, YSIZE=junk, PORT=OVER1,ADDR=4,TIMEOUT=1")
dbLoadRecords("/usr/local/epics/support/areaDetector24/db/NDOverlayN.template","P=SQBOA-CCD:,R=Over1:6:,NAME=Cursor2,SHAPE=1,O=Over1:,XPOS=junk, YPOS=junk, XSIZE=junk, Starting iocInit
2015/02/03 09:37:20.837 asynFloat64SyncIO read: 5.000000e+00
2015/02/03 09:37:20.837 asynFloat64SyncIO read: 1.000000e+00
2015/02/03 09:37:20.838 asynFloat64SyncIO read: 2.000000e+00
2015/02/03 09:37:20.838 asynFloat64SyncIO read: 0.000000e+00
2015/02/03 09:37:20.838 asynFloat64SyncIO read: 0.000000e+00
2015/02/03 09:37:20.844 asynInt32SyncIO read: 0
2015/02/03 09:37:20.844 asynInt32SyncIO read: 1
2015/02/03 09:37:20.860 asynInt32SyncIO read: 0
2015/02/03 09:37:20.860 asynInt32SyncIO read: 1
2015/02/03 09:37:20.860 asynInt32SyncIO read: 1
2015/02/03 09:37:20.860 asynInt32SyncIO read: 0
2015/02/03 09:37:20.860 asynInt32SyncIO read: 0
2015/02/03 09:37:20.860 asynInt32SyncIO read: 1
2015/02/03 09:37:20.860 asynInt32SyncIO read: 1
2015/02/03 09:37:20.860 asynInt32SyncIO read: 1024
2015/02/03 09:37:20.860 asynInt32SyncIO read: 1024
2015/02/03 09:37:20.868 asynEnumSyncIO read: 0 string=5.00 MHz, value=0, severity=0
2015/02/03 09:37:20.868 asynEnumSyncIO read: 1 string=3.00 MHz, value=1, severity=0
2015/02/03 09:37:20.868 asynEnumSyncIO read: 2 string=1.00 MHz, value=2, severity=0
2015/02/03 09:37:20.868 asynEnumSyncIO read: 3 string=0.05 MHz, value=3, severity=0
2015/02/03 09:37:20.868 asynEnumSyncIO read: 0 string=1.00, value=0, severity=0
2015/02/03 09:37:20.868 asynEnumSyncIO read: 1 string=2.00, value=1, severity=0
2015/02/03 09:37:20.868 asynEnumSyncIO read: 2 string=4.00, value=2, severity=0
2015/02/03 09:37:20.871 asynEnumSyncIO read: 0 string=5.00 MHz, value=0, severity=0
2015/02/03 09:37:20.871 asynEnumSyncIO read: 1 string=3.00 MHz, value=1, severity=0
2015/02/03 09:37:20.871 asynEnumSyncIO read: 2 string=1.00 MHz, value=2, severity=0
2015/02/03 09:37:20.871 asynEnumSyncIO read: 3 string=0.05 MHz, value=3, severity=0
2015/02/03 09:37:20.871 asynInt32SyncIO read: 0
2015/02/03 09:37:20.871 asynEnumSyncIO read: 0 string=1.00, value=0, severity=0
2015/02/03 09:37:20.871 asynEnumSyncIO read: 1 string=2.00, value=1, severity=0
2015/02/03 09:37:20.871 asynEnumSyncIO read: 2 string=4.00, value=2, severity=0
2015/02/03 09:37:20.871 asynInt32SyncIO read: 0
2015/02/03 09:37:20.871 asynInt32SyncIO read: 0
2015/02/03 09:37:20.871 asynInt32SyncIO read: 3
2015/02/03 09:37:20.872 asynInt32SyncIO read: 0
2015/02/03 09:37:20.872 asynInt32SyncIO read: 0
2015/02/03 09:37:20.878 asynInt32SyncIO read: 0
2015/02/03 09:37:20.878 asynInt32SyncIO read: 0
2015/02/03 09:37:20.878 asynInt32SyncIO read: 0
2015/02/03 09:37:20.878 asynInt32SyncIO read: 0
iocRun: All initialization complete
2015/02/03 09:37:21.394 SQBOA-CCD:CCD:AsynIO: exception 3
2015/02/03 09:37:21.426 SQBOA-CCD:CCD:ArraySizeX_RBV devAsynInt32::interruptCallbackInput new value=1024
2015/02/03 09:37:21.426 SQBOA-CCD:CCD:ArraySizeY_RBV devAsynInt32::interruptCallbackInput new value=1024
2015/02/03 09:37:21.426 SQBOA-CCD:CCD:ArraySizeZ_RBV devAsynInt32::interruptCallbackInput new value=0
2015/02/03 09:37:21.426 SQBOA-CCD:CCD:ArraySize_RBV devAsynInt32::interruptCallbackInput new value=2097152
2015/02/03 09:37:21.426 SQBOA-CCD:CCD:DataType_RBV devAsynInt32::interruptCallbackInput new value=3
2015/02/03 09:37:21.426 SQBOA-CCD:CCD:ColorMode_RBV devAsynInt32::interruptCallbackInput new value=0
2015/02/03 09:37:21.426 SQBOA-CCD:CCD:ArrayCounter_RBV devAsynInt32::interruptCallbackInput new value=0
2015/02/03 09:37:21.426 SQBOA-CCD:CCD:AsynIO: exception 7
2015/02/03 09:37:21.426 SQBOA-CCD:CCD:WriteFile_RBV devAsynInt32::interruptCallbackInput new value=0
2015/02/03 09:37:21.426 SQBOA-CCD:CCD:AsynIO: exception 7
2015/02/03 09:37:21.426 SQBOA-CCD:CCD:ReadFile_RBV devAsynInt32::interruptCallbackInput new value=0
2015/02/03 09:37:21.426 SQBOA-CCD:CCD:AsynIO: exception 7
2015/02/03 09:37:21.426 SQBOA-CCD:CCD:Capture_RBV devAsynInt32::interruptCallbackInput new value=0
2015/02/03 09:37:21.426 SQBOA-CCD:CCD:WriteStatus devAsynInt32::interruptCallbackInput new value=0
2015/02/03 09:37:21.426 SQBOA-CCD:CCD:NumCaptured_RBV devAsynInt32::interruptCallbackInput new value=0
2015/02/03 09:37:21.426 SQBOA-CCD:CCD:MaxSizeX_RBV devAsynInt32::interruptCallbackInput new value=1024
2015/02/03 09:37:21.426 SQBOA-CCD:CCD:MaxSizeY_RBV devAsynInt32::interruptCallbackInput new value=1024
2015/02/03 09:37:21.427 SQBOA-CCD:CCD:DetectorState_RBV devAsynInt32::interruptCallbackInput new value=0
2015/02/03 09:37:21.427 SQBOA-CCD:CCD:NumImagesCounter_RBV devAsynInt32::interruptCallbackInput new value=0
2015/02/03 09:37:21.427 SQBOA-CCD:CCD:NumExposuresCounter_RBV devAsynInt32::interruptCallbackInput new value=0
2015/02/03 09:37:21.427 SQBOA-CCD:CCD:TimeRemaining_RBV devAsynFloat64::interruptCallbackInput new value=0.000000
2015/02/03 09:37:21.427 SQBOA-CCD:CCD:ShutterStatus_RBV devAsynInt32::interruptCallbackInput new value=0
2015/02/03 09:37:21.427 SQBOA-CCD:CCD:AsynIO: exception 7
2015/02/03 09:37:21.427 SQBOA-CCD:CCD:Acquire_RBV devAsynInt32::interruptCallbackInput new value=0
2015/02/03 09:37:21.427 SQBOA-CCD:CCD:SizeX_RBV devAsynInt32::interruptCallbackInput new value=1024
2015/02/03 09:37:21.427 SQBOA-CCD:CCD:SizeY_RBV devAsynInt32::interruptCallbackInput new value=1024
2015/02/03 09:37:21.427 SQBOA-CCD:CCD:BinX_RBV devAsynInt32::interruptCallbackInput new value=1
2015/02/03 09:37:21.427 SQBOA-CCD:CCD:BinY_RBV devAsynInt32::interruptCallbackInput new value=1
2015/02/03 09:37:21.427 SQBOA-CCD:CCD:MinX_RBV devAsynInt32::interruptCallbackInput new value=0
2015/02/03 09:37:21.427 SQBOA-CCD:CCD:MinY_RBV devAsynInt32::interruptCallbackInput new value=0
2015/02/03 09:37:21.427 SQBOA-CCD:CCD:ImageMode_RBV devAsynInt32::interruptCallbackInput new value=0
2015/02/03 09:37:21.427 SQBOA-CCD:CCD:TriggerMode_RBV devAsynInt32::interruptCallbackInput new value=0
2015/02/03 09:37:21.427 SQBOA-CCD:CCD:AcquireTime_RBV devAsynFloat64::interruptCallbackInput new value=1.000000
2015/02/03 09:37:21.427 SQBOA-CCD:CCD:AcquirePeriod_RBV devAsynFloat64::interruptCallbackInput new value=5.000000
2015/02/03 09:37:21.427 SQBOA-CCD:CCD:NumImages_RBV devAsynInt32::interruptCallbackInput new value=1
2015/02/03 09:37:21.427 SQBOA-CCD:CCD:NumExposures_RBV devAsynInt32::interruptCallbackInput new value=1
2015/02/03 09:37:21.427 SQBOA-CCD:CCD:AndorAccumulatePeriod_RBV devAsynFloat64::interruptCallbackInput new value=2.000000
2015/02/03 09:37:21.427 SQBOA-CCD:CCD:AndorADCSpeed_RBV devAsynInt32::interruptCallbackInput new value=0
2015/02/03 09:37:21.427 SQBOA-CCD:CCD:ShutterOpenDelay_RBV devAsynFloat64::interruptCallbackInput new value=0.000000
2015/02/03 09:37:21.427 SQBOA-CCD:CCD:ShutterCloseDelay_RBV devAsynFloat64::interruptCallbackInput new value=0.000000
2015/02/03 09:37:21.427 SQBOA-CCD:CCD:AndorCooler_RBV devAsynInt32::interruptCallbackInput new value=0
2015/02/03 09:37:21.427 SQBOA-CCD:CCD:TemperatureActual devAsynFloat64::interruptCallbackInput new value=21.997000
YSIZE=junk, PORT=OVER1,ADDR=5,TIMEOUT=1")
dbLoadRecords("/usr/local/epics/support/areaDetector24/db/NDOverlayN.template","P=SQBOA-CCD:,R=Over1:7:,NAME=Box1, SHAPE=1,O=Over1:,XPOS=junk, YPOS=junk, XSIZE=junk, YSIZE=junk, PORT=OVER1,ADDR=6,TIMEOUT=1")
dbLoadRecords("/usr/local/epics/support/areaDetector24/db/NDOverlayN.template","P=SQBOA-CCD:,R=Over1:8:,NAME=Box2, SHAPE=1,O=Over1:,XPOS=junk, YPOS=junk, XSIZE=junk, YSIZE=junk, PORT=OVER1,ADDR=7,TIMEOUT=1")

Create 2 color conversion plugins

NDColorConvertConfigure("CC1", 20, 0, "ANDOR", 0, 0, 0)
dbLoadRecords("/usr/local/epics/support/areaDetector24/db/NDPluginBase.template", "P=SQBOA-CCD:,R=CC1:, PORT=CC1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=ANDOR,NDARRAY_ADDR=0")
dbLoadRecords("/usr/local/epics/support/areaDetector24/db/NDColorConvert.template", "P=SQBOA-CCD:,R=CC1:, PORT=CC1,ADDR=0,TIMEOUT=1")
NDColorConvertConfigure("CC2", 20, 0, "ANDOR", 0, 0, 0)
dbLoadRecords("/usr/local/epics/support/areaDetector24/db/NDPluginBase.template", "P=SQBOA-CCD:,R=CC2:, PORT=CC2,ADDR=0,TIMEOUT=1,NDARRAY_PORT=ANDOR,NDARRAY_ADDR=0")
dbLoadRecords("/usr/local/epics/support/areaDetector24/db/NDColorConvert.template", "P=SQBOA-CCD:,R=CC2:, PORT=CC2,ADDR=0,TIMEOUT=1")

Load scan records

dbLoadRecords("/usr/local/epics/support/sscan-2-7/sscanApp/Db/scan.db", "P=SQBOA-CCD:,MAXPTS1=2000,MAXPTS2=200,MAXPTS3=20,MAXPTS4=10,MAXPTSH=10")

Load sseq record for acquisition sequence

epicsEnvSet("dbPATH","/usr/local/epics/dbd:/usr/local/epics/support/calc-3-4-1/dbd")
dbLoadDatabase("/usr/local/epics/support/calc-3-4-1/dbd/sseqRecord.dbd")
dbLoadRecords("/usr/local/epics/support/calc-3-4-1/calcApp/Db/yySseq.db", "P=SQBOA-CCD:, S=AcquireSequence")

set_requestfile_path("./")

set_requestfile_path("$(ADCORE)/ADApp/Db")

set_requestfile_path("$(CALC)/calcApp/Db")

set_requestfile_path("$(SSCAN)/sscanApp/Db")

set_savefile_path("./autosave")

set_pass0_restoreFile("auto_settings.sav")

set_pass1_restoreFile("auto_settings.sav")

save_restoreSet_status_prefix("$(PREFIX)")

dbLoadRecords("$(AUTOSAVE)/asApp/Db/save_restoreStatus.db", "P=$(PREFIX)")

set_requestfile_path("$(ADCORE)/andorApp/Db")

asynSetTraceMask("ANDOR",0,3)
asynSetTraceIOMask("ANDOR",0,4)
iocInit()

EPICS R3.14.12.3 $Date: Mon 2012-12-17 14:11:47 -0600$

EPICS Base built Feb 4 2013

recDynLinkOut: waiting for CA context
recDynLinkOut: got CA context

save things every thirty seconds

create_monitor_set("auto_settings.req", 30,"P=$(PREFIX)")

asynSetTraceMask(ANDOR, 0, 255)
epics> 2015/02/03 09:37:21.886 ANDOR addr -1 queueRequest priority 0 not lockHolder
2015/02/03 09:37:30.874 ANDOR asynManager:queueTimeoutCallback
2015/02/03 09:37:30.874 SQBOA-CCD:CCD:AsynIO: special queueRequest timeout
2015/02/03 09:37:30.874 SQBOA-CCD:HDF1:AsynIO: special queueRequest timeout
2015/02/03 09:37:30.874 SQBOA-CCD:Magick1:AsynIO: special queueRequest timeout
2015/02/03 09:37:30.874 SQBOA-CCD:Nexus1:AsynIO: special queueRequest timeout
2015/02/03 09:37:30.874 SQBOA-CCD:TIFF1:AsynIO: special queueRequest timeout
2015/02/03 09:37:30.874 SQBOA-CCD:netCDF1:AsynIO: special queueRequest timeout
2015/02/03 09:37:33.791 ANDOR addr -1 queueRequest priority 0 not lockHolder
2015/02/03 09:37:37.195 SQBOA-CCD:CCD:AsynIO: exception 7
2015/02/03 09:37:38.051 SQBOA-CCD:CCD:AsynIO: exception 7
2015/02/03 09:37:38.856 SQBOA-CCD:CCD:AsynIO: exception 7
2015/02/03 09:37:39.610 SQBOA-CCD:CCD:AsynIO: exception 7
2015/02/03 09:37:40.273 SQBOA-CCD:CCD:AsynIO: exception 7
epics>

How can achieve <1ms Average Read Out Speed?

I use Andor DU-897E to read out 1x512 array in FVB Mode. With speed of 10MHz and 0.3 us, in theory the average speed is <500us, and the actual time cost is 6 ms.

The code I use:
StartAcquisition();
WaitForAcquisition();
GetAcquiredData(pic_buff, size);

And it's repeated 100 times in 600 ms, Could you please tell me what's the solution? Thanks!

Acquiring image with detector state in "idle"

The detector model I'm using is DW936A_BV, driver version 2.8.0, firmware ver. 14.136, SDK version 2.102.30034.0 and ADCore version 3.11.0. I am running the detector in full frame with 5MHz ADC speed. Every now and then when I trigger the detector from the scan record (detector running in single image mode), the acquisition freezes and my detector state is "idle" even though it is trying to acquire an image. The problem seems to be solved when I introduce a detector settling time into the scan record of minimum 0.1s. Please let me know if you need any further information to help diagnostics.

error with PV reading and change

When I use the driver, I get the following errors in my IOC terminal:
相机报错1
相机报错2
When I try to change a PV value in the OPI, I get the following:
change pv

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.