From ca8720fdb8da53f19ea048f98c48974d2a7e6eb7 Mon Sep 17 00:00:00 2001
From: Antoine Hoffmann <antoine.hoffmann@epfl.ch>
Date: Sat, 1 Apr 2023 12:37:06 +0200
Subject: [PATCH] faster and more versatile matlab scripts

---
 matlab/load/compile_results_3Da.m             |  37 ++++
 matlab/load/compile_results_low_mem.m         |  95 ++++----
 matlab/load/load_3D_data.m                    |  22 +-
 matlab/load/load_3Da_data.m                   |  43 ++++
 matlab/load/load_grid_data.m                  |   8 +-
 matlab/load/load_params.m                     | 148 +++++++------
 .../plot_radial_transport_and_spacetime.m     |  75 +------
 matlab/plot/show_moments_spectrum.m           | 208 ++++--------------
 matlab/process_field_v2.m                     |  29 ++-
 9 files changed, 286 insertions(+), 379 deletions(-)
 create mode 100644 matlab/load/compile_results_3Da.m
 create mode 100644 matlab/load/load_3Da_data.m

diff --git a/matlab/load/compile_results_3Da.m b/matlab/load/compile_results_3Da.m
new file mode 100644
index 00000000..3fffa329
--- /dev/null
+++ b/matlab/load/compile_results_3Da.m
@@ -0,0 +1,37 @@
+function [field, Ts3D] = compile_results_3Da(DIRECTORY,JOBNUMMIN,JOBNUMMAX,fieldname)
+CONTINUE = 1;
+JOBNUM   = JOBNUMMIN; JOBFOUND = 0;
+% field
+field    = [];
+Ts3D    = [];
+ii = 1;
+while(CONTINUE)
+    filename = sprintf([DIRECTORY,'outputs_%.2d.h5'],JOBNUM);
+    % Check presence and jobnummax
+    if (exist(filename, 'file') == 2 && JOBNUM <= JOBNUMMAX)
+        %test if it is corrupted or currently running
+        try
+            openable = ~isempty(h5read(filename,'/data/var3d/time'));
+        catch
+            openable = 0;
+        end
+        if openable
+        % load field %%
+        [ F, T, ~] = load_3Da_data(filename, fieldname);
+        field  = cat(5,field,F);
+        Ts3D  = cat(1,Ts3D,T);
+        ii = ii + 1;
+        JOBFOUND = JOBFOUND + 1;
+        end
+    elseif (JOBNUM > JOBNUMMAX)
+        CONTINUE = 0;
+    end
+    JOBNUM   = JOBNUM + 1;
+end
+
+if(JOBFOUND == 0)
+    disp('no results found, please verify the paths');
+    return;
+end
+
+end
\ No newline at end of file
diff --git a/matlab/load/compile_results_low_mem.m b/matlab/load/compile_results_low_mem.m
index bfe83682..ea3275d8 100644
--- a/matlab/load/compile_results_low_mem.m
+++ b/matlab/load/compile_results_low_mem.m
@@ -1,21 +1,21 @@
 function [DATA] = compile_results_low_mem(DATA,DIRECTORY,JOBNUMMIN,JOBNUMMAX)
 CONTINUE = 1;
 JOBNUM   = JOBNUMMIN; JOBFOUND = 0;
-DATA.TJOB_SE  = []; % Start and end times of jobs
-DATA.NU_EVOL  = []; % evolution of parameter nu between jobs
-DATA.CO_EVOL  = []; % evolution of CO
-DATA.MUx_EVOL  = []; % evolution of parameter mu between jobs
-DATA.MUy_EVOL  = []; % evolution of parameter mu between jobs
-DATA.MUz_EVOL  = []; % evolution of parameter mu between jobs
-DATA.K_N_EVOL = []; %
-DATA.K_T_EVOL = []; %
-DATA.L_EVOL   = []; % 
-DATA.DT_EVOL  = []; %
+DATA.params_evol.TJOB_SE  = []; % Start and end times of jobs
+DATA.params_evol.NU_EVOL  = []; % evolution of parameter nu between jobs
+DATA.params_evol.CO_EVOL  = []; % evolution of CO
+DATA.params_evol.MUx_EVOL  = []; % evolution of parameter mu between jobs
+DATA.params_evol.MUy_EVOL  = []; % evolution of parameter mu between jobs
+DATA.params_evol.MUz_EVOL  = []; % evolution of parameter mu between jobs
+DATA.params_evol.K_N_EVOL = []; %
+DATA.params_evol.K_T_EVOL = []; %
+DATA.params_evol.L_EVOL   = []; % 
+DATA.params_evol.DT_EVOL  = []; %
 % Low memoery cost data
-HFLUXI_   = [];
+HFLUX_   = [];
 HFLUXE_   = [];
-GGAMMAI_ = [];
-PGAMMAI_ = [];
+GGAMMA_ = [];
+PGAMMA_ = [];
 Ts0D_    = [];
 DATA.outfilenames = {};
 ii = 1;
@@ -36,38 +36,38 @@ while(CONTINUE)
             % Loading from output file
             CPUTIME   = h5readatt(filename,'/data/input','cpu_time');
             DT_SIM    = h5readatt(filename,'/data/input/basic','dt');
-            [Pe, Je, Pi, Ji, kx, ky, z] = load_grid_data(filename);
+            [Parray, Jarray, kx, ky, z] = load_grid_data(filename);
             W_GAMMA   = strcmp(h5readatt(filename,'/data/input/diag_par','write_gamma'),'y');
             W_HF      = strcmp(h5readatt(filename,'/data/input/diag_par','write_hf'   ),'y');
             KIN_E     = strcmp(h5readatt(filename,'/data/input/model',     'ADIAB_E' ),'n');
             BETA      = h5readatt(filename,'/data/input/model','beta');
 
             if W_GAMMA
-                [ GGAMMA_RI, Ts0D, ~] = load_0D_data(filename, 'gflux_xi');
-                PGAMMA_RI            = load_0D_data(filename, 'pflux_xi');
-                GGAMMAI_ = cat(1,GGAMMAI_,GGAMMA_RI); clear GGAMMA_RI
-                PGAMMAI_ = cat(1,PGAMMAI_,PGAMMA_RI); clear PGAMMA_RI
+                [ GGAMMA_R, Ts0D, ~] = load_0D_data(filename, 'gflux_x');
+                PGAMMA_R            = load_0D_data(filename, 'pflux_x');
+                GGAMMA_ = cat(1,GGAMMA_,GGAMMA_R); clear GGAMMA_R
+                PGAMMA_ = cat(1,PGAMMA_,PGAMMA_R); clear PGAMMA_R
             end
 
             if W_HF
-                [ HFLUX_XI, Ts0D, ~] = load_0D_data(filename, 'hflux_xi');
-                HFLUXI_ = cat(1,HFLUXI_,HFLUX_XI); clear HFLUX_XI
+                [ HFLUX_X, Ts0D, ~] = load_0D_data(filename, 'hflux_x');
+                HFLUX_ = cat(1,HFLUX_,HFLUX_X); clear HFLUX_X
             end
 
             Ts0D_   = cat(1,Ts0D_,Ts0D);
 
             % Evolution of simulation parameters
