// genesis // Function make_fibres (pathname). // Creates in {pathname} three populations of fibres: feedforward, feedback intracolumn, // feedback intercolumn. // Each population consists of randomspike elements with associated diffamps. // The diffamps send RATE msgs to their respective randomspikes. // In other scripts, the diffamps will get PLUS messages, e.g.feedforward fibres // will get input from Harsch-Robinson_input.g, whereas the randsomspikes will be // connected (in Excitatory_fibers.g and Inhibitory_fibres.g) to synapses on the L5P cell. // Actually, for each compartment on L5P, one fibre is generated, (almost) randomly // assigned to one of the three classes and put at the same position as the compartment. int index function make_fibres (pathname) str pathname // Make library protoptypes ***** if ({!{exists /library}}) create neutral /library disable /library end if ({!{exists /library/FF_fibre}}) // create randomspike2 /library/FF_fibre // randomspike 2 does not exist in official release create randomspike /library/FF_fibre // setfield ^ rate {E_fibre_rate} // abs_refract 0.001 // rate_type RS_EFFECTIVE create randomspike /library/FBintra_fibre create randomspike /library/FBinter_fibre create diffamp /library/FF_diffamp setfield ^ plus 0 minus 0 saturation 10e10 create diffamp /library/FBintra_diffamp setfield ^ plus 0 minus 0 saturation 10e10 create diffamp /library/FBinter_diffamp setfield ^ plus 0 minus 0 saturation 10e10 end // Make subpopulations ***** echo Making {pathname} and subpopulations if(!{exists {pathname}}) create neutral {pathname} end create neutral {pathname}/FF create neutral {pathname}/FBintra create neutral {pathname}/FBinter echo The fibres createmap /library/FF_fibre {pathname}/FF \ 686 1 -delta 0 0 -origin 0 0 createmap /library/FBintra_fibre {pathname}/FBintra \ 686 1 -delta 0 0 -origin 0 0 createmap /library/FBinter_fibre {pathname}/FBinter \ 686 1 -delta 0 0 -origin 0 0 echo The diffamps createmap /library/FF_diffamp {pathname}/FF \ 686 1 -delta 0 0 -origin 0 0 createmap /library/FBintra_diffamp {pathname}/FBintra \ 686 1 -delta 0 0 -origin 0 0 createmap /library/FBinter_diffamp {pathname}/FBinter \ 686 1 -delta 0 0 -origin 0 0 // works only for randomspike2; not sure this exists in Genesis2.3 // setfield {pathname}/E_fibre[] seed1 0 -increment 9 100 // setfield {pathname}/E_fibre[] seed2 0 -increment 9e-2 100 // Position fibres at corresponding L5P compartments ***** echo Calculating positions of {pathname} str subpath ce {pathname} index = 0 foreach name ({el /L5P/p#[][TYPE=compartment]}) // echo {name} if ({{index % 3} == 0}) subpath = "FF/FF_fibre" elif ({{index % 3} == 1}) subpath = "FBintra/FBintra_fibre" else subpath = "FBinter/FBinter_fibre" end setfield {subpath}[{index / 3}] \ x {getfield {name} x} \ y {getfield {name} y} \ z {getfield {name} z} // echo {name} {index} {subpath} {index / 3} // OK works index = {index + 1} // echo index = {index} // OK 2058 dendritic compartments end // Connect diffamps to fibres ***** echo Sending RATE msgs from diffmaps to fibres for (index = 0; index < 686; index = {index} + 1) setfield FF/FF_diffamp[{index}] x {getfield FF/FF_fibre[{index}] x} \ y {getfield FF/FF_fibre[{index}] y} \ z {getfield FF/FF_fibre[{index}] z} setfield FBintra/FBintra_diffamp[{index}] x {getfield FBintra/FBintra_fibre[{index}] x} \ y {getfield FBintra/FBintra_fibre[{index}] y} \ z {getfield FBintra/FBintra_fibre[{index}] z} setfield FBinter/FBinter_diffamp[{index}] x {getfield FBinter/FBinter_fibre[{index}] x} \ y {getfield FBinter/FBinter_fibre[{index}] y} \ z {getfield FBinter/FBinter_fibre[{index}] z} addmsg FF/FF_diffamp[{index}] FF/FF_fibre[{index}] RATE output addmsg FBintra/FBintra_diffamp[{index}] FBintra/FBintra_fibre[{index}] RATE output addmsg FBinter/FBinter_diffamp[{index}] FBinter/FBinter_fibre[{index}] RATE output end end