コード例 #1
0
def start_RepTate(argv):
    """
    Main RepTate application. 
    
    :param list argv: Command line parameters passed to Reptate
    """
    loglevel = logging.DEBUG
    GUI = True
    QApplication.setStyle("Fusion")  # comment that line for a native look
    # for a list of available styles: "from PyQt5.QtWidgets import QStyleFactory; print(QStyleFactory.keys())"

    app = QApplication(sys.argv)

    # FOR DEBUGGING PURPOSES: Set Single or MultiThread (default)
    CmdBase.calcmode = CalcMode.singlethread

    ex = QApplicationManager(loglevel=loglevel)
    ex.setStyleSheet("QTabBar::tab { color:black; height: 22px; }")

    ex.show()

    ########################################################
    # THE FOLLOWING LINES ARE FOR TESTING A PARTICULAR CASE
    # Open a particular application
    ex.handle_new_app("MWD")

    #####################
    # Open a Dataset
    gt_dir = "data%sMWD%s" % ((os.sep, ) * 2)
    ex.applications["MWD1"].new_tables_from_files([
        gt_dir + "Munstedt_PSIII.gpc",
    ])
    # Open a theory
    ex.applications["MWD1"].datasets["Set1"].new_theory("Discretize MWD")
    ex.applications["MWD1"].datasets["Set1"].new_theory("LogNormal")
    ex.applications["MWD1"].datasets["Set1"].new_theory("GEX")

    sys.exit(app.exec_())

    ex.handle_new_app("MWD")

    # THE TEST FAILS FOR THE CODE BELOW... STRANGE!
    ex.applications["MWD2"].new_tables_from_files([
        gt_dir + "Munstedt_PSIV.gpc",
    ])
    # Open a theory
    ex.applications["MWD2"].datasets["Set1"].new_theory("Discretize MWD")
    ex.applications["MWD2"].datasets["Set1"].new_theory("LogNormal")
    ex.applications["MWD2"].datasets["Set1"].new_theory("GEX")

    sys.exit(app.exec_())
コード例 #2
0
def start_RepTate(argv):
    """
    Main RepTate application. 
    
    :param list argv: Command line parameters passed to Reptate
    """
    loglevel = logging.DEBUG
    GUI = True
    QApplication.setStyle("Fusion")  # comment that line for a native look
    # for a list of available styles: "from PyQt5.QtWidgets import QStyleFactory; print(QStyleFactory.keys())"

    # app = QApplication(sys.argv)

    # FOR DEBUGGING PURPOSES: Set Single or MultiThread (default)
    CmdBase.calcmode = CalcMode.singlethread

    ex = QApplicationManager(loglevel=loglevel)
    ex.setStyleSheet("QTabBar::tab { color:black; height: 22px; }")

    ########################################################
    # THE FOLLOWING LINES ARE FOR TESTING A PARTICULAR CASE
    # Open a particular application
    ex.handle_new_app("React")

    #####################
    # Open a Dataset
    ex.applications["React1"].new_tables_from_files([
        "data%sReact%sout1.reac" % ((os.sep, ) * 2),
    ])
    # Open a theory
    ex.applications["React1"].datasets["Set1"].new_theory("BOB Architecture")

    ex.show()

    sys.exit(app.exec_())