-            load_params
-            DATA.TJOB_SE   = [DATA.TJOB_SE   Ts0D(1)     Ts0D(end)];
-            DATA.NU_EVOL   = [DATA.NU_EVOL   DATA.NU     DATA.NU];
-            DATA.CO_EVOL   = [DATA.CO_EVOL   DATA.CO     DATA.CO];
-            DATA.MUx_EVOL  = [DATA.MUx_EVOL  DATA.MUx    DATA.MUx];
-            DATA.MUy_EVOL  = [DATA.MUy_EVOL  DATA.MUy    DATA.MUy];
-            DATA.MUz_EVOL  = [DATA.MUz_EVOL  DATA.MUz    DATA.MUz];
-            DATA.K_N_EVOL  = [DATA.K_N_EVOL DATA.K_N   DATA.K_N];
-            DATA.K_T_EVOL  = [DATA.K_T_EVOL DATA.K_T   DATA.K_T];
-            DATA.L_EVOL    = [DATA.L_EVOL    DATA.L      DATA.L];
-            DATA.DT_EVOL   = [DATA.DT_EVOL   DATA.DT_SIM DATA.DT_SIM];
+            DATA = load_params(DATA,filename);
+            DATA.params_evol.TJOB_SE   = [DATA.params_evol.TJOB_SE   Ts0D(1)     Ts0D(end)];
+            DATA.params_evol.NU_EVOL   = [DATA.params_evol.NU_EVOL   DATA.inputs.NU     DATA.inputs.NU];
+            DATA.params_evol.CO_EVOL   = [DATA.params_evol.CO_EVOL   DATA.inputs.CO     DATA.inputs.CO];
+            DATA.params_evol.MUx_EVOL  = [DATA.params_evol.MUx_EVOL  DATA.inputs.MUx    DATA.inputs.MUx];
+            DATA.params_evol.MUy_EVOL  = [DATA.params_evol.MUy_EVOL  DATA.inputs.MUy    DATA.inputs.MUy];
+            DATA.params_evol.MUz_EVOL  = [DATA.params_evol.MUz_EVOL  DATA.inputs.MUz    DATA.inputs.MUz];
+            DATA.params_evol.K_N_EVOL  = [DATA.params_evol.K_N_EVOL  DATA.inputs.K_N    DATA.inputs.K_N];
+            DATA.params_evol.K_T_EVOL  = [DATA.params_evol.K_T_EVOL  DATA.inputs.K_T    DATA.inputs.K_T];
+            DATA.params_evol.L_EVOL    = [DATA.params_evol.L_EVOL    DATA.inputs.L      DATA.inputs.L];
+            DATA.params_evol.DT_EVOL   = [DATA.params_evol.DT_EVOL   DATA.inputs.DT_SIM DATA.inputs.DT_SIM];
 
             ii = ii + 1;
             JOBFOUND = JOBFOUND + 1;
@@ -118,30 +118,31 @@ else
     % scaling
     DATA.scale = 1;%(1/Nx/Ny)^2;
     % Fields
-    DATA.GGAMMA_RI = GGAMMAI_; DATA.PGAMMA_RI = PGAMMAI_; DATA.HFLUX_X = HFLUXI_;
+    DATA.GGAMMA_RI = GGAMMA_; DATA.PGAMMA_RI = PGAMMA_; DATA.HFLUX_X = HFLUX_;
     if(KIN_E)
     DATA.HFLUX_XE = HFLUXE_;
     end
     DATA.Ts0D = Ts0D_;
     DATA.KIN_E=KIN_E;
     % grids
-    DATA.Pe = Pe; DATA.Pi = Pi; 
-    DATA.Je = Je; DATA.Ji = Ji; 
-    DATA.kx = kx; DATA.ky = ky; DATA.z = z; DATA.Npol = -z(1)/pi;
-    DATA.x  = x;  DATA.y  = y;
-    DATA.ikx0 = ikx0; DATA.iky0 = iky0;
-    DATA.Nx = Nx; DATA.Ny = Ny; DATA.Nz = Nz; DATA.Nkx = Nkx; DATA.Nky = Nky; 
-    DATA.Pmaxe = numel(Pe); DATA.Pmaxi = numel(Pi); DATA.Jmaxe = numel(Je); DATA.Jmaxi = numel(Ji);
+    DATA.grids.Parray = Parray;
+    DATA.grids.Jarray = Jarray;
+    DATA.grids.kx = kx; DATA.grids.ky = ky; DATA.grids.z = z; DATA.grids.Npol = -z(1)/pi;
+    DATA.grids.x  = x;  DATA.grids.y  = y;
+    DATA.grids.ikx0 = ikx0; DATA.grids.iky0 = iky0;
+    DATA.grids.Nx = Nx; DATA.grids.Ny = Ny; DATA.grids.Nz = Nz; DATA.grids.Nkx = Nkx; DATA.grids.Nky = Nky; 
+    DATA.grids.Np = numel(Parray);DATA.grids.Nj = numel(Jarray);
+    DATA.grids.deltap = Parray(2)-Parray(1);
     DATA.dir      = DIRECTORY;
     DATA.localdir = DIRECTORY;
-    DATA.param_title=['$\nu_{',DATA.CONAME,'}=$', num2str(DATA.NU), ...
-        ', $\kappa_{Ni}=$',num2str(DATA.K_N),', $\kappa_{Ti}=$',num2str(DATA.K_T),...
-        ', $L=',num2str(DATA.L),'$, $N=',...
-        num2str(DATA.Nx),'$, $(P,J)=(',num2str(DATA.Pi(end)),',',...
-        num2str(DATA.Ji(end)),')$,',' $\mu_{hd}=$(',num2str(DATA.MUx),...
-        ',',num2str(DATA.MUy),')'];
-    DATA.paramshort = [num2str(DATA.Pmaxi),'x',num2str(DATA.Jmaxi),'x',...
-        num2str(DATA.Nkx),'x',num2str(DATA.Nky),'x',num2str(DATA.Nz)];
+    DATA.param_title=['$\nu_{',DATA.inputs.CONAME,'}=$', num2str(DATA.inputs.NU), ...
+        ', $\kappa_{Ni}=$',num2str(DATA.inputs.K_N),', $\kappa_{Ti}=$',num2str(DATA.inputs.K_T),...
+        ', $L=',num2str(DATA.inputs.L),'$, $N=',...
+        num2str(DATA.grids.Nx),'$, $(P,J)=(',num2str(DATA.grids.Parray(end)),',',...
+        num2str(DATA.grids.Jarray(end)),')$,',' $\mu_{hd}=$(',num2str(DATA.inputs.MUx),...
+        ',',num2str(DATA.inputs.MUy),')'];
+    DATA.paramshort = [num2str(DATA.grids.Np),'x',num2str(DATA.grids.Nj),'x',...
+        num2str(DATA.grids.Nkx),'x',num2str(DATA.grids.Nky),'x',num2str(DATA.grids.Nz)];
     JOBNUM = LASTJOB;
 
     filename = sprintf([DIRECTORY,'outputs_%.2d.h5'],JOBNUM);
diff --git a/matlab/load/load_3D_data.m b/matlab/load/load_3D_data.m
index 47bc4bf0..491b1921 100644
--- a/matlab/load/load_3D_data.m
+++ b/matlab/load/load_3D_data.m
@@ -13,6 +13,10 @@ function [ data, time, dt ] = load_3D_data( filename, variablename )
         sz  = size(tmp);
         cmpx = 0;
     end
