B3 OBS Formats in ODTK

B3 OBS Formats in ODTK (v4.1 and above)

The official Air Force B3 OBS archive format has not been provided to AGI. However, the following B3 format should be close, based on several unofficial sources andsignificant review of historical data sets. This format is the archive format, not the transmission format as sent by various sensors in the Space Surveillance Network. If you aren't sure which type of B3 observations you have, examine the first two characters of each line. If they are "))" (without quotes), then you have transmit B3 observations.

B3 OBS Types in ODTK

Type Data Items used in ODTK
0 Range rate only
1 Azimuth and elevation
2 Range, azimuth, and elevation
3 Range, azimuth, elevation, and range rate
4 Range, azimuth, elevation, and range rate (extra measurements for azimuth rate, elevation rate, etc., are ignored)
5 Right ascension and declination
6 Range only
8 Space-based azimuth, elevation, and sometimes range and EFG position of the sensor
9 Space-based right ascension, declination, and sometimes range and EFG position of the sensor

For all types, the following format applies. If an OBS type does not include a specific measurand, then those columns are blank.

Columns Description
1 Security classification; typically "U" = unclassified; may be other characters as well
2-6 SSSSS = Integer satellite ID corresponding to the SSC number
7-9 sss = Integer sensor ID
10-11 YY = year (assumes 20YY if YY ≤ 50, 19YY if YY > 50)
12-14 DDD = day of year, where 1 Jan is considered to be day 1
15-23 HHMMSSSSS, hour, min, seconds, where implied decimal is SS.SSS (or think of SSSSS as the number of milliseconds)
24-29 EEEEEE = either the elevation or declination value in degrees, with implied decimal EE.EEEE. Negative elevation / declination values are formatted as overpunched [1] values.
30 Blank; most likely a remnant of the weighting flag used in the transmit B3 format
31-37 AAAAAAA = Azimuth or right ascension; azimuth is in degrees with implied decimal AAA.AAAA always positive; right ascension in HHMMSSS, with implied decimal in SS.S
38 Blank; most likely a remnant of the weighting flag used in the transmit B3 format
39-45 RRRRRRR = Range in km RR.RRRRR*10^E. Types 8 and 9 commonly do not have a range value and these columns will be set to "0000000".
46 E = Range exponent (0 < E < 5). Types 8 and 9 will leave this blank if the range value is "0000000".
47-73 Observation type specific; see the sections below
74 Blank
75 Obs type
76 Equinox indicator that specifies the inertial frame for optical observations (Types 5 and 9 only); if used:

0 - True Equator Mean Equinox of Date
1 - Mean Equator Mean Equinox of Jan 0
2 - Mean Equator Mean Equinox of J2000
3 - Mean Equator Mean Equinox of B1950
If the observation record is only 75 bytes long or if column 76 contains a space character, the optical frame specified in the associated tracking object in ODTK will be used.

For types other than 8 or 9 columns, 47-73 are defined using the format:

Columns Description
47 Blank; most likely a remnant of the weighting flag used in the transmit B3 format
48-54 rrrrrrr = slant range rate (km/s), with implied decimal rr.rrrrr. For negative range rate, the first digit will be a "-" character and you'll have one less digit of precision.
55-73 Blank

For types 8 and 9 columns, 47-73 are defined using the format:

Columns Description
47-55 XXXXXXXXX = X/Y/Z X component of sensor position in meters, column 47 is reserved for the sign, decimal implied after column 55
56-64 XXXXXXXXX = X/Y/Z Y component of sensor position in meters, column 56 is reserved for the sign, decimal implied after column 64
65-73 XXXXXXXXX = X/Y/Z Z component of sensor position in meters, column 65 is reserved for the sign, decimal implied after column 73

EFG coordinates are pseudo-body-fixed coordinates that differ from Earth-fixed coordinates by the effect of polar motion. These coordinates are sometimes referred to as True of Date Rotating (TDR) coordinates.

Overpunched values are remnants of the days when data was stored on 80-column cards. To indicate that a value is negative, you would normally place a negative sign "-" character in front of it. When using fixed format values this would cause you to lose a digit of precision. So instead you simply "overpunched" the first digit. See https://en.wikipedia.org/wiki/Punch_card for details. The end result is the translation J = -1, K = -2, ..., R = -9.