import numpy as np
import matplotlib.pyplot as plt
import requests
from scipy import integrate, signal, interpolate
import pandas as pd
import os
def remove_old(name):
if os.path.exists(name):
os.remove(name)
names = ['analysis.html', 'scan.html', 'icon.html', 'icon-fig.png','IexStab.png']
for name in names:
remove_old(name)
ds = np.DataSource()
shot_no=0
def open_remote(shot_no, identifier, url_template):
return ds.open(url_template.format(shot_no=shot_no, identifier=identifier))
def read_signal(shot_no, identifier, url, data_type='csv'):
file = open_remote(shot_no, identifier, url)
if data_type == 'lvm':
channels = channels = ['Time', 'mc1','mc5','mc9','mc13','Saddle','InnerQuadr', 'mc_out','IexStab','9', '10', '11', '12']
return pd.read_table(file, sep = '\t', names=channels)
else:
return pd.read_csv(file, names=['Time', identifier],
index_col = 'Time', squeeze=True)
def remove_offset(data, window):
data-=data.loc[:window].mean()
return data
def smooth(data,win=41):
smooth_data = signal.savgol_filter(data, win, 3)
return smooth_data
url='http://golem.fjfi.cvut.cz/shots/%i/Diagnostics/LimiterMirnovCoils/plasma_position.csv'%shot_no
try:
tab=ds.open(url)
df=pd.read_csv(tab)
end=df['Time'].iat[-1]
start=df['Time'].iat[0]
df=df.set_index('Time')
mirnov=True
except OSError:
mirnov=False
try:
url_U = "http://golem.fjfi.cvut.cz/shots/%i/Devices/Oscilloscopes/RigolMSO5104-a/ch2" %shot_no
url_I = "http://golem.fjfi.cvut.cz/shots/%i/Devices/Oscilloscopes/RigolMSO5104-a/ch4" %shot_no
U_exStab = read_signal(shot_no, 'U_fg', url_U)
dt = 2 #time scale setting on the oscilloscope (...ms per window)
t_osc = pd.Series(np.linspace(0,dt*10, len(U_exStab))).rename('Time')
U_exStab = pd.Series(smooth(U_exStab.index[:]), index = t_osc)
kI=1/0.005
RogCoil = read_signal(shot_no, 'I_fg', url_I)
I_exStab = pd.Series(smooth(RogCoil.index[:]*kI), index = t_osc)
exStab=True
except OSError:
exStab=False
print('External Stabilization:', exStab)
if exStab==True and mirnov==True:
IexStab_cut = I_exStab.loc[start:end]
UexStab_cut = U_exStab.loc[start:end]
df_processed = pd.concat([df, IexStab_cut.rename('I_exStab'), UexStab_cut.rename('U_exStab')], axis='columns')
#replace NaN value
k_I = 0
k_U = 0
for i in range(len(df_processed['I_exStab'])):
if not np.isnan(df_processed['I_exStab'].iat[i]):
k_I = df_processed['I_exStab'].iat[i]
k_U = df_processed['U_exStab'].iat[i]
else:
df_processed['I_exStab'].iat[i]=k_I
df_processed['U_exStab'].iat[i]=k_U
elif mirnov==True:
df_processed = df
# df_processed
External Stabilization: False
import holoviews as hv
hv.extension('bokeh')
import hvplot.pandas
if mirnov== True:
hline = hv.HLine(0)
hline.opts(color='k', line_dash='dashed', alpha = 0.4, line_width=1.0)
if exStab==True:
ax_param=dict(ylim=(-85, 85),height=250,width=600, grid = True)
axI_param=dict(title = '',ylabel='I_exStab [A]', xlabel='Time [ms]', yaxis='left', height=250, width=600,
color='r', ylim=(-max(abs(df_processed['I_exStab']))-1.5,max(abs(df_processed['I_exStab']))+1.5),grid=True)
plot = df_processed['r'].hvplot(title = '', ylabel='r [mm]/ I[A]', xlabel='', **ax_param) *\
df_processed['I_exStab'].hvplot(**axI_param)+\
df_processed['z'].hvplot(title = '',ylabel='z [mm] / I[A]', xlabel='Time [ms]', **ax_param) *\
df_processed['I_exStab'].hvplot(**axI_param)+\
df_processed['a'].hvplot(title = '',ylabel='a[mm]/ I[A]', xlabel='Time [ms]', **ax_param) *\
df_processed['I_exStab'].hvplot(**axI_param)
plot=plot*hline
plot.cols(2)
else:
layout = hv.Layout([df_processed[v].hvplot.line(
xlabel='', ylabel=l,ylim=(-85,85), xlim=(start,end),legend=False, title='', grid=True, group_label=v)
for (v, l) in [('r', ' r [mm]'), ('z', 'z [mm]'), ('a', 'a [mm]')] ])*hline
plot=layout.cols(1).opts(hv.opts.Curve(width=600, height=200), hv.opts.Curve('a', xlabel='time [ms]'))
hvplot.save(plot, 'icon.html')
# plot