Inferring connection proximity in electrically coupled networks (Cali et al. 2007)

 Download zip file 
Help downloading and running models
In order to explore electrical coupling in the nervous system and its network-level organization, it is imperative to map the electrical synaptic microcircuits, in analogy with in vitro studies on monosynaptic and disynaptic chemical coupling. However, walking from cell to cell over large distances with a glass pipette is challenging, and microinjection of (fluorescent) dyes diffusing through gap-junctions remains so far the only method available to decipher such microcircuits even though technical limitations exist. Based on circuit theory, we derived analytical descriptions of the AC electrical coupling in networks of isopotential cells. We then proposed an operative electrophysiological protocol to distinguish between direct electrical connections and connections involving one or more intermediate cells. This method allows inferring the number of intermediate cells, generalizing the conventional coupling coefficient, which provides limited information. We provide here some analysis and simulation scripts that used to test our method through computer simulations, in vitro recordings, theoretical and numerical methods. Key words: Gap-Junctions; Electrical Coupling; Networks; ZAP current; Impedance.
1 . Calì C, Berger TK, Pignatelli M, Carleton A, Markram H, Giugliano M (2008) Inferring connection proximity in networks of electrically coupled cells by subthreshold frequency response analysis. J Comput Neurosci 24:330-45 [PubMed]
Model Information (Click on a link to find other models with that property)
Model Type: Neuron or other electrically excitable cell; Glia;
Brain Region(s)/Organism:
Cell Type(s):
Channel(s): I Na,t; I K; I Potassium;
Gap Junctions: Gap junctions;
Simulation Environment: NEURON; MATLAB; PSpice; Sspice Symbolic SPICE;
Model Concept(s): Methods;
Implementer(s): Giugliano, Michele [mgiugliano at];
Search NeuronDB for information about:  I Na,t; I K; I Potassium;
The present text file contains some information about the "Symbolic
Spice" circuit analysis tools and explorations, carried out in the
context of the paper:


"Inferring connection proximity in networks of electrically coupled
cells by subthreshold frequency response analysis"

Corrado Cali', Thomas K. Berger, Michele Pignatelli, Alan Carleton,
Henry Markram, and Michele Giugliano

Journal of Computational Neuroscience (in press)

Corresponding Author:
Dr. Michele Giugliano
EPFL SV BMI LNMC, Station 15, CH-1015 Lausanne (CH)
Phone: +41-76-569-0648, Fax: +41-21-693-5350, 

In the studies performed by Giugliano and collaborators, it soon
became clear that the availability of a circuit simulation program for
linear ac *symbolic* analysis would have represented a crucial step
towards the numerical and theoretical confirmation of the method
proposed in the above paper.

In the last decades, a lot of software for linear and non-linear
circuit simulation and design was proposed.  Historically, SPICE is
the the most famous and it originated from the EECS Department of the
University of California at Berkeley. Electrical circuits are
described in an abstract textual description language and may contain
resistors, capacitors, inductors, mutual inductors, independent
voltage and current sources, four types of dependent sources, lossless
and lossy transmission lines, switches, uniform distributed RC lines,
as well as semiconductor devices such as diodes, BJTs, JFETs, MESFETs,
and MOSFETs.


In the 90s, the groups of Prof. Gregory M. Wierzba and many others
published several papers on the automatic symbolic analysis and
approximation. SSPICE, Copyright 1991 by Michigan State University
Board of Trustees, is one such successful proposal. Accepting
input files in the same SPICE format, SSPICE performs a symbolic AC
analysis. Symbolic determinants are sorted with the additional option
of numeric evaluation. Although, SSPICE offers a many low and high
frequency symbolic transistor models as well as some linear ICs, only
linear networks composed of resistors and capacitors have been
implemented. Although SSPICE was born as a commercial product, a
functional demo version is available from

The task of Giugliano and collaborators was then to write a very
simple script to generate a "netlist" ASCII file, containing the
formal description of the network. Below we exemplify and fully
comment one of the many scripts employed. It is written in MATLAB as
it will also perform some 'analysis' of the results of
SSPICE. Nevertheless, rewriting it in any programming language or
scripting language is possible.

Lausanne, 16 Oct 2007 - Michele Giugliano, PhD

