psocake/src/LabelPanel.py

Go to the documentation of this file.
00001 import numpy as np
00002 import h5py
00003 import os
00004 from pyqtgraph.parametertree import Parameter, ParameterTree
00005 from pyqtgraph.dockarea import *
00006 
00007 class Labels(object):
00008     def __init__(self, parent = None):
00009         
00010         #print "init!!!!!"
00011         self.parent = parent
00012 
00013         ## Dock: Labels
00014         self.dLabels = Dock("Labels", size=(1, 1))
00015         self.wLabels = ParameterTree()
00016         self.wLabels.setWindowTitle('Labels')
00017         self.dLabels.addWidget(self.wLabels)
00018 
00019         self.labels_grp = 'Labels'
00020         self.labels_A_str = 'Single'
00021         self.labels_B_str = 'Multi'
00022         self.labels_C_str = 'Dunno'
00023 
00024         self.labelA = False
00025         self.labelB = False
00026         self.labelC = False
00027         #######################
00028         # Mandatory parameter #
00029         #######################
00030         self.params = [
00031             {'name': self.labels_grp, 'type': 'group', 'children': [
00032                 {'name': self.labels_A_str, 'type': 'bool', 'value': self.labelA, 'tip': "Single"},
00033                 {'name': self.labels_B_str, 'type': 'bool', 'value': self.labelB, 'tip': "Multi"},
00034                 {'name': self.labels_C_str, 'type': 'bool', 'value': self.labelC, 'tip': "Dunno"},
00035             ]},
00036         ]
00037 
00038         self.pLabels = Parameter.create(name='paramsLabel', type='group', \
00039                                    children=self.params, expanded=True)
00040         self.pLabels.sigTreeStateChanged.connect(self.change)
00041         self.wLabels.setParameters(self.pLabels, showTop=False)
00042 
00043     # If anything changes in the parameter tree, print a message
00044     def change(self, panel, changes):
00045         for param, change, data in changes:
00046             path = panel.childPath(param)
00047             if self.parent.args.v >= 1:
00048                 print('  path: %s' % path)
00049                 print('  change:    %s' % change)
00050                 print('  data:      %s' % str(data))
00051                 print('  ----------')
00052             self.paramUpdate(path, data)
00053 
00054     ##############################
00055     # Mandatory parameter update #
00056     ##############################
00057     def paramUpdate(self, path, data):
00058         global dset
00059         if path[1] == self.labels_A_str:
00060             self.labelA = data
00061             if data:
00062                 dset[self.parent.eventNumber] = 1
00063             else:
00064                 dset[self.parent.eventNumber] = 0
00065         elif path[1] == self.labels_B_str:
00066             self.labelB = data
00067             if data:
00068                 dset[self.parent.eventNumber] = 2
00069             else:
00070                 dset[self.parent.eventNumber] = 0
00071         elif path[1] == self.labels_C_str:
00072             self.labelC = data
00073             if data:
00074                 dset[self.parent.eventNumber] = 3
00075             else:
00076                 dset[self.parent.eventNumber] = 0
00077 
00078     def refresh(self):
00079         fname = self.parent.psocakeRunDir + '/' + self.parent.experimentName + '_' + str(self.parent.runNumber).zfill(4) + '_labels.h5'
00080         global dset
00081         print "##### fname: ", fname
00082         if self.parent.runNumber > 0:
00083             if os.path.exists(fname):
00084                labels = h5py.File(fname, 'r+', dtype = 'i8')
00085             else:
00086                labels = h5py.File(fname, 'w', dtype = 'i8')
00087             try:
00088                 dset = labels["labels"]
00089             except: # corrupt dataset, so create a new one
00090                 print labels
00091                 dset = labels.create_dataset("labels", (self.parent.exp.eventTotal, 1))
00092             #print dset.shape
00093             self.labelA = False
00094             self.labelB = False
00095             self.labelC = False
00096             if dset[self.parent.eventNumber] == 1:
00097                 self.labelA = True
00098             elif dset[self.parent.eventNumber] == 2:
00099                 self.labelB = True
00100             elif dset[self.parent.eventNumber] == 3:
00101                 self.labelC = True
00102             self.pLabels.param(self.labels_grp, self.labels_A_str).setValue(self.labelA)
00103             self.pLabels.param(self.labels_grp, self.labels_B_str).setValue(self.labelB)
00104             self.pLabels.param(self.labels_grp, self.labels_C_str).setValue(self.labelC)

Generated on 19 Dec 2016 for PSDMSoftware by  doxygen 1.4.7