ootk 6.0.7 → 7.0.0

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/dist/main.cjs CHANGED
@@ -19307,6 +19307,206 @@ var observationNoiseFromSigmas = (sigmas) => {
19307
19307
  return new Matrix(result);
19308
19308
  };
19309
19309
 
19310
+ // src/observation/Observation.ts
19311
+ var Observation = class {
19312
+ /**
19313
+ * Convert this observation's noise matrix into a covariance matrix.
19314
+ * @returns A matrix representing the noise covariance.
19315
+ */
19316
+ noiseCovariance() {
19317
+ return this.noise.reciprocal();
19318
+ }
19319
+ /**
19320
+ * Generates a noise sample from the noise covariance matrix.
19321
+ * @param sigma - The scaling factor for the noise covariance matrix.
19322
+ * @returns A matrix representing the noise sample.
19323
+ */
19324
+ noiseSample_(sigma) {
19325
+ return this.noiseCovariance().scale(sigma).cholesky();
19326
+ }
19327
+ /**
19328
+ * Randomly sample this observation in vector form within the
19329
+ * observation noise.
19330
+ * @param random Random number generator.
19331
+ * @param sigma Sigma value to scale the noise by.
19332
+ * @returns Sampled observation.
19333
+ */
19334
+ sampleVector(random, sigma) {
19335
+ const chol = this.noiseSample_(sigma);
19336
+ const gauss = random.gaussVector(this.noise.columns);
19337
+ const meas = this.toVector();
19338
+ return meas.add(chol.multiplyVector(gauss));
19339
+ }
19340
+ };
19341
+
19342
+ // src/observation/ObservationOptical.ts
19343
+ var ObservationOptical = class _ObservationOptical extends Observation {
19344
+ // / Create a new [ObservationOptical] object.
19345
+ constructor(site_, observation, noise_ = _ObservationOptical.defaultNoise) {
19346
+ super();
19347
+ this.site_ = site_;
19348
+ this.observation = observation;
19349
+ this.noise_ = noise_;
19350
+ }
19351
+ // / Inertial site location.
19352
+ get site() {
19353
+ return this.site_;
19354
+ }
19355
+ // / Noise matrix.
19356
+ get noise() {
19357
+ return this.noise_;
19358
+ }
19359
+ /**
19360
+ * Default noise matrix _(right-ascension, declination)_.
19361
+ * Based on the Maui Optical Site noise model.
19362
+ */
19363
+ static defaultNoise = _ObservationOptical.noiseFromSigmas(
19364
+ 37e-4 * DEG2RAD,
19365
+ 3e-3 * DEG2RAD
19366
+ );
19367
+ get epoch() {
19368
+ return this.observation.epoch;
19369
+ }
19370
+ toVector() {
19371
+ return Vector.fromList([this.observation.rightAscension, this.observation.declination]);
19372
+ }
19373
+ clos(propagator) {
19374
+ const position = propagator.propagate(this.epoch).position;
19375
+ const offset = position.subtract(this.site.position);
19376
+ const actual = this.observation.lineOfSight().normalize();
19377
+ const expected = offset.normalize();
19378
+ const slantRange = offset.magnitude();
19379
+ const theta = actual.angle(expected);
19380
+ if (isNaN(theta)) {
19381
+ return 0;
19382
+ }
19383
+ return 2 * slantRange * Math.sin(theta * 0.5);
19384
+ }
19385
+ ricDiff(propagator) {
19386
+ const r0 = this.site;
19387
+ const r1 = propagator.propagate(this.epoch);
19388
+ const r2 = this.observation.position(this.site, r1.position.distance(r0.position));
19389
+ return RIC.fromJ2000(new J20002(this.epoch, r2, Vector3D.origin), r1).position;
19390
+ }
19391
+ sample(random, sigma = 1) {
19392
+ const resultEl = this.sampleVector(random, sigma).elements;
19393
+ return new _ObservationOptical(
19394
+ this.site,
19395
+ new RadecTopocentric(this.epoch, resultEl[0], resultEl[1]),
19396
+ this.noise
19397
+ );
19398
+ }
19399
+ jacobian(propPairs) {
19400
+ const result = array2d(2, 6, 0);
19401
+ for (let i = 0; i < 6; i++) {
19402
+ const step = propPairs.step(i);
19403
+ const [high, low] = propPairs.get(i);
19404
+ const sl = low.propagate(this.epoch);
19405
+ const sh = high.propagate(this.epoch);
19406
+ const ol = RadecTopocentric.fromStateVector(sl, this.site);
19407
+ const oh = RadecTopocentric.fromStateVector(sh, this.site);
19408
+ result[0][i] = observationDerivative(oh.rightAscension, ol.rightAscension, step, true);
19409
+ result[1][i] = observationDerivative(oh.declination, ol.declination, step, true);
19410
+ }
19411
+ return new Matrix(result);
19412
+ }
19413
+ residual(propagator) {
19414
+ const result = array2d(2, 1, 0);
19415
+ const state = propagator.propagate(this.epoch);
19416
+ const radec = RadecTopocentric.fromStateVector(state, this.site);
19417
+ result[0][0] = normalizeAngle(this.observation.rightAscension, radec.rightAscension);
19418
+ result[1][0] = normalizeAngle(this.observation.declination, radec.declination);
19419
+ return new Matrix(result);
19420
+ }
19421
+ /**
19422
+ * Create a noise matrix from right ascension and declination standard deviantions.
19423
+ * @param raSigma Right ascension standard deviation
19424
+ * @param decSigma Declination standard deviation
19425
+ * @returns Noise matrix
19426
+ */
19427
+ static noiseFromSigmas(raSigma, decSigma) {
19428
+ return observationNoiseFromSigmas([raSigma, decSigma]);
19429
+ }
19430
+ };
19431
+
19432
+ // src/observation/ObservationRadar.ts
19433
+ var ObservationRadar = class _ObservationRadar extends Observation {
19434
+ // / Create a new [ObservationRadar] object.
19435
+ constructor(site_, observation, noise_ = _ObservationRadar.defaultNoise) {
19436
+ super();
19437
+ this.site_ = site_;
19438
+ this.observation = observation;
19439
+ this.noise_ = noise_;
19440
+ }
19441
+ // / Default noise matrix.
19442
+ static defaultNoise = _ObservationRadar.noiseFromSigmas(0.32, 0.015 * DEG2RAD, 0.015 * DEG2RAD);
19443
+ get epoch() {
19444
+ return this.observation.epoch;
19445
+ }
19446
+ get site() {
19447
+ return this.site_;
19448
+ }
19449
+ get noise() {
19450
+ return this.noise_;
19451
+ }
19452
+ toVector() {
19453
+ return Vector.fromList([this.observation.rng, this.observation.azRad, this.observation.elRad]);
19454
+ }
19455
+ clos(propagator) {
19456
+ const ri = propagator.propagate(this.epoch).position.subtract(this.site.position);
19457
+ return Math.abs(this.observation.rng - ri.magnitude());
19458
+ }
19459
+ ricDiff(propagator) {
19460
+ const r0 = propagator.propagate(this.epoch);
19461
+ const r1 = RAE.fromStateVector(r0, this.site);
19462
+ const r2 = this.observation.position(this.site, r1.azRad, r1.elRad);
19463
+ return RIC.fromJ2000(new J20002(this.epoch, r2, Vector3D.origin), r0).position;
19464
+ }
19465
+ sample(random, sigma = 1) {
19466
+ const result = this.sampleVector(random, sigma).elements;
19467
+ return new _ObservationRadar(
19468
+ this.site,
19469
+ new RAE(this.observation.epoch, result[0], result[1], result[2]),
19470
+ this.noise
19471
+ );
19472
+ }
19473
+ jacobian(propPairs) {
19474
+ const result = array2d(3, 6, 0);
19475
+ for (let i = 0; i < 6; i++) {
19476
+ const step = propPairs.step(i);
19477
+ const [high, low] = propPairs.get(i);
19478
+ const sl = low.propagate(this.epoch);
19479
+ const sh = high.propagate(this.epoch);
19480
+ const ol = RAE.fromStateVector(sl, this.site);
19481
+ const oh = RAE.fromStateVector(sh, this.site);
19482
+ result[0][i] = observationDerivative(oh.rng, ol.rng, step);
19483
+ result[1][i] = observationDerivative(oh.azRad, ol.azRad, step, true);
19484
+ result[2][i] = observationDerivative(oh.elRad, ol.elRad, step, true);
19485
+ }
19486
+ return new Matrix(result);
19487
+ }
19488
+ residual(propagator) {
19489
+ const result = array2d(3, 1, 0);
19490
+ const state = propagator.propagate(this.epoch);
19491
+ const razel = RAE.fromStateVector(state, this.site);
19492
+ result[0][0] = this.observation.rng - razel.rng;
19493
+ result[1][0] = normalizeAngle(this.observation.azRad, razel.azRad);
19494
+ result[2][0] = normalizeAngle(this.observation.elRad, razel.elRad);
19495
+ return new Matrix(result);
19496
+ }
19497
+ /**
19498
+ * Create a noise matrix from the range, azimuth, and elevation standard
19499
+ * deviations _(kilometers/radians)_.
19500
+ * @param rngSigma - The range standard deviation _(kilometers)_.
19501
+ * @param azSigma - The azimuth standard deviation _(radians)_.
19502
+ * @param elSigma - The elevation standard deviation _(radians)_.
19503
+ * @returns The noise matrix.
19504
+ */
19505
+ static noiseFromSigmas(rngSigma, azSigma, elSigma) {
19506
+ return observationNoiseFromSigmas([rngSigma, azSigma, elSigma]);
19507
+ }
19508
+ };
19509
+
19310
19510
  // src/observation/RadecGeocentric.ts
