def open_dialog(self):
        global path

        if path == '':
            path = "/home/anatoly/Documents"

        filedialog = QFileDialog(self, 'Open File', directory = path, filter ="text (*.txt *.csv *.dat)", options = QFileDialog.DontUseNativeDialog) # use QFileDialog.DontUseNativeDialog to change directory
        filedialog.setStyleSheet("QWidget { background-color : rgb(136, 138, 133) }")  # change background color of the open file window
        filedialog.setFileMode(QtGui.QFileDialog.AnyFile)

        filedialog.fileSelected.connect(self.file_open)
        filedialog.show()
    def save_dialog(self):
        global path, s

        s = 1;
        if path == '':
            path = "/home/anatoly/Documents"

        filedialog = QFileDialog(self, 'Enter File Name', directory = path, options = QFileDialog.DontUseNativeDialog) # use QFileDialog.DontUseNativeDialog to change directory
        filedialog.setStyleSheet("QWidget { background-color : rgb(136, 138, 133) }")  # change background color of the open file window
        filedialog.setAcceptMode(QtGui.QFileDialog.AcceptSave)

        filedialog.fileSelected.connect(self.file_save)
        filedialog.show()
    def save_dialog(self):
        global path, s

        s = 1
        # for checking whether the data was saved before the start button is pressed
        if path == '':
            path = "/home/anatoly/Documents"

        filedialog = QFileDialog(
            self,
            'Enter File Name',
            directory=path,
            options=QFileDialog.DontUseNativeDialog
        )  # use QFileDialog.DontUseNativeDialog to change directory
        filedialog.setStyleSheet(
            "QWidget { background-color : rgb(136, 138, 133) }"
        )  # change background color of the open file window
        filedialog.setAcceptMode(QtGui.QFileDialog.AcceptSave)

        filedialog.fileSelected.connect(
            self.file_save
        )  # connect to action; send filename to fumction file_save
        filedialog.show()
