From 1a661f483eee7fab4a84f374d175f46283291c70 Mon Sep 17 00:00:00 2001 From: Hsin-Fang Chiang Date: Thu, 23 Feb 2023 11:07:05 -0800 Subject: [PATCH 01/11] Move test repo modifications to the script The CHAINED collections used to be added manually to the export.yaml. This commit moves it to the script so that it is done in one go. This also refreshes the test data repo. --- tests/data/central_repo/gen3.sqlite3 | Bin 2469888 -> 2469888 bytes tests/data/export.yaml | 26 +++++--------------------- tests/data/make_central_repo.sh | 9 ++++++--- 3 files changed, 11 insertions(+), 24 deletions(-) diff --git a/tests/data/central_repo/gen3.sqlite3 b/tests/data/central_repo/gen3.sqlite3 index 6b9f39505b2bd3c1d7d6ed093c9e52fe09a97bc6..013c8352f64e7502505c3f8bc81a25464bd30eb9 100644 GIT binary patch delta 99672 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 rV{w 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 TBB8BqiTQYDO~gD9@u&X}(=jS& delta 99796 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 KbMErF;{O8*K2QAs diff --git a/tests/data/export.yaml b/tests/data/export.yaml index 5c8f73cf..be4bef09 100644 --- a/tests/data/export.yaml +++ b/tests/data/export.yaml @@ -1,13 +1,15 @@ -# Created from ap_verify_ci_hits2015 on 2022-03-16 using make_preloaded_export.py -# and then modified to add the necessary collection CHAINs. +# Created from ap_verify_ci_hits2015 on 2023-02-23 using make_preloaded_export.py description: Butler Data Repository Export -version: 1.0.1 +version: 1.0.2 +universe_version: 3 +universe_namespace: daf_butler data: - type: dimension element: instrument records: - name: DECam visit_max: 33554432 + visit_system: 0 exposure_max: 33554432 detector_max: 100 class_name: lsst.obs.decam.DarkEnergyCamera @@ -541,24 +543,6 @@ data: host: null timespan_begin: null timespan_end: null -- type: collection - collection_type: CHAINED - name: refcats - children: - - refcats/gen2 -- type: collection - collection_type: CHAINED - name: templates - children: - - templates/deep -- type: collection - collection_type: CHAINED - name: DECam/defaults - children: - - DECam/calib - - refcats - - templates - - skymaps - type: dataset_type name: camera dimensions: diff --git a/tests/data/make_central_repo.sh b/tests/data/make_central_repo.sh index ca5105c3..5291e927 100644 --- a/tests/data/make_central_repo.sh +++ b/tests/data/make_central_repo.sh @@ -3,12 +3,15 @@ # tests, making all the files be empty and adjusting the sqlite registry to # match. -# This export file was created with this command, and then modified to have the -# CHAINED collections that we expect (path is the repo on JKP's desktop): -# make_preloaded_export.py --src-rep /data/ap_verify_ci_hits2015 +# This export file was created with this command, and then added a comment on the first line: +# make_preloaded_export.py --src-rep $AP_VERIFY_CI_HITS2015_DIR butler create central_repo butler import --export-file export.yaml --transfer copy central_repo/ $AP_VERIFY_CI_HITS2015_DIR/preloaded/ +butler collection-chain central_repo refcats refcats/gen2 +butler collection-chain central_repo templates templates/deep +butler collection-chain central_repo DECam/defaults DECam/calib,refcats,templates,skymaps + # Empty out files and make them size 0 in the registry. # We do not empty the camera description in ``DECAM/calib/unbounded` # because we need it to load the camera geometry. From ee512acccb067606de7b832f2d48c13d017c5582 Mon Sep 17 00:00:00 2001 From: Hsin-Fang Chiang Date: Thu, 23 Feb 2023 12:01:56 -0800 Subject: [PATCH 02/11] Fix up non-zero file size in the registry Otherwise butler complains the sizes do not match. --- tests/data/central_repo/gen3.sqlite3 | Bin 2469888 -> 2469888 bytes tests/data/make_central_repo.sh | 4 +++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/tests/data/central_repo/gen3.sqlite3 b/tests/data/central_repo/gen3.sqlite3 index 013c8352f64e7502505c3f8bc81a25464bd30eb9..ab0c2585eea9eafe6ccf473f27908b3c21dd291b 100644 GIT binary patch delta 246 zcmWN}F;c=n0EOY*WDNu(i6|<=1P#BqCy$ zXb^kEKG7r&h(qFtXc5Omo9L{eSD_!?h=v%sVq|KOJ`b{M=})reOY2OyW^)n5=Aow- zu6LD|f04ecDzLI%`Eb0q**H(EK{?KcKiz)^%}GxH delta 248 zcmXBMu};E300!W@Qf-Ts78DiB;o0J%F~->@nm9PI@B;n`4}hD419bR%kI4#79b?y5H-Rjwuo)QBYYwt>ckEa61zl$h=`bI z5-nnn*eBY=0dYti5gp=~NQmwy)JGHuAzETni*8LlR+o!>HF0FJxL(~=n^-+G!s12- zgQ7j@TnOK+uR?7`v3fJVkEu6vwX%BFiKVSmE3I6eIZtwFyr1-3E^Rgni|n=U51z;W W&A6$}*F1Zf?)?FGTTD;@ diff --git a/tests/data/make_central_repo.sh b/tests/data/make_central_repo.sh index 5291e927..58d76536 100644 --- a/tests/data/make_central_repo.sh +++ b/tests/data/make_central_repo.sh @@ -22,4 +22,6 @@ find central_repo/DECam/calib/20150313T000000Z -name "*.fits" -execdir sh -c '> find central_repo/DECam/calib/curated -name "*.fits" -execdir sh -c '> "$1"' -- {} \; # find central_repo/skymaps -name "*.fits" -execdir sh -c '> "$1"' -- {} \; -sqlite3 central_repo/gen3.sqlite3 "update file_datastore_records set file_size=0;" +# The camera and skymap files are not emptied out. The records need to be consistent so that +# the datastore does not complain about size mismatch when reading them. +sqlite3 central_repo/gen3.sqlite3 'update file_datastore_records set file_size=0 where path != "DECam/calib/unbounded/camera/camera_DECam_DECam_calib_unbounded.fits" and path != "skymaps/skyMap/skyMap_deepCoadd_skyMap_skymaps.pickle";' From 17f8b879d6a54464b0d33f920c2df4d8cd7678e9 Mon Sep 17 00:00:00 2001 From: Hsin-Fang Chiang Date: Thu, 23 Feb 2023 16:04:51 -0800 Subject: [PATCH 03/11] Rename the templates collections In the foreseeable future, templates are instrument-dependent and we do not plan to build multi-instrument coadds as generic templates for now. The collection name is changed from "templates" to "/templates". The template collection name in the test repo is updated too. --- python/activator/middleware_interface.py | 12 +++++++----- tests/data/central_repo/gen3.sqlite3 | Bin 2469888 -> 2469888 bytes tests/data/make_central_repo.sh | 4 ++-- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/python/activator/middleware_interface.py b/python/activator/middleware_interface.py index 93f6c433..2834fb9d 100644 --- a/python/activator/middleware_interface.py +++ b/python/activator/middleware_interface.py @@ -120,9 +120,6 @@ class MiddlewareInterface: appropriate for use in the USDF environment; typically only change this when running local tests. """ - _COLLECTION_TEMPLATE = "templates" - """The collection used for templates. - """ _COLLECTION_SKYMAP = "skymaps" """The collection used for skymaps. """ @@ -374,13 +371,18 @@ def prep_butler(self, visit: Visit) -> None: # CHAINED collections export.saveCollection(self.instrument.makeRefCatCollectionName()) - export.saveCollection(self._COLLECTION_TEMPLATE) + export.saveCollection(self._get_template_collection()) export.saveCollection(self.instrument.makeUmbrellaCollectionName()) self.butler.import_(filename=export_file.name, directory=self.central_butler.datastore.root, transfer="copy") + def _get_template_collection(self): + """Get the collection name for templates + """ + return self.instrument.makeCollectionName("templates") + def _export_refcats(self, export, center, radius): """Export the refcats for this visit from the central butler. @@ -456,7 +458,7 @@ def _export_skymap_and_templates(self, export, center, detector, wcs, filter): templates = set(_filter_datasets( self.central_butler, self.butler, "*Coadd", - collections=self._COLLECTION_TEMPLATE, + collections=self._get_template_collection(), instrument=self.instrument.getName(), skymap=self.skymap_name, where=template_where, diff --git a/tests/data/central_repo/gen3.sqlite3 b/tests/data/central_repo/gen3.sqlite3 index ab0c2585eea9eafe6ccf473f27908b3c21dd291b..a777c03a4e1f136423eaaa524342afa1adc6f7c7 100644 GIT binary patch delta 25727 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
5G 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 diff --git a/tests/data/make_central_repo.sh b/tests/data/make_central_repo.sh index 58d76536..e85c0717 100644 --- a/tests/data/make_central_repo.sh +++ b/tests/data/make_central_repo.sh @@ -9,8 +9,8 @@ butler create central_repo butler import --export-file export.yaml --transfer copy central_repo/ $AP_VERIFY_CI_HITS2015_DIR/preloaded/ butler collection-chain central_repo refcats refcats/gen2 -butler collection-chain central_repo templates templates/deep -butler collection-chain central_repo DECam/defaults DECam/calib,refcats,templates,skymaps +butler collection-chain central_repo DECam/templates templates/deep +butler collection-chain central_repo DECam/defaults DECam/calib,refcats,DECam/templates,skymaps # Empty out files and make them size 0 in the registry. # We do not empty the camera description in ``DECAM/calib/unbounded` From 33037733c36b6c8f96ead0c3621b57ae06dc90a9 Mon Sep 17 00:00:00 2001 From: Hsin-Fang Chiang Date: Fri, 24 Feb 2023 16:18:48 -0800 Subject: [PATCH 04/11] Export all but only those in the default calib collection The central repo may have more data than we want, including non-production data. Instead of exporting all CALIBRATION collections from the central repo, we only want those in the default calibration chain. As of Feb 2023, exporting a `~CollectionType.CHAINED` collection does not automatically export its child collections. Also, there can be CHAINED collections inside CHAIEND collections. Instead of picking collections and re-constructing the chain, we will just preserve the entire collection structure, and export them all despite that some may not carry data of interest. --- python/activator/middleware_interface.py | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/python/activator/middleware_interface.py b/python/activator/middleware_interface.py index 2834fb9d..d8a6ccce 100644 --- a/python/activator/middleware_interface.py +++ b/python/activator/middleware_interface.py @@ -497,11 +497,25 @@ def _export_calibs(self, export, detector_id, filter): export.saveDatasets( calibs, elements=[]) # elements=[] means do not export dimension records - target_types = {CollectionType.CALIBRATION} - for collection in self.central_butler.registry.queryCollections(..., - collectionTypes=target_types): - export.saveCollection(collection) - export.saveCollection(self.instrument.makeCalibrationCollectionName()) + self._export_collections(export, self.instrument.makeCalibrationCollectionName()) + + def _export_collections(self, export, collection): + """Export the collection and all its children. + + This preserves the collection structure even if some child collections + do not have data. Exporting a collection does not export its datasets. + + Parameters + ---------- + export : `Iterator[RepoExportContext]` + Export context manager. + collection : `str` + The collection to be exported. It is usually a CHAINED collection + and can have many children. + """ + for child in self.central_butler.registry.queryCollections( + collection, flattenChains=True, includeChains=True): + export.saveCollection(child) @staticmethod def _count_by_type(refs): From b7159221036fd950c20a8ffc1b5ba2e74a46e266 Mon Sep 17 00:00:00 2001 From: Hsin-Fang Chiang Date: Mon, 27 Feb 2023 10:40:49 -0800 Subject: [PATCH 05/11] Export the entire chain collection structure Extra collections in the chain in the central repo used to cause MissingCollectionError in preparing the local butler if some collections are not necessary for the incoming visit. Here we just export the entire default chain even if some collections are empty and not useful. Typically the default chain include refcats, calibration, skymap, etc. --- python/activator/middleware_interface.py | 7 +------ tests/test_middleware_interface.py | 17 +++++++++++++++++ 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/python/activator/middleware_interface.py b/python/activator/middleware_interface.py index d8a6ccce..2038b22b 100644 --- a/python/activator/middleware_interface.py +++ b/python/activator/middleware_interface.py @@ -368,11 +368,7 @@ def prep_butler(self, visit: Visit) -> None: # TODO: Summit filter names may not match Butler names, especially for composite filters. self._export_skymap_and_templates(export, center, detector, wcs, visit.filters) self._export_calibs(export, visit.detector, visit.filters) - - # CHAINED collections - export.saveCollection(self.instrument.makeRefCatCollectionName()) - export.saveCollection(self._get_template_collection()) - export.saveCollection(self.instrument.makeUmbrellaCollectionName()) + self._export_collections(export, self.instrument.makeUmbrellaCollectionName()) self.butler.import_(filename=export_file.name, directory=self.central_butler.datastore.root, @@ -497,7 +493,6 @@ def _export_calibs(self, export, detector_id, filter): export.saveDatasets( calibs, elements=[]) # elements=[] means do not export dimension records - self._export_collections(export, self.instrument.makeCalibrationCollectionName()) def _export_collections(self, export, collection): """Export the collection and all its children. diff --git a/tests/test_middleware_interface.py b/tests/test_middleware_interface.py index fcfd63ea..fe136bea 100644 --- a/tests/test_middleware_interface.py +++ b/tests/test_middleware_interface.py @@ -675,6 +675,23 @@ def _count_datasets(self, butler, types, collections): def _count_datasets_with_id(self, butler, types, collections, data_id): return len(set(butler.registry.queryDatasets(types, collections=collections, dataId=data_id))) + def test_extra_collection(self): + """Test that extra collections in the chain will not lead to MissingCollectionError + even if they do not carry useful data. + """ + central_butler = Butler(self.central_repo.name, writeable=True) + central_butler.registry.registerCollection("emptyrun", CollectionType.RUN) + _prepend_collection(central_butler, "refcats", ["emptyrun"]) + + self.interface.prep_butler(self.next_visit) + + self.assertEqual( + self._count_datasets(self.interface.butler, "gaia", f"{instname}/defaults"), + 3) + self.assertIn( + "emptyrun", + self.interface.butler.registry.queryCollections("refcats", flattenChains=True)) + def test_export_outputs(self): self.interface.export_outputs(self.next_visit, {self.raw_data_id["exposure"]}) From e44b688ccbbf69559b42a4dce2dde3b71531f90a Mon Sep 17 00:00:00 2001 From: Hsin-Fang Chiang Date: Mon, 6 Mar 2023 15:17:55 -0800 Subject: [PATCH 06/11] Chain the templates collection to the default collection While we can ensure that the templates' collection exists in the central repo, it may not be chained the default collection. Currently that is the case in most shared repos. So we export it separately and chain it in the local repo. This is a workaround until the prompt processing has its own default top-level collection in the shared repos. --- python/activator/middleware_interface.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/python/activator/middleware_interface.py b/python/activator/middleware_interface.py index 2038b22b..e8f21b5e 100644 --- a/python/activator/middleware_interface.py +++ b/python/activator/middleware_interface.py @@ -374,6 +374,12 @@ def prep_butler(self, visit: Visit) -> None: directory=self.central_butler.datastore.root, transfer="copy") + # Temporary workarounds until we have a prompt-processing default top-level collection + # in shared repos and then we can organize collections without worrying DRP use cases. + _prepend_collection(self.butler, + self.instrument.makeUmbrellaCollectionName(), + [self._get_template_collection()]) + def _get_template_collection(self): """Get the collection name for templates """ @@ -461,6 +467,7 @@ def _export_skymap_and_templates(self, export, center, detector, wcs, filter): findFirst=True)) _log.debug("Found %d new template datasets.", len(templates)) export.saveDatasets(templates) + self._export_collections(export, self._get_template_collection()) def _export_calibs(self, export, detector_id, filter): """Export the calibs for this visit from the central butler. From 7a54c00920b69fdb0e95207a7d317a35c75a7dc4 Mon Sep 17 00:00:00 2001 From: Hsin-Fang Chiang Date: Tue, 21 Feb 2023 15:32:56 -0800 Subject: [PATCH 07/11] Get the skymap name from env var There can be multiple skymaps in the central repo and all skymaps are in the "skymaps" collection. We need to specify which skymap to use. --- python/activator/activator.py | 3 +++ python/activator/middleware_interface.py | 12 ++++++------ tests/test_middleware_interface.py | 15 +++++++++------ 3 files changed, 18 insertions(+), 12 deletions(-) diff --git a/python/activator/activator.py b/python/activator/activator.py index 117f0462..3b2795f8 100644 --- a/python/activator/activator.py +++ b/python/activator/activator.py @@ -43,6 +43,8 @@ # The short name for the instrument. instrument_name = os.environ["RUBIN_INSTRUMENT"] +# The skymap to use in the central repo +skymap = os.environ["SKYMAP"] # URI to the main repository containing calibs and templates calib_repo = os.environ["CALIB_REPO"] # S3 Endpoint for Buckets; needed for direct Boto access but not Butler @@ -86,6 +88,7 @@ mwi = MiddlewareInterface(get_central_butler(calib_repo, instrument_name), image_bucket, instrument_name, + skymap, local_repos) diff --git a/python/activator/middleware_interface.py b/python/activator/middleware_interface.py index e8f21b5e..a06104a0 100644 --- a/python/activator/middleware_interface.py +++ b/python/activator/middleware_interface.py @@ -111,6 +111,8 @@ class MiddlewareInterface: name or the short name. Examples: "LsstCam", "lsst.obs.lsst.LsstCam". TODO: this arg can probably be removed and replaced with internal use of the butler. + skymap: `str` + Name of the skymap in the central repo for querying templates. local_storage : `str` An absolute path to a space where this object can create a local Butler repo. The repo is guaranteed to be unique to this object. @@ -138,7 +140,7 @@ class MiddlewareInterface: # corresponding to self.camera and self.skymap. def __init__(self, central_butler: Butler, image_bucket: str, instrument: str, - local_storage: str, + skymap: str, local_storage: str, prefix: str = "s3://"): # Deployment/version ID -- potentially expensive to generate. self._deployment = self._get_deployment() @@ -167,11 +169,9 @@ def __init__(self, central_butler: Butler, image_bucket: str, instrument: str, "camera", instrument=self.instrument.getName(), collections=self.instrument.makeUnboundedCalibrationRunName() ) - # TODO: is central_butler guaranteed to have only one skymap dimension? - skymaps = list(self.central_butler.registry.queryDataIds("skymap")) - assert len(skymaps) == 1, "Ambiguous or missing skymap in central repo." - self.skymap_name = skymaps[0]["skymap"] - self.skymap = self.central_butler.get("skyMap", skymap=self.skymap_name) + self.skymap_name = skymap + self.skymap = self.central_butler.get("skyMap", skymap=self.skymap_name, + collections=self._COLLECTION_SKYMAP) # How much to pad the refcat region we will copy over. self.padding = 30*lsst.geom.arcseconds diff --git a/tests/test_middleware_interface.py b/tests/test_middleware_interface.py index fe136bea..4cc58360 100644 --- a/tests/test_middleware_interface.py +++ b/tests/test_middleware_interface.py @@ -48,6 +48,8 @@ instname = "DECam" # Full name of the physical filter for the test file. filter = "g DECam SDSS c0001 4720.0 1520.0" +# The skymap name used in the test repo. +skymap_name = "deepCoadd_skyMap" def fake_file_data(filename, dimensions, instrument, visit): @@ -133,7 +135,7 @@ def setUp(self): # Have to preserve the tempdir, so that it doesn't get cleaned up. self.workspace = tempfile.TemporaryDirectory() self.interface = MiddlewareInterface(central_butler, self.input_data, instrument, - self.workspace.name, + skymap_name, self.workspace.name, prefix="file://") # coordinates from DECam data in ap_verify_ci_hits2015 for visit 411371 @@ -171,7 +173,7 @@ def test_get_butler(self): ]: # TODO: better way to test repo location? self.assertTrue( - butler.getURI("skyMap", skymap="deepCoadd_skyMap", run="foo", predict=True).ospath + butler.getURI("skyMap", skymap=skymap_name, run="foo", predict=True).ospath .startswith(self.central_repo)) self.assertEqual(list(butler.collections), [f"{instname}/defaults"]) self.assertTrue(butler.isWriteable()) @@ -203,7 +205,7 @@ def _check_imports(self, butler, detector, expected_shards): # Check that the right skymap is in the chained output collection. self.assertTrue( butler.datasetExists("skyMap", - skymap="deepCoadd_skyMap", + skymap=skymap_name, collections=self.interface.output_collection) ) @@ -241,7 +243,7 @@ def _check_imports(self, butler, detector, expected_shards): butler.registry.refresh() for patch in (464, 465, 509, 510): butler.datasetExists('deepCoadd', tract=0, patch=patch, band="g", - skymap="deepCoadd_skyMap", + skymap=skymap_name, collections=self.interface.output_collection) def test_prep_butler(self): @@ -592,7 +594,7 @@ def setUp(self): self._create_copied_repo() central_butler = Butler(self.central_repo.name, instrument=instname, - skymap="deepCoadd_skyMap", + skymap=skymap_name, collections=[f"{instname}/defaults"], writeable=True) instrument = "lsst.obs.decam.DarkEnergyCamera" @@ -628,7 +630,8 @@ def setUp(self): self.logger_name = "lsst.activator.middleware_interface" # Populate repository. - self.interface = MiddlewareInterface(central_butler, self.input_data, instrument, workspace.name, + self.interface = MiddlewareInterface(central_butler, self.input_data, instrument, + skymap_name, workspace.name, prefix="file://") # TODO: should MiddlewareInterface have a cleanup method? self.addCleanup(tempfile.TemporaryDirectory.cleanup, self.interface._repo) From f7e8646b28e282b308bb8a4cfb29292501e6f108 Mon Sep 17 00:00:00 2001 From: Hsin-Fang Chiang Date: Mon, 27 Feb 2023 20:44:03 -0800 Subject: [PATCH 08/11] Add ATLAS-REFCAT2 as a possible reference catalog This reference catalog is used to calibrate AuxTel imaging surveys; see RFC-819 and DM-33444. --- python/activator/middleware_interface.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/python/activator/middleware_interface.py b/python/activator/middleware_interface.py index a06104a0..1f1e8848 100644 --- a/python/activator/middleware_interface.py +++ b/python/activator/middleware_interface.py @@ -405,7 +405,8 @@ def _export_refcats(self, export, center, radius): # currently, and we can't queryDatasetTypes in just the refcats # collection, so we have to specify a list here. Replace this # with another solution ASAP. - possible_refcats = ["gaia", "panstarrs", "gaia_dr2_20200414", "ps1_pv3_3pi_20170110"] + possible_refcats = ["gaia", "panstarrs", "gaia_dr2_20200414", "ps1_pv3_3pi_20170110", + "atlas_refcat2_20220201"] refcats = set(_filter_datasets( self.central_butler, self.butler, possible_refcats, From a578743962b06f676a42137b702c4f6e6b602ad9 Mon Sep 17 00:00:00 2001 From: Hsin-Fang Chiang Date: Mon, 27 Feb 2023 21:09:59 -0800 Subject: [PATCH 09/11] Override diaPipe config only if it is in the pipelines to be run --- python/activator/middleware_interface.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/python/activator/middleware_interface.py b/python/activator/middleware_interface.py index 1f1e8848..3a48265c 100644 --- a/python/activator/middleware_interface.py +++ b/python/activator/middleware_interface.py @@ -656,8 +656,12 @@ def _prep_pipeline(self, visit: Visit) -> lsst.pipe.base.Pipeline: pipeline = lsst.pipe.base.Pipeline.fromFile(ap_pipeline_file) except FileNotFoundError: raise RuntimeError(f"No ApPipe.yaml defined for camera {self.instrument.getName()}") - pipeline.addConfigOverride("diaPipe", "apdb.db_url", self._apdb_uri) - pipeline.addConfigOverride("diaPipe", "apdb.namespace", self._apdb_namespace) + + try: + pipeline.addConfigOverride("diaPipe", "apdb.db_url", self._apdb_uri) + pipeline.addConfigOverride("diaPipe", "apdb.namespace", self._apdb_namespace) + except LookupError: + _log.debug("diaPipe is not in this pipeline.") return pipeline def _download(self, remote): From 771282750f123e09ce4417729a4b6ed0a5fd0e17 Mon Sep 17 00:00:00 2001 From: Hsin-Fang Chiang Date: Tue, 28 Feb 2023 14:05:08 -0800 Subject: [PATCH 10/11] Add a pipeline yaml for LATISS --- pipelines/LATISS/ApPipe.yaml | 8 ++++++++ ups/prompt_prototype.table | 2 ++ 2 files changed, 10 insertions(+) create mode 100644 pipelines/LATISS/ApPipe.yaml diff --git a/pipelines/LATISS/ApPipe.yaml b/pipelines/LATISS/ApPipe.yaml new file mode 100644 index 00000000..d1988828 --- /dev/null +++ b/pipelines/LATISS/ApPipe.yaml @@ -0,0 +1,8 @@ +description: Alert Production pipeline specialized for LATISS + +imports: + - location: $DRP_PIPE_DIR/pipelines/LATISS/DRP.yaml + include: + - isr + - characterizeImage + - calibrate diff --git a/ups/prompt_prototype.table b/ups/prompt_prototype.table index 96e24dd8..8b8b87e9 100644 --- a/ups/prompt_prototype.table +++ b/ups/prompt_prototype.table @@ -8,6 +8,8 @@ setupRequired(utils) # Used by scripts in bin.src # Used by middleware_interface module due to hard-coded pipeline references. setupRequired(ap_pipe) +# Borrow LATISS configs from drp_pipe +setupRequired(drp_pipe) setupRequired(daf_butler) setupRequired(ctrl_mpexec) setupRequired(geom) From e44f285d5740ff894c9ebb823832bfd3ef078774 Mon Sep 17 00:00:00 2001 From: Hsin-Fang Chiang Date: Mon, 6 Mar 2023 14:05:18 -0800 Subject: [PATCH 11/11] Allow to run without templates While in most cases, having 0 templates is troublesome, we may sometimes want to use the prompt processing system to run, for example, just ISR without needing templates. Give a warning instead of raising an error when no templates are found. --- python/activator/middleware_interface.py | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/python/activator/middleware_interface.py b/python/activator/middleware_interface.py index 3a48265c..749770e8 100644 --- a/python/activator/middleware_interface.py +++ b/python/activator/middleware_interface.py @@ -458,16 +458,20 @@ def _export_skymap_and_templates(self, export, center, detector, wcs, filter): # TODO: alternately, we need to extract it from the pipeline? (best?) # TODO: alternately, can we just assume that there is exactly # one coadd type in the central butler? - templates = set(_filter_datasets( - self.central_butler, self.butler, - "*Coadd", - collections=self._get_template_collection(), - instrument=self.instrument.getName(), - skymap=self.skymap_name, - where=template_where, - findFirst=True)) - _log.debug("Found %d new template datasets.", len(templates)) - export.saveDatasets(templates) + try: + templates = set(_filter_datasets( + self.central_butler, self.butler, + "*Coadd", + collections=self._get_template_collection(), + instrument=self.instrument.getName(), + skymap=self.skymap_name, + where=template_where, + findFirst=True)) + except _MissingDatasetError as err: + _log.error(err) + else: + _log.debug("Found %d new template datasets.", len(templates)) + export.saveDatasets(templates) self._export_collections(export, self._get_template_collection()) def _export_calibs(self, export, detector_id, filter):