// z ladunek
function [qrr,dirdt,difdt,tf,ts,urrm,irrm,ifwd,ur]=analiza_wylaczanie(dane,numer_przebiegu_i,numer_przebiegu_u)
  //global katalog
  //[nagl,dane]=wczytaj_ws(nazwa_pliku)
  //dane=wczytaj_oc(nazwa_pliku+".csv")
  //dane=wczytaj_dpo(katalog+'\'+"tek"+nazwa_pliku+"ALL.csv")
  //dane=wczytaj_dpo(nazwa_pliku);
  mnoznik_i=1;
  wykres=1;
  
  kol_t=(numer_przebiegu_i-1)*2+1
  kol_i=(numer_przebiegu_i-1)*2+2
  kol_u=(numer_przebiegu_u-1)*2+2
  
  t=dane(:,kol_t);
  t=t-t(1);
  inf=dane(:,kol_i)*mnoznik_i;
  unf=dane(:,kol_u);
  nmax=size(dane,"r")
  
  i=filtruj(inf,5,1);
  u=filtruj(unf,5,1);
  
  // przesunięcie zera prądu
  i_end=i(nmax)
  i_span=max(i)-min(i)
  i_zero=i_end
  n=nmax
  while abs(i(n)-i_end)<=abs(i_span*0.1) do
    if abs(i(n)-i_end)<=abs(i_span*0.01) then
      i_zero(length(i_zero)+1)=i(n);
    end
    n=n-1
  end
  izero=mean(i_zero)
  i=i-izero;
    
  // prądy  
  ipk=max(i)
  ival=min(i)
  irrm=ival
  i_fwd=ipk
  // przewodzenia i przejście przez zero
  n=1
  while i(n)>0 do
  //if i(n)>=0.975*ipk then
  if i(n)>=0.95*ipk then
      i_fwd(length(i_fwd)+1)=i(n)
    end
    n=n+1
  end
  ifwd=mean(i_fwd)
  n_0=n
  t_0=t(n)
  // szczytowy wsteczny
  while i(n)>ival do
    n=n+1
  end
  n_val=n
  ts=t(n)-t_0
  // 0.25 szczytu
  while i(n)<ival*0.25 do
  //while i(n)<ival*0.1 do
    n=n+1
  end
  n_rr025=n
  
  // napięcie wsteczne szczytowe i ustalone
  u_end=u(nmax)
  n=nmax-1
  u_r=u_end
  uval=min(u)
  urrm=uval
  while u(n)<0 do
    if abs(u(n)-u_end)<=abs(u_end*0.05) then
      u_r(length(u_r)+1)=u(n)
    end
    if u(n)==uval then
      n_uval=n
    end
    n=n-1
  end
  ur=mean(u_r)
  
  // czas wyłączania  
  di=i(n_rr025)-i(n_val)
  dt=t(n_rr025)-t(n_val)
  dirrdt=di/dt
  tsup=t(n_val)+(-i(n_val))/dirrdt
  trr=tsup-t_0
  tf=trr-ts
  
  // ładunek
  qrr=0
  n_inf=n_0
  n=n_inf
  while t(n)<tsup do
    n=n+1
  end
  n_sup=n
  for n=n_inf:n_sup
    i_av=(i(n)+i(n+1))/2 //-poziom_zera
    dt=t(n+1)-t(n)
    qrr=qrr+i_av*dt
  end
  qrr=-qrr
  
  ti_calka=[t(n_inf:n_sup),i(n_inf:n_sup)]
  ti_last=size(ti_calka,'r')
  ti_calka(ti_last+1,:)=[tsup,0]
  ti_calka(ti_last+2,:)=[ti_calka(1,1),0]
  ti_calka(ti_last+3,:)=ti_calka(1,:)
  
  // stromość opadania prądu przewodzenia
  ipp=min(ipk,abs(ival))*2
  di=ipp/8
  n=1
  while i(n)>di do
    n=n+1
  end
  n_dif1=n
  while i(n)>-di do
    n=n+1
  end
  n_dif2=n
  dt=t(n_dif2)-t(n_dif1)
  difdt=-2*di/dt
  
  // stromość zaniku prądu wstecznego
  ipp=abs(ival)
  di=ipp/8
  n=n_val
  while i(n)<0.5*ival-di do
    n=n+1
  end
  n_dir1=n
  while i(n)<0.5*ival+di do
    n=n+1
  end
  n_dir2=n
  dt=t(n_dir2)-t(n_dir1)
  dirdt=2*di/dt
  
  if wykres==1 then
    
    clf()
    
    // pole całki
    xfpoly(ti_calka(:,1)/1e-6,ti_calka(:,2))
    pole=gce()
    pole.line_mode="off"
    pole.background=12
    
    // przebieg napięcia / 100V
    plot(t/1e-6,u/100)
    przebieg=gce()
    przebieg.children(1).foreground=13
    
    // linia ur
    plot([t(1),t(nmax)]/1e-6,[ur,ur]/100)
    linia=gce()
    linia.children(1).foreground=2
    linia.children(1).thickness=1
    linia.children(1).line_style=3
    
    // przebieg prądu
    plot(t/1e-6,i)
    przebieg=gce()
    przebieg.children(1).foreground=5
    
    // linia dif/dt
    plot([t(n_dif1),t(n_dif2)]/1e-6,[i(n_dif1),i(n_dif2)])
    linia=gce()
    linia.children(1).foreground=2
    linia.children(1).thickness=2
    
    // linia dir/dt
    plot([t(n_dir1),t(n_dir2)]/1e-6,[i(n_dir1),i(n_dir2)])
    linia=gce()
    linia.children(1).foreground=2
    linia.children(1).thickness=2
    
    // linia trr
    plot([t(n_val),t(n_rr025),t(n_sup)]/1e-6,[i(n_val),i(n_rr025),0])
    linia=gce()
    linia.children(1).foreground=2
    linia.children(1).thickness=1
    linia.children(1).line_style=2
    
    // linia ifwd
    plot([t(1),t(nmax)]/1e-6,[ifwd,ifwd])
    linia=gce()
    linia.children(1).foreground=2
    linia.children(1).thickness=1
    linia.children(1).line_style=3
    
    // linia irrm
    plot([t(1),t(n_val)]/1e-6,[irrm,irrm])
    linia=gce()
    linia.children(1).foreground=2
    linia.children(1).thickness=1
    linia.children(1).line_style=3
    
    // linia tstf
    plot([t(n_val),t(n_val)]/1e-6,[0,irrm])
    linia=gce()
    linia.children(1).foreground=2
    linia.children(1).thickness=1
    linia.children(1).line_style=3
    
    // linia urrm
    plot([t(1),t(n_uval)]/1e-6,[urrm,urrm]/100)
    linia=gce()
    linia.children(1).foreground=2
    linia.children(1).thickness=1
    linia.children(1).line_style=3
    
    xtitle('','t/us','i/A, u/100V')
    wykr=gca()
    wykr.box="on"
    wykr.grid=[0,0,-1]
    
  end
    