コード例 #3
0
def start_RepTate(argv):
    """
    Main RepTate application. 
    
    :param list argv: Command line parameters passed to Reptate
    """
    loglevel = logging.DEBUG
    GUI = True
    QApplication.setStyle("Fusion")  # comment that line for a native look
    # for a list of available styles: "from PyQt5.QtWidgets import QStyleFactory; print(QStyleFactory.keys())"

    app = QApplication(sys.argv)

    # FOR DEBUGGING PURPOSES: Set Single or MultiThread (default)
    CmdBase.calcmode = CalcMode.singlethread

    ex = QApplicationManager(loglevel=loglevel)
    ex.setStyleSheet("QTabBar::tab { color:black; height: 22px; }")

    ex.show()

    ########################################################
    # THE FOLLOWING LINES ARE FOR TESTING A PARTICULAR CASE
    # Open a particular application
    ex.handle_new_app("TTS")

    # Open a Dataset
    pi_dir = "data%sPI_LINEAR%sosc%s" % ((os.sep, ) * 3)
    ex.applications["TTS1"].new_tables_from_files([
        pi_dir + "PI223k-14c_-45C_FS2_PP10.osc",
        pi_dir + "PI223k-14c_-40C_FS_PP10.osc",
        pi_dir + "PI223k-14c_-30C_FS_PP10.osc",
        pi_dir + "PI223k-14_-10C_FS_PP10.osc",
        pi_dir + "PI223k-14c_-20C_FS_PP10.osc",
        pi_dir + "PI223k-14b_0C_FS4_PP10.osc",
        pi_dir + "PI223k-14_10C_FS_PP10.osc",
        pi_dir + "PI223k-14b_25C_FS3_PP10.osc",
        pi_dir + "PI223k-14_25C_FS3_PP10.osc",
        pi_dir + "PI223k-14c_30C_FS3_PP10.osc",
        pi_dir + "PI223k-14_40C_FS_PP10.osc",
        pi_dir + "PI223k-14_50C_FS_PP10.osc",
    ])

    # Open a theory
    ex.applications["TTS1"].datasets["Set1"].new_theory("Automatic TTS Shift")
    # Minimize the theory
    ex.applications["TTS1"].datasets["Set1"].handle_actionMinimize_Error()
    # Open a theory
    ex.applications["TTS1"].datasets["Set1"].new_theory("WLF Shift")
    # Minimize the theory
    ex.applications["TTS1"].datasets["Set1"].handle_actionMinimize_Error()

    sys.exit(app.exec_())
コード例 #4
0
def start_RepTate(argv):
    """
    Main RepTate application. 
    
    :param list argv: Command line parameters passed to Reptate
    """
    loglevel = logging.DEBUG
    GUI = True
    QApplication.setStyle("Fusion")  # comment that line for a native look
    # for a list of available styles: "from PyQt5.QtWidgets import QStyleFactory; print(QStyleFactory.keys())"

    app = QApplication(sys.argv)

    # FOR DEBUGGING PURPOSES: Set Single or MultiThread (default)
    CmdBase.calcmode = CalcMode.singlethread

    ex = QApplicationManager(loglevel=loglevel)
    ex.setStyleSheet("QTabBar::tab { color:black; height: 22px; }")

    ex.show()

    ########################################################
    # THE FOLLOWING LINES ARE FOR TESTING A PARTICULAR CASE
    # Open a particular application
    ex.handle_new_app("Gt")

    #####################
    # TEST MaxwellModesTime
    # Open a Dataset
    gt_dir = "data%sGt%s" % ((os.sep, ) * 2)
    ex.applications["Gt1"].new_tables_from_files([
        gt_dir + "C0224_NVT_450K_1atm.gt",
    ])
    # Open a theory
    ex.applications["Gt1"].datasets["Set1"].new_theory("Maxwell Modes")
    # Minimize the theory
    ex.applications["Gt1"].datasets["Set1"].handle_actionMinimize_Error()

    ex.applications["Gt1"].datasets["Set1"].new_theory("Rouse")
    # # Minimize the theory
    ex.applications["Gt1"].datasets["Set1"].handle_actionMinimize_Error()

    sys.exit(app.exec_())
