def testArrayValues(self):
        """Check that only the final value is used from an array
        """
        metadata = PropertyList()
        # work around DM-13232 by setting ABOOL one value at a time
        for value in [True, True, True, False]:
            metadata.add("ABOOL", value)
        dataList = [
            ("AFLOAT", [1.2e25, -5.6]),
            ("ANINT", [-5, 752, 1052]),
            ("ASTRING1", ["value for string", "more"]),
        ]
        for name, value in dataList:
            metadata.set(name, value)

        header = makeLimitedFitsHeader(metadata)

        expectedLines = [  # without padding to 80 chars
            "ABOOL   = F",
            "AFLOAT  =                 -5.6",
            "ANINT   =                 1052",
            "ASTRING1= 'more'",
        ]
        expectedHeader = "".join("%-80s" % val for val in expectedLines)

        self.assertHeadersEqual(header, expectedHeader)

        self.checkExcludeNames(metadata, expectedLines)
예제 #2
0
 def testAgainstAstropyWcs(self):
     skyWcs = makeSkyWcs(self.metadata, strip=False)
     header = makeLimitedFitsHeader(self.metadata)
     astropyWcs = astropy.wcs.WCS(header)
     self.assertSkyWcsAstropyWcsAlmostEqual(skyWcs=skyWcs,
                                            astropyWcs=astropyWcs,
                                            bbox=self.bbox)
    def testArrayValues(self):
        """Check that only the final value is used from an array
        """
        metadata = PropertyList()
        # work around DM-13232 by setting ABOOL one value at a time
        for value in [True, True, True, False]:
            metadata.add("ABOOL", value)
        dataList = [
            ("AFLOAT", [1.2e25, -5.6]),
            ("ANINT", [-5, 752, 1052]),
            ("ASTRING1", ["value for string", "more"]),
        ]
        for name, value in dataList:
            metadata.set(name, value)

        header = makeLimitedFitsHeader(metadata)

        expectedLines = [  # without padding to 80 chars
            "ABOOL   = F",
            "AFLOAT  =                 -5.6",
            "ANINT   =                 1052",
            "ASTRING1= 'more'",
        ]
        expectedHeader = "".join("%-80s" % val for val in expectedLines)

        self.assertHeadersEqual(header, expectedHeader)

        self.checkExcludeNames(metadata, expectedLines)
예제 #4
0
    def testBasics(self):
        """Check basic formatting and skipping bad values
        """
        metadata = PropertyList()
        dataList = [
            ("ABOOL", True),
            ("AFLOAT", 1.2e25),
            ("ANINT", -5),
            ("LONGNAME1", 1),  # name is longer than 8 characters; skip it
            ("LONGSTR", "skip this item because the formatted value "
                "is too long: longer than 80 characters "),
            ("ASTRING1", "value for string"),
        ]
        for name, value in dataList:
            metadata.set(name, value)

        header = makeLimitedFitsHeader(metadata)

        expectedLines = [  # without padding to 80 chars
            "ABOOL   = 1",
            "AFLOAT  =              1.2E+25",
            "ANINT   =                   -5",
            "ASTRING1= 'value for string'",
        ]
        expectedHeader = "".join("%-80s" % val for val in expectedLines)

        self.assertEqual(header, expectedHeader)

        self.checkExcludeNames(metadata, expectedLines)
예제 #5
0
 def testAgainstAstropyWcs(self):
     skyWcs = makeSkyWcs(self.metadata, strip=False)
     header = makeLimitedFitsHeader(self.metadata)
     astropyWcs = astropy.wcs.WCS(header)
     bbox = Box2D(Point2D(-1000, -1000), Extent2D(3000, 3000))
     self.assertSkyWcsAstropyWcsAlmostEqual(skyWcs=skyWcs,
                                            astropyWcs=astropyWcs,
                                            bbox=bbox)
    def checkExcludeNames(self, metadata, expectedLines):
        """Check that makeLimitedFitsHeader properly excludes specified names
        """
        names = metadata.names()

        # skip each name in turn, then skip all names at once
        excludeNamesList = [set([name]) for name in names]
        excludeNamesList.append(set(names))

        for excludeNames in excludeNamesList:
            header = makeLimitedFitsHeader(metadata, excludeNames=excludeNames)
            expectedHeader = "".join("%-80s" % val for val in expectedLines
                                     if val[0:8].strip() not in excludeNames)
            self.assertHeadersEqual(header, expectedHeader)
    def checkExcludeNames(self, metadata, expectedLines):
        """Check that makeLimitedFitsHeader properly excludes specified names
        """
        names = metadata.names()

        # skip each name in turn, then skip all names at once
        excludeNamesList = [set([name]) for name in names]
        excludeNamesList.append(set(names))

        for excludeNames in excludeNamesList:
            header = makeLimitedFitsHeader(metadata, excludeNames=excludeNames)
            expectedHeader = "".join("%-80s" % val for val in expectedLines
                                     if val[0:8].strip() not in excludeNames)
            self.assertHeadersEqual(header, expectedHeader)
