A unified thalamic model of multiple distinct oscillations (Li, Henriquez and Fröhlich 2017)

 Download zip file 
Help downloading and running models
Accession:233509
We present a unified model of the thalamus that is capable of independently generating multiple distinct oscillations (delta, spindle, alpha and gamma oscillations) under different levels of acetylcholine (ACh) and norepinephrine (NE) modulation corresponding to different physiological conditions (deep sleep, light sleep, relaxed wakefulness and attention). The model also shows that entrainment of thalamic oscillations is state-dependent.
Reference:
1 . Li G, Henriquez C, Fröhlich F (2017) Unified Thalamic Model Generates Multiple Distinct Oscillations with State-dependent Entrainment by Stimulation PLOS Computational Biology 13(10):e1005797
Model Information (Click on a link to find other models with that property)
Model Type: Realistic Network;
Brain Region(s)/Organism: Thalamus;
Cell Type(s): Thalamus geniculate nucleus/lateral principal GLU cell; Thalamus reticular nucleus GABA cell; Thalamus lateral geniculate nucleus interneuron;
Channel(s): I Na,t; I K; I h; I L high threshold; I T low threshold; I_AHP; I CAN; I K,leak;
Gap Junctions: Gap junctions;
Receptor(s): AMPA; NMDA; GabaA;
Gene(s):
Transmitter(s): Acetylcholine; Norephinephrine;
Simulation Environment: C or C++ program;
Model Concept(s): Sleep; Activity Patterns; Gamma oscillations; Oscillations; Brain Rhythms;
Implementer(s): Li, Guoshi [guoshi_li at med.unc.edu];
Search NeuronDB for information about:  Thalamus geniculate nucleus/lateral principal GLU cell; Thalamus reticular nucleus GABA cell; GabaA; AMPA; NMDA; I Na,t; I L high threshold; I T low threshold; I K; I K,leak; I h; I CAN; I_AHP; Acetylcholine; Norephinephrine;
/
ThalamicOSC
data
LFP.m
PlotV.m
Raster.m
                            
% Plot the spiking activiites of the whole thalamic network
% The m-file generates subplots of Figure 2 of the Li et al. paper
% The varialbe "FLAG_OSC" needs to be set to the corresponding simulated
% oscillation state so the figure is generated properly
% Written by Guoshi Li (guoshi_li@med.unc.edu)


clc;
clear all;
close all;

% Select which oscillation state to plot based on simulation
FLAG_OSC = 1; % 1: Delta; 2: Spindle; 3: Alpha: 4: Gamma


min_T = 0;

if (FLAG_OSC == 1)
  T0 = 1000;
  T1 = T0+1000;
  max_T = 1000;
elseif (FLAG_OSC == 2)
  T0 = 500;
  T1 = T0+3000;
  max_T = 3000;
elseif (FLAG_OSC == 3)
  T0 = 950;
  T1 = T0+1000; 
  max_T = 1000;
else
  T0 = 1000;
  T1 = T0+1000;  
  max_T = 1000;
end


Ntc1x = 7;
Ntc1y = 7;

Ntc2x = 12;
Ntc2y = 12;

Nin1 = 8;
Nin2 = 8;

Nre1 = 10;
Nre2 = 10;

Ntc1  = Ntc1x*Ntc1y;     
Ntc2  = Ntc2x*Ntc2y;    
Nin   = Nin1*Nin2;
Nre   = Nre1*Nre2;   

dh = 0.3;
di = 0.3;
dr = 0.3;
de = 0.3;


T_Start = T0;            % Start time of the rasterplot     
T_End   = T1;            % End time of the rasterplot

T  = T_End - T_Start;    % Total duration in ms


TO1 = T_Start;    
TO2 = T_End;       

TO  = (TO2-TO1)/1000;


%============================================
%        Generate raster plot 
%============================================
% For TC1 cells
figure;

subplot(4,1,1);

for i = 0:1:(Ntc1x-1)
   for j = 0:1:(Ntc1y-1) 
       
   n = i*Ntc1y+j+1;
   
   s = ['load TC1' '_' int2str(i) '_'  int2str(j) ';'];    
   eval(s);
    
   ss = ['SpkT = TC1' '_'  int2str(i) '_'  int2str(j) ';'];    
   eval(ss);  
   
   % Firing rate 
    A = find (SpkT>=TO1 & SpkT<=TO2); 
    SHTC(n,1) = length(A)/TO;
   
   L = length(SpkT);
   if (L~=0)  
    for k = 1:L
     if (SpkT(k)>=T_Start & SpkT(k)<=T_End)
      
      x = [SpkT(k)-T0  SpkT(k)-T0];
      y = [n-dh        n+dh ];
   
       plot(x,y,'k','LineWidth',1);
       hold on;
     end
    end
   end
   
 end
end

