% Programul calculeaza raportul puterilor cuplate si lungimea de cuplaj
% perfect in cazul unui cuplor optic integrat domeniul 1480 - 1620 nm 

close all
clear all

lamda_m=1480;                 %lungimea de unda minima
                              
lamda_mm=1620;                %lungimea de unda maxima
                            
% Cāte fisiere doriti sa prelucrati? 
nr_set=input('Cate fisiere doriti sa procesati?');

u=0;
while (u<nr_set)

%%%%%deschidere fisier de date
   u=u+1;
   [nume,cale]=uigetfile('d*','Select data / Selectie date');
   eval(['load ' cale nume]);

%%%%%calculul lungimii de cuplaj din numele fisierului
   if (u>1)
      clear caracter
   end
   j=0;
   for i=1:length(nume)
      if(isletter(nume(i))==0)
         j=j+1;
         caracter(j)=nume(i);
      end
   
      if((isletter(nume(i))~=0) & (j>=1))
         break; 
      end
   end
   eval(['l1(' num2str(u) ')=' caracter ';']);

%%%%%%prelucrare date din fisierul cu datele pentru I1
   prel_i1;

%%%%%%generare nume pentru fisierul de date pentru I2
   k=0;
   for i=1:length(nume)
      if ((nume(i)=='M') | (nume(i)=='m'))
         nume(i)='E';
         k=1;
      end
   
      if ((nume(i)=='E') | (nume(i)=='e') & (k==0))
         nume(i)='M';
      end
   end
   eval(['load ' cale nume]);

%%%%%%prelucrare date din fisierul cu datele pentru I2
   prel_i2;
   if (u>1)
      clear et1;
   end
   et1=i2 ./(i1+i2);
   eval(['eta(' int2str(u) ',:)=et1;']);
end

%%%%%%calculul vectorilor delta_l, l_mare prin metoda celor mai mici patrate
l=l1';
sum_l=sum(l);
sum_l2=sum(l .^2);

%sum_asin=sum(pi-asin(sqrt(eta)));

sum_asin=sum(asin(sqrt(eta)));
sum_asin_l=l1*(asin(sqrt(eta)));

delta_l_numa=(1/nr_set)*(2/pi)*sum_l*sum_asin-(2/pi)*sum_asin_l;
delta_l_numi=(1/nr_set)*sum_l^2-sum_l2;
delta_l=delta_l_numa/delta_l_numi;

l_mare=(sum_l-((2/pi)*delta_l .*sum_asin))/nr_set;

%%%%%%afisarea variatiei vectorilor eta, delta_l, l_mare
xx=1:length(l_mare);

lungime_vector_l=length(l_mare);
translatie_l=(round(mouse_x_g(2)-mouse_x_g(1)))/lungime_vector_l;

h_dl=figure; h_lm=figure; h_eta=figure;
figure(h_dl);
plot(xx(1:lungime_vector_l)*translatie_l+mouse_x_l,delta_l(1:lungime_vector_l));
xlabel('Lungimea de unda [nm]')
ylabel('|Cresterea lungimii de interactie efectiva (m)|')
grid
%title(['Delta l ' ' ' num2str(mouse_x_g(1)) '-' num2str(mouse_x_g(2))]);
title(['Cresterea lungimii de interactie efectiva' ' ' num2str(mouse_x_g(1)) 'si' num2str(mouse_x_g(2))]);

figure(h_lm);
plot(xx(1:lungime_vector_l)*translatie_l+mouse_x_l,l_mare);
xlabel('Lungimea de unda (nm)')
ylabel('Lungimea de cuplaj perfect (microni)')
grid
%title(['Variatia L ' ' ' num2str(mouse_x_g(1)) '-' num2str(mouse_x_g(2))]);
title(['Lungimea de cuplaj perfect ' ' ' num2str(mouse_x_g(1)) 'si' num2str(mouse_x_g(2))]);

figure(h_eta);
plot(xx(1:lungime_vector_l)*translatie_l+mouse_x_l,eta);
xlabel('Lungimea de unda [nm]')
ylabel('Eta')
%title(['Variatia eta ' ' ' num2str(mouse_x_g(1)) '-' num2str(mouse_x_g(2))]);
grid
title(['Raportul puterilor cuplate ' ' ' num2str(mouse_x_g(1)) 'si' num2str(mouse_x_g(2))]);

%%%%%%afisarea exacta a valorilor vectorilor eta, delta_l, l_mare intr-un anumit punct specificat
%%%%%%the precise display of the eta, delta_l, l_mare vectors value in a specific point

% Introduceti frecventa ? [y/n]
caracter=input('Introduceti lungimea de unda? [da/nu]','s');
if strcmp(caracter,'da')
   a=input('capat1=');
   b=input('capat2=');
   c=input('pas=');
   frecv=a:c:b
   frecv=round((frecv-mouse_x_l)/translatie_l);

   L=l_mare(frecv)
   dl=delta_l(frecv)
   et=eta(:,frecv)
   
else
   [mouse_x_out,mouse_y_out]=ginput(1);
   mouse_x_out=round((mouse_x_out-mouse_x_l)/translatie_l)

   L=l_mare(mouse_x_out)
   delta_l=delta_l(mouse_x_out)
   eta=eta(:,mouse_x_out)   
end
