#!/usr/bin/python -B # -*- coding: utf-8 -*- #--------------------------------------------------------------------------------# # This file is part of PALM. # # PALM is free software: you can redistribute it and/or modify it under the terms # of the GNU General Public License as published by the Free Software Foundation, # either version 3 of the License, or (at your option) any later version. # # PALM is distributed in the hope that it will be useful, but WITHOUT ANY # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR # A PARTICULAR PURPOSE. See the GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along with # PALM. If not, see . # # Copyright 1997-2017 Leibniz Universitaet Hannover #--------------------------------------------------------------------------------# # # Current revisions: # ----------------- # # # Former revisions: # ----------------- # $Id: mrungui.py 2316 2017-07-20 07:53:42Z schwenkel $ # Initial revision in python # # # # Description: # ------------ # Graphical user interface for the mrun script. # @author Felix Gaschler # @author Björn Maronga (maronga@muk.uni-hannover.de) # # Instructions: # ------------- # #------------------------------------------------------------------------------! import sys import subprocess from PyQt4 import QtCore, QtGui, uic from PyQt4.QtCore import QProcess from time import strftime import os # Determine PALM directories try: devnull = open(os.devnull, 'w') out = subprocess.check_output("echo $PALM_BIN", shell=True, stderr=subprocess.STDOUT) palm_bin = out.rstrip() palm_dir = out.split("palm")[0] + "palm/" + out.split("palm")[1].split("/")[1] out = None except: print "Error. $PALM_BIN is not set." raise SystemExit mrunline = "" name_of_file = os.path.basename(__file__) mrungui_path = os.path.realpath(__file__) version_path = mrungui_path[:len(mrungui_path)-14-len(name_of_file)-1] Ui_MainWindow = uic.loadUiType("%s/mrungui_files/mainwindow.ui" % (palm_bin))[0] Ui_helpDialog = uic.loadUiType("%s/mrungui_files/help.ui" % (palm_bin))[0] Ui_aboutDialog = uic.loadUiType("%s/mrungui_files/about.ui" % (palm_bin))[0] class HelpDialog(QtGui.QDialog,Ui_helpDialog): def __init__(self, parent=None): super(HelpDialog,self).__init__() self.setupUi(self) class AboutDialog(QtGui.QDialog,Ui_aboutDialog): def __init__(self, parent=None): super(AboutDialog,self).__init__() self.setupUi(self) class Mainwindow(QtGui.QMainWindow, Ui_MainWindow): def __init__(self, parent=None): super(Mainwindow, self).__init__() self.setupUi(self) self.recent_jobs(10) commandline = self.groupBox.findChild(QtGui.QLineEdit,"commandline") commandline.setText("") self.tabWidget.setCurrentIndex(0) filename = "%s/.mrun.gui.default" % (version_path) if os.path.exists(filename): pass else: return file = open(filename, "r") if ( file is not None ): # File opened successfully mrunline = file.readline() #if neue zeile zeichen mrunline = mrunline[:len(mrunline)-1] file.close() # In case a mrunline was found, load it to mainwindow if ( mrunline != ""): mrunline = mrunline[17:] commandline.setText(mrunline) self.setup_gui(mrunline) # starts xterm with mrun commandline ####################################### def startmrun(self): mrunline = str(self.groupBox.findChild(QtGui.QLineEdit,"commandline").text()) userline = str(self.group_advanced.findChild(QtGui.QLineEdit,"line_user").text()) # Check for empty line mrunline_save = mrunline; if (userline != ""): mrunline = "%s %s" % (mrunline,userline) history_line = mrunline # Disable the main window self.tabWidget.setEnabled(False) self.groupBox.findChild(QtGui.QPushButton,"button_start").setEnabled(False) self.groupBox.findChild(QtGui.QPushButton,"button_start").setText("wait...") self.groupBox.findChild(QtGui.QLineEdit,"commandline").setText("Executing mrun in xterm...") # Wait until all commands have been executed (ugly) ? #for i in range(0,21): # qApp->processEvents() # Start xterm as QProcess mrun = QProcess() mrun.setProcessChannelMode(QProcess.MergedChannels) # mergedChannels mrun.setWorkingDirectory(version_path) geomet = self.frameGeometry() posx = geomet.x()+geomet.width() posy = geomet.y() s = " -title \"Executing mrun...\" -fa \"Monospace\" -fs 11 -geometry \"80x38+%d+%d\" -e \"" % (posx,posy) mrunline = "%s%s;echo -n '--> Press enter to continue...';read yesno\"=0 and count<10: timestamp = history[i][:16] listitem = history[i][17:len(history[i])-1] listitem = filter(None,listitem.split(" -d"))[1] listitem = filter(None,listitem.split(" -"))[0] listitem = listitem.replace(" ",""); matchitems = list_jobname.findItems(listitem, QtCore.Qt.MatchExactly) if ( len(matchitems) == 0 ): list_jobname.addItem(listitem); s = "%s (%s)" % (listitem,timestamp) tmphistory.append(s); count = count +1 j = j+1 if ( j == number ): break i = i-1 # Send to list list_jobname.clear(); i=0 while i=1: listitem = history[i-1][17:len(history[i-1])-1] listitem = filter(None,listitem.split(" -d"))[1] listitem = filter(None,listitem.split(" -"))[0] listitem = listitem.replace(" ",""); # Select command line with correct timestamp and jobname if (history[i-1][:16] == timestamp and listitem == jobname): mrunline = history[i-1] mrunline = mrunline[17:] mrunline = mrunline[:len(mrunline)-1] self.groupBox.findChild(QtGui.QLineEdit,"commandline").setText(mrunline); self.setup_gui(mrunline); return i = i-1 # Change run identifer (initial, restart, coupled...) ###################################################### def change_rc_list(self): drop_job = self.group_job.findChild(QtGui.QComboBox,"drop_job").currentText() self.change_commandline("r","") # Enable PE distribution for atmosphere/ocean if ( drop_job == "Restart run (coupled atmosphere ocean)" or drop_job == "Initial run (coupled atmosphere ocean)"): drop_atmos = self.group_execution.findChild(QtGui.QLineEdit,"line_PE_atmos").text() drop_ocean = self.group_execution.findChild(QtGui.QLineEdit,"line_PE_ocean").text() s = "%s %s" % (drop_atmos,drop_ocean) self.change_commandline("Y",s) if ( drop_job == "Restart run" or drop_job == "Restart run (coupled atmosphere ocean)"): self.change_commandline("d","") # Check of ocean runs else: self.delete_commandline("Y") if (drop_job == "Precursor run (ocean)"): self.activate_flag("y") else: self.deactivate_flag("y") # changes commandline depending on parameters ########################################################## def change_commandline(self, id_str, fwt_str): fwt_str = str(fwt_str) initialize = False mrunline = str(self.groupBox.findChild(QtGui.QLineEdit,"commandline").text()) s = " -%s " % (id_str) splitline = filter(None,mrunline.split(s)) if ( len(splitline) == 0 ): splitline.append("mrun") splitline.append(" ") initialize = True elif ( len(splitline) == 1 ): splitline.append(" ") param = splitline[1].split("-") # Change in parameter "d" (jobname) if (id_str == "d"): filename = str(self.group_job.findChild(QtGui.QLineEdit,"line_jobname").text()) s = filename.split("JOBS/") param[0] = s[len(s)-1] if ( initialize == True ):#and self.group_runcontrol.isEnabled() == True ): self.group_runcontrol.setEnabled(True) self.group_execution.setEnabled(True) self.group_job.findChild(QtGui.QComboBox,"drop_job").setEnabled(True) self.group_advanced.setEnabled(True) self.groupBox.findChild(QtGui.QPushButton,"button_start").setEnabled(True) self.menuBar.findChild(QtGui.QMenu,"menuStart").actions()[3].setEnabled(True) elif ( param[0] == ""): self.group_runcontrol.setEnabled(False) self.group_execution.setEnabled(False) self.group_job.findChild(QtGui.QComboBox,"drop_job").setEnabled(False) self.groupBox.findChild(QtGui.QPushButton,"button_start").setEnabled(False) self.menuBar.findChild(QtGui.QMenu,"menuStart").actions()[3].setEnabled(False) self.group_advanced.setEnabled(False) self.delete_commandline("d") self.change_commandline("r","remove") self.group_job.findChild(QtGui.QLabel,"label_usercode").setText("") return 1 else: # Check if user code is available usercode = "%s/USER_CODE/%s" % (version_path,param[0]) if (os.path.exists(usercode) is True): self.group_job.findChild(QtGui.QLabel,"label_usercode").setText("User code found.") else: self.group_job.findChild(QtGui.QLabel,"label_usercode").setText("Warning: no user code found!") # Check if _pdf file is available, otherwise notice user drop_job = self.group_job.findChild(QtGui.QComboBox,"drop_job").currentText() if ( self.group_execution.findChild(QtGui.QCheckBox,"check_restarts").checkState() == 2 or drop_job == "Restart run" or drop_job == "Restart run (coupled atmosphere ocean)" ): jobname = self.group_job.findChild(QtGui.QLineEdit, "line_jobname").text() restartfile = "%s/JOBS/%s/INPUT/%s_p3df" % (version_path,jobname,jobname) if (os.path.exists(restartfile) == True): self.group_execution.findChild(QtGui.QLabel,"label_restart").setText("") if ( drop_job == "Restart run (coupled atmosphere ocean)" ): restartfileo = "%s/JOBS/%s/INPUT/%s_p3dof" % (version_path,jobname,jobname) if (os.path.exists(restartfileo) == True): self.group_execution.findChild(QtGui.QLabel,"label_restart").setText("hooo") else: self.group_execution.findChild(QtGui.QLabel,"label_restart").setText("Warning: No p3dof file found!") else: self.group_execution.findChild(QtGui.QLabel,"label_restart").setText("Warning: No p3df file found!") self.group_runcontrol.setEnabled(True) self.group_execution.setEnabled(True) self.drop_job.setEnabled(True) self.group_advanced.setEnabled(True) if ( self.group_advanced.findChild(QtGui.QLineEdit,"line_i").text() != "" or self.group_advanced.findChild(QtGui.QLineEdit,"line_o").text() != "" ): change_commandline("r","remove") self.group_runcontrol.setEnabled(False) # Change in parameter "r" (run control list) elif (id_str == "r"): status_ts = self.group_runcontrol.findChild(QtGui.QCheckBox,"check_ts").checkState() status_pr = self.group_runcontrol.findChild(QtGui.QCheckBox,"check_pr").checkState() status_xy = self.group_runcontrol.findChild(QtGui.QCheckBox,"check_xy").checkState() status_xz = self.group_runcontrol.findChild(QtGui.QCheckBox,"check_xz").checkState() status_yz = self.group_runcontrol.findChild(QtGui.QCheckBox,"check_yz").checkState() status_3d = self.group_runcontrol.findChild(QtGui.QCheckBox,"check_3d").checkState() status_ma = self.group_runcontrol.findChild(QtGui.QCheckBox,"check_ma").checkState() status_sp = self.group_runcontrol.findChild(QtGui.QCheckBox,"check_sp").checkState() status_pts = self.group_runcontrol.findChild(QtGui.QCheckBox,"check_pts").checkState() status_prt = self.group_runcontrol.findChild(QtGui.QCheckBox,"check_prt").checkState() drop_job = self.group_job.findChild(QtGui.QComboBox,"drop_job").currentText() rc_flag = "#" if (drop_job == "Initial run"): rc_flag = "#" elif (drop_job == "Restart run"): rc_flag = "f" elif (drop_job == "Precursor run (atmosphere)"): rc_flag = "#" elif (drop_job == "Precursor run (ocean)"): rc_flag = "o#" elif (drop_job == "Initial run (coupled atmosphere ocean)"): rc_flag = "#" elif (drop_job == "Restart run (coupled atmosphere ocean)"): rc_flag = "f" param[0] = "\"d3%s" % (rc_flag) if (status_ts == 2): param[0] = "%s ts%s" % (param[0],rc_flag) if (status_pr == 2): param[0] = "%s pr%s" % (param[0],rc_flag) if (status_xy == 2): param[0] = "%s xy%s" % (param[0],rc_flag) if (status_xz == 2): param[0] = "%s xz%s" % (param[0],rc_flag) if (status_yz == 2): param[0] = "%s yz%s" % (param[0],rc_flag) if (status_3d == 2): param[0] = "%s 3d%s" % (param[0],rc_flag) if (status_ma == 2): param[0] = "%s ma%s" % (param[0],rc_flag) if (status_sp == 2): param[0] = "%s sp%s" % (param[0],rc_flag) if (status_prt == 2): param[0] = "%s prt%s" % (param[0],rc_flag) if (status_pts == 2): param[0] = "%s pts%s" % (param[0],rc_flag) if (drop_job == "Restart run (coupled atmosphere ocean)" or drop_job == "Initial run (coupled atmosphere ocean)"): if (rc_flag == "#"): rc_flag = "o#" else: rc_flag = "of" param[0] = "%s d3%s" % (param[0],rc_flag) if (status_ts == 2): param[0] = "%s ts%s" % (param[0],rc_flag) if (status_pr == 2): param[0] = "%s pr%s" % (param[0],rc_flag) if (status_xy == 2): param[0] = "%s xy%s" % (param[0],rc_flag) if (status_xz == 2): param[0] = "%s xz%s" % (param[0],rc_flag) if (status_yz == 2): param[0] = "%s yz%s" % (param[0],rc_flag) if (status_3d == 2): param[0] = "%s 3d%s" % (param[0],rc_flag) if (status_ma == 2): param[0] = "%s ma%s" % (param[0],rc_flag) if (status_sp == 2): param[0] = "%s sp%s" % (param[0],rc_flag) if (status_prt == 2): param[0] = "%s prt%s" % (param[0],rc_flag) if (status_pts == 2): param[0] = "%s pts%s" % (param[0],rc_flag) status_restarts = self.group_execution.findChild(QtGui.QCheckBox,"check_restarts").checkState() if (status_restarts == 2): param[0]="%s restart" % (param[0]) # Check if _p3df file is available, otherwise notice user if (status_restarts == 2): jobname = str(self.group_job.findChild(QtGui.QLineEdit, "line_jobname").text())[len(version_path)+len("/JOBS/"):] restartfile = "%s/JOBS/%s/INPUT/%s_p3df" % (version_path,jobname,jobname) if (os.path.exists(restartfile) == True): self.group_execution.findChild(QtGui.QLabel,"label_restart").setText("") else: self.group_execution.findChild(QtGui.QLabel,"label_restart").setText("Warning: No p3df file found!") else: self.group_execution.findChild(QtGui.QLabel,"label_restart").setText("") status_cycfill = self.group_execution.findChild(QtGui.QCheckBox,"check_cycfill").checkState() if (status_cycfill == 2): param[0]="%s cycfill" % (param[0]) param[0]="%s\"" % (param[0]) if ( fwt_str == "remove"): self.delete_commandline(id_str) return 1 else: self.button_start.setEnabled(True) self.action_save.setEnabled(True) # Change in any other parameter else: if ( fwt_str != ""): param[0] = "\"%s\"" % (fwt_str) else: self.delete_commandline(id_str) return 1 # Join the new mrunline splitline[1]= " -".join(param) s = " -%s " % (id_str) newmrunline = s.join(splitline) # Pr the new mrunline to mainwindow newmrunline = newmrunline.replace(" "," ") self.groupBox.findChild(QtGui.QLineEdit,"commandline").setText(newmrunline) # change lineinput depending on sender ################################################################################### def change_lineinput(self): if ( self.sender() == self.group_execution.findChild(QtGui.QLineEdit, "line_host") ): tmptext = self.group_execution.findChild(QtGui.QLineEdit,"line_host").text() self.change_commandline("h",tmptext) elif ( self.sender() == self.group_job.findChild(QtGui.QLineEdit, "line_jobname") ): tmptext = self.group_job.findChild(QtGui.QLineEdit,"line_jobname").text() self.change_commandline("d",tmptext) elif ( self.sender() == self.group_execution.findChild(QtGui.QLineEdit,"line_q")): tmptext = self.group_execution.findChild(QtGui.QLineEdit,"line_q").text() self.change_commandline("q",tmptext) elif ( self.sender() == self.group_execution.findChild(QtGui.QLineEdit,"line_account")): tmptext = self.group_execution.findChild(QtGui.QLineEdit,"line_account").text() self.change_commandline("u",tmptext) elif ( self.sender() == self.group_execution.findChild(QtGui.QLineEdit,"line_pe")): tmptext = self.group_execution.findChild(QtGui.QLineEdit,"line_pe").text() self.change_commandline("X",tmptext) elif ( self.sender() == self.group_execution.findChild(QtGui.QLineEdit,"line_tpn")): tmptext = self.group_execution.findChild(QtGui.QLineEdit,"line_tpn").text() self.change_commandline("T",tmptext) elif ( self.sender() == self.group_execution.findChild(QtGui.QLineEdit,"line_branch")): tmptext = self.group_execution.findChild(QtGui.QLineEdit,"line_branch").text() self.change_commandline("K",tmptext) elif ( self.sender() == self.group_execution.findChild(QtGui.QLineEdit,"line_time")): tmptext = self.group_execution.findChild(QtGui.QLineEdit,"line_time").text() self.change_commandline("t",tmptext) elif ( self.sender() == self.group_advanced.findChild(QtGui.QLineEdit,"line_M")): tmptext = self.group_advanced.findChild(QtGui.QLineEdit,"line_M").text() self.change_commandline("M",tmptext) elif ( self.sender() == self.group_advanced.findChild(QtGui.QLineEdit,"line_m")): tmptext = self.group_advanced.findChild(QtGui.QLineEdit,"line_m").text() self.change_commandline("m",tmptext) elif ( self.sender() == self.group_advanced.findChild(QtGui.QLineEdit,"line_a")): tmptext = self.group_advanced.findChild(QtGui.QLineEdit,"line_a").text() self.change_commandline("a",tmptext) elif ( self.sender() == self.group_advanced.findChild(QtGui.QLineEdit,"line_D")): tmptext = self.group_advanced.findChild(QtGui.QLineEdit,"line_D").text() self.change_commandline("D",tmptext) elif ( self.sender() == self.group_advanced.findChild(QtGui.QLineEdit,"line_c")): tmptext = self.group_advanced.findChild(QtGui.QLineEdit,"line_c").text() if ( tmptext == ".mrun.config"): tmptext = "" self.change_commandline("c",tmptext) elif ( self.sender() == self.group_advanced.findChild(QtGui.QLineEdit,"line_p")): tmptext = self.group_advanced.findChild(QtGui.QLineEdit,"line_p").text() self.change_commandline("p",tmptext) elif ( self.sender() == self.group_advanced.findChild(QtGui.QLineEdit,"line_s")): tmptext = self.group_advanced.findChild(QtGui.QLineEdit,"line_s").text() self.change_commandline("s",tmptext) elif ( self.sender() == self.group_advanced.findChild(QtGui.QLineEdit,"line_i")): cmd = self.groupBox.findChild(QtGui.QLineEdit,"commandline").text() tmptext = self.group_advanced.findChild(QtGui.QLineEdit,"line_i").text() if ( tmptext != ""): self.change_commandline("r","remove") cmd = self.groupBox.findChild(QtGui.QLineEdit,"commandline").text() self.group_runcontrol.setEnabled(False) self.button_start.setEnabled(True) self.action_save.setEnabled(True) elif (self.group_advanced.findChild(QtGui.QLineEdit,"line_o").text() == "" ): self.group_runcontrol.setEnabled(True) self.change_commandline("r","") self.change_commandline("i",tmptext) elif ( self.sender() == self.group_advanced.findChild(QtGui.QLineEdit,"line_o")): tmptext = self.group_advanced.findChild(QtGui.QLineEdit,"line_o").text() if ( tmptext != ""): self.change_commandline("r","remove") self.button_start.setEnabled(True) self.action_save.setEnabled(True) self.group_runcontrol.setEnabled(False) elif (self.group_advanced.findChild(QtGui.QLineEdit,"line_i").text() == "" ): self.group_runcontrol.setEnabled(True) self.change_commandline("r","") cmd = self.groupBox.findChild(QtGui.QLineEdit,"commandline").text() self.change_commandline("o",tmptext) elif ( self.sender() == self.group_advanced.findChild(QtGui.QLineEdit,"line_w")): tmptext = self.group_advanced.findChild(QtGui.QLineEdit,"line_w").text() self.change_commandline("w",tmptext) elif ( self.sender() == self.group_execution.findChild(QtGui.QLineEdit,"line_PE_atmos") or self.sender() == self.group_execution.findChild(QtGui.QLineEdit,"line_PE_ocean")): t1 = self.group_execution.findChild(QtGui.QLineEdit,"line_PE_atmos").text() t2 = self.group_execution.findChild(QtGui.QLineEdit,"line_PE_ocean").text() tmptext = "%s %s" % (t1,t2) self.change_commandline("Y",tmptext) # try catch sowas in der art pe1 = 0 pe2 = 0 try: pe1 = int(t1) except ValueError: pass try: pe2 = int(t2) except ValueError: pass PE_total = pe1+pe2 self.group_execution.findChild(QtGui.QLineEdit,"line_pe").setText(str(PE_total)) self.change_commandline("X",str(PE_total)) elif ( self.sender() == self.group_advanced.findChild(QtGui.QComboBox,"combo_n")): tmptext = self.group_advanced.findChild(QtGui.QComboBox,"combo_n").currentText() if ( tmptext == "default"): tmptext = "" self.change_commandline("n",tmptext) # deletes parameter from commandline ##################################################################################### def delete_commandline(self, id_str): # Read mrunline commandline = self.groupBox.findChild(QtGui.QLineEdit,"commandline") mrunline = str(commandline.text()) s = " -%s" % (id_str) splitline = filter(None,mrunline.split(s)) if ( len(splitline) == 1): return 1 else: param = splitline[1].split("-") param[0] = "" splitline[1]= " -".join(param) newmrunline = "".join(splitline) newmrunline = newmrunline.replace(" "," ") # Print new mrunline to screen commandline.setText(newmrunline) # controls flags ################################################################################### def check_flags(self): status = self.group_execution.findChild(QtGui.QCheckBox,"check_delete_tmp_files" ).checkState() if (status == 2): self.activate_flag("B") else: self.deactivate_flag("B") status = self.group_execution.findChild(QtGui.QCheckBox,"check_verbose" ).checkState() if (status == 2): self.activate_flag("v") else: self.deactivate_flag("v") status = self.group_advanced.findChild(QtGui.QCheckBox,"check_A" ).checkState() if (status == 2): self.activate_flag("A") else: self.deactivate_flag("A") status = self.group_advanced.findChild(QtGui.QCheckBox,"check_b" ).checkState() if (status == 2): self.activate_flag("b") else: self.deactivate_flag("b") status = self.group_advanced.findChild(QtGui.QCheckBox,"check_F" ).checkState() if (status == 2): self.activate_flag("F") else: self.deactivate_flag("F") status = self.group_advanced.findChild(QtGui.QCheckBox,"check_I" ).checkState() if (status == 2): self.activate_flag("I") else: self.deactivate_flag("I") status = self.group_advanced.findChild(QtGui.QCheckBox,"check_k" ).checkState() if (status == 2): self.activate_flag("k") else: self.deactivate_flag("k") status = self.group_advanced.findChild(QtGui.QCheckBox,"check_O" ).checkState() if (status == 2): self.activate_flag("O") else: self.deactivate_flag("O") status = self.group_advanced.findChild(QtGui.QCheckBox,"check_S" ).checkState() if (status == 2): self.activate_flag("S") else: self.deactivate_flag("S") status = self.group_advanced.findChild(QtGui.QCheckBox,"check_x" ).checkState() if (status == 2): self.activate_flag("x") else: self.deactivate_flag("x") status = self.group_advanced.findChild(QtGui.QCheckBox,"check_Z" ).checkState() if (status == 2): self.activate_flag("Z") else: self.deactivate_flag("Z") # changes flag to parameter ################################################################################## def activate_flag(self, id_str): commandline = self.groupBox.findChild(QtGui.QLineEdit,"commandline") mrunline = str(commandline.text()) s = " -%s" % (id_str) splitline = filter(None,mrunline.split(s)) if ( len(splitline) == 1): splitline.append("") s = " -%s" % (id_str) newmrunline = s.join(splitline) newmrunline = newmrunline.replace(" "," ") commandline.setText(newmrunline) # deletes flag in commandline #################################################################################### def deactivate_flag(self, id_str): commandline = self.groupBox.findChild(QtGui.QLineEdit,"commandline") mrunline = str(commandline.text()) s = " -%s" % (id_str) splitline = filter(None,mrunline.split(s)) newmrunline = "".join(splitline) newmrunline = newmrunline.replace(" "," ") commandline.setText(newmrunline) # Clears window ################################################################################# def reset_window(self): self.setupUi(self) self.tabWidget.setCurrentIndex(0) self.recent_jobs(10) # Safes current commandline and user Parameters to .sav file ################################################################################# def save_to_file(self): user_string = self.group_advanced.findChild(QtGui.QLineEdit,"line_user").text() cmd_string = self.groupBox.findChild(QtGui.QLineEdit,"commandline").text() string_to_file = cmd_string if (user_string != ""): string_to_file = "%s%s" % (string_to_file,user_string) #filename = QtGui.QInputDialog.getText(self, "Save File naming Dialog", "Insert filename", QtGui.QLineEdit.Normal) filename = str(QtGui.QFileDialog.getSaveFileName(self, "Save File","filename.sav")) extension = ".sav" filename = "%s%s" % (filename, "") tmstamp = strftime("%Y/%m/%d %H:%M") file = open(filename,"w") s = "%s %s" % (tmstamp, string_to_file) file.write(s) file.close() # Safes current commandline and user parameters to default file ################################################################################ def save_default(self): user_string = self.group_advanced.findChild(QtGui.QLineEdit,"line_user").text() cmd_string = self.groupBox.findChild(QtGui.QLineEdit,"commandline").text() string_to_file = cmd_string if (user_string != ""): string_to_file = "%s%s" % (string_to_file,user_string) filename ="%s/.mrun.gui.default" % (version_path) tmstamp = strftime("%Y/%m/%d %H:%M") file = open(filename,"w") s = "%s %s" % (tmstamp, string_to_file) file.write(s) file.close() # Execute command which starts jobmanager (start palm_jm) ####################################################### def start_jobmanager(self): subprocess.Popen(["nohup","palm_jm",">>","/dev/null", "2>&1","&"]) # Executes command which starts watchdog (start palm_wd) ######################################################## def start_watchdog(self): subprocess.Popen(["nohup","palm_wd",">>","/dev/null", "2>&1","&"]) # Opens "help" dialog ################################# def help(self): dialog = HelpDialog() dialog.exec_() # Opens "about" dialog ################################## def about_gui(self): dialog = AboutDialog() dialog.exec_() # commandline to buttons etc ############################## def setup_gui(self, mrun_str): # Some initial settings user = "" coupled_run = False ocean_run = False nojob = False rc_manual = False #Split parameters in mrunline splitline = mrun_str.split(" -") if ( splitline[0] != "mrun"): return 1 else: self.group_job.setEnabled(True) # Loop for all parameters in mrunline i = len(splitline)-1 while i >= 1: # Determine parameter splitparameter = splitline[i].split(" ") parameter = splitparameter[0] splitparameter.pop(0) options = " ".join(splitparameter) options = options.replace("\"","") # Check for suitable switch if ( parameter == "d"): if ( options != ""): self.group_job.findChild(QtGui.QLineEdit,"line_jobname").setText(options) nojob = False else: nojob = True elif ( parameter == "h"): self.group_execution.findChild(QtGui.QLineEdit,"line_host").setText(options) elif ( parameter == "q"): self.group_execution.findChild(QtGui.QLineEdit,"line_q").setText(options) elif ( parameter == "K"): self.group_execution.findChild(QtGui.QLineEdit,"line_branch").setText(options) elif ( parameter == "u"): self.group_execution.findChild(QtGui.QLineEdit,"line_account").setText(options) elif ( parameter == "X"): self.group_execution.findChild(QtGui.QLineEdit,"line_pe").setText(options) elif ( parameter == "T"): self.group_execution.findChild(QtGui.QLineEdit,"line_tpn").setText(options) elif ( parameter == "t"): self.group_execution.findChild(QtGui.QLineEdit,"line_time").setText(options) elif ( parameter == "B"): self.group_execution.findChild(QtGui.QCheckBox,"check_delete_tmp_files").setChecked(True) elif ( parameter == "v"): self.group_execution.findChild(QtGui.QCheckBox,"check_verbose").setChecked(True) elif ( parameter == "A"): self.group_advanced.findChild(QtGui.QCheckBox,"check_A").setChecked(True) elif ( parameter == "b"): self.group_advanced.findChild(QtGui.QCheckBox,"check_b").setChecked(True) elif ( parameter == "F"): self.group_advanced.findChild(QtGui.QCheckBox,"check_F").setChecked(True) elif ( parameter == "I"): self.group_advanced.findChild(QtGui.QCheckBox,"check_I").setChecked(True) elif ( parameter == "k"): self.group_advanced.findChild(QtGui.QCheckBox,"check_k").setChecked(True) elif ( parameter == "O"): self.group_advanced.findChild(QtGui.QCheckBox,"check_O").setChecked(True) elif ( parameter == "S"): self.group_advanced.findChild(QtGui.QCheckBox,"check_S").setChecked(True) elif ( parameter == "x"): self.group_advanced.findChild(QtGui.QCheckBox,"check_x").setChecked(True) elif ( parameter == "Z"): self.group_advanced.findChild(QtGui.QCheckBox,"check_Z").setChecked(True) elif ( parameter == "m"): self.group_advanced.findChild(QtGui.QLineEdit,"line_m").setText(options) elif ( parameter == "M"): self.group_advanced.findChild(QtGui.QLineEdit,"line_M").setText(options) elif ( parameter == "a"): self.group_advanced.findChild(QtGui.QLineEdit,"line_a").setText(options) elif ( parameter == "D"): self.group_advanced.findChild(QtGui.QLineEdit,"line_D").setText(options) elif ( parameter == "c"): self.group_advanced.findChild(QtGui.QLineEdit,"line_c").setText(options) elif ( parameter == "p"): self.group_advanced.findChild(QtGui.QLineEdit,"line_p").setText(options) elif ( parameter == "s"): self.group_advanced.findChild(QtGui.QLineEdit,"line_s").setText(options) elif ( parameter == "i"): self.group_advanced.findChild(QtGui.QLineEdit,"line_i").setText(options) rc_manual = True elif ( parameter == "o"): self.group_advanced.findChild(QtGui.QLineEdit,"line_o").setText(options) rc_manual = True elif ( parameter == "w"): self.group_advanced.findChild(QtGui.QLineEdit,"line_w").setText(options) # Determine settings for coupled restart runs elif ( parameter == "Y"): optionssplit = options.split(" ") group_coupled = self.group_execution.findChild(QtGui.QGroupBox,"group_coupled") group_coupled.findChild(QtGui.QLineEdit,"line_PE_atmos").setEnabled(True) group_coupled.findChild(QtGui.QLineEdit,"line_PE_ocean").setEnabled(True) group_coupled.findChild(QtGui.QLabel,"label_coupled1").setEnabled(True) group_coupled.findChild(QtGui.QLabel,"label_coupled2").setEnabled(True) group_coupled.findChild(QtGui.QLabel,"label_coupled3").setEnabled(True) group_coupled.findChild(QtGui.QLabel,"label_coupling").setEnabled(True) if (optionssplit.count() == 2): group_coupled.findChild(QtGui.QLineEdit,"line_PE_atmos").setEnabled(optionssplit[0]) group_coupled.findChild(QtGui.QLineEdit,"line_PE_ocean").setEnabled(optionssplit[1]) else: group_coupled.findChild(QtGui.QLineEdit,"line_PE_atmos").setText("") group_coupled.findChild(QtGui.QLineEdit,"line_PE_ocean").setText("") coupled_run = True elif ( parameter == "n"): if ( options == "shared"): self.group_advanced.findChild(QtGui.QComboBox,"combo_n").setCurrentIndex(1) elif ( options == "non_shared"): self.group_advanced.findChild(QtGui.QComboBox,"combo_n").setCurrentIndex(2) else: self.group_advanced.findChild(QtGui.QComboBox,"combo_n").setCurrentIndex(0) elif ( parameter == "y"): self.group_job.findChild(QtGui.QComboBox, "drop_job").setCurrentIndex(3) # Determine settings for the run control list elif ( parameter == "r"): optionssplit = options.split(" ") options_2 = None options_all = None j = 0 while j < len(optionssplit): options_all = optionssplit[j] options_2 = optionssplit[j][:2] if (options_2 == "ts"): self.group_runcontrol.findChild(QtGui.QCheckBox,"check_ts").setChecked(True) if (options_2 == "pr" and options_all[:3] is not "prt"): self.group_runcontrol.findChild(QtGui.QCheckBox,"check_pr").setChecked(True) if (options_2 == "xy"): self.group_runcontrol.findChild(QtGui.QCheckBox,"check_xy").setChecked(True) if (options_2 == "xz"): self.group_runcontrol.findChild(QtGui.QCheckBox,"check_xz").setChecked(True) if (options_2 == "yz"): self.group_runcontrol.findChild(QtGui.QCheckBox,"check_yz").setChecked(True) if (options_2 == "3d"): self.group_runcontrol.findChild(QtGui.QCheckBox,"check_3d").setChecked(True) if (options_2 == "ma"): self.group_runcontrol.findChild(QtGui.QCheckBox,"check_ma").setChecked(True) if (options_2 == "sp"): self.group_runcontrol.findChild(QtGui.QCheckBox,"check_sp").setChecked(True) if (options_all[:3] == "prt"): self.group_runcontrol.findChild(QtGui.QCheckBox,"check_prt").setChecked(True) if (options_all[:3] == "pts"): self.group_runcontrol.findChild(QtGui.QCheckBox,"check_pts").setChecked(True) if (options_2 == "d3"): if (options_all[:3][:-1] == "#"): self.group_job.findChild(QtGui.QComboBox, "drop_job").setCurrentIndex(0) elif (options_all[:3][:-1] == "f"): self.group_job.findChild(QtGui.QComboBox, "drop_job").setCurrentIndex(1) elif (options_all[:3][:-1] == "o"): ocean_run = True if (options_all == "restart"): self.group_execution.findChild(QtGui.QCheckBox,"check_restarts").setChecked(True) # Check if _pdf file is available, otherwise notice user jobname = str(self.group_job.findChild(QtGui.QLineEdit,"line_jobname").text())[len(version_path)+len("/JOBS/"):] restartfile = "%sJOBS/%s/INPUT/%s_p3df" % (version_path,jobname,jobname) if (os.path.exists(restartfile) == True): self.group_execution.findChild(QtGui.QLabel,"label_restart").setText("") else: self.group_execution.findChild(QtGui.QLabel,"label_restart").setText("Warning: No p3df file \found!") j = j+1 # All unknown parameters are set as extra user parameters else: user = "%s-%s \"%s\" " % (user,parameter,options) splitline.removeAt(i) i = i-1 # Change drop box state in case of ocean precursor or coupled restart runs if ( ocean_run == True ): if ( coupled_run == True ): self.group_job.findChild(QtGui.QComboBox, "drop_job").setCurrentIndex(4) else: self.group_job.findChild(QtGui.QComboBox, "drop_job").setCurrentIndex(3) if ( user != ""): self.group_advanced.findChild(QtGui.QLineEdit,"line_user").setText(user) # Join mrunline and post it to mainwindow mrunline = " -".join(splitline) self.groupBox.findChild(QtGui.QLineEdit,"commandline").setText(mrunline) # Disable mainwindow if no job was found, otherwise enable if ( nojob == True ): self.group_execution.setEnabled(False) self.group_runcontrol.setEnabled(False) self.groupBox.findChild(QtGui.QPushButton,"button_start").setEnabled(False) self.menuBar.findChild(QtGui.QMenu,"menuStart").actions()[3].setEnabled(False) self.group_job.findChild(QtGui.QComboBox, "drop_job").setEnabled(False) self.group_advanced.setEnabled(False) self.check_advanced.setEnabled(False) else: self.group_execution.setEnabled(True) self.group_runcontrol.setEnabled(True) self.groupBox.findChild(QtGui.QPushButton,"button_start").setEnabled(True) self.menuBar.findChild(QtGui.QMenu,"menuStart").actions()[3].setEnabled(True) self.group_job.findChild(QtGui.QComboBox, "drop_job").setEnabled(True) self.group_advanced.setEnabled(True) # Disable run control box, if manual settings of -i and -o are used if ( rc_manual == True ): self.group_runcontrol.setEnabled(False) change_commandline("r","remove") self.groupBox.findChild(QtGui.QPushButton,"button_start").setEnabled(True) self.menuBar.findChild(QtGui.QMenu,"menuStart").actions()[3].setEnabled(True) # open saved commandline ################################## def open_from_file(self): # Select filename and open it filename = QtGui.QFileDialog.getOpenFileName(self, "Open File","Save files (*.sav)") if ( filename != ""): file = open(filename, "r") if ( file is not None ): # File opened successfully mrunline = file.read() file.close() # In case a mrunline was found, load it to mainwindow if ( mrunline != ""): mrunline = mrunline[17:] self.groupBox.findChild(QtGui.QLineEdit,"commandline").setText(mrunline) self.setup_gui(mrunline) # open saved commandline ################################## def open_last(self): # Select filename and open it filename = "%s/.mrun.history" % (version_path) if os.path.exists(filename): pass else: return file = open(filename, "r") if ( file is not None ): # File opened successfully lines = file.readlines() mrunline = lines[len(lines)-1] mrunline = mrunline[:len(mrunline)-1] file.close() # In case a mrunline was found, load it to mainwindow if ( mrunline != ""): mrunline = mrunline[17:len(mrunline)] self.groupBox.findChild(QtGui.QLineEdit,"commandline").setText(mrunline) self.setup_gui(mrunline) if __name__ == "__main__": app = QtGui.QApplication(sys.argv) window = Mainwindow() window.show() sys.exit(app.exec_())