1. forcedImage and forcedCcd are not in init.py. Should they be?
Might as well. I was thinking we didn't need to put things into __init__.py if they were only used internally by the package or imported by a particular bin script, but I suppose it also doesn't do any harm.
2. I know it's hard to test tasks, but processForcedImageTask doesn't appear to be in any unit tests.
Yeah, that was a known issue I'd planned to resolve later, but some of the other things you've brought up suggest that I really need to resolve it now, or at least do a one-off test. I might be able to add a test in pipe_tasks that would use some of the machinery I built for testing CoaddPsf, which would be better still, if still not quite ideal.
3. In forcedImage.py: I don't know how the run method in ProcessImageForcedTask can work since the subtask name is measurement, but there is no measurement entry in the config. Also, self.forcedMeasurement is referenced in run(), but I don't think it exists. See #2.
Definitely an oversight; subtask name switched from forcedMeasurement to measurement on this branch. Will fix.
4. MeasurementDataFlags used on line 63 of forcedImage.py, but is not imported.
Will fix.
5. In sfm.py: In the constructor of SingleFrameMeasurementTask I think we have agreed that super is preferable to calling the init method on the base class, but I could be wrong.
Yeah, that proposal is at least in the worst, and likely to pass if it hasn't already. Will change.
6. sfm.py line 242: I don't think NoiseReplacer was imported.
Will fix.
7. in testForced.py: ProcessForcedCcdTask is imported, but never used.
Not surprised. We need to do a lot of import pruning on the tests. I'll fix this one at least.
Ready for review. Looks like a lot of changes, but it's just shuffling code around, so it's actually pretty simple:
In addition, improving the docs for all of these classes is
DM-976, so please don't worry about deficiencies there for now.