A Neural mass computational model of the Thalamocorticothalamic circuitry (Bhattacharya et al. 2011)

 Download zip file 
Help downloading and running models
Accession:138970
The model presented here is a bio-physically plausible version of a simple thalamo-cortical neural mass computational model proposed by Lopes da Silva in 1974 to simulate brain EEG activity within the alpha band (8-13 Hz). The thalamic and cortical circuitry are presented as separate modules in this model with cell populations as in biology. The connectivity between cell populations are as reported by Sherman, S. in Scholarpedia, 2006. The values of the synaptic connectivity parameters are as reported by Van Horn et al, 2000. In our paper (doi:10.1016/j.neunet.2011.02.009), we study the model behaviour while varying the values of the synaptic connectivity parameters (Cyyy) in the model about their respective 'basal' (intial) values.
Reference:
1 . Bhattacharya BS, Coyle D, Maguire LP (2011) A thalamo-cortico-thalamic neural mass model to study alpha rhythms in Alzheimer's disease. Neural Netw 24:631-45 [PubMed]
Model Information (Click on a link to find other models with that property)
Model Type: Connectionist Network; Neural mass;
Brain Region(s)/Organism: Neocortex; Thalamus;
Cell Type(s):
Channel(s):
Gap Junctions:
Receptor(s):
Gene(s):
Transmitter(s):
Simulation Environment: MATLAB; Simulink;
Model Concept(s): Aging/Alzheimer`s; Brain Rhythms;
Implementer(s): Sen-Bhattacharya, Basabdatta [basab.sen.b at gmail.com];
%% CODE WRITTEN BY BASABDATTA SEN BHATTACHARYA AND IS A PROPERTY OF THE
%% UNIVERSITY OF ULSTER, NORTHERN IRELAND, UK. PLEASE CITE THE ARTICLE IN
%% WHICH THE WORK WAS FIRST PROPOSED WHEN USING THIS CODE. THE CITATION
%% DETAILS ARE AVAILABLE IN THE README.TXT FILE IN THIS FOLDER.
function myinput_ver1(block)
%Simulate extrinsic input to a cell population
setup(block);
%endfunction

function setup(block)

%Dialog parameters are, in order, mean, variance, time of simulation (msec), flag
% There is an option to give a constant input to the model, in which case
% the flag will be 0 with a constant input at mean value.
%Else, if flag=1, the input will be a random
% noise with assigned mean and standard deviation.
block.NumDialogPrms = 4;
block.DialogPrmsTunable = {'Tunable','Tunable','Tunable','Tunable'};

% Register number of ports
block.NumInputPorts  = 0;
block.NumOutputPorts = 1;

% Setup port properties to be inherited or dynamic
block.SetPreCompOutPortInfoToDynamic;

% Override output port properties
block.OutputPort(1).DatatypeID  = 0; % double
block.OutputPort(1).Complexity  = 'Real';
block.OutputPort(1).Dimensions       =  1;
block.OutputPort(1).SamplingMode = 'Sample';
block.SampleTimes = [0.004 0]; %% MODEL SAMPLING TIME

block.RegBlockMethod('PostPropagationSetup',    @DoPostPropSetup);
block.RegBlockMethod('InitializeConditions',    @InitConditions);
block.RegBlockMethod('Update',                  @Update);
block.RegBlockMethod('Outputs',                 @Output);
block.RegBlockMethod('Terminate',               @Terminate);


function DoPostPropSetup(block)
%% Setup Dwork
block.NumDworks = 3;

% Dwork(1) holds the noise vector
block.Dwork(1).Name = 'noiseVector';
block.Dwork(1).Dimensions      = block.DialogPrm(3).Data;
block.Dwork(1).DatatypeID      = 0;
block.Dwork(1).Complexity      = 'Real';
block.Dwork(1).UsedAsDiscState = true;

% Dwork(2) holds each element of the noise vector
block.Dwork(2).Name = 'noiseVectorEl';
block.Dwork(2).Dimensions      = 1;
block.Dwork(2).DatatypeID      = 0;
block.Dwork(2).Complexity      = 'Real';
block.Dwork(2).UsedAsDiscState = true;

% Dwork(3) is a counter
block.Dwork(3).Name = 'currentIndex';
block.Dwork(3).Dimensions      = 1;
block.Dwork(3).DatatypeID      = 0;
block.Dwork(3).Complexity      = 'Real';
block.Dwork(3).UsedAsDiscState = true;
%endfunction



function InitConditions(block)
%% Initialize Dwork
block.Dwork(3).Data = 0;
mean_noise=block.DialogPrm(1).Data; %%noise mean
variance_noise=block.DialogPrm(2).Data; %% noise variance
std_noise = sqrt(variance_noise);%% noise std. dev
simlen=block.DialogPrm(3).Data; % simulation time in milliseconds; 
                                % so for 1 minute, the entry will be 60000

flag = block.DialogPrm(4).Data; %% decision for constant input (flag=0) OR noisy input (flag=1)
if (flag == 0)
    block.Dwork(2).Data = mean_noise;
    
    
elseif (flag == 1)
    r= randn(1, simlen);
    R = (((r-mean(r)) ./ std(r)) .* std_noise) + mean_noise;
    block.Dwork(1).Data = R;
    block.Dwork(2).Data = block.Dwork(1).Data(block.Dwork(3).Data+1);
end
%endfunction


function Output(block)
block.OutputPort(1).Data = block.Dwork(2).Data;
%endfunction

function Update(block)

if (block.DialogPrm(4).Data==1)
    x= block.Dwork(3).Data;
    x=x+1;
    if (x>length(block.Dwork(1).Data))
        return;
    else
        
        block.Dwork(2).Data = block.Dwork(1).Data(x);
        block.Dwork(3).Data =  x;
    end
end
%endfunction

function Terminate(block)
%endfunction

%endfunction setup

Loading data, please wait...