Exemplo n.º 1
0
 def testComputeAzAltFromPupilBaseWithVectorPupil100(self):
     """Test computeAzAltFromBasePupil with vectorPupil = (1, 0, 0),
     so internal az/alt points along vectorBase
     """
     vectorPupil = (1, 0, 0)
     for vectorBase, pupilMagFactor, baseMagFactor in itertools.product(
         ((1, 0, 0), (0, -1, 0), (0, -0.5, 0.5), (0.5, 0, 0.5), (1, 0.7, -0.8)),
         (1, 1000),
         (1, 1000),
     ):
         with self.subTest(vectorBase=vectorBase, pupilMagFactor=pupilMagFactor,
                           baseMagFactor=baseMagFactor):
             predictedPupilAzalt = SpherePoint(Vector3d(*vectorBase))
             vectorPupilScaled = np.array(vectorPupil, dtype=float) * pupilMagFactor
             vectorBaseScaled = np.array(vectorBase, dtype=float) * baseMagFactor
             pupilAzAlt = coordUtils.computeAzAltFromBasePupil(vectorPupil=vectorPupilScaled,
                                                               vectorBase=vectorBaseScaled)
             sep = pupilAzAlt.separation(predictedPupilAzalt)
             if sep.asRadians() > 1e-14:
                 print("Warning: sep={:0.5f} asec for vectorPupilScaled={}, vectorBaseScaled={}".format(
                       sep.asArcseconds(), vectorPupilScaled, vectorBaseScaled))
             # The worst error I see is 0.0026"
             # for vectorBase=(1, 0.7, -0.8).
             # That is worrisome, but acceptable.
             self.assertLess(sep.asArcseconds(), 0.01)
Exemplo n.º 2
0
 def testComputeAzAltFromPupilBase(self):
     """Test computeAzAltFromBasePupil with general values
     """
     # transform the pupil vector back to the base vector
     # using the computed internal az/alt position
     for vectorPupil, vectorBase, pupilMagFactor, baseMagFactor in itertools.product(
         ((1, 0, 0), (2, 1, 0), (2, 0, 1), (2, 0.7, -0.8)),
         ((1, 0, 0), (0, 1, 0), (1, -0.7, 0.8)),
         (1, 1000),
         (1, 1000),
     ):
         with self.subTest(vectorPupil=vectorPupil, vectorBase=vectorBase, pupilMagFactor=pupilMagFactor,
                           baseMagFactor=baseMagFactor):
             vectorPupilScaled = np.array(vectorPupil, dtype=float) * pupilMagFactor
             pupilMag = np.linalg.norm(vectorPupilScaled)
             vectorBaseScaled = np.array(vectorBase, dtype=float) * baseMagFactor
             pupilAzAlt = coordUtils.computeAzAltFromBasePupil(vectorPupil=vectorPupilScaled,
                                                               vectorBase=vectorBaseScaled)
             # Check the round trip; note that the magnitude
             # of the returned vector will equal
             # the magnitude of the input vector.
             vectorBaseRoundTrip = coordUtils.convertVectorFromPupilToBase(
                 vectorPupil=vectorPupilScaled,
                 pupilAzAlt=pupilAzAlt)
             vectorBaseRoundTripMag = np.linalg.norm(vectorBaseRoundTrip)
             self.assertAlmostEqual(vectorBaseRoundTripMag, pupilMag, delta=1e-15*pupilMag)
             spBase = SpherePoint(Vector3d(*vectorBase))
             spBaseRoundTrip = SpherePoint(Vector3d(*vectorBaseRoundTrip))
             sep = spBase.separation(spBaseRoundTrip)
             self.assertLess(sep.asRadians(), 2e-15)
Exemplo n.º 3
0
 def testComputeAzAltFromPupilBaseWithBaseEqualsPupil(self):
     """Test computeAzAltFromBasePupil with baseVector=pupilVector,
     so the telescope will to internal az, alt=0
     """
     zeroSp = SpherePoint(0, 0, radians)
     for vector, pupilMagFactor, baseMagFactor in itertools.product(
         ((1, 0, 0), (0.1, -1, 0), (0.1, -0.5, 0.5), (0.5, 0, 0.5), (1, 0.7, -0.8)),
         (1, 1000),
         (1, 1000),
     ):
         with self.subTest(vector=vector, pupilMagFactor=pupilMagFactor, baseMagFactor=baseMagFactor):
             vectorPupil = np.array(vector, dtype=float) * pupilMagFactor
             vectorBase = np.array(vector, dtype=float) * baseMagFactor
             obs = coordUtils.computeAzAltFromBasePupil(vectorPupil=vectorPupil,
                                                        vectorBase=vectorBase)
             sep = zeroSp.separation(obs).asRadians()
             self.assertLess(sep, 1e-14)