Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
*.c
*.o
*.dll
*.tmp
x86_64/*
__pycache__/*
2 changes: 2 additions & 0 deletions geom.py
Original file line number Diff line number Diff line change
Expand Up @@ -136,6 +136,8 @@ def set_conductances(self):
self.soma.insert('Iholmw')
self.soma.insert('Caolmw')
self.soma.insert('ICaolmw')
for seg in self.soma:
seg.gca_ICaolmw = 1 # adjust the conductance when gabapentin present
self.soma.insert('KCaolmw')

def set_synapses(self):
Expand Down
19 changes: 19 additions & 0 deletions graphstuff.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# -*- coding: utf-8 -*-
"""
Created on Mon Aug 8 06:23:41 2022

@author: maria
"""
from neuron import h
import pickle
with open('netresults.pickle', 'rb') as f:
allvars = pickle.load(f)
data = allvars[0]
lfp = allvars[1]
dt = allvars[2]
import savedata as sd
sd.graphrasterplot(data)

sd.graphlfp(lfp,dt)


6 changes: 4 additions & 2 deletions init.hoc
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,17 @@

xwindows=1
show_panel=0
pwd()
//pwd() - mb no longer avail
load_file("xgetargs.hoc")
load_file("grvec.hoc")
load_file("labels.hoc")
load_file("syncode.hoc")

load_file("decnqs.hoc")
if (! VECST_INSTALLED) install_vecst()
if (! INSTALLED_stats) install_stats()

install_stats()
//if (! INSTALLED_stats) install_stats()

//install_PLACE()
//install_clust()
Expand Down
2 changes: 1 addition & 1 deletion misc.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
#include <math.h>
#include <limits.h> /* contains LONG_MAX */
#include <time.h>
#include <sys/time.h>
//#include <sys/time.h>
#include <pthread.h>
#include <stdint.h>

Expand Down
6 changes: 3 additions & 3 deletions misc.mod
Original file line number Diff line number Diff line change
Expand Up @@ -42,12 +42,12 @@ THREADSAFE
}

