@@ -266,6 +266,7 @@ def timecode(acutime, now=None):
266
266
comptime = gyear + sec_of_day
267
267
return comptime
268
268
269
+
269
270
def _get_target_az (current_az , current_t , increasing , az_endpoint1 , az_endpoint2 , az_speed , az_drift ):
270
271
# Return the next endpoint azimuth, based on current (az, t)
271
272
# and whether to move in +ve or -ve az direction.
@@ -492,17 +493,17 @@ def check_num_scans():
492
493
493
494
494
495
def generate_type3_scan (az_endpoint1 , az_endpoint2 , az_speed ,
495
- acc , el_endpoint1 , el_endpoint2 ,
496
- el_freq = .15 ,
497
- num_batches = None ,
498
- num_scans = None ,
499
- start_time = None ,
500
- wait_to_start = 10. ,
501
- step_time = 1. ,
502
- batch_size = 500 ,
503
- az_start = 'mid_inc' ,
504
- az_first_pos = None ,
505
- az_drift = None ):
496
+ acc , el_endpoint1 , el_endpoint2 ,
497
+ el_freq = .15 ,
498
+ num_batches = None ,
499
+ num_scans = None ,
500
+ start_time = None ,
501
+ wait_to_start = 10. ,
502
+ step_time = 1. ,
503
+ batch_size = 500 ,
504
+ az_start = 'mid_inc' ,
505
+ az_first_pos = None ,
506
+ az_drift = None ):
506
507
"""Python generator to produce times, azimuth and elevation positions,
507
508
azimuth and elevation velocities, azimuth and elevation flags for
508
509
arbitrarily long type 3 scan.
@@ -552,16 +553,16 @@ def generate_type3_scan(az_endpoint1, az_endpoint2, az_speed,
552
553
553
554
"""
554
555
def get_scan_time (az0 , az1 , az_speed ):
555
- upper = - 1 * np .cos (np .deg2rad (az1 ))
556
- lower = - 1 * np .cos (np .deg2rad (az0 ))
556
+ upper = - 1 * np .cos (np .deg2rad (az1 ))
557
+ lower = - 1 * np .cos (np .deg2rad (az0 ))
557
558
558
- return abs (upper - lower )/ np .deg2rad (az_speed )
559
+ return abs (upper - lower ) / np .deg2rad (az_speed )
559
560
560
561
if az_endpoint1 == az_endpoint2 :
561
562
raise ValueError ('Generator requires two different az endpoints!' )
562
563
563
564
if az_drift is not None :
564
- raise ValueError ("Az drift not supported for type 2 or 3 scans!" )
565
+ raise ValueError ("Az drift not supported for type 2 or 3 scans!" )
565
566
566
567
# Get el throw
567
568
el_throw = abs (el_endpoint2 - el_endpoint1 )
@@ -598,23 +599,23 @@ def get_scan_time(az0, az1, az_speed):
598
599
else :
599
600
t0 = start_time
600
601
601
- vel_0 = az_speed / np .sin (np .deg2rad (az_endpoint1 ))
602
- vel_1 = az_speed / np .sin (np .deg2rad (az_endpoint2 ))
603
- min_tt = {1 :(0.85 * abs (vel_0 ) / 9 * 11.616 )** .5 , - 1 :(0.85 * abs (vel_1 ) / 9 * 11.616 )** .5 }
604
- tt = {1 : max (2 * vel_0 / acc , min_tt [1 ]), - 1 : max (2 * vel_1 / acc , min_tt [- 1 ])}
602
+ vel_0 = az_speed / np .sin (np .deg2rad (az_endpoint1 ))
603
+ vel_1 = az_speed / np .sin (np .deg2rad (az_endpoint2 ))
604
+ min_tt = {1 : (0.85 * abs (vel_0 ) / 9 * 11.616 )** .5 , - 1 : (0.85 * abs (vel_1 ) / 9 * 11.616 )** .5 }
605
+ tt = {1 : max (2 * vel_0 / acc , min_tt [1 ]), - 1 : max (2 * vel_1 / acc , min_tt [- 1 ])}
605
606
t = 0
606
607
el = el_endpoint1
607
608
if step_time < 0.05 :
608
609
raise ValueError ('Time step size too small, must be at least '
609
610
'0.05 seconds' )
610
- el_vel = el_throw * el_freq * 2 * np .pi * np .cos (t * el_freq * 2 * np .pi )
611
+ el_vel = el_throw * el_freq * 2 * np .pi * np .cos (t * el_freq * 2 * np .pi )
611
612
az_flag = 0
612
613
el_flag = 0
613
614
if num_batches is None :
614
615
stop_iter = float ('inf' )
615
616
else :
616
617
stop_iter = num_batches
617
- batch_size = int (np .ceil (get_scan_time (az_endpoint1 , az_endpoint2 , az_speed )/ step_time ))
618
+ batch_size = int (np .ceil (get_scan_time (az_endpoint1 , az_endpoint2 , az_speed ) / step_time ))
618
619
619
620
def dec_num_scans ():
620
621
nonlocal num_scans
@@ -624,7 +625,7 @@ def dec_num_scans():
624
625
def check_num_scans ():
625
626
return num_scans is None or num_scans > 0
626
627
627
- target_az = _get_target_az (az , t , increasing , az_endpoint1 , az_endpoint2 , az_speed / np .sin (np .deg2rad (az )), az_drift )
628
+ target_az = _get_target_az (az , t , increasing , az_endpoint1 , az_endpoint2 , az_speed / np .sin (np .deg2rad (az )), az_drift )
628
629
point_group_batch = 0
629
630
630
631
i = 0
@@ -634,59 +635,59 @@ def check_num_scans():
634
635
for j in range (batch_size ):
635
636
point_block .append (TrackPoint (
636
637
timestamp = t + t0 ,
637
- az = az , el = el , az_vel = az_vel / np .sin (np .deg2rad (az )), el_vel = el_vel ,
638
+ az = az , el = el , az_vel = az_vel / np .sin (np .deg2rad (az )), el_vel = el_vel ,
638
639
az_flag = az_flag , el_flag = el_flag ,
639
640
group_flag = int (point_group_batch > 0 )))
640
641
641
642
if point_group_batch > 0 :
642
643
point_group_batch -= 1
643
644
644
645
if increasing :
645
- if get_scan_time (az , target_az , az_speed ) > 2 * step_time :
646
+ if get_scan_time (az , target_az , az_speed ) > 2 * step_time :
646
647
t += step_time
647
- az += step_time * az_speed / np .sin (np .deg2rad (az ))
648
- el = el_endpoint1 + el_throw * np .sin (t * el_freq * 2 * np .pi )
648
+ az += step_time * az_speed / np .sin (np .deg2rad (az ))
649
+ el = el_endpoint1 + el_throw * np .sin (t * el_freq * 2 * np .pi )
649
650
az_vel = az_speed
650
- el_vel = el_throw * el_freq * 2 * np .pi * np .cos (t * el_freq * 2 * np .pi )
651
+ el_vel = el_throw * el_freq * 2 * np .pi * np .cos (t * el_freq * 2 * np .pi )
651
652
az_flag = 1
652
653
el_flag = 0
653
654
elif az == target_az :
654
655
# Turn around.
655
- t += tt [1 ]
656
+ t += tt [1 ]
656
657
az_vel = - 1 * az_speed
657
- el_vel = 0
658
+ el_vel = 0
658
659
az_flag = 1
659
660
el_flag = 0
660
661
increasing = False
661
- target_az = _get_target_az (az , t , increasing , az_endpoint1 , az_endpoint2 , az_speed / np .sin (np .deg2rad (az )), az_drift )
662
+ target_az = _get_target_az (az , t , increasing , az_endpoint1 , az_endpoint2 , az_speed / np .sin (np .deg2rad (az )), az_drift )
662
663
dec_num_scans ()
663
664
point_group_batch = MIN_GROUP_NEW_LEG - 1
664
665
else :
665
666
time_remaining = get_scan_time (az , target_az , az_speed )
666
667
az = target_az
667
668
t += time_remaining
668
669
az_vel = az_speed
669
- el_vel = 0
670
+ el_vel = 0
670
671
az_flag = 2
671
672
el_flag = 0
672
673
else :
673
- if get_scan_time (az , target_az , az_speed ) > 2 * step_time :
674
+ if get_scan_time (az , target_az , az_speed ) > 2 * step_time :
674
675
t += step_time
675
- az -= step_time * az_speed / np .sin (np .deg2rad (az ))
676
- el = el_endpoint1 + el_throw * np .sin (t * el_freq * 2 * np .pi )
676
+ az -= step_time * az_speed / np .sin (np .deg2rad (az ))
677
+ el = el_endpoint1 + el_throw * np .sin (t * el_freq * 2 * np .pi )
677
678
az_vel = - 1 * az_speed
678
- el_vel = el_throw * el_freq * 2 * np .pi * np .cos (t * el_freq * 2 * np .pi )
679
+ el_vel = el_throw * el_freq * 2 * np .pi * np .cos (t * el_freq * 2 * np .pi )
679
680
az_flag = 1
680
681
el_flag = 0
681
682
elif az == target_az :
682
683
# Turn around.
683
684
t += tt [- 1 ]
684
685
az_vel = az_speed
685
- el_vel = 0
686
+ el_vel = 0
686
687
az_flag = 1
687
688
el_flag = 0
688
689
increasing = True
689
- target_az = _get_target_az (az , t , increasing , az_endpoint1 , az_endpoint2 , az_speed / np .sin (np .deg2rad (az )), az_drift )
690
+ target_az = _get_target_az (az , t , increasing , az_endpoint1 , az_endpoint2 , az_speed / np .sin (np .deg2rad (az )), az_drift )
690
691
dec_num_scans ()
691
692
point_group_batch = MIN_GROUP_NEW_LEG - 1
692
693
else :
@@ -708,17 +709,18 @@ def check_num_scans():
708
709
709
710
yield point_block
710
711
712
+
711
713
def generate_type2_scan (az_endpoint1 , az_endpoint2 , az_speed ,
712
- acc , el_endpoint1 ,
713
- num_batches = None ,
714
- num_scans = None ,
715
- start_time = None ,
716
- wait_to_start = 10. ,
717
- step_time = 1. ,
718
- batch_size = 500 ,
719
- az_start = 'mid_inc' ,
720
- az_first_pos = None ,
721
- az_drift = None ):
714
+ acc , el_endpoint1 ,
715
+ num_batches = None ,
716
+ num_scans = None ,
717
+ start_time = None ,
718
+ wait_to_start = 10. ,
719
+ step_time = 1. ,
720
+ batch_size = 500 ,
721
+ az_start = 'mid_inc' ,
722
+ az_first_pos = None ,
723
+ az_drift = None ):
722
724
"""Python generator to produce times, azimuth and elevation positions,
723
725
azimuth and elevation velocities, azimuth and elevation flags for
724
726
arbitrarily long type 3 scan.
@@ -765,17 +767,17 @@ def generate_type2_scan(az_endpoint1, az_endpoint2, az_speed,
765
767
766
768
"""
767
769
return generate_type3_scan (az_endpoint1 , az_endpoint2 , az_speed ,
768
- acc , el_endpoint1 , el_endpoint1 ,
769
- el_freq = 0 ,
770
- num_batches = num_batches ,
771
- num_scans = num_scans ,
772
- start_time = start_time ,
773
- wait_to_start = wait_to_start ,
774
- step_time = step_time ,
775
- batch_size = batch_size ,
776
- az_start = az_start ,
777
- az_first_pos = az_first_pos ,
778
- az_drift = az_drift )
770
+ acc , el_endpoint1 , el_endpoint1 ,
771
+ el_freq = 0 ,
772
+ num_batches = num_batches ,
773
+ num_scans = num_scans ,
774
+ start_time = start_time ,
775
+ wait_to_start = wait_to_start ,
776
+ step_time = step_time ,
777
+ batch_size = batch_size ,
778
+ az_start = az_start ,
779
+ az_first_pos = az_first_pos ,
780
+ az_drift = az_drift )
779
781
780
782
781
783
def plan_scan (az_end1 , az_end2 , el , v_az = 1 , a_az = 1 , az_start = None ):
0 commit comments