コード例 #5
0
def start_RepTate(argv):
    """
    Main RepTate application. 
    
    :param list argv: Command line parameters passed to Reptate
    """
    loglevel = logging.DEBUG
    GUI = True
    QApplication.setStyle("Fusion")  # comment that line for a native look
    # for a list of available styles: "from PyQt5.QtWidgets import QStyleFactory; print(QStyleFactory.keys())"

    app = QApplication(sys.argv)

    # FOR DEBUGGING PURPOSES: Set Single or MultiThread (default)
    CmdBase.calcmode = CalcMode.singlethread

    ex = QApplicationManager(loglevel=loglevel)
    ex.setStyleSheet("QTabBar::tab { color:black; height: 22px; }")

    ex.show()

    ########################################################
    # THE FOLLOWING LINES ARE FOR TESTING A PARTICULAR CASE
    # Open a particular application
    ex.handle_new_app("LVE")

    #####################
    # TEST Likhtman-McLeish
    # Open a Dataset
    pi_dir = "data%sPI_LINEAR%s" % ((os.sep,) * 2)
    ex.applications["LVE1"].new_tables_from_files(
        [
            pi_dir + "PI_13.5k_T-35.tts",
            pi_dir + "PI_23.4k_T-35.tts",
            pi_dir + "PI_33.6k_T-35.tts",
            pi_dir + "PI_94.9k_T-35.tts",
            pi_dir + "PI_225.9k_T-35.tts",
            pi_dir + "PI_483.1k_T-35.tts",
            pi_dir + "PI_634.5k_T-35.tts",
            pi_dir + "PI_1131k_T-35.tts",
        ]
    )
    # Open a theory
    ex.applications["LVE1"].datasets["Set1"].new_theory("Likhtman-McLeish")
    # Minimize the theory
    ex.applications["LVE1"].datasets["Set1"].handle_actionMinimize_Error()

    # Open a theory
    ex.applications["LVE1"].datasets["Set1"].new_theory("Rouse")
    # Minimize the theory
    ex.applications["LVE1"].datasets["Set1"].handle_actionMinimize_Error()

    #####################
    # TEST Carreau-Yasuda
    # Open a Dataset
    ex.handle_new_app("LVE")
    ex.applications["LVE2"].new_tables_from_files(
        [pi_dir + "PI_483.1k_T-35.tts",]
    )
    # Switch the view
    ex.applications["LVE2"].view_switch("logetastar")
    # Open a theory
    ex.applications["LVE2"].datasets["Set1"].new_theory("Carreau-Yasuda")
    # Minimize the theory
    ex.applications["LVE2"].datasets["Set1"].handle_actionMinimize_Error()

    # Open a theory
    ex.applications["LVE2"].datasets["Set1"].new_theory("Maxwell Modes")
    # Minimize the theory
    ex.applications["LVE2"].datasets["Set1"].handle_actionMinimize_Error()

    #####################
    # TEST DTD
    # Open a Dataset
    ex.handle_new_app("LVE")
    pi_dir = "data%sPI_STAR%s" % ((os.sep,) * 2)
    ex.applications["LVE3"].new_tables_from_files(
        [pi_dir + "S6Z8.1T40.tts", pi_dir + "S6Z12T40.tts", pi_dir + "S6Z16T40.tts",]
    )

    ex.applications["LVE3"].datasets["Set1"].new_theory("DTD Stars")
    ex.applications["LVE3"].datasets["Set1"].handle_actionMinimize_Error()

    sys.exit(app.exec_())
