% Copyright David Rowe 2009
% This program is distributed under the terms of the GNU General Public License 
% Version 2
%
% Plot NLP states from dump files.

function plnlp(samname, f)
  
  sn_name = strcat(samname,"_sn.txt");
  Sn = load(sn_name);

  sw_name = strcat(samname,"_sw.txt");
  Sw = load(sw_name);

  fw_name = strcat(samname,"_fw.txt");
  if (file_in_path(".",fw_name))
    fw = load(fw_name);
  endif

  e_name = strcat(samname,"_e.txt");
  if (file_in_path(".",e_name))
    e = load(e_name);
  endif

  p_name = strcat(samname,".p");
  if (file_in_path(".",p_name))
    p = load(p_name);
  endif

  sq_name = strcat(samname,"_sq.txt");
  if (file_in_path(".",sq_name))
    sq = load(sq_name);
  endif

  dec_name = strcat(samname,"_dec.txt");
  if (file_in_path(".",dec_name))
    dec = load(dec_name);
  endif

  do 
    figure(1);
    clf;
    s = [ Sn(2*f-1,:) Sn(2*f,:) ];
    plot(s, ";Sn;");
    grid
    axis([1 length(s) -20000 20000]);

    figure(2);
    plot((0:255)*4000/256, Sw(f,:),";Sw;");
    grid
    axis([1 4000 -10 80]);
    hold on;

    f0 = 8000/p(f);
    Wo = 2*pi/p(f);
    L = floor(pi/Wo);
    f0_label = sprintf("b;P=%3.1f F0=%3.0f;",p(f),f0);
    for m=1:L-1
      plot([ m*Wo*4000/pi m*Wo*4000/pi], [10 60], 'b');
    endfor
    plot([ L*Wo*4000/pi L*Wo*4000/pi], [10 60], f0_label);

    hold off;

    if (file_in_path(".",fw_name))
      figure(3);
      if (file_in_path(".",e_name))
         subplot(211);
      endif
      plot((0:255)*800/256, fw(f,:)/max(fw(f,:)), ";Fw;");
      axis([1 400 0 1]);
      if (file_in_path(".",e_name))
        subplot(212);
        e_concat = [ e(2*f-1,:) e(2*f,:) ];
        plot(e_concat(1:400)/max(e_concat(1:400)), "+;MBE E(f);");
        axis([1 400 0 1]);
      endif
    endif

    if (file_in_path(".",sq_name))
      figure(4);
      sq_concat = [ sq(2*f-1,:) sq(2*f,:) ];
      axis
      plot(sq_concat, ";sq;");
    endif

    if (file_in_path(".",dec_name))
      figure(5);
      plot(dec(f,:), ";dec;");
    endif
    
    figure(2);

    % interactive menu

    printf("\rframe: %d  menu: n-next  b-back  p-png  q-quit ", f);
    fflush(stdout);
    k = kbhit();
    if (k == 'n')
      f = f + 1;
    endif
    if (k == 'b')
      f = f - 1;
    endif

    % optional print to PNG

    if (k == 'p')
    
      pngname = sprintf("%s_%d",samname,f);

      % small image

      __gnuplot_set__ terminal png size 420,300
      ss = sprintf("__gnuplot_set__ output \"%s.png\"", pngname);
      eval(ss)
      replot;

      % larger image

      __gnuplot_set__ terminal png size 800,600
      ss = sprintf("__gnuplot_set__ output \"%s_large.png\"", pngname);
      eval(ss)
      replot;

      % for some reason I need this to stop large plot getting wiped
      __gnuplot_set__ output "/dev/null"

    endif

  until (k == 'q')
  printf("\n");

endfunction