#!/usr/bin/env python3 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  argparse 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  numpy  as  np 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  matplotlib . pyplot  as  plt 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								from  openpilot . tools . lib . logreader  import  LogReader 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								if  __name__  ==  ' __main__ ' : 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  parser  =  argparse . ArgumentParser ( ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  parser . add_argument ( ' --width ' ,  default = 2160 ,  type = int ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  parser . add_argument ( ' --height ' ,  default = 1080 ,  type = int ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  parser . add_argument ( ' --route ' ,  default = ' rlog ' ,  type = str ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  args  =  parser . parse_args ( ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  w  =  args . width 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  h  =  args . height 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  route  =  args . route 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  fingers  =  [ [ - 1 ,  - 1 ] ]  *  5 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  touch_points  =  [ ] 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  current_slot  =  0 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  lr  =  list ( LogReader ( route ) ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  for  msg  in  lr : 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  msg . which ( )  ==  ' touch ' : 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      for  event  in  msg . touch : 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  event . type  ==  3  and  event . code  ==  47 : 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          current_slot  =  event . value 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        elif  event . type  ==  3  and  event . code  ==  57  and  event . value  ==  - 1 : 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          fingers [ current_slot ]  =  [ - 1 ,  - 1 ] 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        elif  event . type  ==  3  and  event . code  ==  53 : 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								          fingers [ current_slot ] [ 1 ]  =  event . value 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          if  fingers [ current_slot ] [ 0 ]  !=  - 1 : 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            touch_points . append ( fingers [ current_slot ] . copy ( ) ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        elif  event . type  ==  3  and  event . code  ==  54 : 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          fingers [ current_slot ] [ 0 ]  =  w  -  event . value 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          if  fingers [ current_slot ] [ 1 ]  !=  - 1 : 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            touch_points . append ( fingers [ current_slot ] . copy ( ) ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  if  not  touch_points : 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    print ( f ' No touch events found for  { route } ' ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    quit ( ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  unique_points ,  counts  =  np . unique ( touch_points ,  axis = 0 ,  return_counts = True ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  plt . figure ( figsize = ( 10 ,  3 ) ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  plt . scatter ( unique_points [ : ,  0 ] ,  unique_points [ : ,  1 ] ,  c = counts ,  s = counts  *  20 ,  edgecolors = ' red ' ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  plt . colorbar ( ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  plt . title ( f ' Touches for  { route } ' ) 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  plt . xlim ( 0 ,  w ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  plt . ylim ( 0 ,  h ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  plt . grid ( True ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  plt . show ( )