LSST Applications  21.0.0+75b29a8a7f,21.0.0+e70536a077,21.0.0-1-ga51b5d4+62c747d40b,21.0.0-10-gbfb87ad6+3307648ee3,21.0.0-15-gedb9d5423+47cba9fc36,21.0.0-2-g103fe59+fdf0863a2a,21.0.0-2-g1367e85+d38a93257c,21.0.0-2-g45278ab+e70536a077,21.0.0-2-g5242d73+d38a93257c,21.0.0-2-g7f82c8f+e682ffb718,21.0.0-2-g8dde007+d179fbfa6a,21.0.0-2-g8f08a60+9402881886,21.0.0-2-ga326454+e682ffb718,21.0.0-2-ga63a54e+08647d4b1b,21.0.0-2-gde069b7+26c92b3210,21.0.0-2-gecfae73+0445ed2f95,21.0.0-2-gfc62afb+d38a93257c,21.0.0-27-gbbd0d29+ae871e0f33,21.0.0-28-g5fc5e037+feb0e9397b,21.0.0-3-g21c7a62+f4b9c0ff5c,21.0.0-3-g357aad2+57b0bddf0b,21.0.0-3-g4be5c26+d38a93257c,21.0.0-3-g65f322c+3f454acf5d,21.0.0-3-g7d9da8d+75b29a8a7f,21.0.0-3-gaa929c8+9e4ef6332c,21.0.0-3-ge02ed75+4b120a55c4,21.0.0-4-g3300ddd+e70536a077,21.0.0-4-g591bb35+4b120a55c4,21.0.0-4-gc004bbf+4911b9cd27,21.0.0-4-gccdca77+f94adcd104,21.0.0-4-ge8fba5a+2b3a696ff9,21.0.0-5-gb155db7+2c5429117a,21.0.0-5-gdf36809+637e4641ee,21.0.0-6-g00874e7+c9fd7f7160,21.0.0-6-g4e60332+4b120a55c4,21.0.0-7-gc8ca178+40eb9cf840,21.0.0-8-gfbe0b4b+9e4ef6332c,21.0.0-9-g2fd488a+d83b7cd606,w.2021.05
LSST Data Management Base Package
Public Member Functions | Public Attributes | Static Public Attributes | List of all members
lsst.obs.base.gen2to3.convertTests.ConvertGen2To3TestCase Class Reference
Inheritance diagram for lsst.obs.base.gen2to3.convertTests.ConvertGen2To3TestCase:

Public Member Functions

def instrumentClassName (self)
 
def instrumentClass (self)
 
def instrumentName (self)
 
def setUp (self)
 
def tearDown (self)
 
def check_raw (self, gen3Butler, exposure, detector)
 
def check_calibs (self, calibName, calibIds, gen3Butler)
 
def check_defects (self, gen3Butler, detectors)
 
def check_refcat (self, gen3Butler)
 
def check_collections (self, gen3Butler)
 
def test_convert (self)
 

Public Attributes

 gen3root
 
 gen2Butler
 

Static Public Attributes

string gen2root = ""
 
 gen2calib = None
 
 config = None
 
list biases = []
 
string biasName = "bias"
 
list flats = []
 
string flatName = "flat"
 
list darks = []
 
string darkName = "dark"
 
dictionary kwargs = {}
 
list refcats = []
 
 collections = set()
 
string detectorKey = "ccd"
 
string exposureKey = "visit"
 
string calibFilterType = "physical_filter"
 
 skymapName = None
 
 skymapConfig = None
 

Detailed Description

Test the `butler convert` command.

Subclass this, and then `lsst.utils.tests.TestCase` and set the below
attributes.  Uses the `butler convert` command line command to do the
conversion.

Definition at line 42 of file convertTests.py.

Member Function Documentation

◆ check_calibs()

def lsst.obs.base.gen2to3.convertTests.ConvertGen2To3TestCase.check_calibs (   self,
  calibName,
  calibIds,
  gen3Butler 
)
Test that we can get converted bias/dark/flat from the gen3 repo.

Note: because there is no clear way to get calibrations from a gen2
repo, we just test that the thing we got is an ExposureF here, and
assume that formatter testing is handled properly elsewhere.

Parameters
----------
calibName : `str`
    The name of the calibration to attempt to get ("bias", "flat").
calibIds : `list` of `dict`
    The list of calibration dataIds to get.
gen3Butler : `lsst.daf.butler.Butler`
    The Butler to use to get the data.

Definition at line 201 of file convertTests.py.