19311
19511
  var RadecGeocentric = class _RadecGeocentric {
19312
19512
  constructor(epoch, rightAscension, declination, range, rightAscensionRate, declinationRate, rangeRate) {
@@ -23458,116 +23658,6 @@ var Sensor = class _Sensor {
23458
23658
  }
23459
23659
  };
23460
23660
 
23461
- // src/observation/Observation.ts
23462
- var Observation = class {
23463
- /**
23464
- * Convert this observation's noise matrix into a covariance matrix.
23465
- * @returns A matrix representing the noise covariance.
23466
- */
23467
- noiseCovariance() {
23468
- return this.noise.reciprocal();
23469
- }
23470
- /**
23471
- * Generates a noise sample from the noise covariance matrix.
23472
- * @param sigma - The scaling factor for the noise covariance matrix.
23473
- * @returns A matrix representing the noise sample.
23474
- */
23475
- noiseSample_(sigma) {
23476
- return this.noiseCovariance().scale(sigma).cholesky();
23477
- }
23478
- /**
23479
- * Randomly sample this observation in vector form within the
23480
- * observation noise.
23481
- * @param random Random number generator.
23482
- * @param sigma Sigma value to scale the noise by.
23483
- * @returns Sampled observation.
23484
- */
23485
- sampleVector(random, sigma) {
23486
- const chol = this.noiseSample_(sigma);
23487
- const gauss = random.gaussVector(this.noise.columns);
23488
- const meas = this.toVector();
23489
- return meas.add(chol.multiplyVector(gauss));
23490
- }
23491
- };
23492
-
23493
- // src/observation/ObservationRadar.ts
23494
- var ObservationRadar = class _ObservationRadar extends Observation {
23495
- // / Create a new [ObservationRadar] object.
23496
- constructor(site_, observation, noise_ = _ObservationRadar.defaultNoise) {
23497
- super();
23498
- this.site_ = site_;
23499
- this.observation = observation;
23500
- this.noise_ = noise_;
23501
- }
23502
- // / Default noise matrix.
23503
- static defaultNoise = _ObservationRadar.noiseFromSigmas(0.32, 0.015 * DEG2RAD, 0.015 * DEG2RAD);
23504
- get epoch() {
23505
- return this.observation.epoch;
23506
- }
23507
- get site() {
23508
- return this.site_;
23509
- }
23510
- get noise() {
23511
- return this.noise_;
23512
- }
23513
- toVector() {
23514
- return Vector.fromList([this.observation.rng, this.observation.azRad, this.observation.elRad]);
23515
- }
23516
- clos(propagator) {
23517
- const ri = propagator.propagate(this.epoch).position.subtract(this.site.position);
23518
- return Math.abs(this.observation.rng - ri.magnitude());
23519
- }
23520
- ricDiff(propagator) {
23521
- const r0 = propagator.propagate(this.epoch);
23522
- const r1 = RAE.fromStateVector(r0, this.site);
23523
- const r2 = this.observation.position(this.site, r1.azRad, r1.elRad);
23524
- return RIC.fromJ2000(new J20002(this.epoch, r2, Vector3D.origin), r0).position;
23525
- }
23526
- sample(random, sigma = 1) {
23527
- const result = this.sampleVector(random, sigma).elements;
23528
- return new _ObservationRadar(
23529
- this.site,
23530
- new RAE(this.observation.epoch, result[0], result[1], result[2]),
23531
- this.noise
23532
- );
23533
- }
23534
- jacobian(propPairs) {
23535
- const result = array2d(3, 6, 0);
23536
- for (let i = 0; i < 6; i++) {
23537
- const step = propPairs.step(i);
23538
- const [high, low] = propPairs.get(i);
23539
- const sl = low.propagate(this.epoch);
23540
- const sh = high.propagate(this.epoch);
23541
- const ol = RAE.fromStateVector(sl, this.site);
23542
- const oh = RAE.fromStateVector(sh, this.site);
23543
- result[0][i] = observationDerivative(oh.rng, ol.rng, step);
23544
- result[1][i] = observationDerivative(oh.azRad, ol.azRad, step, true);
23545
- result[2][i] = observationDerivative(oh.elRad, ol.elRad, step, true);
23546
- }
23547
- return new Matrix(result);
23548
- }
23549
- residual(propagator) {
23550
- const result = array2d(3, 1, 0);
23551
- const state = propagator.propagate(this.epoch);
23552
- const razel = RAE.fromStateVector(state, this.site);
23553
- result[0][0] = this.observation.rng - razel.rng;
23554
- result[1][0] = normalizeAngle(this.observation.azRad, razel.azRad);
23555
- result[2][0] = normalizeAngle(this.observation.elRad, razel.elRad);
23556
- return new Matrix(result);
23557
- }
23558
- /**
23559
- * Create a noise matrix from the range, azimuth, and elevation standard
23560
- * deviations _(kilometers/radians)_.
23561
- * @param rngSigma - The range standard deviation _(kilometers)_.
23562
- * @param azSigma - The azimuth standard deviation _(radians)_.
23563
- * @param elSigma - The elevation standard deviation _(radians)_.
23564
- * @returns The noise matrix.
23565
- */
23566
- static noiseFromSigmas(rngSigma, azSigma, elSigma) {
23567
- return observationNoiseFromSigmas([rngSigma, azSigma, elSigma]);
23568
- }
23569
- };
23570
-
23571
23661
  // src/sensor/RadarSensor.ts
23572
23662
  var RadarSensor = class extends Sensor {
23573
23663
  /** Radar beamwidth in degrees */
@@ -23979,96 +24069,6 @@ var MechanicalRadar = class _MechanicalRadar extends RadarSensor {
23979
24069
  }
23980
24070
  };
23981
24071
 
23982
- // src/observation/ObservationOptical.ts
23983
- var ObservationOptical = class _ObservationOptical extends Observation {
23984
- // / Create a new [ObservationOptical] object.
23985
- constructor(site_, observation, noise_ = _ObservationOptical.defaultNoise) {
23986
- super();
23987
- this.site_ = site_;
23988
- this.observation = observation;
23989
- this.noise_ = noise_;
23990
- }
23991
- // / Inertial site location.
23992
- get site() {
23993
- return this.site_;
23994
- }
23995
- // / Noise matrix.
23996
- get noise() {
23997
- return this.noise_;
23998
- }
23999
- /**
24000
- * Default noise matrix _(right-ascension, declination)_.
24001
- * Based on the Maui Optical Site noise model.
24002
- */
24003
- static defaultNoise = _ObservationOptical.noiseFromSigmas(
24004
- 37e-4 * DEG2RAD,
24005
- 3e-3 * DEG2RAD
24006
- );
24007
- get epoch() {
24008
- return this.observation.epoch;
24009
- }
24010
- toVector() {
24011
- return Vector.fromList([this.observation.rightAscension, this.observation.declination]);
24012
- }
24013
- clos(propagator) {
24014
- const position = propagator.propagate(this.epoch).position;
24015
- const offset = position.subtract(this.site.position);
24016
- const actual = this.observation.lineOfSight().normalize();
24017
- const expected = offset.normalize();
24018
- const slantRange = offset.magnitude();
24019
- const theta = actual.angle(expected);
24020
- if (isNaN(theta)) {
24021
- return 0;
24022
- }
24023
- return 2 * slantRange * Math.sin(theta * 0.5);
24024
- }
24025
- ricDiff(propagator) {
24026
- const r0 = this.site;
24027
- const r1 = propagator.propagate(this.epoch);
24028
- const r2 = this.observation.position(this.site, r1.position.distance(r0.position));
24029
- return RIC.fromJ2000(new J20002(this.epoch, r2, Vector3D.origin), r1).position;
24030
- }
24031
- sample(random, sigma = 1) {
24032
- const resultEl = this.sampleVector(random, sigma).elements;
24033
- return new _ObservationOptical(
24034
- this.site,
24035
- new RadecTopocentric(this.epoch, resultEl[0], resultEl[1]),
24036
- this.noise
24037
- );
24038
- }
24039
- jacobian(propPairs) {
24040
- const result = array2d(2, 6, 0);
24041
- for (let i = 0; i < 6; i++) {
24042
- const step = propPairs.step(i);
24043
- const [high, low] = propPairs.get(i);
24044
- const sl = low.propagate(this.epoch);
24045
- const sh = high.propagate(this.epoch);
24046
- const ol = RadecTopocentric.fromStateVector(sl, this.site);
24047
- const oh = RadecTopocentric.fromStateVector(sh, this.site);
24048
- result[0][i] = observationDerivative(oh.rightAscension, ol.rightAscension, step, true);
24049
- result[1][i] = observationDerivative(oh.declination, ol.declination, step, true);
24050
- }
24051
- return new Matrix(result);
24052
- }
24053
- residual(propagator) {
24054
- const result = array2d(2, 1, 0);
24055
- const state = propagator.propagate(this.epoch);
24056
- const radec = RadecTopocentric.fromStateVector(state, this.site);
24057
- result[0][0] = normalizeAngle(this.observation.rightAscension, radec.rightAscension);
24058
- result[1][0] = normalizeAngle(this.observation.declination, radec.declination);
24059
- return new Matrix(result);
24060
- }
24061
- /**
24062
- * Create a noise matrix from right ascension and declination standard deviantions.
24063
- * @param raSigma Right ascension standard deviation
24064
- * @param decSigma Declination standard deviation
24065
- * @returns Noise matrix
24066
- */
24067
- static noiseFromSigmas(raSigma, decSigma) {
24068
- return observationNoiseFromSigmas([raSigma, decSigma]);
24069
- }
24070
- };
24071
-
24072
24072
  // src/sensor/OpticalSensor.ts
24073
24073
  var OpticalSensor = class _OpticalSensor extends Sensor {
24074
24074
  /** Telescope aperture in meters */
@@ -29223,6 +29223,24 @@ var LaunchTrajectoryGenerator = class _LaunchTrajectoryGenerator {
29223
29223
  }
29224
29224
  return azimuth;
29225
29225
  }
29226
+ /**
29227
+ * Compute orbital inclination from a launch azimuth and launch site latitude.
29228
+ *
29229
+ * Inverse of {@link computeLaunchAzimuth}: from the spherical-triangle relation
29230
+ * `cos(i) = sin(azimuth) * cos(latitude)`. The result is the magnitude of the
29231
+ * inclination in degrees (always in [0, 180]); the launch direction (N/S) is
29232
+ * implied by the azimuth quadrant, not by this value.
29233
+ *
29234
+ * @param azimuthDeg Launch azimuth in degrees (from north, clockwise).
29235
+ * @param latDeg Launch site latitude in degrees.
29236
+ * @returns Orbital inclination in degrees, in [0, 180].
29237
+ */
29238
+ static computeInclinationFromAzimuth(azimuthDeg, latDeg) {
29239
+ const az = azimuthDeg * DEG2RAD;
29240
+ const lat = latDeg * DEG2RAD;
29241
+ const cosInc = Math.max(-1, Math.min(1, Math.sin(az) * Math.cos(lat)));
29242
+ return Math.acos(cosInc) * RAD2DEG;
29243
+ }
29226
29244
  /**
29227
29245
  * Estimate ascent duration based on target insertion altitude.
29228
29246
  * Loosely calibrated: ~480s for 200km, ~540s for 400km, ~600s for 800km.
@@ -30466,6 +30484,9 @@ exports.ModulationType = ModulationType;
30466
30484
  exports.Moon = Moon;
30467
30485
  exports.MoonBody = MoonBody;
30468
30486
  exports.Neptune = Neptune;
30487
+ exports.Observation = Observation;
30488
+ exports.ObservationOptical = ObservationOptical;
30489
+ exports.ObservationRadar = ObservationRadar;
30469
30490
  exports.OdmExporter = OdmExporter;
30470
30491
  exports.OemParser = OemParser;
30471
30492
  exports.OmmParser = OmmParser;
package/dist/main.d.cts CHANGED
@@ -10420,6 +10420,51 @@ declare const normalizeAngle: (a: number, b: number) => number;
10420
10420
  declare const observationDerivative: (xh: number, xl: number, step: number, isAngle?: boolean) => number;
10421
10421
  declare const observationNoiseFromSigmas: (sigmas: number[]) => Matrix;
10422
10422
 
10423
+ /**
10424
+ * @author Theodore Kruczek
10425
+ * @license AGPL-3.0-or-later
10426
+ * @copyright (c) 2025-2026 Kruczek Labs LLC
10427
+ *
10428
+ * Orbital Object ToolKit is free software: you can redistribute it and/or modify it under the
10429
+ * terms of the GNU Affero General Public License as published by the Free Software
10430
+ * Foundation, either version 3 of the License, or (at your option) any later version.
10431
+ *
10432
+ * Orbital Object ToolKit is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
10433
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
10434
+ * See the GNU Affero General Public License for more details.
10435
+ *
10436
+ * You should have received a copy of the GNU Affero General Public License along with
10437
+ * Orbital Object ToolKit. If not, see <http://www.gnu.org/licenses/>.
10438
+ */
10439
+
10440
+ declare class ObservationOptical extends Observation {
10441
+ private readonly site_;
10442
+ observation: RadecTopocentric;
10443
+ private readonly noise_;
10444
+ constructor(site_: J2000, observation: RadecTopocentric, noise_?: Matrix);
10445
+ get site(): J2000;
10446
+ get noise(): Matrix;
10447
+ /**
10448
+ * Default noise matrix _(right-ascension, declination)_.
10449
+ * Based on the Maui Optical Site noise model.
10450
+ */
10451
+ static readonly defaultNoise: Matrix;
10452
+ get epoch(): EpochUTC;
10453
+ toVector(): Vector;
10454
+ clos(propagator: Propagator): number;
10455
+ ricDiff(propagator: Propagator): Vector3D;
10456
+ sample(random: RandomGaussianSource, sigma?: number): Observation;
10457
+ jacobian(propPairs: PropagatorPairs): Matrix;
10458
+ residual(propagator: Propagator): Matrix;
10459
+ /**
10460
+ * Create a noise matrix from right ascension and declination standard deviantions.
10461
+ * @param raSigma Right ascension standard deviation
10462
+ * @param decSigma Declination standard deviation
10463
+ * @returns Noise matrix
10464
+ */
10465
+ static noiseFromSigmas(raSigma: Radians, decSigma: Radians): Matrix;
10466
+ }
10467
+
10423
10468
  /**
10424
10469
  * @author Theodore Kruczek
10425
10470
  * @description Orbital Object ToolKit (ootk) is a collection of tools for working
@@ -11555,51 +11600,6 @@ declare class GibbsIOD {
11555
11600
  solve(r1: Vector3D<Kilometers>, r2: Vector3D<Kilometers>, r3: Vector3D<Kilometers>, t2: EpochUTC, t3: EpochUTC): J2000;
11556
11601
  }
11557
11602
 
11558
- /**
11559
- * @author Theodore Kruczek
11560
- * @license AGPL-3.0-or-later
11561
- * @copyright (c) 2025-2026 Kruczek Labs LLC
11562
- *
11563
- * Orbital Object ToolKit is free software: you can redistribute it and/or modify it under the
11564
- * terms of the GNU Affero General Public License as published by the Free Software
11565
- * Foundation, either version 3 of the License, or (at your option) any later version.
11566
- *
11567
- * Orbital Object ToolKit is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
11568
- * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
11569
- * See the GNU Affero General Public License for more details.
11570
- *
11571
- * You should have received a copy of the GNU Affero General Public License along with
11572
- * Orbital Object ToolKit. If not, see <http://www.gnu.org/licenses/>.
11573
- */
11574
-
11575
- declare class ObservationOptical extends Observation {
11576
- private readonly site_;
11577
- observation: RadecTopocentric;
11578
- private readonly noise_;
11579
- constructor(site_: J2000, observation: RadecTopocentric, noise_?: Matrix);
11580
- get site(): J2000;
11581
- get noise(): Matrix;
11582
- /**
11583
- * Default noise matrix _(right-ascension, declination)_.
11584
- * Based on the Maui Optical Site noise model.
11585
- */
11586
- static readonly defaultNoise: Matrix;
11587
- get epoch(): EpochUTC;
11588
- toVector(): Vector;
11589
- clos(propagator: Propagator): number;
11590
- ricDiff(propagator: Propagator): Vector3D;
11591
- sample(random: RandomGaussianSource, sigma?: number): Observation;
11592
- jacobian(propPairs: PropagatorPairs): Matrix;
11593
- residual(propagator: Propagator): Matrix;
11594
- /**
11595
- * Create a noise matrix from right ascension and declination standard deviantions.
11596
- * @param raSigma Right ascension standard deviation
11597
- * @param decSigma Declination standard deviation
11598
- * @returns Noise matrix
11599
- */
11600
- static noiseFromSigmas(raSigma: Radians, decSigma: Radians): Matrix;
11601
- }
11602
-
11603
11603
  /**
11604
11604
  * @author Theodore Kruczek
11605
11605
  * @license AGPL-3.0-or-later
@@ -17214,6 +17214,19 @@ declare class LaunchTrajectoryGenerator {
17214
17214
  * @returns Launch azimuth in radians (from north, clockwise).
17215
17215
  */
17216
17216
  static computeLaunchAzimuth(incDeg: number, latDeg: number, direction: 'N' | 'S'): number;
17217
+ /**
17218
+ * Compute orbital inclination from a launch azimuth and launch site latitude.
17219
+ *
17220
+ * Inverse of {@link computeLaunchAzimuth}: from the spherical-triangle relation
17221
+ * `cos(i) = sin(azimuth) * cos(latitude)`. The result is the magnitude of the
17222
+ * inclination in degrees (always in [0, 180]); the launch direction (N/S) is
17223
+ * implied by the azimuth quadrant, not by this value.
17224
+ *
17225
+ * @param azimuthDeg Launch azimuth in degrees (from north, clockwise).
17226
+ * @param latDeg Launch site latitude in degrees.
17227
+ * @returns Orbital inclination in degrees, in [0, 180].
17228
+ */
17229
+ static computeInclinationFromAzimuth(azimuthDeg: number, latDeg: number): number;
17217
17230
  /**
17218
17231
  * Estimate ascent duration based on target insertion altitude.
17219
17232
  * Loosely calibrated: ~480s for 200km, ~540s for 400km, ~600s for 800km.
@@ -17606,4 +17619,4 @@ declare class RepeatGroundTrack {
17606
17619
  private static gcd_;
17607
17620
  }
17608
17621
 
17609
- export { AccessCalculator, type AccessConstraints, AccessWindow, AngularDiameterMethod, AngularDistanceMethod, Antenna, type AntennaParams, AtmosphericDrag, type AzEl, BaseObject, type BaseObjectParams, BatchLeastSquaresOD, BatchLeastSquaresResult, Beacon, type BeaconParams, type BoresightFrame, BoxMuller, type CatalogObject, CatalogScreener, type CatalogScreeningOptions, CatalogSource, type CdmExportOptions, CdmExporter, type CdmHeader, type CdmManeuverableStatus, type CdmObjectData, type CdmObjectMetadata, type CdmObjectType, CdmParser, type CdmRelativeData, CelestialBody, type CelestialBodyParams, CelestialBodyType, CenterBody, CenterBodyMu, ChebyshevCoefficients, ChebyshevCompressor, ChebyshevInterpolator, ClassicalElements, type ClassicalElementsParams, CommDeviceType, CommLink, type CommPlatform, CommunicationDevice, type CommunicationDeviceInterface, type CommunicationDeviceParams, ConjunctionAssessment, type ConjunctionAssessmentOptions, ConjunctionEvent, type ConjunctionSpaceObjectInput, type ConsistencyRatioResult, ConstellationGenerator, ContactScheduler, ContactSelectionStrategy, CovarianceFrame, CovarianceRealism, type CovarianceRealismResult, CovarianceSample, type CoverageStatistics, CubicSpline, CubicSplineInterpolator, DEFAULT_INTERPOLATOR, DEFAULT_LAGRANGE_ORDER, DEG2RAD, DataHandler, type Days, type Dbm, type Dbw, type Decibels, type Degrees, type DegreesPerDay, type DegreesPerSecond, type DifferentiableFunction, DormandPrince54Propagator, DownhillSimplex, DynamicGroundObject, type DynamicGroundObjectParams, Earth, EarthGravity, type EcefVec3, type EigenvalueAnalysisResult, type ElevationMask, type EnuVec3, EphemerisBody, type EphemerisBodyParams, type EphemerisDataPoint, type EphemerisInterpolationType, EphemerisSatellite, type EphemerisSatelliteParams, Epoch, EpochGPS, EpochTAI, EpochTDB, EpochTT, EpochUTC, EpochWindow, EquinoctialElements, type EquinoctialElementsParams, EulerAngles, FieldInterpolator, FieldOfView, type FieldOfViewParams, type FindNearestOptions, Force, ForceModel, FormatTle, type FovBoundaryPoint, FovFrame, FovShape, type GcrfVec3, Geodetic, GibbsIOD, GoldenSection, GoodingIOD, Gravity, type GreenwichMeanSiderealTime, type GroundInterpolationMethod, GroundObject, type GroundObjectParams, type GroundPositionParams, GroundStation, type GroundStationParams, type GroundTrackPoint, HerrickGibbsIOD, type Hertz, Hill, type HistoricalState, History, type HistoryConfig, type HistoryEntry, type HorizonsEphemerisData, type HorizonsObserverResult, HorizonsParser, type HorizonsVectorResult, type Hours, ITRF, Interpolator, InterpolatorType, type ItrfVec3, J2000, type J2000Vec3, type JacobianFunction, Jupiter, KM_PER_AU, KeplerPropagator, type Kilometers, type KilometersPerSecond, LagrangeInterpolator, LambertIOD, LandObject, LaserRangingSensor, type LaserRangingSensorParams, type LaunchDetails, type LaunchTrajectoryConfig, LaunchTrajectoryGenerator, LevenbergMarquardtOD, LevenbergMarquardtResult, type LibrationData, type Line1Data, type Line2Data, type LinkBudget, type LlaVec3, type Lookangle, MILLISECONDS_PER_DAY, MILLISECONDS_PER_SECOND, MILLISECONDS_TO_DAYS, MINUTES_PER_DAY, MS_PER_DAY, type MahalanobisResult, Marker, Mars, Matrix, MechanicalRadar, type MechanicalRadarParams, Mercury, type Meters, type MetersPerSecond, type Milliseconds, type Minutes, ModifiedGoodingIOD, ModulationType, Moon, MoonBody, type MoonPhaseInfo, type MoonTimes, Neptune, type NumericalPropagatorOptions, type NutationAngles, type OdmExportOptions, OdmExporter, type OemCovarianceMatrix, type OemDataBlock, type OemExportOptions, type OemFromStateVectorsOptions, type OemHeader, type OemMetadata, OemParser, type OmmCovarianceMatrix, type OmmDataFormat, type OmmExportOptions, type OmmHeader, type OmmMeanElements, type OmmMetadata, type OmmParsedDataFormat, OmmParser, type OmmSpacecraftParameters, type OmmTleParameters, type OmmUserDefined, OotkError, type OperationsDetails, type OpmExportOptions, OpticalSensor, type OpticalSensorParams, type OptionsParams, OrbitDeterminationError, OrbitFinder, type OrbitFinderOptions, type OrbitParameters, OrbitRegime, type OrbitTrackPoint, type OrbitalShell, PI, ParseError, type ParsedCdm, type ParsedOem, type ParsedOmm, PassType, PassiveRFSensor, type PassiveRFSensorParams, PayloadStatus, PhasedArrayRadar, type PhasedArrayRadarParams, PlaneChangeBurn, PlanetBody, Pluto, PolynomialRegression, type PosVel, type PositionVelocity, type PrecessionAngles, ProbabilityOfCollision, PropagationError, Propagator, PropagatorType, Quaternion, RAD2DEG, RADIUS_OF_EARTH, RAE, RCS_VMAG_ESTIMATE_MAX, RCS_VMAG_ESTIMATE_MIN, RIC, type RaDec, RadarSensor, type RadarSensorParams, RadecGeocentric, RadecTopocentric, type Radians, type RadiansPerSecond, type RaeVec3, Random, RandomGaussianSource, type RcsShape, Receiver, type ReceiverParams, type ReferenceFrame, RelativeState, type RelayLinkBudget, RepeatGroundTrack, type RepeatGroundTrackOptions, type RepeatOrbitResult, type RfVec3, type RicSigmas, type RiseSetTimes, RkCheckpoint, RkResult, RungeKutta4Propagator, RungeKutta89Propagator, RungeKuttaAdaptive, type RuvVec3, type Rv2TleOptions, type Rv2TleResult, type RvVector, SLR_WAVELENGTHS, SPEED_OF_LIGHT_KM_S, type SatNumKind, Satellite, type SatelliteCoverageStats, type SatelliteParams, type SatelliteRecord, Saturn, type ScaleFactorResult, type ScheduleOptions, ScheduledContact, type ScheduledContactParams, ScreeningFilter, type ScreeningResult, type Seconds, type SecondsPerMeterPerSecond, SegmentedLagrangeInterpolator, Sensor, type SensorInterface, type SensorParams, type SensorPlatform, SensorType, type SerializedAntenna, type SerializedCommDevice, type SerializedObject, type SerializedSensor, type SezVec3, Sgp4, Sgp4Error, Sgp4ErrorCode, Sgp4OpsMode, Sgp4Propagator, type Sgp4Result, SimpleLinearRegression, SolarRadiationPressure, SolarSystem, type SpaceCraftDetails, SpaceObject, type SpaceObjectParams, SpaceObjectType, Star, type StarObjectParams, StateCovariance, StateInterpolator, StateVector, type StateVectorSgp4, type StationCoverageStats, type StringifiedNumber, Sun, SunBody, SunStatus, type SunTime, TAU, TEME, type TemeVec3, ThirdBodyGravity, Thrust, TimeStamped, type TimeWindow, Tle, type TleData, type TleDataFull, type TleLine1, type TleLine2, type TleParams, Transmitter, type TransmitterParams, Transponder, type TransponderParams, TwoBurnOrbitTransfer, Uranus, ValidationError, type Vec3, type Vec3Flat, Vector, Vector3D, Venus, VerletBlendInterpolator, VisualizationHelpers, type Watts, Waypoint, type WaypointData, ZoomValue, acoth, acsch, angularDiameter, angularDistance, angularVelocityOfEarth, array2d, asec2rad, asech, azel2uv, bodyTypeLookup, boresightFrameFromAzElRoll, cKmPerMs, cKmPerSec, cMPerSec, calcGmst, calcIncFromAz, calcInertAz, calculateFspl, calculatePropagationDelay, cappedScreeningCovarianceFromTle, clamp, concat, copySign, covariance, createCovarianceFromTle, createSampleCovarianceFromTle, createVec, csch, dbmToDbw, dbwToDbm, dbwToWatts, deg2rad, derivative, dopplerFactor, earthGravityParam, ecef2eci, ecef2enu, ecef2rae, ecefRad2rae, eci2ecef, eci2lla, eci2rae, enu2rf, estimateRcs, estimateVmagFromRcs, evalPoly, factorial, gamma, getDayOfYear, getDegLat, getDegLon, getRadLat, getRadLon, halfPi, isLeapYear, jacobian, jday, linearDistance, linearInterpolate, lla2ecef, lla2eci, lla2sez, llaRad2ecef, log10, mag2db, masec2rad, matchHalfPlane, mean, msec2sec, newtonM, newtonNu, normalizeAngle, observationDerivative, observationNoiseFromSigmas, parseCenterBody, rad2deg, radecToPosition, radecToVelocity, rae2ecef, rae2eci, rae2enu, rae2raeOffBoresight, rae2ruv, rae2sez, relativeVelocity, rv2tle, scaleAndClampRicSigmas, sec2day, sec2deg, sec2min, sech, secondsPerDay, secondsPerSiderealDay, secondsPerWeek, sez2rae, sign, spaceObjType2Str, std, temp4, toPrecision, ttasec2rad, uv2azel, wattsToDbw, wrapAngle, x2o3 };
17622
+ export { AccessCalculator, type AccessConstraints, AccessWindow, AngularDiameterMethod, AngularDistanceMethod, Antenna, type AntennaParams, AtmosphericDrag, type AzEl, BaseObject, type BaseObjectParams, BatchLeastSquaresOD, BatchLeastSquaresResult, Beacon, type BeaconParams, type BoresightFrame, BoxMuller, type CatalogObject, CatalogScreener, type CatalogScreeningOptions, CatalogSource, type CdmExportOptions, CdmExporter, type CdmHeader, type CdmManeuverableStatus, type CdmObjectData, type CdmObjectMetadata, type CdmObjectType, CdmParser, type CdmRelativeData, CelestialBody, type CelestialBodyParams, CelestialBodyType, CenterBody, CenterBodyMu, ChebyshevCoefficients, ChebyshevCompressor, ChebyshevInterpolator, ClassicalElements, type ClassicalElementsParams, CommDeviceType, CommLink, type CommPlatform, CommunicationDevice, type CommunicationDeviceInterface, type CommunicationDeviceParams, ConjunctionAssessment, type ConjunctionAssessmentOptions, ConjunctionEvent, type ConjunctionSpaceObjectInput, type ConsistencyRatioResult, ConstellationGenerator, ContactScheduler, ContactSelectionStrategy, CovarianceFrame, CovarianceRealism, type CovarianceRealismResult, CovarianceSample, type CoverageStatistics, CubicSpline, CubicSplineInterpolator, DEFAULT_INTERPOLATOR, DEFAULT_LAGRANGE_ORDER, DEG2RAD, DataHandler, type Days, type Dbm, type Dbw, type Decibels, type Degrees, type DegreesPerDay, type DegreesPerSecond, type DifferentiableFunction, DormandPrince54Propagator, DownhillSimplex, DynamicGroundObject, type DynamicGroundObjectParams, Earth, EarthGravity, type EcefVec3, type EigenvalueAnalysisResult, type ElevationMask, type EnuVec3, EphemerisBody, type EphemerisBodyParams, type EphemerisDataPoint, type EphemerisInterpolationType, EphemerisSatellite, type EphemerisSatelliteParams, Epoch, EpochGPS, EpochTAI, EpochTDB, EpochTT, EpochUTC, EpochWindow, EquinoctialElements, type EquinoctialElementsParams, EulerAngles, FieldInterpolator, FieldOfView, type FieldOfViewParams, type FindNearestOptions, Force, ForceModel, FormatTle, type FovBoundaryPoint, FovFrame, FovShape, type GcrfVec3, Geodetic, GibbsIOD, GoldenSection, GoodingIOD, Gravity, type GreenwichMeanSiderealTime, type GroundInterpolationMethod, GroundObject, type GroundObjectParams, type GroundPositionParams, GroundStation, type GroundStationParams, type GroundTrackPoint, HerrickGibbsIOD, type Hertz, Hill, type HistoricalState, History, type HistoryConfig, type HistoryEntry, type HorizonsEphemerisData, type HorizonsObserverResult, HorizonsParser, type HorizonsVectorResult, type Hours, ITRF, Interpolator, InterpolatorType, type ItrfVec3, J2000, type J2000Vec3, type JacobianFunction, Jupiter, KM_PER_AU, KeplerPropagator, type Kilometers, type KilometersPerSecond, LagrangeInterpolator, LambertIOD, LandObject, LaserRangingSensor, type LaserRangingSensorParams, type LaunchDetails, type LaunchTrajectoryConfig, LaunchTrajectoryGenerator, LevenbergMarquardtOD, LevenbergMarquardtResult, type LibrationData, type Line1Data, type Line2Data, type LinkBudget, type LlaVec3, type Lookangle, MILLISECONDS_PER_DAY, MILLISECONDS_PER_SECOND, MILLISECONDS_TO_DAYS, MINUTES_PER_DAY, MS_PER_DAY, type MahalanobisResult, Marker, Mars, Matrix, MechanicalRadar, type MechanicalRadarParams, Mercury, type Meters, type MetersPerSecond, type Milliseconds, type Minutes, ModifiedGoodingIOD, ModulationType, Moon, MoonBody, type MoonPhaseInfo, type MoonTimes, Neptune, type NumericalPropagatorOptions, type NutationAngles, Observation, ObservationOptical, ObservationRadar, type OdmExportOptions, OdmExporter, type OemCovarianceMatrix, type OemDataBlock, type OemExportOptions, type OemFromStateVectorsOptions, type OemHeader, type OemMetadata, OemParser, type OmmCovarianceMatrix, type OmmDataFormat, type OmmExportOptions, type OmmHeader, type OmmMeanElements, type OmmMetadata, type OmmParsedDataFormat, OmmParser, type OmmSpacecraftParameters, type OmmTleParameters, type OmmUserDefined, OotkError, type OperationsDetails, type OpmExportOptions, OpticalSensor, type OpticalSensorParams, type OptionsParams, OrbitDeterminationError, OrbitFinder, type OrbitFinderOptions, type OrbitParameters, OrbitRegime, type OrbitTrackPoint, type OrbitalShell, PI, ParseError, type ParsedCdm, type ParsedOem, type ParsedOmm, PassType, PassiveRFSensor, type PassiveRFSensorParams, PayloadStatus, PhasedArrayRadar, type PhasedArrayRadarParams, PlaneChangeBurn, PlanetBody, Pluto, PolynomialRegression, type PosVel, type PositionVelocity, type PrecessionAngles, ProbabilityOfCollision, PropagationError, Propagator, PropagatorType, Quaternion, RAD2DEG, RADIUS_OF_EARTH, RAE, RCS_VMAG_ESTIMATE_MAX, RCS_VMAG_ESTIMATE_MIN, RIC, type RaDec, RadarSensor, type RadarSensorParams, RadecGeocentric, RadecTopocentric, type Radians, type RadiansPerSecond, type RaeVec3, Random, RandomGaussianSource, type RcsShape, Receiver, type ReceiverParams, type ReferenceFrame, RelativeState, type RelayLinkBudget, RepeatGroundTrack, type RepeatGroundTrackOptions, type RepeatOrbitResult, type RfVec3, type RicSigmas, type RiseSetTimes, RkCheckpoint, RkResult, RungeKutta4Propagator, RungeKutta89Propagator, RungeKuttaAdaptive, type RuvVec3, type Rv2TleOptions, type Rv2TleResult, type RvVector, SLR_WAVELENGTHS, SPEED_OF_LIGHT_KM_S, type SatNumKind, Satellite, type SatelliteCoverageStats, type SatelliteParams, type SatelliteRecord, Saturn, type ScaleFactorResult, type ScheduleOptions, ScheduledContact, type ScheduledContactParams, ScreeningFilter, type ScreeningResult, type Seconds, type SecondsPerMeterPerSecond, SegmentedLagrangeInterpolator, Sensor, type SensorInterface, type SensorParams, type SensorPlatform, SensorType, type SerializedAntenna, type SerializedCommDevice, type SerializedObject, type SerializedSensor, type SezVec3, Sgp4, Sgp4Error, Sgp4ErrorCode, Sgp4OpsMode, Sgp4Propagator, type Sgp4Result, SimpleLinearRegression, SolarRadiationPressure, SolarSystem, type SpaceCraftDetails, SpaceObject, type SpaceObjectParams, SpaceObjectType, Star, type StarObjectParams, StateCovariance, StateInterpolator, StateVector, type StateVectorSgp4, type StationCoverageStats, type StringifiedNumber, Sun, SunBody, SunStatus, type SunTime, TAU, TEME, type TemeVec3, ThirdBodyGravity, Thrust, TimeStamped, type TimeWindow, Tle, type TleData, type TleDataFull, type TleLine1, type TleLine2, type TleParams, Transmitter, type TransmitterParams, Transponder, type TransponderParams, TwoBurnOrbitTransfer, Uranus, ValidationError, type Vec3, type Vec3Flat, Vector, Vector3D, Venus, VerletBlendInterpolator, VisualizationHelpers, type Watts, Waypoint, type WaypointData, ZoomValue, acoth, acsch, angularDiameter, angularDistance, angularVelocityOfEarth, array2d, asec2rad, asech, azel2uv, bodyTypeLookup, boresightFrameFromAzElRoll, cKmPerMs, cKmPerSec, cMPerSec, calcGmst, calcIncFromAz, calcInertAz, calculateFspl, calculatePropagationDelay, cappedScreeningCovarianceFromTle, clamp, concat, copySign, covariance, createCovarianceFromTle, createSampleCovarianceFromTle, createVec, csch, dbmToDbw, dbwToDbm, dbwToWatts, deg2rad, derivative, dopplerFactor, earthGravityParam, ecef2eci, ecef2enu, ecef2rae, ecefRad2rae, eci2ecef, eci2lla, eci2rae, enu2rf, estimateRcs, estimateVmagFromRcs, evalPoly, factorial, gamma, getDayOfYear, getDegLat, getDegLon, getRadLat, getRadLon, halfPi, isLeapYear, jacobian, jday, linearDistance, linearInterpolate, lla2ecef, lla2eci, lla2sez, llaRad2ecef, log10, mag2db, masec2rad, matchHalfPlane, mean, msec2sec, newtonM, newtonNu, normalizeAngle, observationDerivative, observationNoiseFromSigmas, parseCenterBody, rad2deg, radecToPosition, radecToVelocity, rae2ecef, rae2eci, rae2enu, rae2raeOffBoresight, rae2ruv, rae2sez, relativeVelocity, rv2tle, scaleAndClampRicSigmas, sec2day, sec2deg, sec2min, sech, secondsPerDay, secondsPerSiderealDay, secondsPerWeek, sez2rae, sign, spaceObjType2Str, std, temp4, toPrecision, ttasec2rad, uv2azel, wattsToDbw, wrapAngle, x2o3 };
package/dist/main.d.ts CHANGED
@@ -10420,6 +10420,51 @@ declare const normalizeAngle: (a: number, b: number) => number;
10420
10420
  declare const observationDerivative: (xh: number, xl: number, step: number, isAngle?: boolean) => number;
10421
10421
  declare const observationNoiseFromSigmas: (sigmas: number[]) => Matrix;
10422
10422
 
10423
+ /**
10424
+ * @author Theodore Kruczek
10425
+ * @license AGPL-3.0-or-later
10426
+ * @copyright (c) 2025-2026 Kruczek Labs LLC
10427
+ *
10428
+ * Orbital Object ToolKit is free software: you can redistribute it and/or modify it under the
10429
+ * terms of the GNU Affero General Public License as published by the Free Software
10430
+ * Foundation, either version 3 of the License, or (at your option) any later version.
10431
+ *
10432
+ * Orbital Object ToolKit is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
10433
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
10434
+ * See the GNU Affero General Public License for more details.
10435
+ *
10436
+ * You should have received a copy of the GNU Affero General Public License along with
10437
+ * Orbital Object ToolKit. If not, see <http://www.gnu.org/licenses/>.
10438
+ */
10439
+
10440
+ declare class ObservationOptical extends Observation {
10441
+ private readonly site_;
10442
+ observation: RadecTopocentric;
10443
+ private readonly noise_;
10444
+ constructor(site_: J2000, observation: RadecTopocentric, noise_?: Matrix);
10445
+ get site(): J2000;
10446
+ get noise(): Matrix;
10447
+ /**
10448
+ * Default noise matrix _(right-ascension, declination)_.
10449
+ * Based on the Maui Optical Site noise model.
10450
+ */
10451
+ static readonly defaultNoise: Matrix;
10452
+ get epoch(): EpochUTC;
10453
+ toVector(): Vector;
10454
+ clos(propagator: Propagator): number;
10455
+ ricDiff(propagator: Propagator): Vector3D;
10456
+ sample(random: RandomGaussianSource, sigma?: number): Observation;
10457
+ jacobian(propPairs: PropagatorPairs): Matrix;
10458
+ residual(propagator: Propagator): Matrix;
10459
+ /**
10460
+ * Create a noise matrix from right ascension and declination standard deviantions.
10461
+ * @param raSigma Right ascension standard deviation
10462
+ * @param decSigma Declination standard deviation
10463
+ * @returns Noise matrix
10464
+ */
10465
+ static noiseFromSigmas(raSigma: Radians, decSigma: Radians): Matrix;
10466
+ }
10467
+
10423
10468
  /**
10424
10469
  * @author Theodore Kruczek
10425
10470
  * @description Orbital Object ToolKit (ootk) is a collection of tools for working
@@ -11555,51 +11600,6 @@ declare class GibbsIOD {
11555
11600
  solve(r1: Vector3D<Kilometers>, r2: Vector3D<Kilometers>, r3: Vector3D<Kilometers>, t2: EpochUTC, t3: EpochUTC): J2000;
11556
11601
  }
11557
11602
 
11558
- /**
11559
- * @author Theodore Kruczek
11560
- * @license AGPL-3.0-or-later
11561
- * @copyright (c) 2025-2026 Kruczek Labs LLC
11562
- *
11563
- * Orbital Object ToolKit is free software: you can redistribute it and/or modify it under the
11564
- * terms of the GNU Affero General Public License as published by the Free Software
11565
- * Foundation, either version 3 of the License, or (at your option) any later version.
11566
- *
11567
- * Orbital Object ToolKit is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
11568
- * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
11569
- * See the GNU Affero General Public License for more details.
11570
- *
11571
- * You should have received a copy of the GNU Affero General Public License along with
11572
- * Orbital Object ToolKit. If not, see <http://www.gnu.org/licenses/>.
11573
- */
11574
-
11575
- declare class ObservationOptical extends Observation {
11576
- private readonly site_;
11577
- observation: RadecTopocentric;
11578
- private readonly noise_;
11579
- constructor(site_: J2000, observation: RadecTopocentric, noise_?: Matrix);
11580
- get site(): J2000;
11581
- get noise(): Matrix;
11582
- /**
11583
- * Default noise matrix _(right-ascension, declination)_.
11584
- * Based on the Maui Optical Site noise model.
11585
- */
11586
- static readonly defaultNoise: Matrix;
11587
- get epoch(): EpochUTC;
11588
- toVector(): Vector;
11589
- clos(propagator: Propagator): number;
11590
- ricDiff(propagator: Propagator): Vector3D;
11591
- sample(random: RandomGaussianSource, sigma?: number): Observation;
11592
- jacobian(propPairs: PropagatorPairs): Matrix;
11593
- residual(propagator: Propagator): Matrix;
11594
- /**
11595
- * Create a noise matrix from right ascension and declination standard deviantions.
11596
- * @param raSigma Right ascension standard deviation
11597
- * @param decSigma Declination standard deviation
11598
- * @returns Noise matrix
11599
- */
11600
- static noiseFromSigmas(raSigma: Radians, decSigma: Radians): Matrix;
11601
- }
11602
-
11603
11603
  /**
11604
11604
  * @author Theodore Kruczek
11605
11605
  * @license AGPL-3.0-or-later
@@ -17214,6 +17214,19 @@ declare class LaunchTrajectoryGenerator {
17214
17214
  * @returns Launch azimuth in radians (from north, clockwise).
17215
17215
  */
17216
17216
  static computeLaunchAzimuth(incDeg: number, latDeg: number, direction: 'N' | 'S'): number;
17217
+ /**
17218
+ * Compute orbital inclination from a launch azimuth and launch site latitude.
17219
+ *
17220
+ * Inverse of {@link computeLaunchAzimuth}: from the spherical-triangle relation
17221
+ * `cos(i) = sin(azimuth) * cos(latitude)`. The result is the magnitude of the
17222
+ * inclination in degrees (always in [0, 180]); the launch direction (N/S) is
17223
+ * implied by the azimuth quadrant, not by this value.
17224
+ *
17225
+ * @param azimuthDeg Launch azimuth in degrees (from north, clockwise).
17226
+ * @param latDeg Launch site latitude in degrees.
17227
+ * @returns Orbital inclination in degrees, in [0, 180].
17228
+ */
17229
+ static computeInclinationFromAzimuth(azimuthDeg: number, latDeg: number): number;
17217
17230
  /**
17218
17231
  * Estimate ascent duration based on target insertion altitude.
17219
17232
  * Loosely calibrated: ~480s for 200km, ~540s for 400km, ~600s for 800km.
@@ -17606,4 +17619,4 @@ declare class RepeatGroundTrack {
17606
17619
  private static gcd_;
17607
17620
  }
17608
17621
 
17609
- export { AccessCalculator, type AccessConstraints, AccessWindow, AngularDiameterMethod, AngularDistanceMethod, Antenna, type AntennaParams, AtmosphericDrag, type AzEl, BaseObject, type BaseObjectParams, BatchLeastSquaresOD, BatchLeastSquaresResult, Beacon, type BeaconParams, type BoresightFrame, BoxMuller, type CatalogObject, CatalogScreener, type CatalogScreeningOptions, CatalogSource, type CdmExportOptions, CdmExporter, type CdmHeader, type CdmManeuverableStatus, type CdmObjectData, type CdmObjectMetadata, type CdmObjectType, CdmParser, type CdmRelativeData, CelestialBody, type CelestialBodyParams, CelestialBodyType, CenterBody, CenterBodyMu, ChebyshevCoefficients, ChebyshevCompressor, ChebyshevInterpolator, ClassicalElements, type ClassicalElementsParams, CommDeviceType, CommLink, type CommPlatform, CommunicationDevice, type CommunicationDeviceInterface, type CommunicationDeviceParams, ConjunctionAssessment, type ConjunctionAssessmentOptions, ConjunctionEvent, type ConjunctionSpaceObjectInput, type ConsistencyRatioResult, ConstellationGenerator, ContactScheduler, ContactSelectionStrategy, CovarianceFrame, CovarianceRealism, type CovarianceRealismResult, CovarianceSample, type CoverageStatistics, CubicSpline, CubicSplineInterpolator, DEFAULT_INTERPOLATOR, DEFAULT_LAGRANGE_ORDER, DEG2RAD, DataHandler, type Days, type Dbm, type Dbw, type Decibels, type Degrees, type DegreesPerDay, type DegreesPerSecond, type DifferentiableFunction, DormandPrince54Propagator, DownhillSimplex, DynamicGroundObject, type DynamicGroundObjectParams, Earth, EarthGravity, type EcefVec3, type EigenvalueAnalysisResult, type ElevationMask, type EnuVec3, EphemerisBody, type EphemerisBodyParams, type EphemerisDataPoint, type EphemerisInterpolationType, EphemerisSatellite, type EphemerisSatelliteParams, Epoch, EpochGPS, EpochTAI, EpochTDB, EpochTT, EpochUTC, EpochWindow, EquinoctialElements, type EquinoctialElementsParams, EulerAngles, FieldInterpolator, FieldOfView, type FieldOfViewParams, type FindNearestOptions, Force, ForceModel, FormatTle, type FovBoundaryPoint, FovFrame, FovShape, type GcrfVec3, Geodetic, GibbsIOD, GoldenSection, GoodingIOD, Gravity, type GreenwichMeanSiderealTime, type GroundInterpolationMethod, GroundObject, type GroundObjectParams, type GroundPositionParams, GroundStation, type GroundStationParams, type GroundTrackPoint, HerrickGibbsIOD, type Hertz, Hill, type HistoricalState, History, type HistoryConfig, type HistoryEntry, type HorizonsEphemerisData, type HorizonsObserverResult, HorizonsParser, type HorizonsVectorResult, type Hours, ITRF, Interpolator, InterpolatorType, type ItrfVec3, J2000, type J2000Vec3, type JacobianFunction, Jupiter, KM_PER_AU, KeplerPropagator, type Kilometers, type KilometersPerSecond, LagrangeInterpolator, LambertIOD, LandObject, LaserRangingSensor, type LaserRangingSensorParams, type LaunchDetails, type LaunchTrajectoryConfig, LaunchTrajectoryGenerator, LevenbergMarquardtOD, LevenbergMarquardtResult, type LibrationData, type Line1Data, type Line2Data, type LinkBudget, type LlaVec3, type Lookangle, MILLISECONDS_PER_DAY, MILLISECONDS_PER_SECOND, MILLISECONDS_TO_DAYS, MINUTES_PER_DAY, MS_PER_DAY, type MahalanobisResult, Marker, Mars, Matrix, MechanicalRadar, type MechanicalRadarParams, Mercury, type Meters, type MetersPerSecond, type Milliseconds, type Minutes, ModifiedGoodingIOD, ModulationType, Moon, MoonBody, type MoonPhaseInfo, type MoonTimes, Neptune, type NumericalPropagatorOptions, type NutationAngles, type OdmExportOptions, OdmExporter, type OemCovarianceMatrix, type OemDataBlock, type OemExportOptions, type OemFromStateVectorsOptions, type OemHeader, type OemMetadata, OemParser, type OmmCovarianceMatrix, type OmmDataFormat, type OmmExportOptions, type OmmHeader, type OmmMeanElements, type OmmMetadata, type OmmParsedDataFormat, OmmParser, type OmmSpacecraftParameters, type OmmTleParameters, type OmmUserDefined, OotkError, type OperationsDetails, type OpmExportOptions, OpticalSensor, type OpticalSensorParams, type OptionsParams, OrbitDeterminationError, OrbitFinder, type OrbitFinderOptions, type OrbitParameters, OrbitRegime, type OrbitTrackPoint, type OrbitalShell, PI, ParseError, type ParsedCdm, type ParsedOem, type ParsedOmm, PassType, PassiveRFSensor, type PassiveRFSensorParams, PayloadStatus, PhasedArrayRadar, type PhasedArrayRadarParams, PlaneChangeBurn, PlanetBody, Pluto, PolynomialRegression, type PosVel, type PositionVelocity, type PrecessionAngles, ProbabilityOfCollision, PropagationError, Propagator, PropagatorType, Quaternion, RAD2DEG, RADIUS_OF_EARTH, RAE, RCS_VMAG_ESTIMATE_MAX, RCS_VMAG_ESTIMATE_MIN, RIC, type RaDec, RadarSensor, type RadarSensorParams, RadecGeocentric, RadecTopocentric, type Radians, type RadiansPerSecond, type RaeVec3, Random, RandomGaussianSource, type RcsShape, Receiver, type ReceiverParams, type ReferenceFrame, RelativeState, type RelayLinkBudget, RepeatGroundTrack, type RepeatGroundTrackOptions, type RepeatOrbitResult, type RfVec3, type RicSigmas, type RiseSetTimes, RkCheckpoint, RkResult, RungeKutta4Propagator, RungeKutta89Propagator, RungeKuttaAdaptive, type RuvVec3, type Rv2TleOptions, type Rv2TleResult, type RvVector, SLR_WAVELENGTHS, SPEED_OF_LIGHT_KM_S, type SatNumKind, Satellite, type SatelliteCoverageStats, type SatelliteParams, type SatelliteRecord, Saturn, type ScaleFactorResult, type ScheduleOptions, ScheduledContact, type ScheduledContactParams, ScreeningFilter, type ScreeningResult, type Seconds, type SecondsPerMeterPerSecond, SegmentedLagrangeInterpolator, Sensor, type SensorInterface, type SensorParams, type SensorPlatform, SensorType, type SerializedAntenna, type SerializedCommDevice, type SerializedObject, type SerializedSensor, type SezVec3, Sgp4, Sgp4Error, Sgp4ErrorCode, Sgp4OpsMode, Sgp4Propagator, type Sgp4Result, SimpleLinearRegression, SolarRadiationPressure, SolarSystem, type SpaceCraftDetails, SpaceObject, type SpaceObjectParams, SpaceObjectType, Star, type StarObjectParams, StateCovariance, StateInterpolator, StateVector, type StateVectorSgp4, type StationCoverageStats, type StringifiedNumber, Sun, SunBody, SunStatus, type SunTime, TAU, TEME, type TemeVec3, ThirdBodyGravity, Thrust, TimeStamped, type TimeWindow, Tle, type TleData, type TleDataFull, type TleLine1, type TleLine2, type TleParams, Transmitter, type TransmitterParams, Transponder, type TransponderParams, TwoBurnOrbitTransfer, Uranus, ValidationError, type Vec3, type Vec3Flat, Vector, Vector3D, Venus, VerletBlendInterpolator, VisualizationHelpers, type Watts, Waypoint, type WaypointData, ZoomValue, acoth, acsch, angularDiameter, angularDistance, angularVelocityOfEarth, array2d, asec2rad, asech, azel2uv, bodyTypeLookup, boresightFrameFromAzElRoll, cKmPerMs, cKmPerSec, cMPerSec, calcGmst, calcIncFromAz, calcInertAz, calculateFspl, calculatePropagationDelay, cappedScreeningCovarianceFromTle, clamp, concat, copySign, covariance, createCovarianceFromTle, createSampleCovarianceFromTle, createVec, csch, dbmToDbw, dbwToDbm, dbwToWatts, deg2rad, derivative, dopplerFactor, earthGravityParam, ecef2eci, ecef2enu, ecef2rae, ecefRad2rae, eci2ecef, eci2lla, eci2rae, enu2rf, estimateRcs, estimateVmagFromRcs, evalPoly, factorial, gamma, getDayOfYear, getDegLat, getDegLon, getRadLat, getRadLon, halfPi, isLeapYear, jacobian, jday, linearDistance, linearInterpolate, lla2ecef, lla2eci, lla2sez, llaRad2ecef, log10, mag2db, masec2rad, matchHalfPlane, mean, msec2sec, newtonM, newtonNu, normalizeAngle, observationDerivative, observationNoiseFromSigmas, parseCenterBody, rad2deg, radecToPosition, radecToVelocity, rae2ecef, rae2eci, rae2enu, rae2raeOffBoresight, rae2ruv, rae2sez, relativeVelocity, rv2tle, scaleAndClampRicSigmas, sec2day, sec2deg, sec2min, sech, secondsPerDay, secondsPerSiderealDay, secondsPerWeek, sez2rae, sign, spaceObjType2Str, std, temp4, toPrecision, ttasec2rad, uv2azel, wattsToDbw, wrapAngle, x2o3 };
17622
+ export { AccessCalculator, type AccessConstraints, AccessWindow, AngularDiameterMethod, AngularDistanceMethod, Antenna, type AntennaParams, AtmosphericDrag, type AzEl, BaseObject, type BaseObjectParams, BatchLeastSquaresOD, BatchLeastSquaresResult, Beacon, type BeaconParams, type BoresightFrame, BoxMuller, type CatalogObject, CatalogScreener, type CatalogScreeningOptions, CatalogSource, type CdmExportOptions, CdmExporter, type CdmHeader, type CdmManeuverableStatus, type CdmObjectData, type CdmObjectMetadata, type CdmObjectType, CdmParser, type CdmRelativeData, CelestialBody, type CelestialBodyParams, CelestialBodyType, CenterBody, CenterBodyMu, ChebyshevCoefficients, ChebyshevCompressor, ChebyshevInterpolator, ClassicalElements, type ClassicalElementsParams, CommDeviceType, CommLink, type CommPlatform, CommunicationDevice, type CommunicationDeviceInterface, type CommunicationDeviceParams, ConjunctionAssessment, type ConjunctionAssessmentOptions, ConjunctionEvent, type ConjunctionSpaceObjectInput, type ConsistencyRatioResult, ConstellationGenerator, ContactScheduler, ContactSelectionStrategy, CovarianceFrame, CovarianceRealism, type CovarianceRealismResult, CovarianceSample, type CoverageStatistics, CubicSpline, CubicSplineInterpolator, DEFAULT_INTERPOLATOR, DEFAULT_LAGRANGE_ORDER, DEG2RAD, DataHandler, type Days, type Dbm, type Dbw, type Decibels, type Degrees, type DegreesPerDay, type DegreesPerSecond, type DifferentiableFunction, DormandPrince54Propagator, DownhillSimplex, DynamicGroundObject, type DynamicGroundObjectParams, Earth, EarthGravity, type EcefVec3, type EigenvalueAnalysisResult, type ElevationMask, type EnuVec3, EphemerisBody, type EphemerisBodyParams, type EphemerisDataPoint, type EphemerisInterpolationType, EphemerisSatellite, type EphemerisSatelliteParams, Epoch, EpochGPS, EpochTAI, EpochTDB, EpochTT, EpochUTC, EpochWindow, EquinoctialElements, type EquinoctialElementsParams, EulerAngles, FieldInterpolator, FieldOfView, type FieldOfViewParams, type FindNearestOptions, Force, ForceModel, FormatTle, type FovBoundaryPoint, FovFrame, FovShape, type GcrfVec3, Geodetic, GibbsIOD, GoldenSection, GoodingIOD, Gravity, type GreenwichMeanSiderealTime, type GroundInterpolationMethod, GroundObject, type GroundObjectParams, type GroundPositionParams, GroundStation, type GroundStationParams, type GroundTrackPoint, HerrickGibbsIOD, type Hertz, Hill, type HistoricalState, History, type HistoryConfig, type HistoryEntry, type HorizonsEphemerisData, type HorizonsObserverResult, HorizonsParser, type HorizonsVectorResult, type Hours, ITRF, Interpolator, InterpolatorType, type ItrfVec3, J2000, type J2000Vec3, type JacobianFunction, Jupiter, KM_PER_AU, KeplerPropagator, type Kilometers, type KilometersPerSecond, LagrangeInterpolator, LambertIOD, LandObject, LaserRangingSensor, type LaserRangingSensorParams, type LaunchDetails, type LaunchTrajectoryConfig, LaunchTrajectoryGenerator, LevenbergMarquardtOD, LevenbergMarquardtResult, type LibrationData, type Line1Data, type Line2Data, type LinkBudget, type LlaVec3, type Lookangle, MILLISECONDS_PER_DAY, MILLISECONDS_PER_SECOND, MILLISECONDS_TO_DAYS, MINUTES_PER_DAY, MS_PER_DAY, type MahalanobisResult, Marker, Mars, Matrix, MechanicalRadar, type MechanicalRadarParams, Mercury, type Meters, type MetersPerSecond, type Milliseconds, type Minutes, ModifiedGoodingIOD, ModulationType, Moon, MoonBody, type MoonPhaseInfo, type MoonTimes, Neptune, type NumericalPropagatorOptions, type NutationAngles, Observation, ObservationOptical, ObservationRadar, type OdmExportOptions, OdmExporter, type OemCovarianceMatrix, type OemDataBlock, type OemExportOptions, type OemFromStateVectorsOptions, type OemHeader, type OemMetadata, OemParser, type OmmCovarianceMatrix, type OmmDataFormat, type OmmExportOptions, type OmmHeader, type OmmMeanElements, type OmmMetadata, type OmmParsedDataFormat, OmmParser, type OmmSpacecraftParameters, type OmmTleParameters, type OmmUserDefined, OotkError, type OperationsDetails, type OpmExportOptions, OpticalSensor, type OpticalSensorParams, type OptionsParams, OrbitDeterminationError, OrbitFinder, type OrbitFinderOptions, type OrbitParameters, OrbitRegime, type OrbitTrackPoint, type OrbitalShell, PI, ParseError, type ParsedCdm, type ParsedOem, type ParsedOmm, PassType, PassiveRFSensor, type PassiveRFSensorParams, PayloadStatus, PhasedArrayRadar, type PhasedArrayRadarParams, PlaneChangeBurn, PlanetBody, Pluto, PolynomialRegression, type PosVel, type PositionVelocity, type PrecessionAngles, ProbabilityOfCollision, PropagationError, Propagator, PropagatorType, Quaternion, RAD2DEG, RADIUS_OF_EARTH, RAE, RCS_VMAG_ESTIMATE_MAX, RCS_VMAG_ESTIMATE_MIN, RIC, type RaDec, RadarSensor, type RadarSensorParams, RadecGeocentric, RadecTopocentric, type Radians, type RadiansPerSecond, type RaeVec3, Random, RandomGaussianSource, type RcsShape, Receiver, type ReceiverParams, type ReferenceFrame, RelativeState, type RelayLinkBudget, RepeatGroundTrack, type RepeatGroundTrackOptions, type RepeatOrbitResult, type RfVec3, type RicSigmas, type RiseSetTimes, RkCheckpoint, RkResult, RungeKutta4Propagator, RungeKutta89Propagator, RungeKuttaAdaptive, type RuvVec3, type Rv2TleOptions, type Rv2TleResult, type RvVector, SLR_WAVELENGTHS, SPEED_OF_LIGHT_KM_S, type SatNumKind, Satellite, type SatelliteCoverageStats, type SatelliteParams, type SatelliteRecord, Saturn, type ScaleFactorResult, type ScheduleOptions, ScheduledContact, type ScheduledContactParams, ScreeningFilter, type ScreeningResult, type Seconds, type SecondsPerMeterPerSecond, SegmentedLagrangeInterpolator, Sensor, type SensorInterface, type SensorParams, type SensorPlatform, SensorType, type SerializedAntenna, type SerializedCommDevice, type SerializedObject, type SerializedSensor, type SezVec3, Sgp4, Sgp4Error, Sgp4ErrorCode, Sgp4OpsMode, Sgp4Propagator, type Sgp4Result, SimpleLinearRegression, SolarRadiationPressure, SolarSystem, type SpaceCraftDetails, SpaceObject, type SpaceObjectParams, SpaceObjectType, Star, type StarObjectParams, StateCovariance, StateInterpolator, StateVector, type StateVectorSgp4, type StationCoverageStats, type StringifiedNumber, Sun, SunBody, SunStatus, type SunTime, TAU, TEME, type TemeVec3, ThirdBodyGravity, Thrust, TimeStamped, type TimeWindow, Tle, type TleData, type TleDataFull, type TleLine1, type TleLine2, type TleParams, Transmitter, type TransmitterParams, Transponder, type TransponderParams, TwoBurnOrbitTransfer, Uranus, ValidationError, type Vec3, type Vec3Flat, Vector, Vector3D, Venus, VerletBlendInterpolator, VisualizationHelpers, type Watts, Waypoint, type WaypointData, ZoomValue, acoth, acsch, angularDiameter, angularDistance, angularVelocityOfEarth, array2d, asec2rad, asech, azel2uv, bodyTypeLookup, boresightFrameFromAzElRoll, cKmPerMs, cKmPerSec, cMPerSec, calcGmst, calcIncFromAz, calcInertAz, calculateFspl, calculatePropagationDelay, cappedScreeningCovarianceFromTle, clamp, concat, copySign, covariance, createCovarianceFromTle, createSampleCovarianceFromTle, createVec, csch, dbmToDbw, dbwToDbm, dbwToWatts, deg2rad, derivative, dopplerFactor, earthGravityParam, ecef2eci, ecef2enu, ecef2rae, ecefRad2rae, eci2ecef, eci2lla, eci2rae, enu2rf, estimateRcs, estimateVmagFromRcs, evalPoly, factorial, gamma, getDayOfYear, getDegLat, getDegLon, getRadLat, getRadLon, halfPi, isLeapYear, jacobian, jday, linearDistance, linearInterpolate, lla2ecef, lla2eci, lla2sez, llaRad2ecef, log10, mag2db, masec2rad, matchHalfPlane, mean, msec2sec, newtonM, newtonNu, normalizeAngle, observationDerivative, observationNoiseFromSigmas, parseCenterBody, rad2deg, radecToPosition, radecToVelocity, rae2ecef, rae2eci, rae2enu, rae2raeOffBoresight, rae2ruv, rae2sez, relativeVelocity, rv2tle, scaleAndClampRicSigmas, sec2day, sec2deg, sec2min, sech, secondsPerDay, secondsPerSiderealDay, secondsPerWeek, sez2rae, sign, spaceObjType2Str, std, temp4, toPrecision, ttasec2rad, uv2azel, wattsToDbw, wrapAngle, x2o3 };
package/dist/main.js CHANGED
@@ -19305,6 +19305,206 @@ var observationNoiseFromSigmas = (sigmas) => {
19305
19305
  return new Matrix(result);
19306
19306
  };
19307
19307
 
19308
+ // src/observation/Observation.ts
19309
+ var Observation = class {
19310
+ /**
19311
+ * Convert this observation's noise matrix into a covariance matrix.
19312
+ * @returns A matrix representing the noise covariance.
19313
+ */
19314
+ noiseCovariance() {
19315
+ return this.noise.reciprocal();
19316
+ }
19317
+ /**
19318
+ * Generates a noise sample from the noise covariance matrix.
19319
+ * @param sigma - The scaling factor for the noise covariance matrix.
19320
+ * @returns A matrix representing the noise sample.
19321
+ */
19322
+ noiseSample_(sigma) {
19323
+ return this.noiseCovariance().scale(sigma).cholesky();
19324
+ }
19325
+ /**
19326
+ * Randomly sample this observation in vector form within the
19327
+ * observation noise.
19328
+ * @param random Random number generator.
19329
+ * @param sigma Sigma value to scale the noise by.
19330
+ * @returns Sampled observation.
19331
+ */
19332
+ sampleVector(random, sigma) {
19333
+ const chol = this.noiseSample_(sigma);
19334
+ const gauss = random.gaussVector(this.noise.columns);
19335
+ const meas = this.toVector();
19336
+ return meas.add(chol.multiplyVector(gauss));
19337
+ }
19338
+ };
19339
+
19340
+ // src/observation/ObservationOptical.ts
19341
+ var ObservationOptical = class _ObservationOptical extends Observation {
19342
+ // / Create a new [ObservationOptical] object.
19343
+ constructor(site_, observation, noise_ = _ObservationOptical.defaultNoise) {
19344
+ super();
19345
+ this.site_ = site_;
19346
+ this.observation = observation;
19347
+ this.noise_ = noise_;
19348
+ }
19349
+ // / Inertial site location.
19350
+ get site() {
19351
+ return this.site_;
19352
+ }
19353
+ // / Noise matrix.
19354
+ get noise() {
19355
+ return this.noise_;
19356
+ }
19357
+ /**
19358
+ * Default noise matrix _(right-ascension, declination)_.
19359
+ * Based on the Maui Optical Site noise model.
19360
+ */
19361
+ static defaultNoise = _ObservationOptical.noiseFromSigmas(
19362
+ 37e-4 * DEG2RAD,
19363
+ 3e-3 * DEG2RAD
19364
+ );
19365
+ get epoch() {
19366
+ return this.observation.epoch;
19367
+ }
19368
+ toVector() {
19369
+ return Vector.fromList([this.observation.rightAscension, this.observation.declination]);
19370
+ }
19371
+ clos(propagator) {
19372
+ const position = propagator.propagate(this.epoch).position;
19373
+ const offset = position.subtract(this.site.position);
19374
+ const actual = this.observation.lineOfSight().normalize();
19375
+ const expected = offset.normalize();
19376
+ const slantRange = offset.magnitude();
19377
+ const theta = actual.angle(expected);
19378
+ if (isNaN(theta)) {
19379
+ return 0;
19380
+ }
19381
+ return 2 * slantRange * Math.sin(theta * 0.5);
19382
+ }
19383
+ ricDiff(propagator) {
19384
+ const r0 = this.site;
19385
+ const r1 = propagator.propagate(this.epoch);
19386
+ const r2 = this.observation.position(this.site, r1.position.distance(r0.position));
19387
+ return RIC.fromJ2000(new J20002(this.epoch, r2, Vector3D.origin), r1).position;
19388
+ }
19389
+ sample(random, sigma = 1) {
19390
+ const resultEl = this.sampleVector(random, sigma).elements;
19391
+ return new _ObservationOptical(
19392
+ this.site,
19393
+ new RadecTopocentric(this.epoch, resultEl[0], resultEl[1]),
19394
+ this.noise
19395
+ );
19396
+ }
19397
+ jacobian(propPairs) {
19398
+ const result = array2d(2, 6, 0);
19399
+ for (let i = 0; i < 6; i++) {
19400
+ const step = propPairs.step(i);
19401
+ const [high, low] = propPairs.get(i);
19402
+ const sl = low.propagate(this.epoch);
19403
+ const sh = high.propagate(this.epoch);
19404
+ const ol = RadecTopocentric.fromStateVector(sl, this.site);
19405
+ const oh = RadecTopocentric.fromStateVector(sh, this.site);
19406
+ result[0][i] = observationDerivative(oh.rightAscension, ol.rightAscension, step, true);
19407
+ result[1][i] = observationDerivative(oh.declination, ol.declination, step, true);
19408
+ }
19409
+ return new Matrix(result);
19410
+ }
19411
+ residual(propagator) {
19412
+ const result = array2d(2, 1, 0);
19413
+ const state = propagator.propagate(this.epoch);
19414
+ const radec = RadecTopocentric.fromStateVector(state, this.site);
19415
+ result[0][0] = normalizeAngle(this.observation.rightAscension, radec.rightAscension);
19416
+ result[1][0] = normalizeAngle(this.observation.declination, radec.declination);
19417
+ return new Matrix(result);
19418
+ }
19419
+ /**
19420
+ * Create a noise matrix from right ascension and declination standard deviantions.
19421
+ * @param raSigma Right ascension standard deviation
19422
+ * @param decSigma Declination standard deviation
19423
+ * @returns Noise matrix
19424
+ */
19425
+ static noiseFromSigmas(raSigma, decSigma) {
19426
+ return observationNoiseFromSigmas([raSigma, decSigma]);
19427
+ }
19428
+ };
19429
+
19430
+ // src/observation/ObservationRadar.ts
19431
+ var ObservationRadar = class _ObservationRadar extends Observation {
19432
+ // / Create a new [ObservationRadar] object.
19433
+ constructor(site_, observation, noise_ = _ObservationRadar.defaultNoise) {
19434
+ super();
19435
+ this.site_ = site_;
19436
+ this.observation = observation;
19437
+ this.noise_ = noise_;
19438
+ }
19439
+ // / Default noise matrix.
19440
+ static defaultNoise = _ObservationRadar.noiseFromSigmas(0.32, 0.015 * DEG2RAD, 0.015 * DEG2RAD);
19441
+ get epoch() {
19442
+ return this.observation.epoch;
19443
+ }
19444
+ get site() {
19445
+ return this.site_;
19446
+ }
19447
+ get noise() {
19448
+ return this.noise_;
19449
+ }
19450
+ toVector() {
19451
+ return Vector.fromList([this.observation.rng, this.observation.azRad, this.observation.elRad]);
19452
+ }
19453
+ clos(propagator) {
19454
+ const ri = propagator.propagate(this.epoch).position.subtract(this.site.position);
19455
+ return Math.abs(this.observation.rng - ri.magnitude());
19456
+ }
19457
+ ricDiff(propagator) {
19458
+ const r0 = propagator.propagate(this.epoch);
19459
+ const r1 = RAE.fromStateVector(r0, this.site);
19460
+ const r2 = this.observation.position(this.site, r1.azRad, r1.elRad);
19461
+ return RIC.fromJ2000(new J20002(this.epoch, r2, Vector3D.origin), r0).position;
19462
+ }
19463
+ sample(random, sigma = 1) {
19464
+ const result = this.sampleVector(random, sigma).elements;
19465
+ return new _ObservationRadar(
19466
+ this.site,
19467
+ new RAE(this.observation.epoch, result[0], result[1], result[2]),
19468
+ this.noise
19469
+ );
19470
+ }
19471
+ jacobian(propPairs) {
19472
+ const result = array2d(3, 6, 0);
19473
+ for (let i = 0; i < 6; i++) {
19474
+ const step = propPairs.step(i);
19475
+ const [high, low] = propPairs.get(i);
19476
+ const sl = low.propagate(this.epoch);
19477
+ const sh = high.propagate(this.epoch);
19478
+ const ol = RAE.fromStateVector(sl, this.site);
19479
+ const oh = RAE.fromStateVector(sh, this.site);
19480
+ result[0][i] = observationDerivative(oh.rng, ol.rng, step);
19481
+ result[1][i] = observationDerivative(oh.azRad, ol.azRad, step, true);
19482
+ result[2][i] = observationDerivative(oh.elRad, ol.elRad, step, true);
19483
+ }
19484
+ return new Matrix(result);
19485
+ }
19486
+ residual(propagator) {
19487
+ const result = array2d(3, 1, 0);
19488
+ const state = propagator.propagate(this.epoch);
19489
+ const razel = RAE.fromStateVector(state, this.site);
19490
+ result[0][0] = this.observation.rng - razel.rng;
19491
+ result[1][0] = normalizeAngle(this.observation.azRad, razel.azRad);
19492
+ result[2][0] = normalizeAngle(this.observation.elRad, razel.elRad);
19493
+ return new Matrix(result);
19494
+ }
19495
+ /**
19496
+ * Create a noise matrix from the range, azimuth, and elevation standard
19497
+ * deviations _(kilometers/radians)_.
19498
+ * @param rngSigma - The range standard deviation _(kilometers)_.
19499
+ * @param azSigma - The azimuth standard deviation _(radians)_.
19500
+ * @param elSigma - The elevation standard deviation _(radians)_.
19501
+ * @returns The noise matrix.
19502
+ */
19503
+ static noiseFromSigmas(rngSigma, azSigma, elSigma) {
19504
+ return observationNoiseFromSigmas([rngSigma, azSigma, elSigma]);
19505
+ }
19506
+ };
19507
+
19308
19508
  // src/observation/RadecGeocentric.ts
