clear all; 
close all; 
clc;


lin_andre=4;
ntt_andre=5;

%talhada só tem 5 logs de jeito para analisar
lin_talhada=4;
ntt_talhada=5;

lin_salvado=4;
ntt_salvado=5;

% Criar a base de dados para o André

txt_open_andre='parking_andre_base.txt'; 

[Tempo_total_andre,Tempo_1_andre,Tempo_2_andre,Tempo_3_andre,vel_1_2_med_andre,vel_3_4_med_andre,rpm_med_1_2_andre,rpm_med_2_3_andre,rrpm_med_3_4_andre,ang_vel_med_1_2_andre,ang_vel_med_3_4_andre,ang_med_2_3_andre,ang_var_2_3_andre,blink_right_time_andre,c_throtle_l_andre,c_throtle_l_m_andre,c_throtle_m_h_andre,c_throtle_h_andre,count_clutch_andre,c_brake_l_andre,c_brake_m_andre,c_brake_h_andre]=open_data_base(txt_open_andre);

base_andre=[Tempo_total_andre(1:lin_andre),Tempo_1_andre(1:lin_andre),Tempo_2_andre(1:lin_andre),Tempo_3_andre(1:lin_andre),vel_1_2_med_andre(1:lin_andre), vel_3_4_med_andre(1:lin_andre),rpm_med_1_2_andre(1:lin_andre),rpm_med_2_3_andre(1:lin_andre),rrpm_med_3_4_andre(1:lin_andre),ang_vel_med_1_2_andre(1:lin_andre),ang_vel_med_3_4_andre(1:lin_andre),ang_med_2_3_andre(1:lin_andre),ang_var_2_3_andre(1:lin_andre),blink_right_time_andre(1:lin_andre),c_throtle_l_andre(1:lin_andre),c_throtle_l_m_andre(1:lin_andre),c_throtle_m_h_andre(1:lin_andre),c_throtle_h_andre(1:lin_andre),count_clutch_andre(1:lin_andre),c_brake_l_andre(1:lin_andre),c_brake_m_andre(1:lin_andre),c_brake_h_andre(1:lin_andre)];

test_andre=[Tempo_total_andre(ntt_andre),Tempo_1_andre(ntt_andre),Tempo_2_andre(ntt_andre),Tempo_3_andre(ntt_andre),vel_1_2_med_andre(ntt_andre), vel_3_4_med_andre(ntt_andre),rpm_med_1_2_andre(ntt_andre),rpm_med_2_3_andre(ntt_andre),rrpm_med_3_4_andre(ntt_andre),ang_vel_med_1_2_andre(ntt_andre),ang_vel_med_3_4_andre(ntt_andre),ang_med_2_3_andre(ntt_andre),ang_var_2_3_andre(ntt_andre),blink_right_time_andre(ntt_andre),c_throtle_l_andre(ntt_andre),c_throtle_l_m_andre(ntt_andre),c_throtle_m_h_andre(ntt_andre),c_throtle_h_andre(ntt_andre),count_clutch_andre(ntt_andre),c_brake_l_andre(ntt_andre),c_brake_m_andre(ntt_andre),c_brake_h_andre(ntt_andre)];




txt_open_talhada='parking_talhada_base.txt'; 

[Tempo_total_talhada,Tempo_1_talhada,Tempo_2_talhada,Tempo_3_talhada,vel_1_2_med_talhada,vel_3_4_med_talhada,rpm_med_1_2_talhada,rpm_med_2_3_talhada,rrpm_med_3_4_talhada,ang_vel_med_1_2_talhada,ang_vel_med_3_4_talhada,ang_med_2_3_talhada,ang_var_2_3_talhada,blink_right_time_talhada,c_throtle_l_talhada,c_throtle_l_m_talhada,c_throtle_m_h_talhada,c_throtle_h_talhada,count_clutch_talhada,c_brake_l_talhada,c_brake_m_talhada,c_brake_h_talhada]=open_data_base(txt_open_talhada);