201  def check_calibs(self, calibName, calibIds, gen3Butler):
202  """Test that we can get converted bias/dark/flat from the gen3 repo.
203 
204  Note: because there is no clear way to get calibrations from a gen2
205  repo, we just test that the thing we got is an ExposureF here, and
206  assume that formatter testing is handled properly elsewhere.
207 
208  Parameters
209  ----------
210  calibName : `str`
211  The name of the calibration to attempt to get ("bias", "flat").
212  calibIds : `list` of `dict`
213  The list of calibration dataIds to get.
214  gen3Butler : `lsst.daf.butler.Butler`
215  The Butler to use to get the data.
216  """
217  if not calibIds:
218  return
219  collection = self.instrumentClass.makeCalibrationCollectionName()
220  with self.subTest(dtype=calibName):
221  datasets = {}
222  for assoc in gen3Butler.registry.queryDatasetAssociations(calibName, collections=collection):
223  # There will in general be multiple refs for each data ID
224  # (for different validity ranges), but we'll just test one
225  # anyway to keep the test fast, so we don't care that this
226  # might overwrite.
227  datasets[assoc.ref.dataId] = assoc.ref
228  for dataId in calibIds:
229  standardizedDataId = lsst.daf.butler.DataCoordinate.standardize(
230  dataId,
231  universe=gen3Butler.registry.dimensions
232  )
233  with self.subTest(dataId=standardizedDataId):
234  gen3Exposure = gen3Butler.getDirect(datasets[standardizedDataId])
235  self.assertIsInstance(gen3Exposure, lsst.afw.image.ExposureF)
236 

◆ check_collections()

def lsst.obs.base.gen2to3.convertTests.ConvertGen2To3TestCase.check_collections (   self,
  gen3Butler 
)
Test that the correct set of collections is in the gen3 repo.

Parameters
----------
gen3Butler : `lsst.daf.butler.Butler`
    The Butler to be tested.

Definition at line 278 of file convertTests.py.

278  def check_collections(self, gen3Butler):
279  """Test that the correct set of collections is in the gen3 repo.
280 
281  Parameters
282  ----------
283  gen3Butler : `lsst.daf.butler.Butler`
284  The Butler to be tested.
285  """
286  # We use assertGreaterEqual because the conversion code may create
287  # multiple RUNS and combine them into CHAINED collections as an
288  # implementation detail; we only care that the high-level collections
289  # exist one way or another.
290  self.assertGreaterEqual(set(gen3Butler.registry.queryCollections()), set(self.collections),
291  f"Compare with expected collections ({self.collections})")
292 
daf::base::PropertySet * set
Definition: fits.cc:912

◆ check_defects()

def lsst.obs.base.gen2to3.convertTests.ConvertGen2To3TestCase.check_defects (   self,
  gen3Butler,
  detectors 
)
Test that we can get converted defects from the gen3 repo.

Parameters
----------
gen3Butler : `lsst.daf.butler.Butler`
    The Butler to be tested.
detectors : `list` of `int`
    The detector identifiers to ``get`` from the gen3 butler.

Definition at line 237 of file convertTests.py.

237  def check_defects(self, gen3Butler, detectors):
238  """Test that we can get converted defects from the gen3 repo.
239 
240  Parameters
241  ----------
242  gen3Butler : `lsst.daf.butler.Butler`
243  The Butler to be tested.
244  detectors : `list` of `int`
245  The detector identifiers to ``get`` from the gen3 butler.
246  """
247  collection = self.instrumentClass.makeCalibrationCollectionName()
248  datasets = {}
249  for assoc in gen3Butler.registry.queryDatasetAssociations("defects", collections=collection):
250  # There will in general be multiple refs for each data ID
251  # (for different validity ranges), but we'll just test one
252  # anyway to keep the test fast, so we don't care that this
253  # might overwrite.
254  datasets[assoc.ref.dataId] = assoc.ref
255  for detector in detectors:
256  dataId = lsst.daf.butler.DataCoordinate.standardize(
257  detector=detector, instrument=self.instrumentName,
258  universe=gen3Butler.registry.dimensions
259  )
260  if dataId in datasets:
261  gen3Defects = gen3Butler.getDirect(datasets[dataId])
262  self.assertIsInstance(gen3Defects, lsst.ip.isr.Defects)
263 

◆ check_raw()

def lsst.obs.base.gen2to3.convertTests.ConvertGen2To3TestCase.check_raw (   self,
  gen3Butler,
  exposure,
  detector 
)
Check that a raw was converted correctly.

Parameters
----------
gen3Butler : `lsst.daf.butler.Butler`
    The Butler to be tested.
exposure : `int`
    The exposure/vist identifier ``get`` from both butlers.
detector : `int`
    The detector identifier to ``get`` from both butlers.

Definition at line 175 of file convertTests.py.

