Exemple #1
0
	def setPass(self, event):
		doc = self.gui.document
		if len(self.selectedSections)==1:
			target = self.selectedSections[0]
		else:
			d = self.askParam([{"Name":"Which Section", "Type":str}])
			if not d:
				return
			target = self.cell.getSection(d[0])
		d = self.askParam([{"Name":"Set Rin to:", "Type":float}])	
		trin = d[0]
		self.getRin(None)
		exp=forceGetPath(doc, "/Experiment:ModelBuilderExperiment")
		rec=forceGetPath(doc, "/Experiment:ModelBuilderExperiment/Recording:v")
		dat = rec.getData()
		rin = (dat[290] - dat[95])/5.0
		cor = rin/trin
		while abs(cor-1.0) > .01:
			self.report("current Rin: %0.2g. Trying correction of %.2g" % (rin, cor))
			for e in self.cell.getElements("Channel", "pas"):
				e.setAttrib("Density", e.attrib("Density")*cor)
			exp.run()
			dat = rec.getData()
			rin = (dat[290] - dat[95])/5.0
			cor = rin/trin	
		self.report("current Rin: %0.2g." % (rin,))
Exemple #2
0
def sampleGMM(doc, upathModel="/AbstractModel:MixtureModel", upathNewFiducial="/Fiducial:Sampled", n = 1000):
	am = doc.getInstance(upathModel)
	g = gmm._gmmFromAM(am)
	pts = _sampleGMM(g[0], g[1], g[2], n)
	pts = column_stack([pts, 3*ones(pts.shape[0])])
	fid = forceGetPath(doc, upathNewFiducial)
	fid.setAttrib('Style','spheres')
	fid.setPoints(pts)
Exemple #3
0
def sampleSF(doc, upathSF="/SpatialField:MixtureModel_sf", upathNewFiducial="/Fiducial:Sampled", n = 1000):
	sf = doc.getInstance(upathSF)
	pts = _sampleSF(sf.getElements("Data")[0].data, n)
	pts = pts.astype(float32)*sf.attrib('Edge')
	pts = pts + array(sf.attrib('Origin'))
	pts = column_stack([pts, 3*ones(pts.shape[0])])
	fid = forceGetPath(doc, upathNewFiducial)
	fid.setAttrib('Style', 'spheres')
	fid.setPoints(pts)
Exemple #4
0
def setImageData(dat, path, doc, h=None, replace=1):
	'''Sets the image data in the element at path, in doc, to dat. If h is specified, sets the header also to contain the header information in h. If replace is 1 (default), reinitializes an existing element at the path. If it is 2, hard deletes any such element. If it is 0, changes path to be unique, so nothing is ever overwritten. If path doesn't include a colon, it is changed to "/Data:path (e.g. it is treated as "name" and the element is assumed to be at the top level in the document). '''
	if not ":" in path:
		path="/Data:"+path	
	if replace==1:
		e=forceGetPath(doc, path)
	else:
		e=addPath(doc, path, replace)
	dat, h=imageShape(dat, h)
	e.datinit(dat, h)
Exemple #5
0
	def getRin(self, event):
		doc = self.gui.document
		if len(self.selectedSections)==1:
			target = self.selectedSections[0]
		else:
			d = self.askParam([{"Name":"Which Section", "Type":str}])
			if not d:
				return
			target = self.cell.getSection(d[0])
		stim = forceGetPath(doc, "/Stimulus:ModelBuilderStimulus")
		for e in stim.getElements(depth=1):
			e.sever()
		ic = forceGetPath(doc, "/Stimulus:ModelBuilderStimulus/IClamp:inject")
		ic.setAttrib("Start", 10)
		ic.setAttrib("Amp", 5)
		ic.setAttrib("Stop", 30)
		ic.setAttrib("Id", 1)
		ref = forceGetPath(doc, "/Stimulus:ModelBuilderStimulus/IClamp:inject/ElementReference:Section")
		ref.setAttrib('Target', target.upath())
		ref.setAttrib('Data', 0.5)
		exp=forceGetPath(doc, "/Experiment:ModelBuilderExperiment")
		exp.setAttrib('secondorder', 2)
		exp.setAttrib('Simulator', 'Neuron')
		exp.setAttrib('celsius', 20)
		exp.setAttrib('time', 32)
		exp.setAttrib('dt', 0.05)
		for e in exp.getElements(depth=1):
			e.sever()
		ref = forceGetPath(doc, "/Experiment:ModelBuilderExperiment/ElementReference:Cell")
		ref.setAttrib('Target', self.cell.upath())
		ref = forceGetPath(doc, "/Experiment:ModelBuilderExperiment/ElementReference:Stimulus")
		ref.setAttrib("Target", "/Stimulus:ModelBuilderStimulus")
		rec=forceGetPath(doc, "/Experiment:ModelBuilderExperiment/Recording:v")
		rec.setAttrib("Variable", 'v')
		rec.setAttrib("DataType", "d")
		rec.setAttrib("SamplesPerSecond", 10000.0)
		ref = forceGetPath(doc, "/Experiment:ModelBuilderExperiment/Recording:v/ElementReference:Section")
		ref.setAttrib('Target', target.upath())
		ref.setAttrib('Data', 0.5)
		self.gui.onNewDoc()
		self.report("created experiment. Running it now...")
		exp.run()
		dat = rec.getData()
		self.report("got some data")
		rp = dat[95]
		dp = dat[290] - rp
		#dp = 5*rin
		rin = dp/5.0
		self.report("Rest potential is %0.3g. 5nA injection causes %.3gmV depolarization. Rin (DC) is %0.3g" % (rp, dp, rin))