Exemple #4
0
class Saver_Opener():
    def __init__(self):
        pass

    def open_1D(self, path, header=0):
        header_array = []

        file_to_read = open(str(path), 'r')
        for i, line in enumerate(file_to_read):
            if i is header: break
            temp = line.split(":")
            header_array.append(temp)
        file_to_read.close()

        temp = np.genfromtxt(str(path), dtype=float, delimiter=',')
        data = np.transpose(temp)

        return header_array, data

    def open_1D_dialog(self, directory='', fmt='', header=0):

        self.app = QtWidgets.QApplication([])
        file_path = self.FileDialog(directory=directory,
                                    mode='Open',
                                    fmt='csv, txt, dat')
        QTimer.singleShot(100, self.app.quit)
        self.app.exec_()

        header_array = []
        file_to_read = open(file_path, 'r')
        for i, line in enumerate(file_to_read):
            if i is header: break
            temp = line.split(":")
            header_array.append(temp)
        file_to_read.close()

        temp = np.genfromtxt(file_path, dtype=float, delimiter=',')
        data = np.transpose(temp)
        return header_array, data

    def save_1D_dialog(self, data, directory='', fmt='', header=''):

        self.app = QtWidgets.QApplication(sys.argv)
        file_path = self.FileDialog(directory=directory,
                                    mode='Save',
                                    fmt='csv, txt, dat')
        QTimer.singleShot(50, self.app.quit)
        self.app.exec_()

        np.savetxt(file_path,
                   np.transpose(data),
                   fmt='%.10f',
                   delimiter=',',
                   newline='\n',
                   header=header,
                   footer='',
                   comments='#',
                   encoding=None)

    def open_2D(self, path, header=0):

        header_array = []
        file_to_read = open(str(path), 'r')
        for i, line in enumerate(file_to_read):
            if i is header: break
            temp = line.split(":")
            header_array.append(temp)
        file_to_read.close()

        temp = np.genfromtxt(str(path), dtype=float, delimiter=',')
        data = temp

        return header_array, data

    def open_2D_dialog(self, directory='', fmt='', header=0):

        self.app = QtWidgets.QApplication(sys.argv)
        file_path = self.FileDialog(directory=directory,
                                    mode='Open',
                                    fmt='csv, txt, dat')
        QTimer.singleShot(50, self.app.quit)
        self.app.exec_()

        header_array = []
        file_to_read = open(file_path, 'r')
        for i, line in enumerate(file_to_read):
            if i is header: break
            temp = line.split(":")
            header_array.append(temp)
        file_to_read.close()

        temp = np.genfromtxt(file_path, dtype=float, delimiter=',')
        data = temp
        return header_array, data

    def open_2D_appended(self, path, header=0, chunk_size=1):

        header_array = []
        file_to_read = open(str(path), 'r')
        for i, line in enumerate(file_to_read):
            if i is header: break
            temp = line.split(":")
            header_array.append(temp)
        file_to_read.close()

        temp = np.genfromtxt(str(path), dtype=float, delimiter=',')
        data = np.array_split(temp, chunk_size)
        return header_array, data

    def open_2D_appended_dialog(self, directory='', header=0, chunk_size=1):

        self.app = QtWidgets.QApplication(sys.argv)
        file_path = self.FileDialog(directory=directory,
                                    mode='Open',
                                    fmt='csv, txt, dat')

        QTimer.singleShot(50, self.app.quit)
        self.app.exec_()

        header_array = []
        file_to_read = open(file_path, 'r')
        for i, line in enumerate(file_to_read):
            if i is header: break
            temp = line.split(":")
            header_array.append(temp)
        file_to_read.close()

        temp = np.genfromtxt(file_path, dtype=float, delimiter=',')
        data = np.array_split(temp, chunk_size)
        return header_array, data

    def save_2D_dialog(self, data, directory='', header=''):

        self.app = QtWidgets.QApplication(sys.argv)
        file_path = self.FileDialog(directory=directory,
                                    mode='Save',
                                    fmt='csv, txt, dat')
        QTimer.singleShot(50, self.app.quit)
        self.app.exec_()

        np.savetxt(file_path,
                   data,
                   fmt='%.10f',
                   delimiter=',',
                   newline='\n',
                   header=header,
                   footer='',
                   comments='#',
                   encoding=None)

    def create_file_dialog(self, directory=''):

        self.app = QtWidgets.QApplication(sys.argv)
        file_path = self.FileDialog(directory=directory,
                                    mode='Save',
                                    fmt='csv, txt, dat')
        open(file_path, "w").close()
        QTimer.singleShot(50, self.app.quit)
        self.app.exec_(
        )  # run mainloop which runs all time and makes all job in GUI.
        # mainloop will close the dialog, but we will have problems closing loop
        # we use QTimer with app.quit to inform mainloop to execute
        # it after it will be started.
        return file_path

    def FileDialog(self, directory='', mode='Open', fmt=''):
        self.dialog = QFileDialog()
        self.dialog.setStyleSheet(
            "QWidget { background-color : rgb(136, 138, 133) }")
        self.dialog.setFileMode(QtWidgets.QFileDialog.AnyFile)
        # both open and save dialog
        self.dialog.setAcceptMode(QFileDialog.AcceptOpen)\
         if mode=='Open' else self.dialog.setAcceptMode(QFileDialog.AcceptSave)

        # set format
        if fmt != '':
            self.dialog.setDefaultSuffix(fmt)
            self.dialog.setNameFilters([f'{fmt} (*.{fmt})'])

        # set starting directory
        if directory != '':
            self.dialog.setDirectory(str(directory))
        else:
            pass

        if self.dialog.exec_() == QDialog.Accepted:
            path = self.dialog.selectedFiles()[0]  # returns a list
            return path
        else:
            return ''
