In [1]:
import numpy as np
import pandas as pd
In [95]:
def extract_script_info(df_s, n):
info = {}
script = df_s["s"]
# prepare info vars
nM = 0
nS = 0
nI = 0
nD = 0
j_cross = -1
Delta = -1
cell = [0,0]
# True when border is hit
ins_on_border = 0
# compute info
for s in script:
if (cell[0] == int(n/2)-1 and s != 'I'):
nextD = int(s == 'D')
j_cross = cell[1] + 1 - nextD
info["DI_half"] = nD + nextD - nI
if (s == "M"):
nM += 1
cell[0] += 1
cell[1] += 1
if (s == "S"):
nS += 1
cell[0] += 1
cell[1] += 1
if (s == "D"):
nD += 1
cell[0] += 1
if (s == "I"):
if (cell[0] == int(n/2)):
ins_on_border += 1
nI += 1
cell[1] += 1
# construct info dictionary
info["nM"] = nM
info["nS"] = nS
info["nD"] = nD
info["nI"] = nI
info["d"] = nS + nD + nI
info["d1"] = df_s["d1"]
info["d2"] = df_s["d2"]
info["edges"] = nS + nD + nI + nM
info["j_cross"] = j_cross
info["border_I"] = ins_on_border
if (j_cross <= int(n/2)):
Delta = int(n/2) - min(j_cross + ins_on_border, int(n/2))
else:
Delta = int(n/2) - max(j_cross - ins_on_border, int(n/2))
info["Delta"] = Delta
return info
In [96]:
def infos_on_file(file_name):
info_df = pd.DataFrame()
df = pd.read_csv(file_name)
n = len(df.loc[0].x)
for i in df.index:
info_df = info_df.append(pd.DataFrame(extract_script_info(df.loc[i],n), index=[i]))
return info_df
In [97]:
info_64 = infos_on_file("/tmp/Delta64.csv")
info_256 = infos_on_file("/tmp/Delta256.csv")
info_1024 = infos_on_file("/tmp/Delta1024.csv")
info_4096 = infos_on_file("/tmp/Delta4096.csv")
In [98]:
info_64["G"] = info_64["d1"] + info_64["d2"] - info_64["d"]
info_256["G"] = info_256["d1"] + info_256["d2"] - info_256["d"]
info_1024["G"] = info_1024["d1"] + info_1024["d2"] - info_1024["d"]
info_4096["G"] = info_4096["d1"] + info_4096["d2"] - info_4096["d"]
info_64["AbsDelta"] = info_64["Delta"].abs()
info_256["AbsDelta"] = info_256["Delta"].abs()
info_1024["AbsDelta"] = info_1024["Delta"].abs()
info_4096["AbsDelta"] = info_4096["Delta"].abs()
In [99]:
print("64 {0:.6f}".format(info_64.AbsDelta.mean()))
print("256 {0:.6f}".format(info_256.AbsDelta.mean()))
print("1024 {0:.6f}".format(info_1024.AbsDelta.mean()))
print("4096 {0:.6f}".format(info_4096.AbsDelta.mean()))
In [100]:
(info_256/256).describe()
Out[100]:
In [101]:
(info_1024).describe()
Out[101]:
In [108]:
info_4096["DI_abs"] = info_4096["DI_half"].abs()
info_4096[["Delta","DI_half","AbsDelta", "DI_abs", "nD"]].describe()
Out[108]:
In [ ]: