Effects of spinal cord stimulation on WDR dorsal horn network (Zhang et al 2014)

 Download zip file   Auto-launch 
Help downloading and running models
Accession:168414
" ... To study the mechanisms underlying SCS (Spinal cord stimulation), we constructed a biophysically-based network model of the dorsal horn circuit consisting of interconnected dorsal horn interneurons and a wide dynamic range (WDR) projection neuron and representations of both local and surround receptive field inhibition. We validated the network model by reproducing cellular and network responses relevant to pain processing including wind-up, A-fiber mediated inhibition, and surround receptive field inhibition. ..." See paper for more.
Reference:
1 . Zhang TC, Janik JJ, Grill WM (2014) Modeling effects of spinal cord stimulation on wide-dynamic range dorsal horn neurons: influence of stimulation frequency and GABAergic inhibition. J Neurophysiol 112:552-67 [PubMed]
Model Information (Click on a link to find other models with that property)
Model Type: Realistic Network;
Brain Region(s)/Organism:
Cell Type(s): Wide dynamic range neuron;
Channel(s):
Gap Junctions:
Receptor(s): GabaA; AMPA; NMDA; Glutamate; Glycine;
Gene(s):
Transmitter(s):
Simulation Environment: NEURON;
Model Concept(s):
Implementer(s): Zhang, Tianhe [tz5@duke.edu];
Search NeuronDB for information about:  GabaA; AMPA; NMDA; Glutamate; Glycine;
%MassPlotter_NonSCS.m

%Program structured similarly to MassPlotter_SCS but meant to plot results
%from wind-up and Woolf/Wall tests conducted using new iteration of model.

%Run this AFTER Foreman simulation is done to generate plots.

clear
close all
%CHANGEBLOCK
%Load vital variables
filenameA = 'SGSCS_Cell';
filenameB = 'T_Cell';
SourceID = {'A', 'C'};
NumCells = 1;
Interval = 1000./1;
HeatMapBins = 10;
%[GuideNums GuideNames] = xlsread('RunRecordSheet.xls');
%GuideVector = [0.1 0.2 0.5 1 2 5 10 20 50 100];
%SpikeBasisMain = 'CEX_Parameterization_10Tau';
%Due to size of EP Files, only load times specified within TimeRange with a
%specified dt
dt = 0.0125;
NumVars = 3; %Number of variables (co)varied in experiment.
%CHANGEBLOCK
PlotTitle = 'Foreman Response'

tstart = 16000;
tend = 41000;

Foreman1_XAxis = [0 0.14 0.16 0.33 0.69 1.45]./1.17;
Foreman1_YAxis = [2.63 0.25 0.4 1.55 1.66 2.3]./2.63;

Foreman2_XAxis = [0 0.22 0.44 0.69 0.86 2.19 3.53 4.83]./4.39;
Foreman2_YAxis = [4.42 0.93 0.80 2.33 2.37 3.34 3.63 3.60]./4.42;

Foreman3_XAxis = [0 0.14 0.98 1.64 2.61 3.32]./3.2;
Foreman3_YAxis = [3.25 0 0 1.62 3.12 4.28]./3.25;

Foreman4_XAxis = [0 0.14 2.56 3.2]./3.25;
Foreman4_YAxis = [3.25 0 0 3.25*0.4]./3.25;


%Step 2: Load IN and WDR cell spike times.

%Run Folder Weight Type
%24 05 Inter
%33 05 Input
%35 2 Input
%44 2 Inter

TotalHist = zeros(1, length(0:HeatMapBins:Interval));
        
P = 1 %In other versions of code, multiple Foreman bar plots could be plotted at same time.  This is remnant of this; simplified for new users.
AllSpikesLumped = [];    

