Parallel cortical inhibition processing enables context-dependent behavior (Kuchibhotla et al. 2016)

 Download zip file 
Help downloading and running models
Accession:217958
Physical features of sensory stimuli are fixed, but sensory perception is context dependent. The precise mechanisms that govern contextual modulation remain unknown. Here, we trained mice to switch between two contexts: passively listening to pure tones and performing a recognition task for the same stimuli. Two-photon imaging showed that many excitatory neurons in auditory cortex were suppressed during behavior, while some cells became more active. Whole-cell recordings showed that excitatory inputs were affected only modestly by context, but inhibition was more sensitive, with PV+, SOM+, and VIP+ interneurons balancing inhibition and disinhibition within the network. Cholinergic modulation was involved in context switching, with cholinergic axons increasing activity during behavior and directly depolarizing inhibitory cells. Network modeling captured these findings, but only when modulation coincidently drove all three interneuron subtypes, ruling out either inhibition or disinhibition alone as sole mechanism for active engagement. Parallel processing of cholinergic modulation by cortical interneurons therefore enables context-dependent behavior.
Reference:
1 . Kuchibhotla KV, Gill JV, Lindsay GW, Papadoyannis ES, Field RE, Sten TA, Miller KD, Froemke RC (2017) Parallel processing by cortical inhibition enables context-dependent behavior. Nat Neurosci 20:62-71 [PubMed]
Model Information (Click on a link to find other models with that property)
Model Type: Connectionist Network;
Brain Region(s)/Organism: Auditory cortex;
Cell Type(s):
Channel(s):
Gap Junctions:
Receptor(s):
Gene(s):
Transmitter(s): Acetylcholine;
Simulation Environment: MATLAB;
Model Concept(s): Rate-coding model neurons; Sensory processing; Audition;
Implementer(s): Lindsay, Grace ; Miller, Kenneth ;
Search NeuronDB for information about:  Acetylcholine;
%Runs 4-population model with and without ACH
clear all
mas=[5]; %max strength of ach


depols=[0 1 1 1].*mas;

T=300; dt=.5; T=T/dt;
n=2.2; % 2.2 lin/nonlin. 1=lin, >1=n for nonlin
maxopt=0; %0 for nonlin
k=.01; %.01
Ne=1; Npv=1; Nvip=1; Nsom=1; %one rate unit per cell type
Ntot=Ne+Npv+Nvip+Nsom; % # of cell groups
taus=[20 10 10 10]; %time constants, e i



W=[.017, -.956, -.045, -.512;
    .8535, -.99, -.09, -.307;
    2.104, -.184, 0, -.734;
    1.285, 0, -.14, 0];



NeI=[1]; NpvI=[2]; NvipI=[3];  NsomI=[4];

for tri=1:2
    %tri=1 ach, tri=2 no ach.
    depols=depols.*(tri==1);
    SpontRates=[12.8 24 8 8.9];
    
    InpRates=[93 74 0 0];
    
    BinpE=ones(1,T).*SpontRates(1); BinpPV=ones(1, T).*SpontRates(2); BinpVIP=ones(1, T).*SpontRates(3);  BinpSOM=ones(1, T).*SpontRates(4); %no reason for this to be over time....
    
    InpE=zeros(Ne,T); InpPV=zeros(Npv,T); InpVIP=zeros(Nvip,T); InpSOM=zeros(Nsom,T);
    endT=300; stT=200;
    InpE(:,stT:endT)=InpE(:,stT:endT)+InpRates(1); InpPV(:,stT:endT)=InpPV(:,stT:endT)+InpRates(2); InpVIP(:,stT:endT)=InpVIP(:,stT:endT)+InpRates(3); InpSOM(:,stT:endT)=InpSOM(:,stT:endT)+InpRates(4);
    
    Re(:,1)=zeros(Ne,1); Rpv(:,1)=zeros(Npv,1); Rvip(:,1)=zeros(Nvip,1); Rsom(:,1)=zeros(Nsom,1);
    
    for t=2:T %run simulation
        dRe=(-Re(:,t-1)+k.*(max((InpE(:,t-1)+depols(1)+BinpE(1,t-1)+ W(NeI,:)*[Re(:,t-1); Rpv(:,t-1); Rvip(:,t-1); Rsom(:,t-1)]),maxopt)).^n)./taus(1);
        dRpv=(-Rpv(:,t-1)+k.*(max((InpPV(:,t-1)+depols(2)+BinpPV(1,t-1)+ W(NpvI,:)*[Re(:,t-1); Rpv(:,t-1); Rvip(:,t-1); Rsom(:,t-1)]),maxopt)).^n)./taus(2);
        dRvip=(-Rvip(:,t-1)+k.*(max((InpVIP(:,t-1)+depols(3)+BinpVIP(1,t-1)+ W(NvipI,:)*[Re(:,t-1); Rpv(:,t-1); Rvip(:,t-1); Rsom(:,t-1)]),maxopt)).^n)./taus(3);
        dRsom=(-Rsom(:,t-1)+k.*(max((InpSOM(:,t-1)+depols(4)+BinpSOM(1,t-1)+ W(NsomI,:)*[Re(:,t-1); Rpv(:,t-1); Rvip(:,t-1); Rsom(:,t-1)]),maxopt)).^n)./taus(4);
        
        
        
        
        Re(:,t)= Re(:,t-1)+dRe*dt;
        Rpv(:,t)= Rpv(:,t-1)+dRpv*dt;
        Rvip(:,t)= Rvip(:,t-1)+dRvip*dt;
        Rsom(:,t)= Rsom(:,t-1)+dRsom*dt;
        
    end
    allOT(tri,:,:)=[Re; Rpv; Rvip; Rsom];
    
    %spontaneous rates:
    rezes(tri,1:4)=[mean(Re(:,stT-100:stT-1),2), mean(Rpv(:,stT-100:stT-1),2), mean(Rvip(:,stT-100:stT-1),2), mean(Rsom(:,stT-100:stT-1),2)];
    %transient average:
    rezesL(tri,1:4)=[mean(Re(:,stT:stT+100),2), mean(Rpv(:,stT:stT+100),2), mean(Rvip(:,stT:stT+100),2), mean(Rsom(:,stT:stT+100),2)];
