LSST Applications  21.0.0-172-gfb10e10a+18fedfabac,22.0.0+297cba6710,22.0.0+80564b0ff1,22.0.0+8d77f4f51a,22.0.0+a28f4c53b1,22.0.0+dcf3732eb2,22.0.1-1-g7d6de66+2a20fdde0d,22.0.1-1-g8e32f31+297cba6710,22.0.1-1-geca5380+7fa3b7d9b6,22.0.1-12-g44dc1dc+2a20fdde0d,22.0.1-15-g6a90155+515f58c32b,22.0.1-16-g9282f48+790f5f2caa,22.0.1-2-g92698f7+dcf3732eb2,22.0.1-2-ga9b0f51+7fa3b7d9b6,22.0.1-2-gd1925c9+bf4f0e694f,22.0.1-24-g1ad7a390+a9625a72a8,22.0.1-25-g5bf6245+3ad8ecd50b,22.0.1-25-gb120d7b+8b5510f75f,22.0.1-27-g97737f7+2a20fdde0d,22.0.1-32-gf62ce7b1+aa4237961e,22.0.1-4-g0b3f228+2a20fdde0d,22.0.1-4-g243d05b+871c1b8305,22.0.1-4-g3a563be+32dcf1063f,22.0.1-4-g44f2e3d+9e4ab0f4fa,22.0.1-42-gca6935d93+ba5e5ca3eb,22.0.1-5-g15c806e+85460ae5f3,22.0.1-5-g58711c4+611d128589,22.0.1-5-g75bb458+99c117b92f,22.0.1-6-g1c63a23+7fa3b7d9b6,22.0.1-6-g50866e6+84ff5a128b,22.0.1-6-g8d3140d+720564cf76,22.0.1-6-gd805d02+cc5644f571,22.0.1-8-ge5750ce+85460ae5f3,master-g6e05de7fdc+babf819c66,master-g99da0e417a+8d77f4f51a,w.2021.48
LSST Data Management Base Package
Public Member Functions | Public Attributes | Static Public Attributes | List of all members
lsst.meas.algorithms.simple_curve.AmpCurve Class Reference
Inheritance diagram for lsst.meas.algorithms.simple_curve.AmpCurve:
lsst.meas.algorithms.simple_curve.Curve

Public Member Functions

def __init__ (self, amp_name_list, wavelength, efficiency, metadata)
 
def __eq__ (self, other)
 
def fromTable (cls, table)
 
def toTable (self)
 
def evaluate (self, detector, position, wavelength, kind='linear', bounds_error=False, fill_value=0)
 
def __init_subclass__ (cls, **kwargs)
 
def compare_metadata (self, other, keys_to_compare=['MODE', 'TYPE', 'CALIBDATE', 'INSTRUME', 'OBSTYPE', 'DETECTOR'])
 
def interpolate (self, wavelengths, values, wavelength, kind, bounds_error, fill_value)
 
def getMetadata (self)
 
def readText (cls, filename)
 
def readFits (cls, filename)
 
def writeText (self, filename)
 
def writeFits (self, filename)
 

Public Attributes

 data
 
 wavelength
 
 efficiency
 
 metadata
 

Static Public Attributes

string mode = 'AMP'
 
 subclasses = dict()
 

Detailed Description

Subclass of `Curve` that represents a curve per amp.

Parameters
----------
amp_name_list : iterable of `str`
    The name of the amp for each entry
wavelength : `astropy.units.Quantity`
    Wavelength values for this curve
efficiency : `astropy.units.Quantity`
    Quantum efficiency values for this curve
metadata : `dict`
    Dictionary of metadata for this curve

Definition at line 331 of file simple_curve.py.

Constructor & Destructor Documentation

◆ __init__()

def lsst.meas.algorithms.simple_curve.AmpCurve.__init__ (   self,
  amp_name_list,
  wavelength,
  efficiency,
  metadata 
)

Definition at line 347 of file simple_curve.py.

347  def __init__(self, amp_name_list, wavelength, efficiency, metadata):
348  super().__init__(wavelength, efficiency, metadata)
349  amp_names = set(amp_name_list)
350  self.data = {}
351  for amp_name in amp_names:
352  idx = numpy.where(amp_name_list == amp_name)[0]
353  # Deal with the case where the keys are bytes from FITS
354  name = amp_name
355  if isinstance(name, bytes):
356  name = name.decode()
357  self.data[name] = (wavelength[idx], efficiency[idx])
358 
daf::base::PropertySet * set
Definition: fits.cc:912

Member Function Documentation

◆ __eq__()

