From 17cdbc6d903d155eb9b451c3c87655d3fdf4d3f2 Mon Sep 17 00:00:00 2001 From: rivers Date: Thu, 2 Jun 2011 16:56:52 +0000 Subject: [PATCH] New file for writing HDF5 files; from Ulrik Pedersen at DLS git-svn-id: https://subversion.xor.aps.anl.gov/synApps/areaDetector/trunk@12884 dc6c5ff5-0b8b-c028-a01f-ffb33f00fc8b --- ADApp/Db/NDFileHDF5.template | 324 +++++++++++++++++++++++++++++++++++ 1 file changed, 324 insertions(+) create mode 100755 ADApp/Db/NDFileHDF5.template diff --git a/ADApp/Db/NDFileHDF5.template b/ADApp/Db/NDFileHDF5.template new file mode 100755 index 0000000..46f0d04 --- /dev/null +++ b/ADApp/Db/NDFileHDF5.template @@ -0,0 +1,324 @@ +# Database for NDFileHDF5 driver, which saves files for NDArray data. + +# Macros: +# % macro, P, Device Prefix +# % macro, R, Device Suffix +# % macro, PORT, Asyn Port name + +# % gdatag, template, NDFileHDF5, $(PORT)_NDFileHDF5, $(PORT) NDFileHDF5 class instance + +# This associates the template with an edm screen +# % gui, $(PORT), edmtab, NDFileHDF5.edl, P=$(P),R=$(R) + +# We replace some fields in records defined in NDFile.template +# File data format +record(mbbo, "$(P)$(R)FileFormat") +{ + field(ZRST, "HDF5") + field(ZRVL, "0") + field(ONST, "Invalid") + field(ONVL, "1") +} + +record(mbbi, "$(P)$(R)FileFormat_RBV") +{ + field(ZRST, "HDF5") + field(ZRVL, "0") + field(ONST, "Undefined") + field(ONVL, "1") +} + +# % gdatag, pv, rw, $(PORT)_NDFileHDF5, NumRowChunks, Number of rows to use per chunk +record(longout, "$(P)$(R)NumRowChunks") +{ + field(DTYP, "asynInt32") + field(OUT, "@asyn($(PORT),0)HDF5_nRowChunks") + field(PINI, "YES") +} + +# % gdatag, pv, ro, $(PORT)_NDFileHDF5, NumRowChunks_RBV, Readback of number of rows to use per chunk +record(longin, "$(P)$(R)NumRowChunks_RBV") +{ + field(DTYP, "asynInt32") + field(INP, "@asyn($(PORT),0)HDF5_nRowChunks") + field(PINI, "NO") + field(SCAN, "I/O Intr") +} + +# % gdatag, pv, rw, $(PORT)_NDFileHDF5, NumExtraDims, Number of extra dimensions [0..2] +record(longout, "$(P)$(R)NumExtraDims") +{ + field(DTYP, "asynInt32") + field(OUT, "@asyn($(PORT),0)HDF5_nExtraDims") + field(PINI, "YES") +} + +# % gdatag, pv, ro, $(PORT)_NDFileHDF5, NumExtraDims_RBV, Readback number of extra dimensions +record(longin, "$(P)$(R)NumExtraDims_RBV") +{ + field(DTYP, "asynInt32") + field(INP, "@asyn($(PORT),0)HDF5_nExtraDims") + field(PINI, "NO") + field(SCAN, "I/O Intr") +} + +# % gdatag, pv, rw, $(PORT)_NDFileHDF5, ExtraDimSizeN, Size of extra dimension N (no. of frames per point) +record(longout, "$(P)$(R)ExtraDimSizeN") +{ + field(DTYP, "asynInt32") + field(OUT, "@asyn($(PORT),0)HDF5_extraDimSizeN") + field(PINI, "YES") +} + +# % gdatag, pv, ro, $(PORT)_NDFileHDF5, ExtraDimSizeN_RBV, Readback size of extra dimension N (no. of frames per point) +record(longin, "$(P)$(R)ExtraDimSizeN_RBV") +{ + field(DTYP, "asynInt32") + field(INP, "@asyn($(PORT),0)HDF5_extraDimSizeN") + field(PINI, "NO") + field(SCAN, "I/O Intr") +} + +record(stringin, "$(P)$(R)ExtraDimNameN_RBV") +{ + field(DTYP, "asynOctetRead") + field(INP, "@asyn($(PORT),0)HDF5_extraDimNameN") + field(PINI, "NO") + field(SCAN, "I/O Intr") +} + +# % gdatag, pv, rw, $(PORT)_NDFileHDF5, ExtraDimSizeX, Size of extra dimension X +record(longout, "$(P)$(R)ExtraDimSizeX") +{ + field(DTYP, "asynInt32") + field(OUT, "@asyn($(PORT),0)HDF5_extraDimSizeX") + field(PINI, "YES") +} + +# % gdatag, pv, ro, $(PORT)_NDFileHDF5, ExtraDimSizeX_RBV, Readback size of extra dimension X +record(longin, "$(P)$(R)ExtraDimSizeX_RBV") +{ + field(DTYP, "asynInt32") + field(INP, "@asyn($(PORT),0)HDF5_extraDimSizeX") + field(PINI, "NO") + field(SCAN, "I/O Intr") +} + +record(stringin, "$(P)$(R)ExtraDimNameX_RBV") +{ + field(DTYP, "asynOctetRead") + field(INP, "@asyn($(PORT),0)HDF5_extraDimNameX") + field(PINI, "NO") + field(SCAN, "I/O Intr") +} + +# % gdatag, pv, rw, $(PORT)_NDFileHDF5, ExtraDimSizeY, Size of extra dimension Y +record(longout, "$(P)$(R)ExtraDimSizeY") +{ + field(DTYP, "asynInt32") + field(OUT, "@asyn($(PORT),0)HDF5_extraDimSizeY") + field(PINI, "YES") +} + +# % gdatag, pv, ro, $(PORT)_NDFileHDF5, ExtraDimSizeY_RBV, Readback size of extra dimension Y +record(longin, "$(P)$(R)ExtraDimSizeY_RBV") +{ + field(DTYP, "asynInt32") + field(INP, "@asyn($(PORT),0)HDF5_extraDimSizeY") + field(PINI, "NO") + field(SCAN, "I/O Intr") +} + +record(stringin, "$(P)$(R)ExtraDimNameY_RBV") +{ + field(DTYP, "asynOctetRead") + field(INP, "@asyn($(PORT),0)HDF5_extraDimNameY") + field(PINI, "NO") + field(SCAN, "I/O Intr") +} + +record(bo, "$(P)$(R)StoreAttr") +{ + field(DTYP, "asynInt32") + field(OUT, "@asyn($(PORT),0)HDF5_storeAttributes") + field(PINI, "NO") + field(ZNAM, "off") + field(ONAM, "on") +} + +record(bi, "$(P)$(R)StoreAttr_RBV") +{ + field(DTYP, "asynInt32") + field(INP, "@asyn($(PORT),0)HDF5_storeAttributes") + field(PINI, "NO") + field(SCAN, "I/O Intr") + field(ZNAM, "off") + field(ONAM, "on") +} + +record(bo, "$(P)$(R)StorePerform") +{ + field(DTYP, "asynInt32") + field(OUT, "@asyn($(PORT),0)HDF5_storePerformance") + field(PINI, "NO") + field(ZNAM, "off") + field(ONAM, "on") +} + +record(bi, "$(P)$(R)StorePerform_RBV") +{ + field(DTYP, "asynInt32") + field(INP, "@asyn($(PORT),0)HDF5_storePerformance") + field(PINI, "NO") + field(SCAN, "I/O Intr") + field(ZNAM, "off") + field(ONAM, "on") +} + +# % gdatag, pv, ro, $(PORT)_NDFileHDF5, runtime, Total runtime from first frame to file closed +record(ai, "$(P)$(R)Runtime") +{ + field(DTYP, "asynFloat64") + field(INP, "@asyn($(PORT),0)HDF5_totalRuntime") + field(PINI, "NO") + field(SCAN, "I/O Intr") + field(PREC, "3") + field(EGU, "s") +} + +# % gdatag, pv, ro, $(PORT)_NDFileHDF5, IOSpeed, Overall IO speed from first frame to file closed +record(ai, "$(P)$(R)IOSpeed") +{ + field(DTYP, "asynFloat64") + field(INP, "@asyn($(PORT),0)HDF5_totalIoSpeed") + field(PINI, "NO") + field(SCAN, "I/O Intr") + field(PREC, "1") + field(EGU, "Mbit/s") +} + + +# % gdatag, pv, rw, $(PORT)_NDFileHDF5, Compression, Select or switch off compression filter +record(mbbo, "$(P)$(R)Compression") +{ + field(DTYP, "asynInt32") + field(OUT, "@asyn($(PORT),0)HDF5_compressionType") + field(ZRST, "None") + field(ZRVL, "0") + field(ONST, "N-bit") + field(ONVL, "1") + field(TWST, "szip") + field(TWVL, "2") + field(THST, "zlib") + field(THVL, "3") +} + +# % gdatag, pv, ro, $(PORT)_NDFileHDF5, NumBitOffset_RBV, Readback selected compression filter +record(mbbi, "$(P)$(R)Compression_RBV") +{ + field(DTYP, "asynInt32") + field(INP, "@asyn($(PORT),0)HDF5_compressionType") + field(PINI, "NO") + field(SCAN, "I/O Intr") + field(ZRST, "None") + field(ZRVL, "0") + field(ONST, "nbit") + field(ONVL, "1") + field(TWST, "szip") + field(TWVL, "2") + field(THST, "zlib") + field(THVL, "3") +} + +# % gdatag, pv, rw, $(PORT)_NDFileHDF5, NumBitPrecision, N-bit compression filter: number of data bits per pixel +record(longout, "$(P)$(R)NumDataBits") +{ + field(DTYP, "asynInt32") + field(OUT, "@asyn($(PORT),0)HDF5_nbitsPrecision") + field(PINI, "NO") + field(EGU, "bit") +} + +# % gdatag, pv, ro, $(PORT)_NDFileHDF5, NumBitPrecision_RBV, Readback N-bit compression filter: number of data bits per pixel +record(longin, "$(P)$(R)NumDataBits_RBV") +{ + field(DTYP, "asynInt32") + field(INP, "@asyn($(PORT),0)HDF5_nbitsPrecision") + field(PINI, "NO") + field(SCAN, "I/O Intr") + field(EGU, "bit") +} + +# % gdatag, pv, rw, $(PORT)_NDFileHDF5, NumBitOffset, N-bit compression filter: dataword bit-offset in pixel +record(longout, "$(P)$(R)DataBitsOffset") +{ + field(DTYP, "asynInt32") + field(OUT, "@asyn($(PORT),0)HDF5_nbitsOffset") + field(PINI, "NO") + field(EGU, "bit") +} + +# % gdatag, pv, ro, $(PORT)_NDFileHDF5, NumBitOffset_RBV, Readback N-bit compression filter: dataword bit-offset in pixel +record(longin, "$(P)$(R)DataBitsOffset_RBV") +{ + field(DTYP, "asynInt32") + field(INP, "@asyn($(PORT),0)HDF5_nbitsOffset") + field(PINI, "NO") + field(SCAN, "I/O Intr") + field(EGU, "bit") +} + +# % gdatag, pv, rw, $(PORT)_NDFileHDF5, szipNumPixels, szip compression filter: number of pixels in filter +record(longout, "$(P)$(R)SZipNumPixels") +{ + field(DTYP, "asynInt32") + field(OUT, "@asyn($(PORT),0)HDF5_szipNumPixels") + field(PINI, "NO") + field(EGU, "bit") +} + +# % gdatag, pv, ro, $(PORT)_NDFileHDF5, szipNumPixels_RBV, Readback szip compression filter: number of pixels in filter +record(longin, "$(P)$(R)SZipNumPixels_RBV") +{ + field(DTYP, "asynInt32") + field(INP, "@asyn($(PORT),0)HDF5_szipNumPixels") + field(PINI, "NO") + field(SCAN, "I/O Intr") + field(EGU, "bit") +} + +# % gdatag, pv, rw, $(PORT)_NDFileHDF5, ZCompressLevel, zlib compression filter: compression level +record(longout, "$(P)$(R)ZLevel") +{ + field(DTYP, "asynInt32") + field(OUT, "@asyn($(PORT),0)HDF5_zCompressLevel") + field(PINI, "NO") +} + +# % gdatag, pv, ro, $(PORT)_NDFileHDF5, ZCompressLevel_RBV, Readback zlib compression filter: compression level +record(longin, "$(P)$(R)ZLevel_RBV") +{ + field(DTYP, "asynInt32") + field(INP, "@asyn($(PORT),0)HDF5_zCompressLevel") + field(PINI, "NO") + field(SCAN, "I/O Intr") +} + + +# override the FTVL field of the string records so we can do dbpf in startup script +record(waveform, "$(P)$(R)FilePath") +{ + field(FTVL, "CHAR") +} +record(waveform, "$(P)$(R)FileName") +{ + field(FTVL, "CHAR") +} +record(waveform, "$(P)$(R)FileTemplate") +{ + field(FTVL, "CHAR") +} +record(waveform, "$(P)$(R)NDAttributesFile") +{ + field(FTVL, "CHAR") +}