+    % add a z dimension even if 2D
+    if(numel(sz) == 2)
+        sz = [sz 1];
+    end
     % add time dimension
     sz    = [sz numel(time)];
     data     = zeros(sz);
@@ -20,16 +24,22 @@ function [ data, time, dt ] = load_3D_data( filename, variablename )
     for it = 1:numel(time)
         tmp         = h5read(filename,['/data/var3d/',variablename,'/', num2str(cstart+it,'%06d')]);
         if cmpx
-            if(numel(sz) == 3)
-                data(:,:,it) = tmp.real + 1i * tmp.imaginary;
-            else
+            switch numel(sz)
+                case(3)
+                data(:,:,1,it) = tmp.real + 1i * tmp.imaginary;
+                case(4)
                 data(:,:,:,it) = tmp.real + 1i * tmp.imaginary;
+                case(5)
+                data(:,:,:,:,it) = tmp.real + 1i * tmp.imaginary;
             end
         else
-            if(numel(sz) == 3)
-                data(:,:,it) = tmp;
-            else
+            switch numel(sz)
+                case(3)
+                data(:,:,1,it) = tmp;
+                case(4)
                 data(:,:,:,it) = tmp;
+                case(5)
+                data(:,:,:,:,it) = tmp;
             end
         end
     end
diff --git a/matlab/load/load_3Da_data.m b/matlab/load/load_3Da_data.m
new file mode 100644
index 00000000..d3dc8bec
--- /dev/null
+++ b/matlab/load/load_3Da_data.m
@@ -0,0 +1,43 @@
+function [ data, time, dt ] = load_3Da_data( filename, variablename )
+%LOAD_3D_DATA load a 3D variable stored in a hdf5 result file from HeLaZ
+    time  = h5read(filename,'/data/var3d/time');
+    dt    = h5readatt(filename,'/data/input/basic','dt');
+    cstart= h5readatt(filename,'/data/input/basic','start_iframe3d'); 
+    Na    = h5readatt(filename,'/data/input/model','Na'); 
+    Np    = h5readatt(filename,'/data/input/grid', 'Np'); 
+    Nj    = h5readatt(filename,'/data/input/grid', 'Nj'); 
+    Nky   = h5readatt(filename,'/data/input/grid', 'Nky'); 
+    Nkx   = h5readatt(filename,'/data/input/grid', 'Nkx'); 
+    Nz    = h5readatt(filename,'/data/input/grid', 'Nz'); 
+
+    
+    % Find array size by loading the first output
+    tmp   = h5read(filename,['/data/var3d/',variablename,'/', num2str(cstart+1,'%06d')]);
+    try % check if it is complex or real
+        sz  = size(tmp.real);
+        cmpx = 1;
+    catch
+        sz  = size(tmp);
+        cmpx = 0;
+    end
+    % add a dimension if nz=1 or na=1
+%     if Na == 1
+%         sz = [1 sz];
+%     end
+    if Nz == 1
+        sz = [sz 1];
+    end
+    % add time dimension
+    data     = zeros([sz numel(time)]);
+    
+    for it = 1:numel(time)
+        tmp         = h5read(filename,['/data/var3d/',variablename,'/', num2str(cstart+it,'%06d')]);
+        if cmpx
+            data(:,:,:,:,it) = reshape(tmp.real,sz) + 1i * reshape(tmp.imaginary,sz);
+        else
+            data(:,:,:,:,it) = reshape(tmp,sz);
+        end
+    end
+
+end
+
diff --git a/matlab/load/load_grid_data.m b/matlab/load/load_grid_data.m
index 2a1dd8c9..6df1d511 100644
--- a/matlab/load/load_grid_data.m
+++ b/matlab/load/load_grid_data.m
@@ -1,9 +1,7 @@
-function [ pe, je, pi, ji, kx, ky, z ] = load_grid_data( filename )
+function [ p, j, kx, ky, z ] = load_grid_data( filename )
 %LOAD_GRID_DATA stored in a hdf5 result file from HeLaZ
-    pe    = h5read(filename,'/data/grid/coordp');
-    je    = h5read(filename,'/data/grid/coordj');
-    pi    = h5read(filename,'/data/grid/coordp');
-    ji    = h5read(filename,'/data/grid/coordj');
+    p     = h5read(filename,'/data/grid/coordp');
+    j     = h5read(filename,'/data/grid/coordj');
     kx    = h5read(filename,'/data/grid/coordkx');
     ky    = h5read(filename,'/data/grid/coordky');
     z     = h5read(filename,'/data/grid/coordz');
diff --git a/matlab/load/load_params.m b/matlab/load/load_params.m
index 56e12861..73f72a92 100644
--- a/matlab/load/load_params.m
+++ b/matlab/load/load_params.m
@@ -1,82 +1,84 @@
-DATA.CO      = h5readatt(filename,'/data/input/coll','CO');
-DATA.K_N     = h5readatt(filename,'/data/input/ions','k_N');
-DATA.K_T     = h5readatt(filename,'/data/input/ions','k_T');
-DATA.Q0      = h5readatt(filename,'/data/input/geometry','q0');
-DATA.EPS     = h5readatt(filename,'/data/input/geometry','eps');
-DATA.SHEAR   = h5readatt(filename,'/data/input/geometry','shear');
-DATA.GEOM    = h5readatt(filename,'/data/input/geometry','geometry');
-% DATA.KAPPA   = h5readatt(filename,'/data/input/geometry','kappa');
-% DATA.DELTA   = h5readatt(filename,'/data/input/geometry','delta');
+function [DATA] = load_params(DATA,filename)
+    DATA.inputs.CO      = h5readatt(filename,'/data/input/coll','CO');
+    DATA.inputs.K_N     = h5readatt(filename,'/data/input/ions','k_N');
+    DATA.inputs.K_T     = h5readatt(filename,'/data/input/ions','k_T');
+    DATA.inputs.Q0      = h5readatt(filename,'/data/input/geometry','q0');
+    DATA.inputs.EPS     = h5readatt(filename,'/data/input/geometry','eps');
+    DATA.inputs.SHEAR   = h5readatt(filename,'/data/input/geometry','shear');
+    DATA.inputs.GEOM    = h5readatt(filename,'/data/input/geometry','geometry');
+    % DATA.KAPPA   = h5readatt(filename,'/data/input/geometry','kappa');
+    % DATA.DELTA   = h5readatt(filename,'/data/input/geometry','delta');
 
-DATA.DT_SIM  = h5readatt(filename,'/data/input/basic','dt');
-DATA.PMAX    = h5readatt(filename,'/data/input/grid','pmax');
-DATA.JMAX    = h5readatt(filename,'/data/input/grid','jmax');
-DATA.Nx      = h5readatt(filename,'/data/input/grid','Nx');
-DATA.Ny      = h5readatt(filename,'/data/input/grid','Ny');
-DATA.L       = h5readatt(filename,'/data/input/grid','Lx');
-try
-DATA.CLOS    = h5readatt(filename,'/data/input/model','CLOS');
-DATA.NL_CLOS = h5readatt(filename,'/data/input/model','NL_CLOS');
-catch
+    DATA.inputs.DT_SIM  = h5readatt(filename,'/data/input/basic','dt');
+    DATA.inputs.PMAX    = h5readatt(filename,'/data/input/grid','pmax');
+    DATA.inputs.JMAX    = h5readatt(filename,'/data/input/grid','jmax');
+    DATA.inputs.Nx      = h5readatt(filename,'/data/input/grid','Nx');
+    DATA.inputs.Ny      = h5readatt(filename,'/data/input/grid','Ny');
+    DATA.inputs.L       = h5readatt(filename,'/data/input/grid','Lx');
     try
