A basal ganglia model of aberrant learning (Ursino et al. 2018)

 Download zip file 
Help downloading and running models
Accession:239530
A comprehensive, biologically inspired neurocomputational model of action selection in the Basal Ganglia allows simulation of dopamine induced aberrant learning in Parkinsonian subjects. In particular, the model simulates the Alternate Finger Tapping motor task as an indicator of bradykinesia.
Reference:
1 . Ursino M, Baston C (2018) Aberrant learning in Parkinson's disease: A neurocomputational study on bradykinesia. Eur J Neurosci 47:1563-1582 [PubMed]
Citations  Citation Browser
Model Information (Click on a link to find other models with that property)
Model Type: Connectionist Network;
Brain Region(s)/Organism: Basal ganglia;
Cell Type(s): Neostriatum medium spiny direct pathway GABA cell;
Channel(s):
Gap Junctions:
Receptor(s): D1; D2; Cholinergic Receptors;
Gene(s):
Transmitter(s): Dopamine; Acetylcholine;
Simulation Environment: MATLAB;
Model Concept(s): Parkinson's; Synaptic Plasticity; Long-term Synaptic Plasticity;
Implementer(s): Ursino, Mauro [mauro.ursino at unibo.it]; Baston, Chiara [chiara.baston at unibo.it];
Search NeuronDB for information about:  Neostriatum medium spiny direct pathway GABA cell; D1; D2; Cholinergic Receptors; Acetylcholine; Dopamine;
%% program which perfroms the simulations for figure 6
% only patient 1 is used
clear all
close all
clc

global alpha beta gamma

% Gain from DA to Go (excitation)
alpha = 0.75;  %(0.2*(Ugo_trigger-0.8)+0.5)/(0.7*(Ugo_trigger-0.8));

%gain from DA to No-Go (inhibition)
beta = -1;

%gain form DA to the cholinergic interneuron
gamma = -0.5;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 


Ns = 4;
S = zeros(Ns,1);
S(1) = 1;

paziente = 1;

switch paziente
       
    case 1   % patient stable
    %tonic dopamine
    Dop_tonic_PD = 0.43;
    Dop_tonic = Dop_tonic_PD;
    Dop_max = (0.8 - Dop_tonic);
    Dop_50 = 0.2;
    N = 2.;
    
    case 2   % paziente wearing off
    %tonic dopamine
    Dop_tonic_PD = 0.55;
    Dop_tonic = Dop_tonic_PD;
    Dop_max = (0.6 - Dop_tonic);
    Dop_50 = 0.18;
    N = 7;
    
end

STN_ON = 1;
T_ON = 1;

ft_tot = [];
ft_tot_add1 = [];
ft_tot_add2 = [];
ft_tot_add3 = [];
DA_tot = [];

dt = 0.1;
Calcola_levodopa
tau=30;
Delay = 15;
Passi = round(Delay/dt);


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


%initialization
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 scriverslo di nuovo perché ho memorizzato Dop_tonic nel file appena letto


% simulation without training
for iiii=1:150:length(c3)
Dop_ex = c3_delay(iiii);    % ogni 10 punti è un minuto, si veda calcola_levodopa dove dt = 0.1
% computation of the total dopamine
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(S,Wgc,Wgs,Wnc,Wns,Ke,STN_ON,T_ON,DA);


ft_tot = [ft_tot ft];

end

%% simulation with training from a given instant

i_addestramento =  150*9+1; % instant from which I train the network;

for iiii=1:150:length(c3)
Dop_ex = c3_delay(iiii);
% computation of the total dopamine
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(S,Wgc,Wgs,Wnc,Wns,Ke,STN_ON,T_ON,DA);   

DA_tot = [DA_tot DA];

if iiii == i_addestramento
    Addestramento_sinapsi_senzaW   % this program trains synapses starting from the present value
    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_post;
    S = zeros(Ns,1);
    S(1) = 1;
end

ft_tot_add1  = [ft_tot_add1  ft];

end

%% %% simulation with training from a different instant
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));
    
Dop_tonic = Dop_tonic_PD;  

i_addestramento =  150*24+1; % instant from which I train the network;

for iiii=1:150:length(c3)
Dop_ex = c3_delay(iiii);
% computation of the total dopamine
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(S,Wgc,Wgs,Wnc,Wns,Ke,STN_ON,T_ON,DA);   


if iiii == i_addestramento
    Addestramento_sinapsi_senzaW   % this program trains synapses starting from the present value
    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_add2  = [ft_tot_add2  ft];

end

%% simulation with training from a third instant
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));
    
 Dop_tonic = Dop_tonic_PD;  
    
i_addestramento =  150*29+1; % instant from which I train the network;

for iiii=1:150:length(c3)
Dop_ex = c3_delay(iiii);
% computation of the total dopamine
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(S,Wgc,Wgs,Wnc,Wns,Ke,STN_ON,T_ON,DA);   


if iiii == i_addestramento
    Addestramento_sinapsi_senzaW   % this program trains synapses starting from the present value
    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_add3  = [ft_tot_add3  ft];

end



%% figure plotting
t1 = t(1:150:end);

width = 1.5;
font = 16;

close all
figure
subplot(221)
plot(t,c1,'r-',t,c3_delay,'b','linewidth', width)
xlabel('time (min)','fontsize',font)
ylabel('levodopa  (\mug/ml)','fontsize',font)
legend1=legend('blood','brain')
set(gca,'fontsize',font)
subplot(222)
plot(t1,DA_tot,'b-','linewidth', width)
xlabel('time (min)','fontsize',font)
ylabel('dopaminergic input','fontsize',font)
set(gca,'fontsize',font)
subplot(223)
plot(t1,ft_tot_add1.*60,'g-',t1,ft_tot.*60,'b-','linewidth', width)
xlabel('time (min)','fontsize',font)
ylabel('tapping frequency (cycles/min)','fontsize',font) 
set(gca,'fontsize',font)
subplot(224)
plot(t1,ft_tot_add2.*60,'r-',t1,ft_tot_add3.*60,'m--',t1,ft_tot.*60,'b-','linewidth', width)
xlabel('time (min)','fontsize',font)
ylabel('tapping frequency (cycles/min)','fontsize',font) 
set(gca,'fontsize',font)