#!/usr/bin/python2 # -*- coding: utf-8 -*- """ CREATED: 7/2012 AUTHOR: MICHAL ODSTRČIL """ import matplotlib matplotlib.rcParams['backend'] = 'Agg' matplotlib.rc('font', size='10') matplotlib.rc('text', usetex=True) # FIXME !! nicer but slower !!! import pygolem_lite from pygolem_lite import Shot from numpy import * from pygolem_lite.config import * from pygolem_lite.modules import * from matplotlib.pyplot import * import time from shutil import copy, move import os from scipy.interpolate import interp1d def analysis(): #pass try: data = Shot() I = data['plasma_current_mean'] * 1e-6 Bt = data['toroidal_field_mean'] P = data['input_power_mean']*1e-3 n = data['electron_density_mean'] * 1e-19 M = 1 # hydrogen !! R = MajorRadius eps = Aspect kappa = 1 const = 5.62e-2 print "I", I print "B", Bt print "P", P print "n", n print "R", R print "Aspect", Aspect t_98 = const*I**0.93*Bt**0.15*P**-0.69*n**0.41*M**0.18*R**1.97*eps**0.58*kappa**0.78 print "confinent time = ", t_98 * 1e6 saveconst('t_98', t_98) except Exception, e: print " confinent time failed ", str(e) def plot_data(ftype): data = Shot() plasma = data['plasma'] start = data['plasma_start'] end = data['plasma_end'] tvec,_ = data['plasma_current'] ind_plasma = (tvec > start) & ( tvec < end) nGW_limit = 3 # n/nGW < 3 calb_photo = 10 if data.shot_num < 10025 else 30 # guess of absolute calbration of photodiode !! if not plasma: if not data.exist('current_cd_coils'): return t_cd, I_cd = data['current_cd_coils'] # current drive coils current #plot(t_cd, I_cd) #savefig('I_cd.png') #clf() _, I_cd, _ = DiffFilter(I_cd, mean(diff(t_cd)), 1000, 1e2) # smooth the data t_PHI, PHI = data['total_magnetic_flux'] I_cd = interp(t_PHI, t_cd, squeeze(I_cd), left=0, right=0) data = [[get_data('total_magnetic_flux', 'Total magnetic flux $\Phi$', '$\Psi$ [Vs]', xlim = [0, 40], reduction = True), get_data([array([0, 40])*1e-3, ones(2)*MaxTransformatorSaturation], 'Max saturation', '$\Psi$ [Vs]' , ylim = [0,0.18], xlim = [0, 40], reduction = True)], get_data( [t_PHI, I_cd] , 'Current drive I', 'I [A]', xlabel = 'Time [ms]', xlim = [0, 40], tvec_rescale=1e3), ] paralel_multiplot(data, 'Total magnetic flux', 'magnetic_flux', (9,6), file_type = ftype) plot( I_cd,PHI) #plot( PHI) savefig('I.png') clf() data = get_data( [I_cd, PHI ] , 'Hysteresis curve', '$\Phi$ [Vs]', xlabel = 'I [A]',xlim=[amin(I_cd), amax(I_cd)], plot_limits = False, tvec_rescale=1) paralel_multiplot(data, 'Hysteresis curve', 'hysteresis', (9,3), file_type = ftype) paralel_multiplot(data, "" , 'icon', (4,3), 40) return t0 = time.time() tvec, safety_factor = Shot()['safety_factor'] try: ne_corr = r0/a*(pos_part(1-R/r0))**1.5 except: tvec_n_e = tvec allow_corr = False # allow correction of plasma possition try: tvec_r, plasma_radius = Shot()['plasma_radius'] reliability = Shot()['plasma_position:reliability'] assert reliability < 600, "Unreliable plasma position" plasma_radius_f = interp1d(tvec_r, plasma_radius, fill_value = 0, bounds_error = False) corr = (plasma_radius_f(tvec) / MeanPlasmaRadius ) ** 2 # corrected for plasma readius plot(tvec, corr) savefig('corr.png') close() corr[ corr < 0.3 ] = nan print "======= mean(isnan(corr)) ", mean(isnan(corr[ind_plasma])) if mean(isnan(corr[ind_plasma])) > 0.3: del corr else: allow_corr = True except Exception, e: print "correction on plasma position failed", str(e) allow_corr = False _, nGW = Shot()['greenwald_density'] nGW_med = max(nGW[ind_plasma]) try: tvec_n_e, n_e = Shot()['electron_density'] except: #raise print "electron_density failed" try: tvec_r, R_position = Shot()['plasma_position_r'] plasma_R_pos_f = interp1d(tvec_r, R_position, fill_value = 0, bounds_error = False) a = 0.085 #[m] r0 = plasma_radius_f(tvec_n_e) R = plasma_R_pos_f(tvec_n_e)-0.4 pos_part = lambda x: (x+abs(x))/2 ne_corr_nu1 = r0/a*(pos_part(1-R/r0))**1.5 #peaking factor 1; profile = (1-(r/a)^2) ne_corr_nu0_5 = r0/a*(pos_part(1-R/r0)) #peaking factor 0.5; profile = sqrt(1-(r/a)^2) ne_corr_nu1[ne_corr_nu1>1.5] = nan ne_corr_nu0_5[ne_corr_nu0_5>1.5] = nan plot(tvec_n_e, ne_corr_nu1) plot(tvec_n_e, ne_corr_nu0_5) savefig("ne_corr_nu.png") close() if all(isnan(ne_corr_nu0_5)): del ne_corr_nu0_5 del ne_corr_nu1 except Exception, e: print " !!!! electron_density correction failed !!! ", str(e) safety_factor[safety_factor > 2* nanmedian(safety_factor[ind_plasma])] = nan #try: #temp_spec = Shot()['spectrometr:temperature'] #power_spec = Shot()['spectrometr:total_radiated_power'] #except: #print "missing data spectrometer" xlim = array([start, end])*1e3 ylim = [0, None] figsize = (10,4) params = dict(xlim = xlim, ylim = ylim, reduction = True) data_1 = [ [ get_data([tvec,safety_factor], 'Safety factor edge (Q$_{edge}$)', 'Q [-]' , **params), get_data([tvec,safety_factor/3], '(Q$_{center}$) (peaking factor = 2)', 'Q [-]' , **params), get_data([tvec,corr*safety_factor], 'Q edge with radius', 'Q [-]' , fmt='b--', **params) if allow_corr else [], get_data([tvec,corr*safety_factor/3], 'Q center with radius', 'Q [-]' , fmt='r--', **params) if allow_corr else [] ], [ get_data([tvec,1/safety_factor], 'Inverse Safety factor $\iota_{edge}$', '$\iota$ [-]' , **params), get_data([tvec,3/safety_factor], ' $\iota_{center}$ (peaking factor = 2)', '$\iota$ [-]' , **params), get_data([tvec,1/(safety_factor*corr)], ' $\iota_{edge}$ with radius', '$\iota$ [-]' , fmt='b--', **params) if allow_corr else [], get_data([tvec,3/(safety_factor*corr)], ' $\iota_{center}$ with radius', '$\iota$ [-]' , fmt='r--', **params) if allow_corr else [], get_data([array([start,end]), array([0.5, 0.5])], 'Q=2', '$\iota$ [-]' , fmt = "k:", **params) ] ] try: multiplot(data_1, 'Safety factor', 'plot_1', figsize, file_type = ftype) except Exception, e: print 'Safety factor failed', str(e) data_2 = [[ get_data('electron_temperature', 'Electron temperature', 'T [eV]' , **params), get_data('electron_temperature', '$T_e$ corrected by plasma radius', 'T [eV]' , data_rescale = 1/corr, fmt='r--', **params) if allow_corr else [], get_data('spectrometr:temperature', '$T_e$ spectrometer', 'T [eV]' ,ylim = ylim,xlim = xlim, fmt='r--') , ]] try: multiplot(data_2, 'Electron temperature', 'plot_2', figsize, file_type = ftype) except Exception, e: print 'Electron temperature failed', str(e) data_3 = [[ get_data('input_power_total', 'Ohmic heating - total', 'P [kW]' ,xlim = xlim, data_rescale=1e-3, reduction = True), get_data('input_power_magnetic', 'Ohmic heating - magnetic', 'P [kW]' ,xlim = xlim, data_rescale=-1e-3, reduction = True), get_data('input_power_plasma', 'Ohmic heating - plasma', 'P [kW]' , xlim = xlim, data_rescale=-1e-3, reduction = True), get_data('input_power_chamber', 'Ohmic heating - chamber', 'P [kW]' ,xlim = xlim, data_rescale=-1e-3, reduction = True), get_data('photodiode', 'Output power (diod)', 'P [kW]' ,xlim = xlim, data_rescale = calb_photo , reduction = True, fmt = "k--"), get_data('spectrometr:total_radiated_power', 'Output power (spectrometer)', 'P [kW]' ,xlim = xlim, data_rescale=1e-3 , fmt = "r--"), get_data([array([start,end]), array([0, 0])], '', 'P [kW]' , xlim = xlim, reduction = True, fmt = "k:") ]] try: multiplot(data_3, 'Input / Output power', 'plot_3', figsize, file_type = ftype) except Exception, e: print 'Input / Output power', str(e) data_4 = [] if 'n_e' in locals(): data_4 = [ get_data('electron_density', 'Electron density ($n_e$)', 'n$_{e}$ [10$^{19}\cdot$m$^{-3}$]' , data_rescale= 1e-19, **params) , get_data('electron_density', '$n_e$ - position corrected, $\\nu = 1$', 'n$_{e}$ [10$^{19}\cdot$m$^{-3}$]' ,data_rescale= 1e-19/ne_corr_nu1, fmt='k--', **params) if 'ne_corr_nu1' in locals() else [], get_data('electron_density', '$n_e$ - position corrected, $\\nu = 0.5$', 'n$_{e}$ [10$^{19}\cdot$m$^{-3}$]', data_rescale= 1e-19/ne_corr_nu0_5, fmt='k:', **params) if 'ne_corr_nu0_5' in locals() else [] ] data_4 += [get_data('greenwald_density', 'Greenwald density ($n_{GW}$)', 'n$_{GW}$ [10$^{19}\cdot$m$^{-3}$]' , data_rescale= 1e-19, **params), get_data('greenwald_density', 'Greenwald density with radius ($n_{GW}$)', 'n$_{GW}$ [10$^{19}\cdot$m$^{-3}$]' ,data_rescale=1e-19/corr, fmt='r--', **params) if allow_corr else [], get_data([array([start,end]), array([nGW_med, nGW_med])*nGW_limit], '~GW limit', 'n$_{e}$ [10$^{19}\cdot$m$^{-3}$]' , data_rescale= 1e-19 , fmt = "k:", **params) if 'n_e' in locals() else [], ] data_4 = [data_4] try: multiplot(data_4, 'Density', 'plot_4', figsize, file_type = ftype) except Exception, e: print 'Density failed ', str(e) #os.system('convert -resize 150x120\! total_plot.png icon.png') print "===== plotting done ===== " data = data_1 + data_2 +data_3 + (data_4 if 'n_e' in locals() else []) #print data try: multiplot(data, "" , 'icon', (4,3), 40) except Exception, e: print 'Icon failed', str(e) #raise def main(): if sys.argv[1] == "analysis": analysis() if sys.argv[1] == "plots": plot_data('png') saveconst('status', 0) if sys.argv[1] == "postanalysis": plot_data('png') saveconst('status', 0) if __name__ == "__main__": main()