Coder Social home page Coder Social logo

areadetector / adpilatus Goto Github PK

View Code? Open in Web Editor NEW
3.0 20.0 7.0 21.61 MB

An EPICS areaDetector driver for the Pilatus pixel array detectors from Dectris.

Home Page: https://areadetector.github.io/master/ADPilatus/pilatusDoc.html

Makefile 5.83% C++ 91.84% Batchfile 2.34%
dectris areadetector epics pilatus

adpilatus's People

Contributors

brunoseivam avatar coretl avatar gilesknap avatar markrivers avatar prjemian avatar ronaldomercado avatar timmmooney avatar ttkorhonen avatar

Stargazers

 avatar  avatar  avatar

Watchers

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

adpilatus's Issues

caQtDM ui screen has clipped title

Need more generous space for long titles in pilatusDetector.ui screen, probably go back to ADL file to fix. The title on this example screen is clipped at both ends.

screen

Temperature and humidity update for channel 3 updates channel 0

setDoubleParam(PilatusThTemp0, temp);

When reading detector temp and humidity, there is an entry for Channel 3 that is unlikely to exist. And worse, if it exists it overrides Channel 0:

    if ((substr = strstr(this->fromCamserver, "Channel 3")) != NULL) {
        sscanf(substr, "Channel 3: Temperature = %fC, Rel. Humidity = %f", &temp, &humid);
        setDoubleParam(PilatusThTemp0, temp);
        setDoubleParam(PilatusThHumid0, humid);
    }

IMHO I believe this piece of code should be removed to avoid confusion.
However, I ignore if there is a case of Pilatus systems where the channels are numbered [1..3] instead of [0..2] by CamServer -- if that's the case then it should be properly documented, and set ADTemperature as well.

Thanks,
Armando

Dectris Pilatus 300K time waiting for camserver response

I started IOC with the attached "st.cmd". The detector I'm using is Pilatus 300K, IP address 192.168.10.5.
When I tried to acquire an image, the camserver status shows "timeout, ....".
The Temperature on MEDM screen (attached) also shows 0, which is not correct.
The communication between the IOC and camserver seems to be working, as I can see the messages on the camserver output.
====================================================================================
IOC startup log:

./st.cmd
#!/opt/epics/modules/synApps_6_1_epics7/support/areaDetector-R3-7/ADPilatus/iocs/pilatusIOC/bin/linux-x86_64/pilatusDetectorApp
< envPaths
epicsEnvSet("IOC","iocPilatus")
epicsEnvSet("TOP","/opt/epics/modules/synApps_6_1_epics7/support/areaDetector-R3-7/ADPilatus/iocs/pilatusIOC")
epicsEnvSet("ADPILATUS","/opt/epics/modules/synApps_6_1_epics7/support/areaDetector-R3-7/ADPilatus/iocs/pilatusIOC/../..")
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/ADPilatus/iocs/pilatusIOC/dbd/pilatusDetectorApp.dbd")
pilatusDetectorApp_registerRecordDeviceDriver(pdbbase) 
# Prefix for all records
epicsEnvSet("PREFIX", "13PIL1:")
# The port name for the detector
epicsEnvSet("PORT",   "PIL")
# The queue size for all plugins
epicsEnvSet("QSIZE",  "20")
# The maximim image width; used for row profiles in the NDPluginStats plugin
epicsEnvSet("XSIZE",  "487")
# The maximim image height; used for column profiles in the NDPluginStats plugin
epicsEnvSet("YSIZE",  "195")
# The maximum number of time seried points in the NDPluginStats plugin
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")
###
# Create the asyn port to talk to the Pilatus on port 41234.
#drvAsynIPPortConfigure("camserver","gse-pilatus1:41234")
drvAsynIPPortConfigure("camserver","192.168.10.5:41234")
# Uncomment the following to enable asynTrace on the camserver port
#asynSetTraceIOMask("camserver",0,2)
#asynSetTraceMask("camserver",0,9)
# Set the input and output terminators.
asynOctetSetInputEos("camserver", 0, "\0x18")
Set EOS failed: camserver illegal eoslen 4
asynOctetSetOutputEos("camserver", 0, "\n")
pilatusDetectorConfig("PIL", "camserver", 487, 195, 0, 0)
2022/12/14 12:18:35.447 pilatusDetector:readCamserver, timeout=1.000000, status=1 received 0 bytes