コード例 #6
0
def start_RepTate(argv):
    """
    Main RepTate application.

    :param list argv: Command line parameters passed to Reptate
    """
    GUI = True

    parser = argparse.ArgumentParser(
        description=
        "RepTate: Rheology of Entangled Polymers: Toolkit for the Analysis of Theory and Experiment.",
        epilog=
        "(c) Jorge Ramirez ([email protected], UPM), Victor Boudara (U. Leeds) (2017-2020)",
    )
    parser.add_argument("-d",
                        "--dpi",
                        help="High DPI support on Windows",
                        action="store_true")
    parser.add_argument("-l",
                        "--tool",
                        help="Open the tool L (if available)",
                        default="",
                        metavar="L")
    parser.add_argument(
        "-s",
        "--single",
        help="Run Reptate as a single thread application",
        action="store_true",
    )
    parser.add_argument(
        "-t",
        "--theory",
        help="Open the theory T (if available)",
        default="",
        metavar="T",
    )
    parser.add_argument("-v",
                        "--verbose",
                        help="Write debug information to stdout",
                        action="store_true")
    parser.add_argument("-V",
                        "--version",
                        help="Print RepTate version and exit",
                        action="store_true")
    parser.add_argument("finlist", nargs="*")

    args = parser.parse_args(args=argv)

    # Get files from command line
    dictfiles = get_argument_files(args.finlist)

    if args.version:
        print(QApplicationManager.intro)
        sys.exit()

    if args.verbose:
        loglevel = logging.DEBUG
    else:
        loglevel = logging.INFO

    QApplication.setStyle("Fusion")  # comment that line for a native look
    # for a list of available styles: "from PyQt5.QtWidgets import QStyleFactory; print(QStyleFactory.keys())"

    if args.dpi or sys.platform == "darwin":
        os.environ["QT_AUTO_SCREEN_SCALE_FACTOR"] = "1"
        QCoreApplication.setAttribute(Qt.AA_EnableHighDpiScaling, True)
        QApplication.setAttribute(Qt.AA_EnableHighDpiScaling, True)
        QApplication.setAttribute(Qt.AA_UseHighDpiPixmaps, True)

    app = QApplication(sys.argv)
    app.setApplicationName("RepTate")

    if args.dpi and sys.platform == "win32":
        #os.environ["QT_AUTO_SCREEN_SCALE_FACTOR"] = "1"
        import matplotlib
        #matplotlib.pyplot.matplotlib.rcParams['figure.dpi'] = int (np.round(app.desktop().physicalDpiX()/10))
        matplotlib.pyplot.matplotlib.rcParams['figure.dpi'] = 34
        #matplotlib.pyplot.matplotlib.rcParams['figure.dpi'] = app.desktop().physicalDpiX()/4

    splash = SplashScreen()
    splash.show()

    ex = QApplicationManager(loglevel=loglevel)
    ex.setStyleSheet("QTabBar::tab { color:black; height: 22px; }")
    # splash.showMessage("Loading RepTate...")

    splash.finish(ex)

    # Handle files & open apps accordingly
    CmdBase.calcmode = (
        CalcMode.singlethread
    )  # avoid troubles when loading multiple apps/files/theories
    d = {
        ex.extension: ex.appname
        for ex in list(ex.available_applications.values())
    }
    toolopen = False
    for k in dictfiles.keys():
        if k == "rept":
            ex.open_project(dictfiles[k][0])
        elif np.any([k == key for key in d.keys()]):
            # exact match
            ex.handle_new_app(d[k])
            appname = "%s%d" % (d[k], ex.application_counter)
            ex.applications[appname].new_tables_from_files(dictfiles[k])
            if args.theory in list(ex.applications[appname].theories.keys()):
                ex.applications[appname].datasets["Set1"].new_theory(
                    args.theory)
            if args.tool in (
                    list(ex.applications[appname].availabletools.keys()) +
                    list(ex.applications[appname].extratools.keys())):
                ex.applications[appname].new_tool(args.tool)
                ex.applications[appname].update_all_ds_plots()
                ex.applications[appname].showDataInspector(True)
                toolopen = True

        elif np.any([k in key
                     for key in d.keys()]):  # works with spaces in extensions
            for key in d.keys():
                if k in key:
                    ex.handle_new_app(d[key])
                    appname = "%s%d" % (d[key], ex.application_counter)
                    ex.applications[appname].new_tables_from_files(
                        dictfiles[k])
                    if args.theory in list(
                            ex.applications[appname].theories.keys()):
                        ex.applications[appname].datasets["Set1"].new_theory(
                            args.theory)
                    if args.tool in (
                            list(
                                ex.applications[appname].availabletools.keys())
                            +
                            list(ex.applications[appname].extratools.keys())):
                        ex.applications[appname].new_tool(args.tool)
                        ex.applications[appname].update_all_ds_plots()
                        ex.applications[appname].showDataInspector(True)
                        toolopen = True
                    break
        else:
            print("File type %s cannot be opened" % k)
    # set the calmode back
    if args.single:
        CmdBase.calcmode = CalcMode.singlethread
    else:
        CmdBase.calcmode = CalcMode.multithread

    ex.showMaximized()
    sys.exit(app.exec_())