% xlabel('ms', 'FontSize',14);
ylabel('HTC #', 'FontSize',14);
set(gca, 'FontSize',12);
set(gca,'XTickLabel',[]);
set(gca, 'YTick', [0:25:50]);
axis([min_T,max_T,0,Ntc1+1]);
box('off');

if (FLAG_OSC == 1)
  title('Delta OSC', 'FontSize',16);
elseif (FLAG_OSC == 2)
  title('Spindle OSC', 'FontSize',16);
elseif (FLAG_OSC == 3)
  title('Alpha OSC', 'FontSize',16); 
else
  title('Gamma OSC', 'FontSize',16);  
end



% Calculate Average firing rate
FHTC = SHTC/T*1000;
fHTC = mean(FHTC);
disp('The average HTC firing rate is:');
fHTC

clear SpkT;


% For Interneurons
subplot(4,1,2);

for i = 0:1:(Nin1-1)
   for j = 0:1:(Nin2-1) 
       
    n = i*Nin2+j+1;
    
    s = ['load IN' '_' int2str(i) '_'  int2str(j) ';'];    
    eval(s);
   
    ss = ['SpkT = IN' '_'  int2str(i) '_'  int2str(j) ';'];    
    eval(ss);  
   
   % Odor rate 
    A = find (SpkT>=TO1 & SpkT<TO2); 
    SIN(n,1) = length(A)/TO;
   
   L = length(SpkT);
   if (L~=0)  
    for k = 1:L
     if (SpkT(k)>=T_Start & SpkT(k)<=T_End)
      
      x = [SpkT(k)-T0  SpkT(k)-T0];
      y = [n-di        n+di ];
   
       plot(x,y,'k','LineWidth',1);
       hold on;
     end
    end
   end
   
 end
end

% xlabel('ms', 'FontSize',14);
ylabel('IN #', 'FontSize',14);
set(gca, 'FontSize',12);
axis([min_T,max_T,0,Nin+1]);
set(gca,'XTickLabel',[]);
set(gca, 'YTick', [0:30:60]);
box('off');


% Calculate Average firing rate
FIN = SIN/T*1000;
fIN = mean(FIN);
disp('The average IN firing rate is:');
fIN

clear SpkT;


% For TC2 cells
subplot(4,1,3);

for i = 0:1:(Ntc2x-1)
   for j = 0:1:(Ntc2y-1) 
       
    n = i*Ntc2y+j+1;
    
    s = ['load TC2' '_' int2str(i) '_'  int2str(j) ';'];    
    eval(s);
    
    ss = ['SpkT = TC2' '_'  int2str(i) '_'  int2str(j) ';'];    
    eval(ss);  
     
   % Odor rate 
    A = find (SpkT>=TO1 & SpkT<TO2); 
    SRTC(n,1) = length(A)/TO;
   
   L = length(SpkT);
   if (L~=0)  
    for k = 1:L
     if (SpkT(k)>=T_Start & SpkT(k)<=T_End)
      
      x = [SpkT(k)-T0 SpkT(k)-T0];
      y = [n-dr       n+dr ];
   
       plot(x,y,'k','LineWidth',1);
       hold on;
     end
    end
   end
   
 end
end

% xlabel('ms', 'FontSize',14);
ylabel('RTC #', 'FontSize',14);
set(gca, 'FontSize',12);
axis([min_T,max_T,0,150]);
set(gca,'XTickLabel',[]);
box('off');

% Calculate Average firing rate
FRTC = SRTC/T*1000;
fRTC = mean(FRTC);
disp('The average RTC firing rate is:');
fRTC


clear SpkT;


%=========================================================

% For RE cells
subplot(4,1,4);

for i = 0:1:(Nre1-1)
   for j = 0:1:(Nre2-1) 
       
    n = i*Nre2+j+1;
    
    s = ['load RE' '_' int2str(i) '_'  int2str(j) ';'];    
    eval(s);
    
    ss = ['SpkT = RE' '_'  int2str(i) '_'  int2str(j) ';'];    
    eval(ss);  
   
   % Odor rate 
    A = find (SpkT>=TO1 & SpkT<TO2); 
    SRE(n,1) = length(A)/TO;
   
   L = length(SpkT);
   if (L~=0)  
    for k = 1:L
     if (SpkT(k)>=T_Start & SpkT(k)<=T_End)
      
      x = [SpkT(k)-T0  SpkT(k)-T0];
      y = [n-de        n+de ];
   
       plot(x,y,'k','LineWidth',1);
       hold on;
     end
    end
   end
   
 end
end

xlabel('ms', 'FontSize',14);
ylabel('RE #', 'FontSize',14);
set(gca, 'FontSize',12);
set(gca, 'YTick', [0:50:100]);
axis([min_T,max_T,0,Nre+1]);
box('off');

% Calculate average RE firing rate
FRE = SRE/T*1000;
fRE = mean(FRE);
disp('The average RTC firing rate is:');
fRE





Loading data, please wait...