-        DATA.ha_cl   = h5readatt(filename,'/data/input/closure','hierarchy_closure');
-        DATA.CLOS    = h5readatt(filename,'/data/input/closure','dmax');   
-        DATA.nl_cl   = h5readatt(filename,'/data/input/closure','nonlinear_closure');   
-        DATA.NL_CLOS = h5readatt(filename,'/data/input/closure','nmax');   
+    DATA.inputs.CLOS    = h5readatt(filename,'/data/input/model','CLOS');
+    DATA.inputs.NL_CLOS = h5readatt(filename,'/data/input/model','NL_CLOS');
     catch
-        DATA.CLOS = 99;
-        DATA.NL_CLOS = 99;
+        try
+            DATA.inputs.ha_cl   = h5readatt(filename,'/data/input/closure','hierarchy_closure');
+            DATA.inputs.CLOS    = h5readatt(filename,'/data/input/closure','dmax');   
+            DATA.inputs.nl_cl   = h5readatt(filename,'/data/input/closure','nonlinear_closure');   
+            DATA.inputs.NL_CLOS = h5readatt(filename,'/data/input/closure','nmax');   
+        catch
+            DATA.inputs.CLOS = 99;
+            DATA.inputs.NL_CLOS = 99;
+        end
     end
-end
-DATA.Na      = h5readatt(filename,'/data/input/model','Na');
-DATA.NU      = h5readatt(filename,'/data/input/model','nu');
-DATA.MUp     = h5readatt(filename,'/data/input/model','mu_p');
-DATA.MUj     = h5readatt(filename,'/data/input/model','mu_j');
-DATA.MUx     = h5readatt(filename,'/data/input/model','mu_x');
-DATA.MUy     = h5readatt(filename,'/data/input/model','mu_y');
-DATA.MUz     = h5readatt(filename,'/data/input/model','mu_z');
-DATA.LINEARITY = h5readatt(filename,'/data/input/model','LINEARITY');
-DATA.BETA    = h5readatt(filename,'/data/input/model','beta');
-DATA.TAU_E   = h5readatt(filename,'/data/input/model','tau_e');
-DATA.HYP_V   = h5readatt(filename,'/data/input/model','HYP_V');
-DATA.K_cB    = h5readatt(filename,'/data/input/model','k_cB');
-DATA.K_gB    = h5readatt(filename,'/data/input/model','k_gB');
+    DATA.inputs.Na      = h5readatt(filename,'/data/input/model','Na');
+    DATA.inputs.NU      = h5readatt(filename,'/data/input/model','nu');
+    DATA.inputs.MUp     = h5readatt(filename,'/data/input/model','mu_p');
+    DATA.inputs.MUj     = h5readatt(filename,'/data/input/model','mu_j');
+    DATA.inputs.MUx     = h5readatt(filename,'/data/input/model','mu_x');
+    DATA.inputs.MUy     = h5readatt(filename,'/data/input/model','mu_y');
+    DATA.inputs.MUz     = h5readatt(filename,'/data/input/model','mu_z');
+    DATA.inputs.LINEARITY = h5readatt(filename,'/data/input/model','LINEARITY');
+    DATA.inputs.BETA    = h5readatt(filename,'/data/input/model','beta');
+    DATA.inputs.TAU_E   = h5readatt(filename,'/data/input/model','tau_e');
+    DATA.inputs.HYP_V   = h5readatt(filename,'/data/input/model','HYP_V');
+    DATA.inputs.K_cB    = h5readatt(filename,'/data/input/model','k_cB');
+    DATA.inputs.K_gB    = h5readatt(filename,'/data/input/model','k_gB');
 
-DATA.W_GAMMA   = h5readatt(filename,'/data/input/diag_par','write_gamma') == 'y';
-DATA.W_PHI     = h5readatt(filename,'/data/input/diag_par','write_phi')   == 'y';
-DATA.W_NA00    = h5readatt(filename,'/data/input/diag_par','write_Na00')  == 'y';
-DATA.W_NAPJ    = h5readatt(filename,'/data/input/diag_par','write_Napj')  == 'y';
-DATA.W_SAPJ    = h5readatt(filename,'/data/input/diag_par','write_Sapj')  == 'y';
+    DATA.inputs.W_GAMMA   = h5readatt(filename,'/data/input/diag_par','write_gamma') == 'y';
+    DATA.inputs.W_PHI     = h5readatt(filename,'/data/input/diag_par','write_phi')   == 'y';
+    DATA.inputs.W_NA00    = h5readatt(filename,'/data/input/diag_par','write_Na00')  == 'y';
+    DATA.inputs.W_NAPJ    = h5readatt(filename,'/data/input/diag_par','write_Napj')  == 'y';
+    DATA.inputs.W_SAPJ    = h5readatt(filename,'/data/input/diag_par','write_Sapj')  == 'y';
 
-% Species dependent parameters
-DATA.sigma = zeros(1,DATA.Na);
-DATA.tau   = zeros(1,DATA.Na);
-DATA.q     = zeros(1,DATA.Na);
-DATA.K_N   = zeros(1,DATA.Na);
-DATA.K_T   = zeros(1,DATA.Na);
-spnames = {'ions','electrons'};
-for ia=1:DATA.Na
-    spdata = ['/data/input/',spnames{ia}];
-    DATA.sigma(ia) = h5readatt(filename,spdata,'sigma');
-    DATA.tau(ia)   = h5readatt(filename,spdata,'tau');
-    DATA.q(ia)     = h5readatt(filename,spdata,'q');
-    DATA.K_N(ia)   = h5readatt(filename,spdata,'k_N');
-    DATA.K_T(ia)   = h5readatt(filename,spdata,'k_T');
-end
-DATA.spnames = spnames{1:DATA.Na};
-DATA.CONAME = DATA.CO;
+    % Species dependent parameters
+    DATA.inputs.sigma = zeros(1,DATA.inputs.Na);
+    DATA.inputs.tau   = zeros(1,DATA.inputs.Na);
+    DATA.inputs.q     = zeros(1,DATA.inputs.Na);
+    DATA.inputs.K_N   = zeros(1,DATA.inputs.Na);
+    DATA.inputs.K_T   = zeros(1,DATA.inputs.Na);
+    spnames = {'ions','electrons'};
+    for ia=1:DATA.inputs.Na
+        spdata = ['/data/input/',spnames{ia}];
+        DATA.inputs.sigma(ia) = h5readatt(filename,spdata,'sigma');
+        DATA.inputs.tau(ia)   = h5readatt(filename,spdata,'tau');
+        DATA.inputs.q(ia)     = h5readatt(filename,spdata,'q');
+        DATA.inputs.K_N(ia)   = h5readatt(filename,spdata,'k_N');
+        DATA.inputs.K_T(ia)   = h5readatt(filename,spdata,'k_T');
+    end
+    DATA.inputs.spnames = spnames{1:DATA.inputs.Na};
+    DATA.inputs.CONAME = DATA.inputs.CO;
 
