LSSTApplications  19.0.0-10-g920eed2,19.0.0-11-g48a0200+2,19.0.0-18-gfc4e62b+11,19.0.0-2-g3b2f90d+2,19.0.0-2-gd671419+5,19.0.0-20-g5a5a17ab+9,19.0.0-21-g2644856+11,19.0.0-22-gc5dc5b1+6,19.0.0-23-gdc29a50+3,19.0.0-24-g923e380+11,19.0.0-25-g6c8df7140,19.0.0-28-g9b887e2,19.0.0-3-g2b32d65+5,19.0.0-3-g8227491+10,19.0.0-3-g9c54d0d+10,19.0.0-3-gca68e65+6,19.0.0-3-gcfc5f51+5,19.0.0-3-ge110943+9,19.0.0-3-ge74d124,19.0.0-3-gfe04aa6+11,19.0.0-4-g06f5963+5,19.0.0-4-g3d16501+11,19.0.0-4-g4a9c019+5,19.0.0-4-g5a8b323,19.0.0-4-g66397f0+1,19.0.0-4-g8278b9b+1,19.0.0-4-g8557e14,19.0.0-4-g8964aba+11,19.0.0-4-ge404a01+10,19.0.0-5-g40f3a5a,19.0.0-5-g4db63b3,19.0.0-5-gfb03ce7+11,19.0.0-6-gbaebbfb+10,19.0.0-60-gafafd468+11,19.0.0-67-g3ab1e6e,19.0.0-7-g039c0b5+9,19.0.0-7-gbea9075+4,19.0.0-7-gc567de5+11,19.0.0-8-g3a3ce09+6,19.0.0-9-g463f923+10,w.2020.21
LSSTDataManagementBasePackage
Public Member Functions | Static Public Attributes | List of all members
lsst.obs.base.instrument.Instrument Class Reference
Inheritance diagram for lsst.obs.base.instrument.Instrument:
lsst.obs.decam.instrument.DarkEnergyCamera

Public Member Functions

def filterDefinitions (self)
 
def __init__ (self, *args, **kwargs)
 
def getName (cls)
 
def getCamera (self)
 
def register (self, registry)
 
def obsDataPackageDir (self)
 
def fromName (cls, name, registry)
 
def getRawFormatter (self, dataId)
 
def writeCuratedCalibrations (self, butler)
 
def applyConfigOverrides (self, name, config)
 
def writeCameraGeom (self, butler)
 
def writeStandardTextCuratedCalibrations (self, butler)
 
TranslatorFactory makeDataIdTranslatorFactory (self)
 

Static Public Attributes

tuple configPaths = ()
 
 policyName = None
 
 obsDataPackage = None
 
 standardCuratedDatasetTypes = tuple(StandardCuratedCalibrationDatasetTypes)
 

Detailed Description

Base class for instrument-specific logic for the Gen3 Butler.

Concrete instrument subclasses should be directly constructable with no
arguments.

Definition at line 48 of file instrument.py.

Constructor & Destructor Documentation

◆ __init__()

def lsst.obs.base.instrument.Instrument.__init__ (   self,
args,
**  kwargs 
)

Definition at line 88 of file instrument.py.

88  def __init__(self, *args, **kwargs):
89  self.filterDefinitions.reset()
90  self.filterDefinitions.defineFilters()
91  self._obsDataPackageDir = None
92 

Member Function Documentation

◆ applyConfigOverrides()

def lsst.obs.base.instrument.Instrument.applyConfigOverrides (   self,
  name,
  config 
)
Apply instrument-specific overrides for a task config.

Parameters
----------
name : `str`
    Name of the object being configured; typically the _DefaultName
    of a Task.
config : `lsst.pex.config.Config`
    Config instance to which overrides should be applied.

Definition at line 228 of file instrument.py.

228  def applyConfigOverrides(self, name, config):
229  """Apply instrument-specific overrides for a task config.
230 
231  Parameters
232  ----------
233  name : `str`
234  Name of the object being configured; typically the _DefaultName
235  of a Task.
236  config : `lsst.pex.config.Config`
237  Config instance to which overrides should be applied.
238  """
239  for root in self.configPaths:
240  path = os.path.join(root, f"{name}.py")
241  if os.path.exists(path):
242  config.load(path)
243 