19309
19509
  var RadecGeocentric = class _RadecGeocentric {
19310
19510
  constructor(epoch, rightAscension, declination, range, rightAscensionRate, declinationRate, rangeRate) {
@@ -23456,116 +23656,6 @@ var Sensor = class _Sensor {
23456
23656
  }
23457
23657
  };
23458
23658
 
23459
- // src/observation/Observation.ts
23460
- var Observation = class {
23461
- /**
23462
- * Convert this observation's noise matrix into a covariance matrix.
23463
- * @returns A matrix representing the noise covariance.
23464
- */
23465
- noiseCovariance() {
23466
- return this.noise.reciprocal();
23467
- }
23468
- /**
23469
- * Generates a noise sample from the noise covariance matrix.
23470
- * @param sigma - The scaling factor for the noise covariance matrix.
23471
- * @returns A matrix representing the noise sample.
23472
- */
23473
- noiseSample_(sigma) {
23474
- return this.noiseCovariance().scale(sigma).cholesky();
23475
- }
23476
- /**
23477
- * Randomly sample this observation in vector form within the
23478
- * observation noise.
23479
- * @param random Random number generator.
23480
- * @param sigma Sigma value to scale the noise by.
23481
- * @returns Sampled observation.
23482
- */
23483
- sampleVector(random, sigma) {
23484
- const chol = this.noiseSample_(sigma);
23485
- const gauss = random.gaussVector(this.noise.columns);
23486
- const meas = this.toVector();
23487
- return meas.add(chol.multiplyVector(gauss));
23488
- }
23489
- };
23490
-
23491
- // src/observation/ObservationRadar.ts
23492
- var ObservationRadar = class _ObservationRadar extends Observation {
23493
- // / Create a new [ObservationRadar] object.
23494
- constructor(site_, observation, noise_ = _ObservationRadar.defaultNoise) {
23495
- super();
23496
- this.site_ = site_;
23497
- this.observation = observation;
23498
- this.noise_ = noise_;
23499
- }
23500
- // / Default noise matrix.
23501
- static defaultNoise = _ObservationRadar.noiseFromSigmas(0.32, 0.015 * DEG2RAD, 0.015 * DEG2RAD);
23502
- get epoch() {
23503
- return this.observation.epoch;
23504
- }
23505
- get site() {
23506
- return this.site_;
23507
- }
23508
- get noise() {
23509
- return this.noise_;
23510
- }
23511
- toVector() {
23512
- return Vector.fromList([this.observation.rng, this.observation.azRad, this.observation.elRad]);
23513
- }
23514
- clos(propagator) {
23515
- const ri = propagator.propagate(this.epoch).position.subtract(this.site.position);
23516
- return Math.abs(this.observation.rng - ri.magnitude());
23517
- }
23518
- ricDiff(propagator) {
23519
- const r0 = propagator.propagate(this.epoch);
23520
- const r1 = RAE.fromStateVector(r0, this.site);
23521
- const r2 = this.observation.position(this.site, r1.azRad, r1.elRad);
23522
- return RIC.fromJ2000(new J20002(this.epoch, r2, Vector3D.origin), r0).position;
23523
- }
23524
- sample(random, sigma = 1) {
23525
- const result = this.sampleVector(random, sigma).elements;
23526
- return new _ObservationRadar(
23527
- this.site,
23528
- new RAE(this.observation.epoch, result[0], result[1], result[2]),
23529
- this.noise
23530
- );
23531
- }
23532
- jacobian(propPairs) {
23533
- const result = array2d(3, 6, 0);
23534
- for (let i = 0; i < 6; i++) {
23535
- const step = propPairs.step(i);
23536
- const [high, low] = propPairs.get(i);
23537
- const sl = low.propagate(this.epoch);
23538
- const sh = high.propagate(this.epoch);
23539
- const ol = RAE.fromStateVector(sl, this.site);
23540
- const oh = RAE.fromStateVector(sh, this.site);
23541
- result[0][i] = observationDerivative(oh.rng, ol.rng, step);
23542
- result[1][i] = observationDerivative(oh.azRad, ol.azRad, step, true);
23543
- result[2][i] = observationDerivative(oh.elRad, ol.elRad, step, true);
23544
- }
23545
- return new Matrix(result);
23546
- }
23547
- residual(propagator) {
23548
- const result = array2d(3, 1, 0);
23549
- const state = propagator.propagate(this.epoch);
23550
- const razel = RAE.fromStateVector(state, this.site);
23551
- result[0][0] = this.observation.rng - razel.rng;
23552
- result[1][0] = normalizeAngle(this.observation.azRad, razel.azRad);
23553
- result[2][0] = normalizeAngle(this.observation.elRad, razel.elRad);
23554
- return new Matrix(result);
23555
- }
23556
- /**
23557
- * Create a noise matrix from the range, azimuth, and elevation standard
23558
- * deviations _(kilometers/radians)_.
23559
- * @param rngSigma - The range standard deviation _(kilometers)_.
23560
- * @param azSigma - The azimuth standard deviation _(radians)_.
23561
- * @param elSigma - The elevation standard deviation _(radians)_.
23562
- * @returns The noise matrix.
23563
- */
23564
- static noiseFromSigmas(rngSigma, azSigma, elSigma) {
23565
- return observationNoiseFromSigmas([rngSigma, azSigma, elSigma]);
23566
- }
23567
- };
23568
-
23569
23659
  // src/sensor/RadarSensor.ts
23570
23660
  var RadarSensor = class extends Sensor {
23571
23661
  /** Radar beamwidth in degrees */
@@ -23977,96 +24067,6 @@ var MechanicalRadar = class _MechanicalRadar extends RadarSensor {
23977
24067
  }
23978
24068
  };
23979
24069
 
23980
- // src/observation/ObservationOptical.ts
23981
- var ObservationOptical = class _ObservationOptical extends Observation {
23982
- // / Create a new [ObservationOptical] object.
23983
- constructor(site_, observation, noise_ = _ObservationOptical.defaultNoise) {
23984
- super();
23985
- this.site_ = site_;
23986
- this.observation = observation;
23987
- this.noise_ = noise_;
23988
- }
23989
- // / Inertial site location.
23990
- get site() {
23991
- return this.site_;
23992
- }
23993
- // / Noise matrix.
23994
- get noise() {
23995
- return this.noise_;
23996
- }
23997
- /**
23998
- * Default noise matrix _(right-ascension, declination)_.
23999
- * Based on the Maui Optical Site noise model.
24000
- */
24001
- static defaultNoise = _ObservationOptical.noiseFromSigmas(
24002
- 37e-4 * DEG2RAD,
24003
- 3e-3 * DEG2RAD
24004
- );
24005
- get epoch() {
24006
- return this.observation.epoch;
24007
- }
24008
- toVector() {
24009
- return Vector.fromList([this.observation.rightAscension, this.observation.declination]);
24010
- }
24011
- clos(propagator) {
24012
- const position = propagator.propagate(this.epoch).position;
24013
- const offset = position.subtract(this.site.position);
24014
- const actual = this.observation.lineOfSight().normalize();
24015
- const expected = offset.normalize();
24016
- const slantRange = offset.magnitude();
24017
- const theta = actual.angle(expected);
24018
- if (isNaN(theta)) {
24019
- return 0;
24020
- }
24021
- return 2 * slantRange * Math.sin(theta * 0.5);
24022
- }
24023
- ricDiff(propagator) {
24024
- const r0 = this.site;
24025
- const r1 = propagator.propagate(this.epoch);
24026
- const r2 = this.observation.position(this.site, r1.position.distance(r0.position));
24027
- return RIC.fromJ2000(new J20002(this.epoch, r2, Vector3D.origin), r1).position;
24028
- }
24029
- sample(random, sigma = 1) {
24030
- const resultEl = this.sampleVector(random, sigma).elements;
24031
- return new _ObservationOptical(
24032
- this.site,
24033
- new RadecTopocentric(this.epoch, resultEl[0], resultEl[1]),
24034
- this.noise
24035
- );
24036
- }
24037
- jacobian(propPairs) {
24038
- const result = array2d(2, 6, 0);
24039
- for (let i = 0; i < 6; i++) {
24040
- const step = propPairs.step(i);
24041
- const [high, low] = propPairs.get(i);
24042
- const sl = low.propagate(this.epoch);
24043
- const sh = high.propagate(this.epoch);
24044
- const ol = RadecTopocentric.fromStateVector(sl, this.site);
24045
- const oh = RadecTopocentric.fromStateVector(sh, this.site);
24046
- result[0][i] = observationDerivative(oh.rightAscension, ol.rightAscension, step, true);
24047
- result[1][i] = observationDerivative(oh.declination, ol.declination, step, true);
24048
- }
24049
- return new Matrix(result);
24050
- }
24051
- residual(propagator) {
24052
- const result = array2d(2, 1, 0);
24053
- const state = propagator.propagate(this.epoch);
24054
- const radec = RadecTopocentric.fromStateVector(state, this.site);
24055
- result[0][0] = normalizeAngle(this.observation.rightAscension, radec.rightAscension);
24056
- result[1][0] = normalizeAngle(this.observation.declination, radec.declination);
24057
- return new Matrix(result);
24058
- }
24059
- /**
24060
- * Create a noise matrix from right ascension and declination standard deviantions.
24061
- * @param raSigma Right ascension standard deviation
24062
- * @param decSigma Declination standard deviation
24063
- * @returns Noise matrix
24064
- */
24065
- static noiseFromSigmas(raSigma, decSigma) {
24066
- return observationNoiseFromSigmas([raSigma, decSigma]);
24067
- }
24068
- };
24069
-
24070
24070
  // src/sensor/OpticalSensor.ts
24071
24071
  var OpticalSensor = class _OpticalSensor extends Sensor {
24072
24072
  /** Telescope aperture in meters */
@@ -29221,6 +29221,24 @@ var LaunchTrajectoryGenerator = class _LaunchTrajectoryGenerator {
29221
29221
  }
29222
29222
  return azimuth;
29223
29223
  }
29224
+ /**
29225
+ * Compute orbital inclination from a launch azimuth and launch site latitude.
29226
+ *
29227
+ * Inverse of {@link computeLaunchAzimuth}: from the spherical-triangle relation
29228
+ * `cos(i) = sin(azimuth) * cos(latitude)`. The result is the magnitude of the
29229
+ * inclination in degrees (always in [0, 180]); the launch direction (N/S) is
29230
+ * implied by the azimuth quadrant, not by this value.
29231
+ *
29232
+ * @param azimuthDeg Launch azimuth in degrees (from north, clockwise).
29233
+ * @param latDeg Launch site latitude in degrees.
29234
+ * @returns Orbital inclination in degrees, in [0, 180].
29235
+ */
29236
+ static computeInclinationFromAzimuth(azimuthDeg, latDeg) {
29237
+ const az = azimuthDeg * DEG2RAD;
29238
+ const lat = latDeg * DEG2RAD;
29239
+ const cosInc = Math.max(-1, Math.min(1, Math.sin(az) * Math.cos(lat)));
29240
+ return Math.acos(cosInc) * RAD2DEG;
29241
+ }
29224
29242
  /**
29225
29243
  * Estimate ascent duration based on target insertion altitude.
29226
29244
  * Loosely calibrated: ~480s for 200km, ~540s for 400km, ~600s for 800km.
@@ -30362,4 +30380,4 @@ astronomy-engine/esm/astronomy.js:
30362
30380
  *)
30363
30381
  */
30364
30382
 
30365
- export { AccessCalculator, AngularDiameterMethod, AngularDistanceMethod, Antenna, AtmosphericDrag, BaseObject, BatchLeastSquaresOD, BatchLeastSquaresResult, Beacon, BoxMuller, CatalogScreener, CatalogSource, CdmExporter, CdmParser, CelestialBody, CelestialBodyType, CenterBody, CenterBodyMu, ChebyshevCoefficients, ChebyshevCompressor, ChebyshevInterpolator, ClassicalElements, CommDeviceType, CommLink, CommunicationDevice, ConjunctionAssessment, ConjunctionEvent, ConstellationGenerator, ContactScheduler, ContactSelectionStrategy, CovarianceFrame, CovarianceRealism, CovarianceSample, CubicSpline, CubicSplineInterpolator, DEFAULT_INTERPOLATOR, DEFAULT_LAGRANGE_ORDER, DEG2RAD, DataHandler, DormandPrince54Propagator, DownhillSimplex, DynamicGroundObject, Earth, EarthGravity, EphemerisBody, EphemerisSatellite, Epoch, EpochGPS, EpochTAI, EpochTDB, EpochTT, EpochUTC, EpochWindow, EquinoctialElements, EulerAngles, FieldInterpolator, FieldOfView, Force, ForceModel, FormatTle, FovFrame, FovShape, Geodetic, GibbsIOD, GoldenSection, GoodingIOD, Gravity, GroundObject, GroundStation, HerrickGibbsIOD, Hill, History, HorizonsParser, ITRF, Interpolator, InterpolatorType, J20002 as J2000, Jupiter, KM_PER_AU, KeplerPropagator, LagrangeInterpolator, LambertIOD, LandObject, LaserRangingSensor, LaunchTrajectoryGenerator, LevenbergMarquardtOD, LevenbergMarquardtResult, MILLISECONDS_PER_DAY, MILLISECONDS_PER_SECOND, MILLISECONDS_TO_DAYS, MINUTES_PER_DAY, MS_PER_DAY, Marker, Mars, Matrix, MechanicalRadar, Mercury, ModifiedGoodingIOD, ModulationType, Moon, MoonBody, Neptune, OdmExporter, OemParser, OmmParser, OotkError, OpticalSensor, OrbitDeterminationError, OrbitFinder, OrbitRegime, PI, ParseError, PassType, PassiveRFSensor, PayloadStatus, PhasedArrayRadar, PlaneChangeBurn, PlanetBody, Pluto, PolynomialRegression, ProbabilityOfCollision, PropagationError, Propagator, PropagatorType, Quaternion, RAD2DEG, RADIUS_OF_EARTH, RAE, RCS_VMAG_ESTIMATE_MAX, RCS_VMAG_ESTIMATE_MIN, RIC, RadarSensor, RadecGeocentric, RadecTopocentric, Random, RandomGaussianSource, Receiver, RelativeState, RepeatGroundTrack, RkCheckpoint, RkResult, RungeKutta4Propagator, RungeKutta89Propagator, RungeKuttaAdaptive, SLR_WAVELENGTHS, SPEED_OF_LIGHT_KM_S, Satellite, Saturn, ScheduledContact, ScreeningFilter, SegmentedLagrangeInterpolator, Sensor, SensorType, Sgp4, Sgp4Error, Sgp4ErrorCode, Sgp4OpsMode, Sgp4Propagator, SimpleLinearRegression, SolarRadiationPressure, SolarSystem, SpaceObject, SpaceObjectType, Star, StateCovariance, StateInterpolator, StateVector2 as StateVector, Sun, SunBody, SunStatus, TAU, TEME, ThirdBodyGravity, Thrust, TimeStamped, Tle, Transmitter, Transponder, TwoBurnOrbitTransfer, Uranus, ValidationError, Vector, Vector3D, Venus, VerletBlendInterpolator, VisualizationHelpers, Waypoint, ZoomValue, acoth, acsch, angularDiameter, angularDistance, angularVelocityOfEarth, array2d, asec2rad, asech, azel2uv, bodyTypeLookup, boresightFrameFromAzElRoll, cKmPerMs, cKmPerSec, cMPerSec, calcGmst, calcIncFromAz, calcInertAz, calculateFspl, calculatePropagationDelay, cappedScreeningCovarianceFromTle, clamp, concat, copySign, covariance, createCovarianceFromTle, createSampleCovarianceFromTle, createVec, csch, dbmToDbw, dbwToDbm, dbwToWatts, deg2rad, derivative, dopplerFactor, earthGravityParam, ecef2eci, ecef2enu, ecef2rae, ecefRad2rae, eci2ecef, eci2lla, eci2rae, enu2rf, estimateRcs, estimateVmagFromRcs, evalPoly, factorial, gamma, getDayOfYear, getDegLat, getDegLon, getRadLat, getRadLon, halfPi, isLeapYear, jacobian, jday, linearDistance, linearInterpolate, lla2ecef, lla2eci, lla2sez, llaRad2ecef, log10, mag2db, masec2rad, matchHalfPlane, mean, msec2sec, newtonM, newtonNu, normalizeAngle, observationDerivative, observationNoiseFromSigmas, parseCenterBody, rad2deg, radecToPosition, radecToVelocity, rae2ecef, rae2eci, rae2enu, rae2raeOffBoresight, rae2ruv, rae2sez, relativeVelocity, rv2tle, scaleAndClampRicSigmas, sec2day, sec2deg, sec2min, sech, secondsPerDay, secondsPerSiderealDay, secondsPerWeek, sez2rae, sign, spaceObjType2Str, std, temp4, toPrecision, ttasec2rad, uv2azel, wattsToDbw, wrapAngle, x2o3 };
30383
+ export { AccessCalculator, AngularDiameterMethod, AngularDistanceMethod, Antenna, AtmosphericDrag, BaseObject, BatchLeastSquaresOD, BatchLeastSquaresResult, Beacon, BoxMuller, CatalogScreener, CatalogSource, CdmExporter, CdmParser, CelestialBody, CelestialBodyType, CenterBody, CenterBodyMu, ChebyshevCoefficients, ChebyshevCompressor, ChebyshevInterpolator, ClassicalElements, CommDeviceType, CommLink, CommunicationDevice, ConjunctionAssessment, ConjunctionEvent, ConstellationGenerator, ContactScheduler, ContactSelectionStrategy, CovarianceFrame, CovarianceRealism, CovarianceSample, CubicSpline, CubicSplineInterpolator, DEFAULT_INTERPOLATOR, DEFAULT_LAGRANGE_ORDER, DEG2RAD, DataHandler, DormandPrince54Propagator, DownhillSimplex, DynamicGroundObject, Earth, EarthGravity, EphemerisBody, EphemerisSatellite, Epoch, EpochGPS, EpochTAI, EpochTDB, EpochTT, EpochUTC, EpochWindow, EquinoctialElements, EulerAngles, FieldInterpolator, FieldOfView, Force, ForceModel, FormatTle, FovFrame, FovShape, Geodetic, GibbsIOD, GoldenSection, GoodingIOD, Gravity, GroundObject, GroundStation, HerrickGibbsIOD, Hill, History, HorizonsParser, ITRF, Interpolator, InterpolatorType, J20002 as J2000, Jupiter, KM_PER_AU, KeplerPropagator, LagrangeInterpolator, LambertIOD, LandObject, LaserRangingSensor, LaunchTrajectoryGenerator, LevenbergMarquardtOD, LevenbergMarquardtResult, MILLISECONDS_PER_DAY, MILLISECONDS_PER_SECOND, MILLISECONDS_TO_DAYS, MINUTES_PER_DAY, MS_PER_DAY, Marker, Mars, Matrix, MechanicalRadar, Mercury, ModifiedGoodingIOD, ModulationType, Moon, MoonBody, Neptune, Observation, ObservationOptical, ObservationRadar, OdmExporter, OemParser, OmmParser, OotkError, OpticalSensor, OrbitDeterminationError, OrbitFinder, OrbitRegime, PI, ParseError, PassType, PassiveRFSensor, PayloadStatus, PhasedArrayRadar, PlaneChangeBurn, PlanetBody, Pluto, PolynomialRegression, ProbabilityOfCollision, PropagationError, Propagator, PropagatorType, Quaternion, RAD2DEG, RADIUS_OF_EARTH, RAE, RCS_VMAG_ESTIMATE_MAX, RCS_VMAG_ESTIMATE_MIN, RIC, RadarSensor, RadecGeocentric, RadecTopocentric, Random, RandomGaussianSource, Receiver, RelativeState, RepeatGroundTrack, RkCheckpoint, RkResult, RungeKutta4Propagator, RungeKutta89Propagator, RungeKuttaAdaptive, SLR_WAVELENGTHS, SPEED_OF_LIGHT_KM_S, Satellite, Saturn, ScheduledContact, ScreeningFilter, SegmentedLagrangeInterpolator, Sensor, SensorType, Sgp4, Sgp4Error, Sgp4ErrorCode, Sgp4OpsMode, Sgp4Propagator, SimpleLinearRegression, SolarRadiationPressure, SolarSystem, SpaceObject, SpaceObjectType, Star, StateCovariance, StateInterpolator, StateVector2 as StateVector, Sun, SunBody, SunStatus, TAU, TEME, ThirdBodyGravity, Thrust, TimeStamped, Tle, Transmitter, Transponder, TwoBurnOrbitTransfer, Uranus, ValidationError, Vector, Vector3D, Venus, VerletBlendInterpolator, VisualizationHelpers, Waypoint, ZoomValue, acoth, acsch, angularDiameter, angularDistance, angularVelocityOfEarth, array2d, asec2rad, asech, azel2uv, bodyTypeLookup, boresightFrameFromAzElRoll, cKmPerMs, cKmPerSec, cMPerSec, calcGmst, calcIncFromAz, calcInertAz, calculateFspl, calculatePropagationDelay, cappedScreeningCovarianceFromTle, clamp, concat, copySign, covariance, createCovarianceFromTle, createSampleCovarianceFromTle, createVec, csch, dbmToDbw, dbwToDbm, dbwToWatts, deg2rad, derivative, dopplerFactor, earthGravityParam, ecef2eci, ecef2enu, ecef2rae, ecefRad2rae, eci2ecef, eci2lla, eci2rae, enu2rf, estimateRcs, estimateVmagFromRcs, evalPoly, factorial, gamma, getDayOfYear, getDegLat, getDegLon, getRadLat, getRadLon, halfPi, isLeapYear, jacobian, jday, linearDistance, linearInterpolate, lla2ecef, lla2eci, lla2sez, llaRad2ecef, log10, mag2db, masec2rad, matchHalfPlane, mean, msec2sec, newtonM, newtonNu, normalizeAngle, observationDerivative, observationNoiseFromSigmas, parseCenterBody, rad2deg, radecToPosition, radecToVelocity, rae2ecef, rae2eci, rae2enu, rae2raeOffBoresight, rae2ruv, rae2sez, relativeVelocity, rv2tle, scaleAndClampRicSigmas, sec2day, sec2deg, sec2min, sech, secondsPerDay, secondsPerSiderealDay, secondsPerWeek, sez2rae, sign, spaceObjType2Str, std, temp4, toPrecision, ttasec2rad, uv2azel, wattsToDbw, wrapAngle, x2o3 };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ootk",
3
- "version": "6.0.7",
3
+ "version": "7.0.0",
4
4
  "type": "module",
5
5
  "description": "Orbital Object Toolkit including Multiple Propagators, Initial Orbit Determination, and Maneuver Calculations.",
6
6
  "exports": {
@@ -30,6 +30,9 @@
30
30
  "test:integration": "npm run build && vitest run --config test/integration/vitest.config.mts",
31
31
  "test:integration:only": "vitest run --config test/integration/vitest.config.mts",
32
32
  "test:all": "npm run test && npm run test:integration",
33
+ "docs:dev": "vitepress dev docs",
34
+ "docs:build": "vitepress build docs",
35
+ "docs:preview": "vitepress preview docs",
33
36
  "prepublishOnly": "npm run test:all",
34
37
  "version": "npm run build && auto-changelog && git add CHANGELOG.md"
35
38
  },
@@ -38,10 +41,10 @@
38
41
  "url": "git+https://github.com/thkruz/ootk.git"
39
42
  },