-if    (DATA.CLOS == 0); DATA.CLOSNAME = 'Trunc.';
-elseif(DATA.CLOS == 1); DATA.CLOSNAME = 'Clos. 1';
-elseif(DATA.CLOS == 2); DATA.CLOSNAME = 'Clos. 2';
-end
+    if    (DATA.inputs.CLOS == 0); DATA.CLOSNAME = 'Trunc.';
+    elseif(DATA.inputs.CLOS == 1); DATA.CLOSNAME = 'Clos. 1';
+    elseif(DATA.inputs.CLOS == 2); DATA.CLOSNAME = 'Clos. 2';
+    end
 
-degngrad   = ['P_',num2str(DATA.PMAX),'_J_',num2str(DATA.JMAX)];
+    degngrad   = ['P_',num2str(DATA.inputs.PMAX),'_J_',num2str(DATA.inputs.JMAX)];
 
-degngrad = [degngrad,'_Kni_%1.1f_nu_%0.0e_',...
-        DATA.CONAME,'_CLOS_',num2str(DATA.CLOS),'_mu_%0.0e'];
-degngrad   = sprintf(degngrad,[DATA.K_N,DATA.NU,DATA.MUx]);
-% if ~DATA.LINEARITY; degngrad = ['lin_',degngrad]; end
-resolution = [num2str(DATA.Nx),'x',num2str(DATA.Ny),'_'];
-gridname   = ['L_',num2str(DATA.L),'_'];
-DATA.PARAMS = [resolution,gridname,degngrad];
\ No newline at end of file
+    degngrad = [degngrad,'_Kni_%1.1f_nu_%0.0e_',...
+            DATA.inputs.CONAME,'_CLOS_',num2str(DATA.inputs.CLOS),'_mu_%0.0e'];
+    degngrad   = sprintf(degngrad,[DATA.inputs.K_N,DATA.inputs.NU,DATA.inputs.MUx]);
+    % if ~DATA.LINEARITY; degngrad = ['lin_',degngrad]; end
+    resolution = [num2str(DATA.inputs.Nx),'x',num2str(DATA.inputs.Ny),'_'];
+    gridname   = ['L_',num2str(DATA.inputs.L),'_'];
+    DATA.params_string = [resolution,gridname,degngrad];
+end
\ No newline at end of file
diff --git a/matlab/plot/plot_radial_transport_and_spacetime.m b/matlab/plot/plot_radial_transport_and_spacetime.m
index 3ee858a7..0234d379 100644
--- a/matlab/plot/plot_radial_transport_and_spacetime.m
+++ b/matlab/plot/plot_radial_transport_and_spacetime.m
@@ -10,12 +10,6 @@ function [FIGURE] = plot_radial_transport_and_spacetime(DATA, OPTIONS)
     Gx_infty_std = std (DATA.PGAMMA_RI(its0D:ite0D))*SCALE;
     Qx_infty_avg = mean(DATA.HFLUX_X(its0D:ite0D))*SCALE;
     Qx_infty_std = std (DATA.HFLUX_X(its0D:ite0D))*SCALE;
-%     disp(['Q_x=',sprintf('%2.2e',Qx_infty_avg),'+-',sprintf('%2.2e',Qx_infty_std)]);
-%     f_avg_z      = squeeze(mean(DATA.PHI(:,:,:,:),3));
-%     [~,ikzf] = max(squeeze(mean(abs(f_avg_z(1,:,its3D:ite3D)),3)));
-%     ikzf = min([ikzf,DATA.Nky]);
-%     Ns3D = numel(DATA.Ts3D);
-%     [KX, KY] = meshgrid(DATA.kx, DATA.ky);
     %% error estimation
     DT_       = (tend-tstart)/OPTIONS.NCUT;
     Qx_ee     = zeros(1,OPTIONS.NCUT);
@@ -27,41 +21,16 @@ function [FIGURE] = plot_radial_transport_and_spacetime(DATA, OPTIONS)
     Qx_avg    = mean(Qx_ee);
     Qx_err    =  std(Qx_ee);
     disp(['Q_avg=',sprintf('%2.2e',Qx_avg),'+-',sprintf('%2.2e',Qx_err)]);
-%     %% computations
-% 
-%     % Compute zonal and non zonal energies
-%     E_Zmode_SK       = zeros(1,Ns3D);
-%     E_NZmode_SK      = zeros(1,Ns3D);
-%     for it = 1:numel(DATA.Ts3D)
-%         E_Zmode_SK(it)   = squeeze(DATA.ky(ikzf).^2.*abs(squeeze(f_avg_z(ikzf,1,it))).^2);
-%         E_NZmode_SK(it)  = squeeze(sum(sum(((1+KX.^2+KY.^2).*abs(squeeze(f_avg_z(:,:,it))).^2.*(KY~=0)))));
-%     end
-%     % Compute thermodynamic entropy Eq.(5) Navarro et al. 2012 PoP
-%     % 1/2 sum_p sum_j Napj^2(k=0) (avg z)
-%     Nipjz = sum(sum(sum(sum(conj(DATA.Nipj).*DATA.Nipj))));
-%     ff = trapz(DATA.z,Nipjz,5);
-%     E_TE = 0.5*squeeze(ff);
-%     % Compute electrostatic energy
-%     E_ES = zeros(size(DATA.Ts5D));
-%     bi = sqrt(KX.^2+KY.^2)*DATA.sigma(1)*sqrt(2*DATA.tau(1)); %argument of the kernel
-%     for it5D = 1:numel(DATA.Ts5D)
-%         [~,it3D] = min(abs(DATA.Ts3D-DATA.Ts5D(it5D)));
-%         for in = 1:DATA.Jmaxi
-%             Knphi = kernel(in-1,bi).*squeeze(trapz(DATA.z,DATA.PHI(:,:,:,it3D),3));
-%             Ni0n_z= squeeze(trapz(DATA.z,DATA.Nipj(1,in,:,:,:,it5D),5));
-%             E_ES(it5D) = 0.5*sum(sum(abs(conj(Knphi).*Ni0n_z)));
-%         end
-%     end
 %% Figure    
 clr_ = lines(20);
 mvm = @(x) movmean(x,OPTIONS.NMVA);
-    FIGURE.fig = figure; FIGURE.FIGNAME = ['ZF_transport_drphi','_',DATA.PARAMS]; %set(gcf, 'Position',  [500, 1000, 1000, 600])
+    FIGURE.fig = figure; FIGURE.FIGNAME = ['ZF_transport_drphi','_',DATA.params_string]; %set(gcf, 'Position',  [500, 1000, 1000, 600])
     FIGURE.ax1 = subplot(2,1,1,'parent',FIGURE.fig);
         plot(mvm(DATA.Ts0D),mvm(DATA.PGAMMA_RI*SCALE),'--',...
-            'color',clr_((DATA.Pmaxi-1)/2,:),...
+            'color',clr_((DATA.grids.Np-1)/2,:),...
             'DisplayName',['$\Gamma_x$ ',DATA.paramshort]); hold on;
         plot(mvm(DATA.Ts0D),mvm(DATA.HFLUX_X*SCALE),'-',...
-            'color',clr_((DATA.Pmaxi-1)/2,:),...
+            'color',clr_((DATA.grids.Np-1)/2,:),...
             'DisplayName',['$Q_x$ ',DATA.paramshort]); hold on;
         ylabel('Transport')  
         if(~isnan(Qx_infty_avg))
