LSST Applications g0265f82a02+d6b5cd48b5,g02d81e74bb+a41d3748ce,g1470d8bcf6+6be6c9203b,g2079a07aa2+14824f138e,g212a7c68fe+a4f2ea4efa,g2305ad1205+72971fe858,g295015adf3+ab2c85acae,g2bbee38e9b+d6b5cd48b5,g337abbeb29+d6b5cd48b5,g3ddfee87b4+31b3a28dff,g487adcacf7+082e807817,g50ff169b8f+5929b3527e,g52b1c1532d+a6fc98d2e7,g591dd9f2cf+b2918d57ae,g5a732f18d5+66d966b544,g64a986408d+a41d3748ce,g858d7b2824+a41d3748ce,g8a8a8dda67+a6fc98d2e7,g99cad8db69+7fe4acdf18,g9ddcbc5298+d4bad12328,ga1e77700b3+246acaaf9c,ga8c6da7877+84af8b3ff8,gb0e22166c9+3863383f4c,gb6a65358fc+d6b5cd48b5,gba4ed39666+9664299f35,gbb8dafda3b+d8d527deb2,gc07e1c2157+b2dbe6b631,gc120e1dc64+61440b2abb,gc28159a63d+d6b5cd48b5,gcf0d15dbbd+31b3a28dff,gdaeeff99f8+a38ce5ea23,ge6526c86ff+39927bb362,ge79ae78c31+d6b5cd48b5,gee10cc3b42+a6fc98d2e7,gf1cff7945b+a41d3748ce,v24.1.5.rc1
LSST Data Management Base Package
Loading...
Searching...
No Matches
Classes | Functions | Variables
lsst.pipe.tasks.background Namespace Reference

Classes

class  BackgroundConfig
 
class  FocalPlaneBackground
 
class  FocalPlaneBackgroundConfig
 
class  MaskObjectsConfig
 
class  MaskObjectsTask
 
class  SkyMeasurementConfig
 
class  SkyMeasurementTask
 
class  SkyStatsConfig
 

Functions

 robustMean (array, rej=3.0)
 
 interpolate1D (method, xSample, ySample, xInterp)
 
 interpolateBadPixels (array, isBad, interpolationStyle)
 
 smoothArray (array, bad, sigma)
 
 _create_module_child (name)
 

Variables

 pipe_drivers = _create_module_child("lsst.pipe.drivers")
 
 pipe_drivers_background = _create_module_child("lsst.pipe.drivers.background")
 

Function Documentation

◆ _create_module_child()

lsst.pipe.tasks.background._create_module_child ( name)
protected
Create an empty module attached to the relevant parent.

Definition at line 908 of file background.py.

908def _create_module_child(name):
909 """Create an empty module attached to the relevant parent."""
910 parent, child = name.rsplit(".", 1)
911 spec = importlib.machinery.ModuleSpec(name, None)
912 newmod = importlib.util.module_from_spec(spec)
913 setattr(sys.modules[parent], child, newmod)
914 sys.modules[name] = newmod
915 return newmod
916
917
918# This module used to be located in pipe_drivers as
919# lsst.pipe.drivers.background. All pickled datasets using this name
920# require that it still exists as that name. Therefore we create a faked
921# version of lsst.pipe.drivers if that package is not around.

◆ interpolate1D()

lsst.pipe.tasks.background.interpolate1D ( method,
xSample,
ySample,
xInterp )
Interpolate in one dimension

Interpolates the curve provided by `xSample` and `ySample` at
the positions of `xInterp`. Automatically backs off the
interpolation method to achieve successful interpolation.

Parameters
----------
method : `lsst.afw.math.Interpolate.Style`
    Interpolation method to use.
xSample : `numpy.ndarray`
    Vector of ordinates.
ySample : `numpy.ndarray`
    Vector of coordinates.
xInterp : `numpy.ndarray`
    Vector of ordinates to which to interpolate.

Returns
-------
yInterp : `numpy.ndarray`
    Vector of interpolated coordinates.

Definition at line 392 of file background.py.

392def interpolate1D(method, xSample, ySample, xInterp):
393 """Interpolate in one dimension
394
395 Interpolates the curve provided by `xSample` and `ySample` at
396 the positions of `xInterp`. Automatically backs off the
397 interpolation method to achieve successful interpolation.
398
399 Parameters
400 ----------
401 method : `lsst.afw.math.Interpolate.Style`
402 Interpolation method to use.
403 xSample : `numpy.ndarray`
404 Vector of ordinates.
405 ySample : `numpy.ndarray`
406 Vector of coordinates.
407 xInterp : `numpy.ndarray`
408 Vector of ordinates to which to interpolate.
409
410 Returns
411 -------
412 yInterp : `numpy.ndarray`
413 Vector of interpolated coordinates.
414
415 """
416 if len(xSample) == 0:
417 return numpy.ones_like(xInterp)*numpy.nan
418 try:
419 return afwMath.makeInterpolate(xSample.astype(float), ySample.astype(float),
420 method).interpolate(xInterp.astype(float))
421 except Exception:
422 if method == afwMath.Interpolate.CONSTANT:
423 # We've already tried the most basic interpolation and it failed
424 return numpy.ones_like(xInterp)*numpy.nan
425 newMethod = afwMath.lookupMaxInterpStyle(len(xSample))
426 if newMethod == method:
427 newMethod = afwMath.Interpolate.CONSTANT
428 return interpolate1D(newMethod, xSample, ySample, xInterp)
429
430
Interpolate::Style lookupMaxInterpStyle(int const n)
Get the highest order Interpolation::Style available for 'n' points.
std::shared_ptr< Interpolate > makeInterpolate(std::vector< double > const &x, std::vector< double > const &y, Interpolate::Style const style=Interpolate::AKIMA_SPLINE)
A factory function to make Interpolate objects.