◆ filterDefinitions()

def lsst.obs.base.instrument.Instrument.filterDefinitions (   self)
`~lsst.obs.base.FilterDefinitionCollection`, defining the filters
for this instrument.

Definition at line 82 of file instrument.py.

82  def filterDefinitions(self):
83  """`~lsst.obs.base.FilterDefinitionCollection`, defining the filters
84  for this instrument.
85  """
86  return None
87 

◆ fromName()

def lsst.obs.base.instrument.Instrument.fromName (   cls,
  name,
  registry 
)
Given an instrument name and a butler, retrieve a corresponding
instantiated instrument object.

Parameters
----------
name : `str`
    Name of the instrument (must match the return value of `getName`).
registry : `lsst.daf.butler.Registry`
    Butler registry to query to find the information.

Returns
-------
instrument : `Instrument`
    An instance of the relevant `Instrument`.

Notes
-----
The instrument must be registered in the corresponding butler.

Raises
------
LookupError
    Raised if the instrument is not known to the supplied registry.
ModuleNotFoundError
    Raised if the class could not be imported.  This could mean
    that the relevant obs package has not been setup.
TypeError
    Raised if the class name retrieved is not a string.

Definition at line 134 of file instrument.py.

134  def fromName(cls, name, registry):
135  """Given an instrument name and a butler, retrieve a corresponding
136  instantiated instrument object.
137 
138  Parameters
139  ----------
140  name : `str`
141  Name of the instrument (must match the return value of `getName`).
142  registry : `lsst.daf.butler.Registry`
143  Butler registry to query to find the information.
144 
145  Returns
146  -------
147  instrument : `Instrument`
148  An instance of the relevant `Instrument`.
149 
150  Notes
151  -----
152  The instrument must be registered in the corresponding butler.
153 
154  Raises
155  ------
156  LookupError
157  Raised if the instrument is not known to the supplied registry.
158  ModuleNotFoundError
159  Raised if the class could not be imported. This could mean
160  that the relevant obs package has not been setup.
161  TypeError
162  Raised if the class name retrieved is not a string.
163  """
164  dimensions = list(registry.queryDimensions("instrument", dataId={"instrument": name}))
165  cls = dimensions[0].records["instrument"].class_name
166  if not isinstance(cls, str):
167  raise TypeError(f"Unexpected class name retrieved from {name} instrument dimension (got {cls})")
168  instrument = doImport(cls)
169  return instrument()
170 

◆ getCamera()

def lsst.obs.base.instrument.Instrument.getCamera (   self)
Retrieve the cameraGeom representation of this instrument.

This is a temporary API that should go away once obs_ packages have
a standardized approach to writing versioned cameras to a Gen3 repo.

Reimplemented in lsst.obs.decam.instrument.DarkEnergyCamera.

Definition at line 105 of file instrument.py.

105  def getCamera(self):
106  """Retrieve the cameraGeom representation of this instrument.
107 
108  This is a temporary API that should go away once obs_ packages have
109  a standardized approach to writing versioned cameras to a Gen3 repo.
110  """
111  raise NotImplementedError()
112 

◆ getName()

def lsst.obs.base.instrument.Instrument.getName (   cls)
Return the short (dimension) name for this instrument.

This is not (in general) the same as the class name - it's what is used
as the value of the "instrument" field in data IDs, and is usually an
abbreviation of the full name.

Reimplemented in lsst.obs.decam.instrument.DarkEnergyCamera.

Definition at line 95 of file instrument.py.

95  def getName(cls):
96  """Return the short (dimension) name for this instrument.
97 
98  This is not (in general) the same as the class name - it's what is used
99  as the value of the "instrument" field in data IDs, and is usually an
100  abbreviation of the full name.
101  """
102  raise NotImplementedError()
103 

◆ getRawFormatter()

def lsst.obs.base.instrument.Instrument.getRawFormatter (   self,
  dataId 
)
Return the Formatter class that should be used to read a particular
raw file.