コード例 #7
0
def start_RepTate(argv):
    """
    Main RepTate application. 
    
    :param list argv: Command line parameters passed to Reptate
    """
    GUI = True

    parser = argparse.ArgumentParser(
        description=
        "RepTate: Rheology of Entangled Polymers: Toolkit for the Analysis of Theory and Experiment.",
        epilog=
        "(c) Jorge Ramirez - [email protected] - UPM , Victor Boudara - U. Leeds (2018)",
    )
    parser.add_argument("-d",
                        "--dpi",
                        help="High DPI support on Windows",
                        action="store_true")
    parser.add_argument(
        "-s",
        "--single",
        help="Run Reptate as a single thread application",
        action="store_true",
    )
    parser.add_argument("-v",
                        "--verbose",
                        help="Write debug information to stdout",
                        action="store_true")
    parser.add_argument("finlist", nargs="*")

    args = parser.parse_args(args=argv)

    # Get files from command line
    dictfiles = get_argument_files(args.finlist)

    if args.verbose:
        loglevel = logging.DEBUG
    else:
        loglevel = logging.INFO

    QApplication.setStyle("Fusion")  # comment that line for a native look
    # for a list of available styles: "from PyQt5.QtWidgets import QStyleFactory; print(QStyleFactory.keys())"

    if args.dpi:
        os.environ["QT_AUTO_SCREEN_SCALE_FACTOR"] = "1"
        QCoreApplication.setAttribute(Qt.AA_EnableHighDpiScaling, True)
        QApplication.setAttribute(Qt.AA_EnableHighDpiScaling, True)
        QApplication.setAttribute(Qt.AA_UseHighDpiPixmaps, True)

    app = QApplication(sys.argv)

    CmdBase.mode = CmdMode.GUI
    tmpex = QApplicationManager(loglevel=loglevel)
    ex = ApplicationLVE("LVE", tmpex)
    ex.setWindowIcon(QIcon("gui/Images/new_icons/LVE.ico"))
    ex.setWindowTitle("PyQt5 simple window - pythonspot.com")

    # # Handle files & open apps accordingly
    # CmdBase.calcmode = CalcMode.singlethread # avoid troubles when loading multiple apps/files/theories
    # d = {ex.extension: ex.appname for ex in  list(ex.available_applications.values())}
    # for k in dictfiles.keys():
    # if k == 'rept':
    # ex.open_project(dictfiles[k][0])
    # elif np.any([k == key for key in d.keys()]):
    # # exact match
    # ex.handle_new_app(d[k])
    # appname="%s%d"%(d[k],ex.application_counter)
    # ex.applications[appname].new_tables_from_files(dictfiles[k])
    # elif np.any([k in key for key in d.keys()]): # works with spaces in extensions
    # for key in d.keys():
    # if k in key:
    # ex.handle_new_app(d[key])
    # appname="%s%d"%(d[key],ex.application_counter)
    # ex.applications[appname].new_tables_from_files(dictfiles[k])
    # break
    # else:
    # print("File type %s cannot be opened"%k)
    # # set the calmode back
    if args.single:
        CmdBase.calcmode = CalcMode.singlethread
    else:
        CmdBase.calcmode = CalcMode.multithread

    def my_excepthook(type, value, tb):
        """Catch exceptions and print error message. Open email client to report bug to devlopers"""
        tb_msg = ""
        for e in traceback.format_tb(tb):
            tb_msg += str(e)
        tb_msg += "%s: %s\n" % (type.__name__, str(value))
        # print(tb_msg) # JR: Not needed anymore
        l = logging.getLogger("RepTate")
        if CmdBase.mode == CmdMode.GUI:
            l.error(tb_msg.replace("\n", "<br>"))
        else:
            l.error(tb_msg)
        msg = (
            'Sorry, something went wrong:\n "%s: %s".\nTry to save your work and quit RepTate.\nDo you want to help RepTate developers by reporting this bug?'
            % (type.__name__, str(value)))
        ans = QMessageBox.critical(ex, "Critical Error", msg,
                                   QMessageBox.Yes | QMessageBox.No)
        if ans == QMessageBox.Yes:
            address = "*****@*****.**"
            subject = "Something went wrong"
            body = (
                "%s\nIf you can, please describe below what you were doing with RepTate when the error happened (apps and theories or tools open if any) and send the message\nPlease, do NOT include confidential information\n%s\nError Traceback:\n %s"
                % ("-" * 60, "-" * 60 + "\n" * 10 + "-" * 60, tb_msg))
            QDesktopServices.openUrl(
                QUrl(
                    "mailto:?to=%s&subject=%s&body=%s" %
                    (address, subject, body),
                    QUrl.TolerantMode,
                ))

    sys.excepthook = my_excepthook

    ex.showMaximized()
    sys.exit(app.exec_())
