diff --git a/matlab/PlotParticleTrajectory.m b/matlab/PlotParticleTrajectory.m
index ffef0e1..5b632c6 100644
--- a/matlab/PlotParticleTrajectory.m
+++ b/matlab/PlotParticleTrajectory.m
@@ -1,65 +1,72 @@
 function PlotParticleTrajectory(M,partnumber,t,text)
 %UNTITLED3 Summary of this function goes here
 %   Detailed explanation goes here
 if (nargin<4)
     text='';
 else
     text=['_',text];
 end
 f=figure();
 %time=((t(1):t(end))-1)*M.dt*double(M.it2);
 time=M.tpart(t(1):t(end));
 %sgtitle(sprintf('Particles %d',partnumber));
 ax1=subplot(1,2,1);
 hold(ax1);
 ax2=subplot(1,2,2);
 hold(ax2);
 Msize=8;
 i=1;
 for part=partnumber
 p1(i)=plot(ax1,M.Z(part,t),M.R(part,t),'x-.','Linewidth',1.1,...
     'Displayname',sprintf('part=%d',part),'MarkerIndices',1,...
     'Markersize',Msize);
 plot(ax1,M.Z(part,t(end)),M.R(part,t(end)),'^','Linewidth',1.1,...
     'Displayname',sprintf('part=%d',part),'MarkerIndices',1,...
     'Markersize',Msize,'color',p1(i).Color)
 x=M.R(part,t).*cos(M.THET(part,t));
 y=M.R(part,t).*sin(M.THET(part,t));
 %pp=spline(x,y);
 p2=plot(ax2,x,y,'x-.','Linewidth',1.1,...
     'Displayname',sprintf('part=%d',part),'MarkerIndices',1,...
     'Markersize',Msize);
 plot(ax2,M.R(part,t(end)).*cos(M.THET(part,t(end))),M.R(part,t(end)).*sin(M.THET(part,t(end))),'^',...
     'Linewidth',1.1,'Displayname',sprintf('part=%d',part),'MarkerIndices',1,...
     'Markersize',Msize,'color',p2.Color)
 i=i+1;
 end
 xlabel(ax1,'z [m]')
 ylabel(ax1,'r [m]')
 sgtitle(sprintf('Position between t=[%3.2f-%3.2f] ns',time(1)*1e9,time(end)*1e9))
-%xlim(ax1,[M.zgrid(1) M.zgrid(end)])
-xlim(ax1,[-.17 .17])
-%ylim(ax1,[M.rgrid(1) M.rgrid(end)])
-ylim(ax1,[0.005 0.025])
+xlim(ax1,[M.zgrid(1) M.zgrid(end)])
+%xlim(ax1,[-.17 .17])
+ylim(ax1,[M.rgrid(1) M.rgrid(end)])
+%ylim(ax1,[0.005 0.025])
 legend(ax1,p1(1:end))
 grid(ax1,'on');
 xlabel(ax2,'x [m]')
 ylabel(ax2,'y [m]')
+t=2*pi*linspace(0,1,100);
+xin=M.rgrid(1)*cos(t);
+yin=M.rgrid(1)*sin(t);
+plot(ax2,xin,yin,'k-')
+xout=M.rgrid(end)*cos(t);
+yout=M.rgrid(end)*sin(t);
+plot(ax2,xout,yout,'k-')
 axis(ax2,'equal')
 %legend(ax2)
 grid(ax2,'on');
 
 % ax=subplot(1,2,2);
 % xlabel(ax,'t [s]')
 % ylabel(ax,'VR [m/s]')
 % title(ax,'Radial velocity')
 % grid on;
 
 f.PaperOrientation='landscape';
-[~, name, ~] = fileparts(M.file);
+[~, name, ~] = fileparts(M.fullpath);
 f.PaperUnits='centimeters';
 f.PaperSize=[16 9];
 print(f,sprintf('%sTrajectories%s',name,text),'-dpdf','-fillpage')
 
 end
 
diff --git a/matlab/analyse_espicfields.m b/matlab/analyse_espicfields.m
index 8251528..fe2014f 100644
--- a/matlab/analyse_espicfields.m
+++ b/matlab/analyse_espicfields.m
@@ -1,369 +1,372 @@
 % file='teststablegauss_13_traject2.h5';
 % file='unigauss.h5';
 %  file='Dav_5e14fine_wr+.h5';
 % file='stablegauss_8e19fine.h5'
 % % %file='teststable_Dav1.h5';
 % % %close all hidden;
 % if (~exist('M','var'))
 %     M.file=file;
 %  end
 %  M=load_espic2d(file,M,'all');
 
 t2dlength=size(M.t2d,1)
