kernels.ccdclip
kernels.ccdclip(
arr,
*,
mask=None,
sigma=(3.0, 3.0),
maxiters=5,
ddof=0,
nkeep=1,
maxrej=None,
cenfunc='median',
clip_cen=None,
revert_on_nkeep=True,
rdnoise=0.0,
gain=1.0,
snoise=0.0,
scale_ref=1.0,
zero_ref=0.0,
grow=None,
validate=True,
)CCD noise-model clipping.
Parameters
arr : (ndarray, shape(N, *spatial))-
Image stack. Accepted dtypes are
uint8,uint16,int16,int32,float32, andfloat64. Integer inputs are promoted to the package’s floating workspace whenvalidateisTrue. Inputs with more than 3 dimensions are flattened internally; output shapes match the trailing spatial dimensions of the input. mask : ndarray of bool = None-
Input mask;
Truemeans already masked. Must have the same shape asarrbefore any internal flattening. sigma : float or tuple of float = (3.0, 3.0)-
User-supplied clipping multiplier, not the measured data spread itself. Values are clipped when their residual from the clipping center exceeds
sigma * spread. A scalar applies the same multiplier to both tails; a 2-tuple(sigma_lower, sigma_upper)clips asymmetrically. Thresholds must be finite and non-negative. maxiters : int = 5-
Maximum number of clipping iterations per pixel.
ddof : int = 0-
Delta degrees of freedom for the per-pixel spread estimator.
nkeep : int = 1-
Minimum number of unmasked values to preserve at each pixel. An iteration that would drop below this count is reverted in full. The default,
1, prevents clipping from rejecting every finite sample in a per-output stack. Set0only when all samples may be rejected. maxrej : int or None = None-
Maximum number of values that may be rejected at each pixel.
Nonemeans no limit. cenfunc : ('median', 'lmedian', 'mean') = "median"-
Center estimator used each iteration.
lmedianaccepts the aliaslmedand uses the lower of the two middle samples for even valid counts. clip_cen : ('median', 'lmedian', 'mean') = "median"-
Center used when computing the spread for iterative rejection.
Noneuses the same center ascenfunc;lmedianalso acceptslmed. revert_on_nkeep : bool = True-
If
True, an iteration that would leave fewer thannkeepusable samples at a pixel is reverted in full for that pixel. Input masks, threshold masks, and non-finite samples remain excluded. The default isTrue. IfFalse, clipping is strict and may leave fewer thannkeepsamples. rdnoise : float = 0.0-
Read noise in electrons.
snoise : float = 0.0-
Sky-noise coefficient. Adds a Poisson-like contribution scaled by the local count level.
scale_ref : float = 1.0-
Reference scale factor. Typically the inverse of the exposure-time normalization applied during reduction.
zero_ref : float = 0.0-
Reference zero-point offset. Accounts for a known DC bias that shifts the effective noise level.
grow : float or None = None-
Optional radius in pixels used to grow
mask_rejspatially after rejection. Axis 0 is the stack axis and is never grown across.Nonedisables growth and skips the extra calculation. validate : bool = True-
If
True, check dimensionality and normalize dtype/contiguity before entering the Rust kernel. IfFalse, callers must provide inputs that satisfy the compiled kernel assumptions.
Returns
mask_rej : ndarray of bool, shape (N, *spatial)-
Truewhere a value was rejected by this kernel.mask_rej.sum(axis=0)is the per-output rejected count. std : (ndarray, shape(*spatial) or None)-
Per-pixel spread used by sigma/CCD clipping.
Nonefor rejection algorithms without a spread diagnostic. low : (ndarray, shape(*spatial))-
Lower retained-value bound. Bounds are inclusive: values equal to
loware retained. upp : (ndarray, shape(*spatial))-
Upper retained-value bound. Bounds are inclusive: values equal to
uppare retained. nit : ndarray of uint8, shape (*spatial)-
Iteration-count map.
output_flags : ndarray of uint8, shape (*spatial)-
Bit-coded status.
0means normal completion; bit1means at least one pre-masked sample at this output element; bit16meansgrowadded at least one rejected sample at this output element. Iterative kernels also use bit2for maxiters, bit4fornkeep, and bit8formaxrej. Bits are OR-ed.output_flagsis a per-output diagnostic; usemask_rej.sum(axis=0)to count samples rejected by this step.
Notes
The kernel evaluates CCD rejection on gain-corrected scratch values (electrons). The per-pixel noise threshold is approximately::
sqrt((1 + snoise) * abs(noise_center + zero_ref) * scale_ref + rdnoise**2)