Ejemplo n.º 1
0
    def testCD_PC(self):
        """Test that we can read a FITS file with both CD and PC keys (like early Suprimecam files)"""
        md = PropertyList()
        for k, v in (
            ("EQUINOX", 2000.0),
            ("RADESYS", "ICRS"),
            ("CRPIX1", 5353.0),
            ("CRPIX2", -35.0),
            ("CD1_1", 0.0),
            ("CD1_2", -5.611E-05),
            ("CD2_1", -5.611E-05),
            ("CD2_2", -0.0),
            ("CRVAL1", 4.5789875),
            ("CRVAL2", 16.30004444),
            ("CUNIT1", "deg"),
            ("CUNIT2", "deg"),
            ("CTYPE1", "RA---TAN"),
            ("CTYPE2", "DEC--TAN"),
            ("CDELT1", -5.611E-05),
            ("CDELT2", 5.611E-05),
        ):
            md.set(k, v)

        wcs = makeSkyWcs(md, strip=False)

        pixPos = Point2D(1000, 2000)
        pred_skyPos = SpherePoint(4.459815023498577 * degrees,
                                  16.544199850984768 * degrees)

        skyPos = wcs.pixelToSky(pixPos)
        self.assertSpherePointsAlmostEqual(skyPos, pred_skyPos)

        for badPC in (False, True):
            for k, v in (
                ("PC001001", 0.0),
                ("PC001002", -1.0 if badPC else 1.0),
                ("PC002001", 1.0 if badPC else -1.0),
                ("PC002002", 0.0),
            ):
                md.set(k, v)

            # Check Greisen and Calabretta A&A 395 1061 (2002), Eq. 3
            if not badPC:
                for i in (
                        1,
                        2,
                ):
                    for j in (
                            1,
                            2,
                    ):
                        self.assertEqual(
                            md.get("CD%d_%d" % (i, j)),
                            md.get("CDELT%d" % i) * md.get("PC00%d00%d" %
                                                           (i, j)))

            wcs2 = makeSkyWcs(md, strip=False)
            skyPos2 = wcs2.pixelToSky(pixPos)
            self.assertSpherePointsAlmostEqual(skyPos2, pred_skyPos)
Ejemplo n.º 2
0
 def testSetVisitInfoMetadataMissingValues(self):
     """If a value is unknown then it should not be written to the metadata"""
     visitInfo = afwImage.makeVisitInfo()  # only rot type is known
     metadata = PropertyList()
     afwImage.setVisitInfoMetadata(metadata, visitInfo)
     self.assertEqual(metadata.get("ROTTYPE"),
                      RotTypeEnumNameDict[afwImage.RotType_UNKNOWN])
     self.assertEqual(metadata.nameCount(), 1)
Ejemplo n.º 3
0
    def testNoConflicts(self):
        """Test combination with valid values and no overlap,
        except COMMENT and HISTORY, which are combined
        """
        md1 = PropertyList()
        md1.set("int1", [1, 2])
        md1.set("float1", 1.23)
        md1.set("string1", "md1 string1 value")
        md1.set("COMMENT", "md1 comment")
        md1.set("HISTORY", "md1 history")
        md1Copy = md1.deepCopy()

        md2 = PropertyList()
        md2.set("int2", 2)
        md2.set("float2", [2.34, -3.45])
        md2.set("string2", "md2 string2 value")
        md2.set("COMMENT", "md2 comment")
        md2.set("HISTORY", "md2 history")
        md2Copy = md2.deepCopy()

        result = combineMetadata(md1, md2)
        self.assertEqual(result.getOrderedNames(), [
            "int1", "float1", "string1", "COMMENT", "HISTORY", "int2",
            "float2", "string2"
        ])
        self.assertEqual(result.get("COMMENT"), ["md1 comment", "md2 comment"])
        self.assertEqual(result.get("HISTORY"), ["md1 history", "md2 history"])
        for name in md1.getOrderedNames():
            if name in ("COMMENT", "HISTORY"):
                continue
            self.assertEqual(result.get(name), getLast(md1.get(name)))
        for name in md2.getOrderedNames():
            if name in ("COMMENT", "HISTORY"):
                continue
            self.assertEqual(result.get(name), getLast(md2.get(name)))

        # input should be unchanged
        self.assertMetadataEqual(md1, md1Copy)
        self.assertMetadataEqual(md2, md2Copy)
