def __init__(self, mobject, undolen=defaults.OBJECT_EDIT_UNDO_LENGTH, parent=None): QtGui.QTableView.__init__(self, parent) #self.setEditTriggers(self.DoubleClicked | self.SelectedClicked | self.EditKeyPressed) vh = self.verticalHeader() vh.setVisible(False) hh = self.horizontalHeader() hh.setStretchLastSection(True) self.setAlternatingRowColors(True) self.resizeColumnsToContents() self.setModel(ObjectEditModel(mobject, undolen=undolen)) self.colorButton = QtGui.QPushButton() self.colorDialog = QtGui.QColorDialog() self.textEdit = QTextEdit() try: notesIndex = self.model().fields.index("Notes") self.setIndexWidget(self.model().index(notesIndex,1), self.textEdit) info = moose.Annotator(self.model().mooseObject.path+'/info') self.textEdit.setText(QtCore.QString(info.getField('notes'))) self.setRowHeight(notesIndex, self.rowHeight(notesIndex) * 3) # self.colorDialog.colorSelected.connect( # lambda color: # # self.setColor(getColor(self.model().mooseObject.path+'/info')[1]) except: pass try: colorIndex = self.model().fields.index("Color") self.colorButton.clicked.connect(self.colorDialog.show) self.colorButton.setFocusPolicy(PyQt4.QtCore.Qt.NoFocus) self.colorDialog.colorSelected.connect( lambda color: self.colorButton.setStyleSheet( "QPushButton {" + "background-color: {0}; color: {0};".format(color.name()) + "}" ) ) self.setIndexWidget(self.model().index(colorIndex,1), self.colorButton) # self.colorDialog.colorSelected.connect( # lambda color: # self.setColor(getColor(self.model().mooseObject.path+'/info')[1]) except: pass print(('Created view with', mobject))
def plotAllData(self): """Plot data from existing tables""" self.axesRef.lines = [] self.pathToLine.clear() self.removeSubmenu.clear() if self.legend is not None: self.legend.set_visible(False) path = self.model.path modelroot = self.model.path time = moose.Clock('/clock').currentTime tabList = [] #for tabId in moose.wildcardFind('%s/##[TYPE=Table]' % (path)): #harsha: policy graphs will be under /model/modelName need to change in kkit #for tabId in moose.wildcardFind('%s/##[TYPE=Table]' % (modelroot)): plotTables = list(moose.wildcardFind(self.graph.path + '/##[TYPE=Table]')) plotTables.extend(moose.wildcardFind(self.graph.path + '/##[TYPE=Table2]')) if len (plotTables) > 0: for tabId in plotTables: tab = moose.Table(tabId) #print("Table =>", tab) line_list=[] tableObject = tab.neighbors['requestOut'] # Not a good way #tableObject.msgOut[0] if len(tableObject) > 0: # This is the default case: we do not plot the same # table twice. But in special cases we want to have # multiple variations of the same table on different # axes. # #Harsha: Adding color to graph for signalling model, check if given path has cubemesh or cylmesh color = '#FFFFFF' if moose.exists(tableObject[0].path + '/info'): color = getColor(tableObject[0].path + '/info') color = str(color[1].name()).upper() lines = self.pathToLine[tab.path] if len(lines) == 0: #Harsha: pass color for plot if exist and not white else random color #print "tab in plotAllData ",tab, tab.path,tab.name field = tab.path.rpartition(".")[-1] if field.endswith("[0]") or field.endswith("_0_"): field = field[:-3] # label = ( tableObject[0].path.partition(self.model.path + "/model[0]/")[-1] # + "." # + field # ) label = ( tableObject[0].path.rpartition("/")[-1] + "." + field ) self.makeRemovePlotAction(label, tab) if (color != '#FFFFFF'): newLines = self.addTimeSeries(tab, label=label,color=color) else: newLines = self.addTimeSeries(tab, label=label) self.pathToLine[tab.path].update(newLines) for line in newLines: self.lineToDataSource[line] = PlotDataSource(x='/clock', y=tab.path, z='') else: for line in lines: dataSrc = self.lineToDataSource[line] xSrc = moose.element(dataSrc.x) ySrc = moose.element(dataSrc.y) if isinstance(xSrc, moose.Clock): ts = np.linspace(0, time, len(tab.vector)) elif isinstance(xSrc, moose.Table): ts = xSrc.vector.copy() line.set_data(ts, tab.vector.copy()) tabList.append(tab) # if len(tabList) > 0: self.legend = self.canvas.callAxesFn( 'legend' , loc='upper right' , prop= {'size' : 10 } # , bbox_to_anchor=(1.0, 0.5) , fancybox = True , shadow=False , ncol=1 ) if self.legend is not None: self.legend.draggable() self.legend.get_frame().set_alpha(0.5) self.legend.set_visible(True) self.canvas.draw()
def plotAllData(self): """Plot data from existing tables""" self.axesRef.lines = [] self.pathToLine.clear() self.removeSubmenu.clear() if self.legend is not None: self.legend.set_visible(False) path = self.model.path modelroot = self.model.path time = moose.Clock('/clock').currentTime tabList = [] #for tabId in moose.wildcardFind('%s/##[TYPE=Table]' % (path)): #harsha: policy graphs will be under /model/modelName need to change in kkit #for tabId in moose.wildcardFind('%s/##[TYPE=Table]' % (modelroot)): plotTables = list( moose.wildcardFind(self.graph.path + '/##[TYPE=Table]')) plotTables.extend( moose.wildcardFind(self.graph.path + '/##[TYPE=Table2]')) if len(plotTables) > 0: for tabId in plotTables: tab = moose.Table(tabId) #print("Table =>", tab) line_list = [] tableObject = tab.neighbors['requestOut'] # Not a good way #tableObject.msgOut[0] if len(tableObject) > 0: # This is the default case: we do not plot the same # table twice. But in special cases we want to have # multiple variations of the same table on different # axes. # #Harsha: Adding color to graph for signalling model, check if given path has cubemesh or cylmesh color = '#FFFFFF' if moose.exists(tableObject[0].path + '/info'): color = getColor(tableObject[0].path + '/info') color = str(color[1].name()).upper() lines = self.pathToLine[tab.path] if len(lines) == 0: #Harsha: pass color for plot if exist and not white else random color #print "tab in plotAllData ",tab, tab.path,tab.name field = tab.path.rpartition(".")[-1] if field.endswith("[0]") or field.endswith("_0_"): field = field[:-3] # label = ( tableObject[0].path.partition(self.model.path + "/model[0]/")[-1] # + "." # + field # ) label = (tableObject[0].path.rpartition("/")[-1] + "." + field) self.makeRemovePlotAction(label, tab) if (color != '#FFFFFF'): newLines = self.addTimeSeries(tab, label=label, color=color) else: newLines = self.addTimeSeries(tab, label=label) self.pathToLine[tab.path].update(newLines) for line in newLines: self.lineToDataSource[line] = PlotDataSource( x='/clock', y=tab.path, z='') else: for line in lines: dataSrc = self.lineToDataSource[line] xSrc = moose.element(dataSrc.x) ySrc = moose.element(dataSrc.y) if isinstance(xSrc, moose.Clock): ts = np.linspace(0, time, len(tab.vector)) elif isinstance(xSrc, moose.Table): ts = xSrc.vector.copy() line.set_data(ts, tab.vector.copy()) tabList.append(tab) # if len(tabList) > 0: self.legend = self.canvas.callAxesFn( 'legend', loc='upper right', prop={'size': 10} # , bbox_to_anchor=(1.0, 0.5) , fancybox=True, shadow=False, ncol=1) if self.legend is not None: self.legend.draggable() self.legend.get_frame().set_alpha(0.5) self.legend.set_visible(True) self.canvas.draw()