% This script is used to generate data files of performances of various
% predictors used. This is later used in figures 

close all;
clear all;
clc

tic


%% HHMS - different N

% source=Data_source('simulation','HHMS','Periodical','short') ;
% % source.start_cut=0;
% % source.end_cut=1;
% data=Data_array(source);
% N_array=[6 8 10 12];
% predictor_types={ 'Mean','Moving Average', 'Oracle','Model - Kalman','Model - predict','StateSpace','ARMAx', ...
%     'AR','BJ','GreyBox','StateSpace0', 'ARMAx0' }';
% % predictor_types={ 'Mean','Oracle','Model - Kalman','ARMAx'}';
% 
% pred_error=zeros(length(predictor_types),length(N_array));
% pred_std=zeros(length(predictor_types),length(N_array));
% 
% for nn=1:length(N_array)
% 
% SetSourceAux(data,['N=1e' num2str(N_array(nn))]) 
% params=data.data_Parameters;
% model=Model(params);
% 
% for ii=1:length(predictor_types)
%     predictor=Predictor(data,model,predictor_types{ii}) ;
%     pred_error(ii,nn)=predictor.error_Prob;
%     pred_std(ii,nn)=predictor.error_Std; 
% end
% 
% end
% toc
% 
% save('Predictor_Performances_HHMS_short_N_1e6_1e8_1e10_1e12.mat','N_array','predictor_types','pred_error','pred_std');


%% HHS - different N
% source=Data_source('simulation','HHS','Periodical','short') ;
% source.start_cut=0.3;
% source.end_cut=1;
% data=Data_array(source);
% N_array=[4 6 8 10 12];
% predictor_types={ 'Mean','Moving Average', 'Oracle','Model - Kalman','Model - predict','StateSpace','ARMAx', ...
%     'AR','BJ','GreyBox','StateSpace0', 'ARMAx0' }';
% % predictor_types={ 'Mean','Oracle','Model - Kalman','ARMAx'}';
% 
% pred_error=zeros(length(predictor_types),length(N_array));
% pred_std=zeros(length(predictor_types),length(N_array));
% tic
% for nn=1:length(N_array)
% 
% SetSourceAux(data,['N=1e' num2str(N_array(nn))]) 
% params=data.data_Parameters;
% model=Model(params);
% 
% for ii=1:length(predictor_types)
%     predictor=Predictor(data,model,predictor_types{ii}) ;
%     pred_error(ii,nn)=predictor.error_Prob;
%     pred_std(ii,nn)=predictor.error_Std;
% end
% 
% end
% toc
% 
% save('Predictor_Performances_HHS_short_N_1e4_1e6_1e8_1e10_1e12.mat','N_array','predictor_types','pred_error','pred_std');


%% HHS - different I0 and f_in
% source=Data_source('simulation','HHS','Periodical','short') ;
% % source.start_cut=0;
% % source.end_cut=1;
% data=Data_array(source);
% f_array=[1 5 10 12.5 15 17.5 20 22.5 25 27.5 30 35 40 45]; %Hz
% I0_array=[7.5 7.7 7.9 8.1 8.3]; %microAmpere
% predictor_types={ 'Mean','Moving Average', 'Oracle','Model - Kalman','Model - predict','StateSpace','ARMAx', ...
%     'AR','BJ','GreyBox','StateSpace0', 'ARMAx0' }';
% % predictor_types={ 'Mean','Oracle','Model - Kalman','ARMAx'}';
% 
% pred_error=zeros(length(predictor_types),length(I0_array),length(f_array));
% pred_std=zeros(length(predictor_types),length(I0_array),length(f_array));
% min_ff=5;%for ff<5, intermittent mode is not reached for I0=8.3
% 
% tic
% for pp=1:length(I0_array) 
%     for ff=min_ff:length(f_array)
% 
%     SetSourceAux(data,[pp ff]) 
%     params=data.data_Parameters;
%     model=Model(params);
% 
%     for ii=1:length(predictor_types)
%         predictor=Predictor(data,model,predictor_types{ii}) ;
%         pred_error(ii,pp,ff)=predictor.error_Prob;
%         pred_std(ii,pp,ff)=predictor.error_Std;
%     end
%     end
% end
% toc
% 
% save('Predictor_Performances_HHS_short_I0-f_scan.mat','f_array','I0_array','min_ff','predictor_types','pred_error','pred_std');