def lsst.meas.algorithms.simple_curve.AmpCurve.__eq__ (   self,
  other 
)
Define equality for this class

Reimplemented from lsst.meas.algorithms.simple_curve.Curve.

Definition at line 359 of file simple_curve.py.

359  def __eq__(self, other):
360  if not self.compare_metadata(other):
361  return False
362  for k in self.data:
363  if not numpy.array_equal(self.data[k][0], other.data[k][0]):
364  return False
365  if not numpy.array_equal(self.data[k][1], other.data[k][1]):
366  return False
367  return True
368 

◆ __init_subclass__()

def lsst.meas.algorithms.simple_curve.Curve.__init_subclass__ (   cls,
**  kwargs 
)
inherited
Register subclasses with the abstract base class

Definition at line 126 of file simple_curve.py.

126  def __init_subclass__(cls, **kwargs):
127  """Register subclasses with the abstract base class"""
128  super().__init_subclass__(**kwargs)
129  if cls.mode in Curve.subclasses:
130  raise ValueError(f'Class for mode, {cls.mode}, already defined')
131  Curve.subclasses[cls.mode] = cls
132 

◆ compare_metadata()

def lsst.meas.algorithms.simple_curve.Curve.compare_metadata (   self,
  other,
  keys_to_compare = ['MODE', 'TYPE', 'CALIBDATE', 'INSTRUME', 'OBSTYPE', 'DETECTOR'] 
)
inherited
Compare metadata in this object to another.

Parameters
----------
other : `Curve`
    The object with which to compare metadata.
keys_to_compare : `list`
    List of metadata keys to compare.

Returns
-------
same : `bool`
    Are the metadata the same?

Definition at line 138 of file simple_curve.py.

139  keys_to_compare=['MODE', 'TYPE', 'CALIBDATE', 'INSTRUME', 'OBSTYPE', 'DETECTOR']):
140  """Compare metadata in this object to another.
141 
142  Parameters
143  ----------
144  other : `Curve`
145  The object with which to compare metadata.
146  keys_to_compare : `list`
147  List of metadata keys to compare.
148 
149  Returns
150  -------
151  same : `bool`
152  Are the metadata the same?
153  """
154  for k in keys_to_compare:
155  if self.metadata[k] != other.metadata[k]:
156  return False
157  return True
158 

◆ evaluate()

def lsst.meas.algorithms.simple_curve.AmpCurve.evaluate (   self,
  detector,
  position,
  wavelength,
  kind = 'linear',
  bounds_error = False,
  fill_value = 0 
)
Interpolate the curve at the specified position and wavelength.

Parameters
----------
detector : `lsst.afw.cameraGeom.Detector`
    Is used to find the appropriate curve given the position for
    curves that vary over the detector.  Ignored in the case where
    there is only a single curve per detector.
position : `lsst.geom.Point2D`
    The position on the detector at which to evaluate the curve.
wavelength : `astropy.units.Quantity`
    The wavelength(s) at which to make the interpolation.
kind : `str`, optional
    The type of interpolation to do (default is 'linear').
    See documentation for `scipy.interpolate.interp1d` for
    accepted values.
bounds_error : `bool`, optional
    Raise error if interpolating outside the range of x?
    (default is False)
fill_value : `float`, optional
    Fill values outside the range of x with this value
    (default is 0).

Returns
-------
value : `astropy.units.Quantity`
    Interpolated value(s).  Number of values returned will match the
    length of `wavelength`.

Raises
------
ValueError
    If the ``bounds_error`` is changed from the default, it will raise
    a `ValueError` if evaluating outside the bounds of the curve.

Reimplemented from lsst.meas.algorithms.simple_curve.Curve.

Definition at line 401 of file simple_curve.py.

401  def evaluate(self, detector, position, wavelength, kind='linear', bounds_error=False, fill_value=0):
402  # Docstring inherited from base classs
403  amp = cgUtils.findAmp(detector, Point2I(position)) # cast to Point2I if Point2D passed
404  w, e = self.data[amp.getName()]
405  return self.interpolate(w, e, wavelength, kind=kind, bounds_error=bounds_error,
406  fill_value=fill_value)
407 
408 
Point< int, 2 > Point2I
Definition: Point.h:321

◆ fromTable()

def lsst.meas.algorithms.simple_curve.AmpCurve.fromTable (   cls,
  table 
)
Class method for constructing a `Curve` object.

Parameters
----------
table : `astropy.table.QTable`
    Table containing metadata and columns necessary
    for constructing a `Curve` object.

Returns
-------
curve : `Curve`
    A `Curve` subclass of the appropriate type according
    to the table metadata