コード例 #8
0
ファイル: RepTate.py プロジェクト: AMaywurm/RepTate
def start_RepTate(argv):
    """
    Main RepTate application.

    :param list argv: Command line parameters passed to Reptate
    """
    GUI = True

    parser = argparse.ArgumentParser(
        description=
        'RepTate: Rheologhy of Entangled Polymers: Toolkit for the Analysis of Theory and Experiment.',
        epilog=
        '(c) Jorge Ramirez - [email protected] - UPM , Victor Boudara - U. Leeds (2018)'
    )
    parser.add_argument('-d',
                        '--dpi',
                        help='High DPI support on Windows',
                        action='store_true')
    parser.add_argument('-s',
                        '--single',
                        help='Run Reptate as a single thread application',
                        action='store_true')
    parser.add_argument('-t',
                        '--theory',
                        help='Open the given theory (if available)',
                        default='')
    parser.add_argument('-v',
                        '--verbose',
                        help='Write debug information to stdout',
                        action='store_true')
    parser.add_argument('-V',
                        '--version',
                        help='Print RepTate version and exit',
                        action='store_true')
    parser.add_argument('finlist', nargs='*')

    args = parser.parse_args(args=argv)

    # Get files from command line
    dictfiles = get_argument_files(args.finlist)

    if args.version:
        print(QApplicationManager.intro)
        sys.exit()

    if args.verbose:
        loglevel = logging.DEBUG
    else:
        loglevel = logging.INFO

    QApplication.setStyle("Fusion")  #comment that line for a native look
    #for a list of available styles: "from PyQt5.QtWidgets import QStyleFactory; print(QStyleFactory.keys())"

    if args.dpi:
        os.environ["QT_AUTO_SCREEN_SCALE_FACTOR"] = "1"
        QCoreApplication.setAttribute(Qt.AA_EnableHighDpiScaling, True)
        QApplication.setAttribute(Qt.AA_EnableHighDpiScaling, True)
        QApplication.setAttribute(Qt.AA_UseHighDpiPixmaps, True)

    app = QApplication(sys.argv)
    #if args.dpi:
    #    app.setAttribute(Qt.AA_EnableHighDpiScaling)

    splash = SplashScreen()
    # splash.showMessage("Loading RepTate...\n")
    splash.show()

    ex = QApplicationManager(loglevel=loglevel)
    ex.setStyleSheet("QTabBar::tab { color:black; height: 22px; }")
    # splash.showMessage("Loading RepTate...")

    splash.finish(ex)

    # Handle files & open apps accordingly
    CmdBase.calcmode = CalcMode.singlethread  # avoid troubles when loading multiple apps/files/theories
    d = {
        ex.extension: ex.appname
        for ex in list(ex.available_applications.values())
    }
    for k in dictfiles.keys():
        if k == 'rept':
            ex.open_project(dictfiles[k][0])
        elif np.any([k == key for key in d.keys()]):
            # exact match
            ex.handle_new_app(d[k])
            appname = "%s%d" % (d[k], ex.application_counter)
            ex.applications[appname].new_tables_from_files(dictfiles[k])
            if args.theory in list(ex.applications[appname].theories.keys()):
                ex.applications[appname].datasets['Set1'].new_theory(
                    args.theory)

        elif np.any([k in key
                     for key in d.keys()]):  # works with spaces in extensions
            for key in d.keys():
                if k in key:
                    ex.handle_new_app(d[key])
                    appname = "%s%d" % (d[key], ex.application_counter)
                    ex.applications[appname].new_tables_from_files(
                        dictfiles[k])
                    if args.theory in list(
                            ex.applications[appname].theories.keys()):
                        ex.applications[appname].datasets['Set1'].new_theory(
                            args.theory)
                    break
        else:
            print("File type %s cannot be opened" % k)
    # set the calmode back
    if args.single:
        CmdBase.calcmode = CalcMode.singlethread
    else:
        CmdBase.calcmode = CalcMode.multithread

    def my_excepthook(type, value, tb):
        """Catch exceptions and print error message. Open email client to report bug to devlopers"""
        tb_msg = ''
        for e in traceback.format_tb(tb):
            tb_msg += str(e)
        tb_msg += "%s: %s\n" % (type.__name__, str(value))
        #print(tb_msg) # JR: Not needed anymore
        l = logging.getLogger('RepTate')
        if CmdBase.mode == CmdMode.GUI:
            l.error(tb_msg.replace('\n', '<br>'))
        else:
            l.error(tb_msg)
        msg = 'Sorry, something went wrong:\n \"%s: %s\".\nTry to save your work and quit RepTate.\nDo you want to help RepTate developers by reporting this bug?' % (
            type.__name__, str(value))
        ans = QMessageBox.critical(ex, 'Critical Error', msg,
                                   QMessageBox.Yes | QMessageBox.No)
        if ans == QMessageBox.Yes:
            address = "*****@*****.**"
            subject = "Something went wrong"
            body = "%s\nIf you can, please describe below what you were doing with RepTate when the error happened (apps and theories or tools open if any) and send the message\nPlease, do NOT include confidential information\n%s\nError Traceback:\n %s" % (
                "-" * 60, "-" * 60 + "\n" * 10 + "-" * 60, tb_msg)
            QDesktopServices.openUrl(
                QUrl(
                    "mailto:?to=%s&subject=%s&body=%s" %
                    (address, subject, body), QUrl.TolerantMode))

    sys.excepthook = my_excepthook

    ex.showMaximized()
    sys.exit(app.exec_())
