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
00011 self.parent = parent
00012
00013
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
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
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
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:
00090 print labels
00091 dset = labels.create_dataset("labels", (self.parent.exp.eventTotal, 1))
00092
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)