Example #1
0
 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))
Example #2
0
 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)
Example #3
0
 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')
Example #4
0
 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()
Example #5
0
    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()
Example #6
0
 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)
Example #7
0
    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)
Example #8
0
    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))
Example #9
0
    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))
Example #10
0
    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)
Example #11
0
    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)