LSST Applications g0f08755f38+c89d42e150,g1635faa6d4+b6cf076a36,g1653933729+a8ce1bb630,g1a0ca8cf93+4c08b13bf7,g28da252d5a+f33f8200ef,g29321ee8c0+0187be18b1,g2bbee38e9b+9634bc57db,g2bc492864f+9634bc57db,g2cdde0e794+c2c89b37c4,g3156d2b45e+41e33cbcdc,g347aa1857d+9634bc57db,g35bb328faa+a8ce1bb630,g3a166c0a6a+9634bc57db,g3e281a1b8c+9f2c4e2fc3,g414038480c+077ccc18e7,g41af890bb2+e740673f1a,g5fbc88fb19+17cd334064,g7642f7d749+c89d42e150,g781aacb6e4+a8ce1bb630,g80478fca09+f8b2ab54e1,g82479be7b0+e2bd23ab8b,g858d7b2824+c89d42e150,g9125e01d80+a8ce1bb630,g9726552aa6+10f999ec6a,ga5288a1d22+065360aec4,gacf8899fa4+9553554aa7,gae0086650b+a8ce1bb630,gb58c049af0+d64f4d3760,gbd46683f8f+ac57cbb13d,gc28159a63d+9634bc57db,gcf0d15dbbd+e37acf7834,gda3e153d99+c89d42e150,gda6a2b7d83+e37acf7834,gdaeeff99f8+1711a396fd,ge2409df99d+cb1e6652d6,ge79ae78c31+9634bc57db,gf0baf85859+147a0692ba,gf3967379c6+02b11634a5,w.2024.45
LSST Data Management Base Package
Loading...
Searching...
No Matches
Classes | Functions | Variables
lsst.scarlet.lite.initialization Namespace Reference

Classes

class  FactorizedChi2Initialization
 
class  FactorizedInitialization
 
class  FactorizedWaveletInitialization
 

Functions

tuple[np.ndarray, Boxtrim_morphology (np.ndarray morph, float bg_thresh=0, int padding=5)
 
tuple[Box, np.ndarray|None] init_monotonic_morph (np.ndarray detect, tuple[int, int] center, Box full_box, int padding=5, bool normalize=True, Monotonicity|None monotonicity=None, float thresh=0)
 
np.ndarray multifit_spectra (Observation observation, Sequence[Image] morphs, Image|None model=None)
 

Variables

 logger = logging.getLogger("scarlet.lite.initialization")
 

Function Documentation

◆ init_monotonic_morph()

tuple[Box, np.ndarray | None] lsst.scarlet.lite.initialization.init_monotonic_morph ( np.ndarray detect,
tuple[int, int] center,
Box full_box,
int padding = 5,
bool normalize = True,
Monotonicity | None monotonicity = None,
float thresh = 0 )
Initialize a morphology for a monotonic source

Parameters
----------
detect:
    The 2D detection image contained in `full_box`.
center:
    The center of the monotonic source.
full_box:
    The bounding box of `detect`.
padding:
    The number of pixels to grow the morphology in each direction.
    This can be useful if initializing a source with a kernel that
    is known to be narrower than the expected value of the source.
normalize:
    Whether or not to normalize the morphology.
monotonicity:
    When `monotonicity` is `None`,
    the component is initialized with only the
    monotonic pixels, otherwise the monotonicity operator is used to
    project the morphology to a monotonic solution.
thresh:
    The threshold (fraction above the background) to use for trimming the
    morphology.

Returns
-------
bbox:
    The bounding box of the morphology.
morph:
    The initialized morphology.

Definition at line 70 of file initialization.py.

78) -> tuple[Box, np.ndarray | None]:
79 """Initialize a morphology for a monotonic source
80
81 Parameters
82 ----------
83 detect:
84 The 2D detection image contained in `full_box`.
85 center:
86 The center of the monotonic source.
87 full_box:
88 The bounding box of `detect`.
89 padding:
90 The number of pixels to grow the morphology in each direction.
91 This can be useful if initializing a source with a kernel that
92 is known to be narrower than the expected value of the source.
93 normalize:
94 Whether or not to normalize the morphology.
95 monotonicity:
96 When `monotonicity` is `None`,
97 the component is initialized with only the
98 monotonic pixels, otherwise the monotonicity operator is used to
99 project the morphology to a monotonic solution.
100 thresh:
101 The threshold (fraction above the background) to use for trimming the
102 morphology.
103
104 Returns
105 -------
106 bbox:
107 The bounding box of the morphology.
108 morph:
109 The initialized morphology.
110 """
111 center: tuple[int, int] = tuple(center[i] - full_box.origin[i] for i in range(2)) # type: ignore
112
113 if monotonicity is None:
114 _, morph, bounds = prox_monotonic_mask(detect, center, max_iter=0)
115 bbox = bounds_to_bbox(bounds)
116 if bbox.shape == (1, 1) and morph[bbox.slices][0, 0] == 0:
117 return Box((0, 0)), None
118
119 if thresh > 0:
120 morph, bbox = trim_morphology(morph, bg_thresh=thresh, padding=padding)
121
122 # Shift the bounding box to account for the non-zero origin
123 bbox += full_box.origin
124
125 else:
126 morph = monotonicity(detect, center)
127
128 # truncate morph at thresh * bg_rms
129 morph, bbox = trim_morphology(morph, bg_thresh=thresh, padding=padding)
130 # Shift the bounding box to account for the non-zero origin
131 bbox += full_box.origin
132
133 if np.max(morph) == 0:
134 return Box((0, 0), origin=full_box.origin), None
135
136 if normalize:
137 morph /= np.max(morph)
138
139 if padding is not None and padding > 0:
140 # Pad the morphology to allow it to grow
141 bbox = bbox.grow(padding)
142
143 # Ensure that the bounding box is inside the full box,
144 # even after padding.
145 bbox = bbox & full_box
146 return bbox, morph
147
148

◆ multifit_spectra()

np.ndarray lsst.scarlet.lite.initialization.multifit_spectra ( Observation observation,
Sequence[Image] morphs,
Image | None model = None )
Fit the spectra of multiple components simultaneously

Parameters
----------
observation:
    The class containing the observation data.
morphs:
    The morphology of each component.
model:
    An optional model for sources that are not factorized,
    and thus will not have their spectra fit.
    This model is subtracted from the data before fitting the other
    spectra.

Returns
-------
spectra:
    The spectrum for each component, in the same order as `morphs`.

Definition at line 149 of file initialization.py.

153) -> np.ndarray:
154 """Fit the spectra of multiple components simultaneously
155
156 Parameters
157 ----------
158 observation:
159 The class containing the observation data.
160 morphs:
161 The morphology of each component.
162 model:
163 An optional model for sources that are not factorized,
164 and thus will not have their spectra fit.
165 This model is subtracted from the data before fitting the other
166 spectra.
167
168 Returns
169 -------
170 spectra:
171 The spectrum for each component, in the same order as `morphs`.
172 """
173 _bands = observation.bands
174 n_bands = len(_bands)
175 dtype = observation.images.dtype
176
177 if model is not None:
178 image = observation.images - model
179 else:
180 image = observation.images.copy()
181
182 morph_images = np.zeros((n_bands, len(morphs), image.data[0].size), dtype=dtype)
183 for idx, morph in enumerate(morphs):
184 _image = morph.repeat(observation.bands)
185 _image = Image.from_box(image.bbox, bands=image.bands).insert(_image)
186 morph_images[:, idx] = observation.convolve(_image).data.reshape(n_bands, -1)
187
188 spectra = np.zeros((len(morphs), n_bands), dtype=dtype)
189
190 for b in range(n_bands):
191 a = np.vstack(morph_images[b]).T
192 spectra[:, b] = np.linalg.lstsq(a, image[observation.bands[b]].data.flatten(), rcond=None)[0]
193 spectra[spectra < 0] = 0
194 return spectra
195
196

◆ trim_morphology()

tuple[np.ndarray, Box] lsst.scarlet.lite.initialization.trim_morphology ( np.ndarray morph,
float bg_thresh = 0,
int padding = 5 )
Trim the morphology up to pixels above a threshold

Parameters
----------
morph:
    The morphology to be trimmed.
bg_thresh:
    The morphology is trimmed to pixels above the threshold.
padding:
    The amount to pad each side to allow the source to grow.

Returns
-------
morph:
    The trimmed morphology
box:
    The box that contains the morphology.

Definition at line 40 of file initialization.py.

44) -> tuple[np.ndarray, Box]:
45 """Trim the morphology up to pixels above a threshold
46
47 Parameters
48 ----------
49 morph:
50 The morphology to be trimmed.
51 bg_thresh:
52 The morphology is trimmed to pixels above the threshold.
53 padding:
54 The amount to pad each side to allow the source to grow.
55
56 Returns
57 -------
58 morph:
59 The trimmed morphology
60 box:
61 The box that contains the morphology.
62 """
63 # trim morph to pixels above threshold
64 mask = morph > bg_thresh
65 morph[~mask] = 0
66 bbox = Box.from_data(morph, threshold=0).grow(padding)
67 return morph, bbox
68
69

Variable Documentation

◆ logger

lsst.scarlet.lite.initialization.logger = logging.getLogger("scarlet.lite.initialization")

Definition at line 37 of file initialization.py.