base_talhada=[Tempo_total_talhada(1:lin_talhada),Tempo_1_talhada(1:lin_talhada),Tempo_2_talhada(1:lin_talhada),Tempo_3_talhada(1:lin_talhada),vel_1_2_med_talhada(1:lin_talhada), vel_3_4_med_talhada(1:lin_talhada),rpm_med_1_2_talhada(1:lin_talhada),rpm_med_2_3_talhada(1:lin_talhada),rrpm_med_3_4_talhada(1:lin_talhada),ang_vel_med_1_2_talhada(1:lin_talhada),ang_vel_med_3_4_talhada(1:lin_talhada),ang_med_2_3_talhada(1:lin_talhada),ang_var_2_3_talhada(1:lin_talhada),blink_right_time_talhada(1:lin_talhada),c_throtle_l_talhada(1:lin_talhada),c_throtle_l_m_talhada(1:lin_talhada),c_throtle_m_h_talhada(1:lin_talhada),c_throtle_h_talhada(1:lin_talhada),count_clutch_talhada(1:lin_talhada),c_brake_l_talhada(1:lin_talhada),c_brake_m_talhada(1:lin_talhada),c_brake_h_talhada(1:lin_talhada)];

test_talhada=[Tempo_total_talhada(ntt_talhada),Tempo_1_talhada(ntt_talhada),Tempo_2_talhada(ntt_talhada),Tempo_3_talhada(ntt_talhada),vel_1_2_med_talhada(ntt_talhada), vel_3_4_med_talhada(ntt_talhada),rpm_med_1_2_talhada(ntt_talhada),rpm_med_2_3_talhada(ntt_talhada),rrpm_med_3_4_talhada(ntt_talhada),ang_vel_med_1_2_talhada(ntt_talhada),ang_vel_med_3_4_talhada(ntt_talhada),ang_med_2_3_talhada(ntt_talhada),ang_var_2_3_talhada(ntt_talhada),blink_right_time_talhada(ntt_talhada),c_throtle_l_talhada(ntt_talhada),c_throtle_l_m_talhada(ntt_talhada),c_throtle_m_h_talhada(ntt_talhada),c_throtle_h_talhada(ntt_talhada),count_clutch_talhada(ntt_talhada),c_brake_l_talhada(ntt_talhada),c_brake_m_talhada(ntt_talhada),c_brake_h_talhada(ntt_talhada)];




txt_open_salvado='parking_salvado_base.txt';

[Tempo_total_salvado,Tempo_1_salvado,Tempo_2_salvado,Tempo_3_salvado,vel_1_2_med_salvado,vel_3_4_med_salvado,rpm_med_1_2_salvado,rpm_med_2_3_salvado,rrpm_med_3_4_salvado,ang_vel_med_1_2_salvado,ang_vel_med_3_4_salvado,ang_med_2_3_salvado,ang_var_2_3_salvado,blink_right_time_salvado,c_throtle_l_salvado,c_throtle_l_m_salvado,c_throtle_m_h_salvado,c_throtle_h_salvado,count_clutch_salvado,c_brake_l_salvado,c_brake_m_salvado,c_brake_h_salvado]=open_data_base(txt_open_salvado);

base_salvado=[Tempo_total_salvado(1:lin_salvado),Tempo_1_salvado(1:lin_salvado),Tempo_2_salvado(1:lin_salvado),Tempo_3_salvado(1:lin_salvado),vel_1_2_med_salvado(1:lin_salvado), vel_3_4_med_salvado(1:lin_salvado),rpm_med_1_2_salvado(1:lin_salvado),rpm_med_2_3_salvado(1:lin_salvado),rrpm_med_3_4_salvado(1:lin_salvado),ang_vel_med_1_2_salvado(1:lin_salvado),ang_vel_med_3_4_salvado(1:lin_salvado),ang_med_2_3_salvado(1:lin_salvado),ang_var_2_3_salvado(1:lin_salvado),blink_right_time_salvado(1:lin_salvado),c_throtle_l_salvado(1:lin_salvado),c_throtle_l_m_salvado(1:lin_salvado),c_throtle_m_h_salvado(1:lin_salvado),c_throtle_h_salvado(1:lin_salvado),count_clutch_salvado(1:lin_salvado),c_brake_l_salvado(1:lin_salvado),c_brake_m_salvado(1:lin_salvado),c_brake_h_salvado(1:lin_salvado)];

