def setUnit(self, unit): '''Set the unit manually''' if unit == 's': self.lifetime.click() self.unit.setCurrentIndex(0) elif unit == 'ns': self.lifetime.click() self.unit.setCurrentIndex(1) elif unit == 'ps': self.lifetime.click() self.unit.setCurrentIndex(2) elif unit == 'fs': self.lifetime.click() self.unit.setCurrentIndex(3) elif unit in ('Hz', 'hz'): self.rate.click() self.unit.setCurrentIndex(0) elif unit in ('GHz', 'ghz'): self.rate.click() self.unit.setCurrentIndex(1) elif unit in ('THz', 'thz'): self.rate.click() self.unit.setCurrentIndex(2) elif unit in ('PHz', 'phz'): self.rate.click() self.unit.setCurrentIndex(3) else: error.showMessage('Invalid unit: {0}'.format(unit))
def saveToInput(self): '''Save current settings to current input file if available''' if not self.control.hasPlot: error.showMessage('Cannot save.. there is no data to save yet') return if self.fileName is None: self.saveToInputAs() else: self.inputGen(self.fileName)
def setNumPeaks(self, npeaks): '''Manually set the number of peaks''' if npeaks == 2: self.numpeaks[0].click() elif npeaks == 3: self.numpeaks[1].click() elif npeaks == 4: self.numpeaks[2].click() else: error.showMessage('Only valid number of peaks is 2, 3, or 4')
def plotRawData(self): '''Plot the raw data''' if self.rawData is None: error.showMessage("Cannot plot raw data, none has been given") return xlim = self.data.dataBounds(0) if xlim[0] > xlim[1]: xlim[0], xlim[1] = xlim[1], xlim[0] # Clip the data to only the plotting window (to remove baseline) raw = clip(self.rawData.copy(), xlim) raw[:,1] = normalize(raw[:,1]) self.raw.setData(raw[:,0], raw[:,1]) if not self.raw.isVisible(): self.raw.show() self.replot()
def saveAsPDF(self): '''Save plot as a PDF''' if not self.control.hasPlot: error.showMessage('Cannot save.. there is no data to save yet') return filter = 'PDF Documents (*.pdf);;All (*)' d = '' if self.pdfName is None else self.pdfName s = QFileDialog.getSaveFileName(self, 'PDF File Name', d, filter) # Continue unless the user hit cancel if not s[0]: return self.pdfName = s[0] # Set up the PDF printer printer = QPrinter() printer.setOutputFormat(QPrinter.PdfFormat) printer.setOrientation(QPrinter.Landscape) printer.setOutputFileName(self.pdfName) printer.setCreator('RAPID') # Send to the plot for printing p = QPainter() p.begin(printer) x, y = self.plot.calculatedData() plt = pgplot(x, y, antialias=True, connect='all', pen={'color': 'b', 'width': 0}) plt.setLabel('bottom', "Frequency (Wavenumbers, cm<sup>-1</sup>)") plt.getAxis('bottom').setPen('k') plt.setLabel('left', "Intensity (Normalized)") plt.getAxis('left').setPen('k') plt.setYRange(0, 1.1, padding=0) plt.invertX(self.plot.reversed) plt.setBackground('w') # White # The raw (experimental) data, if any if self.plot.rawData is not None: data = self.plot.getRawData() x, y = data[:,0], data[:,1] curve2 = PlotCurveItem(x, y, antialias=True, connect='all', pen={'color': 'g', 'width': 0}) plt.addItem(curve2) plt.render(p) p.end()
def resetScale(self): '''Checks that the given scale is valid, then resets if so''' try: xmin = int(self.xmin.text()) except ValueError: return try: xmax = int(self.xmax.text()) except ValueError: return reverse = self.reverse.isChecked() if xmin > xmax: err = "Lower limit cannot be greater than upper limit" error.showMessage(err) return self.model.setScale(xmin, xmax, reverse)
def saveToInputAs(self): '''Save current settings to an input file of specified name''' if not self.control.hasPlot: error.showMessage('Cannot save.. there is no data to save yet') return filter = 'Input Files (*.inp);;All (*)' d = '' if self.fileName is None else self.fileName s = QFileDialog.getSaveFileName(self, 'Input File Name', d, filter) # Continue unless the user hit cancel if not s[0]: return self.fileName = s[0] # Generate the input file self.inputGen(self.fileName)
def exportRawData(self): '''Export current raw data to XY data''' if self.plot.rawData is None: error.showMessage('Cannot export.. there is no raw data to export yet') return filter = 'Data Files (*.txt *.data);;All (*)' d = '' if self.rawExpName is None else self.rawExpName s = QFileDialog.getSaveFileName(self, 'Raw XY Data File Name', d, filter) # Continue unless the user hit cancel if not s[0]: return self.rawExpName = s[0] # Grab the raw XY data from the plot data = self.plot.getRawData() # Save in a standard format try: write_data(data[:,0], data[:,1], self.rawExpName) except (IOError, OSError) as e: error.showMessage(str(e))
def exportXYData(self): '''Export current spectrum to XY data''' if not self.control.hasPlot: error.showMessage('Cannot export.. there is no data to export yet') return filter = 'Data Files (*.txt *.data);;All (*)' d = '' if self.expName is None else self.expName s = QFileDialog.getSaveFileName(self, 'Calculated XY Data File Name', d, filter) # Continue unless the user hit cancel if not s[0]: return self.expName = s[0] # Grab the XY data from the plot x, y = self.plot.calculatedData() # Save in a standard format try: write_data(x, y, self.expName) except (IOError, OSError) as e: error.showMessage(str(e))
def makeScript(self): '''Open parameters from an input file''' if not self.control.hasPlot: error.showMessage('Cannot save.. there is no data to save yet') return filter = 'Python Scripts (*.py)' d = '' if self.scriptName is None else self.scriptName s = QFileDialog.getSaveFileName(self, 'Python Script File Name', d, filter) # Continue unless the user hit cancel if not s[0]: return self.scriptName = s[0] # Get parameters needed xlim, rev, oldp, newp = self.control.getParametersForScript() x, y = self.plot.calculatedData() if self.clear.isEnabled(): raw = self.plot.rawData else: raw = None save_script(x, y, raw, xlim, rev, oldp, newp, self.scriptName)
def openFromInput(self): '''Open parameters from an input file''' filter = 'Input Files (*.inp);;All (*)' s = QFileDialog.getOpenFileName(self, 'Input File Name', '', filter) # Continue unless the user hit cancel if not s[0]: return fileName = s[0] # Read given input file try: args = read_input(fileName) except ReaderError as r: # Error reading the input file error.showMessage(str(r)) # Set the number of peaks npeaks = len(args.num) if npeaks < 2: error.showMessage('Need at least 2 peaks for exchange') return elif npeaks > 4: error.showMessage('This GUI can only handle up to 4 peaks. ' 'Use the command-line version for an arbitrary ' 'number of peaks') return self.exchange.setNumPeaks(npeaks) # Set the exchange matrix = ZMat(npeaks, args.exchanges, args.exchange_rates, args.symmetric_exchange) self.exchange.setMatrixSymmetry(args.symmetric_exchange) self.exchange.setMatrix(matrix) # Set the rate if 'lifetime' in args: self.rate.setUnit(args.lifetime[1]) self.rate.setRate(args.lifetime[0]) else: self.rate.setUnit(args.rate[1]) self.rate.setRate(args.rate[0]) # Set the peak data self.peak.setPeaks(args.vib, args.Gamma_Lorentz, args.Gamma_Gauss, args.heights) # Plot this data self.control.setDataForPlot() # Plot raw data if it exists if args.raw is not None: self.rawName = args.rawName self.plot.setRawData(args.raw) self.plot.plotRawData() self.clear.setEnabled(True) # Set the limits self.scale.setValue(args.xlim[0], args.xlim[1], args.reverse)