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