test_salvado=[Tempo_total_salvado(ntt_salvado),Tempo_1_salvado(ntt_salvado),Tempo_2_salvado(ntt_salvado),Tempo_3_salvado(ntt_salvado),vel_1_2_med_salvado(ntt_salvado), vel_3_4_med_salvado(ntt_salvado),rpm_med_1_2_salvado(ntt_salvado),rpm_med_2_3_salvado(ntt_salvado),rrpm_med_3_4_salvado(ntt_salvado),ang_vel_med_1_2_salvado(ntt_salvado),ang_vel_med_3_4_salvado(ntt_salvado),ang_med_2_3_salvado(ntt_salvado),ang_var_2_3_salvado(ntt_salvado),blink_right_time_salvado(ntt_salvado),c_throtle_l_salvado(ntt_salvado),c_throtle_l_m_salvado(ntt_salvado),c_throtle_m_h_salvado(ntt_salvado),c_throtle_h_salvado(ntt_salvado),count_clutch_salvado(ntt_salvado),c_brake_l_salvado(ntt_salvado),c_brake_m_salvado(ntt_salvado),c_brake_h_salvado(ntt_salvado)];




number_descriptors=1:size(base_salvado,2);
group=3;
combinations=combnk(number_descriptors,group);
length(combinations)



clc



%responsável pelo processo de mahalanobis e de verificação das variaveis
tic

     
    for n=1:length(combinations) %numero de combinações possiveis 
            

                Y=zeros(1);
                X_tal=zeros(lin_talhada,1);
                X_sal=zeros(lin_salvado,1);
                X_and=zeros(lin_andre,1);
                
                for it_group=1:group
                
                    Y=[Y test_andre(combinations(n,it_group))];
                    X_tal=[ X_tal base_talhada(:,combinations(n,it_group))];
                    X_sal=[ X_sal base_salvado(:,combinations(n,it_group))];
                    X_and=[ X_and base_andre(:,combinations(n,it_group))];
                end
                
                Y_test(n,:)=Y(1,2:end);
                X_base_talhada(:,:,n)=X_tal(:,2:end);
                X_base_salvado(:,:,n)=X_sal(:,2:end);
                X_base_andre(:,:,n)=X_and(:,2:end);
                
                result_talhada(:,:,n)=mahal(Y_test(n,:),X_base_talhada(:,:,n));
                result_salvado(:,:,n)=mahal(Y_test(n,:),X_base_salvado(:,:,n));
                result_andre(:,:,n)=mahal(Y_test(n,:),X_base_andre(:,:,n));
        

    end
 %end
toc



% Ŝe o teste for do talhada


[val_sal,min_sal]=min(result_salvado);
[val_tal,min_tal]=min(result_talhada);
[val_and,min_and]=min(result_andre);
%%
clc

min_tal
val_tal




tic
%testes para dar a combinação que melhor se adequa a esta situação de teste
values_talhada=zeros(1);
xi=150; %situação onde temos parametros com ordem de grandeza superior a xi vezes o nosso valor

for ti=1:length(combinations)
    %verificação 
    if(result_talhada(ti)*xi<result_salvado(ti) && result_talhada(ti)*xi<result_andre(ti))
    
        values_talhada=[values_talhada ti];
    end


end
toc

if(sum(values_talhada~=0))
    values_talhada=values_talhada(2:end);
end



size(values_talhada,2)
clc

for val_cenas=1:length(values_talhada)
    result_salvado(values_talhada(val_cenas))
    result_andre(values_talhada(val_cenas))
    result_talhada(values_talhada(val_cenas))
    combinations(values_talhada(val_cenas),:)
end

%% Testar talhada 
clc

val_tal;
%teste se estes mesmos parametros ainda se aplicam quando mudamos de test

last_test=[ 217         593        1200        1398        1510];
for val_cenas=1:length(last_test)
   
    if(result_talhada(last_test(val_cenas))<result_salvado(last_test(val_cenas)) && result_talhada(last_test(val_cenas))<result_andre(last_test(val_cenas)))
        result_salvado(last_test(val_cenas))
        result_andre(last_test(val_cenas))
        result_talhada(last_test(val_cenas))
        
        disp('yaahhhhhaaaaa')
    combinations(last_test(val_cenas),:)
    end
end



%% testar salvado para valores do talhada

clc

val_sal
%teste se estes mesmos parametros ainda se aplicam quando mudamos de test