end




OTdifs=[allOT(1,1,:)-allOT(2,1,:); allOT(1,2,:)-allOT(2,2,:); allOT(1,3,:)-allOT(2,3,:); allOT(1,4,:)-allOT(2,4,:) ];
OTpeaks=max(allOT,[],3);
OTpdifs=[OTpeaks(1,1)-OTpeaks(2,1); OTpeaks(1,2)-OTpeaks(2,2); OTpeaks(1,3)-OTpeaks(2,3); OTpeaks(1,4)-OTpeaks(2,4) ];


mr=squeeze(rezes);
mrL=squeeze(rezesL);
ssdif=OTdifs(:,1,endT);


figure; subplot(1,2,1); hold on; plot(squeeze(allOT(2,:,:))'); xlabel('Time (ms)'); ylabel('Firing Rate')
ax=gca;
set(ax,'XTick',[0 200 400 600 800])
set(ax,'XTickLabel',{'0', '100', '200', '300', '400'}); title('No ACH'); legend({'E', 'P', 'V', 'S'})

subplot(1,2,2); hold on; plot(squeeze(allOT(1,:,:))'); xlabel('Time (ms)'); ylabel('Firing Rate')
ax=gca;
set(ax,'XTick',[0 200 400 600 800])
set(ax,'XTickLabel',{'0', '100', '200', '300', '400'}); title('ACH')

figure
subplot(2,3,1)
bar(squeeze(OTpeaks(2,:)))
title('No ACH Evoked Rates (Peak)')
ax=gca;
set(ax,'XTick',[1 2 3 4])
set(ax,'XTickLabel',{'E','P','V','S'})
subplot(2,3,2)
bar(squeeze(mrL(2,:)))
title('No ACH Evoked Rates (50ms)')
ax=gca;
set(ax,'XTick',[1 2 3 4])
set(ax,'XTickLabel',{'E','P','V','S'})
subplot(2,3,3)
bar(squeeze(allOT(2,:,endT)))
title('No ACH Evoked Rates (SS)')
ax=gca;
set(ax,'XTick',[1 2 3 4])
set(ax,'XTickLabel',{'E','P','V','S'})

subplot(2,3,4)
bar(squeeze(OTpdifs))
title('Differences at Peak')
ax=gca;
set(ax,'XTick',[1 2 3 4])
set(ax,'XTickLabel',{'E','P','V','S'})
subplot(2,3,5)
ax=gca;
bar([mrL(1,1)-mrL(2,1)   mrL(1,2)-mrL(2,2)    mrL(1,3)-mrL(2,3)  mrL(1,4)-mrL(2,4) ])
title('Differences over 50ms')
set(ax,'XTick',[1 2 3 4])
set(ax,'XTickLabel',{'E','P','V','S'})
subplot(2,3,6)
bar(squeeze(ssdif))
title('Differences at SS')
ax=gca;
set(ax,'XTick',[1 2 3 4])
set(ax,'XTickLabel',{'E','P','V','S'})



Loading data, please wait...