コード例 #9
0
def start_RepTate(argv):
    """
    Main RepTate application. 
    
    :param list argv: Command line parameters passed to Reptate
    """
    loglevel = logging.DEBUG
    GUI = True
    QApplication.setStyle("Fusion")  # comment that line for a native look
    # for a list of available styles: "from PyQt5.QtWidgets import QStyleFactory; print(QStyleFactory.keys())"

    app = QApplication(sys.argv)

    # FOR DEBUGGING PURPOSES: Set Single or MultiThread (default)
    CmdBase.calcmode = CalcMode.singlethread

    ex = QApplicationManager(loglevel=loglevel)
    ex.setStyleSheet("QTabBar::tab { color:black; height: 22px; }")

    ex.show()

    ########################################################
    # THE FOLLOWING LINES ARE FOR TESTING A PARTICULAR CASE
    # Open a particular application

    ####################
    # open linear rheology data to import the Maxwell modes
    ex.handle_new_app("LVE")
    dow_dir = "data%sDOW%sLinear_Rheology_TTS%s" % ((os.sep, ) * 3)
    ex.applications["LVE1"].new_tables_from_files([
        dow_dir + "DOWLDPEL150R_160C.tts",
    ])
    ex.applications["LVE1"].datasets["Set1"].new_theory("Maxwell Modes")
    ex.applications["LVE1"].datasets["Set1"].handle_actionMinimize_Error()

    #####################
    # TEST Rolie-Poly
    # Open a Dataset

    ex.handle_new_app("NLVE")

    dow_dir = "data%sDOW%sNon-Linear_Rheology%sStart-up_Shear%s" % (
        (os.sep, ) * 4)
    ex.applications["NLVE2"].new_tables_from_files([
        dow_dir + "My_dow150-160-1 shear.shear",
        dow_dir + "My_dow150-160-01 shear.shear",
        dow_dir + "My_dow150-160-001 shear.shear",
        dow_dir + "My_dow150-160-3 shear.shear",
        dow_dir + "My_dow150-160-03 shear.shear",
        dow_dir + "My_dow150-160-003 shear.shear",
        dow_dir + "My_dow150-160-0003 shear.shear",
    ])
    # Open a theory
    ex.applications["NLVE2"].datasets["Set1"].new_theory("Rolie-Poly")
    # Minimize the theory
    # Copy Maxwell Modes
    ex.applications["NLVE2"].datasets["Set1"].theories["RP1"].do_copy_modes(
        "LVE1.Set1.MM1")
    ex.applications["NLVE2"].datasets["Set1"].handle_actionMinimize_Error()

    #####################
    # TEST Rolie-Poly uniaxial extension
    # Open a Dataset
    ex.handle_new_app("NLVE")
    dow_dir = "data%sDOW%sNon-Linear_Rheology%sStart-up_extension%s" % (
        (os.sep, ) * 4)
    ex.applications["NLVE3"].new_tables_from_files([
        dow_dir + "My_dow150-160-01.uext",
        dow_dir + "My_dow150-160-001.uext",
        dow_dir + "My_dow150-160-0001.uext",
        dow_dir + "My_dow150-160-03.uext",
        dow_dir + "My_dow150-160-003.uext",
        dow_dir + "My_dow150-160-0003.uext",
    ])

    # Open a theory
    ex.applications["NLVE3"].datasets["Set1"].new_theory("Rolie-Poly")
    # select uniaxial extension
    ex.applications["NLVE3"].datasets["Set1"].theories[
        "RP1"].select_extensional_flow()
    # Copy Maxwell Modes
    ex.applications["NLVE3"].datasets["Set1"].theories["RP1"].do_copy_modes(
        "LVE1.Set1.MM1")
    # Minimize the theory
    ex.applications["NLVE3"].datasets["Set1"].handle_actionMinimize_Error()

    # Open a theory
    ex.applications["NLVE3"].datasets["Set1"].new_theory("Pom-Pom")

    sys.exit(app.exec_())
