ootk 6.0.0-rc.2 → 6.0.0-rc.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/settings.local.json +9 -1
- package/CLAUDE.md +67 -0
- package/FUTURE-WORK.md +325 -0
- package/dist/body/CelestialBody.d.ts +155 -0
- package/dist/body/CelestialBody.js +207 -0
- package/dist/body/CelestialBody.js.map +1 -0
- package/{src/optimize/SimplexEntry.ts → dist/body/CelestialBodyType.d.ts} +22 -31
- package/dist/body/CelestialBodyType.js +55 -0
- package/dist/body/CelestialBodyType.js.map +1 -0
- package/dist/body/EphemerisBody.d.ts +153 -0
- package/dist/body/EphemerisBody.js +235 -0
- package/dist/body/EphemerisBody.js.map +1 -0
- package/dist/body/MoonBody.d.ts +200 -0
- package/dist/body/MoonBody.js +414 -0
- package/dist/body/MoonBody.js.map +1 -0
- package/dist/body/PlanetBody.d.ts +130 -0
- package/dist/body/PlanetBody.js +293 -0
- package/dist/body/PlanetBody.js.map +1 -0
- package/dist/body/SolarSystem.d.ts +124 -0
- package/dist/body/SolarSystem.js +218 -0
- package/dist/body/SolarSystem.js.map +1 -0
- package/dist/body/SunBody.d.ts +253 -0
- package/dist/body/SunBody.js +433 -0
- package/dist/body/SunBody.js.map +1 -0
- package/dist/body/index.d.ts +13 -3
- package/dist/body/index.js +15 -3
- package/dist/body/index.js.map +1 -1
- package/dist/comm/Antenna.d.ts +112 -0
- package/dist/comm/Antenna.js +173 -0
- package/dist/comm/Antenna.js.map +1 -0
- package/dist/comm/Beacon.d.ts +141 -0
- package/dist/comm/Beacon.js +268 -0
- package/dist/comm/Beacon.js.map +1 -0
- package/dist/comm/CommTypes.d.ts +181 -0
- package/dist/comm/CommTypes.js +115 -0
- package/dist/comm/CommTypes.js.map +1 -0
- package/dist/comm/CommunicationDevice.d.ts +115 -0
- package/dist/comm/CommunicationDevice.js +142 -0
- package/dist/comm/CommunicationDevice.js.map +1 -0
- package/dist/comm/Receiver.d.ts +139 -0
- package/dist/comm/Receiver.js +219 -0
- package/dist/comm/Receiver.js.map +1 -0
- package/dist/comm/Transmitter.d.ts +136 -0
- package/dist/comm/Transmitter.js +273 -0
- package/dist/comm/Transmitter.js.map +1 -0
- package/dist/comm/Transponder.d.ts +154 -0
- package/dist/comm/Transponder.js +281 -0
- package/dist/comm/Transponder.js.map +1 -0
- package/dist/comm/index.d.ts +30 -0
- package/dist/comm/index.js +26 -0
- package/dist/comm/index.js.map +1 -0
- package/dist/conjunction/CatalogScreener.d.ts +134 -0
- package/dist/conjunction/CatalogScreener.js +213 -0
- package/dist/conjunction/CatalogScreener.js.map +1 -0
- package/dist/conjunction/ConjunctionAssessment.d.ts +3 -10
- package/dist/conjunction/ConjunctionAssessment.js +30 -23
- package/dist/conjunction/ConjunctionAssessment.js.map +1 -1
- package/dist/conjunction/ConjunctionEvent.d.ts +51 -45
- package/dist/conjunction/ConjunctionEvent.js +49 -51
- package/dist/conjunction/ConjunctionEvent.js.map +1 -1
- package/dist/conjunction/CovarianceRealism.d.ts +189 -0
- package/dist/conjunction/CovarianceRealism.js +348 -0
- package/dist/conjunction/CovarianceRealism.js.map +1 -0
- package/dist/conjunction/ProbabilityOfCollision.d.ts +3 -3
- package/dist/conjunction/ProbabilityOfCollision.js +8 -6
- package/dist/conjunction/ProbabilityOfCollision.js.map +1 -1
- package/dist/conjunction/ScreeningFilter.d.ts +112 -0
- package/dist/conjunction/ScreeningFilter.js +160 -0
- package/dist/conjunction/ScreeningFilter.js.map +1 -0
- package/dist/conjunction/index.d.ts +6 -3
- package/dist/conjunction/index.js +6 -3
- package/dist/conjunction/index.js.map +1 -1
- package/dist/constellation/ConstellationGenerator.d.ts +137 -0
- package/dist/constellation/ConstellationGenerator.js +270 -0
- package/dist/constellation/ConstellationGenerator.js.map +1 -0
- package/dist/constellation/index.d.ts +17 -0
- package/dist/constellation/index.js +18 -0
- package/dist/constellation/index.js.map +1 -0
- package/dist/coordinate/ClassicalElements.d.ts +39 -1
- package/dist/coordinate/ClassicalElements.js +56 -1
- package/dist/coordinate/ClassicalElements.js.map +1 -1
- package/dist/coordinate/FormatTle.d.ts +4 -4
- package/dist/coordinate/FormatTle.js +15 -11
- package/dist/coordinate/FormatTle.js.map +1 -1
- package/dist/coordinate/Geodetic.d.ts +7 -7
- package/dist/coordinate/Geodetic.js +9 -8
- package/dist/coordinate/Geodetic.js.map +1 -1
- package/dist/coordinate/J2000.d.ts +1 -1
- package/dist/coordinate/J2000.js +1 -1
- package/dist/coordinate/Tle.js +28 -27
- package/dist/coordinate/Tle.js.map +1 -1
- package/dist/data/values/LeapSecondData.js +1 -1
- package/dist/{optimize/SimplexEntry.d.ts → enums/FovFrame.d.ts} +6 -13
- package/dist/enums/FovFrame.js +27 -0
- package/dist/enums/FovFrame.js.map +1 -0
- package/dist/{optimize/PolynomicalRegressionResult.d.ts → enums/FovShape.d.ts} +8 -14
- package/dist/enums/FovShape.js +27 -0
- package/dist/enums/FovShape.js.map +1 -0
- package/dist/{optimize/SimplexEntry.js → enums/SensorType.d.ts} +16 -25
- package/dist/enums/SensorType.js +35 -0
- package/dist/enums/SensorType.js.map +1 -0
- package/dist/enums/index.d.ts +3 -0
- package/dist/enums/index.js +3 -0
- package/dist/enums/index.js.map +1 -1
- package/dist/errors/index.d.ts +153 -0
- package/dist/errors/index.js +179 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/force/AtmosphericDrag.d.ts +21 -2
- package/dist/force/AtmosphericDrag.js +32 -10
- package/dist/force/AtmosphericDrag.js.map +1 -1
- package/dist/force/EarthGravity.d.ts +2 -2
- package/dist/force/EarthGravity.js +4 -4
- package/dist/force/EarthGravity.js.map +1 -1
- package/dist/force/ForceModel.d.ts +5 -5
- package/dist/force/ForceModel.js +22 -22
- package/dist/force/Gravity.d.ts +1 -1
- package/dist/force/Gravity.js +2 -2
- package/dist/force/SolarRadiationPressure.js +3 -2
- package/dist/force/SolarRadiationPressure.js.map +1 -1
- package/dist/force/ThirdBodyGravity.d.ts +2 -2
- package/dist/force/ThirdBodyGravity.js +11 -9
- package/dist/force/ThirdBodyGravity.js.map +1 -1
- package/dist/force/index.d.ts +7 -0
- package/dist/force/index.js +7 -0
- package/dist/force/index.js.map +1 -1
- package/dist/interfaces/BaseObjectParams.d.ts +2 -3
- package/dist/interfaces/SatelliteParams.d.ts +23 -3
- package/dist/interfaces/StarObjectParams.d.ts +2 -2
- package/dist/interfaces/index.d.ts +0 -2
- package/dist/interpolator/index.d.ts +31 -0
- package/dist/interpolator/index.js +32 -0
- package/dist/interpolator/index.js.map +1 -0
- package/dist/main.d.ts +13 -2
- package/dist/main.js +15 -3
- package/dist/main.js.map +1 -1
- package/dist/maneuver/Waypoint.js +1 -1
- package/dist/maneuver/Waypoint.js.map +1 -1
- package/dist/maneuver/index.d.ts +24 -0
- package/dist/maneuver/index.js +25 -0
- package/dist/maneuver/index.js.map +1 -0
- package/dist/objects/AccessCalculator.d.ts +112 -0
- package/dist/objects/AccessCalculator.js +268 -0
- package/dist/objects/AccessCalculator.js.map +1 -0
- package/dist/objects/AccessWindow.d.ts +95 -0
- package/dist/objects/AccessWindow.js +69 -0
- package/dist/objects/AccessWindow.js.map +1 -0
- package/dist/objects/BaseObject.d.ts +51 -6
- package/dist/objects/BaseObject.js +72 -20
- package/dist/objects/BaseObject.js.map +1 -1
- package/dist/objects/CenterBody.d.ts +41 -0
- package/dist/objects/CenterBody.js +85 -0
- package/dist/objects/CenterBody.js.map +1 -0
- package/dist/objects/DynamicGroundObject.d.ts +309 -0
- package/dist/objects/DynamicGroundObject.js +758 -0
- package/dist/objects/DynamicGroundObject.js.map +1 -0
- package/dist/objects/EphemerisSatellite.d.ts +209 -0
- package/dist/objects/EphemerisSatellite.js +480 -0
- package/dist/objects/EphemerisSatellite.js.map +1 -0
- package/dist/objects/GroundObject.d.ts +60 -21
- package/dist/objects/GroundObject.js +78 -29
- package/dist/objects/GroundObject.js.map +1 -1
- package/dist/objects/GroundStation.d.ts +60 -0
- package/dist/objects/GroundStation.js +113 -0
- package/dist/objects/GroundStation.js.map +1 -0
- package/dist/objects/History.d.ts +101 -0
- package/dist/objects/History.js +180 -0
- package/dist/objects/History.js.map +1 -0
- package/dist/objects/InterpolatorType.d.ts +39 -0
- package/dist/objects/InterpolatorType.js +41 -0
- package/dist/objects/InterpolatorType.js.map +1 -0
- package/dist/objects/LandObject.d.ts +7 -3
- package/dist/objects/LandObject.js +14 -0
- package/dist/objects/LandObject.js.map +1 -1
- package/dist/objects/Marker.d.ts +4 -0
- package/dist/objects/Marker.js +6 -0
- package/dist/objects/Marker.js.map +1 -1
- package/dist/objects/ObjectTypes.d.ts +60 -0
- package/dist/objects/ObjectTypes.js +18 -0
- package/dist/objects/ObjectTypes.js.map +1 -0
- package/dist/objects/Satellite.d.ts +237 -20
- package/dist/objects/Satellite.js +447 -47
- package/dist/objects/Satellite.js.map +1 -1
- package/dist/objects/SpaceObject.d.ts +205 -0
- package/dist/objects/SpaceObject.js +149 -0
- package/dist/objects/SpaceObject.js.map +1 -0
- package/dist/objects/Star.d.ts +10 -2
- package/dist/objects/Star.js +40 -4
- package/dist/objects/Star.js.map +1 -1
- package/dist/objects/VisualizationHelpers.d.ts +148 -0
- package/dist/objects/VisualizationHelpers.js +218 -0
- package/dist/objects/VisualizationHelpers.js.map +1 -0
- package/dist/objects/index.d.ts +18 -4
- package/dist/objects/index.js +9 -4
- package/dist/objects/index.js.map +1 -1
- package/dist/observation/RadecTopocentric.js +3 -1
- package/dist/observation/RadecTopocentric.js.map +1 -1
- package/dist/operations/Vector3D.d.ts +0 -7
- package/dist/operations/Vector3D.js +0 -18
- package/dist/operations/Vector3D.js.map +1 -1
- package/dist/optimize/ChebyshevCompressor.d.ts +55 -7
- package/dist/optimize/ChebyshevCompressor.js +59 -14
- package/dist/optimize/ChebyshevCompressor.js.map +1 -1
- package/dist/optimize/DownhillSimplex.d.ts +37 -3
- package/dist/optimize/DownhillSimplex.js +42 -8
- package/dist/optimize/DownhillSimplex.js.map +1 -1
- package/dist/optimize/GoldenSection.d.ts +150 -12
- package/dist/optimize/GoldenSection.js +164 -17
- package/dist/optimize/GoldenSection.js.map +1 -1
- package/dist/optimize/PolynomialRegression.d.ts +122 -20
- package/dist/optimize/PolynomialRegression.js +123 -22
- package/dist/optimize/PolynomialRegression.js.map +1 -1
- package/dist/optimize/SimpleLinearRegression.d.ts +117 -8
- package/dist/optimize/SimpleLinearRegression.js +125 -25
- package/dist/optimize/SimpleLinearRegression.js.map +1 -1
- package/dist/optimize/index.d.ts +5 -0
- package/dist/optimize/index.js +6 -0
- package/dist/optimize/index.js.map +1 -0
- package/dist/optimize/internal/PolynomicalRegressionResult.d.ts +118 -0
- package/dist/optimize/internal/PolynomicalRegressionResult.js +123 -0
- package/dist/optimize/internal/PolynomicalRegressionResult.js.map +1 -0
- package/dist/optimize/internal/SimplexEntry.d.ts +150 -0
- package/dist/optimize/internal/SimplexEntry.js +147 -0
- package/dist/optimize/internal/SimplexEntry.js.map +1 -0
- package/dist/orbit-design/RepeatGroundTrack.d.ts +184 -0
- package/dist/orbit-design/RepeatGroundTrack.js +359 -0
- package/dist/orbit-design/RepeatGroundTrack.js.map +1 -0
- package/dist/orbit-design/index.d.ts +18 -0
- package/dist/orbit-design/index.js +18 -0
- package/dist/orbit-design/index.js.map +1 -0
- package/dist/{orbit_determination → orbit-determination}/BatchLeastSquaresOD.d.ts +1 -1
- package/dist/{orbit_determination → orbit-determination}/BatchLeastSquaresOD.js +4 -4
- package/dist/{orbit_determination → orbit-determination}/BatchLeastSquaresOD.js.map +1 -1
- package/dist/{orbit_determination → orbit-determination}/BatchLeastSquaresResult.d.ts +1 -1
- package/dist/{orbit_determination → orbit-determination}/BatchLeastSquaresResult.js.map +1 -1
- package/dist/{orbit_determination → orbit-determination}/GaussIOD.d.ts +2 -2
- package/dist/{orbit_determination → orbit-determination}/GaussIOD.js +4 -1
- package/dist/orbit-determination/GaussIOD.js.map +1 -0
- package/dist/{orbit_determination → orbit-determination}/GibbsIOD.js +4 -3
- package/dist/orbit-determination/GibbsIOD.js.map +1 -0
- package/dist/{orbit_determination → orbit-determination}/GoodingIOD.d.ts +60 -6
- package/dist/{orbit_determination → orbit-determination}/GoodingIOD.js +230 -175
- package/dist/orbit-determination/GoodingIOD.js.map +1 -0
- package/dist/{orbit_determination → orbit-determination}/HerrickGibbsIOD.js.map +1 -1
- package/dist/{orbit_determination → orbit-determination}/LambertIOD.js.map +1 -1
- package/dist/orbit-determination/LevenbergMarquardtOD.d.ts +72 -0
- package/dist/orbit-determination/LevenbergMarquardtOD.js +202 -0
- package/dist/orbit-determination/LevenbergMarquardtOD.js.map +1 -0
- package/dist/orbit-determination/LevenbergMarquardtResult.d.ts +36 -0
- package/dist/orbit-determination/LevenbergMarquardtResult.js +43 -0
- package/dist/orbit-determination/LevenbergMarquardtResult.js.map +1 -0
- package/dist/{orbit_determination → orbit-determination}/ModifiedGoodingIOD.d.ts +6 -5
- package/dist/{orbit_determination → orbit-determination}/ModifiedGoodingIOD.js +21 -10
- package/dist/orbit-determination/ModifiedGoodingIOD.js.map +1 -0
- package/dist/{orbit_determination → orbit-determination}/index.d.ts +2 -0
- package/dist/{orbit_determination → orbit-determination}/index.js +2 -0
- package/dist/{orbit_determination → orbit-determination}/index.js.map +1 -1
- package/dist/parsers/CdmExporter.d.ts +85 -0
- package/dist/parsers/CdmExporter.js +235 -0
- package/dist/parsers/CdmExporter.js.map +1 -0
- package/dist/parsers/CdmParser.d.ts +97 -0
- package/dist/parsers/CdmParser.js +396 -0
- package/dist/parsers/CdmParser.js.map +1 -0
- package/dist/parsers/CdmTypes.d.ts +240 -0
- package/dist/parsers/CdmTypes.js +18 -0
- package/dist/parsers/CdmTypes.js.map +1 -0
- package/dist/parsers/HorizonsParser.d.ts +128 -0
- package/dist/parsers/HorizonsParser.js +320 -0
- package/dist/parsers/HorizonsParser.js.map +1 -0
- package/dist/parsers/OemParser.d.ts +56 -0
- package/dist/parsers/OemParser.js +235 -0
- package/dist/parsers/OemParser.js.map +1 -0
- package/dist/parsers/OemTypes.d.ts +100 -0
- package/dist/parsers/OemTypes.js +18 -0
- package/dist/parsers/OemTypes.js.map +1 -0
- package/dist/parsers/index.d.ts +23 -0
- package/dist/parsers/index.js +24 -0
- package/dist/parsers/index.js.map +1 -0
- package/dist/propagator/RungeKutta4Propagator.js +2 -2
- package/dist/propagator/RungeKutta4Propagator.js.map +1 -1
- package/dist/propagator/RungeKuttaAdaptive.d.ts +1 -4
- package/dist/propagator/RungeKuttaAdaptive.js +11 -14
- package/dist/propagator/RungeKuttaAdaptive.js.map +1 -1
- package/dist/propagator/index.d.ts +6 -0
- package/dist/propagator/index.js +6 -0
- package/dist/propagator/index.js.map +1 -1
- package/dist/scheduling/ContactScheduler.d.ts +248 -0
- package/dist/scheduling/ContactScheduler.js +503 -0
- package/dist/scheduling/ContactScheduler.js.map +1 -0
- package/dist/scheduling/ScheduledContact.d.ts +155 -0
- package/dist/scheduling/ScheduledContact.js +189 -0
- package/dist/scheduling/ScheduledContact.js.map +1 -0
- package/dist/scheduling/index.d.ts +5 -0
- package/dist/scheduling/index.js +4 -0
- package/dist/scheduling/index.js.map +1 -0
- package/dist/sensor/FieldOfView.d.ts +250 -0
- package/dist/sensor/FieldOfView.js +470 -0
- package/dist/sensor/FieldOfView.js.map +1 -0
- package/dist/sensor/LaserRangingSensor.d.ts +122 -0
- package/dist/sensor/LaserRangingSensor.js +174 -0
- package/dist/sensor/LaserRangingSensor.js.map +1 -0
- package/dist/sensor/MechanicalRadar.d.ts +86 -0
- package/dist/sensor/MechanicalRadar.js +130 -0
- package/dist/sensor/MechanicalRadar.js.map +1 -0
- package/dist/sensor/OpticalSensor.d.ts +111 -0
- package/dist/sensor/OpticalSensor.js +164 -0
- package/dist/sensor/OpticalSensor.js.map +1 -0
- package/dist/sensor/PassiveRFSensor.d.ts +115 -0
- package/dist/sensor/PassiveRFSensor.js +168 -0
- package/dist/sensor/PassiveRFSensor.js.map +1 -0
- package/dist/sensor/PhasedArrayRadar.d.ts +170 -0
- package/dist/sensor/PhasedArrayRadar.js +290 -0
- package/dist/sensor/PhasedArrayRadar.js.map +1 -0
- package/dist/sensor/RadarSensor.d.ts +94 -0
- package/dist/sensor/RadarSensor.js +106 -0
- package/dist/sensor/RadarSensor.js.map +1 -0
- package/dist/sensor/Sensor.d.ts +271 -0
- package/dist/sensor/Sensor.js +343 -0
- package/dist/sensor/Sensor.js.map +1 -0
- package/dist/sensor/index.d.ts +74 -0
- package/dist/sensor/index.js +70 -0
- package/dist/sensor/index.js.map +1 -0
- package/dist/sgp4/index.d.ts +2 -0
- package/dist/sgp4/index.js +1 -0
- package/dist/sgp4/index.js.map +1 -1
- package/dist/smoothing/ExponentialSmoothing.d.ts +20 -6
- package/dist/smoothing/ExponentialSmoothing.js +51 -57
- package/dist/smoothing/ExponentialSmoothing.js.map +1 -1
- package/dist/time/Epoch.d.ts +38 -1
- package/dist/time/Epoch.js +40 -3
- package/dist/time/Epoch.js.map +1 -1
- package/dist/time/EpochGPS.d.ts +68 -4
- package/dist/time/EpochGPS.js +75 -11
- package/dist/time/EpochGPS.js.map +1 -1
- package/dist/time/EpochTAI.d.ts +37 -1
- package/dist/time/EpochTAI.js +37 -1
- package/dist/time/EpochTAI.js.map +1 -1
- package/dist/time/EpochTDB.d.ts +47 -1
- package/dist/time/EpochTDB.js +47 -1
- package/dist/time/EpochTDB.js.map +1 -1
- package/dist/time/EpochTT.d.ts +50 -1
- package/dist/time/EpochTT.js +50 -1
- package/dist/time/EpochTT.js.map +1 -1
- package/dist/time/EpochUTC.d.ts +64 -0
- package/dist/time/EpochUTC.js +66 -3
- package/dist/time/EpochUTC.js.map +1 -1
- package/dist/time/TimeStamped.d.ts +26 -4
- package/dist/time/TimeStamped.js +37 -6
- package/dist/time/TimeStamped.js.map +1 -1
- package/dist/transforms/conversions.js +5 -4
- package/dist/transforms/conversions.js.map +1 -1
- package/dist/transforms/transforms.d.ts +78 -60
- package/dist/transforms/transforms.js +111 -99
- package/dist/transforms/transforms.js.map +1 -1
- package/dist/types/types.d.ts +59 -110
- package/dist/types/types.js +2 -0
- package/dist/types/types.js.map +1 -1
- package/dist/utils/functions.d.ts +2 -2
- package/dist/utils/functions.js +5 -3
- package/dist/utils/functions.js.map +1 -1
- package/docs/README.md +23 -4
- package/jest.config.mjs +4 -3
- package/package.json +20 -17
- package/src/body/CelestialBody.ts +316 -0
- package/src/body/CelestialBodyType.ts +55 -0
- package/src/body/EphemerisBody.ts +349 -0
- package/src/body/MoonBody.ts +552 -0
- package/src/body/PlanetBody.ts +354 -0
- package/src/body/SolarSystem.ts +276 -0
- package/src/body/SunBody.ts +538 -0
- package/src/body/__tests__/Earth.test.ts +135 -0
- package/src/body/__tests__/EphemerisBody.test.ts +323 -0
- package/src/body/__tests__/MoonBody.test.ts +198 -0
- package/src/body/__tests__/PlanetBody.test.ts +257 -0
- package/src/body/__tests__/SolarSystem.test.ts +237 -0
- package/src/body/__tests__/SunBody.test.ts +227 -0
- package/src/body/__tests__/__snapshots__/Earth.test.ts.snap +39 -0
- package/src/body/index.ts +39 -3
- package/src/comm/Antenna.ts +213 -0
- package/src/comm/Beacon.ts +328 -0
- package/src/comm/CommTypes.ts +216 -0
- package/src/comm/CommunicationDevice.ts +199 -0
- package/src/comm/Receiver.ts +263 -0
- package/src/comm/Transmitter.ts +349 -0
- package/src/comm/Transponder.ts +360 -0
- package/src/comm/__tests__/Antenna.test.ts +155 -0
- package/src/comm/__tests__/Beacon.test.ts +333 -0
- package/src/comm/__tests__/CommTypes.test.ts +165 -0
- package/src/comm/__tests__/Receiver.test.ts +215 -0
- package/src/comm/__tests__/Transmitter.test.ts +164 -0
- package/src/comm/__tests__/Transponder.test.ts +181 -0
- package/src/comm/index.ts +60 -0
- package/src/conjunction/CatalogScreener.ts +322 -0
- package/src/conjunction/ConjunctionAssessment.ts +28 -35
- package/src/conjunction/ConjunctionEvent.ts +80 -44
- package/src/conjunction/CovarianceRealism.ts +472 -0
- package/src/conjunction/ProbabilityOfCollision.ts +10 -8
- package/src/conjunction/ScreeningFilter.ts +206 -0
- package/src/conjunction/__tests__/CatalogScreener.test.ts +280 -0
- package/src/conjunction/__tests__/ConjunctionAssessment.basic.test.ts +250 -0
- package/src/conjunction/__tests__/ConjunctionAssessment.highfidelity.test.ts +76 -0
- package/src/conjunction/__tests__/CovarianceRealism.test.ts +296 -0
- package/src/conjunction/index.ts +17 -6
- package/src/constellation/ConstellationGenerator.ts +377 -0
- package/src/constellation/__tests__/ConstellationGenerator.test.ts +446 -0
- package/src/constellation/index.ts +18 -0
- package/src/coordinate/ClassicalElements.ts +62 -0
- package/src/coordinate/FormatTle.ts +17 -12
- package/src/coordinate/Geodetic.ts +16 -11
- package/src/coordinate/J2000.ts +1 -1
- package/src/coordinate/README.md +788 -0
- package/src/coordinate/Tle.ts +31 -30
- package/src/coordinate/__tests__/ClassicalElements.test.ts +129 -0
- package/src/coordinate/__tests__/EquinoctialElements.test.ts +108 -0
- package/src/coordinate/__tests__/FormatTle.test.ts +92 -0
- package/src/coordinate/__tests__/Geodetic.test.ts +165 -0
- package/src/coordinate/__tests__/Hill.test.ts +195 -0
- package/src/coordinate/__tests__/ITRF.test.ts +231 -0
- package/src/coordinate/__tests__/J2000.test.ts +132 -0
- package/src/coordinate/__tests__/RIC.test.ts +107 -0
- package/src/coordinate/__tests__/TEME.test.ts +48 -0
- package/src/coordinate/__tests__/Tle.test.ts +185 -0
- package/src/coordinate/__tests__/__snapshots__/ClassicalElements.test.ts.snap +106 -0
- package/src/coordinate/__tests__/__snapshots__/EquinoctialElements.test.ts.snap +93 -0
- package/src/coordinate/__tests__/__snapshots__/Geodetic.test.ts.snap +54 -0
- package/src/coordinate/__tests__/__snapshots__/ITRF.test.ts.snap +321 -0
- package/src/coordinate/__tests__/__snapshots__/J2000.test.ts.snap +26 -0
- package/src/coordinate/__tests__/__snapshots__/RIC.test.ts.snap +79 -0
- package/src/coordinate/__tests__/__snapshots__/TEME.test.ts.snap +41 -0
- package/src/coordinate/__tests__/__snapshots__/Tle.test.ts.snap +180 -0
- package/src/covariance/__tests__/CovarianceSample.test.ts +143 -0
- package/src/covariance/__tests__/StateCovariance.test.ts +90 -0
- package/src/data/values/LeapSecondData.ts +1 -1
- package/src/data/values/__tests__/Egm96Data.test.ts +33 -0
- package/src/data/values/__tests__/HpAtmosphereData.test.ts +82 -0
- package/src/data/values/__tests__/LeapSecondData.test.ts +59 -0
- package/src/{optimize/PolynomicalRegressionResult.ts → enums/FovFrame.ts} +8 -14
- package/src/enums/FovShape.ts +26 -0
- package/src/enums/SensorType.ts +34 -0
- package/src/enums/index.ts +3 -0
- package/src/errors/__tests__/errors.test.ts +196 -0
- package/src/errors/index.ts +185 -0
- package/src/fetch/index.ts +26 -0
- package/src/force/AtmosphericDrag.ts +32 -11
- package/src/force/EarthGravity.ts +4 -4
- package/src/force/ForceModel.ts +22 -22
- package/src/force/Gravity.ts +2 -2
- package/src/force/README.md +99 -0
- package/src/force/SolarRadiationPressure.ts +3 -2
- package/src/force/ThirdBodyGravity.ts +11 -9
- package/src/force/__tests__/AtmosphericDrag.test.ts +168 -0
- package/src/force/__tests__/EarthGravity.test.ts +115 -0
- package/src/force/__tests__/ForceModel.test.ts +188 -0
- package/src/force/__tests__/Gravity.test.ts +81 -0
- package/src/force/__tests__/SolarRadiationPressure.test.ts +115 -0
- package/src/force/__tests__/ThirdBodyGravity.test.ts +119 -0
- package/src/force/__tests__/Thrust.test.ts +132 -0
- package/src/force/index.ts +7 -0
- package/src/interfaces/BaseObjectParams.ts +2 -3
- package/src/interfaces/SatelliteParams.ts +41 -4
- package/src/interfaces/StarObjectParams.ts +2 -2
- package/src/interfaces/index.ts +0 -2
- package/src/interpolator/__tests__/ChebyshevCoefficients.test.ts +105 -0
- package/src/interpolator/__tests__/ChebyshevInterpolator.test.ts +81 -0
- package/src/interpolator/__tests__/CubicSpline.test.ts +80 -0
- package/src/interpolator/__tests__/CubicSplineInterpolator.test.ts +94 -0
- package/src/interpolator/__tests__/FieldInterpolator.test.ts +59 -0
- package/src/interpolator/__tests__/Interpolator.test.ts +131 -0
- package/src/interpolator/__tests__/LagrangeInterpolator.test.ts +121 -0
- package/src/interpolator/__tests__/StateInterpolator.test.ts +57 -0
- package/src/interpolator/__tests__/VerletBlendInterpolator.test.ts +116 -0
- package/src/interpolator/index.ts +32 -0
- package/src/main.ts +26 -3
- package/src/maneuver/Waypoint.ts +1 -1
- package/src/maneuver/__tests__/TwoBurnOrbitTransfer.test.ts +90 -0
- package/src/maneuver/__tests__/Waypoint.test.ts +427 -0
- package/src/maneuver/index.ts +25 -0
- package/src/objects/AccessCalculator.ts +345 -0
- package/src/objects/AccessWindow.ts +129 -0
- package/src/objects/BaseObject.ts +94 -23
- package/src/objects/CenterBody.ts +88 -0
- package/src/objects/DynamicGroundObject.ts +975 -0
- package/src/objects/EphemerisSatellite.ts +629 -0
- package/src/objects/GroundObject.ts +121 -51
- package/src/objects/GroundStation.ts +130 -0
- package/src/objects/History.ts +228 -0
- package/src/objects/InterpolatorType.ts +42 -0
- package/src/objects/LandObject.ts +18 -3
- package/src/objects/Marker.ts +7 -0
- package/src/objects/ObjectTypes.ts +66 -0
- package/src/objects/Satellite.ts +532 -71
- package/src/objects/SpaceObject.ts +304 -0
- package/src/objects/Star.ts +47 -8
- package/src/objects/VisualizationHelpers.ts +324 -0
- package/src/objects/__tests__/AccessCalculator.test.ts +499 -0
- package/src/objects/__tests__/DynamicGroundObject.test.ts +859 -0
- package/src/objects/__tests__/EphemerisSatellite.test.ts +589 -0
- package/src/objects/__tests__/GroundStation.test.ts +204 -0
- package/src/objects/__tests__/Satellite.test.ts +487 -0
- package/src/objects/__tests__/SpaceObject.rae.test.ts +156 -0
- package/src/objects/__tests__/VisualizationHelpers.test.ts +438 -0
- package/src/objects/index.ts +24 -4
- package/src/observation/RadecTopocentric.ts +4 -1
- package/src/observation/__tests__/RAE.test.ts +135 -0
- package/src/observation/__tests__/RadecGeocentric.test.ts +107 -0
- package/src/observation/__tests__/RadecTopocentric.test.ts +121 -0
- package/src/observation/__tests__/__snapshots__/RAE.test.ts.snap +91 -0
- package/src/observation/__tests__/__snapshots__/RadecGeocentric.test.ts.snap +71 -0
- package/src/observation/__tests__/__snapshots__/RadecTopocentric.test.ts.snap +71 -0
- package/src/operations/Vector3D.ts +0 -19
- package/src/operations/__tests__/Matrix.test.ts +277 -0
- package/src/operations/__tests__/Random.test.ts +24 -0
- package/src/operations/__tests__/Vector.test.ts +269 -0
- package/src/operations/__tests__/Vector3D.test.ts +100 -0
- package/src/operations/__tests__/__snapshots__/Matrix.test.ts.snap +161 -0
- package/src/operations/__tests__/__snapshots__/Random.test.ts.snap +7 -0
- package/src/operations/__tests__/__snapshots__/Vector.test.ts.snap +218 -0
- package/src/operations/__tests__/__snapshots__/Vector3D.test.ts.snap +138 -0
- package/src/optimize/ChebyshevCompressor.ts +59 -14
- package/src/optimize/DownhillSimplex.ts +42 -8
- package/src/optimize/GoldenSection.ts +176 -17
- package/src/optimize/PolynomialRegression.ts +124 -22
- package/src/optimize/README.md +343 -0
- package/src/optimize/SimpleLinearRegression.ts +125 -25
- package/src/optimize/__tests__/ChebyshevCompressor.test.ts +40 -0
- package/src/optimize/__tests__/DownhillSimplex.test.ts +168 -0
- package/src/optimize/__tests__/GoldenSection.test.ts +21 -0
- package/src/optimize/__tests__/PolynomialRegression.test.ts +24 -0
- package/src/optimize/__tests__/SimpleLinearRegression.test.ts +31 -0
- package/src/optimize/index.ts +6 -0
- package/src/optimize/internal/PolynomicalRegressionResult.ts +126 -0
- package/src/optimize/internal/SimplexEntry.ts +169 -0
- package/src/orbit-design/RepeatGroundTrack.ts +516 -0
- package/src/orbit-design/__tests__/RepeatGroundTrack.test.ts +526 -0
- package/src/orbit-design/index.ts +23 -0
- package/src/{orbit_determination → orbit-determination}/BatchLeastSquaresOD.ts +4 -4
- package/src/{orbit_determination → orbit-determination}/BatchLeastSquaresResult.ts +1 -1
- package/src/{orbit_determination → orbit-determination}/GaussIOD.ts +5 -2
- package/src/{orbit_determination → orbit-determination}/GibbsIOD.ts +4 -3
- package/src/{orbit_determination → orbit-determination}/GoodingIOD.ts +12 -10
- package/src/orbit-determination/LevenbergMarquardtOD.ts +258 -0
- package/src/orbit-determination/LevenbergMarquardtResult.ts +42 -0
- package/src/orbit-determination/ModifiedGoodingIOD.test.ts +86 -0
- package/src/{orbit_determination → orbit-determination}/ModifiedGoodingIOD.ts +5 -4
- package/src/orbit-determination/README.md +353 -0
- package/src/orbit-determination/__tests__/BatchLeastSquaresOD.accuracy.test.ts +320 -0
- package/src/orbit-determination/__tests__/BatchLeastSquaresOD.observations.test.ts +279 -0
- package/src/orbit-determination/__tests__/BatchLeastSquaresOD.robustness.test.ts +439 -0
- package/src/orbit-determination/__tests__/GaussIOD.test.ts +395 -0
- package/src/orbit-determination/__tests__/GibbsIOD.test.ts +423 -0
- package/src/orbit-determination/__tests__/GoodingIOD.test.ts +356 -0
- package/src/orbit-determination/__tests__/HerrickGibbsIOD.test.ts +501 -0
- package/src/orbit-determination/__tests__/LambertIOD.test.ts +643 -0
- package/src/orbit-determination/__tests__/LevenbergMarquardtOD.test.ts +1039 -0
- package/src/{orbit_determination → orbit-determination}/index.ts +2 -0
- package/src/parsers/CdmExporter.ts +298 -0
- package/src/parsers/CdmParser.ts +474 -0
- package/src/parsers/CdmTypes.ts +259 -0
- package/src/parsers/HorizonsParser.ts +432 -0
- package/src/parsers/OemParser.ts +277 -0
- package/src/parsers/OemTypes.ts +111 -0
- package/src/parsers/__tests__/CdmExporter.test.ts +305 -0
- package/src/parsers/__tests__/CdmParser.test.ts +305 -0
- package/src/parsers/__tests__/HorizonsParser.test.ts +126 -0
- package/src/parsers/__tests__/OemParser.test.ts +398 -0
- package/src/parsers/index.ts +49 -0
- package/src/propagator/README.md +241 -0
- package/src/propagator/RungeKutta4Propagator.ts +2 -2
- package/src/propagator/RungeKuttaAdaptive.ts +14 -14
- package/src/propagator/__tests__/KeplerPropagator.test.ts +250 -0
- package/src/propagator/__tests__/Propagator.test.ts +180 -0
- package/src/propagator/__tests__/RungeKutta4Propagator.test.ts +289 -0
- package/src/propagator/__tests__/RungeKuttaAdaptive.test.ts +244 -0
- package/src/propagator/__tests__/Sgp4Propagator.test.ts +144 -0
- package/src/propagator/index.ts +6 -0
- package/src/scheduling/ContactScheduler.ts +760 -0
- package/src/scheduling/ScheduledContact.ts +249 -0
- package/src/scheduling/__tests__/ContactScheduler.test.ts +389 -0
- package/src/scheduling/__tests__/ScheduledContact.test.ts +293 -0
- package/src/scheduling/index.ts +10 -0
- package/src/sensor/FieldOfView.ts +666 -0
- package/src/sensor/LaserRangingSensor.ts +210 -0
- package/src/sensor/MechanicalRadar.ts +156 -0
- package/src/sensor/OpticalSensor.ts +198 -0
- package/src/sensor/PassiveRFSensor.ts +205 -0
- package/src/sensor/PhasedArrayRadar.ts +352 -0
- package/src/sensor/RadarSensor.ts +150 -0
- package/src/sensor/Sensor.ts +487 -0
- package/src/sensor/__tests__/Sensor.test.ts +135 -0
- package/src/sensor/index.ts +81 -0
- package/src/sensor/v2-docs/field-of-view-design-document.md +466 -0
- package/src/sgp4/index.ts +2 -0
- package/src/smoothing/ExponentialSmoothing.ts +51 -58
- package/src/smoothing/__tests__/ExponentialSmoothing.test.ts +108 -0
- package/src/time/Epoch.ts +40 -3
- package/src/time/EpochGPS.ts +78 -13
- package/src/time/EpochTAI.ts +37 -1
- package/src/time/EpochTDB.ts +47 -1
- package/src/time/EpochTT.ts +50 -1
- package/src/time/EpochUTC.ts +68 -3
- package/src/time/README.md +212 -0
- package/src/time/TimeStamped.ts +40 -6
- package/src/time/__tests__/Epoch.test.ts +250 -0
- package/src/time/__tests__/EpochGPS.test.ts +78 -0
- package/src/time/__tests__/EpochUTC.test.ts +149 -0
- package/src/time/__tests__/EpochWindow.test.ts +30 -0
- package/src/time/__tests__/TimeStamped.test.ts +62 -0
- package/src/time/__tests__/__snapshots__/Epoch.test.ts.snap +46 -0
- package/src/time/__tests__/__snapshots__/EpochGPS.test.ts.snap +13 -0
- package/src/time/__tests__/__snapshots__/EpochUTC.test.ts.snap +112 -0
- package/src/time/__tests__/__snapshots__/TimeStamped.test.ts.snap +10 -0
- package/src/transforms/__tests__/__snapshots__/transforms.test.ts.snap +16 -0
- package/src/transforms/__tests__/__snapshots__/transforms2.test.ts.snap +49 -0
- package/src/transforms/__tests__/conversions.test.ts +80 -0
- package/src/transforms/__tests__/transforms.test.ts +128 -0
- package/src/transforms/__tests__/transforms2.test.ts +275 -0
- package/src/transforms/__tests__/transformsData.ts +289 -0
- package/src/transforms/conversions.ts +5 -4
- package/src/transforms/transforms.ts +131 -112
- package/src/types/types.ts +67 -116
- package/src/utils/__tests__/__snapshots__/functions.test.ts.snap +89 -0
- package/src/utils/__tests__/__snapshots__/utils.test.ts.snap +5 -0
- package/src/utils/__tests__/create-covariance-from-tle.test.ts +90 -0
- package/src/utils/__tests__/functions.test.ts +450 -0
- package/src/utils/__tests__/jacobian.test.ts +37 -0
- package/src/utils/__tests__/linearDistance.test.ts +44 -0
- package/src/utils/__tests__/utils.test.ts +164 -0
- package/src/utils/functions.ts +11 -9
- package/dist/body/Celestial.d.ts +0 -96
- package/dist/body/Celestial.js +0 -124
- package/dist/body/Celestial.js.map +0 -1
- package/dist/body/Moon.d.ts +0 -137
- package/dist/body/Moon.js +0 -464
- package/dist/body/Moon.js.map +0 -1
- package/dist/body/Sun.d.ts +0 -301
- package/dist/body/Sun.js +0 -544
- package/dist/body/Sun.js.map +0 -1
- package/dist/fetch/horizons-constants.d.ts +0 -43
- package/dist/fetch/horizons-constants.js +0 -50
- package/dist/fetch/horizons-constants.js.map +0 -1
- package/dist/fetch/horizons-interfaces.d.ts +0 -37
- package/dist/fetch/horizons-interfaces.js +0 -2
- package/dist/fetch/horizons-interfaces.js.map +0 -1
- package/dist/fetch/horizons.d.ts +0 -86
- package/dist/fetch/horizons.js +0 -237
- package/dist/fetch/horizons.js.map +0 -1
- package/dist/interfaces/RfSensorParams.d.ts +0 -34
- package/dist/interfaces/RfSensorParams.js +0 -24
- package/dist/interfaces/RfSensorParams.js.map +0 -1
- package/dist/interfaces/SensorParams.d.ts +0 -38
- package/dist/interfaces/SensorParams.js +0 -2
- package/dist/interfaces/SensorParams.js.map +0 -1
- package/dist/objects/DetailedSatellite.d.ts +0 -75
- package/dist/objects/DetailedSatellite.js +0 -163
- package/dist/objects/DetailedSatellite.js.map +0 -1
- package/dist/objects/DetailedSensor.d.ts +0 -39
- package/dist/objects/DetailedSensor.js +0 -54
- package/dist/objects/DetailedSensor.js.map +0 -1
- package/dist/objects/RfSensor.d.ts +0 -73
- package/dist/objects/RfSensor.js +0 -112
- package/dist/objects/RfSensor.js.map +0 -1
- package/dist/objects/Sensor.d.ts +0 -99
- package/dist/objects/Sensor.js +0 -238
- package/dist/objects/Sensor.js.map +0 -1
- package/dist/optimize/PolynomicalRegressionResult.js +0 -38
- package/dist/optimize/PolynomicalRegressionResult.js.map +0 -1
- package/dist/optimize/SimplexEntry.js.map +0 -1
- package/dist/orbit_determination/GaussIOD.js.map +0 -1
- package/dist/orbit_determination/GibbsIOD.js.map +0 -1
- package/dist/orbit_determination/GoodingIOD.js.map +0 -1
- package/dist/orbit_determination/ModifiedGoodingIOD.js.map +0 -1
- package/src/body/Celestial.ts +0 -134
- package/src/body/Moon.ts +0 -556
- package/src/body/Sun.ts +0 -665
- package/src/interfaces/RfSensorParams.ts +0 -36
- package/src/interfaces/SensorParams.ts +0 -39
- package/src/objects/DetailedSatellite.ts +0 -191
- package/src/objects/DetailedSensor.ts +0 -60
- package/src/objects/RfSensor.ts +0 -126
- package/src/objects/Sensor.ts +0 -279
- /package/dist/{orbit_determination → orbit-determination}/BatchLeastSquaresResult.js +0 -0
- /package/dist/{orbit_determination → orbit-determination}/GibbsIOD.d.ts +0 -0
- /package/dist/{orbit_determination → orbit-determination}/HerrickGibbsIOD.d.ts +0 -0
- /package/dist/{orbit_determination → orbit-determination}/HerrickGibbsIOD.js +0 -0
- /package/dist/{orbit_determination → orbit-determination}/LambertIOD.d.ts +0 -0
- /package/dist/{orbit_determination → orbit-determination}/LambertIOD.js +0 -0
- /package/src/{orbit_determination → orbit-determination}/HerrickGibbsIOD.ts +0 -0
- /package/src/{orbit_determination → orbit-determination}/LambertIOD.ts +0 -0
|
@@ -5,7 +5,15 @@
|
|
|
5
5
|
"Bash(dir:*)",
|
|
6
6
|
"Bash(tree /f /a f:irissrc -L 3 -I node_modules 2)",
|
|
7
7
|
"Bash(NUL)",
|
|
8
|
-
"Bash(npm test:*)"
|
|
8
|
+
"Bash(npm test:*)",
|
|
9
|
+
"Bash(node -e:*)",
|
|
10
|
+
"Bash(npm run build:*)",
|
|
11
|
+
"Bash(node test-radec-debug.js:*)",
|
|
12
|
+
"Bash(find:*)",
|
|
13
|
+
"Bash(npm ls:*)",
|
|
14
|
+
"Bash(cat:*)",
|
|
15
|
+
"Bash(grep:*)",
|
|
16
|
+
"Bash(npx jest:*)"
|
|
9
17
|
],
|
|
10
18
|
"deny": [],
|
|
11
19
|
"ask": []
|
package/CLAUDE.md
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# CLAUDE.md
|
|
2
|
+
|
|
3
|
+
Project-specific guidance for Claude Code.
|
|
4
|
+
|
|
5
|
+
## Project Overview
|
|
6
|
+
|
|
7
|
+
ootk (Orbital Object Toolkit) is a TypeScript library for satellite tracking and orbital mechanics calculations.
|
|
8
|
+
|
|
9
|
+
## Commands
|
|
10
|
+
|
|
11
|
+
- `npm test` - Run tests
|
|
12
|
+
- `npm run build` - Build the project
|
|
13
|
+
|
|
14
|
+
## Code Style
|
|
15
|
+
|
|
16
|
+
### Access Modifiers
|
|
17
|
+
|
|
18
|
+
- **No `public` keyword** - Public access is implicit
|
|
19
|
+
- **Private/protected static members** - Use trailing underscore suffix (`_`)
|
|
20
|
+
- **Use `override` keyword** - Always use when overriding inherited methods
|
|
21
|
+
|
|
22
|
+
```typescript
|
|
23
|
+
// CORRECT
|
|
24
|
+
class Example {
|
|
25
|
+
name: string; // public (implicit)
|
|
26
|
+
private static readonly instance_: Example; // private static with _
|
|
27
|
+
override toString(): string { ... } // use override
|
|
28
|
+
}
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
### Imports
|
|
32
|
+
|
|
33
|
+
**No file extensions.** Project uses `moduleResolution: "Bundler"`.
|
|
34
|
+
|
|
35
|
+
```typescript
|
|
36
|
+
import { Satellite } from './Satellite'; // CORRECT
|
|
37
|
+
import { Satellite } from './Satellite.js'; // WRONG
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
### Types
|
|
41
|
+
|
|
42
|
+
- Use unit type aliases: `Kilometers`, `Radians`, `Degrees`, `Seconds`, `Milliseconds`
|
|
43
|
+
- Cast values: `(value * DEG2RAD) as Radians`
|
|
44
|
+
|
|
45
|
+
### Class Patterns
|
|
46
|
+
|
|
47
|
+
- **Getters** for computed/derived values
|
|
48
|
+
- **Static factory methods** use `fromX()` naming
|
|
49
|
+
- **Private constructor** for static-only utility classes
|
|
50
|
+
- **Singleton** uses `private static readonly instance_` with `getInstance()`
|
|
51
|
+
|
|
52
|
+
### Naming
|
|
53
|
+
|
|
54
|
+
- Single letter names OK for math: `a`, `e`, `i`, `h`, `n`, `v`
|
|
55
|
+
- `toString()` returns multi-line strings via array join
|
|
56
|
+
|
|
57
|
+
### Error Handling
|
|
58
|
+
|
|
59
|
+
- Validate inputs in constructors with `RangeError` or `Error`
|
|
60
|
+
- Return `null` for methods that may fail (e.g., propagation errors)
|
|
61
|
+
|
|
62
|
+
## Module Documentation
|
|
63
|
+
|
|
64
|
+
Detailed module-specific patterns are in design docs:
|
|
65
|
+
|
|
66
|
+
- Sensor: [src/sensor/v2-docs/field-of-view-design-document.md](src/sensor/v2-docs/field-of-view-design-document.md)
|
|
67
|
+
- Objects: [src/objects/v2-docs/objects-module-refactoring-design-document.md](src/objects/v2-docs/objects-module-refactoring-design-document.md)
|
package/FUTURE-WORK.md
ADDED
|
@@ -0,0 +1,325 @@
|
|
|
1
|
+
# ootk Roadmap
|
|
2
|
+
|
|
3
|
+
Future improvements for the Orbital Object ToolKit (ootk) library, organized by priority.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Priority 1: Performance Optimizations
|
|
8
|
+
|
|
9
|
+
Critical for KeepTrack visualization and real-time operations.
|
|
10
|
+
|
|
11
|
+
### 1.1 Propagation Caching
|
|
12
|
+
|
|
13
|
+
Cache recent propagation results in Satellite to avoid redundant SGP4 calls.
|
|
14
|
+
|
|
15
|
+
**Implementation:**
|
|
16
|
+
|
|
17
|
+
- LRU cache keyed by timestamp (configurable size, default 100)
|
|
18
|
+
- Invalidate on TLE update
|
|
19
|
+
- Optional time-tolerance matching for near-miss hits
|
|
20
|
+
|
|
21
|
+
**Files:** `src/objects/Satellite.ts`
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
### 1.2 Batch Propagation
|
|
26
|
+
|
|
27
|
+
Propagate to multiple times efficiently with shared GMST calculations.
|
|
28
|
+
|
|
29
|
+
**API:**
|
|
30
|
+
|
|
31
|
+
```typescript
|
|
32
|
+
class Satellite {
|
|
33
|
+
eciArray(times: Date[]): Array<PosVel | null>;
|
|
34
|
+
ecefArray(times: Date[]): Array<EcefVec3 | null>;
|
|
35
|
+
}
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
**Files:** `src/objects/Satellite.ts`, `src/objects/SpaceObject.ts`
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
### 1.3 AccessCalculator Optimization
|
|
43
|
+
|
|
44
|
+
Improve pass calculation performance:
|
|
45
|
+
|
|
46
|
+
- Adaptive step size (larger when far from horizon)
|
|
47
|
+
- Binary search for exact rise/set times
|
|
48
|
+
- Early termination for non-intersecting orbits
|
|
49
|
+
|
|
50
|
+
**Files:** `src/observation/AccessCalculator.ts`
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
### 1.4 WebWorker Support
|
|
55
|
+
|
|
56
|
+
Offload heavy computations to background threads:
|
|
57
|
+
|
|
58
|
+
- Propagation batches
|
|
59
|
+
- Access calculations
|
|
60
|
+
- Coverage analysis
|
|
61
|
+
- Conjunction screening
|
|
62
|
+
|
|
63
|
+
**API:**
|
|
64
|
+
|
|
65
|
+
```typescript
|
|
66
|
+
const worker = new OotkWorker();
|
|
67
|
+
const results = await worker.calculateAccess(observer, targets, start, end);
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
**Files:** New `src/worker/` module
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
### 1.5 Lazy Computation
|
|
75
|
+
|
|
76
|
+
Defer expensive calculations until first access:
|
|
77
|
+
|
|
78
|
+
- `apogee`, `perigee` - compute on demand
|
|
79
|
+
- `semiMajorAxis`, `semiMinorAxis` - compute on demand
|
|
80
|
+
- Classical elements from TLE - compute on demand
|
|
81
|
+
|
|
82
|
+
**Files:** `src/objects/Satellite.ts`
|
|
83
|
+
|
|
84
|
+
---
|
|
85
|
+
|
|
86
|
+
### 1.6 Transform Cache Improvements
|
|
87
|
+
|
|
88
|
+
Upgrade the existing TransformCache (currently 1000-entry FIFO):
|
|
89
|
+
|
|
90
|
+
- LRU eviction instead of FIFO
|
|
91
|
+
- Configurable cache size
|
|
92
|
+
- Cache statistics/hit rate tracking
|
|
93
|
+
|
|
94
|
+
**Files:** `src/transforms/TransformCache.ts`
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
|
|
98
|
+
## Priority 2: Quality & Validation
|
|
99
|
+
|
|
100
|
+
### 2.1 Increase Test Coverage
|
|
101
|
+
|
|
102
|
+
Current: 49% file coverage (107/216 source files)
|
|
103
|
+
|
|
104
|
+
Priority areas:
|
|
105
|
+
|
|
106
|
+
- `src/sensor/` - 1 test for 9 source files
|
|
107
|
+
- `src/observation/` - 3 tests for 9 source files
|
|
108
|
+
|
|
109
|
+
Note: `src/sgp4/` has full coverage but tests are excluded from normal runs for efficiency.
|
|
110
|
+
|
|
111
|
+
**Target:** 70% file coverage
|
|
112
|
+
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
### 2.2 Property-Based Testing
|
|
116
|
+
|
|
117
|
+
Add fast-check for:
|
|
118
|
+
|
|
119
|
+
- Coordinate transform round-trips (ECI → ECEF → ECI)
|
|
120
|
+
- Time conversion accuracy (UTC → TT → UTC)
|
|
121
|
+
- Propagation consistency checks
|
|
122
|
+
|
|
123
|
+
**Files:** New `src/**/__tests__/*.property.test.ts`
|
|
124
|
+
|
|
125
|
+
---
|
|
126
|
+
|
|
127
|
+
### 2.3 Benchmark Suite
|
|
128
|
+
|
|
129
|
+
Track performance regressions:
|
|
130
|
+
|
|
131
|
+
```typescript
|
|
132
|
+
benchmark('SGP4 single propagation', () => { });
|
|
133
|
+
benchmark('SGP4 batch 1000 times', () => { });
|
|
134
|
+
benchmark('RK4 1-day propagation', () => { });
|
|
135
|
+
benchmark('Access calculation 24h', () => { });
|
|
136
|
+
benchmark('Conjunction screening 1000 objects', () => { });
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
**Files:** New `benchmarks/` directory
|
|
140
|
+
|
|
141
|
+
---
|
|
142
|
+
|
|
143
|
+
### 2.4 Reference Tool Validation
|
|
144
|
+
|
|
145
|
+
Compare results against:
|
|
146
|
+
|
|
147
|
+
- STK (Ansys)
|
|
148
|
+
- GMAT (NASA)
|
|
149
|
+
- Orekit (Java library)
|
|
150
|
+
- Vallado reference implementations
|
|
151
|
+
|
|
152
|
+
Document accuracy bounds for each algorithm.
|
|
153
|
+
|
|
154
|
+
**Files:** New `validation/` directory with reference data
|
|
155
|
+
|
|
156
|
+
---
|
|
157
|
+
|
|
158
|
+
## Priority 3: New Features
|
|
159
|
+
|
|
160
|
+
### 3.1 Maneuver Planning
|
|
161
|
+
|
|
162
|
+
Expand beyond `TwoBurnOrbitTransfer`:
|
|
163
|
+
|
|
164
|
+
```typescript
|
|
165
|
+
class ManeuverPlanner {
|
|
166
|
+
static hohmann(initial: ClassicalElements, targetAlt: Kilometers): Maneuver[];
|
|
167
|
+
static biElliptic(initial: ClassicalElements, targetAlt: Kilometers): Maneuver[];
|
|
168
|
+
static planeChange(initial: ClassicalElements, targetInc: Degrees): Maneuver;
|
|
169
|
+
static stationKeeping(satellite: Satellite, deadband: StationKeepingBox): Maneuver[];
|
|
170
|
+
static collisionAvoidance(conjunction: ConjunctionEvent, constraints: CAMConstraints): Maneuver;
|
|
171
|
+
}
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
**Files:** `src/maneuver/ManeuverPlanner.ts`
|
|
175
|
+
|
|
176
|
+
---
|
|
177
|
+
|
|
178
|
+
### 3.2 Coverage Analysis
|
|
179
|
+
|
|
180
|
+
Grid-based coverage and revisit analysis:
|
|
181
|
+
|
|
182
|
+
```typescript
|
|
183
|
+
class CoverageAnalyzer {
|
|
184
|
+
static analyzeCoverage(
|
|
185
|
+
satellites: Satellite[],
|
|
186
|
+
gridResolution: Degrees,
|
|
187
|
+
start: Date,
|
|
188
|
+
end: Date,
|
|
189
|
+
constraints?: CoverageConstraints
|
|
190
|
+
): CoverageGrid;
|
|
191
|
+
|
|
192
|
+
static timeToFirstCoverage(
|
|
193
|
+
satellites: Satellite[],
|
|
194
|
+
target: GroundObject,
|
|
195
|
+
after: Date
|
|
196
|
+
): Date | null;
|
|
197
|
+
|
|
198
|
+
static revisitStatistics(coverage: CoverageGrid): RevisitStats;
|
|
199
|
+
}
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
**Files:** New `src/coverage/` module
|
|
203
|
+
|
|
204
|
+
---
|
|
205
|
+
|
|
206
|
+
### 3.3 TLE Fitting from State Vectors
|
|
207
|
+
|
|
208
|
+
Generate TLEs from ephemeris data:
|
|
209
|
+
|
|
210
|
+
```typescript
|
|
211
|
+
class TleFitter {
|
|
212
|
+
static fromStateVector(state: StateVector, epoch: Date, options?: FitOptions): Tle;
|
|
213
|
+
static fromEphemeris(ephemeris: Array<{time: Date, state: StateVector}>, options?: FitOptions): Tle;
|
|
214
|
+
}
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
**Files:** New `src/coordinate/TleFitter.ts`
|
|
218
|
+
|
|
219
|
+
---
|
|
220
|
+
|
|
221
|
+
## Priority 4: External Integration
|
|
222
|
+
|
|
223
|
+
### 4.1 Space-Track.org Client
|
|
224
|
+
|
|
225
|
+
```typescript
|
|
226
|
+
class SpaceTrackClient {
|
|
227
|
+
constructor(credentials: SpaceTrackCredentials);
|
|
228
|
+
|
|
229
|
+
async getTle(noradId: number): Promise<Tle>;
|
|
230
|
+
async getTleHistory(noradId: number, start: Date, end: Date): Promise<Tle[]>;
|
|
231
|
+
async searchTle(query: TleQuery): Promise<Tle[]>;
|
|
232
|
+
async getCatalog(): Promise<SatelliteCatalogEntry[]>;
|
|
233
|
+
}
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
**Files:** New `src/api/SpaceTrackClient.ts`
|
|
237
|
+
|
|
238
|
+
---
|
|
239
|
+
|
|
240
|
+
### 4.2 CelesTrak Client
|
|
241
|
+
|
|
242
|
+
```typescript
|
|
243
|
+
class CelesTrakClient {
|
|
244
|
+
async getGpData(group: string): Promise<Tle[]>;
|
|
245
|
+
async getSupTles(source: string): Promise<Tle[]>;
|
|
246
|
+
async getSpaceWeather(): Promise<SpaceWeatherData>;
|
|
247
|
+
}
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
**Files:** New `src/api/CelesTrakClient.ts`
|
|
251
|
+
|
|
252
|
+
---
|
|
253
|
+
|
|
254
|
+
### 4.3 CCSDS Message Support
|
|
255
|
+
|
|
256
|
+
Expand parser support (OEM and CDM already done):
|
|
257
|
+
|
|
258
|
+
| Parser | Format | Status |
|
|
259
|
+
|--------|--------|--------|
|
|
260
|
+
| OemParser | Orbit Ephemeris Message | Done |
|
|
261
|
+
| CdmParser | Conjunction Data Message | Done |
|
|
262
|
+
| Sp3Parser | SP3 precise ephemerides | Planned |
|
|
263
|
+
| TdmParser | Tracking Data Messages | Planned |
|
|
264
|
+
| OpmParser | Orbit Parameter Message | Planned |
|
|
265
|
+
| OmmParser | Orbit Mean Elements Message | Planned |
|
|
266
|
+
|
|
267
|
+
**Files:** `src/parsers/`
|
|
268
|
+
|
|
269
|
+
---
|
|
270
|
+
|
|
271
|
+
### 4.4 FreeFlyer/STK Compatibility
|
|
272
|
+
|
|
273
|
+
Import/export formats for commercial tools:
|
|
274
|
+
|
|
275
|
+
- STK ephemeris files (.e)
|
|
276
|
+
- FreeFlyer script generation
|
|
277
|
+
- GMAT script generation
|
|
278
|
+
|
|
279
|
+
**Files:** New `src/compat/` module
|
|
280
|
+
|
|
281
|
+
---
|
|
282
|
+
|
|
283
|
+
## Lower Priority
|
|
284
|
+
|
|
285
|
+
### 5.1 Angles-Only Orbit Determination
|
|
286
|
+
|
|
287
|
+
Add angles-only IOD methods:
|
|
288
|
+
|
|
289
|
+
- Double-r iteration
|
|
290
|
+
- Gooding angles-only
|
|
291
|
+
- Statistical OD from optical observations
|
|
292
|
+
|
|
293
|
+
**Files:** `src/orbit-determination/`
|
|
294
|
+
|
|
295
|
+
---
|
|
296
|
+
|
|
297
|
+
### 5.2 Atmospheric Density Models
|
|
298
|
+
|
|
299
|
+
Additional models beyond Harris-Priester:
|
|
300
|
+
|
|
301
|
+
- NRLMSISE-00
|
|
302
|
+
- JB2008
|
|
303
|
+
- DTM-2020
|
|
304
|
+
|
|
305
|
+
**Files:** `src/force/`
|
|
306
|
+
|
|
307
|
+
---
|
|
308
|
+
|
|
309
|
+
### 5.3 Memory-Efficient History
|
|
310
|
+
|
|
311
|
+
Optimize History for long simulations:
|
|
312
|
+
|
|
313
|
+
- Store as typed arrays (Float64Array)
|
|
314
|
+
- Compression for older entries
|
|
315
|
+
- Tiered storage (recent=full, old=downsampled)
|
|
316
|
+
|
|
317
|
+
**Files:** `src/objects/History.ts`
|
|
318
|
+
|
|
319
|
+
---
|
|
320
|
+
|
|
321
|
+
## Ideas for Future Consideration
|
|
322
|
+
|
|
323
|
+
- **TypeDoc Generation** - Auto-generate API documentation
|
|
324
|
+
- **Streaming TLE Catalogs** - Memory-efficient loading of large catalogs
|
|
325
|
+
- **Node.js Fetch Polyfill** - Enable API clients in server environments
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @author Theodore Kruczek
|
|
3
|
+
* @license AGPL-3.0-or-later
|
|
4
|
+
* @copyright (c) 2025 Kruczek Labs LLC
|
|
5
|
+
*
|
|
6
|
+
* Orbital Object ToolKit is free software: you can redistribute it and/or modify it under the
|
|
7
|
+
* terms of the GNU Affero General Public License as published by the Free Software
|
|
8
|
+
* Foundation, either version 3 of the License, or (at your option) any later version.
|
|
9
|
+
*
|
|
10
|
+
* Orbital Object ToolKit is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
|
|
11
|
+
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
12
|
+
* See the GNU Affero General Public License for more details.
|
|
13
|
+
*
|
|
14
|
+
* You should have received a copy of the GNU Affero General Public License along with
|
|
15
|
+
* Orbital Object ToolKit. If not, see <http://www.gnu.org/licenses/>.
|
|
16
|
+
*/
|
|
17
|
+
import { Body } from 'astronomy-engine';
|
|
18
|
+
import { BaseObject, BaseObjectParams } from '../objects/BaseObject';
|
|
19
|
+
import { Vector3D } from '../operations/Vector3D';
|
|
20
|
+
import { Degrees, Kilometers, Radians } from '../types/types';
|
|
21
|
+
import { CelestialBodyType } from './CelestialBodyType';
|
|
22
|
+
import { GroundObject } from '../objects/GroundObject';
|
|
23
|
+
/**
|
|
24
|
+
* Configuration options for CelestialBody.
|
|
25
|
+
*/
|
|
26
|
+
export interface CelestialBodyParams extends BaseObjectParams {
|
|
27
|
+
/** The celestial body type */
|
|
28
|
+
bodyType: CelestialBodyType;
|
|
29
|
+
/** Gravitational parameter (km³/s²) */
|
|
30
|
+
mu?: number;
|
|
31
|
+
/** Mean radius (km) */
|
|
32
|
+
radius?: Kilometers;
|
|
33
|
+
/** astronomy-engine Body identifier */
|
|
34
|
+
astronomyBody?: Body;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Rise/set/transit times for a celestial body.
|
|
38
|
+
*/
|
|
39
|
+
export interface RiseSetTimes {
|
|
40
|
+
/** Time when body rises above horizon (null if circumpolar or never rises) */
|
|
41
|
+
rise: Date | null;
|
|
42
|
+
/** Time when body reaches highest point */
|
|
43
|
+
transit: Date | null;
|
|
44
|
+
/** Time when body sets below horizon (null if circumpolar or never sets) */
|
|
45
|
+
set: Date | null;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Abstract base class for all celestial bodies in the solar system.
|
|
49
|
+
*
|
|
50
|
+
* CelestialBody uses astronomy-engine for high-precision calculations of
|
|
51
|
+
* positions, rise/set times, and other astronomical phenomena.
|
|
52
|
+
*
|
|
53
|
+
* @example
|
|
54
|
+
* ```typescript
|
|
55
|
+
* // Get the Sun's position
|
|
56
|
+
* const sunPos = Sun.eci(new Date());
|
|
57
|
+
*
|
|
58
|
+
* // Get rise/set times for Mars
|
|
59
|
+
* const marsRiseSet = Mars.getRiseSetTimes(groundStation, new Date());
|
|
60
|
+
* ```
|
|
61
|
+
*/
|
|
62
|
+
export declare abstract class CelestialBody extends BaseObject {
|
|
63
|
+
/** The type of celestial body */
|
|
64
|
+
bodyType: CelestialBodyType;
|
|
65
|
+
/** Gravitational parameter (km³/s²) */
|
|
66
|
+
mu?: number;
|
|
67
|
+
/** Mean radius (km) */
|
|
68
|
+
radius?: Kilometers;
|
|
69
|
+
/** astronomy-engine Body identifier for calculated bodies */
|
|
70
|
+
protected astronomyBody_?: Body;
|
|
71
|
+
constructor(params: CelestialBodyParams);
|
|
72
|
+
/**
|
|
73
|
+
* Gets the body's position in Earth-Centered Inertial (J2000) coordinates.
|
|
74
|
+
* @param date - The date/time for the position calculation
|
|
75
|
+
* @returns Position vector in kilometers
|
|
76
|
+
*/
|
|
77
|
+
abstract eci(date?: Date): Vector3D<Kilometers>;
|
|
78
|
+
/**
|
|
79
|
+
* Gets the body's position in heliocentric coordinates.
|
|
80
|
+
* @param date - The date/time for the position calculation
|
|
81
|
+
* @returns Position vector in kilometers (Sun-centered)
|
|
82
|
+
*/
|
|
83
|
+
abstract heliocentric(date?: Date): Vector3D<Kilometers>;
|
|
84
|
+
/**
|
|
85
|
+
* Gets the body's velocity vector if available.
|
|
86
|
+
* @param date - The date/time for the velocity calculation
|
|
87
|
+
* @returns Velocity vector in km/s, or null if not available
|
|
88
|
+
*/
|
|
89
|
+
abstract velocity(date?: Date): Vector3D | null;
|
|
90
|
+
/**
|
|
91
|
+
* Gets the right ascension of the body as seen from Earth.
|
|
92
|
+
* @param date - The date/time for the calculation
|
|
93
|
+
* @returns Right ascension in radians
|
|
94
|
+
*/
|
|
95
|
+
getRightAscension(date?: Date): Radians;
|
|
96
|
+
/**
|
|
97
|
+
* Gets the declination of the body as seen from Earth.
|
|
98
|
+
* @param date - The date/time for the calculation
|
|
99
|
+
* @returns Declination in radians
|
|
100
|
+
*/
|
|
101
|
+
getDeclination(date?: Date): Radians;
|
|
102
|
+
/**
|
|
103
|
+
* Gets the azimuth and altitude of the body as seen from a ground location.
|
|
104
|
+
* @param observer - The ground observer location
|
|
105
|
+
* @param date - The date/time for the calculation
|
|
106
|
+
* @param refraction - Whether to apply atmospheric refraction correction
|
|
107
|
+
* @returns Object with azimuth and altitude in degrees
|
|
108
|
+
*/
|
|
109
|
+
getAzEl(observer: GroundObject, date?: Date, refraction?: boolean): {
|
|
110
|
+
az: Degrees;
|
|
111
|
+
el: Degrees;
|
|
112
|
+
};
|
|
113
|
+
/**
|
|
114
|
+
* Gets the distance from Earth to this body.
|
|
115
|
+
* @param date - The date/time for the calculation
|
|
116
|
+
* @returns Distance in kilometers
|
|
117
|
+
*/
|
|
118
|
+
getDistanceFromEarth(date?: Date): Kilometers;
|
|
119
|
+
/**
|
|
120
|
+
* Gets the distance from the Sun to this body.
|
|
121
|
+
* @param date - The date/time for the calculation
|
|
122
|
+
* @returns Distance in kilometers
|
|
123
|
+
*/
|
|
124
|
+
getDistanceFromSun(date?: Date): Kilometers;
|
|
125
|
+
/**
|
|
126
|
+
* Gets rise, transit, and set times for this body as seen from a ground location.
|
|
127
|
+
* @param observer - The ground observer location
|
|
128
|
+
* @param date - The starting date for the search
|
|
129
|
+
* @param minElevation - Minimum elevation angle in degrees (default 0)
|
|
130
|
+
* @returns Rise, transit, and set times (null if body doesn't rise/set)
|
|
131
|
+
*/
|
|
132
|
+
getRiseSetTimes(observer: GroundObject, date?: Date, minElevation?: Degrees): RiseSetTimes;
|
|
133
|
+
/**
|
|
134
|
+
* Calculates the angular diameter of this body as seen from a given position.
|
|
135
|
+
* @param observerPos - The observer's position in km
|
|
136
|
+
* @returns Angular diameter in radians
|
|
137
|
+
*/
|
|
138
|
+
getAngularDiameter(observerPos: Vector3D<Kilometers>): Radians;
|
|
139
|
+
/**
|
|
140
|
+
* Calculates the angular separation between this body and a target position.
|
|
141
|
+
* @param targetPos - The target position in ECI coordinates (km)
|
|
142
|
+
* @param date - The date/time for the calculation
|
|
143
|
+
* @returns Angular separation in degrees
|
|
144
|
+
*/
|
|
145
|
+
getAngularSeparation(targetPos: Vector3D<Kilometers>, date?: Date): Degrees;
|
|
146
|
+
/**
|
|
147
|
+
* Converts astronomy-engine GeoVector (AU) to Vector3D (km).
|
|
148
|
+
*/
|
|
149
|
+
protected geoVectorToKm(body: Body, date: Date): Vector3D<Kilometers>;
|
|
150
|
+
/**
|
|
151
|
+
* Converts astronomy-engine HelioVector (AU) to Vector3D (km).
|
|
152
|
+
*/
|
|
153
|
+
protected helioVectorToKm(body: Body, date: Date): Vector3D<Kilometers>;
|
|
154
|
+
protected serializeSpecific(): Record<string, unknown>;
|
|
155
|
+
}
|