Exemple #5
0
 def save_file(self):
     if not self.save_on:
         return
     dialog = QFileDialog()
     dialog.setStyleSheet("background-color:rgb(255, 255, 255)")
     save_name, name_tmp = dialog.getSaveFileName(
         self, 'Save File', None, "*.txt (*.txt);;" + "*dat (*.dat)")
     if not save_name:
         return False
     name = str(save_name)
     if not (name.endswith('.txt') or name.endswith('.dat')):
         name += '.txt'
     filetyp = '.txt'
     if '.txt' in name:
         pos = name.index('.txt')
         filetyp = '.txt'
         name = name[0:pos]
     elif '.dat' in name:
         pos = name.index('.dat')
         filetyp = '.dat'
         name = name[0:pos]
     strTT = '_Time_trace'
     strFT = '_Fourier_transform'
     strDD = '_Distance_distribution'
     strBG = '_Backgound_Function'
     strinfo = '_Information_sheet'
     # File 1 (time trace)
     tmparra = np.array(np.transpose((self.time, self.spc_bg_n)))
     y = tmparra.reshape((len(self.time), 2))
     with open(name + strTT + filetyp, 'w') as file:
         file.write("\n".join("   ".join(map("{:.8f}".format, x))
                              for x in (y)))
     file.close()
     # File 2 (fourier transform of the time trace)
     tmparra = np.array(np.transpose((self.Frequency_region, self.Fourier)))
     y = tmparra.reshape((len(self.Frequency_region), 2))
     with open(name + strFT + filetyp, 'w') as file:
         file.write("\n".join("   ".join(map("{:.8f}".format, x))
                              for x in (y)))
     file.close()
     # File 3 (distance distribution)
     if not self.userdef:
         tmparra = np.array(np.transpose((self.r, self.Pr)))
         y = tmparra.reshape((len(self.r), 2))
     else:
         tmparra = np.array(np.transpose((self.r_usr, self.Pr_usr)))
         y = tmparra.reshape((len(self.r_usr), 2))
     with open(name + strDD + filetyp, 'w') as file:
         file.write("\n".join("   ".join(map("{:.8f}".format, x))
                              for x in (y)))
     file.close()
     # File 4 (background function of the time signal)
     tmparra = np.array(np.transpose((self.time_bg, self.bg_function)))
     y = tmparra.reshape((len(self.time_bg), 2))
     with open(name + strBG + filetyp, 'w') as file:
         file.write("\n".join("   ".join(map("{:.8f}".format, x))
                              for x in (y)))
     file.close()
     # File 5 (information file which contains all simulation settings)
     with open(name + strinfo + filetyp, 'w') as file:
         file.write("Infosheet for PELDOR/DEER Simulation." +
                    " Original Path:\n" + name + "\n\n")
         file.write("Simulated with SimPel" + self.versionnumber + "\n\n")
         file.write("Analyzed at: ")
         now = datetime.datetime.now()
         file.write(now.strftime("%Y-%m-%d %H:%M:%S"))
         file.write("\n\n\n*************Simulation Parameter***********" +
                    "******\n\n")
         if not self.userdef:
             file.write("Distance / nm \t Coefficient\t  sigma / nm\n")
             for i in range(0, len(self.sigmas)):
                 value = str("%.4f" % self.inputvalues_static[2 * i])
                 file.write(value + "\t         ")
                 value = str("%.4f" % self.inputvalues_static[2 * i + 1])
                 file.write(value + "\t          ")
                 value = str("%.4f" % self.sigmas_static[i])
                 file.write(value + "\t         ")
                 file.write("\n")
         else:
             file.write("Distance distribution were taken from" +
                        "external file: ")
             file.write(str(self.filename))
             file.write("\n")
         boolstr = str(self.EnableNoiseButton.isChecked())
         file.write("\n\nPELDOR/DEER step size: " +
                    str(self.stepsize_static) + ' ns')
         file.write("\n\nPELDOR/DEER time scale: " +
                    str(self.timescale_static) + ' ns')
         file.write("\n\nPELDOR/DEER modulation depth: " +
                    str(self.moddepth_static[0]))
         file.write("\n\nGaussian noise enabled: " + boolstr)
         if self.EnableNoiseButton.isChecked():
             SNRvalue = str("%.3f" % self.SNRratio)
             file.write("\n\nSignal-to-noise ratio: " + SNRvalue)
         boolstr = str(self.EnableBgButton.isChecked())
         file.write("\n\nBackground function enabled: " + boolstr)
         if self.EnableBgButton.isChecked():
             file.write("\n\nBackground dimension: " + str(self.bg_dim))
             file.write("\n\nBackground decay: " + str(self.bg_decay[0]) +
                        "*1e-4 1/ns")
         if not self.userdef:
             if self.integrator_static == 3:
                 intstr = 'Fresnel integrals'
             elif not self.userdef:
                 intstr = 'Fresnel integrals'
             elif self.integrator_static == 0:
                 intstr = 'Fresnel integrals'
             elif self.integrator_static == 2:
                 intstr = 'Fresnel integrals with high discretization rate'
         else:
             intstr = 'Kernel matrix with Fresnel integral evaluation'
         file.write("\n\nIntegration method: " + intstr)
     file.close()
     figsize1 = self.figure.get_size_inches()
     figsize2 = self.figure2.get_size_inches()
     try:
         if eval(self.configs_str["autosave"]):
             k = str(self.configs_str["figure_format"])
             s = k.split(",")
             for i in range(0, len(s)):
                 for tick in self.ax.xaxis.get_major_ticks():
                     tick.label.set_fontsize(
                         self.configs["axeslabelfontsize"])
                 for tick in self.ax.yaxis.get_major_ticks():
                     tick.label.set_fontsize(
                         self.configs["axeslabelfontsize"])
                 for tick in self.ax2.xaxis.get_major_ticks():
                     tick.label.set_fontsize(
                         self.configs["axeslabelfontsize"])
                 for tick in self.ax2.yaxis.get_major_ticks():
                     tick.label.set_fontsize(
                         self.configs["axeslabelfontsize"])
                 self.ax.xaxis.get_label().set_fontsize(
                     self.configs["fontsize"])
                 self.ax2.xaxis.get_label().set_fontsize(
                     self.configs["fontsize"])
                 self.ax.yaxis.get_label().set_fontsize(
                     self.configs["fontsize"])
                 self.ax2.yaxis.get_label().set_fontsize(
                     self.configs["fontsize"])
                 self.figure.set_size_inches(self.configs["xsize"],
                                             self.configs["ysize"],
                                             forward=True)
                 self.figure2.set_size_inches(self.configs["xsize"],
                                              self.configs["ysize"],
                                              forward=True)
                 self.figure.tight_layout()
                 self.figure2.tight_layout()
                 s[i] = str(s[i]).rstrip()
                 s[i] = s[i].replace(" ", "")
                 self.figure.savefig(name + strTT + "." + str(s[i]),
                                     bbox_inches='tight',
                                     papertype='a4',
                                     format=s[i])
                 self.figure2.savefig(name + strDD + "." + str(s[i]),
                                      bbox_inches='tight',
                                      papertype='a4',
                                      format=s[i])
             self.figure.set_size_inches(figsize1, forward=True)
             self.figure2.set_size_inches(figsize2, forward=True)
             self.plot_TT()
             self.plot_DD()
     except:
         self.figure.set_size_inches(figsize1, forward=True)
         self.figure2.set_size_inches(figsize2, forward=True)
         self.plot_TT()
         self.plot_DD()
         str_tm = ("Something went wrong! Figures could not be saved." +
                   "\nMaybe wrong configuration settings.")
         self.War5 = QMessageBox.warning(self, "Error", str_tm,
                                         QMessageBox.Ok)