EPICS Home

Experimental Physics and Industrial Control System


 
1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  2018  2019  2020  2021  2022  <20232024  Index 1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  2018  2019  2020  2021  2022  <20232024 
<== Date ==> <== Thread ==>

Subject: AW: ADPerkinElmer Bad Pixel Files
From: "Sintschuk, Michael via Tech-talk" <tech-talk at aps.anl.gov>
To: Mark Rivers <rivers at cars.uchicago.edu>, tech-talk <tech-talk at aps.anl.gov>
Date: Thu, 9 Nov 2023 16:17:44 +0000

Hi Mark,

 

thanks for the advice.

I see now that I actually read 0 bytes in … I don’t know why.

I will try some debugging next week and post here my results.

 

Michael

 

Von: Mark Rivers <rivers at cars.uchicago.edu>
Gesendet: Donnerstag, 9. November 2023 15:08
An: tech-talk <tech-talk at aps.anl.gov>; Sintschuk, Michael <michael.sintschuk at bam.de>
Betreff: Re: ADPerkinElmer Bad Pixel Files

 

SICHERHEITSHINWEIS: Diese E-Mail wurde von außerhalb an die BAM gesendet. Bitte klicken Sie nicht auf Links oder öffnen Anhänge, bevor Sie nicht den Absender verifiziert haben und sicher sind, dass der Inhalt vertrauenswürdig ist.
This message was sent from outside of BAM. Please do not click links or open attachments unless you recognize the sender and know the content is trustworthy.

Hi Michael,

 

The code for reading the bad pixel file and counting the number of bad pixels is pretty simple.  You should be able to add some debugging to see what is going wrong.

 

The code currently checks to see if fread() had an error when reading the bad pixel array, but it does not check that the number of bytes read was correct.  You could add a check here and print the number of bytes read:

 

 

Then inside the loop that counts the bad pixels you could print the value and loop counter for all non-zero pixels.  Maybe their value is not 65535 because of an incorrect offset or datatype.

 

 

If ImageJ is displaying the bad pixels OK then this code should be able to find them too.

 

Mark

 

 


From: Tech-talk <tech-talk-bounces at aps.anl.gov> on behalf of Sintschuk, Michael via Tech-talk <tech-talk at aps.anl.gov>
Sent: Thursday, November 9, 2023 7:42 AM
To: tech-talk <
tech-talk at aps.anl.gov>
Subject: AW: ADPerkinElmer Bad Pixel Files

 

Hello again,

 

by trying to resolve my issue with the bad pixel file I came across this site and downloaded the 16#5149_1pF_PxlMask.his file:

https://millenia.cars.aps.anl.gov/data/PerkinElmer/C_PerkinElmer/

I can load it as a bad pixel file, and it just works fine. Here is some output with additional Header-information:

 

epics>

FileType=7000

HeaderSize=68

HeaderVersion=100

FileSize=8388708

ULX=1, ULY=1

BRX=2048, BRY=2048

NrOfFrames=1

Correction=0

IntegrationTime=0.000000

TypeOfNumbers=4

2023/11/09 13:24:39.609 PerkinElmer:readPixelCorrectionFile: Bad pixel map read in: 14256 bad pixels found

 

However, when I load the bad pixel file for my detector, I get the following Header-information:

 

FileType=7000

HeaderSize=68

HeaderVersion=100

FileSize=33554532

ULX=1, ULY=1

BRX=4096, BRY=4096

NrOfFrames=1

Correction=0

IntegrationTime=0.000000

TypeOfNumbers=4

2023/11/09 13:25:47.189 PerkinElmer:readPixelCorrectionFile: Bad pixel map read in: 0 bad pixels found

 

I wonder if the file is too large for the reading-in procedure, and this is why no bad pixels are found? Maybe the reading-in process is too slow … ?

Can someone help?

 

Thanks in advance!

Michael

 

 

Von: Sintschuk, Michael
Gesendet: Freitag, 3. November 2023 17:10
An: tech-talk <
tech-talk at aps.anl.gov>
Betreff: ADPerkinElmer Bad Pixel Files

 

Hello all,

 

I have a XRD 1611 detector from Perkin Elmer and I’m using it with the lates ADPerkinElmer module with EPICS-Base 7.0.7 on a Windows-10 64bit machine. It works fine until I try to use the Bad Pixel File – Correction (it’s the bad pixel correction function from Perkin Elmer, not the NDPluginBadPixel module). I’m able to load a Bad Pixel File that we obtained with the detector from the vendor (it has the .his format), the Correction field changes from “Not Available” in yellow to “Available” in green. As soon as I enable the Bad Pixel File Correction and trigger an image, the IOC starts acquiring and freezes. In ~20s the IOC crashes without any notifications.

Is anyone else using the pixel correction function from Perkin Elmer with the .his files from the vendor successfully? Or is the NDPluginBadPixel module more common in this community?

 

This is my IOC-Start with enabled asynTraces:

 

C:\epics\IOC\SauerweinIOC\iocBoot\iocSauerwein>call dllPath.bat

DLLMain()-DLL_PROCESS_ATTACH

Init Mutex created

Read Mutex created

#!../../bin/windows-x64-static/Sauerwein

errlogInit(20000)

< envPaths

epicsEnvSet("IOC","iocSauerwein")

epicsEnvSet("TOP","C:/epics/IOC/SauerweinIOC")

epicsEnvSet("SUPPORT","C:/epics/inst-7.0.7")

epicsEnvSet("ASYN","C:/epics/inst-7.0.7/asyn")

epicsEnvSet("AREA_DETECTOR","C:/epics/inst-7.0.7/areaDetector")

epicsEnvSet("ADCORE","C:/epics/inst-7.0.7/areaDetector/ADCore")

epicsEnvSet("ADSUPPORT","C:/epics/inst-7.0.7/areaDetector/ADSupport")

epicsEnvSet("ADPERKINELMER","C:/epics/inst-7.0.7/areaDetector/ADPerkinElmer")

epicsEnvSet("AUTOSAVE","C:/epics/inst-7.0.7/autosave")

epicsEnvSet("BUSY","C:/epics/inst-7.0.7/busy")

epicsEnvSet("CALC","C:/epics/inst-7.0.7/calc")

epicsEnvSet("SSCAN","C:/epics/inst-7.0.7/sscan")

epicsEnvSet("MOTOR","C:/epics/inst-7.0.7/motor")

