def get_shock_position(d):
    if (d['pres'].max() - d['pres'].min()) / d['pres'].mean() < 0.2:
        return np.nan
    else:
        idx = np.nanargmin(
            savgol(d['x'], d['pres'], window_size=5, order=2, deriv=1))
        return d['x'][idx]
def get_shock_position(d):
    if (d['pres'].max() - d['pres'].min())/d['pres'].mean() < 0.2:
        return np.nan
    else:
        idx = np.nanargmin(savgol( d['x'], d['pres'], window_size=5, order=2, deriv=1))
        return d['x'][idx]
#t,x = np.array(storage.values()).T
state0 = []
state1 = []
for val0, val1 in storage.values():
    state0.append(val0)
    state1.append(val1)

df0 = pd.DataFrame(state0)
df1 = pd.DataFrame(state1)


fig = plt.figure(figsize=(20,4))
ax = [plt.subplot(1,4,idx+1) for idx in range(4)]

for dfi in [df0,df1]:
    dfi['u_s'] = savgol(np.array(dfi['t']), np.array(dfi['x']), window_size=5, order=2, deriv=1)*1e4
ax[0].plot(df0['t'],df0['u_s'], '--o')
ax[1].plot(df0['t'],df0['dens'], '--o')
ax[2].plot(df0['t'],df0['tele'], '--o')
ax[3].plot(df0['t'],df0['pres'], '--o')

idx_st = np.nanargmax(df0['x'])
for df_idx, df in enumerate([df0, df1]):
    for key in ['tele', 'tion', 'trad', 'pres', 'pele', 'pion', 'velx', 'dens']:
        res['{}_{}'.format(key, df_idx)] = np.array(df[key])[idx_st-4]
mask = slice(idx_st-17,idx_st-7)
res['u_s'] = np.median(np.array(df0['u_s'])[mask])
ax[0].plot(df0['t'][mask],df0['u_s'][mask], 'ro')

if not os.path.exists('yt-viz/out/{0}'.format(EOS_TABLE)):
    os.mkdir('yt-viz/out/{0}'.format(EOS_TABLE))
state0 = []
state1 = []
for val0, val1 in storage.values():
    state0.append(val0)
    state1.append(val1)

df0 = pd.DataFrame(state0)
df1 = pd.DataFrame(state1)

fig = plt.figure(figsize=(20, 4))
ax = [plt.subplot(1, 4, idx + 1) for idx in range(4)]

for dfi in [df0, df1]:
    dfi['u_s'] = savgol(np.array(dfi['t']),
                        np.array(dfi['x']),
                        window_size=5,
                        order=2,
                        deriv=1) * 1e4
ax[0].plot(df0['t'], df0['u_s'], '--o')
ax[1].plot(df0['t'], df0['dens'], '--o')
ax[2].plot(df0['t'], df0['tele'], '--o')
ax[3].plot(df0['t'], df0['pres'], '--o')

idx_st = np.nanargmax(df0['x'])
for df_idx, df in enumerate([df0, df1]):
    for key in [
            'tele', 'tion', 'trad', 'pres', 'pele', 'pion', 'velx', 'dens'
    ]:
        res['{}_{}'.format(key, df_idx)] = np.array(df[key])[idx_st - 4]
mask = slice(idx_st - 17, idx_st - 7)
res['u_s'] = np.median(np.array(df0['u_s'])[mask])