Reimplemented from lsst.meas.algorithms.simple_curve.Curve.

Definition at line 370 of file simple_curve.py.

370  def fromTable(cls, table):
371  # Docstring inherited from base classs
372  cls._check_cols(['amp_name', 'wavelength', 'efficiency'], table)
373  return cls(table['amp_name'], table['wavelength'],
374  table['efficiency'], table.meta)
375 

◆ getMetadata()

def lsst.meas.algorithms.simple_curve.Curve.getMetadata (   self)
inherited
Return metadata

Returns
-------
metadata : `dict`
    Dictionary of metadata for this curve.

Definition at line 187 of file simple_curve.py.

187  def getMetadata(self):
188  """Return metadata
189 
190  Returns
191  -------
192  metadata : `dict`
193  Dictionary of metadata for this curve.
194  """
195  # Needed to duck type as an object that can be ingested
196  return self.metadata
197 

◆ interpolate()

def lsst.meas.algorithms.simple_curve.Curve.interpolate (   self,
  wavelengths,
  values,
  wavelength,
  kind,
  bounds_error,
  fill_value 
)
inherited
Interplate the curve at the specified wavelength(s).

Parameters
----------
wavelengths : `astropy.units.Quantity`
    The wavelength values for the curve.
values : `astropy.units.Quantity`
    The y-values for the curve.
wavelength : `astropy.units.Quantity`
    The wavelength(s) at which to make the interpolation.
kind : `str`
    The type of interpolation to do.  See documentation for
    `scipy.interpolate.interp1d` for accepted values.

Returns
-------
value : `astropy.units.Quantity`
    Interpolated value(s)

Definition at line 159 of file simple_curve.py.

159  def interpolate(self, wavelengths, values, wavelength, kind, bounds_error, fill_value):
160  """Interplate the curve at the specified wavelength(s).
161 
162  Parameters
163  ----------
164  wavelengths : `astropy.units.Quantity`
165  The wavelength values for the curve.
166  values : `astropy.units.Quantity`
167  The y-values for the curve.
168  wavelength : `astropy.units.Quantity`
169  The wavelength(s) at which to make the interpolation.
170  kind : `str`
171  The type of interpolation to do. See documentation for
172  `scipy.interpolate.interp1d` for accepted values.
173 
174  Returns
175  -------
176  value : `astropy.units.Quantity`
177  Interpolated value(s)
178  """
179  if not isinstance(wavelength, u.Quantity):
180  raise ValueError("Wavelengths at which to interpolate must be astropy quantities")
181  if not (isinstance(wavelengths, u.Quantity) and isinstance(values, u.Quantity)):
182  raise ValueError("Model to be interpreted must be astropy quantities")
183  interp_wavelength = wavelength.to(wavelengths.unit)
184  f = interp1d(wavelengths, values, kind=kind, bounds_error=bounds_error, fill_value=fill_value)
185  return f(interp_wavelength.value)*values.unit
186 

◆ readFits()

def lsst.meas.algorithms.simple_curve.Curve.readFits (   cls,
  filename 
)
inherited
Class method for constructing a `Curve` object from
the standardized FITS format.

Parameters
----------
filename : `str`
    Path to the FITS file to read.

Returns
-------
curve : `Curve`
    A `Curve` subclass of the appropriate type according
    to the table metadata

Definition at line 218 of file simple_curve.py.

218  def readFits(cls, filename):
219  """Class method for constructing a `Curve` object from
220  the standardized FITS format.
221 
222  Parameters
223  ----------
224  filename : `str`
225  Path to the FITS file to read.
226 
227  Returns
228  -------
229  curve : `Curve`
230  A `Curve` subclass of the appropriate type according
231  to the table metadata
232  """
233  table = QTable.read(filename, format='fits')
234  return cls.subclasses[table.meta['MODE']].fromTable(table)
235 

◆ readText()

def lsst.meas.algorithms.simple_curve.Curve.readText (   cls,
  filename 
)
inherited
Class method for constructing a `Curve` object from
the standardized text format.

Parameters
----------
filename : `str`
    Path to the text file to read.

Returns
-------
curve : `Curve`
    A `Curve` subclass of the appropriate type according
    to the table metadata

Definition at line 199 of file simple_curve.py.

199  def readText(cls, filename):
200  """Class method for constructing a `Curve` object from
201  the standardized text format.
202 
203  Parameters
204  ----------
205  filename : `str`
206  Path to the text file to read.
207 
208  Returns
209  -------
210  curve : `Curve`
211  A `Curve` subclass of the appropriate type according
212  to the table metadata
213  """
214  table = QTable.read(filename, format='ascii.ecsv')
215  return cls.subclasses[table.meta['MODE']].fromTable(table)
216 

