1*8caefee3SMatthias Ringwald#!/usr/bin/env python 2*8caefee3SMatthias Ringwald 3*8caefee3SMatthias Ringwaldimport matplotlib.pyplot as plt 4*8caefee3SMatthias Ringwald#from pylab import * 5*8caefee3SMatthias Ringwaldimport cPickle 6*8caefee3SMatthias Ringwaldimport pylab as P 7*8caefee3SMatthias Ringwaldimport numpy as np 8*8caefee3SMatthias Ringwaldfrom matplotlib.backends.backend_pdf import PdfPages 9*8caefee3SMatthias Ringwaldfrom matplotlib.patches import Polygon 10*8caefee3SMatthias Ringwaldimport itertools 11*8caefee3SMatthias Ringwaldimport os 12*8caefee3SMatthias Ringwald 13*8caefee3SMatthias Ringwald 14*8caefee3SMatthias Ringwald 15*8caefee3SMatthias Ringwalddef histplot(data,labels, colors, x_label, y_label, title, fig_name, cdf): 16*8caefee3SMatthias Ringwald fig, ax = plt.subplots() 17*8caefee3SMatthias Ringwald if cdf: 18*8caefee3SMatthias Ringwald n, bins, patches = ax.hist(data, 20, weights=None, histtype='step', normed=True, cumulative=True, label= labels, color = colors) 19*8caefee3SMatthias Ringwald legend = ax.legend(loc='lower left', shadow=False) 20*8caefee3SMatthias Ringwald ax.grid(True) 21*8caefee3SMatthias Ringwald 22*8caefee3SMatthias Ringwald else: 23*8caefee3SMatthias Ringwald n, bins, patches = ax.hist( data, 20, weights=None, histtype='bar', label= labels, color = colors) 24*8caefee3SMatthias Ringwald legend = ax.legend(loc='upper right', shadow=False) 25*8caefee3SMatthias Ringwald 26*8caefee3SMatthias Ringwald for line in ax.get_lines(): 27*8caefee3SMatthias Ringwald line.set_linewidth(1.5) 28*8caefee3SMatthias Ringwald 29*8caefee3SMatthias Ringwald ax.set_xlabel(x_label) 30*8caefee3SMatthias Ringwald ax.set_ylabel(y_label) 31*8caefee3SMatthias Ringwald for label in legend.get_texts(): 32*8caefee3SMatthias Ringwald label.set_fontsize('small') 33*8caefee3SMatthias Ringwald 34*8caefee3SMatthias Ringwald for label in legend.get_lines(): 35*8caefee3SMatthias Ringwald label.set_linewidth(1.5) # the legend line width 36*8caefee3SMatthias Ringwald 37*8caefee3SMatthias Ringwald fig.suptitle(title, fontsize=12) 38*8caefee3SMatthias Ringwald 39*8caefee3SMatthias Ringwald #plt.show() 40*8caefee3SMatthias Ringwald pp = PdfPages(fig_name) 41*8caefee3SMatthias Ringwald pp.savefig(fig) 42*8caefee3SMatthias Ringwald pp.close() 43*8caefee3SMatthias Ringwald return [n, bins, patches] 44*8caefee3SMatthias Ringwald 45*8caefee3SMatthias Ringwalddef accplot(data, labels, colors, x_label, y_label, title, fig_name, annotation): 46*8caefee3SMatthias Ringwald mean = np.zeros(len(data)) 47*8caefee3SMatthias Ringwald for i in range(len(data)): 48*8caefee3SMatthias Ringwald if len(data[i]) > 0: 49*8caefee3SMatthias Ringwald mean[i] = len(data[i]) /(1.0*max(data[i])) 50*8caefee3SMatthias Ringwald 51*8caefee3SMatthias Ringwald mean = round(mean) 52*8caefee3SMatthias Ringwald 53*8caefee3SMatthias Ringwald fig, ax = plt.subplots() 54*8caefee3SMatthias Ringwald for i in range(len(data)): 55*8caefee3SMatthias Ringwald if len(data[i]) > 0: 56*8caefee3SMatthias Ringwald ax.plot(data[i], range(len(data[i])), colors[i], label= labels[i]+', '+mean[i]+' adv/s, total nr. '+str(len(data[i]))) 57*8caefee3SMatthias Ringwald 58*8caefee3SMatthias Ringwald ax.set_xlabel(x_label) 59*8caefee3SMatthias Ringwald ax.set_ylabel(y_label) 60*8caefee3SMatthias Ringwald for tl in ax.get_yticklabels(): 61*8caefee3SMatthias Ringwald tl.set_color('k') 62*8caefee3SMatthias Ringwald 63*8caefee3SMatthias Ringwald legend = ax.legend(loc='upper left', shadow=False) 64*8caefee3SMatthias Ringwald 65*8caefee3SMatthias Ringwald for label in legend.get_texts(): 66*8caefee3SMatthias Ringwald label.set_fontsize('small') 67*8caefee3SMatthias Ringwald 68*8caefee3SMatthias Ringwald for label in legend.get_lines(): 69*8caefee3SMatthias Ringwald label.set_linewidth(1.5) # the legend line width 70*8caefee3SMatthias Ringwald 71*8caefee3SMatthias Ringwald for line in ax.get_lines(): 72*8caefee3SMatthias Ringwald line.set_linewidth(1.5) 73*8caefee3SMatthias Ringwald 74*8caefee3SMatthias Ringwald fig.suptitle(title, fontsize=12) 75*8caefee3SMatthias Ringwald ax.text(400, 5000, annotation , style='italic', 76*8caefee3SMatthias Ringwald bbox={'facecolor':'gray', 'alpha':0.5, 'pad':10}) 77*8caefee3SMatthias Ringwald 78*8caefee3SMatthias Ringwald #plt.show() 79*8caefee3SMatthias Ringwald pp = PdfPages(fig_name) 80*8caefee3SMatthias Ringwald pp.savefig(fig) 81*8caefee3SMatthias Ringwald pp.close() 82*8caefee3SMatthias Ringwald 83*8caefee3SMatthias Ringwald return fig 84*8caefee3SMatthias Ringwald 85*8caefee3SMatthias Ringwalddef mean_common_len(data): 86*8caefee3SMatthias Ringwald mcl = 0 87*8caefee3SMatthias Ringwald for i in range(len(data) - 1): 88*8caefee3SMatthias Ringwald if len(data[i]) > 0: 89*8caefee3SMatthias Ringwald if mcl == 0: 90*8caefee3SMatthias Ringwald mcl = len(data[i]) 91*8caefee3SMatthias Ringwald else: 92*8caefee3SMatthias Ringwald mcl = min(mcl, len(data[i])) 93*8caefee3SMatthias Ringwald return mcl 94*8caefee3SMatthias Ringwald 95*8caefee3SMatthias Ringwalddef mean_common_time(data): 96*8caefee3SMatthias Ringwald mct = 0 97*8caefee3SMatthias Ringwald for i in range(len(data) - 1): 98*8caefee3SMatthias Ringwald if len(data[i]) > 0: 99*8caefee3SMatthias Ringwald if mct == 0: 100*8caefee3SMatthias Ringwald mct = max(data[i]) 101*8caefee3SMatthias Ringwald else: 102*8caefee3SMatthias Ringwald mct = min(mct, max(data[i])) 103*8caefee3SMatthias Ringwald return mct 104*8caefee3SMatthias Ringwald 105*8caefee3SMatthias Ringwalddef normalize(s): 106*8caefee3SMatthias Ringwald return map(lambda x: (x - s[0]), s) 107*8caefee3SMatthias Ringwald 108*8caefee3SMatthias Ringwalddef delta(s): 109*8caefee3SMatthias Ringwald rs = list() 110*8caefee3SMatthias Ringwald for i in range(len(s)-1): 111*8caefee3SMatthias Ringwald rs.append(s[i+1] - s[i]) 112*8caefee3SMatthias Ringwald return rs 113*8caefee3SMatthias Ringwald 114*8caefee3SMatthias Ringwalddef round(s): 115*8caefee3SMatthias Ringwald return map(lambda x: "{0:.4f}".format(x), s) 116*8caefee3SMatthias Ringwald 117*8caefee3SMatthias Ringwalddef cut(s, V): 118*8caefee3SMatthias Ringwald r = list() 119*8caefee3SMatthias Ringwald for i in range(len(s)): 120*8caefee3SMatthias Ringwald if s[i] <= V: 121*8caefee3SMatthias Ringwald r.append(s[i]) 122*8caefee3SMatthias Ringwald return r 123*8caefee3SMatthias Ringwald 124*8caefee3SMatthias Ringwalddef prepare_data(exp_name, sensor_name): 125*8caefee3SMatthias Ringwald prefix = '../data/processed/' 126*8caefee3SMatthias Ringwald 127*8caefee3SMatthias Ringwald scanning_type = exp_name+'_continuous' 128*8caefee3SMatthias Ringwald mn = cPickle.load(open(prefix+scanning_type+'_mac_'+sensor_name+'.data', 'rb')) # mac nio, 129*8caefee3SMatthias Ringwald mm = cPickle.load(open(prefix+scanning_type+'_mac_mac.data', 'rb')) # mac mac, 130*8caefee3SMatthias Ringwald rn = cPickle.load(open(prefix+scanning_type+'_rug_'+sensor_name+'.data', 'rb')) # ruggear nio, 131*8caefee3SMatthias Ringwald rm = cPickle.load(open(prefix+scanning_type+'_rug_mac.data', 'rb')) # ruggear mac, 132*8caefee3SMatthias Ringwald 133*8caefee3SMatthias Ringwald scanning_type = exp_name+'_normal' 134*8caefee3SMatthias Ringwald try: 135*8caefee3SMatthias Ringwald normal_rn = cPickle.load(open(prefix + scanning_type+'_rug_'+sensor_name+'.data', 'rb')) # ruggear mac, normal 136*8caefee3SMatthias Ringwald except: 137*8caefee3SMatthias Ringwald normal_rn = list() 138*8caefee3SMatthias Ringwald 139*8caefee3SMatthias Ringwald try: 140*8caefee3SMatthias Ringwald normal_mn = cPickle.load(open(prefix + scanning_type+'_mac_'+sensor_name+'.data', 'rb')) # ruggear mac, normal 141*8caefee3SMatthias Ringwald except: 142*8caefee3SMatthias Ringwald normal_mn = list() 143*8caefee3SMatthias Ringwald 144*8caefee3SMatthias Ringwald try: 145*8caefee3SMatthias Ringwald normal_rm = cPickle.load(open(prefix + scanning_type+'_rug_mac.data', 'rb')) # ruggear mac, normal 146*8caefee3SMatthias Ringwald except: 147*8caefee3SMatthias Ringwald normal_rm = list() 148*8caefee3SMatthias Ringwald 149*8caefee3SMatthias Ringwald try: 150*8caefee3SMatthias Ringwald normal_mm = cPickle.load(open(prefix + scanning_type+'_mac_mac.data', 'rb')) # ruggear mac, normal 151*8caefee3SMatthias Ringwald except: 152*8caefee3SMatthias Ringwald normal_mm = list() 153*8caefee3SMatthias Ringwald 154*8caefee3SMatthias Ringwald 155*8caefee3SMatthias Ringwald T = mean_common_time([mm, mn, rm, rn, normal_rm, normal_rn, normal_mm, normal_mn]) 156*8caefee3SMatthias Ringwald L = mean_common_len([mm, mn, rm, rn, normal_rm, normal_rn, normal_mm, normal_mn]) 157*8caefee3SMatthias Ringwald Z = 15 158*8caefee3SMatthias Ringwald 159*8caefee3SMatthias Ringwald print "mct %d, mcl %d" % (T,L) 160*8caefee3SMatthias Ringwald mac_mac = normalize(mm) 161*8caefee3SMatthias Ringwald mac_nio = normalize(mn) 162*8caefee3SMatthias Ringwald ruggeer_mac = normalize(rm) 163*8caefee3SMatthias Ringwald ruggeer_nio = normalize(rn) 164*8caefee3SMatthias Ringwald 165*8caefee3SMatthias Ringwald ruggeer_nio_normal = normalize(normal_rn) 166*8caefee3SMatthias Ringwald ruggeer_mac_normal = normalize(normal_rm) 167*8caefee3SMatthias Ringwald mac_mac_normal = normalize(normal_mm) 168*8caefee3SMatthias Ringwald mac_nio_normal = normalize(normal_mn) 169*8caefee3SMatthias Ringwald 170*8caefee3SMatthias Ringwald 171*8caefee3SMatthias Ringwald delta_mn = delta(mac_nio) 172*8caefee3SMatthias Ringwald delta_mm = delta(mac_mac) 173*8caefee3SMatthias Ringwald delta_rn = delta(ruggeer_nio) 174*8caefee3SMatthias Ringwald delta_rm = delta(ruggeer_mac) 175*8caefee3SMatthias Ringwald 176*8caefee3SMatthias Ringwald rn_delays = list() 177*8caefee3SMatthias Ringwald for i in range(len(delta_rn)): 178*8caefee3SMatthias Ringwald rn_delays.append(range(delta_rn[i])) 179*8caefee3SMatthias Ringwald 180*8caefee3SMatthias Ringwald flattened_rn_delays = list(itertools.chain.from_iterable(rn_delays)) 181*8caefee3SMatthias Ringwald 182*8caefee3SMatthias Ringwald plot_data = [cut(mac_mac,T), cut(mac_nio,T), cut(ruggeer_mac,T), cut(ruggeer_nio,T)] 183*8caefee3SMatthias Ringwald plot_data_normal = [cut(mac_mac_normal,T), cut(mac_nio_normal,T), cut(ruggeer_mac_normal,T), cut(ruggeer_nio_normal,T)] 184*8caefee3SMatthias Ringwald 185*8caefee3SMatthias Ringwald hist_data = [delta_mm[0:L], delta_mn[0:L], delta_rm[0:L], delta_rn[0:L]] 186*8caefee3SMatthias Ringwald 187*8caefee3SMatthias Ringwald zoomed_hist_data = list() 188*8caefee3SMatthias Ringwald if len(hist_data[0]) >= Z and len(hist_data[1]) >= Z and len(hist_data[2]) >= Z and len(hist_data[3]) >= Z : 189*8caefee3SMatthias Ringwald zoomed_hist_data = [cut(hist_data[0],Z), cut(hist_data[1],Z), cut(hist_data[2],Z), cut(hist_data[3],Z)] 190*8caefee3SMatthias Ringwald 191*8caefee3SMatthias Ringwald return [plot_data, hist_data, zoomed_hist_data, flattened_rn_delays, plot_data_normal] 192*8caefee3SMatthias Ringwald 193*8caefee3SMatthias Ringwalddef plot(exp_name, sensor_name, sensor_title, prefix): 194*8caefee3SMatthias Ringwald [plot_data, hist_data, zoomed_hist_data, rn_delays, plot_data_normal] = prepare_data(exp_name, sensor_name) 195*8caefee3SMatthias Ringwald labels = ['Scan. BCM, Adv. BCM', 'Scan. BCM, Adv. '+ sensor_title, 'Scan. RugGear, Adv. BCM', 'Scan. RugGear, Adv. '+sensor_title] 196*8caefee3SMatthias Ringwald plot_colors = ['r-','k-','b-','g-'] 197*8caefee3SMatthias Ringwald hist_colors = ['red','black','blue','green'] 198*8caefee3SMatthias Ringwald 199*8caefee3SMatthias Ringwald title = 'Continuous scanning over time' 200*8caefee3SMatthias Ringwald annotation = 'scan window 30ms, scan interval 30ms' 201*8caefee3SMatthias Ringwald 202*8caefee3SMatthias Ringwald x_label = 'Time [s]' 203*8caefee3SMatthias Ringwald y_label = 'Number of advertisements' 204*8caefee3SMatthias Ringwald accplot(plot_data, labels, plot_colors, x_label, y_label, title, prefix+sensor_name+'_acc_number_of_advertisements_continuous_scanning.pdf', annotation) 205*8caefee3SMatthias Ringwald 206*8caefee3SMatthias Ringwald x_label = 'Time interval between two advertisements [s]' 207*8caefee3SMatthias Ringwald title = 'Continuous scanning - interval distribution' 208*8caefee3SMatthias Ringwald histplot(hist_data, labels, hist_colors, x_label, y_label, title, prefix+sensor_name+'_histogram_advertisements_time_delay.pdf', 0) 209*8caefee3SMatthias Ringwald 210*8caefee3SMatthias Ringwald 211*8caefee3SMatthias Ringwald #if len(zoomed_hist_data) > 0: 212*8caefee3SMatthias Ringwald # title = 'Continuous scanning - interval distribution [0-15s]' 213*8caefee3SMatthias Ringwald # histplot(zoomed_hist_data, labels, hist_colors, x_label, y_label, title, prefix+sensor_name+'_histogram_advertisements_time_delay_zoomed.pdf', 0) 214*8caefee3SMatthias Ringwald 215*8caefee3SMatthias Ringwald title = 'Continuous scanning - expected waiting time' 216*8caefee3SMatthias Ringwald x_label = 'Expected waiting time until first scan [s]' 217*8caefee3SMatthias Ringwald [n, bins, patches] = histplot([rn_delays], [labels[3]], [hist_colors[3]], x_label, y_label, title, prefix+sensor_name+'_ruggear_expected_scan_response.pdf', 0) 218*8caefee3SMatthias Ringwald 219*8caefee3SMatthias Ringwald title = 'Continuous scanning - expected waiting time probability distribution' 220*8caefee3SMatthias Ringwald y_label = 'Advertisement probability' 221*8caefee3SMatthias Ringwald x_label = 'Time until first scan [s]' 222*8caefee3SMatthias Ringwald [n, bins, patches] = histplot([rn_delays], [labels[3]], [hist_colors[3]], x_label, y_label, title, prefix+sensor_name+'_ruggear_cdf.pdf', 1) 223*8caefee3SMatthias Ringwald 224*8caefee3SMatthias Ringwald 225*8caefee3SMatthias Ringwald title = 'Normal scanning over time' 226*8caefee3SMatthias Ringwald annotation = 'scan window 30ms, scan interval 300ms' 227*8caefee3SMatthias Ringwald 228*8caefee3SMatthias Ringwald x_label = 'Time [s]' 229*8caefee3SMatthias Ringwald y_label = 'Number of advertisements' 230*8caefee3SMatthias Ringwald accplot(plot_data_normal, labels, plot_colors, x_label, y_label, title, prefix+sensor_name+'_acc_number_of_advertisements_normal_scanning.pdf', annotation) 231*8caefee3SMatthias Ringwald 232*8caefee3SMatthias Ringwald 233*8caefee3SMatthias Ringwaldpicts_folder = "../picts_experiments/" 234*8caefee3SMatthias Ringwaldif not os.access(picts_folder, os.F_OK): 235*8caefee3SMatthias Ringwald os.mkdir(picts_folder) 236*8caefee3SMatthias Ringwald 237*8caefee3SMatthias Ringwaldplot('exp1','nio', 'Nio', picts_folder) 238*8caefee3SMatthias Ringwaldplot('exp2','xg2', 'XG', picts_folder) 239