-fieldstart=max(1,t2dlength-800);%floor(0.95*t2dlength);
+fieldstart=max(1,t2dlength-100);%floor(0.95*t2dlength);
 deltat=t2dlength-fieldstart;
 
 %[~, rgridend]=min(abs(M.rgrid-0.045));
 rgridend=sum(M.nnr(1:2));
 [~, name, ~] = fileparts(M.file);
 
 M.plotEnergy
 
 %fieldstart=2300; fieldend=2500;
 dens=mean(M.N(:,:,fieldstart:end),3);
 pot=mean(M.pot(:,:,fieldstart:end),3);
 brillratio=2*dens*M.me./(M.eps_0*M.Bz'.^2);
 [R,Z]=meshgrid(M.rgrid,M.zgrid);
 Rinv=1./R;
 Rinv(:,1)=0;
 VTHET=mean(M.fluidUTHET(:,:,fieldstart:end),3);
 omegare=(VTHET.*Rinv');
 maxdens=max(max(dens));
 
 
 
 % f=figure();
 % ax3=gca;
 % surface(ax3,M.zgrid(1:end-1),M.rgrid(1:end-1),(squeeze(mean(M.Presstens(4,:,:,fieldstart:end),4)))*M.vlight)
 % xlabel(ax3,'z [m]')
 % ylabel(ax3,'r [m]')
 % xlim(ax3,[M.zgrid(1) M.zgrid(end)])
 % ylim(ax3,[M.rgrid(1) M.rgrid(50)])
 % colormap(ax3,'jet')
 % c = colorbar(ax3);
 % c.Label.String= 'thermal v_\theta [m/s]';
 % %c.Limits=[min(M.fluidUTHET(:)) max(M.fluidUTHET(:))];
 % %caxis(ax3,[min(M.fluidUTHET(:)) max(M.fluidUTHET(:))])
 % title(ax3,'Azimuthal velocity')
 % %set(ax3,'colorscale','log')
 % grid(ax3, 'on')
 % view(ax3,2)
 % f.PaperOrientation='landscape';
 % [~, name, ~] = fileparts(M.file);
 % f.PaperUnits='centimeters';
 % papsize=[16 14];
 % f.PaperSize=papsize;
 % print(f,sprintf('%sfluid_thermtheta',name),'-dpdf','-fillpage')
 
 %% Psi function
-displaypsi(M,deltat)
+try
+    displaypsi(M,deltat)
+catch
+end
 
 %% Density
 f=figure('Name', sprintf('%sfluid_dens',name));
 ax1=gca;
 h=surface(ax1,M.zgrid,M.rgrid,dens);
+%set(h,'edgecolor','none');
 ylim(ax1,[M.rgrid(1) M.rgrid(rgridend)])
 xlim(ax1,[M.zgrid(1) M.zgrid(end)])
 xlabel(ax1,'z [m]')
 ylabel(ax1,'r [m]')
 title(ax1,sprintf('Density t=[%1.2g-%1.2g]s n_e=%1.2gm^{-3}',M.t2d(fieldstart),M.t2d(end),double(maxdens)))
 c = colorbar(ax1);
 c.Label.String= 'n[m^{-3}]';
 view(ax1,2)
-set(h,'edgecolor','none');
 grid on;
+hold on;
 f.PaperOrientation='landscape';
 [~, name, ~] = fileparts(M.file);
 f.PaperUnits='centimeters';
 papsize=[16 14];
 f.PaperSize=papsize;
 print(f,sprintf('%sfluid_dens',name),'-dpdf','-fillpage')
 savefig(f,sprintf('%sfluid_dens',name))
 
 %% Fieldswide
 f=figure('Name', sprintf('%s fields',name));
 ax1=gca;
 h=contourf(ax1,M.zgrid,M.rgrid,dens,'Displayname','n_e [m^{-3}]');
 hold on;
 %[c1,h]=contour(ax1,M.zgrid,M.rgrid,pot./1e3,5,'m--','ShowText','off','linewidth',1.5,'Displayname','Equipotentials [kV]');
 %clabel(c1,h,'Color','white')
 Blines=zeros(size(M.Athet));
 for i=1:length(M.zgrid)
     Blines(i,:)=M.Athet(i,:).*M.rgrid';
 end
 zindex=floor(length(M.zgrid/2));
 levels=logspace( log10(min(min(Blines(:,2:end)))), log10(max(max(Blines(:,:)))),8);
 contour(ax1,M.zgrid,M.rgrid,Blines',levels,'r-.','linewidth',1.5,'Displayname','Magnetic field lines');
 xlim(ax1,[M.zgrid(1) M.zgrid(end)])
 ylim(ax1,[M.rgrid(1) M.rgrid(end)])
 legend
 xlabel(ax1,'z [m]')
 ylabel(ax1,'r [m]')
 title(ax1,sprintf('Density t=[%1.2g-%1.2g]s n_e=%1.2gm^{-3}',M.t2d(fieldstart),M.t2d(end),double(maxdens)))
 c = colorbar(ax1);
 c.Label.String= 'n[m^{-3}]';
 view(ax1,2)
 %set(h,'edgecolor','none');
 grid on;
 %rectangle('position',[M.zgrid(5) M.rgrid(3) M.zgrid(end-5)-M.zgrid(5) (M.rgrid(rgridend)-M.rgrid(1))],'Edgecolor','white','linestyle','--','linewidth',2)
 f.PaperOrientation='landscape';
 [~, name, ~] = fileparts(M.file);
 f.PaperUnits='centimeters';
 papsize=[18 10];
 f.PaperSize=papsize;
 print(f,sprintf('%sFieldswide',name),'-dpdf','-fillpage')
 savefig(f,sprintf('%sFieldswide',name))
 
 %% Fields
 f=figure('Name', sprintf('%s fields',name));
 ax1=gca;
 h=contourf(ax1,M.zgrid,M.rgrid,dens,'Displayname','n_e [m^{-3}]');
 hold on;
 [c1,h]=contour(ax1,M.zgrid,M.rgrid,pot./1e3,'m--','ShowText','on','linewidth',1.5,'Displayname','Equipotentials [kV]');
 clabel(c1,h,'Color','white')
 Blines=zeros(size(M.Athet));
 for i=1:length(M.zgrid)
     Blines(i,:)=M.Athet(i,:).*M.rgrid';
 end
 zindex=floor(length(M.zgrid/2));
 levels=logspace( log10(min(min(Blines(:,2:end)))), log10(max(max(Blines(:,:)))),10);
 contour(ax1,M.zgrid,M.rgrid,Blines',levels,'r-.','linewidth',1.5,'Displayname','Magnetic field lines');
 xlim(ax1,[M.zgrid(1) M.zgrid(end)])
 ylim(ax1,[M.rgrid(1) M.rgrid(rgridend)])
 legend
 xlabel(ax1,'z [m]')
 ylabel(ax1,'r [m]')
 title(ax1,sprintf('Density t=[%1.2g-%1.2g]s n_e=%1.2gm^{-3}',M.t2d(fieldstart),M.t2d(end),double(maxdens)))
 c = colorbar(ax1);
 c.Label.String= 'n[m^{-3}]';
 view(ax1,2)
 %set(h,'edgecolor','none');
 grid on;
 f.PaperOrientation='landscape';
 [~, name, ~] = fileparts(M.file);
 f.PaperUnits='centimeters';
 papsize=[18 10];
 f.PaperSize=papsize;
 print(f,sprintf('%sFields',name),'-dpdf','-fillpage')
 savefig(f,sprintf('%sFields',name))
 
 %% Wells
-f=figure('Name', sprintf('%s Wells',name));
-ax1=gca;
-rpos=zeros(size(pot));
-[r,~]=meshgrid(M.rgrid,M.zgrid);
-rathet=(M.Athet.*r)';
-poteff=zeros(size(pot));
-for j=2 :size(rpos,2)-1
-    for i=1:size(rpos,1)
-        if(isempty(find(rathet(i,j)>rathet(:,1),1,'last')))
-            rpos(i,j)=1;
-            rinterp=0;
-        else
-            rpos(i,j)=find(rathet(i,j)>rathet(:,1),1,'last');
-            rinterp=(rathet(i,j)-rathet(rpos(i,j),1))./(rathet(rpos(i,j)+1,1)-rathet(rpos(i,j),1));
-        end
-        bmin=M.B(1,rpos(i,j))+rinterp*(M.B(1,rpos(i,j)+1)-M.B(1,rpos(i,j)));
-        potmin=pot(rpos(i,j),1)+rinterp*(pot(rpos(i,j)+1,1)-pot(rpos(i,j),1));
-        poteff(i,j)=-(pot(i,j)-potmin)*bmin/(M.B(j,i)-bmin);
-    end
-end
-h=surface(ax1,M.zgrid,M.rgrid,poteff,'edgecolor','none','facecolor','interp');
-Blines=rathet';
-zindex=floor(length(M.zgrid/2));
-levels=logspace( log10(min(min(Blines(:,2:end)))), log10(max(max(Blines(:,:)))),8);
-hold on
-%contour(ax1,M.zgrid,M.rgrid,Blines',levels,'r-.','linewidth',1.5,'Displayname','Magnetic field lines');
-xlim(ax1,[M.zgrid(1) M.zgrid(end)])
-ylim(ax1,[M.rgrid(1) M.rgrid(end)])
-legend
-xlabel(ax1,'z [m]')
-ylabel(ax1,'r [m]')
-title(ax1,sprintf('Ion Well t=[%1.2g-%1.2g]s n_e=%1.2gm^{-3}',M.t2d(fieldstart),M.t2d(end),double(maxdens)))
-c = colorbar(ax1);
-c.Label.String= 'Potential [eV]';
-view(ax1,2)
-%set(h,'edgecolor','none');
-grid on;
-f.PaperOrientation='landscape';
-[~, name, ~] = fileparts(M.file);
-f.PaperUnits='centimeters';
-papsize=[16 14];
-f.PaperSize=papsize;
-print(f,sprintf('%sWell',name),'-dpdf','-fillpage')
-savefig(f,sprintf('%sWell',name))
+Wells(M,pot,[fieldstart t2dlength],maxdens)
+Wells(M,M.pot(:,:,1),1, max(max(M.N(:,:,1))))
 
 %% Brillouin
 f=figure('Name', sprintf('%s Brillouin',name));
 ax1=gca;
 h=surface(ax1,M.zgrid,M.rgrid,brillratio);
 set(h,'edgecolor','none');
 xlim(ax1,[M.zgrid(1) M.zgrid(end)])
 ylim(ax1,[M.rgrid(1) M.rgrid(rgridend)])
 xlabel(ax1,'z [m]')
 ylabel(ax1,'r [m]')
 title(ax1,'Position')
 c = colorbar(ax1);
 c.Label.String= 'Brillouin Ratio';
 view(ax1,2)
 caxis([0 1.2])
 title(ax1,sprintf('Brillouin Ratio t=[%1.2g-%1.2g]s n_e=%1.2gm^{-3}',M.t2d(fieldstart),M.t2d(end),double(maxdens)))
 f.PaperOrientation='landscape';
 [~, name, ~] = fileparts(M.file);
 f.PaperUnits='centimeters';
 papsize=[16 14];
 f.PaperSize=papsize;
 print(f,sprintf('%sfluid_Brillouin',name),'-dpdf','-fillpage')
 savefig(f,sprintf('%sfluid_Brillouin',name))
 
 %% Omegar
 f=figure('Name', sprintf('%s Omegar',name));
 ax3=gca;
 surface(ax3,M.zgrid,M.rgrid,omegare,'edgecolor','None')
 xlabel(ax3,'z [m]')
 ylabel(ax3,'r [m]')
 xlim(ax3,[M.zgrid(1) M.zgrid(end)])
 ylim(ax3,[M.rgrid(1) M.rgrid(rgridend)])
 colormap(ax3,'jet')
 c = colorbar(ax3);
 c.Label.String= '|\omega_\theta| [1/s]';
 %c.Limits=[min(M.fluidUTHET(:)) max(M.fluidUTHET(:))];
 %caxis(ax3,[min(M.fluidUTHET(:)) max(M.fluidUTHET(:))])
 title(ax3,sprintf('Azimuthal frequency t=[%1.2g-%1.2g]s n_e=%1.2gm^{-3}',M.t2d(fieldstart),M.t2d(end),double(maxdens)))
 %set(ax3,'colorscale','log')
 grid(ax3, 'on')
 view(ax3,2)
 f.PaperOrientation='landscape';
 [~, name, ~] = fileparts(M.file);
 f.PaperUnits='centimeters';
 papsize=[16 14];
 f.PaperSize=papsize;
 print(f,sprintf('%sfluid_omegar',name),'-dpdf','-fillpage')
 savefig(f,sprintf('%sfluid_omegar',name))
 
 %% HP
 if(size(M.H,2)>=2)
-f=figure('Name', sprintf('%s HP',name));
-tstart=max(floor(0.8*size(M.tpart,1)),2);
-legtext=sprintf("t=%2.1f - %2.1f [ns]",M.tpart(tstart)*1e9,M.tpart(end)*1e9);
-subplot(1,2,1)
-partsmax=min(M.nbparts(end),size(M.H,1));
-H=M.H(1:M.nbparts(1),1);
-h1=histogram(H,10,'BinLimits',[min(H(:)) max(H(:))],'DisplayName',sprintf("t=%2.3d [ns]",M.tpart(1)*1e9));
-hold on
-H=mean(M.H(1:partsmax,tstart:end),2);
-%,'Binwidth',h1.BinWidth
-h1=histogram(H,20,'BinLimits',[min(H(:)) max(H(:))],'DisplayName',legtext);
-ylabel('counts')
-xlabel('H [J]')
-legend
+taveragestart=max(floor(0.8*size(M.tpart,1)),2);
+M.displayHP(taveragestart);
+end
 
-subplot(1,2,2)
-P=M.P(1:M.nbparts(1),1);
-h2=histogram(P,10,'BinLimits',[min(P(:)) max(P(:))],'DisplayName',sprintf("t=%2.3d [ns]",M.tpart(1)*1e9));
-hold on
-P=mean(M.P(1:partsmax,tstart:end),2);
-histogram(P,50,'BinLimits',[min(P(:)) max(P(:))],'DisplayName',legtext);
-ylabel('counts')
-xlabel('P [kg\cdotm^2\cdots^{-1}]')
-%clear P
-%clear H
-legend
+%% 0D diagnostics
+BrillouinRatio=2*M.omepe^2/M.omece^2
+NpartsTrapped=mean(M.nbparts(end-10:end))*M.msim/M.me
+dblengthiter=fieldstart:length(M.t2d);
+
+Pr=squeeze(mean(M.Presstens(1,:,:,dblengthiter),4));
+Pz=squeeze(mean(M.Presstens(6,:,:,dblengthiter),4));
+enddens=dens;
+Debye_length=sqrt(abs(min(min(min(Pr(Pr>0)./enddens(Pr>0).^2)),min(min(Pz(Pz>0)./enddens(Pz>0).^2))))*M.eps_0/M.qe^2)
+
+
+%% Debye length
+f=figure('Name', sprintf('%s Debye',name));
+surface(M.zgrid,M.rgrid,min(Pr./enddens.^2,Pz./enddens.^2)*M.eps_0/M.qe^2)
+colorbar
 f.PaperOrientation='landscape';
 [~, name, ~] = fileparts(M.file);
-%xlim([0.95*h2.BinLimits(1) 1.05*h2.BinLimits(2)])
-print(f,sprintf('%sParts_HP',name),'-dpdf','-fillpage')
-savefig(f,sprintf('%sParts_HP',name))
-end
+f.PaperUnits='centimeters';
+papsize=[16 14];
+f.PaperSize=papsize;
+print(f,sprintf('%s_dblength',name),'-dpdf','-fillpage')
+savefig(f,sprintf('%s_dblength',name))
 
-% %% 0D diagnostics
-% BrillouinRatio=2*M.omepe^2/M.omece^2
-% NpartsTrapped=mean(M.nbparts(end-10:end))*M.msim/M.me
-% dblengthiter=fieldstart:length(M.t2d);
-% Pr=squeeze(mean(M.Presstens(1,:,:,dblengthiter),4));
-% Pz=squeeze(mean(M.Presstens(6,:,:,dblengthiter),4));
-% enddens=dens;
-% Debye_length=sqrt(abs(min(min(min(Pr(Pr>0)./enddens(Pr>0).^2)),min(min(Pz(Pz>0)./enddens(Pz>0).^2))))*M.eps_0/M.qe^2)
-% 
-% 
-% %% Debye length
-% figure
-% surface(M.zgrid,M.rgrid,min(Pr./enddens.^2,Pz./enddens.^2)*M.eps_0/M.qe^2)
-% colorbar
-% 
-% %% Temperature
-% figure
-% ax1=subplot(2,1,1);
-% title('Radial temperature')
-% surface(M.zgrid,M.rgrid,Pr./enddens/M.qe,'edgecolor','none')
-% colormap('jet')
-% c = colorbar;
-% c.Label.String= 'T_er [eV]';
-% templimits1=caxis;
-% 
-% ax2=subplot(2,1,2);
-% title('Axial tempreature')
-% surface(M.zgrid,M.rgrid,Pz./enddens/M.qe,'edgecolor','none')
-% colormap('jet')
-% c = colorbar;
-% c.Label.String= 'T_ez [eV]';
-% maxtemp=max([templimits1,caxis]);
-% caxis(ax1,[0 maxtemp])
-% caxis(ax2,[0 maxtemp])
+%% Temperature
+f=figure('Name', sprintf('%s Temperature',name));
+ax1=subplot(2,1,1);
+title('Radial temperature')
+surface(M.zgrid,M.rgrid,Pr./enddens/M.qe,'edgecolor','none')
+colormap('jet')
+c = colorbar;
+c.Label.String= 'T_er [eV]';
+templimits1=caxis;
+
+ax2=subplot(2,1,2);
+title('Axial tempreature')
+surface(M.zgrid,M.rgrid,Pz./enddens/M.qe,'edgecolor','none')
+colormap('jet')
+c = colorbar;
+c.Label.String= 'T_ez [eV]';
+maxtemp=max([templimits1,caxis]);
+caxis(ax1,[0 maxtemp])
+caxis(ax2,[0 maxtemp])
+f.PaperOrientation='landscape';
+[~, name, ~] = fileparts(M.file);
+f.PaperUnits='centimeters';
+papsize=[16 14];
+f.PaperSize=papsize;
+print(f,sprintf('%s_temp',name),'-dpdf','-fillpage')
+savefig(f,sprintf('%s_temp',name))
 
 function displaypsi(M,deltat)
 %% Psi function
 
 [~, name, ~] = fileparts(M.file);
 f=figure('Name', sprintf('%s Psi',name));
 zpos=floor(length(M.zgrid)/2);
 tinit=1;
 tend=length(M.t2d);
 if(size(M.H,2)<2)
     H0=M.H0;
     P0=M.P0;
 else
     H0=mean(M.H(:,end));
     P0=mean(M.P(:,end));
 end
 lw=1.5;
 Mirrorratio=(M.Rcurv-1)/(M.Rcurv+1);
 locpot=mean(M.pot(:,zpos,tend-deltat:tend),3);
 psi=1+M.qe*locpot(:)/H0-1/(2*M.me*H0)*(P0./M.rgrid+M.qe*0.5*M.B0.*(M.rgrid-M.width/pi*Mirrorratio*cos(2*pi*M.zgrid(zpos)/M.width)*besseli(1,2*pi*M.rgrid/M.width))).^2;
 locdens=mean(M.N(:,zpos,tend-deltat:tend),3);
 [maxn,In]=max(locdens);%M.N(:,zpos,tinit));
 plot(M.rgrid,M.N(:,zpos,tinit),'bx-','DisplayName',sprintf('t=%1.2f[ns]',M.t2d(tinit)*1e9),'linewidth',lw)
 hold on
 plot(M.rgrid,locdens,'rx-','DisplayName',sprintf('t=[%1.2f-%1.2f] [ns] averaged',M.t2d(tend-deltat)*1e9,M.t2d(tend)*1e9),'linewidth',lw)
 plot(M.rgrid(In-2:end),1./M.rgrid(In-2:end)*maxn*M.rgrid(In),'DisplayName','N=c*1/r','linewidth',lw)
 xlabel('r [m]')
 ylabel('n_e [m^-3]')
 I=find(psi>0);
 if (length(I)>1)
 I=[I(1)-2; I(1)-1; I; I(end)+1; I(end)+2];
 else
     I=M.nnr(1):length(psi);
 end
-rq=linspace(M.rgrid(I(1)),M.rgrid(I(end)),500);
+rq=linspace(M.rgrid(max(I(1),1)),M.rgrid(I(end)),500);
 psiinterp=interp1(M.rgrid(I),psi(I),rq,'pchip');
 zeroindices=find(diff(psiinterp>=0),2);
 maxpsiinterp=max(psiinterp);
 plot(rq,maxn*psiinterp/abs(maxpsiinterp),'Displayname','normalized \Psi [a.u.]','linewidth',lw)
 ylim([0 inf])
 ylimits=ylim;
 for i=1:length(zeroindices)
     border=plot([rq(zeroindices(i)) rq(zeroindices(i))],[0 M.rgrid(In)/M.rgrid(In-2)*maxn],'k--','linewidth',lw);
     set(get(get(border,'Annotation'),'LegendInformation'),'IconDisplayStyle','off');
 end
 legend
 xlim([0 0.02])
 grid on
 title(sprintf('Radial density profile at z=%1.2e[m]',M.zgrid(zpos)))
 f.PaperOrientation='landscape';
 [~, name, ~] = fileparts(M.file);
 f.PaperUnits='centimeters';
 papsize=[15 10];
 f.PaperSize=papsize;
 print(f,sprintf('%sPsi',name),'-dpdf','-fillpage')
 savefig(f,sprintf('%sPsi',name))
 end
+
+
+function Wells(M,pot,fieldtime,maxdens)
+
+[~, name, ~] = fileparts(M.file);
+f=figure('Name', sprintf('%s Wells',name));
+ax1=gca;
+rpos=zeros(size(pot));
+[r,~]=meshgrid(M.rgrid,M.zgrid);
+rathet=(M.Athet.*r)';
+poteff=zeros(size(pot));
+for j=2 :size(rpos,2)-1
+    for i=1:size(rpos,1)
+        if(isempty(find(rathet(i,j)>rathet(:,1),1,'last')))
+            rpos(i,j)=1;
+            rinterp=0;
+        else
+            rpos(i,j)=find(rathet(i,j)>rathet(:,1),1,'last');
+            rinterp=(rathet(i,j)-rathet(rpos(i,j),1))./(rathet(rpos(i,j)+1,1)-rathet(rpos(i,j),1));
+        end
+        bmin=M.B(1,rpos(i,j))+rinterp*(M.B(1,rpos(i,j)+1)-M.B(1,rpos(i,j)));
+        potmin=pot(rpos(i,j),1)+rinterp*(pot(rpos(i,j)+1,1)-pot(rpos(i,j),1));
+        poteff(i,j)=-(pot(i,j)-potmin)*bmin/(M.B(j,i)-bmin);
+    end
+end
+h=surface(ax1,M.zgrid,M.rgrid,poteff,'edgecolor','none','facecolor','interp');
+Blines=rathet';
+zindex=floor(length(M.zgrid/2));
+levels=logspace( log10(min(min(Blines(:,2:end)))), log10(max(max(Blines(:,:)))),8);
+hold on
+%contour(ax1,M.zgrid,M.rgrid,Blines',levels,'r-.','linewidth',1.5,'Displayname','Magnetic field lines');
+xlim(ax1,[M.zgrid(1) M.zgrid(end)])
+ylim(ax1,[M.rgrid(1) M.rgrid(end)])
+legend
+xlabel(ax1,'z [m]')
+ylabel(ax1,'r [m]')
+if size(fieldtime)<2
+    title(ax1,sprintf('Ion Well t=%1.2g s n_e=%1.2gm^{-3}',M.t2d(fieldtime),double(maxdens)))
+    filename=sprintf('%sWell%d',name,fieldtime);
+else
+    title(ax1,sprintf('Ion Well t=[%1.2g-%1.2g]s n_e=%1.2gm^{-3}',M.t2d(fieldtime(1)),M.t2d(fieldtime(2)),double(maxdens)))
+    filename=sprintf('%sWell%d_%d',name,fieldtime);
+end
+c = colorbar(ax1);
+c.Label.String= 'Potential [eV]';
+view(ax1,2)
+%set(h,'edgecolor','none');
+grid on;
+f.PaperOrientation='landscape';
+f.PaperUnits='centimeters';
+papsize=[16 14];
+f.PaperSize=papsize;
+print(f,filename,'-dpdf','-fillpage')
+savefig(f,filename)
+end
\ No newline at end of file
diff --git a/matlab/coaxial_ion_loss_criteria.m b/matlab/coaxial_ion_loss_criteria.m
new file mode 100644
index 0000000..0a8e4b6
--- /dev/null
+++ b/matlab/coaxial_ion_loss_criteria.m
@@ -0,0 +1,230 @@
+%% wr+
+H0=3.2e-14;
+P0=8.66e-25;
+r0=0.005;
+
+qe=1.60217662E-19;
+me=9.109383E-31;
+eps_0=8.85418781762e-12;
+vlight=299792458;
+
+ne=5e15;
+ne=5*logspace(10,19,5000);
+
+kb=1.38e-23;
+T=300;
+P=1e-9*100000;
+estimneutraldensity=P/(kb*T)
+
+I=40;
+V=90;
+alpha=1.3;
+
+
+B0=0.21;
+L=0.48;
+z=0.0;
+
+% Davidson
+prefix='Davidson';
+phia=-60000;
+phib=0;
+R=1.5;
+B0=0.21;
+width=0.48;
+b=0.16;
+a=0.001;
+r=0.0075;
+z=0.22;
+deltar=(R-1)/(R+1)*besseli(1,2*pi*r/width)*(width/2/pi)*(cos(2*pi*z/width)+1);
+rb_=0.007;
+rbplus=0.009872;
+Te=400; %eV
+%1rbplus=0.020;
+
+% rb_=0.01;
+% rbplus=rb_+0.1;
+% r=(rb_+rbplus)/2;
+% r=0.015
+% deltar=(R-1)/(R+1)*r;
+
+
+
+% ITER
+% prefix='ITER' 
+% R=1.0001;
+% phia=-10000;
+% phib=0;
+% b=0.09;
+% a=0.068;
+% r=0.085;
+% deltar=(R-1)/(R+1)*r;
+% rb_=0.075;
+% rbplus=0.088;
+
+spcharge=@(ne)-qe*ne/2/eps_0;
+% 
+% Apart=@(ne)spcharge(ne)/2*(2*r*deltar+deltar^2);
+% 
+% Bpart=@(ne)log(1+deltar/r)/log(b/a)*(phib-phia+spcharge(ne)*rb_^2*log(rbplus/rb_));
+% 
+% Cpart=@(ne)-log(1+deltar/r)/log(rbplus/rb_)*(phib+spcharge(ne)*rb_^2*log(rbplus/rb_));
+% 
+% Dpart=@(ne)spcharge(ne)*(rbplus^2-rb_^2)/(log(b/a)*log(rbplus/rb_))*log(1+deltar/r)*...
+%     ( log(b/rbplus)*(log(rbplus/a)+1/2) - log(rb_/a)*(log(b/rbplus)-1/2) );
+
+deltaphicloud=@(ne) Phi(r+deltar,rb_,rbplus,a,b,phia,phib, ne)-Phi(r,rb_,rbplus,a,b,phia,phib, ne);
+deltaphivacuum=(phib-phia)/log(b/a)*log(2*R/(R+1));
+
+Emaxcloud=1/(R-1)*deltaphicloud(ne);
+Emaxvacuum=1/(R-1)*deltaphivacuum
+
+figure('name',sprintf('%s Phi_a=%3.2f kV Phi_b=%3.2f kV r=%3.2f mm R=%3.2f',prefix,phia/1e3,phib/1e3,r*1e3, R));
+loglog(ne,abs(Emaxcloud),'displayname','flat top density cloud')
+hold on
+loglog([ne(1) ne(end)], Emaxvacuum*[1 1],'displayname','Vacuum') 
+xlabel('electron density [m^{-3}]')
+ylabel('|E_{min}| [eV]')
+title(sprintf('%s \\Phi_a=%3.2f kV \\Phi_b=%3.2f kV r=%3.2f mm R=%3.2f',prefix,phia/1e3,phib/1e3,r*1e3, R))
+savefig(sprintf('%s_Phia%3.2f_Phib%3.2f_r%3.2f_R%3.2f.fig',prefix,phia/1e3,phib/1e3,r*1e3, R))
+
+
+figure
+subplot(2,2,1)
+sgtitle(sprintf('%s \\Phi_a=%3.2f kV \\Phi_b=%3.2f kV r_0=%3.2f mm z_0=%3.2f mm R=%3.2f',prefix,phia/1e3,phib/1e3,(r+deltar)*1e3,z*1e3, R))
+neinter=5e13;
+vpar=linspace(1,vlight,1000);
+vper=sqrt(-2*qe/me*deltaphicloud(neinter)/(R-1)+vpar.^2/(R-1))/vlight;
+vpar=vpar/vlight;
+vpar=vpar(real(vper)~=0);
+vper=vper(real(vper)~=0);
+
+%Davidson vperp
+phi0=Phi(r,rb_,rbplus,a,b,phia,phib, neinter);
+vrz=sqrt(2/me*H0+2/me*qe*phi0-1/me^2*(P0/r+qe*Athet(r,z,B0,width,R))^2);
+
+theta=2*pi*linspace(0,1,1000);
+vthet=(P0/r+qe*Athet(r,z,B0,width,R))/me;
+vperdav=sqrt((vrz^2*cos(theta).^2+vthet^2))/vlight;
+vpardav=vrz*sin(theta)/vlight;
+
+vpargauss=sqrt(Te*qe/me)*linspace(-1,1,200);
+vpergauss=sqrt(2*Te*qe/me)*sqrt(1-vpargauss.^2*me/Te/qe);
+vpargauss=[flip(vpargauss(2:end)) vpargauss]/vlight;
+vpergauss=[-flip(vpergauss(2:end)) vpergauss]/vlight;
+
+plot(vpar,vper,'b-')
+hold on
+plot(vpar,-vper,'b-')
+plot(-vpar,vper,'b-')
+plot(-vpar,-vper,'b-')
+xlabel('\beta_z [m/s]')
+ylabel('\beta_\perp [m/s]')
+title(sprintf('electrons n_e=%3.2e m^{-3}',neinter))
+grid
+plot(vpardav,vperdav,'r--')
+plot(vpargauss,vpergauss,'g--')
+xlim([-1 1])
+ylim([-1 1])
+axis equal
+
+subplot(2,2,3)
+neinter=5e17;
+vpar=linspace(1,vlight,1000);
+vper=sqrt(-2*qe/me*deltaphicloud(neinter)/(R-1)+vpar.^2/(R-1))/vlight;
+vpar=vpar/vlight;
+vpar=vpar(real(vper)~=0);
+vper=vper(real(vper)~=0);
+
+%Davidson vperp
+phi0=Phi(r,rb_,rbplus,a,b,phia,phib, neinter);
+vrz=sqrt(2/me*H0+2/me*qe*phi0-1/me^2*(P0/r+qe*Athet(r,z,B0,width,R))^2);
+theta=2*pi*linspace(0,1,1000);
+vthet=(P0/r+qe*Athet(r,z,B0,width,R))/me;
+vperdav=sqrt((vrz^2*cos(theta).^2+vthet^2))/vlight;
+vpardav=vrz*sin(theta)/vlight;
+
+
+vpargauss=sqrt(Te*qe/me)*linspace(-1,1,200);
+vpergauss=sqrt(2*Te*qe/me)*sqrt(1-vpargauss.^2*me/Te/qe);
+vpargauss=[flip(vpargauss(2:end)) vpargauss]/vlight;
+vpergauss=[-flip(vpergauss(2:end)) vpergauss]/vlight;
+
+plot(vpar,vper,'b-')
+hold on
+plot(vpar,-vper,'b-')
+plot(-vpar,vper,'b-')
+plot(-vpar,-vper,'b-')
+xlabel('\beta_z [m/s]')
+ylabel('\beta_\perp [m/s]')
+title(sprintf('electrons n_e=%3.2e m^{-3}',neinter))
+grid
+plot(vpardav,vperdav,'r--')
+plot(vpargauss,vpergauss,'g--')
+xlim([-1 1])
+ylim([-1 1])
+axis equal
+
+subplot(2,2,2)
+neinter=5e13;
+vpar=linspace(1,vlight,1000);
+m=28.0134/1000*6.02214076e23;
+vper=sqrt(2*qe/m*deltaphicloud(neinter)/(R-1)+vpar.^2/(R-1))/vlight;
+vpar=vpar/vlight;
+vpar=vpar(real(vper)~=0);
+vper=vper(real(vper)~=0);
+plot(vpar,vper,'b-')
+hold on
+plot(vpar,-vper,'b-')
+plot(-vpar,vper,'b-')
+plot(-vpar,-vper,'b-')
+xlabel('\beta_z [m/s]')
+ylabel('\beta_\perp [m/s]')
+title(sprintf('N_2^+ ions n_e=%3.2e m^{-3}',neinter))
+grid
+xlim([-1 1])
+ylim([-1 1])
+
+subplot(2,2,4)
+neinter=5e17;
+vpar=linspace(1,vlight,1000);
+vper=sqrt(2*qe/m*deltaphicloud(neinter)/(R-1)+vpar.^2/(R-1))/vlight;
+vpar=vpar/vlight;
+vpar=vpar(real(vper)~=0);
+vper=vper(real(vper)~=0);
+plot(vpar,vper,'b-')
+hold on
+plot(vpar,-vper,'b-')
+plot(-vpar,vper,'b-')
+plot(-vpar,-vper,'b-')
+xlabel('\beta_z [m/s]')
+ylabel('\beta_\perp [m/s]')
+title(sprintf('N_2^+ ions n_e=%3.2e m^{-3}',neinter))
+grid
+savefig(sprintf('%s_Phia%3.2f_Phib%3.2f_r%3.2f_z%3.2f_R%3.2f_cone.fig',prefix,phia/1e3,phib/1e3,(r+deltar)*1e3,z*1e3, R))
+xlim([-1 1])
+ylim([-1 1])
+
+function Atheta=Athet(r,z,B0,width,R)
+                Atheta=0.5*B0*(r-width/pi*(R-1)/(R+1)...
+                .*besseli(1,2*pi*r/width).*cos(2*pi*z/width));
+end
+
+function phi=Phi(r,rbm,rbp,a,b,phia,phib, ne)
+qe=1.60217662E-19;
+me=9.109383E-31;
+eps_0=8.85418781762e-12;
+
+phibp=1/log(b/a)*(ne/2*qe/eps_0*rbm^2*log(b/rbp)*log(rbp/rbm)+(-qe*ne/2/eps_0*(rbp^2-rbm^2)*(log(rbp/a)+0.5)+phia-phib)*log(b/rbp));
+phibm=1/log(b/a)*(-qe/eps_0*ne/2*rbm^2*log(rbm/a)*log(rbp/rbm)+(-qe/eps_0*ne/2*(rbp^2-rbm^2)*(log(b/rbp)-0.5)+phib)*log(rbm/a)+phia*log(b/rbm));
+if(r<rbm && r>a)
+    phi=((phibm-phia)*log(r)+phia*log(rbm)-phibm*log(a))/log(rbm/a);
+elseif(r>=rbm && r<=rbp)
+    phi=-qe/eps_0*ne/4*(r^2-rbp^2)+phibp+(phibp-phibm+qe/eps-0*ne/4*(rbp^2-rbm^2))*log(r/rbp)/log(rbp/rbm);
+elseif(r>rbp && r< b)
+    phi=((phib-phibp)*log(r)+phibp*log(b)-phib*log(rbp))/log(b/rbp);
+else
+    error('invalid radial position')
+end
+
+end
\ No newline at end of file
diff --git a/matlab/dispespicFields.m b/matlab/dispespicFields.m
index 5d12b0c..5d481d3 100644
--- a/matlab/dispespicFields.m
+++ b/matlab/dispespicFields.m
@@ -1,192 +1,192 @@
 function dispespicFields(M,logdensity,showgrid,fixed)
 %UNTITLED Summary of this function goes here
 %   Detailed explanation goes here
 fieldstep=1;
 if nargin <2
     logdensity=false;
     showgrid=false;
     fixed=false;
 end
 if nargin <3
     showgrid=false;
     fixed=false;
 end
 if nargin <4
     fixed=false;
 end
 fixed=fi(fixed);
 
-f=uifigure('Name','Grid data');
+f=uifigure('Name',sprintf('Grid data %s',M.name));
 
 mf=uipanel(f,'Position',[5 50 f.Position(3)-10 f.Position(4)-55]);
 mf.AutoResizeChildren='off';
 m=uipanel(f,'Position',[5 5 f.Position(3)-10 40]);
 
 sgtitle(mf,sprintf('step=%d t=%0.5e s',fieldstep*M.it1,M.t2d(fieldstep)))
 
 sld = uislider(m,'Position',[10 30 0.6*m.Position(3) 3]);
 sld.Value=fieldstep;
 sld.Limits=[1 size(M.t2d,1)];
 
 edt = uieditfield(m,'numeric','Limits',[1 size(M.t2d,1)],'Value',1);
 edt.Position=[sld.Position(1)+sld.Position(3)+25 5 40 20];
 edt.RoundFractionalValues='on';
 
 MaxN=0;
 Printbt=uibutton(m,'Position',[edt.Position(1)+edt.Position(3)+10 5 40 20],'Text', 'Save');
 Play=uibutton(m,'Position',[Printbt.Position(1)+Printbt.Position(3)+10 5 40 20],'Text', 'Play');
 Pause=uibutton(m,'Position',[Play.Position(1)+Play.Position(3)+10 5 40 20],'Text', 'Pause');
 %Playbt=uibutton(m,'Position',[Printbt.Position(1)+Printbt.Position(3)+10 5 40 20],'Text', 'Play/Pause');
 
 stop=false;
 
 sld.ValueChangingFcn={@updatefigdata,edt,mf};
 edt.ValueChangedFcn={@updatefigdata,sld,mf};
 Printbt.ButtonPushedFcn={@plotGridButtonPushed};
 Play.ButtonPushedFcn={@plotPlayButtonPushed};
 
 Pause.ButtonPushedFcn={@PauseButtonPushed};
 PlotEspic2dgriddata(mf,M,fieldstep);
 
     function plotPlayButtonPushed(btn,ax)
         stop=false;
         for i=edt.Value:sld.Limits(2)
             edt.Value=i;
             sld.Value=i;
             updatesubplotsdata(i,mf);
             pause(0.01)
             if stop
                 stop=false;
                 break;
             end
             
         end
     end
     function PauseButtonPushed(btn,ax)
         stop = true;
     end
     function PlotEspic2dgriddata(fig,M,fieldstep)
         %PlotEspic2dgriddata Plot the 2d data of espic2d at time step fieldstep
         sgtitle(fig,sprintf('step=%d t=%0.5e s',(fieldstep-1)*M.it1,M.t2d(fieldstep)))
         
         
         ax1=subplot(2,2,1,'Parent',fig);
         sf=surface(ax1,M.zgrid,M.rgrid,M.N(:,:,fieldstep),'edgecolor','none');
         if(showgrid)
             set(sf,'edgecolor','black')
         end
         xlim(ax1,[M.zgrid(1) M.zgrid(end)])
         ylim(ax1,[M.rgrid(1) M.rgrid(end)])
         xlabel(ax1,'z [m]')
         ylabel(ax1,'r [m]')
         title(ax1,'Position')
         c = colorbar(ax1);
         c.Label.String= 'n[m^{-3}]';
         %c.Limits=[0 max(M.N(:))];
         if(isboolean(fixed) && fixed)
             climits=caxis(ax1);
             MaxN=climits(2);
         elseif(~isboolean(fixed))
             MaxN=fixed.data;
             caxis(ax1,[-Inf MaxN]);
         end
         view(ax1,2)
         
         if logdensity
             set(ax1,'zscale','log')
             set(ax1,'colorscale','log')
         end
         
         ax2=subplot(2,2,2,'Parent',fig);
         contourf(ax2,M.zgrid,M.rgrid,M.pot(:,:,fieldstep));
         %plot(ax2,M.zgrid,data.pot(:,5))
         xlabel(ax2,'z [m]')
         ylabel(ax2,'r [m]')
         colormap(ax2,'jet')
         c = colorbar(ax2);
         c.Label.String= '\Phi [V]';
         title(ax2,'Es potential')
         grid(ax2, 'on')
         
         
         ax3=subplot(2,2,3,'Parent',fig);
         contourf(ax3,M.zgrid,M.rgrid,M.Er(:,:,fieldstep))
         xlabel(ax3,'z [m]')
         ylabel(ax3,'r [m]')
         c = colorbar(ax3);
         c.Label.String= 'E_r [V/m]';
         title(ax3,'Radial Electric field')
         grid(ax3, 'on')
         
         ax4=subplot(2,2,4,'Parent',fig);
         contourf(ax4,M.zgrid,M.rgrid,M.Ez(:,:,fieldstep))
         xlabel(ax4,'z [m]')
         ylabel(ax4,'r [m]')
         c = colorbar(ax4);
         c.Label.String= 'E_z [V/m]';
         title(ax4,'Axial Electric field')
         grid(ax4, 'on')
     end
 
     function plotGridButtonPushed(btn,ax)
         %UNTITLED2 Summary of this function goes here
         %   Detailed explanation goes here
         f=figure();
         PlotEspic2dgriddata(f,M,sld.Value);
         f.PaperOrientation='landscape';
         [~, name, ~] = fileparts(M.file);
         print(f,sprintf('%sGrid%d',name,sld.Value),'-dpdf','-fillpage')
     end
 
     function updatefigdata(control, event, Othercontrol, fig)
         
         
         if strcmp(event.EventName,'ValueChanged')
             fieldstep=floor(control.Value);
             control.Value=fieldstep;
         else
             fieldstep=floor(event.Value);
         end
         Othercontrol.Value=fieldstep;
         updatesubplotsdata(fieldstep, fig);
     end
 
     function updatesubplotsdata(fieldstep, fig)
         
         sgtitle(fig,sprintf('step=%d t=%0.5e s',(fieldstep-1)*M.it1,double((fieldstep-1)*M.it1)*M.dt))
         
         %% update Position histogram
         ax1=fig.Children(end);
         dens=M.N(:,:,fieldstep);
         
         ax1.Children.ZData=dens;
         ax1.Children.CData=dens;
         if(isboolean(fixed) && fixed)
             climits=caxis(ax1);
             MaxN=climits(2);
             nmax=max(dens(:));
             if(nmax>MaxN)
                 MaxN=nmax;
             end
             caxis(ax1,[0 MaxN]);
         elseif(~isboolean(fixed))
             MaxN=fixed.data;
             caxis(ax1,[-Inf MaxN]);
         end
         
         %     view(ax1,2)
         %% update ES Potential
         fig.Children(end-2).Children(1).ZData=M.pot(:,:,fieldstep);
         %% update Radial electric field
         fig.Children(end-4).Children(1).ZData=M.Er(:,:,fieldstep);
         %% update Axial electric field
         fig.Children(end-6).Children(1).ZData=M.Ez(:,:,fieldstep);
         drawnow limitrate
         
         
         
     end
 
 end
 
 
diff --git a/matlab/dispespicParts.m b/matlab/dispespicParts.m
index 4b41db5..245f13f 100644
--- a/matlab/dispespicParts.m
+++ b/matlab/dispespicParts.m
@@ -1,138 +1,138 @@
 function dispespicParts(M)
 %UNTITLED2 Summary of this function goes here
 %   Detailed explanation goes here
 
 fieldstep=1;
 
 f2=uifigure('Name','Particles data');
 
 mf2=uipanel(f2,'Position',[5 50 f2.Position(3)-10 f2.Position(4)-55]);
 mf2.AutoResizeChildren='off';
 m2=uipanel(f2,'Position',[5 5 f2.Position(3)-10 40]);
 
 sgtitle(mf2,sprintf('step=%d t=%0.5e s',fieldstep*M.it2,M.tpart(fieldstep)))
 
 sld2 = uislider(m2,'Position',[10 30 0.6*m2.Position(3) 3]);
 sld2.Value=fieldstep;
 sld2.Limits=[1 size(M.VR,2)];
 
 edt2 = uieditfield(m2,'numeric','Limits',[1 size(M.VR,2)],'Value',1);
 edt2.Position=[sld2.Position(1)+sld2.Position(3)+25 5 40 20];
 edt2.RoundFractionalValues='on';
 
 Printbt2=uibutton(m2,'Position',[edt2.Position(1)+edt2.Position(3)+10 5 40 20],'Text', 'Save');
 
 sld2.ValueChangingFcn={@updatefigpartdata,edt2,mf2};
 edt2.ValueChangedFcn={@updatefigpartdata,sld2,mf2};
 
 Printbt2.ButtonPushedFcn={@plotPartButtonPushed};
 
 
 PlotEspic2dpartdata(mf2,M,fieldstep);
 
     function PlotEspic2dpartdata(fig,M,fieldstep)
         %PlotEspic2dgriddata Plot the 2d data of espic2d at time step fieldstep
         sgtitle(fig,sprintf('step=%d t=%0.5e s',(fieldstep-1)*M.it2,M.tpart(fieldstep)))
         
         ax1=subplot(3,2,1,'Parent',fig);
         plot(ax1,M.Z(:,fieldstep),M.R(:,fieldstep),'.');
         xlim(ax1,[M.zgrid(1) M.zgrid(end)])
         ylim(ax1,[M.rgrid(1) M.rgrid(end)])
         xlabel(ax1,'Z [m]')
         ylabel(ax1,'R [m]')
         title(ax1,'Position')
         grid(ax1, 'on')
         
         
         ax2=subplot(3,2,2,'Parent',fig);
         plot(ax2,M.VZ(:,fieldstep),M.VR(:,fieldstep),'.');
         xlabel(ax2,'VZ [m/s]')
         ylabel(ax2,'VR [m/s]')
         axis(ax2, 'equal')
         grid(ax2, 'on')
         
         
         ax3=subplot(3,2,3,'Parent',fig);
         plot(ax3,M.Z(:,fieldstep),M.VZ(:,fieldstep),'.');
         xlim(ax3,[M.zgrid(1) M.zgrid(end)])
         xlabel(ax3,'Z [m]')
         ylabel(ax3,'VZ [m/s]')
         grid(ax3, 'on')
         
         ax4=subplot(3,2,4,'Parent',fig);
         plot(ax4,M.VZ(:,fieldstep),M.R(:,fieldstep),'.')
         ylabel(ax4,'R [m]')
         xlabel(ax4,'VZ [m/s]')
         ylim(ax4,[M.rgrid(1) M.rgrid(end)])
         grid(ax4, 'on')
         
         ax5=subplot(3,2,5,'Parent',fig);
         plot(ax5,M.Z(:,fieldstep),M.VR(:,fieldstep),'.');
         xlim(ax5,[M.zgrid(1) M.zgrid(end)])
         xlabel(ax5,'Z [m]')
         ylabel(ax5,'VR [m/s]')
         grid(ax5, 'on')
         
         ax6=subplot(3,2,6,'Parent',fig);
         plot(ax6,M.VR(:,fieldstep),M.R(:,fieldstep),'.');
         ylim(ax6,[M.rgrid(1) M.rgrid(end)])
         ylabel(ax6,'R [m]')
         xlabel(ax6,'VR [m/s]')
         grid(ax6, 'on')
     end
 
 
     function updatefigpartdata(control, event, Othercontrol, fig)
         
         
         if strcmp(event.EventName,'ValueChanged')
             fieldstep=floor(control.Value);
             control.Value=fieldstep;
         else
             fieldstep=floor(event.Value);
         end
         Othercontrol.Value=fieldstep;
         
-        sgtitle(fig,sprintf('step=%d t=%0.5e s',(fieldstep-1)*M.it2,double((fieldstep-1)*M.it2)*M.dt))
+        sgtitle(fig,sprintf('t=%0.5e s',M.tpart(fieldstep-1)))
         
         %% update Position plot
         ax1=fig.Children(end);
         ax1.Children.XData=M.Z(:,fieldstep);
         ax1.Children.YData=M.R(:,fieldstep);
         
         
         view(ax1,2)
         %% update VZ VPERP
         fig.Children(end-1).Children(1).XData=M.VZ(:,fieldstep);
         fig.Children(end-1).Children(1).YData=M.VR(:,fieldstep);
         axis(fig.Children(end-1),'equal')
         
         %% update Z VZ
         fig.Children(end-2).Children(1).XData=M.Z(:,fieldstep);
         fig.Children(end-2).Children(1).YData=M.VZ(:,fieldstep);
         %% update VZ VR
         fig.Children(end-3).Children(1).XData=M.VZ(:,fieldstep);
         fig.Children(end-3).Children(1).YData=M.R(:,fieldstep);
         
         %% update R VR
         fig.Children(end-4).Children(1).XData=M.Z(:,fieldstep);
         fig.Children(end-4).Children(1).YData=M.VR(:,fieldstep);
         
         %% update Z VR
         fig.Children(end-5).Children(1).XData=M.VR(:,fieldstep);
         fig.Children(end-5).Children(1).YData=M.R(:,fieldstep);
         drawnow limitrate
     end
 
     function plotPartButtonPushed(btn,ax)
         %UNTITLED2 Summary of this function goes here
         %   Detailed explanation goes here
         f=figure();
         PlotEspic2dpartdata(f,M,sld.Value);
         f.PaperOrientation='portrait';
         [~, name, ~] = fileparts(M.file);
         print(f,sprintf('%sParts%d',name,sld.Value),'-dpdf','-fillpage')
     end
 
 end
 
diff --git a/matlab/distribution_function.m b/matlab/distribution_function.m
index 7732200..9cdc897 100644
--- a/matlab/distribution_function.m
+++ b/matlab/distribution_function.m
@@ -1,84 +1,83 @@
 fig=figure;
 ax1=gca;
 Ndistrib=M.N(:,:,end);
-pcolor(ax1,M.zgrid,M.rgrid,Ndistrib);
+h=pcolor(ax1,M.zgrid,M.rgrid,Ndistrib);
+set(h, 'EdgeColor', 'none');
 hold on
 [r,z]=find(Ndistrib~=0);
 xlim(ax1,[M.zgrid(min(z)) M.zgrid(max(z))])
 ylim(ax1,[M.rgrid(min(r)) M.rgrid(max(r))])
 xlabel(ax1,'Z [m]')
 ylabel(ax1,'R [m]')
 c = colorbar(ax1);
 c.Label.String= 'n [m^{-3}]';
 view(ax1,2)
 %set(ax1,'colorscale','log')
 
 stepmin=2000;
 stepend=size(M.t2d,1);
 papsize=[16 14];
 
 [x,y]=ginput(1);
 Zindex=find(x>M.zgrid,1,'last');
 Rindex=find(y>M.rgrid,1,'last');
 
 Z=(M.zgrid(Zindex));
 R=(M.rgrid(Rindex));
 
 plot(Z,R,'rx','Markersize',12);
 
 
 % Rindex=16; Zindex=64;
 % Rindex=28; Zindex=floor(size(M.zgrid,1)/2)+1;
 
 Indices=M.Rindex(:,1)==Rindex & M.Zindex(:,1)==Zindex;
 
 Vr=M.VR(Indices,1)/M.vlight;
 Vz=M.VZ(Indices,1)/M.vlight;
 Vthet=M.VTHET(Indices,1)/M.vlight;
 
 Indicesend=M.Rindex(:,end)==Rindex & M.Zindex(:,end)==Zindex;
 
 Vrend=M.VR(Indicesend,end)/M.vlight;
 Vzend=M.VZ(Indicesend,end)/M.vlight;
 Vthetend=M.VTHET(Indicesend,end)/M.vlight;
 
-binwidth=0.05;
+binwidth=abs(max(Vrend)-min(Vrend))/10;
 f=figure('Name',sprintf("%s v distrib",M.file));
 tstudied=0;
 legtext=sprintf("t=%2.1f [ns]",M.tpart(end)*1e9);
 subplot(1,3,1)
 h1=histogram(Vr,'Binwidth',binwidth,'Normalization','probability','DisplayName',sprintf("t=%2.3d [ns]",M.tpart(1)*1e9));
 hold on
 h1=histogram(Vrend,'Binwidth',binwidth,'Normalization','probability','DisplayName',sprintf("t=%2.3d [ns]",M.tpart(end)*1e9));
 ylabel('probability')
 xlabel('\beta_r')
 
 grid on
 
 ax2=subplot(1,3,2);
-binwidth=0.01;
 h1=histogram(Vthet(:,1),'Binwidth',binwidth,'Normalization','probability','DisplayName',sprintf("t=%2.3d [ns]",M.tpart(1)*1e9));
 hold on
 h1=histogram(Vthetend,'Binwidth',binwidth,'Normalization','probability','DisplayName',sprintf("t=%2.3d [ns]",M.tpart(end)*1e9));
 ylabel('probability')
 xlabel('\beta_\theta')
 legend(ax2,'location','northoutside','orientation','vertical')
 grid on
 
 subplot(1,3,3)
-binwidth=0.05;
 h1=histogram(Vz(:,1),'Binwidth',binwidth,'Normalization','probability','DisplayName',sprintf("t=%2.3d [ns]",M.tpart(1)*1e9));
 hold on
 h1=histogram(Vzend,'Binwidth',binwidth,'Normalization','probability','DisplayName',sprintf("t=%2.3d [ns]",M.tpart(end)*1e9));
 ylabel('probability')
 xlabel('\beta_z')
 grid on
 f=gcf;
 sgtitle(sprintf('R=%1.2e[m] Z=%1.2e[m] dt=%1.2e[ns]',M.rgrid(Rindex+1),M.zgrid(Zindex+1),M.dt*1e9))
 f.PaperOrientation='landscape';
 f.PaperUnits='centimeters';
 papsize=[16 10];
 f.PaperSize=papsize;
 [~, name, ~] = fileparts(M.file);
 print(f,sprintf('%sParts_V_RZ',name),'-dpdf','-fillpage')
 savefig(f,sprintf('%sParts_V_RZ',name))
\ No newline at end of file
diff --git a/matlab/espic2dhdf5.m b/matlab/espic2dhdf5.m
index 773d635..ffdf7a8 100644
--- a/matlab/espic2dhdf5.m
+++ b/matlab/espic2dhdf5.m
@@ -1,409 +1,499 @@
 classdef espic2dhdf5
     %UNTITLED Summary of this class goes here
     %   Detailed explanation goes here
     
     properties
         filename
+        name
+        folder
+        fullpath
         timestamp
         info
         t0d
         t1d
         t2d
         tpart
         it0
         it1
         it2
         
         %% Physical constants
         vlight=299792458;
         qe=1.60217662E-19;
         me=9.109383E-31;
         eps_0=8.85418781762E-12;
         kb=1.38064852E-23;
         
         %% Run parameters
         dt
         nrun
         nlres
         nlsave
         nlclassical
         nlPhis
         nz
         nnr
         lz
-        qsim
-        msim
         nplasma
         potinn
         potout
         B0
         Rcurv
         width
         n0
         temp
         femorder
         ngauss
         plasmadim
         radii
         H0
         P0
+        normalized
+        nbspecies
         
         
         %% Frequencies
         omepe
         omece
         
         %% Normalizations
         tnorm
         rnorm
         bnorm
         enorm
         phinorm
         vnorm
         
         %% Grid data
         rgrid
         zgrid
         dz
         dr
         Vcell
         
         %% Magnetic field
         Br
         Bz
         Athet
         B
         
         %% Energies
         epot
         ekin
         etot
         etot0
         eerr
         
         %% 2D time data
         N
         fluidUR
         fluidUZ
         fluidUTHET
         pot
         Er
         Ez
         CellVol
         Presstens
         
         %% Splines
         knotsr
         knotsz
         
         %% Particle parameters
+        weight
+        qsim
+        msim
         nbparts
         H
         P
         partepot
         R
         Z
         Rindex
         Zindex
         partindex
         VR
         VZ
         VTHET
         THET
+        species
         
     end
     
     methods
         function file=file(obj)
             file=obj.filename;
         end
         
         function obj = espic2dhdf5(filename,readparts)
             filedata=dir(filename);
-            obj.filename=filename;
             if (isempty(filedata))
                 error("File: ""%s"" doesn't exist",filename)
             end
+            obj.folder=filedata.folder;
+            obj.filename=filename;
+            [~, obj.name, ~] = fileparts(obj.filename);
+            obj.fullpath=[obj.folder,'/',obj.filename];
             obj.timestamp=filedata.date;
             if nargin==1
                 readparts=true;
             end
             %obj.info=h5info(filename);
             
-            obj.dt = h5readatt(obj.filename,'/data/input.00/','dt');
-            obj.nrun = h5readatt(obj.filename,'/data/input.00/','nrun');
-            obj.nlres = strcmp(h5readatt(obj.filename,'/data/input.00/','nlres'),'y');
-            obj.nlsave = strcmp(h5readatt(obj.filename,'/data/input.00/','nlsave'),'y');
-            obj.nlclassical =strcmp(h5readatt(obj.filename,'/data/input.00/','nlclassical'),'y');
-            obj.nlPhis =strcmp(h5readatt(obj.filename,'/data/input.00/','nlPhis'),'y');
-            obj.nz = h5readatt(obj.filename,'/data/input.00/','nz');
-            obj.nnr = h5read(obj.filename,'/data/input.00/nnr');
-            obj.lz = h5read(obj.filename,'/data/input.00/lz');
-            obj.qsim = h5readatt(obj.filename,'/data/input.00/','qsim');
-            obj.msim = h5readatt(obj.filename,'/data/input.00/','msim');
-            obj.nplasma = h5readatt(obj.filename,'/data/input.00/','nplasma');
-            obj.potinn = h5readatt(obj.filename,'/data/input.00/','potinn');
-            obj.potout = h5readatt(obj.filename,'/data/input.00/','potout');
-            obj.B0 = h5readatt(obj.filename,'/data/input.00/','B0');
-            obj.Rcurv = h5readatt(obj.filename,'/data/input.00/','Rcurv');
-            obj.width = h5readatt(obj.filename,'/data/input.00/','width');
-            obj.n0 = h5readatt(obj.filename,'/data/input.00/','n0');
-            obj.temp = h5readatt(obj.filename,'/data/input.00/','temp');
+            obj.dt = h5readatt(obj.fullpath,'/data/input.00/','dt');
+            obj.nrun = h5readatt(obj.fullpath,'/data/input.00/','nrun');
+            obj.nlres = strcmp(h5readatt(obj.fullpath,'/data/input.00/','nlres'),'y');
+            obj.nlsave = strcmp(h5readatt(obj.fullpath,'/data/input.00/','nlsave'),'y');
+            obj.nlclassical =strcmp(h5readatt(obj.fullpath,'/data/input.00/','nlclassical'),'y');
+            obj.nlPhis =strcmp(h5readatt(obj.fullpath,'/data/input.00/','nlPhis'),'y');
+            obj.nz = h5readatt(obj.fullpath,'/data/input.00/','nz');
+            obj.nnr = h5read(obj.fullpath,'/data/input.00/nnr');
+            obj.lz = h5read(obj.fullpath,'/data/input.00/lz');
+            obj.qsim = h5readatt(obj.fullpath,'/data/input.00/','qsim');
+            obj.msim = h5readatt(obj.fullpath,'/data/input.00/','msim');
+            
+            try 
+                obj.weight=h5readatt(obj.fullpath,'/data/part/','weight');
+            catch
+                obj.weight=obj.msim/obj.me;
+            end
+            obj.nplasma = h5readatt(obj.fullpath,'/data/input.00/','nplasma');
+            obj.potinn = h5readatt(obj.fullpath,'/data/input.00/','potinn');
+            obj.potout = h5readatt(obj.fullpath,'/data/input.00/','potout');
+            obj.B0 = h5readatt(obj.fullpath,'/data/input.00/','B0');
+            obj.Rcurv = h5readatt(obj.fullpath,'/data/input.00/','Rcurv');
+            obj.width = h5readatt(obj.fullpath,'/data/input.00/','width');
+            obj.n0 = h5readatt(obj.fullpath,'/data/input.00/','n0');
+            obj.temp = h5readatt(obj.fullpath,'/data/input.00/','temp');
+            try
+                obj.it0 = h5readatt(obj.fullpath,'/data/input.00/','it0d');
+                obj.it1 = h5readatt(obj.fullpath,'/data/input.00/','it2d');
+                obj.it2 = h5readatt(obj.fullpath,'/data/input.00/','itparts');
+            catch
+                obj.it0 = h5readatt(obj.fullpath,'/data/input.00/','it0');
+                obj.it1 = h5readatt(obj.fullpath,'/data/input.00/','it1');
+                obj.it1 = h5readatt(obj.fullpath,'/data/input.00/','it2');
+            end
             try
-                obj.it0 = h5readatt(obj.filename,'/data/input.00/','it0d');
-                obj.it1 = h5readatt(obj.filename,'/data/input.00/','it2d');
-                obj.it2 = h5readatt(obj.filename,'/data/input.00/','itparts');
+                obj.nbspecies=h5readatt(obj.fullpath,'/data/input.00/','nbspecies');
+                obj.normalized=strcmp(h5readatt(obj.fullpath,'/data/input.00/','rawparts'),'y');
             catch
-                obj.it0 = h5readatt(obj.filename,'/data/input.00/','it0');
-                obj.it1 = h5readatt(obj.filename,'/data/input.00/','it1');
-                obj.it1 = h5readatt(obj.filename,'/data/input.00/','it2');
+                obj.nbspecies=1;
+                obj.normalized=false;
             end
             
             obj.omepe=sqrt(abs(obj.n0)*obj.qe^2/(obj.me*obj.eps_0));
             obj.omece=obj.qe*obj.B0/obj.me;
             
-            obj.nbparts= h5read(obj.filename, '/data/var0d/nbparts');
+            obj.nbparts= h5read(obj.fullpath, '/data/var0d/nbparts');
             try
-                obj.H0 = h5read(obj.filename,'/data/input.00/H0');
-                obj.P0 = h5read(obj.filename,'/data/input.00/P0');
+                obj.H0 = h5read(obj.fullpath,'/data/input.00/H0');
+                obj.P0 = h5read(obj.fullpath,'/data/input.00/P0');
             catch
                 obj.H0=3.2e-14;
                 obj.P0=8.66e-25;
             end
             
             % Normalizations
             obj.tnorm=1/obj.omepe;
             obj.rnorm=obj.vlight*obj.tnorm;
             obj.bnorm=obj.B0;
             obj.enorm=obj.vlight*obj.bnorm;
             obj.phinorm=obj.enorm*obj.rnorm;
             obj.vnorm=obj.vlight;
             
             % Grid data
-            obj.rgrid= h5read(obj.filename, '/data/var1d/rgrid')*obj.rnorm;
-            obj.zgrid= h5read(obj.filename, '/data/var1d/zgrid')*obj.rnorm;
+            obj.rgrid= h5read(obj.fullpath, '/data/var1d/rgrid')*obj.rnorm;
+            obj.zgrid= h5read(obj.fullpath, '/data/var1d/zgrid')*obj.rnorm;
             obj.dz=(obj.zgrid(end)-obj.zgrid(1))/double(obj.nz);
             rid=1;
             for i=1:length(obj.nnr)
                 obj.dr(i)=(obj.rgrid(sum(obj.nnr(1:i))+1)-obj.rgrid(rid))/double(obj.nnr(i));
                 rid=rid+obj.nnr(i);
             end
             obj.Vcell=(obj.zgrid(2:end)-obj.zgrid(1:end-1))*((obj.rgrid(2:end).^2-obj.rgrid(1:end-1).^2)*pi)';
             
             
-            Br = h5read(obj.filename,'/data/fields/Br')*obj.bnorm;
+            Br = h5read(obj.fullpath,'/data/fields/Br')*obj.bnorm;
             obj.Br= reshape(Br,length(obj.zgrid),length(obj.rgrid));
-            Bz = h5read(obj.filename,'/data/fields/Bz')*obj.bnorm;
+            Bz = h5read(obj.fullpath,'/data/fields/Bz')*obj.bnorm;
             obj.Bz= reshape(Bz,length(obj.zgrid),length(obj.rgrid));
             try
-                Atheta = h5read(obj.filename,'/data/fields/Athet')*obj.bnorm;
+                Atheta = h5read(obj.fullpath,'/data/fields/Athet')*obj.bnorm;
                 obj.Athet= reshape(Atheta,length(obj.zgrid),length(obj.rgrid));
             catch
             end
             obj.B=sqrt(obj.Bz.^2+obj.Br.^2);
             clear Br Bz
             try
-                obj.t0d=h5read(obj.filename,'/data/var0d/time');
+                obj.t0d=h5read(obj.fullpath,'/data/var0d/time');
             catch
                 obj.t0d=obj.dt.*double(0:length(obj.epot)-1);
             end
             
             
-            obj.femorder = h5read(obj.filename,'/data/input.00/femorder');
-            obj.ngauss = h5read(obj.filename,'/data/input.00/ngauss');
-            obj.plasmadim = h5read(obj.filename,'/data/input.00/plasmadim');
-            obj.radii = h5read(obj.filename,'/data/input.00/radii');
+            obj.femorder = h5read(obj.fullpath,'/data/input.00/femorder');
+            obj.ngauss = h5read(obj.fullpath,'/data/input.00/ngauss');
+            obj.plasmadim = h5read(obj.fullpath,'/data/input.00/plasmadim');
+            obj.radii = h5read(obj.fullpath,'/data/input.00/radii');
             
-            obj.epot = h5read(obj.filename,'/data/var0d/epot');
-            obj.ekin = h5read(obj.filename,'/data/var0d/ekin');
-            obj.etot = h5read(obj.filename,'/data/var0d/etot');
+            obj.epot = h5read(obj.fullpath,'/data/var0d/epot');
+            obj.ekin = h5read(obj.fullpath,'/data/var0d/ekin');
+            obj.etot = h5read(obj.fullpath,'/data/var0d/etot');
             try
-                obj.etot0 = h5read(filename,'/data/var0d/etot0');
+                obj.etot0 = h5read(obj.fullpath,'/data/var0d/etot0');
                 obj.eerr = obj.etot-obj.etot0;
             catch
                 obj.eerr = obj.etot-obj.etot(2);
             end
             
-            obj.pot=gridquantity(obj.filename,'/data/fields/pot',sum(obj.nnr)+1, obj.nz+1,obj.phinorm);
-            obj.Er=gridquantity(obj.filename,'/data/fields/Er',sum(obj.nnr)+1, obj.nz+1,obj.enorm);
-            obj.Ez=gridquantity(obj.filename,'/data/fields/Ez',sum(obj.nnr)+1, obj.nz+1,obj.enorm);
+            if(obj.normalized)
+                obj.pot=gridquantity(obj.fullpath,'/data/fields/pot',sum(obj.nnr)+1, obj.nz+1,1);
+                obj.Er=gridquantity(obj.fullpath,'/data/fields/Er',sum(obj.nnr)+1, obj.nz+1,1);
+                obj.Ez=gridquantity(obj.fullpath,'/data/fields/Ez',sum(obj.nnr)+1, obj.nz+1,1);
+            else
+                obj.pot=gridquantity(obj.fullpath,'/data/fields/pot',sum(obj.nnr)+1, obj.nz+1,obj.phinorm);
+                obj.Er=gridquantity(obj.fullpath,'/data/fields/Er',sum(obj.nnr)+1, obj.nz+1,obj.enorm);
+                obj.Ez=gridquantity(obj.fullpath,'/data/fields/Ez',sum(obj.nnr)+1, obj.nz+1,obj.enorm);
+            end
             
             try
-                obj.t2d = h5read(obj.filename,'/data/fields/time');
+                obj.t2d = h5read(obj.fullpath,'/data/fields/time');
             catch
-                info=h5info(obj.filename,'/data/fields/partdensity');
+                info=h5info(obj.fullpath,'/data/fields/partdensity');
                 obj.t2d=obj.dt*(0:info.objspace.Size(2)-1)*double(obj.it1);
             end
             
             try
-                info=h5info(obj.filename,'/data/fields/moments');
-                obj.femorder = h5read(obj.filename,'/data/input.00/femorder');
+                info=h5info(obj.fullpath,'/data/fields/moments');
+                obj.femorder = h5read(obj.fullpath,'/data/input.00/femorder');
                 kr=obj.femorder(2)+1;
                 obj.knotsr=augknt(obj.rgrid,kr);
                 
                 kz=obj.femorder(1)+1;
                 obj.knotsz=augknt(obj.zgrid,kz);
                 try
-                    obj.CellVol= reshape(h5read(obj.filename,'/data/fields/volume'),length(obj.knotsz)-kz,length(obj.knotsr)-kr);
+                    obj.CellVol= reshape(h5read(obj.fullpath,'/data/fields/volume'),length(obj.knotsz)-kz,length(obj.knotsr)-kr);
                     obj.CellVol=permute(obj.CellVol,[2,1,3])*obj.rnorm^3;
                 catch
                     zvol=fnder(spmak(obj.knotsz,ones(1,length(obj.knotsz)-kz)), -1 );
                     rvol=fnder(spmak(obj.knotsr,2*pi*[obj.rgrid' 2*obj.rgrid(end)-obj.rgrid(end-1)]), -1 );
                     ZVol=diff(fnval(zvol,obj.knotsz));
                     RVol=diff(fnval(rvol,obj.knotsr));
                     obj.CellVol=RVol(3:end-1)*ZVol(3:end-1)';
                     obj.CellVol=padarray(obj.CellVol,[1,1],'replicate','post');
                 end
-                
-                obj.N=splinedensity(obj.filename, '/data/fields/moments', obj.knotsr, obj.knotsz, obj.femorder, obj.CellVol, abs(obj.qsim/obj.qe), 1);
-                obj.fluidUR=splinevelocity(obj.filename, '/data/fields/moments', obj.knotsr, obj.knotsz, obj.femorder, obj.vnorm, 2);
-                obj.fluidUTHET=splinevelocity(obj.filename, '/data/fields/moments', obj.knotsr, obj.knotsz, obj.femorder, obj.vnorm, 3);
-                obj.fluidUZ=splinevelocity(obj.filename, '/data/fields/moments', obj.knotsr, obj.knotsz, obj.femorder, obj.vnorm, 4);
-                obj.Presstens=splinepressure(obj.filename, '/data/fields/moments', obj.knotsr, obj.knotsz, obj.femorder, obj.CellVol, obj.vnorm^2*obj.msim);
+                if(obj.normalized)
+                    obj.N=splinedensity(obj.fullpath, '/data/fields/moments', obj.knotsr, obj.knotsz, obj.femorder, obj.CellVol, 1, 1);
+                else
+                    obj.N=splinedensity(obj.fullpath, '/data/fields/moments', obj.knotsr, obj.knotsz, obj.femorder, obj.CellVol, abs(obj.qsim/obj.qe), 1);
+                end
+                obj.fluidUR=splinevelocity(obj.fullpath, '/data/fields/moments', obj.knotsr, obj.knotsz, obj.femorder, obj.vnorm, 2);
+                obj.fluidUTHET=splinevelocity(obj.fullpath, '/data/fields/moments', obj.knotsr, obj.knotsz, obj.femorder, obj.vnorm, 3);
+                obj.fluidUZ=splinevelocity(obj.fullpath, '/data/fields/moments', obj.knotsr, obj.knotsz, obj.femorder, obj.vnorm, 4);
+                if(obj.normalized)
+                    obj.Presstens=splinepressure(obj.fullpath, '/data/fields/moments', obj.knotsr, obj.knotsz, obj.femorder, obj.CellVol, obj.vnorm^2*obj.me);
+                else
+                    obj.Presstens=splinepressure(obj.fullpath, '/data/fields/moments', obj.knotsr, obj.knotsz, obj.femorder, obj.CellVol, obj.vnorm^2*obj.msim);
+                end
             catch
                 obj.CellVol=(obj.zgrid(2:end)-obj.zgrid(1:end-1))*((obj.rgrid(2:end).^2-obj.rgrid(1:end-1).^2)*pi)';
                 obj.CellVol=obj.CellVol';
-                obj.N=griddensity(obj.filename, '/data/fields/partdensity', sum(obj.nnr)+1, obj.nz+1, obj.CellVol, abs(obj.qsim/obj.qe), true);
-                obj.fluidUR=gridquantity(obj.filename, '/data/fields/fluidur', sum(obj.nnr)+1, obj.nz+1, obj.vnorm, true);
-                obj.fluidUTHET=gridquantity(obj.filename, '/data/fields/fluiduthet', sum(obj.nnr)+1, obj.nz+1, obj.vnorm, true);
-                obj.fluidUZ=gridquantity(obj.filename, '/data/fields/fluiduz', sum(obj.nnr)+1, obj.nz+1, obj.vnorm, true);
+                obj.N=griddensity(obj.fullpath, '/data/fields/partdensity', sum(obj.nnr)+1, obj.nz+1, obj.CellVol, abs(obj.qsim/obj.qe), true);
+                obj.fluidUR=gridquantity(obj.fullpath, '/data/fields/fluidur', sum(obj.nnr)+1, obj.nz+1, obj.vnorm, true);
+                obj.fluidUTHET=gridquantity(obj.fullpath, '/data/fields/fluiduthet', sum(obj.nnr)+1, obj.nz+1, obj.vnorm, true);
+                obj.fluidUZ=gridquantity(obj.fullpath, '/data/fields/fluiduz', sum(obj.nnr)+1, obj.nz+1, obj.vnorm, true);
             end
             
             if(readparts)
-            
-            obj.R = h5read(filename,'/data/part/R')*obj.rnorm;
-            obj.Z = h5read(filename,'/data/part/Z')*obj.rnorm;
-            try
-                obj.THET = h5read(filename,'/data/part/THET');
-            catch
-                clear obj.THET
-            end
-            try
-                obj.Rindex=h5read(filename,'/data/part/Rindex');
-                obj.Zindex=h5read(filename,'/data/part/Zindex');
-            catch
-                clear obj.Rindex obj.Zindex
-            end
-            UR = h5read(filename,'/data/part/UR');
-            UZ = h5read(filename,'/data/part/UZ');
-            UTHET= h5read(filename,'/data/part/UTHET');
-            if(obj.nlclassical)
-                obj.VR = UR*obj.vnorm;
-                clear UR
-                obj.VZ = UZ*obj.vnorm;
-                clear UZ
-                obj.VTHET = UTHET*obj.vnorm;
-                clear UTHET
-            else
-                GAMM = sqrt(1+UR.^2+UZ.^2+UTHET.^2);
-                obj.VR = UR./GAMM*obj.vnorm;
-                clear UR
-                obj.VZ = UZ./GAMM*obj.vnorm;
-                clear UZ
-                obj.VTHET = UTHET./GAMM*obj.vnorm;
-                clear UTHET
-                clear GAMM
-            end
-            %obj.VPERP = sqrt(obj.VR.*obj.VR+obj.VTHET.*obj.VTHET);
-            obj.partepot = sign(obj.qsim)*h5read(filename,'/data/part/pot')*obj.phinorm*obj.qe;
-            obj.H=0.5*obj.me*(obj.VR.^2+obj.VTHET.^2+obj.VZ.^2)+obj.partepot;
-            %clear partepot
-            obj.P=obj.R.*(obj.VTHET*obj.me+sign(obj.qsim)*obj.qe*Athet(obj.R,obj.Z));
-            try
-                obj.partindex = h5read(filename,'/data/part/partindex');
-                partindex=obj.partindex;
-                [~,Indices]=sort(partindex,'descend');
-                for i=1:size(Indices,2)
-                    obj.H(:,i)=obj.H(Indices(:,i),i);
-                    obj.P(:,i)=obj.P(Indices(:,i),i);
-                    obj.R(:,i)=obj.R(Indices(:,i),i);
-                    obj.Z(:,i)=obj.Z(Indices(:,i),i);
-                    obj.Rindex(:,i)=obj.Rindex(Indices(:,i),i);
-                    obj.Zindex(:,i)=obj.Zindex(Indices(:,i),i);
-                    obj.VR(:,i)=obj.VR(Indices(:,i),i);
-                    obj.VZ(:,i)=obj.VZ(Indices(:,i),i);
-                    obj.VTHET(:,i)=obj.VTHET(Indices(:,i),i);
-                    obj.THET(:,i)=obj.THET(Indices(:,i),i);
+                
+                if(obj.normalized)
+                    obj.R = h5read(obj.fullpath,'/data/part/R');
+                    obj.Z = h5read(obj.fullpath,'/data/part/Z');
+                else
+                    obj.R = h5read(obj.fullpath,'/data/part/R')*obj.rnorm;
+                    obj.Z = h5read(obj.fullpath,'/data/part/Z')*obj.rnorm;
                 end
-            catch
+                try
+                    obj.THET = h5read(obj.fullpath,'/data/part/THET');
+                catch
+                    clear obj.THET
+                end
+                try
+                    obj.Rindex=h5read(obj.fullpath,'/data/part/Rindex');
+                    obj.Zindex=h5read(obj.fullpath,'/data/part/Zindex');
+                catch
+                    clear obj.Rindex obj.Zindex
+                end
+                UR = h5read(obj.fullpath,'/data/part/UR');
+                UZ = h5read(obj.fullpath,'/data/part/UZ');
+                UTHET= h5read(obj.fullpath,'/data/part/UTHET');
+                if(obj.nlclassical)
+                    obj.VR = UR*obj.vnorm;
+                    clear UR
+                    obj.VZ = UZ*obj.vnorm;
+                    clear UZ
+                    obj.VTHET = UTHET*obj.vnorm;
+                    clear UTHET
+                else
+                    GAMM = sqrt(1+UR.^2+UZ.^2+UTHET.^2);
+                    obj.VR = UR./GAMM*obj.vnorm;
+                    clear UR
+                    obj.VZ = UZ./GAMM*obj.vnorm;
+                    clear UZ
+                    obj.VTHET = UTHET./GAMM*obj.vnorm;
+                    clear UTHET
+                    clear GAMM
+                end
+                %obj.VPERP = sqrt(obj.VR.*obj.VR+obj.VTHET.*obj.VTHET);
+                if(obj.normalized)
+                    obj.partepot = sign(obj.qsim)*h5read(filename,'/data/part/pot')*obj.qe;
+                else
+                    obj.partepot = sign(obj.qsim)*h5read(filename,'/data/part/pot')*obj.phinorm*obj.qe;
+                end
+                obj.H=0.5*obj.me*(obj.VR.^2+obj.VTHET.^2+obj.VZ.^2)+obj.partepot;
+                %clear partepot
+                obj.P=obj.R.*(obj.VTHET*obj.me+sign(obj.qsim)*obj.qe*Athet(obj.R,obj.Z));
+                try
+                    obj.partindex = h5read(obj.fullpath,'/data/part/partindex');
+                    partindex=obj.partindex;
+                    [~,Indices]=sort(partindex,'descend');
+                    for i=1:size(Indices,2)
+                        obj.H(:,i)=obj.H(Indices(:,i),i);
+                        obj.P(:,i)=obj.P(Indices(:,i),i);
+                        obj.R(:,i)=obj.R(Indices(:,i),i);
+                        obj.Z(:,i)=obj.Z(Indices(:,i),i);
+                        obj.Rindex(:,i)=obj.Rindex(Indices(:,i),i);
+                        obj.Zindex(:,i)=obj.Zindex(Indices(:,i),i);
+                        obj.VR(:,i)=obj.VR(Indices(:,i),i);
+                        obj.VZ(:,i)=obj.VZ(Indices(:,i),i);
+                        obj.VTHET(:,i)=obj.VTHET(Indices(:,i),i);
+                        obj.THET(:,i)=obj.THET(Indices(:,i),i);
+                    end
+                catch
+                end
+                clear partindex;
             end
-            clear partindex;
-            end 
             
             try
-                obj.tpart = h5read(filename,'/data/part/time');
+                obj.tpart = h5read(obj.fullpath,'/data/part/time');
             catch
                 obj.tpart=obj.dt*(0:size(obj.R,2)-1)*double(obj.it2);
             end
             
             function Atheta=Athet(R,Z)
                 Atheta=0.5*obj.B0*(R-obj.width/pi*(obj.Rcurv-1)/(obj.Rcurv+1)...
-                .*besseli(1,2*pi*R/obj.width).*cos(2*pi*Z/obj.width));
+                    .*besseli(1,2*pi*R/obj.width).*cos(2*pi*Z/obj.width));
+            end
+            if(obj.nbspecies >1)
+                obj.species=h5parts.empty;
+                for i=2:obj.nbspecies
+                    obj.species(i-1)=h5parts(obj.fullpath,sprintf('/data/part/%2d',i),obj);
+                end
             end
         end
         
         function changed=ischanged(obj)
             %ischanged Check if the file has been changed and some data
             %must be reloaded
             try
-                filedata=dir(obj.filename);
+                filedata=dir(obj.fullpath);
                 checkedtimestamp=filedata.date;
                 if (max(checkedtimestamp > obj.timestamp) )
                     changed=true;
                     return
                 end
                 changed=false;
                 return
             catch
                 changed=true;
                 return
             end
         end
         
         function plotEnergy(obj)
             tmin=2;
             tmax=length(obj.ekin);
-            [~, name, ~] = fileparts(obj.file);
-            f=figure('Name', sprintf('%s Energy',name));
+            f=figure('Name', sprintf('%s Energy',obj.name));
             subplot(2,1,1)
             plot(obj.t0d(tmin:tmax),obj.ekin(tmin:tmax),'o-',...
-                 obj.t0d(tmin:tmax),obj.epot(tmin:tmax),'d-',...
-                 obj.t0d(tmin:tmax),obj.etot(tmin:tmax),'h-',...
-                 obj.t0d(tmin:tmax),obj.eerr(tmin:tmax),'x--')
+                obj.t0d(tmin:tmax),obj.epot(tmin:tmax),'d-',...
+                obj.t0d(tmin:tmax),obj.etot(tmin:tmax),'h-',...
+                obj.t0d(tmin:tmax),obj.eerr(tmin:tmax),'x--')
             legend('ekin', 'epot', 'etot','eerr')
             xlabel('Time [s]')
             ylabel('Energies [J]')
             grid on
             xlimits=xlim();
             
             subplot(2,1,2)
             try
                 semilogy(obj.t0d(tmin:tmax),abs(obj.eerr(tmin:tmax)./obj.etot0(tmin:tmax)),'h-')
             catch
                 semilogy(obj.t0d(tmin:tmax),abs(obj.eerr(tmin:tmax)/obj.etot(2)),'h-')
             end
             xlabel('t [s]')
             ylabel('E_{err}/E_{tot}')
             xlim(xlimits)
             grid on
             try
                 yyaxis right
                 plot(obj.t0d(tmin:tmax),abs(obj.nbparts(tmin:tmax)./obj.nbparts(1)*100),'d--')
                 ylabel('Nparts %')
                 %ylim([0 110])
             catch
             end
-            obj.savegraph(f,sprintf('%sEnergy',name));
+            obj.savegraph(f,sprintf('%s/%sEnergy',obj.folder,obj.name));
+        end
+        
+        function trappedParticles(obj)
+            f=figure('Name', sprintf('%s Trapped particles',obj.name));
+            plot(obj.t0d,obj.nbparts*obj.weight)
+            xlabel('t [s]')
+            ylabel('N particles')
+            obj.savegraph(f,sprintf('%s/%sntrapped',obj.folder,obj.name));
         end
         
         function savegraph(obj, figure, name, papsize)
             figure.PaperUnits='centimeters';
             if (nargin < 4)
                 papsize=[14 16];
             end
             figure.PaperSize=papsize;
             print(figure,name,'-dpdf','-fillpage')
             savefig(figure,name)
         end
+        
+        function displayHP(obj,tstart)
+            if(size(obj.H,2)>=2)
+                f=figure('Name', sprintf('%s HP',obj.name));
+                legtext=sprintf("t=%2.1f - %2.1f [ns]",obj.tpart(tstart)*1e9,obj.tpart(end)*1e9);
+                subplot(1,2,1)
+                partsmax=min(obj.nbparts(end),size(obj.H,1));
+                H=obj.H(1:obj.nbparts(1),1);
+                h1=histogram(H,10,'BinLimits',[min(H(:)) max(H(:))],'DisplayName',sprintf("t=%2.3d [ns]",obj.tpart(1)*1e9));
+                hold on
+                H=mean(obj.H(1:partsmax,tstart:end),2);
+                %,'Binwidth',h1.BinWidth
+                h1=histogram(H,20,'BinLimits',[min(H(:)) max(H(:))],'DisplayName',legtext);
+                ylabel('counts')
+                xlabel('H [J]')
+                legend
+                
+                subplot(1,2,2)
+                P=obj.P(1:obj.nbparts(1),1);
+                h2=histogram(P,10,'BinLimits',[min(P(:)) max(P(:))],'DisplayName',sprintf("t=%2.3d [ns]",obj.tpart(1)*1e9));
+                hold on
+                P=mean(obj.P(1:partsmax,tstart:end),2);
+                histogram(P,50,'BinLimits',[min(P(:)) max(P(:))],'DisplayName',legtext);
+                ylabel('counts')
+                xlabel('P [kg\cdotm^2\cdots^{-1}]')
+                %clear P
+                %clear H
+                legend
+                %xlim([0.95*h2.BinLimits(1) 1.05*h2.BinLimits(2)])
+                obj.savegraph(f,sprintf('%s/%sParts_HP',obj.folder,obj.name));
+            end
+        end
     end
 end
diff --git a/matlab/h5parts.m b/matlab/h5parts.m
new file mode 100644
index 0000000..323e3bf
--- /dev/null
+++ b/matlab/h5parts.m
@@ -0,0 +1,98 @@
+classdef h5parts
+    properties
+        fullpath
+        R
+        Z
+        THET
+        VR
+        VZ
+        VTHET
+        Rindex
+        Zindex
+        partindex
+        H
+        P
+        partepot
+        nlclassical
+        q
+        m
+        weight
+        tpart
+        it2
+        nbparts
+        
+        rgrid
+        zgrid
+        vnorm
+    
+    end
+    methods
+        function obj=h5parts(filename,hdf5group,parent)
+            obj.fullpath=filename;
+            obj.nlclassical=parent.nlclassical;
+            obj.it2=parent.it2;
+            obj.rgrid=parent.rgrid;
+            obj.zgrid=parent.zgrid;
+            obj.vnorm=parent.vnorm;
+            obj.R = h5read(obj.fullpath,sprintf('%s/R',hdf5group));
+            obj.Z = h5read(obj.fullpath,sprintf('%s/Z',hdf5group));
+            obj.THET = h5read(obj.fullpath,sprintf('%s/THET',hdf5group));
+            obj.Rindex=h5read(obj.fullpath,sprintf('%s/Rindex',hdf5group));
+            obj.Zindex=h5read(obj.fullpath,sprintf('%s/Zindex',hdf5group));
+            UR = h5read(obj.fullpath,sprintf('%s/UR',hdf5group));
+            UZ = h5read(obj.fullpath,sprintf('%s/UZ',hdf5group));
+            UTHET= h5read(obj.fullpath,sprintf('%s/UTHET',hdf5group));
+            obj.q= h5readatt(obj.fullpath,hdf5group,'q');
+            obj.m= h5readatt(obj.fullpath,hdf5group,'m');
+            obj.weight= h5readatt(obj.fullpath,hdf5group,'weight');
+            
+            if(obj.nlclassical)
+                obj.VR = UR*obj.vnorm;
+                clear UR
+                obj.VZ = UZ*obj.vnorm;
+                clear UZ
+                obj.VTHET = UTHET*obj.vnorm;
+                clear UTHET
+            else
+                GAMM = sqrt(1+UR.^2+UZ.^2+UTHET.^2);
+                obj.VR = UR./GAMM*obj.vnorm;
+                clear UR
+                obj.VZ = UZ./GAMM*obj.vnorm;
+                clear UZ
+                obj.VTHET = UTHET./GAMM*obj.vnorm;
+                clear UTHET
+                clear GAMM
+            end
+            obj.partepot = h5read(filename,sprintf('%s/pot',hdf5group))*obj.q;
+            obj.H=0.5*obj.m*(obj.VR.^2+obj.VTHET.^2+obj.VZ.^2)+obj.partepot;
+            %clear partepot
+            obj.P=obj.R.*(obj.VTHET*obj.m+obj.q*Athet(obj.R,obj.Z));
+            try
+                obj.partindex = h5read(obj.fullpath,sprintf('%s/partindex',hdf5group));
+                partindex=obj.partindex;
+                [~,Indices]=sort(partindex,'descend');
+                for i=1:size(Indices,2)
+                    obj.H(:,i)=obj.H(Indices(:,i),i);
+                    obj.P(:,i)=obj.P(Indices(:,i),i);
+                    obj.R(:,i)=obj.R(Indices(:,i),i);
+                    obj.Z(:,i)=obj.Z(Indices(:,i),i);
+                    obj.Rindex(:,i)=obj.Rindex(Indices(:,i),i);
+                    obj.Zindex(:,i)=obj.Zindex(Indices(:,i),i);
+                    obj.VR(:,i)=obj.VR(Indices(:,i),i);
+                    obj.VZ(:,i)=obj.VZ(Indices(:,i),i);
+                    obj.VTHET(:,i)=obj.VTHET(Indices(:,i),i);
+                    obj.THET(:,i)=obj.THET(Indices(:,i),i);
+                end
+            catch
+            end
+            clear partindex;
+            obj.tpart = h5read(obj.fullpath,sprintf('%s/time',hdf5group));
+            obj.nbparts = h5read(obj.fullpath,sprintf('%s/Nparts',hdf5group));
+            
+             function Atheta=Athet(R,Z)
+                Atheta=0.5*parent.B0*(R-parent.width/pi*(parent.Rcurv-1)/(parent.Rcurv+1)...
+                .*besseli(1,2*pi*R/parent.width).*cos(2*pi*Z/parent.width));
+            end
+        end
+    end
+end
\ No newline at end of file
diff --git a/matlab/rbfinder.m b/matlab/rbfinder.m
new file mode 100644
index 0000000..ae36ec7
--- /dev/null
+++ b/matlab/rbfinder.m
@@ -0,0 +1,150 @@
+%% wr+
+H0=3.2e-14;
+P0=8.66e-25;
+r0=0.005;
+consideredne=5e16;
+
+%% wr-
+% H0=2.0e-16;
+% P0=-5.7e-25;
+% r0=0.0025;
+
+%% simulated
+%          5e14     5e15     1e16     5e16     1e17     2e17     3e17     4e17      1e18    3e18     5e18     1e19
+r_sim=   [0.00497, 0.0053,  0.0056,  0.0059,  0.00628, 0.0050,  0.0053,  0.0052, 0.0054,  0.0052,  0.0054];%,  0.0063];
+rplussim=[0.0124,  0.0118,  0.0118,  0.0118,  0.0121,  0.0137,  0.0140,  0.016,   0.0163,  0.020,   0.025];%,   0.042];
+nsim=    [4.8e14,  4.12e15, 7.5e15,  2.54e16, 4.19e16, 6.42e16, 8.55e16, 9.79e16, 1.34e17, 2.408e17, 2.416e17];%, 3.49e17];
+
+
+B0=0.21;
+Rcurv=1.5;
+L=0.48;
+z=0.0;
+
+qe=1.60217662E-19;
+me=9.109383E-31;
+eps0=8.85418781762e-12;
+
+ne=5*logspace(14,19,800);
+rb_=zeros(size(ne));
+rbplus=zeros(size(ne));
+i=1;
+minus=@(r) 1-(P0/r+qe*0.5*B0*(r-L/pi*(Rcurv-1)/(Rcurv+1)*besseli(1,2*pi*r/L)*cos(2*pi*z/L)))^2/(2*me*H0);
+%minus=@(r) 1+qe*((phib-phia)*log(r)+phia*log(b)-phib*log(a))/(log(b/a))/H0-(P0/r+qe*0.5*B0*(r-L/pi*(Rcurv-1)/(Rcurv+1)*besseli(1,2*pi*r/L)*cos(2*pi*z/L)))^2/(2*me*H0);
+format long;
+rb_(i)=fzero(minus,r0);
+plus=@(r) qe^2*ne(i)*rb_(i)/(eps0*H0)*(r-rb_(i)-rb_(i)*log(r/rb_(i)))+1-1/(2*me*H0)*(P0/r+qe*0.5*B0*(r-L/pi*(Rcurv-1)/(Rcurv+1)*besseli(1,2*pi*r/L)*cos(2*pi*z/L)))^2;
+%plus=@(r) 1+qe*((phib-phia)*log(r)+phia*log(b)-phib*log(a))/(log(b/a))/H0-(P0/r+qe*0.5*B0*(r-L/pi*(Rcurv-1)/(Rcurv+1)*besseli(1,2*pi*r/L)*cos(2*pi*z/L)))^2/(2*me*H0);
+rbplus(i)=fzero(plus,5*rb_(i));
+remainder=ones(size(ne));
+remainder(i)=plus(rbplus(i));
+for i=2:length(ne)
+    try
+        minus=@(r) 1-(P0/r+qe*0.5*B0*(r-L/pi*(Rcurv-1)/(Rcurv+1)*besseli(1,2*pi*r/L)*cos(2*pi*z/L)))^2/(2*me*H0);
+        %minus=@(r) 1+qe*((phib-phia)*log(r)+phia*log(b)-phib*log(a))/(log(b/a))/H0-(P0/r+qe*0.5*B0*(r-L/pi*(Rcurv-1)/(Rcurv+1)*besseli(1,2*pi*r/L)*cos(2*pi*z/L)))^2/(2*me*H0);
+        rb_(i)=fzero(minus,0.004);
+        rb_t=rb_(i);
+        plus=@(r) qe^2*ne(i)*rb_t/(eps0*H0)*(r-rb_t-rb_t*log(r/rb_t))+1-1/(2*me*H0)*(P0/r+qe*0.5*B0*(r-L/pi*(Rcurv-1)/(Rcurv+1)*besseli(1,2*pi*r/L)*cos(2*pi*z/L)))^2;
+        %plus=@(r) 1+qe*((phib-phia)*log(r)+phia*log(b)-phib*log(a))/(log(b/a))/H0-(P0/r+qe*0.5*B0*(r-L/pi*(Rcurv-1)/(Rcurv+1)*besseli(1,2*pi*r/L)*cos(2*pi*z/L)))^2/(2*me*H0);
+        rbplus(i)=fzero(plus,1.5*rbplus(i-1));
+        remainder(i)=plus(rbplus(i));
+    catch
+    end
+end
+
+
+f=figure;
+%subplot(2,1,1)
+semilogx(ne(remainder~=1),rbplus(remainder~=1)*1e3,'-','displayname','r_b^+')
+hold on
+semilogx(ne,rb_*1000,'-','displayname','r_b^-')
+semilogx(nsim,rplussim*1e3,'+--','displayname','r_b^+ simulated','linewidth',1.5)
+semilogx(nsim,r_sim*1e3,'+--','displayname','r_b^- simulated','linewidth',1.5)
+legend
+ylabel('r_b [mm]')
+ylim([0 160])
+xlabel('n_e(r_b^-) [m^{-3}]')
+% subplot(2,1,2)
+% semilogx(ne(remainder~=1),remainder(remainder~=1),'x--')
+% ylabel('remainder [a.u.]')
+% xlabel('n_e(r_b^-) [m^{-3}]')
+
+f.PaperOrientation='landscape';
+f.PaperUnits='centimeters';
+papsize=[10 10];
+f.PaperSize=papsize;
+print(f,'rbne','-dpdf','-fillpage')
+
+
+i=find(consideredne>=ne,1,'last');
+z=linspace(0,L/2,1000);
+rb_z=zeros(size(z));
+rbplusz=rb_z;
+minus=@(r) 1-(P0/r+qe*0.5*B0*(r-L/pi*(Rcurv-1)/(Rcurv+1)*besseli(1,2*pi*r/L)*cos(2*pi*z(1)/L)))^2/(2*me*H0);
+rb_z(1)=fzero(minus,rb_(i));
+rb_t=rb_z(1);
+z_t=z(1);
+plus=@(r) qe^2*ne(i)*rb_t/(eps0*H0)*(r-rb_t-rb_t*log(r/rb_t))+1-1/(2*me*H0)*(P0/r+qe*0.5*B0*(r-L/pi*(Rcurv-1)/(Rcurv+1)*besseli(1,2*pi*r/L)*cos(2*pi*z_t/L)))^2;
+rbplusz(1)=fzero(plus,rbplus(i));
+remainder(1)=plus(rbplusz(1));
+for j=2:length(z)
+minus=@(r) 1-(P0/r+qe*0.5*B0*(r-L/pi*(Rcurv-1)/(Rcurv+1)*besseli(1,2*pi*r/L)*cos(2*pi*z(j)/L)))^2/(2*me*H0);
+format long;
+try
+rb_z(j)=fzero(minus,rb_z(j-1));
+rb_t=rb_z(j);
+z_t=z(j);
+plus=@(r) qe^2*ne(i)*rb_t/(eps0*H0)*(r-rb_t-rb_t*log(r/rb_t))+1-1/(2*me*H0)*(P0/r+qe*0.5*B0*(r-L/pi*(Rcurv-1)/(Rcurv+1)*besseli(1,2*pi*r/L)*cos(2*pi*z_t/L)))^2;
+rbplusz(j)=fzero(plus,rbplusz(j-1));
+remainder(j)=plus(rbplusz(j));
+catch
+end
+end
+figure()
+z=[-flip(z(2:end)) z];
+rb_z=[flip(rb_z(2:end)) rb_z];
+rbplusz=[flip(rbplusz(2:end)) rbplusz];
+plot(z(rb_z~=0),rb_z(rb_z~=0),'b')
+hold on
+plot(z(rbplusz~=0),rbplusz(rbplusz~=0),'r')
+ylabel('r_b [m]')
+ylim([0 0.16])
+xlim([-L/2 L/2])
+xlabel('z [m]')
+title(sprintf('n_e=%7.2e [m^{-3}]',ne(i)))
+
+ind=rbplusz~=0 & rb_z~=0& ~isnan(rbplusz) & ~isnan(rb_z);
+ra=rb_z(ind);
+rb=rbplusz(ind);
+zvol=z(ind);
+ra=(ra(1:end-1)+ra(2:end))/2;
+rb=(rb(1:end-1)+rb(2:end))/2;
+VOL=2*pi*diff(zvol).*min(ra).*(rb-ra);
+
+nplasma=2116800
+Nbesl=ne(i)*VOL;
+Nbe=sum(Nbesl)
+Nmacrosl=floor(Nbesl/Nbe*nplasma);
+Nmacro=sum(Nmacrosl)
+remain=nplasma-Nmacro
+Nmacrosl(ceil(length(Nmacrosl)/2-remain/2):floor(length(Nmacrosl)/2+remain/2))=Nmacrosl(ceil(length(Nmacrosl)/2-remain/2):floor(length(Nmacrosl)/2+remain/2))+1;
+Nmacrosl(floor(length(Nmacrosl)/2))=Nmacrosl(floor(length(Nmacrosl)/2))+nplasma-sum(Nmacrosl);
+Nmacro=sum(Nmacrosl)
+remain=nplasma-Nmacro
+
+
+msim=me*Nbe/nplasma
+qsim=qe*Nbe/nplasma
+
+datas.ra=ra;
+datas.rb=rb;
+datas.z=zvol;
+datas.npartsslice=Nmacrosl;
+datas.m=me;
+datas.weight=sum(Nbesl)/nplasma;
+datas.q=-qe;
+datas.H0=H0;
+datas.P0=P0;
+datas.temperature=10000;
+datas.velocitytype=2;
+datas.radialtype=1;
\ No newline at end of file
diff --git a/matlab/rbfindercoax.m b/matlab/rbfindercoax.m
new file mode 100644
index 0000000..b913f36
--- /dev/null
+++ b/matlab/rbfindercoax.m
@@ -0,0 +1,147 @@
+%% wr+
+H0=3.2e-14;
+P0=8.66e-25;
+r0=0.005;
+ne=5e14;
+
+B0=0.21;
+Rcurv=1.5;
+L=0.48;
+z=0.0;
+consideredphia=-60000;
+
+qe=1.60217662E-19;
+me=9.109383E-31;
+eps0=8.85418781762e-12;
+phia=-linspace(0,90000,80);
+phib=0;
+b=0.16;
+a=0.001;
+
+%% simulated
+
+r_sim=   [5.8e-3,  5.4e-3];%,  0.0063];
+rplussim=[1.11e-2, 1.20e-2];%,   0.042];
+phiasim= [-45000,  -30000];%, 3.49e17];
+
+
+
+rb_phi=zeros(size(phia));
+rbplusphi=zeros(size(phia));
+i=1;
+minus=@(r) 1+qe*((phib-phia(i))*log(r)+phia(i)*log(b)-phib*log(a))/(log(b/a))/H0-(P0/r+qe*0.5*B0*(r-L/pi*(Rcurv-1)/(Rcurv+1)*besseli(1,2*pi*r/L)*cos(2*pi*z/L)))^2/(2*me*H0);
+format long;
+rb_phi(i)=fzero(minus,r0);
+%plus=@(r) qe^2*ne(i)*rb_(i)/(eps0*H0)*(r-rb_(i)-rb_(i)*log(r/rb_(i)))+1-1/(2*me*H0)*(P0/r+qe*0.5*B0*(r-L/pi*(Rcurv-1)/(Rcurv+1)*besseli(1,2*pi*r/L)*cos(2*pi*z/L)))^2;
+plus=@(r) 1+qe*((phib-phia(i))*log(r)+phia(i)*log(b)-phib*log(a))/(log(b/a))/H0-(P0/r+qe*0.5*B0*(r-L/pi*(Rcurv-1)/(Rcurv+1)*besseli(1,2*pi*r/L)*cos(2*pi*z/L)))^2/(2*me*H0);
+rbplusphi(i)=fzero(plus,5*rb_phi(i));
+remainderphi=ones(size(phia));
+remainderphi(i)=plus(rbplusphi(i));
+for i=2:length(phia)
+    try
+        minus=@(r) 1+qe*((phib-phia(i))*log(r)+phia(i)*log(b)-phib*log(a))/(log(b/a))/H0-(P0/r+qe*0.5*B0*(r-L/pi*(Rcurv-1)/(Rcurv+1)*besseli(1,2*pi*r/L)*cos(2*pi*z/L)))^2/(2*me*H0);
+        rb_phi(i)=fzero(minus,rb_phi(i-1));
+        rb_t=rb_phi(i);
+        plus=@(r) 1+qe*((phib-phia(i))*log(r)+phia(i)*log(b)-phib*log(a))/(log(b/a))/H0-(P0/r+qe*0.5*B0*(r-L/pi*(Rcurv-1)/(Rcurv+1)*besseli(1,2*pi*r/L)*cos(2*pi*z/L)))^2/(2*me*H0);
+        rbplusphi(i)=fzero(plus,rbplusphi(i-1));
+        remainderphi(i)=plus(rbplusphi(i));
+    catch
+    end
+end
+
+f=figure;
+%subplot(2,1,1)
+plot(phia(remainderphi~=1)/1e3,rb_phi(remainderphi~=1)*1e3,'x-','displayname','r_b^-')
+hold on
+plot(phia(remainderphi~=1)/1e3,rbplusphi(remainderphi~=1)*1e3,'x-','displayname','r_b^+')
+plot(phiasim/1e3,rplussim*1e3,'+--','displayname','r_b^+ simulated','linewidth',1.5)
+plot(phiasim/1e3,r_sim*1e3,'+--','displayname','r_b^- simulated','linewidth',1.5)
+legend
+ylabel('r_b [mm]')
+ylim([0 160])
+xlabel('\Phi_a [kV]')
+% subplot(2,1,2)
+% semilogx(ne(remainder~=1),remainder(remainder~=1),'x--')
+% ylabel('remainder [a.u.]')
+% xlabel('n_e(r_b^-) [m^{-3}]')
+
+f.PaperOrientation='landscape';
+f.PaperUnits='centimeters';
+papsize=[10 10];
+f.PaperSize=papsize;
+print(f,'rbne','-dpdf','-fillpage')
+
+
+
+i=find(consideredphia>=phia,1,'first');
+z=linspace(0,L/2,6000);
+rb_z=zeros(size(z));
+rbplusz=rb_z;
+
+minus=@(r) 1+qe*((phib-phia(i))*log(r)+phia(i)*log(b)-phib*log(a))/(log(b/a))/H0-(P0/r+qe*0.5*B0*(r-L/pi*(Rcurv-1)/(Rcurv+1)*besseli(1,2*pi*r/L)*cos(2*pi*z(1)/L)))^2/(2*me*H0);
+rb_z(1)=fzero(minus,rb_phi(i));
+rb_t=rb_z(1);
+z_t=z(1);
+plus=@(r) 1+qe*((phib-phia(i))*log(r)+phia(i)*log(b)-phib*log(a))/(log(b/a))/H0-(P0/r+qe*0.5*B0*(r-L/pi*(Rcurv-1)/(Rcurv+1)*besseli(1,2*pi*r/L)*cos(2*pi*z(1)/L)))^2/(2*me*H0);        
+rbplusz(1)=fzero(plus,rbplusphi(i));
+remainder(1)=plus(rbplusz(1));
+for j=2:length(z)
+minus=@(r) 1+qe*((phib-phia(i))*log(r)+phia(i)*log(b)-phib*log(a))/(log(b/a))/H0-(P0/r+qe*0.5*B0*(r-L/pi*(Rcurv-1)/(Rcurv+1)*besseli(1,2*pi*r/L)*cos(2*pi*z(j)/L)))^2/(2*me*H0);
+format long;
+try
+rb_z(j)=fzero(minus,rb_z(j-1));
+z_t=z(j);
+plus=@(r) 1+qe*((phib-phia(i))*log(r)+phia(i)*log(b)-phib*log(a))/(log(b/a))/H0-(P0/r+qe*0.5*B0*(r-L/pi*(Rcurv-1)/(Rcurv+1)*besseli(1,2*pi*r/L)*cos(2*pi*z_t/L)))^2/(2*me*H0);        
+rbplusz(j)=fzero(plus,rbplusz(j-1));
+remainder(j)=plus(rbplusz(j));
+catch
+end
+end
+figure()
+z=[-flip(z(2:end)) z];
+rb_z=[flip(rb_z(2:end)) rb_z];
+rbplusz=[flip(rbplusz(2:end)) rbplusz];
+plot(z(rb_z~=0),rb_z(rb_z~=0),'b')
+hold on
+plot(z(rb_z~=0),rbplusz(rb_z~=0),'r')
+ylabel('r_b [m]')
+ylim([0 0.16])
+xlim([-L/2 L/2])
+xlabel('z [m]')
+title(sprintf('\\phi_a=%5.2f kV',phia(i)/1e3))
+
+ind=rbplusz~=0 & rb_z~=0& ~isnan(rbplusz) & ~isnan(rb_z);
+ra=rb_z(ind);
+rb=rbplusz(ind);
+zvol=z(ind);
+ra=(ra(1:end-1)+ra(2:end))/2;
+rb=(rb(1:end-1)+rb(2:end))/2;
+VOL=2*pi*diff(zvol).*min(ra).*(rb-ra);
+
+nplasma=2116800
+Nbesl=ne*VOL;
+Nbe=sum(Nbesl)
+Nmacrosl=floor(Nbesl/Nbe*nplasma);
+Nmacro=sum(Nmacrosl)
+remain=nplasma-Nmacro
+Nmacrosl(ceil(length(Nmacrosl)/2-remain/2):floor(length(Nmacrosl)/2+remain/2))=Nmacrosl(ceil(length(Nmacrosl)/2-remain/2):floor(length(Nmacrosl)/2+remain/2))+1;
+Nmacrosl(floor(length(Nmacrosl)/2))=Nmacrosl(floor(length(Nmacrosl)/2))+nplasma-sum(Nmacrosl);
+Nmacro=sum(Nmacrosl)
+remain=nplasma-Nmacro
+
+
+msim=me*Nbe/nplasma
+qsim=-qe*Nbe/nplasma
+
+datas.ra=ra;
+datas.rb=rb;
+datas.z=zvol;
+datas.npartsslice=Nmacrosl;
+datas.m=me;
+datas.weight=Nbe/nplasma;
+datas.q=-qe;
+datas.H0=H0;
+datas.P0=P0;
+datas.temperature=10000;
+datas.velocitytype=2;
+datas.radialtype=1;
\ No newline at end of file
diff --git a/matlab/timescales.m b/matlab/timescales.m
new file mode 100644
index 0000000..d64fe6f
--- /dev/null
+++ b/matlab/timescales.m
@@ -0,0 +1,59 @@
+Pn=1e-8;%mbar
+kb=1.38064852e-23;
+T=300;
+estimneutraldensity=Pn*100/(kb*T);
+nb=estimneutraldensity;
+
+qe=1.60217662E-19;
+me=9.109383E-31;
+eps_0=8.85418781762e-12;
+vlight=299792458;
+
+
+Te=1; %eV
+ve=sqrt(Te*qe/me); %m/s
+gamma=1/(1-ve^2/vlight^2);
+ne=5*logspace(13,17,3000);
+B0=0.21;
+
+sigion=sigmabeb(15.58,54.91,2,1,Te);
+sigion=sigmabeb(41.72,71.13,2,1,Te)+sigion;
+sigion=sigmabeb(21,63.18,2,1,Te)+sigion;
+sigion=sigmabeb(17.07,44.30,4,1,Te)+sigion;
+
+Coulomblog=log(sqrt(eps_0*Te/qe*ne)/qe^2*2*pi*eps_0*me*ve^2);
+
+tauion=1./(nb*sigion*ve);
+tauloss=tauion*log(ne);
+taucycl=2*pi*me*gamma/qe/B0;
+taupe=2*pi*sqrt(eps_0*me*gamma/qe^2./ne);
+tauthermal=1./(ve*ne*qe^4.*Coulomblog./(gamma^2*me^2*ve^4*2*pi*eps_0^2));
+
+figure
+loglog(ne,tauion*ones(size(ne)),'displayname','\tau_{ion}')
+hold on
+loglog(ne,tauloss,'displayname','\tau_{accum}')
+loglog(ne,tauthermal,'displayname','\tau_{thermal}')
+loglog(ne,taucycl*ones(size(ne)),'displayname','\tau_{ce}')
+loglog(ne,taupe,'displayname','\tau_{pe}')
+legend('location','southeast')
+title(sprintf('E_{in}=%.2f eV, n_b=%3.2e [m^{-3}]',Te,nb))
+xlabel('n_e [m^{-3}]')
+ylabel('\tau [s]')
+
+% Sigma BEB see (https://physics.nist.gov/PhysRefData/Ionization/intro.html)
+% B binding energy 
+% U average kinetic energy
+% N electron occupation number
+% Q dipole constant
+% T incident energy
+function sig=sigmabeb(B,U,N,Q,T)
+t=T/B; %incident energy
+u=U/B; % Average kinetic energy
+% B:
+a0=0.52918e-10;
+R=13.6057;
+S=4*pi*a0^2*N*(R/B)^2;
+n=1;
+sig=S/(t+(u+1)/n)*(Q*log(t)*0.5*(1-t^-2)+(2-Q)*(1-t^-1-log(t)/(t+1)));
+end