@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.
- package/package.json +1 -1
- package/src/udl.js +92 -0
package/package.json
CHANGED
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
|
};
|