コード例 #10
0
def start_UV(argv):
    """
    Start Universal Viewer app. 
    
    :param list argv: Command line parameters passed to UV
    """
    GUI = True

    parser = argparse.ArgumentParser(
        description=
        "RepTate: Rheology of Entangled Polymers: Toolkit for the Analysis of Theory and Experiment.",
        epilog=
        "(c) Jorge Ramirez ([email protected], UPM), Victor Boudara (U. Leeds) (2017-2020)",
    )
    parser.add_argument("-d",
                        "--dpi",
                        help="High DPI support on Windows",
                        action="store_true")
    parser.add_argument("-l",
                        "--tool",
                        help="Open the tool L (if available)",
                        default="",
                        metavar="L")
    parser.add_argument(
        "-s",
        "--single",
        help="Run Reptate as a single thread application",
        action="store_true",
    )
    parser.add_argument(
        "-t",
        "--theory",
        help="Open the theory T (if available)",
        default="",
        metavar="T",
    )
    parser.add_argument("-v",
                        "--verbose",
                        help="Write debug information to stdout",
                        action="store_true")
    parser.add_argument("-V",
                        "--version",
                        help="Print RepTate version and exit",
                        action="store_true")
    parser.add_argument("finlist", nargs="*")

    args = parser.parse_args(args=argv)

    # Get files from command line
    dictfiles = get_argument_files(args.finlist)

    if args.version:
        print(QApplicationManager.intro)
        sys.exit()

    if args.verbose:
        loglevel = logging.DEBUG
    else:
        loglevel = logging.INFO

    QApplication.setStyle("Fusion")  # comment that line for a native look
    # for a list of available styles: "from PyQt5.QtWidgets import QStyleFactory; print(QStyleFactory.keys())"

    if args.dpi:
        os.environ["QT_AUTO_SCREEN_SCALE_FACTOR"] = "1"
        QCoreApplication.setAttribute(Qt.AA_EnableHighDpiScaling, True)
        QApplication.setAttribute(Qt.AA_EnableHighDpiScaling, True)
        QApplication.setAttribute(Qt.AA_UseHighDpiPixmaps, True)

    app = QApplication(sys.argv)
    app.setApplicationName("RepTate")

    CmdBase.mode = CmdMode.GUI
    tmpex = QApplicationManager(loglevel=loglevel)

    # 1. Find if all argument files have the same extension
    if len(dictfiles) > 1 or len(dictfiles) == 0:
        tmpex.logger.error(
            "Universal Viewer must be invoked with at least one file!")
        sys.exit()
    # 2. Find if in the folder of the first file there is an ini file that describes that extension
    inifile = None
    inifilepath = None
    nplots_max = 1
    pathtofirstfile = os.path.dirname(list(dictfiles.values())[0][0])
    for file in os.listdir(pathtofirstfile):
        if file.endswith(".ini"):
            config = configparser.ConfigParser()
            config.read_file(open(pathtofirstfile + os.sep + file))
            ext = config.get("file1", "extension").split(".")[1]
            if ext in dictfiles.keys():
                inifile = file
                inifilepath = pathtofirstfile
                nplot_max = config.getint("application", "ncharts")
                break
    # 3. If not, show an error message and exit
    if inifile == None:
        tmpex.logger.error(
            "INI file describing the data not found in the first file folder")
        sys.exit()

    ex = ApplicationUniversalViewer(
        "UniversalViewer",
        tmpex,
        inifile=inifilepath + os.sep + inifile,
        nplot_max=nplot_max,
    )
    ex.setWindowIcon(QIcon("RepTate/gui/Images/UView_Icon.ico"))
    ex.setWindowTitle("RepTate %s %s - Universal Viewer - INI: %s" %
                      (tmpex.version, tmpex.date, inifile))
    shortcut = QShortcut(QKeySequence("Ctrl+Q"), ex)
    shortcut.activated.connect(app.quit)

    # Handle files & open apps accordingly
    CmdBase.calcmode = (
        CalcMode.singlethread
    )  # avoid troubles when loading multiple apps/files/theories
    for k in dictfiles.keys():
        ex.new_tables_from_files(dictfiles[k])
    if args.theory in list(ex.theories.keys()):
        ex.datasets["Set1"].new_theory(args.theory)
    if args.tool in (list(ex.availabletools.keys()) +
                     list(ex.extratools.keys())):
        ex.new_tool(args.tool)
        ex.update_all_ds_plots()
        ex.showDataInspector(True)
    # set the calmode back
    if args.single:
        CmdBase.calcmode = CalcMode.singlethread
    else:
        CmdBase.calcmode = CalcMode.multithread

    ex.showMaximized()
    sys.exit(app.exec_())