Discharge/DischargeDatabase/Examples/22813/includes/diagnostics/Magnetic/1110MirnovCoils_JK.ON/poloha.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from numpy import *
import time
import matplotlib 
matplotlib.rcParams['backend'] = 'Agg'
matplotlib.rc('font',  size='10')
matplotlib.rc('text', usetex=True)  
from matplotlib.pyplot import *
import os

from pygolem_lite.modules import list2array,save_adv,saveconst,load_adv
from pygolem_lite import Shot

LineCount=40000;
TriggerLine=3500;
DeltaTs=1e-6;#[s]

Stab_S_Eff=0.08601;#[m^2]
Mirnov_S_Eff=0.003705;#[m^2]
MirnovPosition=93;#[mm]
MirnovPosition_m=0.093;#[m]

R0=0.4;#m
mu0=0.000001256;
a_limiter=0.085;
a_L=0.085;


def narovnani(field):
    aver2 = mean(field[32000:32000+TriggerLine])
    field[5000:32000]-= (arange(5000,32000)-5000)*aver2/(32000-5000)
    field[32000:]-= aver2
    return field
    
def integrace_mc(field):
    #print "====", field, TriggerLine
    
    aver = mean(field[:TriggerLine,:],axis = 0)
    integr = cumsum(field-aver, axis = 0, out = field)*DeltaTs/Mirnov_S_Eff
    return integr
    
def integrace_bz(field):
    aver = mean(field[:TriggerLine,...],axis = 0)
    integr = cumsum(field-aver,axis = 0,  out = field)*DeltaTs/Stab_S_Eff
    return integr
       
def load_etalons(Ub_limit,Ust_limit):
    path = 'Ub'+str(Ub_limit)+'_Ust'+str(Ust_limit)+'_no-plasma'
    try:
    	tvec,etalon = load_adv('./etalon/'+path)
    except:	
	print 'cant open '+path+' etalon'
	saveconst('no_etalon', 0)
	exit()
    
    return etalon
    
def load_pygolem():
    Data = Shot()
    time.sleep(2)  # stupid bug fix with loading of nonsaved file 

    gd = Data.get_data
    das, m1  = gd('any', 'mirnov_1', return_channel = True)
    das, m5  = gd('any', 'mirnov_5', return_channel = True)
    das, m9  = gd('any', 'mirnov_9', return_channel = True)
    das, m13 = gd('any', 'mirnov_13', return_channel = True)

    mc = list2array( Data[das, [m1, m5, m9, m13]][1] )

    Ip = array(Data['plasma_current'], copy = False)[1,:].T
    try:
	Bz = list2array( Data[das, 5][1] )
    except:
	Bz = zeros(LineCount)
	
    Ub_limit = int(Data['ub'])
    Ust_limit = int(Data['ust'])
    plasma = Data['plasma']
    #Ub_limit = 600#BUG
    #Ust_limit = 0
    return mc,Bz,Ip,Ust_limit,Ub_limit


def plot_graphs():
    mc,Bz,Ip,Stlim,Btlim = load_pygolem()
    #print mc,Bz,Ip,Stlim,Btlim 
    mc = integrace_mc(mc)
    Bz = integrace_bz(Bz)

    mc = mc[:LineCount,:]
    Bz = Bz[:LineCount]

    #remove crosstalks
    for i in range(4):    
	mc[:,i] = narovnani(mc[:,i])
    etalon = load_etalons(Btlim,Stlim)

    mc-= etalon[:,:4]	#time	mc1	mc5	mc9	mc13	bz
    Bz-= etalon[:,-1]


    #make calculations
    disZ = MirnovPosition*(mc[:,1]-mc[:,3])/(abs(mc[:,1]+mc[:,3]))
    disR = MirnovPosition*(mc[:,0]-mc[:,2])/(abs(mc[:,0]+mc[:,2]))


    B0 = (mu0*Ip)/(2*pi*MirnovPosition_m)
    Lambda = ((mc[:,2]-mc[:,0])/2 - Bz)*(R0/(B0*MirnovPosition_m))-log(MirnovPosition_m/a_L)+1
    disR_upgrade=(mc[:,2]-mc[:,0])*MirnovPosition_m/(2*B0)-0.5*(log(MirnovPosition_m/a_L)-1+(Lambda-0.5)*(1+(MirnovPosition_m/a_L)**2))*MirnovPosition_m**2/R0*1000
    disR_upgrade[Ip < 50] = 0
    disR[Ip < 50] = 0
    disZ[Ip < 50] = 0

   
    
    
    #plot graphs
    
    tvec = arange(LineCount)*DeltaTs*1000
    class MyFormatter(ScalarFormatter): 
	def __call__(self, x, pos=None): 
	    if pos==0: 
		return '' 
	    else: return ScalarFormatter.__call__(self, x, pos)  

    fig = figure(num=None, figsize=(10, 10), dpi=80, facecolor='w', edgecolor='k')
    subplots_adjust(hspace=0, wspace = 0)
    for i in arange(4):
	ax = fig.add_subplot(5,1,i+1)
	ax.xaxis.set_major_formatter( NullFormatter() )
	ax.yaxis.set_major_formatter( MyFormatter() )
	plot(tvec,1000*mc[:,i], label = 'clear signal')
	plot(tvec,1000*etalon[:,i+1], label = 'toroidal field')
	plot(tvec,1000*(mc[:,i]+etalon[:,i+1]), label = 'signal with toroidal field')
	axhline(y = 0, linestyle = '--')
	leg = legend(loc='upper left', fancybox=True)
	leg.get_frame().set_alpha(0.8)
	ylabel('mc'+str(i*4+1)+' B [mT]')

    ax.xaxis.set_major_formatter( ScalarFormatter() )
    ax.yaxis.set_major_formatter( ScalarFormatter()  )
    xlabel('t [ms]')
    savefig('./mc.png',bbox_inches='tight')
    close()   
	


    fig = figure(num=None, figsize=(10, 3), dpi=80, facecolor='w', edgecolor='k')

    plot(tvec,-disZ, label = 'disZ')
    plot(tvec,-disR, label = 'disR')
    plot(tvec,-disR_upgrade, label = 'disR upgrade')
    axhline(y = a_L*1000,linestyle = '--',color = 'g')
    axhline(y = -a_L*1000,linestyle = '--',color = 'g')

    ylim(-100, 100)
    xlim(6, 23)
    ylabel('R,Z [mm]')
    xlabel('t [ms]')
    leg = legend( loc='upper right', fancybox=True)
    leg.get_frame().set_alpha(0.8)
    savefig('./position.png',bbox_inches='tight')
    close()
    os.system('convert -resize 150x120\! position.png icon.png')


def main():
    
    plot_graphs()
    saveconst('status', 0)



if __name__ == "__main__":
    main()