A two-layer biophysical olfactory bulb model of cholinergic neuromodulation (Li and Cleland 2013)

 Download zip file   Auto-launch 
Help downloading and running models
Accession:149739
This is a two-layer biophysical olfactory bulb (OB) network model to study cholinergic neuromodulation. Simulations show that nicotinic receptor activation sharpens mitral cell receptive field, while muscarinic receptor activation enhances network synchrony and gamma oscillations. This general model suggests that the roles of nicotinic and muscarinic receptors in OB are both distinct and complementary to one another, together regulating the effects of ascending cholinergic inputs on olfactory bulb transformations.
Reference:
1 . Li G, Cleland TA (2013) A two-layer biophysical model of cholinergic neuromodulation in olfactory bulb. J Neurosci 33:3037-58 [PubMed]
Citations  Citation Browser
Model Information (Click on a link to find other models with that property)
Model Type: Realistic Network;
Brain Region(s)/Organism:
Cell Type(s): Olfactory bulb main mitral GLU cell; Olfactory bulb main interneuron periglomerular GABA cell; Olfactory bulb main interneuron granule MC GABA cell;
Channel(s): I Na,p; I L high threshold; I T low threshold; I A; I M; I h; I K,Ca; I CAN; I Sodium; I Calcium; I Potassium; I_Ks; I Cl, leak; I Ca,p;
Gap Junctions:
Receptor(s): Nicotinic; GabaA; Muscarinic; AMPA; NMDA;
Gene(s):
Transmitter(s): Acetylcholine;
Simulation Environment: NEURON; MATLAB;
Model Concept(s): Sensory processing; Sensory coding; Neuromodulation; Olfaction;
Implementer(s): Li, Guoshi [guoshi_li at med.unc.edu];
Search NeuronDB for information about:  Olfactory bulb main mitral GLU cell; Olfactory bulb main interneuron periglomerular GABA cell; Olfactory bulb main interneuron granule MC GABA cell; Nicotinic; GabaA; Muscarinic; AMPA; NMDA; I Na,p; I L high threshold; I T low threshold; I A; I M; I h; I K,Ca; I CAN; I Sodium; I Calcium; I Potassium; I_Ks; I Cl, leak; I Ca,p; Acetylcholine;
% Phase distribution plot and Rasterplot of spike phases
% Written by Guoshi Li, Cornell University, 2013

clc;
clear all;
close all;

load tt;
load Vm;
load OdorA1.dat;
Odor = OdorA1;

nMit  = 25;
nPG   = 25;
nGran = 100;

Nm = 25;
Ng = 100;   

ratio = 0.3;       % factor of the average min-max distance

T1 = 2000;
T2 = 3000;

DT = 0.2;  
n1 = T1/DT+1;
n2 = T2/DT;
 
Fs = 1/DT*1000;    % sampling frequency: Hz
FILORDER = 1000;

Fmax = 100;        % maximal frequency to plot
Fc   = [20 100];   % Cut-off frequency
Wc   = Fc/(Fs/2);  % 

t = tt(n1:n2);
y = Vm(n1:n2);
y = y-mean(y);

L = length(y);
NFFT = 2^nextpow2(L);     % Next power of 2 from length of y
Y = fft(y,NFFT)/L;
YY = 2*abs(Y(1:NFFT/2));

f = Fs/2*linspace(0,1,NFFT/2);


h = fir1(FILORDER, Wc);
x = filtfilt(h,1, y);

figure;
plot(t,x);
axis([2000, 3000, -8, 8]);
set(gca, 'FontSize',12);
xlabel('ms','FontSize',12);
title('Filtered sLFP', 'FontSize',12);
box('off');

figure;
[p,n]=peakdetect(x);

Np=length(p);
Nn=length(n);

PP=x(p);
PN=x(n);

if (p(1)<n(1))
   flag=1;   % Start with positive peak
else
   flag=0;   % Start with negative peak
end

if (flag==1)
  if(Np>Nn)
     D1=PP(1:end-1)-PN; 
     D2=PN-PP(2:end);
  else
     D1=PP-PN; 
     D2=PN(1:end-1)-PP(2:end);      
  end

else
   if(Np<Nn)
     D1=PP-PN(2:end); 
     D2=PN(1:end-1)-PP;
  else
     D1=PP(1:end-1)-PN(2:end); 
     D2=PN-PP;      
  end
end

DD=[D1; abs(D2)];
disp('The mean is:');
Dm=mean(DD)
threshold = ratio*Dm

