Example #1
0
    def testBasics(self):
        """Test basic functionality of Site
        """
        for long in (54.3, -134.5):
            for lat in (-23.4, 12.3):
                for elev in (2789, 6543):
                    site = coordConv.Site(long, lat, elev)
                    self.assertEqual(long, site.meanLong)
                    self.assertEqual(lat, site.meanLat)
                    self.assertEqual(elev, site.elev)
                    self.assertAlmostEqual(long, site.corrLong)
                    self.assertAlmostEqual(lat, site.corrLat)
                    site.setPoleWander(0, 0)
                    self.assertAlmostEqual(long, site.corrLong)
                    self.assertAlmostEqual(lat, site.corrLat)
                    for xArcsec in (-0.3, 0, 0.3):
                        x = xArcsec / 3600.0
                        for yArcsec in (-0.3, 0, 0.3):
                            y = yArcsec / 3600.0
                            site.setPoleWander(x, y)
                            # the following is an approximation given in the header of slaPolmo
                            approxCorrLong = long + (x * coordConv.cosd(long)
                                                     ) - (y *
                                                          coordConv.sind(long))
                            approxCorrLat = lat + (
                                ((x * coordConv.sind(long)) +
                                 (y * coordConv.cosd(long))) *
                                coordConv.tand(lat))
                            self.assertAlmostEqual(approxCorrLong,
                                                   site.corrLong, 3)
                            self.assertAlmostEqual(approxCorrLat, site.corrLat,
                                                   3)

                            siteCopy = coordConv.Site(site)
                            self.assertEqual(repr(site), repr(siteCopy))
 def testRightTriangle(self):
     """
     right triangle: B = 90, a and c vary but avoid poles
     tan C = tan c / sin a
     tan c = (tan a / sinA * sinb)
     with some tweaks to handle the other quadrants
     """
     ang_B = 90.0
     for side_aa in (1.0, 20.0, 45.0, 90, 110.0, 179.0):
         for side_cc in (1.0, 20.0, 45.0, 90.0, 110.0, 179.0):
             ang_A = atan2d(tand(side_aa), sind(side_cc))
             ang_C = atan2d(tand(side_cc), sind(side_aa))
             side_bb = atan2d(tand(side_aa), sind(ang_A) * cosd(side_cc))
             # these tweaks handle other quadrants; they're based on what works, so are somewhat suspect
             if side_bb < 0:
                 side_bb = -side_bb
             if ang_A < 0:
                 ang_A = 180.0 + ang_A
             if ang_C < 0:
                 ang_C = 180.0 + ang_C
             self.checkOne((side_aa, ang_B, side_cc),
                           (ang_A, side_bb, ang_C))
Example #3
0
 def testTrig(self):
     """Test degrees-based trig functions
     """
     for ang in (0, -1, 31.2, -235, 234324):
         angRad = ang * coordConv.RadPerDeg
         self.assertAlmostEqual(coordConv.sind(ang), math.sin(angRad))
         self.assertAlmostEqual(coordConv.cosd(ang), math.cos(angRad))
         self.assertAlmostEqual(coordConv.tand(ang), math.tan(angRad))
         self.assertAlmostEqual(coordConv.atand(ang) * coordConv.RadPerDeg, math.atan(ang))
         for ang2 in (0, 35, -364):
             self.assertAlmostEqual(coordConv.atan2d(ang, ang2) * coordConv.RadPerDeg, math.atan2(ang, ang2))
     
     for val in (-1, -0.34, 0, 0.67, 1):
         self.assertAlmostEqual(coordConv.asind(val) * coordConv.RadPerDeg, math.asin(val))
         self.assertAlmostEqual(coordConv.acosd(val) * coordConv.RadPerDeg, math.acos(val))