◆ interpolateBadPixels()

lsst.pipe.tasks.background.interpolateBadPixels ( array,
isBad,
interpolationStyle )
Interpolate bad pixels in an image array

The bad pixels are modified in the array.

Parameters
----------
array : `numpy.ndarray`
    Image array with bad pixels.
isBad : `numpy.ndarray` of type `bool`
    Boolean array indicating which pixels are bad.
interpolationStyle : `str`
    Style for interpolation (see `lsst.afw.math.Background`);
    supported values are CONSTANT, LINEAR, NATURAL_SPLINE,
    AKIMA_SPLINE.

Definition at line 431 of file background.py.

431def interpolateBadPixels(array, isBad, interpolationStyle):
432 """Interpolate bad pixels in an image array
433
434 The bad pixels are modified in the array.
435
436 Parameters
437 ----------
438 array : `numpy.ndarray`
439 Image array with bad pixels.
440 isBad : `numpy.ndarray` of type `bool`
441 Boolean array indicating which pixels are bad.
442 interpolationStyle : `str`
443 Style for interpolation (see `lsst.afw.math.Background`);
444 supported values are CONSTANT, LINEAR, NATURAL_SPLINE,
445 AKIMA_SPLINE.
446 """
447 if numpy.all(isBad):
448 raise RuntimeError("No good pixels in image array")
449 height, width = array.shape
450 xIndices = numpy.arange(width, dtype=float)
451 yIndices = numpy.arange(height, dtype=float)
452 method = afwMath.stringToInterpStyle(interpolationStyle)
453 isGood = ~isBad
454 for y in range(height):
455 if numpy.any(isBad[y, :]) and numpy.any(isGood[y, :]):
456 array[y][isBad[y]] = interpolate1D(method, xIndices[isGood[y]], array[y][isGood[y]],
457 xIndices[isBad[y]])
458
459 isBad = numpy.isnan(array)
460 isGood = ~isBad
461 for x in range(width):
462 if numpy.any(isBad[:, x]) and numpy.any(isGood[:, x]):
463 array[:, x][isBad[:, x]] = interpolate1D(method, yIndices[isGood[:, x]],
464 array[:, x][isGood[:, x]], yIndices[isBad[:, x]])
465
466
Interpolate::Style stringToInterpStyle(std::string const &style)
Conversion function to switch a string to an Interpolate::Style.

◆ robustMean()

lsst.pipe.tasks.background.robustMean ( array,
rej = 3.0 )
Measure a robust mean of an array

Parameters
----------
array : `numpy.ndarray`
    Array for which to measure the mean.
rej : `float`
    k-sigma rejection threshold.

Returns
-------
mean : `array.dtype`
    Robust mean of `array`.

Definition at line 51 of file background.py.

51def robustMean(array, rej=3.0):
52 """Measure a robust mean of an array
53
54 Parameters
55 ----------
56 array : `numpy.ndarray`
57 Array for which to measure the mean.
58 rej : `float`
59 k-sigma rejection threshold.
60
61 Returns
62 -------
63 mean : `array.dtype`
64 Robust mean of `array`.
65 """
66 q1, median, q3 = numpy.percentile(array, [25.0, 50.0, 100.0])
67 good = numpy.abs(array - median) < rej*0.74*(q3 - q1)
68 return array[good].mean()
69
70

◆ smoothArray()

lsst.pipe.tasks.background.smoothArray ( array,
bad,
sigma )
Gaussian-smooth an array while ignoring bad pixels

It's not sufficient to set the bad pixels to zero, as then they're treated
as if they are zero, rather than being ignored altogether. We need to apply
a correction to that image that removes the effect of the bad pixels.

Parameters
----------
array : `numpy.ndarray` of floating-point
    Array to smooth.
bad : `numpy.ndarray` of `bool`
    Flag array indicating bad pixels.
sigma : `float`
    Gaussian sigma.

Returns
-------
convolved : `numpy.ndarray`
    Smoothed image.

Definition at line 882 of file background.py.

882def smoothArray(array, bad, sigma):
883 """Gaussian-smooth an array while ignoring bad pixels
884
885 It's not sufficient to set the bad pixels to zero, as then they're treated
886 as if they are zero, rather than being ignored altogether. We need to apply
887 a correction to that image that removes the effect of the bad pixels.
888
889 Parameters
890 ----------
891 array : `numpy.ndarray` of floating-point
892 Array to smooth.
893 bad : `numpy.ndarray` of `bool`
894 Flag array indicating bad pixels.
895 sigma : `float`
896 Gaussian sigma.
897
898 Returns
899 -------
900 convolved : `numpy.ndarray`
901 Smoothed image.
902 """
903 convolved = gaussian_filter(numpy.where(bad, 0.0, array), sigma, mode="constant", cval=0.0)
904 denominator = gaussian_filter(numpy.where(bad, 0.0, 1.0), sigma, mode="constant", cval=0.0)
905 return convolved/denominator
906
907

Variable Documentation

◆ pipe_drivers

lsst.pipe.tasks.background.pipe_drivers = _create_module_child("lsst.pipe.drivers")

Definition at line 926 of file background.py.

◆ pipe_drivers_background

lsst.pipe.tasks.background.pipe_drivers_background = _create_module_child("lsst.pipe.drivers.background")

Definition at line 929 of file background.py.