예제 #1
0
    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
예제 #2
0
    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)
예제 #3
0
    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')
예제 #4
0
    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')
예제 #5
0
    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
예제 #6
0
    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
예제 #7
0
    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