#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Sun May  7 14:21:04 2023

@author: jtitus@TAE.COM

THIS CODE PLOTS THE DATA FROM 10.5281/zenodo.7464646 AND FROM THE PAPER: 
    Estimates of the Wavenumber Wavelet Power Spectrum of Magnetic Fluctuations during Magnetic Reconnection

"""

import matplotlib.pyplot as plt
import numpy as np

# Plot individual figures from paper
which_figure = 'all'# 1,2,3,4,5,6a,6b,6c,6d,7a,7b,7c, all



data_and_figures = '/Users/jtitus/Desktop/James/Mag/05-05-23 Data and Figures/'  #directory where files are located

if which_figure == '1' or which_figure == 'all':
       
    wave_frequency           = np.genfromtxt(data_and_figures+'Fig.1-wave_frequency.csv',delimiter=',')
    avg_wave_power           = np.genfromtxt(data_and_figures+'Fig.1-wave_power.csv', delimiter=',')
    Fourier_frequency        = np.genfromtxt(data_and_figures+'Fig.1-Fourier_frequency.csv', delimiter=',')
    Fourier_power            = np.genfromtxt(data_and_figures+'Fig.1-Fourier_pwr.csv',delimiter=',')
    ave_wave_power           = np.genfromtxt(data_and_figures+'Fig.1-ave_wave_power.csv', delimiter=',')
    ave_wave_power_frequency = np.genfromtxt(data_and_figures+'Fig.1-ave_wave_power_frequency.csv', delimiter=',')
    
    plt.figure(1)
    for vvv in range(2048): 
        if vvv == 0: plt.plot(wave_frequency,avg_wave_power[:,vvv],'.', color= 'blue',alpha=.2,label='$H_{W}^{(0)(0)}(\chi,f,\\tau)$') 
        else: plt.plot(wave_frequency,avg_wave_power[:,vvv],'.', color= 'blue',alpha=0.05)
    plt.plot(Fourier_frequency,Fourier_power,'*',color='red',label='$H^{(0)(0)}(\chi,f)$')
    plt.plot(ave_wave_power_frequency,ave_wave_power,'-',color='black', label='$<H_{W}^{(0)(0)}(\chi,f,\\tau)>$')
    plt.xlabel('$f$ [kHz]')
    plt.ylabel('PSD [log10 T$^{2}$/kHz]')
    plt.ylim(1e-24,1e-5)
    plt.yscale("log")
    plt.xscale("log")
    plt.legend()
   


if which_figure == '2' or which_figure == 'all':
    
    wave_frequency      = np.genfromtxt(data_and_figures+'Fig.2-'+'wave_frequency.csv',delimiter=',')
    wave_wavenumber     = np.genfromtxt(data_and_figures+'Fig.2-'+'wave_wavenumber.csv', delimiter=',')
    Fourier_frequency   = np.genfromtxt(data_and_figures+'Fig.2-'+'Fourier_frequency.csv', delimiter=',')
    Fourier_phase       = np.genfromtxt(data_and_figures+'Fig.2-'+'Fourier_phase.csv', delimiter=',')
    ave_wave_wavenumber = np.genfromtxt(data_and_figures+'Fig.2-'+'ave_wave_wavenumber.csv', delimiter=',')    
    
    plt.figure(2)
    for vvv in range(2000): 
        if vvv == 0: plt.plot(wave_frequency, wave_wavenumber[:,vvv],'.', color='blue',alpha=0.2, label=r'$S_{W}^{(0)(0)}(k_{\perp},f,\tau)$') 
        else: plt.plot(wave_frequency, wave_wavenumber[:,vvv],'.', color='blue',alpha=.05) 
    plt.plot(Fourier_frequency, Fourier_phase,color='red',label=r'$S^{(0)(0)}(k_{\perp},f)$' )
    plt.plot(wave_frequency, ave_wave_wavenumber,'-',color='black',label=r'$<S_{W} ^{(0)(0)}(k_{\perp},f,\tau)>$')    
    plt.xlabel('$f$ [kHz]')
    plt.ylabel('$k_{\perp}$ [cm$^{-1}$]')
    plt.legend(loc='upper left')
    plt.pause(0.1)

    
if which_figure == '3' or which_figure == 'all':
    
    wave_wavenumber     = np.genfromtxt(data_and_figures+'Fig.3-'+'wave_wavenumber.csv',delimiter=',')
    wave_power          = np.genfromtxt(data_and_figures+'Fig.3-'+'wave_power.csv',delimiter=',')
    Fourier_wavenumber  = np.genfromtxt(data_and_figures+'Fig.3-'+'Fourier_wavenumber.csv', delimiter=',')
    Fourier_power       = np.genfromtxt(data_and_figures+'Fig.3-'+'Fourier_power.csv', delimiter=',')
    ave_wave_power      = np.genfromtxt(data_and_figures+'Fig.3-'+'ave_wave_power.csv', delimiter=',')
    ave_wave_wavenumber = np.genfromtxt(data_and_figures+'Fig.3-'+'ave_wave_power_wavenumber.csv', delimiter=',')    
    
    
    plt.figure(3)
    for vvv in range(2000): 
        if vvv == 0: plt.plot( wave_wavenumber[:,vvv],wave_power[:,vvv],'.',color='blue', alpha=.2,label=r'$S_{W}^{(0)(0)}(k_{\perp},\tau)$')
        else: plt.plot(wave_wavenumber[:,vvv],wave_power[:,vvv],'.',color='blue', alpha=.05)
    plt.plot(Fourier_wavenumber,Fourier_power,'*',color='red',label=r'$S^{(0)(0)}(k_{\perp})$')
    plt.plot(ave_wave_wavenumber,ave_wave_power,'-',color='black',label=r'$<S_{W}^{(0)(0)}(k_{\perp},\tau)>$')
    plt.ylabel('PSD [T$^{2}$ cm]')
    plt.xlabel('$k_{\perp}$ [cm$^{-1}$]')
    plt.yscale("log")
    plt.legend(loc='upper left')
    plt.ylim(1e-23,1e-5)
    
if which_figure == '4' or which_figure == 'all':
    
    Z         = np.genfromtxt(data_and_figures+'Fig.4-'+'power.csv', delimiter=',')
    time      = np.genfromtxt(data_and_figures+'Fig.4-'+'time.csv', delimiter=',')
    frequency = np.genfromtxt(data_and_figures+'Fig.4-'+'frequency.csv', delimiter=',')
    coi       = np.genfromtxt(data_and_figures+'Fig.4-'+'coi.csv', delimiter=',')
    
    X,Y = np.meshgrid(time,frequency)
    plt.figure(4)
    plt.pcolor(X,Y,Z,cmap=plt.cm.jet)    
    plt.colorbar()    
    plt.plot(time, 1/coi, 'k')
    plt.yscale("log")
    plt.ylim(3e0,1e3)
    plt.clim(-15, -4.5)
    plt.xlabel('Time [ms]')
    plt.ylabel('Frequency [kHz]')


if which_figure == '5' or which_figure == 'all':

    wavenumber     = np.genfromtxt(data_and_figures+'Fig.5-'+'wavenumber.csv', delimiter=',')
    wave_power     = np.genfromtxt(data_and_figures+'Fig.5-'+'wave_pwr.csv',delimiter=',')
    Fourier_power    = np.genfromtxt(data_and_figures+'Fig.5-'+'Fourier_pwr.csv',delimiter=',')
    ave_wave_power = np.genfromtxt(data_and_figures+'Fig.5-'+'ave_wave_pwr.csv',delimiter=',')

    plt.figure(5)
    for vvv in range(2048):
    
        if vvv == 0: plt.plot(wavenumber,wave_power[:,vvv],'o', color='blue',alpha=.2,label = '$\hat{S}_{W}(k,\\tau)$')
        else: plt.plot(wavenumber,wave_power[:,vvv],'o', color='blue',alpha=0.5)

    plt.plot(wavenumber,Fourier_power,'*',color='red',label='$\hat{S}(k)$')# does not need events
    plt.plot(wavenumber,ave_wave_power,'*',color='black',label='$<\hat{S}_{W}(k,\\tau)>$')#
    plt.ylabel('PSD [T$^{2}$cm]')
    plt.xlabel('$k_{\perp}$ [cm$^{-1}$]')
    plt.yscale("log")
    plt.legend()

if which_figure == '6a' or which_figure == 'all':
    Z          = np.genfromtxt(data_and_figures+'Fig.6-'+'power.csv',delimiter=',')
    time       = np.genfromtxt(data_and_figures+'Fig.6-'+'time.csv',delimiter=',')
    wavenumber = np.genfromtxt(data_and_figures+'Fig.6-'+'wavenumber.csv',delimiter=',')
    
    st=np.argmin(np.absolute(wavenumber+7.85)) 
    et=np.argmin(np.absolute(wavenumber-7.85)) 

    X,Y = np.meshgrid(time,wavenumber[st:et])
    plt.figure(61)
    plt.pcolormesh(X,Y,Z,cmap=plt.cm.jet)
    cbar = plt.colorbar()
    CS = plt.contour(X,Y, Z, 20,colors='black', linewidths=0.1)
    cbar.set_label('Power (log10 T$^{2}$cm)')
    plt.xlabel('Time [ms]')
    plt.ylabel('k [cm$^{-1}$]')
    plt.xlim(-0.35,0.35)
    
    
if which_figure == '6b' or which_figure == 'all':
    Z           = np.genfromtxt(data_and_figures+'Fig.6-'+'power.csv',delimiter=',')
    time        = np.genfromtxt(data_and_figures+'Fig.6-'+'time.csv',delimiter=',')
    wavewnumber = np.genfromtxt(data_and_figures+'Fig.6-'+'wavenumber.csv',delimiter=',')
    
    st=np.argmin(np.absolute(wavenumber+2.0)) 
    et=np.argmin(np.absolute(wavenumber-2.0)) 

    X,Y = np.meshgrid(time,wavenumber[st:et])
    Z = Z[st:et,:]
    plt.figure(62)
    plt.pcolormesh(X,Y,Z,cmap=plt.cm.jet)
    cbar = plt.colorbar()
    CS = plt.contour(X,Y, Z, 20,colors='black', linewidths=0.1)
    cbar.set_label('Power (log10 T$^{2}$cm)')
    plt.xlabel('Time [ms]')
    plt.ylabel('k [cm$^{-1}$]')
    plt.xlim(-0.35,0.35)
    
if which_figure == '6c' or which_figure == 'all':
    Z          = np.genfromtxt(data_and_figures+'Fig.6-'+'power.csv',delimiter=',')
    time       = np.genfromtxt(data_and_figures+'Fig.6-'+'time.csv',delimiter=',')
    wavenumber = np.genfromtxt(data_and_figures+'Fig.6-'+'wavenumber.csv',delimiter=',')
    
    st=np.argmin(np.absolute(wavenumber+0.5)) 
    et=np.argmin(np.absolute(wavenumber-0.5)) 

    X,Y = np.meshgrid(time,wavenumber[st:et])
    Z = Z[st:et,:]
    plt.figure(63)
    plt.pcolormesh(X,Y,Z,cmap=plt.cm.jet)
    cbar = plt.colorbar()
    CS = plt.contour(X,Y, Z, 20,colors='black', linewidths=0.1)
    cbar.set_label('Power (log10 T$^{2}$cm)')
    plt.xlabel('Time [ms]')
    plt.ylabel('k [cm$^{-1}$]')
    plt.xlim(-0.35,0.35)
    
    
    
if which_figure == '6d' or which_figure == 'all':
    time = np.genfromtxt(data_and_figures+'Fig.6d-'+'time.csv', delimiter=',')
    _m0  = np.genfromtxt(data_and_figures+'Fig.6d-'+'m0.csv', delimiter=',')
    _n6  = np.genfromtxt(data_and_figures+'Fig.6d-'+'n6.csv', delimiter=',')
    _n10 = np.genfromtxt(data_and_figures+'Fig.6d-'+'n10.csv', delimiter=',')
    
    plt.figure(64)
    plt.plot(time, _m0, color='black', label='$(m,n)=(0,1)$')
    plt.plot(time, _n6, color='orange',label='$(m,n)=(1,6)$')
    plt.plot(time, _n10, color='green',label='$(m,n)=(1,10)$')
    plt.xlim(-0.35,0.35)
    plt.xlabel('Time [ms]')
    plt.ylabel('mode amplitude (G)')
    plt.yscale("log")
    plt.legend()
    

if which_figure == '7a' or which_figure == 'all':
    time   = np.genfromtxt(data_and_figures+'Fig.7a-'+'time.csv',delimiter=',')
    kd     = np.genfromtxt(data_and_figures+'Fig.7a-'+'kd.csv',delimiter=',')
    kd_unc = np.genfromtxt(data_and_figures+'Fig.7a-'+'kd_unc.csv', delimiter=',')    
        
    plt.figure(71)
    plt.errorbar(time,kd,yerr=kd_unc,fmt='.',capsize=0.5,color='orange', alpha=.02)
    plt.plot(time,kd,'.',color ='green',markersize=10)
    plt.xlabel('Time [ms]')
    plt.ylabel('$k_{d}$')


if which_figure == '7b' or which_figure == 'all':
    time    = np.genfromtxt(data_and_figures+'Fig.7b-'+'time.csv', delimiter=',')
    fit_unc = np.genfromtxt(data_and_figures+'Fig.7b-'+'R2.csv', delimiter=',')
    
    plt.figure(72)
    plt.plot(time,fit_unc,'.',color='black')
    plt.xlabel('Time [ms]')
    plt.ylabel('$R^{2}$')
    
       
if which_figure == '7c' or which_figure == 'all':
    wavenumber = np.genfromtxt(data_and_figures+'Fig.7c-'+'wavenumber.csv', delimiter=',')
    pwr1       = np.genfromtxt(data_and_figures+'Fig.7c-'+'-0.26_pwr.csv', delimiter=',')
    pwr1_fit   = np.genfromtxt(data_and_figures+'Fig.7c-'+'-0.26_pwr_fit.csv', delimiter=',')
    pwr2       = np.genfromtxt(data_and_figures+'Fig.7c-'+'0.31_pwr.csv',delimiter=',')
    pwr2_fit   = np.genfromtxt(data_and_figures+'Fig.7c-'+'0.31_pwr_fit.csv',delimiter=',')  
    
    plt.figure(73)  
    plt.plot(wavenumber, pwr1,'*',color='black',label='-0.26 ms')   
    plt.plot(wavenumber, pwr1_fit, color = 'red',label = 'fit')
    plt.plot(wavenumber, pwr2,'*',color='green',label='0.31 ms')  
    plt.plot(wavenumber, pwr2_fit, color = 'orange',label = 'fit')
    plt.xlabel('$k_{\perp}$ (cm$^{-1}$)')
    plt.ylabel('Power (T$^{2}$ cm)')
    plt.yscale("log")
    plt.ylim(2e-9,1e-5) 
    plt.legend() 
    