epicsEnvSet("EPICS_BASE","C:/epics/base-7.0.7")

cd "C:/epics/IOC/SauerweinIOC"

## Register all support components

dbLoadDatabase "dbd/Sauerwein.dbd"

Sauerwein_registerRecordDeviceDriver pdbbase

cd "C:/epics/IOC/SauerweinIOC/iocBoot/iocSauerwein"

## Load record instances

## motorUtil (allstop & alldone)

dbLoadRecords("C:/epics/inst-7.0.7/motor/db/motorUtil.db", "P=isel:")

< motor.cmd.iMC

dbLoadTemplate("motor.substitutions.iMC")

# linux

#drvAsynSerialPortConfigure("serial1", "/dev/ttyACM0", 0, 0, 0)

# windows

drvAsynSerialPortConfigure("serial1","COM2", 0, 0, 0)

asynSetOption("serial1", -1, "baud", "19200")

asynSetOption("serial1", -1, "bits", "8")

asynSetOption("serial1", -1, "parity", "none")

asynSetOption("serial1", -1, "stop", "1")

# Turn on asyn traces

#asynSetTraceIOMask("serial1",0,0x255)

#asynSetTraceMask("serial1",0,0x255)

#asynSetTraceFile("serial1",0,"isel.txt")

###

# iMCCreateController(

#    motor port (will be created),

#    asyn port (must already exist),

#    num axes,

#    moving poll period (ms),

#    idle poll period (ms),

###

iMCCreateController("iMC_1", "serial1", 4, 1000, 1000)

# Turn off asyn traces

#asynSetTraceIOMask("serial1",0,0x0)

#asynSetTraceMask("serial1",0,0x1)

< detektor.cmd.PerkinElmer

# Prefix for all records

epicsEnvSet("PREFIX", "XRD:")

# The port name for the detector

epicsEnvSet("PORT",   "PEDET1")

# The queue size for all plugins

epicsEnvSet("QSIZE",  "20")

# The maximim image width; used for row profiles in the NDPluginStats plugin

epicsEnvSet("XSIZE",  "4096")

# The maximim image height; used for column profiles in the NDPluginStats plugin

epicsEnvSet("YSIZE",  "4096")

# 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", "C:/epics/inst-7.0.7/areaDetector/ADCore/db")

# Create a PerkinElmer driver

# PerkinElmerConfig(const char *portName, IDType, IDValue, maxBuffers, size_t maxMemory, int priority, int stackSize)

# IDType = 0 Frame grabber card, IDValue="", use first frame grabber or directly connected GigE detector

#        = 1 GigE detector by IP address (e.g. 164.54.160.21)

#        = 2 GigE detector by MAC address (e.g. 00005b032e6b, must be lower-case letters)

#        = 3 GigE detector by detector name (e.g. 8#2608).  Can get network detector names with asynReport(10)

# This is for the first PCI/PCIExpress frame grabber detector in the system

PerkinElmerConfig("PEDET1", 0, "0", 0, 0, 0, 0)

# This is for the second PCI/PCIExpress frame grabber detector in the system

#PerkinElmerConfig("$(PORT)", 0, "1", 0, 0, 0, 0)

# This is for a GigE detector at IP address 164.54.160.204

#PerkinElmerConfig("$(PORT)", 1, 164.54.160.204, 0, 0, 0, 0)

# This is for a GigE detector at MAC address 00005b032e6b

#PerkinElmerConfig("$(PORT)", 2, 00005b032e6b, 0, 0, 0, 0)

# This is for a GigE detector with name 8#2608

#PerkinElmerConfig("$(PORT)", 3, 8#2608, 0, 0, 0, 0)

asynSetTraceIOMask(PEDET1, 0, 2)

# Setting this to 9 to enable ASYN_TRACEIO_DRIVER and see XIS calls

#asynSetTraceMask($(PORT),0, 9)

dbLoadRecords("C:/epics/inst-7.0.7/areaDetector/ADPerkinElmer/db/PerkinElmer.template","P=XRD:,R=cam1:,PORT=PEDET1,ADDR=0,TIMEOUT=1")

# Create a standard arrays plugin, set it to get data from Driver.

NDStdArraysConfigure("Image1", 3, 0, "PEDET1", 0)

# Set NELEMENTS to at least the total number of pixels in the detector.  The following is a little larger than 4096 x 4096

dbLoadRecords("C:/epics/inst-7.0.7/areaDetector/ADCore/db/NDStdArrays.template", "P=XRD:,R=image1:,PORT=Image1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=PEDET1,TYPE=Int16,SIZE=16,FTVL=SHORT,NELEMENTS=33600000")

# Load all other plugins using commonPlugins.cmd

< C:/epics/inst-7.0.7/areaDetector/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, "PEDET1", 0)

dbLoadRecords("NDFileNetCDF.template","P=XRD:,R=netCDF1:,PORT=FileNetCDF1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=PEDET1")

# Create a TIFF file saving plugin

NDFileTIFFConfigure("FileTIFF1", 20, 0, "PEDET1", 0)

dbLoadRecords("NDFileTIFF.template",  "P=XRD:,R=TIFF1:,PORT=FileTIFF1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=PEDET1")

# Create a JPEG file saving plugin

NDFileJPEGConfigure("FileJPEG1", 20, 0, "PEDET1", 0)

dbLoadRecords("NDFileJPEG.template",  "P=XRD:,R=JPEG1:,PORT=FileJPEG1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=PEDET1")

# Create a NeXus file saving plugin

NDFileNexusConfigure("FileNexus1", 20, 0, "PEDET1", 0)

dbLoadRecords("NDFileNexus.template", "P=XRD:,R=Nexus1:,PORT=FileNexus1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=PEDET1")

# Create an HDF5 file saving plugin

NDFileHDF5Configure("FileHDF1", 20, 0, "PEDET1", 0)

dbLoadRecords("NDFileHDF5.template",  "P=XRD:,R=HDF1:,PORT=FileHDF1,ADDR=0,TIMEOUT=1,XMLSIZE=2048,NDARRAY_PORT=PEDET1")

# 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, "PEDET1", 0, 0, 0, 0, 0, 5)

dbLoadRecords("NDROI.template",       "P=XRD:,R=ROI1:,  PORT=ROI1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=PEDET1")

NDROIConfigure("ROI2", 20, 0, "PEDET1", 0, 0, 0, 0, 0, 5)