2022/12/14 12:18:36.468 pilatusDetector:readCamserver, timeout=1.000000, status=1 received 0 bytes

dbLoadRecords("/opt/epics/modules/synApps_6_1_epics7/support/areaDetector-R3-7/ADPilatus/iocs/pilatusIOC/../../db/pilatus.template","P=13PIL1:,R=cam1:,PORT=PIL,ADDR=0,TIMEOUT=1,CAMSERVER_PORT=camserver")
# Create a standard arrays plugin
NDStdArraysConfigure("Image1", 5, 0, "PIL", 0, 0)

dbLoadRecords("/opt/epics/base-7.0.4/../modules/synApps_6_1_epics7/support/areaDetector-R3-7/ADCore/db/NDStdArrays.template", "P=13PIL1:,R=image1:,PORT=Image1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=PIL,TYPE=Int32,FTVL=LONG,NELEMENTS=94965")
# 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, "PIL", 0)
dbLoadRecords("NDFileNetCDF.template","P=13PIL1:,R=netCDF1:,PORT=FileNetCDF1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=PIL")

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

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

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

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

# 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, "PIL", 0, 0, 0, 0, 0, 5)
dbLoadRecords("NDROI.template",       "P=13PIL1:,R=ROI1:,  PORT=ROI1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=PIL")
NDROIConfigure("ROI2", 20, 0, "PIL", 0, 0, 0, 0, 0, 5)
dbLoadRecords("NDROI.template",       "P=13PIL1:,R=ROI2:,  PORT=ROI2,ADDR=0,TIMEOUT=1,NDARRAY_PORT=PIL")
NDROIConfigure("ROI3", 20, 0, "PIL", 0, 0, 0, 0, 0, 5)
dbLoadRecords("NDROI.template",       "P=13PIL1:,R=ROI3:,  PORT=ROI3,ADDR=0,TIMEOUT=1,NDARRAY_PORT=PIL")
NDROIConfigure("ROI4", 20, 0, "PIL", 0, 0, 0, 0, 0, 5)
dbLoadRecords("NDROI.template",       "P=13PIL1:,R=ROI4:,  PORT=ROI4,ADDR=0,TIMEOUT=1,NDARRAY_PORT=PIL")

# Create 8 ROIStat plugins
NDROIStatConfigure("ROISTAT1", 20, 0, "PIL", 0, 8, 0, 0, 0, 0, 5)
dbLoadRecords("NDROIStat.template",   "P=13PIL1:,R=ROIStat1:  ,PORT=ROISTAT1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=PIL,NCHANS=2048")
dbLoadRecords("NDROIStatN.template",  "P=13PIL1:,R=ROIStat1:1:,PORT=ROISTAT1,ADDR=0,TIMEOUT=1,NCHANS=2048")
dbLoadRecords("NDROIStatN.template",  "P=13PIL1:,R=ROIStat1:2:,PORT=ROISTAT1,ADDR=1,TIMEOUT=1,NCHANS=2048")
dbLoadRecords("NDROIStatN.template",  "P=13PIL1:,R=ROIStat1:3:,PORT=ROISTAT1,ADDR=2,TIMEOUT=1,NCHANS=2048")
dbLoadRecords("NDROIStatN.template",  "P=13PIL1:,R=ROIStat1:4:,PORT=ROISTAT1,ADDR=3,TIMEOUT=1,NCHANS=2048")
dbLoadRecords("NDROIStatN.template",  "P=13PIL1:,R=ROIStat1:5:,PORT=ROISTAT1,ADDR=4,TIMEOUT=1,NCHANS=2048")
dbLoadRecords("NDROIStatN.template",  "P=13PIL1:,R=ROIStat1:6:,PORT=ROISTAT1,ADDR=5,TIMEOUT=1,NCHANS=2048")
dbLoadRecords("NDROIStatN.template",  "P=13PIL1:,R=ROIStat1:7:,PORT=ROISTAT1,ADDR=6,TIMEOUT=1,NCHANS=2048")
dbLoadRecords("NDROIStatN.template",  "P=13PIL1:,R=ROIStat1:8:,PORT=ROISTAT1,ADDR=7,TIMEOUT=1,NCHANS=2048")
# Create a processing plugin
NDProcessConfigure("PROC1", 20, 0, "PIL", 0, 0, 0)
dbLoadRecords("NDProcess.template",   "P=13PIL1:,R=Proc1:,  PORT=PROC1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=PIL")
# Create a TIFF file plugin to read dark and flatfield images into the processing plugin
NDFileTIFFConfigure("PROC1TIFF", 20, 0, "PIL", 0)
dbLoadRecords("NDFileTIFF.template",  "P=13PIL1:,R=Proc1:TIFF:,PORT=PROC1TIFF,ADDR=0,TIMEOUT=1,NDARRAY_PORT=PIL")

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

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

