% il paziente 2 migliora da posizione 9
% il paziente 3 cala dalla 4 e migliora dalla 
% il paziente 4 talvolta migliora dalla posizione 5

clear all
close all
clc

global V1 V2 V3 t_dop y i ke3 k31 alpha beta gamma
global c1 c3_delay tfreq Tapping_f


alpha = 0.75;  %(0.2*(Ugo_trigger-0.8)+0.5)/(0.7*(Ugo_trigger-0.8));

%guadagno da DA a No-Go (inibizione)
beta = -1;
%guadagno da DA a interneurone colinergico (inibizione)
gamma = -0.5; 
Ns = 4;
S = zeros(Ns,1);
S(1) = 1;

paziente = 4;

switch paziente
       
    case 1   % paziente stabile
    load('parametri_pazienteG1S5_max.mat')
    %dopamina tonica
   %Dop_tonic_PD = 0.43;
   z=5; %posizione tra le 10 prove random in cui si ha la funzione costo migliore
   
    case 2
    load('parametri_pazienteG1S9_max.mat')
    %dopamina tonica
   %Dop_tonic_PD = 0.43;
   z=8; %posizione tra le 10 prove random in cui si ha la funzione costo migliore
   
    case 3
    load('parametri_pazienteG1S10_max.mat')
    %dopamina tonica
   %Dop_tonic_PD = 0.43;
   z=9; %posizione tra le 10 prove random in cui si ha la funzione costo migliore
    
    case 4   % paziente instabile
    load('parametri_pazienteG2S5_max.mat')
    %per il paziente G2s5 z= 10
    z=10; %posizione tra le 10 prove random in cui si ha la funzione costo migliore
    
    case 5
    load('parametri_pazienteG2S12_max.mat')
    %per il paziente G2s12 z= 7
    z=7; %posizione tra le 10 prove random in cui si ha la funzione costo migliore
     
end
    
    Delay=p1_totale(z);
    ke3= p2_totale(z);
    Dop_max = p3_totale(z);
    Dop_50 = p4_totale(z);
    N = p5_totale(z);
    Dop_tonic = p6_totale(z);
    


STN_ON = 1;
T_ON = 1;

ft_tot = [];
ft_tot_add = [];
DA_tot = [];

dt = 0.1;
Calculate_levodopa
tau=30;   % da togliere??
%Delay = p1_totale;
Delay_indice = round(Delay/dt);


c3_delay = [zeros(1,Delay_indice) c3(1:L-Delay_indice)']';


%inizializzazione
Nc = 4;
load W_tot_new_W0e5_D1e0
    Wgc = squeeze(Wgc_epocs(:,:,100));
    Wgs = squeeze(Wgs_epocs(:,:,100));
    Wnc = squeeze(Wnc_epocs(:,:,100));
    Wns = squeeze(Wns_epocs(:,:,100));
Ke = 7;
    
%     Dop_tonic = Dop_tonic_PD;  % devo scriverlo di nuovo perch� ho memorizzato Dop_tonic nel file appena letto


% simulo senza addestrare
for iiii=1:150:length(c3_delay)
Dop_ex = c3_delay(iiii);
% assegno dopamina tot
DA = Dop_tonic+(Dop_max*Dop_ex^N)/(Dop_50^N+Dop_ex^N);
[Uc,C,Ugo,Go,IGo_DA_Ach,Unogo,NoGo,INoGo_DA_Ach,Ugpe,Gpe,Ugpi,Gpi,Ut,T,Ustn,STN,E,tt,k_tap_vett,Uchi,ChI,ft] = BG_model_function_tapping_mauro_3(S,Wgc,Wgs,Wnc,Wns,Ke,STN_ON,T_ON,DA);


ft_tot = [ft_tot ft];

end

% simulo addestrando

t_addestramento= input('istant of training (min)? [it must be a multiple of 15]'); %training in minutes
i_addestramento =  150*(t_addestramento/15)+1; %index of the training;

for iiii=1:150:length(c3_delay)
Dop_ex = c3_delay(iiii);
% assegno dopamina tot
DA = Dop_tonic+(Dop_max*Dop_ex^N)/(Dop_50^N+Dop_ex^N);
[Uc,C,Ugo,Go,IGo_DA_Ach,Unogo,NoGo,INoGo_DA_Ach,Ugpe,Gpe,Ugpi,Gpi,Ut,T,Ustn,STN,E,tt,k_tap_vett,Uchi,ChI,ft] = BG_model_function_tapping_mauro_3(S,Wgc,Wgs,Wnc,Wns,Ke,STN_ON,T_ON,DA);   

DA_tot = [DA_tot DA];

if iiii == i_addestramento
    Synapse_training   % addestro le sinapsi a partire dai valori attuali
    Wgc = squeeze(Wgc_epocs(:,:,end));
    Wgs = squeeze(Wgs_epocs(:,:,end));
    Wnc = squeeze(Wnc_epocs(:,:,end));
    Wns = squeeze(Wns_epocs(:,:,end));    
    clear Wgc_epocs Wgc_post Wgs_epocs Wgs_post Wnc_epocs Wnc_post Wns_epocs Wns_pos;
    S = zeros(Ns,1);
    S(1) = 1;
end

ft_tot_add  = [ft_tot_add  ft];

end


t2 = t1(1:150:end);

width = 1.5;
font = 18;

close all
figure
plot(t2,ft_tot.*60,'b-o',t2,ft_tot_add.*60,'r--+','linewidth', width)
xlabel('time (min)','fontsize',font)
ylabel('tapping frequency (taps/min)','fontsize',font) 
set(gca,'fontsize',font)