dbLoadRecords("NDROI.template",       "P=XRD:,R=ROI2:,  PORT=ROI2,ADDR=0,TIMEOUT=1,NDARRAY_PORT=PEDET1")

NDROIConfigure("ROI3", 20, 0, "PEDET1", 0, 0, 0, 0, 0, 5)

dbLoadRecords("NDROI.template",       "P=XRD:,R=ROI3:,  PORT=ROI3,ADDR=0,TIMEOUT=1,NDARRAY_PORT=PEDET1")

NDROIConfigure("ROI4", 20, 0, "PEDET1", 0, 0, 0, 0, 0, 5)

dbLoadRecords("NDROI.template",       "P=XRD:,R=ROI4:,  PORT=ROI4,ADDR=0,TIMEOUT=1,NDARRAY_PORT=PEDET1")

# Create 8 ROIStat plugins

NDROIStatConfigure("ROISTAT1", 20, 0, "PEDET1", 0, 8, 0, 0, 0, 0, 5)

dbLoadRecords("NDROIStat.template",   "P=XRD:,R=ROIStat1:  ,PORT=ROISTAT1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=PEDET1,NCHANS=2048")

dbLoadRecords("NDROIStatN.template",  "P=XRD:,R=ROIStat1:1:,PORT=ROISTAT1,ADDR=0,TIMEOUT=1,NCHANS=2048")

dbLoadRecords("NDROIStatN.template",  "P=XRD:,R=ROIStat1:2:,PORT=ROISTAT1,ADDR=1,TIMEOUT=1,NCHANS=2048")

dbLoadRecords("NDROIStatN.template",  "P=XRD:,R=ROIStat1:3:,PORT=ROISTAT1,ADDR=2,TIMEOUT=1,NCHANS=2048")

dbLoadRecords("NDROIStatN.template",  "P=XRD:,R=ROIStat1:4:,PORT=ROISTAT1,ADDR=3,TIMEOUT=1,NCHANS=2048")

dbLoadRecords("NDROIStatN.template",  "P=XRD:,R=ROIStat1:5:,PORT=ROISTAT1,ADDR=4,TIMEOUT=1,NCHANS=2048")

dbLoadRecords("NDROIStatN.template",  "P=XRD:,R=ROIStat1:6:,PORT=ROISTAT1,ADDR=5,TIMEOUT=1,NCHANS=2048")

dbLoadRecords("NDROIStatN.template",  "P=XRD:,R=ROIStat1:7:,PORT=ROISTAT1,ADDR=6,TIMEOUT=1,NCHANS=2048")

dbLoadRecords("NDROIStatN.template",  "P=XRD:,R=ROIStat1:8:,PORT=ROISTAT1,ADDR=7,TIMEOUT=1,NCHANS=2048")

# Create a processing plugin

NDProcessConfigure("PROC1", 20, 0, "PEDET1", 0, 0, 0)

dbLoadRecords("NDProcess.template",   "P=XRD:,R=Proc1:,  PORT=PROC1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=PEDET1")

# Create a TIFF file plugin to read dark and flatfield images into the processing plugin

NDFileTIFFConfigure("PROC1TIFF", 20, 0, "PEDET1", 0)

dbLoadRecords("NDFileTIFF.template",  "P=XRD:,R=Proc1:TIFF:,PORT=PROC1TIFF,ADDR=0,TIMEOUT=1,NDARRAY_PORT=PEDET1")

# Create a scatter plugin

NDScatterConfigure("SCATTER1", 20, 0, "PEDET1", 0, 0, 0)

dbLoadRecords("NDScatter.template",   "P=XRD:,R=Scatter1:,  PORT=SCATTER1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=PEDET1")

# Create a gather plugin with 8 ports

NDGatherConfigure("GATHER1", 20, 0, 8, 0, 0)

dbLoadRecords("NDGather.template",   "P=XRD:,R=Gather1:, PORT=GATHER1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=PEDET1")

dbLoadRecords("NDGatherN.template",   "P=XRD:,R=Gather1:, N=1, PORT=GATHER1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=PEDET1")

dbLoadRecords("NDGatherN.template",   "P=XRD:,R=Gather1:, N=2, PORT=GATHER1,ADDR=1,TIMEOUT=1,NDARRAY_PORT=PEDET1")

dbLoadRecords("NDGatherN.template",   "P=XRD:,R=Gather1:, N=3, PORT=GATHER1,ADDR=2,TIMEOUT=1,NDARRAY_PORT=PEDET1")

dbLoadRecords("NDGatherN.template",   "P=XRD:,R=Gather1:, N=4, PORT=GATHER1,ADDR=3,TIMEOUT=1,NDARRAY_PORT=PEDET1")

dbLoadRecords("NDGatherN.template",   "P=XRD:,R=Gather1:, N=5, PORT=GATHER1,ADDR=4,TIMEOUT=1,NDARRAY_PORT=PEDET1")

dbLoadRecords("NDGatherN.template",   "P=XRD:,R=Gather1:, N=6, PORT=GATHER1,ADDR=5,TIMEOUT=1,NDARRAY_PORT=PEDET1")

dbLoadRecords("NDGatherN.template",   "P=XRD:,R=Gather1:, N=7, PORT=GATHER1,ADDR=6,TIMEOUT=1,NDARRAY_PORT=PEDET1")

dbLoadRecords("NDGatherN.template",   "P=XRD:,R=Gather1:, N=8, PORT=GATHER1,ADDR=7,TIMEOUT=1,NDARRAY_PORT=PEDET1")

# Create 5 statistics plugins

NDStatsConfigure("STATS1", 20, 0, "PEDET1", 0, 0, 0, 0, 0, 5)

dbLoadRecords("NDStats.template",     "P=XRD:,R=Stats1:,  PORT=STATS1,ADDR=0,TIMEOUT=1,HIST_SIZE=256,XSIZE=4096,YSIZE=4096,NCHANS=2048,NDARRAY_PORT=PEDET1")

NDTimeSeriesConfigure("STATS1_TS", 20, 0, "STATS1", 1, 23)

dbLoadRecords("C:/epics/inst-7.0.7/areaDetector/ADCore/db/NDTimeSeries.template",  "P=XRD:,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=XRD:,R=Stats2:,  PORT=STATS2,ADDR=0,TIMEOUT=1,HIST_SIZE=256,XSIZE=4096,YSIZE=4096,NCHANS=2048,NDARRAY_PORT=PEDET1")

