Skip to content

Commit

Permalink
Merge pull request #252 from Neurosim-lab/development
Browse files Browse the repository at this point in the history
PR from development to master - VERSION 0.7.3
  • Loading branch information
salvadord authored Aug 31, 2017
2 parents 078e708 + 226d8aa commit 9ff475f
Show file tree
Hide file tree
Showing 12 changed files with 341 additions and 137 deletions.
17 changes: 17 additions & 0 deletions CHANGES.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,20 @@
# Version 0.7.3

- Option to create section lists based on y displacement from soma (addCellParamsSecList)

- Converted popParams, cellParams etc to object of their own class and added method to set param

- Added 'disynapticBias' option to increase probability of B->C conns if A->B and A->C exist

- Added function analysis.calculateDisynaptic() to count number of disynaptic conns (A->B, B->C and A->C)

- Added 1 second between batch job submission to avoid saturating scheduler

- Fixed bug: init randomizer so params with string-based random func are independent of cores

- Fixed bug for newer pyplot versions: replace 'linewidths' with 'lw'


# Version 0.7.2

- Improved NeuroML importing/exporting
Expand Down
33 changes: 25 additions & 8 deletions doc/source/reference.rst
Original file line number Diff line number Diff line change
Expand Up @@ -864,17 +864,34 @@ Analysis-related functions
- Returns figure handles
* **plotShape** (showSyns = True, include = [], style = '.', siz=10, figSize = (10,8), saveData = None, saveFig = None, showFig = True):
* **plotShape** (includePost = ['all'], includePre = ['all'], showSyns = False, synStyle = '.', synSiz=3, dist=0.6, cvar=None, cvals=None, iv=False, ivprops=None, includeAxon=True, figSize = (10,8), saveData = None, saveFig = None, showFig = True):
Plot 3D cell shape using NEURON Interview PlotShape
Plot 3D cell shape using Matplotlib or NEURON Interviews PlotShape.
- *showSyns*: Show synaptic connections in 3D (True|False)
- *figSize*: Size of figure ((width, height))
- *saveData*: File name where to save the final data used to generate the figure (None|'fileName')
- *saveFig*: File name where to save the figure (None|'fileName')
- *showFig*: Whether to show the figure or not (True|False)
- *includePre*: List of presynaptic cells to consider when plotting connections (['all',|'allCells','allNetStims',|,120,|,'E1'|,('L2', 56)|,('L5',[4,5,6])])
- *includePost*: List of cells to show shape of (['all',|'allCells','allNetStims',|,120,|,'E1'|,('L2', 56)|,('L5',[4,5,6])])
- *synStyle*: Style of marker to show synapses (Matplotlib markers)
- *dist*: 3D distance (like zoom)
- *synSize*: Size of marker to show synapses
- *cvar*: Variable to represent in shape plot ('numSyns'|'weightNorm')
- *cvals*: List of values to represent in shape plot; must be same as num segments (list of size num segments; )
- *iv*: Use NEURON Interviews (instead of matplotlib) to show shape plot (True|False)
- *ivprops*: Dict of properties to plot using Interviews (dict)
- *includeAxon*: Include axon in shape plot (True|False)
- *showSyns*: Show synaptic connections in 3D (True|False)
- *figSize*: Size of figure ((width, height))
- *saveData*: File name where to save the final data used to generate the figure;
if set to True uses filename from simConfig (None|True|'fileName')
- *saveFig*: File name where to save the figure;
if set to True uses filename from simConfig (None|True|'fileName')
- *showFig*: Whether to show the figure or not (True|False)
- Returns figure handles
Examples of plotShape():
- cfg.analysis['plotShape'] = {'includePre': ['all'], 'includePost': [('PT5B',100)], 'cvar':'numSyns','saveFig': True, 'showFig': False, 'includeAxon': False}
- Returns figure handles
* **analysis.plotConn** (include = ['all'], feature = 'strength', orderBy = 'gid', figSize = (10,10), groupBy = 'pop', saveData = None, saveFig = None, showFig = True)
Expand Down
141 changes: 69 additions & 72 deletions examples/sandbox/sandbox.py
Original file line number Diff line number Diff line change
@@ -1,103 +1,100 @@
"""
params.py
netParams is a dict containing a set of network parameters using a standardized structure
simConfig is a dict containing a set of simulation configurations using a standardized structure
Contributors: [email protected]
"""

from netpyne import specs, sim

netParams = specs.NetParams() # object of class NetParams to store the network parameters
simConfig = specs.SimConfig() # object of class SimConfig to store the simulation configuration
from netpyne import specs
from netpyne import sim # import netpyne sim module


###############################################################################
#
# MPI HH TUTORIAL PARAMS
#
###############################################################################
netParams = specs.NetParams() # object of class NetParams to store the network parameters
cfg = specs.SimConfig() # object of class SimConfig to store the simulation configuration

###############################################################################
# NETWORK PARAMETERS
###############################################################################

# Population parameters
netParams.popParams['PYR'] = {'cellModel': 'HH', 'cellType': 'PYR', 'numCells': 5} # add dict with params for this pop
netParams.popParams['PYR2'] = {'cellModel': 'HH', 'cellType': 'PYR2', 'numCells': 5} # add dict with params for this pop

netParams.popParams['ExcPop'] = {'cellModel': 'HH', 'cellType': 'Exc','numCells': 50, 'yRange': [300, 500]} # add dict with params for this pop
netParams.popParams['InhPop'] = {'cellModel': 'HH', 'cellType': 'Inh','numCells': 50, 'yRange': [600, 800]} # add dict with params for this pop

# Cell parameters
## PYR cell properties
cellRule = {'conds': {'cellModel': 'HH', 'cellType': 'PYR'}, 'secs': {}} # cell rule dict
cellRule['secs']['soma'] = {'geom': {}, 'mechs': {}} # soma params dict
cellRule['secs']['soma']['geom'] = {'diam': 18.8, 'L': 18.8, 'Ra': 123.0} # soma geometry
cellRule['secs']['soma']['mechs']['hh'] = {'gnabar': 0.12, 'gkbar': 0.036, 'gl': 0.003, 'el': -70} # soma hh mechanism
cellRule['secs']['soma']['vinit'] = -71
netParams.cellParams['PYR'] = cellRule # add dict to list of cell params

## Cell property rules
cellRule = {'conds': {'cellType': 'Exc'}, 'secs': {}} # cell rule dict
cellRule['secs']['soma'] = {'geom': {}, 'mechs': {}} # soma params dict
cellRule['secs']['soma']['geom'] = {'diam': 15, 'L': 14, 'Ra': 120.0} # soma geometry
cellRule['secs']['soma']['mechs']['hh'] = {'gnabar': 0.12, 'gkbar': 0.036, 'gl': 0.003, 'el': -70} # soma hh mechanism
netParams.cellParams['Erule'] = cellRule # add dict to list of cell params

cellRule = {'conds': {'cellModel': 'HH', 'cellType': 'PYR2'}, 'secs': {}} # cell rule dict
cellRule['secs']['soma'] = {'geom': {}, 'mechs': {}} # soma params dict
cellRule['secs']['soma']['geom'] = {'diam': 18.8, 'L': 18.8, 'Ra': 123.0} # soma geometry
cellRule['secs']['soma']['mechs']['hh'] = {'gnabar': 0.12, 'gkbar': 0.036, 'gl': 0.003, 'el': -70} # soma hh mechanism
cellRule['secs']['soma']['vinit'] = -71
netParams.cellParams['PYR2'] = cellRule # add dict to list of cell params
cellRule = {'conds': {'cellType': 'Inh'}, 'secs': {}} # cell rule dict
cellRule['secs']['soma'] = {'geom': {}, 'mechs': {}} # soma params dict
cellRule['secs']['soma']['geom'] = {'diam': 10.0, 'L': 9.0, 'Ra': 110.0} # soma geometry
cellRule['secs']['soma']['mechs']['hh'] = {'gnabar': 0.12, 'gkbar': 0.036, 'gl': 0.003, 'el': -70} # soma hh mechanism
netParams.cellParams['Irule'] = cellRule # add dict to list of cell params

# Synaptic mechanism parameters
netParams.synMechParams['AMPA'] = {'mod': 'Exp2Syn', 'tau1': 0.1, 'tau2': 1.0, 'e': 0}
netParams.synMechParams['AMPA'] = {'mod': 'Exp2Syn', 'tau1': 0.8, 'tau2': 5.3, 'e': 0} # NMDA synaptic mechanism
netParams.synMechParams['GABA'] = {'mod': 'Exp2Syn', 'tau1': 0.6, 'tau2': 8.5, 'e': -75} # GABA synaptic mechanism


# Stimulation parameters
netParams.stimSourceParams['bkg'] = {'type': 'NetStim', 'rate': 10, 'noise': 0.5, 'start': 1}
netParams.stimSourceParams['bkg2'] = {'type': 'NetStim', 'rate': 10, 'noise': 0.5, 'start': 1}

netParams.stimTargetParams['bkg->PYR1'] = {'source': 'bkg', 'conds': {'pop': 'PYR'}, 'weight': 0.1, 'delay': 'uniform(1,5)'}


# Connectivity parameters
netParams.connParams['PYR->PYR'] = {
'preConds': {'pop': 'PYR'}, 'postConds': {'pop': ['PYR','PYR2']},
'weight': 0.002, # weight of each connection
'delay': '0.2+normal(13.0,1.4)', # delay min=0.2, mean=13.0, var = 1.4
'threshold': 10, # threshold
'convergence': 'uniform(1,15)'} # convergence (num presyn targeting postsyn) is uniformly distributed between 1 and 15


###############################################################################
#netParams.stimSourceParams['bkg'] = {'type': 'NetStim', 'rate': 10, 'noise': 0.5, 'start': 1000, 'stop': 2000}
netParams.stimSourceParams['bkg'] = {'type': 'NetStim', 'interval': 10, 'noise': 0.5, 'start': 100,'number':15}
netParams.stimTargetParams['bkg->ExcPopType'] = {'source': 'bkg', 'conds': {'popLabel': 'ExcPop'}, 'weight': 0.01, 'delay': 'uniform(1,5)', 'synMech': 'AMPA'}


# # Connectivity parameters
netParams.connParams['ExcPop->ExcPop'] = {
'preConds': {'popLabel': 'ExcPop'}, # presyn: PYR_E
'postConds': {'popLabel': 'ExcPop'}, # postsyn: PYR_E
'probability': 'max(0.1, normal(0.2,1))',
'weight': 0.008, # weight of each connection
'delay': 0.5, #'max(1, normal(10,2))', # gaussian distributed transmission delay (ms)
'synMech': 'AMPA'} # target synaptic mechanism

# netParams.connParams['ExcPop->InhPop'] = {
# 'preConds': {'popLabel': 'ExcPop'}, # presyn: PYR_E
# 'postConds': {'popLabel': 'InhPop'}, # postsyn: PYR_I
# 'probability': 0.1, # fixed probability
# 'weight': 0.003, # weight of each connection
# 'delay': 'max(1, normal(10,2))', # gaussian distributed transmission delay (ms)
# 'synMech': 'AMPA'} # target synaptic mechanism

# netParams.connParams['InhPop->ExcPop'] = {
# 'preConds': {'popLabel': 'InhPop'}, # presyn: PYR_I
# 'postConds': {'popLabel': 'ExcPop'}, # postsyn: PYR_E
# 'probability': 0.1, # fixed probability
# 'weight': 0.006, # weight of each connection
# 'delay': 'max(1, normal(10,2))', # gaussian distributed transmission delay (ms)
# 'synMech': 'GABA'} # target synaptic mechanism

##############################################################################
# SIMULATION PARAMETERS
###############################################################################

# Simulation parameters
simConfig.duration = 1*1e3 # Duration of the simulation, in ms
simConfig.dt = 'a' # Internal integration timestep to use
simConfig.seeds = {'con': 1, 'stim': 1, 'loc': 1} # Seeds for randomizers (connectivity, input stimulation and cell locations)
simConfig.createNEURONObj = 1 # create HOC objects when instantiating network
simConfig.createPyStruct = 1 # create Python structure (simulator-independent) when instantiating network
simConfig.verbose = False # show detailed messages

simConfig.checkErrors = 0
cfg.duration = 2*1e3 # Duration of the simulation, in ms
cfg.dt = 0.025 # Internal integration timestep to use
cfg.seeds = {'conn': 1, 'stim': 1, 'loc': 1} # Seeds for randomizers (connectivity, input stimulation and cell locations)
cfg.createNEURONObj = 1 # create HOC objects when instantiating network
cfg.createPyStruct = 1 # create Python structure (simulator-independent) when instantiating network
cfg.verbose = False # show detailed messages

# Recording
simConfig.recordCells = [] # which cells to record from
simConfig.recordTraces = {'Vsoma':{'se':'soma','loc':0.5,'var':'v','conds': {'cellType': 'PYR2'}}}
simConfig.recordStim = True # record spikes of cell stims
simConfig.recordStep = 0.1 # Step size in ms to save data (eg. V traces, LFP, etc)
cfg.recordCells = [] # which cells to record from
cfg.recordTraces = {'Vsoma':{'sec':'soma','loc':0.5,'var':'v'}}
cfg.recordStim = True # record spikes of cell stims
cfg.recordStep = 0.1 # Step size in ms to save data (eg. V traces, LFP, etc)

# Saving
simConfig.filename = 'HHTut' # Set file output name
simConfig.saveFileStep = 1000 # step size in ms to save data to disk
simConfig.savePickle = False # Whether or not to write spikes etc. to a .mat file
simConfig.saveMat = True
cfg.filename = 'FirstExampleOscill' # Set file output name
cfg.saveFileStep = 1000 # step size in ms to save data to disk
cfg.savePickle = True # Whether or not to write spikes etc. to a .mat file

# Analysis and plotting
simConfig.analysis['plotRaster'] = {'bla':1}
#simConfig.analysis['plotTraces'] = {'include': ['all'], 'oneFigPer':'trace'}

sim.createSimulateAnalyze()

#data=sim.loadSimData('HHTut.mat')
# cfg.analysis['plotRaster'] = True # Plot raster
# cfg.analysis['plotTraces'] = {'include': [('ExcPop',10), ('InhPop',10)]} # Plot raster
# # cfg.analysis['plot2Dnet'] = True # Plot 2D net cells and connections
# # cfg.analysis['plotConn'] = True


sim.createSimulateAnalyze(netParams = netParams, simConfig = cfg)
import pylab; pylab.show() # this line is only necessary in certain systems where figures appear empty
2 changes: 1 addition & 1 deletion netpyne/__init__.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@

__version__ = '0.7.2'
__version__ = '0.7.3'
__gui__ = True # global option to enable/disable graphics
30 changes: 28 additions & 2 deletions netpyne/analysis.py
Original file line number Diff line number Diff line change
Expand Up @@ -350,7 +350,7 @@ def plotRaster (include = ['allCells'], timeRange = None, maxSpikes = 1e8, order
gs = gridspec.GridSpec(2, 1,height_ratios=[2,1])
ax1=plt.subplot(gs[0])

ax1.scatter(spkts, spkinds, 10, linewidths=lw, marker=marker, color = spkgidColors) # Create raster
ax1.scatter(spkts, spkinds, 10, lw=lw, marker=marker, color = spkgidColors) # Create raster
ax1.set_xlim(timeRange)

# Plot stats
Expand Down Expand Up @@ -907,7 +907,7 @@ def invertDictMapping(d):
######################################################################################################################################################
## Plot cell shape
######################################################################################################################################################
def plotShape (showSyns = False, includePost = ['all'], includePre = ['all'], synStyle = '.', synSiz=3, dist=0.6, cvar=None, cvals=None, iv=False, ivprops=None,
def plotShape (includePost = ['all'], includePre = ['all'], showSyns = False, synStyle = '.', synSiz=3, dist=0.6, cvar=None, cvals=None, iv=False, ivprops=None,
includeAxon=True, figSize = (10,8), saveData = None, saveFig = None, showFig = True):
'''
Plot 3D cell shape using NEURON Interview PlotShape
Expand Down Expand Up @@ -1579,6 +1579,32 @@ def plot2Dnet (include = ['allCells'], figSize = (12,12), view = 'xy', showConns

return fig

######################################################################################################################################################
## Calculate number of disynaptic connections
######################################################################################################################################################
def calculateDisynaptic(includePost = ['allCells'], includePre = ['allCells'], includePrePre = ['allCells']):
numDis = 0
totCon = 0

_, cellsPreGids, _ = getCellsInclude(includePre)
_, cellsPrePreGids, _ = getCellsInclude(includePrePre)
cellsPost, _, _ = getCellsInclude(includePost)


for postCell in cellsPost:
preGidsAll = [conn['preGid'] for conn in postCell['conns'] if isinstance(conn['preGid'], Number) and conn['preGid'] in cellsPreGids+cellsPrePreGids]
preGids = [gid for gid in preGidsAll if gid in cellsPreGids]
for preGid in preGids:
preCell = sim.net.allCells[preGid]
prePreGids = [conn['preGid'] for conn in preCell['conns'] if conn['preGid'] in cellsPrePreGids]
totCon += 1
if not set(prePreGids).isdisjoint(preGidsAll):
numDis += 1
print ' Total disynaptic connections: %d / %d (%.2f%%)' % (numDis, totCon, float(numDis)/float(totCon)*100)
sim.allSimData['disynConns'] = numDis

return numDis


######################################################################################################################################################
## Calculate normalized transfer entropy
Expand Down
6 changes: 4 additions & 2 deletions netpyne/batch.py
Original file line number Diff line number Diff line change
Expand Up @@ -242,7 +242,7 @@ def run(self):
print jobString+'\n'
input.close()

# hpc torque job submission
# hpc torque job submission
elif self.runCfg.get('type',None) == 'hpc_slurm':

# read params or set defaults
Expand Down Expand Up @@ -299,7 +299,9 @@ def run(self):
print 'Submitting job ',jobName
# master/slave bulletin board schedulling of jobs
pc.submit(runJob, self.runCfg.get('script', 'init.py'), cfgSavePath, netParamsSavePath)


sleep(1) # avoid saturating scheduler

# wait for pc bulletin board jobs to finish
try:
while pc.working():
Expand Down
2 changes: 1 addition & 1 deletion netpyne/cell.py
Original file line number Diff line number Diff line change
Expand Up @@ -1269,7 +1269,7 @@ def createNEURONObj (self):
maxReproducibleSpks = 1e4 # num of rand spikes generated; only a subset is used; ensures reproducibility

# fixed interval of duration (1 - noise)*interval
fixedInterval = np.full(((1+0.5*noise)*sim.cfg.duration/interval), [(1.0-noise)*interval]) # generate 1+0.5*noise spikes to account for noise
fixedInterval = np.full(int(((1+0.5*noise)*sim.cfg.duration/interval)), [(1.0-noise)*interval]) # generate 1+0.5*noise spikes to account for noise
numSpks = len(fixedInterval)

# randomize the first spike so on average it occurs at start + noise*interval
Expand Down
Loading

0 comments on commit 9ff475f

Please sign in to comment.