%% HHSIP - different I0 and f_in
% source=Data_source('simulation','HHSIP','Periodical','short') ;
% % source.start_cut=0;
% % source.end_cut=1;
% data=Data_array(source);
% f_array=[10 20 30 40 50]; %Hz
% I0_array=[7.5 7.7 7.9 8.1 8.3]; %microAmpere
% predictor_types={ 'Mean','Moving Average', 'Oracle','Model - Kalman','Model - predict','StateSpace','ARMAx', ...
%     'AR','BJ','GreyBox','StateSpace0', 'ARMAx0' }';
% % predictor_types={ 'Mean','Oracle','Model - Kalman','ARMAx'}';
% 
% pred_error=zeros(length(predictor_types),length(I0_array),length(f_array));
% pred_std=zeros(length(predictor_types),length(I0_array),length(f_array));
% min_ff=1;%for ff<5, intermittent mode is not reached for I0=8.3
% 
% tic
% for pp=1:length(I0_array) 
%     for ff=min_ff:length(f_array)
% 
%     SetSourceAux(data,[pp ff]) 
%     params=data.data_Parameters;
%     model=Model(params);
% 
%     for ii=1:length(predictor_types)
%         predictor=Predictor(data,model,predictor_types{ii}) ;
%         pred_error(ii,pp,ff)=predictor.error_Prob;
%         pred_std(ii,pp,ff)=predictor.error_Std;
%     end
%     end
% end
% toc
% 
% save('Predictor_Performances_HHSIP_short_I0-f_scan.mat','f_array','I0_array','min_ff','predictor_types','pred_error','pred_std');

%% HHSIP - different N
source=Data_source('simulation','HHSIP','Periodical','short') ;
% source.start_cut=0;
% source.end_cut=1;
data=Data_array(source);
predictor_types={ 'Mean','Moving Average', 'Oracle','Model - Kalman','Model - predict','StateSpace','ARMAx', ...
    'AR','BJ','GreyBox','StateSpace0', 'ARMAx0' }';
% predictor_types={ 'Mean','Oracle','Model - Kalman','ARMAx'}';

N_array=[6 8 10 12];
pred_error=zeros(length(predictor_types),length(N_array));
pred_std=zeros(length(predictor_types),length(N_array));


tic
for nn=1:length(N_array)

    SetSourceAux(data,['N=1e' num2str(N_array(nn))]);
    params=data.data_Parameters;
    model=Model(params);

    for ii=1:length(predictor_types)
        predictor=Predictor(data,model,predictor_types{ii}) ;
        pred_error(ii,nn)=predictor.error_Prob;
        pred_std(ii,nn)=predictor.error_Std;
    end
end
toc

save('Predictor_Performances_HHSIP_short_N_1e6_1e8_1e10_1e12.mat','N_array','predictor_types','pred_error','pred_std');

%% HHMS - for 1/f stimulation
% source=Data_source('simulation','HHMS','1/f','long') ;
% source.start_cut=0.3;
% source.end_cut=1;
% data=Data_array(source);
% params=data.data_Parameters;
% model=Model(params);
% 
% predictor_types={ 'Mean','Moving Average', 'Oracle','Model - Kalman','Model - predict','StateSpace','ARMAx', ...
%     'AR','BJ','GreyBox','StateSpace0', 'ARMAx0' }';
% % predictor_types={ 'Mean','Oracle','Model - Kalman','ARMAx'}';
% 
% pred_error=zeros(length(predictor_types),1);
% pred_std=zeros(length(predictor_types),1);
% 
% tic
% 
% for ii=1:length(predictor_types)
%     predictor=Predictor(data,model,predictor_types{ii}) ;
%     pred_error(ii)=predictor.error_Prob;
%     pred_std(ii)=predictor.error_Std;
% end
% 
% toc
% 
% save('Predictor_Performances_HHMS_1_over_f.mat','predictor_types','pred_error','pred_std');