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)
def run_non_interactive(cmd_line_args): '''Driver to calculate the spectra non-interactively (i.e. from the command line). ''' # Read in the input file that is given try: args = read_input(cmd_line_args.input_file) except (OSError, IOError) as e: print(str(e), file=stderr) # An error occurred when locating the file return 1 except ReaderError as r: print(str(r), file=stderr) # An error occurred when reading the file return 1 # Generate the Z matrix Z = ZMat(len(args.num), args.exchanges, args.exchange_rates, args.symmetric_exchange) # Generate the frequency domain omega = arange(args.xlim[0]-10, args.xlim[1]+10, 0.5) # Calculate the spectrum try: I_omega, new_params = spectrum(Z, args.k, args.vib, args.Gamma_Lorentz, args.Gamma_Gauss, args.heights, omega ) except SpectrumError as se: print(str(se), file=stderr) return 1 # Make a tuple of the old parameters old_params = (args.vib, args.Gamma_Lorentz, args.Gamma_Gauss, args.heights) # Normalize the generated data I_omega = normalize(I_omega) # Repeat for the raw data if given. Clip according to the xlimits if args.raw is not None: args.raw = clip(args.raw, args.xlim) args.raw[:,1] = normalize(args.raw[:,1]) # Plot the data or write to file if cmd_line_args.data: try: write_data(omega, I_omega, cmd_line_args.data) except (IOError, OSError) as e: print(str(e), file=stderr) return 1 else: print('Data written to file {0}'.format(cmd_line_args.data)) return 0 elif cmd_line_args.script: return save_script(omega, I_omega, args.raw, args.xlim, args.reverse, old_params, new_params, cmd_line_args.script, msg=True) elif cmd_line_args.params: return numerics(old_params, new_params, stdout) else: return plot(args, omega, I_omega)