% APRENDIZAJE AUTOMÁTICO (G. Pajares y J. M. de la Cruz, Eds.)
% Editorial: RA-MA
% Capítulo 5: Máquinas de Vectores Soporte
% Autores: Jesús Antonio Vega Sánchez y Sebastián Dormido Canto

function genera

tpm=0;
tw=[];
nuevawavelet=get(findobj('Tag','StaticTextW'),'UserData');

hold=get(findobj('tag','CheckBoxHold'),'Value');

if hold ==0
   set(findobj('tag','CheckBoxHold'),'Enable','on');
   %Guarda Estado
	estado=rand('state');
	set(findobj('tag','CheckBoxHold'),'UserData',estado);
else
   estado=get(findobj('tag','CheckBoxHold'),'UserData');
   rand('state',estado);  
end;

if isempty(strmatch('F',nuevawavelet))
	%-----------OBTIENE WAVELET------------
	%Generar Wavelets de Señales
	%wave senal
	wavesenal=[];
   
   tw='T.W. + ';
   %Inicializa Tiempo de Proceso
   tpt=[];

   %Obtiene lista de imagenes
	lista=get(findobj('Tag','ListBoxDatos'),'userdata');

	%Calcula Wavelet de Todas las Señales
	for  indice=1:size(lista,1)
  		imagen=lista(indice,:);
   	imagen=reshape(imagen,576,385);
   	[w2,tp]=wav2(imagen);
      wavesenal=[wavesenal;w2(:)'];
      tpt=[tpt;tp];
	end;          

	%Guarda Wavelets
   set(findobj('Tag','Fig1'),'UserData',wavesenal);
   
   %Calcula Tiempo de Proceso 
   tpm=sum(tpt);%mean(tpt);
end;

%---------------PARTICIONA EN ENTRENAMIENTO Y TEST--------
%Particionar Señales en Entrenamiento y Test

%Obtiene tiempo actual
tiempo=cputime;

totalE=[];
totalT=[];
lista=get(findobj('Tag','ListBoxDatos'),'String');

bkg=strmatch('TSBKG',lista);
cof=strmatch('TSCOF',lista);
ech=strmatch('TSECH',lista);
nbi=strmatch('TSNBI',lista);
str=strmatch('TSSTR',lista);

len=[length(bkg),length(cof),length(ech),length(nbi),length(str)];
%Guarda Longitudes
set(findobj('Tag','PushButtonGenera'),'UserData',len);

aleatorio=randperm(len(1));
entrena=aleatorio(1:ceil(0.6*len(1)));
test=aleatorio(ceil(0.6*len(1))+1:end);
entrena=bkg(entrena);
test=bkg(test);
totalE=[totalE;lista(entrena,:)];
totalT=[totalT;lista(test,:)];

aleatorio=randperm(len(2));
entrena=aleatorio(1:ceil(0.6*len(2)));
test=aleatorio(ceil(0.6*len(2))+1:end);
entrena=cof(entrena);
test=cof(test);
totalE=[totalE;lista(entrena,:)];
totalT=[totalT;lista(test,:)];

aleatorio=randperm(len(3));
entrena=aleatorio(1:ceil(0.6*len(3)));
test=aleatorio(ceil(0.6*len(3))+1:end);
entrena=ech(entrena);
test=ech(test);
totalE=[totalE;lista(entrena,:)];
totalT=[totalT;lista(test,:)];

aleatorio=randperm(len(4));
entrena=aleatorio(1:ceil(0.6*len(4)));
test=aleatorio(ceil(0.6*len(4))+1:end);
entrena=nbi(entrena);
test=nbi(test);
totalE=[totalE;lista(entrena,:)];
totalT=[totalT;lista(test,:)];

aleatorio=randperm(len(5));
entrena=aleatorio(1:ceil(0.6*len(5)));
test=aleatorio(ceil(0.6*len(5))+1:end);
entrena=str(entrena);
test=str(test);
totalE=[totalE;lista(entrena,:)];
totalT=[totalT;lista(test,:)];

%Obtiene tiempo de Particion
tgenera=(cputime-tiempo);

%Guarda STRING Test y Entrenamiento en ListBox
set(findobj('Tag','ListBoxEntrenamiento'),'String',totalE);
set(findobj('Tag','ListBoxTest'),'String',totalT);

%Guarda WAVE Test y Entrenamiento en ListBox
waveT=[];
waveE=[];
wavesenal=get(findobj('Tag','Fig1'),'UserData');

for i=1:size(lista,1)
   indice=strmatch(lista(i,:),totalE);
   if isempty(indice)
      waveT=[waveT;wavesenal(i,:)];
   else
      waveE=[waveE;wavesenal(i,:)];
   end;
end;
set(findobj('Tag','ListBoxEntrenamiento'),'UserData',waveE);
set(findobj('Tag','ListBoxTest'),'UserData',waveT);

%No se ha modificado Wavelet
set(findobj('Tag','StaticTextW'),'UserData','F');

%Habilita Opciones
set(findobj('Tag','PushButtonEntrena'),'Enable','on');
set(findobj('Tag','PopupMenuKernel'),'Enable','on');
set(findobj('Tag','EditTextParametros'),'Enable','on');
set(findobj('Tag','PushButtonClasifica'),'Enable','off');
set(findobj('Tag','StaticTextExito'),'String','---');

%Presenta Resultados
set(findobj('Tag','StaticTextTiempo'),'String',num2str(tpm+tgenera));
set(findobj('Tag','StaticTextEstado'),'string',[tw,'Conjuntos E y T']);


