Details
-
Type:
Story
-
Status: Invalid
-
Resolution: Done
-
Fix Version/s: None
-
Component/s: pipe_tasks
-
Labels:
-
Story Points:4
-
Epic Link:
-
Team:Data Release Production
Description
makeCoaddTempExp's lowest-level work method createTempExp interacts with disk via the Butler. When building coadds in Spark, or example, this required us to re-write an implementation of createTempExp instead of reusing the stack. createTempExp currently takes a list of dataRefs corresponding to the calexps that overlap the patch for a particular visit. These reads could be pushed to the higher-level calling method at the expense of memory.
Making createTempExp more reusable would require either:
a) Making createTempExp able to accept either a list of dataRefs or just a list of calexps. This actually appears to be the intent of the docstring writer). <-- naively, I suspect this will win.
b) Holding 4 full calexps in memory (or 4 partial calexps in memory)
c) Easily reproducible container that can interact with the disk, database etc...
This ticket involve investigating the computational feasibility, and implementing best option.
Coaddition is one of several high-level algorithms we'll have for which the I/O is somewhat intrinsic to the algorithm, and I worry that trying to make these usable without a butler really amounts to circumventing the butler as the abstraction layer for all I/O. It seems like it might be better to write an alternate butler backend, or if the butler isn't mature enough to support that yet, mock up some DataRef-like objects that we can pass to the task (maybe this is something like your option C).