Details

Description

These components all do similar things but take different approaches to their implementation and public interface, making it hard to share much code between them.

CoaddPsf uses an internal ExposureCatalog, which makes both its persisted and in-memory sizes larger than they need to be, but simplifies its persistence and evaluation code. CoaddBoundedField and CoaddTransmissionCurve (still WIP on DM-12370) use a vector of custom structs to avoid this.

CoaddPsf and CoaddBoundedField have public interfaces that are strongly tied to these implementation choices, while CoaddTransmissionCurve's implementation is entirely private (even the class itself is hidden behind a factory function).

All three classes should probably use a vector a shared object (not ExposureCatalog, but also not vectors of custom structs) to consolidate persistence and lookup code. They should also probably all be hidden behind private factory functions or at least take a consistent approach to this question that does not expose their implementations.