function wykresl_dane(naglowki,dane,nr_przebiegow)
// z openchoice_calka
  lb_przebiegow=length(nr_przebiegow)
  for i=1:lb_przebiegow do
    danew(:,(i-1)*2+1)=dane(:,(nr_przebiegow(i)-1)*2+1)
    danew(:,(i-1)*2+2)=dane(:,(nr_przebiegow(i)-1)*2+2)
    naglw((i-1)*2+1)=naglowki((nr_przebiegow(i)-1)*2+1)
    naglw((i-1)*2+2)=naglowki((nr_przebiegow(i)-1)*2+2)
  end
  legenda_x=naglw(1)
  for i=1:lb_przebiegow do
    zakres(i)=round(log10(max(abs(danew(:,(i-1)*2+2)))))
    nagl=naglw((i-1)*2+2)
    if i==1 then
      legenda_y="Y1"
    else
      legenda_y=legenda_y+"; Y"+sprintf("%d",i)
      if zakres(i)~=zakres(1) then
        skala=zakres(1)-zakres(i)
        danew(:,(i-1)*2+2)=danew(:,(i-1)*2+2)*10^skala
        if abs(skala)<=4 then
          if skala>0 then
            legenda_y=legenda_y+"*"+sprintf("%d",10^skala)
          else
            legenda_y=legenda_y+"*"+sprintf("%."+sprintf("%d",abs(skala))+"f",10^skala)
          end
        else
          legenda_y=legenda_y+"*"+"10^"+sprintf("%d",skala)
        end
      end
    end
    legenda(i)=naglw((i-1)*2+2)
  end
  clf()
  for i=1:lb_przebiegow do
    plot(danew(:,(i-1)*2+1),danew(:,(i-1)*2+2))
    przebieg=gce()
    przebieg.children(1).foreground=i+1
  end
  xtitle("",legenda_x,legenda_y)
  legend(legenda)
  wykr=gca()
  wykr.box="on"
  wykr.grid=[0,0,-1]
endfunction

function wykresl_dane_xy(naglowki,dane,nr_przebiegu_x,nr_przebiegu_y)
  danew(:,1)=dane(:,(nr_przebiegu_x-1)*2+2);
  danew(:,2)=dane(:,(nr_przebiegu_y-1)*2+2);
  naglw(1)=naglowki((nr_przebiegu_x-1)*2+2)
  naglw(2)=naglowki((nr_przebiegu_y-1)*2+2)
  clf()
  plot(danew(:,1),danew(:,2))
  przebieg=gce()
  przebieg.children(1).foreground=2
  xtitle("",naglw(1),naglw(2))
  wykr=gca()
  wykr.box="on"
  wykr.grid=[0,0,-1]
endfunction

function [naglowki2,dane2]=koryguj_prad(naglowki,dane,nr_przebiegu_i,ki,delayi)
  kol_i=(nr_przebiegu_i-1)*2+2;
  i0=poziom_zera(dane(:,kol_i));
  dane2=przesun_skaluj_y(dane,nr_przebiegu_i,-i0,ki);
  dane2=przesun_t(dane2,nr_przebiegu_i,-delayi);
  naglowki2=naglowki;
  naglowki2(kol_i-1)="t [s]";
  naglowki2(kol_i)="id [A]";
endfunction

function dane2=przesun_skaluj_y(dane,nr_przebiegu,dy,k)
  kol=(nr_przebiegu-1)*2+2;
  dane2=dane;
  dane2(:,kol)=(dane2(:,kol)+dy)*k;
endfunction

function dane2=przesun_t(dane,nr_przebiegu,dt)
  kol_t=(nr_przebiegu-1)*2+1;
  kol_y=(nr_przebiegu-1)*2+2;
  deltat=dane(2,kol_t)-dane(1,kol_t);
  dw=round(dt/deltat);
  nw=size(dane,'r');
  if (dw>0)
    dane2=dane((1+dw):nw,:);
    dane2(:,kol_y)=dane(1:(nw-dw),kol_y);
  elseif (dw<0)
    dane2=dane(1:(nw-abs(dw)),:);
    dane2(:,kol_y)=dane((1+abs(dw)):nw,kol_y);
  else //dw==0
    dane2=dane;
  end
endfunction

function dane2=przelicz_moc(dane,nr_przebiegu_i,nr_przebiegu_u,nr_przebiegu_p)
// teraz nie używane
  kol_u=(nr_przebiegu_u-1)*2+2;
  kol_i=(nr_przebiegu_i-1)*2+2;
  kol_p=(nr_przebiegu_p-1)*2+2;
  dane2=dane;
  dane2(:,kol_p)=dane2(:,kol_u).*dane2(:,kol_i);
endfunction