175  def check_raw(self, gen3Butler, exposure, detector):
176  """Check that a raw was converted correctly.
177 
178  Parameters
179  ----------
180  gen3Butler : `lsst.daf.butler.Butler`
181  The Butler to be tested.
182  exposure : `int`
183  The exposure/vist identifier ``get`` from both butlers.
184  detector : `int`
185  The detector identifier to ``get`` from both butlers.
186  """
187  dataIdGen2 = {self.detectorKey: detector, self.exposureKey: exposure}
188  try:
189  gen2Exposure = self.gen2Butler.get("raw", dataId=dataIdGen2)
191  # ignore datasets that don't actually exist in the gen2 butler.
192  return
193  dataIdGen3 = dict(detector=detector, exposure=exposure, instrument=self.instrumentName)
194  gen3Exposure = gen3Butler.get("raw", dataId=dataIdGen3)
195  # Check that we got an Exposure, but not what type; there is
196  # inconsistency between different obs packages.
197  self.assertIsInstance(gen3Exposure, lsst.afw.image.Exposure)
198  self.assertEqual(gen3Exposure.getInfo().getDetector().getId(), detector)
199  self.assertMaskedImagesEqual(gen2Exposure.maskedImage, gen3Exposure.maskedImage)
200 
A class to contain the data, WCS, and other information needed to describe an image of the sky.
Definition: Exposure.h:72

◆ check_refcat()

def lsst.obs.base.gen2to3.convertTests.ConvertGen2To3TestCase.check_refcat (   self,
  gen3Butler 
)
Test that each expected refcat is in the gen3 repo.

Parameters
----------
gen3Butler : `lsst.daf.butler.Butler`
    The Butler to be tested.

Definition at line 264 of file convertTests.py.

264  def check_refcat(self, gen3Butler):
265  """Test that each expected refcat is in the gen3 repo.
266 
267  Parameters
268  ----------
269  gen3Butler : `lsst.daf.butler.Butler`
270  The Butler to be tested.
271  """
272  if len(self.refcats) > 0:
273  for refcat in self.refcats:
274  query = gen3Butler.registry.queryDatasets(refcat, collections=["refcats"])
275  self.assertGreater(len(list(query)), 0,
276  msg=f"refcat={refcat} has no entries in collection 'refcats'.")
277 
daf::base::PropertyList * list
Definition: fits.cc:913

◆ instrumentClass()

def lsst.obs.base.gen2to3.convertTests.ConvertGen2To3TestCase.instrumentClass (   self)
The instrument class.

Definition at line 70 of file convertTests.py.

70  def instrumentClass(self):
71  """The instrument class."""
72  return doImport(self.instrumentClassName)
73 

◆ instrumentClassName()

def lsst.obs.base.gen2to3.convertTests.ConvertGen2To3TestCase.instrumentClassName (   self)
Full path to the `Instrument` class of the data to be converted,
e.g. ``lsst.obs.decam.DarkEnergyCamera``.

Returns
-------
className : `str`
    The fully qualified instrument class name.

Definition at line 58 of file convertTests.py.

58  def instrumentClassName(self):
59  """Full path to the `Instrument` class of the data to be converted,
60  e.g. ``lsst.obs.decam.DarkEnergyCamera``.
61 
62  Returns
63  -------
64  className : `str`
65  The fully qualified instrument class name.
66  """
67  pass
68 

◆ instrumentName()

def lsst.obs.base.gen2to3.convertTests.ConvertGen2To3TestCase.instrumentName (   self)
Name of the instrument for the gen3 registry, e.g. "DECam".

Returns
-------
name : `str`
    The name of the instrument.

Definition at line 75 of file convertTests.py.

75  def instrumentName(self):
76  """Name of the instrument for the gen3 registry, e.g. "DECam".
77 
78  Returns
79  -------
80  name : `str`
81  The name of the instrument.
82  """
83  return self.instrumentClass.getName()
84 
std::string const & getName() const noexcept
Return a filter's name.
Definition: Filter.h:78

◆ setUp()

def lsst.obs.base.gen2to3.convertTests.ConvertGen2To3TestCase.setUp (   self)

Definition at line 140 of file convertTests.py.

140  def setUp(self):
141  self.gen3root = tempfile.mkdtemp()
142  self.gen2Butler = lsst.daf.persistence.Butler(root=self.gen2root, calibRoot=self.gen2calib)
143  self.collections = set(type(self).collections)
144  self.collections.add(self.instrumentClass.makeDefaultRawIngestRunName())
145  if len(self.refcats) > 0:
146  self.collections.add("refcats")
147  if self.skymapName is not None:
148  self.collections.add("skymaps")
149 
150  # We always write a default calibration collection
151  # containing at least the camera
152  self.collections.add(self.instrumentClass.makeCollectionName("calib"))
153 
table::Key< int > type
Definition: Detector.cc:163

◆ tearDown()

def lsst.obs.base.gen2to3.convertTests.ConvertGen2To3TestCase.tearDown (   self)

Definition at line 154 of file convertTests.py.

