blob: 1930e6dfdff6b973bd382851d726c96a41c588ee [file] [log] [blame]
import numpy
def screen_stats(blinker_file_name, sensor_file_name):
sensor_data = numpy.loadtxt(sensor_file_name)
blinker_data = numpy.loadtxt(blinker_file_name)
# Convert all times to milliseconds
t_sensor = sensor_data[:, 0] * 1e3
t_vsync = blinker_data / 1e3
# Throw away any sensor timestamps earlier than the first blink
# this may happen if the operator attached the sensor after
# running the command. But this should be avoided.
skip_sensor = sum(t_sensor < t_vsync[0])
if(skip_sensor):
t_sensor = t_sensor[skip_sensor:]
print('Skipped first %d readings from the sensor' % skip_sensor)
# Get only the common size and skip the first blink, it's often weird.
length = min(len(t_sensor), len(t_vsync))
t_sensor = t_sensor[1:length]
t_vsync = t_vsync[1:length]
# Shift time so that first time point is 0
t0 = min(t_vsync)
t_sensor = t_sensor - t0
t_vsync = t_vsync - t0
dt = t_sensor - t_vsync
# Look at even and odd transitions separately - black <-> white.
dt_even = dt[0::2]
dt_odd = dt[1::2]
print('')
print('dt = array([' + ', '.join('%0.2f' % x for x in dt) + '])')
print('')
print('Screen response times [ms]')
print('Even: median %0.1f ms, stdev %0.2f ms' %
(numpy.median(dt_even), numpy.std(dt_even)))
print('Odd: median %0.1f ms, stdev %0.2f ms' %
(numpy.median(dt_odd), numpy.std(dt_odd)))
# Debug & test
if __name__ == '__main__':
fname = '/tmp/WALT_2016_06_22__1739_21_'
blinker_file_name = fname + 'evtest.log'
sensor_file_name = fname + 'laser.log'
screen_stats(blinker_file_name, sensor_file_name)