// dodane
function dane2=intpol_u_zal(dane,nr_przeb_u)
  u=dane(:,(nr_przeb_u-1)*2+2);
  // minimum
  umin=min(u)
  k=1;
  while u(k)>umin
    k=k+1;
  end
  kmin=k
  // lewy koniec zapadu
  uprev=umin;
  k=kmin-1;
  while u(k)>=uprev | u(k-1)>=uprev | u(k-2)>=uprev | u(k-5)>=uprev | u(k-10)>=uprev
    uprev=u(k);
    k=k-1;
  end
  while u(k+1)==u(k)
    k=k+1
  end
  kleft=k
  uleft=u(k)
  // prawy koniec
  k=kmin;
  uprev=umin;
  while u(k+1)==uprev
    k=k+1;
  end
  k=k+1
  while u(k)>=uprev | u(k+1)>=uprev | u(k+2)>=uprev | u(k+5)>=uprev | u(k+10)>=uprev
    uprev=u(k);
    k=k+1;
  end
  while u(k-1)==u(k)
    k=k-1
  end
  kright=k
  uright=u(k)
  // interpolacja prostą
  dudk=(uright-uleft)/(kright-kleft);
  for k=[kleft:kright]
      u(k)=uleft+dudk*(k-kleft);
  end
  dane2=dane
  dane2(:,(nr_przeb_u-1)*2+2)=u
endfunction

// zmodyfikowane
function [naglowki2,dane2]=dodaj_moc(naglowki,dane,nr_przeb_i,nr_przeb_u)
// z openchoice_calka zmodyfikowane
  //maxcol=size(dane,"c")
  t=dane(:,(nr_przeb_i-1)*2+1)
  i=dane(:,(nr_przeb_i-1)*2+2)
  ith=0.05*max(i)
  for k=[1:size(i,'r')]
      if i(k)<ith then // poniżej progu przyjmij 0
          i(k)=0
      end
  end
  u=dane(:,(nr_przeb_u-1)*2+2)
  //u=max(u,0) // obetnij poniżej zera
  dane2=[dane,t,filtruj(i.*u,3,1)]
  naglowki2=[naglowki,"t [s]","pd [W]"];
  naglowki2((nr_przeb_u-1)*2+1)="t [s]";
  naglowki2((nr_przeb_u-1)*2+2)="uds [V]";
  naglowki2((nr_przeb_i-1)*2+1)="t [s]";
  naglowki2((nr_przeb_i-1)*2+2)="id [A]";
endfunction

function y0=poziom_zera(y)
  N=length(y);
  [ymin,imin]=min(y);
  ypp=max(y)-ymin;
  ysup=ymin+0.05*ypp;
  ysup2=ymin+0.2*ypp;
  ywyb=ymin;
  if imin<N/2 then
    i=1;
  else
    i=N;
  end
  while i>=1 & i<=N & y(i)<ysup2 then
    if y(i)<ysup then
      ywyb=[ywyb y(i)];
    end
    if imin<N/2 then
      i=i+1;
    else
      i=i-1;
    end
  end
  y0=mean(ywyb);
endfunction

function yf=filtruj(y,di,np)
// z uep_b5
  N=length(y)
  yf=zeros(N)
  for p=1:np do
    for i=1:N do
      im=i-di
      ip=i+di
      if im<1 then
        im=1
      end
      if ip>N then
        ip=N
      end
      yf(i)=mean(y(im:ip))
    end
    y=yf
  end
endfunction

function wsw=energia_przelaczanie(dane,nr_przebiegu_p,prog)
  [tinf,tsup]=granice_przelaczania(dane,nr_przebiegu_p,prog);
  wsw=calka_infsup(dane,nr_przebiegu_p,tinf,tsup,0,1);
endfunction
// zalecany prog 0.05

function [tinf,tsup]=granice_przelaczania(dane,nr_przebiegu_p,prog)
  y=dane(:,(nr_przebiegu_p-1)*2+2);
  t=dane(:,(nr_przebiegu_p-1)*2+1);
  
  yf=filtruj(y,8,8);
  N=length(yf);
  yp=max(yf);
  
  y0=yf(1);
  ywyb=y0;
  i=2;
  while yf(i)-y0<0.25*(yp-y0) do
    if abs(yf(i)-y0)<0.05*(yp-y0)
      ywyb=[ywyb yf(i)];
    end
    i=i+1
  end
  y0=mean(ywyb);
  while yf(i)>y0+prog*(yp-y0) do
    i=i-1;
  end
  iinf=i;
  
  y0=yf(N);
  ywyb=y0;
  i=N-1;
  while yf(i)-y0<0.25*(yp-y0) do
    if abs(yf(i)-y0)<0.05*(yp-y0)
      ywyb=[ywyb yf(i)];
    end
    i=i-1
  end
  y0=mean(ywyb);
  while yf(i)>y0+prog*(yp-y0) do
    i=i+1;
  end
  isup=i;
  
  tinf=t(iinf);
  tsup=t(isup);  
endfunction