Parameters
----------
dataId : `DataCoordinate`
    Dimension-based ID for the raw file or files being ingested.

Returns
-------
formatter : `Formatter` class
    Class to be used that reads the file into an
    `lsst.afw.image.Exposure` instance.

Reimplemented in lsst.obs.decam.instrument.DarkEnergyCamera.

Definition at line 194 of file instrument.py.

194  def getRawFormatter(self, dataId):
195  """Return the Formatter class that should be used to read a particular
196  raw file.
197 
198  Parameters
199  ----------
200  dataId : `DataCoordinate`
201  Dimension-based ID for the raw file or files being ingested.
202 
203  Returns
204  -------
205  formatter : `Formatter` class
206  Class to be used that reads the file into an
207  `lsst.afw.image.Exposure` instance.
208  """
209  raise NotImplementedError()
210 

◆ makeDataIdTranslatorFactory()

TranslatorFactory lsst.obs.base.instrument.Instrument.makeDataIdTranslatorFactory (   self)
Return a factory for creating Gen2->Gen3 data ID translators,
specialized for this instrument.

Derived class implementations should generally call
`TranslatorFactory.addGenericInstrumentRules` with appropriate
arguments, but are not required to (and may not be able to if their
Gen2 raw data IDs are sufficiently different from the HSC/DECam/CFHT
norm).

Returns
-------
factory : `TranslatorFactory`.
    Factory for `Translator` objects.

Reimplemented in lsst.obs.decam.instrument.DarkEnergyCamera.

Definition at line 356 of file instrument.py.

356  def makeDataIdTranslatorFactory(self) -> TranslatorFactory:
357  """Return a factory for creating Gen2->Gen3 data ID translators,
358  specialized for this instrument.
359 
360  Derived class implementations should generally call
361  `TranslatorFactory.addGenericInstrumentRules` with appropriate
362  arguments, but are not required to (and may not be able to if their
363  Gen2 raw data IDs are sufficiently different from the HSC/DECam/CFHT
364  norm).
365 
366  Returns
367  -------
368  factory : `TranslatorFactory`.
369  Factory for `Translator` objects.
370  """
371  raise NotImplementedError("Must be implemented by derived classes.")
372 
373 

◆ obsDataPackageDir()

def lsst.obs.base.instrument.Instrument.obsDataPackageDir (   self)
The root of the obs package that provides specializations for
this instrument (`str`).

Definition at line 121 of file instrument.py.

121  def obsDataPackageDir(self):
122  """The root of the obs package that provides specializations for
123  this instrument (`str`).
124  """
125  if self.obsDataPackage is None:
126  return None
127  if self._obsDataPackageDir is None:
128  # Defer any problems with locating the package until
129  # we need to find it.
130  self._obsDataPackageDir = getPackageDir(self.obsDataPackage)
131  return self._obsDataPackageDir
132 

◆ register()

def lsst.obs.base.instrument.Instrument.register (   self,
  registry 
)
Insert instrument, physical_filter, and detector entries into a
`Registry`.

Reimplemented in lsst.obs.decam.instrument.DarkEnergyCamera.

Definition at line 114 of file instrument.py.

114  def register(self, registry):
115  """Insert instrument, physical_filter, and detector entries into a
116  `Registry`.
117  """
118  raise NotImplementedError()
119 

◆ writeCameraGeom()

def lsst.obs.base.instrument.Instrument.writeCameraGeom (   self,
  butler 
)
Write the default camera geometry to the butler repository
with an infinite validity range.

Parameters
----------
butler : `lsst.daf.butler.Butler`
    Butler to receive these calibration datasets.

Definition at line 244 of file instrument.py.

244  def writeCameraGeom(self, butler):
245  """Write the default camera geometry to the butler repository
246  with an infinite validity range.
247 
248  Parameters
249  ----------
250  butler : `lsst.daf.butler.Butler`
251  Butler to receive these calibration datasets.
252  """
253 
254  datasetType = DatasetType("camera", ("instrument", "calibration_label"), "Camera",
255  universe=butler.registry.dimensions)
256  butler.registry.registerDatasetType(datasetType)
257  unboundedDataId = addUnboundedCalibrationLabel(butler.registry, self.getName())
258  camera = self.getCamera()
259  butler.put(camera, datasetType, unboundedDataId)
260 