% figure;
% hist(DD);

[maxtab, mintab] = peakdet(x, threshold, t);

%===============================================
%       Calcualte the phase of spikes
%===============================================

MT = maxtab(:,1);

TO1 = MT(1);        
TO2 = MT(end);   

Nc = length(MT);
PHASE = [];

for i = 0:1:(nMit-1)
   m=1;
   P=[];
   s = ['load Ms' int2str(i)  ';'];    
   eval(s);   
   ss = ['SpkT = Ms' int2str(i) ';'];    
   eval(ss);  
    
   A = find(SpkT>=TO1 & SpkT<=TO2); 
   L = length(A);  
    
   for j = 1:L
     ST = SpkT(A(j));
     
     for k = 2:Nc
       if (ST < MT(k))
         P(m)=(ST-MT(k-1))/(MT(k)-MT(k-1))*360;  
         if(P(m)>180)
           P(m)=P(m)-360;
         end
         m=m+1;
         break;
       end      
     end       
   end
   
   PHASE = [PHASE; P'];
   ss=['P' int2str(i+1) '=P;'];
   eval(ss);
end    


PHASE=PHASE';

N = length(PHASE);

% Calcualte the phase-locking index

SIN = 0;
COS = 0;

for i = 1:N
  psi = PHASE(i)/360*2*pi;  
  SIN = SIN + sin(psi);
  COS = COS + cos(psi);
end

Ksyn = 1/N*sqrt(SIN^2+COS^2);
disp('The spike phase syn. index is:');
Ksyn



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

figure;
subplot(2,1,1);
plot(t,x);
set(gca,'FontSize',12);
hold on;
plot(t(p), x(p),'r*');
hold on;
plot(t(n), x(n),'g*');
axis([2500, 3000, -8, 8]);
set(gca, 'XTickLabel',[ ]);
% xlabel('ms');
ylabel('mV', 'FontSize',14);
box('off');


subplot(2,1,2);
plot(t,x);
set(gca,'FontSize',12);
hold on; plot(mintab(:,1), mintab(:,2), 'g*');
plot(maxtab(:,1), maxtab(:,2), 'r*');
axis([2500, 3000, -8, 8]);
xlabel('ms', 'FontSize',14);
ylabel('mV', 'FontSize',14);
box('off');


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

BIN  = -180:30:180;
Pbin = -165:30:165;
Ndist = histc(PHASE, BIN);
Ndist = Ndist(1:end-1);
P_dist= Ndist/sum(Ndist);

figure;
bar(Pbin, P_dist);
set(gca,'FontSize',12);
title('Control', 'FontSize',14);
set(gca, 'XTick',[-180:60:180]);
xlabel('Degree','FontSize',14);
ylabel('Probability','FontSize',14);
axis([-180, 180, 0, 0.5]);
box('off');

hold on;
x = -180:0.5:180;
xx = (2*pi*x)/(360);
y = 0.2*(sin(xx+0.5*pi)+1);
plot(x,y,'r-','LineWidth',2);


%=========================================
dx = 0.2;

figure;
for i = 1:1:nMit
   ss = ['PH = P' int2str(i) ';'];    
   eval(ss);  
   L = length(PH); 
   
   if(L==0)
      Pm(i) = 0;
   else
      Pm(i) = mean(PH);
   end
  
   if(L~=0)
      for (k=1:L)
        x = [i-dx   i+dx ];
        y = [PH(k)  PH(k)];
        plot(x,y,'r','LineWidth',1);
        hold on;
      end 
    end
      
end
plot([0 25.5],[0 0],'k:');

axis([0,25.5, -180,180]);
box('off');
xlabel('MC#', 'FontSize',14);
ylabel('Degree', 'FontSize',14);
title('Control', 'FontSize',14);
set(gca, 'FontSize',12);


Glom = 1:25;
width = 0.6;

figure;
subplot(2,1,1);
bar(Glom, Odor, width);
set(gca, 'FontSize',12);
set(gca,'XTickLabel',[ ]);
ylabel('nA', 'FontSize',14);
title('Control', 'FontSize',14);
axis([0 26 0 1.0]);
box('off');

subplot(2,1,2);
bar(Glom,Pm);
axis([0,25.5, -130,100]);
box('off');
xlabel('MC#', 'FontSize',14);
ylabel('Degree', 'FontSize',14);
set(gca, 'FontSize',12);