def testTicket2080(self): packed = afwTable.packMatches(self.matches) cat1 = self.cat1.copy() cat2 = afwTable.SimpleCatalog(self.schema) cat1.sort() cat2.sort() # just test that the next line doesn't segv afwTable.unpackMatches(packed, cat1, cat2)
def joinMatchListWithCatalog(self, matchCat, sourceCat): """!Relink an unpersisted match list to sources and reference objects A match list is persisted and unpersisted as a catalog of IDs produced by afw.table.packMatches(), with match metadata (as returned by the astrometry tasks) in the catalog's metadata attribute. This method converts such a match catalog into a match list (an lsst.afw.table.ReferenceMatchVector) with links to source records and reference object records. @param[in] matchCat Unperisted packed match list (an lsst.afw.table.BaseCatalog). matchCat.table.getMetadata() must contain match metadata, as returned by the astrometry tasks. @param[in,out] sourceCat Source catalog (an lsst.afw.table.SourceCatalog). As a side effect, the catalog will be sorted by ID. @return the match list (an lsst.afw.table.ReferenceMatchVector) """ matchmeta = matchCat.table.getMetadata() version = matchmeta.getInt('SMATCHV') if version != 1: raise ValueError('SourceMatchVector version number is %i, not 1.' % version) filterName = matchmeta.getString('FILTER').strip() ctrCoord = afwCoord.IcrsCoord( matchmeta.getDouble('RA') * afwGeom.degrees, matchmeta.getDouble('DEC') * afwGeom.degrees, ) rad = matchmeta.getDouble('RADIUS') * afwGeom.degrees refCat = self.loadSkyCircle(ctrCoord, rad, filterName).refCat refCat.sort() sourceCat.sort() return afwTable.unpackMatches(matchCat, refCat, sourceCat)
def testIdentity(self): nobj = 1000 for i in range(nobj): s = self.ss1.addNew() s.setId(i) s.set(afwTable.SourceTable.getCoordKey().getRa(), (10 + 0.001*i) * afwGeom.degrees) s.set(afwTable.SourceTable.getCoordKey().getDec(), (10 + 0.001*i) * afwGeom.degrees) s = self.ss2.addNew() s.setId(2*nobj + i) s.set(afwTable.SourceTable.getCoordKey().getRa(), (10 + 0.001*i) * afwGeom.degrees) s.set(afwTable.SourceTable.getCoordKey().getDec(), (10 + 0.001*i) * afwGeom.degrees) mat = afwTable.matchRaDec(self.ss1, self.ss2, 1.0 * afwGeom.arcseconds, False) self.assertEqual(len(mat), nobj) cat = afwTable.packMatches(mat) mat2 = afwTable.unpackMatches(cat, self.ss1, self.ss2) for m1, m2, c in zip(mat, mat2, cat): self.assertEqual(m1.first, m2.first) self.assertEqual(m1.second, m2.second) self.assertEqual(m1.distance, m2.distance) self.assertEqual(m1.first.getId(), c["first"]) self.assertEqual(m1.second.getId(), c["second"]) self.assertEqual(m1.distance, c["distance"]) if False: s0 = mat[0][0] s1 = mat[0][1] print s0.getRa(), s1.getRa(), s0.getId(), s1.getId()
def testIO(self): packed = afwTable.packMatches(self.matches) packed.writeFits(self.filename) matches = afwTable.BaseCatalog.readFits(self.filename) cat1 = self.cat1.copy() cat2 = self.cat2.copy() cat1.sort() cat2.sort() unpacked = afwTable.unpackMatches(matches, cat1, cat2) self.testMatches(unpacked)
def testIO(self): packed = afwTable.packMatches(self.matches) with lsst.utils.tests.getTempFilePath(".fits") as filename: packed.writeFits(filename) matches = afwTable.BaseCatalog.readFits(filename) cat1 = self.cat1.copy() cat2 = self.cat2.copy() cat1.sort() cat2.sort() unpacked = afwTable.unpackMatches(matches, cat1, cat2) self.testMatches(unpacked)
def testIdentity(self): nobj = 1000 for i in range(nobj): s = self.ss1.addNew() s.setId(i) s.set(afwTable.SourceTable.getCoordKey().getRa(), (10 + 0.001 * i) * afwGeom.degrees) s.set(afwTable.SourceTable.getCoordKey().getDec(), (10 + 0.001 * i) * afwGeom.degrees) s = self.ss2.addNew() s.setId(2 * nobj + i) # Give slight offsets for Coord testing of matches to/from catalog in checkMatchToFromCatalog() # Chosen such that the maximum offset (nobj*1E-7 deg = 0.36 arcsec) is within the maximum # distance (1 arcsec) in afwTable.matchRaDec. s.set(afwTable.SourceTable.getCoordKey().getRa(), (10 + 0.0010001 * i) * afwGeom.degrees) s.set(afwTable.SourceTable.getCoordKey().getDec(), (10 + 0.0010001 * i) * afwGeom.degrees) # Old API (pre DM-855) mat = afwTable.matchRaDec(self.ss1, self.ss2, 1.0 * afwGeom.arcseconds, False) self.assertEqual(len(mat), nobj) # New API mc = afwTable.MatchControl() mc.findOnlyClosest = False mat = afwTable.matchRaDec(self.ss1, self.ss2, 1.0 * afwGeom.arcseconds, mc) self.assertEqual(len(mat), nobj) cat = afwTable.packMatches(mat) mat2 = afwTable.unpackMatches(cat, self.ss1, self.ss2) for m1, m2, c in zip(mat, mat2, cat): self.assertEqual(m1.first, m2.first) self.assertEqual(m1.second, m2.second) self.assertEqual(m1.distance, m2.distance) self.assertEqual(m1.first.getId(), c["first"]) self.assertEqual(m1.second.getId(), c["second"]) self.assertEqual(m1.distance, c["distance"]) self.checkPickle(mat, checkSlots=False) self.checkPickle(mat2, checkSlots=False) self.checkMatchToFromCatalog(mat, cat) if False: s0 = mat[0][0] s1 = mat[0][1] print(s0.getRa(), s1.getRa(), s0.getId(), s1.getId())
def testIdentity(self): nobj = 1000 for i in range(nobj): s = self.ss1.addNew() s.setId(i) s.set(afwTable.SourceTable.getCoordKey().getRa(), (10 + 0.001*i) * afwGeom.degrees) s.set(afwTable.SourceTable.getCoordKey().getDec(), (10 + 0.001*i) * afwGeom.degrees) s = self.ss2.addNew() s.setId(2*nobj + i) # Give slight offsets for Coord testing of matches to/from catalog in checkMatchToFromCatalog() # Chosen such that the maximum offset (nobj*1E-7 deg = 0.36 arcsec) is within the maximum # distance (1 arcsec) in afwTable.matchRaDec. s.set(afwTable.SourceTable.getCoordKey().getRa(), (10 + 0.0010001*i) * afwGeom.degrees) s.set(afwTable.SourceTable.getCoordKey().getDec(), (10 + 0.0010001*i) * afwGeom.degrees) # Old API (pre DM-855) mat = afwTable.matchRaDec(self.ss1, self.ss2, 1.0 * afwGeom.arcseconds, False) self.assertEqual(len(mat), nobj) # New API mc = afwTable.MatchControl() mc.findOnlyClosest = False mat = afwTable.matchRaDec(self.ss1, self.ss2, 1.0*afwGeom.arcseconds, mc) self.assertEqual(len(mat), nobj) cat = afwTable.packMatches(mat) mat2 = afwTable.unpackMatches(cat, self.ss1, self.ss2) for m1, m2, c in zip(mat, mat2, cat): self.assertEqual(m1.first, m2.first) self.assertEqual(m1.second, m2.second) self.assertEqual(m1.distance, m2.distance) self.assertEqual(m1.first.getId(), c["first"]) self.assertEqual(m1.second.getId(), c["second"]) self.assertEqual(m1.distance, c["distance"]) self.checkPickle(mat, checkSlots=False) self.checkPickle(mat2, checkSlots=False) self.checkMatchToFromCatalog(mat, cat) if False: s0 = mat[0][0] s1 = mat[0][1] print s0.getRa(), s1.getRa(), s0.getId(), s1.getId()
def testIdentity(self): nobj = 1000 for i in range(nobj): s = self.ss1.addNew() s.setId(i) s.set(afwTable.SourceTable.getCoordKey().getRa(), (10 + 0.001 * i) * afwGeom.degrees) s.set(afwTable.SourceTable.getCoordKey().getDec(), (10 + 0.001 * i) * afwGeom.degrees) s = self.ss2.addNew() s.setId(2 * nobj + i) s.set(afwTable.SourceTable.getCoordKey().getRa(), (10 + 0.001 * i) * afwGeom.degrees) s.set(afwTable.SourceTable.getCoordKey().getDec(), (10 + 0.001 * i) * afwGeom.degrees) # Old API (pre DM-855) mat = afwTable.matchRaDec(self.ss1, self.ss2, 1.0 * afwGeom.arcseconds, False) self.assertEqual(len(mat), nobj) # New API mc = afwTable.MatchControl() mc.findOnlyClosest = False mat = afwTable.matchRaDec(self.ss1, self.ss2, 1.0 * afwGeom.arcseconds, mc) self.assertEqual(len(mat), nobj) cat = afwTable.packMatches(mat) mat2 = afwTable.unpackMatches(cat, self.ss1, self.ss2) for m1, m2, c in zip(mat, mat2, cat): self.assertEqual(m1.first, m2.first) self.assertEqual(m1.second, m2.second) self.assertEqual(m1.distance, m2.distance) self.assertEqual(m1.first.getId(), c["first"]) self.assertEqual(m1.second.getId(), c["second"]) self.assertEqual(m1.distance, c["distance"]) self.checkPickle(mat, checkSlots=False) self.checkPickle(mat2, checkSlots=False) if False: s0 = mat[0][0] s1 = mat[0][1] print s0.getRa(), s1.getRa(), s0.getId(), s1.getId()