% ladder1D_nearest.m
% (c) 2007, Michele Giugliano, PhD -,
% Lausanne, Feb 21st 2007
% This script automagically generates a SSPICE compatible netlist, for the case of
% finite, 1-dimensional RC ladder network with nearest neighbor connectivity - as a
% model of a linear chain of electrically coupled neurons (see the sketch below; nodes are
% numbered accordingly).
%     1        2 ...
%    |--|--R--...
%    R  C
%    |  |
%    0 - ---------------ground
clear all;		% clear the memory
close all;		% close all open files, figures, etc.
clc;			% clear the MATLAB window

N   = 60;        % Number of RC-groups..	<--------- NETWORK SIZE !!!
stim_node = 10;  % Node where the external, probing, current is injected (see Cali' et al., 2008)..

fp  = fopen('L.cir', 'w');				% a file is created and it will contain the netlist
out = sprintf('LADDER NETWORK (%d)', N);  	% the netlist format is simple but one must conform to it.
fprintf(fp,'%s\n', out);				% netlist start with a comment

node = 1;							% An iterative definition of all the 'nodes'..
for i=1:N,							%

 val = rand * (150. - 75.) + 75.;			% Random values are assigned to components of the circuit.
 out = sprintf('R%d %d 0 %fM', i, node, val);  
 fprintf(fp,'%s\n', out);

 eval(sprintf('G%d = %f;', i, 1./val));		% For later analysis, I make the actual value available to MATLAB

 val = rand * (300. - 50.) + 50.;
 out = sprintf('C%d %d 0 %fp', i, node, val);  
 fprintf(fp,'%s\n', out);

 eval(sprintf('C%d = %f;', i, val)); 		% For later analysis, I make the actual value available to MATLAB

 if (i<N)
  val = rand * (60. - 20.) + 20.;
  out = sprintf('Rg%d %d %d %fp', i, node, node+1, val);  fprintf(fp,'%s\n', out);

  eval(sprintf('GG%d = %f;', i, 1./val));		% For later analysis, I make the actual value available to MATLAB

 node = node + 1;   
end % for
								% The definition of the netlist is complemented by other commands.
out = sprintf('Iin %d 0 AC 1', stim_node);  fprintf(fp,'%s\n', out);
out = sprintf('.AC DEC 500 5K .5MEG');  fprintf(fp,'%s\n', out);
out = sprintf('.OPTIONS LIMPTS=1500');  fprintf(fp,'%s\n', out);
out = sprintf('.PRINT AC V(2)');        fprintf(fp,'%s\n', out);
out = sprintf('.END');                  fprintf(fp,'%s\n', out);



if (exist('L.DET', 'file')~=2),		% The output file produced by SSPICE does not exist!
 disp('Launch SSPICE now and then re-run this script..'); 

I = zeros(N, 1);
s = sym('s');
Y = sym('Y');

%-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= SSPICE OUTPUT FILE PARSING
fp = fopen('L.DET', 'r');
fgetl(fp);	fgetl(fp);	fgetl(fp);	fgetl(fp);	fgetl(fp);
tmp = fgetl(fp);
 k   = strfind(tmp, 's');
 if (~isempty(k))
  tmq = sprintf('%ss*%s', tmp(1:k-2), tmp(k+1:end));
  k   = strfind(tmq, '=');
  tmq = sprintf('%svpa(%s, 5);', tmq(1:k), tmq(k+1:end));
  k   = strfind(tmp, '=');
  tmq = sprintf('%svpa(%s, 5);', tmp(1:k), tmp(k+1:end)); 
 tmp = fgetl(fp);

V = inv(Y) * I;
[n,d] = numden(vpa(V,5));

match = 0;

disp(sprintf('STIMULATION ON CELL %d', stim_node));

for i=1:N,
 a = sym2poly(n(i));  a = a(1);
 b = sym2poly(d(i));  b = b(1);
 n(i) = n(i)/a;       d(i)  = d(i)/b;
 distance = length(sym2poly(d(i))) - length(sym2poly(n(i)));
 disp(sprintf('Recording on cell %d (distance is %d): estimated %d !', i, abs(stim_node-i), distance-1));
 if (abs(stim_node-i) == (distance-1)), match = match + 1; end
disp(sprintf('Success: %d %%', 100*match/N));


figure(1); clf; hold on;
for i=1:N,
 f = [0.000001 0.0001 0.001 0.01 0.1 1 10 100 200 300 400 500 800 1000 1500];
 ss = double(sqrt(-1) * f);
 M = n(i)/d(i);
 AA = subs(M, 's', ss);
 loglog(f, abs(AA));
 set(gca, 'YScale', 'log', 'XScale', 'log')

Loading data, please wait...