Peak-finders
A set of peak-finding algorithms developed for analysis of data from LCLS pixel array detectors.
Interface
from ... import imagealgos peaks = imagealgos.peaks_adapt_thr(data, mask, rank, nsigm, base_r, base_dr, do_base_sub=False, npix_min=None, npix_max=None, thr_atot=None, son_min=None) peaks = imagealgos.peaks_two_thr(data, mask, rank, thr_low, thr_high, base_r, base_dr, do_base_sub=False, npix_min=None, npix_max=None, thr_atot=None, son_min=None)
Input
arguments:
data :
numpy.array, ndim=2
- 2-d data numpy array for processing- [
numpy.array
] - list of 2-d data numpy arrays for processing, ndim=2
numpy.array
,
- a set of 2-d data numpy arrays for processing; last two indexes are used as 2-d row and column, higher indexes are compacted to the 1-dim segment indexndim>2
mask : numpy.array (dtype=np.uint16) | None
- array should have the same structure as data
or None if non-applicable - pixel mask with 0/1 for bad/good pixel
rank : int
- radial size of the pixel region (2*rank+1
rows and columns) around central pixel
thr
_low : float
- low threshold on pixel intensity
thr_high
: float
- high threshold on pixel intensity
nsigm : float
- threshold in number of noise rms
base_r
: float
- internal radius of the ring for evaluation of base level mean and rms (noise)
base_dr
: float
- width of the ring for evaluation of base level mean and rms (noise)
keyword arguments :
do_base_sub : bool
- enable subtraction of local base level from signal
npix_min
: int
- minimum number of pixels in the peak
npix_max
: int
- maximum number of pixels in the peak
thr_atot
: float
- threshold on total peak intensity
son_min
: float
- threshold on signal over noise (S/N) value
Output
peaks
:
dict
- dictionary of
arrays/lists - most natural order to work with a single value for many peaks
dict keywords:
row : array
ofint
- row of the central pixel with maximal intensity in the square region defined byrank
col : array
ofint
- column of the central pixel with maximal intensity in the square region defined byrank
seg : array
ofint
- segment index fordata
, e.g. in CSPAD consisting of 32 segments this index should be in the range from 0 to 31.ndim>2
npix : array
ofint
- number of pixels accounted in the peakamp_max : array
offloat
- maximal intensity among peak pixelsamp_total : array
offloat
- total intensity of pixels accounted in the peakrow_cgmean : array
offloat
- "center of gravity" row coordinate evaluated for pixels accounted in the peak using their intensities as weightscol_cgmean : array
offloat
- "center of gravity" column coordinate evaluated for pixels accounted in the peak using their intensities as weightsraw_cgrms : array
offloat
- "center of gravity" row coordinate rmscol_cgrms : array
offloat
- "center of gravity" column coordinate rmsbase : array
offloat
- per pixel base level mean estimated for pixels in the ring region (parameters
) around peak centerbase_r
, base_dr
noise : array
offloat
- per pixel base level rms estimated for pixels in the ring region (parameters
) around peak centerbase_r
, base_dr
son : array
offloat
- signal over noise ratio estimated asamp_total
/(noise * sqrt(
npix
))peak
ofinds
: listnumpy.array(ndim=2)
- list of the peak-pixelrow,col
indexes. Shape of the array for each peak is(npix,2)
.peakmap : array
shaped as data ofint
- map with pixels marked by peak numbers
Peak-finding algorithms
Each peak-finding algorithm works in a few stages. First stage is a search for peak candidates or "seed" peaks and this is a most distinctive part between algorithms:
- peaks_two_thr - is a two-threshold peak-finding algorithm searching for groups of connected pixels with intensity above
thr
_low
in the square region restricted by the parameterrank
around central pixel with intensity exceedingthr_high
. In the loop over all pixels each pixel with intensity grater or equalthr_high
is considered as a peak candidate. For each candidate recursive algorithm is launched and searches for a group of connected pixels with intensity grater or equalthr
_low
in the square region with dimensions2*rank+1
pixel in rows and columns. Pixels of the group are marked as busy and are not used in other groups. Central pixel of the peak candidate should have maximal intensity in the group of connected pixels, otherwise recursion is terminated and all group pixels released for further search. Two neighbor pixels with intensity abovethr
_low
having common boarder are assumed connected. Two pixels having a single common vertex are assumed disconnected. Base level mean,base
, and rms,noise
, values are evaluated for pixels in the ring with internal radiusbase_r
and widthbase_dr
around central pixel. Pixels with intensity abovethr
_low
are excluded from evaluation of the base level parameters.
- peaks_adapt_thr - is an adaptive-threshold peak-finding algorithm searching peak candidates as group of connected pixels with intensity above dynamically evaluated threshold around local intensity maximums of specified
rank
. Maps of local maximums and minimums of specifiedrank
are generated fordata
array. Parameterrank
defines a square region with dimensions2*rank+1
pixels in rows and columns around central pixel. Each local maximum of specifiedrank
is considered as a peak candidate. Its base level mean,base
, and rms,noise
, values are evaluated using surrounding pixels in the ring with internal radiusbase_r
and widthbase_dr
. Pixels marked as local maximums and minimums (for symmetry) of specifiedrank
in rows and columns are excluded in evaluation of the base level parameters.Then, for each peak candidate local adaptive-threshold parameterthr=
is used. Recursive algorithm searches for the group of connected pixels with intensity above local thresholdbase
+nsigm*noisethr
in therank
-restricted region.NOTE:
due to excluded extremes the base level rms is under-estimated in this algorithm, so, set parameternsigm
wisely.
Other stages of all peak-finding algorithms are about the same.
- returned values of
amp_max
andamp_total
are base level corrected by subtractingbase
andbase
*
, respectively, if do_base_sub=True.npix
- signal over noise
son
is evaluated asamp_total
/(noise * sqrt(
,npix
)) - output dictionary of peak parameters is generated from the list of seed peaks complying with selection parameters
npix_min, npix_max, amax_thr, atot_thr, son_min
.