1*58e6ee5fSAndroid Build Coastguard Worker# SPDX-License-Identifier: GPL-2.0 2*58e6ee5fSAndroid Build Coastguard Worker# 3*58e6ee5fSAndroid Build Coastguard Worker# Copyright (C) 2019, VMware Inc, Tzvetomir Stoyanov <[email protected]> 4*58e6ee5fSAndroid Build Coastguard Worker# Copyright (C) 2019, VMware Inc, Yordan Karadzhov <[email protected]> 5*58e6ee5fSAndroid Build Coastguard Worker 6*58e6ee5fSAndroid Build Coastguard Worker 7*58e6ee5fSAndroid Build Coastguard Workerimport matplotlib.pyplot as plt 8*58e6ee5fSAndroid Build Coastguard Workerimport matplotlib.lines as mlines 9*58e6ee5fSAndroid Build Coastguard Workerimport numpy as np 10*58e6ee5fSAndroid Build Coastguard Workerimport sys 11*58e6ee5fSAndroid Build Coastguard Worker 12*58e6ee5fSAndroid Build Coastguard Workerdef newline(p1, p2): 13*58e6ee5fSAndroid Build Coastguard Worker ax = plt.gca() 14*58e6ee5fSAndroid Build Coastguard Worker xmin, xmax = ax.get_xbound() 15*58e6ee5fSAndroid Build Coastguard Worker 16*58e6ee5fSAndroid Build Coastguard Worker if(p2[0] == p1[0]): 17*58e6ee5fSAndroid Build Coastguard Worker xmin = xmax = p1[0] 18*58e6ee5fSAndroid Build Coastguard Worker ymin, ymax = ax.get_ybound() 19*58e6ee5fSAndroid Build Coastguard Worker else: 20*58e6ee5fSAndroid Build Coastguard Worker ymax = p1[1]+(p2[1]-p1[1])/(p2[0]-p1[0])*(xmax-p1[0]) 21*58e6ee5fSAndroid Build Coastguard Worker ymin = p1[1]+(p2[1]-p1[1])/(p2[0]-p1[0])*(xmin-p1[0]) 22*58e6ee5fSAndroid Build Coastguard Worker 23*58e6ee5fSAndroid Build Coastguard Worker l = mlines.Line2D([xmin,xmax], [ymin,ymax], color='red') 24*58e6ee5fSAndroid Build Coastguard Worker ax.add_line(l) 25*58e6ee5fSAndroid Build Coastguard Worker return l 26*58e6ee5fSAndroid Build Coastguard Worker 27*58e6ee5fSAndroid Build Coastguard Worker 28*58e6ee5fSAndroid Build Coastguard Workerdata = np.loadtxt(fname = sys.argv[1]) 29*58e6ee5fSAndroid Build Coastguard Workerselected_ts = data[-1, 1] 30*58e6ee5fSAndroid Build Coastguard Workerselected_ofs = data[-1, 0] 31*58e6ee5fSAndroid Build Coastguard Workerdata = data[:-1,:] 32*58e6ee5fSAndroid Build Coastguard Worker 33*58e6ee5fSAndroid Build Coastguard Workerx = data[:, 1] - data[:, 0] 34*58e6ee5fSAndroid Build Coastguard Worker 35*58e6ee5fSAndroid Build Coastguard Workermean = x.mean() 36*58e6ee5fSAndroid Build Coastguard Workerstd = x.std() 37*58e6ee5fSAndroid Build Coastguard Worker 38*58e6ee5fSAndroid Build Coastguard Workernum_bins = 500 39*58e6ee5fSAndroid Build Coastguard Workermin = x.min() #+ .4 * (x.max() - x.min()) 40*58e6ee5fSAndroid Build Coastguard Workermax = x.max() #- .4 * (x.max() - x.min()) 41*58e6ee5fSAndroid Build Coastguard Workerbins = np.linspace(min, max, num_bins, endpoint = False, dtype=int) 42*58e6ee5fSAndroid Build Coastguard Worker 43*58e6ee5fSAndroid Build Coastguard Workerfig, ax = plt.subplots() 44*58e6ee5fSAndroid Build Coastguard Worker 45*58e6ee5fSAndroid Build Coastguard Worker# the histogram of the data 46*58e6ee5fSAndroid Build Coastguard Workern, bins, patches = ax.hist(x, bins, histtype=u'step'); 47*58e6ee5fSAndroid Build Coastguard Worker 48*58e6ee5fSAndroid Build Coastguard Workerax.set_xlabel('clock offset [$\mu$s]') 49*58e6ee5fSAndroid Build Coastguard Workerax.set_ylabel('entries') 50*58e6ee5fSAndroid Build Coastguard Workerax.set_title("$\sigma$=%i" % std) 51*58e6ee5fSAndroid Build Coastguard Worker 52*58e6ee5fSAndroid Build Coastguard Workerx1, y1 = [selected_ofs, min], [selected_ofs, max] 53*58e6ee5fSAndroid Build Coastguard Workernewline(x1, y1) 54*58e6ee5fSAndroid Build Coastguard Worker 55*58e6ee5fSAndroid Build Coastguard Worker# Tweak spacing to prevent clipping of ylabel 56*58e6ee5fSAndroid Build Coastguard Workerfig.tight_layout() 57*58e6ee5fSAndroid Build Coastguard Workerplt.show() 58