def process(self, waveform, events, display=True): self.deletedFits = [] for item in self.plotItems: try: item.sigClicked.disconnect(self.fitClicked) except: pass self.plotItems = [] tau = waveform.infoCopy(-1).get('expDeconvolveTau', None) dt = (waveform.xvals(0)[1:] - waveform.xvals(0)[:-1]).mean() opts = { 'dt': dt, 'tau': tau, 'multiFit': self.ctrls['multiFit'].isChecked(), 'waveform': waveform.view(np.ndarray), 'tvals': waveform.xvals('Time'), 'ampMax':self.ctrls['Amplitude_UpperBound'].value(), 'riseTauMax':self.ctrls['RiseTau_UpperBound'].value(), 'decayTauMax':self.ctrls['DecayTau_UpperBound'].value() } output = self.fitEvents(events, startEvent=0, stopEvent=len(events), opts=opts) guesses = output['guesses'] eventData = output['eventData'] indexes = output['indexes'] xVals = output['xVals'] yVals = output['yVals'] output = output['output'] for i in range(len(indexes)): if display and self['plot'].isConnected(): if self.ctrls['plotFits'].isChecked(): item = pg.PlotDataItem(x=xVals[i], y=yVals[i], pen=(0, 0, 255), clickable=True) item.setZValue(100) self.plotItems.append(item) item.eventIndex = indexes[i] item.sigClicked.connect(self.fitClicked) item.deleted = False if self.ctrls['plotGuess'].isChecked(): item2 = pg.PlotDataItem(x=xVals[i], y=functions.expPulse(guesses[i], xVals[i]), pen=(255, 0, 0)) item2.setZValue(100) self.plotItems.append(item2) if self.ctrls['plotEvents'].isChecked(): item2 = pg.PlotDataItem(x=xVals[i], y=eventData[i], pen=(0, 255, 0)) item2.setZValue(100) self.plotItems.append(item2) #plot = self.plot.connections().keys()[0].node().getPlot() #plot.addItem(item) self.outputData = output return {'output': output, 'plot': self.plotItems}
def __init__(self, name): CtrlNode.__init__(self, name, terminals={ 'data': {'io': 'in'}, 'fitParams': {'io': 'out'}, 'output': {'io': 'out', 'bypass': '******'}, 'plot': {'io': 'out'}, }) self.plotItem = pg.PlotDataItem()
def process(self, waveform, events, display=True): self.deletedFits = [] for item in self.plotItems: try: item.sigClicked.disconnect(self.fitClicked) except: pass self.plotItems = [] tau = waveform.infoCopy(-1).get('expDeconvolveTau', None) dt = waveform.xvals(0)[1] - waveform.xvals(0)[0] opts = { 'dt': dt, 'tau': tau, 'multiFit': self.ctrls['multiFit'].isChecked(), 'waveform': waveform.view(np.ndarray), 'tvals': waveform.xvals('Time'), } #if not self.ctrls['parallel'].isChecked(): output = processEventFits(events, startEvent=0, stopEvent=len(events), opts=opts) guesses = output['guesses'] eventData = output['eventData'] indexes = output['indexes'] xVals = output['xVals'] yVals = output['yVals'] output = output['output'] #else: #print "parallel:", self.pool, self.poolSize #results = [] #nProcesses = self.ctrls['nProcesses'].value() #evPerProcess = int(len(events) / nProcesses) #start = 0 #for i in range(nProcesses): #stop = start + evPerProcess #if stop > len(events): #stop = len(events) #args = (events, start, stop, opts) #results.append(self.pool.apply_async(processEventFits, args)) #print "started process", start, stop #start = stop #data = [] #guesses = [] #eventData = [] #indexes = [] #xVals = [] #yVals = [] #for res in results: ## reconstruct results here #print "getting result", res #output = res.get(10) #data.append(output['output']) #guesses.extend(output['guesses']) #eventData.extend(output['eventData']) #indexes.extend(output['indexes']) #xVals.extend(output['xVals']) #yVals.extend(output['yVals']) #output = np.concatenate(data) for i in range(len(indexes)): if display and self['plot'].isConnected(): if self.ctrls['plotFits'].isChecked(): item = pg.PlotDataItem(x=xVals[i], y=yVals[i], pen=(0, 0, 255), clickable=True) item.setZValue(100) self.plotItems.append(item) item.eventIndex = indexes[i] item.sigClicked.connect(self.fitClicked) item.deleted = False if self.ctrls['plotGuess'].isChecked(): item2 = pg.PlotDataItem(x=xVals[i], y=functions.pspFunc(guesses[i], xVals[i]), pen=(255, 0, 0)) item2.setZValue(100) self.plotItems.append(item2) if self.ctrls['plotEvents'].isChecked(): item2 = pg.PlotDataItem(x=xVals[i], y=eventData[i], pen=(0, 255, 0)) item2.setZValue(100) self.plotItems.append(item2) #plot = self.plot.connections().keys()[0].node().getPlot() #plot.addItem(item) self.outputData = output return {'output': output, 'plot': self.plotItems}