function connect_to_electrodes (pathname)
str pathname
int msgcount, msgindex
int total_number_axial_msgs = 0
int diffamp_index = 0
str sender
// count how many diffamps are needed
foreach name ({el {pathname}/##[][TYPE=compartment]})
msgcount = {getmsg {name} -incoming -count}
// echo {msgcount}
for (msgindex = 0; msgindex < {msgcount}; msgindex = {msgindex} + 1)
if (! {strcmp {getmsg {name} -in -type {msgindex}} "AXIAL"})
// echo {name} {msgindex} AXIAL
total_number_axial_msgs = {total_number_axial_msgs} + 1
elif (! {strcmp {getmsg {name} -in -type {msgindex}} "RAXIAL"})
// echo {name} {msgindex} RAXIAL
total_number_axial_msgs = {total_number_axial_msgs} + 1
end
// echo {getmsg {name} -in -type {msgindex}}
end
end
echo total number of AXIAL and RAXIAL msgs is {total_number_axial_msgs}
// create the diffamp array
if ({!{exists /diffamp}})
create diffamp /diffamp
end
createmap /diffamp /diffamp_array_{pathname} {total_number_axial_msgs} 1
// position each diffamp element to the corresponding compartment, and make msgs
foreach name ({el {pathname}/##[][TYPE=compartment]})
msgcount = {getmsg {name} -incoming -count}
// echo {msgcount}
for (msgindex = 0; msgindex < {msgcount}; msgindex = {msgindex} + 1)
if (! {strcmp {getmsg {name} -in -type {msgindex}} "AXIAL"})
// echo {name} {msgindex} AXIAL {diffamp_index}
setfield /diffamp_array_{pathname}/diffamp[{diffamp_index}] \
x {getfield {name} x} \
y {getfield {name} y} \
z {getfield {name} z}
addmsg {name} /diffamp_array_{pathname}/diffamp[{diffamp_index}] PLUS Vm
sender = {getmsg {name} -in -source {msgindex}}
addmsg {sender} /diffamp_array_{pathname}/diffamp[{diffamp_index}] MINUS Vm
setfield /diffamp_array_{pathname}/diffamp[{diffamp_index}] \
gain {1.0 / {getfield {name} Ra}} saturation 10e10
diffamp_index = {diffamp_index} + 1
elif (! {strcmp {getmsg {name} -in -type {msgindex}} "RAXIAL"})
// echo {name} {msgindex} RAXIAL {diffamp_index}
setfield /diffamp_array_{pathname}/diffamp[{diffamp_index}] \
x {getfield {name} x} \
y {getfield {name} y} \
z {getfield {name} z}
addmsg {name} /diffamp_array_{pathname}/diffamp[{diffamp_index}] PLUS Vm
sender = {getmsg {name} -in -source {msgindex}}
addmsg {sender} /diffamp_array_{pathname}/diffamp[{diffamp_index}] MINUS Vm
setfield /diffamp_array_{pathname}/diffamp[{diffamp_index}] \
gain {1.0 / {getfield {sender} Ra}} saturation 10e10
diffamp_index = {diffamp_index} + 1
end
// echo {getmsg {name} -in -type {msgindex}}
end
end
// echo {name}
// make msgs from {pathname} diffamps to electrodes
float el_x, el_y, el_z // (x,y,z) coordinates of electrode
float cp_x, cp_y, cp_z // (x,y,z) coordinates of compartment
float distance // distance between electrode and compartment
str name, name2, elem
foreach name2 ({el /electrode_array/##[][TYPE=efield]})
echo making msgs from {pathname} to electrode {name2}
el_x = {getfield {name2} x}
el_y = {getfield {name2} y}
el_z = {getfield {name2} z}
foreach name ({el /diffamp_array_{pathname}/##[][TYPE=diffamp]})
cp_x = {getfield {name} x}
cp_y = {getfield {name} y}
cp_z = {getfield {name} z}
distance = {sqrt {{pow {{cp_x} - {el_x}} 2.0} + \
{pow {{cp_y} - {el_y}} 2.0} + \
{pow {{cp_z} - {el_z}} 2.0}}}
// echo {distance}
// elem = ({findsolvefield {name}/../solve {name} Im})
// echo {elem}
// addmsg {name}/../solve /electrode[{index}] CURRENT {elem} {distance}
addmsg {name} {name2} CURRENT output {distance}
end // foreach diffamp
end // foreach efield
end // function