◆ toTable()

def lsst.meas.algorithms.simple_curve.AmpCurve.toTable (   self)
Convert this `Curve` object to an `astropy.table.QTable`.

Returns
-------
table : `astropy.table.QTable`
    A table object containing the data from this `Curve`.

Reimplemented from lsst.meas.algorithms.simple_curve.Curve.

Definition at line 376 of file simple_curve.py.

376  def toTable(self):
377  # Docstring inherited from base classs
378  wavelength = None
379  efficiency = None
380  names = numpy.array([])
381  # Loop over the amps and concatenate into three same length columns to feed
382  # to the Table constructor.
383  for amp_name, val in self.data.items():
384  # This will preserve the quantity
385  if wavelength is None:
386  wunit = val[0].unit
387  wavelength = val[0].value
388  else:
389  wavelength = numpy.concatenate([wavelength, val[0].value])
390  if efficiency is None:
391  eunit = val[1].unit
392  efficiency = val[1].value
393  else:
394  efficiency = numpy.concatenate([efficiency, val[1].value])
395  names = numpy.concatenate([names, numpy.full(val[0].shape, amp_name)])
396  names = numpy.array(names)
397  # Note that in future, the astropy.unit should make it through concatenation
398  return QTable({'amp_name': names, 'wavelength': wavelength*wunit, 'efficiency': efficiency*eunit},
399  meta=self.metadata)
400 
std::vector< SchemaItem< Flag > > * items

◆ writeFits()

def lsst.meas.algorithms.simple_curve.Curve.writeFits (   self,
  filename 
)
inherited
 Write the `Curve` out to a FITS file.

Parameters
----------
filename : `str`
    Path to the FITS file to write.

Returns
-------
filename : `str`
    Because this method forces a particular extension return
    the name of the file actually written.

Definition at line 274 of file simple_curve.py.

274  def writeFits(self, filename):
275  """ Write the `Curve` out to a FITS file.
276 
277  Parameters
278  ----------
279  filename : `str`
280  Path to the FITS file to write.
281 
282  Returns
283  -------
284  filename : `str`
285  Because this method forces a particular extension return
286  the name of the file actually written.
287  """
288  table = self._to_table_with_meta()
289  # Force file extension to .ecsv
290  path, ext = os.path.splitext(filename)
291  filename = path + ".fits"
292  table.write(filename, format="fits")
293  return filename
294 
295 
def writeFits(filename, stamps, metadata, type_name, write_mask, write_variance, write_archive=False)
Definition: stamps.py:42

◆ writeText()

def lsst.meas.algorithms.simple_curve.Curve.writeText (   self,
  filename 
)
inherited
 Write the `Curve` out to a text file.

Parameters
----------
filename : `str`
    Path to the text file to write.

Returns
-------
filename : `str`
    Because this method forces a particular extension return
    the name of the file actually written.

Definition at line 253 of file simple_curve.py.

253  def writeText(self, filename):
254  """ Write the `Curve` out to a text file.
255 
256  Parameters
257  ----------
258  filename : `str`
259  Path to the text file to write.
260 
261  Returns
262  -------
263  filename : `str`
264  Because this method forces a particular extension return
265  the name of the file actually written.
266  """
267  table = self._to_table_with_meta()
268  # Force file extension to .ecsv
269  path, ext = os.path.splitext(filename)
270  filename = path + ".ecsv"
271  table.write(filename, format="ascii.ecsv")
272  return filename
273 

Member Data Documentation

◆ data

lsst.meas.algorithms.simple_curve.AmpCurve.data

Definition at line 350 of file simple_curve.py.

◆ efficiency

lsst.meas.algorithms.simple_curve.Curve.efficiency
inherited

Definition at line 51 of file simple_curve.py.

◆ metadata

lsst.meas.algorithms.simple_curve.Curve.metadata
inherited

Definition at line 54 of file simple_curve.py.

◆ mode

string lsst.meas.algorithms.simple_curve.AmpCurve.mode = 'AMP'
static

Definition at line 345 of file simple_curve.py.

◆ subclasses

lsst.meas.algorithms.simple_curve.Curve.subclasses = dict()
staticinherited

Definition at line 43 of file simple_curve.py.

◆ wavelength

lsst.meas.algorithms.simple_curve.Curve.wavelength
inherited

Definition at line 50 of file simple_curve.py.


The documentation for this class was generated from the following file: