MCA-2K Data Server Reference

MCA-1K

Introduction

USB driver

MCA-2K Device

Data structures

Overview

Module Constants

ARM Data structures

Version

Status

Controls

Calibration

Histogram

Two-channel Logger

Pulse capture

Lossless listmode

Perceptron-powered PSD

API

Overview

MCA-2K Data Structure: arm_ctrl

Summary

The arm_ctrl data structure is used to control all aspects of the MCA-2K operation. The documentation applies to PMT and SiPM-based MCA-2K systems, such as the PMT-2000 and the SiPM-2000.

Data structure

For arm_ctrl these are the 'register' and 'field' data in use. All register data are 32-bit floats (float32).

arm_ctrl registers and fields — Operation and calibration
Register number and field nameDescription
AC0: gain_stabilizationBit field governing gain stabilization, cf 'user' table below.
AC1: peltierEither fixed Peltier power (0 to 100%) or maximum power; To allow a host control loop (only in SiPM-based systems with a Peltier controller; eg SiPM-1010).
AC2: temp_ctrl0 → Use ARM temperature sensor; 1 → Use external temperature sensor; [4:7]=> (0→ no Peltier cooling; 1→ constant cooling power; 2→ control loop)
AC3: temp_targetReserved; In SiPM-based systems with a Peltier cooler, this field has the target temperature.
AC4: temp_periodUpdate period for temperature measurements
AC5: temp_weightWeight for geometric averaging: Purpose is noise reduction or matching thermal relaxation
AC6: cal_tempTemperature (in deg C) at which the detector was calibrated
AC7: cal_ovOperating voltage when the detector was calibrated
AC8: cal_dgDigital gain when the detector was calibrated (reserved for future use)
AC9: cal_targetTarget value for ROI or LED measured response; used with gain_stab=2,3
AC10: cal_roi_low
AC11: cal_roi_high
[roi_low : roi_high] => Region of interest used when gain-stabilizing on ROI (reserved for future use).
All arm_ctrl registers and fields concerning operation settings and calibration
arm_ctrl registers and fields — Count rate measurement
Register number and field nameDescription
AC12: run_modeRun mode is a bit field
AC13: run_actionRun_action is a bit field, with self-clearing bits; cf 'user' table below.
AC13[0]: clear_statisticsClear data for the active counter bank.
AC14: run_time_sampleRequested run time for sample counting; 0→ forever
AC15: run_time_bckRequested run time for background counting; 0→ forever
AC16: alarm_thrAlarm threshold for foreground vs bck; If the probability of the foreground data being caused by the accepted background is less than this, an alarm will be raised (AS7[2])
AC17: roi_lowROI for count rate and alarming purpose
AC18: roi_highROI for count rate and alarming purpose.
arm_ctrl registers and fields concerning count rate measurements.
arm_ctrl registers and fields — time-slice operation
Register number and field nameDescription
AC19: ts_periodCurrently fixed at 100ms.
AC20: ts_resetSet to 2 to reset the time-slice (Portal Monitor) alarm system.
AC21: ts_LSummation length for alarm computation
AC22: ts_HHistory length for alarms; maximum length of alarm before resetting
AC23: ts_waitMinimum wait time until we will accept alarms, having sufficient background accuracy
AC24: ts_BBackground averaging length
AC25: ts_epsAlarm threshold for time-slice system
AC26: trigger_widthOutput pulse width, for alarms.
arm_ctrl registers and fields concerning the time-slice subsystem
arm_ctrl registers and fields — MCA core operation
Register number and field nameDescription
AC27: trigger_thresholdTrigger threshold in V; typ 0.015V, range 0..3V
AC28: integration_timeLight pulse integration time; Use 1.2e-6 for NaI.
AC29: led_widthWidth of the desired LED light pulse; typically 1e-6 to 3e-6.
AC35: led_shiftLED pulses measure as very high energies, potentially falling out the histogram range. Use led_shift to divide the measured LED energy: division factor is 2L
AC30: cal_eventsNumber of events to average to create a new LED or ROI average. Use 1000 with an LED.
AC32: hold_offHold off time; ie enforced dead time after a trigger. It is set to equal or greater than the integration time. It is used to avoid retriggering on the falling edge of a previous scintillator pulse.
AC34: gain_selectSelect a gain setting of 0, 1, 2, 3, or 4. On the PMT-2000 this will result in transimpedance gains of 100Ω, 430Ω, 1100Ω, 3400Ω, and 10.1kΩ,
AC36: base_thresholdNoise threshold separating background electronic noise from real scintillator pulses. This parameter controls measuring the baseline and is normally set to 0.003.
AC37: pile_upUsed for pile up rejection; cf user's manual.
AC38: trace_delayWhen recording scintillator pulses, use trace_delay to shift the pulse right-ward in the display.
AC39: lm_lsbListmode arrival times: 1LSB=2**x clock cycles. 0≤x≤15. At 24MHz FPGA clock speed, tthe highest list mode arrival time resolution is 43ns and the 20-bit time would roll over after 43.7ms; for x=0. At the other extreme, x=15, the resolution is 1.365ms and the roll over time is 1432s.
arm_ctrl registers and fields for MCA core control; note that the MCA core is implemented in an FPGA.
arm_ctrl registers and fields — Miscellaneous
AC31: baud_rateBaud rate for the RS-232/485 serial communication.
AC33: xctrl_0Logger control. xctrl_0[7:0] ⇒ Logger dwell time in multiples of 50ms time slices. Set to 0 to turn logger off. xctrl_0[15:8] ⇒ Input data source for logger channel 0; xctrl_0[23:16] ⇒ Input data source for logger channel 1. Input data source is arm_status[] index - for example 4 for CPU temperature. There are two computed data source: 256 ⇒ number of events recorded during dwell time; 257 ⇒ number of events falling into the alarm ROI recorded during dwell time;
AC38: boot_waitWait time in seconds before the ARM processor boots and activates the USB interface. Usually set to 0. An embedded computer may not be intentionally powering its USB interface during a cold boot. In that case it is best to delay the ARM booting until after the host computer has booted up.
Miscellaneous arm_ctrl registers and fields
arm_ctrl — user entries, Gain Stabilization (AC0) and Run Mode (AC12)
Register number and field nameDescription
gs_modeAC0[0:3]; 0→OFF, 1→LUT, ie use lookup table for temperature correction, 2→LED, Use an LED and the LED lookup table;
histogram_runAC12[0]; Activate acquiring counting and histogram data
acq_typeAC12[3:1]; Type of data acquisition: 0→ standard histogram, 1→ Counting only, 2→ Histogram with noise suppression, 3→ Arrival times, 4→ neutron detectors.
active_bankAC12[4]; Select which bank will be active: 0→ foreground, 1→ background.
read_clearAC12[5]; 1→ Enable read_and_clear feature for counting. When enabled a histogram and counter bank is set to zero after a data read.
two_bankAC12[6]; Enable automatic selection of the inactive bank for reading and clearing. User then toggles active bank when desired.
histo_4kAC12[7]; Use one 4K×32 sample histogram (no background histogram)
sample_alarmAC12[8]; Compute alarm probability for foreground vs background
time_sliceAC12[9]; Activate time slice system and dynamic alarming. Performs alarm computations 10 times per second; for portal monitors and backpacks.
rs_485AC12[10]; Activate the RS-485 driver for long-distance serial communication.
xpuAC12[11]; Activate enhanced pile-up rejection algorithm in the FPGA; cf user's manual.
amplitudeAC12[12]; Histogram pulse heights in mV, instead of pulse energies. Used during calibration, to select the maximum detectable energy.
psd_onAC12[13]; Activate the built-in perceptron for AI-powered pulse shape discrimination.
psd_selectAC12[14]; 0→Split histogram with entries in the lower and upper half depending on how the perceptron classifies each event. 0→1 histogram the perceptron output itself (PSD value), to judge the pulse shape dicrimination power of the perceptron.
psd_rejectAC12[15]; 0→Off; 1→ in combination with psd_on=1: Only histogram the energies of those events whose PSD value falls into the left half of the PSD spectrum; cf psd_select=1.
lm_bufferAC12[16]; 0 or 1. Select the active list mode buffer.
The arm_ctrl user dictionary is used to pack and unpack bit fields.
arm_ctrl — user entries, Run Action AC13
Register number and field nameDescription
clear_statisticsAC13[0]; Clears the time and event counter of the targeted bank. Targeted bank is active_bank if two_bank=0. It is the inactive bank if two_bank=1.
clear_histogramAC13[1]; Clears the histogram of the targeted bank. Targeted bank is active_bank if two_bank=0. It is the inactive bank if two_bank=1.
clear_alarmAC13[2]; Clears a persisent alarm output on trigger_out; eg from a portal monitor alarm.
clear_loggerAC13[3]; Reset the logger to begin recording data at index 0.
clear_wall_clockAC13[4]; Reset the ARM processor wall clock to zero.
clear_traceAC13[5]; Clear the FPGA wall clock used to measure event arrival times for list mode data acquisition.
ut_runAC13[6]; Force a new trace acquisition, not waiting for a trigger; untriggered run.
clear_listmodeAC13[7]; Reset the listmode event counter to zero. Note that the other data entries in the list mode buffer are not set to zero.
clear_lmtimeAC13[8]; Clear the FPGA wall clock used to measure event arrival times for list mode data acquisition.
All actions encoded in AC13 are automatically set to zero after use by the ARM processor. Client software must be careful not to re-issue the actions unintentionally.