76 lines
2.3 KiB
Python
76 lines
2.3 KiB
Python
|
|
||
|
import re
|
||
|
import datetime
|
||
|
from isceobj.Orbit.Orbit import Orbit,StateVector
|
||
|
|
||
|
class PDS(object):
|
||
|
|
||
|
def __init__(self,file=None):
|
||
|
self.filename = file
|
||
|
self.firstEpoch = 0
|
||
|
self.lastEpoch = 0
|
||
|
self.orbit = Orbit()
|
||
|
self.orbit.configure()
|
||
|
self.orbit.setOrbitSource('PDS')
|
||
|
|
||
|
def getOrbit(self):
|
||
|
return self.orbit
|
||
|
|
||
|
def parse(self):
|
||
|
fp = open(self.filename,'r')
|
||
|
for line in fp.readlines():
|
||
|
if (line[0].isdigit()):
|
||
|
self.__parseStateVectorLine(line)
|
||
|
else:
|
||
|
self.__parseRecordLine(line)
|
||
|
fp.close()
|
||
|
|
||
|
|
||
|
def __parseRecordLine(self,line):
|
||
|
line = line.strip()
|
||
|
if (line.startswith('START_TIME')):
|
||
|
values = line.split('=')
|
||
|
values[1] = values[1].strip('"')
|
||
|
dateTime = values[1].split()
|
||
|
self.firstEpoch = self.__parseDateTimeString(dateTime[0],dateTime[1])
|
||
|
elif (line.startswith('STOP_TIME')):
|
||
|
values = line.split('=')
|
||
|
values[1] = values[1].strip('"')
|
||
|
dateTime = values[1].split()
|
||
|
self.lastEpoch = self.__parseDateTimeString(dateTime[0],dateTime[1])
|
||
|
elif (line.startswith('LEAP_UTC')):
|
||
|
pass
|
||
|
elif (line.startswith('LEAP_SIGN')):
|
||
|
pass
|
||
|
elif (line.startswith('RECORD_SIZE')):
|
||
|
pass
|
||
|
elif (line.startswith('NUM_REC')):
|
||
|
pass
|
||
|
|
||
|
def __parseStateVectorLine(self,line):
|
||
|
date = line[0:11]
|
||
|
time = line[12:27]
|
||
|
x = float(line[44:56])
|
||
|
y = float(line[57:69])
|
||
|
z = float(line[70:82])
|
||
|
vx = float(line[83:95])
|
||
|
vy = float(line[96:108])
|
||
|
vz = float(line[109:121])
|
||
|
|
||
|
dt = self.__parseDateTimeString(date,time)
|
||
|
|
||
|
sv = StateVector()
|
||
|
sv.configure()
|
||
|
sv.setTime(dt)
|
||
|
sv.setPosition([x,y,z])
|
||
|
sv.setVelocity([vx,vy,vz])
|
||
|
self.orbit.addStateVector(sv)
|
||
|
|
||
|
def __parseDateTimeString(self,date,time):
|
||
|
"""
|
||
|
Fix idiosyncrasies in the date and time strings
|
||
|
"""
|
||
|
time = time.replace('-','0') # For some reason, there are occasionally - signs where there should be zeros
|
||
|
dt = datetime.datetime.strptime(date + ' ' + time,'%d-%b-%Y %H:%M:%S.%f')
|
||
|
return dt
|