//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% // // NOTICE OF COPYRIGHT AND OWNERSHIP OF SOFTWARE // // Copyright 2007, The University Of Pennsylvania // School of Engineering & Applied Science. // All rights reserved. // For research use only; commercial use prohibited. // Distribution without permission of Maciej T. Lazarewicz not permitted. // mlazarew@seas.upenn.edu // //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% // Definition of the synaptic properties in the network begintemplate SynParam public preCell, postCell, synName, tao1, tao2, Erev, synLocSec, synLoc, Npre, gmax, gmaxUnits, delay, synID, globalID, modFileName, r, start, spikedur, spikefreq, normalmean, normalstd, weight, poisson_mean strdef preCell, postCell, synName, modFileName proc init() { preCell = $s1 // Name of the presynaptic cell, e.g. Pyr postCell = $s2 // Name of the postsynaptic cell, e.g Pyr synName = $s3 // Usually the type of the synamse eg. AMPA tao1 = $4 tao2 = $5 Erev = $6 modFileName = $s7 // name of the used mod file, it is used in the syn.tmp synLocSec = $8 // ID 0->soma, 1->dendrite synLoc = $9 // [0-1] Npre = $10 // Number of the presynaptic connections from Pyr gmax = $11 // gmax for connections from Pyr gmaxUnits = $12 // gmax for connections from Pyr delay = $13 // delay for connections from Pyr r = $14 // NMDA/AMPA ratio synID = -2 //$14 // synaptic ID used to define the connections in the conn.dat files globalID = $15 // Global ID to identify the entity in SynParamSet } endtemplate SynParam // This object keeps the description of synapses in the public list "synSet" begintemplate SynParamSet public synSet objref synSet strdef preCell, postCell, synName, tmpstr, tmpstr2, modFileName proc init() { local i localobj fo, strFun tao1 = 0 tao2 = 0 Erev = 0 synLocSec = 0 synLoc = 0 Npre = 0 gmax = 0 gmaxUnits = 0 delay = 0 r = 0 synSet = new List() strFun = new StringFunctions() // READ synapses fo = new File("parameters/synapses.par") fo.ropen() while(!fo.eof()) { fo.gets(tmpstr) // Find in tmpstr all that follows non-blank character, and store it in tmpstr2 strFun.tail(tmpstr, "[^\t]", tmpstr2) // Remove end of the line strFun.head(tmpstr2, "\n", tmpstr2) // Process data if nonepty line if (strFun.len(tmpstr2)>0 && strFun.substr(tmpstr, "//")==-1) { sscanf(tmpstr, "%[^,], %[^,], %[^,], %lf, %lf, %lf, %[^,], %d, %lf, %d, %lf, %d, %*lf, %*lf\n", preCell, postCell, synName, &tao1, &tao2, &Erev, modFileName, &synLocSec, &synLoc, &Npre, &gmax, &gmaxUnits) sscanf(tmpstr, "%*[^,], %*[^,], %*[^,], %*lf, %*lf, %*lf, %*[^,], %*d, %*lf, %*d, %*lf, %*d, %lf\n, %lf", &delay, &r) synSet.append(new SynParam( preCell, postCell, synName, tao1, tao2, Erev, modFileName, synLocSec, synLoc, Npre, gmax, gmaxUnits, delay, r, synSet.count())) //printf("%s, %s, %s, %lf, %lf, %lf, %s, %d, %lf, %d, %lf, %d, %lf\n", preCell, postCell, synName, tao1, tao2, Erev, modFileName, synLocSec, synLoc, Npre, gmax, gmaxUnits, delay, synSet.count()) } } fo.close() } endtemplate SynParamSet begintemplate NoisySynParam public postCell, modFileName, start, tao1, tao2, Erev, synLocSec, synLoc, spikedur, spikefreq, normalmean, normalstd, weight, poisson_mean strdef postCell, modFileName proc init() { postCell = $s1 // Name of the postsynaptic cell, e.g Pyr modFileName = $s2 // name of the used mod file, it is used in the syn.tmp start = $3 tao1 = $4 tao2 = $5 Erev = $6 synLocSec = $7 synLoc = $8 spikedur = $9 spikefreq = $10 normalmean = $11 normalstd = $12 weight = $13 poisson_mean = $14 } endtemplate NoisySynParam begintemplate NoisySynParamSet public noisySynSet objref noisySynSet strdef postCell, tmpstr, tmpstr2, modFileName proc init() { local i localobj fo, strFun start = 0 tao1 = 0 tao2 = 0 Erev = 0 synLocSec = 0 synLoc = 0 spikedur = 0 spikefreq = 0 normalmean = 0 normalstd = 0 weight = 0 poisson_mean = 0 noisySynSet = new List() strFun = new StringFunctions() // READ synapses fo = new File("parameters/noisysynapses.par") fo.ropen() while(!fo.eof()) { fo.gets(tmpstr) // Find in tmpstr all that follows non-blank character, and store it in tmpstr2 strFun.tail(tmpstr, "[^\t]", tmpstr2) // Remove end of the line strFun.head(tmpstr2, "\n", tmpstr2) //print tempstr, tempstr2 // Process data if nonepty line if (strFun.len(tmpstr2)>0 && strFun.substr(tmpstr, "//")==-1) { sscanf(tmpstr, "%[^,], %[^,], %lf, %lf, %lf, %lf, %d, %lf, %lf, %lf, %lf, %lf, %*lf, %*lf\n", postCell, modFileName, &start, &tao1, &tao2, &Erev, &synLocSec, &synLoc, &spikedur, &spikefreq, &normalmean, &normalstd, &weight, &poisson_mean) //why this second line? the '*' consumes an element, but I don' understandn the point here...and why the placement of '\n'? sscanf(tmpstr, "%*[^,], %*[^,], %*lf, %*lf, %*lf, %*lf, %*d, %*lf, %*lf, %*lf, %*lf, %*lf, %lf\n, %lf", &weight, &poisson_mean) //template for 'SynParam' defined above noisySynSet.append(new NoisySynParam( postCell, modFileName, start, tao1, tao2, Erev, synLocSec, synLoc, spikedur, spikefreq, normalmean, normalstd, weight, poisson_mean)) //printf("%s, %s, %s, %lf, %lf, %lf, %s, %d, %lf, %d, %lf, %d, %lf\n", preCell, postCell, synName, tao1, tao2, Erev, modFileName, synLocSec, synLoc, Npre, gmax, gmaxUnits, delay, synSet.count()) } } fo.close() } endtemplate NoisySynParamSet