100100 "error_bar_alpha" : 0.2 ,
101101}
102102
103+
103104def parse (source , sec2hr = False ):
104105 t = []; lx1 = []; ly1 = []; lz1 = [];
105106 lx2 = []; ly2 = []; lz2 = [];
@@ -154,6 +155,7 @@ def match(t1, x1, t2, x2, matched_indexes = None):
154155 scale_vel = args .scale_vel
155156
156157 plotOptions = defaultPlotOptions
158+ primary_input = 'stdin' if not args .from_file else args .from_file
157159
158160 # read from file or stdin
159161 if args .from_file is not None :
@@ -206,6 +208,21 @@ def match(t1, x1, t2, x2, matched_indexes = None):
206208 axs [1 ,1 ].legend (loc = 'upper left' )
207209 axs [2 ,1 ].legend (loc = 'upper left' )
208210
211+ # Stats
212+ print (f'{ primary_input :25s} { args .compare_to :16s} ' )
213+ print (f'X : { np .average ([(z [0 ]- z [1 ]) for z in zip (lx1 ,lx2 )]):+.4f} +- { np .std ([(z [0 ]- z [1 ]) for z in zip (lx1 ,lx2 )]):.4f} [m]' , end = '' )
214+ print (f' { np .average ([(z [0 ]- z [1 ]) for z in zip (slx1 ,slx2 )]):+.4f} +- { np .std ([(z [0 ]- z [1 ]) for z in zip (slx1 ,slx2 )]):.4f} [m]' )
215+ print (f'Y : { np .average ([(z [0 ]- z [1 ]) for z in zip (ly1 ,ly2 )]):+.4f} +- { np .std ([(z [0 ]- z [1 ]) for z in zip (ly1 ,ly2 )]):.4f} [m]' , end = '' )
216+ print (f' { np .average ([(z [0 ]- z [1 ]) for z in zip (sly1 ,sly2 )]):+.4f} +- { np .std ([(z [0 ]- z [1 ]) for z in zip (sly1 ,sly2 )]):.4f} [m]' )
217+ print (f'Z : { np .average ([(z [0 ]- z [1 ]) for z in zip (lz1 ,lz2 )]):+.4f} +- { np .std ([(z [0 ]- z [1 ]) for z in zip (lz1 ,lz2 )]):.4f} [m]' , end = '' )
218+ print (f' { np .average ([(z [0 ]- z [1 ]) for z in zip (slz1 ,slz2 )]):+.4f} +- { np .std ([(z [0 ]- z [1 ]) for z in zip (slz1 ,slz2 )]):.4f} [m]' )
219+ print (f'Vx: { np .average ([(z [0 ]- z [1 ]) for z in zip (lvx1 ,lvx2 )])* 1e3 :+.4f} +- { np .std ([(z [0 ]- z [1 ]) for z in zip (lvx1 ,lvx2 )])* 1e3 :.4f} [mm/sec]' , end = '' )
220+ print (f' { np .average ([(z [0 ]- z [1 ]) for z in zip (slvx1 ,slvx2 )])* 1e3 :+.4f} +- { np .std ([(z [0 ]- z [1 ]) for z in zip (slvx1 ,slvx2 )])* 1e3 :.4f} [mm/sec]' )
221+ print (f'Vy: { np .average ([(z [0 ]- z [1 ]) for z in zip (lvy1 ,lvy2 )])* 1e3 :+.4f} +- { np .std ([(z [0 ]- z [1 ]) for z in zip (lvy1 ,lvy2 )])* 1e3 :.4f} [mm/sec]' , end = '' )
222+ print (f' { np .average ([(z [0 ]- z [1 ]) for z in zip (slvy1 ,slvy2 )])* 1e3 :+.4f} +- { np .std ([(z [0 ]- z [1 ]) for z in zip (slvy1 ,slvy2 )])* 1e3 :.4f} [mm/sec]' )
223+ print (f'Vz: { np .average ([(z [0 ]- z [1 ]) for z in zip (lvz1 ,lvz2 )])* 1e3 :+.4f} +- { np .std ([(z [0 ]- z [1 ]) for z in zip (lvz1 ,lvz2 )])* 1e3 :.4f} [mm/sec]' , end = '' )
224+ print (f' { np .average ([(z [0 ]- z [1 ]) for z in zip (slvz1 ,slvz2 )])* 1e3 :+.4f} +- { np .std ([(z [0 ]- z [1 ]) for z in zip (slvz1 ,slvz2 )])* 1e3 :.4f} [mm/sec]' )
225+
209226## Plot state results (not differences)
210227 if (args .nodif or args .withdif ) and not args .compare_to :
211228 print ("Plotting state results ..." )
@@ -246,7 +263,15 @@ def match(t1, x1, t2, x2, matched_indexes = None):
246263 # Add invisible axes for left and right column labels
247264 fig .text (0.04 , 0.5 , '[m]' , va = 'center' , rotation = 'vertical' )
248265 fig .text (0.96 , 0.5 , '[mm/sec]' , va = 'center' , rotation = 'vertical' )
249-
266+
267+ # Stats
268+ print (f'X : { np .average ([(z [0 ]- z [1 ]) for z in zip (lx1 ,lx2 )]):+.4f} +- { np .std ([(z [0 ]- z [1 ]) for z in zip (lx1 ,lx2 )]):.4f} [m]' )
269+ print (f'Y : { np .average ([(z [0 ]- z [1 ]) for z in zip (ly1 ,ly2 )]):+.4f} +- { np .std ([(z [0 ]- z [1 ]) for z in zip (ly1 ,ly2 )]):.4f} [m]' )
270+ print (f'Z : { np .average ([(z [0 ]- z [1 ]) for z in zip (lz1 ,lz2 )]):+.4f} +- { np .std ([(z [0 ]- z [1 ]) for z in zip (lz1 ,lz2 )]):.4f} [m]' )
271+ print (f'Vx: { np .average ([(z [0 ]- z [1 ]) for z in zip (lvx1 ,lvx2 )])* 1e3 :+.4f} +- { np .std ([(z [0 ]- z [1 ]) for z in zip (lvx1 ,lvx2 )])* 1e3 :.4f} [mm/sec]' )
272+ print (f'Vy: { np .average ([(z [0 ]- z [1 ]) for z in zip (lvy1 ,lvy2 )])* 1e3 :+.4f} +- { np .std ([(z [0 ]- z [1 ]) for z in zip (lvy1 ,lvy2 )])* 1e3 :.4f} [mm/sec]' )
273+ print (f'Vz: { np .average ([(z [0 ]- z [1 ]) for z in zip (lvz1 ,lvz2 )])* 1e3 :+.4f} +- { np .std ([(z [0 ]- z [1 ]) for z in zip (lvz1 ,lvz2 )])* 1e3 :.4f} [mm/sec]' )
274+
250275## Plot differences per component
251276 if (args .withdif or (not args .nodif )) and not args .compare_to :
252277 print ("Plotting state diffs ..." )
@@ -271,6 +296,14 @@ def match(t1, x1, t2, x2, matched_indexes = None):
271296 axs [1 ,1 ].text (.01 ,.99 ,r'$V_{Y_{ref}}-V_{Y}$' ,transform = axs [1 ,1 ].transAxes ,verticalalignment = 'top' , horizontalalignment = 'left' ,fontsize = 10 ,clip_on = True )
272297 axs [2 ,1 ].text (.01 ,.99 ,r'$V_{Z_{ref}}-V_{Z}$' ,transform = axs [2 ,1 ].transAxes ,verticalalignment = 'top' , horizontalalignment = 'left' ,fontsize = 10 ,clip_on = True )
273298
299+ # Stats
300+ print (f'X : { np .average ([(z [0 ]- z [1 ]) for z in zip (lx1 ,lx2 )]):+.4f} +- { np .std ([(z [0 ]- z [1 ]) for z in zip (lx1 ,lx2 )]):.4f} [m]' )
301+ print (f'Y : { np .average ([(z [0 ]- z [1 ]) for z in zip (ly1 ,ly2 )]):+.4f} +- { np .std ([(z [0 ]- z [1 ]) for z in zip (ly1 ,ly2 )]):.4f} [m]' )
302+ print (f'Z : { np .average ([(z [0 ]- z [1 ]) for z in zip (lz1 ,lz2 )]):+.4f} +- { np .std ([(z [0 ]- z [1 ]) for z in zip (lz1 ,lz2 )]):.4f} [m]' )
303+ print (f'Vx: { np .average ([(z [0 ]- z [1 ]) for z in zip (lvx1 ,lvx2 )])* 1e3 :+.4f} +- { np .std ([(z [0 ]- z [1 ]) for z in zip (lvx1 ,lvx2 )])* 1e3 :.4f} [mm/sec]' )
304+ print (f'Vy: { np .average ([(z [0 ]- z [1 ]) for z in zip (lvy1 ,lvy2 )])* 1e3 :+.4f} +- { np .std ([(z [0 ]- z [1 ]) for z in zip (lvy1 ,lvy2 )])* 1e3 :.4f} [mm/sec]' )
305+ print (f'Vz: { np .average ([(z [0 ]- z [1 ]) for z in zip (lvz1 ,lvz2 )])* 1e3 :+.4f} +- { np .std ([(z [0 ]- z [1 ]) for z in zip (lvz1 ,lvz2 )])* 1e3 :.4f} [mm/sec]' )
306+
274307 # Add invisible axes for left and right column labels
275308 fig .text (0.04 , 0.5 , '[m]' , va = 'center' , rotation = 'vertical' )
276309 fig .text (0.96 , 0.5 , '[mm/sec]' , va = 'center' , rotation = 'vertical' )
0 commit comments