def _calcGNOM(self, dmax): start = int(self.spinctrlIDs['qstart']) end = int(self.spinctrlIDs['qend']) self.gnom_settings['npts'] = 0 path = self.raw_settings.get('GnomFilePath') # TODO: temp path cwd = os.getcwd() savename = 't_dat.dat' while os.path.isfile(os.path.join(path, savename)): savename = 't' + savename outname = 't_out.out' while os.path.isfile(os.path.join(path, outname)): outname = 't' + outname save_sasm = SASM.SASM( copy.deepcopy(self.curr_sasm.i), copy.deepcopy(self.curr_sasm.q), copy.deepcopy(self.curr_sasm.err), copy.deepcopy(self.curr_sasm.getAllParameters())) save_sasm.setParameter('filename', savename) save_sasm.setQrange((start, end)) try: SASFileIO.saveMeasurement( save_sasm, path, self.raw_settings, filetype='.dat') except SASExceptions.HeaderSaveError as error: printer = ErrorPrinter(self.raw_settings, self._stdout) printer.showSaveError('header') os.chdir(path) try: iftm = SASCalc.runGnom( savename, outname, dmax, self.gnom_settings, new_gnom=self.new_gnom, raw_settings=self.raw_settings) except SASExceptions.NoATSASError as error: print('Error running GNOM/DATGNOM:', str(error), file=self._stdout) self.cleanupGNOM(path, savename, outname) os.chdir(cwd) return None os.chdir(cwd) # self.cleanupGNOM(path, savename, outname) return iftm
def _load_files(self): files = None filters = 'All files (*.*)|*.*|Dat files (*.dat)|*.dat|Txt files (*.txt)|*.txt' dialog = wx.FileDialog(self, 'Select a file', self.current_directory, style=wx.FD_OPEN | wx.FD_MULTIPLE, wildcard=filters) # Show the dialog and get user input if dialog.ShowModal() == wx.ID_OK: files = dialog.GetPaths() # Destroy the dialog dialog.Destroy() if files is not None: if not isinstance(files, list): files = [ files, ] data = SASFileIO.load_files(files) self.current_directory = os.path.dirname(files[0]) self.add_items(data)
def saveSASM(self, sasm, filetype='dat', save_path=''): """Save SASM object to file.""" newext = filetype filename = sasm.getParameter('filename') check_filename, _ = os.path.splitext(filename) check_filename = check_filename + newext filepath = os.path.join(save_path, check_filename) # file_exists = os.path.isfile(filepath) filepath = save_path try: SASFileIO.saveMeasurement(sasm, filepath, self._raw_settings, filetype=newext) except SASExceptions.HeaderSaveError: self.error_printer.showSaveError('header')
def saveIFTM(self, iftm, save_path): """Save IFTM object to file.""" if iftm.getParameter('algorithm') == 'GNOM': newext = '.out' else: newext = '.ift' filename = iftm.getParameter('filename') check_filename, ext = os.path.splitext(filename) check_filename = check_filename + newext filepath = os.path.join(save_path, check_filename) # file_exists = os.path.isfile(filepath) filepath = save_path try: SASFileIO.saveMeasurement( iftm, filepath, self.raw_settings, filetype=newext) except SASExceptions.HeaderSaveError: printer = ErrorPrinter(self.raw_settings, self._stdout) printer.showSaveError('header')
def loadIFTMs(self, filename_list): """Load GNOM .ift/.out files.""" print('Please wait while loading files...', file=self._stdout) iftm_list = [] try: for each_filename in filename_list: file_ext = os.path.splitext(each_filename)[1] if file_ext == '.ift' or file_ext == '.out': iftm, _ = SASFileIO.loadFile(each_filename, self._raw_settings) if isinstance(iftm, list): iftm_list.extend(iftm) else: iftm_list.append(iftm) except (SASExceptions.UnrecognizedDataFormat, SASExceptions.WrongImageFormat) as error: self.error_printer.showDataFormatError( os.path.split(each_filename)[1]) raise error except SASExceptions.HeaderLoadError as error: print( str(error), 'Error Loading Headerfile:' 'Please check that the header file is in the directory with the data.', file=self._stdout) raise error except SASExceptions.MaskSizeError as error: print(str(error), 'Saved mask does not fit loaded image', file=self._stdout) raise error except SASExceptions.HeaderMaskLoadError as error: print(str(error), 'Mask information was not found in header', file=self._stdout) raise error return iftm_list
def _initGNOM(self, sasm): analysis_dict = sasm.getParameter('analysis') if 'GNOM' in analysis_dict: iftm = self._initGnomValues(sasm) assert False else: path = self.raw_settings.get('GnomFilePath') # TODO: temp files? cwd = os.getcwd() savename = 't_dat.dat' while os.path.isfile(os.path.join(path, savename)): savename = 't' + savename save_sasm = SASM.SASM( copy.deepcopy(sasm.i), copy.deepcopy(sasm.q), copy.deepcopy(sasm.err), copy.deepcopy(sasm.getAllParameters())) save_sasm.setParameter('filename', savename) save_sasm.setQrange(sasm.getQrange()) try: SASFileIO.saveMeasurement( save_sasm, path, self.raw_settings, filetype='.dat') except SASExceptions.HeaderSaveError as error: printer = ErrorPrinter(self.raw_settings, self._stdout) printer.showSaveError('header') os.chdir(path) try: init_iftm = SASCalc.runDatgnom(savename, sasm, self.raw_settings) except SASExceptions.NoATSASError as error: print( 'Error running GNOM/DATGNOM:', str(error), file=self._stdout) self.cleanupGNOM(path, savename=savename) os.chdir(cwd) return None os.chdir(cwd) if init_iftm is None: outname = 't_datgnom.out' while os.path.isfile(outname): outname = 't' + outname if 'guinier' in analysis_dict: rg = float(analysis_dict['guinier']['Rg'][0]) # TODO: [0]? dmax = int(rg * 3.) #Mostly arbitrary guess at Dmax print("????:", rg) else: print( 'No DMAX found warning:', 'No Guinier analysis found, arbirary value 80 will be set to DMAX.', file=self._stdout) dmax = 80 #Completely arbitrary default setting for Dmax os.chdir(path) try: init_iftm = SASCalc.runGnom( savename, outname, dmax, self.gnom_settings, new_gnom=self.new_gnom, raw_settings=self.raw_settings) except SASExceptions.NoATSASError as error: print( 'Error running GNOM/DATGNOM', str(error), file=self._stdout) self.cleanupGNOM(path, savename=savename, outname=outname) os.chdir(cwd) return None os.chdir(cwd) self.cleanupGNOM(path, outname=outname) self.cleanupGNOM(path, savename=savename) iftm = self._initDatgnomValues(sasm, init_iftm) # plotPanel.plotPr(iftm) return iftm
def loadSASMs(self, filename_list): """Load image or dat files.""" print('Please wait while loading files...', file=self._stdout) sasm_list = [] do_auto_save = self._raw_settings.get('AutoSaveOnImageFiles') try: for each_filename in filename_list: # file_ext = os.path.splitext(each_filename)[1] sasm, img = SASFileIO.loadFile(each_filename, self._raw_settings) if img is not None: # qrange = sasm.getQrange() start_point = self._raw_settings.get('StartPoint') end_point = self._raw_settings.get('EndPoint') if isinstance(sasm, list): qrange = (start_point, len(sasm[0].getBinnedQ()) - end_point) for each_sasm in sasm: each_sasm.setQrange(qrange) else: qrange = (start_point, len(sasm.getBinnedQ()) - end_point) sasm.setQrange(qrange) if do_auto_save: save_path = self._raw_settings.get('ProcessedFilePath') try: if isinstance(sasm, list): for each in sasm: self.saveSASM(each, '.dat', save_path) else: self.saveSASM(sasm, '.dat', save_path) except IOError as error: self._raw_settings.set('AutoSaveOnImageFiles', False) do_auto_save = False if isinstance(sasm, list): sasm_list.extend(sasm) else: sasm_list.append(sasm) except (SASExceptions.UnrecognizedDataFormat, SASExceptions.WrongImageFormat) as error: self.error_printer.showDataFormatError( os.path.split(each_filename)[1]) raise error except SASExceptions.HeaderLoadError as error: print( str(error), 'Error Loading Headerfile:' 'Please check that the header file is in the directory with the data.', file=self._stdout) raise error except SASExceptions.MaskSizeError as error: print(str(error), 'Saved mask does not fit loaded image', file=self._stdout) raise error except SASExceptions.HeaderMaskLoadError as error: print(str(error), 'Mask information was not found in header', file=self._stdout) raise error return sasm_list