def __init__(self, filename=None, arg=None, parent=None, debug=False): QtGui.QMainWindow.__init__(self, parent) self.ui = Ui_MainWindow() self.ui.setupUi(self) self.debug=debug self.dpi = 100 self.fig = Figure((5.0, 4.0), dpi=self.dpi) self.canvas = FigureCanvas(self.fig) self.canvas.setParent(self.ui.widget) # Since we have only one plot, we can use add_axes # instead of add_subplot, but then the subplot # configuration tool in the navigation toolbar wouldn't # work. # self.axes = self.fig.add_subplot(411) self.raw = self.fig.add_subplot(412) self.plt = self.fig.add_subplot(413) self.ref = self.fig.add_subplot(414) # self.vari = self.fig.add_subplot(515) # Bind the 'pick' event for clicking on one of the bars # self.canvas.mpl_connect('pick_event', self.on_pick) # Create the navigation toolbar, tied to the canvas # self.mpl_toolbar = NavigationToolbar(self.canvas, self.ui.widget) vbox = QtGui.QVBoxLayout() vbox.addWidget(self.canvas) vbox.addWidget(self.mpl_toolbar) self.ui.widget.setLayout(vbox) # Signals/Slots self.connect(self.ui.actionOpen, QtCore.SIGNAL('triggered()'), self.loadSpec) self.connect(self.ui.sigTop, QtCore.SIGNAL('valueChanged(int)'), self.on_draw) self.connect(self.ui.Smin, QtCore.SIGNAL('valueChanged(int)'), self.on_draw) self.connect(self.ui.Smax, QtCore.SIGNAL('valueChanged(int)'), self.on_draw) self.connect(self.ui.sigBottom, QtCore.SIGNAL('valueChanged(int)'), self.on_draw) self.connect(self.ui.ref1Top, QtCore.SIGNAL('valueChanged(int)'), self.on_draw) self.connect(self.ui.ref1Bottom, QtCore.SIGNAL('valueChanged(int)'), self.on_draw) self.connect(self.ui.rawsigStdDev, QtCore.SIGNAL('stateChanged(int)'), self.on_draw) self.connect(self.ui.sigStdDev, QtCore.SIGNAL('stateChanged(int)'), self.on_draw) self.connect(self.ui.refStdDev, QtCore.SIGNAL('stateChanged(int)'), self.on_draw) self.connect(self.ui.NumSignals, QtCore.SIGNAL('valueChanged(int)'), self.on_draw) self.connect(self.ui.SigSpacing, QtCore.SIGNAL('valueChanged(double)'), self.on_draw) self.connect(self.ui.actionClose, QtCore.SIGNAL('triggered()'), self.closeEvent) self.connect(self.ui.AlignTop, QtCore.SIGNAL('clicked()'), self.AlignRefTop) self.connect(self.ui.AlignBottom, QtCore.SIGNAL('clicked()'), self.AlignRefBottom) self.connect(self.ui.BTFindAntenna, QtCore.SIGNAL('clicked()'), self.FindAntennas) self.connect(self, QtCore.SIGNAL('triggered()'), self.closeEvent) self.connect(self.ui.multisig, QtCore.SIGNAL("toggled(bool)"), self.on_draw) self.connect(self.ui.MultiRef, QtCore.SIGNAL("toggled(bool)"), self.on_draw) if filename!=None: self.loadSpec(filename)
class SpectroGUI(QtGui.QMainWindow): def __init__(self, filename=None, arg=None, parent=None): QtGui.QMainWindow.__init__(self, parent) self.ui = Ui_MainWindow() self.ui.setupUi(self) self.dpi = 100 self.fig = Figure((5.0, 4.0), dpi=self.dpi) self.canvas = FigureCanvas(self.fig) self.canvas.setParent(self.ui.widget) # Since we have only one plot, we can use add_axes # instead of add_subplot, but then the subplot # configuration tool in the navigation toolbar wouldn't # work. # self.axes = self.fig.add_subplot(411) self.raw = self.fig.add_subplot(412) self.plt = self.fig.add_subplot(413) self.ref = self.fig.add_subplot(414) # self.vari = self.fig.add_subplot(515) # Bind the 'pick' event for clicking on one of the bars # self.canvas.mpl_connect("pick_event", self.on_pick) # Create the navigation toolbar, tied to the canvas # self.mpl_toolbar = NavigationToolbar(self.canvas, self.ui.widget) vbox = QtGui.QVBoxLayout() vbox.addWidget(self.canvas) vbox.addWidget(self.mpl_toolbar) self.ui.widget.setLayout(vbox) # Signals/Slots self.connect(self.ui.actionOpen, QtCore.SIGNAL("triggered()"), self.loadSPE) self.connect(self.ui.sigTop, QtCore.SIGNAL("valueChanged(int)"), self.on_draw) self.connect(self.ui.sigBottom, QtCore.SIGNAL("valueChanged(int)"), self.on_draw) self.connect(self.ui.ref1Top, QtCore.SIGNAL("valueChanged(int)"), self.on_draw) self.connect(self.ui.ref1Bottom, QtCore.SIGNAL("valueChanged(int)"), self.on_draw) self.connect(self.ui.rawsigStdDev, QtCore.SIGNAL("stateChanged(int)"), self.on_draw) self.connect(self.ui.sigStdDev, QtCore.SIGNAL("stateChanged(int)"), self.on_draw) self.connect(self.ui.refStdDev, QtCore.SIGNAL("stateChanged(int)"), self.on_draw) self.connect(self.ui.NumSignals, QtCore.SIGNAL("valueChanged(int)"), self.on_draw) self.connect(self.ui.SigSpacing, QtCore.SIGNAL("valueChanged(double)"), self.on_draw) self.connect(self.ui.actionClose, QtCore.SIGNAL("triggered()"), self.closeEvent) self.connect(self, QtCore.SIGNAL("triggered()"), self.closeEvent) self.connect(self.ui.multisig, QtCore.SIGNAL("toggled(bool)"), self.on_draw) if filename != None: self.loadSPE(filename) def loadSPE(self, filename=None): if filename == None: fname = QtGui.QFileDialog.getOpenFileName(self, "Open file") else: fname = filename if not os.path.exists(fname): QtGui.QMessageBox.warning(self, "Warning", 'The file "%s" cannot be accessed!' % (fname)) self.data = SPEopen(fname) self.axes.imshow(self.data["rawdata"]) self.lup = [mpl.lines.Line2D([0, self.data["var"]["nx"]], [0, 0], color="red")] self.ldown = [ mpl.lines.Line2D([0, self.data["var"]["nx"]], [self.data["var"]["ny"], self.data["var"]["ny"]], color="red") ] self.axes.add_line(self.lup[0]) self.axes.add_line(self.ldown[0]) self.lref1up = mpl.lines.Line2D([0, self.data["var"]["nx"]], [0, 0], color="green") self.lref1down = mpl.lines.Line2D([0, self.data["var"]["nx"]], [0, 0], color="green") self.lref2up = mpl.lines.Line2D([0, self.data["var"]["nx"]], [0, 0], color="green") self.lref2down = mpl.lines.Line2D([0, self.data["var"]["nx"]], [0, 0], color="green") self.axes.add_line(self.lref1up) self.axes.add_line(self.lref1down) self.axes.add_line(self.lref2up) self.axes.add_line(self.lref2down) self.ui.sigBottom.setRange(1, self.data["var"]["ny"]) self.ui.sigTop.setRange(1, self.data["var"]["ny"]) self.ui.ref1Bottom.setRange(1, self.data["var"]["ny"]) self.ui.ref1Top.setRange(1, self.data["var"]["ny"]) self.ui.ref2Top.setRange(1, self.data["var"]["ny"]) self.ui.ref2Bottom.setRange(1, self.data["var"]["ny"]) trd = { "SignalUp": self.ui.sigTop, "SignalDown": self.ui.sigBottom, "Ref1Up": self.ui.ref1Top, "Ref1Down": self.ui.ref1Bottom, "Ref2Up": self.ui.ref2Top, "Ref2Down": self.ui.ref2Bottom, "NumSignals": self.ui.NumSignals, } if os.path.exists(fname[:-4] + ".txt"): ff = open(fname[:-4] + ".txt", "r") inf = {} for x in ff.readlines(): c = x.split() inf[c[0]] = c[1] for x in trd: if x in inf: trd[x].setValue(int(inf[x])) if "SignalSpacing" in inf: self.ui.SigSpacing.setValue(float(inf["SignalSpacing"])) elif fname[-6:-4] == "90" and os.path.exists(fname[:-6] + ".txt"): print("Bingo!") ff = open(fname[:-6] + ".txt", "r") inf = {} for x in ff.readlines(): c = x.split() inf[c[0]] = c[1] for x in trd: if x in inf: trd[x].setValue(int(inf[x])) if "SignalSpacing" in inf: self.ui.SigSpacing.setValue(float(inf["SignalSpacing"])) def on_pick(self): pass def closeEvent(self, event=None): print("Closing...") yup = self.ui.sigTop.value() ydown = self.ui.sigBottom.value() yrefup = self.ui.ref1Top.value() yrefdown = self.ui.ref1Bottom.value() yref2up = self.ui.ref2Top.value() yref2down = self.ui.ref2Bottom.value() n = self.ui.NumSignals.value() if n == 0: n = 1 dh = self.ui.SigSpacing.value() fname = self.data["var"]["filename"] # Write Infos ff = open(fname[:-4] + ".txt", "w") ff.write( "SignalUp\t%i\nSignalDown\t%i\nRef1Up\t%i\nRef1Down\t%i\nRef2Up\t%i\nRef2Down\t%i\nNumSignals\t%i\nSignalSpacing\t%f" % (yup, ydown, yrefup, yrefdown, yref2up, yref2down, n, dh) ) ff.close() # Write Data # prepare Data # ff=open(fname[:-4]+".dat","w") ffr = open(fname[:-4] + "_raw.dat", "w") print("Saving...") if yrefup != yrefdown: ref = np.mean(self.data["rawdata"][yrefup:yrefdown], 0) w = self.data["wavelength"] # data=[np.mean(self.data["rawdata"][yup-i*dh:ydown-i*dh],0) for i in range(n)] rawdata = [np.mean(self.data["rawdata"][yup - i * dh : ydown - i * dh], 0) for i in range(n)] # ff.write("# wavelength[nm]") ffr.write("# wavelength[nm]") for i in range(n): # ff.write("\tIntensity_antenna_%i[-]"%(i)) ffr.write("\tIntensity_antenna_%i[-]" % (i)) if yrefup != yrefdown: ffr.write("\tReference[-]") ffr.write("\n") # if yrefup!=yrefdown: # for i in range(n): # data[i]=data[i]-ref for x in range(len(rawdata[0])): # ff.write("%f"%(w[x])) ffr.write("%f" % (w[x])) for i in range(n): # ff.write("\t%f"%(data[i][x])) ffr.write("\t%f" % (rawdata[i][x])) if yrefup != yrefdown: ffr.write("\t%f" % (ref[x])) # ff.write("\n") ffr.write("\n") # ff.close() ffr.close() self.destroy() def on_draw(self): yup = self.ui.sigTop.value() ydown = self.ui.sigBottom.value() yrefup = self.ui.ref1Top.value() yrefdown = self.ui.ref1Bottom.value() yref2up = self.ui.ref2Top.value() yref2down = self.ui.ref2Bottom.value() n = self.ui.NumSignals.value() if n == 0: n = 1 dh = self.ui.SigSpacing.value() self.lup[0].set_data([0, self.data["var"]["nx"]], [yup, yup]) self.ldown[0].set_data([0, self.data["var"]["nx"]], [ydown, ydown]) self.lref1up.set_data([0, self.data["var"]["nx"]], [yrefup, yrefup]) self.lref1down.set_data([0, self.data["var"]["nx"]], [yrefdown, yrefdown]) self.lref2up.set_data([0, self.data["var"]["nx"]], [yref2up, yref2up]) self.lref2down.set_data([0, self.data["var"]["nx"]], [yref2down, yref2down]) self.plt.clear() self.ref.clear() self.raw.clear() self.ref.clear() # Signals data = [np.mean(self.data["rawdata"][yup:ydown], 0)] self.raw.plot(self.data["wavelength"], data[0], color="black") if self.ui.multisig.checkState() == QtCore.Qt.Checked: if len(self.lup) > n: for i in range(n + 1, len(self.lup)): self.axes.remove(self.lup[i]) self.axes.remove(self.ldown[i]) self.lup = self.lup[:n] self.ldown = self.ldown[:n] if n > 1: if len(self.lup) < n: for i in range(len(self.lup), n): self.lup.append(mpl.lines.Line2D([0, self.data["var"]["nx"]], [0, 0], color="red")) self.ldown.append(mpl.lines.Line2D([0, self.data["var"]["nx"]], [0, 0], color="red")) self.axes.add_line(self.lup[i]) self.axes.add_line(self.ldown[i]) for i in range(1, n): data.append(np.mean(self.data["rawdata"][int(yup - dh * i) : int(ydown - dh * i)], 0)) self.raw.plot(self.data["wavelength"], data[i]) self.lup[i].set_data([0, self.data["var"]["nx"]], [int(yup - dh * i), int(yup - dh * i)]) self.ldown[i].set_data([0, self.data["var"]["nx"]], [int(ydown - dh * i), int(ydown - dh * i)]) # Sig StdDev drs = np.sqrt(np.var(self.data["rawdata"][yup:ydown], 0)) if self.ui.rawsigStdDev.checkState() == QtCore.Qt.Checked: vx, vy = mlab.poly_between(self.data["wavelength"], data[0] - drs, data[0] + drs) self.raw.fill(vx, vy, color="red") # Reference Signal if yrefup != yrefdown: ref = np.mean(self.data["rawdata"][yrefup:yrefdown], 0) self.ref.plot(self.data["wavelength"], ref, color="black") # Std Dev delta = np.sqrt(np.var(self.data["rawdata"][yrefup:yrefdown], 0)) if self.ui.refStdDev.checkState() == QtCore.Qt.Checked: vx, vy = mlab.poly_between(self.data["wavelength"], ref - delta, ref + delta) self.ref.fill(vx, vy, color="blue") DS = np.sqrt((drs / ref) ** 2 + ((data[0] * delta) / (ref ** 2)) ** 2) data[0] = data[0] / ref self.plt.plot(self.data["wavelength"], data[0], color="black") if self.ui.multisig.checkState() == QtCore.Qt.Checked: if n > 1: for i in range(1, n): data[i] = data[i] - ref self.plt.plot(self.data["wavelength"], data[i]) if self.ui.sigStdDev.checkState() == QtCore.Qt.Checked: vx, vy = mlab.poly_between(self.data["wavelength"], data[0] - DS, data[0] + DS) self.plt.fill(vx, vy) self.canvas.draw()
def __init__(self, filename=None, arg=None, parent=None): QtGui.QMainWindow.__init__(self, parent) self.ui = Ui_MainWindow() self.ui.setupUi(self) self.dpi = 100 self.fig = Figure((5.0, 4.0), dpi=self.dpi) self.canvas = FigureCanvas(self.fig) self.canvas.setParent(self.ui.widget) # Since we have only one plot, we can use add_axes # instead of add_subplot, but then the subplot # configuration tool in the navigation toolbar wouldn't # work. # self.axes = self.fig.add_subplot(411) self.raw = self.fig.add_subplot(412) self.plt = self.fig.add_subplot(413) self.ref = self.fig.add_subplot(414) # self.vari = self.fig.add_subplot(515) # Bind the 'pick' event for clicking on one of the bars # self.canvas.mpl_connect('pick_event', self.on_pick) # Create the navigation toolbar, tied to the canvas # self.mpl_toolbar = NavigationToolbar(self.canvas, self.ui.widget) vbox = QtGui.QVBoxLayout() vbox.addWidget(self.canvas) vbox.addWidget(self.mpl_toolbar) self.ui.widget.setLayout(vbox) # Signals/Slots self.connect(self.ui.actionOpen, QtCore.SIGNAL('triggered()'), self.loadSPE) self.connect(self.ui.sigTop, QtCore.SIGNAL('valueChanged(int)'), self.on_draw) self.connect(self.ui.sigBottom, QtCore.SIGNAL('valueChanged(int)'), self.on_draw) self.connect(self.ui.ref1Top, QtCore.SIGNAL('valueChanged(int)'), self.on_draw) self.connect(self.ui.ref1Bottom, QtCore.SIGNAL('valueChanged(int)'), self.on_draw) self.connect(self.ui.rawsigStdDev, QtCore.SIGNAL('stateChanged(int)'), self.on_draw) self.connect(self.ui.sigStdDev, QtCore.SIGNAL('stateChanged(int)'), self.on_draw) self.connect(self.ui.refStdDev, QtCore.SIGNAL('stateChanged(int)'), self.on_draw) self.connect(self.ui.NumSignals, QtCore.SIGNAL('valueChanged(int)'), self.on_draw) self.connect(self.ui.SigSpacing, QtCore.SIGNAL('valueChanged(double)'), self.on_draw) self.connect(self.ui.actionClose, QtCore.SIGNAL('triggered()'), self.closeEvent) self.connect(self, QtCore.SIGNAL('triggered()'), self.closeEvent) self.connect(self.ui.multisig, QtCore.SIGNAL("toggled(bool)"), self.on_draw) if filename != None: self.loadSPE(filename)
class SpectroGUI(QtGui.QMainWindow): def __init__(self, filename=None, arg=None, parent=None): QtGui.QMainWindow.__init__(self, parent) self.ui = Ui_MainWindow() self.ui.setupUi(self) self.dpi = 100 self.fig = Figure((5.0, 4.0), dpi=self.dpi) self.canvas = FigureCanvas(self.fig) self.canvas.setParent(self.ui.widget) # Since we have only one plot, we can use add_axes # instead of add_subplot, but then the subplot # configuration tool in the navigation toolbar wouldn't # work. # self.axes = self.fig.add_subplot(411) self.raw = self.fig.add_subplot(412) self.plt = self.fig.add_subplot(413) self.ref = self.fig.add_subplot(414) # self.vari = self.fig.add_subplot(515) # Bind the 'pick' event for clicking on one of the bars # self.canvas.mpl_connect('pick_event', self.on_pick) # Create the navigation toolbar, tied to the canvas # self.mpl_toolbar = NavigationToolbar(self.canvas, self.ui.widget) vbox = QtGui.QVBoxLayout() vbox.addWidget(self.canvas) vbox.addWidget(self.mpl_toolbar) self.ui.widget.setLayout(vbox) # Signals/Slots self.connect(self.ui.actionOpen, QtCore.SIGNAL('triggered()'), self.loadSPE) self.connect(self.ui.sigTop, QtCore.SIGNAL('valueChanged(int)'), self.on_draw) self.connect(self.ui.sigBottom, QtCore.SIGNAL('valueChanged(int)'), self.on_draw) self.connect(self.ui.ref1Top, QtCore.SIGNAL('valueChanged(int)'), self.on_draw) self.connect(self.ui.ref1Bottom, QtCore.SIGNAL('valueChanged(int)'), self.on_draw) self.connect(self.ui.rawsigStdDev, QtCore.SIGNAL('stateChanged(int)'), self.on_draw) self.connect(self.ui.sigStdDev, QtCore.SIGNAL('stateChanged(int)'), self.on_draw) self.connect(self.ui.refStdDev, QtCore.SIGNAL('stateChanged(int)'), self.on_draw) self.connect(self.ui.NumSignals, QtCore.SIGNAL('valueChanged(int)'), self.on_draw) self.connect(self.ui.SigSpacing, QtCore.SIGNAL('valueChanged(double)'), self.on_draw) self.connect(self.ui.actionClose, QtCore.SIGNAL('triggered()'), self.closeEvent) self.connect(self, QtCore.SIGNAL('triggered()'), self.closeEvent) self.connect(self.ui.multisig, QtCore.SIGNAL("toggled(bool)"), self.on_draw) if filename != None: self.loadSPE(filename) def loadSPE(self, filename=None): if filename == None: fname = QtGui.QFileDialog.getOpenFileName(self, 'Open file') else: fname = filename if not os.path.exists(fname): QtGui.QMessageBox.warning( self, "Warning", "The file \"%s\" cannot be accessed!" % (fname)) self.data = SPEopen(fname) self.axes.imshow(self.data["rawdata"]) self.lup = [ mpl.lines.Line2D([0, self.data["var"]['nx']], [0, 0], color="red") ] self.ldown = [ mpl.lines.Line2D([0, self.data["var"]['nx']], [self.data["var"]['ny'], self.data["var"]['ny']], color="red") ] self.axes.add_line(self.lup[0]) self.axes.add_line(self.ldown[0]) self.lref1up = mpl.lines.Line2D([0, self.data["var"]['nx']], [0, 0], color="green") self.lref1down = mpl.lines.Line2D([0, self.data["var"]['nx']], [0, 0], color="green") self.lref2up = mpl.lines.Line2D([0, self.data["var"]['nx']], [0, 0], color="green") self.lref2down = mpl.lines.Line2D([0, self.data["var"]['nx']], [0, 0], color="green") self.axes.add_line(self.lref1up) self.axes.add_line(self.lref1down) self.axes.add_line(self.lref2up) self.axes.add_line(self.lref2down) self.ui.sigBottom.setRange(1, self.data["var"]["ny"]) self.ui.sigTop.setRange(1, self.data["var"]["ny"]) self.ui.ref1Bottom.setRange(1, self.data["var"]["ny"]) self.ui.ref1Top.setRange(1, self.data["var"]["ny"]) self.ui.ref2Top.setRange(1, self.data["var"]["ny"]) self.ui.ref2Bottom.setRange(1, self.data["var"]["ny"]) trd = { "SignalUp": self.ui.sigTop, "SignalDown": self.ui.sigBottom, "Ref1Up": self.ui.ref1Top, "Ref1Down": self.ui.ref1Bottom, "Ref2Up": self.ui.ref2Top, "Ref2Down": self.ui.ref2Bottom, "NumSignals": self.ui.NumSignals } if os.path.exists(fname[:-4] + ".txt"): ff = open(fname[:-4] + ".txt", "r") inf = {} for x in ff.readlines(): c = x.split() inf[c[0]] = c[1] for x in trd: if x in inf: trd[x].setValue(int(inf[x])) if "SignalSpacing" in inf: self.ui.SigSpacing.setValue(float(inf["SignalSpacing"])) elif fname[-6:-4] == "90" and os.path.exists(fname[:-6] + ".txt"): print("Bingo!") ff = open(fname[:-6] + ".txt", "r") inf = {} for x in ff.readlines(): c = x.split() inf[c[0]] = c[1] for x in trd: if x in inf: trd[x].setValue(int(inf[x])) if "SignalSpacing" in inf: self.ui.SigSpacing.setValue(float(inf["SignalSpacing"])) def on_pick(self): pass def closeEvent(self, event=None): print("Closing...") yup = self.ui.sigTop.value() ydown = self.ui.sigBottom.value() yrefup = self.ui.ref1Top.value() yrefdown = self.ui.ref1Bottom.value() yref2up = self.ui.ref2Top.value() yref2down = self.ui.ref2Bottom.value() n = self.ui.NumSignals.value() if n == 0: n = 1 dh = self.ui.SigSpacing.value() fname = self.data["var"]["filename"] # Write Infos ff = open(fname[:-4] + ".txt", "w") ff.write( "SignalUp\t%i\nSignalDown\t%i\nRef1Up\t%i\nRef1Down\t%i\nRef2Up\t%i\nRef2Down\t%i\nNumSignals\t%i\nSignalSpacing\t%f" % (yup, ydown, yrefup, yrefdown, yref2up, yref2down, n, dh)) ff.close() # Write Data # prepare Data #ff=open(fname[:-4]+".dat","w") ffr = open(fname[:-4] + "_raw.dat", "w") print("Saving...") if yrefup != yrefdown: ref = np.mean(self.data["rawdata"][yrefup:yrefdown], 0) w = self.data["wavelength"] #data=[np.mean(self.data["rawdata"][yup-i*dh:ydown-i*dh],0) for i in range(n)] rawdata = [ np.mean(self.data["rawdata"][yup - i * dh:ydown - i * dh], 0) for i in range(n) ] #ff.write("# wavelength[nm]") ffr.write("# wavelength[nm]") for i in range(n): #ff.write("\tIntensity_antenna_%i[-]"%(i)) ffr.write("\tIntensity_antenna_%i[-]" % (i)) if yrefup != yrefdown: ffr.write("\tReference[-]") ffr.write("\n") #if yrefup!=yrefdown: #for i in range(n): #data[i]=data[i]-ref for x in range(len(rawdata[0])): #ff.write("%f"%(w[x])) ffr.write("%f" % (w[x])) for i in range(n): #ff.write("\t%f"%(data[i][x])) ffr.write("\t%f" % (rawdata[i][x])) if yrefup != yrefdown: ffr.write("\t%f" % (ref[x])) #ff.write("\n") ffr.write("\n") #ff.close() ffr.close() self.destroy() def on_draw(self): yup = self.ui.sigTop.value() ydown = self.ui.sigBottom.value() yrefup = self.ui.ref1Top.value() yrefdown = self.ui.ref1Bottom.value() yref2up = self.ui.ref2Top.value() yref2down = self.ui.ref2Bottom.value() n = self.ui.NumSignals.value() if n == 0: n = 1 dh = self.ui.SigSpacing.value() self.lup[0].set_data([0, self.data["var"]['nx']], [yup, yup]) self.ldown[0].set_data([0, self.data["var"]['nx']], [ydown, ydown]) self.lref1up.set_data([0, self.data["var"]['nx']], [yrefup, yrefup]) self.lref1down.set_data([0, self.data["var"]['nx']], [yrefdown, yrefdown]) self.lref2up.set_data([0, self.data["var"]['nx']], [yref2up, yref2up]) self.lref2down.set_data([0, self.data["var"]['nx']], [yref2down, yref2down]) self.plt.clear() self.ref.clear() self.raw.clear() self.ref.clear() # Signals data = [np.mean(self.data["rawdata"][yup:ydown], 0)] self.raw.plot(self.data["wavelength"], data[0], color="black") if self.ui.multisig.checkState() == QtCore.Qt.Checked: if len(self.lup) > n: for i in range(n + 1, len(self.lup)): self.axes.remove(self.lup[i]) self.axes.remove(self.ldown[i]) self.lup = self.lup[:n] self.ldown = self.ldown[:n] if n > 1: if len(self.lup) < n: for i in range(len(self.lup), n): self.lup.append( mpl.lines.Line2D([0, self.data["var"]['nx']], [0, 0], color="red")) self.ldown.append( mpl.lines.Line2D([0, self.data["var"]['nx']], [0, 0], color="red")) self.axes.add_line(self.lup[i]) self.axes.add_line(self.ldown[i]) for i in range(1, n): data.append( np.mean( self.data["rawdata"][int(yup - dh * i):int(ydown - dh * i)], 0)) self.raw.plot(self.data["wavelength"], data[i]) self.lup[i].set_data( [0, self.data["var"]['nx']], [int(yup - dh * i), int(yup - dh * i)]) self.ldown[i].set_data( [0, self.data["var"]['nx']], [int(ydown - dh * i), int(ydown - dh * i)]) # Sig StdDev drs = np.sqrt(np.var(self.data["rawdata"][yup:ydown], 0)) if self.ui.rawsigStdDev.checkState() == QtCore.Qt.Checked: vx, vy = mlab.poly_between(self.data["wavelength"], data[0] - drs, data[0] + drs) self.raw.fill(vx, vy, color="red") # Reference Signal if yrefup != yrefdown: ref = np.mean(self.data["rawdata"][yrefup:yrefdown], 0) self.ref.plot(self.data["wavelength"], ref, color="black") # Std Dev delta = np.sqrt(np.var(self.data["rawdata"][yrefup:yrefdown], 0)) if self.ui.refStdDev.checkState() == QtCore.Qt.Checked: vx, vy = mlab.poly_between(self.data["wavelength"], ref - delta, ref + delta) self.ref.fill(vx, vy, color="blue") DS = np.sqrt((drs / ref)**2 + ((data[0] * delta) / (ref**2))**2) data[0] = data[0] / ref self.plt.plot(self.data["wavelength"], data[0], color="black") if self.ui.multisig.checkState() == QtCore.Qt.Checked: if n > 1: for i in range(1, n): data[i] = data[i] - ref self.plt.plot(self.data["wavelength"], data[i]) if self.ui.sigStdDev.checkState() == QtCore.Qt.Checked: vx, vy = mlab.poly_between(self.data["wavelength"], data[0] - DS, data[0] + DS) self.plt.fill(vx, vy) self.canvas.draw()
class SpectroGUI(QtGui.QMainWindow): def __init__(self, filename=None, arg=None, parent=None, debug=False): QtGui.QMainWindow.__init__(self, parent) self.ui = Ui_MainWindow() self.ui.setupUi(self) self.debug=debug self.dpi = 100 self.fig = Figure((5.0, 4.0), dpi=self.dpi) self.canvas = FigureCanvas(self.fig) self.canvas.setParent(self.ui.widget) # Since we have only one plot, we can use add_axes # instead of add_subplot, but then the subplot # configuration tool in the navigation toolbar wouldn't # work. # self.axes = self.fig.add_subplot(411) self.raw = self.fig.add_subplot(412) self.plt = self.fig.add_subplot(413) self.ref = self.fig.add_subplot(414) # self.vari = self.fig.add_subplot(515) # Bind the 'pick' event for clicking on one of the bars # self.canvas.mpl_connect('pick_event', self.on_pick) # Create the navigation toolbar, tied to the canvas # self.mpl_toolbar = NavigationToolbar(self.canvas, self.ui.widget) vbox = QtGui.QVBoxLayout() vbox.addWidget(self.canvas) vbox.addWidget(self.mpl_toolbar) self.ui.widget.setLayout(vbox) # Signals/Slots self.connect(self.ui.actionOpen, QtCore.SIGNAL('triggered()'), self.loadSpec) self.connect(self.ui.sigTop, QtCore.SIGNAL('valueChanged(int)'), self.on_draw) self.connect(self.ui.Smin, QtCore.SIGNAL('valueChanged(int)'), self.on_draw) self.connect(self.ui.Smax, QtCore.SIGNAL('valueChanged(int)'), self.on_draw) self.connect(self.ui.sigBottom, QtCore.SIGNAL('valueChanged(int)'), self.on_draw) self.connect(self.ui.ref1Top, QtCore.SIGNAL('valueChanged(int)'), self.on_draw) self.connect(self.ui.ref1Bottom, QtCore.SIGNAL('valueChanged(int)'), self.on_draw) self.connect(self.ui.rawsigStdDev, QtCore.SIGNAL('stateChanged(int)'), self.on_draw) self.connect(self.ui.sigStdDev, QtCore.SIGNAL('stateChanged(int)'), self.on_draw) self.connect(self.ui.refStdDev, QtCore.SIGNAL('stateChanged(int)'), self.on_draw) self.connect(self.ui.NumSignals, QtCore.SIGNAL('valueChanged(int)'), self.on_draw) self.connect(self.ui.SigSpacing, QtCore.SIGNAL('valueChanged(double)'), self.on_draw) self.connect(self.ui.actionClose, QtCore.SIGNAL('triggered()'), self.closeEvent) self.connect(self.ui.AlignTop, QtCore.SIGNAL('clicked()'), self.AlignRefTop) self.connect(self.ui.AlignBottom, QtCore.SIGNAL('clicked()'), self.AlignRefBottom) self.connect(self.ui.BTFindAntenna, QtCore.SIGNAL('clicked()'), self.FindAntennas) self.connect(self, QtCore.SIGNAL('triggered()'), self.closeEvent) self.connect(self.ui.multisig, QtCore.SIGNAL("toggled(bool)"), self.on_draw) self.connect(self.ui.MultiRef, QtCore.SIGNAL("toggled(bool)"), self.on_draw) if filename!=None: self.loadSpec(filename) def FindAntennas(self): self.ref.clear() s=self.data["sig"][:,512] s=s/max(s) d=s[1:]-s[:-1] d=d/max(d) i=np.where(d>0.2)[0] l=0 ids=[] for x in range(len(i)-2): if i[x+1]==i[l]+1: l=x else: ids.append(i[x]) l=x+1 if(i[-1]<230): ids.append(i[-1]) self.ui.sigTop.setValue(ids[-1]-1) self.ui.sigBottom.setValue(ids[-1]+3) self.ui.multisig.setCheckState(2) self.ui.NumSignals.setValue(10) self.ui.SigSpacing.setValue(12.6) self.ui.MultiRef.setCheckState(2) self.AlignRefBottom() self.ref.plot(s) self.ref.plot(d) self.canvas.draw() def AlignRefBottom(self): self.ui.ref1Top.setSliderPosition(self.ui.sigBottom.value()+1) self.ui.ref1Bottom.setSliderPosition(2*self.ui.sigBottom.value()-self.ui.sigTop.value()+1) def AlignRefTop(self): self.ui.ref1Bottom.setSliderPosition(self.ui.sigTop.value()) self.ui.ref1Top.setSliderPosition(2*self.ui.sigTop.value()-self.ui.sigBottom.value()) def loadSpec(self, filename=None): if filename==None: fname = QtGui.QFileDialog.getOpenFileName(self, 'Open file', ".", "NumpyArray (*.npz)") else: fname=filename if not os.path.exists(fname): QtGui.QMessageBox.warning(self, "Warning", "The file \"%s\" cannot be accessed!"%(fname)) self.data=np.load(str(fname)) mmin=0 mmax=1000 self.ui.Smin.setRange(mmin,mmax) self.ui.Smax.setRange(mmin,mmax) self.ui.Smax.setSliderPosition(int(mmax)+1) self.ui.Smin.setSliderPosition(int(mmin)) self.ds=self.data['sig'].shape[::-1] # Creating Wavelength Axis x=np.arange(0,self.ds[0]) self.wavelength=np.polyval(self.data["poly"][::-1],x) self.fname=fname mmin=np.min(self.data["sig"]) mmax=np.max(self.data["sig"]) md=mmax-mmin dd=(self.ui.Smin.maximum()-self.ui.Smin.minimum()) self.lmin=self.ui.Smin.value() self.lmax=self.ui.Smax.value() cmin=mmin+(md*self.lmin)/dd cmax=mmin+(md*self.lmax)/dd self.axes.imshow(self.data["sig"],vmin=cmin,vmax=cmax) self.lup = [mpl.lines.Line2D([0,self.ds[0]],[0,0],color="red")] self.ldown = [mpl.lines.Line2D([0,self.ds[0]],[self.ds[1],self.ds[1]],color="red")] self.axes.add_line(self.lup[0]) self.axes.add_line(self.ldown[0]) self.lref1up = [mpl.lines.Line2D([0,self.ds[0]],[0,0],color="green")] self.lref1down = [mpl.lines.Line2D([0,self.ds[0]],[0,0],color="green")] self.lref2up = mpl.lines.Line2D([0,self.ds[0]],[0,0],color="green") self.lref2down = mpl.lines.Line2D([0,self.ds[0]],[0,0],color="green") self.axes.add_line(self.lref1up[0]) self.axes.add_line(self.lref1down[0]) self.axes.add_line(self.lref2up) self.axes.add_line(self.lref2down) self.ui.sigBottom.setRange(1,self.ds[1]) self.ui.sigTop.setRange(1,self.ds[1]) self.ui.ref1Bottom.setRange(1,self.ds[1]) self.ui.ref1Top.setRange(1,self.ds[1]) self.ui.ref2Top.setRange(1,self.ds[1]) self.ui.ref2Bottom.setRange(1,self.ds[1]) trd={ "SignalUp":self.ui.sigTop, "SignalDown":self.ui.sigBottom, "Ref1Up":self.ui.ref1Top, "Ref1Down":self.ui.ref1Bottom, "Ref2Up":self.ui.ref2Top, "Ref2Down":self.ui.ref2Bottom, "NumSignals":self.ui.NumSignals, "RangeUp":self.ui.Smax, "RangeDown":self.ui.Smin } if os.path.exists(fname[:-4]+".txt"): ff=open(fname[:-4]+".txt","r") inf={} for x in ff.readlines(): c=x.split() inf[c[0]]=c[1] for x in trd: if x in inf: trd[x].setValue(int(inf[x])) if "SignalSpacing" in inf: self.ui.multisig.setCheckState(QtCore.Qt.Checked) self.ui.SigSpacing.setValue(float(inf["SignalSpacing"])) if "MultiRef" in inf: self.ui.MultiRef.setCheckState(int(inf["MultiRef"])) def on_pick(self): pass def closeEvent(self, event=None): if self.debug: print("Closing...") yup = self.ui.sigTop.value() ydown = self.ui.sigBottom.value() yrefup= self.ui.ref1Top.value() yrefdown = self.ui.ref1Bottom.value() yref2up = self.ui.ref2Top.value() yref2down = self.ui.ref2Bottom.value() n=self.ui.NumSignals.value() rup=self.ui.Smax.value() rdown=self.ui.Smin.value() mref=self.ui.MultiRef.checkState() if n==0: n=1 dh=self.ui.SigSpacing.value() fname=str(self.fname) if os.path.exists(fname): # Write Infos ff=open(fname[:-4]+".txt","w") ff.write("SignalUp\t%i\nSignalDown\t%i\nRef1Up\t%i\nRef1Down\t%i\nRef2Up\t%i\nRef2Down\t%i\nNumSignals\t%i\nSignalSpacing\t%f\nRangeUp\t%i\nRangeDown\t%i\nMultiRef\t%i"%(yup,ydown,yrefup,yrefdown,yref2up,yref2down,n,dh,rup,rdown,mref)) ff.close() # Write Data # prepare Data ff=open(fname[:-4]+".dat","w") ffr=open(fname[:-4]+"_raw.dat","w") if self.debug: print("Saving...") if yrefup!=yrefdown: ref=[np.mean(self.data["sig"][yrefup:yrefdown],0)] if mref: for i in range(1,n): ref.append(np.mean(self.data["sig"][yrefup-i*dh:yrefdown-i*dh],0)) w=self.wavelength data=[np.mean(self.data["sig"][yup-i*dh:ydown-i*dh],0) for i in range(n)] rawdata=[np.mean(self.data["sig"][yup-i*dh:ydown-i*dh],0) for i in range(n)] ff.write("# wavelength[nm]") ffr.write("# wavelength[nm]") for i in range(n): ff.write("\tIntensity_antenna_%i[-]"%(i)) ffr.write("\tIntensity_antenna_%i[-]"%(i)) if yrefup!=yrefdown: if mref: for i in range(n): ffr.write("\tReference%i[-]"%(i)) else: ffr.write("\tReference[-]") ffr.write("\n") if yrefup!=yrefdown: for i in range(n): if mref: data[i]=data[i]-ref[i] else: data[i]=data[i]-ref[0] for x in range(len(rawdata[0])): ff.write("%f"%(w[x])) ffr.write("%f"%(w[x])) for i in range(n): ff.write("\t%f"%(data[i][x])) ffr.write("\t%f"%(rawdata[i][x])) if yrefup!=yrefdown: if mref: for i in range(n): ffr.write("\t%f"%(ref[i][x])) else: ffr.write("\t%f"%(ref[0][x])) ff.write("\n") ffr.write("\n") ff.close() ffr.close() self.destroy() sys.exit(0) def on_draw(self): yup = self.ui.sigTop.value() ydown = self.ui.sigBottom.value() yrefup= self.ui.ref1Top.value() yrefdown = self.ui.ref1Bottom.value() yref2up = self.ui.ref2Top.value() yref2down = self.ui.ref2Bottom.value() n=self.ui.NumSignals.value() if n==0: n=1 dh=self.ui.SigSpacing.value() if self.ui.Smin.value()!=self.lmin or self.ui.Smax.value()!=self.lmax: mmin=np.min(self.data["sig"]) mmax=np.max(self.data["sig"]) md=mmax-mmin dd=(self.ui.Smin.maximum()-self.ui.Smin.minimum()) self.lmin=self.ui.Smin.value() self.lmax=self.ui.Smax.value() cmin=mmin+(md*self.lmin)/dd cmax=mmin+(md*self.lmax)/dd self.axes.imshow(self.data["sig"],vmin=cmin,vmax=cmax) self.lup[0].set_data([0,self.ds[0]],[yup,yup]) self.ldown[0].set_data([0,self.ds[0]],[ydown,ydown]) self.lref1up[0].set_data([0,self.ds[0]],[yrefup,yrefup]) self.lref1down[0].set_data([0,self.ds[0]],[yrefdown,yrefdown]) self.lref2up.set_data([0,self.ds[0]],[yref2up,yref2up]) self.lref2down.set_data([0,self.ds[0]],[yref2down,yref2down]) self.plt.clear() self.ref.clear() self.raw.clear() self.ref.clear() # Signals data=[np.mean(self.data["sig"][yup:ydown],0)] self.raw.plot(self.wavelength,data[0],color="black") if self.ui.multisig.checkState()==QtCore.Qt.Checked: if len(self.lup)>n: for i in range(n+1,len(self.lup)): del self.lup[i] del self.ldown[i] self.lup=self.lup[:n] self.ldown=self.ldown[:n] if n>1: if len(self.lup)>n: for i in range(n,len(self.lup)): del self.lup[i] del self.ldown[i] if len(self.lup)<n: for i in range(len(self.lup),n): self.lup.append(mpl.lines.Line2D([0,self.ds[0]],[0,0],color="red")) self.ldown.append(mpl.lines.Line2D([0,self.ds[0]],[0,0],color="red")) self.axes.add_line(self.lup[i]) self.axes.add_line(self.ldown[i]) for i in range(1,n): data.append(np.mean(self.data["sig"][int(yup-dh*i):int(ydown-dh*i)],0)) self.raw.plot(self.wavelength,data[i]) self.lup[i].set_data([0,self.ds[0]],[int(yup-dh*i),int(yup-dh*i)]) self.ldown[i].set_data([0,self.ds[0]],[int(ydown-dh*i),int(ydown-dh*i)]) # Sig StdDev DS2=0 drs=np.sqrt(np.var(self.data["sig"][yup:ydown],0)) if self.ui.rawsigStdDev.checkState()==QtCore.Qt.Checked: vx,vy = mlab.poly_between(self.wavelength,data[0]-drs,data[0]+drs) self.raw.fill(vx,vy,color="red") DS2+=(drs)**2 # Reference Signal if yrefup!=yrefdown: ref=[np.mean(self.data["sig"][yrefup:yrefdown],0)] self.ref.plot(self.wavelength,ref[0],color="black") # Std Dev delta=np.sqrt(np.var(self.data["sig"][yrefup:yrefdown],0)) if self.ui.refStdDev.checkState()==QtCore.Qt.Checked: vx,vy = mlab.poly_between(self.wavelength,ref[0]-delta,ref[0]+delta) self.ref.fill(vx,vy,color="blue") DS2+=(delta)**2 DS=np.sqrt(DS2) data[0]=data[0]-ref[0] self.plt.plot(self.wavelength,data[0],color="black") if self.ui.multisig.checkState()==QtCore.Qt.Checked: if n>1: if self.ui.MultiRef.checkState()==QtCore.Qt.Checked: if len(self.lref1up)>n: for i in range(n,len(self.lref1up)): del self.lref1up[i] del self.lref1down[i] if len(self.lref1up)<n: for i in range(len(self.lref1up),n): self.lref1up.append(mpl.lines.Line2D([0,self.ds[0]],[0,0],color="green")) self.lref1down.append(mpl.lines.Line2D([0,self.ds[0]],[0,0],color="green")) self.axes.add_line(self.lref1up[i]) self.axes.add_line(self.lref1down[i]) if self.debug: print "++",i for i in range(1,n): ref.append(np.mean(self.data["sig"][int(yrefup-dh*i):int(yrefdown-dh*i)],0)) data[i]=data[i]-ref[i] self.lref1up[i].set_data([0,self.ds[0]],[int(yrefup-dh*i),int(yrefup-dh*i)]) self.lref1down[i].set_data([0,self.ds[0]],[int(yrefdown-dh*i),int(yrefdown-dh*i)]) else: if len(self.lref1up)>1: for i in range(len(self.lref1up)-1,0,-1): if self.debug: print "-",i self.lref1up[i].set_data([0,self.ds[0]],[0,0]) self.lref1down[i].set_data([0,self.ds[0]],[0,0]) del self.lref1up[i] del self.lref1down[i] for i in range(1,n): data[i]=data[i]-ref[0] for i in range(1,n): self.plt.plot(self.wavelength,data[i]) if self.ui.sigStdDev.checkState()==QtCore.Qt.Checked: vx,vy = mlab.poly_between(self.wavelength,data[0]-DS,data[0]+DS) self.plt.fill(vx,vy) self.canvas.draw()
class SpectroGUI(QtGui.QMainWindow): def __init__(self, filename=None, arg=None, parent=None, debug=False): QtGui.QMainWindow.__init__(self, parent) self.ui = Ui_MainWindow() self.ui.setupUi(self) self.debug = debug self.dpi = 100 self.fig = Figure((5.0, 4.0), dpi=self.dpi) self.canvas = FigureCanvas(self.fig) self.canvas.setParent(self.ui.widget) # Since we have only one plot, we can use add_axes # instead of add_subplot, but then the subplot # configuration tool in the navigation toolbar wouldn't # work. # self.axes = self.fig.add_subplot(411) self.raw = self.fig.add_subplot(412) self.plt = self.fig.add_subplot(413) self.ref = self.fig.add_subplot(414) # self.vari = self.fig.add_subplot(515) # Bind the 'pick' event for clicking on one of the bars # self.canvas.mpl_connect('pick_event', self.on_pick) # Create the navigation toolbar, tied to the canvas # self.mpl_toolbar = NavigationToolbar(self.canvas, self.ui.widget) vbox = QtGui.QVBoxLayout() vbox.addWidget(self.canvas) vbox.addWidget(self.mpl_toolbar) self.ui.widget.setLayout(vbox) # Signals/Slots self.connect(self.ui.actionOpen, QtCore.SIGNAL('triggered()'), self.loadSpec) self.connect(self.ui.sigTop, QtCore.SIGNAL('valueChanged(int)'), self.on_draw) self.connect(self.ui.Smin, QtCore.SIGNAL('valueChanged(int)'), self.on_draw) self.connect(self.ui.Smax, QtCore.SIGNAL('valueChanged(int)'), self.on_draw) self.connect(self.ui.sigBottom, QtCore.SIGNAL('valueChanged(int)'), self.on_draw) self.connect(self.ui.ref1Top, QtCore.SIGNAL('valueChanged(int)'), self.on_draw) self.connect(self.ui.ref1Bottom, QtCore.SIGNAL('valueChanged(int)'), self.on_draw) self.connect(self.ui.rawsigStdDev, QtCore.SIGNAL('stateChanged(int)'), self.on_draw) self.connect(self.ui.sigStdDev, QtCore.SIGNAL('stateChanged(int)'), self.on_draw) self.connect(self.ui.refStdDev, QtCore.SIGNAL('stateChanged(int)'), self.on_draw) self.connect(self.ui.NumSignals, QtCore.SIGNAL('valueChanged(int)'), self.on_draw) self.connect(self.ui.SigSpacing, QtCore.SIGNAL('valueChanged(double)'), self.on_draw) self.connect(self.ui.actionClose, QtCore.SIGNAL('triggered()'), self.closeEvent) self.connect(self.ui.AlignTop, QtCore.SIGNAL('clicked()'), self.AlignRefTop) self.connect(self.ui.AlignBottom, QtCore.SIGNAL('clicked()'), self.AlignRefBottom) self.connect(self.ui.BTFindAntenna, QtCore.SIGNAL('clicked()'), self.FindAntennas) self.connect(self, QtCore.SIGNAL('triggered()'), self.closeEvent) self.connect(self.ui.multisig, QtCore.SIGNAL("toggled(bool)"), self.on_draw) self.connect(self.ui.MultiRef, QtCore.SIGNAL("toggled(bool)"), self.on_draw) if filename != None: self.loadSpec(filename) def FindAntennas(self): self.ref.clear() s = self.data["sig"][:, 512] s = s / max(s) d = s[1:] - s[:-1] d = d / max(d) i = np.where(d > 0.2)[0] l = 0 ids = [] for x in range(len(i) - 2): if i[x + 1] == i[l] + 1: l = x else: ids.append(i[x]) l = x + 1 if (i[-1] < 230): ids.append(i[-1]) self.ui.sigTop.setValue(ids[-1] - 1) self.ui.sigBottom.setValue(ids[-1] + 3) self.ui.multisig.setCheckState(2) self.ui.NumSignals.setValue(10) self.ui.SigSpacing.setValue(12.6) self.ui.MultiRef.setCheckState(2) self.AlignRefBottom() self.ref.plot(s) self.ref.plot(d) self.canvas.draw() def AlignRefBottom(self): self.ui.ref1Top.setSliderPosition(self.ui.sigBottom.value() + 1) self.ui.ref1Bottom.setSliderPosition(2 * self.ui.sigBottom.value() - self.ui.sigTop.value() + 1) def AlignRefTop(self): self.ui.ref1Bottom.setSliderPosition(self.ui.sigTop.value()) self.ui.ref1Top.setSliderPosition(2 * self.ui.sigTop.value() - self.ui.sigBottom.value()) def loadSpec(self, filename=None): if filename == None: fname = QtGui.QFileDialog.getOpenFileName(self, 'Open file', ".", "NumpyArray (*.npz)") else: fname = filename if not os.path.exists(fname): QtGui.QMessageBox.warning( self, "Warning", "The file \"%s\" cannot be accessed!" % (fname)) self.data = np.load(str(fname)) mmin = 0 mmax = 1000 self.ui.Smin.setRange(mmin, mmax) self.ui.Smax.setRange(mmin, mmax) self.ui.Smax.setSliderPosition(int(mmax) + 1) self.ui.Smin.setSliderPosition(int(mmin)) self.ds = self.data['sig'].shape[::-1] # Creating Wavelength Axis x = np.arange(0, self.ds[0]) self.wavelength = np.polyval(self.data["poly"][::-1], x) self.fname = fname mmin = np.min(self.data["sig"]) mmax = np.max(self.data["sig"]) md = mmax - mmin dd = (self.ui.Smin.maximum() - self.ui.Smin.minimum()) self.lmin = self.ui.Smin.value() self.lmax = self.ui.Smax.value() cmin = mmin + (md * self.lmin) / dd cmax = mmin + (md * self.lmax) / dd self.axes.imshow(self.data["sig"], vmin=cmin, vmax=cmax) self.lup = [mpl.lines.Line2D([0, self.ds[0]], [0, 0], color="red")] self.ldown = [ mpl.lines.Line2D([0, self.ds[0]], [self.ds[1], self.ds[1]], color="red") ] self.axes.add_line(self.lup[0]) self.axes.add_line(self.ldown[0]) self.lref1up = [ mpl.lines.Line2D([0, self.ds[0]], [0, 0], color="green") ] self.lref1down = [ mpl.lines.Line2D([0, self.ds[0]], [0, 0], color="green") ] self.lref2up = mpl.lines.Line2D([0, self.ds[0]], [0, 0], color="green") self.lref2down = mpl.lines.Line2D([0, self.ds[0]], [0, 0], color="green") self.axes.add_line(self.lref1up[0]) self.axes.add_line(self.lref1down[0]) self.axes.add_line(self.lref2up) self.axes.add_line(self.lref2down) self.ui.sigBottom.setRange(1, self.ds[1]) self.ui.sigTop.setRange(1, self.ds[1]) self.ui.ref1Bottom.setRange(1, self.ds[1]) self.ui.ref1Top.setRange(1, self.ds[1]) self.ui.ref2Top.setRange(1, self.ds[1]) self.ui.ref2Bottom.setRange(1, self.ds[1]) trd = { "SignalUp": self.ui.sigTop, "SignalDown": self.ui.sigBottom, "Ref1Up": self.ui.ref1Top, "Ref1Down": self.ui.ref1Bottom, "Ref2Up": self.ui.ref2Top, "Ref2Down": self.ui.ref2Bottom, "NumSignals": self.ui.NumSignals, "RangeUp": self.ui.Smax, "RangeDown": self.ui.Smin } if os.path.exists(fname[:-4] + ".txt"): ff = open(fname[:-4] + ".txt", "r") inf = {} for x in ff.readlines(): c = x.split() inf[c[0]] = c[1] for x in trd: if x in inf: trd[x].setValue(int(inf[x])) if "SignalSpacing" in inf: self.ui.multisig.setCheckState(QtCore.Qt.Checked) self.ui.SigSpacing.setValue(float(inf["SignalSpacing"])) if "MultiRef" in inf: self.ui.MultiRef.setCheckState(int(inf["MultiRef"])) def on_pick(self): pass def closeEvent(self, event=None): if self.debug: print("Closing...") yup = self.ui.sigTop.value() ydown = self.ui.sigBottom.value() yrefup = self.ui.ref1Top.value() yrefdown = self.ui.ref1Bottom.value() yref2up = self.ui.ref2Top.value() yref2down = self.ui.ref2Bottom.value() n = self.ui.NumSignals.value() rup = self.ui.Smax.value() rdown = self.ui.Smin.value() mref = self.ui.MultiRef.checkState() if n == 0: n = 1 dh = self.ui.SigSpacing.value() fname = str(self.fname) if os.path.exists(fname): # Write Infos ff = open(fname[:-4] + ".txt", "w") ff.write( "SignalUp\t%i\nSignalDown\t%i\nRef1Up\t%i\nRef1Down\t%i\nRef2Up\t%i\nRef2Down\t%i\nNumSignals\t%i\nSignalSpacing\t%f\nRangeUp\t%i\nRangeDown\t%i\nMultiRef\t%i" % (yup, ydown, yrefup, yrefdown, yref2up, yref2down, n, dh, rup, rdown, mref)) ff.close() # Write Data # prepare Data ff = open(fname[:-4] + ".dat", "w") ffr = open(fname[:-4] + "_raw.dat", "w") if self.debug: print("Saving...") if yrefup != yrefdown: ref = [np.mean(self.data["sig"][yrefup:yrefdown], 0)] if mref: for i in range(1, n): ref.append( np.mean( self.data["sig"][yrefup - i * dh:yrefdown - i * dh], 0)) w = self.wavelength data = [ np.mean(self.data["sig"][yup - i * dh:ydown - i * dh], 0) for i in range(n) ] rawdata = [ np.mean(self.data["sig"][yup - i * dh:ydown - i * dh], 0) for i in range(n) ] ff.write("# wavelength[nm]") ffr.write("# wavelength[nm]") for i in range(n): ff.write("\tIntensity_antenna_%i[-]" % (i)) ffr.write("\tIntensity_antenna_%i[-]" % (i)) if yrefup != yrefdown: if mref: for i in range(n): ffr.write("\tReference%i[-]" % (i)) else: ffr.write("\tReference[-]") ffr.write("\n") if yrefup != yrefdown: for i in range(n): if mref: data[i] = data[i] - ref[i] else: data[i] = data[i] - ref[0] for x in range(len(rawdata[0])): ff.write("%f" % (w[x])) ffr.write("%f" % (w[x])) for i in range(n): ff.write("\t%f" % (data[i][x])) ffr.write("\t%f" % (rawdata[i][x])) if yrefup != yrefdown: if mref: for i in range(n): ffr.write("\t%f" % (ref[i][x])) else: ffr.write("\t%f" % (ref[0][x])) ff.write("\n") ffr.write("\n") ff.close() ffr.close() self.destroy() sys.exit(0) def on_draw(self): yup = self.ui.sigTop.value() ydown = self.ui.sigBottom.value() yrefup = self.ui.ref1Top.value() yrefdown = self.ui.ref1Bottom.value() yref2up = self.ui.ref2Top.value() yref2down = self.ui.ref2Bottom.value() n = self.ui.NumSignals.value() if n == 0: n = 1 dh = self.ui.SigSpacing.value() if self.ui.Smin.value() != self.lmin or self.ui.Smax.value( ) != self.lmax: mmin = np.min(self.data["sig"]) mmax = np.max(self.data["sig"]) md = mmax - mmin dd = (self.ui.Smin.maximum() - self.ui.Smin.minimum()) self.lmin = self.ui.Smin.value() self.lmax = self.ui.Smax.value() cmin = mmin + (md * self.lmin) / dd cmax = mmin + (md * self.lmax) / dd self.axes.imshow(self.data["sig"], vmin=cmin, vmax=cmax) self.lup[0].set_data([0, self.ds[0]], [yup, yup]) self.ldown[0].set_data([0, self.ds[0]], [ydown, ydown]) self.lref1up[0].set_data([0, self.ds[0]], [yrefup, yrefup]) self.lref1down[0].set_data([0, self.ds[0]], [yrefdown, yrefdown]) self.lref2up.set_data([0, self.ds[0]], [yref2up, yref2up]) self.lref2down.set_data([0, self.ds[0]], [yref2down, yref2down]) self.plt.clear() self.ref.clear() self.raw.clear() self.ref.clear() # Signals data = [np.mean(self.data["sig"][yup:ydown], 0)] self.raw.plot(self.wavelength, data[0], color="black") if self.ui.multisig.checkState() == QtCore.Qt.Checked: if len(self.lup) > n: for i in range(n + 1, len(self.lup)): del self.lup[i] del self.ldown[i] self.lup = self.lup[:n] self.ldown = self.ldown[:n] if n > 1: if len(self.lup) > n: for i in range(n, len(self.lup)): del self.lup[i] del self.ldown[i] if len(self.lup) < n: for i in range(len(self.lup), n): self.lup.append( mpl.lines.Line2D([0, self.ds[0]], [0, 0], color="red")) self.ldown.append( mpl.lines.Line2D([0, self.ds[0]], [0, 0], color="red")) self.axes.add_line(self.lup[i]) self.axes.add_line(self.ldown[i]) for i in range(1, n): data.append( np.mean( self.data["sig"][int(yup - dh * i):int(ydown - dh * i)], 0)) self.raw.plot(self.wavelength, data[i]) self.lup[i].set_data( [0, self.ds[0]], [int(yup - dh * i), int(yup - dh * i)]) self.ldown[i].set_data( [0, self.ds[0]], [int(ydown - dh * i), int(ydown - dh * i)]) # Sig StdDev DS2 = 0 drs = np.sqrt(np.var(self.data["sig"][yup:ydown], 0)) if self.ui.rawsigStdDev.checkState() == QtCore.Qt.Checked: vx, vy = mlab.poly_between(self.wavelength, data[0] - drs, data[0] + drs) self.raw.fill(vx, vy, color="red") DS2 += (drs)**2 # Reference Signal if yrefup != yrefdown: ref = [np.mean(self.data["sig"][yrefup:yrefdown], 0)] self.ref.plot(self.wavelength, ref[0], color="black") # Std Dev delta = np.sqrt(np.var(self.data["sig"][yrefup:yrefdown], 0)) if self.ui.refStdDev.checkState() == QtCore.Qt.Checked: vx, vy = mlab.poly_between(self.wavelength, ref[0] - delta, ref[0] + delta) self.ref.fill(vx, vy, color="blue") DS2 += (delta)**2 DS = np.sqrt(DS2) data[0] = data[0] - ref[0] self.plt.plot(self.wavelength, data[0], color="black") if self.ui.multisig.checkState() == QtCore.Qt.Checked: if n > 1: if self.ui.MultiRef.checkState() == QtCore.Qt.Checked: if len(self.lref1up) > n: for i in range(n, len(self.lref1up)): del self.lref1up[i] del self.lref1down[i] if len(self.lref1up) < n: for i in range(len(self.lref1up), n): self.lref1up.append( mpl.lines.Line2D([0, self.ds[0]], [0, 0], color="green")) self.lref1down.append( mpl.lines.Line2D([0, self.ds[0]], [0, 0], color="green")) self.axes.add_line(self.lref1up[i]) self.axes.add_line(self.lref1down[i]) if self.debug: print "++", i for i in range(1, n): ref.append( np.mean( self.data["sig"][int(yrefup - dh * i):int(yrefdown - dh * i)], 0)) data[i] = data[i] - ref[i] self.lref1up[i].set_data( [0, self.ds[0]], [int(yrefup - dh * i), int(yrefup - dh * i)]) self.lref1down[i].set_data([0, self.ds[0]], [ int(yrefdown - dh * i), int(yrefdown - dh * i) ]) else: if len(self.lref1up) > 1: for i in range(len(self.lref1up) - 1, 0, -1): if self.debug: print "-", i self.lref1up[i].set_data([0, self.ds[0]], [0, 0]) self.lref1down[i].set_data([0, self.ds[0]], [0, 0]) del self.lref1up[i] del self.lref1down[i] for i in range(1, n): data[i] = data[i] - ref[0] for i in range(1, n): self.plt.plot(self.wavelength, data[i]) if self.ui.sigStdDev.checkState() == QtCore.Qt.Checked: vx, vy = mlab.poly_between(self.wavelength, data[0] - DS, data[0] + DS) self.plt.fill(vx, vy) self.canvas.draw()