├── .ci-local ├── adsupport-config.py ├── adsupport.set └── os.set ├── .github └── workflows │ └── ci-scripts.yml ├── .gitignore ├── .gitmodules ├── .travis.yml ├── ADApp ├── ADSrc │ ├── ADCoreAPI.h │ ├── ADCoreVersion.h │ ├── ADDriver.cpp │ ├── ADDriver.h │ ├── ADSupport.dbd │ ├── CCDMultiTrack.cpp │ ├── CCDMultiTrack.h │ ├── Codec.h │ ├── Makefile │ ├── NDArray.cpp │ ├── NDArray.h │ ├── NDArrayPool.cpp │ ├── NDAttribute.cpp │ ├── NDAttribute.h │ ├── NDAttributeList.cpp │ ├── NDAttributeList.h │ ├── PVAttribute.cpp │ ├── PVAttribute.h │ ├── asynNDArrayDriver.cpp │ ├── asynNDArrayDriver.h │ ├── functAttribute.cpp │ ├── functAttribute.h │ ├── myAttributeFunctions.cpp │ ├── myTimeStampSource.cpp │ ├── paramAttribute.cpp │ ├── paramAttribute.h │ └── parseAreaPrefixes.c ├── Db │ ├── ADAutoSaveMenu.req │ ├── ADBase.template │ ├── ADBase_settings.req │ ├── ADPrefixes.template │ ├── CCDMultiTrack.template │ ├── CCDMultiTrack_settings.req │ ├── Makefile │ ├── NDArrayBase.template │ ├── NDArrayBase_settings.req │ ├── NDAttrPlot.template │ ├── NDAttrPlotAttr.template │ ├── NDAttrPlotData.template │ ├── NDAttribute.template │ ├── NDAttributeN.template │ ├── NDAttributeN_settings.req │ ├── NDAttribute_settings.req │ ├── NDBadPixel.template │ ├── NDBadPixel_settings.req │ ├── NDCircularBuff.template │ ├── NDCircularBuff_settings.req │ ├── NDCodec.template │ ├── NDCodec_settings.req │ ├── NDColorConvert.template │ ├── NDColorConvert_settings.req │ ├── NDFFT.template │ ├── NDFFT_settings.req │ ├── NDFile.template │ ├── NDFileHDF5.template │ ├── NDFileHDF5_settings.req │ ├── NDFileJPEG.template │ ├── NDFileJPEG_settings.req │ ├── NDFileMagick.template │ ├── NDFileMagick_settings.req │ ├── NDFileNetCDF.template │ ├── NDFileNetCDF_settings.req │ ├── NDFileNexus.template │ ├── NDFileNexus_settings.req │ ├── NDFileTIFF.template │ ├── NDFileTIFF_settings.req │ ├── NDFile_settings.req │ ├── NDGather.template │ ├── NDGatherN.template │ ├── NDGatherN_settings.req │ ├── NDGather_settings.req │ ├── NDOverlay.template │ ├── NDOverlayN.template │ ├── NDOverlayN_settings.req │ ├── NDOverlay_settings.req │ ├── NDPluginBase.template │ ├── NDPluginBase_settings.req │ ├── NDPluginFile_settings.req │ ├── NDPosPlugin.template │ ├── NDProcess.template │ ├── NDProcess_settings.req │ ├── NDPva.template │ ├── NDPva_settings.req │ ├── NDROI.template │ ├── NDROIStat.template │ ├── NDROIStat8.template │ ├── NDROIStatN.template │ ├── NDROIStatN_settings.req │ ├── NDROIStat_settings.req │ ├── NDROI_settings.req │ ├── NDScatter.template │ ├── NDScatter_settings.req │ ├── NDStats.template │ ├── NDStats_settings.req │ ├── NDStdArrays.template │ ├── NDStdArrays_settings.req │ ├── NDTimeSeries.template │ ├── NDTimeSeriesN.template │ ├── NDTimeSeriesN_settings.req │ ├── NDTimeSeries_settings.req │ ├── NDTransform.template │ └── NDTransform_settings.req ├── Makefile ├── commonDriverMakefile ├── commonLibraryMakefile ├── ntndArrayConverterSrc │ ├── Makefile │ ├── ntndArrayConverter.cpp │ ├── ntndArrayConverter.h │ └── ntndArrayConverterAPI.h ├── op │ ├── Makefile │ ├── adl │ │ ├── ADAttrFile.adl │ │ ├── ADBase.adl │ │ ├── ADBuffers.adl │ │ ├── ADCollect.adl │ │ ├── ADDriverFile.adl │ │ ├── ADEpicsShutter.adl │ │ ├── ADPlugins.adl │ │ ├── ADReadout.adl │ │ ├── ADSetup.adl │ │ ├── ADShutter.adl │ │ ├── ADTop.adl │ │ ├── NDBadPixel.adl │ │ ├── NDCircularBuff.adl │ │ ├── NDCircularBuffHelp.adl │ │ ├── NDCodec.adl │ │ ├── NDColorConvert.adl │ │ ├── NDFFT.adl │ │ ├── NDFFT16.adl │ │ ├── NDFFTFreqSpectrumPlot.adl │ │ ├── NDFFTPlotAll.adl │ │ ├── NDFFTTimeSeriesPlot.adl │ │ ├── NDFile.adl │ │ ├── NDFileBase.adl │ │ ├── NDFileHDF5.adl │ │ ├── NDFileHDF5_ChunkingFull.adl │ │ ├── NDFileHDF5_ExtraDims.adl │ │ ├── NDFileHDF5_Positions.adl │ │ ├── NDFileJPEG.adl │ │ ├── NDFileMagick.adl │ │ ├── NDFileNetCDF.adl │ │ ├── NDFileNexus.adl │ │ ├── NDFileNull.adl │ │ ├── NDFileTIFF.adl │ │ ├── NDGather8.adl │ │ ├── NDOverlay.adl │ │ ├── NDOverlay8.adl │ │ ├── NDOverlayN.adl │ │ ├── NDPlot.adl │ │ ├── NDPlotXY.adl │ │ ├── NDPluginAttribute.adl │ │ ├── NDPluginAttribute8.adl │ │ ├── NDPluginBase.adl │ │ ├── NDPluginBaseFull.adl │ │ ├── NDPluginTimeSeries.adl │ │ ├── NDPluginTimeSeriesN.adl │ │ ├── NDPos.adl │ │ ├── NDProcess.adl │ │ ├── NDProcessTIFF.adl │ │ ├── NDPva.adl │ │ ├── NDROI.adl │ │ ├── NDROI4.adl │ │ ├── NDROIStat.adl │ │ ├── NDROIStat8.adl │ │ ├── NDROIStatN.adl │ │ ├── NDScatter.adl │ │ ├── NDStats.adl │ │ ├── NDStats5.adl │ │ ├── NDStatsTimeSeriesBasicAll.adl │ │ ├── NDStatsTimeSeriesCentroidAll.adl │ │ ├── NDStatsTimeSeriesPlot.adl │ │ ├── NDStdArrays.adl │ │ ├── NDTimeSeries.adl │ │ ├── NDTimeSeriesPlot.adl │ │ ├── NDTransform.adl │ │ ├── commonPlugins.adl │ │ └── createDirectoryHelp.adl │ ├── bob │ │ ├── autoconvert │ │ │ ├── ADAttrFile.bob │ │ │ ├── ADBase.bob │ │ │ ├── ADBuffers.bob │ │ │ ├── ADCollect.bob │ │ │ ├── ADDriverFile.bob │ │ │ ├── ADEpicsShutter.bob │ │ │ ├── ADPlugins.bob │ │ │ ├── ADReadout.bob │ │ │ ├── ADSetup.bob │ │ │ ├── ADShutter.bob │ │ │ ├── ADTop.bob │ │ │ ├── NDBadPixel.bob │ │ │ ├── NDCircularBuff.bob │ │ │ ├── NDCircularBuffHelp.bob │ │ │ ├── NDCodec.bob │ │ │ ├── NDColorConvert.bob │ │ │ ├── NDFFT.bob │ │ │ ├── NDFFT16.bob │ │ │ ├── NDFFTFreqSpectrumPlot.bob │ │ │ ├── NDFFTPlotAll.bob │ │ │ ├── NDFFTTimeSeriesPlot.bob │ │ │ ├── NDFile.bob │ │ │ ├── NDFileBase.bob │ │ │ ├── NDFileHDF5.bob │ │ │ ├── NDFileHDF5_ChunkingFull.bob │ │ │ ├── NDFileHDF5_ExtraDims.bob │ │ │ ├── NDFileHDF5_Positions.bob │ │ │ ├── NDFileJPEG.bob │ │ │ ├── NDFileMagick.bob │ │ │ ├── NDFileNetCDF.bob │ │ │ ├── NDFileNexus.bob │ │ │ ├── NDFileNull.bob │ │ │ ├── NDFileTIFF.bob │ │ │ ├── NDGather8.bob │ │ │ ├── NDOverlay.bob │ │ │ ├── NDOverlay8.bob │ │ │ ├── NDOverlayN.bob │ │ │ ├── NDPlot.bob │ │ │ ├── NDPlotXY.bob │ │ │ ├── NDPluginAttribute.bob │ │ │ ├── NDPluginAttribute8.bob │ │ │ ├── NDPluginBase.bob │ │ │ ├── NDPluginBaseFull.bob │ │ │ ├── NDPluginTimeSeries.bob │ │ │ ├── NDPluginTimeSeriesN.bob │ │ │ ├── NDPos.bob │ │ │ ├── NDProcess.bob │ │ │ ├── NDProcessTIFF.bob │ │ │ ├── NDPva.bob │ │ │ ├── NDROI.bob │ │ │ ├── NDROI4.bob │ │ │ ├── NDROIStat.bob │ │ │ ├── NDROIStat8.bob │ │ │ ├── NDROIStatN.bob │ │ │ ├── NDScatter.bob │ │ │ ├── NDStats.bob │ │ │ ├── NDStats5.bob │ │ │ ├── NDStatsTimeSeriesBasicAll.bob │ │ │ ├── NDStatsTimeSeriesCentroidAll.bob │ │ │ ├── NDStatsTimeSeriesPlot.bob │ │ │ ├── NDStdArrays.bob │ │ │ ├── NDTimeSeries.bob │ │ │ ├── NDTimeSeriesPlot.bob │ │ │ ├── NDTransform.bob │ │ │ ├── commonPlugins.bob │ │ │ └── createDirectoryHelp.bob │ │ └── sim_cam_image.bob │ ├── edl │ │ ├── ADBaseAdvanced.edl │ │ ├── Makefile │ │ ├── NDAttrPlot.edl │ │ ├── NDAttrPlot_Plot.edl │ │ ├── NDAttrPlot_Select.edl │ │ ├── NDAttrPlot_SelectSymbol.edl │ │ ├── NDAttribute.edl │ │ ├── NDAttributeN.edl │ │ ├── NDCircularBuff.edl │ │ ├── NDFile.edl │ │ ├── NDFileCBF.edl │ │ ├── NDFileDetails.edl │ │ ├── NDFileHDF5.edl │ │ ├── NDFileHDF5Details.edl │ │ ├── NDFileHDF5SWMRDetails.edl │ │ ├── NDFileJPEG.edl │ │ ├── NDFileMagick.edl │ │ ├── NDFileNetCDF.edl │ │ ├── NDFileNexus.edl │ │ ├── NDFileReduced.edl │ │ ├── NDFileTIFF.edl │ │ ├── NDOverlay.edl │ │ ├── NDOverlayN.edl │ │ ├── NDPlot.edl │ │ ├── NDPluginBase.edl │ │ ├── NDPluginDriverAdvanced.edl │ │ ├── NDPosPlugin.edl │ │ ├── NDProcess.edl │ │ ├── NDPvaPlugin.edl │ │ ├── NDROI.edl │ │ ├── NDROIStat.edl │ │ ├── NDROIStatN.edl │ │ ├── NDStats.edl │ │ ├── NDStdArrays.edl │ │ ├── NDStdArraysBig.edl │ │ ├── NDStdArraysWf.edl │ │ ├── NDTransform.edl │ │ ├── autoconvert │ │ │ ├── ADAttrFile.edl │ │ │ ├── ADBase.edl │ │ │ ├── ADBuffers.edl │ │ │ ├── ADCollect.edl │ │ │ ├── ADDriverFile.edl │ │ │ ├── ADEpicsShutter.edl │ │ │ ├── ADPlugins.edl │ │ │ ├── ADReadout.edl │ │ │ ├── ADSetup.edl │ │ │ ├── ADShutter.edl │ │ │ ├── ADTop.edl │ │ │ ├── NDBadPixel.edl │ │ │ ├── NDCircularBuff.edl │ │ │ ├── NDCircularBuffHelp.edl │ │ │ ├── NDCodec.edl │ │ │ ├── NDColorConvert.edl │ │ │ ├── NDFFT.edl │ │ │ ├── NDFFT16.edl │ │ │ ├── NDFFTFreqSpectrumPlot.edl │ │ │ ├── NDFFTPlotAll.edl │ │ │ ├── NDFFTTimeSeriesPlot.edl │ │ │ ├── NDFile.edl │ │ │ ├── NDFileBase.edl │ │ │ ├── NDFileHDF5.edl │ │ │ ├── NDFileHDF5_ChunkingFull.edl │ │ │ ├── NDFileHDF5_ExtraDims.edl │ │ │ ├── NDFileHDF5_Positions.edl │ │ │ ├── NDFileJPEG.edl │ │ │ ├── NDFileMagick.edl │ │ │ ├── NDFileNetCDF.edl │ │ │ ├── NDFileNexus.edl │ │ │ ├── NDFileNull.edl │ │ │ ├── NDFileTIFF.edl │ │ │ ├── NDGather8.edl │ │ │ ├── NDOverlay.edl │ │ │ ├── NDOverlay8.edl │ │ │ ├── NDOverlayN.edl │ │ │ ├── NDPlot.edl │ │ │ ├── NDPlotXY.edl │ │ │ ├── NDPluginAttribute.edl │ │ │ ├── NDPluginAttribute8.edl │ │ │ ├── NDPluginBase.edl │ │ │ ├── NDPluginBaseFull.edl │ │ │ ├── NDPluginTimeSeries.edl │ │ │ ├── NDPluginTimeSeriesN.edl │ │ │ ├── NDPos.edl │ │ │ ├── NDProcess.edl │ │ │ ├── NDProcessTIFF.edl │ │ │ ├── NDPva.edl │ │ │ ├── NDROI.edl │ │ │ ├── NDROI4.edl │ │ │ ├── NDROIStat.edl │ │ │ ├── NDROIStat8.edl │ │ │ ├── NDROIStatN.edl │ │ │ ├── NDScatter.edl │ │ │ ├── NDStats.edl │ │ │ ├── NDStats5.edl │ │ │ ├── NDStatsTimeSeriesBasicAll.edl │ │ │ ├── NDStatsTimeSeriesCentroidAll.edl │ │ │ ├── NDStatsTimeSeriesPlot.edl │ │ │ ├── NDStdArrays.edl │ │ │ ├── NDTimeSeries.edl │ │ │ ├── NDTimeSeriesPlot.edl │ │ │ ├── NDTransform.edl │ │ │ ├── commonPlugins.edl │ │ │ └── createDirectoryHelp.edl │ │ └── simTop.edl │ ├── opi │ │ └── autoconvert │ │ │ ├── ADAttrFile.opi │ │ │ ├── ADBase.opi │ │ │ ├── ADBuffers.opi │ │ │ ├── ADCollect.opi │ │ │ ├── ADDriverFile.opi │ │ │ ├── ADEpicsShutter.opi │ │ │ ├── ADPlugins.opi │ │ │ ├── ADReadout.opi │ │ │ ├── ADSetup.opi │ │ │ ├── ADShutter.opi │ │ │ ├── ADTop.opi │ │ │ ├── NDBadPixel.opi │ │ │ ├── NDCircularBuff.opi │ │ │ ├── NDCircularBuffHelp.opi │ │ │ ├── NDCodec.opi │ │ │ ├── NDColorConvert.opi │ │ │ ├── NDFFT.opi │ │ │ ├── NDFFT16.opi │ │ │ ├── NDFFTFreqSpectrumPlot.opi │ │ │ ├── NDFFTPlotAll.opi │ │ │ ├── NDFFTTimeSeriesPlot.opi │ │ │ ├── NDFile.opi │ │ │ ├── NDFileBase.opi │ │ │ ├── NDFileHDF5.opi │ │ │ ├── NDFileHDF5_ChunkingFull.opi │ │ │ ├── NDFileHDF5_ExtraDims.opi │ │ │ ├── NDFileHDF5_Positions.opi │ │ │ ├── NDFileJPEG.opi │ │ │ ├── NDFileMagick.opi │ │ │ ├── NDFileNetCDF.opi │ │ │ ├── NDFileNexus.opi │ │ │ ├── NDFileNull.opi │ │ │ ├── NDFileTIFF.opi │ │ │ ├── NDGather8.opi │ │ │ ├── NDOverlay.opi │ │ │ ├── NDOverlay8.opi │ │ │ ├── NDOverlayN.opi │ │ │ ├── NDPlot.opi │ │ │ ├── NDPlotXY.opi │ │ │ ├── NDPluginAttribute.opi │ │ │ ├── NDPluginAttribute8.opi │ │ │ ├── NDPluginBase.opi │ │ │ ├── NDPluginBaseFull.opi │ │ │ ├── NDPluginTimeSeries.opi │ │ │ ├── NDPluginTimeSeriesN.opi │ │ │ ├── NDPos.opi │ │ │ ├── NDProcess.opi │ │ │ ├── NDProcessTIFF.opi │ │ │ ├── NDPva.opi │ │ │ ├── NDROI.opi │ │ │ ├── NDROI4.opi │ │ │ ├── NDROIStat.opi │ │ │ ├── NDROIStat8.opi │ │ │ ├── NDROIStatN.opi │ │ │ ├── NDScatter.opi │ │ │ ├── NDStats.opi │ │ │ ├── NDStats5.opi │ │ │ ├── NDStatsTimeSeriesBasicAll.opi │ │ │ ├── NDStatsTimeSeriesCentroidAll.opi │ │ │ ├── NDStatsTimeSeriesPlot.opi │ │ │ ├── NDStdArrays.opi │ │ │ ├── NDTimeSeries.opi │ │ │ ├── NDTimeSeriesPlot.opi │ │ │ ├── NDTransform.opi │ │ │ ├── commonPlugins.opi │ │ │ └── createDirectoryHelp.opi │ └── ui │ │ ├── ad_cam_image.ui │ │ └── autoconvert │ │ ├── ADAttrFile.ui │ │ ├── ADBase.ui │ │ ├── ADBuffers.ui │ │ ├── ADCollect.ui │ │ ├── ADDriverFile.ui │ │ ├── ADEpicsShutter.ui │ │ ├── ADPlugins.ui │ │ ├── ADReadout.ui │ │ ├── ADSetup.ui │ │ ├── ADShutter.ui │ │ ├── ADTop.ui │ │ ├── NDBadPixel.ui │ │ ├── NDCircularBuff.ui │ │ ├── NDCircularBuffHelp.ui │ │ ├── NDCodec.ui │ │ ├── NDColorConvert.ui │ │ ├── NDFFT.ui │ │ ├── NDFFT16.ui │ │ ├── NDFFTFreqSpectrumPlot.ui │ │ ├── NDFFTPlotAll.ui │ │ ├── NDFFTTimeSeriesPlot.ui │ │ ├── NDFile.ui │ │ ├── NDFileBase.ui │ │ ├── NDFileHDF5.ui │ │ ├── NDFileHDF5_ChunkingFull.ui │ │ ├── NDFileHDF5_ExtraDims.ui │ │ ├── NDFileHDF5_Positions.ui │ │ ├── NDFileJPEG.ui │ │ ├── NDFileMagick.ui │ │ ├── NDFileNetCDF.ui │ │ ├── NDFileNexus.ui │ │ ├── NDFileNull.ui │ │ ├── NDFileTIFF.ui │ │ ├── NDGather8.ui │ │ ├── NDOverlay.ui │ │ ├── NDOverlay8.ui │ │ ├── NDOverlayN.ui │ │ ├── NDPlot.ui │ │ ├── NDPlotXY.ui │ │ ├── NDPluginAttribute.ui │ │ ├── NDPluginAttribute8.ui │ │ ├── NDPluginBase.ui │ │ ├── NDPluginBaseFull.ui │ │ ├── NDPluginTimeSeries.ui │ │ ├── NDPluginTimeSeriesN.ui │ │ ├── NDPos.ui │ │ ├── NDProcess.ui │ │ ├── NDProcessTIFF.ui │ │ ├── NDPva.ui │ │ ├── NDROI.ui │ │ ├── NDROI4.ui │ │ ├── NDROIStat.ui │ │ ├── NDROIStat8.ui │ │ ├── NDROIStatN.ui │ │ ├── NDScatter.ui │ │ ├── NDStats.ui │ │ ├── NDStats5.ui │ │ ├── NDStatsTimeSeriesBasicAll.ui │ │ ├── NDStatsTimeSeriesCentroidAll.ui │ │ ├── NDStatsTimeSeriesPlot.ui │ │ ├── NDStdArrays.ui │ │ ├── NDTimeSeries.ui │ │ ├── NDTimeSeriesPlot.ui │ │ ├── NDTransform.ui │ │ ├── commonPlugins.ui │ │ └── createDirectoryHelp.ui ├── pluginSrc │ ├── CircularBuffer.h │ ├── Makefile │ ├── NDArrayRing.cpp │ ├── NDArrayRing.h │ ├── NDFileDummy.cpp │ ├── NDFileHDF5.cpp │ ├── NDFileHDF5.dbd │ ├── NDFileHDF5.h │ ├── NDFileHDF5AttributeDataset.cpp │ ├── NDFileHDF5AttributeDataset.h │ ├── NDFileHDF5Dataset.cpp │ ├── NDFileHDF5Dataset.h │ ├── NDFileHDF5Layout.cpp │ ├── NDFileHDF5Layout.h │ ├── NDFileHDF5LayoutXML.cpp │ ├── NDFileHDF5LayoutXML.h │ ├── NDFileHDF5VersionCheck.h │ ├── NDFileJPEG.cpp │ ├── NDFileJPEG.dbd │ ├── NDFileJPEG.h │ ├── NDFileMagick.cpp │ ├── NDFileMagick.dbd │ ├── NDFileMagick.h │ ├── NDFileNetCDF.cpp │ ├── NDFileNetCDF.dbd │ ├── NDFileNetCDF.h │ ├── NDFileNexus.cpp │ ├── NDFileNexus.dbd │ ├── NDFileNexus.h │ ├── NDFileNull.cpp │ ├── NDFileNull.dbd │ ├── NDFileNull.h │ ├── NDFileTIFF.cpp │ ├── NDFileTIFF.dbd │ ├── NDFileTIFF.h │ ├── NDPluginAPI.h │ ├── NDPluginAttrPlot.cpp │ ├── NDPluginAttrPlot.dbd │ ├── NDPluginAttrPlot.h │ ├── NDPluginAttribute.cpp │ ├── NDPluginAttribute.dbd │ ├── NDPluginAttribute.h │ ├── NDPluginBadPixel.cpp │ ├── NDPluginBadPixel.dbd │ ├── NDPluginBadPixel.h │ ├── NDPluginCircularBuff.cpp │ ├── NDPluginCircularBuff.dbd │ ├── NDPluginCircularBuff.h │ ├── NDPluginCodec.cpp │ ├── NDPluginCodec.dbd │ ├── NDPluginCodec.h │ ├── NDPluginColorConvert.cpp │ ├── NDPluginColorConvert.dbd │ ├── NDPluginColorConvert.h │ ├── NDPluginDriver.cpp │ ├── NDPluginDriver.h │ ├── NDPluginFFT.cpp │ ├── NDPluginFFT.dbd │ ├── NDPluginFFT.h │ ├── NDPluginFile.cpp │ ├── NDPluginFile.h │ ├── NDPluginGather.cpp │ ├── NDPluginGather.dbd │ ├── NDPluginGather.h │ ├── NDPluginOverlay.cpp │ ├── NDPluginOverlay.dbd │ ├── NDPluginOverlay.h │ ├── NDPluginOverlayTextFont.cpp │ ├── NDPluginOverlayTextFont.h │ ├── NDPluginProcess.cpp │ ├── NDPluginProcess.dbd │ ├── NDPluginProcess.h │ ├── NDPluginPva.cpp │ ├── NDPluginPva.dbd │ ├── NDPluginPva.h │ ├── NDPluginROI.cpp │ ├── NDPluginROI.dbd │ ├── NDPluginROI.h │ ├── NDPluginROIStat.cpp │ ├── NDPluginROIStat.dbd │ ├── NDPluginROIStat.h │ ├── NDPluginScatter.cpp │ ├── NDPluginScatter.dbd │ ├── NDPluginScatter.h │ ├── NDPluginStats.cpp │ ├── NDPluginStats.dbd │ ├── NDPluginStats.h │ ├── NDPluginStdArrays.cpp │ ├── NDPluginStdArrays.dbd │ ├── NDPluginStdArrays.h │ ├── NDPluginTimeSeries.cpp │ ├── NDPluginTimeSeries.dbd │ ├── NDPluginTimeSeries.h │ ├── NDPluginTransform.cpp │ ├── NDPluginTransform.dbd │ ├── NDPluginTransform.h │ ├── NDPosPlugin.cpp │ ├── NDPosPlugin.dbd │ ├── NDPosPlugin.h │ ├── NDPosPluginFileReader.cpp │ ├── NDPosPluginFileReader.h │ ├── colorMaps.h │ ├── fft.c │ ├── fft.h │ ├── json.hpp │ ├── test_forward_reference.cpp │ ├── throttler.cpp │ ├── throttler.h │ └── tiff_test.pro └── pluginTests │ ├── AsynException.cpp │ ├── AsynException.h │ ├── AsynPortClientContainer.cpp │ ├── AsynPortClientContainer.h │ ├── AttrPlotPluginWrapper.cpp │ ├── AttrPlotPluginWrapper.h │ ├── FFTPluginWrapper.cpp │ ├── FFTPluginWrapper.h │ ├── HDF5FileReader.cpp │ ├── HDF5FileReader.h │ ├── HDF5PluginWrapper.cpp │ ├── HDF5PluginWrapper.h │ ├── Makefile │ ├── OverlayPluginWrapper.cpp │ ├── OverlayPluginWrapper.h │ ├── PosPluginWrapper.cpp │ ├── PosPluginWrapper.h │ ├── README.md │ ├── ROIPluginWrapper.cpp │ ├── ROIPluginWrapper.h │ ├── TimeSeriesPluginWrapper.cpp │ ├── TimeSeriesPluginWrapper.h │ ├── plugin-test.cpp │ ├── test_NDArrayPool.cpp │ ├── test_NDFileHDF5.cpp │ ├── test_NDFileHDF5AttributeDataset.cpp │ ├── test_NDFileHDF5ExtraDimensions.cpp │ ├── test_NDPluginAttrPlot.cpp │ ├── test_NDPluginCircularBuff.cpp │ ├── test_NDPluginFFT.cpp │ ├── test_NDPluginOverlay.cpp │ ├── test_NDPluginROI.cpp │ ├── test_NDPluginTimeSeries.cpp │ ├── test_NDPosPlugin.cpp │ ├── test_SWMR_fail.c │ ├── test_SWMR_fail_min.c │ ├── test_SWMR_works.c │ ├── testingutilities.cpp │ └── testingutilities.h ├── LICENSE ├── Makefile ├── README.md ├── RELEASE.md ├── XML_schema ├── NDAttributes.xsd ├── NeXus_templates.xsd ├── example_attributes.xml ├── hdf5_xml_layout_schema.xsd ├── new_txm_sample.xml ├── template.sch └── validateXML.sh ├── ci ├── coverage.sh └── install-packages.sh ├── configure ├── CONFIG ├── CONFIG_SITE ├── Makefile ├── RELEASE ├── RULES ├── RULES.ioc ├── RULES_DIRS └── RULES_TOP ├── docs └── ADCore │ ├── ADBase.png │ ├── ADDriver.rst │ ├── ADEpicsShutter.png │ ├── ADTop.png │ ├── HDFView-screenshot.png │ ├── HDFmultiple-dimensions.png │ ├── NDArray.rst │ ├── NDBadPixel.png │ ├── NDCircularBuff.png │ ├── NDCodec.png │ ├── NDCodec_Performance.png │ ├── NDCodec_Performance_More.png │ ├── NDColorConvert.png │ ├── NDFFT16.png │ ├── NDFFTPeaksAbsVal.png │ ├── NDFFTPeaksImage.png │ ├── NDFFTPlotAbsValue.png │ ├── NDFFTPlotAll.png │ ├── NDFFTSimDetectorSetup.png │ ├── NDFFTSineAbsVal.png │ ├── NDFFTSineImage.png │ ├── NDFFTTimeSeriesPlot.png │ ├── NDFFTTimeSeriesPlotFFTAbsValue.png │ ├── NDFFTTimeSeriesPlotFFTAbsValueNoisyAvg1.png │ ├── NDFFTTimeSeriesPlotFFTAbsValueNoisyAvg100.png │ ├── NDFFTTimeSeriesPlotNoisy.png │ ├── NDFile.png │ ├── NDFileHDF5.png │ ├── NDFileHDF5.rst │ ├── NDFileJPEG.png │ ├── NDFileJPEG.rst │ ├── NDFileMagick.png │ ├── NDFileMagick.rst │ ├── NDFileNetCDF.png │ ├── NDFileNetCDF.rst │ ├── NDFileNexus.png │ ├── NDFileNexus.rst │ ├── NDFileTIFF.png │ ├── NDFileTIFF.rst │ ├── NDGather.png │ ├── NDOverlay.png │ ├── NDOverlay8.png │ ├── NDOverlayN.png │ ├── NDOverlay_image.jpg │ ├── NDPluginAttrPlot-usecase.png │ ├── NDPluginAttrPlot.png │ ├── NDPluginAttrPlot.rst │ ├── NDPluginAttrPlot_Plot.png │ ├── NDPluginAttrPlot_Select.png │ ├── NDPluginAttribute.png │ ├── NDPluginAttribute.rst │ ├── NDPluginAttribute8.png │ ├── NDPluginAttributeTSEpicsTSnSec.png │ ├── NDPluginAttributeTSUniqueID.png │ ├── NDPluginBadPixel.rst │ ├── NDPluginBase.png │ ├── NDPluginBaseFull.png │ ├── NDPluginCircularBuff.rst │ ├── NDPluginCodec.rst │ ├── NDPluginColorConvert.rst │ ├── NDPluginDriver.rst │ ├── NDPluginDriverExample_NDStats.png │ ├── NDPluginDriverExample_StatsFull_1thread.png │ ├── NDPluginDriverExample_StatsFull_3thread.png │ ├── NDPluginDriverExample_StatsFull_5thread.png │ ├── NDPluginDriverExample_StatsFull_5thread_unsorted.png │ ├── NDPluginDriverExample_simDetector.png │ ├── NDPluginDriverExample_simDetectorSetup.png │ ├── NDPluginDriverExample_top_1thread.png │ ├── NDPluginDriverExample_top_3thread.png │ ├── NDPluginDriverExample_top_5thread.png │ ├── NDPluginFFT.png │ ├── NDPluginFFT.rst │ ├── NDPluginFile.rst │ ├── NDPluginGather.rst │ ├── NDPluginOverlay.rst │ ├── NDPluginPos.png │ ├── NDPluginPos.rst │ ├── NDPluginProcess.rst │ ├── NDPluginPva.rst │ ├── NDPluginROI.rst │ ├── NDPluginROIStat.rst │ ├── NDPluginScatter.rst │ ├── NDPluginStats.rst │ ├── NDPluginStdArrays.rst │ ├── NDPluginTimeSeries.png │ ├── NDPluginTimeSeries.rst │ ├── NDPluginTransform.rst │ ├── NDProcess.png │ ├── NDProcessTIFF.png │ ├── NDProcess_filtered.jpg │ ├── NDProcess_unfiltered.jpg │ ├── NDPva.png │ ├── NDPva_Performance.png │ ├── NDROI.png │ ├── NDROI4.png │ ├── NDROIStat.png │ ├── NDROIStat8.png │ ├── NDROIStatN.png │ ├── NDROIStatTimeSeriesMean.png │ ├── NDScatter.png │ ├── NDStats.png │ ├── NDStats5.png │ ├── NDStatsTimeSeriesBasicAll.png │ ├── NDStatsTimeSeriesCentroidAll.png │ ├── NDStatsTimeSeriesCentroidY.png │ ├── NDStatsTimeSeriesTotal.png │ ├── NDStats_AverageX.png │ ├── NDStats_CursorY.png │ ├── NDStats_Histogram.png │ ├── NDStats_filtered.png │ ├── NDStats_unfiltered.png │ ├── NDStdArrays.png │ ├── NDTimeSeriesPlot.png │ ├── NDTransform.png │ ├── arch.rst │ ├── areaDetectorArchitecture.png │ ├── asynPortDriver.rst │ ├── commonPlugins.png │ ├── common_plugins.rst │ ├── ffmpegServer.rst │ ├── guidelines.rst │ ├── medm.rst │ ├── overview.rst │ ├── plugin_guidelines.rst │ ├── plugin_medm.rst │ ├── plugin_overview.rst │ ├── plugin_performance.rst │ ├── plugins.rst │ ├── scatterGatherExample_NDFileNetCDF.png │ ├── scatterGatherExample_NDGather.png │ ├── scatterGatherExample_NDGatherFull.png │ ├── scatterGatherExample_NDGatherFullUnsorted.png │ ├── scatterGatherExample_NDScatter.png │ ├── scatterGatherExample_NDStats.png │ ├── scatterGatherExample_commonPlugins.png │ ├── scatterGatherExample_simDetector.png │ ├── scatterGatherExample_simDetectorSetup.png │ └── scatterGatherExample_top_threads.png └── iocBoot ├── .gitignore ├── EXAMPLE_commonPlugin_settings.req ├── EXAMPLE_commonPlugins.cmd ├── pos_plugin_demo.xml └── pos_plugin_schema.xsd /.ci-local/adsupport-config.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | 3 | import os 4 | 5 | with open(os.path.join('configure', 'CONFIG_SITE'), 'w') as F: 6 | F.write(''' 7 | # ADSupport doesn't include CONFIG_SITE.local... 8 | WITH_BOOST=YES 9 | BOOST_EXTERNAL=YES 10 | WITH_HDF5=YES 11 | HDF5_EXTERNAL=NO 12 | XML2_EXTERNAL=NO 13 | WITH_NETCDF=YES 14 | NETCDF_EXTERNAL=NO 15 | WITH_NEXUS=YES 16 | NEXUS_EXTERNAL=NO 17 | WITH_TIFF=YES 18 | TIFF_EXTERNAL=NO 19 | WITH_JPEG=YES 20 | JPEG_EXTERNAL=NO 21 | WITH_SZIP=YES 22 | SZIP_EXTERNAL=NO 23 | WITH_ZLIB=YES 24 | ZLIB_EXTERNAL=NO 25 | WITH_BLOSC=YES 26 | BLOSC_EXTERNAL=NO 27 | WITH_BITSHUFFLE=YES 28 | BITSHUFFLE_EXTERNAL=NO 29 | ''') 30 | 31 | print('Wrote configure/CONFIG_SITE') 32 | -------------------------------------------------------------------------------- /.ci-local/adsupport.set: -------------------------------------------------------------------------------- 1 | include os 2 | 3 | ADD_MODULES=ADSUPPORT 4 | 5 | ADSUPPORT_REPOOWNER=areaDetector 6 | ADSUPPORT_HOOK=.ci-local/adsupport-config.py 7 | -------------------------------------------------------------------------------- /.ci-local/os.set: -------------------------------------------------------------------------------- 1 | include defaults 2 | 3 | MODULES=PVDATA PVACCESS NTYPES PVDATABASE ASYN 4 | 5 | BASE_RECURSIVE=no 6 | 7 | PVDATABASE_REPONAME=pvDatabaseCPP 8 | PVDATABASE_REPOOWNER=epics-base 9 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | bin 2 | lib 3 | include 4 | db 5 | dbd 6 | cfg 7 | *_BAK.adl 8 | documentation.html 9 | envPaths* 10 | cdCommands 11 | dllPath.bat 12 | auto_settings.sav* 13 | configure/*.local 14 | O.*/ 15 | *~ 16 | *.swp 17 | /QtC-* 18 | /.qtc_* 19 | .project 20 | .settings 21 | .cproject 22 | external/ 23 | 24 | ci/coverage.info 25 | ci/html/ 26 | 27 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule ".ci"] 2 | path = .ci 3 | url = https://github.com/epics-base/ci-scripts 4 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | sudo: required 2 | language: cpp 3 | compiler: gcc 4 | env: 5 | - EPICS_HOST_ARCH=linux-x86_64 6 | before_install: 7 | - bash ci/install-packages.sh 8 | install: 9 | - make 10 | script: 11 | - "valgrind --leak-check=yes --log-file=valgrind_output.txt ./bin/linux-x86_64/plugin-test --log_level=test_suite" 12 | after_success: 13 | - sh ci/coverage.sh 14 | - coveralls-lcov --source-encoding=ISO-8859-1 ci/coverage.info 15 | - tail --lines 15 valgrind_output.txt 16 | notifications: 17 | slack: epicsareadetector:xf0ac8PfwqcSqi2gE0tUcUkP 18 | -------------------------------------------------------------------------------- /ADApp/ADSrc/ADCoreAPI.h: -------------------------------------------------------------------------------- 1 | /* This is a generated file, do not edit! */ 2 | 3 | #ifndef INC_ADCoreAPI_H 4 | #define INC_ADCoreAPI_H 5 | 6 | #include 7 | 8 | #ifndef VERSION_INT 9 | //! Construct version number constant. 10 | # define VERSION_INT(V,R,M,P) ( ((V)<<24) | ((R)<<16) | ((M)<<8) | (P)) 11 | #endif 12 | 13 | #ifndef EPICS_VERSION_INT 14 | # define EPICS_VERSION_INT VERSION_INT(EPICS_VERSION, EPICS_REVISION, EPICS_MODIFICATION, EPICS_PATCH_LEVEL) 15 | #endif 16 | 17 | #if defined(_WIN32) && EPICS_VERSION_INT= 4 37 | # define ADCORE_API __attribute__ ((visibility("default"))) 38 | #endif 39 | 40 | #if !defined(ADCORE_API) 41 | # define ADCORE_API 42 | #endif 43 | 44 | #if !defined(epicsStdCall) 45 | # define epicsStdCall 46 | #endif 47 | 48 | #endif /* INC_ADCoreAPI_H */ 49 | 50 | -------------------------------------------------------------------------------- /ADApp/ADSrc/ADCoreVersion.h: -------------------------------------------------------------------------------- 1 | #ifndef ADCoreVersion_H 2 | #define ADCoreVersion_H 3 | 4 | #define ADCORE_VERSION 3 5 | #define ADCORE_REVISION 14 6 | #define ADCORE_MODIFICATION 0 7 | 8 | #endif 9 | 10 | -------------------------------------------------------------------------------- /ADApp/ADSrc/ADSupport.dbd: -------------------------------------------------------------------------------- 1 | variable(eraseNDAttributes, int) 2 | registrar(parseRegister) 3 | function(myTimeStampSource) 4 | function(myAttrFunct1) 5 | -------------------------------------------------------------------------------- /ADApp/ADSrc/CCDMultiTrack.h: -------------------------------------------------------------------------------- 1 | /** 2 | * Area Detector class enabling multi-ROI driver for the Andor CCD. 3 | * This class is used by CCD camera modules that permit multiple regions-of-interest. 4 | * 5 | * Multi-ROI is typically used for multi-track spectrocopy application. 6 | * 7 | * @author Peter Heesterman 8 | * @date Nov 2019 9 | * 10 | */ 11 | #ifndef CCD_MULTI_TRACK_H 12 | #define CCD_MULTI_TRACK_H 13 | 14 | #include 15 | #include 16 | #include 17 | 18 | class ADCORE_API CCDMultiTrack 19 | { 20 | asynPortDriver* mPortDriver; 21 | 22 | int mCCDMultiTrackStart; 23 | int mCCDMultiTrackEnd; 24 | int mCCDMultiTrackBin; 25 | 26 | std::vector mTrackStart; 27 | std::vector mTrackEnd; 28 | std::vector mTrackBin; 29 | 30 | public: 31 | size_t size() const { 32 | return mTrackStart.size(); 33 | } 34 | int CCDMultiTrackStart() const { 35 | return mCCDMultiTrackStart; 36 | } 37 | int CCDMultiTrackEnd() const { 38 | return mCCDMultiTrackEnd; 39 | } 40 | int CCDMultiTrackBin() const { 41 | return mCCDMultiTrackBin; 42 | } 43 | int TrackStart(size_t TrackNum) const { 44 | return (TrackNum < mTrackStart.size()) ? mTrackStart[TrackNum] : 0; 45 | }; 46 | int TrackEnd(size_t TrackNum) const { 47 | return (TrackNum < mTrackEnd.size()) ? mTrackEnd[TrackNum] : TrackStart(TrackNum); 48 | } 49 | int TrackHeight(size_t TrackNum) const { 50 | return TrackEnd(TrackNum) + 1 - TrackStart(TrackNum); 51 | } 52 | int TrackBin(size_t TrackNum) const { 53 | return (TrackNum < mTrackBin.size()) ? mTrackBin[TrackNum] : TrackHeight(TrackNum); 54 | } 55 | int DataHeight() const; 56 | int DataHeight(size_t TrackNum) const { 57 | return TrackHeight(TrackNum) / TrackBin(TrackNum); 58 | } 59 | 60 | CCDMultiTrack(asynPortDriver* asynPortDriver); 61 | asynStatus writeInt32Array(asynUser *pasynUser, epicsInt32 *value, size_t nElements); 62 | 63 | void storeTrackAttributes(NDAttributeList* pAttributeList); 64 | 65 | private: 66 | void writeTrackStart(epicsInt32 *value, size_t nElements); 67 | void writeTrackEnd(epicsInt32 *value, size_t nElements); 68 | void writeTrackBin(epicsInt32 *value, size_t nElements); 69 | 70 | }; 71 | 72 | #endif //CCD_MULTI_TRACK_H 73 | -------------------------------------------------------------------------------- /ADApp/ADSrc/Codec.h: -------------------------------------------------------------------------------- 1 | #ifndef Codec_H 2 | #define Codec_H 3 | 4 | static std::string codecName[] = { 5 | "", 6 | "jpeg", 7 | "blosc", 8 | "lz4", 9 | "bslz4" 10 | }; 11 | 12 | typedef enum { 13 | NDCODEC_NONE, 14 | NDCODEC_JPEG, 15 | NDCODEC_BLOSC, 16 | NDCODEC_LZ4, 17 | NDCODEC_BSLZ4 18 | } NDCodecCompressor_t; 19 | 20 | typedef struct Codec_t { 21 | std::string name; /**< Name of the codec used to compress the data. codecName[NDCODEC_NONE] if uncompressed. */ 22 | int level; /**< Compression level. */ 23 | int shuffle; /**< Shuffle type. */ 24 | int compressor; /**< Compressor type. For codecs that support more than one compressor. */ 25 | 26 | Codec_t() { 27 | clear(); 28 | } 29 | 30 | void clear() { 31 | name = codecName[NDCODEC_NONE]; 32 | level = -1; 33 | shuffle = -1; 34 | compressor = -1; 35 | } 36 | 37 | bool empty() { 38 | return this->name == codecName[NDCODEC_NONE]; 39 | } 40 | 41 | bool operator==(const Codec_t& other) { 42 | if (name == other.name && 43 | level == other.level && 44 | shuffle == other.shuffle && 45 | compressor == other.compressor) { 46 | return true; 47 | } else { 48 | return false; 49 | } 50 | } 51 | bool operator!=(const Codec_t& other) { 52 | return ! (*this == other); 53 | } 54 | } Codec_t; 55 | 56 | #endif //Codec_H 57 | -------------------------------------------------------------------------------- /ADApp/ADSrc/NDAttributeList.h: -------------------------------------------------------------------------------- 1 | /** NDAttributeList.h 2 | * 3 | * Mark Rivers 4 | * University of Chicago 5 | * October 18, 2013 6 | * 7 | */ 8 | 9 | #ifndef NDAttributeList_H 10 | #define NDAttributeList_H 11 | 12 | #include 13 | #include 14 | #include 15 | 16 | #include "NDAttribute.h" 17 | 18 | 19 | /** NDAttributeList class; this is a linked list of attributes. 20 | */ 21 | class ADCORE_API NDAttributeList { 22 | public: 23 | NDAttributeList(); 24 | ~NDAttributeList(); 25 | int add(NDAttribute *pAttribute); 26 | NDAttribute* add(const char *pName, const char *pDescription="", 27 | NDAttrDataType_t dataType=NDAttrUndefined, void *pValue=NULL); 28 | NDAttribute* find(const char *pName); 29 | NDAttribute* next(NDAttribute *pAttribute); 30 | int count(); 31 | int remove(const char *pName); 32 | int clear(); 33 | int copy(NDAttributeList *pOut); 34 | int updateValues(); 35 | int report(FILE *fp, int details); 36 | 37 | private: 38 | ELLLIST list_; /**< The EPICS ELLLIST */ 39 | epicsMutexId lock_; /**< Mutex to protect the ELLLIST */ 40 | }; 41 | 42 | #endif 43 | 44 | -------------------------------------------------------------------------------- /ADApp/ADSrc/PVAttribute.h: -------------------------------------------------------------------------------- 1 | 2 | /* PVAttribute.h 3 | * 4 | * \author Mark Rivers 5 | * 6 | * \author University of Chicago 7 | * 8 | * \date April 30, 2009 9 | * 10 | */ 11 | #ifndef INCPVAttributeH 12 | #define INCPVAttributeH 13 | 14 | #include 15 | #include 16 | #include 17 | 18 | #include "NDAttribute.h" 19 | 20 | /** Use native type for channel access */ 21 | #define DBR_NATIVE -1 22 | 23 | /** Attribute that gets its value from an EPICS PV. 24 | */ 25 | class ADCORE_API PVAttribute : public NDAttribute { 26 | public: 27 | PVAttribute(const char *pName, const char *pDescription, const char *pSource, chtype dbrType); 28 | PVAttribute(PVAttribute& attribute); 29 | ~PVAttribute(); 30 | PVAttribute* copy(NDAttribute *pAttribute); 31 | virtual int updateValue(); 32 | /* These callbacks must be public because they are called from C */ 33 | void connectCallback(struct connection_handler_args cha); 34 | void monitorCallback(struct event_handler_args cha); 35 | int report(FILE *fp, int details); 36 | 37 | private: 38 | chid chanId; 39 | evid eventId; 40 | chtype dbrType; 41 | NDAttrValue callbackValue; 42 | char *callbackString; 43 | bool connectedOnce; 44 | epicsMutexId lock; 45 | }; 46 | 47 | #endif /*INCPVAttributeH*/ 48 | -------------------------------------------------------------------------------- /ADApp/ADSrc/functAttribute.h: -------------------------------------------------------------------------------- 1 | 2 | /* functAttribute.h 3 | * 4 | * \author Mark Rivers 5 | * 6 | * \author University of Chicago 7 | * 8 | * \date October 12, 2013 9 | * 10 | */ 11 | #ifndef INCfunctAttributeH 12 | #define INCfunctAttributeH 13 | 14 | #include 15 | 16 | #include "NDAttribute.h" 17 | 18 | typedef int (*NDAttributeFunction)(const char *functParam, void **functionPvt, class functAttribute *pAttribute); 19 | 20 | /** Attribute that gets its value from a user-defined function 21 | * The updateValue() method for this class retrieves the current value from the function. 22 | */ 23 | class ADCORE_API functAttribute : public NDAttribute { 24 | public: 25 | functAttribute(const char *pName, const char *pDescription, const char *pSource, const char *pParam); 26 | functAttribute(functAttribute& attribute); 27 | ~functAttribute(); 28 | functAttribute* copy(NDAttribute *pAttribute); 29 | virtual int updateValue(); 30 | int report(FILE *fp, int details); 31 | 32 | private: 33 | char *functParam; 34 | NDAttributeFunction pFunction; 35 | void *functionPvt; 36 | }; 37 | 38 | #endif /*INCfunctAttributeH*/ 39 | -------------------------------------------------------------------------------- /ADApp/ADSrc/myTimeStampSource.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | 5 | // This function demonstrates using a user-define time stamp source 6 | // It simply returns the current time but with the nsec field set to 0, so that record timestamps 7 | // can be checked to see that the user-defined function is indeed being called. 8 | 9 | static void myTimeStampSource(void *userPvt, epicsTimeStamp *pTimeStamp) 10 | { 11 | epicsTimeGetCurrent(pTimeStamp); 12 | pTimeStamp->nsec = 0; 13 | } 14 | 15 | extern "C" { 16 | epicsRegisterFunction(myTimeStampSource); 17 | } 18 | -------------------------------------------------------------------------------- /ADApp/ADSrc/paramAttribute.h: -------------------------------------------------------------------------------- 1 | 2 | /* paramAttribute.h 3 | * 4 | * \author Mark Rivers 5 | * 6 | * \author University of Chicago 7 | * 8 | * \date April 30, 2009 9 | * 10 | */ 11 | #ifndef INCparamAttributeH 12 | #define INCparamAttributeH 13 | 14 | #include "NDAttribute.h" 15 | #include "asynNDArrayDriver.h" 16 | 17 | /** Use native type for channel access */ 18 | #define DBR_NATIVE -1 19 | 20 | typedef enum { 21 | paramAttrTypeInt, 22 | paramAttrTypeInt64, 23 | paramAttrTypeDouble, 24 | paramAttrTypeString, 25 | paramAttrTypeUnknown 26 | } paramAttrType_t; 27 | 28 | /** Attribute that gets its value from an asynNDArrayDriver driver parameter. 29 | * The updateValue() method for this class retrieves the current value of the driver parameter. 30 | */ 31 | class ADCORE_API paramAttribute : public NDAttribute { 32 | public: 33 | paramAttribute(const char *pName, const char *pDescription, const char *pSource, int addr, 34 | class asynNDArrayDriver *pDriver, const char *dataType); 35 | paramAttribute(paramAttribute& attribute); 36 | ~paramAttribute(); 37 | paramAttribute* copy(NDAttribute *pAttribute); 38 | int updateValue(); 39 | int report(FILE *fp, int details); 40 | 41 | private: 42 | int paramId; 43 | int paramAddr; 44 | paramAttrType_t paramType; 45 | class asynNDArrayDriver *pDriver; 46 | }; 47 | 48 | #endif /*INCparamAttributeH*/ 49 | -------------------------------------------------------------------------------- /ADApp/Db/ADAutoSaveMenu.req: -------------------------------------------------------------------------------- 1 | file "configMenu_settings.req", P=$(P), CONFIG=ADAutoSave 2 | file "auto_settings.req", P=$(P) 3 | -------------------------------------------------------------------------------- /ADApp/Db/ADBase_settings.req: -------------------------------------------------------------------------------- 1 | $(P)$(R)BinX 2 | $(P)$(R)BinY 3 | $(P)$(R)MinX 4 | $(P)$(R)MinY 5 | $(P)$(R)SizeX 6 | $(P)$(R)SizeY 7 | $(P)$(R)ReverseX 8 | $(P)$(R)ReverseY 9 | $(P)$(R)AcquireTime 10 | $(P)$(R)AcquirePeriod 11 | $(P)$(R)Gain 12 | $(P)$(R)FrameType 13 | $(P)$(R)ImageMode 14 | $(P)$(R)TriggerMode 15 | $(P)$(R)NumExposures 16 | $(P)$(R)NumImages 17 | $(P)$(R)ShutterMode 18 | $(P)$(R)ShutterOpenDelay 19 | $(P)$(R)ShutterCloseDelay 20 | $(P)$(R)ShutterOpenEPICS.OUT 21 | $(P)$(R)ShutterCloseEPICS.OUT 22 | $(P)$(R)ShutterOpenEPICS.OCAL 23 | $(P)$(R)ShutterCloseEPICS.OCAL 24 | $(P)$(R)ShutterStatusEPICS_RBV.INP 25 | $(P)$(R)ShutterStatusEPICS_RBV.ZRVL 26 | $(P)$(R)ShutterStatusEPICS_RBV.ONVL 27 | $(P)$(R)Temperature 28 | $(P)$(R)ReadStatus.SCAN 29 | file "NDArrayBase_settings.req", P=$(P), R=$(R) 30 | -------------------------------------------------------------------------------- /ADApp/Db/ADPrefixes.template: -------------------------------------------------------------------------------- 1 | #=================================================================# 2 | # Template file: ADPrefixes.template 3 | # Database contains a waveform record to hold a list of channel prefixes for area detector elements in an ioc 4 | # John Hammonds 5 | # May 3, 2010 6 | record(waveform, "$(P)$(R)ChannelPrefixes") 7 | { 8 | field(FTVL, "CHAR") 9 | field(NELM, "$(NELEMENTS)") 10 | } 11 | 12 | -------------------------------------------------------------------------------- /ADApp/Db/CCDMultiTrack.template: -------------------------------------------------------------------------------- 1 | # Track definition for CCD multi-track defintions./ 2 | # Each track is a rectangular ROI defined by start and end coordinates. 3 | # Binning may also be applied - usually (but not always) the track is fully-binned. 4 | # This hardware capability of a CCD is available for certain camera types: 5 | # Andor, Princeton Instruments and Photometrics. 6 | # 7 | # Peter Heesterman, UKAEA 8 | # October 2019 9 | 10 | include "ADBase.template" 11 | 12 | record(waveform, "$(P)$(R)CCDMultiTrackStart") 13 | { 14 | field(DTYP, "asynInt32ArrayOut") 15 | field(INP, "@asyn($(PORT),$(ADDR=0),$(TIMEOUT=1))CCD_MULTI_TRACK_START") 16 | info("asyn:READBACK", "1") 17 | info("asyn:FIFO", "10") 18 | field(FTVL, "LONG") 19 | field(NELM, "50") 20 | } 21 | record(waveform, "$(P)$(R)CCDMultiTrackEnd") 22 | { 23 | field(DTYP, "asynInt32ArrayOut") 24 | field(INP, "@asyn($(PORT),$(ADDR=0),$(TIMEOUT=1))CCD_MULTI_TRACK_END") 25 | info("asyn:READBACK", "1") 26 | info("asyn:FIFO", "10") 27 | field(FTVL, "LONG") 28 | field(NELM, "50") 29 | } 30 | record(waveform, "$(P)$(R)CCDMultiTrackBin") 31 | { 32 | field(DTYP, "asynInt32ArrayOut") 33 | field(INP, "@asyn($(PORT),$(ADDR=0),$(TIMEOUT=1))CCD_MULTI_TRACK_BIN") 34 | info("asyn:READBACK", "1") 35 | info("asyn:FIFO", "10") 36 | field(FTVL, "LONG") 37 | field(NELM, "50") 38 | } 39 | 40 | -------------------------------------------------------------------------------- /ADApp/Db/CCDMultiTrack_settings.req: -------------------------------------------------------------------------------- 1 | $(P)$(R)CCDMultiTrackStart 2 | $(P)$(R)CCDMultiTrackEnd 3 | $(P)$(R)CCDMultiTrackBin 4 | -------------------------------------------------------------------------------- /ADApp/Db/Makefile: -------------------------------------------------------------------------------- 1 | TOP=../.. 2 | include $(TOP)/configure/CONFIG 3 | #---------------------------------------- 4 | # ADD MACRO DEFINITIONS AFTER THIS LINE 5 | 6 | #---------------------------------------------------- 7 | # Optimization of db files using dbst (DEFAULT: NO) 8 | #DB_OPT = YES 9 | 10 | #---------------------------------------------------- 11 | # Create and install (or just install) 12 | # databases, templates, substitutions like this 13 | 14 | 15 | DB += $(patsubst ../%, %, $(wildcard ../*.template)) 16 | DB += $(patsubst ../%, %, $(wildcard ../*.req)) 17 | DB += $(patsubst ../%, %, $(wildcard ../*.substitutions)) 18 | 19 | #---------------------------------------------------- 20 | # If .db template is not named *.template add 21 | # _template = 22 | 23 | include $(TOP)/configure/RULES 24 | #---------------------------------------- 25 | # ADD RULES AFTER THIS LINE 26 | 27 | -------------------------------------------------------------------------------- /ADApp/Db/NDArrayBase_settings.req: -------------------------------------------------------------------------------- 1 | $(P)$(R)DataType 2 | $(P)$(R)ColorMode 3 | $(P)$(R)ArrayCallbacks 4 | $(P)$(R)NDAttributesFile 5 | $(P)$(R)NDAttributesMacros 6 | $(P)$(R)PoolPollStats.SCAN 7 | $(P)$(R)NumPreAllocBuffers 8 | $(P)$(R)WaitForPlugins 9 | -------------------------------------------------------------------------------- /ADApp/Db/NDAttrPlot.template: -------------------------------------------------------------------------------- 1 | #=================================================================# 2 | # Template file: NDAttrPlot.template 3 | # Macros: 4 | # % macro, P, Device prefix 5 | # % macro, R, Device suffix 6 | # % macro, PORT, Asyn port name 7 | 8 | include "NDPluginBase.template" 9 | 10 | record(ai, "$(P)$(R)NPts") { 11 | field(DESC, "Number of cached points") 12 | field(DTYP, "asynInt32") 13 | field(INP, "@asyn($(PORT),0)AP_NPts") 14 | field(SCAN, "I/O Intr") 15 | } 16 | 17 | record(ao, "$(P)$(R)Reset") { 18 | field(DESC, "Resets the cached data") 19 | field(DTYP, "asynInt32") 20 | field(OUT, "@asyn($(PORT),0)AP_Reset") 21 | } 22 | 23 | -------------------------------------------------------------------------------- /ADApp/Db/NDAttrPlotAttr.template: -------------------------------------------------------------------------------- 1 | #=================================================================# 2 | # Template file: NDAttrPlotAttr.template 3 | # Macros: 4 | # % macro, P, Device prefix 5 | # % macro, R, Device suffix 6 | # % macro, PORT, Asyn port name 7 | # % macro, ATTR_IND, Attribute index 8 | 9 | record(stringin, "$(P)$(R)Attr$(ATTR_IND)") { 10 | field(DESC, "Attribute $(ATTR_IND)") 11 | field(DTYP, "asynOctetRead") 12 | field(INP, "@asyn($(PORT),$(ATTR_IND))AP_Attribute") 13 | field(SCAN, "I/O Intr") 14 | } 15 | 16 | -------------------------------------------------------------------------------- /ADApp/Db/NDAttrPlotData.template: -------------------------------------------------------------------------------- 1 | #=================================================================# 2 | # Template file: NDAttrPlotData.template 3 | # Macros: 4 | # % macro, P, Device prefix 5 | # % macro, R, Device suffix 6 | # % macro, PORT, Asyn port name 7 | # % macro, AXIS, Axis name 8 | # % macro, DATA_IND, Data index 9 | # % macro, DATA_ADDR, Asyn address for this data array 10 | # % macro, N_CACHE, Size of the cache 11 | 12 | record(waveform, "$(P)$(R)$(AXIS):Data$(DATA_IND)") { 13 | field(DESC, "Data for $(AXIS) $(DATA_IND)") 14 | field(NELM, "$(N_CACHE)") 15 | field(FTVL, "DOUBLE") 16 | field(DTYP, "asynFloat64ArrayIn") 17 | field(INP, "@asyn($(PORT),$(DATA_ADDR))AP_Data") 18 | field(SCAN, "I/O Intr") 19 | } 20 | 21 | record(stringin, "$(P)$(R)$(AXIS):DataLabel$(DATA_IND)") { 22 | field(DESC, "Label for $(AXIS) $(DATA_IND)") 23 | field(DTYP, "asynOctetRead") 24 | field(INP, "@asyn($(PORT),$(DATA_ADDR))AP_DataLabel") 25 | field(SCAN, "I/O Intr") 26 | } 27 | 28 | record(ao, "$(P)$(R)$(AXIS):DataSelect$(DATA_IND)") { 29 | field(DESC, "Selected attribute $(AXIS) $(DATA_IND)") 30 | field(DTYP, "asynInt32") 31 | field(OUT, "@asyn($(PORT),$(DATA_ADDR))AP_DataSelect") 32 | } 33 | 34 | record(ai, "$(P)$(R)$(AXIS):DataSelect$(DATA_IND)_RBV") { 35 | field(DESC, "Selected attribute $(AXIS) $(DATA_IND)") 36 | field(DTYP, "asynInt32") 37 | field(INP, "@asyn($(PORT),$(DATA_ADDR))AP_DataSelect") 38 | field(SCAN, "I/O Intr") 39 | } 40 | -------------------------------------------------------------------------------- /ADApp/Db/NDAttribute.template: -------------------------------------------------------------------------------- 1 | #=================================================================# 2 | # Template file: NDAttribute.template 3 | # % macro, P, Device Prefix 4 | # % macro, R, Device Suffix 5 | # % macro, PORT, Asyn Port name 6 | # The asyn port name should match what you have 7 | # written in your startup script 8 | # % macro, NCHANS, Number of elements in attribute waveform 9 | # % macro, ADDR, Asyn Port address 10 | # % macro, TIMEOUT, Timeout 11 | 12 | include "NDPluginBase.template" 13 | 14 | record(bo, "$(P)$(R)Reset") 15 | { 16 | field(DTYP, "asynInt32") 17 | field(OUT, "@asyn($(PORT),$(ADDR=0),$(TIMEOUT=1))ATTR_RESET") 18 | field(ZNAM, "Done Reset") 19 | field(ONAM, "Reset") 20 | field(VAL, "0") 21 | } 22 | -------------------------------------------------------------------------------- /ADApp/Db/NDAttributeN.template: -------------------------------------------------------------------------------- 1 | #=================================================================# 2 | # Template file: NDAttributeN.template 3 | # % macro, P, Device Prefix 4 | # % macro, R, Device Suffix 5 | # % macro, PORT, Asyn Port name 6 | # The asyn port name should match what you have 7 | # written in your startup script 8 | # % macro, NCHANS, Number of elements in attribute waveform 9 | # % macro, ADDR, Asyn Port address 10 | # % macro, TIMEOUT, Timeout 11 | 12 | record(ai, "$(P)$(R)Value_RBV") 13 | { 14 | field(DTYP, "asynFloat64") 15 | field(INP, "@asyn($(PORT),$(ADDR=0),$(TIMEOUT=1))ATTR_VAL") 16 | field(PREC, "4") 17 | field(SCAN, "I/O Intr") 18 | } 19 | 20 | record(ai, "$(P)$(R)ValueSum_RBV") 21 | { 22 | field(DTYP, "asynFloat64") 23 | field(INP, "@asyn($(PORT),$(ADDR=0),$(TIMEOUT=1))ATTR_VAL_SUM") 24 | field(PREC, "4") 25 | field(SCAN, "I/O Intr") 26 | } 27 | 28 | record(waveform, "$(P)$(R)AttrName") 29 | { 30 | field(PINI, "YES") 31 | field(DTYP, "asynOctetWrite") 32 | field(INP, "@asyn($(PORT),$(ADDR=0),$(TIMEOUT=1))ATTR_ATTRNAME") 33 | field(FTVL, "CHAR") 34 | field(NELM, "256") 35 | } 36 | 37 | record(waveform, "$(P)$(R)AttrName_RBV") 38 | { 39 | field(DTYP, "asynOctetRead") 40 | field(INP, "@asyn($(PORT),$(ADDR=0),$(TIMEOUT=1))ATTR_ATTRNAME") 41 | field(FTVL, "CHAR") 42 | field(NELM, "256") 43 | field(SCAN, "I/O Intr") 44 | } 45 | 46 | ################################################################### 47 | # These records control time series # 48 | ################################################################### 49 | record(waveform, "$(P)$(R)TSArrayValue") 50 | { 51 | field(DTYP, "asynFloat64ArrayIn") 52 | field(INP, "@asyn($(TS_PORT=$(PORT)_TS),$(ADDR=0),$(TIMEOUT=1))TS_TIME_SERIES") 53 | field(NELM, "$(NCHANS)") 54 | field(FTVL, "DOUBLE") 55 | field(SCAN, "I/O Intr") 56 | } 57 | -------------------------------------------------------------------------------- /ADApp/Db/NDAttributeN_settings.req: -------------------------------------------------------------------------------- 1 | $(P)$(R)AttrName 2 | 3 | -------------------------------------------------------------------------------- /ADApp/Db/NDAttribute_settings.req: -------------------------------------------------------------------------------- 1 | file "NDTimeSeries_settings.req", P=$(P), R=$(R)TS: 2 | file "NDPluginBase_settings.req", P=$(P), R=$(R) 3 | -------------------------------------------------------------------------------- /ADApp/Db/NDBadPixel.template: -------------------------------------------------------------------------------- 1 | #=================================================================# 2 | # Template file: NDBadPixel.template 3 | # Database for NDPluginBadPixel 4 | 5 | include "NDPluginBase.template" 6 | 7 | ################################################################### 8 | # This record is the bad pixel filename # 9 | ################################################################### 10 | record(waveform, "$(P)$(R)FileName") 11 | { 12 | field(DTYP, "asynOctetWrite") 13 | field(PINI, "YES") 14 | field(INP, "@asyn($(PORT),$(ADDR=0),$(TIMEOUT=1))BAD_PIXEL_FILE_NAME") 15 | field(FTVL, "CHAR") 16 | field(NELM, "256") 17 | } 18 | -------------------------------------------------------------------------------- /ADApp/Db/NDBadPixel_settings.req: -------------------------------------------------------------------------------- 1 | $(P)$(R)FileName 2 | file "NDPluginBase_settings.req", P=$(P), R=$(R) 3 | -------------------------------------------------------------------------------- /ADApp/Db/NDCircularBuff_settings.req: -------------------------------------------------------------------------------- 1 | $(P)$(R)TriggerA 2 | $(P)$(R)TriggerB 3 | $(P)$(R)TriggerCalc 4 | $(P)$(R)PreCount 5 | $(P)$(R)PostCount 6 | $(P)$(R)PresetTriggerCount 7 | $(P)$(R)FlushOnSoftTrg 8 | file "NDPluginBase_settings.req", P=$(P), R=$(R) 9 | -------------------------------------------------------------------------------- /ADApp/Db/NDCodec_settings.req: -------------------------------------------------------------------------------- 1 | $(P)$(R)Mode 2 | $(P)$(R)Compressor 3 | $(P)$(R)JPEGQuality 4 | $(P)$(R)BloscCompressor 5 | $(P)$(R)BloscCLevel 6 | $(P)$(R)BloscShuffle 7 | $(P)$(R)BloscNumThreads 8 | file "NDPluginBase_settings.req", P=$(P), R=$(R) 9 | -------------------------------------------------------------------------------- /ADApp/Db/NDColorConvert_settings.req: -------------------------------------------------------------------------------- 1 | $(P)$(R)ColorModeOut 2 | file "NDPluginBase_settings.req", P=$(P), R=$(R) 3 | -------------------------------------------------------------------------------- /ADApp/Db/NDFFT_settings.req: -------------------------------------------------------------------------------- 1 | file "NDPluginBase_settings.req", P=$(P), R=$(R) 2 | $(P)$(R)FFTDirection 3 | $(P)$(R)FFTSuppressDC 4 | $(P)$(R)FFTNumAverage 5 | $(P)$(R)Name 6 | 7 | -------------------------------------------------------------------------------- /ADApp/Db/NDFileHDF5_settings.req: -------------------------------------------------------------------------------- 1 | $(P)$(R)ChunkSizeAuto 2 | $(P)$(R)NumRowChunks 3 | $(P)$(R)NumColChunks 4 | $(P)$(R)ChunkSize2 5 | $(P)$(R)ChunkSize3 6 | $(P)$(R)ChunkSize4 7 | $(P)$(R)ChunkSize5 8 | $(P)$(R)ChunkSize6 9 | $(P)$(R)ChunkSize7 10 | $(P)$(R)ChunkSize8 11 | $(P)$(R)ChunkSize9 12 | $(P)$(R)NumFramesChunks 13 | $(P)$(R)BoundaryAlign 14 | $(P)$(R)BoundaryThreshold 15 | $(P)$(R)NumFramesFlush 16 | $(P)$(R)Compression 17 | $(P)$(R)NumDataBits 18 | $(P)$(R)DataBitsOffset 19 | $(P)$(R)SZipNumPixels 20 | $(P)$(R)ZLevel 21 | $(P)$(R)BloscShuffle 22 | $(P)$(R)BloscCompressor 23 | $(P)$(R)BloscLevel 24 | $(P)$(R)JPEGQuality 25 | $(P)$(R)StorePerform 26 | $(P)$(R)StoreAttr 27 | $(P)$(R)NumExtraDims 28 | $(P)$(R)ExtraDimSizeN 29 | $(P)$(R)ExtraDimSizeX 30 | $(P)$(R)ExtraDimSizeY 31 | $(P)$(R)XMLFileName 32 | $(P)$(R)SWMRMode 33 | file "NDPluginFile_settings.req", P=$(P), R=$(R) 34 | 35 | -------------------------------------------------------------------------------- /ADApp/Db/NDFileJPEG.template: -------------------------------------------------------------------------------- 1 | #=================================================================# 2 | # Template file: NDFileJPEG.template 3 | # Database for NDFileJPEG driver, which saves NDArray data 4 | # in the JPEG file format 5 | # Mark Rivers 6 | # May 10, 2009 7 | 8 | include "NDFile.template" 9 | include "NDPluginBase.template" 10 | 11 | # We replace some fields in records defined in NDFile.template 12 | # File data format 13 | record(mbbo, "$(P)$(R)FileFormat") 14 | { 15 | field(ZRST, "JPEG") 16 | field(ZRVL, "0") 17 | field(ONST, "Invalid") 18 | field(ONVL, "1") 19 | } 20 | 21 | record(mbbi, "$(P)$(R)FileFormat_RBV") 22 | { 23 | field(ZRST, "JPEG") 24 | field(ZRVL, "0") 25 | field(ONST, "Undefined") 26 | field(ONVL, "1") 27 | } 28 | 29 | # File quality 30 | record(longout, "$(P)$(R)JPEGQuality") 31 | { 32 | field(PINI, "YES") 33 | field(DTYP, "asynInt32") 34 | field(OUT, "@asyn($(PORT),$(ADDR=0),$(TIMEOUT=1))JPEG_QUALITY") 35 | field(VAL, "50") 36 | field(LOPR, "0") 37 | field(DRVL, "0") 38 | field(HOPR, "100") 39 | field(DRVH, "100") 40 | info(autosaveFields, "VAL") 41 | } 42 | 43 | record(longin, "$(P)$(R)JPEGQuality_RBV") 44 | { 45 | field(DTYP, "asynInt32") 46 | field(INP, "@asyn($(PORT),$(ADDR=0),$(TIMEOUT=1))JPEG_QUALITY") 47 | field(LOPR, "0") 48 | field(HOPR, "100") 49 | field(SCAN, "I/O Intr") 50 | } 51 | -------------------------------------------------------------------------------- /ADApp/Db/NDFileJPEG_settings.req: -------------------------------------------------------------------------------- 1 | $(P)$(R)JPEGQuality 2 | file "NDPluginFile_settings.req", P=$(P), R=$(R) 3 | -------------------------------------------------------------------------------- /ADApp/Db/NDFileMagick_settings.req: -------------------------------------------------------------------------------- 1 | $(P)$(R)Quality 2 | $(P)$(R)CompressType 3 | $(P)$(R)BitDepth 4 | file "NDPluginFile_settings.req", P=$(P), R=$(R) 5 | -------------------------------------------------------------------------------- /ADApp/Db/NDFileNetCDF.template: -------------------------------------------------------------------------------- 1 | #=================================================================# 2 | # Template file: NDFileNetCDF.template 3 | # Database for NDFileNetCDF driver, which saves NDArray data 4 | # in the netCDF file format 5 | # Mark Rivers 6 | # May 10, 2009 7 | 8 | include "NDFile.template" 9 | include "NDPluginBase.template" 10 | 11 | # We replace some fields in records defined in NDFile.template 12 | # File data format 13 | record(mbbo, "$(P)$(R)FileFormat") 14 | { 15 | field(ZRST, "netCDF") 16 | field(ZRVL, "0") 17 | field(ONST, "Invalid") 18 | field(ONVL, "1") 19 | } 20 | 21 | record(mbbi, "$(P)$(R)FileFormat_RBV") 22 | { 23 | field(ZRST, "netCDF") 24 | field(ZRVL, "0") 25 | field(ONST, "Undefined") 26 | field(ONVL, "1") 27 | } 28 | 29 | -------------------------------------------------------------------------------- /ADApp/Db/NDFileNetCDF_settings.req: -------------------------------------------------------------------------------- 1 | file "NDPluginFile_settings.req", P=$(P), R=$(R) 2 | -------------------------------------------------------------------------------- /ADApp/Db/NDFileNexus.template: -------------------------------------------------------------------------------- 1 | #=================================================================# 2 | # Template file: NDFileNexus.template 3 | # Database for NDFileNexus driver, which saves files for NDArray data. 4 | 5 | include "NDFile.template" 6 | include "NDPluginBase.template" 7 | 8 | # We replace some fields in records defined in NDFile.template 9 | # File data format 10 | record(mbbo, "$(P)$(R)FileFormat") 11 | { 12 | field(ZRST, "NeXus") 13 | field(ZRVL, "0") 14 | field(ONST, "Invalid") 15 | field(ONVL, "1") 16 | } 17 | 18 | record(mbbi, "$(P)$(R)FileFormat_RBV") 19 | { 20 | field(ZRST, "NeXus") 21 | field(ZRVL, "0") 22 | field(ONST, "Undefined") 23 | field(ONVL, "1") 24 | } 25 | 26 | 27 | # These records are specific to NeXus file format 28 | # Template File path. 29 | record(waveform, "$(P)$(R)TemplateFilePath") 30 | { 31 | field(PINI, "YES") 32 | field(DTYP, "asynOctetWrite") 33 | field(INP, "@asyn($(PORT),$(ADDR=0),$(TIMEOUT=1))TEMPLATE_FILE_PATH") 34 | field(FTVL, "CHAR") 35 | field(NELM, "256") 36 | info(autosaveFields, "VAL") 37 | } 38 | 39 | record(waveform, "$(P)$(R)TemplateFilePath_RBV") 40 | { 41 | field(DTYP, "asynOctetRead") 42 | field(INP, "@asyn($(PORT),$(ADDR=0),$(TIMEOUT=1))TEMPLATE_FILE_PATH") 43 | field(FTVL, "CHAR") 44 | field(NELM, "256") 45 | field(SCAN, "I/O Intr") 46 | } 47 | 48 | # Template Filename 49 | record(waveform, "$(P)$(R)TemplateFileName") 50 | { 51 | field(PINI, "YES") 52 | field(DTYP, "asynOctetWrite") 53 | field(INP, "@asyn($(PORT),$(ADDR=0),$(TIMEOUT=1))TEMPLATE_FILE_NAME") 54 | field(FTVL, "CHAR") 55 | field(NELM, "256") 56 | info(autosaveFields, "VAL") 57 | } 58 | 59 | record(waveform, "$(P)$(R)TemplateFileName_RBV") 60 | { 61 | field(DTYP, "asynOctetRead") 62 | field(INP, "@asyn($(PORT),$(ADDR=0),$(TIMEOUT=1))TEMPLATE_FILE_NAME") 63 | field(FTVL, "CHAR") 64 | field(NELM, "256") 65 | field(SCAN, "I/O Intr") 66 | } 67 | 68 | record(bi, "$(P)$(R)FileTemplateValid") 69 | { 70 | field(DTYP, "asynInt32") 71 | field(INP, "@asyn($(PORT),$(ADDR=0),$(TIMEOUT=1))TEMPLATE_FILE_VALID") 72 | field(ZNAM, "No") 73 | field(ONAM, "Yes") 74 | field(SCAN, "I/O Intr") 75 | } 76 | 77 | -------------------------------------------------------------------------------- /ADApp/Db/NDFileNexus_settings.req: -------------------------------------------------------------------------------- 1 | $(P)$(R)TemplateFilePath 2 | $(P)$(R)TemplateFileName 3 | file "NDPluginFile_settings.req", P=$(P), R=$(R) 4 | -------------------------------------------------------------------------------- /ADApp/Db/NDFileTIFF.template: -------------------------------------------------------------------------------- 1 | #=================================================================# 2 | # Template file: NDFileTIFF.template 3 | # Database for NDFileTIFF driver, which saves NDArray data 4 | # in the TIFF file format 5 | # Mark Rivers 6 | # May 10, 2009 7 | 8 | include "NDFile.template" 9 | include "NDPluginBase.template" 10 | 11 | # We replace some fields in records defined in NDFile.template 12 | # File data format 13 | record(mbbo, "$(P)$(R)FileFormat") 14 | { 15 | field(ZRST, "TIFF") 16 | field(ZRVL, "0") 17 | field(ONST, "Invalid") 18 | field(ONVL, "1") 19 | } 20 | 21 | record(mbbi, "$(P)$(R)FileFormat_RBV") 22 | { 23 | field(ZRST, "TIFF") 24 | field(ZRVL, "0") 25 | field(ONST, "Undefined") 26 | field(ONVL, "1") 27 | } 28 | 29 | -------------------------------------------------------------------------------- /ADApp/Db/NDFileTIFF_settings.req: -------------------------------------------------------------------------------- 1 | file "NDPluginFile_settings.req", P=$(P), R=$(R) 2 | -------------------------------------------------------------------------------- /ADApp/Db/NDFile_settings.req: -------------------------------------------------------------------------------- 1 | $(P)$(R)FilePath 2 | $(P)$(R)FileName 3 | $(P)$(R)FileNumber 4 | $(P)$(R)AutoIncrement 5 | $(P)$(R)FileTemplate 6 | $(P)$(R)AutoSave 7 | $(P)$(R)FileFormat 8 | $(P)$(R)FileWriteMode 9 | $(P)$(R)NumCapture 10 | $(P)$(R)DeleteDriverFile 11 | $(P)$(R)CreateDirectory 12 | $(P)$(R)LazyOpen 13 | $(P)$(R)TempSuffix 14 | -------------------------------------------------------------------------------- /ADApp/Db/NDGather.template: -------------------------------------------------------------------------------- 1 | #=================================================================# 2 | # Template file: NDGather.template 3 | # Database for NDPluginGather plugin 4 | # Mark Rivers 5 | # February 26, 2017 6 | 7 | include "NDPluginBase.template" 8 | -------------------------------------------------------------------------------- /ADApp/Db/NDGatherN.template: -------------------------------------------------------------------------------- 1 | #=================================================================# 2 | # Template file: NDGather.template 3 | # Database for NDPluginGather plugin 4 | # One instance of this is loaded for each array port source 5 | # Mark Rivers 6 | # February 26, 2017 7 | 8 | ################################################################### 9 | # These records control the connection of the server to # 10 | # an NDArray driver port and address # 11 | ################################################################### 12 | # Array port name 13 | record(stringout, "$(P)$(R)NDArrayPort_$(N)") 14 | { 15 | field(PINI, "YES") 16 | field(DTYP, "asynOctetWrite") 17 | field(OUT, "@asyn($(PORT),$(ADDR=0),$(TIMEOUT=1))NDARRAY_PORT") 18 | field(VAL, "$(NDARRAY_PORT)") 19 | info(autosaveFields, "VAL") 20 | } 21 | 22 | record(stringin, "$(P)$(R)NDArrayPort_$(N)_RBV") 23 | { 24 | field(DTYP, "asynOctetRead") 25 | field(INP, "@asyn($(PORT),$(ADDR=0),$(TIMEOUT=1))NDARRAY_PORT") 26 | field(SCAN, "I/O Intr") 27 | } 28 | 29 | record(longout, "$(P)$(R)NDArrayAddress_$(N)") 30 | { 31 | field(PINI, "YES") 32 | field(DTYP, "asynInt32") 33 | field(OUT, "@asyn($(PORT),$(ADDR=0),$(TIMEOUT=1))NDARRAY_ADDR") 34 | field(VAL, "$(NDARRAY_ADDR=0)") 35 | info(autosaveFields, "VAL") 36 | } 37 | 38 | record(longin, "$(P)$(R)NDArrayAddress_$(N)_RBV") 39 | { 40 | field(DTYP, "asynInt32") 41 | field(INP, "@asyn($(PORT),$(ADDR=0),$(TIMEOUT=1))NDARRAY_ADDR") 42 | field(SCAN, "I/O Intr") 43 | } 44 | 45 | -------------------------------------------------------------------------------- /ADApp/Db/NDGatherN_settings.req: -------------------------------------------------------------------------------- 1 | $(P)$(R)NDArrayPort_$(N) 2 | $(P)$(R)NDArrayAddress_$(N) 3 | -------------------------------------------------------------------------------- /ADApp/Db/NDGather_settings.req: -------------------------------------------------------------------------------- 1 | file "NDPluginBase_settings.req", P=$(P), R=$(R) 2 | -------------------------------------------------------------------------------- /ADApp/Db/NDOverlay.template: -------------------------------------------------------------------------------- 1 | #=================================================================# 2 | # Template file: NDOverlay.template 3 | # Database for NDPluginOverlay asyn driver and standard asyn device support 4 | # Mark Rivers 5 | # March 25, 2010 6 | 7 | include "NDPluginBase.template" 8 | 9 | # These are the array dimensions in X, Y order. Used for setting HOPR on sliders 10 | record(longin, "$(P)$(R)MaxSizeX_RBV") 11 | { 12 | field(DTYP, "asynInt32") 13 | field(INP, "@asyn($(PORT),$(ADDR=0),$(TIMEOUT=1))MAX_SIZE_X") 14 | field(SCAN, "I/O Intr") 15 | } 16 | 17 | record(longin, "$(P)$(R)MaxSizeY_RBV") 18 | { 19 | field(DTYP, "asynInt32") 20 | field(INP, "@asyn($(PORT),$(ADDR=0),$(TIMEOUT=1))MAX_SIZE_Y") 21 | field(SCAN, "I/O Intr") 22 | } 23 | -------------------------------------------------------------------------------- /ADApp/Db/NDOverlayN_settings.req: -------------------------------------------------------------------------------- 1 | $(P)$(R)Name 2 | $(P)$(R)Use 3 | $(P)$(R)PositionXLink.DOL 4 | $(P)$(R)PositionX 5 | $(P)$(R)PositionYLink.DOL 6 | $(P)$(R)PositionY 7 | $(P)$(R)SizeXLink.DOL 8 | $(P)$(R)SizeX 9 | $(P)$(R)SizeYLink.DOL 10 | $(P)$(R)SizeY 11 | $(P)$(R)WidthXLink.DOL 12 | $(P)$(R)WidthX 13 | $(P)$(R)WidthYLink.DOL 14 | $(P)$(R)WidthY 15 | $(P)$(R)DrawMode 16 | $(P)$(R)Shape 17 | $(P)$(R)Red 18 | $(P)$(R)Green 19 | $(P)$(R)Blue 20 | $(P)$(R)TimeStampFormat 21 | $(P)$(R)Font 22 | $(P)$(R)DisplayText 23 | -------------------------------------------------------------------------------- /ADApp/Db/NDOverlay_settings.req: -------------------------------------------------------------------------------- 1 | # Nothing extra needed beyond NDPluginBase_settings.req for now 2 | file "NDPluginBase_settings.req", P=$(P), R=$(R) 3 | -------------------------------------------------------------------------------- /ADApp/Db/NDPluginBase_settings.req: -------------------------------------------------------------------------------- 1 | $(P)$(R)NDArrayPort 2 | $(P)$(R)NDArrayAddress 3 | $(P)$(R)EnableCallbacks 4 | $(P)$(R)MinCallbackTime 5 | $(P)$(R)MaxByteRate 6 | $(P)$(R)BlockingCallbacks 7 | $(P)$(R)QueueSize 8 | $(P)$(R)NumThreads 9 | $(P)$(R)SortTime 10 | $(P)$(R)SortMode 11 | $(P)$(R)SortSize 12 | file "NDArrayBase_settings.req", P=$(P), R=$(R) 13 | -------------------------------------------------------------------------------- /ADApp/Db/NDPluginFile_settings.req: -------------------------------------------------------------------------------- 1 | file "NDFile_settings.req", P=$(P), R=$(R) 2 | file "NDPluginBase_settings.req", P=$(P), R=$(R) 3 | -------------------------------------------------------------------------------- /ADApp/Db/NDProcess_settings.req: -------------------------------------------------------------------------------- 1 | $(P)$(R)DataTypeOut 2 | $(P)$(R)EnableBackground 3 | $(P)$(R)EnableFlatField 4 | $(P)$(R)ScaleFlatField 5 | $(P)$(R)EnableOffsetScale 6 | $(P)$(R)Offset 7 | $(P)$(R)Scale 8 | $(P)$(R)EnableLowClip 9 | $(P)$(R)LowClipThresh 10 | $(P)$(R)LowClipValue 11 | $(P)$(R)EnableHighClip 12 | $(P)$(R)HighClipThresh 13 | $(P)$(R)HighClipValue 14 | $(P)$(R)EnableFilter 15 | $(P)$(R)AutoResetFilter 16 | $(P)$(R)FilterCallbacks 17 | $(P)$(R)NumFilter 18 | $(P)$(R)FilterType 19 | $(P)$(R)OOffset 20 | $(P)$(R)OScale 21 | $(P)$(R)OC1 22 | $(P)$(R)OC2 23 | $(P)$(R)OC3 24 | $(P)$(R)OC4 25 | $(P)$(R)FOffset 26 | $(P)$(R)FScale 27 | $(P)$(R)FC1 28 | $(P)$(R)FC2 29 | $(P)$(R)FC3 30 | $(P)$(R)FC4 31 | $(P)$(R)ROffset 32 | $(P)$(R)RC1 33 | $(P)$(R)RC2 34 | file "NDPluginBase_settings.req", P=$(P), R=$(R) 35 | -------------------------------------------------------------------------------- /ADApp/Db/NDPva.template: -------------------------------------------------------------------------------- 1 | #=================================================================# 2 | # Template file: NDPva.template 3 | # Database for the records specific to the pvAccess plugin 4 | # Bruno Martins 5 | # May 5, 2015 6 | 7 | include "NDPluginBase.template" 8 | 9 | # New records for NDPluginPva 10 | 11 | record(waveform, "$(P)$(R)PvName_RBV") 12 | { 13 | field(DTYP, "asynOctetRead") 14 | field(INP, "@asyn($(PORT),$(ADDR=0),$(TIMEOUT=1))PV_NAME") 15 | field(FTVL, "CHAR") 16 | field(NELM, "256") 17 | field(SCAN, "I/O Intr") 18 | } 19 | -------------------------------------------------------------------------------- /ADApp/Db/NDPva_settings.req: -------------------------------------------------------------------------------- 1 | # Nothing extra needed beyond NDPluginBase_settings.req for now 2 | file "NDPluginBase_settings.req", P=$(P), R=$(R) 3 | -------------------------------------------------------------------------------- /ADApp/Db/NDROIStat8.template: -------------------------------------------------------------------------------- 1 | #=================================================================# 2 | # Template file: NDROIStat8.template 3 | ################################################################### 4 | # 5 | # Database template for ROI Stat plugin. This provides up to 6 | # 8 simple ROIs and associated statistics calculations (min, max 7 | # mean and total counts). The asyn address is used to 8 | # identify the different ROI and stats records, so this template 9 | # includes another ROI specific template, specifying the address 10 | # to use for each one. 11 | # 12 | # Macros: 13 | # P,R - Base PV name 14 | # PORT - Asyn port name 15 | # ADDR - The Asyn address 16 | # TIMEOUT - Asyn port timeout 17 | # 18 | # Matt Pearson 19 | # Nov 2014 20 | # 21 | ################################################################### 22 | 23 | include "NDROIStat.template" 24 | 25 | ################################################################### 26 | # Instantiate the ROI specific records 27 | ################################################################### 28 | 29 | substitute "ROI=1:" 30 | substitute "ADDR=0" 31 | include "NDROIStatN.template" 32 | 33 | substitute "ROI=2:" 34 | substitute "ADDR=1" 35 | include "NDROIStatN.template" 36 | 37 | substitute "ROI=3:" 38 | substitute "ADDR=2" 39 | include "NDROIStatN.template" 40 | 41 | substitute "ROI=4:" 42 | substitute "ADDR=3" 43 | include "NDROIStatN.template" 44 | 45 | substitute "ROI=5:" 46 | substitute "ADDR=4" 47 | include "NDROIStatN.template" 48 | 49 | substitute "ROI=6:" 50 | substitute "ADDR=5" 51 | include "NDROIStatN.template" 52 | 53 | substitute "ROI=7:" 54 | substitute "ADDR=6" 55 | include "NDROIStatN.template" 56 | 57 | substitute "ROI=8:" 58 | substitute "ADDR=7" 59 | include "NDROIStatN.template" 60 | 61 | -------------------------------------------------------------------------------- /ADApp/Db/NDROIStatN_settings.req: -------------------------------------------------------------------------------- 1 | # This works for one ROI 2 | $(P)$(R)Name 3 | $(P)$(R)Use 4 | $(P)$(R)BgdWidth 5 | $(P)$(R)MinX 6 | $(P)$(R)MinY 7 | $(P)$(R)SizeX 8 | $(P)$(R)SizeY 9 | 10 | -------------------------------------------------------------------------------- /ADApp/Db/NDROIStat_settings.req: -------------------------------------------------------------------------------- 1 | $(P)$(R)TSNumPoints 2 | $(P)$(R)TSRead.SCAN 3 | file "NDPluginBase_settings.req", P=$(P), R=$(R) 4 | -------------------------------------------------------------------------------- /ADApp/Db/NDROI_settings.req: -------------------------------------------------------------------------------- 1 | $(P)$(R)Name 2 | $(P)$(R)DataTypeOut 3 | $(P)$(R)BinX 4 | $(P)$(R)BinY 5 | $(P)$(R)BinZ 6 | $(P)$(R)MinX 7 | $(P)$(R)MinY 8 | $(P)$(R)MinZ 9 | $(P)$(R)SizeX 10 | $(P)$(R)SizeY 11 | $(P)$(R)SizeZ 12 | $(P)$(R)ReverseX 13 | $(P)$(R)ReverseY 14 | $(P)$(R)ReverseZ 15 | $(P)$(R)AutoSizeX 16 | $(P)$(R)AutoSizeY 17 | $(P)$(R)AutoSizeZ 18 | $(P)$(R)EnableX 19 | $(P)$(R)EnableY 20 | $(P)$(R)EnableZ 21 | $(P)$(R)EnableScale 22 | $(P)$(R)Scale 23 | $(P)$(R)CollapseDims 24 | file "NDPluginBase_settings.req", P=$(P), R=$(R) 25 | -------------------------------------------------------------------------------- /ADApp/Db/NDScatter.template: -------------------------------------------------------------------------------- 1 | #=================================================================# 2 | # Template file: NDScatter.template 3 | # Database for NDPluginScatter plugin 4 | # Mark Rivers 5 | # February 26, 2017 6 | 7 | include "NDPluginBase.template" 8 | 9 | ################################################################### 10 | # This record is for the scatter method # 11 | ################################################################### 12 | record(mbbo, "$(P)$(R)ScatterMethod") 13 | { 14 | field(PINI, "YES") 15 | field(DTYP, "asynInt32") 16 | field(OUT, "@asyn($(PORT),$(ADDR=0),$(TIMEOUT=1))SCATTER_METHOD") 17 | field(ZRST, "Round robin") 18 | field(ZRVL, "0") 19 | } 20 | 21 | record(mbbi, "$(P)$(R)ScatterMethod_RBV") 22 | { 23 | field(DTYP, "asynInt32") 24 | field(INP, "@asyn($(PORT),$(ADDR=0),$(TIMEOUT=1))SCATTER_METHOD") 25 | field(ZRST, "Round robin") 26 | field(ZRVL, "0") 27 | field(SCAN, "I/O Intr") 28 | } 29 | -------------------------------------------------------------------------------- /ADApp/Db/NDScatter_settings.req: -------------------------------------------------------------------------------- 1 | file "NDPluginBase_settings.req", P=$(P), R=$(R) 2 | -------------------------------------------------------------------------------- /ADApp/Db/NDStats_settings.req: -------------------------------------------------------------------------------- 1 | $(P)$(R)BgdWidth 2 | $(P)$(R)ComputeStatistics 3 | $(P)$(R)ComputeCentroid 4 | $(P)$(R)CentroidThreshold 5 | $(P)$(R)ComputeProfiles 6 | $(P)$(R)CursorX 7 | $(P)$(R)CursorY 8 | $(P)$(R)ComputeHistogram 9 | $(P)$(R)HistSize 10 | $(P)$(R)HistMin 11 | $(P)$(R)HistMax 12 | file "NDTimeSeries_settings.req", P=$(P), R=$(R)TS: 13 | file "NDPluginBase_settings.req", P=$(P), R=$(R) 14 | file "sseq_settings.req", P=$(P), S=$(R)Reset 15 | file "sseq_settings.req", P=$(P), S=$(R)Reset1 16 | file "sseq_settings.req", P=$(P), S=$(R)Reset2 17 | -------------------------------------------------------------------------------- /ADApp/Db/NDStdArrays.template: -------------------------------------------------------------------------------- 1 | #=================================================================# 2 | # Template file: NDStdArrays.template 3 | # Database for NDStdArrays asyn driver and standard asyn device support 4 | # Mark Rivers 5 | # April 14, 2008 6 | 7 | include "NDPluginBase.template" 8 | 9 | ################################################################### 10 | # This record is the array waveform data # 11 | ################################################################### 12 | record(waveform, "$(P)$(R)ArrayData") 13 | { 14 | field(DTYP, "asyn$(TYPE)ArrayIn") 15 | field(INP, "@asyn($(PORT),$(ADDR=0),$(TIMEOUT=1))STD_ARRAY_DATA") 16 | field(FTVL, "$(FTVL)") 17 | field(NELM, "$(NELEMENTS)") 18 | field(SCAN, "I/O Intr") 19 | } 20 | -------------------------------------------------------------------------------- /ADApp/Db/NDStdArrays_settings.req: -------------------------------------------------------------------------------- 1 | # Nothing extra needed beyond NDPluginBase_settings.req for now 2 | file "NDPluginBase_settings.req", P=$(P), R=$(R) 3 | -------------------------------------------------------------------------------- /ADApp/Db/NDTimeSeriesN.template: -------------------------------------------------------------------------------- 1 | #=================================================================# 2 | # Template file: NDTimeSeriesN.template 3 | ################################################################### 4 | # 5 | # Database template for TimeSeries plugin. These are the signal 6 | # specific records. Multiple instances of this template can be 7 | # loaded, each with a different ADDR (which specifies the signal). 8 | # 9 | # Macros: 10 | # P,R - Base PV name 11 | # PORT - Asyn port name 12 | # SIGNAL - The address to use for this signal (start at 0, up tomaxSignals-1) 13 | # TIMEOUT - Asyn port timeout 14 | # 15 | # Mark Rivers 16 | # February 26, 2016 17 | # 18 | ################################################################### 19 | 20 | 21 | ################################################################### 22 | # The name of this signal # 23 | ################################################################### 24 | record(stringout, "$(P)$(R)Name") 25 | { 26 | field(PINI, "YES") 27 | field(VAL, "$(NAME)") 28 | info(autosaveFields, "VAL") 29 | } 30 | 31 | ################################################################### 32 | # Time series records for this signal # 33 | ################################################################### 34 | record(waveform, "$(P)$(R)TimeSeries") 35 | { 36 | field(DTYP, "asynFloat64ArrayIn") 37 | field(INP, "@asyn($(PORT),$(ADDR=0),$(TIMEOUT=1))TS_TIME_SERIES") 38 | field(NELM, "$(NCHANS)") 39 | field(FTVL, "DOUBLE") 40 | field(SCAN, "I/O Intr") 41 | } 42 | -------------------------------------------------------------------------------- /ADApp/Db/NDTimeSeriesN_settings.req: -------------------------------------------------------------------------------- 1 | # This is for one signal 2 | $(P)$(R)Name 3 | -------------------------------------------------------------------------------- /ADApp/Db/NDTimeSeries_settings.req: -------------------------------------------------------------------------------- 1 | $(P)$(R)TSNumPoints 2 | $(P)$(R)TSTimePerPointLink.DOL 3 | $(P)$(R)TSAveragingTime 4 | $(P)$(R)TSRead.SCAN 5 | $(P)$(R)TSAcquireMode 6 | file "NDPluginBase_settings.req", P=$(P), R=$(R) 7 | -------------------------------------------------------------------------------- /ADApp/Db/NDTransform.template: -------------------------------------------------------------------------------- 1 | #=================================================================# 2 | # Template file: NDTransform.template 3 | 4 | include "NDPluginBase.template" 5 | 6 | record(mbbo, "$(P)$(R)Type") 7 | { 8 | field(PINI, "1") 9 | field(DTYP, "asynInt32") 10 | field(OUT, "@asyn($(PORT),$(ADDR=0),$(TIMEOUT=1))TRANSFORM_TYPE") 11 | field(ZRST, "None") 12 | field(ZRVL, "0") 13 | field(ONST, "Rot90") 14 | field(ONVL, "1") 15 | field(TWST, "Rot180") 16 | field(TWVL, "2") 17 | field(THST, "Rot270") 18 | field(THVL, "3") 19 | field(FRST, "Mirror") 20 | field(FRVL, "4") 21 | field(FVST, "Rot90Mirror") 22 | field(FVVL, "5") 23 | field(SXST, "Rot180Mirror") 24 | field(SXVL, "6") 25 | field(SVST, "Rot270Mirror") 26 | field(SVVL, "7") 27 | info(autosaveFields, "VAL") 28 | } 29 | -------------------------------------------------------------------------------- /ADApp/Db/NDTransform_settings.req: -------------------------------------------------------------------------------- 1 | $(P)$(R)Type 2 | file "NDPluginBase_settings.req", P=$(P), R=$(R) 3 | -------------------------------------------------------------------------------- /ADApp/Makefile: -------------------------------------------------------------------------------- 1 | TOP = .. 2 | include $(TOP)/configure/CONFIG 3 | 4 | DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *db*)) 5 | DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *Db*)) 6 | 7 | DIRS += ADSrc 8 | 9 | DIRS += pluginSrc 10 | pluginSrc_DEPEND_DIRS += ADSrc 11 | 12 | DIRS += pluginTests 13 | pluginTests_DEPEND_DIRS += pluginSrc 14 | 15 | ifeq ($(WITH_PVA), YES) 16 | DIRS += ntndArrayConverterSrc 17 | ntndArrayConverterSrc_DEPEND_DIRS += ADSrc 18 | pluginSrc_DEPEND_DIRS += ntndArrayConverterSrc 19 | endif 20 | 21 | DIRS += op 22 | 23 | include $(TOP)/configure/RULES_DIRS 24 | 25 | -------------------------------------------------------------------------------- /ADApp/ntndArrayConverterSrc/Makefile: -------------------------------------------------------------------------------- 1 | TOP=../.. 2 | include $(TOP)/configure/CONFIG 3 | #---------------------------------------- 4 | # ADD MACRO DEFINITIONS AFTER THIS LINE 5 | #============================= 6 | 7 | LIBRARY_IOC += ntndArrayConverter 8 | INC += ntndArrayConverterAPI.h 9 | INC += ntndArrayConverter.h 10 | LIB_SRCS += ntndArrayConverter.cpp 11 | 12 | USR_CPPFLAGS += -DBUILDING_ntndArrayConverter_API 13 | 14 | LIB_LIBS += ADBase 15 | LIB_LIBS += pvData 16 | LIB_LIBS += nt 17 | LIB_LIBS += asyn 18 | LIB_LIBS += $(EPICS_BASE_IOC_LIBS) 19 | 20 | #============================= 21 | 22 | include $(TOP)/configure/RULES 23 | #---------------------------------------- 24 | # ADD RULES AFTER THIS LINE 25 | 26 | -------------------------------------------------------------------------------- /ADApp/ntndArrayConverterSrc/ntndArrayConverter.h: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | #include 4 | #include 5 | #include 6 | 7 | typedef struct NTNDArrayInfo 8 | { 9 | int ndims; 10 | size_t dims[ND_ARRAY_MAX_DIMS]; 11 | size_t nElements, totalBytes; 12 | int bytesPerElement; 13 | NDColorMode_t colorMode; 14 | NDDataType_t dataType; 15 | std::string codec; 16 | 17 | struct 18 | { 19 | int dim; 20 | size_t size, stride; 21 | }x, y, color; 22 | }NTNDArrayInfo_t; 23 | 24 | class NTNDARRAYCONVERTER_API NTNDArrayConverter 25 | { 26 | public: 27 | NTNDArrayConverter(epics::nt::NTNDArrayPtr array); 28 | 29 | NTNDArrayInfo_t getInfo (void); 30 | void toArray (NDArray *dest); 31 | void fromArray (NDArray *src); 32 | 33 | private: 34 | epics::nt::NTNDArrayPtr m_array; 35 | 36 | epics::pvData::ScalarType getValueType (void); 37 | NDColorMode_t getColorMode (void); 38 | 39 | template 40 | void toValue (NDArray *dest); 41 | void toValue (NDArray *dest); 42 | 43 | void toDimensions (NDArray *dest); 44 | void toTimeStamp (NDArray *dest); 45 | void toDataTimeStamp (NDArray *dest); 46 | 47 | template 48 | void toAttribute (NDArray *dest, epics::pvData::PVStructurePtr src); 49 | void toStringAttribute (NDArray *dest, epics::pvData::PVStructurePtr src); 50 | void toUndefinedAttribute (NDArray *dest, epics::pvData::PVStructurePtr src); 51 | void toAttributes (NDArray *dest); 52 | 53 | template 54 | void fromValue (NDArray *src); 55 | void fromValue (NDArray *src); 56 | 57 | void fromDimensions (NDArray *src); 58 | void fromTimeStamp (NDArray *src); 59 | void fromDataTimeStamp (NDArray *src); 60 | 61 | template 62 | void fromAttribute (epics::pvData::PVStructurePtr dest, NDAttribute *src); 63 | void fromStringAttribute (epics::pvData::PVStructurePtr dest, NDAttribute *src); 64 | void fromUndefinedAttribute (epics::pvData::PVStructurePtr dest); 65 | void fromAttributes (NDArray *src); 66 | }; 67 | 68 | typedef std::tr1::shared_ptr NTNDArrayConverterPtr; 69 | -------------------------------------------------------------------------------- /ADApp/ntndArrayConverterSrc/ntndArrayConverterAPI.h: -------------------------------------------------------------------------------- 1 | /* This is a generated file, do not edit! */ 2 | 3 | #ifndef INC_ntndArrayConverterAPI_H 4 | #define INC_ntndArrayConverterAPI_H 5 | 6 | #if defined(_WIN32) || defined(__CYGWIN__) 7 | 8 | # if !defined(epicsStdCall) 9 | # define epicsStdCall __stdcall 10 | # endif 11 | 12 | # if defined(BUILDING_ntndArrayConverter_API) && defined(EPICS_BUILD_DLL) 13 | /* Building library as dll */ 14 | # define NTNDARRAYCONVERTER_API __declspec(dllexport) 15 | # elif !defined(BUILDING_ntndArrayConverter_API) && defined(EPICS_CALL_DLL) 16 | /* Calling library in dll form */ 17 | # define NTNDARRAYCONVERTER_API __declspec(dllimport) 18 | # endif 19 | 20 | #elif __GNUC__ >= 4 21 | # define NTNDARRAYCONVERTER_API __attribute__ ((visibility("default"))) 22 | #endif 23 | 24 | #if !defined(NTNDARRAYCONVERTER_API) 25 | # define NTNDARRAYCONVERTER_API 26 | #endif 27 | 28 | #if !defined(epicsStdCall) 29 | # define epicsStdCall 30 | #endif 31 | 32 | #endif /* INC_ntndArrayConverterAPI_H */ 33 | 34 | -------------------------------------------------------------------------------- /ADApp/op/Makefile: -------------------------------------------------------------------------------- 1 | TOP = ../.. 2 | include $(TOP)/configure/CONFIG 3 | 4 | ADL_DIR = adl 5 | UI_DIR = ui/autoconvert 6 | EDL_DIR = edl/autoconvert 7 | OPI_DIR = opi/autoconvert 8 | BOB_DIR = bob/autoconvert 9 | 10 | include $(CONFIG)/RULES_DIRS 11 | 12 | -include $(SUPPORT)/configure/RULES_OPI 13 | -------------------------------------------------------------------------------- /ADApp/op/adl/NDFileNetCDF.adl: -------------------------------------------------------------------------------- 1 | 2 | file { 3 | name="/home/epics/devel/areaDetector/ADCore/ADApp/op/adl/NDFileNetCDF.adl" 4 | version=030109 5 | } 6 | display { 7 | object { 8 | x=360 9 | y=163 10 | width=1070 11 | height=600 12 | } 13 | clr=14 14 | bclr=4 15 | cmap="" 16 | gridSpacing=5 17 | gridOn=0 18 | snapToGrid=0 19 | } 20 | "color map" { 21 | ncolors=65 22 | colors { 23 | ffffff, 24 | ececec, 25 | dadada, 26 | c8c8c8, 27 | bbbbbb, 28 | aeaeae, 29 | 9e9e9e, 30 | 919191, 31 | 858585, 32 | 787878, 33 | 696969, 34 | 5a5a5a, 35 | 464646, 36 | 2d2d2d, 37 | 000000, 38 | 00d800, 39 | 1ebb00, 40 | 339900, 41 | 2d7f00, 42 | 216c00, 43 | fd0000, 44 | de1309, 45 | be190b, 46 | a01207, 47 | 820400, 48 | 5893ff, 49 | 597ee1, 50 | 4b6ec7, 51 | 3a5eab, 52 | 27548d, 53 | fbf34a, 54 | f9da3c, 55 | eeb62b, 56 | e19015, 57 | cd6100, 58 | ffb0ff, 59 | d67fe2, 60 | ae4ebc, 61 | 8b1a96, 62 | 610a75, 63 | a4aaff, 64 | 8793e2, 65 | 6a73c1, 66 | 4d52a4, 67 | 343386, 68 | c7bb6d, 69 | b79d5c, 70 | a47e3c, 71 | 7d5627, 72 | 58340f, 73 | 99ffff, 74 | 73dfff, 75 | 4ea5f9, 76 | 2a63e4, 77 | 0a00b8, 78 | ebf1b5, 79 | d4db9d, 80 | bbc187, 81 | a6a462, 82 | 8b8239, 83 | 73ff6b, 84 | 52da3b, 85 | 3cb420, 86 | 289315, 87 | 1a7309, 88 | } 89 | } 90 | rectangle { 91 | object { 92 | x=0 93 | y=5 94 | width=1070 95 | height=26 96 | } 97 | "basic attribute" { 98 | clr=2 99 | } 100 | } 101 | text { 102 | object { 103 | x=0 104 | y=6 105 | width=1070 106 | height=25 107 | } 108 | "basic attribute" { 109 | clr=54 110 | } 111 | textix="$(P)$(R)" 112 | align="horiz. centered" 113 | } 114 | composite { 115 | object { 116 | x=5 117 | y=40 118 | width=380 119 | height=555 120 | } 121 | "composite name"="" 122 | "composite file"="NDPluginBase.adl" 123 | } 124 | composite { 125 | object { 126 | x=390 127 | y=40 128 | width=675 129 | height=405 130 | } 131 | "composite name"="" 132 | "composite file"="NDFileBase.adl" 133 | } 134 | -------------------------------------------------------------------------------- /ADApp/op/adl/NDFileNull.adl: -------------------------------------------------------------------------------- 1 | 2 | file { 3 | name="/home/epics/devel/areaDetector-3-2/ADCore/ADApp/op/adl/NDFileNull.adl" 4 | version=030109 5 | } 6 | display { 7 | object { 8 | x=259 9 | y=266 10 | width=1070 11 | height=600 12 | } 13 | clr=14 14 | bclr=4 15 | cmap="" 16 | gridSpacing=5 17 | gridOn=0 18 | snapToGrid=0 19 | } 20 | "color map" { 21 | ncolors=65 22 | colors { 23 | ffffff, 24 | ececec, 25 | dadada, 26 | c8c8c8, 27 | bbbbbb, 28 | aeaeae, 29 | 9e9e9e, 30 | 919191, 31 | 858585, 32 | 787878, 33 | 696969, 34 | 5a5a5a, 35 | 464646, 36 | 2d2d2d, 37 | 000000, 38 | 00d800, 39 | 1ebb00, 40 | 339900, 41 | 2d7f00, 42 | 216c00, 43 | fd0000, 44 | de1309, 45 | be190b, 46 | a01207, 47 | 820400, 48 | 5893ff, 49 | 597ee1, 50 | 4b6ec7, 51 | 3a5eab, 52 | 27548d, 53 | fbf34a, 54 | f9da3c, 55 | eeb62b, 56 | e19015, 57 | cd6100, 58 | ffb0ff, 59 | d67fe2, 60 | ae4ebc, 61 | 8b1a96, 62 | 610a75, 63 | a4aaff, 64 | 8793e2, 65 | 6a73c1, 66 | 4d52a4, 67 | 343386, 68 | c7bb6d, 69 | b79d5c, 70 | a47e3c, 71 | 7d5627, 72 | 58340f, 73 | 99ffff, 74 | 73dfff, 75 | 4ea5f9, 76 | 2a63e4, 77 | 0a00b8, 78 | ebf1b5, 79 | d4db9d, 80 | bbc187, 81 | a6a462, 82 | 8b8239, 83 | 73ff6b, 84 | 52da3b, 85 | 3cb420, 86 | 289315, 87 | 1a7309, 88 | } 89 | } 90 | rectangle { 91 | object { 92 | x=0 93 | y=5 94 | width=1070 95 | height=26 96 | } 97 | "basic attribute" { 98 | clr=2 99 | } 100 | } 101 | text { 102 | object { 103 | x=0 104 | y=6 105 | width=1070 106 | height=25 107 | } 108 | "basic attribute" { 109 | clr=54 110 | } 111 | textix="$(P)$(R)" 112 | align="horiz. centered" 113 | } 114 | composite { 115 | object { 116 | x=5 117 | y=40 118 | width=380 119 | height=555 120 | } 121 | "composite name"="" 122 | "composite file"="NDPluginBase.adl" 123 | } 124 | composite { 125 | object { 126 | x=390 127 | y=40 128 | width=675 129 | height=405 130 | } 131 | "composite name"="" 132 | "composite file"="NDFileBase.adl" 133 | } 134 | -------------------------------------------------------------------------------- /ADApp/op/adl/NDFileTIFF.adl: -------------------------------------------------------------------------------- 1 | 2 | file { 3 | name="/home/epics/devel/areaDetector-3-2/ADCore/ADApp/op/adl/NDFileTIFF.adl" 4 | version=030109 5 | } 6 | display { 7 | object { 8 | x=345 9 | y=196 10 | width=1070 11 | height=600 12 | } 13 | clr=14 14 | bclr=4 15 | cmap="" 16 | gridSpacing=5 17 | gridOn=0 18 | snapToGrid=0 19 | } 20 | "color map" { 21 | ncolors=65 22 | colors { 23 | ffffff, 24 | ececec, 25 | dadada, 26 | c8c8c8, 27 | bbbbbb, 28 | aeaeae, 29 | 9e9e9e, 30 | 919191, 31 | 858585, 32 | 787878, 33 | 696969, 34 | 5a5a5a, 35 | 464646, 36 | 2d2d2d, 37 | 000000, 38 | 00d800, 39 | 1ebb00, 40 | 339900, 41 | 2d7f00, 42 | 216c00, 43 | fd0000, 44 | de1309, 45 | be190b, 46 | a01207, 47 | 820400, 48 | 5893ff, 49 | 597ee1, 50 | 4b6ec7, 51 | 3a5eab, 52 | 27548d, 53 | fbf34a, 54 | f9da3c, 55 | eeb62b, 56 | e19015, 57 | cd6100, 58 | ffb0ff, 59 | d67fe2, 60 | ae4ebc, 61 | 8b1a96, 62 | 610a75, 63 | a4aaff, 64 | 8793e2, 65 | 6a73c1, 66 | 4d52a4, 67 | 343386, 68 | c7bb6d, 69 | b79d5c, 70 | a47e3c, 71 | 7d5627, 72 | 58340f, 73 | 99ffff, 74 | 73dfff, 75 | 4ea5f9, 76 | 2a63e4, 77 | 0a00b8, 78 | ebf1b5, 79 | d4db9d, 80 | bbc187, 81 | a6a462, 82 | 8b8239, 83 | 73ff6b, 84 | 52da3b, 85 | 3cb420, 86 | 289315, 87 | 1a7309, 88 | } 89 | } 90 | rectangle { 91 | object { 92 | x=0 93 | y=5 94 | width=1070 95 | height=26 96 | } 97 | "basic attribute" { 98 | clr=2 99 | } 100 | } 101 | text { 102 | object { 103 | x=0 104 | y=6 105 | width=1070 106 | height=25 107 | } 108 | "basic attribute" { 109 | clr=54 110 | } 111 | textix="$(P)$(R)" 112 | align="horiz. centered" 113 | } 114 | composite { 115 | object { 116 | x=5 117 | y=40 118 | width=380 119 | height=555 120 | } 121 | "composite name"="" 122 | "composite file"="NDPluginBase.adl" 123 | } 124 | composite { 125 | object { 126 | x=390 127 | y=40 128 | width=675 129 | height=405 130 | } 131 | "composite name"="" 132 | "composite file"="NDFileBase.adl" 133 | } 134 | -------------------------------------------------------------------------------- /ADApp/op/adl/NDPlot.adl: -------------------------------------------------------------------------------- 1 | 2 | file { 3 | name="/home/epics/devel/areaDetector/ADCore/ADApp/op/adl/NDPlot.adl" 4 | version=030109 5 | } 6 | display { 7 | object { 8 | x=1095 9 | y=344 10 | width=400 11 | height=300 12 | } 13 | clr=14 14 | bclr=4 15 | cmap="" 16 | gridSpacing=5 17 | gridOn=0 18 | snapToGrid=0 19 | } 20 | "color map" { 21 | ncolors=65 22 | colors { 23 | ffffff, 24 | ececec, 25 | dadada, 26 | c8c8c8, 27 | bbbbbb, 28 | aeaeae, 29 | 9e9e9e, 30 | 919191, 31 | 858585, 32 | 787878, 33 | 696969, 34 | 5a5a5a, 35 | 464646, 36 | 2d2d2d, 37 | 000000, 38 | 00d800, 39 | 1ebb00, 40 | 339900, 41 | 2d7f00, 42 | 216c00, 43 | fd0000, 44 | de1309, 45 | be190b, 46 | a01207, 47 | 820400, 48 | 5893ff, 49 | 597ee1, 50 | 4b6ec7, 51 | 3a5eab, 52 | 27548d, 53 | fbf34a, 54 | f9da3c, 55 | eeb62b, 56 | e19015, 57 | cd6100, 58 | ffb0ff, 59 | d67fe2, 60 | ae4ebc, 61 | 8b1a96, 62 | 610a75, 63 | a4aaff, 64 | 8793e2, 65 | 6a73c1, 66 | 4d52a4, 67 | 343386, 68 | c7bb6d, 69 | b79d5c, 70 | a47e3c, 71 | 7d5627, 72 | 58340f, 73 | 99ffff, 74 | 73dfff, 75 | 4ea5f9, 76 | 2a63e4, 77 | 0a00b8, 78 | ebf1b5, 79 | d4db9d, 80 | bbc187, 81 | a6a462, 82 | 8b8239, 83 | 73ff6b, 84 | 52da3b, 85 | 3cb420, 86 | 289315, 87 | 1a7309, 88 | } 89 | } 90 | "cartesian plot" { 91 | object { 92 | x=0 93 | y=30 94 | width=400 95 | height=270 96 | } 97 | plotcom { 98 | title="$(TITLE)" 99 | xlabel="$(XLABEL)" 100 | ylabel="$(YLABEL)" 101 | clr=14 102 | bclr=51 103 | } 104 | trace[0] { 105 | ydata="$(P)$(R)$(DATA)" 106 | data_clr=14 107 | yaxis=0 108 | } 109 | } 110 | rectangle { 111 | object { 112 | x=0 113 | y=0 114 | width=400 115 | height=26 116 | } 117 | "basic attribute" { 118 | clr=2 119 | } 120 | } 121 | text { 122 | object { 123 | x=0 124 | y=1 125 | width=400 126 | height=25 127 | } 128 | "basic attribute" { 129 | clr=54 130 | } 131 | textix="$(P)$(R) $(TITLE)" 132 | align="horiz. centered" 133 | } 134 | -------------------------------------------------------------------------------- /ADApp/op/adl/NDPlotXY.adl: -------------------------------------------------------------------------------- 1 | 2 | file { 3 | name="/home/epics/devel/areaDetector/ADCore/ADApp/op/adl/NDPlotXY.adl" 4 | version=030109 5 | } 6 | display { 7 | object { 8 | x=1095 9 | y=344 10 | width=400 11 | height=300 12 | } 13 | clr=14 14 | bclr=4 15 | cmap="" 16 | gridSpacing=5 17 | gridOn=0 18 | snapToGrid=0 19 | } 20 | "color map" { 21 | ncolors=65 22 | colors { 23 | ffffff, 24 | ececec, 25 | dadada, 26 | c8c8c8, 27 | bbbbbb, 28 | aeaeae, 29 | 9e9e9e, 30 | 919191, 31 | 858585, 32 | 787878, 33 | 696969, 34 | 5a5a5a, 35 | 464646, 36 | 2d2d2d, 37 | 000000, 38 | 00d800, 39 | 1ebb00, 40 | 339900, 41 | 2d7f00, 42 | 216c00, 43 | fd0000, 44 | de1309, 45 | be190b, 46 | a01207, 47 | 820400, 48 | 5893ff, 49 | 597ee1, 50 | 4b6ec7, 51 | 3a5eab, 52 | 27548d, 53 | fbf34a, 54 | f9da3c, 55 | eeb62b, 56 | e19015, 57 | cd6100, 58 | ffb0ff, 59 | d67fe2, 60 | ae4ebc, 61 | 8b1a96, 62 | 610a75, 63 | a4aaff, 64 | 8793e2, 65 | 6a73c1, 66 | 4d52a4, 67 | 343386, 68 | c7bb6d, 69 | b79d5c, 70 | a47e3c, 71 | 7d5627, 72 | 58340f, 73 | 99ffff, 74 | 73dfff, 75 | 4ea5f9, 76 | 2a63e4, 77 | 0a00b8, 78 | ebf1b5, 79 | d4db9d, 80 | bbc187, 81 | a6a462, 82 | 8b8239, 83 | 73ff6b, 84 | 52da3b, 85 | 3cb420, 86 | 289315, 87 | 1a7309, 88 | } 89 | } 90 | "cartesian plot" { 91 | object { 92 | x=0 93 | y=30 94 | width=400 95 | height=270 96 | } 97 | plotcom { 98 | title="$(TITLE)" 99 | xlabel="$(XLABEL)" 100 | ylabel="$(YLABEL)" 101 | clr=14 102 | bclr=51 103 | } 104 | trace[0] { 105 | xdata="$(P)$(R)$(XDATA)" 106 | ydata="$(P)$(R)$(YDATA)" 107 | data_clr=14 108 | yaxis=0 109 | } 110 | } 111 | rectangle { 112 | object { 113 | x=0 114 | y=0 115 | width=400 116 | height=26 117 | } 118 | "basic attribute" { 119 | clr=2 120 | } 121 | } 122 | text { 123 | object { 124 | x=0 125 | y=1 126 | width=400 127 | height=25 128 | } 129 | "basic attribute" { 130 | clr=54 131 | } 132 | textix="$(P)$(R) $(TITLE)" 133 | align="horiz. centered" 134 | } 135 | -------------------------------------------------------------------------------- /ADApp/op/adl/NDScatter.adl: -------------------------------------------------------------------------------- 1 | 2 | file { 3 | name="/home/epics/devel/areaDetector/ADCore/ADApp/op/adl/NDScatter.adl" 4 | version=030109 5 | } 6 | display { 7 | object { 8 | x=470 9 | y=197 10 | width=390 11 | height=600 12 | } 13 | clr=14 14 | bclr=4 15 | cmap="" 16 | gridSpacing=5 17 | gridOn=0 18 | snapToGrid=0 19 | } 20 | "color map" { 21 | ncolors=65 22 | colors { 23 | ffffff, 24 | ececec, 25 | dadada, 26 | c8c8c8, 27 | bbbbbb, 28 | aeaeae, 29 | 9e9e9e, 30 | 919191, 31 | 858585, 32 | 787878, 33 | 696969, 34 | 5a5a5a, 35 | 464646, 36 | 2d2d2d, 37 | 000000, 38 | 00d800, 39 | 1ebb00, 40 | 339900, 41 | 2d7f00, 42 | 216c00, 43 | fd0000, 44 | de1309, 45 | be190b, 46 | a01207, 47 | 820400, 48 | 5893ff, 49 | 597ee1, 50 | 4b6ec7, 51 | 3a5eab, 52 | 27548d, 53 | fbf34a, 54 | f9da3c, 55 | eeb62b, 56 | e19015, 57 | cd6100, 58 | ffb0ff, 59 | d67fe2, 60 | ae4ebc, 61 | 8b1a96, 62 | 610a75, 63 | a4aaff, 64 | 8793e2, 65 | 6a73c1, 66 | 4d52a4, 67 | 343386, 68 | c7bb6d, 69 | b79d5c, 70 | a47e3c, 71 | 7d5627, 72 | 58340f, 73 | 99ffff, 74 | 73dfff, 75 | 4ea5f9, 76 | 2a63e4, 77 | 0a00b8, 78 | ebf1b5, 79 | d4db9d, 80 | bbc187, 81 | a6a462, 82 | 8b8239, 83 | 73ff6b, 84 | 52da3b, 85 | 3cb420, 86 | 289315, 87 | 1a7309, 88 | } 89 | } 90 | rectangle { 91 | object { 92 | x=0 93 | y=5 94 | width=390 95 | height=25 96 | } 97 | "basic attribute" { 98 | clr=2 99 | } 100 | } 101 | text { 102 | object { 103 | x=0 104 | y=6 105 | width=390 106 | height=25 107 | } 108 | "basic attribute" { 109 | clr=54 110 | } 111 | textix="$(P)$(R)" 112 | align="horiz. centered" 113 | } 114 | composite { 115 | object { 116 | x=5 117 | y=40 118 | width=380 119 | height=555 120 | } 121 | "composite name"="" 122 | "composite file"="NDPluginBase.adl" 123 | } 124 | -------------------------------------------------------------------------------- /ADApp/op/adl/NDStdArrays.adl: -------------------------------------------------------------------------------- 1 | 2 | file { 3 | name="/home/epics/devel/areaDetector/ADCore/ADApp/op/adl/NDStdArrays.adl" 4 | version=030109 5 | } 6 | display { 7 | object { 8 | x=470 9 | y=197 10 | width=390 11 | height=600 12 | } 13 | clr=14 14 | bclr=4 15 | cmap="" 16 | gridSpacing=5 17 | gridOn=0 18 | snapToGrid=0 19 | } 20 | "color map" { 21 | ncolors=65 22 | colors { 23 | ffffff, 24 | ececec, 25 | dadada, 26 | c8c8c8, 27 | bbbbbb, 28 | aeaeae, 29 | 9e9e9e, 30 | 919191, 31 | 858585, 32 | 787878, 33 | 696969, 34 | 5a5a5a, 35 | 464646, 36 | 2d2d2d, 37 | 000000, 38 | 00d800, 39 | 1ebb00, 40 | 339900, 41 | 2d7f00, 42 | 216c00, 43 | fd0000, 44 | de1309, 45 | be190b, 46 | a01207, 47 | 820400, 48 | 5893ff, 49 | 597ee1, 50 | 4b6ec7, 51 | 3a5eab, 52 | 27548d, 53 | fbf34a, 54 | f9da3c, 55 | eeb62b, 56 | e19015, 57 | cd6100, 58 | ffb0ff, 59 | d67fe2, 60 | ae4ebc, 61 | 8b1a96, 62 | 610a75, 63 | a4aaff, 64 | 8793e2, 65 | 6a73c1, 66 | 4d52a4, 67 | 343386, 68 | c7bb6d, 69 | b79d5c, 70 | a47e3c, 71 | 7d5627, 72 | 58340f, 73 | 99ffff, 74 | 73dfff, 75 | 4ea5f9, 76 | 2a63e4, 77 | 0a00b8, 78 | ebf1b5, 79 | d4db9d, 80 | bbc187, 81 | a6a462, 82 | 8b8239, 83 | 73ff6b, 84 | 52da3b, 85 | 3cb420, 86 | 289315, 87 | 1a7309, 88 | } 89 | } 90 | rectangle { 91 | object { 92 | x=0 93 | y=5 94 | width=390 95 | height=25 96 | } 97 | "basic attribute" { 98 | clr=2 99 | } 100 | } 101 | text { 102 | object { 103 | x=0 104 | y=6 105 | width=390 106 | height=25 107 | } 108 | "basic attribute" { 109 | clr=54 110 | } 111 | textix="$(P)$(R)" 112 | align="horiz. centered" 113 | } 114 | composite { 115 | object { 116 | x=5 117 | y=40 118 | width=380 119 | height=555 120 | } 121 | "composite name"="" 122 | "composite file"="NDPluginBase.adl" 123 | } 124 | -------------------------------------------------------------------------------- /ADApp/op/adl/createDirectoryHelp.adl: -------------------------------------------------------------------------------- 1 | 2 | file { 3 | name="/home/epics/devel/areaDetector/ADCore/ADApp/op/adl/createDirectoryHelp.adl" 4 | version=030109 5 | } 6 | display { 7 | object { 8 | x=839 9 | y=129 10 | width=485 11 | height=90 12 | } 13 | clr=14 14 | bclr=4 15 | cmap="" 16 | gridSpacing=5 17 | gridOn=0 18 | snapToGrid=0 19 | } 20 | "color map" { 21 | ncolors=65 22 | colors { 23 | ffffff, 24 | ececec, 25 | dadada, 26 | c8c8c8, 27 | bbbbbb, 28 | aeaeae, 29 | 9e9e9e, 30 | 919191, 31 | 858585, 32 | 787878, 33 | 696969, 34 | 5a5a5a, 35 | 464646, 36 | 2d2d2d, 37 | 000000, 38 | 00d800, 39 | 1ebb00, 40 | 339900, 41 | 2d7f00, 42 | 216c00, 43 | fd0000, 44 | de1309, 45 | be190b, 46 | a01207, 47 | 820400, 48 | 5893ff, 49 | 597ee1, 50 | 4b6ec7, 51 | 3a5eab, 52 | 27548d, 53 | fbf34a, 54 | f9da3c, 55 | eeb62b, 56 | e19015, 57 | cd6100, 58 | ffb0ff, 59 | d67fe2, 60 | ae4ebc, 61 | 8b1a96, 62 | 610a75, 63 | a4aaff, 64 | 8793e2, 65 | 6a73c1, 66 | 4d52a4, 67 | 343386, 68 | c7bb6d, 69 | b79d5c, 70 | a47e3c, 71 | 7d5627, 72 | 58340f, 73 | 99ffff, 74 | 73dfff, 75 | 4ea5f9, 76 | 2a63e4, 77 | 0a00b8, 78 | ebf1b5, 79 | d4db9d, 80 | bbc187, 81 | a6a462, 82 | 8b8239, 83 | 73ff6b, 84 | 52da3b, 85 | 3cb420, 86 | 289315, 87 | 1a7309, 88 | } 89 | } 90 | text { 91 | object { 92 | x=52 93 | y=5 94 | width=380 95 | height=20 96 | } 97 | "basic attribute" { 98 | clr=14 99 | } 100 | textix="Explanation of CreateDirectory value N" 101 | } 102 | text { 103 | object { 104 | x=5 105 | y=33 106 | width=259 107 | height=14 108 | } 109 | "basic attribute" { 110 | clr=14 111 | } 112 | textix="N = 0: No directories will be created" 113 | } 114 | text { 115 | object { 116 | x=5 117 | y=52 118 | width=392 119 | height=14 120 | } 121 | "basic attribute" { 122 | clr=14 123 | } 124 | textix="N < 0: Up to abs(N) new directory levels will be created" 125 | } 126 | text { 127 | object { 128 | x=5 129 | y=71 130 | width=476 131 | height=14 132 | } 133 | "basic attribute" { 134 | clr=14 135 | } 136 | textix="N > 0: N directories from the top level specified must already exist" 137 | } 138 | -------------------------------------------------------------------------------- /ADApp/op/bob/autoconvert/NDFileNetCDF.bob: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | NDFileNetCDF 5 | 360 6 | 163 7 | 1070 8 | 9 | 10 | 11 | 12 | false 13 | 5 14 | 15 | rectangle #6 16 | 5 17 | 1070 18 | 26 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | text #9 30 | $(P)$(R) 31 | 6 32 | 1070 33 | 25 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 1 43 | 44 | 45 | composite #12 46 | NDPluginBase.bob 47 | 5 48 | 40 49 | 380 50 | 555 51 | 52 | 53 | composite #14 54 | NDFileBase.bob 55 | 390 56 | 40 57 | 675 58 | 405 59 | 60 | 61 | -------------------------------------------------------------------------------- /ADApp/op/bob/autoconvert/NDFileNull.bob: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | NDFileNull 5 | 259 6 | 266 7 | 1070 8 | 9 | 10 | 11 | 12 | false 13 | 5 14 | 15 | rectangle #6 16 | 5 17 | 1070 18 | 26 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | text #9 30 | $(P)$(R) 31 | 6 32 | 1070 33 | 25 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 1 43 | 44 | 45 | composite #12 46 | NDPluginBase.bob 47 | 5 48 | 40 49 | 380 50 | 555 51 | 52 | 53 | composite #14 54 | NDFileBase.bob 55 | 390 56 | 40 57 | 675 58 | 405 59 | 60 | 61 | -------------------------------------------------------------------------------- /ADApp/op/bob/autoconvert/NDFileTIFF.bob: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | NDFileTIFF 5 | 345 6 | 196 7 | 1070 8 | 9 | 10 | 11 | 12 | false 13 | 5 14 | 15 | rectangle #6 16 | 5 17 | 1070 18 | 26 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | text #9 30 | $(P)$(R) 31 | 6 32 | 1070 33 | 25 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 1 43 | 44 | 45 | composite #12 46 | NDPluginBase.bob 47 | 5 48 | 40 49 | 380 50 | 555 51 | 52 | 53 | composite #14 54 | NDFileBase.bob 55 | 390 56 | 40 57 | 675 58 | 405 59 | 60 | 61 | -------------------------------------------------------------------------------- /ADApp/op/bob/autoconvert/NDScatter.bob: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | NDScatter 5 | 470 6 | 197 7 | 390 8 | 9 | 10 | 11 | 12 | false 13 | 5 14 | 15 | rectangle #6 16 | 5 17 | 390 18 | 25 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | text #9 30 | $(P)$(R) 31 | 6 32 | 390 33 | 25 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 1 43 | 44 | 45 | composite #12 46 | NDPluginBase.bob 47 | 5 48 | 40 49 | 380 50 | 555 51 | 52 | 53 | -------------------------------------------------------------------------------- /ADApp/op/bob/autoconvert/NDStdArrays.bob: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | NDStdArrays 5 | 470 6 | 197 7 | 390 8 | 9 | 10 | 11 | 12 | false 13 | 5 14 | 15 | rectangle #6 16 | 5 17 | 390 18 | 25 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | text #9 30 | $(P)$(R) 31 | 6 32 | 390 33 | 25 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 1 43 | 44 | 45 | composite #12 46 | NDPluginBase.bob 47 | 5 48 | 40 49 | 380 50 | 555 51 | 52 | 53 | -------------------------------------------------------------------------------- /ADApp/op/bob/autoconvert/createDirectoryHelp.bob: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | createDirectoryHelp 5 | 839 6 | 129 7 | 485 8 | 90 9 | 10 | 11 | 12 | 13 | false 14 | 5 15 | 16 | text #6 17 | Explanation of CreateDirectory value N 18 | 52 19 | 5 20 | 380 21 | 22 | 23 | 24 | 25 | true 26 | 27 | 28 | text #9 29 | N = 0: No directories will be created 30 | 5 31 | 33 32 | 259 33 | 14 34 | true 35 | 36 | 37 | text #12 38 | N < 0: Up to abs(N) new directory levels will be created 39 | 5 40 | 52 41 | 392 42 | 14 43 | true 44 | 45 | 46 | text #15 47 | N > 0: N directories from the top level specified must already exist 48 | 5 49 | 71 50 | 476 51 | 14 52 | true 53 | 54 | 55 | -------------------------------------------------------------------------------- /ADApp/op/edl/Makefile: -------------------------------------------------------------------------------- 1 | TOP = ../../.. 2 | include $(TOP)/configure/CONFIG 3 | 4 | DATA += $(patsubst ../%, %, $(wildcard ../*.edl)) 5 | 6 | include $(TOP)/configure/RULES 7 | -------------------------------------------------------------------------------- /ADApp/op/edl/NDFileNetCDF.edl: -------------------------------------------------------------------------------- 1 | 4 0 1 2 | beginScreenProperties 3 | major 4 4 | minor 0 5 | release 1 6 | x 1355 7 | y 274 8 | w 390 9 | h 820 10 | font "arial-bold-r-12.0" 11 | ctlFont "arial-bold-r-12.0" 12 | btnFont "arial-bold-r-12.0" 13 | fgColor index 14 14 | bgColor index 3 15 | textColor index 14 16 | ctlFgColor1 index 25 17 | ctlFgColor2 index 25 18 | ctlBgColor1 index 3 19 | ctlBgColor2 index 3 20 | topShadowColor index 1 21 | botShadowColor index 11 22 | showGrid 23 | snapToGrid 24 | gridSize 5 25 | endScreenProperties 26 | 27 | # (Rectangle) 28 | object activeRectangleClass 29 | beginObjectProperties 30 | major 4 31 | minor 0 32 | release 0 33 | x 0 34 | y 665 35 | w 390 36 | h 155 37 | lineColor index 5 38 | fill 39 | fillColor index 5 40 | endObjectProperties 41 | 42 | # (Embedded Window) 43 | object activePipClass 44 | beginObjectProperties 45 | major 4 46 | minor 1 47 | release 0 48 | x 0 49 | y 0 50 | w 390 51 | h 385 52 | fgColor index 14 53 | bgColor index 3 54 | topShadowColor index 1 55 | botShadowColor index 11 56 | displaySource "file" 57 | file "NDPluginBase" 58 | sizeOfs 5 59 | numDsps 2 60 | displayFileName { 61 | 0 "NDPluginBase" 62 | 1 "NDPluginBase" 63 | } 64 | noScroll 65 | endObjectProperties 66 | 67 | # (Embedded Window) 68 | object activePipClass 69 | beginObjectProperties 70 | major 4 71 | minor 1 72 | release 0 73 | x 0 74 | y 385 75 | w 390 76 | h 280 77 | fgColor index 14 78 | bgColor index 3 79 | topShadowColor index 1 80 | botShadowColor index 11 81 | displaySource "file" 82 | file "NDFile" 83 | sizeOfs 5 84 | numDsps 2 85 | displayFileName { 86 | 0 "NDPluginBase" 87 | 1 "NDPluginBase" 88 | } 89 | noScroll 90 | endObjectProperties 91 | 92 | # (Shell Command) 93 | object shellCmdClass 94 | beginObjectProperties 95 | major 4 96 | minor 2 97 | release 0 98 | x 5 99 | y 790 100 | w 380 101 | h 25 102 | fgColor index 14 103 | bgColor index 3 104 | topShadowColor index 1 105 | botShadowColor index 11 106 | font "arial-bold-r-12.0" 107 | buttonLabel "HTML Documentation" 108 | numCmds 1 109 | command { 110 | 0 "firefox \"file://$(which ADBase.edl | sed \"s|data/ADBase.edl|documentation/NDPluginFile.html#netCDF|\")\" &" 111 | } 112 | endObjectProperties 113 | 114 | -------------------------------------------------------------------------------- /ADApp/op/edl/NDFileTIFF.edl: -------------------------------------------------------------------------------- 1 | 4 0 1 2 | beginScreenProperties 3 | major 4 4 | minor 0 5 | release 1 6 | x 1355 7 | y 274 8 | w 390 9 | h 820 10 | font "arial-bold-r-12.0" 11 | ctlFont "arial-bold-r-12.0" 12 | btnFont "arial-bold-r-12.0" 13 | fgColor index 14 14 | bgColor index 3 15 | textColor index 14 16 | ctlFgColor1 index 25 17 | ctlFgColor2 index 25 18 | ctlBgColor1 index 3 19 | ctlBgColor2 index 3 20 | topShadowColor index 1 21 | botShadowColor index 11 22 | showGrid 23 | snapToGrid 24 | gridSize 5 25 | endScreenProperties 26 | 27 | # (Rectangle) 28 | object activeRectangleClass 29 | beginObjectProperties 30 | major 4 31 | minor 0 32 | release 0 33 | x 0 34 | y 665 35 | w 390 36 | h 155 37 | lineColor index 5 38 | fill 39 | fillColor index 5 40 | endObjectProperties 41 | 42 | # (Embedded Window) 43 | object activePipClass 44 | beginObjectProperties 45 | major 4 46 | minor 1 47 | release 0 48 | x 0 49 | y 0 50 | w 390 51 | h 385 52 | fgColor index 14 53 | bgColor index 3 54 | topShadowColor index 1 55 | botShadowColor index 11 56 | displaySource "file" 57 | file "NDPluginBase" 58 | sizeOfs 5 59 | numDsps 2 60 | displayFileName { 61 | 0 "NDPluginBase" 62 | 1 "NDPluginBase" 63 | } 64 | noScroll 65 | endObjectProperties 66 | 67 | # (Embedded Window) 68 | object activePipClass 69 | beginObjectProperties 70 | major 4 71 | minor 1 72 | release 0 73 | x 0 74 | y 385 75 | w 390 76 | h 280 77 | fgColor index 14 78 | bgColor index 3 79 | topShadowColor index 1 80 | botShadowColor index 11 81 | displaySource "file" 82 | file "NDFile" 83 | sizeOfs 5 84 | numDsps 2 85 | displayFileName { 86 | 0 "NDPluginBase" 87 | 1 "NDPluginBase" 88 | } 89 | noScroll 90 | endObjectProperties 91 | 92 | # (Shell Command) 93 | object shellCmdClass 94 | beginObjectProperties 95 | major 4 96 | minor 2 97 | release 0 98 | x 5 99 | y 790 100 | w 380 101 | h 25 102 | fgColor index 14 103 | bgColor index 3 104 | topShadowColor index 1 105 | botShadowColor index 11 106 | font "arial-bold-r-12.0" 107 | buttonLabel "HTML Documentation" 108 | numCmds 1 109 | command { 110 | 0 "firefox \"file://$(which ADBase.edl | sed \"s|data/ADBase.edl|documentation/NDPluginFile.html#TIFF|\")\" &" 111 | } 112 | endObjectProperties 113 | 114 | -------------------------------------------------------------------------------- /ADApp/op/edl/NDPlot.edl: -------------------------------------------------------------------------------- 1 | 4 0 1 2 | beginScreenProperties 3 | major 4 4 | minor 0 5 | release 1 6 | x 189 7 | y 199 8 | w 847 9 | h 513 10 | font "arial-medium-r-18.0" 11 | ctlFont "arial-medium-r-18.0" 12 | btnFont "arial-medium-r-18.0" 13 | fgColor index 14 14 | bgColor index 3 15 | textColor index 14 16 | ctlFgColor1 index 14 17 | ctlFgColor2 index 0 18 | ctlBgColor1 index 0 19 | ctlBgColor2 index 14 20 | topShadowColor index 1 21 | botShadowColor index 11 22 | showGrid 23 | snapToGrid 24 | endScreenProperties 25 | 26 | # (X-Y Graph) 27 | object xyGraphClass 28 | beginObjectProperties 29 | major 4 30 | minor 5 31 | release 0 32 | # Geometry 33 | x 10 34 | y 10 35 | w 830 36 | h 460 37 | # Appearance 38 | border 39 | graphTitle "$(P)$(R) $(TITLE)" 40 | xLabel "$(XLABEL)" 41 | yLabel "$(YLABEL)" 42 | fgColor index 14 43 | bgColor index 0 44 | gridColor index 14 45 | font "arial-medium-r-18.0" 46 | # Operating Modes 47 | nPts 2 48 | # X axis properties 49 | showXAxis 50 | xAxisSrc "AutoScale" 51 | xMax 1 52 | # Y axis properties 53 | showYAxis 54 | yAxisSrc "AutoScale" 55 | yMax 1 56 | # Y2 axis properties 57 | y2AxisSrc "AutoScale" 58 | y2Max 1 59 | # Trace Properties 60 | numTraces 1 61 | yPv { 62 | 0 "$(P)$(R)$(DATA)" 63 | } 64 | plotColor { 65 | 0 index 25 66 | } 67 | endObjectProperties 68 | 69 | # (Exit Button) 70 | object activeExitButtonClass 71 | beginObjectProperties 72 | major 4 73 | minor 1 74 | release 0 75 | x 740 76 | y 480 77 | w 100 78 | h 30 79 | fgColor index 46 80 | bgColor index 3 81 | topShadowColor index 1 82 | botShadowColor index 11 83 | label "EXIT" 84 | font "arial-bold-r-14.0" 85 | 3d 86 | endObjectProperties 87 | 88 | -------------------------------------------------------------------------------- /ADApp/op/edl/NDStdArraysBig.edl: -------------------------------------------------------------------------------- 1 | 4 0 1 2 | beginScreenProperties 3 | major 4 4 | minor 0 5 | release 1 6 | x 487 7 | y 100 8 | w 1292 9 | h 964 10 | font "arial-bold-r-12.0" 11 | ctlFont "arial-bold-r-12.0" 12 | btnFont "arial-bold-r-12.0" 13 | fgColor index 14 14 | bgColor index 3 15 | textColor index 14 16 | ctlFgColor1 index 25 17 | ctlFgColor2 index 25 18 | ctlBgColor1 index 3 19 | ctlBgColor2 index 3 20 | topShadowColor index 1 21 | botShadowColor index 11 22 | showGrid 23 | snapToGrid 24 | gridSize 5 25 | endScreenProperties 26 | 27 | # (Exit Button) 28 | object activeExitButtonClass 29 | beginObjectProperties 30 | major 4 31 | minor 1 32 | release 0 33 | x 0 34 | y 0 35 | w 1024 36 | h 768 37 | fgColor index 46 38 | bgColor index 3 39 | topShadowColor index 1 40 | botShadowColor index 11 41 | label "EXIT" 42 | font "arial-bold-r-14.0" 43 | 3d 44 | invisible 45 | endObjectProperties 46 | 47 | # (TwoDProfileMonitor) 48 | object TwoDProfileMonitorClass 49 | beginObjectProperties 50 | major 4 51 | minor 3 52 | release 1 53 | x 0 54 | y 0 55 | w 1292 56 | h 964 57 | dataPvStr "$(P)$(R)ArrayData" 58 | widthPvStr "$(P)$(R)ArraySize0_RBV" 59 | heightPvStr "$(P)$(R)ArraySize1_RBV" 60 | gridSizePvStr "100" 61 | useFalseColourPvStr "0" 62 | showGridPvStr "0" 63 | pvBasedDataSize 1 64 | maxDataWidth 1292 65 | maxDataHeight 964 66 | pvBasedOffsets 0 67 | pvBasedGridSize 0 68 | pvBasedUseFalseColour 0 69 | pvBasedShowGrid 0 70 | pvBasedGridColour 0 71 | rescaleData 0 72 | pvBasedDataRange 0 73 | dataRangeMin 0 74 | dataRangeMax 0 75 | transposeXY 0 76 | endObjectProperties 77 | 78 | -------------------------------------------------------------------------------- /ADApp/op/edl/NDStdArraysWf.edl: -------------------------------------------------------------------------------- 1 | 4 0 1 2 | beginScreenProperties 3 | major 4 4 | minor 0 5 | release 1 6 | x 491 7 | y 152 8 | w 760 9 | h 480 10 | font "arial-bold-r-12.0" 11 | ctlFont "arial-bold-r-12.0" 12 | btnFont "arial-bold-r-12.0" 13 | fgColor index 14 14 | bgColor index 3 15 | textColor index 14 16 | ctlFgColor1 index 25 17 | ctlFgColor2 index 25 18 | ctlBgColor1 index 3 19 | ctlBgColor2 index 3 20 | topShadowColor index 1 21 | botShadowColor index 11 22 | showGrid 23 | snapToGrid 24 | gridSize 5 25 | endScreenProperties 26 | 27 | # (Rectangle) 28 | object activeRectangleClass 29 | beginObjectProperties 30 | major 4 31 | minor 0 32 | release 0 33 | x 0 34 | y 0 35 | w 760 36 | h 35 37 | lineColor index 51 38 | fill 39 | fillColor index 51 40 | endObjectProperties 41 | 42 | # (Exit Button) 43 | object activeExitButtonClass 44 | beginObjectProperties 45 | major 4 46 | minor 1 47 | release 0 48 | x 685 49 | y 445 50 | w 65 51 | h 25 52 | fgColor index 46 53 | bgColor index 3 54 | topShadowColor index 1 55 | botShadowColor index 11 56 | label "EXIT" 57 | font "arial-bold-r-14.0" 58 | 3d 59 | endObjectProperties 60 | 61 | # (X-Y Graph) 62 | object xyGraphClass 63 | beginObjectProperties 64 | major 4 65 | minor 6 66 | release 0 67 | # Geometry 68 | x 10 69 | y 40 70 | w 740 71 | h 400 72 | # Appearance 73 | border 74 | yLabel "Counts" 75 | fgColor index 14 76 | bgColor index 3 77 | gridColor index 14 78 | font "arial-bold-r-14.0" 79 | # Operating Modes 80 | nPts 1 81 | # X axis properties 82 | showXAxis 83 | xAxisSrc "AutoScale" 84 | xMax 1 85 | # Y axis properties 86 | showYAxis 87 | yAxisSrc "AutoScale" 88 | yMax 1 89 | # Y2 axis properties 90 | showY2Axis 91 | y2AxisSrc "AutoScale" 92 | y2Max 1 93 | # Trace Properties 94 | numTraces 1 95 | yPv { 96 | 0 "$(P)$(R)ArrayData" 97 | } 98 | plotColor { 99 | 0 index 24 100 | } 101 | endObjectProperties 102 | 103 | # (Static Text) 104 | object activeXTextClass 105 | beginObjectProperties 106 | major 4 107 | minor 1 108 | release 0 109 | x 255 110 | y 10 111 | w 144 112 | h 18 113 | font "arial-bold-r-16.0" 114 | fgColor index 14 115 | bgColor index 3 116 | useDisplayBg 117 | value { 118 | "$(P)$(R)ArrayData" 119 | } 120 | autoSize 121 | endObjectProperties 122 | 123 | -------------------------------------------------------------------------------- /ADApp/op/edl/autoconvert/NDFileTIFF.edl: -------------------------------------------------------------------------------- 1 | 4 0 1 2 | beginScreenProperties 3 | major 4 4 | minor 0 5 | release 1 6 | x 345 7 | y 196 8 | w 1070 9 | h 600 10 | font "helvetica-medium-r-18.0" 11 | ctlFont "helvetica-bold-r-10.0" 12 | btnFont "helvetica-medium-r-18.0" 13 | fgColor rgb 0 0 0 14 | bgColor rgb 47872 47872 47872 15 | textColor rgb 0 0 0 16 | ctlFgColor1 rgb 64256 62208 18944 17 | ctlFgColor2 rgb 60928 46592 11008 18 | ctlBgColor1 rgb 52480 24832 0 19 | ctlBgColor2 rgb 65280 45056 65280 20 | topShadowColor rgb 44544 19968 48128 21 | botShadowColor rgb 13312 13056 34304 22 | showGrid 23 | snapToGrid 24 | gridSize 4 25 | endScreenProperties 26 | 27 | # (Rectangle) 28 | object activeRectangleClass 29 | beginObjectProperties 30 | major 4 31 | minor 0 32 | release 0 33 | x 0 34 | y 5 35 | w 1069 36 | h 25 37 | lineColor rgb 55808 55808 55808 38 | fill 39 | fillColor rgb 55808 55808 55808 40 | lineWidth 0 41 | endObjectProperties 42 | 43 | # (Static Text) 44 | object activeXTextClass 45 | beginObjectProperties 46 | major 4 47 | minor 1 48 | release 1 49 | x 0 50 | y 6 51 | w 1070 52 | h 25 53 | font "helvetica-medium-r-18.0" 54 | fontAlign "center" 55 | fgColor rgb 2560 0 47104 56 | bgColor index 3 57 | useDisplayBg 58 | value { 59 | "$(P)$(R)" 60 | } 61 | endObjectProperties 62 | 63 | # (Embedded Window) 64 | object activePipClass 65 | beginObjectProperties 66 | major 4 67 | minor 0 68 | release 0 69 | x 5 70 | y 40 71 | w 380 72 | h 555 73 | fgColor rgb 0 0 0 74 | bgColor rgb 65280 65280 65280 75 | topShadowColor rgb 65280 65280 65280 76 | botShadowColor rgb 0 0 0 77 | displaySource "file" 78 | file "NDPluginBase.edl" 79 | sizeOfs 5 80 | numDsps 1 81 | displayFileName { 82 | 0 "NDPluginBase.edl" 83 | } 84 | noScroll 85 | endObjectProperties 86 | 87 | # (Embedded Window) 88 | object activePipClass 89 | beginObjectProperties 90 | major 4 91 | minor 0 92 | release 0 93 | x 390 94 | y 40 95 | w 675 96 | h 405 97 | fgColor rgb 0 0 0 98 | bgColor rgb 65280 65280 65280 99 | topShadowColor rgb 65280 65280 65280 100 | botShadowColor rgb 0 0 0 101 | displaySource "file" 102 | file "NDFileBase.edl" 103 | sizeOfs 5 104 | numDsps 1 105 | displayFileName { 106 | 0 "NDFileBase.edl" 107 | } 108 | noScroll 109 | endObjectProperties 110 | 111 | -------------------------------------------------------------------------------- /ADApp/op/edl/autoconvert/NDPlot.edl: -------------------------------------------------------------------------------- 1 | 4 0 1 2 | beginScreenProperties 3 | major 4 4 | minor 0 5 | release 1 6 | x 1095 7 | y 344 8 | w 400 9 | h 300 10 | font "helvetica-medium-r-18.0" 11 | ctlFont "helvetica-bold-r-10.0" 12 | btnFont "helvetica-medium-r-18.0" 13 | fgColor rgb 0 0 0 14 | bgColor rgb 47872 47872 47872 15 | textColor rgb 0 0 0 16 | ctlFgColor1 rgb 64256 62208 18944 17 | ctlFgColor2 rgb 60928 46592 11008 18 | ctlBgColor1 rgb 52480 24832 0 19 | ctlBgColor2 rgb 65280 45056 65280 20 | topShadowColor rgb 44544 19968 48128 21 | botShadowColor rgb 13312 13056 34304 22 | showGrid 23 | snapToGrid 24 | gridSize 4 25 | endScreenProperties 26 | 27 | # (X-Y Graph) 28 | object xyGraphClass 29 | beginObjectProperties 30 | major 4 31 | minor 0 32 | release 0 33 | x 0 34 | y 30 35 | w 400 36 | h 270 37 | # Appearance 38 | border 39 | graphTitle "$(TITLE)" 40 | xLabel "$(XLABEL)" 41 | yLabel "$(YLABEL)" 42 | fgColor rgb 0 0 0 43 | bgColor rgb 29440 57088 65280 44 | gridColor rgb 0 0 0 45 | font "helvetica-medium-r-10.0" 46 | # Operating Modes 47 | plotMode "plotLastNPts" 48 | nPts 1 49 | # X axis properties 50 | showXAxis 51 | xAxisSrc "AutoScale" 52 | xMin -9 53 | xMax 9 54 | xLablePrecision 1 55 | # Y axis properties 56 | showYAxis 57 | yAxisSrc "AutoScale" 58 | yMin -9 59 | yMax 9 60 | # Trace Properties 61 | numTraces 1 62 | yPv { 63 | 0 "$(P)$(R)$(DATA)" 64 | } 65 | plotStyle { 66 | 0 "line" 67 | } 68 | plotUpdateMode { 69 | 0 "x" 70 | } 71 | plotSymbolType { 72 | 0 "circle" 73 | } 74 | plotColor { 75 | 0 rgb 0 0 0 76 | } 77 | endObjectProperties 78 | 79 | # (Rectangle) 80 | object activeRectangleClass 81 | beginObjectProperties 82 | major 4 83 | minor 0 84 | release 0 85 | x 0 86 | y 0 87 | w 399 88 | h 25 89 | lineColor rgb 55808 55808 55808 90 | fill 91 | fillColor rgb 55808 55808 55808 92 | lineWidth 0 93 | endObjectProperties 94 | 95 | # (Static Text) 96 | object activeXTextClass 97 | beginObjectProperties 98 | major 4 99 | minor 1 100 | release 1 101 | x 0 102 | y 1 103 | w 400 104 | h 25 105 | font "helvetica-medium-r-18.0" 106 | fontAlign "center" 107 | fgColor rgb 2560 0 47104 108 | bgColor index 3 109 | useDisplayBg 110 | value { 111 | "$(P)$(R) $(TITLE)" 112 | } 113 | endObjectProperties 114 | 115 | -------------------------------------------------------------------------------- /ADApp/op/edl/autoconvert/NDPlotXY.edl: -------------------------------------------------------------------------------- 1 | 4 0 1 2 | beginScreenProperties 3 | major 4 4 | minor 0 5 | release 1 6 | x 1095 7 | y 344 8 | w 400 9 | h 300 10 | font "helvetica-medium-r-18.0" 11 | ctlFont "helvetica-bold-r-10.0" 12 | btnFont "helvetica-medium-r-18.0" 13 | fgColor rgb 0 0 0 14 | bgColor rgb 47872 47872 47872 15 | textColor rgb 0 0 0 16 | ctlFgColor1 rgb 64256 62208 18944 17 | ctlFgColor2 rgb 60928 46592 11008 18 | ctlBgColor1 rgb 52480 24832 0 19 | ctlBgColor2 rgb 65280 45056 65280 20 | topShadowColor rgb 44544 19968 48128 21 | botShadowColor rgb 13312 13056 34304 22 | showGrid 23 | snapToGrid 24 | gridSize 4 25 | endScreenProperties 26 | 27 | # (X-Y Graph) 28 | object xyGraphClass 29 | beginObjectProperties 30 | major 4 31 | minor 0 32 | release 0 33 | x 0 34 | y 30 35 | w 400 36 | h 270 37 | # Appearance 38 | border 39 | graphTitle "$(TITLE)" 40 | xLabel "$(XLABEL)" 41 | yLabel "$(YLABEL)" 42 | fgColor rgb 0 0 0 43 | bgColor rgb 29440 57088 65280 44 | gridColor rgb 0 0 0 45 | font "helvetica-medium-r-10.0" 46 | # Operating Modes 47 | plotMode "plotLastNPts" 48 | nPts 1 49 | # X axis properties 50 | showXAxis 51 | xAxisSrc "AutoScale" 52 | xMin -9 53 | xMax 9 54 | xLablePrecision 1 55 | # Y axis properties 56 | showYAxis 57 | yAxisSrc "AutoScale" 58 | yMin -9 59 | yMax 9 60 | # Trace Properties 61 | numTraces 1 62 | xPv { 63 | 0 "$(P)$(R)$(XDATA)" 64 | } 65 | yPv { 66 | 0 "$(P)$(R)$(YDATA)" 67 | } 68 | plotStyle { 69 | 0 "line" 70 | } 71 | plotUpdateMode { 72 | 0 "x" 73 | } 74 | plotSymbolType { 75 | 0 "circle" 76 | } 77 | plotColor { 78 | 0 rgb 0 0 0 79 | } 80 | endObjectProperties 81 | 82 | # (Rectangle) 83 | object activeRectangleClass 84 | beginObjectProperties 85 | major 4 86 | minor 0 87 | release 0 88 | x 0 89 | y 0 90 | w 399 91 | h 25 92 | lineColor rgb 55808 55808 55808 93 | fill 94 | fillColor rgb 55808 55808 55808 95 | lineWidth 0 96 | endObjectProperties 97 | 98 | # (Static Text) 99 | object activeXTextClass 100 | beginObjectProperties 101 | major 4 102 | minor 1 103 | release 1 104 | x 0 105 | y 1 106 | w 400 107 | h 25 108 | font "helvetica-medium-r-18.0" 109 | fontAlign "center" 110 | fgColor rgb 2560 0 47104 111 | bgColor index 3 112 | useDisplayBg 113 | value { 114 | "$(P)$(R) $(TITLE)" 115 | } 116 | endObjectProperties 117 | 118 | -------------------------------------------------------------------------------- /ADApp/op/edl/autoconvert/NDScatter.edl: -------------------------------------------------------------------------------- 1 | 4 0 1 2 | beginScreenProperties 3 | major 4 4 | minor 0 5 | release 1 6 | x 470 7 | y 197 8 | w 390 9 | h 600 10 | font "helvetica-medium-r-18.0" 11 | ctlFont "helvetica-bold-r-10.0" 12 | btnFont "helvetica-medium-r-18.0" 13 | fgColor rgb 0 0 0 14 | bgColor rgb 47872 47872 47872 15 | textColor rgb 0 0 0 16 | ctlFgColor1 rgb 64256 62208 18944 17 | ctlFgColor2 rgb 60928 46592 11008 18 | ctlBgColor1 rgb 52480 24832 0 19 | ctlBgColor2 rgb 65280 45056 65280 20 | topShadowColor rgb 44544 19968 48128 21 | botShadowColor rgb 13312 13056 34304 22 | showGrid 23 | snapToGrid 24 | gridSize 4 25 | endScreenProperties 26 | 27 | # (Rectangle) 28 | object activeRectangleClass 29 | beginObjectProperties 30 | major 4 31 | minor 0 32 | release 0 33 | x 0 34 | y 5 35 | w 389 36 | h 24 37 | lineColor rgb 55808 55808 55808 38 | fill 39 | fillColor rgb 55808 55808 55808 40 | lineWidth 0 41 | endObjectProperties 42 | 43 | # (Static Text) 44 | object activeXTextClass 45 | beginObjectProperties 46 | major 4 47 | minor 1 48 | release 1 49 | x 0 50 | y 6 51 | w 390 52 | h 25 53 | font "helvetica-medium-r-18.0" 54 | fontAlign "center" 55 | fgColor rgb 2560 0 47104 56 | bgColor index 3 57 | useDisplayBg 58 | value { 59 | "$(P)$(R)" 60 | } 61 | endObjectProperties 62 | 63 | # (Group) 64 | object activeGroupClass 65 | beginObjectProperties 66 | major 4 67 | minor 0 68 | release 0 69 | x 5 70 | y 40 71 | w 380 72 | h 555 73 | 74 | beginGroup 75 | 76 | # (Embedded Window) 77 | object activePipClass 78 | beginObjectProperties 79 | major 4 80 | minor 1 81 | release 0 82 | x 5 83 | y 40 84 | w 380 85 | h 555 86 | fgColor rgb 0 0 0 87 | bgColor rgb 65280 65280 65280 88 | topShadowColor rgb 65280 65280 65280 89 | botShadowColor rgb 0 0 0 90 | displaySource "file" 91 | file "NDPluginBase.edl" 92 | sizeOfs 5 93 | numDsps 1 94 | displayFileName { 95 | 0 "NDPluginBase.edl" 96 | } 97 | noScroll 98 | endObjectProperties 99 | 100 | endGroup 101 | 102 | visMin "A" 103 | visMax "1" 104 | endObjectProperties 105 | 106 | -------------------------------------------------------------------------------- /ADApp/op/edl/autoconvert/NDStdArrays.edl: -------------------------------------------------------------------------------- 1 | 4 0 1 2 | beginScreenProperties 3 | major 4 4 | minor 0 5 | release 1 6 | x 470 7 | y 197 8 | w 390 9 | h 600 10 | font "helvetica-medium-r-18.0" 11 | ctlFont "helvetica-bold-r-10.0" 12 | btnFont "helvetica-medium-r-18.0" 13 | fgColor rgb 0 0 0 14 | bgColor rgb 47872 47872 47872 15 | textColor rgb 0 0 0 16 | ctlFgColor1 rgb 64256 62208 18944 17 | ctlFgColor2 rgb 60928 46592 11008 18 | ctlBgColor1 rgb 52480 24832 0 19 | ctlBgColor2 rgb 65280 45056 65280 20 | topShadowColor rgb 44544 19968 48128 21 | botShadowColor rgb 13312 13056 34304 22 | showGrid 23 | snapToGrid 24 | gridSize 4 25 | endScreenProperties 26 | 27 | # (Rectangle) 28 | object activeRectangleClass 29 | beginObjectProperties 30 | major 4 31 | minor 0 32 | release 0 33 | x 0 34 | y 5 35 | w 389 36 | h 24 37 | lineColor rgb 55808 55808 55808 38 | fill 39 | fillColor rgb 55808 55808 55808 40 | lineWidth 0 41 | endObjectProperties 42 | 43 | # (Static Text) 44 | object activeXTextClass 45 | beginObjectProperties 46 | major 4 47 | minor 1 48 | release 1 49 | x 0 50 | y 6 51 | w 390 52 | h 25 53 | font "helvetica-medium-r-18.0" 54 | fontAlign "center" 55 | fgColor rgb 2560 0 47104 56 | bgColor index 3 57 | useDisplayBg 58 | value { 59 | "$(P)$(R)" 60 | } 61 | endObjectProperties 62 | 63 | # (Group) 64 | object activeGroupClass 65 | beginObjectProperties 66 | major 4 67 | minor 0 68 | release 0 69 | x 5 70 | y 40 71 | w 380 72 | h 555 73 | 74 | beginGroup 75 | 76 | # (Embedded Window) 77 | object activePipClass 78 | beginObjectProperties 79 | major 4 80 | minor 1 81 | release 0 82 | x 5 83 | y 40 84 | w 380 85 | h 555 86 | fgColor rgb 0 0 0 87 | bgColor rgb 65280 65280 65280 88 | topShadowColor rgb 65280 65280 65280 89 | botShadowColor rgb 0 0 0 90 | displaySource "file" 91 | file "NDPluginBase.edl" 92 | sizeOfs 5 93 | numDsps 1 94 | displayFileName { 95 | 0 "NDPluginBase.edl" 96 | } 97 | noScroll 98 | endObjectProperties 99 | 100 | endGroup 101 | 102 | visMin "A" 103 | visMax "1" 104 | endObjectProperties 105 | 106 | -------------------------------------------------------------------------------- /ADApp/op/edl/autoconvert/createDirectoryHelp.edl: -------------------------------------------------------------------------------- 1 | 4 0 1 2 | beginScreenProperties 3 | major 4 4 | minor 0 5 | release 1 6 | x 839 7 | y 129 8 | w 485 9 | h 90 10 | font "helvetica-medium-r-18.0" 11 | ctlFont "helvetica-bold-r-10.0" 12 | btnFont "helvetica-medium-r-18.0" 13 | fgColor rgb 0 0 0 14 | bgColor rgb 47872 47872 47872 15 | textColor rgb 0 0 0 16 | ctlFgColor1 rgb 64256 62208 18944 17 | ctlFgColor2 rgb 60928 46592 11008 18 | ctlBgColor1 rgb 52480 24832 0 19 | ctlBgColor2 rgb 65280 45056 65280 20 | topShadowColor rgb 44544 19968 48128 21 | botShadowColor rgb 13312 13056 34304 22 | showGrid 23 | snapToGrid 24 | gridSize 4 25 | endScreenProperties 26 | 27 | # (Static Text) 28 | object activeXTextClass 29 | beginObjectProperties 30 | major 4 31 | minor 1 32 | release 1 33 | x 52 34 | y 5 35 | w 380 36 | h 20 37 | font "helvetica-medium-r-14.0" 38 | fgColor rgb 0 0 0 39 | bgColor index 3 40 | useDisplayBg 41 | value { 42 | "Explanation of CreateDirectory value N" 43 | } 44 | endObjectProperties 45 | 46 | # (Static Text) 47 | object activeXTextClass 48 | beginObjectProperties 49 | major 4 50 | minor 1 51 | release 1 52 | x 5 53 | y 33 54 | w 259 55 | h 14 56 | font "helvetica-medium-r-12.0" 57 | fgColor rgb 0 0 0 58 | bgColor index 3 59 | useDisplayBg 60 | value { 61 | "N = 0: No directories will be created" 62 | } 63 | endObjectProperties 64 | 65 | # (Static Text) 66 | object activeXTextClass 67 | beginObjectProperties 68 | major 4 69 | minor 1 70 | release 1 71 | x 5 72 | y 52 73 | w 392 74 | h 14 75 | font "helvetica-medium-r-12.0" 76 | fgColor rgb 0 0 0 77 | bgColor index 3 78 | useDisplayBg 79 | value { 80 | "N < 0: Up to abs(N) new directory levels will be created" 81 | } 82 | endObjectProperties 83 | 84 | # (Static Text) 85 | object activeXTextClass 86 | beginObjectProperties 87 | major 4 88 | minor 1 89 | release 1 90 | x 5 91 | y 71 92 | w 476 93 | h 14 94 | font "helvetica-medium-r-12.0" 95 | fgColor rgb 0 0 0 96 | bgColor index 3 97 | useDisplayBg 98 | value { 99 | "N > 0: N directories from the top level specified must already exist" 100 | } 101 | endObjectProperties 102 | 103 | -------------------------------------------------------------------------------- /ADApp/pluginSrc/CircularBuffer.h: -------------------------------------------------------------------------------- 1 | #ifndef CIRCULAR_BUFFER_H_ 2 | #define CIRCULAR_BUFFER_H_ 3 | 4 | #include 5 | #include 6 | 7 | template 8 | class CircularBuffer { 9 | public: 10 | CircularBuffer(size_t max_length) 11 | : max_length_(max_length), 12 | cpos_(0), 13 | size_(0), 14 | buffer_(max_length) 15 | {} 16 | 17 | size_t max_size() const { 18 | return max_length_; 19 | } 20 | 21 | size_t size() const { 22 | return size_; 23 | } 24 | 25 | const T& first() const { 26 | return buffer_[cpos_]; 27 | } 28 | 29 | const T& last() const { 30 | return buffer_[(cpos_ + max_length_ - 1) % max_length_]; 31 | } 32 | 33 | void push_back(const T& el) { 34 | buffer_[cpos_] = el; 35 | 36 | cpos_ = (cpos_ + 1) % max_length_; 37 | 38 | if (size_ < max_length_) { 39 | size_++; 40 | } 41 | } 42 | 43 | const T& operator[](size_t i) const { 44 | return buffer_[(cpos_ + i) % size_]; 45 | } 46 | 47 | void clear() { 48 | cpos_ = 0; 49 | size_ = 0; 50 | } 51 | 52 | const size_t copy_to_array(T * const buffer, size_t buffer_size) const { 53 | size_t size = std::min(size_, buffer_size); 54 | if (size_ < max_length_) { 55 | std::copy(buffer_.begin(), buffer_.begin() + size, buffer); 56 | return size; 57 | } else { 58 | size_t len_to_end = max_length_ - cpos_; 59 | if (size < len_to_end) { 60 | std::copy(buffer_.begin() + cpos_, 61 | buffer_.begin() + cpos_ + size, buffer); 62 | return size; 63 | } else { 64 | std::copy(buffer_.begin() + cpos_, 65 | buffer_.begin() + cpos_ + len_to_end, 66 | buffer); 67 | std::copy(buffer_.begin(), 68 | buffer_.begin() + (size - len_to_end), 69 | buffer + len_to_end); 70 | return size; 71 | } 72 | } 73 | } 74 | 75 | private: 76 | size_t max_length_; 77 | size_t cpos_; 78 | size_t size_; 79 | std::vector buffer_; 80 | }; 81 | 82 | #endif // CIRCULAR_BUFFER_H_ 83 | -------------------------------------------------------------------------------- /ADApp/pluginSrc/NDArrayRing.h: -------------------------------------------------------------------------------- 1 | #ifndef NDARRAYRING_H 2 | #define NDARRAYRING_H 3 | 4 | #include "NDArray.h" 5 | 6 | class NDArrayRing 7 | { 8 | public: 9 | 10 | // Creates a ring with pointers to buffers. 11 | NDArrayRing(int noOfBuffers); 12 | 13 | // Destructor. 14 | ~NDArrayRing(); 15 | 16 | // Read the current size 17 | int size(); 18 | 19 | // Add a new buffer reference to the end of the ring 20 | NDArray *addToEnd(NDArray *pArray); 21 | 22 | // Read out the first buffer reference from the ring 23 | NDArray *readFromStart(); 24 | 25 | // Read out the next buffer reference from the ring 26 | NDArray *readNext(); 27 | 28 | // Does the ring have any other data 29 | bool hasNext(); 30 | 31 | // Removes all the elements from the ring. 32 | void clear(); 33 | 34 | private: 35 | // Array of pointers to NDArrays 36 | NDArray** buffers_; 37 | 38 | // The size of the ring 39 | int noOfBuffers_; 40 | 41 | // Index to read the next buffer 42 | int readIndex_; 43 | 44 | // Index to write a new NDArray pointer into the ring 45 | int writeIndex_; 46 | 47 | // Has the ring wrapped yet 48 | int wrapped_; 49 | }; 50 | 51 | #endif 52 | 53 | -------------------------------------------------------------------------------- /ADApp/pluginSrc/NDFileDummy.cpp: -------------------------------------------------------------------------------- 1 | /* This is a dummy routine for systems like vxWorks that don't support JPEG, Nexus or TIFF */ 2 | 3 | #include 4 | 5 | extern "C" void NDFileNexusRegister(void) 6 | { 7 | } 8 | extern "C" { 9 | epicsExportRegistrar(NDFileNexusRegister); 10 | } 11 | 12 | extern "C" void NDFileHDF5Register(void) 13 | { 14 | } 15 | extern "C" { 16 | epicsExportRegistrar(NDFileHDF5Register); 17 | } 18 | 19 | -------------------------------------------------------------------------------- /ADApp/pluginSrc/NDFileHDF5.dbd: -------------------------------------------------------------------------------- 1 | registrar("NDFileHDF5Register") 2 | 3 | -------------------------------------------------------------------------------- /ADApp/pluginSrc/NDFileHDF5Dataset.h: -------------------------------------------------------------------------------- 1 | #ifndef NDFILEHDF5DATASET_H_ 2 | #define NDFILEHDF5DATASET_H_ 3 | 4 | #include 5 | #include 6 | #include 7 | #include "NDPluginFile.h" 8 | #include "NDFileHDF5VersionCheck.h" 9 | 10 | /** Class used for writing a Dataset with the NDFileHDF5 plugin. 11 | */ 12 | class NDPLUGIN_API NDFileHDF5Dataset 13 | { 14 | public: 15 | NDFileHDF5Dataset(asynUser *pAsynUser, const std::string& name, hid_t dataset); 16 | virtual ~NDFileHDF5Dataset(); 17 | 18 | asynStatus configureDims(NDArray *pArray, bool multiframe, int extradimensions, int *extra_dims, int *extra_dim_chunking, int *user_chunking); 19 | asynStatus extendDataSet(int extradims); 20 | asynStatus extendDataSet(int extradims, hsize_t *offsets); 21 | asynStatus verifyChunking(NDArray *pArray); 22 | void configureCompression(Codec_t codec); 23 | asynStatus writeFile(NDArray *pArray, hid_t datatype, hid_t dataspace, hsize_t *framesize); 24 | hid_t getHandle(); 25 | asynStatus flushDataset(); 26 | hsize_t getDim(int index); 27 | hsize_t getMaxDim(int index); 28 | hsize_t getOffset(int index); 29 | hsize_t getVirtualDim(int index); 30 | 31 | private: 32 | 33 | asynUser *pAsynUser_; // Pointer to the asynUser structure 34 | std::string name_; // Name of this dataset 35 | hid_t dataset_; // Dataset handle 36 | int nextRecord_; 37 | bool multiFrame_; // Whether this is a multi frame dataset 38 | int rank_; // number of dimensions 39 | int extra_rank_; // number of extra dimensions 40 | hsize_t *dims_; // Array of current dimension sizes. This updates as various dimensions grow. 41 | hsize_t *chunkdims_; // Array of current configured chunk dimension sizes. 42 | hsize_t *maxdims_; // Array of maximum dimension sizes. The value -1 is HDF5 term for infinite. 43 | hsize_t *offset_; // Array of current offset in each dimension. The frame dimensions always have 44 | // 0 offset but additional dimensions may grow as new frames are added. 45 | hsize_t *virtualdims_; // The desired sizes of the extra (virtual) dimensions: {Y, X, n} 46 | hsize_t *virtualchunkdims_; // The chunk sizes of the extra (virtual) dimensions: {Y, X, n} 47 | Codec_t codec; // Definition of codec used to compress the data. 48 | }; 49 | 50 | 51 | #endif 52 | 53 | -------------------------------------------------------------------------------- /ADApp/pluginSrc/NDFileHDF5VersionCheck.h: -------------------------------------------------------------------------------- 1 | /* NDFileHDF5VersionCheck.h 2 | * 3 | * The purpose of this file is to implement the version check 4 | * macro that is missing in some older versions of the HDF5 5 | * library. The individual version numbers are still defined 6 | * but the actual macro for checking was introduced in the 7 | * later versions of the library. 8 | * 9 | * Alan Greer 10 | * February 18, 2016 11 | */ 12 | #ifndef NDFILEHDF5VERSIONCHECK_H_ 13 | #define NDFILEHDF5VERSIONCHECK_H_ 14 | 15 | #include 16 | 17 | #ifndef H5_VERSION_GE 18 | #define H5_VERSION_GE(Maj,Min,Rel) \ 19 | (((H5_VERS_MAJOR==Maj) && (H5_VERS_MINOR==Min) && (H5_VERS_RELEASE>=Rel)) || \ 20 | ((H5_VERS_MAJOR==Maj) && (H5_VERS_MINOR>Min)) || \ 21 | (H5_VERS_MAJOR>Maj)) 22 | #endif 23 | 24 | #endif // NDFILEHDF5VERSIONCHECK_H_ 25 | 26 | -------------------------------------------------------------------------------- /ADApp/pluginSrc/NDFileJPEG.dbd: -------------------------------------------------------------------------------- 1 | registrar("NDFileJPEGRegister") 2 | -------------------------------------------------------------------------------- /ADApp/pluginSrc/NDFileJPEG.h: -------------------------------------------------------------------------------- 1 | /* 2 | * NDFileJPEG.h 3 | * Writes NDArrays to JPEG files. 4 | * Mark Rivers 5 | * May 9, 2009 6 | */ 7 | 8 | #ifndef DRV_NDFileJPEG_H 9 | #define DRV_NDFileJPEG_H 10 | 11 | #include "NDPluginFile.h" 12 | 13 | #ifdef __cplusplus 14 | // Force C interface for jpeg functions 15 | extern "C" { 16 | #endif 17 | #include "jpeglib.h" 18 | #ifdef __cplusplus 19 | } 20 | #endif 21 | 22 | #define JPEG_BUF_SIZE 4096 /* choose an efficiently fwrite'able size */ 23 | 24 | /** Expanded data destination object for JPEG output */ 25 | typedef struct { 26 | struct jpeg_destination_mgr pub; /* public fields */ 27 | class NDFileJPEG *pNDFileJPEG; /* Pointer to ourselves */ 28 | } jpegDestMgr; 29 | 30 | #define NDFileJPEGQualityString "JPEG_QUALITY" /* (asynInt32, r/w) File quality */ 31 | 32 | /** Writes NDArrays in the JPEG file format, which is a lossy compression format. 33 | * This plugin was developed using the libjpeg library to write the file. 34 | */ 35 | class NDPLUGIN_API NDFileJPEG : public NDPluginFile { 36 | public: 37 | NDFileJPEG(const char *portName, int queueSize, int blockingCallbacks, 38 | const char *NDArrayPort, int NDArrayAddr, 39 | int priority, int stackSize); 40 | 41 | /* The methods that this class implements */ 42 | virtual asynStatus openFile(const char *fileName, NDFileOpenMode_t openMode, NDArray *pArray); 43 | virtual asynStatus readFile(NDArray **pArray); 44 | virtual asynStatus writeFile(NDArray *pArray); 45 | virtual asynStatus closeFile(); 46 | /* These should be private, but are called from C, must be public */ 47 | void initDestination(); 48 | boolean emptyOutputBuffer(); 49 | void termDestination(); 50 | 51 | protected: 52 | int NDFileJPEGQuality; 53 | #define FIRST_NDFILE_JPEG_PARAM NDFileJPEGQuality 54 | 55 | private: 56 | struct jpeg_compress_struct jpegInfo; 57 | struct jpeg_error_mgr jpegErr; 58 | NDColorMode_t colorMode; 59 | FILE *outFile; 60 | JOCTET jpegBuffer[JPEG_BUF_SIZE]; 61 | jpegDestMgr destMgr; 62 | }; 63 | 64 | #endif 65 | -------------------------------------------------------------------------------- /ADApp/pluginSrc/NDFileMagick.dbd: -------------------------------------------------------------------------------- 1 | registrar("NDFileMagickRegister") 2 | 3 | -------------------------------------------------------------------------------- /ADApp/pluginSrc/NDFileMagick.h: -------------------------------------------------------------------------------- 1 | /* 2 | * NDFileMagick.h 3 | * Writes NDArrays to any file format supported by ImageMagick 4 | * Mark Rivers 5 | * September 20, 2010 6 | */ 7 | 8 | #ifndef DRV_NDFileMagick_H 9 | #define DRV_NDFileMagick_H 10 | 11 | #include "NDPluginFile.h" 12 | #include "Magick++.h" 13 | using namespace Magick; 14 | using namespace std; 15 | 16 | #define NDFileMagickQualityString "MAGICK_QUALITY" /* (asynInt32, r/w) File quality */ 17 | #define NDFileMagickCompressTypeString "MAGICK_COMPRESS_TYPE" /* (asynInt32, r/w) Compression type */ 18 | #define NDFileMagickBitDepthString "MAGICK_BIT_DEPTH" /* (asynInt32, r/w) Bit depth */ 19 | 20 | /** Writes NDArrays to files using the GraphicsMagick library; can write many different file formats. 21 | */ 22 | class NDPLUGIN_API NDFileMagick : public NDPluginFile { 23 | public: 24 | NDFileMagick(const char *portName, int queueSize, int blockingCallbacks, 25 | const char *NDArrayPort, int NDArrayAddr, 26 | int priority, int stackSize); 27 | 28 | /* The methods that this class implements */ 29 | virtual asynStatus openFile(const char *fileName, NDFileOpenMode_t openMode, NDArray *pArray); 30 | virtual asynStatus readFile(NDArray **pArray); 31 | virtual asynStatus writeFile(NDArray *pArray); 32 | virtual asynStatus closeFile(); 33 | 34 | protected: 35 | int NDFileMagickQuality; 36 | #define FIRST_NDFILE_MAGICK_PARAM NDFileMagickQuality 37 | int NDFileMagickCompressType; 38 | int NDFileMagickBitDepth; 39 | 40 | private: 41 | size_t sizeX; 42 | size_t sizeY; 43 | StorageType storageType; 44 | NDColorMode_t colorMode; 45 | ImageType imageType; 46 | string colorMap; 47 | Image image; 48 | char fileName[MAX_FILENAME_LEN]; 49 | }; 50 | 51 | #endif 52 | -------------------------------------------------------------------------------- /ADApp/pluginSrc/NDFileNetCDF.dbd: -------------------------------------------------------------------------------- 1 | registrar("NDFileNetCDFRegister") 2 | -------------------------------------------------------------------------------- /ADApp/pluginSrc/NDFileNetCDF.h: -------------------------------------------------------------------------------- 1 | /* 2 | * NDFileNetCDF.h 3 | * Writes NDArrays to netCDF files. 4 | * Mark Rivers 5 | * April 17, 2008 6 | */ 7 | 8 | #ifndef DRV_NDFileNetCDF_H 9 | #define DRV_NDFileNetCDF_H 10 | 11 | #include "NDPluginFile.h" 12 | 13 | /** This version number is an attribute in the netCDF file to allow readers 14 | * to handle changes in the file contents 15 | * All files up through ADCore R3-8 were 3.0 16 | * R3-9 changed to 3.1. This was done because the datatype attribute in the file 17 | * which is enum NDDataType_t changed. NDInt64 and NDUInt64 were added after NDUInt32, 18 | * which changed the datatypes of NDFloat32 and NDFloat64 from 6-7 to 8-9.*/ 19 | #define NDNetCDFFileVersion 3.1 20 | 21 | /** Writes NDArrays to files in the netCDF file format. 22 | * netCDF is an open-source, portable, self-describing binary format supported by Unidata at UCAR 23 | * (http://www.unidata.ucar.edu/software/netcdf). 24 | * The netCDF format supports arrays of any dimension and all of the data types supported by NDArray. 25 | * It can store multiple NDArrays in a single file, so it sets NDPluginFile::supportsMultipleArrays to 1. 26 | * If also can store all of the attributes associated with an NDArray. 27 | * This class implements the 4 pure virtual functions from 28 | * NDPluginFile: openFile, readFile, writeFile and closeFile. */ 29 | class NDPLUGIN_API NDFileNetCDF : public NDPluginFile { 30 | public: 31 | NDFileNetCDF(const char *portName, int queueSize, int blockingCallbacks, 32 | const char *NDArrayPort, int NDArrayAddr, 33 | int priority, int stackSize); 34 | 35 | /* The methods that this class implements */ 36 | virtual asynStatus openFile(const char *fileName, NDFileOpenMode_t openMode, NDArray *pArray); 37 | virtual asynStatus readFile(NDArray **pArray); 38 | virtual asynStatus writeFile(NDArray *pArray); 39 | virtual asynStatus closeFile(); 40 | 41 | private: 42 | int ncId; 43 | int arrayDataId; 44 | int uniqueIdId; 45 | int timeStampId; 46 | int epicsTSSecId; 47 | int epicsTSNsecId; 48 | int nextRecord; 49 | int *pAttributeId; 50 | NDAttributeList *pFileAttributes; 51 | }; 52 | 53 | #endif 54 | -------------------------------------------------------------------------------- /ADApp/pluginSrc/NDFileNexus.dbd: -------------------------------------------------------------------------------- 1 | registrar("NDFileNexusRegister") 2 | 3 | -------------------------------------------------------------------------------- /ADApp/pluginSrc/NDFileNull.dbd: -------------------------------------------------------------------------------- 1 | registrar("NDFileNullRegister") 2 | -------------------------------------------------------------------------------- /ADApp/pluginSrc/NDFileNull.h: -------------------------------------------------------------------------------- 1 | /* 2 | * NDFileNull.h 3 | * Dummy file writer, whose main purpose is to allow deleting original driver files without re-writing them in 4 | * an actual file plugin. 5 | * 6 | * Mark Rivers 7 | * November 30, 2011 8 | */ 9 | 10 | #ifndef DRV_NDFileNULL_H 11 | #define DRV_NDFileNULL_H 12 | 13 | #include "NDPluginFile.h" 14 | 15 | /** Writes NDArrays in the Null file format. */ 16 | 17 | class NDPLUGIN_API NDFileNull : public NDPluginFile { 18 | public: 19 | NDFileNull(const char *portName, int queueSize, int blockingCallbacks, 20 | const char *NDArrayPort, int NDArrayAddr, 21 | int priority, int stackSize); 22 | 23 | /* The methods that this class implements */ 24 | virtual asynStatus openFile(const char *fileName, NDFileOpenMode_t openMode, NDArray *pArray); 25 | virtual asynStatus readFile(NDArray **pArray); 26 | virtual asynStatus writeFile(NDArray *pArray); 27 | virtual asynStatus closeFile(); 28 | }; 29 | 30 | #endif 31 | -------------------------------------------------------------------------------- /ADApp/pluginSrc/NDFileTIFF.dbd: -------------------------------------------------------------------------------- 1 | registrar("NDFileTIFFRegister") 2 | -------------------------------------------------------------------------------- /ADApp/pluginSrc/NDFileTIFF.h: -------------------------------------------------------------------------------- 1 | /* 2 | * NDFileTIFF.h 3 | * Writes NDArrays to TIFF files. 4 | * John Hammonds 5 | * April 17, 2009 6 | */ 7 | 8 | #ifndef DRV_NDFileTIFF_H 9 | #define DRV_NDFileTIFF_H 10 | 11 | #include "NDPluginFile.h" 12 | #include "tiffio.h" 13 | 14 | /* This version number is an attribute in the TIFF file to allow readers 15 | * to handle changes in the file contents */ 16 | #define NDTIFFFileVersion 1.0 17 | 18 | /** Writes NDArrays in the TIFF file format. 19 | Tagged Image File Format is a file format for storing images. The format was originally created by Aldus corporation and is 20 | currently developed by Adobe Systems Incorporated. This plugin was developed using the libtiff library to write the file. 21 | The current version is only capable of writing 2-D images with one image per file. 22 | */ 23 | 24 | class NDPLUGIN_API NDFileTIFF : public NDPluginFile { 25 | public: 26 | NDFileTIFF(const char *portName, int queueSize, int blockingCallbacks, 27 | const char *NDArrayPort, int NDArrayAddr, 28 | int priority, int stackSize); 29 | 30 | /* The methods that this class implements */ 31 | virtual asynStatus openFile(const char *fileName, NDFileOpenMode_t openMode, NDArray *pArray); 32 | virtual asynStatus readFile(NDArray **pArray); 33 | virtual asynStatus writeFile(NDArray *pArray); 34 | virtual asynStatus closeFile(); 35 | 36 | private: 37 | TIFF *tiff; 38 | NDColorMode_t colorMode; 39 | int *pAttributeId; 40 | NDAttributeList *pFileAttributes; 41 | int numAttributes_; 42 | 43 | }; 44 | 45 | #endif 46 | -------------------------------------------------------------------------------- /ADApp/pluginSrc/NDPluginAPI.h: -------------------------------------------------------------------------------- 1 | /* This is a generated file, do not edit! */ 2 | 3 | #ifndef INC_NDPluginAPI_H 4 | #define INC_NDPluginAPI_H 5 | 6 | #include 7 | 8 | #ifndef VERSION_INT 9 | //! Construct version number constant. 10 | # define VERSION_INT(V,R,M,P) ( ((V)<<24) | ((R)<<16) | ((M)<<8) | (P)) 11 | #endif 12 | 13 | #ifndef EPICS_VERSION_INT 14 | # define EPICS_VERSION_INT VERSION_INT(EPICS_VERSION, EPICS_REVISION, EPICS_MODIFICATION, EPICS_PATCH_LEVEL) 15 | #endif 16 | 17 | #if defined(_WIN32) && EPICS_VERSION_INT= 4 37 | # define NDPLUGIN_API __attribute__ ((visibility("default"))) 38 | #endif 39 | 40 | #if !defined(NDPLUGIN_API) 41 | # define NDPLUGIN_API 42 | #endif 43 | 44 | #if !defined(epicsStdCall) 45 | # define epicsStdCall 46 | #endif 47 | 48 | #endif /* INC_NDPluginAPI_H */ 49 | 50 | -------------------------------------------------------------------------------- /ADApp/pluginSrc/NDPluginAttrPlot.dbd: -------------------------------------------------------------------------------- 1 | registrar(NDAttrPlotRegister) 2 | -------------------------------------------------------------------------------- /ADApp/pluginSrc/NDPluginAttribute.dbd: -------------------------------------------------------------------------------- 1 | registrar("NDAttrRegister") 2 | 3 | -------------------------------------------------------------------------------- /ADApp/pluginSrc/NDPluginAttribute.h: -------------------------------------------------------------------------------- 1 | 2 | #ifndef NDPluginAttribute_H 3 | #define NDPluginAttribute_H 4 | 5 | #include 6 | 7 | #include "NDPluginDriver.h" 8 | 9 | /* General parameters */ 10 | #define NDPluginAttributeAttrNameString "ATTR_ATTRNAME" /* (asynInt32, r/w) Name of Attribute */ 11 | #define NDPluginAttributeResetString "ATTR_RESET" /* (asynInt32, r/w) Clear the sum data */ 12 | #define NDPluginAttributeValString "ATTR_VAL" /* (asynFloat64, r/o) Value of Attribute */ 13 | #define NDPluginAttributeValSumString "ATTR_VAL_SUM" /* (asynFloat64, r/o) Integrated Value of Attribute */ 14 | 15 | /** Extract an Attribute from an NDArray and publish the value (and array of values) over channel access. */ 16 | class NDPLUGIN_API NDPluginAttribute : public NDPluginDriver { 17 | public: 18 | NDPluginAttribute(const char *portName, int queueSize, int blockingCallbacks, 19 | const char *NDArrayPort, int NDArrayAddr, int maxAttributes, 20 | int maxBuffers, size_t maxMemory, 21 | int priority, int stackSize); 22 | /* These methods override the virtual methods in the base class */ 23 | void processCallbacks(NDArray *pArray); 24 | asynStatus writeInt32(asynUser *pasynUser, epicsInt32 value); 25 | 26 | protected: 27 | int NDPluginAttributeAttrName; 28 | #define FIRST_NDPLUGIN_ATTR_PARAM NDPluginAttributeAttrName 29 | int NDPluginAttributeReset; 30 | int NDPluginAttributeVal; 31 | int NDPluginAttributeValSum; 32 | 33 | private: 34 | 35 | void doTimeSeriesCallbacks(NDArray *pArray); 36 | static const epicsInt32 MAX_ATTR_NAME_; 37 | static const char* UNIQUE_ID_NAME_; 38 | static const char* TIMESTAMP_NAME_; 39 | static const char* EPICS_TS_SEC_NAME_; 40 | static const char* EPICS_TS_NSEC_NAME_; 41 | 42 | int maxAttributes_; 43 | 44 | }; 45 | 46 | #endif 47 | -------------------------------------------------------------------------------- /ADApp/pluginSrc/NDPluginBadPixel.dbd: -------------------------------------------------------------------------------- 1 | registrar("NDBadPixelRegister") 2 | 3 | -------------------------------------------------------------------------------- /ADApp/pluginSrc/NDPluginCircularBuff.dbd: -------------------------------------------------------------------------------- 1 | registrar(NDCircularBuffRegister) 2 | -------------------------------------------------------------------------------- /ADApp/pluginSrc/NDPluginCodec.dbd: -------------------------------------------------------------------------------- 1 | registrar("NDCodecRegister") 2 | 3 | 4 | -------------------------------------------------------------------------------- /ADApp/pluginSrc/NDPluginColorConvert.dbd: -------------------------------------------------------------------------------- 1 | registrar("NDColorConvertRegister") 2 | 3 | 4 | -------------------------------------------------------------------------------- /ADApp/pluginSrc/NDPluginColorConvert.h: -------------------------------------------------------------------------------- 1 | #ifndef NDPluginColorConvert_H 2 | #define NDPluginColorConvert_H 3 | 4 | #include 5 | 6 | #include "NDPluginDriver.h" 7 | 8 | #define NDPluginColorConvertColorModeOutString "COLOR_MODE_OUT" /* (NDColorMode_t r/w) Output color mode */ 9 | #define NDPluginColorConvertFalseColorString "FALSE_COLOR" /* (NDColorMode_t r/w) Output color mode */ 10 | 11 | /** Convert NDArrays from one NDColorMode to another. 12 | * This plugin is as source of NDArray callbacks, passing the (possibly converted) NDArray 13 | * data to clients that register for callbacks. 14 | * The plugin currently supports the following conversions 15 | *
    16 | *
  • Mono to RGB1, RGB2 or RGB3
  • 17 | *
  • RGB1, RGB2 or RGB3 to mono
  • 18 | *
  • Bayer color to RGB1, RGB2 or RGB3 (Windows and Linux only)
  • 19 | *
  • RGB1 to RGB2 or RGB3
  • 20 | *
  • RGB2 to RGB1 or RGB3
  • 21 | *
  • RGB3 to RGB1 or RGB2
  • 22 | *
23 | * It also applies a false color map if requested for 8 bit data 24 | * If the conversion required by the input color mode and output color mode are not 25 | * in this supported list then the NDArray is passed on without conversion. */ 26 | class NDPLUGIN_API NDPluginColorConvert : public NDPluginDriver { 27 | public: 28 | NDPluginColorConvert(const char *portName, int queueSize, int blockingCallbacks, 29 | const char *NDArrayPort, int NDArrayAddr, 30 | int maxBuffers, size_t maxMemory, 31 | int priority, int stackSize, int maxThreads); 32 | 33 | /* These methods override the virtual methods in the base class */ 34 | void processCallbacks(NDArray *pArray); 35 | 36 | protected: 37 | int NDPluginColorConvertColorModeOut; 38 | #define FIRST_NDPLUGIN_COLOR_CONVERT_PARAM NDPluginColorConvertColorModeOut 39 | int NDPluginColorConvertFalseColor; 40 | 41 | private: 42 | /* These methods are just for this class */ 43 | template void convertColor(NDArray *pArray); 44 | }; 45 | 46 | #endif 47 | -------------------------------------------------------------------------------- /ADApp/pluginSrc/NDPluginFFT.dbd: -------------------------------------------------------------------------------- 1 | registrar("NDFFTRegister") 2 | 3 | -------------------------------------------------------------------------------- /ADApp/pluginSrc/NDPluginGather.dbd: -------------------------------------------------------------------------------- 1 | registrar("NDGatherRegister") 2 | 3 | -------------------------------------------------------------------------------- /ADApp/pluginSrc/NDPluginGather.h: -------------------------------------------------------------------------------- 1 | #ifndef NDPluginGather_H 2 | #define NDPluginGather_H 3 | 4 | #include 5 | 6 | #include "NDPluginDriver.h" 7 | 8 | typedef struct { 9 | void *asynGenericPointerInterruptPvt; /**< InterruptPvt for connecting to NDArray driver interupts */ 10 | asynUser *pasynUserGenericPointer; /**< asynUser for connecting to NDArray driver */ 11 | void *asynGenericPointerPvt; /**< Handle for connecting to NDArray driver */ 12 | asynGenericPointer *pasynGenericPointer; /**< asyn interface for connecting to NDArray driver */ 13 | bool connectedToArrayPort; 14 | } NDGatherNDArraySource_t; 15 | 16 | /** A plugin that subscribes to callbacks from multiple ports, not just a single port */ 17 | class NDPLUGIN_API NDPluginGather : public NDPluginDriver { 18 | public: 19 | NDPluginGather(const char *portName, int queueSize, int blockingCallbacks, 20 | int maxPorts, 21 | int maxBuffers, size_t maxMemory, 22 | int priority, int stackSize); 23 | 24 | protected: 25 | /* These methods override the virtual methods in the base class */ 26 | virtual void processCallbacks(NDArray *pArray); 27 | virtual asynStatus connectToArrayPort(void); 28 | virtual asynStatus setArrayInterrupt(int connect); 29 | 30 | 31 | private: 32 | int maxPorts_; 33 | NDGatherNDArraySource_t *NDArraySrc_; 34 | }; 35 | 36 | #endif 37 | -------------------------------------------------------------------------------- /ADApp/pluginSrc/NDPluginOverlay.dbd: -------------------------------------------------------------------------------- 1 | registrar("NDOverlayRegister") 2 | 3 | -------------------------------------------------------------------------------- /ADApp/pluginSrc/NDPluginProcess.dbd: -------------------------------------------------------------------------------- 1 | registrar("NDProcessRegister") 2 | 3 | -------------------------------------------------------------------------------- /ADApp/pluginSrc/NDPluginPva.dbd: -------------------------------------------------------------------------------- 1 | registrar("NDPvaRegister") 2 | -------------------------------------------------------------------------------- /ADApp/pluginSrc/NDPluginPva.h: -------------------------------------------------------------------------------- 1 | #ifndef NDPluginPva_H 2 | #define NDPluginPva_H 3 | 4 | #include "NDPluginDriver.h" 5 | 6 | #include 7 | #include 8 | #include 9 | #include 10 | 11 | #define NDPluginPvaPvNameString "PV_NAME" 12 | 13 | class NTNDArrayRecord; 14 | typedef std::tr1::shared_ptr NTNDArrayRecordPtr; 15 | 16 | /** Converts NDArray callback data into EPICS V4 NTNDArray data and exposes it 17 | * as an EPICS V4 PV */ 18 | class NDPLUGIN_API NDPluginPva : public NDPluginDriver, 19 | public std::tr1::enable_shared_from_this 20 | { 21 | public: 22 | POINTER_DEFINITIONS(NDPluginPva); 23 | NDPluginPva(const char *portName, int queueSize, int blockingCallbacks, 24 | const char *NDArrayPort, int NDArrayAddr, const char *pvName, 25 | int maxBuffers, size_t maxMemory, int priority, int stackSize); 26 | 27 | /* These methods override the virtual methods in the base class */ 28 | void processCallbacks(NDArray *pArray); 29 | 30 | protected: 31 | int NDPluginPvaPvName; 32 | 33 | private: 34 | NTNDArrayRecordPtr m_record; 35 | }; 36 | 37 | #endif 38 | -------------------------------------------------------------------------------- /ADApp/pluginSrc/NDPluginROI.dbd: -------------------------------------------------------------------------------- 1 | registrar("NDROIRegister") 2 | 3 | -------------------------------------------------------------------------------- /ADApp/pluginSrc/NDPluginROIStat.dbd: -------------------------------------------------------------------------------- 1 | registrar("NDROIStatRegister") 2 | 3 | -------------------------------------------------------------------------------- /ADApp/pluginSrc/NDPluginScatter.dbd: -------------------------------------------------------------------------------- 1 | registrar("NDScatterRegister") 2 | 3 | -------------------------------------------------------------------------------- /ADApp/pluginSrc/NDPluginScatter.h: -------------------------------------------------------------------------------- 1 | #ifndef NDPluginScatter_H 2 | #define NDPluginScatter_H 3 | 4 | #include "NDPluginDriver.h" 5 | 6 | /* General parameters */ 7 | #define NDPluginScatterMethodString "SCATTER_METHOD" /* (asynInt32, r/w) Algorithm for scatter */ 8 | 9 | /** A plugin that does callbacks in round-robin fashion rather than passing every NDArray to every callback client */ 10 | class NDPLUGIN_API NDPluginScatter : public NDPluginDriver { 11 | public: 12 | NDPluginScatter(const char *portName, int queueSize, int blockingCallbacks, 13 | const char *NDArrayPort, int NDArrayAddr, 14 | int maxBuffers, size_t maxMemory, 15 | int priority, int stackSize); 16 | /* These methods override the virtual methods in the base class */ 17 | void processCallbacks(NDArray *pArray); 18 | 19 | protected: 20 | int NDPluginScatterMethod; 21 | #define FIRST_NDPLUGIN_SCATTER_PARAM NDPluginScatterMethod 22 | 23 | private: 24 | int nextClient_; 25 | asynStatus doNDArrayCallbacks(NDArray *pArray, int reason, int addr); 26 | }; 27 | 28 | #endif 29 | -------------------------------------------------------------------------------- /ADApp/pluginSrc/NDPluginStats.dbd: -------------------------------------------------------------------------------- 1 | registrar("NDStatsRegister") 2 | 3 | -------------------------------------------------------------------------------- /ADApp/pluginSrc/NDPluginStdArrays.dbd: -------------------------------------------------------------------------------- 1 | registrar("NDStdArraysRegister") 2 | -------------------------------------------------------------------------------- /ADApp/pluginSrc/NDPluginTimeSeries.dbd: -------------------------------------------------------------------------------- 1 | registrar("NDTimeSeriesRegister") 2 | 3 | -------------------------------------------------------------------------------- /ADApp/pluginSrc/NDPluginTransform.dbd: -------------------------------------------------------------------------------- 1 | registrar("NDTransformRegister") 2 | 3 | -------------------------------------------------------------------------------- /ADApp/pluginSrc/NDPluginTransform.h: -------------------------------------------------------------------------------- 1 | #ifndef NDPluginTransform_H 2 | #define NDPluginTransform_H 3 | 4 | #include "NDPluginDriver.h" 5 | 6 | /** Map parameter enums to strings that will be used to set up EPICS databases 7 | */ 8 | #define NDPluginTransformTypeString "TRANSFORM_TYPE" 9 | 10 | static const char* pluginName = "NDPluginTransform"; 11 | 12 | /** Perform transformations (rotations, flips) on NDArrays. */ 13 | class NDPLUGIN_API NDPluginTransform : public NDPluginDriver { 14 | public: 15 | NDPluginTransform(const char *portName, int queueSize, int blockingCallbacks, 16 | const char *NDArrayPort, int NDArrayAddr, 17 | int maxBuffers, size_t maxMemory, 18 | int priority, int stackSize, int maxThreads=1); 19 | /* These methods override the virtual methods in the base class */ 20 | void processCallbacks(NDArray *pArray); 21 | 22 | protected: 23 | int NDPluginTransformType_; 24 | #define FIRST_TRANSFORM_PARAM NDPluginTransformType_ 25 | 26 | private: 27 | size_t userDims_[ND_ARRAY_MAX_DIMS]; 28 | void transformImage(NDArray *inArray, NDArray *outArray, NDArrayInfo_t *arrayInfo); 29 | }; 30 | 31 | #endif 32 | -------------------------------------------------------------------------------- /ADApp/pluginSrc/NDPosPlugin.dbd: -------------------------------------------------------------------------------- 1 | registrar("NDPosPluginRegister") 2 | -------------------------------------------------------------------------------- /ADApp/pluginSrc/NDPosPluginFileReader.h: -------------------------------------------------------------------------------- 1 | /* 2 | * NDPosPluginFileReader.h 3 | * 4 | * Created on: 21 May 2015 5 | * Author: gnx91527 6 | */ 7 | 8 | #ifndef POSPLUGINAPP_SRC_NDPOSPLUGINFILEREADER_H_ 9 | #define POSPLUGINAPP_SRC_NDPOSPLUGINFILEREADER_H_ 10 | 11 | #include "asynDriver.h" 12 | #include 13 | #include 14 | #include 15 | #include 16 | 17 | class NDPosPluginFileReader 18 | { 19 | public: 20 | static const std::string ELEMENT_NAME; 21 | static const std::string ELEMENT_DIMENSIONS; 22 | static const std::string ELEMENT_DIMENSION; 23 | static const std::string ELEMENT_POSITIONS; 24 | static const std::string ELEMENT_POSITION; 25 | 26 | static const std::string DIMENSION_NAME; 27 | 28 | NDPosPluginFileReader(); 29 | virtual ~NDPosPluginFileReader(); 30 | asynStatus validateXML(const std::string& filename); 31 | asynStatus loadXML(const std::string& filename); 32 | std::vector readDimensions(); 33 | std::vector > readPositions(); 34 | asynStatus clearPositions(); 35 | asynStatus processNode(); 36 | asynStatus addDimension(); 37 | asynStatus addPosition(); 38 | std::string getErrorMsg(); 39 | 40 | protected: 41 | void setErrorMsg(const std::string& msg); 42 | 43 | private: 44 | xmlTextReaderPtr xmlreader; 45 | std::vector dimensions; 46 | std::vector > positions; 47 | std::string errorMessage; 48 | }; 49 | 50 | #endif /* POSPLUGINAPP_SRC_NDPOSPLUGINFILEREADER_H_ */ 51 | -------------------------------------------------------------------------------- /ADApp/pluginSrc/fft.h: -------------------------------------------------------------------------------- 1 | /* fft.h 2 | * Mark Rivers 3 | * February 27, 2016 4 | */ 5 | 6 | #ifndef FFT_H 7 | #define FFT_H 8 | 9 | #ifdef __cplusplus 10 | extern "C" { 11 | #endif 12 | 13 | void fft_1D(double data[], unsigned long nn, int isign); 14 | void fft_ND(double data[], unsigned long nn[], int ndim, int isign); 15 | 16 | #ifdef __cplusplus 17 | } 18 | #endif 19 | 20 | #endif /* FFT_H */ 21 | -------------------------------------------------------------------------------- /ADApp/pluginSrc/test_forward_reference.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | void test_forward_reference() 4 | { 5 | // Creating the object as an automatic variable causes a compilation error on Linux but compiles fine on Windows 6 | NDPluginStats stats = NDPluginStats("STATS1", 20, 0, "SIM1", 0, 0, 0, 0, 0, 1); 7 | 8 | // Creating the object as a heap variable works fine on Linux and on Windows 9 | NDPluginStats *pStats = new NDPluginStats("STATS1", 20, 0, "SIM1", 0, 0, 0, 0, 0, 1); 10 | } 11 | -------------------------------------------------------------------------------- /ADApp/pluginSrc/throttler.cpp: -------------------------------------------------------------------------------- 1 | #include "throttler.h" 2 | 3 | #include 4 | 5 | Throttler::Throttler(double limit) 6 | { 7 | reset(limit); 8 | } 9 | 10 | void Throttler::reset(double limit) 11 | { 12 | available_ = limit_ = limit; 13 | refillAmount_ = limit / 1000.0; 14 | epicsTimeGetCurrent(&lastRefill_); 15 | } 16 | 17 | double Throttler::refill() 18 | { 19 | epicsTimeStamp now; 20 | epicsTimeGetCurrent(&now); 21 | 22 | int refillCount = (int)epicsTimeDiffInSeconds(&now, &lastRefill_)*1000; 23 | 24 | if (refillCount) { 25 | available_ = std::min(limit_, available_ + refillCount*refillAmount_); 26 | lastRefill_ = now; 27 | } 28 | 29 | return available_; 30 | } 31 | 32 | bool Throttler::tryTake(double tokens) 33 | { 34 | if (tokens > refill()) 35 | return false; 36 | 37 | available_ -= tokens; 38 | return true; 39 | } 40 | -------------------------------------------------------------------------------- /ADApp/pluginSrc/throttler.h: -------------------------------------------------------------------------------- 1 | #ifndef THROTTLER_H 2 | #define THROTTLER_H 3 | 4 | #include 5 | 6 | class Throttler { 7 | 8 | public: 9 | Throttler(double limit=0.0); 10 | void reset(double limit); 11 | double refill(); 12 | bool tryTake(double tokens); 13 | 14 | private: 15 | double limit_; // Max tokens per second 16 | double available_; // Available tokens 17 | double refillAmount_; // How much to refill every msec 18 | epicsTimeStamp lastRefill_; // When did the last refill happen 19 | }; 20 | 21 | #endif 22 | -------------------------------------------------------------------------------- /ADApp/pluginSrc/tiff_test.pro: -------------------------------------------------------------------------------- 1 | ; This program uses the simDetector and NDFileTIFF plugin to create TIFF files with each of the supported 2 | ; areaDetector data types. 3 | 4 | ; It then reads those files into IDL and displays information on the array 5 | 6 | cd, '/home/epics/scratch' 7 | cam = '13SIM1:cam1:' 8 | file = '13SIM1:TIFF1:' 9 | data_types = ['Int8', $ 10 | 'UInt8', $ 11 | 'Int16', $ 12 | 'UInt16', $ 13 | 'Int32', $ 14 | 'UInt32', $ 15 | 'Float32', $ 16 | 'Float64'] 17 | 18 | for i=0, 7 do begin 19 | t = caput(cam+'DataType', data_types[i]) 20 | t = caput(file+'FileName', [byte(data_types[i]),0]) 21 | t = caput(cam+'Acquire', 1) 22 | wait, 1 23 | data = read_tiff(data_types[i]+'_1.tiff') 24 | help, data 25 | endfor 26 | end 27 | -------------------------------------------------------------------------------- /ADApp/pluginTests/AsynException.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * AsynException.cpp 3 | * 4 | * Created on: 24 Jun 2015 5 | * Author: gnx91527 6 | */ 7 | 8 | #include "AsynException.h" 9 | 10 | AsynException::AsynException() 11 | { 12 | } 13 | 14 | AsynException::~AsynException() throw () 15 | { 16 | } 17 | 18 | -------------------------------------------------------------------------------- /ADApp/pluginTests/AsynException.h: -------------------------------------------------------------------------------- 1 | /* 2 | * AsynException.h 3 | * 4 | * Created on: 24 Jun 2015 5 | * Author: gnx91527 6 | */ 7 | 8 | #ifndef ADAPP_PLUGINTESTS_ASYNEXCEPTION_H_ 9 | #define ADAPP_PLUGINTESTS_ASYNEXCEPTION_H_ 10 | 11 | #include 12 | #include 13 | 14 | class AsynException 15 | { 16 | public: 17 | AsynException(); 18 | virtual ~AsynException() throw (); 19 | }; 20 | 21 | #endif /* ADAPP_PLUGINTESTS_ASYNEXCEPTION_H_ */ 22 | -------------------------------------------------------------------------------- /ADApp/pluginTests/AttrPlotPluginWrapper.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * AttrPlotPluginWrapper.cpp 3 | * 4 | * Created on: 28 Feb 2017 5 | * Author: Blaz Kranjc 6 | */ 7 | 8 | #include "AttrPlotPluginWrapper.h" 9 | 10 | AttrPlotPluginWrapper::AttrPlotPluginWrapper(const std::string& port, 11 | int max_attributes, int cache_size, int max_selected, 12 | const std::string& in_port, int in_addr) 13 | : NDPluginAttrPlot(port.c_str(), max_attributes, cache_size, max_selected, 14 | in_port.c_str(), in_addr, 1000, 0, 0, 0), 15 | AsynPortClientContainer(port) 16 | { 17 | } 18 | 19 | AttrPlotPluginWrapper::~AttrPlotPluginWrapper () 20 | { 21 | cleanup(); 22 | } 23 | 24 | -------------------------------------------------------------------------------- /ADApp/pluginTests/AttrPlotPluginWrapper.h: -------------------------------------------------------------------------------- 1 | /* 2 | * AttrPlotPluginWrapper.cpp 3 | * 4 | * Created on: 28 Feb 2017 5 | * Author: Blaz Kranjc 6 | */ 7 | 8 | #ifndef ADAPP_PLUGINTESTS_ATTRPLOTPLUGINWRAPPER_H_ 9 | #define ADAPP_PLUGINTESTS_ATTRPLOTPLUGINWRAPPER_H_ 10 | 11 | #include 12 | #include "AsynPortClientContainer.h" 13 | 14 | class AttrPlotPluginWrapper : public NDPluginAttrPlot, public AsynPortClientContainer 15 | { 16 | public: 17 | AttrPlotPluginWrapper(const std::string& port, 18 | int max_attributes, int cache_size, int max_selected, 19 | const std::string& in_port, int in_addr); 20 | virtual ~AttrPlotPluginWrapper(); 21 | }; 22 | 23 | #endif /* ADAPP_PLUGINTESTS_ATTRPLOTPLUGINWRAPPER_H_ */ 24 | -------------------------------------------------------------------------------- /ADApp/pluginTests/FFTPluginWrapper.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * TimeSeriesPluginWrapper.cpp 3 | * 4 | * Created on: 21 Mar 2016 5 | * Author: Ulrik Pedersen 6 | */ 7 | 8 | #include "FFTPluginWrapper.h" 9 | 10 | FFTPluginWrapper::FFTPluginWrapper(const std::string& port, const std::string& detectorPort) 11 | : NDPluginFFT(port.c_str(), 50, 0, detectorPort.c_str(), 0, 0, 0, 0, 0, 1), 12 | AsynPortClientContainer(port) 13 | { 14 | } 15 | 16 | FFTPluginWrapper::FFTPluginWrapper(const std::string& port, 17 | int queueSize, 18 | int blocking, 19 | const std::string& detectorPort, 20 | int address, 21 | size_t maxMemory, 22 | int priority, 23 | int stackSize, 24 | int maxThreads) 25 | : NDPluginFFT(port.c_str(), queueSize, blocking, 26 | detectorPort.c_str(), address, 27 | 0, maxMemory, priority, stackSize, maxThreads), 28 | AsynPortClientContainer(port) 29 | { 30 | } 31 | 32 | FFTPluginWrapper::~FFTPluginWrapper () 33 | { 34 | cleanup(); 35 | } 36 | 37 | -------------------------------------------------------------------------------- /ADApp/pluginTests/FFTPluginWrapper.h: -------------------------------------------------------------------------------- 1 | /* 2 | * TimeSeriesPluginWrapper.cpp 3 | * 4 | * Created on: 21 Mar 2016 5 | * Author: Ulrik Pedersen 6 | */ 7 | 8 | #ifndef ADAPP_PLUGINTESTS_FFTPLUGINWRAPPER_H_ 9 | #define ADAPP_PLUGINTESTS_FFTPLUGINWRAPPER_H_ 10 | 11 | #include 12 | #include "AsynPortClientContainer.h" 13 | 14 | class FFTPluginWrapper : public NDPluginFFT, public AsynPortClientContainer 15 | { 16 | public: 17 | FFTPluginWrapper(const std::string& port, const std::string& detectorPort); 18 | FFTPluginWrapper(const std::string& port, 19 | int queueSize, 20 | int blocking, 21 | const std::string& detectorPort, 22 | int address, 23 | size_t maxMemory, 24 | int priority, 25 | int stackSize, 26 | int maxThreads); 27 | virtual ~FFTPluginWrapper (); 28 | }; 29 | 30 | #endif /* ADAPP_PLUGINTESTS_FFTPLUGINWRAPPER_H_ */ 31 | -------------------------------------------------------------------------------- /ADApp/pluginTests/HDF5FileReader.h: -------------------------------------------------------------------------------- 1 | /* 2 | * HDF5FileReader.h 3 | * 4 | * Created on: 11 Mar 2015 5 | * Author: gnx91527 6 | */ 7 | 8 | #ifndef PLUGINTESTS_HDF5FileReader_H_ 9 | #define PLUGINTESTS_HDF5FileReader_H_ 10 | 11 | #include 12 | #include 13 | #include 14 | #include 15 | #include 16 | 17 | typedef enum 18 | { 19 | NoType, 20 | Int8, // Signed 8-bit integer 21 | UInt8, // Unsigned 8-bit integer 22 | Int16, // Signed 16-bit integer 23 | UInt16, // Unsigned 16-bit integer 24 | Int32, // Signed 32-bit integer 25 | UInt32, // Unsigned 32-bit integer 26 | Float32, // 32-bit float 27 | Float64, // 64-bit float 28 | String // String 29 | } TestFileDataType_t; 30 | 31 | class HDF5FileReader 32 | { 33 | public: 34 | HDF5FileReader(const std::string& filename); 35 | void report(); 36 | void processGroup(hid_t loc_id, const char *name, H5O_type_t type); 37 | void processAttribute(hid_t loc_id, const char *name); 38 | bool checkGroupExists(const std::string& name); 39 | bool checkDatasetExists(const std::string& name); 40 | std::vector getDatasetDimensions(const std::string& name); 41 | int getDatasetAttributeCount(const std::string& name); 42 | TestFileDataType_t getDatasetType(const std::string& name); 43 | virtual ~HDF5FileReader(); 44 | private: 45 | hid_t file; 46 | int attributeCount; 47 | 48 | class HDF5Object 49 | { 50 | public: 51 | HDF5Object(const std::string& name, H5O_type_t type) 52 | { 53 | this->name = name; 54 | this->type = type; 55 | }; 56 | 57 | std::string getTypeString() 58 | { 59 | std::string response; 60 | switch (this->type) 61 | { 62 | case H5O_TYPE_GROUP: 63 | response = "group"; 64 | break; 65 | case H5O_TYPE_DATASET: 66 | response = "dataset"; 67 | break; 68 | case H5O_TYPE_NAMED_DATATYPE: 69 | response = "datatype"; 70 | break; 71 | default: 72 | response = "unknown"; 73 | } 74 | return response; 75 | }; 76 | 77 | virtual ~HDF5Object(){}; 78 | 79 | private: 80 | std::string name; 81 | H5O_type_t type; 82 | }; 83 | 84 | std::string cname; 85 | std::map > objects; 86 | 87 | }; 88 | 89 | #endif /* PLUGINTESTS_HDF5FileReader_H_ */ 90 | -------------------------------------------------------------------------------- /ADApp/pluginTests/HDF5PluginWrapper.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * HDF5TestWrapper.cpp 3 | * 4 | * Created on: 10 Mar 2015 5 | * Author: gnx91527 6 | */ 7 | 8 | #include "HDF5PluginWrapper.h" 9 | 10 | HDF5PluginWrapper::HDF5PluginWrapper(const std::string& port, const std::string& detectorPort) 11 | : NDFileHDF5(port.c_str(), 50, 0, detectorPort.c_str(), 0, 0, 0), 12 | AsynPortClientContainer(port) 13 | { 14 | } 15 | 16 | HDF5PluginWrapper::HDF5PluginWrapper(const std::string& port, 17 | int queueSize, 18 | int blocking, 19 | const std::string& detectorPort, 20 | int address, 21 | int priority, 22 | int stackSize) 23 | : NDFileHDF5(port.c_str(), queueSize, blocking, detectorPort.c_str(), address, priority, stackSize), 24 | AsynPortClientContainer(port) 25 | { 26 | } 27 | 28 | asynStatus HDF5PluginWrapper::testConfigureDims(NDArray *pArray) 29 | { 30 | return this->configureDims(pArray); 31 | } 32 | 33 | void HDF5PluginWrapper::testCalcNumFrames() 34 | { 35 | this->calcNumFrames(); 36 | } 37 | 38 | void HDF5PluginWrapper::testSetMultiFrameFile(bool multi) 39 | { 40 | this->setMultiFrameFile(multi); 41 | } 42 | 43 | HDF5PluginWrapper::~HDF5PluginWrapper() 44 | { 45 | cleanup(); 46 | } 47 | 48 | -------------------------------------------------------------------------------- /ADApp/pluginTests/HDF5PluginWrapper.h: -------------------------------------------------------------------------------- 1 | /* 2 | * HDF5TestWrapper.h 3 | * 4 | * Created on: 10 Mar 2015 5 | * Author: gnx91527 6 | */ 7 | 8 | #ifndef IOCS_SIMDETECTORNOIOC_SIMDETECTORNOIOCAPP_SRC_HDF5TESTWRAPPER_H_ 9 | #define IOCS_SIMDETECTORNOIOC_SIMDETECTORNOIOCAPP_SRC_HDF5TESTWRAPPER_H_ 10 | 11 | #include 12 | #include "AsynPortClientContainer.h" 13 | 14 | class HDF5PluginWrapper : public NDFileHDF5, public AsynPortClientContainer 15 | { 16 | public: 17 | HDF5PluginWrapper(const std::string& port, const std::string& detectorPort); 18 | HDF5PluginWrapper(const std::string& port, 19 | int queueSize, 20 | int blocking, 21 | const std::string& detectorPort, 22 | int address, 23 | int priority, 24 | int stackSize); 25 | asynStatus testConfigureDims(NDArray *pArray); 26 | void testCalcNumFrames(); 27 | void testSetMultiFrameFile(bool multi); 28 | 29 | virtual ~HDF5PluginWrapper(); 30 | 31 | }; 32 | 33 | #endif /* IOCS_SIMDETECTORNOIOC_SIMDETECTORNOIOCAPP_SRC_HDF5TESTWRAPPER_H_ */ 34 | -------------------------------------------------------------------------------- /ADApp/pluginTests/OverlayPluginWrapper.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * OverlayPluginWrapper.cpp 3 | * 4 | * Created on: 26 Nov 2016 5 | * Author: Mark Rivers 6 | */ 7 | 8 | #include "OverlayPluginWrapper.h" 9 | 10 | OverlayPluginWrapper::OverlayPluginWrapper(const std::string& port, const std::string& detectorPort, int maxOverlays) 11 | : NDPluginOverlay(port.c_str(), 50, 0, detectorPort.c_str(), 0, maxOverlays, 0, 0, 0, 0, 1), 12 | AsynPortClientContainer(port) 13 | { 14 | } 15 | 16 | OverlayPluginWrapper::OverlayPluginWrapper(const std::string& port, 17 | int queueSize, 18 | int blocking, 19 | const std::string& detectorPort, 20 | int address, 21 | int maxOverlays, 22 | size_t maxMemory, 23 | int priority, 24 | int stackSize, 25 | int maxThreads) 26 | : NDPluginOverlay(port.c_str(), queueSize, blocking, 27 | detectorPort.c_str(), address, maxOverlays, 28 | 0, maxMemory, priority, stackSize, maxThreads), 29 | AsynPortClientContainer(port) 30 | { 31 | } 32 | 33 | OverlayPluginWrapper::~OverlayPluginWrapper () 34 | { 35 | cleanup(); 36 | } 37 | 38 | -------------------------------------------------------------------------------- /ADApp/pluginTests/OverlayPluginWrapper.h: -------------------------------------------------------------------------------- 1 | /* 2 | * OverlayPluginWrapper.h 3 | * 4 | * Created on: 26 Nov 2016 5 | * Author: Mark Rivers 6 | */ 7 | 8 | #ifndef ADAPP_PLUGINTESTS_OVERLAYPLUGINWRAPPER_H_ 9 | #define ADAPP_PLUGINTESTS_OVERLAYPLUGINWRAPPER_H_ 10 | 11 | #include 12 | #include "AsynPortClientContainer.h" 13 | 14 | class OverlayPluginWrapper : public NDPluginOverlay, public AsynPortClientContainer 15 | { 16 | public: 17 | OverlayPluginWrapper(const std::string& port, const std::string& detectorPort, int maxOverlays); 18 | OverlayPluginWrapper(const std::string& port, 19 | int queueSize, 20 | int blocking, 21 | const std::string& detectorPort, 22 | int address, 23 | int maxOverlays, 24 | size_t maxMemory, 25 | int priority, 26 | int stackSize, 27 | int maxThreads); 28 | virtual ~OverlayPluginWrapper (); 29 | }; 30 | 31 | #endif /* ADAPP_PLUGINTESTS_OVERLAYPLUGINWRAPPER_H_ */ 32 | -------------------------------------------------------------------------------- /ADApp/pluginTests/PosPluginWrapper.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * PosPluginWrapper.cpp 3 | * 4 | * Created on: 24 Jun 2015 5 | * Author: gnx91527 6 | */ 7 | 8 | #include "PosPluginWrapper.h" 9 | 10 | PosPluginWrapper::PosPluginWrapper(const std::string& port, const std::string& detectorPort) 11 | : NDPosPlugin(port.c_str(), 50, 0, detectorPort.c_str(), 0, -1, -1, 0, 0), 12 | AsynPortClientContainer(port) 13 | { 14 | } 15 | 16 | PosPluginWrapper::PosPluginWrapper(const std::string& port, 17 | int queueSize, 18 | int blocking, 19 | const std::string& detectorPort, 20 | int address, 21 | int maxBuffers, 22 | size_t maxMemory, 23 | int priority, 24 | int stackSize) 25 | : NDPosPlugin(port.c_str(), queueSize, blocking, detectorPort.c_str(), address, maxBuffers, maxMemory, priority, stackSize), 26 | AsynPortClientContainer(port) 27 | { 28 | } 29 | 30 | PosPluginWrapper::~PosPluginWrapper () 31 | { 32 | cleanup(); 33 | } 34 | 35 | -------------------------------------------------------------------------------- /ADApp/pluginTests/PosPluginWrapper.h: -------------------------------------------------------------------------------- 1 | /* 2 | * PosPluginWrapper.h 3 | * 4 | * Created on: 24 Jun 2015 5 | * Author: gnx91527 6 | */ 7 | 8 | #ifndef ADAPP_PLUGINTESTS_POSPLUGINWRAPPER_H_ 9 | #define ADAPP_PLUGINTESTS_POSPLUGINWRAPPER_H_ 10 | 11 | #include 12 | #include "AsynPortClientContainer.h" 13 | 14 | class PosPluginWrapper : public NDPosPlugin, public AsynPortClientContainer 15 | { 16 | public: 17 | PosPluginWrapper(const std::string& port, const std::string& detectorPort); 18 | PosPluginWrapper(const std::string& port, 19 | int queueSize, 20 | int blocking, 21 | const std::string& detectorPort, 22 | int address, 23 | int maxBuffers, 24 | size_t maxMemory, 25 | int priority, 26 | int stackSize); 27 | virtual ~PosPluginWrapper (); 28 | }; 29 | 30 | #endif /* ADAPP_PLUGINTESTS_POSPLUGINWRAPPER_H_ */ 31 | -------------------------------------------------------------------------------- /ADApp/pluginTests/ROIPluginWrapper.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * ROIPluginWrapper.cpp 3 | * 4 | * Created on: 9 Nov 2016 5 | * Author: Mark Rivers 6 | */ 7 | 8 | #include "ROIPluginWrapper.h" 9 | 10 | ROIPluginWrapper::ROIPluginWrapper(const std::string& port, const std::string& detectorPort) 11 | : NDPluginROI(port.c_str(), 50, 0, detectorPort.c_str(), 0, 0, 0, 0, 0, 1), 12 | AsynPortClientContainer(port) 13 | { 14 | } 15 | 16 | ROIPluginWrapper::ROIPluginWrapper(const std::string& port, 17 | int queueSize, 18 | int blocking, 19 | const std::string& detectorPort, 20 | int address, 21 | size_t maxMemory, 22 | int priority, 23 | int stackSize, 24 | int maxThreads) 25 | : NDPluginROI(port.c_str(), queueSize, blocking, 26 | detectorPort.c_str(), address, 27 | 0, maxMemory, priority, stackSize, maxThreads), 28 | AsynPortClientContainer(port) 29 | { 30 | } 31 | 32 | ROIPluginWrapper::~ROIPluginWrapper () 33 | { 34 | cleanup(); 35 | } 36 | 37 | -------------------------------------------------------------------------------- /ADApp/pluginTests/ROIPluginWrapper.h: -------------------------------------------------------------------------------- 1 | /* 2 | * ROIPluginWrapper.h 3 | * 4 | * Created on: 9 Nov 2016 5 | * Author: Mark Rivers 6 | */ 7 | 8 | #ifndef ADAPP_PLUGINTESTS_ROIPLUGINWRAPPER_H_ 9 | #define ADAPP_PLUGINTESTS_ROIPLUGINWRAPPER_H_ 10 | 11 | #include 12 | #include "AsynPortClientContainer.h" 13 | 14 | class ROIPluginWrapper : public NDPluginROI, public AsynPortClientContainer 15 | { 16 | public: 17 | ROIPluginWrapper(const std::string& port, const std::string& detectorPort); 18 | ROIPluginWrapper(const std::string& port, 19 | int queueSize, 20 | int blocking, 21 | const std::string& detectorPort, 22 | int address, 23 | size_t maxMemory, 24 | int priority, 25 | int stackSize, 26 | int maxThreads); 27 | virtual ~ROIPluginWrapper (); 28 | }; 29 | 30 | #endif /* ADAPP_PLUGINTESTS_ROIPLUGINWRAPPER_H_ */ 31 | -------------------------------------------------------------------------------- /ADApp/pluginTests/TimeSeriesPluginWrapper.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * TimeSeriesPluginWrapper.cpp 3 | * 4 | * Created on: 21 Mar 2016 5 | * Author: Ulrik Pedersen 6 | */ 7 | 8 | #include "TimeSeriesPluginWrapper.h" 9 | 10 | TimeSeriesPluginWrapper::TimeSeriesPluginWrapper(const std::string& port, const std::string& detectorPort) 11 | : NDPluginTimeSeries(port.c_str(), 50, 0, detectorPort.c_str(), 0, 1, 0, 0, 0, 0), 12 | AsynPortClientContainer(port) 13 | { 14 | } 15 | 16 | TimeSeriesPluginWrapper::TimeSeriesPluginWrapper(const std::string& port, 17 | int queueSize, 18 | int blocking, 19 | const std::string& detectorPort, 20 | int address, 21 | int maxSignals, 22 | size_t maxMemory, 23 | int priority, 24 | int stackSize) 25 | : NDPluginTimeSeries(port.c_str(), queueSize, blocking, 26 | detectorPort.c_str(), address, maxSignals, 27 | 0, maxMemory, priority, stackSize), 28 | AsynPortClientContainer(port) 29 | { 30 | } 31 | 32 | TimeSeriesPluginWrapper::~TimeSeriesPluginWrapper () 33 | { 34 | cleanup(); 35 | } 36 | 37 | -------------------------------------------------------------------------------- /ADApp/pluginTests/TimeSeriesPluginWrapper.h: -------------------------------------------------------------------------------- 1 | /* 2 | * TimeSeriesPluginWrapper.cpp 3 | * 4 | * Created on: 21 Mar 2016 5 | * Author: Ulrik Pedersen 6 | */ 7 | 8 | #ifndef ADAPP_PLUGINTESTS_TIMESERIESPLUGINWRAPPER_H_ 9 | #define ADAPP_PLUGINTESTS_TIMESERIESPLUGINWRAPPER_H_ 10 | 11 | #include 12 | #include "AsynPortClientContainer.h" 13 | 14 | class TimeSeriesPluginWrapper : public NDPluginTimeSeries, public AsynPortClientContainer 15 | { 16 | public: 17 | TimeSeriesPluginWrapper(const std::string& port, const std::string& detectorPort); 18 | TimeSeriesPluginWrapper(const std::string& port, 19 | int queueSize, 20 | int blocking, 21 | const std::string& detectorPort, 22 | int address, 23 | int maxSignals, 24 | size_t maxMemory, 25 | int priority, 26 | int stackSize); 27 | virtual ~TimeSeriesPluginWrapper (); 28 | }; 29 | 30 | #endif /* ADAPP_PLUGINTESTS_TIMESERIESPLUGINWRAPPER_H_ */ 31 | -------------------------------------------------------------------------------- /ADApp/pluginTests/plugin-test.cpp: -------------------------------------------------------------------------------- 1 | /** plugin-test.cpp 2 | * 3 | * This file just defines the basic level of the boost unittest 4 | * systme for plugins. By doing this here, the actual unittests 5 | * can span multiple source files. 6 | * 7 | * Author: Ulrik Kofoed Pedersen, Diamond Light Source. 8 | * 20. March 2015 9 | */ 10 | #ifndef BOOST_USE_STATIC_LINK 11 | #define BOOST_TEST_DYN_LINK 12 | #endif 13 | #define BOOST_TEST_MODULE "NDPlugin Tests" 14 | #include 15 | 16 | -------------------------------------------------------------------------------- /ADApp/pluginTests/testingutilities.h: -------------------------------------------------------------------------------- 1 | /* 2 | * plugintest.h 3 | * 4 | * Created on: 8 Apr 2015 5 | * Author: Ulrik Kofoed Pedersen, Diamond Light Source 6 | */ 7 | 8 | #ifndef ADAPP_PLUGINTESTS_TESTINGUTILITIES_H_ 9 | #define ADAPP_PLUGINTESTS_TESTINGUTILITIES_H_ 10 | 11 | // Newer version of boost requires this: 12 | #if BOOST_VERSION > 105300 13 | #define BOOST_MESSAGE(msg) BOOST_TEST_MESSAGE(msg) 14 | #endif 15 | 16 | #include 17 | #include 18 | #include 19 | 20 | #include 21 | #include 22 | 23 | void fillNDArrays(const std::vector& dimensions, NDDataType_t dataType, std::vector& arrays); 24 | void fillNDArraysFromPool(const std::vector& dimensions, NDDataType_t dataType, std::vector& arrays, NDArrayPool *pNDArrayPool); 25 | void uniqueAsynPortName(std::string& name); 26 | 27 | // Mock simply stores all received NDArrays and provides them to a client on request. 28 | class TestingPlugin : public asynGenericPointerClient { 29 | public: 30 | TestingPlugin (const char *portName, int addr); 31 | ~TestingPlugin(); 32 | void callback(NDArray *pArray); 33 | std::deque arrays; 34 | }; 35 | 36 | 37 | #endif /* ADAPP_PLUGINTESTS_TESTINGUTILITIES_H_ */ 38 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | #Makefile at top of application tree 2 | TOP = . 3 | include $(TOP)/configure/CONFIG 4 | DIRS := $(DIRS) $(filter-out $(DIRS), configure) 5 | DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *App)) 6 | DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *app)) 7 | 8 | include $(TOP)/configure/RULES_TOP 9 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | [![Github Actions](https://github.com/areaDetector/ADCore/actions/workflows/ci-scripts.yml/badge.svg)](https://github.com/areaDetector/ADCore/actions/workflows/ci-scripts.yml) 3 | [![Coverage Status](https://coveralls.io/repos/areaDetector/ADCore/badge.svg?branch=master)](https://coveralls.io/github/areaDetector/ADCore) 4 | 5 | ADCore 6 | ====== 7 | The home of the core components of the 8 | [EPICS](http://www.aps.anl.gov/epics/) 9 | [areaDetector](https://github.com/areaDetector/areaDetector/blob/master/README.md) 10 | software. It includes base classes for drivers and code for all of the standard plugins. 11 | 12 | Additional information: 13 | * [Documentation](https://areadetector.github.io/areaDetector) 14 | * [Release notes and links to source and binary releases](RELEASE.md) 15 | -------------------------------------------------------------------------------- /XML_schema/example_attributes.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /XML_schema/validateXML.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # Validate the XML Attribute and Nexus and HDF5 Template files 4 | 5 | ATTRIBUTE_SCHEMA="--noout --schema ./NDAttributes.xsd" 6 | NEXUS_TEMPLATE_SCHEMA="--noout --schematron ./template.sch" 7 | HDF5_TEMPLATE_SCHEMA="--noout --schema ./hdf5_xml_layout_schema.xsd" 8 | 9 | # NDArray Attribute declaration files 10 | xmllint ${ATTRIBUTE_SCHEMA} ../../ADSimDetector/iocs/simDetectorIOC/iocBoot/iocSimDetector/ROIAttributes.xml 11 | xmllint ${ATTRIBUTE_SCHEMA} ../../ADSimDetector/iocs/simDetectorIOC/iocBoot/iocSimDetector/netCDFAttributes.xml 12 | xmllint ${ATTRIBUTE_SCHEMA} ../../ADSimDetector/iocs/simDetectorIOC/iocBoot/iocSimDetector/simDetectorAttributes.xml 13 | 14 | # NeXus file writer plugin template files 15 | xmllint ${NEXUS_TEMPLATE_SCHEMA} ../../ADSimDetector/iocs/simDetectorIOC/iocBoot/iocSimDetector/NexusTemplate.xml 16 | 17 | # HDF5 file writer plugin template files 18 | xmllint ${HDF5_TEMPLATE_SCHEMA} ../../ADSimDetector/iocs/simDetectorIOC/iocBoot/iocSimDetector/hdf5_layout_demo.xml 19 | xmllint ${HDF5_TEMPLATE_SCHEMA} ../../ADSimDetector/iocs/simDetectorIOC/iocBoot/iocSimDetector/hdf5_layout_nexus.xml 20 | -------------------------------------------------------------------------------- /ci/coverage.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Run this script from the ADCore root directory 3 | # Make sure we exit on any error 4 | set -e 5 | 6 | export ADCORE_DIR=`pwd` 7 | export COVERAGE_DIR=${ADCORE_DIR}/ci 8 | 9 | #export GCOV_PREFIX=${COVERAGE_DIR} 10 | #export GCOV_PREFIX_STRIP=5 11 | 12 | lcov --no-external --capture \ 13 | --directory ${ADCORE_DIR}/ADApp/ADSrc/ \ 14 | --directory ${ADCORE_DIR}/ADApp/pluginSrc/ \ 15 | --output-file ${COVERAGE_DIR}/coverage.info \ 16 | || { echo "Running lcov failed" && exit 2; } 17 | 18 | # generate a readable html report 19 | genhtml --output-directory ${COVERAGE_DIR}/html \ 20 | --demangle-cpp ${COVERAGE_DIR}/coverage.info \ 21 | --title "ADCore plugin-test" \ 22 | || { echo "Running lcov genhtml failed" && exit 2; } 23 | 24 | lcov --list ${COVERAGE_DIR}/coverage.info 25 | 26 | -------------------------------------------------------------------------------- /configure/CONFIG: -------------------------------------------------------------------------------- 1 | # CONFIG - Load build configuration data 2 | # 3 | # Do not make changes to this file! 4 | 5 | # Allow user to override where the build rules come from 6 | RULES = $(EPICS_BASE) 7 | 8 | # RELEASE files point to other application tops 9 | include $(TOP)/configure/RELEASE 10 | -include $(TOP)/configure/RELEASE.$(EPICS_HOST_ARCH).Common 11 | ifdef T_A 12 | -include $(TOP)/configure/RELEASE.Common.$(T_A) 13 | -include $(TOP)/configure/RELEASE.$(EPICS_HOST_ARCH).$(T_A) 14 | endif 15 | 16 | CONFIG = $(RULES)/configure 17 | include $(CONFIG)/CONFIG 18 | 19 | # Override the Base definition: 20 | INSTALL_LOCATION = $(TOP) 21 | 22 | # CONFIG_SITE files contain other build configuration settings 23 | include $(TOP)/configure/CONFIG_SITE 24 | -include $(TOP)/configure/CONFIG_SITE.$(EPICS_HOST_ARCH).Common 25 | ifdef T_A 26 | -include $(TOP)/configure/CONFIG_SITE.Common.$(T_A) 27 | -include $(TOP)/configure/CONFIG_SITE.$(EPICS_HOST_ARCH).$(T_A) 28 | endif 29 | 30 | -------------------------------------------------------------------------------- /configure/CONFIG_SITE: -------------------------------------------------------------------------------- 1 | # CONFIG_SITE 2 | 3 | # Make any application-specific changes to the EPICS build 4 | # configuration variables in this file. 5 | # 6 | # Host/target specific settings can be specified in files named 7 | # CONFIG_SITE.$(EPICS_HOST_ARCH).Common 8 | # CONFIG_SITE.Common.$(T_A) 9 | # CONFIG_SITE.$(EPICS_HOST_ARCH).$(T_A) 10 | 11 | # CHECK_RELEASE controls the consistency checking of the support 12 | # applications pointed to by the RELEASE* files. 13 | # Normally CHECK_RELEASE should be set to YES. 14 | # Set CHECK_RELEASE to NO to disable checking completely. 15 | # Set CHECK_RELEASE to WARN to perform consistency checking but 16 | # continue building anyway if conflicts are found. 17 | CHECK_RELEASE = YES 18 | 19 | # Set this when you only want to compile this application 20 | # for a subset of the cross-compiled target architectures 21 | # that Base is built for. 22 | #CROSS_COMPILER_TARGET_ARCHS = vxWorks-68040 23 | 24 | # To install files into a location other than $(TOP) define 25 | # INSTALL_LOCATION here. 26 | #INSTALL_LOCATION= 27 | 28 | # Set this when your IOC and the host use different paths 29 | # to access the application. This will be needed to boot 30 | # from a Microsoft FTP server or with some NFS mounts. 31 | # You must rebuild in the iocBoot directory for this to 32 | # take effect. 33 | #IOCS_APPL_TOP = 34 | 35 | # Get settings from AREA_DETECTOR, so we only have to configure once for all detectors if we want to 36 | -include $(AREA_DETECTOR)/configure/CONFIG_SITE 37 | -include $(AREA_DETECTOR)/configure/CONFIG_SITE.$(EPICS_HOST_ARCH) 38 | -include $(AREA_DETECTOR)/configure/CONFIG_SITE.$(EPICS_HOST_ARCH).Common 39 | ifdef T_A 40 | -include $(AREA_DETECTOR)/configure/CONFIG_SITE.Common.$(T_A) 41 | -include $(AREA_DETECTOR)/configure/CONFIG_SITE.$(EPICS_HOST_ARCH).$(T_A) 42 | endif 43 | -------------------------------------------------------------------------------- /configure/Makefile: -------------------------------------------------------------------------------- 1 | TOP=.. 2 | 3 | include $(TOP)/configure/CONFIG 4 | 5 | TARGETS = $(CONFIG_TARGETS) 6 | CONFIGS += $(subst ../,,$(wildcard $(CONFIG_INSTALLS))) 7 | 8 | include $(TOP)/configure/RULES 9 | -------------------------------------------------------------------------------- /configure/RELEASE: -------------------------------------------------------------------------------- 1 | #RELEASE Location of external products 2 | # Run "gnumake clean uninstall install" in the application 3 | # top directory each time this file is changed. 4 | 5 | -include $(TOP)/../configure/RELEASE_LIBS_INCLUDE 6 | -include $(TOP)/RELEASE.local 7 | -include $(TOP)/configure/RELEASE.local 8 | 9 | -------------------------------------------------------------------------------- /configure/RULES: -------------------------------------------------------------------------------- 1 | # RULES 2 | 3 | include $(CONFIG)/RULES 4 | 5 | # Library should be rebuilt because LIBOBJS may have changed. 6 | $(LIBNAME): ../Makefile 7 | -------------------------------------------------------------------------------- /configure/RULES.ioc: -------------------------------------------------------------------------------- 1 | #RULES.ioc 2 | include $(CONFIG)/RULES.ioc 3 | -------------------------------------------------------------------------------- /configure/RULES_DIRS: -------------------------------------------------------------------------------- 1 | #RULES_DIRS 2 | include $(CONFIG)/RULES_DIRS 3 | -------------------------------------------------------------------------------- /configure/RULES_TOP: -------------------------------------------------------------------------------- 1 | #RULES_TOP 2 | include $(CONFIG)/RULES_TOP 3 | 4 | -------------------------------------------------------------------------------- /docs/ADCore/ADBase.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/areaDetector/ADCore/0d264c33cd2e1e83dc6070a974f2b5e3a059ea48/docs/ADCore/ADBase.png -------------------------------------------------------------------------------- /docs/ADCore/ADEpicsShutter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/areaDetector/ADCore/0d264c33cd2e1e83dc6070a974f2b5e3a059ea48/docs/ADCore/ADEpicsShutter.png -------------------------------------------------------------------------------- /docs/ADCore/ADTop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/areaDetector/ADCore/0d264c33cd2e1e83dc6070a974f2b5e3a059ea48/docs/ADCore/ADTop.png -------------------------------------------------------------------------------- /docs/ADCore/HDFView-screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/areaDetector/ADCore/0d264c33cd2e1e83dc6070a974f2b5e3a059ea48/docs/ADCore/HDFView-screenshot.png -------------------------------------------------------------------------------- /docs/ADCore/HDFmultiple-dimensions.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/areaDetector/ADCore/0d264c33cd2e1e83dc6070a974f2b5e3a059ea48/docs/ADCore/HDFmultiple-dimensions.png -------------------------------------------------------------------------------- /docs/ADCore/NDBadPixel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/areaDetector/ADCore/0d264c33cd2e1e83dc6070a974f2b5e3a059ea48/docs/ADCore/NDBadPixel.png -------------------------------------------------------------------------------- /docs/ADCore/NDCircularBuff.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/areaDetector/ADCore/0d264c33cd2e1e83dc6070a974f2b5e3a059ea48/docs/ADCore/NDCircularBuff.png -------------------------------------------------------------------------------- /docs/ADCore/NDCodec.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/areaDetector/ADCore/0d264c33cd2e1e83dc6070a974f2b5e3a059ea48/docs/ADCore/NDCodec.png -------------------------------------------------------------------------------- /docs/ADCore/NDCodec_Performance.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/areaDetector/ADCore/0d264c33cd2e1e83dc6070a974f2b5e3a059ea48/docs/ADCore/NDCodec_Performance.png -------------------------------------------------------------------------------- /docs/ADCore/NDCodec_Performance_More.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/areaDetector/ADCore/0d264c33cd2e1e83dc6070a974f2b5e3a059ea48/docs/ADCore/NDCodec_Performance_More.png -------------------------------------------------------------------------------- /docs/ADCore/NDColorConvert.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/areaDetector/ADCore/0d264c33cd2e1e83dc6070a974f2b5e3a059ea48/docs/ADCore/NDColorConvert.png -------------------------------------------------------------------------------- /docs/ADCore/NDFFT16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/areaDetector/ADCore/0d264c33cd2e1e83dc6070a974f2b5e3a059ea48/docs/ADCore/NDFFT16.png -------------------------------------------------------------------------------- /docs/ADCore/NDFFTPeaksAbsVal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/areaDetector/ADCore/0d264c33cd2e1e83dc6070a974f2b5e3a059ea48/docs/ADCore/NDFFTPeaksAbsVal.png -------------------------------------------------------------------------------- /docs/ADCore/NDFFTPeaksImage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/areaDetector/ADCore/0d264c33cd2e1e83dc6070a974f2b5e3a059ea48/docs/ADCore/NDFFTPeaksImage.png -------------------------------------------------------------------------------- /docs/ADCore/NDFFTPlotAbsValue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/areaDetector/ADCore/0d264c33cd2e1e83dc6070a974f2b5e3a059ea48/docs/ADCore/NDFFTPlotAbsValue.png -------------------------------------------------------------------------------- /docs/ADCore/NDFFTPlotAll.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/areaDetector/ADCore/0d264c33cd2e1e83dc6070a974f2b5e3a059ea48/docs/ADCore/NDFFTPlotAll.png -------------------------------------------------------------------------------- /docs/ADCore/NDFFTSimDetectorSetup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/areaDetector/ADCore/0d264c33cd2e1e83dc6070a974f2b5e3a059ea48/docs/ADCore/NDFFTSimDetectorSetup.png -------------------------------------------------------------------------------- /docs/ADCore/NDFFTSineAbsVal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/areaDetector/ADCore/0d264c33cd2e1e83dc6070a974f2b5e3a059ea48/docs/ADCore/NDFFTSineAbsVal.png -------------------------------------------------------------------------------- /docs/ADCore/NDFFTSineImage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/areaDetector/ADCore/0d264c33cd2e1e83dc6070a974f2b5e3a059ea48/docs/ADCore/NDFFTSineImage.png -------------------------------------------------------------------------------- /docs/ADCore/NDFFTTimeSeriesPlot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/areaDetector/ADCore/0d264c33cd2e1e83dc6070a974f2b5e3a059ea48/docs/ADCore/NDFFTTimeSeriesPlot.png -------------------------------------------------------------------------------- /docs/ADCore/NDFFTTimeSeriesPlotFFTAbsValue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/areaDetector/ADCore/0d264c33cd2e1e83dc6070a974f2b5e3a059ea48/docs/ADCore/NDFFTTimeSeriesPlotFFTAbsValue.png -------------------------------------------------------------------------------- /docs/ADCore/NDFFTTimeSeriesPlotFFTAbsValueNoisyAvg1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/areaDetector/ADCore/0d264c33cd2e1e83dc6070a974f2b5e3a059ea48/docs/ADCore/NDFFTTimeSeriesPlotFFTAbsValueNoisyAvg1.png -------------------------------------------------------------------------------- /docs/ADCore/NDFFTTimeSeriesPlotFFTAbsValueNoisyAvg100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/areaDetector/ADCore/0d264c33cd2e1e83dc6070a974f2b5e3a059ea48/docs/ADCore/NDFFTTimeSeriesPlotFFTAbsValueNoisyAvg100.png -------------------------------------------------------------------------------- /docs/ADCore/NDFFTTimeSeriesPlotNoisy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/areaDetector/ADCore/0d264c33cd2e1e83dc6070a974f2b5e3a059ea48/docs/ADCore/NDFFTTimeSeriesPlotNoisy.png -------------------------------------------------------------------------------- /docs/ADCore/NDFile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/areaDetector/ADCore/0d264c33cd2e1e83dc6070a974f2b5e3a059ea48/docs/ADCore/NDFile.png -------------------------------------------------------------------------------- /docs/ADCore/NDFileHDF5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/areaDetector/ADCore/0d264c33cd2e1e83dc6070a974f2b5e3a059ea48/docs/ADCore/NDFileHDF5.png -------------------------------------------------------------------------------- /docs/ADCore/NDFileJPEG.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/areaDetector/ADCore/0d264c33cd2e1e83dc6070a974f2b5e3a059ea48/docs/ADCore/NDFileJPEG.png -------------------------------------------------------------------------------- /docs/ADCore/NDFileJPEG.rst: -------------------------------------------------------------------------------- 1 | NDFileJPEG 2 | ========== 3 | 4 | :author: Mark Rivers, University of Chicago 5 | 6 | .. contents:: Contents 7 | 8 | Overview 9 | -------- 10 | 11 | NDFileJPEG inherits from NDPluginFile. This plugin saves data in the 12 | `JPEG `__ file format, which is a 13 | compressed file format for storing images. There is JPEG support for 14 | almost all languages and programs such as IDL and Matlab. 15 | 16 | The JPEG plugin is limited to 8-bit arrays. It supports all color modes 17 | (Mono, RGB1, RGB2, and RGB3). It is limited to a single array per file, 18 | but capture and stream mode are supported by writing multiple JPEG 19 | files. 20 | 21 | The JPEG plugin supports the Int32 parameter NDFileJPEGQuality to 22 | control the amount of compression in the file. This parameter varies 23 | from 0 (maximum compression, lowest quality) to 100 (least compression, 24 | best quality). NDFileJPEG.template defines 2 records to support this: 25 | $(P)$(R)JPEGQuality (longout) and $(P)$(R)JPEGQuality_RBV (longin). 26 | 27 | The `NDFileJPEG class 28 | documentation <../areaDetectorDoxygenHTML/class_n_d_file_j_p_e_g.html>`__ 29 | describes this class in detail. 30 | 31 | Configuration 32 | ------------- 33 | 34 | The NDFileJPEG plugin is created with the ``NDFileJPEGConfigure`` command, 35 | either from C/C++ or from the EPICS IOC shell. 36 | 37 | .. code-block:: c 38 | 39 | NDFileJPEGConfigure (const char *portName, int queueSize, int blockingCallbacks, 40 | const char *NDArrayPort, int NDArrayAddr, size_t maxMemory, 41 | int priority, int stackSize) 42 | 43 | 44 | For details on the meaning of the parameters to this function refer to 45 | the detailed documentation on the ``NDFileJPEGConfigure`` function in the 46 | `NDFileJPEG.cpp 47 | documentation <../areaDetectorDoxygenHTML/_n_d_file_j_p_e_g_8cpp.html>`__ 48 | and in the documentation for the constructor for the `NDFileJPEG 49 | class <../areaDetectorDoxygenHTML/class_n_d_file_j_p_e_g.html>`__. 50 | 51 | Screen Shots 52 | ------------ 53 | 54 | .. figure:: NDFileJPEG.png 55 | :align: center 56 | 57 | -------------------------------------------------------------------------------- /docs/ADCore/NDFileMagick.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/areaDetector/ADCore/0d264c33cd2e1e83dc6070a974f2b5e3a059ea48/docs/ADCore/NDFileMagick.png -------------------------------------------------------------------------------- /docs/ADCore/NDFileNetCDF.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/areaDetector/ADCore/0d264c33cd2e1e83dc6070a974f2b5e3a059ea48/docs/ADCore/NDFileNetCDF.png -------------------------------------------------------------------------------- /docs/ADCore/NDFileNexus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/areaDetector/ADCore/0d264c33cd2e1e83dc6070a974f2b5e3a059ea48/docs/ADCore/NDFileNexus.png -------------------------------------------------------------------------------- /docs/ADCore/NDFileTIFF.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/areaDetector/ADCore/0d264c33cd2e1e83dc6070a974f2b5e3a059ea48/docs/ADCore/NDFileTIFF.png -------------------------------------------------------------------------------- /docs/ADCore/NDGather.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/areaDetector/ADCore/0d264c33cd2e1e83dc6070a974f2b5e3a059ea48/docs/ADCore/NDGather.png -------------------------------------------------------------------------------- /docs/ADCore/NDOverlay.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/areaDetector/ADCore/0d264c33cd2e1e83dc6070a974f2b5e3a059ea48/docs/ADCore/NDOverlay.png -------------------------------------------------------------------------------- /docs/ADCore/NDOverlay8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/areaDetector/ADCore/0d264c33cd2e1e83dc6070a974f2b5e3a059ea48/docs/ADCore/NDOverlay8.png -------------------------------------------------------------------------------- /docs/ADCore/NDOverlayN.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/areaDetector/ADCore/0d264c33cd2e1e83dc6070a974f2b5e3a059ea48/docs/ADCore/NDOverlayN.png -------------------------------------------------------------------------------- /docs/ADCore/NDOverlay_image.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/areaDetector/ADCore/0d264c33cd2e1e83dc6070a974f2b5e3a059ea48/docs/ADCore/NDOverlay_image.jpg -------------------------------------------------------------------------------- /docs/ADCore/NDPluginAttrPlot-usecase.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/areaDetector/ADCore/0d264c33cd2e1e83dc6070a974f2b5e3a059ea48/docs/ADCore/NDPluginAttrPlot-usecase.png -------------------------------------------------------------------------------- /docs/ADCore/NDPluginAttrPlot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/areaDetector/ADCore/0d264c33cd2e1e83dc6070a974f2b5e3a059ea48/docs/ADCore/NDPluginAttrPlot.png -------------------------------------------------------------------------------- /docs/ADCore/NDPluginAttrPlot_Plot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/areaDetector/ADCore/0d264c33cd2e1e83dc6070a974f2b5e3a059ea48/docs/ADCore/NDPluginAttrPlot_Plot.png -------------------------------------------------------------------------------- /docs/ADCore/NDPluginAttrPlot_Select.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/areaDetector/ADCore/0d264c33cd2e1e83dc6070a974f2b5e3a059ea48/docs/ADCore/NDPluginAttrPlot_Select.png -------------------------------------------------------------------------------- /docs/ADCore/NDPluginAttribute.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/areaDetector/ADCore/0d264c33cd2e1e83dc6070a974f2b5e3a059ea48/docs/ADCore/NDPluginAttribute.png -------------------------------------------------------------------------------- /docs/ADCore/NDPluginAttribute8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/areaDetector/ADCore/0d264c33cd2e1e83dc6070a974f2b5e3a059ea48/docs/ADCore/NDPluginAttribute8.png -------------------------------------------------------------------------------- /docs/ADCore/NDPluginAttributeTSEpicsTSnSec.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/areaDetector/ADCore/0d264c33cd2e1e83dc6070a974f2b5e3a059ea48/docs/ADCore/NDPluginAttributeTSEpicsTSnSec.png -------------------------------------------------------------------------------- /docs/ADCore/NDPluginAttributeTSUniqueID.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/areaDetector/ADCore/0d264c33cd2e1e83dc6070a974f2b5e3a059ea48/docs/ADCore/NDPluginAttributeTSUniqueID.png -------------------------------------------------------------------------------- /docs/ADCore/NDPluginBase.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/areaDetector/ADCore/0d264c33cd2e1e83dc6070a974f2b5e3a059ea48/docs/ADCore/NDPluginBase.png -------------------------------------------------------------------------------- /docs/ADCore/NDPluginBaseFull.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/areaDetector/ADCore/0d264c33cd2e1e83dc6070a974f2b5e3a059ea48/docs/ADCore/NDPluginBaseFull.png -------------------------------------------------------------------------------- /docs/ADCore/NDPluginDriverExample_NDStats.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/areaDetector/ADCore/0d264c33cd2e1e83dc6070a974f2b5e3a059ea48/docs/ADCore/NDPluginDriverExample_NDStats.png -------------------------------------------------------------------------------- /docs/ADCore/NDPluginDriverExample_StatsFull_1thread.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/areaDetector/ADCore/0d264c33cd2e1e83dc6070a974f2b5e3a059ea48/docs/ADCore/NDPluginDriverExample_StatsFull_1thread.png -------------------------------------------------------------------------------- /docs/ADCore/NDPluginDriverExample_StatsFull_3thread.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/areaDetector/ADCore/0d264c33cd2e1e83dc6070a974f2b5e3a059ea48/docs/ADCore/NDPluginDriverExample_StatsFull_3thread.png -------------------------------------------------------------------------------- /docs/ADCore/NDPluginDriverExample_StatsFull_5thread.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/areaDetector/ADCore/0d264c33cd2e1e83dc6070a974f2b5e3a059ea48/docs/ADCore/NDPluginDriverExample_StatsFull_5thread.png -------------------------------------------------------------------------------- /docs/ADCore/NDPluginDriverExample_StatsFull_5thread_unsorted.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/areaDetector/ADCore/0d264c33cd2e1e83dc6070a974f2b5e3a059ea48/docs/ADCore/NDPluginDriverExample_StatsFull_5thread_unsorted.png -------------------------------------------------------------------------------- /docs/ADCore/NDPluginDriverExample_simDetector.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/areaDetector/ADCore/0d264c33cd2e1e83dc6070a974f2b5e3a059ea48/docs/ADCore/NDPluginDriverExample_simDetector.png -------------------------------------------------------------------------------- /docs/ADCore/NDPluginDriverExample_simDetectorSetup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/areaDetector/ADCore/0d264c33cd2e1e83dc6070a974f2b5e3a059ea48/docs/ADCore/NDPluginDriverExample_simDetectorSetup.png -------------------------------------------------------------------------------- /docs/ADCore/NDPluginDriverExample_top_1thread.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/areaDetector/ADCore/0d264c33cd2e1e83dc6070a974f2b5e3a059ea48/docs/ADCore/NDPluginDriverExample_top_1thread.png -------------------------------------------------------------------------------- /docs/ADCore/NDPluginDriverExample_top_3thread.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/areaDetector/ADCore/0d264c33cd2e1e83dc6070a974f2b5e3a059ea48/docs/ADCore/NDPluginDriverExample_top_3thread.png -------------------------------------------------------------------------------- /docs/ADCore/NDPluginDriverExample_top_5thread.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/areaDetector/ADCore/0d264c33cd2e1e83dc6070a974f2b5e3a059ea48/docs/ADCore/NDPluginDriverExample_top_5thread.png -------------------------------------------------------------------------------- /docs/ADCore/NDPluginFFT.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/areaDetector/ADCore/0d264c33cd2e1e83dc6070a974f2b5e3a059ea48/docs/ADCore/NDPluginFFT.png -------------------------------------------------------------------------------- /docs/ADCore/NDPluginPos.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/areaDetector/ADCore/0d264c33cd2e1e83dc6070a974f2b5e3a059ea48/docs/ADCore/NDPluginPos.png -------------------------------------------------------------------------------- /docs/ADCore/NDPluginTimeSeries.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/areaDetector/ADCore/0d264c33cd2e1e83dc6070a974f2b5e3a059ea48/docs/ADCore/NDPluginTimeSeries.png -------------------------------------------------------------------------------- /docs/ADCore/NDProcess.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/areaDetector/ADCore/0d264c33cd2e1e83dc6070a974f2b5e3a059ea48/docs/ADCore/NDProcess.png -------------------------------------------------------------------------------- /docs/ADCore/NDProcessTIFF.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/areaDetector/ADCore/0d264c33cd2e1e83dc6070a974f2b5e3a059ea48/docs/ADCore/NDProcessTIFF.png -------------------------------------------------------------------------------- /docs/ADCore/NDProcess_filtered.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/areaDetector/ADCore/0d264c33cd2e1e83dc6070a974f2b5e3a059ea48/docs/ADCore/NDProcess_filtered.jpg -------------------------------------------------------------------------------- /docs/ADCore/NDProcess_unfiltered.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/areaDetector/ADCore/0d264c33cd2e1e83dc6070a974f2b5e3a059ea48/docs/ADCore/NDProcess_unfiltered.jpg -------------------------------------------------------------------------------- /docs/ADCore/NDPva.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/areaDetector/ADCore/0d264c33cd2e1e83dc6070a974f2b5e3a059ea48/docs/ADCore/NDPva.png -------------------------------------------------------------------------------- /docs/ADCore/NDPva_Performance.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/areaDetector/ADCore/0d264c33cd2e1e83dc6070a974f2b5e3a059ea48/docs/ADCore/NDPva_Performance.png -------------------------------------------------------------------------------- /docs/ADCore/NDROI.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/areaDetector/ADCore/0d264c33cd2e1e83dc6070a974f2b5e3a059ea48/docs/ADCore/NDROI.png -------------------------------------------------------------------------------- /docs/ADCore/NDROI4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/areaDetector/ADCore/0d264c33cd2e1e83dc6070a974f2b5e3a059ea48/docs/ADCore/NDROI4.png -------------------------------------------------------------------------------- /docs/ADCore/NDROIStat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/areaDetector/ADCore/0d264c33cd2e1e83dc6070a974f2b5e3a059ea48/docs/ADCore/NDROIStat.png -------------------------------------------------------------------------------- /docs/ADCore/NDROIStat8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/areaDetector/ADCore/0d264c33cd2e1e83dc6070a974f2b5e3a059ea48/docs/ADCore/NDROIStat8.png -------------------------------------------------------------------------------- /docs/ADCore/NDROIStatN.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/areaDetector/ADCore/0d264c33cd2e1e83dc6070a974f2b5e3a059ea48/docs/ADCore/NDROIStatN.png -------------------------------------------------------------------------------- /docs/ADCore/NDROIStatTimeSeriesMean.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/areaDetector/ADCore/0d264c33cd2e1e83dc6070a974f2b5e3a059ea48/docs/ADCore/NDROIStatTimeSeriesMean.png -------------------------------------------------------------------------------- /docs/ADCore/NDScatter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/areaDetector/ADCore/0d264c33cd2e1e83dc6070a974f2b5e3a059ea48/docs/ADCore/NDScatter.png -------------------------------------------------------------------------------- /docs/ADCore/NDStats.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/areaDetector/ADCore/0d264c33cd2e1e83dc6070a974f2b5e3a059ea48/docs/ADCore/NDStats.png -------------------------------------------------------------------------------- /docs/ADCore/NDStats5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/areaDetector/ADCore/0d264c33cd2e1e83dc6070a974f2b5e3a059ea48/docs/ADCore/NDStats5.png -------------------------------------------------------------------------------- /docs/ADCore/NDStatsTimeSeriesBasicAll.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/areaDetector/ADCore/0d264c33cd2e1e83dc6070a974f2b5e3a059ea48/docs/ADCore/NDStatsTimeSeriesBasicAll.png -------------------------------------------------------------------------------- /docs/ADCore/NDStatsTimeSeriesCentroidAll.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/areaDetector/ADCore/0d264c33cd2e1e83dc6070a974f2b5e3a059ea48/docs/ADCore/NDStatsTimeSeriesCentroidAll.png -------------------------------------------------------------------------------- /docs/ADCore/NDStatsTimeSeriesCentroidY.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/areaDetector/ADCore/0d264c33cd2e1e83dc6070a974f2b5e3a059ea48/docs/ADCore/NDStatsTimeSeriesCentroidY.png -------------------------------------------------------------------------------- /docs/ADCore/NDStatsTimeSeriesTotal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/areaDetector/ADCore/0d264c33cd2e1e83dc6070a974f2b5e3a059ea48/docs/ADCore/NDStatsTimeSeriesTotal.png -------------------------------------------------------------------------------- /docs/ADCore/NDStats_AverageX.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/areaDetector/ADCore/0d264c33cd2e1e83dc6070a974f2b5e3a059ea48/docs/ADCore/NDStats_AverageX.png -------------------------------------------------------------------------------- /docs/ADCore/NDStats_CursorY.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/areaDetector/ADCore/0d264c33cd2e1e83dc6070a974f2b5e3a059ea48/docs/ADCore/NDStats_CursorY.png -------------------------------------------------------------------------------- /docs/ADCore/NDStats_Histogram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/areaDetector/ADCore/0d264c33cd2e1e83dc6070a974f2b5e3a059ea48/docs/ADCore/NDStats_Histogram.png -------------------------------------------------------------------------------- /docs/ADCore/NDStats_filtered.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/areaDetector/ADCore/0d264c33cd2e1e83dc6070a974f2b5e3a059ea48/docs/ADCore/NDStats_filtered.png -------------------------------------------------------------------------------- /docs/ADCore/NDStats_unfiltered.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/areaDetector/ADCore/0d264c33cd2e1e83dc6070a974f2b5e3a059ea48/docs/ADCore/NDStats_unfiltered.png -------------------------------------------------------------------------------- /docs/ADCore/NDStdArrays.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/areaDetector/ADCore/0d264c33cd2e1e83dc6070a974f2b5e3a059ea48/docs/ADCore/NDStdArrays.png -------------------------------------------------------------------------------- /docs/ADCore/NDTimeSeriesPlot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/areaDetector/ADCore/0d264c33cd2e1e83dc6070a974f2b5e3a059ea48/docs/ADCore/NDTimeSeriesPlot.png -------------------------------------------------------------------------------- /docs/ADCore/NDTransform.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/areaDetector/ADCore/0d264c33cd2e1e83dc6070a974f2b5e3a059ea48/docs/ADCore/NDTransform.png -------------------------------------------------------------------------------- /docs/ADCore/areaDetectorArchitecture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/areaDetector/ADCore/0d264c33cd2e1e83dc6070a974f2b5e3a059ea48/docs/ADCore/areaDetectorArchitecture.png -------------------------------------------------------------------------------- /docs/ADCore/asynPortDriver.rst: -------------------------------------------------------------------------------- 1 | asynPortDriver 2 | ============== 3 | 4 | Detector drivers and plugins are asyn port drivers, meaning that they 5 | implement one or more of the standard asyn interfaces. They register 6 | themselves as interrupt sources, so that they do callbacks to registered 7 | asyn clients when values change. They inherit from the `asynPortDriver 8 | base C++ 9 | class `__ 10 | that is provided in the asyn module. That base class handles all of the 11 | details of registering the port driver, registering the supported 12 | interfaces, and registering the required interrupt sources. It also 13 | provides a parameter library for int, double, and string parameters 14 | indexed by the integer index values defined in the driver. The parameter 15 | library provides methods to write and read the parameter values, and to 16 | perform callbacks to registered clients when a parameter value has 17 | changed. The `asynPortDriver class 18 | documentation `__ 19 | describes this class in detail. 20 | -------------------------------------------------------------------------------- /docs/ADCore/commonPlugins.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/areaDetector/ADCore/0d264c33cd2e1e83dc6070a974f2b5e3a059ea48/docs/ADCore/commonPlugins.png -------------------------------------------------------------------------------- /docs/ADCore/common_plugins.rst: -------------------------------------------------------------------------------- 1 | commonPlugins.cmd 2 | ================= 3 | 4 | The ``ADCore/iocBoot`` directory contains a file called 5 | ``EXAMPLE_commonPlugins.cmd``. This file should be copied to 6 | ``commonPlugins.cmd`` and edited for site-specific requirements. 7 | ``commonPlugins.cmd`` is loaded by all of the example driver IOC startup 8 | scripts. It loads a set of plugins which are typically useful for 9 | detectors IOCs. Each detector medm screen has links to related displays 10 | for each of the common plugins. While this set of plugins is often 11 | useful and sufficient, users are free to add or remove plugins from this 12 | set for their own IOCs. New medm displays will typically need to be 13 | created if that is done, to have the required links to related displays. 14 | 15 | The following medm screen shows the status of all of the common plugins 16 | at a glance, with links to bring up the detailed screen for each. 17 | 18 | .. image:: commonPlugins.png 19 | :align: center 20 | 21 | -------------------------------------------------------------------------------- /docs/ADCore/ffmpegServer.rst: -------------------------------------------------------------------------------- 1 | .. mdinclude:: ../../../ffmpegServer/README.md 2 | -------------------------------------------------------------------------------- /docs/ADCore/guidelines.rst: -------------------------------------------------------------------------------- 1 | Guidelines and rules for drivers 2 | ================================ 3 | 4 | The following are guidelines and rules for writing areaDetector drivers 5 | 6 | - Drivers will generally implement one or more of the writeInt32(), 7 | writeFloat64() or writeOctet() functions if they need to act 8 | immediately on a new value of a parameter. For many parameters it is 9 | normally sufficient to simply have them written to the parameter 10 | library, and not to handle them in the writeXXX() functions. The 11 | parameters are then retrieved from the parameter library with the 12 | getIntParam(), getDoubleParam(), or getStringParam() function calls 13 | when they are needed. 14 | - If the writeInt32(), writeFloat64() or writeOctet() functions are 15 | implemented they **must** call the base class function for parameters 16 | that they do not handle and whose parameter index value is less than 17 | the first parameter of this class, i.e. parameters that belong to a 18 | base class. 19 | - Drivers will need to call the createParam() function in their 20 | constructor if they have additional parameters beyond those in the 21 | asynPortDriver or ADDriver base classes. 22 | - Drivers will generally need to create a new thread in which they run 23 | the acquisition task. Some vendor libraries create such a thread 24 | themselves, and then the driver must just implement a callback 25 | function that runs in that thread (the Prosilica is an example of 26 | such a driver). 27 | - The acquisition thread will typically monitor the acquisition process 28 | and perform periodic status update callbacks. The details of how to 29 | implement this will vary depending on the specifics of the vendor 30 | API. There are many existing detector drivers that can be used as 31 | examples of how to write a new driver. 32 | - If the detector hardware does not support fixed-period acquisition or 33 | muliple-image acquisition sequence (ADNumImages parameter) then these 34 | should be emulated in the driver. The simDetector, marCCD and other 35 | drivers can be used as examples of how to do this. 36 | - If NDArrayCallbacks is non-zero then drivers should do the following: 37 | 38 | - Call asynNDArrayDriver::getAttributes to attach any attributes 39 | defined for this driver to the current array. 40 | - Call doCallbacksGenericPointer() so that registered clients can 41 | get the values of the new arrays. 42 | -------------------------------------------------------------------------------- /docs/ADCore/medm.rst: -------------------------------------------------------------------------------- 1 | MEDM screens 2 | ============ 3 | 4 | The following is the top-level MEDM screen that provides links to the 5 | screens for most of the detectors and plugins that areaDetector 6 | supports. This screen is useful for testing, and as a source for copying 7 | related-display menus to be placed in application-specific MEDM screens. 8 | 9 | .. image:: ADTop.png 10 | :align: center 11 | :width: 200 px 12 | 13 | The following is the MEDM screen that provides access to the parameters 14 | in asynNDArrayDriver.h and ADDriver.h through records in 15 | ADBase.template. This is a top-level MEDM screen that will work with any 16 | areaDetector driver. Note however that many drivers will not implement 17 | all of these parameters, and there will usually be detector-specific 18 | parameters not shown in this screen, so detector-specific MEDM screens 19 | should generally be created that display the EPICS PVs for the features 20 | implemented for that detector. 21 | 22 | .. image:: ADBase.png 23 | :align: center 24 | :width: 600 px 25 | 26 | The following is the MEDM screen that provides access to the 27 | file-related parameters in asynNDArrayDriver.h through records in 28 | NDFile.template. This screen is for use with detector drivers that 29 | directly implement file I/O. 30 | 31 | .. image:: NDFile.png 32 | :align: center 33 | :width: 600 px 34 | 35 | The following is the MEDM screen that provides access to the EPICS 36 | shutter parameters in ADDriver.h through records in ADBase.template. 37 | This screen allows one to define the EPICS PVs to open the shutter, 38 | close the shutter, and determine the shutter status. The values of these 39 | PVs for open and close drive and status can also be defined. Note that 40 | in many cases the same PV will be used for open and close drive, but in 41 | some cases (e.g. APS safety shutters) different PVs are used for open 42 | and close. 43 | 44 | .. image:: ADEpicsShutter.png 45 | :align: center 46 | :width: 400 px 47 | 48 | -------------------------------------------------------------------------------- /docs/ADCore/overview.rst: -------------------------------------------------------------------------------- 1 | Overview 2 | ======== 3 | 4 | The areaDetector module provides a general-purpose interface for area 5 | (2-D) detectors in `EPICS `__. It is 6 | intended to be used with a wide variety of detectors and cameras, 7 | ranging from high frame rate CCD and CMOS cameras, pixel-array detectors 8 | such as the Pilatus, and large format detectors like the Perkin Elmer 9 | flat panels. 10 | 11 | The goals of this module are: 12 | 13 | - Minimize the amount of code that needs to be written to implement a 14 | new detector. 15 | - Provide a standard interface defining the functions and parameters 16 | that a detector driver must support. 17 | - Provide a set of base EPICS records that will be present for every 18 | detector using this module. This allows the use of generic EPICS 19 | clients for displaying images and controlling cameras and detectors. 20 | - Allow easy extensibility to take advantage of detector-specific 21 | features beyond the standard parameters. 22 | - Have high-performance. Applications can be written to get the 23 | detector image data through EPICS, but an interface is also available 24 | to receive the detector data at a lower-level for very high 25 | performance. 26 | - Provide a mechanism for device-independent real-time data analysis 27 | such as regions-of-interest and statistics. 28 | - Provide detector drivers for commonly used detectors in synchrotron 29 | applications. These include GigE video cameras, IEEE 1394 (Firewire) 30 | cameras, CCD x-ray detectors, scientific CCD and CMOS cameras, online 31 | imaging plate detectors, pixel-array detectors, amorphous silicon and 32 | CMOS flat panel detectors, and many others. 33 | -------------------------------------------------------------------------------- /docs/ADCore/plugin_medm.rst: -------------------------------------------------------------------------------- 1 | Base class medm screens 2 | ======================= 3 | 4 | There are 2 medm screens for the NDPluginDriver. The first is 5 | ``NDPluginBase.adl``. This exposes a subset of the EPICS PVs for the 6 | NDPluginDriver base class. It is normally included in the medm screen 7 | for every plugin. For example, the following is the medm screen for the 8 | NDPluginStdArrays plugin. Because this plugin does not have any 9 | additional records beyond those in the NDPluginDriver base class, this 10 | medm screen consists only the NDPluginBase.adl file. 11 | 12 | .. image:: NDPluginBase.png 13 | :align: center 14 | 15 | ``NDPluginBase.adl`` displays only the PVs that are most commonly used, and 16 | does not expose the PVs that are intended more for expert configuration. 17 | NDPluginBaseFull.adl displays all of the PVs in NDPluginDriver base 18 | class, include those controlling the queue size, number of threads, 19 | output array sorting, etc. This display can be opened from the More 20 | related display menu in NDPluginBase.adl. 21 | 22 | .. image:: NDPluginBaseFull.png 23 | :align: center 24 | -------------------------------------------------------------------------------- /docs/ADCore/plugins.rst: -------------------------------------------------------------------------------- 1 | areaDetector Plugins 2 | ===================== 3 | 4 | .. toctree:: 5 | :maxdepth: 2 6 | :caption: Table of Contents 7 | 8 | plugin_overview 9 | NDPluginDriver 10 | plugin_guidelines 11 | plugin_medm 12 | common_plugins 13 | plugin_performance 14 | NDPluginAttrPlot 15 | NDPluginAttribute 16 | NDPluginBadPixel 17 | NDPluginCircularBuff 18 | NDPluginCodec 19 | NDPluginColorConvert 20 | NDPluginFFT 21 | NDPluginFile 22 | NDPluginGather 23 | NDPluginOverlay 24 | NDPluginProcess 25 | NDPluginPva 26 | NDPluginROI 27 | NDPluginROIStat 28 | NDPluginScatter 29 | NDPluginStats 30 | NDPluginStdArrays 31 | NDPluginTimeSeries 32 | NDPluginTransform 33 | NDPluginPos 34 | ffmpegServer 35 | -------------------------------------------------------------------------------- /docs/ADCore/scatterGatherExample_NDFileNetCDF.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/areaDetector/ADCore/0d264c33cd2e1e83dc6070a974f2b5e3a059ea48/docs/ADCore/scatterGatherExample_NDFileNetCDF.png -------------------------------------------------------------------------------- /docs/ADCore/scatterGatherExample_NDGather.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/areaDetector/ADCore/0d264c33cd2e1e83dc6070a974f2b5e3a059ea48/docs/ADCore/scatterGatherExample_NDGather.png -------------------------------------------------------------------------------- /docs/ADCore/scatterGatherExample_NDGatherFull.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/areaDetector/ADCore/0d264c33cd2e1e83dc6070a974f2b5e3a059ea48/docs/ADCore/scatterGatherExample_NDGatherFull.png -------------------------------------------------------------------------------- /docs/ADCore/scatterGatherExample_NDGatherFullUnsorted.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/areaDetector/ADCore/0d264c33cd2e1e83dc6070a974f2b5e3a059ea48/docs/ADCore/scatterGatherExample_NDGatherFullUnsorted.png -------------------------------------------------------------------------------- /docs/ADCore/scatterGatherExample_NDScatter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/areaDetector/ADCore/0d264c33cd2e1e83dc6070a974f2b5e3a059ea48/docs/ADCore/scatterGatherExample_NDScatter.png -------------------------------------------------------------------------------- /docs/ADCore/scatterGatherExample_NDStats.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/areaDetector/ADCore/0d264c33cd2e1e83dc6070a974f2b5e3a059ea48/docs/ADCore/scatterGatherExample_NDStats.png -------------------------------------------------------------------------------- /docs/ADCore/scatterGatherExample_commonPlugins.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/areaDetector/ADCore/0d264c33cd2e1e83dc6070a974f2b5e3a059ea48/docs/ADCore/scatterGatherExample_commonPlugins.png -------------------------------------------------------------------------------- /docs/ADCore/scatterGatherExample_simDetector.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/areaDetector/ADCore/0d264c33cd2e1e83dc6070a974f2b5e3a059ea48/docs/ADCore/scatterGatherExample_simDetector.png -------------------------------------------------------------------------------- /docs/ADCore/scatterGatherExample_simDetectorSetup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/areaDetector/ADCore/0d264c33cd2e1e83dc6070a974f2b5e3a059ea48/docs/ADCore/scatterGatherExample_simDetectorSetup.png -------------------------------------------------------------------------------- /docs/ADCore/scatterGatherExample_top_threads.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/areaDetector/ADCore/0d264c33cd2e1e83dc6070a974f2b5e3a059ea48/docs/ADCore/scatterGatherExample_top_threads.png -------------------------------------------------------------------------------- /iocBoot/.gitignore: -------------------------------------------------------------------------------- 1 | commonPlugins.cmd 2 | commonPlugin_settings.req 3 | -------------------------------------------------------------------------------- /iocBoot/pos_plugin_schema.xsd: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | --------------------------------------------------------------------------------