for a = 1:NumCells
    
    fid = fopen(['Foreman SCS\' filenameA '_' num2str(a) '_Times.dat']);
    TempVar = fread(fid, 'double');
    eval([filenameA num2str(a) 'Times = TempVar;'])
    eval([filenameA num2str(a) 'IndexTracker = zeros(1, length(TempVar))+(2.*a-1);']);
    fclose(fid);
    fidB = fopen(['Foreman SCS\' filenameB '_' num2str(a) '_Times.dat']);
    TempVar2 = fread(fidB, 'double');
    eval([filenameB num2str(a) 'Times = TempVar2;'])
    eval([filenameB num2str(a) 'IndexTracker = zeros(1, length(TempVar2))+(2.*a);']);
    fclose(fidB);
end
    

%Need to split Spike Times into vectors corresponding to "Interval" sized
%blocks.
WithinIntervalMean = zeros(1, 101);
for A = (tstart/Interval):(tend/Interval)
    WithinIntervalIndices = find((T_Cell1Times>(Interval*(A-1))).*(T_Cell1Times<(Interval*A)))';
    WithinIntervalSpikes = T_Cell1Times(WithinIntervalIndices)';
    WithinIntervalSpikes = WithinIntervalSpikes-(A-1)*Interval;
    AllSpikesLumped = [AllSpikesLumped WithinIntervalSpikes];
    if ~isempty(WithinIntervalSpikes)
    WithinIntervalBins = histc(WithinIntervalSpikes, (0:HeatMapBins:(Interval)));
    if mean(WithinIntervalBins(1:10))~=0
    WithinIntervalMean = 1./(length((tstart/Interval):(tend/Interval))).*(WithinIntervalBins./(mean(WithinIntervalBins(1:10))))+WithinIntervalMean;
    mean(WithinIntervalBins(1:10))
    end
    end
end

%Build PSTHs.
AllSpikesSorted = sort(AllSpikesLumped);
eval(['PreHist_Run' num2str(P) ' = histc(AllSpikesSorted, (0:HeatMapBins:(Interval)));']);
eval(['PreHist_Run' num2str(P) '_Mean = PreHist_Run' num2str(P) './mean(PreHist_Run' num2str(P) '(1:10));'])
if ~isempty(AllSpikesSorted);
TotalHist(P,:) = histc(AllSpikesSorted, (0:HeatMapBins:(Interval)));
else
    TotalHist(P,:) = zeros(1, length(0:HeatMapBins:Interval))
end
%TotalHistAvg(P,:) = eval(['PreHist_Run' num2str(P) '_Mean'])./(mean(TotalHist(P,(1:10)))).*100; %TotalHist(P,:)./(mean(TotalHist(P,(1:10)))).*100;
TotalHistAvg(P,:) = eval(['PreHist_Run' num2str(P) '_Mean']).*100;
TotalHist(:, 11) = TotalHist(:, 11)+25; %+25 consistent with Foreman et al. (1976) wherein large initial spike at SCS time included their artifact detections.

TotalHistAvg(:,11) = 100;

%Line plot.
figure
subplot(3,5,[3 4 7 8 ])
hold on
for R = [1]
plot(0:10:100, TotalHistAvg(R, (11:21)),'LineWidth', 2, 'Color', 'k')
end
plot(Foreman1_XAxis.*100, Foreman1_YAxis.*100,  'LineWidth', 2, 'Color', [0.7 0.7 0.7])
plot(Foreman2_XAxis.*100, Foreman2_YAxis.*100,  'LineWidth', 2, 'Color', [0.7 0.7 0.7])
plot(Foreman3_XAxis.*100, Foreman3_YAxis.*100,  'LineWidth', 2, 'Color', [0.7 0.7 0.7])
plot(Foreman4_XAxis.*100, Foreman4_YAxis.*100, 'LineWidth', 2, 'Color', [0.7 0.7 0.7])
plot([0 100], [100 100], '-k')

%axis equal
set(gca, 'XTick', [0 50 100])
set(gca, 'YTick', [0 40 80 120 160])
xlim([0 100])
ylim([0 180])
%Bar plot.
subplot(3, 5, [11:15])
bar((1:(length(TotalHist(R,:))-1)).*10, TotalHist(R,(1:100)), 'k')    
xlim([0 500])
ylim([0 60])






Loading data, please wait...