def test_SpecFrameBasics(self):
        frame = ast.SpecFrame()
        self.assertEqual(frame.className, "SpecFrame")
        self.assertEqual(frame.nIn, 1)
        self.assertEqual(frame.nAxes, 1)
        self.assertEqual(frame.maxAxes, 1)
        self.assertEqual(frame.minAxes, 1)
        self.assertEqual(frame.alignSystem, "WAVE")
        self.assertEqual(frame.dut1, 0.0)
        self.assertEqual(frame.epoch, 2000.0)
        self.assertEqual(frame.obsAlt, 0.0)
        self.assertEqual(frame.obsLat, "N0:00:00.00")
        self.assertEqual(frame.obsLon, "E0:00:00.00")
        self.assertTrue(frame.permute)
        self.assertFalse(frame.preserveAxes)
        self.assertEqual(frame.system, "WAVE")
        self.assertEqual(frame.title, "Wavelength")

        self.assertGreater(abs(frame.getBottom(1)), 1e99)
        self.assertGreater(abs(frame.getTop(1)), 1e99)
        self.assertGreater(frame.getTop(1), frame.getBottom(1))
        self.assertTrue(frame.getDirection(1))
        self.assertEqual(frame.getInternalUnit(1), "Angstrom")
        self.assertEqual(frame.getNormUnit(1), "")
        self.assertEqual(frame.getSymbol(1), "WAVE")
        self.assertEqual(frame.getUnit(1), "Angstrom")

        self.checkCopy(frame)
        self.checkPersistence(frame)
Exemple #2
0
    def test_FitsChanTAB(self):
        """Test that FITS -TAB WCS can be created.
        """

        wavelength = np.array([0., 0.5, 1.5, 3., 5.])

        # Create a FrameSet using a LutMap with non-linear coordinates
        pixelFrame = ast.Frame(1, "Domain=PIXELS")
        wavelengthFrame = ast.SpecFrame("System=wave, unit=nm")
        lutMap = ast.LutMap(wavelength, 1, 1)
        frameSet = ast.FrameDict(pixelFrame)
        frameSet.addFrame("PIXELS", lutMap, wavelengthFrame)

        # Now serialize it using -TAB WCS
        fc = writeFitsWcs(frameSet, "TabOk=1")

        fv = fc.getFitsS("CTYPE1")
        self.assertEqual(fv.value, "WAVE-TAB")

        # PS1_0 is the table extension name
        fv = fc.getFitsS("PS1_0")
        waveext = fv.value
        self.assertEqual(waveext, "WCS-TAB")

        # PS1_1 is the column name for the wavelength
        fv = fc.getFitsS("PS1_1")
        wavecol = fv.value
        self.assertEqual(wavecol, "COORDS1")

        # Get the WCS table from the FitsChan
        km = fc.getTables()
        table = km.getA(waveext, 0)
        fc_bintab = table.getTableHeader()

        fv = fc_bintab.getFitsS("TDIM1")
        self.assertEqual(fv.value, "(1,5)")

        self.assertEqual(table.nRow, 1)
        self.assertEqual(table.nColumn, 1)

        # 1-based column numbering to match FITS
        cname = table.columnName(1)
        self.assertEqual(cname, "COORDS1")
        self.assertEqual(table.columnType(cname), ast.DataType.DoubleType)
        self.assertEqual(table.columnSize(cname), 40)
        self.assertEqual(table.columnNdim(cname), 2)
        self.assertEqual(table.columnUnit(cname), "nm")
        self.assertEqual(table.columnLength(cname), 5)
        self.assertEqual(table.columnShape(cname), [1, 5])
        coldata = table.getColumnData1D(cname)
        self.assertEqual(list(coldata), list(wavelength))

        # This will be shaped correctly as a numpy array with third dimension
        # the row count.
        coldata = table.getColumnData(cname)
        self.assertEqual(coldata.ndim, 3)
        self.assertEqual(coldata.shape, (1, 5, 1))
    def test_SpecFrameSetGetRefPos(self):
        frame = ast.SpecFrame()
        self.assertEqual(frame.className, "SpecFrame")
        sky = ast.SkyFrame()
        frame.setRefPos(sky, 0, 1)

        refpos = frame.getRefPos(sky)
        self.assertAlmostEqual(refpos[0], 0, places=5)
        self.assertAlmostEqual(refpos[1], 1)
        self.assertEqual(frame.getInternalUnit(1), frame.getUnit(1))
        self.assertEqual(frame.getInternalUnit(1), "Angstrom")