NDTimeSeriesConfigure("STATS2_TS", 20, 0, "STATS2", 1, 23)

dbLoadRecords("C:/epics/inst-7.0.7/areaDetector/ADCore/db/NDTimeSeries.template",  "P=XRD:,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=XRD:,R=Stats3:,  PORT=STATS3,ADDR=0,TIMEOUT=1,HIST_SIZE=256,XSIZE=4096,YSIZE=4096,NCHANS=2048,NDARRAY_PORT=PEDET1")

NDTimeSeriesConfigure("STATS3_TS", 20, 0, "STATS3", 1, 23)

dbLoadRecords("C:/epics/inst-7.0.7/areaDetector/ADCore/db/NDTimeSeries.template",  "P=XRD:,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=XRD:,R=Stats4:,  PORT=STATS4,ADDR=0,TIMEOUT=1,HIST_SIZE=256,XSIZE=4096,YSIZE=4096,NCHANS=2048,NDARRAY_PORT=PEDET1")

NDTimeSeriesConfigure("STATS4_TS", 20, 0, "STATS4", 1, 23)

dbLoadRecords("C:/epics/inst-7.0.7/areaDetector/ADCore/db/NDTimeSeries.template",  "P=XRD:,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=XRD:,R=Stats5:,  PORT=STATS5,ADDR=0,TIMEOUT=1,HIST_SIZE=256,XSIZE=4096,YSIZE=4096,NCHANS=2048,NDARRAY_PORT=PEDET1")

NDTimeSeriesConfigure("STATS5_TS", 20, 0, "STATS5", 1, 23)