@@ -79,24 +48,13 @@ mvm = @(x) movmean(x,OPTIONS.NMVA);
     grid on; set(gca,'xticklabel',[]); 
     title({DATA.param_title,...
         ['$\Gamma^{\infty} = $',num2str(Gx_infty_avg),'$, Q^{\infty} = $',num2str(Qx_infty_avg)]});
-    
-%  %% Free energy    
-%     FIGURE.ax2 = subplot(3,1,2,'parent',FIGURE.fig);
-%     yyaxis left
-%         plot(DATA.Ts5D,E_TE,'DisplayName','$\epsilon_f$'); hold on;
-%         ylabel('Entropy');%('$\epsilon_f$')
-%     yyaxis right
-%         plot(DATA.Ts5D,E_ES,'DisplayName','$\epsilon_\phi$');
-%         ylabel('ES energy');%('$\epsilon_\phi$')
-%         xlim([DATA.Ts5D(1), DATA.Ts5D(end)]);
-%         xlabel('$t c_s/R$'); grid on; set(gca,'xticklabel',[]);% xlim([0 500]);
 %% radial shear radial profile
     % computation
     Ns3D = numel(DATA.Ts3D);
-    [KX, KY] = meshgrid(DATA.kx, DATA.ky);
+    [KX, KY] = meshgrid(DATA.grids.kx, DATA.grids.ky);
     plt = @(x) mean(x(:,:,:),1);
-    kycut = max(DATA.ky);
-    kxcut = max(DATA.kx);
+    kycut = max(DATA.grids.ky);
+    kxcut = max(DATA.grids.kx);
     LP = (abs(KY)<kycut).*(abs(KX)<kxcut); %Low pass filter
 
     OPTIONS.NAME = OPTIONS.ST_FIELD;
@@ -104,12 +62,12 @@ mvm = @(x) movmean(x,OPTIONS.NMVA);
     OPTIONS.COMP = 'avg';
     OPTIONS.TIME = DATA.Ts3D;
     OPTIONS.POLARPLOT = 0;
-    toplot = process_field(DATA,OPTIONS);
+    toplot = process_field_v2(DATA,OPTIONS);
     f2plot = toplot.FIELD;
     dframe = ite3D - its3D;
     clim = max(max(max(abs(plt(f2plot(:,:,:))))));
     FIGURE.ax3 = subplot(2,1,2,'parent',FIGURE.fig);