# Create 5 statistics plugins
NDStatsConfigure("STATS1", 20, 0, "PIL", 0, 0, 0, 0, 0, 5)
dbLoadRecords("NDStats.template",     "P=13PIL1:,R=Stats1:,  PORT=STATS1,ADDR=0,TIMEOUT=1,HIST_SIZE=256,XSIZE=487,YSIZE=195,NCHANS=2048,NDARRAY_PORT=PIL")
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=13PIL1:,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=13PIL1:,R=Stats2:,  PORT=STATS2,ADDR=0,TIMEOUT=1,HIST_SIZE=256,XSIZE=487,YSIZE=195,NCHANS=2048,NDARRAY_PORT=PIL")
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=13PIL1:,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=13PIL1:,R=Stats3:,  PORT=STATS3,ADDR=0,TIMEOUT=1,HIST_SIZE=256,XSIZE=487,YSIZE=195,NCHANS=2048,NDARRAY_PORT=PIL")
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=13PIL1:,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=13PIL1:,R=Stats4:,  PORT=STATS4,ADDR=0,TIMEOUT=1,HIST_SIZE=256,XSIZE=487,YSIZE=195,NCHANS=2048,NDARRAY_PORT=PIL")
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=13PIL1:,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=13PIL1:,R=Stats5:,  PORT=STATS5,ADDR=0,TIMEOUT=1,HIST_SIZE=256,XSIZE=487,YSIZE=195,NCHANS=2048,NDARRAY_PORT=PIL")
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=13PIL1:,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, "PIL", 0, 0, 0, 0, 0, 5)
dbLoadRecords("NDTransform.template", "P=13PIL1:,R=Trans1:,  PORT=TRANS1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=PIL")