40
43
  "keywords": [
44
+ "space",
41
45
  "sgp4",
42
46
  "orbit",
43
47
  "toolkit",
44
- "space",
45
48
  "satellite",
46
49
  "radar",
47
50
  "iod"
@@ -49,17 +52,17 @@
49
52
  "author": "Theodore Kruczek <theodore.kruczek@gmail.com> (https://github.com/ootk/)",
50
53
  "license": "AGPL-3.0-or-later",
51
54
  "engines": {
52
- "node": ">=18.0.0"
55
+ "node": ">=20.0.0"
53
56
  },
54
57
  "bugs": {
55
58
  "url": "https://github.com/thkruz/ootk/issues"
56
59
  },
57
60
  "devDependencies": {
58
61
  "@types/jest": "^30.0.0",
59
- "astronomy-engine": "^2.1.19",
60
62
  "@typescript-eslint/eslint-plugin": "^8.48.0",
61
63
  "@typescript-eslint/parser": "^8.48.0",
62
64
  "@vitest/coverage-v8": "^4.0.18",
65
+ "astronomy-engine": "^2.1.19",
63
66
  "auto-changelog": "^2.5.0",
64
67
  "eslint": "^9.39.1",
65
68
  "madge": "^8.0.0",
@@ -67,6 +70,7 @@
67
70
  "tsup": "^8.5.1",
68
71
  "tsx": "^4.20.6",
69
72
  "typescript": "^5.9.3",
73
+ "vitepress": "2.0.0-alpha.17",
70
74
  "vitest": "^4.0.18"
71
75
  },
72
76
  "homepage": "https://github.com/thkruz/ootk"