-        [TY,TX] = meshgrid(DATA.x,DATA.Ts3D(toplot.FRAMES));
+        [TY,TX] = meshgrid(DATA.grids.x,DATA.Ts3D(toplot.FRAMES));
         pclr = pcolor(TX,TY,squeeze(plt(f2plot))'); 
         set(pclr, 'edgecolor','none'); 
         legend(['$\langle ',OPTIONS.ST_FIELD,' \rangle_{y,z}$']) %colorbar;
@@ -124,21 +82,4 @@ mvm = @(x) movmean(x,OPTIONS.NMVA);
         subplot(311)
         plot(DATA.Ts3D,squeeze(mean(plt(f2plot),1)));
     end
- %% Zonal vs NZonal energies    
-%     subplot(312)
-%     it0 = 1; itend = Ns3D;
-%     trange = toplot.FRAMES;
-%     plt1 = @(x) x;%-x(1);
-%     plt2 = @(x) x./max((x(:)));
-%     toplot = sum(squeeze(plt(f2plot)).^2,1); %ST from before
-% %     plty = @(x) x(500:end)./max(squeeze(x(500:end)));
-%         yyaxis left
-% %         plot(plt1(DATA.Ts3D(trange)),plt2(E_Zmode_SK(trange)),'DisplayName','$k_{zf}^2|\phi_{kzf}|^2$');
-%         plot(plt1(DATA.Ts3D(trange)),plt2(toplot(:)),'DisplayName','Sum $A^2$');
-%         ylim([-0.1, 1.5]); ylabel('$E_{Z}$')
-%         yyaxis right
-%         plot(plt1(DATA.Ts3D(trange)),plt2(E_NZmode_SK(trange)),'DisplayName','$(1+k^2)|\phi^k|^2$');
-%         xlim([DATA.Ts3D(it0), DATA.Ts3D(itend)]);
-%         ylim([-0.1, 1.5]); ylabel('$E_{NZ}$')
-%         xlabel('$t c_s/R$'); grid on; set(gca,'xticklabel',[]);% xlim([0 500]);
 end
\ No newline at end of file
diff --git a/matlab/plot/show_moments_spectrum.m b/matlab/plot/show_moments_spectrum.m
index d3839297..1f93b35d 100644
--- a/matlab/plot/show_moments_spectrum.m
+++ b/matlab/plot/show_moments_spectrum.m
@@ -1,145 +1,42 @@
 function [ FIGURE ] = show_moments_spectrum( DATA, OPTIONS )
+species_name = {'i','e'}; % hard coded because this list is not output yet
 
-Pi = DATA.Pi;
-Ji = DATA.Ji;
-if ~(isempty(DATA.Nipjz))
-    Time_ = DATA.Ts3D;
-    Nipj = sum(abs(DATA.Nipjz),3);
-else
-    Time_ = DATA.Ts5D;
-%     Nipj = sum(sum(sum(abs(DATA.Nipj).^2,3),4),5);
-    Nipj = sum(sum(sum(conj(DATA.Nipj).*DATA.Nipj,3),4),5);
-end
-Nipj = squeeze(Nipj);
-
-if DATA.KIN_E
-Pe = DATA.Pe;
-Je = DATA.Je;
-    if ~(isempty(DATA.Nepjz))
-        Nepj = sum(abs(DATA.Nepjz),3);
-    else
-        Nepj = sum(sum(sum(abs(DATA.Nepj),3),4),5);
-    end
-    Nepj = squeeze(Nepj);
-end
-
-FIGURE.fig = figure; FIGURE.FIGNAME = ['mom_spectrum_',DATA.PARAMS];
+Pa = DATA.grids.Parray;
+Ja = DATA.grids.Jarray;
+Time_ = DATA.Ts3D;
+FIGURE.fig = figure; FIGURE.FIGNAME = ['mom_spectrum_',DATA.params_string];
 set(gcf, 'Position',  [100 50 1000 400])
 
-if ~OPTIONS.ST
-    t0 = OPTIONS.TIME(1);
-    t1 = OPTIONS.TIME(end);
-    [~,it0] = min(abs(t0-Time_));
-    [~,it1] = min(abs(t1-Time_));
-    Nipj = mean(Nipj(:,:,it0:it1),3);
-    if DATA.KIN_E
-    Nepj = mean(Nepj(:,:,it0:it1),3);
-    end
-    if numel(OPTIONS.TIME) == 1
-        TITLE=['$t=',num2str(OPTIONS.TIME),'$'];
-    else
-        TITLE=['$t\in[',num2str(t0),',',num2str(t1),']$'];
-    end 
-    Nipj = squeeze(Nipj);
-
-    ymini = min(Nipj); ymaxi = max(Nipj);
-
-    if DATA.KIN_E
-    Nepj = squeeze(Nepj);
-    ymine = min(Nepj); ymaxe = max(Nepj);
-    ymax  = max([ymaxi ymaxe]);
-    ymin  = min([ymini ymine]);
-    end
-    if DATA.KIN_E
-    subplot(121)
-    end
-    if ~OPTIONS.P2J
-        for ij = 1:numel(Ji)
-            name = ['$j=',num2str(Ji(ij)),'$'];
-            semilogy(Pi,Nipj(:,ij),'o-','DisplayName',name); hold on;
-        end
-        xlabel('$p$'); 
-    else
-        for ij = 1:numel(Ji)
-            name = ['$j=',num2str(Ji(ij)),'$'];
-            semilogy(Pi+2*Ji(ij),Nipj(:,ij),'o-','DisplayName',name); hold on;
-        end
-        xlabel('$p+2j$')
-    end
-    ylabel(['$\sum_{kx,ky}|N_i^{pj}|$']);
-    legend('show');
-    title([TITLE,' He-La ion spectrum']);
-    
-    if DATA.KIN_E
-    subplot(122)
-    if ~OPTIONS.P2J
-        for ij = 1:numel(Je)
-            name = ['$j=',num2str(Je(ij)),'$'];
-            semilogy(Pe,Nepj(:,ij),'o-','DisplayName',name); hold on;
-        end
-        xlabel('p'); 
-    else
-    for ij = 1:numel(Je)
-        name = ['$j=',num2str(Je(ij)),'$'];
-        semilogy(Pe+2*Je(ij),Nepj(:,ij),'o-','DisplayName',name); hold on;
-    end
-    xlabel('$p+2j$')
-    end
-    ylabel(['$\sum_{kx,ky}|N_e^{pj}|$']);
-    legend('show');
-    title([TITLE,' He-La elec. spectrum']);
-    end
-else
+for ia = 1:DATA.inputs.Na
+    Napjz  = sum(abs(squeeze(DATA.Napjz(ia,:,:,:,:))),3);
+    subplot(double(DATA.inputs.Na),1,double(ia))
     if OPTIONS.P2J
-        plotname = '$\langle\sum_k |N_i^{pj}|\rangle_{p+2j=const}$';
-        [JJ,PP] = meshgrid(Ji,Pi);
-        P2Ji = PP + 2*JJ;
+        plotname = ['$\langle\sum_k |N_',species_name{ia},'^{pj}|\rangle_{p+2j=const}$'];
+        [JJ,PP] = meshgrid(Ja,Pa);
+        P2J = PP + 2*JJ;
         % form an axis of velocity ordered moments
-        y_ = unique(P2Ji); yname = '$p+2j$';
+        p2j = unique(P2J); yname = '$p+2j$';
         % weights to average
-        weights = zeros(size(y_));
+        weights = zeros(size(p2j));
         % space time of moments amplitude wrt to p+2j degree
-        Ni_ST = zeros(numel(y_),numel(Time_));
+        Na_ST = zeros(numel(p2j),numel(Time_));
         % fill the st diagramm by averaging every p+2j=n moments together
-        for ip = 1:numel(Pi)
-            for ij = 1:numel(Ji)
-                [~,ip2j] = min(abs(y_-(Pi(ip)+2*Ji(ij))));
-                Ni_ST(ip2j,:) = Ni_ST(ip2j,:) + transpose(squeeze(Nipj(ip,ij,:)));
+        for ip = 1:numel(Pa)
+            for ij = 1:numel(Ja)
+                [~,ip2j] = min(abs(p2j-(Pa(ip)+2*Ja(ij))));
+                Na_ST(ip2j,:) = Na_ST(ip2j,:) + transpose(squeeze(Napjz(ip,ij,:)));
                 weights(ip2j) = weights(ip2j) + 1;
             end
         end
         % doing the average
-        for ip2j = 1:numel(y_)
-            Ni_ST(ip2j,:) = Ni_ST(ip2j,:)/weights(ip2j);
-        end
-        if DATA.KIN_E
-        % same for electrons!!
-        [JJ,PP] = meshgrid(Je,Pe);
-        P2Je = PP + 2*JJ;
-        % form an axis of velocity ordered moments
-        p2je = unique(P2Je);
-        % weights to average
-        weights = zeros(size(p2je));
-        % space time of moments amplitude wrt to p+2j degree
-        Ne_ST = zeros(numel(p2je),numel(Time_));
-        % fill the st diagramm by averaging every p+2j=n moments together
-        for ip = 1:numel(Pe)
-            for ij = 1:numel(Je)
-                [~,ip2j] = min(abs(y_-(Pe(ip)+2*Je(ij))));
-                Ne_ST(ip2j,:) = Ne_ST(ip2j,:) + transpose(squeeze(Nepj(ip,ij,:)));
-                weights(ip2j) = weights(ip2j) + 1;
-            end
-        end
-        % doing the average
-        for ip2j = 1:numel(y_)
-            Ne_ST(ip2j,:) = Ne_ST(ip2j,:)/weights(ip2j);
-        end 
+        for ip2j = 1:numel(p2j)
+            Na_ST(ip2j,:) = Na_ST(ip2j,:)/weights(ip2j);
         end
         ticks_labels = {};
     else % We just order our moments w.r.t. to the convention ..
          % (0,0) (1,0) (2,0) (0,1) (3,0) (1,1) (4,0) (2,1) (0,2) etc.
         plotname = '$\langle\sum_k |N_i^{pj}|^2\rangle_z$';
-        Nmoments = numel(Nipj(:,:,1)); % total number of moments
+        Nmoments = numel(Napjz(:,:,1)); % total number of moments
         HL_deg   = zeros(Nmoments,2);   % list of degrees, first column Hermite, second Laguerre
         im  = 2;
         deg = 1; % the zero degree is always here first place
@@ -149,42 +46,34 @@ else
         FOUND = 1;
             while(FOUND) % As we find a pair matching the degree we retry
             FOUND = 0;
-            for ij = 1:DATA.Jmaxi
-            for ip = 1:DATA.Pmaxi
-                if((ip-1)+2*(ij-1) == deg)
-                    % Check if the pair is already added
-                    check_ = HL_deg == [DATA.Pi(ip) DATA.Pi(ij)];
-                    check_ = sum(check_(:,1) .* check_(:,2));
-                    if ~check_ % if not add it
-                        HL_deg(im,1) = DATA.Pi(ip);
-                        HL_deg(im,2) = DATA.Pi(ij);
-                        ticks_labels{im} = ['(',num2str(DATA.Pi(ip)),',',num2str(DATA.Ji(ij)),')'];
-                        im = im + 1; FOUND = 1;
+            for ij = 1:DATA.grids.Nj
+                for ip = 1:DATA.grids.Np
+                    if((ip-1)+2*(ij-1) == deg)
+                        % Check if the pair is already added
+                        check_ = HL_deg == [DATA.grids.Parray(ip) DATA.grids.Jarray(ij)];
+                        check_ = sum(check_(:,1) .* check_(:,2));
+                        if ~check_ % if not add it
+                            HL_deg(im,1) = DATA.grids.Parray(ip);
+                            HL_deg(im,2) = DATA.grids.Jarray(ij);
+                            ticks_labels{im} = ['(',num2str(DATA.grids.Parray(ip)),',',num2str(DATA.grids.Jarray(ij)),')'];
+                            im = im + 1; FOUND = 1;
+                        end
+                    end
                     end
-                end
                 end
             end
-            end
             % No pair found anymore, increase the degree
             deg = deg + 1;
         end
-        
+
         % form an axis of velocity ordered moments
-        y_ = 1:Nmoments; yname = '$(P,J)$';
-        % space time of moments amplitude wrt to p+2j degree
-        Ni_ST = zeros(Nmoments,numel(Time_));
-        for i_ = 1:Nmoments
-           Ni_ST(i_,:) = Nipj(HL_deg(i_,1)+1,HL_deg(i_,2)+1,:); 
-        end
-        if DATA.KIN_E
+        p2j = 1:Nmoments; yname = '$(P,J)$';
         % space time of moments amplitude wrt to p+2j degree
-        Ne_ST = zeros(Nmoments,numel(Time_));
+        Na_ST = zeros(Nmoments,numel(Time_));
         for i_ = 1:Nmoments
-           Ne_ST = Nepj(HL_deg(i_,1)+1,HL_deg(i_,2)+1,:); 
+           Na_ST(i_,:) = Napjz((HL_deg(i_,1)/DATA.grids.deltap)+1,HL_deg(i_,2)+1,:); 
         end
-        end    
-         
-    end
+    end    
     % plots
     % scaling
     if OPTIONS.NORMALIZED
@@ -192,29 +81,16 @@ else
     else
     plt = @(x,i) x;
     end
-    if DATA.KIN_E
-    subplot(2,1,1)
-    end
-    
-    imagesc(Time_,y_,plt(Ni_ST,1:numel(y_))); 
+
+    imagesc(Time_,p2j,plt(Na_ST,1:numel(p2j))); 
     set(gca,'YDir','normal')        
     xlabel('$t$'); ylabel(yname);
     if ~isempty(ticks_labels)
-        yticks(y_);
+        yticks(p2j);
         yticklabels(ticks_labels)
     end
     title(plotname)
-    
-    if DATA.KIN_E
-    subplot(2,1,2)
-        imagesc(Time_,p2je,plt(Ne_ST,1:numel(y_))); 
-        set(gca,'YDir','normal')
-        xlabel('$t$'); ylabel(yname)
-        title(plotname)
-        suptitle(DATA.param_title);
-    end
 
 end
-
 end
 
diff --git a/matlab/process_field_v2.m b/matlab/process_field_v2.m
index f744d7e4..5b2d103e 100644
--- a/matlab/process_field_v2.m
+++ b/matlab/process_field_v2.m
@@ -9,35 +9,35 @@ for i = 1:numel(OPTIONS.TIME)
 end
 FRAMES = unique(FRAMES);
 %% Setup the plot geometry
-[KX, KY] = meshgrid(DATA.kx, DATA.ky);
+[KX, KY] = meshgrid(DATA.grids.kx, DATA.grids.ky);
 directions = {'y','x','z'};
-Nx = DATA.Nx; Ny = DATA.Ny; Nz = DATA.Nz; Nt = numel(FRAMES);
+Nx = DATA.grids.Nx; Ny = DATA.grids.Ny; Nz = DATA.grids.Nz; Nt = numel(FRAMES);
 POLARPLOT = OPTIONS.POLARPLOT;
 LTXNAME = OPTIONS.NAME;
 switch OPTIONS.PLAN
     case 'xy'
         XNAME = '$x$'; YNAME = '$y$';
-        [X,Y] = meshgrid(DATA.x,DATA.y);
+        [X,Y] = meshgrid(DATA.grids.x,DATA.grids.y);
         REALP = 1; COMPDIM = 3; POLARPLOT = 0; SCALE = 1;
     case 'xz'
         XNAME = '$x$'; YNAME = '$z$';
-        [Y,X] = meshgrid(DATA.z,DATA.x);
+        [Y,X] = meshgrid(DATA.grids.z,DATA.grids.x);
         REALP = 1; COMPDIM = 1; SCALE = 0;
     case 'yz'
         XNAME = '$y$'; YNAME = '$z$'; 
-        [Y,X] = meshgrid(DATA.z,DATA.y);
+        [Y,X] = meshgrid(DATA.grids.z,DATA.grids.y);
         REALP = 1; COMPDIM = 2; SCALE = 0;
     case 'kxky'
         XNAME = '$k_x$'; YNAME = '$k_y$';
-        [X,Y] = meshgrid(DATA.kx,DATA.ky);
+        [X,Y] = meshgrid(DATA.grids.kx,DATA.grids.ky);
         REALP = 0; COMPDIM = 3; POLARPLOT = 0; SCALE = 1;
     case 'kxz'
         XNAME = '$k_x$'; YNAME = '$z$';
-        [Y,X] = meshgrid(DATA.z,DATA.kx);
+        [Y,X] = meshgrid(DATA.grids.z,DATA.grids.kx);
         REALP = 0; COMPDIM = 1; POLARPLOT = 0; SCALE = 0;
     case 'kyz'
         XNAME = '$k_y$'; YNAME = '$z$';
-        [Y,X] = meshgrid(DATA.z,DATA.ky);
+        [Y,X] = meshgrid(DATA.grids.z,DATA.grids.ky);
         REALP = 0; COMPDIM = 2; POLARPLOT = 0; SCALE = 0;
     case 'sx'
         XNAME = '$v_\parallel$'; YNAME = '$\mu$';
@@ -112,24 +112,24 @@ switch OPTIONS.COMP
             i = OPTIONS.COMP;
             compr = @(x) x(i,:,:);
             if REALP
-                COMPNAME = sprintf(['y=','%2.1f'],DATA.x(i));
+                COMPNAME = sprintf(['y=','%2.1f'],DATA.grids.x(i));
             else
-                COMPNAME = sprintf(['k_y=','%2.1f'],DATA.kx(i));
+                COMPNAME = sprintf(['k_y=','%2.1f'],DATA.grids.kx(i));
             end
             FIELDNAME = [LTXNAME,'(',COMPNAME,')'];
         case 2
             i = OPTIONS.COMP;
             compr = @(x) x(:,i,:);
             if REALP
-                COMPNAME = sprintf(['x=','%2.1f'],DATA.y(i));
+                COMPNAME = sprintf(['x=','%2.1f'],DATA.grids.y(i));
             else
-                COMPNAME = sprintf(['k_x=','%2.1f'],DATA.ky(i));
+                COMPNAME = sprintf(['k_x=','%2.1f'],DATA.grids.ky(i));
             end
             FIELDNAME = [LTXNAME,'(',COMPNAME,')'];
         case 3
             i = OPTIONS.COMP;
             compr = @(x) x(:,:,i);
-            COMPNAME = sprintf(['z=','%2.1f'],DATA.z(i));
+            COMPNAME = sprintf(['z=','%2.1f'],DATA.grids.z(i));
             FIELDNAME = [LTXNAME,'(',COMPNAME,')'];
     end
 end
@@ -161,7 +161,6 @@ end
 switch OPTIONS.NAME
     case '\phi' %ES pot
         NAME = 'phi';
-%         FLD_ = DATA.PHI(:,:,:,FRAMES); % data to plot
         FLD_ = DATA.PHI(:,:,:,FRAMES); % data to plot
         OPE_ = 1;        % Operation on data
     case '\psi' %EM pot
@@ -296,7 +295,7 @@ else
         tmp = zeros(DATA.Nky,DATA.Nkx,Nz);
     end
     for it = 1:numel(FRAMES)
-        for iz = 1:numel(DATA.z)
+        for iz = 1:numel(DATA.grids.z)
             tmp(:,:,iz) = squeeze(process(OPE_.*FLD_(:,:,iz,it)));
         end
         FIELD(:,:,it) = squeeze(compr(tmp));
-- 
GitLab