last_test=[     593        1200];
for val_cenas=1:length(last_test)
   
    if(result_salvado(last_test(val_cenas))<result_talhada(last_test(val_cenas)) && result_salvado(last_test(val_cenas))<result_andre(last_test(val_cenas)))
        result_talhada(last_test(val_cenas))
        result_andre(last_test(val_cenas))
        result_salvado(last_test(val_cenas))
        
        disp('yaahhhhhaaaaa'); disp(last_test(val_cenas))
    combinations(last_test(val_cenas),:)
    end
end


%% testar andre depois de passar em filtro de talhada e salvado

clc

val_sal
%teste se estes mesmos parametros ainda se aplicam quando mudamos de test

last_test=[ 1200];
for val_cenas=1:length(last_test)
   
    if(result_andre(last_test(val_cenas))<result_talhada(last_test(val_cenas)) && result_andre(last_test(val_cenas))<result_salvado(last_test(val_cenas)))
        result_talhada(last_test(val_cenas))
        result_salvado(last_test(val_cenas))
        result_andre(last_test(val_cenas))
        
        disp('yaahhhhhaaaaa'); disp(last_test(val_cenas))
    combinations(last_test(val_cenas),:)
    end
end






%%


%Comparação com as bases de dados existentes, talhada, salvado, andré


%nesta parte inserimos para prova um dos vectores que ainda não estão na
%base de dados.



%nesta zona escolhemos o salvado para ser testado, relembro que estes
%valores não foram ainda incluidos na base de dados
test=test_salvado;


%usando mahalanobis
for n=1:size(base_andre,2)
result_andre(n)=mahal(test(n),base_andre(:,n));
result_salvado(n)=mahal(test(n),base_salvado(:,n));
result_talhada(n)=mahal(test(n),base_talhada(:,n));
end




qt_andre=0;
qt_salvado=0;
qt_talhada=0;
error_andre=0;
error_salvado=0;
error_talhada=0;

for nin=1:size(result_andre,2)
    
    if( result_andre(nin)>2 )
        qt_andre=qt_andre+1;
        error_andre=error_andre+result_andre(nin);
    end

    if( result_salvado(nin)>2 )
        qt_salvado=qt_salvado+1;
        error_salvado=error_salvado+result_salvado(nin);
    end

    if( result_talhada(nin)>2 )
        qt_talhada=qt_talhada+1;
        error_talhada=error_talhada+result_talhada(nin);
    end
    
end


%%


% percurso 1

result_per_1_andre=[result_andre(2); result_andre(5); result_andre(7);result_andre(11);result_andre(14)]
result_per_1_talhada=[result_talhada(2); result_talhada(5); result_talhada(7);result_talhada(11);result_talhada(14)]
result_per_1_salvado=[result_salvado(2); result_salvado(5); result_salvado(7);result_salvado(11);result_salvado(14)]


% percurso 2

result_per_2_andre=[result_andre(3); result_andre(8); result_andre(12);result_andre(13)]
result_per_2_talhada=[result_talhada(3); result_talhada(8); result_talhada(12);result_talhada(13)]
result_per_2_salvado=[result_salvado(3); result_salvado(8); result_salvado(12);result_salvado(13)]

% percurso 3

result_per_3_andre=[result_andre(4); result_andre(6); result_andre(9);result_andre(10)]
result_per_3_talhada=[result_talhada(4); result_talhada(6); result_talhada(9);result_talhada(10)]
result_per_3_salvado=[result_salvado(4); result_salvado(6); result_salvado(9);result_salvado(10)]



%%   tentar mahal para

result_pedal_talhada=[result_talhada(14);result_talhada(15);result_talhada(16);result_talhada(17);result_talhada(18);result_talhada(19);result_talhada(20);result_talhada(21);result_talhada(22)]

result_pedal_salvado=[result_salvado(14);result_salvado(15);result_salvado(16);result_salvado(17);result_salvado(18);result_salvado(19);result_salvado(20);result_salvado(21);result_salvado(22)]

result_pedal_andre=[result_andre(14);result_andre(15);result_andre(16);result_andre(17);result_andre(18);result_andre(19);result_andre(20);result_andre(21);result_andre(22)]


%%











%%
choice_andre=error_andre %/qt_andre
qt_andre
choice_salvado=error_salvado %/qt_salvado
qt_salvado
choice_talhada=error_talhada %/qt_talhada
qt_talhada



%%
result_andre
test
pause;
result_talhada
test
pause;
result_salvado
test