dbLoadRecords("C:/epics/inst-7.0.7/areaDetector/ADCore/db/NDTimeSeries.template",  "P=XRD:,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, "PEDET1", 0, 0, 0, 0, 0, 5)

dbLoadRecords("NDTransform.template", "P=XRD:,R=Trans1:,  PORT=TRANS1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=PEDET1")

# Create an overlay plugin with 8 overlays

NDOverlayConfigure("OVER1", 20, 0, "PEDET1", 0, 8, 0, 0, 0, 0, 5)

dbLoadRecords("NDOverlay.template", "P=XRD:,R=Over1:, PORT=OVER1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=PEDET1")

dbLoadRecords("NDOverlayN.template","P=XRD:,R=Over1:1:,NAME=ROI1,   SHAPE=1,O=Over1:,XPOS=XRD:ROI1:MinX_RBV,YPOS=XRD:ROI1:MinY_RBV,XSIZE=XRD:ROI1:SizeX_RBV,YSIZE=XRD:ROI1:SizeY_RBV,PORT=OVER1,ADDR=0,TIMEOUT=1")

dbLoadRecords("NDOverlayN.template","P=XRD:,R=Over1:2:,NAME=ROI2,   SHAPE=1,O=Over1:,XPOS=XRD:ROI2:MinX_RBV,YPOS=XRD:ROI2:MinY_RBV,XSIZE=XRD:ROI2:SizeX_RBV,YSIZE=XRD:ROI2:SizeY_RBV,PORT=OVER1,ADDR=1,TIMEOUT=1")

dbLoadRecords("NDOverlayN.template","P=XRD:,R=Over1:3:,NAME=ROI3,   SHAPE=1,O=Over1:,XPOS=XRD:ROI3:MinX_RBV,YPOS=XRD:ROI3:MinY_RBV,XSIZE=XRD:ROI3:SizeX_RBV,YSIZE=XRD:ROI3:SizeY_RBV,PORT=OVER1,ADDR=2,TIMEOUT=1")

dbLoadRecords("NDOverlayN.template","P=XRD:,R=Over1:4:,NAME=ROI4,   SHAPE=1,O=Over1:,XPOS=XRD:ROI4:MinX_RBV,YPOS=XRD:ROI4:MinY_RBV,XSIZE=XRD:ROI4:SizeX_RBV,YSIZE=XRD:ROI4:SizeY_RBV,PORT=OVER1,ADDR=3,TIMEOUT=1")

dbLoadRecords("NDOverlayN.template","P=XRD:,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=XRD:,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=XRD:,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=XRD:,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, "PEDET1", 0, 0, 0, 0, 0, 5)

dbLoadRecords("NDColorConvert.template", "P=XRD:,R=CC1:,  PORT=CC1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=PEDET1")

NDColorConvertConfigure("CC2", 20, 0, "PEDET1", 0, 0, 0, 0, 0, 5)

dbLoadRecords("NDColorConvert.template", "P=XRD:,R=CC2:,  PORT=CC2,ADDR=0,TIMEOUT=1,NDARRAY_PORT=PEDET1")

# Create a circular buffer plugin

NDCircularBuffConfigure("CB1", 20, 0, "PEDET1", 0, 500, 0)

dbLoadRecords("NDCircularBuff.template", "P=XRD:,R=CB1:,  PORT=CB1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=PEDET1")

# Create an NDAttribute plugin with 8 attributes

NDAttrConfigure("ATTR1", 20, 0, "PEDET1", 0, 8, 0, 0, 0)

dbLoadRecords("NDAttribute.template",  "P=XRD:,R=Attr1:,    PORT=ATTR1,ADDR=0,TIMEOUT=1,NCHANS=2048,NDARRAY_PORT=PEDET1")

dbLoadRecords("NDAttributeN.template", "P=XRD:,R=Attr1:1:,  PORT=ATTR1,ADDR=0,TIMEOUT=1,NCHANS=2048")

dbLoadRecords("NDAttributeN.template", "P=XRD:,R=Attr1:2:,  PORT=ATTR1,ADDR=1,TIMEOUT=1,NCHANS=2048")

dbLoadRecords("NDAttributeN.template", "P=XRD:,R=Attr1:3:,  PORT=ATTR1,ADDR=2,TIMEOUT=1,NCHANS=2048")

dbLoadRecords("NDAttributeN.template", "P=XRD:,R=Attr1:4:,  PORT=ATTR1,ADDR=3,TIMEOUT=1,NCHANS=2048")

dbLoadRecords("NDAttributeN.template", "P=XRD:,R=Attr1:5:,  PORT=ATTR1,ADDR=4,TIMEOUT=1,NCHANS=2048")

dbLoadRecords("NDAttributeN.template", "P=XRD:,R=Attr1:6:,  PORT=ATTR1,ADDR=5,TIMEOUT=1,NCHANS=2048")

dbLoadRecords("NDAttributeN.template", "P=XRD:,R=Attr1:7:,  PORT=ATTR1,ADDR=6,TIMEOUT=1,NCHANS=2048")

dbLoadRecords("NDAttributeN.template", "P=XRD:,R=Attr1:8:,  PORT=ATTR1,ADDR=7,TIMEOUT=1,NCHANS=2048")

NDTimeSeriesConfigure("ATTR1_TS", 20, 0, "ATTR1", 1, 8)

dbLoadRecords("C:/epics/inst-7.0.7/areaDetector/ADCore/db/NDTimeSeries.template",  "P=XRD:,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, "PEDET1", 0, 0, 0, 0, 0, 5)

dbLoadRecords("NDFFT.template", "P=XRD:, R=FFT1:, PORT=FFT1, ADDR=0, TIMEOUT=1, NDARRAY_PORT=PEDET1, NAME=FFT1, NCHANS=4096")

# Create 2 Codec plugins

NDCodecConfigure("CODEC1", 20, 0, "PEDET1", 0, 0, 0, 0, 0, 5)

dbLoadRecords("NDCodec.template", "P=XRD:, R=Codec1:, PORT=CODEC1, ADDR=0, TIMEOUT=1, NDARRAY_PORT=PEDET1")

NDCodecConfigure("CODEC2", 20, 0, "PEDET1", 0, 0, 0, 0, 0, 5)

dbLoadRecords("NDCodec.template", "P=XRD:, R=Codec2:, PORT=CODEC2, ADDR=0, TIMEOUT=1, NDARRAY_PORT=PEDET1")

# Create a bad pixel plugin

NDBadPixelConfigure("BADPIX1", 20, 0, "PEDET1", 0, 0, 0, 0, 0, 5)

dbLoadRecords("NDBadPixel.template", "P=XRD:, R=BadPix1:, PORT=BADPIX1, ADDR=0, TIMEOUT=1, NDARRAY_PORT=PEDET1")

set_requestfile_path("./")

set_requestfile_path("C:/epics/inst-7.0.7/areaDetector/ADCore/db")

set_requestfile_path("C:/epics/inst-7.0.7/areaDetector/ADCore/iocBoot")

set_requestfile_path("C:/epics/inst-7.0.7/autosave/db")

set_savefile_path("./autosave")

set_pass0_restoreFile("auto_settings.sav")

set_pass1_restoreFile("auto_settings.sav")

save_restoreSet_status_prefix("XRD:")

dbLoadRecords("C:/epics/inst-7.0.7/autosave/db/save_restoreStatus.db", "P=XRD:")

dbLoadRecords("C:/epics/inst-7.0.7/autosave/db/configMenu.db", "P=XRD:, CONFIG=ADAutoSave")

# Load NDPluginPva plugin

NDPvaConfigure("PVA1", 20, 0, "PEDET1", 0, XRD:Pva1:Image, 0, 0, 0)

dbLoadRecords("NDPva.template",  "P=XRD:,R=Pva1:, PORT=PVA1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=PEDET1")

#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)")

#set_requestfile_path("$(FFMPEGSERVER)/db")

# 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)/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)/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)/db")

# Optional: load scan records

#dbLoadRecords("$(SSCAN)/db/scan.db", "P=$(PREFIX),MAXPTS1=2000,MAXPTS2=200,MAXPTS3=20,MAXPTS4=10,MAXPTSH=10")

#set_requestfile_path("$(SSCAN)/db")

# Optional: load sseq record for acquisition sequence

#dbLoadRecords("$(CALC)/db/sseqRecord.db", "P=$(PREFIX), S=AcquireSequence")

#set_requestfile_path("$(CALC)/db")

# Optional: load devIocStats records (requires DEVIOCSTATS module)

#dbLoadRecords("$(DEVIOCSTATS)/db/iocAdminSoft.db", "IOC=$(PREFIX)")

# Optional: load alive record (requires ALIVE module)

#dbLoadRecords("$(ALIVE)/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("C:/epics/inst-7.0.7/areaDetector/ADPerkinElmer/perkinElmerApp/Db")

set_requestfile_path("C:/epics/inst-7.0.7/calc/calcApp/Db")

iocInit

Starting iocInit

############################################################################

## EPICS R7.0.7

## Rev. 2023-03-17T15:40

## Rev. Date build date/time:

############################################################################

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'

 

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 7 (after 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=XRD:")

asynSetTraceMask(PEDET1,0,0xff)

2023/11/02 14:30:55.014 XRD:cam1:AsynIO: exception 3, asynExceptionTraceMask

## motorUtil (allstop & alldone)

motorUtilInit("isel:")

## Start any sequence programs

#seq sncxxx,"user=msintsch"

# we don't want any retrys on the axes

dbpf isel:m1.RTRY 0

DBF_SHORT:          0 = 0x0

dbpf isel:m2.RTRY 0

DBF_SHORT:          0 = 0x0

dbpf isel:m3.RTRY 0

DBF_SHORT:          0 = 0x0

dbpf isel:m4.RTRY 0

DBF_SHORT:          0 = 0x0

# Boot complete

2023/11/02 14:30:55.088 PerkinElmer::setTriggerOut, called Acquisition_SetTriggerOutSignalOptions(hAcqDesc_=00000000000002A4, triggerOutSignal=0, triggerOutEPLength=0

triggerOutEPFirstFrame=0, triggerOutEPLastFrame=0

triggerOutEPDelay1=0, triggerOutEPDelay2=0

triggerOutDDDDelay=0, triggerOutEdge=0, triggerOutSaveADefault=0

2023/11/02 14:30:55.090 XRD:cam1:PortName_RBV devAsynOctet::interruptCallback ringSize=0, len=7, callback data:PEDET1\x00

2023/11/02 14:30:55.094 XRD:cam1:ADCoreVersion_RBV devAsynOctet::interruptCallback ringSize=0, len=7, callback data:3.12.1\x00

2023/11/02 14:30:55.098 XRD:cam1:DriverVersion_RBV devAsynOctet::interruptCallback ringSize=0, len=7, callback data:2.11.0\x00

2023/11/02 14:30:55.102 XRD:cam1:ArraySizeX_RBV devAsynInt32::interruptCallbackInput new value=4096

2023/11/02 14:30:55.113 XRD:cam1:PortName_RBV devAsynOctet::processCommon len=6,  data:PEDET1

2023/11/02 14:30:55.117 XRD:cam1:ADCoreVersion_RBV devAsynOctet::processCommon len=6,  data:3.12.1

2023/11/02 14:30:55.121 XRD:cam1:DriverVersion_RBV devAsynOctet::processCommon len=6,  data:2.11.0

2023/11/02 14:30:55.125 XRD:cam1:ArraySizeY_RBV devAsynInt32::interruptCallbackInput new value=4096

2023/11/02 14:30:55.127 XRD:cam1:ArraySizeZ_RBV devAsynInt32::interruptCallbackInput new value=0

2023/11/02 14:30:55.129 XRD:cam1:ArraySize_RBV devAsynInt32::interruptCallbackInput new value=0

2023/11/02 14:30:55.130 XRD:cam1:NDimensions_RBV devAsynInt32::interruptCallbackInput new value=0

2023/11/02 14:30:55.131 XRD:cam1:ColorMode_RBV devAsynInt32::interruptCallbackInput new value=0

2023/11/02 14:30:55.132 XRD:cam1:UniqueId_RBV devAsynInt32::interruptCallbackInput new value=0

2023/11/02 14:30:55.134 XRD:cam1:TimeStamp_RBV devAsynFloat64::interruptCallbackInput new value=0.000000

2023/11/02 14:30:55.137 XRD:cam1:EpicsTSSec_RBV devAsynInt32::interruptCallbackInput new value=0

2023/11/02 14:30:55.144 XRD:cam1:EpicsTSNsec_RBV devAsynInt32::interruptCallbackInput new value=0

2023/11/02 14:30:55.145 XRD:cam1:BayerPattern_RBV devAsynInt32::interruptCallbackInput new value=0

2023/11/02 14:30:55.146 XRD:cam1:ArrayCounter_RBV devAsynInt32::interruptCallbackInput new value=0

2023/11/02 14:30:55.147 XRD:cam1:ArraySizeX_RBV devAsynInt32::getCallbackValue from ringBuffer value=4096

2023/11/02 14:30:55.147 XRD:cam1:ArraySizeY_RBV devAsynInt32::getCallbackValue from ringBuffer value=4096

2023/11/02 14:30:55.148 XRD:cam1:ArraySizeZ_RBV devAsynInt32::getCallbackValue from ringBuffer value=0

2023/11/02 14:30:55.148 XRD:cam1:ArraySize_RBV devAsynInt32::getCallbackValue from ringBuffer value=0

2023/11/02 14:30:55.149 XRD:cam1:NDimensions_RBV devAsynInt32::getCallbackValue from ringBuffer value=0

2023/11/02 14:30:55.151 XRD:cam1:ColorMode_RBV devAsynInt32::getCallbackValue from ringBuffer value=0

2023/11/02 14:30:55.156 XRD:cam1:UniqueId_RBV devAsynInt32::getCallbackValue from ringBuffer value=0

2023/11/02 14:30:55.157 XRD:cam1:TimeStamp_RBV devAsynFloat64::getCallbackValue from ringBuffer value=0.000000

2023/11/02 14:30:55.157 XRD:cam1:EpicsTSSec_RBV devAsynInt32::getCallbackValue from ringBuffer value=0

2023/11/02 14:30:55.158 XRD:cam1:EpicsTSNsec_RBV devAsynInt32::getCallbackValue from ringBuffer value=0

2023/11/02 14:30:55.159 XRD:cam1:BayerPattern_RBV devAsynInt32::getCallbackValue from ringBuffer value=0

2023/11/02 14:30:55.159 XRD:cam1:ArrayCounter_RBV devAsynInt32::getCallbackValue from ringBuffer value=0

2023/11/02 14:30:55.160 XRD:cam1:NDAttributesStatus devAsynInt32::interruptCallbackInput new value=1

2023/11/02 14:30:55.160 XRD:cam1:AcquireBusyCB devAsynInt32::interruptCallbackInput new value=0

2023/11/02 14:30:55.161 XRD:cam1:NumQueuedArrays devAsynInt32::interruptCallbackInput new value=0

2023/11/02 14:30:55.161 XRD:cam1:MaxSizeX_RBV devAsynInt32::interruptCallbackInput new value=4096

2023/11/02 14:30:55.162 XRD:cam1:MaxSizeY_RBV devAsynInt32::interruptCallbackInput new value=4096

2023/11/02 14:30:55.162 XRD:cam1:DetectorState_RBV devAsynInt32::interruptCallbackInput new value=0

2023/11/02 14:30:55.163 XRD:cam1:NumImagesCounter_RBV devAsynInt32::interruptCallbackInput new value=0

2023/11/02 14:30:55.163 XRD:cam1:NumExposuresCounter_RBV devAsynInt32::interruptCallbackInput new value=0

2023/11/02 14:30:55.164 XRD:cam1:TimeRemaining_RBV devAsynFloat64::interruptCallbackInput new value=0.000000

2023/11/02 14:30:55.166 XRD:cam1:ShutterStatus_RBV devAsynInt32::interruptCallbackInput new value=0

2023/11/02 14:30:55.171 XRD:cam1:Acquire devAsynInt32::interruptCallbackOutput new value=0

2023/11/02 14:30:55.172 XRD:cam1:Acquire_RBV devAsynInt32::interruptCallbackInput new value=0

2023/11/02 14:30:55.172 XRD:cam1:StatusMessage_RBV devAsynOctet::interruptCallback ringSize=0, len=1, callback data:\x00

2023/11/02 14:30:55.173 XRD:cam1:StringToServer_RBV devAsynOctet::interruptCallback ringSize=0, len=1, callback data:\x00

2023/11/02 14:30:55.174 XRD:cam1:StringFromServer_RBV devAsynOctet::interruptCallback ringSize=0, len=1, callback data:\x00

2023/11/02 14:30:55.174 XRD:cam1:NDAttributesStatus devAsynInt32::getCallbackValue from ringBuffer value=1

2023/11/02 14:30:55.175 XRD:cam1:AcquireBusyCB devAsynInt32::getCallbackValue from ringBuffer value=0

2023/11/02 14:30:55.176 XRD:cam1:NumQueuedArrays devAsynInt32::getCallbackValue from ringBuffer value=0

2023/11/02 14:30:55.176 XRD:cam1:MaxSizeX_RBV devAsynInt32::getCallbackValue from ringBuffer value=4096

2023/11/02 14:30:55.176 XRD:cam1:MaxSizeY_RBV devAsynInt32::getCallbackValue from ringBuffer value=4096

2023/11/02 14:30:55.177 XRD:cam1:DetectorState_RBV devAsynInt32::getCallbackValue from ringBuffer value=0

2023/11/02 14:30:55.177 XRD:cam1:NumImagesCounter_RBV devAsynInt32::getCallbackValue from ringBuffer value=0

2023/11/02 14:30:55.178 XRD:cam1:NumExposuresCounter_RBV devAsynInt32::getCallbackValue from ringBuffer value=0

2023/11/02 14:30:55.178 XRD:cam1:TimeRemaining_RBV devAsynFloat64::getCallbackValue from ringBuffer value=0.000000

2023/11/02 14:30:55.179 XRD:cam1:ShutterStatus_RBV devAsynInt32::getCallbackValue from ringBuffer value=0

2023/11/02 14:30:55.179 XRD:cam1:Acquire devAsynInt32::getCallbackValue from ringBuffer value=0

2023/11/02 14:30:55.186 XRD:cam1:Acquire_RBV devAsynInt32::getCallbackValue from ringBuffer value=0

2023/11/02 14:30:55.186 XRD:cam1:StatusMessage_RBV devAsynOctet::processCommon len=0,  data:2023/11/02 14:30:55.187 XRD:cam1:StringToServer_RBV devAsynOctet::processCommon len=0,  data:2023/11/02 14:30:55.187 XRD:cam1:StringFromServer_RBV devAsynOctet::processCommon len=0,  data:2023/11/02 14:30:55.188 XRD:cam1:Manufacturer_RBV devAsynOctet::interruptCallback ringSize=0, len=13, callback data:Perkin Elmer\x00

 

And this is the last console output where I load the bad pixel file and try to acquire an image. After the last line, the IOC is not responding and crashes:

 

2023/11/02 14:31:28.274 asynManager::portThread port=PEDET1 callback

2023/11/02 14:31:28.275 asynPortDriver:readFloat64: function=57, name=POOL_USED_MEMORY, value=64.359550

2023/11/02 14:31:28.276 XRD:cam1:PoolUsedMem devAsynFloat64::processCallbackInput process value=64.359550

2023/11/02 14:31:28.278 PEDET1 addr -1 queueRequest priority 0 not lockHolder

2023/11/02 14:31:28.279 asynManager::portThread port=PEDET1 callback

2023/11/02 14:31:28.280 asynPortDriver:readInt32: function=54, name=POOL_ALLOC_BUFFERS, value=4

2023/11/02 14:31:28.281 XRD:cam1:PoolAllocBuffers devAsynInt32::processCallbackInput process value=4

2023/11/02 14:31:28.282 PEDET1 addr -1 queueRequest priority 0 not lockHolder

2023/11/02 14:31:28.283 asynManager::portThread port=PEDET1 callback

2023/11/02 14:31:28.284 asynPortDriver:readInt32: function=55, name=POOL_FREE_BUFFERS, value=0

2023/11/02 14:31:28.286 XRD:cam1:PoolFreeBuffers devAsynInt32::processCallbackInput process value=0

2023/11/02 14:31:28.694 PEDET1 addr -1 queueRequest priority 0 not lockHolder

2023/11/02 14:31:28.695 asynManager::portThread port=PEDET1 callback

2023/11/02 14:31:28.697 PerkinElmer:readPixelCorrectionFile:, Pixel correction file name: C:\epics\Messdaten\15898_0pF5_PxlMask.his

2023/11/02 14:31:28.704 PerkinElmer:readPixelCorrectionFile: buffer size: 33554432, pBadPixelMap: 1542500416

2023/11/02 14:31:28.721 PerkinElmer:readPixelCorrectionFile: Bad pixel map read in: 0 bad pixels found

2023/11/02 14:31:28.736 PerkinElmer::readPixelCorrectionFile, called Acquisition_CreatePixelMap (pBadPixelMap_=000002435BF0B040, nDataRows=4096, nDataColumns=4096, pCorrList=0000000000000000, iCorrectionMapSize=1)

2023/11/02 14:31:28.751 PerkinElmer::readPixelCorrectionFile, called Acquisition_CreatePixelMap (pBadPixelMap_=000002435BF0B040, nDataRows=4096, nDataColumns=4096, pCorrList=0000024352A70390, iCorrectionMapSize=1095759536)

2023/11/02 14:31:28.754 XRD:cam1:PEPixelCorrectionAvailable devAsynInt32::interruptCallbackInput new value=1

2023/11/02 14:31:28.754 PerkinElmer:writeInt32: function=112, value=1

2023/11/02 14:31:28.754 XRD:cam1:PELoadPixelCorrection devAsynInt32::processCallbackOutput process value 1

2023/11/02 14:31:28.755 XRD:cam1:PEPixelCorrectionAvailable devAsynInt32::getCallbackValue from ringBuffer value=1

2023/11/02 14:31:29.271 PEDET1 addr -1 queueRequest priority 0 not lockHolder

2023/11/02 14:31:29.272 asynManager::portThread port=PEDET1 callback

2023/11/02 14:31:29.273 asynPortDriver:readFloat64: function=57, name=POOL_USED_MEMORY, value=64.359550

2023/11/02 14:31:29.274 XRD:cam1:PoolUsedMem devAsynFloat64::processCallbackInput process value=64.359550

2023/11/02 14:31:29.276 PEDET1 addr -1 queueRequest priority 0 not lockHolder

2023/11/02 14:31:29.277 asynManager::portThread port=PEDET1 callback

2023/11/02 14:31:29.278 asynPortDriver:readInt32: function=54, name=POOL_ALLOC_BUFFERS, value=4

2023/11/02 14:31:29.279 XRD:cam1:PoolAllocBuffers devAsynInt32::processCallbackInput process value=4

2023/11/02 14:31:29.281 PEDET1 addr -1 queueRequest priority 0 not lockHolder

2023/11/02 14:31:29.282 asynManager::portThread port=PEDET1 callback

2023/11/02 14:31:29.283 asynPortDriver:readInt32: function=55, name=POOL_FREE_BUFFERS, value=0

2023/11/02 14:31:29.284 XRD:cam1:PoolFreeBuffers devAsynInt32::processCallbackInput process value=0

2023/11/02 14:31:30.015 PEDET1 addr -1 queueRequest priority 0 not lockHolder

2023/11/02 14:31:30.016 asynManager::portThread port=PEDET1 callback

2023/11/02 14:31:30.018 PerkinElmer::acquireNormalImage, called Acquisition_DefineDestBuffers(hAcqDesc_=00000000000002A4, pAcqBuffer_=000002433E253040, numFrames=1, uiRows_=4096, uiColumns_=4096)

2023/11/02 14:31:30.272 PEDET1 addr -1 queueRequest priority 0 not lockHolder

2023/11/02 14:31:30.336 PerkinElmer::acquireNormalImage, called Acquisition_ResetFrameCnt(hAcqDesc_=00000000000002A4)

2023/11/02 14:31:30.336 PerkinElmer::acquireNormalImage, called Acquisition_SetReady(hAcqDesc_=00000000000002A4, ready=1)

2023/11/02 14:31:30.351 PerkinElmer::acquireNormalImage, called Acquisition_Acquire_Image(hAcqDesc_=00000000000002A4, numFrames=1, numFramesToSkip=0, sequenceOptions=2, pOffsetData=0000000000000000, pGainData=0000000000000000, pPixelData=0000000000000000)

2023/11/02 14:31:30.351 PerkinElmer:acquireNormalImage: Acquisition started...

2023/11/02 14:31:30.352 XRD:cam1:AcquireBusyCB devAsynInt32::interruptCallbackInput new value=1

2023/11/02 14:31:30.352 XRD:cam1:Acquire devAsynInt32::interruptCallbackOutput new value=1

2023/11/02 14:31:30.352 XRD:cam1:Acquire_RBV devAsynInt32::interruptCallbackInput new value=1

2023/11/02 14:31:30.353 XRD:cam1:NumImagesCounter_RBV devAsynInt32::interruptCallbackInput new value=0

2023/11/02 14:31:30.353 XRD:cam1:DetectorState_RBV devAsynInt32::interruptCallbackInput new value=1

2023/11/02 14:31:30.353 PerkinElmer:writeInt32: function=8, value=1

2023/11/02 14:31:30.353 XRD:cam1:Acquire devAsynInt32::processCallbackOutput process value 1

2023/11/02 14:31:30.354 asynManager::portThread port=PEDET1 callback

2023/11/02 14:31:30.354 asynPortDriver:readFloat64: function=57, name=POOL_USED_MEMORY, value=64.359550

2023/11/02 14:31:30.354 XRD:cam1:PoolUsedMem devAsynFloat64::processCallbackInput process value=64.359550

2023/11/02 14:31:30.354 XRD:cam1:AcquireBusyCB devAsynInt32::getCallbackValue from ringBuffer value=1

2023/11/02 14:31:30.355 XRD:cam1:Acquire_RBV devAsynInt32::getCallbackValue from ringBuffer value=1

2023/11/02 14:31:30.355 XRD:cam1:NumImagesCounter_RBV devAsynInt32::getCallbackValue from ringBuffer value=0

2023/11/02 14:31:30.355 XRD:cam1:DetectorState_RBV devAsynInt32::getCallbackValue from ringBuffer value=1

2023/11/02 14:31:30.355 PEDET1 addr -1 queueRequest priority 0 not lockHolder

2023/11/02 14:31:30.356 XRD:cam1:Acquire devAsynInt32::getCallbackValue from ringBuffer value=1

2023/11/02 14:31:30.356 asynManager::portThread port=PEDET1 callback

2023/11/02 14:31:30.356 asynPortDriver:readInt32: function=54, name=POOL_ALLOC_BUFFERS, value=4

2023/11/02 14:31:30.356 XRD:cam1:PoolAllocBuffers devAsynInt32::processCallbackInput process value=4

2023/11/02 14:31:30.357 PEDET1 addr -1 queueRequest priority 0 not lockHolder

2023/11/02 14:31:30.357 asynManager::portThread port=PEDET1 callback

2023/11/02 14:31:30.357 asynPortDriver:readInt32: function=55, name=POOL_FREE_BUFFERS, value=0

2023/11/02 14:31:30.357 XRD:cam1:PoolFreeBuffers devAsynInt32::processCallbackInput process value=0

2023/11/02 14:31:30.811 PerkinElmer:endFrameCallback: entry ...

2023/11/02 14:31:30.811 PerkinElmer::endFrameCallback, called Acquisition_GetActFrame(hAcqDesc=00000000000002A4, ActAcqFrame=1, ActBuffFrame=1)

2023/11/02 14:31:30.811 PerkinElmer:endFrameCallback: ActAcqFrame = 1, ActBuffFrame = 1

2023/11/02 14:31:30.812 PerkinElmer:endFrameCallback: uiNumBuffersInUse_ = 1

2023/11/02 14:31:30.812 PerkinElmer:endFrameCallback: currBuff = 0, pInput = 000002433E253040

 

The lines:

 

2023/11/02 14:31:28.697 PerkinElmer:readPixelCorrectionFile:, Pixel correction file name: C:\epics\Messdaten\15898_0pF5_PxlMask.his

2023/11/02 14:31:28.704 PerkinElmer:readPixelCorrectionFile: buffer size: 33554432, pBadPixelMap: 1542500416

2023/11/02 14:31:28.721 PerkinElmer:readPixelCorrectionFile: Bad pixel map read in: 0 bad pixels found

 

say that there are 0 bad pixels found. But when I load the very same file into the vendor software XIS, it works. Also loading it into ImageJ as a raw image displays me the bad pixels: I see some pixels with 65535 counts and all the others 0.

 

Best regards

Michael

 

 

 

 

 

 

 

 

 

 


Replies:
AW: ADPerkinElmer Bad Pixel Files Sintschuk, Michael via Tech-talk
References:
ADPerkinElmer Bad Pixel Files Sintschuk, Michael via Tech-talk
AW: ADPerkinElmer Bad Pixel Files Sintschuk, Michael via Tech-talk
Re: ADPerkinElmer Bad Pixel Files Mark Rivers via Tech-talk

Navigate by Date:
Prev: Re: second relative motion stuck in a do loop Kevin Peterson via Tech-talk
Next: Re: caget -d DBR_...INT doesn't work Ralph Lange via Tech-talk
Index: 1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  2018  2019  2020  2021  2022  <20232024 
Navigate by Thread:
Prev: Re: ADPerkinElmer Bad Pixel Files Mark Rivers via Tech-talk
Next: AW: ADPerkinElmer Bad Pixel Files Sintschuk, Michael via Tech-talk
Index: 1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  2018  2019  2020  2021  2022  <20232024