154  def tearDown(self):
155  shutil.rmtree(self.gen3root, ignore_errors=True)
156 

◆ test_convert()

def lsst.obs.base.gen2to3.convertTests.ConvertGen2To3TestCase.test_convert (   self)
Test that all data are converted correctly.

Definition at line 293 of file convertTests.py.

293  def test_convert(self):
294  """Test that all data are converted correctly.
295  """
296  self._run_convert()
297  gen3Butler = lsst.daf.butler.Butler(self.gen3root,
298  collections=self.instrumentClass.makeDefaultRawIngestRunName())
299  self.check_collections(gen3Butler)
300 
301  # check every raw detector that the gen2 butler knows about
302  detectors = self.gen2Butler.queryMetadata("raw", self.detectorKey)
303  exposures = self.gen2Butler.queryMetadata("raw", self.exposureKey)
304  for exposure, detector in itertools.product(exposures, detectors):
305  with self.subTest(mode="raw", exposure=exposure, detector=detector):
306  self.check_raw(gen3Butler, exposure, detector)
307 
308  self.check_refcat(gen3Butler)
309  self.check_defects(gen3Butler, detectors)
310  self.check_calibs(self.biasName, self.biases, gen3Butler)
311  self.check_calibs(self.flatName, self.flats, gen3Butler)
312  self.check_calibs(self.darkName, self.darks, gen3Butler)
313 
314 

Member Data Documentation

◆ biases

list lsst.obs.base.gen2to3.convertTests.ConvertGen2To3TestCase.biases = []
static

Definition at line 89 of file convertTests.py.

◆ biasName

string lsst.obs.base.gen2to3.convertTests.ConvertGen2To3TestCase.biasName = "bias"
static

Definition at line 92 of file convertTests.py.

◆ calibFilterType

string lsst.obs.base.gen2to3.convertTests.ConvertGen2To3TestCase.calibFilterType = "physical_filter"
static

Definition at line 130 of file convertTests.py.

◆ collections

lsst.obs.base.gen2to3.convertTests.ConvertGen2To3TestCase.collections = set()
static

Definition at line 115 of file convertTests.py.

◆ config

lsst.obs.base.gen2to3.convertTests.ConvertGen2To3TestCase.config = None
static

Definition at line 85 of file convertTests.py.

◆ darkName

string lsst.obs.base.gen2to3.convertTests.ConvertGen2To3TestCase.darkName = "dark"
static

Definition at line 104 of file convertTests.py.

◆ darks

list lsst.obs.base.gen2to3.convertTests.ConvertGen2To3TestCase.darks = []
static

Definition at line 101 of file convertTests.py.

◆ detectorKey

string lsst.obs.base.gen2to3.convertTests.ConvertGen2To3TestCase.detectorKey = "ccd"
static

Definition at line 124 of file convertTests.py.

◆ exposureKey

string lsst.obs.base.gen2to3.convertTests.ConvertGen2To3TestCase.exposureKey = "visit"
static

Definition at line 127 of file convertTests.py.

◆ flatName

string lsst.obs.base.gen2to3.convertTests.ConvertGen2To3TestCase.flatName = "flat"
static

Definition at line 98 of file convertTests.py.

◆ flats

list lsst.obs.base.gen2to3.convertTests.ConvertGen2To3TestCase.flats = []
static

Definition at line 95 of file convertTests.py.

◆ gen2Butler

lsst.obs.base.gen2to3.convertTests.ConvertGen2To3TestCase.gen2Butler

Definition at line 142 of file convertTests.py.

◆ gen2calib

lsst.obs.base.gen2to3.convertTests.ConvertGen2To3TestCase.gen2calib = None
static

Definition at line 53 of file convertTests.py.

◆ gen2root

string lsst.obs.base.gen2to3.convertTests.ConvertGen2To3TestCase.gen2root = ""
static

Definition at line 50 of file convertTests.py.

◆ gen3root

lsst.obs.base.gen2to3.convertTests.ConvertGen2To3TestCase.gen3root

Definition at line 141 of file convertTests.py.

◆ kwargs

dictionary lsst.obs.base.gen2to3.convertTests.ConvertGen2To3TestCase.kwargs = {}
static

Definition at line 107 of file convertTests.py.

◆ refcats

list lsst.obs.base.gen2to3.convertTests.ConvertGen2To3TestCase.refcats = []
static

Definition at line 111 of file convertTests.py.

◆ skymapConfig

lsst.obs.base.gen2to3.convertTests.ConvertGen2To3TestCase.skymapConfig = None
static

Definition at line 137 of file convertTests.py.

◆ skymapName

lsst.obs.base.gen2to3.convertTests.ConvertGen2To3TestCase.skymapName = None
static

Definition at line 134 of file convertTests.py.


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