예제 #8
0
    def testBasics(self):
        """Check basic formatting and skipping bad values
        """
        metadata = PropertyList()
        dataList = [
            ("ABOOL", True),
            ("AFLOAT", 1.2e25),
            ("AFLOAT2", 1.0e30),
            ("ANINT", -5),
            ("AFLOATZ", 0.0),  # ensure a float stays a float
            ("INTFLOAT", -5.0),
            ("LONGFLT", 0.0089626337538440005),
            ("ANUNDEF", None),
            ("LONGNAME1", 1),  # name is longer than 8 characters; skip it
            ("LONGSTR", "skip this item because the formatted value "
                "is too long: longer than 80 characters "),
            ("ASTRING1", "value for string"),
            ("ANAN", float("NaN"))
        ]
        for name, value in dataList:
            metadata.set(name, value)

        header = makeLimitedFitsHeader(metadata)

        expectedLines = [  # without padding to 80 chars
            "ABOOL   = T",
            "AFLOAT  =              1.2E+25",
            "AFLOAT2 =                1E+30",
            "ANINT   =                   -5",
            "AFLOATZ =                    0.0",
            "INTFLOAT=                   -5.0",
            "LONGFLT = 0.0089626337538440005",
            "ANUNDEF =",
            "ASTRING1= 'value for string'",
            "ANAN    =",
        ]
        expectedHeader = "".join("%-80s" % val for val in expectedLines)

        self.assertHeadersEqual(header, expectedHeader)

        self.checkExcludeNames(metadata, expectedLines)
    def testSinglePrecision(self):
        """Check that single precision floats do work"""
        metadata = PropertyList()

        # Numeric form of single precision floats need smaller precision
        metadata.setFloat("SINGLE", 3.14159)
        metadata.setFloat("SINGLEI", 5.0)
        metadata.setFloat("SINGLEE", -5.9e20)
        metadata.setFloat("EXP", -5e10)

        header = makeLimitedFitsHeader(metadata)

        expectedLines = [  # without padding to 80 chars
            "SINGLE  =              3.14159",
            "SINGLEI =                  5.0",
            "SINGLEE =             -5.9E+20",
            "EXP     =               -5E+10",
        ]
        expectedHeader = "".join("%-80s" % val for val in expectedLines)

        self.assertHeadersEqual(header, expectedHeader, rtol=np.finfo(np.float32).resolution)
예제 #10
0
    def testSinglePrecision(self):
        """Check that single precision floats do work"""
        metadata = PropertyList()

        # Numeric form of single precision floats need smaller precision
        metadata.setFloat("SINGLE", 3.14159)
        metadata.setFloat("SINGLEI", 5.0)
        metadata.setFloat("SINGLEE", -5.9e20)
        metadata.setFloat("EXP", -5e10)

        header = makeLimitedFitsHeader(metadata)

        expectedLines = [  # without padding to 80 chars
            "SINGLE  =              3.14159",
            "SINGLEI =                  5.0",
            "SINGLEE =             -5.9E+20",
            "EXP     =               -5E+10",
        ]
        expectedHeader = "".join("%-80s" % val for val in expectedLines)

        self.assertHeadersEqual(header, expectedHeader, rtol=np.finfo(np.float32).resolution)
    def testBasics(self):
        """Check basic formatting and skipping bad values
        """
        metadata = PropertyList()
        dataList = [
            ("ABOOL", True),
            ("AFLOAT", 1.2e25),
            ("AFLOAT2", 1.0e30),
            ("ANINT", -5),
            ("AFLOATZ", 0.0),  # ensure a float stays a float
            ("INTFLOAT", -5.0),
            ("LONGFLT", 0.0089626337538440005),
            ("ANUNDEF", None),
            ("LONGNAME1", 1),  # name is longer than 8 characters; skip it
            ("LONGSTR", "skip this item because the formatted value "
                "is too long: longer than 80 characters "),
            ("ASTRING1", "value for string"),
        ]
        for name, value in dataList:
            metadata.set(name, value)

        header = makeLimitedFitsHeader(metadata)

        expectedLines = [  # without padding to 80 chars
            "ABOOL   = T",
            "AFLOAT  =              1.2E+25",
            "AFLOAT2 =                1E+30",
            "ANINT   =                   -5",
            "AFLOATZ =                    0.0",
            "INTFLOAT=                   -5.0",
            "LONGFLT = 0.0089626337538440005",
            "ANUNDEF =",
            "ASTRING1= 'value for string'",
        ]
        expectedHeader = "".join("%-80s" % val for val in expectedLines)

        self.assertHeadersEqual(header, expectedHeader)

        self.checkExcludeNames(metadata, expectedLines)
예제 #12
0
 def testAgainstAstropyWcs(self):
     bbox = Box2D(Point2D(-1000, -1000), Extent2D(2000, 2000))
     for crval, orientation, flipX, projection in itertools.product(
             self.crvalList, self.orientationList, (False, True),
         ("TAN", "STG", "CEA", "AIT")):
         cdMatrix = makeCdMatrix(scale=self.scale,
                                 orientation=orientation,
                                 flipX=flipX)
         metadata = makeSimpleWcsMetadata(crpix=self.crpix,
                                          crval=crval,
                                          cdMatrix=cdMatrix,
                                          projection=projection)
         header = makeLimitedFitsHeader(metadata)
         astropyWcs = astropy.wcs.WCS(header)
         skyWcs = makeSkyWcs(crpix=self.crpix,
                             crval=crval,
                             cdMatrix=cdMatrix,
                             projection=projection)
         # Most projections only seem to agree to within 1e-4 in the round trip test
         self.assertSkyWcsAstropyWcsAlmostEqual(skyWcs=skyWcs,
                                                astropyWcs=astropyWcs,
                                                bbox=bbox)