//////////////////////////////////////////////////////////////////////////// // // Creates different types of input that is injected into a FS-cell // // Based on Genesis Cable-tutorial // // Johannes Hjorth, august 2005 // hjorth@nada.kth.se // //////////////////////////////////////////////////////////////////////////// function makeInjectInput (name, pulseStart, pulseEnd, current) str name float pulseStart float pulseEnd float current echo "makeInjectInput "{name} str path = "/input/"@{name} if(!{exists /input}) create neutral /input end create pulsegen {path} setfield {path} level1 {current} \ width1 {pulseEnd-pulseStart} \ delay1 {pulseStart} end //////////////////////////////////////////////////////////////////////////// function makeInjectInputNoRepeat (name, pulseStart, pulseEnd, current, maxTime) str name float pulseStart float pulseEnd float current echo "makeInjectInput "{name} str path = "/input/"@{name} if(!{exists /input}) create neutral /input end create pulsegen {path} setfield {path} level1 {current} \ width1 {pulseEnd-pulseStart} \ delay1 {pulseStart} \ delay2 {maxTime} end //////////////////////////////////////////////////////////////////////////// function connectInjectInput(name, target) str name, target echo "connectInjectInput "{name}" "{target} str path = "/input/"@{name} addmsg {path} {target} INJECT output end //////////////////////////////////////////////////////////////////////////// // Loads spiketrain from file for later connection to FS cell function loadSpikeTrain(fileName, inputName) str fileName str inputName str inputPath = "/insignal/"@{inputName} if(!{exists /insignal}) create neutral /insignal end echo "Creating "{inputPath} create timetable {inputPath} setfield {inputPath} maxtime {maxTime} act_val 1.0 \ method 4 fname {fileName} call {inputPath} TABFILL // Create spikes from timetable create spikegen {inputPath}/spikes setfield {inputPath}/spikes output_amp 1 thresh 0.5 abs_refract 0.0001 addmsg {inputPath} {inputPath}/spikes INPUT activation end //////////////////////////////////////////////////////////////////////////// function connectSpikeTrain(inputName, cellPath, compType, channel, pCon) str inputName str cellPath str compType str channel // ie, AMPA, GABA, NMDA... float pCon // Probability that a compartment will recieve connection str srcPath str destPath int conCtr = 0 // echo "Use /fs[] instead of /fs if you want to connect input to ALL cells" srcPath = "/insignal/"@{inputName}@"/spikes" foreach destPath ({el {cellPath}/{compType}#/{channel}_channel} \ {el {cellPath}/{compType}#/{compType}#/{channel}_channel}) if({rand 0 1} < {pCon}) //echo "Connecting "{srcPath}" with "{destPath} addmsg {srcPath} {destPath} SPIKE conCtr = {conCtr + 1} end end echo "Total of "{conCtr}" connections: "{srcPath}"->"{cellPath}"("{compType}" "{channel}")" end //////////////////////////////////////////////////////////////////////////// function connectNamedSpikeTrain(inputName, compPath, channel) str inputName str compType str channel // ie, AMPA, GABA, NMDA... str srcPath str destPath int conCtr = 0 // echo "Use /fs[] instead of /fs if you want to connect input to ALL cells" srcPath = "/insignal/"@{inputName}@"/spikes" destPath = {compPath}@"/"@{channel}@"_channel" addmsg {srcPath} {destPath} SPIKE end //////////////////////////////////////////////////////////////////////////// function clearSpikeTrainConnections(inputName) str inputName str inputPath = "/insignal/"@{inputName}@"/spikes" int msgCtr int msgNum msgCtr = {getmsg {inputPath} -out -count} echo "Clearing connections from "{inputPath} for(msgNum = 0; msgNum < msgCtr; msgNum = msgNum + 1) deletemsg {inputPath} 0 -out end end //////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////