endfunction


function [ti01,difdt,tfr,ufrpk,ufwd,ifwd]=analiza_zalaczanie(dane,numer_przebiegu_i,numer_przebiegu_u)
  //global katalog
  //[nagl,dane]=wczytaj_ws(nazwa_pliku)
  //dane=wczytaj_oc(nazwa_pliku+".csv")
  //dane=wczytaj_dpo(katalog+'\'+"tek"+nazwa_pliku+"ALL.csv")
  //dane=wczytaj_dpo(nazwa_pliku);
  mnoznik_i=1;
  wykres=1;
  
  kol_t=(numer_przebiegu_i-1)*2+1
  kol_i=(numer_przebiegu_i-1)*2+2
  kol_u=(numer_przebiegu_u-1)*2+2
  
  t=dane(:,kol_t);
  tpocz=t(1);
  t=t-t(1);
  inf=dane(:,kol_i)*mnoznik_i;
  unf=dane(:,kol_u);
  nmax=size(dane,"r")
  
  i=filtruj(inf,5,1);
  u=filtruj(unf,5,1);
  
  // przesunięcie zera prądu
  i_beg=i(1)
  i_span=max(i)-min(i)
  i_zero=i_beg
  n=1
  while abs(i(n)-i_beg)<=abs(i_span*0.1) do
    if abs(i(n)-i_beg)<=abs(i_span*0.01) then
      i_zero(length(i_zero)+1)=i(n);
    end
    n=n+1
  end
  izero=mean(i_zero)
  i=i-izero;
    
  // prądy  
  ipk=max(i)
  i_fwd0=i(nmax)
  i_fwd=i_fwd0
  // przewodzenia
  n=nmax
  while i(n)>0.5*i_fwd0 do
    if abs(i(n)-i_fwd0)<=0.05*i_fwd0 then
      i_fwd(length(i_fwd)+1)=i(n)
    end
    n=n-1
  end
  ifwd=mean(i_fwd)
  // 0.1 i 0.9 ifwd
  n=1
  while i(n)<0.1*ifwd do
    n=n+1
  end
  n_i01=n
  t_i01=t(n)
  while i(n)<0.9*ifwd do
    n=n+1
  end
  n_i09=n
  t_i09=t(n)
  
  // napięcia
  upk=max(u)
  u_fwd0=u(nmax)
  u_fwd=u_fwd0
  // przewodzenia
  n=nmax
  while u(n)>0.5*u_fwd0 do
    if abs(u(n)-u_fwd0)<=0.1*u_fwd0 then
      u_fwd(length(u_fwd)+1)=u(n)
    end
    n=n-1
  end
  ufwd=mean(u_fwd)
  // zero
  n=1
  while u(n)<0 do
    n=n+1
  end
  n_u0=n
  // szczytowe
  while u(n)<upk do
    n=n+1
  end
  ufrpk=upk
  n_ufrpk=n
  t_ufrpk=t(n)
  if ufrpk/ufwd < 10 then
    // 1.1 ufwd
    while u(n)>1.1*ufwd do
      n=n+1
    end
  else
    // 0.1 (ufrpk-ufwd)
    warning("Alternatywna definicja Ufr(pk)")
    while u(n)>ufwd+0.1*(ufrpk-ufwd) do
      n=n+1
    end
  end
  n_u11=n
  t_u11=t(n)
  
  // czas załączania  
  tfr=t_u11-t_i01
  
  // średnia stromość narastania prądu przewodzenia
  di=0.8*ifwd
  dt=t_i09-t_i01
  difdt=di/dt
  
  // chwila początkowa tfr
  ti01=t_i01+tpocz

  
  if wykres==1 then
    
    clf()
    
    // przebieg napięcia
    plot(t(n_u0:nmax)/1e-6,u(n_u0:nmax))
    przebieg=gce()
    przebieg.children(1).foreground=13
    
    // linia ufwd
    plot([t(1),t(nmax)]/1e-6,[ufwd,ufwd])
    linia=gce()
    linia.children(1).foreground=2
    linia.children(1).thickness=1
    linia.children(1).line_style=3
    
    // linia 1.1 ufwd lub 0.1 (ufrpk-ufwd)
    if ufrpk/ufwd<10 then
      plot([t(1),t(nmax)]/1e-6,[1.1*ufwd,1.1*ufwd])
    else
      plot([t(1),t(nmax)]/1e-6,[ufwd+0.1*(ufrpk-ufwd),ufwd+0.1*(ufrpk-ufwd)])
    end
    linia=gce()
    linia.children(1).foreground=2
    linia.children(1).thickness=1
    linia.children(1).line_style=3

    // przebieg prądu
    plot(t/1e-6,i)
    przebieg=gce()
    przebieg.children(1).foreground=5
    
    // linia 0.1 ifwd
    plot([t(1),t(nmax)]/1e-6,[0.1*ifwd,0.1*ifwd])
    linia=gce()
    linia.children(1).foreground=2
    linia.children(1).thickness=1
    linia.children(1).line_style=3

    // linia dif/dt
    plot([t_i01,t_i09]/1e-6,[0.1*ifwd,0.9*ifwd])
    linia=gce()
    linia.children(1).foreground=2
    linia.children(1).thickness=2
    
    // linie t
    plot([t_i01,t_i01]/1e-6,[0,ifwd])
    linia=gce()
    linia.children(1).foreground=2
    linia.children(1).thickness=1
    linia.children(1).line_style=3
    plot([t_u11,t_u11]/1e-6,[0,ufrpk])
    linia=gce()
    linia.children(1).foreground=2
    linia.children(1).thickness=1
    linia.children(1).line_style=3
    
    // linia ifwd
    plot([t(1),t(nmax)]/1e-6,[ifwd,ifwd])
    linia=gce()
    linia.children(1).foreground=2
    linia.children(1).thickness=1
    linia.children(1).line_style=3
    
    // linia ufrpk
    plot([t(1),t(nmax)]/1e-6,[ufrpk,ufrpk])
    linia=gce()
    linia.children(1).foreground=2
    linia.children(1).thickness=1
    linia.children(1).line_style=3
    
    xtitle('','t/us','i/A, u/V')
    wykr=gca()
    wykr.box="on"
    wykr.grid=[0,0,-1]
    
  end
    
endfunction


function yf=filtruj(y,di,np)
  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

// dodaj_moc w openchoice_calka

// z uep_a13
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

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
//
