Project: datamanagement
Issue DM-5425: Provide an easy way to set Coord fields of a source catalog
We sometimes need to set the coord fields of a source catalog, e.g. when fitting a new WCS or when studying an `icSrc` catalog (whose Coord field is not set). It would be nice to have a central, easily found way to do this. Right now we have the following as a static method of `TanSipWcsTask`, which works fine but is in a poor location: {code} def updateSourceCoords(wcs, sourceList): """Update coords in a collection of sources, given a WCS """ if len(sourceList) < 1: return schema = sourceList[1].schema srcCoordKey = afwTable.CoordKey(schema["coord"]) for src in sourceList: src.set(srcCoordKey, wcs.pixelToSky(src.getCentroid())) {code} The other direction is also useful for reference catalogs, though from a practical standpoint the only user is probably `meas_astrom`. Even so, I suggest that this be made publicly available in the same way. Again, this is presently a static method of `FitTanSipWcsTask`: {code} def updateRefCentroids(wcs, refList): """Update centroids in a collection of reference objects, given a WCS """ if len(refList) < 1: return schema = refList[0].schema coordKey = afwTable.CoordKey(schema["coord"]) centroidKey = afwTable.Point2DKey(schema["centroid"]) for refObj in refList: refObj.set(centroidKey, wcs.skyToPixel(refObj.get(coordKey))) {code} I hope this can remain Python code, but admit that the extra speed of C++ might come in handy in some cases. In any case, once the function is in a central location we can implement it in C++ if we find the need.
Story points: 2