Skip to content

Commit 7a613f5

Browse files
Fixes for Issues #16
1 parent b5604c6 commit 7a613f5

File tree

1 file changed

+36
-4
lines changed

1 file changed

+36
-4
lines changed

tle_util.py

Lines changed: 36 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,16 @@ def tle_fmt_int(num, digits=5):
9999
return string_int
100100

101101

102+
def tle_fmt_float(num,width=10):
103+
""" Return a left-aligned signed float string, with no leading zero left of the decimal """
104+
digits = (width-2)
105+
ret = "{:<.{DIGITS}f}".format(num,DIGITS=digits)
106+
if ret.startswith("0."):
107+
return " " + ret[1:]
108+
if ret.startswith("-0."):
109+
return "-" + ret[2:]
110+
111+
102112
def tle_fmt_epoch(EpochDateTime):
103113
""" Return an Epoch string in TLE format, with a total width of 14 characters
104114
@@ -392,6 +402,23 @@ def __init__(self, catalog=None, line0=None, line1=None, line2=None, tle_source_
392402
except TLEValueError:
393403
log.warning("{}: Encountered errors in processing the following TLE block:\t{}\n\t{}\n\t{}".format(self._tle_source_filename, self.line0,self.line1,self.line2))
394404

405+
def correct_value_ranges(self):
406+
""" Adjust angular ranges outside of customary ranges
407+
408+
e.g. 0 <= var1 < 360
409+
0 <= var2 < 180
410+
0 <= var3 < 2 pi
411+
0 <= var4 < pi
412+
"""
413+
self.raan_degrees = self.raan_degrees % 360
414+
self.arg_perigee_degrees = self.arg_perigee_degrees % 360
415+
self.mean_anomaly_degrees = self.mean_anomaly_degrees % 360
416+
417+
if (not (0 <= self.inclination_degrees <= 180)):
418+
self.inclination_degrees = self.inclination_degrees % 180
419+
self.raan_degrees = self.raan_degrees = (self.raan_degrees + 180) % 360
420+
421+
395422
def derived_values(self):
396423
""" Calculate values which are determined from TLE parameters """
397424
self.epoch_string = self.epoch_datetime.isoformat(timespec='microseconds')
@@ -622,13 +649,17 @@ def make_tle_lines(self):
622649
LAUNCH_NUM = self._id_launch_num,
623650
LAUNCH_PIECE_LETTER = self._id_launch_piece_letter)
624651

652+
self.correct_value_ranges()
653+
654+
tle_mean_motion_derivative = tle_fmt_float(self.mean_motion_derivative,width=10)
655+
625656
# TODO: Deal with First Derivative xno, Second derivative xno, Bstar
626-
line1 = "1 {:5d}{:1} {:<8s} {:14s} {:<10.8f} {:8s} {:8s} {:1d}{:4s}00".format(
657+
line1 = "1 {:05d}{:1} {:<8s} {:14s} {:10s} {:8s} {:8s} {:1d}{:4s}00".format(
627658
self.satellite_number,
628659
self.classification,
629660
packed_designation,
630661
tle_epoch,
631-
self.mean_motion_derivative,
662+
tle_mean_motion_derivative,
632663
tle_fmt_decimal_pack(self.mean_motion_sec_derivative),
633664
tle_fmt_decimal_pack(self.bstar),
634665
self.ephemeris_type,
@@ -777,7 +808,7 @@ def assumed_decimal_point(num_less_than_one, digits=7):
777808
string_num = "{0:.{DIGITS}f}".format(num,DIGITS=digits)
778809
return(string_num[2:])
779810

780-
811+
# FIXME: This function currently only used by elfind.py - update elfind to use make_tle_lines instead
781812
def make_tle(*, name="None", ssn, desig="0000000", epoch_datetime, xincl, xnodeo, eo, omegao, xmo, xno, deg=True, quiet=False):
782813
""" write TLE to output file and to screen """
783814

@@ -824,7 +855,7 @@ def make_tle(*, name="None", ssn, desig="0000000", epoch_datetime, xincl, xnodeo
824855
if not quiet:
825856
print("{:s}".format(line0))
826857

827-
line1 = "1 {:5d}U {:<8s} {:14s} 0.00000073 00000-0 50000-4 0 00".format(ssn,desig,tle_epoch)
858+
line1 = "1 {:05d}U {:<8s} {:14s} 0.00000073 00000-0 50000-4 0 00".format(ssn,desig,tle_epoch)
828859
# TODO: Deal with First Derivative xno, Second derivative xno, Bstar
829860
line2 = "2 {:05d} {:8.4f} {:8.4f} {:7s} {:8.4f} {:8.4f} {:11.8f} 00".format(
830861
ssn, xincl, xnodeo, eo_string, omegao, xmo, xno)
@@ -886,6 +917,7 @@ def make_tle_from_SGP4_satrec(satrec, classification="T"):
886917

887918
TLE.launch_piece_number = launch_piece_letter_to_number(TLE.designation)
888919

920+
TLE.correct_value_ranges()
889921
TLE.derived_values()
890922
TLE.make_tle_lines()
891923
TLE._fingerprint_tle()

0 commit comments

Comments
 (0)