@saber-usa/node-common 1.7.41-alpha.3 → 1.7.43

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.
Files changed (2) hide show
  1. package/package.json +1 -1
  2. package/src/udl.js +92 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@saber-usa/node-common",
3
- "version": "1.7.41-alpha.3",
3
+ "version": "1.7.43",
4
4
  "description": "Common node functions for Saber",
5
5
  "main": "src/index.js",
6
6
  "type": "module",
package/src/udl.js CHANGED
@@ -168,6 +168,86 @@ const udlToRadarObs = (udlRow, tles = {}, sensors = {}, log = console) => {
168
168
  return result;
169
169
  };
170
170
 
171
+ /**
172
+ * Converts a UDL Difference of Arrival row to NPS DiffOfArrival (PascalCase keys).
173
+ * Callers that insert via ingest should wrap with lowerCaseObjectKeys.
174
+ * @param {Object} udlRow
175
+ * @return {Object}
176
+ */
177
+ const udlToNpsDOA = (udlRow) => {
178
+ const satno = udlRow.satNo
179
+ ? _.get(udlRow, "satNo", null)
180
+ : _.get(udlRow, "origObjectId", null);
181
+
182
+ const npsObj = {
183
+ SatNo: satno,
184
+ ObTime: _.get(udlRow, "obTime", null),
185
+ IdUdl: _.get(udlRow, "id", null),
186
+ ClassificationMarking: _.get(udlRow, "classificationMarking", null),
187
+ IdOnOrbit: _.get(udlRow, "idOnOrbit", null),
188
+ IdSensor1: _.get(udlRow, "idSensor1", null),
189
+ IdSensor2: _.get(udlRow, "idSensor2", null),
190
+ TaskId: _.get(udlRow, "taskId", null),
191
+ OrigObjectId: _.get(udlRow, "origObjectId", null),
192
+ OrigNetwork: _.get(udlRow, "origNetwork", null),
193
+ OrigSensorId1: _.get(udlRow, "origSensorId1", null),
194
+ OrigSensorId2: _.get(udlRow, "origSensorId2", null),
195
+ Uct: _.get(udlRow, "uct", null),
196
+ Sensor1Delay: _.get(udlRow, "sensor1Delay", null),
197
+ Sensor2Delay: _.get(udlRow, "sensor2Delay", null),
198
+ SenLat: _.get(udlRow, "senlat", null),
199
+ SenLon: _.get(udlRow, "senlon", null),
200
+ SenAlt: _.get(udlRow, "senalt", null),
201
+ Sen2Lat: _.get(udlRow, "sen2lat", null),
202
+ Sen2Lon: _.get(udlRow, "sen2lon", null),
203
+ Sen2Alt: _.get(udlRow, "sen2alt", null),
204
+ Azimuth1: _.get(udlRow, "azimuth1", null),
205
+ Elevation1: _.get(udlRow, "elevation1", null),
206
+ Azimuth2: _.get(udlRow, "azimuth2", null),
207
+ Elevation2: _.get(udlRow, "elevation2", null),
208
+ DeltaRange: _.get(udlRow, "deltaRange", null),
209
+ DeltaRangeUnc: _.get(udlRow, "deltaRangeUnc", null),
210
+ DeltaRangeRate: _.get(udlRow, "deltaRangeRate", null),
211
+ DeltaRangeRateUnc: _.get(udlRow, "deltaRangeRateUnc", null),
212
+ Snr: _.get(udlRow, "snr", null),
213
+ Tdoa: _.get(udlRow, "tdoa", null),
214
+ TdoaUnc: _.get(udlRow, "tdoaUnc", null),
215
+ Fdoa: _.get(udlRow, "fdoa", null),
216
+ FdoaUnc: _.get(udlRow, "fdoaUnc", null),
217
+ Frequency: _.get(udlRow, "frequency", null),
218
+ Bandwidth: _.get(udlRow, "bandwidth", null),
219
+ Source: _.get(udlRow, "source", null),
220
+ CollectionMode: _.get(udlRow, "collectionMode", null),
221
+ Origin: _.get(udlRow, "origin", null),
222
+ Descriptor: _.get(udlRow, "descriptor", null),
223
+ DataMode: _.get(udlRow, "dataMode", null),
224
+ CreatedAt: _.get(udlRow, "createdAt", null),
225
+ };
226
+
227
+ return enrichDoaFields(npsObj);
228
+ };
229
+
230
+ /**
231
+ * Enrich DiffOfArrival sensor ids from orig fallbacks.
232
+ * @param {Object} npsObj
233
+ * @return {Object}
234
+ */
235
+ const enrichDoaFields = (npsObj) => {
236
+ const enrichedFields = [];
237
+ if ((npsObj.IdSensor1 === null || npsObj.IdSensor1 === undefined)
238
+ && npsObj.OrigSensorId1 !== null && npsObj.OrigSensorId1 !== undefined) {
239
+ npsObj.IdSensor1 = npsObj.OrigSensorId1;
240
+ enrichedFields.push("IdSensor1");
241
+ }
242
+ if ((npsObj.IdSensor2 === null || npsObj.IdSensor2 === undefined)
243
+ && npsObj.OrigSensorId2 !== null && npsObj.OrigSensorId2 !== undefined) {
244
+ npsObj.IdSensor2 = npsObj.OrigSensorId2;
245
+ enrichedFields.push("IdSensor2");
246
+ }
247
+ npsObj.EnrichedFields = enrichedFields.join(",");
248
+ return npsObj;
249
+ };
250
+
171
251
  const udlToNpsElset = (udlRow) => {
172
252
  let derivedElset;
173
253
  try {
@@ -525,6 +605,17 @@ const udlToNpsState = (udlRow) => {
525
605
  // [ a, e, i, Ω, ω, θ ]
526
606
  // sma (km), eccentricity, inclination (deg), raan (deg), arg of perigee (deg), true anomaly (deg)
527
607
  keplerians = cartesianToKeplerian(pos, vel);
608
+ if (_.isEmpty(keplerians)) {
609
+ const idStateVector = _.get(udlRow, "idStateVector", null);
610
+ const epoch = _.get(udlRow, "epoch", null);
611
+ console.error(
612
+ "Keplerian conversion failed. "
613
+ + `idStateVector: ${idStateVector}, epoch: ${epoch}, `
614
+ + `xpos: ${Xpos} km, ypos: ${Ypos} km, zpos: ${Zpos} km, `
615
+ + `xvel: ${Xvel} km/s, yvel: ${Yvel} km/s, zvel: ${Zvel} km/s`,
616
+ );
617
+ keplerians = {a: null, e: null, i: null, raan: null, w: null, f: null};
618
+ }
528
619
  }
529
620
 
530
621
  const regime = computeStateRegimeFromKeplerians(keplerians);
@@ -581,4 +672,5 @@ export {
581
672
  getObsSatno,
582
673
  udlToNpsObs,
583
674
  udlToRadarObs,
675
+ udlToNpsDOA,
584
676
  };