Exemple #6
0
def addTraces(dat, traces, hasDrug):
	doc = dat.xpath(True)[0] 
	for i,tr in enumerate(traces):
		attrs = {
			'Name':'Trace%i' % i,
			'StartTime':0.0, 
			'SamplesPerSecond':1e6,  # batlab records spike times in microseconds 
			'SampleType':'labeledevents',
			'nsweeps':tr['nsweeps'],
			'raw_data_offset':tr['raw_data_offset'],
			'raw_data_shape':[tr['nsamples'], tr['nsweeps']],
			'raw_data_samplerate':tr['samplerate_resp'],
			'Drug':hasDrug,
			'stimuli_active':map(bool, tr['stimulus'])
		}
		trdat = nmp.createElement('Data', attrs)
		dat.newElement(trdat)
		if tr['spikes']:
			spdat = []
			for sweep in range(len(tr['spikes'])):
				for spike in range(len(tr['spikes'][sweep])):
					spdat.append([tr['spikes'][sweep][spike], sweep])
			if not spdat:
				spdat = np.zeros((0,2))
			trdat.datinit(np.array(spdat))
		sfiles = []
		for ch, s in enumerate(tr['stimulus']):
			for k in s:
				trdat.setAttrib('stim%i_%s' % (ch, k), s[k])
				if k == 'file':
					ename = "/Data:Call%s" % (s[k][:s[k].index('.')],)
					sfiles.append((ename, s[k]))
					er = nmp.createElement("ElementReference", {'Name':'Stim%i' % ch, 'Data':ch, 'Target':ename})
					trdat.newElement(er)
		for (upath, fname) in sfiles:
			if not doc.getInstance(upath, True):
				stimdat = nmp.forceGetPath(doc, upath)
				stimdat.setAttrib('SampleType','timeseries')
				stimdat.setAttrib('SamplesPerSecond',tr['samplerate_stim'])
				fname = os.path.join(callsdir, fname)
				sd = np.fromstring(open(fname).read(), np.int16)
				stimdat.datinit(sd)
Exemple #7
0
	def getRin(self, event):
		if len(self.selectedSections)==1:
			target = self.selectedSections[0]
		else:
			d = self.askParam([{"Name":"Which Section", "Type":str}])
			if not d:
				return
			target = self.cell.getSection(d[0])
		doc = self.gui.document
		stim = forceGetPath(doc, "/Stimulus:ModelBuilderStimulus")
		for e in stim.getElements(depth=1):
			e.sever()
		ic = forceGetPath(doc, "/Stimulus:ModelBuilderStimulus/IClamp:inject")
		exp.setAttrib("Start", 5)
		exp.setAttrib("Amp", 5)
		exp.setAttrib("Stop", 10)
		exp.setAttrib("Id", 1)
		ref = forceGetPath(doc, "/Stimulus:ModelBuilderStimulus/IClamp:inject/ElementReference:Section")
		ref.setAttrib('Target', target.upath())
		ref.setAttrib('Data', 0.5)
		exp=forceGetPath(doc, "/Experiment:ModelBuilderExperiment")
		exp.setAttrib('secondorder', 2)
		exp.setAttrib('Simulator', 'Neuron')
		exp.setAttrib('celsius', 20)
		exp.setAttrib('time', 20)
		exp.setAttrib('dt', 0.05)
		for e in exp.getElements(depth=1):
			e.sever()
		ref = forceGetPath(doc, "/Experiment:ModelBuilderExperiment/ElementReference:Cell")
		ref.setAttrib('Target', self.cell.upath())
		ref = forceGetPath(doc, "/Experiment:ModelBuilderExperiment/ElementReference:Stimulus")
		ref.setAttrib(doc, "Target", "/Stimulus:ModelBuilderStimulus")
		rec=forceGetPath(doc, "/Experiment:ModelBuilderExperiment/Recording:v")
		rec.setAttrib("Variable", 'v')
		rec.setAttrib("DataType", "d")
		rec.setAttrib("SamplesPerSecond", 10000.0)
		ref = forceGetPath(doc, "/Experiment:ModelBuilderExperiment/Recording:v/ElementReference:Section")
		ref.setAttrib('Target', target.upath())
		ref.setAttrib('Data', 0.5)
Exemple #8
0
def allVaricsToData(doc, upath="/Data:CombinedVaricData"):
	els = doc.getElements('Fiducial', {'Style':'spheres'})
	ds = forceGetPath(doc, upath)
	dat = row_stack([e.getPoints()[:,:3] for e in els])
	ds.datinit(dat, {'SampleType':'points'})