Commit bab40441 authored by Peter Jansweijer's avatar Peter Jansweijer

added statistics and figure output

parent fe5e9869
......@@ -37,9 +37,59 @@ import sys
import numpy
import scipy
import time
import matplotlib.pyplot as plt
import pdb
############################################################################
def save_plot(out_file, name, nameref, measurement_str, measurement_lst, outliers):
"""
outfile <file> handle to outfput file
name <str> name of the input file (with fiber spool PPS skew measurements)
nameref <str> name of the input file (with reference setup PPS skew measurements)
measurement_str <str> processed measurement
measurement_lst <list> list of PPS skew measurements (from multiple link restarts)
outliers <int> number of outliers encountered while processing
"""
meas_arr= numpy.array(measurement_lst)
mean = meas_arr.mean()
stdev = meas_arr.std(ddof=1)
out_file.write("outliers: " + str(outliers) + "\n")
out_file.write("mean: " + str(mean) + "\n")
out_file.write("stdev: " + str(stdev) + "\n")
fig = plt.figure("PPS_skew_fiberspool - PPS_skew_reference [ps]")
ax = fig.add_subplot(111)
ax.set_ylabel('PPS difference [ps]')
ax.set_title("PPS_skew_fiberspool - PPS_skew_reference [ps]")
ax.set_xlabel('Link restart number')
measurement_str_shortend = measurement_str.replace("# Selected ITU channel for ","")
measurement_str_shortend = measurement_str_shortend.replace("\n","")
fig_str = measurement_str_shortend + "\n" + "file: "+name + "\n" + "ref file: "+nameref + "\n" + "outliers: " + str(outliers) + "\n" + "mean: " + str(mean) + "\n" +"stdev: " + str(stdev)
ax.text(0.01, 0.70, fig_str, transform=ax.transAxes)
ax.plot(range(1,len(meas_arr)+1), meas_arr, color = 'blue', label='data')
png_name = measurement_str_shortend.replace("[","")
png_name = png_name.replace("]","")
png_name = png_name.replace("(","")
png_name = png_name.replace(")","")
png_name = png_name.replace(":","")
png_name = png_name.replace(",","")
png_name = png_name.replace(" ","_")
png_name = png_name.replace("->","2")
fig.savefig(output_dir+png_name+".png")
fig.clf() # clear figure (it was stored in a png file)
return
############################################################################
###############################################
# Main
###############################################
......@@ -113,11 +163,15 @@ if __name__ == "__main__":
out_file = open(filename,"w")
out_file.write("# Difference results for {Delta Delay measurements fiber spool} - {Delta Delay measurements reference setup}\n")
out_file.write("# file: "+name + "\n")
out_file.write("# ref file: "+nameref + "\n")
out_file.write("# date:"+time.strftime(format("%d %b %Y"),timestamp)+"\n")
out_file.write("# time:"+time.strftime(format("%H:%M:%S"),timestamp)+"\n")
out_file.write("# diff_delta delay, StdDev, measurement\n")
measurement_str = ""
first = True
tolerance = 1e-9 # fix tolerance for outliers at 1 ns for the moment.
while 1:
line_meas = meas_out_file.readline()
......@@ -125,8 +179,19 @@ if __name__ == "__main__":
if (line_meas[:len("#")] != "#" and line_ref[:len("#")] == "#") or (line_meas[:len("#")] == "#" and line_ref[:len("#")] != "#"): # one file has comment while the other not
print(name + " and " + nameref + " comment lines in measurement files do not align.")
sys.exit()
if line_meas[:len("# Selected")] == "# Selected" and line_ref[:len("# Selected")] == "# Selected": # Check if both comments are the same
# Check if both comments are the same and start with "# Selected"
# If both are the same then a log of a new measurement starts => restart statistics
if line_meas[:len("# Selected")] == "# Selected" and line_ref[:len("# Selected")] == "# Selected":
last_measurement_str = measurement_str
measurement_str = line_meas
if not first:
save_plot(out_file, name, nameref, last_measurement_str, measurement_lst, outliers)
# restart statistics
first = False
measurement_lst = []
outliers = 0
if line_meas != line_ref:
print(name + " and " + nameref + " measurements in files do not align.")
sys.exit()
......@@ -137,12 +202,20 @@ if __name__ == "__main__":
if len(meas_lst) < 3 or len(ref_lst) < 3:
break
meas_diff = float(meas_lst[0]) - float(ref_lst[0])
meas_std = numpy.sqrt( float(meas_lst[1])**2 + float(ref_lst[1])**2)
print(meas_lst[0],ref_lst[0], meas_diff)
if abs(meas_diff) < tolerance:
meas_std = numpy.sqrt( float(meas_lst[1])**2 + float(ref_lst[1])**2)
measurement_lst. append(meas_diff)
else:
outliers = outliers + 1
#print(meas_lst[0],ref_lst[0], meas_diff)
out_file.write(str(meas_diff)+", "+str(meas_std)+", "+str(measurement_str))
# end of files, write last data
save_plot(out_file, name, nameref, measurement_str, measurement_lst, outliers)
meas_out_file.close()
meas_ref_file.close()
out_file.close()
sys.exit()
\ No newline at end of file
sys.exit()
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment