Here is the updated code. If I run on more than 1 core it gives the same error. The main thing that has changed is the edition of trying to save the spike ids and spike times to a text file.
Code: Select all
from netpyne import specs, sim, analysis
from random import randint
# Varible Definitions
simTime = 276000
toneTrial = 44
shockTrials = 16
toneD_Num = [8, 24]
toneV_Num = [13, 24]
noise_freq_pyr = 3
noise_freq_int = 5
noise_tot_length = simTime
totNumCells = 100
numInter = 20
numAType = int((totNumCells - numInter) * 0.5)
numBType = int((totNumCells - numInter) * 0.3)
numCType = int((totNumCells - numInter) * 0.2)
toneStimD_List = []
toneStimV_List = []
shockStim_List = []
data_output = {} # Data Dictionary
numSpikeA = 0
numSpikeB = 0
numSpikeC = 0
numSpikeInt = 0
# Create list of toneStimD and toneStimV
for i in range(0, toneTrial):
if i < toneD_Num[0]:
interval = 50
number = 10+1
start = 3500+4000*i
for i in range(0, number):
toneStimD_List.append(start+interval*i)
elif i >= toneD_Num[0] and i < toneD_Num[1]:
interval = 50/2
number = 10*2+1
start = 3500+4000*i
for i in range(0, number):
toneStimD_List.append(start+interval*i)
elif i >= toneD_Num[1]:
interval = 50/2
number = 10*2+1
start = 100000+3500+4000*i
for i in range(0, number):
toneStimD_List.append(start+interval*i)
for i in range(0, toneTrial):
if i < toneV_Num[0]:
interval = 50
number = 10+1
start = 3500+4000*i
for i in range(0, number):
toneStimV_List.append(start+interval*i)
elif i >= toneV_Num[0] and i < toneV_Num[1]:
interval = 50/2
number = 10*2+1
start = 3500+4000*i
for i in range(0, number):
toneStimV_List.append(start+interval*i)
elif i >= toneV_Num[1]:
interval = 50/2
number = 10*2+1
start = 100000+3500+4000*i
for i in range(0, number):
toneStimV_List.append(start+interval*i)
for i in range(0, shockTrials):
interval = 5
number = 20+1
start = 35900+4000*i
for i in range(0, number):
shockStim_List.append(start+interval*i)
# Network Parameters
netParams = specs.NetParams()
netParams.sizeX = 130 # Horizontal Axis
netParams.sizeY = 50 # Vertical Axis
netParams.sizeZ = 100 # Horizontal Axis
# Population Parameters
netParams.popParams['PN_A'] = {'cellType': 'PYR_A', 'numCells': numAType,'xRange': [0,25], 'yRange': [0,50], 'cellModel': 'LA_Mod'}
netParams.popParams['PN_B'] = {'cellType': 'PYR_B', 'numCells': numBType, 'xRange': [25,50], 'yRange': [0,50], 'cellModel': 'LA_Mod'}
netParams.popParams['PN_C'] = {'cellType': 'PYR_C', 'numCells': numCType, 'xRange': [50,75], 'yRange': [0,50], 'cellModel': 'LA_Mod'}
netParams.popParams['INT'] = {'cellType': 'Inter1', 'numCells': numInter, 'xRange': [75,100], 'yRange': [0,50], 'cellModel': 'LA_Mod'}
netParams.popParams['Thal_Tone_D'] = {'cellModel': 'VecStim', 'numCells': 1, 'xRange': [100,110], 'yRange': [0, 50], 'spkTimes': toneStimD_List}
netParams.popParams['Cort_Tone_V'] = {'cellModel': 'VecStim', 'numCells': 1, 'xRange': [110,120], 'yRange': [0, 50], 'spkTimes': toneStimV_List}
netParams.popParams['Shock'] = {'cellModel': 'VecStim', 'numCells': 1, 'xRange': [120,130], 'yRange': [0, 50], 'spkTimes': shockStim_List}
# Cell Property Value
netParams.importCellParams(label='Type_A_Rule', conds={'cellType': 'PYR_A', 'cellModel': 'LA_Mod'}, fileName='LA_Template.py', cellName='Cell_A')
netParams.importCellParams(label='Type_B_Rule', conds={'cellType': 'PYR_B', 'cellModel': 'LA_Mod'}, fileName='LA_Template.py', cellName='Cell_B')
netParams.importCellParams(label='Type_C_Rule', conds={'cellType': 'PYR_C', 'cellModel': 'LA_Mod'}, fileName='LA_Template.py', cellName='Cell_C')
netParams.importCellParams(label='Inter_Rule', conds={'cellType': 'Inter1', 'cellModel': 'LA_Mod'}, fileName='LA_Template.py', cellName='Inter')
## Synaptic mechanism parameters
netParams.synMechParams['exc'] = {'mod': 'Exp2Syn', 'tau1': 1.0, 'tau2': 5.0, 'e': 0} # soma NMDA synapse
# Interneuron Cells to Pyramidal Cells GABA with local Ca2+ pool and read public soma Ca2+ pool
netParams.synMechParams['interD2pyrD_STFD'] = {'mod': 'interD2pyrD_STFD', 'initW': 0.7} # Synaptic weight range: 0.7 - 2 ('initW': 0.7)
# Pyramidal Cells to Interneuron Cells AMPA+NMDA with local Ca2+ pool
netParams.synMechParams['pyrD2interD_STFD'] = {'mod': 'pyrD2interD_STFD'} # Synaptic weight range: 1 - 2
# Pyramidal Cells to Pyramidal Cells AMPA+NMDA with local Ca2+ pool
netParams.synMechParams['pyrD2pyrD_STFD'] = {'mod': 'pyrD2pyrD_STFD'} # Synaptic weight range: 0.5 - 1
# Shock to Interneuron Cells AMPA+NMDA with local Ca2+ pool
netParams.synMechParams['shock2interD'] = {'mod': 'shock2interD'} # Synaptic weight range: 9 - 12
# Shock to Pyramidal Cells AMPA+NMDA with local Ca2+ pool
netParams.synMechParams['shock2pyrD'] = {'mod': 'shock2pyrD'} # Synaptic weight range: 2 - 4.5 ( 10/4.6 (2) - 12/4.6 (2.6) )
# Tone to Interneuron Cells AMPA+NMDA with local Ca2+ pool
netParams.synMechParams['tone2interD'] = {'mod': 'tone2interD'} # Synaptic weight range: 2 - 4
# Tone to Pyramidal Cells AMPA+NMDA with local Ca2+ pool
netParams.synMechParams['tone2pyrD'] = {'mod': 'tone2pyrD'} # Synaptic weight range: 0.7 - 2
# Background to Interneuron Cells AMPA+NMDA
netParams.synMechParams['bg2inter'] = {'mod': 'bg2inter'}
# Background to Pyramidal Cells AMPA+NMDA
netParams.synMechParams['bg2pyr'] = {'mod': 'bg2pyr'}
# Stimulation parameters
# Generate Background Noise (Sources and Targets)
netParams.stimSourceParams['bg2inter_stim'] = {'type': 'NetStim', 'interval': 1000/noise_freq_int, 'number': noise_tot_length*noise_freq_int/1000, 'start': 0, 'noise': 1}
netParams.stimSourceParams['bg2pyr_stim'] = {'type': 'NetStim', 'interval': 1000/noise_freq_pyr, 'number': noise_tot_length*noise_freq_pyr/1000, 'start': 0, 'noise': 1}
netParams.stimTargetParams['bkg->inter'] = {'source': 'bg2inter_stim', 'conds': {'popLabel': 'INT'}, 'delay': 0, 'synMech': 'bg2inter'} # Weight: 7 - 10 ('weight': 7)
netParams.stimTargetParams['bkg->pyr_a'] = {'source': 'bg2pyr_stim', 'conds': {'popLabel': 'PN_A'}, 'delay': 0, 'synMech': 'bg2pyr'} # Weight: 0.7 - 2
netParams.stimTargetParams['bkg->pyr_b'] = {'source': 'bg2pyr_stim', 'conds': {'popLabel': 'PN_B'}, 'delay': 0, 'synMech': 'bg2pyr'} # Weight: 0.7 - 2
netParams.stimTargetParams['bkg->pyr_c'] = {'source': 'bg2pyr_stim', 'conds': {'popLabel': 'PN_C'}, 'delay': 0, 'synMech': 'bg2pyr'} # Weight: 0.7 - 2
## Cell Connectivity Rules
# Connectivity Between Pyramidal and Interneurons
netParams.connParams['PNs->PNs'] = {
'preConds': {'popLabel': ['PN_A','PN_B','PN_C']}, # connection from
'postConds': {'popLabel': ['PN_A','PN_B','PN_C']}, # connnection to
'probability': 0.25, # probability of connection (.25)
'weight': 1, # synaptic weight: 0.5 - 1
'delay': randint(10,20), # transmission delay (ms)
'synMech': 'pyrD2pyrD_STFD'} # target synaptic mechanism
netParams.connParams['INTs->PNs'] = {
'preConds': {'popLabel': 'INT'}, # connection from
'postConds': {'popLabel': ['PN_A','PN_B','PN_C']}, # connnection to
'probability': 0.6, # probability of connection
'weight': 1, # synaptic weight: 0.7 - 2
'delay': randint(10,20), # transmission delay (ms)
'synMech': 'interD2pyrD_STFD'} # target synaptic mechanism
netParams.connParams['PNs->INTs'] = {
'preConds': {'popLabel': ['PN_A','PN_B','PN_C']}, # connection from
'postConds': {'popLabel': 'INT'}, # connnection to
'probability': 0.33, # probability of connection
'weight': 1, # synaptic weight: 1 - 2
'delay': randint(10,20), # transmission delay (ms)
'synMech': 'pyrD2interD_STFD'} # target synaptic mechanism
## Connectivity Between Cells and Tone/Shock
# Pyramidal Cells and Input
netParams.connParams['Thal->PNs'] = {
'preConds': {'popLabel': 'Thal_Tone_D'},
'postConds': {'popLabel': ['PN_A','PN_B','PN_C']},
'probability': 0.53, # probability of connection
'weight': 1, # synaptic weight: 0.7 - 2
'delay': randint(10,20), # transmission delay (ms)
'synMech': 'tone2pyrD'} # target synaptic mechanism
netParams.connParams['Cort->PNs'] = {
'preConds': {'popLabel': 'Cort_Tone_V'},
'postConds': {'popLabel': ['PN_A','PN_B','PN_C']},
'probability': 0.53, # probability of connection
'weight': 1, # synaptic weight: 0.7 - 2
'delay': randint(10,20), # transmission delay (ms)
'synMech': 'tone2pyrD'} # target synaptic mechanism
netParams.connParams['Shock->PNs'] = {
'preConds': {'popLabel': 'Shock'},
'postConds': {'popLabel': ['PN_A','PN_B','PN_C']},
'probability': 0.7, # probability of connection
'weight': 1, # synaptic weight: 2 - 4.5 ( 10/4.6 (2) - 12/4.6 (2.6) )
'delay': randint(10,20), # transmission delay (ms)
'synMech': 'shock2pyrD'} # target synaptic mechanism
# Interneurons and Input
netParams.connParams['Thal->INTs'] = {
'preConds': {'popLabel': 'Thal_Tone_D'},
'postConds': {'popLabel': 'INT'},
'probability': 0.5, # probability of connection
'weight': 1, # synaptic weight: 2 - 4
'delay': randint(10,20), # transmission delay (ms)
'synMech': 'tone2interD'} # target synaptic mechanism
netParams.connParams['Cort->INTs'] = {
'preConds': {'popLabel': 'Cort_Tone_V'},
'postConds': {'popLabel': 'INT'},
'probability': 0.5, # probability of connection
'weight': 1, # synaptic weight: 2 - 4
'delay': randint(10,20), # transmission delay (ms)
'synMech': 'tone2interD'} # target synaptic mechanism
netParams.connParams['Shock->INTs'] = {
'preConds': {'popLabel': 'Shock'},
'postConds': {'popLabel': 'INT'},
'probability': 0.7, # probability of connection
'weight': 1, # synaptic weight: 9 - 12
'delay': randint(10,20), # transmission delay (ms)
'synMech': 'shock2interD'} # target synaptic mechanism
## Simulation options
simConfig = specs.SimConfig() # object of class SimConfig to store simulation configuration
simConfig.duration = simTime # Duration of the simulation, in ms
simConfig.dt = 0.05 #0.025 # Internal integration timestep to use
simConfig.hParams = {'celsius': 31,'clamp_resist': 0.001,'steps_per_ms': 20} #, 'v_init': -65}
simConfig.verbose = 0 # Show detailed messages
simConfig.recordTraces = {'V_soma':{'sec':'soma','loc':0.5,'var':'v'}} # Dict with traces to record
simConfig.recordStep = 0.01#0.025 # Step size in ms to save data (eg. V traces, LFP, etc)
simConfig.filename = 'model_output' # Set file output name
simConfig.savePickle = False # Save params, network and sim output to pickle file
simConfig.checkErrors = 1
# Create network and run simulation
sim.createSimulateAnalyze(netParams = netParams, simConfig = simConfig)
import pylab; pylab.show() # this line is only necessary in certain systems where figures appear empty
# Used to stop program after simulation and graphs and then save data and quit
#input("Type a number to quit:")
spkid = sim.allSimData['spkid']
spkt = sim.allSimData['spkt']
# Create open data.txt file and write to it
spike_file = open("data.txt", 'w')
# Save data to a text file
for i in range(0, len(spkid)):
# Only save spikes from cells less than 100 (Cell 100 - 102 are tone and shock cells)
if int(spkid[i]) < 100:
spike_file.write('{0:8.3f}\t\t{1:2d}\n'.format(spkt[i], int(spkid[i])))
spike_file.close()
quit()