Ejemplo n.º 4
0
    def testReplaceDuplicates(self):
        """Test that names in `second` override those in `first`, regardless of type
        """
        # names that start with "item" appear in both sets of metadata
        md1 = PropertyList()
        md1.set("int1", 5)
        md1.set("itema", [1, 2])
        md1.set("float1", 3.1)
        md1.set("itemb", 1.23)
        md1.set("string1", "md1 string1 value")
        md1.set("itemc", "md1 string value")
        md1Copy = md1.deepCopy()

        md2 = PropertyList()
        md2.set("itemc", 2)
        md2.set("int2", 2)
        md2.set("itemb", ["some data", "more data"])
        md2.set("float2", 2.34)
        md2.set("itema", 5.27)
        md2.set("string2", "md2 string value")
        md2Names = md2.getOrderedNames()
        md2Copy = md2.deepCopy()

        result = combineMetadata(md1, md2)
        expectedNames = ["int1", "float1", "string1"] + list(md2Names)
        self.assertEqual(result.getOrderedNames(), expectedNames)
        md2NameSet = set(md2Names)
        for name in result.getOrderedNames():
            if name in md2NameSet:
                self.assertEqual(result.get(name), getLast(md2.get(name)))
            else:
                self.assertEqual(result.get(name), getLast(md1.get(name)))

        # input should be unchanged
        self.assertMetadataEqual(md1, md1Copy)
        self.assertMetadataEqual(md2, md2Copy)
Ejemplo n.º 5
0
 def testSetVisitInfoMetadata(self):
     for item in (self.data1, self.data2):
         visitInfo = afwImage.VisitInfo(
             item.exposureId,
             item.exposureTime,
             item.darkTime,
             item.date,
             item.ut1,
             item.era,
             item.boresightRaDec,
             item.boresightAzAlt,
             item.boresightAirmass,
             item.boresightRotAngle,
             item.rotType,
             item.observatory,
             item.weather,
         )
         metadata = PropertyList()
         afwImage.setVisitInfoMetadata(metadata, visitInfo)
         self.assertEqual(metadata.nameCount(), 20)
         self.assertEqual(metadata.get("EXPID"), item.exposureId)
         self.assertEqual(metadata.get("EXPTIME"), item.exposureTime)
         self.assertEqual(metadata.get("DARKTIME"), item.darkTime)
         self.assertEqual(metadata.get("DATE-AVG"),
                          item.date.toString(DateTime.TAI))
         self.assertEqual(metadata.get("TIMESYS"), "TAI")
         self.assertEqual(metadata.get("MJD-AVG-UT1"), item.ut1)
         self.assertEqual(metadata.get("AVG-ERA"), item.era.asDegrees())
         self.assertEqual(metadata.get("BORE-RA"),
                          item.boresightRaDec[0].asDegrees())
         self.assertEqual(metadata.get("BORE-DEC"),
                          item.boresightRaDec[1].asDegrees())
         self.assertEqual(metadata.get("BORE-AZ"),
                          item.boresightAzAlt[0].asDegrees())
         self.assertEqual(metadata.get("BORE-ALT"),
                          item.boresightAzAlt[1].asDegrees())
         self.assertEqual(metadata.get("BORE-AIRMASS"),
                          item.boresightAirmass)
         self.assertEqual(metadata.get("BORE-ROTANG"),
                          item.boresightRotAngle.asDegrees())
         self.assertEqual(metadata.get("ROTTYPE"),
                          RotTypeEnumNameDict[item.rotType])
         self.assertEqual(metadata.get("OBS-LONG"),
                          item.observatory.getLongitude().asDegrees())
         self.assertEqual(metadata.get("OBS-LAT"),
                          item.observatory.getLatitude().asDegrees())
         self.assertEqual(metadata.get("OBS-ELEV"),
                          item.observatory.getElevation())
         self.assertEqual(metadata.get("AIRTEMP"),
                          item.weather.getAirTemperature())
         self.assertEqual(metadata.get("AIRPRESS"),
                          item.weather.getAirPressure())
         self.assertEqual(metadata.get("HUMIDITY"),
                          item.weather.getHumidity())