VERBATIM
#include "misc.h"
//#include "misc.h"
#include <unistd.h> /* F_OK */
#include <errno.h> /* errno */
#include <signal.h>
#include <sys/types.h> /* MUST REMEMBER THIS */
#include <time.h>
//#include <sys/types.h> /* MUST REMEMBER THIS */
//#include <time.h>
#include <stdio.h>
#include <limits.h>
ENDVERBATIM
Expand Down
22 changes: 15 additions & 7 deletions mosinit.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,12 +42,20 @@
Run.fiwash = h.FInitializeHandler(1,Run.setwash)
"""

h.tstop = 5e3
h.tstop = 100 #5e3
h.run()
net.rasterplot()

net.calc_lfp()
net.pravgrates()
myg = h.Graph()
net.vlfp.plot(myg,h.dt)
myg.exec_menu("View = plot")
myg.exec_menu("New Axis")
import savedata as sd
import pickle

data = sd.data4rasterplot(net)
with open('netresults.pickle','wb') as f:
pickle.dump([data, net.lfp, h.dt],f,pickle.HIGHEST_PROTOCOL)

print("Back in Spyder/windows, run graphstuff.py")
#net.pravgrates()
# myg = h.Graph()
# net.vlfp.plot(myg,h.dt)
# myg.exec_menu("View = plot")
# myg.exec_menu("New Axis")
76 changes: 38 additions & 38 deletions network.py
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ class Network:

def __init__(self,noise=True,connections=True,DoMakeNoise=True,iseed=1234,UseNetStim=True,wseed=4321,scale=1.0,MSGain=1.0,SaveConn=False):
import math
print "Setting Cells"
print("Setting Cells")
self.pyr = Population(cell_type=PyrAdr,n=int(math.ceil(800*scale)), x= 0, y=0, z=0, dx=50, amp= 50e-3, dur=1e9, delay=2*h.dt)
self.bas = Population(cell_type=Bwb, n=int(math.ceil(200*scale)), x=10, y=0, z=0, dx=50, amp= 0, dur= 0, delay=2*h.dt)
self.olm = Population(cell_type=Ow, n=int(math.ceil(200*scale)), x=20, y=0, z=0, dx=50, amp=-25e-3, dur=1e9, delay=2*h.dt)
Expand All @@ -111,7 +111,7 @@ def __init__(self,noise=True,connections=True,DoMakeNoise=True,iseed=1234,UseNet
self.SaveConn = SaveConn

if connections:
print "Setting Connections"
print("Setting Connections")
self.set_all_conns()


Expand All @@ -123,29 +123,29 @@ def set_noise_inputs(self,simdur): #simdur only used for make_all_noise
self.make_all_noise(simdur,self.iseed)
else:
self.load_all_noise()
print "Done!"
print("Done!")

def load_all_noise(self): #load noise from data files
print "Loading Noise"
print "to PYR"
print("Loading Noise")
print("to PYR")
self.b_pyr_somaAMPAf=self.load_spikes("spike_noise_pyr_800_soma_AMPA_ISI_1_N_10000_noise_1.npy",self.pyr,"somaAMPAf",0.05e-3)
self.b_pyr_Adend3AMPAf=self.load_spikes("spike_noise_pyr_800_Adend3_AMPA_ISI_1_N_10000_noise_1.npy",self.pyr,"Adend3AMPAf",0.05e-3)
self.b_pyr_somaGABAf=self.load_spikes("spike_noise_pyr_800_soma_GABA_ISI_1_N_10000_noise_1.npy",self.pyr,"somaGABAf",0.012e-3)
self.b_pyr_Adend3GABAf=self.load_spikes("spike_noise_pyr_800_Adend3_GABA_ISI_1_N_10000_noise_1.npy",self.pyr,"Adend3GABAf",0.012e-3)
self.b_pyr_Adend3NMDA=self.load_spikes("spike_noise_pyr_800_Adend3_NMDA_ISI_100_N_100_noise_1.npy", self.pyr,"Adend3NMDA",6.5e-3)
print "to BAS"
print("to BAS")
self.b_bas_somaAMPAf=self.load_spikes("spike_noise_bas_200_soma_AMPA_ISI_1_N_10000_noise_1.npy",self.bas,"somaAMPAf",w=0.02e-3)
self.b_bas_somaGABA=self.load_spikes("spike_noise_bas_200_soma_GABA_ISI_1_N_10000_noise_1.npy",self.bas,"somaGABAf",w=0.2e-3)
self.b_bas_somaGABAf=self.load_spikes("spike_noise_bas_200_soma_GABAf_ISI_150_N_65_noise_0.npy",self.bas,"somaGABAss",w=1.6e-3)
print "to OLM"
print("to OLM")
self.b_olm_somaAMPAf=self.load_spikes("spike_noise_olm_200_soma_AMPA_ISI_1_N_10000_noise_1.npy",self.olm,"somaAMPAf",w=0.02e-3)
self.b_olm_somaGABAf=self.load_spikes("spike_noise_olm_200_soma_GABA_ISI_1_N_10000_noise_1.npy",self.olm,"somaGABAf",w=0.2e-3)
self.b_olm_somaGABAss=self.load_spikes("spike_noise_olm_200_soma_GABAss_ISI_150_N_65_noise_0.npy",self.olm,"somaGABAss",w=1.6e-3)

#this should be called @ beginning of each sim - done in an FInitializeHandler in run.py
def init_NetStims(self):
# h.mcell_ran4_init(self.iseed)
for i in xrange(len(self.nrl)):
for i in range(len(self.nrl)):
rds = self.nrl[i]
sead = self.nrlsead[i]
rds.MCellRan4(sead,sead)
Expand Down Expand Up @@ -199,7 +199,7 @@ def RecPYRInputs(self):
self.NCV[s] = []
sidx = self.pyr.ncsidx[s]
eidx = self.pyr.nceidx[s]
for i in xrange(sidx,eidx+1):
for i in range(sidx,eidx+1):
self.NCV[s].append(h.Vector())
self.ncl[i].record(self.NCV[s][-1])

Expand All @@ -217,7 +217,7 @@ def setnqin(self):
sidx = self.pyr.ncsidx[s]
eidx = self.pyr.nceidx[s]
idx = 0
for i in xrange(0,len(self.NCV[s])):
for i in range(0,len(self.NCV[s])):
nqin.append(idx,jdx,self.NCV[s][i])
idx = idx + 1
jdx = jdx + 1
Expand All @@ -227,7 +227,7 @@ def mkspkh(self,binsz):
snq=self.snq
snq.verbose = 0
self.spkh = h.List()
for i in xrange(0,800):
for i in range(0,800):
if snq.select("id",i) > 0:
vt = snq.getcol("t")
self.spkh.append(vt.histogram(0,h.tstop,binsz))
Expand All @@ -236,25 +236,25 @@ def mkspkh(self,binsz):
snq.verbose=1

def make_all_NetStims(self,simdur,rdmseed):
print "Making NetStims"
print("Making NetStims")
# h.mcell_ran4_init(self.iseed)
self.nsl = [] #NetStim List
self.ncl = [] #NetCon List
self.nrl = [] #Random List for NetStims
self.nrlsead = [] #List of seeds for NetStim randoms
# numpy.random.seed(rdmseed) # initialize random # generator
print "Making Noise"
print "to PYR"
print("Making Noise")
print("to PYR")
rdtmp = rdmseed # starting sead value - incremented in make_NetStims
rdtmp=self.make_NetStims(po=self.pyr, syn="somaAMPAf", w=0.05e-3, ISI=1, time_limit=simdur, sead=rdtmp)
rdtmp=self.make_NetStims(po=self.pyr, syn="Adend3AMPAf", w=0.05e-3, ISI=1, time_limit=simdur, sead=rdtmp)
rdtmp=self.make_NetStims(po=self.pyr, syn="somaGABAf", w=0.012e-3, ISI=1, time_limit=simdur, sead=rdtmp)
rdtmp=self.make_NetStims(po=self.pyr, syn="Adend3GABAf", w=0.012e-3, ISI=1, time_limit=simdur, sead=rdtmp)
rdtmp=self.make_NetStims(po=self.pyr, syn="Adend3NMDA", w=6.5e-3, ISI=100,time_limit=simdur, sead=rdtmp)
print "to BAS"
print("to BAS")
rdtmp=self.make_NetStims(po=self.bas, syn="somaAMPAf", w=0.02e-3, ISI=1, time_limit=simdur, sead=rdtmp)
rdtmp=self.make_NetStims(po=self.bas, syn="somaGABAf", w=0.2e-3, ISI=1, time_limit=simdur, sead=rdtmp)
print "to OLM"
print("to OLM")
#rdtmp=self.make_NetStims(po=self.olm, syn="somaAMPAf", w=0.02e-3, ISI=1, time_limit=simdur, sead=rdtmp)
rdtmp=self.make_NetStims(po=self.olm, syn="somaAMPAf", w=0.0625e-3, ISI=1, time_limit=simdur, sead=rdtmp)
rdtmp=self.make_NetStims(po=self.olm, syn="somaGABAf", w=0.2e-3, ISI=1, time_limit=simdur, sead=rdtmp)
Expand All @@ -278,19 +278,19 @@ def make_all_NetStims(self,simdur,rdmseed):
def make_all_noise(self,simdur,rdmseed): # create noise for simdur milliseconds
numpy.random.seed(rdmseed) # initialize random # generator
import math
print "Making Noise"
print("Making Noise")
fctr = (simdur+simdur/2) / 10000.0
print "to PYR"
print("to PYR")
self.b_pyr_somaAMPAf=self.make_spikes(self.pyr,"somaAMPAf",0.05e-3,self.pyr.n,"soma",1,math.ceil(10000*fctr),1,simdur)
self.b_pyr_Adend3AMPAf=self.make_spikes(self.pyr,"Adend3AMPAf",0.05e-3,self.pyr.n,"Adend3",1,math.ceil(10000*fctr),1,simdur)
self.b_pyr_somaGABAf=self.make_spikes(self.pyr,"somaGABAf",0.012e-3,self.pyr.n,"soma",1,math.ceil(10000*fctr),1,simdur)
self.b_pyr_Adend3GABAf=self.make_spikes(self.pyr,"Adend3GABAf",0.012e-3,self.pyr.n,"Adend3",1,math.ceil(10000*fctr),1,simdur)
self.b_pyr_Adend3NMDA=self.make_spikes(self.pyr,"Adend3NMDA",6.5e-3,self.pyr.n,"Adend3",100,math.ceil(100*fctr),1,simdur)
print "to BAS"
print("to BAS")
self.b_bas_somaAMPAf=self.make_spikes(self.bas,"somaAMPAf",0.02e-3,self.bas.n,"soma",1,math.ceil(10000*fctr),1,simdur)
self.b_bas_somaGABA=self.make_spikes(self.bas,"somaGABAf",0.2e-3,self.bas.n,"soma",1,math.ceil(10000*fctr),1,simdur)
self.b_bas_somaGABAf=self.make_spikes(self.bas,"somaGABAss",1.6e-3,self.bas.n,"soma",150,math.ceil(65*fctr),0,simdur)
print "to OLM"
print("to OLM")
self.b_olm_somaAMPAf=self.make_spikes(self.olm,"somaAMPAf",0.02e-3,self.olm.n,"soma",1,math.ceil(10000*fctr),1,simdur)
self.b_olm_somaGABAf=self.make_spikes(self.olm,"somaGABAf",0.2e-3,self.olm.n,"soma",1,math.ceil(10000*fctr),1,simdur)
self.b_olm_somaGABAss=self.make_spikes(self.olm,"somaGABAss",1.6e-3,self.olm.n,"soma",150,math.ceil(65*fctr),0,simdur)
Expand All @@ -303,28 +303,28 @@ def make_conn(self, preN, postN, conv):

def set_all_conns(self):
random.seed(self.wseed) # initialize random # generator for wiring
print "PYR -> X , NMDA" # src, trg, syn, delay, weight, conv
print("PYR -> X , NMDA") # src, trg, syn, delay, weight, conv
self.pyr_bas_NM=self.set_connections(self.pyr,self.bas, "somaNMDA", 2, 1.15*1.2e-3, 100)
self.pyr_olm_NM=self.set_connections(self.pyr,self.olm, "somaNMDA", 2, 1.0*0.7e-3, 10)
self.pyr_pyr_NM=self.set_connections(self.pyr,self.pyr, "BdendNMDA",2, 1*0.004e-3, 25)

print "PYR -> X , AMPA"
print("PYR -> X , AMPA")
self.pyr_bas_AM=self.set_connections(self.pyr,self.bas, "somaAMPAf",2, 0.3*1.2e-3, 100)
self.pyr_olm_AM=self.set_connections(self.pyr,self.olm, "somaAMPAf",2, 0.3*1.2e-3, 10)
self.pyr_pyr_AM=self.set_connections(self.pyr,self.pyr, "BdendAMPA",2, 0.5*0.04e-3, 25)

print "BAS -> X , GABA"
print("BAS -> X , GABA")
#self.bas_bas_GA=self.set_connections(self.bas,self.bas, "somaGABAf",2, 1.0e-3, 60)#orig 1
#self.bas_bas_GA=self.set_connections(self.bas,self.bas, "somaGABAf",2, 2 * 1.5*1.0e-3, 60)#new 1
self.bas_bas_GA=self.set_connections(self.bas,self.bas, "somaGABAf",2, 3 * 1.5*1.0e-3, 60)#new 2
self.bas_pyr_GA=self.set_connections(self.bas,self.pyr, "somaGABAf",2, 2 * 2*0.18e-3, 50)#new 1

print "OLM -> PYR , GABA"
print("OLM -> PYR , GABA")
#self.olm_pyr_GA=self.set_connections(self.olm,self.pyr, "Adend2GABAs",2, 3*6.0e-3, 20)#original weight value
self.olm_pyr_GA=self.set_connections(self.olm,self.pyr, "Adend2GABAs",2, 4.0 * 3*6.0e-3, 20)#new weight value

#pyramidal to PSR cell -- for testing only
print "PYR -> PSR, AMPA/NMDA"
print("PYR -> PSR, AMPA/NMDA")
self.pyr_psr_NM=self.set_connections(self.pyr,self.psr, "BdendNMDA",2, 1*0.004e-3, 25)
self.pyr_psr_AM=self.set_connections(self.pyr,self.psr, "BdendAMPA",2, 0.5*0.04e-3, 25)

Expand Down Expand Up @@ -354,25 +354,25 @@ def set_connections(self,src,trg,syn,delay,w,conv):
def load_spikes(self,fn,po,syn,w,time_limit=10000):
fn = os.path.join("data",fn)
events = numpy.load(fn)
print "Begin setting events...", po
print("Begin setting events..."), po
print events.shape
for i,ii in enumerate(events):
ii=ii[ii<=time_limit]
po.cell[i].__dict__[syn].append(ii)
po.cell[i].__dict__[syn].syn.Vwt = w
print "End setting events"
print("End setting events")
return events

def make_spikes(self,po,syn,w,cellN,comp,ISI,eventN,noise,time_limit):
events = numpy.random.exponential(ISI, (cellN,eventN))*noise+numpy.repeat(ISI,cellN*eventN).reshape((cellN,eventN))*(1-noise)
events = numpy.cumsum(events,axis=1)
print "Begin setting events...", po
print("Begin setting events..."), po
print events.shape
for i,ii in enumerate(events):
ii=ii[ii<=time_limit]
po.cell[i].__dict__[syn].append(ii)
po.cell[i].__dict__[syn].syn.Vwt = w
print "End setting events"
print("End setting events")
return events

def rasterplot(self,sz=2):
Expand All @@ -383,7 +383,7 @@ def rasterplot(self,sz=2):
for po in self.cells:
id = h.Vector()
tv = h.Vector()
for i in xrange(po.n):
for i in range(po.n):
id.append(po.lidvec[i])
tv.append(po.ltimevec[i])
id.mark(h.g[0],tv,"O",sz,col[pon],1)
Expand All @@ -394,7 +394,7 @@ def setrastervecs(self):
self.myidvec = h.Vector() #IDs and firing times for ALL cells
self.mytimevec = h.Vector()
for po in self.cells:
for i in xrange(po.n):
for i in range(po.n):
self.myidvec.append(po.lidvec[i])
self.mytimevec.append(po.ltimevec[i])

Expand All @@ -408,7 +408,7 @@ def setsnq(self):
ty = 0
vec = h.Vector()
for po in self.cells:
for i in xrange(po.n):
for i in range(po.n):
self.snq.v[0].append(po.lidvec[i])
self.snq.v[1].append(po.ltimevec[i])
vec.resize(po.lidvec[i].size())
Expand All @@ -431,7 +431,7 @@ def setfnq(self,skipms=200):
tf = h.tstop - skipms
ty = 0
for po in self.cells:
for i in xrange(po.n):
for i in range(po.n):
id = po.cell[i].id
n = float( self.snq.select("t",">",skipms,"id",id) )
self.fnq.append(id, n*1e3/tf, ty)
Expand All @@ -449,9 +449,9 @@ def pravgrates(self,skipms=200):
self.fnq.select("ty",ty)
vf = self.fnq.getcol("freq")
if vf.size() > 1:
print "ty: ", ty, " avg rate = ", vf.mean(), "+/-", vf.stderr(), " Hz"
print("ty: "), ty, " avg rate = ", vf.mean(), "+/-", vf.stderr(), " Hz"
else:
print "ty: ", ty, " avg rate = ", vf.mean(), "+/-", 0.0 , " Hz"
print("ty: "), ty, " avg rate = ", vf.mean(), "+/-", 0.0 , " Hz"
ty += 1

def calc_lfp(self): # lfp is modeled as a difference between voltages in distal apical and basal compartemnts
Expand Down Expand Up @@ -480,7 +480,7 @@ def calc_psd(self,fig=3):
gr = [30, 80] # Gamma frequency range
t0i = int(t0/h.dt)
if t0i > len(self.lfp):
print "LFP is too short! (<200 ms)"
print("LFP is too short! (<200 ms)")
return 0,0,0,0,0,0

pylab.figure(fig)
Expand Down Expand Up @@ -521,10 +521,10 @@ def get_lim_max(self, data, ind): # return the position of the maximal element
fp.close()
#create the network
net = Network(noise=True,connections=True,DoMakeNoise=True,iseed=ISEED,UseNetStim=True,wseed=WSEED,scale=1.0,MSGain=MSG)
print "set network from rseed.txt : iseed=",ISEED,", WSEED=",WSEED,", MSG = ",MSG
print("set network from rseed.txt : iseed="),ISEED,", WSEED=",WSEED,", MSG = ",MSG
except:
net = Network()
print "set network from default constructor"
print("set network from default constructor")

#setup some variables in hoc
def sethocix():
Expand Down
Loading