@@ -88,7 +88,7 @@ impl SVTracker {
88
88
if let Some ( tolerance) = self . gap_tolerance {
89
89
let dt = data. epoch - past_t;
90
90
if dt > tolerance {
91
- debug ! ( "{}({}) - {} data gap" , data. epoch, self . sv, dt) ;
91
+ print ! ( "{}({}) - {} data gap" , data. epoch, self . sv, dt) ;
92
92
self . size = 0 ;
93
93
self . buffer . clear ( ) ;
94
94
}
@@ -122,25 +122,30 @@ impl SVTracker {
122
122
/// symbols must have been buffered.
123
123
pub fn fit ( & mut self ) -> Result < FittedData , FitError > {
124
124
// Request 3 symbols at least
125
- if self . size < 2 {
125
+ if self . size < 3 {
126
126
return Err ( FitError :: NotEnoughSymbols ) ;
127
127
}
128
128
129
129
let midpoint = if self . size % 2 == 0 {
130
- self . size / 2
130
+ self . size / 2 - 1
131
131
} else {
132
- ( self . size + 1 ) / 2
132
+ ( self . size + 1 ) / 2 - 1
133
133
} ;
134
134
135
135
// Retrieve information @ mid point
136
+ let t0 = self . buffer [ 0 ] . epoch ;
136
137
let t_mid = self . buffer [ midpoint] . epoch ;
137
138
let t_mid_s = t_mid. duration . to_unit ( Unit :: Second ) ;
139
+ let t_last = self . buffer [ self . size - 1 ] . epoch ;
138
140
139
141
let azim_mid = self . buffer [ midpoint] . azimuth ;
140
142
let elev_mid = self . buffer [ midpoint] . elevation ;
141
143
142
144
let mut fitted = FittedData :: default ( ) ;
143
145
146
+ fitted. sv = self . sv ;
147
+ fitted. first_t = t0;
148
+ fitted. duration = t_last - t0;
144
149
fitted. midtrack = t_mid;
145
150
fitted. azimuth_deg = azim_mid;
146
151
fitted. elevation_deg = elev_mid;
@@ -283,14 +288,14 @@ impl SVTracker {
283
288
284
289
#[ cfg( test) ]
285
290
mod test {
286
- use crate :: prelude:: { Epoch , FittedData , Observation , SVTracker , SV } ;
291
+ use crate :: prelude:: { Duration , Epoch , FittedData , Observation , SVTracker , SV } ;
287
292
use std:: str:: FromStr ;
288
293
289
294
#[ test]
290
295
fn tracker_no_gap_x3 ( ) {
291
296
let g01 = SV :: from_str ( "G01" ) . unwrap ( ) ;
292
297
293
- let mut tracker = SVTracker :: new ( sv , None ) ;
298
+ let mut tracker = SVTracker :: new ( g01 , None ) ;
294
299
295
300
for obs in [
296
301
Observation {
@@ -334,37 +339,26 @@ mod test {
334
339
335
340
assert_eq ! ( fitted. sv, g01) ;
336
341
assert_eq ! ( fitted. duration, Duration :: from_seconds( 60.0 ) ) ;
342
+
337
343
assert_eq ! (
338
344
fitted. first_t,
339
345
Epoch :: from_str( "2020-01-01T00:00:00 UTC" ) . unwrap( )
340
346
) ;
347
+
341
348
assert_eq ! (
342
349
fitted. midtrack,
343
350
Epoch :: from_str( "2020-01-01T00:00:30 UTC" ) . unwrap( )
344
351
) ;
352
+
345
353
assert_eq ! ( fitted. elevation_deg, 6.1 ) ;
346
354
assert_eq ! ( fitted. azimuth_deg, 7.1 ) ;
347
- assert_eq ! ( fitted. refsv_s, 0.0 ) ;
348
-
349
- tracker. new_observation ( Observation {
350
- epoch : Epoch :: from_str ( "2020-01-01T00:01:30 UTC" ) . unwrap ( ) ,
351
- refsv : 1.3 ,
352
- refsys : 2.3 ,
353
- mdtr : 3.3 ,
354
- mdio : 4.3 ,
355
- msio : None ,
356
- elevation : 6.3 ,
357
- azimuth : 7.3 ,
358
- } ) ;
359
-
360
- let fitted = tracker. fit ( ) . unwrap ( ) ;
361
355
}
362
356
363
357
#[ test]
364
358
fn tracker_no_gap_x4 ( ) {
365
359
let g01 = SV :: from_str ( "G01" ) . unwrap ( ) ;
366
360
367
- let mut tracker = SVTracker :: new ( sv , None ) ;
361
+ let mut tracker = SVTracker :: new ( g01 , None ) ;
368
362
369
363
for obs in [
370
364
Observation {
@@ -408,43 +402,18 @@ mod test {
408
402
409
403
assert_eq ! ( fitted. sv, g01) ;
410
404
assert_eq ! ( fitted. duration, Duration :: from_seconds( 60.0 ) ) ;
405
+
411
406
assert_eq ! (
412
407
fitted. first_t,
413
408
Epoch :: from_str( "2020-01-01T00:00:00 UTC" ) . unwrap( )
414
409
) ;
410
+
415
411
assert_eq ! (
416
412
fitted. midtrack,
417
413
Epoch :: from_str( "2020-01-01T00:00:30 UTC" ) . unwrap( )
418
414
) ;
419
- assert_eq ! ( fitted. elevation_deg, 6.1 ) ;
420
- assert_eq ! ( fitted. azimuth_deg, 7.1 ) ;
421
- assert_eq ! ( fitted. refsv_s, 0.0 ) ;
422
-
423
- tracker. new_observation ( Observation {
424
- epoch : Epoch :: from_str ( "2020-01-01T00:01:30 UTC" ) . unwrap ( ) ,
425
- refsv : 1.3 ,
426
- refsys : 2.3 ,
427
- mdtr : 3.3 ,
428
- mdio : 4.3 ,
429
- msio : None ,
430
- elevation : 6.3 ,
431
- azimuth : 7.3 ,
432
- } ) ;
433
415
434
- let fitted = tracker. fit ( ) . unwrap ( ) ;
435
-
436
- assert_eq ! ( fitted. sv, g01) ;
437
- assert_eq ! ( fitted. duration, Duration :: from_seconds( 60.0 ) ) ;
438
- assert_eq ! (
439
- fitted. first_t,
440
- Epoch :: from_str( "2020-01-01T00:00:00 UTC" ) . unwrap( )
441
- ) ;
442
- assert_eq ! (
443
- fitted. midtrack,
444
- Epoch :: from_str( "2020-01-01T00:01:00 UTC" ) . unwrap( )
445
- ) ;
446
416
assert_eq ! ( fitted. elevation_deg, 6.1 ) ;
447
417
assert_eq ! ( fitted. azimuth_deg, 7.1 ) ;
448
- assert_eq ! ( fitted. refsv_s, 0.0 ) ;
449
418
}
450
419
}
0 commit comments