ISCE_INSAR/components/isceobj/Orbit/test/test_orbit.py

106 lines
3.8 KiB
Python

import datetime
import logging
import unittest
from isceobj.Orbit.Orbit import Orbit, StateVector
class OrbitTest(unittest.TestCase):
def setUp(self):
logging.basicConfig()
self.linearOrbit = Orbit()
self.quadOrbit = Orbit()
linpos, linvel = self.generateLinearSV(10,[[1.0,2.0,3.0]],[[1.0/60.0 for j in range(3)]])
quadpos, quadvel = self.generateQuadraticSV(10,[[1.0,2.0,3.0]],0.1)
dt = datetime.datetime(year=2010,month=1,day=1)
for i in range(10):
linsv = StateVector()
quadsv = StateVector()
linsv.setTime(dt)
quadsv.setTime(dt)
linsv.setPosition(linpos[i])
linsv.setVelocity(linvel[i])
quadsv.setPosition(quadpos[i])
quadsv.setVelocity(quadvel[i])
self.linearOrbit.addStateVector(linsv)
self.quadOrbit.addStateVector(quadsv)
dt = dt + datetime.timedelta(minutes=1)
def tearDown(self):
del self.linearOrbit
del self.quadOrbit
def generateLinearSV(self,num,pos,vel):
for i in range(1,num):
sv = [0.0 for j in range(3)]
for j in range(3):
sv[j] = pos[i-1][j]+vel[i-1][j]*60.0
pos.append(sv)
vel.append(vel[0])
return pos,vel
def generateQuadraticSV(self,num,pos,rate):
vel = [[0.0 for j in range(3)]]
for t in range(1,num):
newPos = [0.0 for j in range(3)]
newVel = [0.0 for j in range(3)]
for j in range(3):
newPos[j] = pos[0][j] + rate*(t**2)
newVel[j] = 2.0*rate*t/60.0
pos.append(newPos)
vel.append(newVel)
return pos,vel
def testAddStateVector(self):
a = None
self.assertRaises(TypeError,self.linearOrbit.addStateVector,a)
def testLinearInterpolateOrbit(self):
ans = [2.5,3.5,4.5]
sv = self.linearOrbit.interpolateOrbit(datetime.datetime(year=2010,month=1,day=1,hour=0,minute=1,second=30),method='linear')
pos = sv.getPosition()
for i in range(3):
self.assertAlmostEquals(pos[i],ans[i],5)
ans = [1.225,2.225,3.225]
sv = self.quadOrbit.interpolateOrbit(datetime.datetime(year=2010,month=1,day=1,hour=0,minute=1,second=30),method='linear')
pos = sv.getPosition()
for i in range(3):
self.assertAlmostEquals(pos[i],ans[i],5)
def testHermiteInterpolateOrbit(self):
ans = [2.5,3.5,4.5]
sv = self.linearOrbit.interpolateOrbit(datetime.datetime(year=2010,month=1,day=1,hour=0,minute=1,second=30),method='hermite')
pos = sv.getPosition()
for i in range(3):
self.assertAlmostEquals(pos[i],ans[i],5)
ans = [1.225,2.225,3.225]
sv = self.quadOrbit.interpolateOrbit(datetime.datetime(year=2010,month=1,day=1,hour=0,minute=1,second=30),method='hermite')
pos = sv.getPosition()
for i in range(3):
self.assertAlmostEquals(pos[i],ans[i],5)
def testLegendreInterpolateOrbit(self):
ans = [4.5,5.5,6.5]
sv = self.linearOrbit.interpolateOrbit(datetime.datetime(year=2010,month=1,day=1,hour=0,minute=3,second=30),method='legendre')
pos = sv.getPosition()
for i in range(3):
self.assertAlmostEquals(pos[i],ans[i],5)
ans = [2.225,3.225,4.225]
sv = self.quadOrbit.interpolateOrbit(datetime.datetime(year=2010,month=1,day=1,hour=0,minute=3,second=30),method='legendre')
pos = sv.getPosition()
for i in range(3):
self.assertAlmostEquals(pos[i],ans[i],5)
def testInterpolateOrbitOutOfBounds(self):
dt = datetime.datetime(year=2010,month=1,day=2)
self.assertRaises(ValueError,self.linearOrbit.interpolateOrbit,dt)
if __name__ == "__main__":
unittest.main()