◆ writeCuratedCalibrations()

def lsst.obs.base.instrument.Instrument.writeCuratedCalibrations (   self,
  butler 
)
Write human-curated calibration Datasets to the given Butler with
the appropriate validity ranges.

Parameters
----------
butler : `lsst.daf.butler.Butler`
    Butler to use to store these calibrations.

Notes
-----
Expected to be called from subclasses.  The base method calls
``writeCameraGeom`` and ``writeStandardTextCuratedCalibrations``.

Definition at line 211 of file instrument.py.

211  def writeCuratedCalibrations(self, butler):
212  """Write human-curated calibration Datasets to the given Butler with
213  the appropriate validity ranges.
214 
215  Parameters
216  ----------
217  butler : `lsst.daf.butler.Butler`
218  Butler to use to store these calibrations.
219 
220  Notes
221  -----
222  Expected to be called from subclasses. The base method calls
223  ``writeCameraGeom`` and ``writeStandardTextCuratedCalibrations``.
224  """
225  self.writeCameraGeom(butler)
226  self.writeStandardTextCuratedCalibrations(butler)
227 

◆ writeStandardTextCuratedCalibrations()

def lsst.obs.base.instrument.Instrument.writeStandardTextCuratedCalibrations (   self,
  butler 
)
Write the set of standardized curated text calibrations to
the repository.

Parameters
----------
butler : `lsst.daf.butler.Butler`
    Butler to receive these calibration datasets.

Definition at line 261 of file instrument.py.

261  def writeStandardTextCuratedCalibrations(self, butler):
262  """Write the set of standardized curated text calibrations to
263  the repository.
264 
265  Parameters
266  ----------
267  butler : `lsst.daf.butler.Butler`
268  Butler to receive these calibration datasets.
269  """
270 
271  for datasetTypeName in self.standardCuratedDatasetTypes:
272  # We need to define the dataset types.
273  if datasetTypeName not in StandardCuratedCalibrationDatasetTypes:
274  raise ValueError(f"DatasetType {datasetTypeName} not in understood list"
275  f" [{'.'.join(StandardCuratedCalibrationDatasetTypes)}]")
276  definition = StandardCuratedCalibrationDatasetTypes[datasetTypeName]
277  datasetType = DatasetType(datasetTypeName,
278  universe=butler.registry.dimensions,
279  **definition)
280  self._writeSpecificCuratedCalibrationDatasets(butler, datasetType)
281 

Member Data Documentation

◆ configPaths

tuple lsst.obs.base.instrument.Instrument.configPaths = ()
static

Definition at line 55 of file instrument.py.

◆ obsDataPackage

lsst.obs.base.instrument.Instrument.obsDataPackage = None
static

Definition at line 66 of file instrument.py.

◆ policyName

lsst.obs.base.instrument.Instrument.policyName = None
static

Definition at line 62 of file instrument.py.

◆ standardCuratedDatasetTypes

lsst.obs.base.instrument.Instrument.standardCuratedDatasetTypes = tuple(StandardCuratedCalibrationDatasetTypes)
static

Definition at line 71 of file instrument.py.


The documentation for this class was generated from the following file:
lsst::utils::getPackageDir
std::string getPackageDir(std::string const &packageName)
return the root directory of a setup package
Definition: packaging.cc:33
lsst::daf::persistence.utils.doImport
def doImport(pythonType)
Definition: utils.py:104
lsst.obs.base.instrument.addUnboundedCalibrationLabel
def addUnboundedCalibrationLabel(registry, instrumentName)
Definition: instrument.py:408
list
daf::base::PropertyList * list
Definition: fits.cc:913
lsst.gdb.ip.diffim.printers.register
def register(obj)
Definition: printers.py:20
lsst.obs.base.script.writeCuratedCalibrations.writeCuratedCalibrations
def writeCuratedCalibrations(repo, instrument, output_run)
Definition: writeCuratedCalibrations.py:30