def __init__(self, host): AnalysisModule.__init__(self, host) if self.dataModel is None: raise Exception( "Photostim analysis module requires a data model, but none is loaded yet." ) self.dbIdentity = "Photostim" ## how we identify to the database; this determines which tables we own self.selectedSpot = None ## setup analysis flowchart modPath = os.path.abspath(os.path.split(__file__)[0]) flowchartDir = os.path.join(modPath, "analysis_fc") self.flowchart = Flowchart(filePath=flowchartDir) self.flowchart.addInput('events') self.flowchart.addInput('regions') self.flowchart.addInput('fileHandle') self.flowchart.addOutput('dataOut') self.analysisCtrl = self.flowchart.widget() ## color mapper self.mapper = ColorMapper.ColorMapper( filePath=os.path.join(modPath, "colormaps")) self.mapCtrl = QtGui.QWidget() self.mapLayout = QtGui.QVBoxLayout() self.mapCtrl.setLayout(self.mapLayout) self.mapLayout.splitter = QtGui.QSplitter() self.mapLayout.splitter.setOrientation(QtCore.Qt.Vertical) self.mapLayout.splitter.setContentsMargins(0, 0, 0, 0) self.mapLayout.addWidget(self.mapLayout.splitter) self.mapLayout.splitter.addWidget(self.analysisCtrl) #self.mapLayout.splitter.addWidget(QtGui.QSplitter()) self.mapLayout.splitter.addWidget(self.mapper) #self.mapLayout.splitter.addWidget(self.recolorBtn) self.recolorLayout = QtGui.QHBoxLayout() self.recolorWidget = QtGui.QWidget() self.mapLayout.splitter.addWidget(self.recolorWidget) self.recolorWidget.setLayout(self.recolorLayout) self.recolorBtn = QtGui.QPushButton('Recolor') self.recolorLayout.addWidget(self.recolorBtn) self.recolorParallelCheck = QtGui.QCheckBox('Parallel') self.recolorParallelCheck.setChecked(True) self.recolorLayout.addWidget(self.recolorParallelCheck) ## scatter plot self.scatterPlot = ScatterPlotter() self.scatterPlot.sigClicked.connect(self.scatterPlotClicked) ## setup map DB ctrl self.dbCtrl = DBCtrl(self, self.dbIdentity) ## storage for map data #self.scanItems = {} self.scans = [] #self.seriesScans = {} self.maps = [] ## create event detector fcDir = os.path.join(os.path.abspath(os.path.split(__file__)[0]), "detector_fc") self.detector = EventDetector.EventDetector( host, flowchartDir=fcDir, dbIdentity=self.dbIdentity + '.events') ## override some of its elements self.detector.setElement('File Loader', self) self.detector.setElement('Database', self.dbCtrl) ## Create element list, importing some gui elements from event detector elems = self.detector.listElements() self._elements_ = OrderedDict([ ('Database', { 'type': 'ctrl', 'object': self.dbCtrl, 'size': (300, 600) }), ('Scatter Plot', { 'type': 'ctrl', 'object': self.scatterPlot, 'pos': ('right', ), 'size': (700, 400) }), ('Canvas', { 'type': 'canvas', 'pos': ('above', 'Scatter Plot'), 'size': (700, 400), 'allowTransforms': False, 'hideCtrl': True, 'args': { 'name': 'Photostim' } }), #('Maps', {'type': 'ctrl', 'pos': ('bottom', 'Database'), 'size': (200,200), 'object': self.mapDBCtrl}), ('Map Opts', { 'type': 'ctrl', 'object': self.mapCtrl, 'pos': ('above', 'Database'), 'size': (300, 600) }), ('Detection Opts', elems['Detection Opts'].setParams(pos=('above', 'Map Opts'), size=(300, 600))), ('File Loader', { 'type': 'fileInput', 'size': (300, 300), 'pos': ('above', 'Detection Opts'), 'host': self, 'showFileTree': False }), ('Data Plot', elems['Data Plot'].setParams(pos=('bottom', 'Canvas'), size=(700, 200))), ('Filter Plot', elems['Filter Plot'].setParams(pos=('bottom', 'Data Plot'), size=(700, 200))), ('Event Table', elems['Output Table'].setParams(pos=('below', 'Filter Plot'), size=(700, 200))), ('Stats', { 'type': 'dataTree', 'size': (700, 200), 'pos': ('below', 'Event Table') }), ]) self.initializeElements() try: ## load default chart self.flowchart.loadFile(os.path.join(flowchartDir, 'default.fc')) except: debug.printExc('Error loading default flowchart:') self.detector.flowchart.sigOutputChanged.connect( self.detectorOutputChanged) self.flowchart.sigOutputChanged.connect(self.analyzerOutputChanged) self.detector.flowchart.sigStateChanged.connect( self.detectorStateChanged) self.flowchart.sigStateChanged.connect(self.analyzerStateChanged) self.recolorBtn.clicked.connect(self.recolor)