# Create an overlay plugin with 8 overlays
NDOverlayConfigure("OVER1", 20, 0, "PIL", 0, 8, 0, 0, 0, 0, 5)
dbLoadRecords("NDOverlay.template", "P=13PIL1:,R=Over1:, PORT=OVER1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=PIL")
dbLoadRecords("NDOverlayN.template","P=13PIL1:,R=Over1:1:,NAME=ROI1,   SHAPE=1,O=Over1:,XPOS=13PIL1:ROI1:MinX_RBV,YPOS=13PIL1:ROI1:MinY_RBV,XSIZE=13PIL1:ROI1:SizeX_RBV,YSIZE=13PIL1:ROI1:SizeY_RBV,PORT=OVER1,ADDR=0,TIMEOUT=1")
dbLoadRecords("NDOverlayN.template","P=13PIL1:,R=Over1:2:,NAME=ROI2,   SHAPE=1,O=Over1:,XPOS=13PIL1:ROI2:MinX_RBV,YPOS=13PIL1:ROI2:MinY_RBV,XSIZE=13PIL1:ROI2:SizeX_RBV,YSIZE=13PIL1:ROI2:SizeY_RBV,PORT=OVER1,ADDR=1,TIMEOUT=1")
dbLoadRecords("NDOverlayN.template","P=13PIL1:,R=Over1:3:,NAME=ROI3,   SHAPE=1,O=Over1:,XPOS=13PIL1:ROI3:MinX_RBV,YPOS=13PIL1:ROI3:MinY_RBV,XSIZE=13PIL1:ROI3:SizeX_RBV,YSIZE=13PIL1:ROI3:SizeY_RBV,PORT=OVER1,ADDR=2,TIMEOUT=1")
dbLoadRecords("NDOverlayN.template","P=13PIL1:,R=Over1:4:,NAME=ROI4,   SHAPE=1,O=Over1:,XPOS=13PIL1:ROI4:MinX_RBV,YPOS=13PIL1:ROI4:MinY_RBV,XSIZE=13PIL1:ROI4:SizeX_RBV,YSIZE=13PIL1:ROI4:SizeY_RBV,PORT=OVER1,ADDR=3,TIMEOUT=1")
dbLoadRecords("NDOverlayN.template","P=13PIL1:,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=13PIL1:,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=13PIL1:,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=13PIL1:,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, "PIL", 0, 0, 0, 0, 0, 5)
dbLoadRecords("NDColorConvert.template", "P=13PIL1:,R=CC1:,  PORT=CC1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=PIL")
NDColorConvertConfigure("CC2", 20, 0, "PIL", 0, 0, 0, 0, 0, 5)
dbLoadRecords("NDColorConvert.template", "P=13PIL1:,R=CC2:,  PORT=CC2,ADDR=0,TIMEOUT=1,NDARRAY_PORT=PIL")

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

# Create an NDAttribute plugin with 8 attributes
NDAttrConfigure("ATTR1", 20, 0, "PIL", 0, 8, 0, 0, 0)
dbLoadRecords("NDAttribute.template",  "P=13PIL1:,R=Attr1:,    PORT=ATTR1,ADDR=0,TIMEOUT=1,NCHANS=2048,NDARRAY_PORT=PIL")
dbLoadRecords("NDAttributeN.template", "P=13PIL1:,R=Attr1:1:,  PORT=ATTR1,ADDR=0,TIMEOUT=1,NCHANS=2048")
dbLoadRecords("NDAttributeN.template", "P=13PIL1:,R=Attr1:2:,  PORT=ATTR1,ADDR=1,TIMEOUT=1,NCHANS=2048")
dbLoadRecords("NDAttributeN.template", "P=13PIL1:,R=Attr1:3:,  PORT=ATTR1,ADDR=2,TIMEOUT=1,NCHANS=2048")
dbLoadRecords("NDAttributeN.template", "P=13PIL1:,R=Attr1:4:,  PORT=ATTR1,ADDR=3,TIMEOUT=1,NCHANS=2048")
dbLoadRecords("NDAttributeN.template", "P=13PIL1:,R=Attr1:5:,  PORT=ATTR1,ADDR=4,TIMEOUT=1,NCHANS=2048")
dbLoadRecords("NDAttributeN.template", "P=13PIL1:,R=Attr1:6:,  PORT=ATTR1,ADDR=5,TIMEOUT=1,NCHANS=2048")
dbLoadRecords("NDAttributeN.template", "P=13PIL1:,R=Attr1:7:,  PORT=ATTR1,ADDR=6,TIMEOUT=1,NCHANS=2048")
dbLoadRecords("NDAttributeN.template", "P=13PIL1:,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=13PIL1:,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, "PIL", 0, 0, 0, 0, 0, 5)
dbLoadRecords("NDFFT.template", "P=13PIL1:, R=FFT1:, PORT=FFT1, ADDR=0, TIMEOUT=1, NDARRAY_PORT=PIL, NAME=FFT1, NCHANS=487")

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

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("13PIL1:")
dbLoadRecords("/opt/epics/base-7.0.4/../modules/synApps_6_1_epics7/support/autosave-R5-10/asApp/Db/save_restoreStatus.db", "P=13PIL1:")

# 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/ADPilatus/iocs/pilatusIOC/../../pilatusApp/Db")
# Uncomment to enable asynTrace on the driver port
#asynSetTraceMask("$(PORT)",0,255)
iocInit()
Starting iocInit
############################################################################
## EPICS R7.0.4
## Rev. 2022-09-22T14:49-0700
############################################################################
reboot_restore: entry for file 'auto_settings.sav'
reboot_restore: Found filename 'auto_settings.sav' in restoreFileList.
*** restoring from './autosave/auto_settings.sav' at initHookState 6 (before record/device init) ***
reboot_restore: done with file 'auto_settings.sav'
iocRun: All initialization complete
# save things every thirty seconds
create_monitor_set("auto_settings.req", 30,"P=13PIL1:")
save_restore:readReqFile: unable to open file sseq_settings.req. Exiting.
save_restore:readReqFile: unable to open file sseq_settings.req. Exiting.
save_restore:readReqFile: unable to open file sseq_settings.req. Exiting.
save_restore:readReqFile: unable to open file sseq_settings.req. Exiting.
save_restore:readReqFile: unable to open file sseq_settings.req. Exiting.
save_restore:readReqFile: unable to open file sseq_settings.req. Exiting.
save_restore:readReqFile: unable to open file sseq_settings.req. Exiting.
save_restore:readReqFile: unable to open file sseq_settings.req. Exiting.
save_restore:readReqFile: unable to open file sseq_settings.req. Exiting.
save_restore:readReqFile: unable to open file sseq_settings.req. Exiting.
save_restore:readReqFile: unable to open file sseq_settings.req. Exiting.
save_restore:readReqFile: unable to open file sseq_settings.req. Exiting.
save_restore:readReqFile: unable to open file sseq_settings.req. Exiting.
save_restore:readReqFile: unable to open file sseq_settings.req. Exiting.
save_restore:readReqFile: unable to open file sseq_settings.req. Exiting.
epics> 2022/12/14 12:18:40.402 pilatusDetector:readCamserver, timeout=1.000000, status=1 received 0 bytes

auto_settings.sav: 1321 of 1321 PV's connected
2022/12/14 12:18:41.405 pilatusDetector:readCamserver, timeout=1.000000, status=1 received 0 bytes

2022/12/14 12:18:42.426 pilatusDetector:readCamserver, timeout=1.000000, status=1 received 0 bytes

2022/12/14 12:18:43.426 pilatusDetector:readCamserver, timeout=1.000000, status=1 received 0 bytes

2022/12/14 12:18:44.428 pilatusDetector:readCamserver, timeout=1.000000, status=1 received 0 bytes

2022/12/14 12:18:49.430 pilatusDetector:readCamserver, timeout=5.000000, status=1 received 0 bytes

2022/12/14 12:18:50.450 pilatusDetector:readCamserver, timeout=1.000000, status=1 received 0 bytes

2022/12/14 12:18:51.452 pilatusDetector:readCamserver, timeout=1.000000, status=1 received 0 bytes

2022/12/14 12:18:52.453 pilatusDetector:readCamserver, timeout=1.000000, status=1 received 0 bytes

2022/12/14 12:18:53.455 pilatusDetector:readCamserver, timeout=1.000000, status=1 received 0 bytes

2022/12/14 12:18:54.459 pilatusDetector:readCamserver, timeout=1.000000, status=1 received 0 bytes



[st.cmd.txt](https://github.com/areaDetector/ADPilatus/files/10231396/st.cmd.txt)
![image](https://user-images.githubusercontent.com/15041332/207706636-2de2be47-2456-43ee-b320-0b31176d1e21.png)

Driver fails to read in Tiff with wrong size

I have two Pilatus detectors that, when run above a certain rate (I have been testing at 200Hz), seem to occasionally produce corrupt tiff files. The driver fails to read the file with:

2020/01/08 11:01:01.090 pilatusDetector::readTiff, file size incorrect =9906100, should be 9906116

and retries forever. It has to be Stopped to break it out, although I have seen this fail at least once and I had to restart the IOC.

I have added in some logic to only retry five times and then drop out and pass on an empty NDArray to try and figure out what is going on. I found that about 2% 0.2% of frames have this problem and that they are always 16 bytes smaller than expected. I think this change will be sufficient for the particular use case, but I wonder if there is a better solution to stop this from happening at all.

@MarkRivers is this something you have seen before? I think it is only since I updated to version R2-7, but it may just be that the beamline is running it faster now. I also can't see any changes that could cause this new behaviour.

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.