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 | Public Attributes | Static Public Attributes | List of all members
lsst.obs.decam.instrument.DarkEnergyCamera Class Reference
Inheritance diagram for lsst.obs.decam.instrument.DarkEnergyCamera:
lsst.obs.base.instrument.Instrument

Public Member Functions

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

Public Attributes

 configPaths
 

Static Public Attributes

 filterDefinitions = DECAM_FILTER_DEFINITIONS
 
string policyName = "decam"
 
string obsDataPackage = "obs_decam_data"
 
 standardCuratedDatasetTypes = tuple(StandardCuratedCalibrationDatasetTypes)
 

Detailed Description

Definition at line 38 of file instrument.py.

Constructor & Destructor Documentation

◆ __init__()

def lsst.obs.decam.instrument.DarkEnergyCamera.__init__ (   self,
**  kwargs 
)

Definition at line 43 of file instrument.py.

43  def __init__(self, **kwargs):
44  super().__init__(**kwargs)
45  packageDir = getPackageDir("obs_decam")
46  self.configPaths = [os.path.join(packageDir, "config")]
47 

Member Function Documentation

◆ applyConfigOverrides()

def lsst.obs.base.instrument.Instrument.applyConfigOverrides (   self,
  name,
  config 
)
inherited
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)
inherited
`~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 
)
inherited
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.decam.instrument.DarkEnergyCamera.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 from lsst.obs.base.instrument.Instrument.

Definition at line 52 of file instrument.py.

52  def getCamera(self):
53  path = os.path.join(getPackageDir("obs_decam"), self.policyName, "camGeom")
54  config = CameraConfig()
55  config.load(os.path.join(path, "camera.py"))
56  return makeCameraFromPath(
57  cameraConfig=config,
58  ampInfoPath=path,
59  shortNameFunc=lambda name: name.replace(" ", "_"),
60  )
61 

◆ getName()

def lsst.obs.decam.instrument.DarkEnergyCamera.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 from lsst.obs.base.instrument.Instrument.

Definition at line 49 of file instrument.py.

49  def getName(cls):
50  return "DECam"
51 

◆ getRawFormatter()

def lsst.obs.decam.instrument.DarkEnergyCamera.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 from lsst.obs.base.instrument.Instrument.

Definition at line 87 of file instrument.py.

87  def getRawFormatter(self, dataId):
88  # local import to prevent circular dependency
89  from .rawFormatter import DarkEnergyCameraRawFormatter
90  return DarkEnergyCameraRawFormatter
91 

◆ makeDataIdTranslatorFactory()

TranslatorFactory lsst.obs.decam.instrument.DarkEnergyCamera.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 from lsst.obs.base.instrument.Instrument.

Definition at line 92 of file instrument.py.

92  def makeDataIdTranslatorFactory(self) -> TranslatorFactory:
93  # Docstring inherited from lsst.obs.base.Instrument.
94  factory = TranslatorFactory()
95  factory.addGenericInstrumentRules(self.getName(), calibFilterType="abstract_filter",
96  detectorKey="ccdnum")
97  # DECam calibRegistry entries are abstract_filters, but we need physical_filter
98  # in the gen3 registry.
99  factory.addRule(AbstractToPhysicalFilterKeyHandler(self.filterDefinitions),
100  instrument=self.getName(),
101  gen2keys=("filter",),
102  consume=("filter",),
103  datasetTypeName="cpFlat")
104  return factory

◆ obsDataPackageDir()

def lsst.obs.base.instrument.Instrument.obsDataPackageDir (   self)
inherited
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.decam.instrument.DarkEnergyCamera.register (   self,
  registry 
)
Insert instrument, physical_filter, and detector entries into a
`Registry`.

Reimplemented from lsst.obs.base.instrument.Instrument.

Definition at line 62 of file instrument.py.

62  def register(self, registry):
63  camera = self.getCamera()
64  obsMax = 2**31
65  registry.insertDimensionData(
66  "instrument",
67  {"name": self.getName(), "detector_max": 64, "visit_max": obsMax, "exposure_max": obsMax,
68  "class_name": getFullTypeName(self),
69  }
70  )
71 
72  for detector in camera:
73  registry.insertDimensionData(
74  "detector",
75  {
76  "instrument": self.getName(),
77  "id": detector.getId(),
78  "full_name": detector.getName(),
79  "name_in_raft": detector.getName()[1:],
80  "raft": detector.getName()[0],
81  "purpose": str(detector.getType()).split(".")[-1],
82  }
83  )
84 
85  self._registerFilters(registry)
86 

◆ writeCameraGeom()

def lsst.obs.base.instrument.Instrument.writeCameraGeom (   self,
  butler 
)
inherited
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 
)
inherited
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 
)
inherited
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

lsst.obs.decam.instrument.DarkEnergyCamera.configPaths

Definition at line 46 of file instrument.py.

◆ filterDefinitions

lsst.obs.decam.instrument.DarkEnergyCamera.filterDefinitions = DECAM_FILTER_DEFINITIONS
static

Definition at line 39 of file instrument.py.

◆ obsDataPackage

string lsst.obs.decam.instrument.DarkEnergyCamera.obsDataPackage = "obs_decam_data"
static

Definition at line 41 of file instrument.py.

◆ policyName

string lsst.obs.decam.instrument.DarkEnergyCamera.policyName = "decam"
static

Definition at line 40 of file instrument.py.

◆ standardCuratedDatasetTypes

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

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::afw::cameraGeom.cameraFactory.makeCameraFromPath
def makeCameraFromPath(cameraConfig, ampInfoPath, shortNameFunc, pupilFactoryClass=PupilFactory)
Definition: cameraFactory.py:122
lsst.obs.base.script.writeCuratedCalibrations.writeCuratedCalibrations
def writeCuratedCalibrations(repo, instrument, output_run)
Definition: writeCuratedCalibrations.py:30