Discharge/DischargeDatabase/Examples/22813/includes/analysis/ParticleFlux/0616ReynoldsStressOG.ON/main.py

import re
import numpy as np
import matplotlib
matplotlib.rcParams['backend'] = 'Agg'
import matplotlib.pyplot as plt
from pygolem_lite import Shot

def get_r_a1(shot):
    comment = shot['wwwcomment']
    match = re.match('.*r_a1 = (\\S+) mm.*', comment)
    try:
        return float(match.group(1))
    except Exception as e:
        print e
        return 0


if __name__ == '__main__':
    shot = Shot()
    t, data = shot['papouch_ko']
    try:
        _, data_2 = shot['papouch_za']
        data = np.hstack((data, data_2[:,:4]))
    except Exception as e:
        print e
    t_start = shot['plasma_start']
    t_end = shot['plasma_end']
    stationary_window = np.logical_and(t_start + 5e-3 <= t,
                                       t <= t_end - 3e-3)
    data = data[stationary_window,:]
    channels = data.shape[1]
    a_idx = np.arange(0, channels, 2)
    b_idx = a_idx + 1
    E_pol = data[:,a_idx] - data[:,b_idx]
    E_pol = (E_pol[:,1:] + E_pol[:,:-1]) / 2.0 # center out
    E_rad = (data[:,a_idx] + data[:,b_idx]) / 2.0
    E_rad = E_rad[:,:-1] - E_rad[:,1:]
    R_e = E_rad * E_pol
    R_e_m = np.mean(R_e, axis=0)
    R_e_std = np.std(R_e, axis=0)

    r_a1 = get_r_a1(shot)
    r = r_a1 + np.arange(R_e_m.shape[0]) * 2.5 + 1.25 # centered
    plt.errorbar(r, R_e_m, R_e_std, fmt='--')
    plt.xlabel('$r$ [mm]')
    plt.ylabel('$\\propto \langle E_\\theta E_r \\rangle$')
    plt.grid(True)
    plt.axvline(85, color='r', linestyle='--', linewidth=2, label='limiter')
    plt.savefig('plot.png')
    print np.min(R_e_m)