EPICS--areaDetector--ADEiger
内容
一、介绍
这是一个用于来自Dectris的Eiger和Eiger2的EPICS areaDetector驱动程序。已经在固件版本1.6.4+的Eiger 500K, 1M, 4M和16M以及固件2020.2的Eiger2上测试了它。这个驱动程序通过SIMPON REST接口与探测器进行通信,因此不需要来自Dectris的库文件。能够以HDF5文件或者以一个ZeroMQ流或者这二者从探测器拉取图像。文件可以在同时被保存到磁盘和被传递给areaDetector pipeline。
支持所有触发模式,虽然Internal Enable模式似乎没有正常工作。见已知问题。
这个驱动继承自ADDriver。它实现了在asynNDArrayDriver和在ADDriver中很多参数。它也实现了Eiger探测器很多专有参数。eigerDetector类详细地描述这个类。
此文档不尝试解释Eiger专有参数的含义,由于在来自SIMPLON API Reference中和EIGER Detector手册文件中解释了它们。有时它引用了那些参数如它们在Dectris文档中命名。
SIMPLON API提供了查询参数限制、对应枚举的有效值,错误状况等的方式。如果这些值超出了可接受范围,这个驱动程序将限制这些值在其最小和最大值。设置一个参数将立即推送其值到探测器。
这个驱动程序被构建在一个多线程架构上。一个线程组合被用于同时从探测器拉取文件,保存它们到磁盘以及解析它们为NDArrays。一个专用线程被用于以一个ZeroMQ流接收图像。
一些Eiger参数是在IOC初始化时被设置并且预计不会更改。即是:
- detector/config/auto_summation=true
- filewriter/config/image_nr_start=1
- monitor/config/buffer_size=1
二、访问新参数
一些参数与这个驱动程序运行没有关系,并且像这样参数初始未被这个驱动程序暴露为PVs。有一种访问未由这个驱动程序自动创建的其它参数的机制,通过用合适的drvInfo字符串实例话新记录。其中一些PVs是用此方式创建。例如PV XPixelSize_RBV有以下drvInfo:
EIG_DCD_x_pixel_size
对于那些参数,前4个字符必须是EIG_。接着第五个字符必须是以下之一:
- D:探测器子系统
- M:监视器子系统
- F:FileWriter子系统
- S:流子系统
第六个字符确定这个参数是一个配置或者一个状态参数:
- C:配置
- S:状态
第七个字符确定要使用哪个asyn参数类型:
- I:整数(asynParamInt32)
- D:双精度浮点(asynParamFloat64)
- S:字符串(asynParamOctet)
第八个字符必须是一个"_" 并且剩下的字符是根据SIMPLON API手册的参数名称。因而,对于这个示例,PV将访问这个参数:
detector/api/<version>/config/x_pixel_size
三、触发模式
有六种可用的触发模式:
- Internal Series:一个内部触发脉冲产生N张图片
- Internal Enable:一个内部触发脉冲产生一张图片
- External Series:一个外部脉冲产生N张图片
- External Enable:一个外部脉冲产生一张图片
- Continous:与internal series相同,但在series后自动重启。
- External Gate:这种模式至于在Eiger2上新固件一起使用,Eiger2每个像素有两个计数器。行为取决于设置ExtGateMode PV。
由Internal和External Series模块产生的图片总数是由NumImages和NumTrigers PVs的积给出(在Dectris术语中nimages和ntriggers)。
在Internal Enable和External Enabl模式,产生的图片总数唯一由NumTriggers PV(ntriggers)给出。NumImages在采集过程中临时被设成了1。
由运行Trigger PV发送对应Internal Enable的触发。每个单独图片的曝光是由TriggerExposure PV给出,并且在相同采集中触发之间变化。这个模式作为固件1.5.0的试验。
四、手动触发
在Internal Series和Internal Enable模式,如果ManualTrigger PV设为Yes,触发不是由驱动自动产生。而是由运行Trigger PV发送它们。在Internal Enable模式,触发携带能够未每次触发更改的曝光值,其是由TriggerExposure PV设置。注意:Internal Enable是作为固件1.5.0的试验。见已知问题。
五、数据采集
能够用数种方法从探测器拉取由Eiger产生的数据。探测器有三个模块,它们使得采集结果用不同方法获取。FileWrite模块以HDF5文件写产生的图像到探测器磁盘,这些HDF5文件由一个主(头)文件和很多数据文件组成。Stream模块使得图像尽快以一个ZeroMQ被捕获来获取。Monitor模块有规律地产生TIFF图像来监视一个长时间采集如何进行。
来自FileWriter或来自Stream模式地数据可以被解析成用于areaDetector pipeline地NDArray。用DataSource PV选择实际源。如果DataSource被设置成None,将没有数据被发送给areaDetector pipeliine,但探测器通过这个areaDetector驱动仍然是可控地;独立于这个驱动的第三方驱动则能够拉取文件或者监听ZeroMQ流。
5.1 使用FileWriter
当FWEnable设置为Yes时,FileWriter模块被激活。由FileWriter产生的文件有根据FWNamePattern PV的名称。默认模式是"series_$id",此处$id将被采集的顺序ID替代。探测器成功地armed时立即产生一个主文件。很多数据文件随后。产生数据文件的数目取决于采集的图像数目和FWNFilesPerImage PV。
例如,如果触发模式是External Enable,NumImage是60, NumTrigers是2,FWNImagesPerFile是100,对应采集的顺序ID是1并且FWNImagePattern是"series_$id",将产生总共3个文件:
- series_1_master.h5
- series_1_data_000001.h5(有100张图)
- series_1_data_000002.h5(有20张图)
如果DataSource设置为FileWriter或者SaveFiles设置为Yes,产生文件将被下载。在文件可以获取时尽快下载它们。要确定一个文件是否可用,这个驱动以名义速率10Hz轮询这个探测器。当一个文件正在被处理时,并行下载下一个可用文件。除非FWAutoRemove被设置成Yes,否则所有文件将在探测器磁盘上保留。
当保存文件到磁盘时(SaveFiles=Yes),用FileOwner, FileOwnerGrp和FilePerms PVs设置文件的所有者。其组和其访问权限是可能的。要能够设置任意所有者,IOC可执行程序需要CAP_SETUID和CAP_SETGID能力,用以下这条命令能够赋予这个能力。
sudo setcap cap_setuid, cap_setgid+ep eigerDectorApp
通过运行FWClear PV,能够一次删除在探测器磁盘上所有文件。这仅对Eiger1和Simplon API版本1.6.0可用。
如果一个系列的最后数据文件没有满(例如:有20张图的series_1_data.000002.h5),则只在一个其清空FileWriter缓存的disarm(在停止采集时被发送)命令后,它才出现在探测器磁盘上。
5.2 使用Stream
当StreamEnable被设置成Yes时,Stream模块被激活。则数据将在探测器的tcp端口9999以一个ZMQ_PUSH套接字上获取。如果DataSource被设置成了Stream,这个驱动打开一个相应的ZMQ_PULL套接字并且解析到来的数据为NDArrays。另外,第三方客户端能够在那个套接字上监听数据。在Eiger SIMPLON API文档中指定了这个包的格式。
5.3 使用Monitor
当MonitorEnable设置成Yes时,Monitor模块被激活。当monitor模块缓存满时(有一张可用图片),数据将可用。这个驱动为数据可用等待MonitorTimout ms。有一个10Hz速率限制。一旦下载,TIFF图像将在NDArrayAddr 1上被解析成areaDetector的NDArray。(因而,一个独立的NDArray流)。
六、晶体参数
一些参数以用于采集的元数据方式可用。这些参数被存储在主文件上并且在ZeroMQ流中以元数据被发送,但除了相应地设置光子能量的Wavelength参数外,不影响采集。
七、标准驱动参数的实现
以下表格描述了Eiger驱动如何实现在asynNDArrayDriver.h和ADDriver.h,ADBase.template和NDFile.template中定义的一些标准驱动参数。
EPICS记录名称 | Eiger参数 | 描述 |
$(P)$(R)TriggerMode $(P)$(R)TriggerMode_RBV |
detector/config/trigger_mode |
为探测器设置触发模式。可选是: 1) Internal Series 2) Internal Enable 3) External Series 4) External Enable 5) External Gate(仅限有2021固件的Eiger2) |
$(P)$(R)NumImages, $(P)$(R)NumImages_RBV |
detector/config/nimages | 当在Internal Series或External Series模式时,设置每次触发采集的图像数目。 |
$(P)$(R)NumExposures, $(P)$(R)NumExposures_RBV |
detector/config/nexpi | 在External Gate触发模式中设置每张图片的曝光次数。 |
$(P)$(R)AcquireTime, $(P)$(R)AcquireTime_RBV |
detector/config/count_time | 设置参数"count_time",其是在Internal Series或External Series模式中单张图像的曝光时间。 |
$(P)$(R)AcquirePeriod, $(P)$(R)AcquirePeriod_RBV |
detector/config/frame_time | 设置参数"frame_time",其直接影响探测器的帧率。产生的帧率是1/AcquirePeriod。 |
$(P)$(R)DataType_RBV | N.A |
图像数据的数据类型。这取决于Eiger模块,AcquirePeroid(帧率)和AquireTime(曝光时间)。用长曝光时间,它是UInt32,用中等曝光时间,它是UInt16,而用非常高帧率,它是UInt32。例如,在Eiger2 500K上: 1)AcquireTime>0.0066ms:DataType_RBV=UInt32 2)AcquirePeriod<0.00045(2200帧/s):DataTypeRBV=UInt32 3)不是上述条件:DataType_RBV=UInt16 |
$(P)$(R)TemperatureActual |
detector/status/board_000/ th0_temp |
读取探测器实际温度 |
$(P)$(R)MaxSizeX_RBV | N.A | 探测器传感器在X方向尺寸 |
$(P)$(R)MaxSizeY_RBV | N.A | 探测器传感器在Y方向尺寸 |
$(P)$(R)ArraySizeX_RBV | detector/config/x_pixels_in_detector | 当前探测器在X方向的传感器尺寸。这可以根据选择的ROI模式更改。 |
$(P)$(R)ArraySizeY_RBV | detector/config/y_pixels_in_detector | 当前探测器在Y方向的传感器尺寸。这可以根据选择的ROI模式更改。 |
$(P)$(R)Manufacturer_RBV, $(P)$(R)Model_RBV |
detector/config/description | 读取探测器制造商(Dectris)和模块(Eiger xx M) |
$(P)$(R)SerialNumber_RBV | detector/config/detector_number | 探测器序列号 |
$(P)$(R)FirmwareVersion_RBV | detector/config/eiger_fw_version | 探测器固件版本 |
$(P)$(R)SDKVersion_RBV | detector/api/version | Simplon API版本 |
$(P)$(R)DriverVersion_RBV | N.A | 这个驱动的版本 |
八、Eiger特有的参数
除了在asynNDArrayDriver.h和ADDriver.h中的参数外,Eiger驱动还实现了以下参数。大部分记录是在eigerBase.template中,并且是Eiger1和Eiger2都有的。Eiger1特有记录是在eiger1.template,Eiger2特有记录是在eiger2.template,一些记录仅在Eiger1,而一些记录仅在Eiger2。
8.1 探测器信息
Eiger参数 | 描述 | EPICS记录名 | EPICS记录类型 |
detector/config/description | 探测器的制造商和模块 | Description_RBV | stringin |
detector/config/x_pixel_size | 在X方向探测器像素尺寸(米为单位) | XPixelSize_RBV | ai |
detector/config/y_pixel_size | 在Y方向探测器像素尺寸(米为单位) | YPixelSize_RBV | ai |
detector/config/sensor_material | 探测器的传感器材料 | SensorMaterial_RBV | stringin |
detector/config/sensor_thickness |
探测器的传感器厚度 (米为单位) |
SensorThickness_RBV | ai |
detector/config/detector_readout_time | 探测器在帧之间的读取时间(死时间)。随着不同阈值能量变化 | DeadTime_RBV | ai |
8.2 探测器状态
Eiger参数 | 描述 | EPICS记录名称 | EPICS记录类型 |
N.A. | 初始化探测器DCU。这条命令花费很多秒。 | Initialize | busy |
detector/status/state | 探测器的状态。 | State_RBV | stringin |
detector/status/error | 产生一个错误状态的参数列表 | Error_RBV | stringin |
detector/status/board_000 /th0_temp |
第一个模块的温度 | Temp0_RBV | stringin |
detector/status/board_000 /th0_humidity |
第一个模块的湿度 | Humid0_RBV | ai |
detector/status/link_0 detector/status/link_1 detector/status/link_2 detector/status/link_3 |
探测器服务器和头之间四个链接的状态。 |
Link0_RBV Link1_RBV Link2_RBV Link3_RBV |
bi |
detector/status/builder /dcu_buffer_free |
探测器空闲的内部缓存的百分比。低值可能表示一个问题。只限Eiger1 | DCUBufferFree_RBV | ai |
N.A. | 高压重置时间。只限Eiger 2 |
HVResetTime HVResetTime_RBV |
ao,ai |
N.A. | 高压重置命令。关闭HVResetTime的高压并且接着开启它。只限Eiger 2。 | HVReset | bo |
detector/status/high_voltate /state |
高压状态。高压的状态。只限Eiger 2。 | HVState_RBV | stringin |
8.3 采集设置
Eiger参数 | 描述 | EPICS记录名 | EPICS记录类型 |
detector/config/threhold_energy | 对应采集的能量阈1。这在Eiger1上是唯一阈。 |
Threshold, Threshold_RBV |
ao,ai |
detector/config/thresold/1/mode | 启用或禁用阈1。仅Eiger2 |
Thresold1Enable Thresold1Enable_RBV |
bo, bi |
detector/config/threhold/2/energy | 对应采集的能量阈2。仅Eiger2 |
Threshold2, Threshold2_RBV |
ao,ai |
detector/config/threhold/2/mode | 启用或禁用阈2。仅阈2 |
Threshold2Enable, Threshold2Enable_RBV |
bo,bi |
detector/config/threhold/difference /mode |
启用或禁用差模,此处输出图像是threshold1-threshold2。仅Eiger2 |
ThresholdDiffEnable, ThresholdDiffEnable_RBV |
bo,bi |
detector/config/photon_energy | 对应采集的光子能量 |
PhotoEnergy, PhotoEnergy_RBV |
ao,ai |
detector/config/counting_mode | 计数模式。"Normal"或"Retrigger"。仅限Eiger2。 |
CountingMode, CountingMode_RBV |
bo,bi |
8.4 触发设置
Eiger参数 | 描述 | EPICS记录名 | EPICS记录类型 |
detector/config/extg_mode | 当TriggerMode=External Gate时,使用的模式。选项是"Pump&Probe"和"HDR"。只限有2021固件的Eiger2 |
ExtGateMode, ExtGateMode_RBV |
mbbo mbbi |
detector/command/trigger | 在模式Internal Series和Internal Enable,当设置了ManualTrigger时,使用的软件触发器 | Trigger | ao |
N.A. | 在Internal Enable触发模式,与触发一起使用的曝光 |
TriggerExposure, TriggerExposure_RBV |
ao,ai |
detector/config/ntrigger | 采集的触发次数 |
NumTriggers, NumlTriggers_RBV |
ao,ai |
N.A. | 在Internal Series和Internal Enable模式,控制将自动或者通过Trigger PV(1)发送触发。 |
ManualTrigger, ManualTrigger_RBV |
bo,bi |
detector/config/ trigger_start_delay |
在采取行动前在接收到触发信号后延时时间(秒为单位) |
TriggerStartDelay, TriggerStartDelay_RBV |
ao,ai |
8.5 读出设置
Eiger参数 | 描述 | EPICS记录名 | 记录类型 |
detector/config/ roi_mode |
使用哪个ROI模式。仅在Eiger 9M和16M上支持。选项是: 1) Disabled 2) 4M |
ROIMode ROIMode_RBV |
mbbo mbbi |
detector/config/ flatfield_correction_applied |
控制是否使用flatfield校正。 |
FlatfieldApplied, FlatfieldApplied_RBV |
bo,bi |
detector/config/ countrate_correction_applied |
控制是否使用计数速率矫正 |
CountrateCorrApplied, CountrateCorrApplied_RBV |
bo,bi |
detector/config/ pixel_mask_applied |
控制是否使用像素掩模 |
PixelMaskApplied, PixelMaskApplied_RBV |
bo,bi |
detector/config/ auto_summation |
控制是否应该进行自动求和 |
AutoSummation, AutoSummation_RBV |
bo,bi |
detector/config/ compression |
当启用压缩时,要使用的压缩算法。选项是: 1) lz4 2) bslz4(bitshuffle lz4) 3) None(仅API 1.8.0) 将总是在Stream ZMQ接口上使用选取的算法。如果FWCompression=Enabled,它也将用于由FileWriter接口写的HDF5文件。 |
CompressionAlgo CompressionAlgo_RBV |
mbbo, mbbi |
N.A. |
哪个数据源用于areaDetector pipeline。有效值: 1) None 2) FileWriter 3) Stream |
DataSource DataSource_RBV |
mbbo mbbi |
8.6 采集状态
Eiger参数 | 描述 | EPICS记录名 | 类型 |
N.A. |
探测器的Armed状态 | Armed | bi |
detector/config/ bit_depth_image |
图像数据的位深。这取决于Eiger模块、AcqurePeriod(帧率)和AcquireTime(曝光时间)。在长曝光时间,它是32,在一个中间帧率,它是16,而在非常高的帧率,它是8。例如,在Eiger2 500K: 1) AcquireTime>0.0066ms:BitDepthImage_RBV=32 2) AcquirePeriod<0.00045(2200帧/s):BitDepthImage_RBV=8 3) 不满足以上条件:BitDepthImage_RBV=16 |
$(P)$(R) BitDepathImage _RBV |
longin |
detector/config/ countrate_correction_count_cutoff |
由于帧率矫正,探测器将在数次计数后终止。 | CountCutoff_RBV | ai |
8.7 FileWriter接口
Eiger参数 | 描述 | EPICS记录名 | 记录类型 |
filewriter/config/mode | 启用或禁用FileWriter模块 |
FWEnable, FWEnable_RBV |
bo,bi |
filewriter/status/state | FileWriter模块的状态 |
FWEnable, FWEnable_RBV |
stringin |
filewriter/config/ compression_enabled |
为由DCU写的HDF5文件启用或禁用LZ4或BSLZ4压缩。 |
FWCompression, FWCompression_RBV |
bo,bi |
filewriter/config/ nimages_per_file |
每个HDF5数据文件的图像数目 |
FWNImgsPerFIle, FWNImgsPerFIle_RBV |
ao,ai |
filewriter/config/ name_pattern |
产生的HDF5文件的名称模式。模式可以是任何东西,但它必须在它中包含字符串"$id"。这个字符串被采集的当前顺序id替代。默认是:"series_$id",它将产生这些文件: * series_1_master.h5 * series_1_data_000001.h5 * series_1_data_000002.h5 * ... |
FWNamePattern, FWNamePattern_RBV |
stringout, stringin |
N.A. | 当前采集的顺序ID | SquenceId | ai |
N.A. | 控制采集的文件是否应该被本地保存到磁盘 |
SaveFiles, SaveFiles_RBV |
bo,bi |
N.A. | 控制保存到磁盘的文件所有者。需要这个IOC有CAP_SETUID能力 |
FileOwner, FileOwner_RBV |
stringout, stringin |
N.A. | 控制保存到磁盘的文件的所有组。需要IOC有CAP_SETGID能力。 |
FileOwnerGrp, FileOwnerGrp_RBV |
stringout stringin |
N.A. | 控制保存到磁盘的文件的权限。正常Linux八进制位掩码格式,为所有者/所有组/其它,例如,0666是r+w所有者,组和其它。 | FilePerms | ao |
filewriter/status/ buffer_free |
在探测器磁盘上的空闲空间 | FWFree_RBV | ai |
N.A. | 控制是否从探测器磁盘删除被下载的文件。 |
FWAutoRemove, FWAutoRemove_RBV |
bo,bi |
filewriter/config/ clear |
写这个PV清除在探测器服务器磁盘上所有文件。仅Eiger1 | FWClear | ao |
8.8 Stream接口
Eiger参数 | 描述 | EPICS记录名 | EPICS记录类型 |
stream/config/mode | 启用或禁用Stream模块 |
StreamEnable, StreamEnable_RBV |
bo,bi |
stream/status/state | Stream模块的状态 | StreamState_RBV | stringin |
N.A. | 控制来自Stream接口的NDArrays是被解压缩(Yes)或被压缩(No) |
StreamDecompress, StreamDecompress_RBV |
bo,bi |
stream/config/ header_detail |
选择对应Stream API Headers的详细程度。选项是: 1) All 2) Basic 3) None |
StreamHdrDetail, StreamHdrDetail_RBV |
mbbo, mbbi |
stream/config/ header_appendix |
设置被追加到Stream API header的文本 | StreamHdrAppendix | wavefrom |
stream/config/ image_appendix |
设置被追加到Stream API的文本 | StreamImgAppendix | wavefrom |
stream/status/dropped | 指明在上次采集中丢失了多少图像。 | StreamDropped_RBV | ai |
8.9 Monitor接口
Eiger参数 | 描述 | EPICS记录名 | EPICS记录类型 |
monitor/config/mode | 启用或禁用Monitor模块 |
MonitorEnable MonitorEnable_RBV |
bo,bi |
monitor/status/state | Monitor模块的状态 | MonitorState_RBV | stringin |
N.A. | 对应在Monitor接口上请求新图像的超时时间 |
MonitorTimeout MonitorTimeout_RBV |
ao,ai |
8.10 采集元数据
Eiger参数 | 描述 | EPICS记录名 | EPICS记录类型 |
detector/config/ beam_center_x |
束线X位置 |
BeamX, BeamX_RBV |
ao,ai |
detector/config/ beam_center_y |
束线Y位置 |
BeamY, BeamY_RBV |
ao,ai |
detector/config/ detector_distance |
探测器距离 |
DetDist, DetDist_RBV |
ao,ai |
detector/config/ wavelength |
束线波长。在光子能量变化时,这个参数自动变化。 |
Wavelength, Wavelength_RBV |
ao,ai |
8.11 探测器元数据
Eiger参数 | 描述 | EPICS记录名 | EPICS记录类型 |
detector/config/ chi_start |
设置Chi角值 |
ChiStart, ChiStart_RBV |
ao,ai |
detector/config/ chi_increment |
设置每帧吃角增量 |
ChiIncr, ChiIncr_RBV |
ao,ai |
detector/config/ kappa_start |
设置Kappa角值 |
KappaStart, KappaStart_RBV |
ao,ai |
detector/config/ kappa_increment |
设置每帧Kappa角增量 |
KappaIncr, KappaIncr_RBV |
ao,ai |
detector/config/ omega_start |
设置Phi角值。 |
PhiStart, PhiStart_RBV |
ao,ai |
detector/config/ omega_increment |
设置每帧Phi角增量 |
PhiIncr, PhiIncr_RBV |
ao,ai |
detector/config/ phi_start |
设置TwoTheta角的值 |
TwoThetaStart TwoThetaStart_RBV |
ao,ai |
detector/config/ phi_increment |
设置每帧TwoTheta角增量 |
TwoThetaIncr, TwoThetaIncr_RBV |
ao,ai |
detector/config/ two_theta_start |
|||
detector/config/ two_theta_increment |
8.12 允许最小的变化
Eiger参数 | 描述 | EPICS记录名 | EPICS记录类型 |
N.A. | 允许波长的最小变化量 |
WavelengthEps, WavelengthEps_RBV |
ao,ai |
N.A. | 允许光子能量的最小变化量 |
EnergyEps, EnergyEps_RBV |
ao,ai |
九、不受支持的标准驱动参数
在本文档中没有提到的所有标准参数都不被支持。
十、配置
从C/C++或从EPICS IOC shell用eigerDetectorConfig命令创建Eiger驱动:
int eigerDetectorConfig(const char *portName, const char *hostname,int maxBuffers, size_t maxMemory, int priority, int stackSize)
有关这个函数参数含义的详细情况,参考在eigerDetector中有关eigerDetectorConfig函数的详细文档以及在对应eigerDetector class的构造函数文档。
随areaDetector一起提供了一个IOC启动目录和启动脚本的示例。
十一、medm窗口
以下显示了medm窗口,其用于控制Eiger和Eiger2探测器。注意:可以使用通用的窗口ADBase.adl,但它暴露了一些不适用于Eiger的PVs,并且缺少了对Eiger重要的很多PVs。
eigerDetector.adl是用于控制Eiger1探测器的窗口。
eiger2Detector.adl是用于控制Eiger2探测器的窗口。
十二、适用两个能量阈值
Eiger2探测器支持2个能量阈值。阈值1必须能量总是低于阈值2。这些可以被独立地启用,但必须至少启用两个阈值之一。如果二者都被启用,ThresholdDiffEnable将产生为阈值1-阈值2之间差异的图像。
用放在探测器前两个放射源采集以下图像。在左侧是Fe55,其大约在5.9Kev产生Mn Ka x射线。在右侧是Cd109,其在大约23Kev产生Ag Ka x射线。阈值1设成了3.0Kev,大约是Fe55 x射线能量的50%。阈值2设置为11Kev,大约为Cd109 x射线能量的50%。
用Threshold1Enable=Enable和Threshold2Enable=Disable采集这张图。注意:因为两个元都在3Kev以上,它们都被探测到了。
用Threshold1Enable=Disable和Threshold2Enable=Enable采集这张图。注意:因为Fe55源低于11KeV,没有探测到它。
用Threshold1Enable=Enable和Threshold2Enable=Enable采集这张图。注意:仅探测到了Fe55,因为在3Kev和11Kev之上的任何事件都被丢弃。
十三、已知问题
更改光子能量
取决于探测器尺寸,更改光子能量是一个慢操作。在16M上,它大约花费10秒种。其它参数也花费这么长,因为它们也影响光子能量,即阈值能量和波长。StatusMessage PV指示设置任何这些参数何时开始和结束。
为了防止对能量和波长的微小或意外更改花费太长时间被应用,只在所需值和当前值之间的差值大于某个配置的参数时,才更新它们的值。尤其,只在它们产生差值岛屿WavelengthEps(默认:0.0005埃)时波长的更改才生效。类似,对光子能量的更改,只在阈值1和阈值2大于EnergyEps(默认:0.05ev)时,阈值1和阈值2才生效。
状态参数轮询
每次运行ReadStatus PV时,读取一些状态参数。一个高速率轮询产生问题,有时当一个参数被设置成一个无效值一起时,引起探测器挂起。
Internal Enable模式
Internal Enable模式被Dectris标记为试验的。在此时,它非常脆弱(固件1.5.0)并且经常不产生本该产生的所有文件。
示例启动脚本st.cmd
errlogInit(20000)< envPathsdbLoadDatabase("$(TOP)/dbd/DexelaApp.dbd")
DexelaApp_registerRecordDeviceDriver(pdbbase) # Prefix for all records
epicsEnvSet("PREFIX", "13DEX1:")
# The port name for the detector
epicsEnvSet("PORT", "DEX1")
# The queue size for all plugins
epicsEnvSet("QSIZE", "20")
# The maximim image width; used for row profiles in the NDPluginStats plugin
epicsEnvSet("XSIZE", "2048")
# The maximim image height; used for column profiles in the NDPluginStats plugin
epicsEnvSet("YSIZE", "2048")
# The maximum number of time seried points in the NDPluginStats plugin
epicsEnvSet("NCHANS", "2048")
# The maximum number of frames buffered in the NDPluginCircularBuff plugin
epicsEnvSet("CBUFFS", "500")
# The search path for database files
epicsEnvSet("EPICS_DB_INCLUDE_PATH", "$(ADCORE)/db")# Create a Dexels driver
# DexelaConfig(const char *portName, detIndex, maxBuffers, size_t maxMemory, int priority, int stackSize)# This is for the first detector in the system
DexelaConfig("$(PORT)", 0, 0, 0, 0, 0)asynSetTraceIOMask($(PORT), 0, 2)
#asynSetTraceMask($(PORT),0,0xff)dbLoadRecords("$(ADDEXELA)/db/Dexela.template", "P=$(PREFIX),R=cam1:,PORT=$(PORT),ADDR=0,TIMEOUT=1")# Create a standard arrays plugin, set it to get data from Driver.
NDStdArraysConfigure("Image1", 3, 0, "$(PORT)", 0)
# Set NELEMENTS to at least the total number of pixels in the detector. The following is a little larger than 4096 x 4096
dbLoadRecords("$(ADCORE)/db/NDStdArrays.template", "P=$(PREFIX),R=image1:,PORT=Image1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=$(PORT),TYPE=Int16,SIZE=16,FTVL=SHORT,NELEMENTS=17000000")# Load all other plugins using commonPlugins.cmd
< $(ADCORE)/iocBoot/commonPlugins.cmd
set_requestfile_path("$(ADDEXELA)/dexelaApp/Db")iocInit()# save things every thirty seconds
create_monitor_set("auto_settings.req", 30, "P=$(PREFIX)")
EPICS--areaDetector--ADEiger相关推荐
- EPICS -- areaDetector URL驱动程序
一.介绍 这是一个用于从一个URL读取一个EPICS areaDetector驱动程序.它能用于从网络摄像头(Axis vedio servers)或者仅从一个磁盘文件读取图片.它使用GraphicM ...
- EPICS教程5 -- areaDetector模块安装
本次安装系统为Rocky Linux release 8.5 1 打开一个命令行终端,切换到root权限,执行以下安装命令,安装依赖包: [root@rockygu ~]# dnf install e ...
- epics安装css,EPICS-synApps/areaDetector安装
1. 下载安装synApps areaDetector安装需要EPICS base与asyn,synApps模块安装环境,因此需要先安装synApps. wget https://epics.anl. ...
- EPICS教程1 -- 在Linux/UNIX/DARWIN(MAC)上安装
1.1 EPICS有关于什么? 我们假设你多少知道EPICS是什么.这里我们从头开始并且达到这一点:我们有一台提供某些用于读取(caget或pvget)和写入(caput或pvput)的PVs的工作服 ...
- matlab epics,基于EPICS/MATLAB图像处理的光束位置测量系统
同步辐射光源,需测定X射线光束线位置,常用的光斑位置探测器(X-rayBeamPositionMonitor,XBPM)有刀片式BPM和丝BPM等.刀片式BPM利用X射线在一对刀片上产生的光电流之比与 ...
- Centos7下areaDetector IOC的编译后记
https://github.com/EPICS-synApps/support/releases synApps出新版了,本文发文时的最新版为:R6-2 Centos7下areaDetector I ...
- Centos7下areaDetector IOC的编译
准备: Centos7ministall的系统: root权限下: yum install -y epel-release yum install -y git wget gcc gcc-c++ au ...
- EPICS synApps介绍
一.synApps是什么? 1) 一个用于同步束线用户的EPICS模块集合. 2) EPICS模块 alive, autosave, busy, calc, camac, caputRecorder, ...
- 使用areaDetector和medm打开海康威视MV-CA004-10GM相机
前言 前面拙作centos7 编译epics和areadetector中相机介绍了在centos下面编译EPICS base包.利用assemble_synsApps.sh文件获取synsApps_6 ...
最新文章
- 文章如何做伪原创 SEO大神教你几招做原创网站文章的心得
- 高并发环境下的Nginx该如何优化,让用户再也不会说卡
- linux常用操作符,Shell常用操作符总结
- 软考考前冲刺第十三章UML建模
- 前端学习(1484):json-server工具使用
- Android UI(四)云通讯录项目之云端更新进度条实现
- android poi读写,Android-android中怎样使用poi
- html5之Canvas坐标变换应用-时钟实例
- 简单C#生成静态及相关读取模板文件
- JavaScript正则表达式 1
- SQL最全基础教程(保证你看了绝对点赞收藏)
- ARM、DSP、FPGA比较——非常详细深入
- 计算机中临时存储数据指令的部件,第一单元 探索计算机的奥秘
- 对 ESX/ESXi 上的网络和 TCP/UDP 端口连接问题进行故障排除 (2020669)
- 仿真器(emulator)和模拟器(simulator)区别可以认为Emulator是Simualtor和真机之间的一层
- ETL工程师的岗位详情岗位职责
- 【多线程】采用Callable接口创建线程
- 关于Flash的一些随想(2021年)
- 腾讯云2核2G、2核4G、4核8G、8核16G、16核32G服务器价格出炉
- html+css 实现红绿灯效果