import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
def set_peak(*ags, **kws):
data_element = Element('input-data')
data = data_element.element.value
data = data.split('\n')
if data == ['']:
return
li = []
for row in data:
if row == '':
pass
elif row[0] == '#':
li.append(row.replace('\n','').replace('\r',''))
else:
row = row.replace('\n','').split('\t')
row = row[1:3]
row[0] = float(format(float(row[0]), '.1f'))
row[1] = float(format(float(row[1]), '.5f'))
li.append(row)
t = eval(Element('sampling-time').element.value)
df = pd.DataFrame({'RT': (np.arange(0, 151, 1)/10)}).set_index('RT')
x = 0
for i in li:
if i[0] == '#':
x += 1
df[f'{t[x-1]}'] = 0
else:
df.at[i[0], f'{t[x-1]}'] = i[1]
co = eval(Element('comp-list').element.value)
df['co'] = None
for i in co:
df.loc[i[1]:i[2],'co'] = i[0]
return df
# Element('test').write(df[df.iloc[:,:-1].sum(axis=1) != 0])
def create_table(df, *ags, **kws):
co = eval(Element('comp-list').element.value)
tb = []
for i in co:
tb.append(df[df['co'] == i[0]].iloc[:,0:-1].sum().rename(i[0]))
return tb
def calc_conc(tb, *ags, **kws):
co = eval(Element('comp-list').element.value)
tb_conc = []
for j in tb:
for i in co:
if i[0] == j.name:
tb_conc.append(j/i[3])
return tb_conc
def plot_fig(tb_conc, *ags, **kws):
co = eval(Element('comp-list').element.value)
title = Element('data-title').element.value
fig = plt.figure(figsize=(8, 5))
fig.subplots_adjust(bottom=0.18)
plt.rcParams['font.size'] = 15
plt.rcParams['legend.fontsize'] = 18
plt.rcParams['xtick.direction'] = 'out'
plt.rcParams['ytick.direction'] = 'out'
ax = plt.gca()
ax.set_title(title, pad = 15)
plt.xlabel('Time (h)', labelpad = 10)
plt.ylabel('Concentration (mM)', labelpad = 10)
for i in tb_conc:
if sum(i) != 0:
i_index = i.index.to_list()
color = 'black'
for j in co:
if j[0] == i.name:
color = j[4]
ax.plot(i_index, i, label=i.name, marker='o', markersize=10, color=color)
ax.legend()
Element('plot').write(fig)
# plt.savefig('plot.png', dpi = 300, pad_inches = .1, bbox_inches = 'tight')
def hplc_analysis(*ags, **kws):
df = set_peak()
tb = create_table(df)
tb_conc = calc_conc(tb)
plot_fig(tb_conc)
def data_preview(*ags, **kws):
data_element = Element('input-data')
data = data_element.element.value
Element('data-preview').write(data)
button_analysis = Element('analysis')
button_analysis.element.onclick = hplc_analysis
button_check = Element('data-check')
button_check.element.onclick = data_preview
button_analysis.element.disabled = False
button_check.element.disabled = False