Example #1
0
    def setUpClass(cls):
        cls.root = testUtils.makeTestTempDir(
            os.path.abspath(os.path.dirname(__file__)))
        cls.addClassCleanup(testUtils.removeTestTempDir, cls.root)

        # Can't use in-memory datastore because JobReporter creates a
        # new Butler from scratch.
        cls.repo = dafButler.Butler(dafButler.Butler.makeRepo(cls.root),
                                    writeable=True)

        # White-box testing: must use real metrics, and provide datasets of
        # type metricvalue_*_*.
        butlerTests.addDataIdValue(cls.repo, "instrument", "NotACam")
        butlerTests.addDataIdValue(cls.repo, "detector", 101)
        # physical_filter needed for well-behaved visits
        butlerTests.addDataIdValue(cls.repo, "physical_filter",
                                   "k2021", band="k")
        butlerTests.addDataIdValue(cls.repo, "visit", 42)

        # Dependency on verify_metrics, but not on the code for computing
        # these metrics.
        butlerTests.addDatasetType(
            cls.repo,
            "metricvalue_pipe_tasks_CharacterizeImageTime",
            {"instrument", "visit", "detector"},
            "MetricValue")
Example #2
0
def setup_butler(repo):
    """Create a butler at the given location, and register appropriate things
    in it to allow adding metricvalues.
    """
    lsst.daf.butler.Butler.makeRepo(repo)
    butler = lsst.daf.butler.Butler(repo, writeable=True)

    addDataIdValue(butler, "instrument", "TestCam")
    for x in range(189):
        addDataIdValue(butler, "detector", x)
    addDataIdValue(butler, "visit", 12345)
    addDataIdValue(butler, "visit", 54321)
    butler.registry.registerCollection(collection,
                                       lsst.daf.butler.CollectionType.RUN)

    return butler
Example #3
0
    def setUpClass(cls):
        super().setUpClass()

        repoDir = tempfile.mkdtemp()
        cls.addClassCleanup(shutil.rmtree, repoDir, ignore_errors=True)
        cls.repo = butlerTests.makeTestRepo(repoDir)

        INSTRUMENT = "notACam"
        VISIT = 42
        CCD = 101
        HTM = 42
        SKYMAP = "TreasureMap"
        TRACT = 28
        PATCH = 4
        BAND = 'k'
        PHYSICAL = 'k2022'
        SUB_FILTER = 9
        # Mock instrument by hand, because some tasks care about parameters
        instrumentRecord = cls.repo.registry.dimensions[
            "instrument"].RecordClass(name=INSTRUMENT,
                                      visit_max=256,
                                      exposure_max=256,
                                      detector_max=128)
        cls.repo.registry.syncDimensionData("instrument", instrumentRecord)
        butlerTests.addDataIdValue(cls.repo,
                                   "physical_filter",
                                   PHYSICAL,
                                   band=BAND)
        butlerTests.addDataIdValue(cls.repo, "subfilter", SUB_FILTER)
        butlerTests.addDataIdValue(cls.repo, "exposure", VISIT)
        butlerTests.addDataIdValue(cls.repo, "visit", VISIT)
        butlerTests.addDataIdValue(cls.repo, "detector", CCD)
        butlerTests.addDataIdValue(cls.repo, "skymap", SKYMAP)
        butlerTests.addDataIdValue(cls.repo, "tract", TRACT)
        butlerTests.addDataIdValue(cls.repo, "patch", PATCH)

        cls.exposureId = cls.repo.registry.expandDataId({
            "instrument": INSTRUMENT,
            "exposure": VISIT,
            "detector": CCD
        })
        cls.visitId = cls.repo.registry.expandDataId({
            "instrument": INSTRUMENT,
            "visit": VISIT,
            "detector": CCD
        })
        cls.visitOnlyId = cls.repo.registry.expandDataId({
            "instrument": INSTRUMENT,
            "visit": VISIT
        })
        cls.skymapId = cls.repo.registry.expandDataId({"skymap": SKYMAP})
        cls.skymapVisitId = cls.repo.registry.expandDataId({
            "instrument": INSTRUMENT,
            "visit": VISIT,
            "detector": CCD,
            "skymap": SKYMAP
        })
        cls.patchId = cls.repo.registry.expandDataId({
            "skymap": SKYMAP,
            "tract": TRACT,
            "patch": PATCH,
            "band": BAND
        })
        cls.subfilterId = cls.repo.registry.expandDataId({
            "skymap":
            SKYMAP,
            "tract":
            TRACT,
            "patch":
            PATCH,
            "band":
            BAND,
            "subfilter":
            SUB_FILTER
        })
        cls.htmId = cls.repo.registry.expandDataId({"htm7": HTM})

        butlerTests.addDatasetType(cls.repo, "postISRCCD",
                                   cls.exposureId.keys(), "Exposure")
        butlerTests.addDatasetType(cls.repo, "icExp", cls.visitId.keys(),
                                   "ExposureF")
        butlerTests.addDatasetType(cls.repo, "icSrc", cls.visitId.keys(),
                                   "SourceCatalog")
        butlerTests.addDatasetType(cls.repo, "icExpBackground",
                                   cls.visitId.keys(), "Background")
        butlerTests.addDatasetType(cls.repo, "gaia_dr2_20200414",
                                   cls.htmId.keys(), "SimpleCatalog")
        butlerTests.addDatasetType(cls.repo, "ps1_pv3_3pi_20170110",
                                   cls.htmId.keys(), "SimpleCatalog")
        butlerTests.addDatasetType(cls.repo, "calexp", cls.visitId.keys(),
                                   "ExposureF")
        butlerTests.addDatasetType(cls.repo, "src", cls.visitId.keys(),
                                   "SourceCatalog")
        butlerTests.addDatasetType(cls.repo, "calexpBackground",
                                   cls.visitId.keys(), "Background")
        butlerTests.addDatasetType(cls.repo, "srcMatch", cls.visitId.keys(),
                                   "Catalog")
        butlerTests.addDatasetType(cls.repo, "srcMatchFull",
                                   cls.visitId.keys(), "Catalog")
        butlerTests.addDatasetType(
            cls.repo, lsst.skymap.BaseSkyMap.SKYMAP_DATASET_TYPE_NAME,
            cls.skymapId.keys(), "SkyMap")
        butlerTests.addDatasetType(cls.repo, "goodSeeingCoadd",
                                   cls.patchId.keys(), "ExposureF")
        butlerTests.addDatasetType(cls.repo, "deepDiff_differenceExp",
                                   cls.visitId.keys(), "ExposureF")
        butlerTests.addDatasetType(cls.repo, "deepDiff_differenceTempExp",
                                   cls.visitId.keys(), "ExposureF")
        butlerTests.addDatasetType(cls.repo, "deepDiff_templateExp",
                                   cls.visitId.keys(), "ExposureF")
        butlerTests.addDatasetType(cls.repo, "goodSeeingDiff_templateExp",
                                   cls.visitId.keys(), "ExposureF")
        butlerTests.addDatasetType(cls.repo, "deepDiff_matchedExp",
                                   cls.visitId.keys(), "ExposureF")
        butlerTests.addDatasetType(cls.repo, "deepDiff_diaSrc",
                                   cls.visitId.keys(), "SourceCatalog")
        butlerTests.addDatasetType(cls.repo, "deepDiff_diaSrcTable",
                                   cls.visitId.keys(), "DataFrame")
        butlerTests.addDatasetType(cls.repo, "visitSsObjects",
                                   cls.visitOnlyId.keys(), "DataFrame")
        butlerTests.addDatasetType(cls.repo, "apdb_marker", cls.visitId.keys(),
                                   "Config")
        butlerTests.addDatasetType(cls.repo, "deepDiff_associDiaSrc",
                                   cls.visitId.keys(), "DataFrame")
Example #4
0
    def setUpClass(cls):
        # Repository should be re-created for each test case, but
        # this has a prohibitive run-time cost at present
        cls.root = makeTestTempDir(TESTDIR)

        cls.creatorButler = makeTestRepo(cls.root)
        addDataIdValue(cls.creatorButler, "instrument", "notACam")
        addDataIdValue(cls.creatorButler, "instrument", "dummyCam")
        addDataIdValue(cls.creatorButler,
                       "physical_filter",
                       "k2020",
                       band="k",
                       instrument="notACam")
        addDataIdValue(cls.creatorButler,
                       "physical_filter",
                       "l2019",
                       instrument="dummyCam")
        addDataIdValue(cls.creatorButler,
                       "visit",
                       101,
                       instrument="notACam",
                       physical_filter="k2020")
        addDataIdValue(cls.creatorButler,
                       "visit",
                       102,
                       instrument="notACam",
                       physical_filter="k2020")
        addDataIdValue(cls.creatorButler, "detector", 5)
        # Leave skymap/patch/tract undefined so that tests can assume
        # they're missing.

        registerMetricsExample(cls.creatorButler)
        addDatasetType(cls.creatorButler, "DataType1", {"instrument"},
                       "StructuredDataNoComponents")
        addDatasetType(cls.creatorButler, "DataType2", {"instrument", "visit"},
                       "StructuredData")
Example #5
0
    def testAddDataIdValue(self):
        addDataIdValue(self.butler,
                       "visit",
                       1,
                       instrument="notACam",
                       physical_filter="k2020")
        self._checkButlerDimension({"visit", "instrument"}, "visit=1",
                                   [{
                                       "instrument": "notACam",
                                       "visit": 1
                                   }])
        addDataIdValue(self.butler,
                       "visit",
                       2,
                       instrument="dummyCam",
                       physical_filter="l2019")
        self._checkButlerDimension({"visit", "instrument"}, "visit=2",
                                   [{
                                       "instrument": "dummyCam",
                                       "visit": 2
                                   }])

        with self.assertRaises(ValueError):
            addDataIdValue(self.butler, "NotADimension", 42)
        with self.assertRaises(ValueError):
            addDataIdValue(self.butler, "detector", "nonNumeric")
        with self.assertRaises(ValueError):
            addDataIdValue(self.butler,
                           "detector",
                           101,
                           nonsenseField="string")

        # Keywords imply different instruments
        with self.assertRaises(RuntimeError):
            addDataIdValue(self.butler,
                           "exposure",
                           101,
                           instrument="dummyCam",
                           physical_filter="k2020")

        # No skymap defined
        with self.assertRaises(RuntimeError):
            addDataIdValue(self.butler, "tract", 42)
        with self.assertRaises(RuntimeError):
            addDataIdValue(self.butler, "tract", 43, skymap="map")
Example #6
0
    def setUpClass(cls):
        super().setUpClass()
        # Repository should be re-created for each test case, but
        # this has a prohibitive run-time cost at present
        cls.root = tempfile.mkdtemp()

        cls.repo = butlerTests.makeTestRepo(cls.root)
        butlerTests.addDataIdValue(cls.repo, "instrument", "notACam")
        butlerTests.addDataIdValue(cls.repo, "visit", 101)
        butlerTests.addDataIdValue(cls.repo, "visit", 102)
        butlerTests.addDataIdValue(cls.repo, "skymap", "sky")
        butlerTests.addDataIdValue(cls.repo, "tract", 42)
        butlerTests.addDataIdValue(cls.repo, "patch", 0)
        butlerTests.addDataIdValue(cls.repo, "patch", 1)
        butlerTests.registerMetricsExample(cls.repo)

        for typeName in {"VisitA", "VisitB", "VisitOutA", "VisitOutB"}:
            butlerTests.addDatasetType(cls.repo, typeName,
                                       {"instrument", "visit"},
                                       "StructuredData")
        for typeName in {"PatchA", "PatchOut"}:
            butlerTests.addDatasetType(cls.repo, typeName,
                                       {"skymap", "tract", "patch"},
                                       "StructuredData")
        butlerTests.addDatasetType(cls.repo, "PatchB", {"skymap", "tract"},
                                   "StructuredData")
        for typeName in {"PixA", "PixOut"}:
            butlerTests.addDatasetType(cls.repo, typeName, {"htm7"},
                                       "StructuredData")
        butlerTests.addDatasetType(cls.repo, "VisitInitIn", set(),
                                   "StructuredData")