diff --git a/editor_api/swat_exe/swatplusrev59-static.exe b/editor_api/swat_exe/swatplusrev59-static.exe new file mode 100644 index 0000000..873f6c0 Binary files /dev/null and b/editor_api/swat_exe/swatplusrev59-static.exe differ diff --git a/editor_api/weather2012_to_weather.py b/editor_api/weather2012_to_weather.py index b9a1642..3b2235a 100644 --- a/editor_api/weather2012_to_weather.py +++ b/editor_api/weather2012_to_weather.py @@ -3,7 +3,7 @@ from sys import argv, stdout, path from shutil import copyfile -path.insert(0, "C:/SWAT/SWATPlus/Workflow/packages") +path.append(os.path.join(os.environ["swatplus_wf_dir"], "packages")) from helper_functions import read_from, copy_file, write_to, show_progress, list_files diff --git a/main_stages/run_calibration.py b/main_stages/run_calibration.py index f0ea205..261a299 100644 --- a/main_stages/run_calibration.py +++ b/main_stages/run_calibration.py @@ -14,6 +14,7 @@ import numpy import time import subprocess +import platform from itertools import product @@ -28,6 +29,7 @@ import pandas import pystran as py import namelist +from logger import log # functions @@ -114,9 +116,13 @@ def run_parameter_set(parameter_set_list, core_number, chg_typ_dict, header, cal working_dir=working_dir, core=core_number)) if not os.path.isfile("rev59.3_64rel.exe"): - shutil.copyfile(swat_exe, "rev59.3_64rel.exe") + shutil.copyfile(executable_path, "rev59.3_64rel.exe") print("\t> running SWAT+ in process {0}".format(core_number)) - os.system("rev59.3_64rel.exe") + if platform.system() == "Linux": + os.system("chmod 777 ./rev59.3_64rel.exe") + os.system("./rev59.3_64rel.exe") + else: + os.system("rev59.3_64rel.exe") # subprocess.Popen('rev59.3_64rel.exe', stdout=subprocess.PIPE) # extract flow for specified unit at specified timestep @@ -192,7 +198,12 @@ def run_parameter_set(parameter_set_list, core_number, chg_typ_dict, header, cal start_time = time.time() # set variables - swat_exe = "C:/SWAT/SWATPlus/Workflow/editor_api/swat_exe/rev59.3_64rel.exe" + variables = { + "swatplus_wf_dir": os.environ["swatplus_wf_dir"], + "swatplus_exe": "rev59.3_64rel.exe" if platform.system() == "Windows" else "swatplusrev59-static.exe" + } + + executable_path = "{swatplus_wf_dir}editor_api/swat_exe/{swatplus_exe}".format(**variables) base = "{0}/{1}/Scenarios/Default".format( sys.argv[1], namelist.Project_Name) working_dir = "{base_dir}/working".format(base_dir=base) @@ -342,6 +353,6 @@ def run_parameter_set(parameter_set_list, core_number, chg_typ_dict, header, cal write_to("{base}/TxtInOut/calibration.cal".format(base=base), new_calibration_cal) os.chdir("{base}/TxtInOut/".format(base=base)) - os.system(swat_exe) + os.system("{0}rev59.3_64rel.exe".format("./" if platform.system() == "Linux" else "")) log.info("finished running calibration\n", keep_log) sys.exit(0) diff --git a/main_stages/run_editor.py b/main_stages/run_editor.py index faf320c..737d272 100644 --- a/main_stages/run_editor.py +++ b/main_stages/run_editor.py @@ -11,6 +11,7 @@ import sys import shutil import subprocess +import platform # adding to path before importing custom modules sys.path.insert(0, os.path.join(os.environ["swatplus_wf_dir"], "packages")) @@ -66,11 +67,23 @@ def __init__(self, base_directory, model_name): **self.variables) self.wgn_db = "{api_dir}/swatplus_wgn.sqlite".format( api_dir=self.api_dir) + + if platform.system() == "Windows": + python_exe = "python" + else: + python_exe = "python3" + self.variables = { "models_dir": self.model_dir, "scripts_dir": self.scripts_dir, "api": self.api, + "weather_format": "observed", + "txt_in_out_dir": self.txt_in_out_dir, + "swat_exe_release": "rev59.3_64rel.exe" if platform.system() == "Windows" else "./swatplusrev59-static.exe", + "swat_exe_debug": "rev59.3_64debug.exe" if platform.system() == "Windows" else "./swatplusrev59-static.exe", + "python_exe": python_exe, + "import_typ_wgn": "wgn", "api_dir": self.api_dir, "p_db": self.prj_database, "r_db": self.ref_database, @@ -153,9 +166,9 @@ def initialise_databases(self): # import GIS os.chdir(self.api_dir) os.system( - 'python {api} create_database --db_type=project --db_file="{p_db}" --db_file2="{r_db}"'.format(**self.variables)) + '{python_exe} {api} create_database --db_type=project --db_file="{p_db}" --db_file2="{r_db}"'.format(**self.variables)) os.system( - 'python {api} import_gis --delete_existing=y --project_db_file="{p_db}"'.format(**self.variables)) + '{python_exe} {api} import_gis --delete_existing=y --project_db_file="{p_db}"'.format(**self.variables)) def setup_project(self): # specify project config info @@ -232,12 +245,9 @@ def set_printing_weather(self, Start_Year, End_Year): # add weather os.chdir(self.api_dir) - os.system('python {api_d}/weather2012_to_weather.py "{ws}" "{wdd}" {wf}'.format( - ws=self.weather_source, wdd=self.weather_data_dir, wf="observed", api_d=self.api_dir)) - os.system('python {api} import_weather --delete_existing=y --create_stations=n --import_type={imp_typ} --import_method=database --project_db_file="{p_db}"'.format( - api=self.api, p_db=self.prj_database, imp_typ="wgn")) - os.system('python {api} import_weather --delete_existing=y --create_stations=y --import_type={imp_typ} --project_db_file="{p_db}"'.format( - api=self.api, p_db=self.prj_database, imp_typ="observed")) + os.system('{python_exe} {api_dir}/weather2012_to_weather.py "{w_src}" "{w_dat}" {weather_format}'.format(**self.variables)) + os.system('{python_exe} {api} import_weather --delete_existing=y --create_stations=n --import_type={import_typ_wgn} --import_method=database --project_db_file="{p_db}"'.format(**self.variables)) + os.system('{python_exe} {api} import_weather --delete_existing=y --create_stations=y --import_type={weather_format} --project_db_file="{p_db}"'.format(**self.variables)) # set simulation times time_sim_data = ["1", "0", str(Start_Year), "0", str(End_Year), "0"] @@ -251,8 +261,7 @@ def write_files(self): # write files os.chdir(self.api_dir) - os.system('python {0} write_files --output_files_dir="{2}" --project_db_file="{1}"'.format( - self.api, self.prj_database, self.txt_in_out_dir)) + os.system('{python_exe} {api} write_files --output_files_dir="{txt_in_out_dir}" --project_db_file="{p_db}"'.format(**self.variables)) # setting weather dir in cio # cio_content = read_from( @@ -282,15 +291,18 @@ def write_files(self): def run(self, exe_type): os.chdir(self.txt_in_out_dir) - copy_file("{base}/editor_api/swat_exe/rev59.3_64debug.exe".format(base=self.scripts_dir), - "{txt_in_out_dir}rev59.3_64debug.exe".format(txt_in_out_dir=self.txt_in_out_dir)) - copy_file("{base}/editor_api/swat_exe/rev59.3_64rel.exe".format(base=self.scripts_dir), - "{txt_in_out_dir}/rev59.3_64rel.exe".format(txt_in_out_dir=self.txt_in_out_dir)) + copy_file("{scripts_dir}/editor_api/swat_exe/{swat_exe_debug}".format(**self.variables), + "{txt_in_out_dir}/{swat_exe_debug}".format(**self.variables)) + copy_file("{scripts_dir}/editor_api/swat_exe/{swat_exe_release}".format(**self.variables), + "{txt_in_out_dir}/{swat_exe_release}".format(**self.variables)) if exe_type == 1: print("\n >> running SWAT+") - # os.system("rev59.3_64rel.exe") - sub_process = subprocess.Popen("rev59.3_64rel.exe", close_fds=True, shell=True, + if platform.system() == "Linux": + os.system("chmod 777 {swat_exe_release}".format(**self.variables)) + + # os.system("{swat_exe_release}") + sub_process = subprocess.Popen("{swat_exe_release}".format(**self.variables), close_fds=True, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) line = "" while sub_process.poll() is None: @@ -321,7 +333,10 @@ def run(self, exe_type): line = "" elif exe_type == 2: - os.system("rev59.3_64debug.exe") + if platform.system() == "Linux": + os.system("chmod 777 {swat_exe_release}".format(**self.variables)) + + os.system("{swat_exe_debug}".format(**self.variables)) def model_options(self): self.db.connect() diff --git a/main_stages/run_make_figures.py b/main_stages/run_make_figures.py index 1a6fd03..c005115 100644 --- a/main_stages/run_make_figures.py +++ b/main_stages/run_make_figures.py @@ -35,6 +35,8 @@ def __init__(self, wb_parts): if namelist.Model_2_namelist: sys.exit(0) +if not namelist.Make_Figures: + sys.exit(0) base = sys.argv[1].replace("\\\\", "/") base = base.replace("\\", "/") diff --git a/main_stages/run_qswat.py b/main_stages/run_qswat.py index f504d1c..f3dbee0 100644 --- a/main_stages/run_qswat.py +++ b/main_stages/run_qswat.py @@ -10,9 +10,13 @@ import os.path import shutil import sys - +import platform import warnings +if platform.system() == "Linux": + import pyximport # importing cython needs this on linux + pyximport.install() + # skip deprecation warnings when importing PyQt5 with warnings.catch_warnings(): warnings.simplefilter("ignore") @@ -25,15 +29,23 @@ qgs = QgsApplication([], True) qgs.initQgis() -# Prepare processing framework -sys.path.append('{QGIS_Dir}/apps/qgis-ltr/python/plugins'.format( - QGIS_Dir = os.environ['QGIS_Dir'])) # Folder where Processing is located -from processing.core.Processing import Processing -Processing.initialize() +# Prepare processing framework +if platform.system() == "Windows": + sys.path.append('{QGIS_Dir}/apps/qgis-ltr/python/plugins'.format( + QGIS_Dir = os.environ['QGIS_Dir'])) # Folder where Processing is located +else: + sys.path.append('/usr/share/qgis/python/plugins') # Folder where Processing is located + +# skip syntax warnings on linux +with warnings.catch_warnings(): + warnings.simplefilter("ignore") + from processing.core.Processing import Processing + Processing.initialize() -import processing + import processing sys.path.append(os.path.join(os.environ["swatplus_wf_dir"], "packages")) +sys.path.append(os.path.join(os.environ["swatplus_wf_dir"], "qswatplus")) sys.path.append(os.path.join(os.environ["swatplus_wf_dir"])) sys.path.insert(0, sys.argv[1]) @@ -44,12 +56,13 @@ import namelist from logger import log +os.chdir(os.path.join(os.environ["swatplus_wf_dir"], "qswatplus")) -from qswatplus.QSWATPlus import QSWATPlus -from qswatplus.delineation import Delineation -from qswatplus.hrus import HRUs -from qswatplus.QSWATUtils import QSWATUtils -from qswatplus.parameters import Parameters +from QSWATPlus import QSWATPlus +from delineation import Delineation +from hrus import HRUs +from QSWATUtils import QSWATUtils +from parameters import Parameters from glob import glob atexit.register(QgsApplication.exitQgis) @@ -102,7 +115,7 @@ def layers(self): # clean up before new files log.info("cleaning up files from 'Watershed\Shapes'", keep_log) Watershed_shapes = list_files(QSWATUtils.join( - projDir, r'Watershed\Shapes'), "shp") + projDir, r'Watershed/Shapes'), "shp") delete_shapes = [] for Watershed_shape in Watershed_shapes: @@ -132,7 +145,7 @@ def layers(self): print("\n >> setting up model hrus") log.info("cleaning up files from 'Watershed\\Text'", keep_log) -shutil.rmtree(QSWATUtils.join(projDir, r'Watershed\Text'), ignore_errors=True) +shutil.rmtree(QSWATUtils.join(projDir, r'Watershed/Text'), ignore_errors=True) projName = os.path.split(projDir)[1] projFile = "{dir}/{nm}.qgs".format(dir=projDir, nm=projName) @@ -202,13 +215,13 @@ def layers(self): sys.exit(1) -if not os.path.exists(QSWATUtils.join(projDir, r'Watershed\Shapes\rivs1.shp')): +if not os.path.exists(QSWATUtils.join(projDir, r'Watershed/Shapes/rivs1.shp')): log.error("error creating HRUs", keep_log) QSWATUtils.error('\t ! Streams shapefile not created', True) sys.exit(1) -if not os.path.exists(QSWATUtils.join(projDir, r'Watershed\Shapes\subs1.shp')): +if not os.path.exists(QSWATUtils.join(projDir, r'Watershed/Shapes/subs1.shp')): log.error("error creating HRUs", keep_log) QSWATUtils.error('\t ! Subbasins shapefile not created', True) sys.exit(1) diff --git a/qswatplus/DBUtils.py b/qswatplus/DBUtils.py index 6397b6d..5c5ba1d 100644 --- a/qswatplus/DBUtils.py +++ b/qswatplus/DBUtils.py @@ -35,9 +35,9 @@ import traceback try: - from .QSWATUtils import QSWATUtils, FileTypes - from .dataInC import BasinData, CellData, LSUData, WaterBody # @UnresolvedImport - from .parameters import Parameters + from QSWATUtils import QSWATUtils, FileTypes + from dataInC import BasinData, CellData, LSUData, WaterBody # @UnresolvedImport + from parameters import Parameters except: # used by convertFromArc from QSWATUtils import QSWATUtils, FileTypes # @UnresolvedImport diff --git a/qswatplus/QSWATBatch.py b/qswatplus/QSWATBatch.py index 8391d70..b97ed1d 100644 --- a/qswatplus/QSWATBatch.py +++ b/qswatplus/QSWATBatch.py @@ -31,11 +31,11 @@ import shutil import atexit -from .QSWATPlus import QSWATPlus -from .delineation import Delineation -from .hrus import HRUs -from .QSWATUtils import QSWATUtils -from .parameters import Parameters +from QSWATPlus import QSWATPlus +from delineation import Delineation +from hrus import HRUs +from QSWATUtils import QSWATUtils +from parameters import Parameters osGeo4wRoot = os.getenv('OSGEO4W_ROOT') QgsApplication.setPrefixPath(osGeo4wRoot + r'\apps\qgis', True) diff --git a/qswatplus/QSWATPlus.py b/qswatplus/QSWATPlus.py index edf479d..3b5201a 100644 --- a/qswatplus/QSWATPlus.py +++ b/qswatplus/QSWATPlus.py @@ -33,36 +33,36 @@ # Initialize Qt resources from file resources_rc.py try: - from .resources_rc import * # @UnusedWildImport + from resources_rc import * # @UnusedWildImport except: from resources_rc import * # for convertFromArc @UnresolvedImport # Import the code for the dialog # allow this to fail so no exception when loaded in wrong architecture (32 or 64 bit) # QSWATUtils should have no further dependencies, especially in Cython modules try: - from .QSWATUtils import QSWATUtils, FileTypes # @UnresolvedImport + from QSWATUtils import QSWATUtils, FileTypes # @UnresolvedImport except: # for convertFromArc from QSWATUtils import QSWATUtils, FileTypes # @UnresolvedImport try: txt = 'QSwatDialog' - from .qswatdialog import QSwatDialog + from qswatdialog import QSwatDialog txt = 'HRUs' - from .hrus import HRUs + from hrus import HRUs txt = 'QSWATTopology' - from .QSWATTopology import QSWATTopology + from QSWATTopology import QSWATTopology txt = 'GlobalVars' - from .globals import GlobalVars + from globals import GlobalVars txt = 'Delineation' - from .delineation import Delineation + from delineation import Delineation txt = 'Parameters' - from .parameters import Parameters + from parameters import Parameters txt = 'Visualise' - from .visualise import Visualise + from visualise import Visualise txt = 'AboutQSWAT' - from .about import AboutQSWAT + from about import AboutQSWAT txt = 'ExportTable' - from .exporttable import ExportTable + from exporttable import ExportTable except Exception: QSWATUtils.loginfo('QSWAT+ failed to import {0}: {1}'.format(txt, traceback.format_exc())) @@ -81,7 +81,7 @@ def __init__(self, iface): ## flag to show if init ran successfully self.loadFailed = False try: - from . import dataInC # @UnusedImport + import dataInC # @UnusedImport except Exception: QSWATUtils.loginfo('Failed to load Cython module: wrong architecture?: {0}'.format(traceback.format_exc())) self.loadFailed = True diff --git a/qswatplus/QSWATTopology.py b/qswatplus/QSWATTopology.py index 6e6634c..0e66532 100644 --- a/qswatplus/QSWATTopology.py +++ b/qswatplus/QSWATTopology.py @@ -31,11 +31,11 @@ import traceback try: - from .QSWATUtils import QSWATUtils, FileTypes, ListFuns - from .DBUtils import DBUtils - from .parameters import Parameters - from .raster import Raster - from .dataInC import ReachData, MergedChannelData, LakeData # @UnresolvedImport + from QSWATUtils import QSWATUtils, FileTypes, ListFuns + from DBUtils import DBUtils + from parameters import Parameters + from raster import Raster + from dataInC import ReachData, MergedChannelData, LakeData # @UnresolvedImport except: # used by convertFromArc from QSWATUtils import QSWATUtils, FileTypes, ListFuns diff --git a/qswatplus/TauDEMUtils.py b/qswatplus/TauDEMUtils.py index 179b7b9..67f3ae2 100644 --- a/qswatplus/TauDEMUtils.py +++ b/qswatplus/TauDEMUtils.py @@ -27,8 +27,8 @@ import subprocess import webbrowser -from .QSWATUtils import QSWATUtils -from .parameters import Parameters +from QSWATUtils import QSWATUtils +from parameters import Parameters class TauDEMUtils: diff --git a/qswatplus/__init__.py b/qswatplus/__init__.py index 02d871d..f30051a 100644 --- a/qswatplus/__init__.py +++ b/qswatplus/__init__.py @@ -23,5 +23,5 @@ def classFactory(iface): # load QSWATPlus class from file QSWATPlus - from .QSWATPlus import QSWATPlus + from QSWATPlus import QSWATPlus return QSWATPlus(iface) diff --git a/qswatplus/about.py b/qswatplus/about.py index 560865d..2c10978 100644 --- a/qswatplus/about.py +++ b/qswatplus/about.py @@ -26,9 +26,9 @@ import webbrowser # Import the code for the dialog -from .aboutdialog import aboutDialog -from .QSWATUtils import QSWATUtils -from .globals import GlobalVars +from aboutdialog import aboutDialog +from QSWATUtils import QSWATUtils +from globals import GlobalVars class AboutQSWAT: diff --git a/qswatplus/delineation.py b/qswatplus/delineation.py index 8fc5412..0119344 100644 --- a/qswatplus/delineation.py +++ b/qswatplus/delineation.py @@ -38,16 +38,16 @@ from typing import Optional, Tuple, Dict, Set # Import the code for the dialog -from .delineationdialog import DelineationDialog -from .TauDEMUtils import TauDEMUtils -from .QSWATUtils import QSWATUtils, fileWriter, FileTypes, ListFuns, MapFuns -from .QSWATTopology import QSWATTopology -from .globals import GlobalVars -from .landscape import Landscape -from .outletsdialog import OutletsDialog -from .selectsubs import SelectSubbasins -from .parameters import Parameters -from .polygonizeInC2 import Polygonize # @UnresolvedImport +from delineationdialog import DelineationDialog +from TauDEMUtils import TauDEMUtils +from QSWATUtils import QSWATUtils, fileWriter, FileTypes, ListFuns, MapFuns +from QSWATTopology import QSWATTopology +from globals import GlobalVars +from landscape import Landscape +from outletsdialog import OutletsDialog +from selectsubs import SelectSubbasins +from parameters import Parameters +from polygonizeInC2 import Polygonize # @UnresolvedImport ## type for geotransform Transform = Dict[int, float] diff --git a/qswatplus/elevationbands.py b/qswatplus/elevationbands.py index e7f86ce..19a3653 100644 --- a/qswatplus/elevationbands.py +++ b/qswatplus/elevationbands.py @@ -24,8 +24,8 @@ from PyQt5.QtGui import * # @UnusedWildImport from qgis.core import * # @UnusedWildImport # Import the code for the dialog -from .elevationbandsdialog import ElevatioBandsDialog -from .QSWATUtils import QSWATUtils +from elevationbandsdialog import ElevatioBandsDialog +from QSWATUtils import QSWATUtils class ElevationBands: diff --git a/qswatplus/exempt.py b/qswatplus/exempt.py index a7188d6..e75d46b 100644 --- a/qswatplus/exempt.py +++ b/qswatplus/exempt.py @@ -24,8 +24,8 @@ from PyQt5.QtGui import * # @UnusedWildImport from qgis.core import * # @UnusedWildImport # Import the code for the dialog -from .exemptdialog import ExemptDialog -from .QSWATUtils import ListFuns +from exemptdialog import ExemptDialog +from QSWATUtils import ListFuns from osgeo.gdalconst import * # @UnusedWildImport class Exempt: diff --git a/qswatplus/exporttable.py b/qswatplus/exporttable.py index 153df91..9f15975 100644 --- a/qswatplus/exporttable.py +++ b/qswatplus/exporttable.py @@ -29,8 +29,8 @@ import csv # Import the code for the dialog -from .exporttabledialog import ExportTableDialog -from .QSWATUtils import QSWATUtils, FileTypes +from exporttabledialog import ExportTableDialog +from QSWATUtils import QSWATUtils, FileTypes class ExportTable(): """Choose an sqlite database and a table and export table as csv file.""" diff --git a/qswatplus/floodplain.py b/qswatplus/floodplain.py index f14a142..2608249 100644 --- a/qswatplus/floodplain.py +++ b/qswatplus/floodplain.py @@ -30,13 +30,13 @@ # import numpy as np import math import time -from .QSWATUtils import QSWATUtils, FileTypes # fileWriter -from .QSWATTopology import QSWATTopology +from QSWATUtils import QSWATUtils, FileTypes # fileWriter +from QSWATTopology import QSWATTopology import numpy import traceback #from rasterint import RasterInt #from rasterfloat import RasterFloat -from .raster import Raster +from raster import Raster #from intraster import IntRaster class Floodplain(QObject): diff --git a/qswatplus/globals.py b/qswatplus/globals.py index 9d0ac16..ad58b63 100644 --- a/qswatplus/globals.py +++ b/qswatplus/globals.py @@ -28,12 +28,12 @@ # import xml.etree.ElementTree as ET from typing import Dict, List, Set # @UnusedImport -from .QSWATTopology import QSWATTopology -from .QSWATUtils import QSWATUtils -from .DBUtils import DBUtils -from .TauDEMUtils import TauDEMUtils -from .parameters import Parameters -from .raster import Raster # @UnusedImport +from QSWATTopology import QSWATTopology +from QSWATUtils import QSWATUtils +from DBUtils import DBUtils +from TauDEMUtils import TauDEMUtils +from parameters import Parameters +from raster import Raster # @UnusedImport class GlobalVars: """Data used across across the plugin, and some utilities on it.""" diff --git a/qswatplus/hrus.py b/qswatplus/hrus.py index 5332640..cbb49ba 100644 --- a/qswatplus/hrus.py +++ b/qswatplus/hrus.py @@ -36,22 +36,28 @@ import subprocess import sys -sys.path.append(os.environ["WF_QGIS"]) +import platform + +if platform.system() == "Windows": + sys.path.append(os.environ["WF_QGIS"]) +else: + sys.path.append('/usr/share/qgis/python/plugins') # Folder where Processing is located + import processing # @UnresolvedImport # Import the code for the dialog -from .hrusdialog import HrusDialog -from .QSWATUtils import QSWATUtils, fileWriter, FileTypes, ListFuns -from .QSWATTopology import QSWATTopology -from .DBUtils import DBUtils -from .parameters import Parameters -#from .polygonize import Polygonize -from .polygonizeInC2 import Polygonize # @UnresolvedImport -from .dataInC import CellData, BasinData, WaterBody # @UnresolvedImport -from .exempt import Exempt -from .split import Split -from .elevationbands import ElevationBands -from .delineation import Delineation +from hrusdialog import HrusDialog +from QSWATUtils import QSWATUtils, fileWriter, FileTypes, ListFuns +from QSWATTopology import QSWATTopology +from DBUtils import DBUtils +from parameters import Parameters +#from polygonize import Polygonize +from polygonizeInC2 import Polygonize # @UnresolvedImport +from dataInC import CellData, BasinData, WaterBody # @UnresolvedImport +from exempt import Exempt +from split import Split +from elevationbands import ElevationBands +from delineation import Delineation class HRUs(QObject): diff --git a/qswatplus/landscape.py b/qswatplus/landscape.py index 978d602..fefd921 100644 --- a/qswatplus/landscape.py +++ b/qswatplus/landscape.py @@ -37,13 +37,13 @@ import time from osgeo import gdal -from .TauDEMUtils import TauDEMUtils -from .QSWATTopology import QSWATTopology -from .QSWATUtils import QSWATUtils, FileTypes -from .landscapedialog import LandscapeDialog -from .floodplain import Floodplain -from .parameters import Parameters -from .raster import Raster +from TauDEMUtils import TauDEMUtils +from QSWATTopology import QSWATTopology +from QSWATUtils import QSWATUtils, FileTypes +from landscapedialog import LandscapeDialog +from floodplain import Floodplain +from parameters import Parameters +from raster import Raster class Landscape(QObject): diff --git a/qswatplus/parameters.py b/qswatplus/parameters.py index ed19d6a..5878c45 100644 --- a/qswatplus/parameters.py +++ b/qswatplus/parameters.py @@ -26,8 +26,8 @@ from qgis.core import * # @UnusedWildImport # Import the code for the dialog try: - from .parametersdialog import ParametersDialog - from .QSWATUtils import QSWATUtils + from parametersdialog import ParametersDialog + from QSWATUtils import QSWATUtils except: pass # not needed by convertFromArc import os.path diff --git a/qswatplus/polygonize.py b/qswatplus/polygonize.py index 1b62392..9a3c8c3 100644 --- a/qswatplus/polygonize.py +++ b/qswatplus/polygonize.py @@ -26,7 +26,7 @@ from qgis.gui import * # @UnusedWildImport # from multiprocessing import Pool import time -from .QSWATUtils import QSWATUtils +from QSWATUtils import QSWATUtils diff --git a/qswatplus/raster.py b/qswatplus/raster.py index 8250834..22da703 100644 --- a/qswatplus/raster.py +++ b/qswatplus/raster.py @@ -28,7 +28,7 @@ from distutils.version import LooseVersion try: - from .QSWATUtils import QSWATUtils #, fileWriter, FileTypes + from QSWATUtils import QSWATUtils #, fileWriter, FileTypes except: pass # not needed by convertFromArc (already imported) diff --git a/qswatplus/selectlu.py b/qswatplus/selectlu.py index 1a23d68..6b5076f 100644 --- a/qswatplus/selectlu.py +++ b/qswatplus/selectlu.py @@ -24,7 +24,7 @@ from PyQt5.QtGui import * # @UnusedWildImport from qgis.core import * # @UnusedWildImport # Import the code for the dialog -from .selectludialog import SelectluDialog +from selectludialog import SelectluDialog class Selectlu: diff --git a/qswatplus/selectsubs.py b/qswatplus/selectsubs.py index 12892e1..159885b 100644 --- a/qswatplus/selectsubs.py +++ b/qswatplus/selectsubs.py @@ -24,9 +24,9 @@ from PyQt5.QtGui import * # @UnusedWildImport from qgis.core import * # @UnusedWildImport # Import the code for the dialog -from .selectsubsdialog import SelectSubbasinsDialog -from .QSWATUtils import QSWATUtils -from .parameters import Parameters +from selectsubsdialog import SelectSubbasinsDialog +from QSWATUtils import QSWATUtils +from parameters import Parameters class SelectSubbasins: diff --git a/qswatplus/split.py b/qswatplus/split.py index eda3ab8..0adb971 100644 --- a/qswatplus/split.py +++ b/qswatplus/split.py @@ -25,9 +25,9 @@ from PyQt5.QtWidgets import * # @UnusedWildImport from qgis.core import * # @UnusedWildImport # Import the code for the dialog -from .splitdialog import SplitDialog -from .selectlu import Selectlu -from .QSWATUtils import QSWATUtils +from splitdialog import SplitDialog +from selectlu import Selectlu +from QSWATUtils import QSWATUtils class Split: diff --git a/qswatplus/swatgraph.py b/qswatplus/swatgraph.py index 2937745..2586409 100644 --- a/qswatplus/swatgraph.py +++ b/qswatplus/swatgraph.py @@ -26,7 +26,7 @@ FigureCanvasQTAgg as FigureCanvas, NavigationToolbar2QT as NavigationToolbar) try: - from .graphdialog import GraphDialog + from graphdialog import GraphDialog except: # stand alone version from graphdialog1 import GraphDialog diff --git a/qswatplus/visualise.py b/qswatplus/visualise.py index ad44297..9df7a66 100644 --- a/qswatplus/visualise.py +++ b/qswatplus/visualise.py @@ -41,14 +41,14 @@ # from collections import OrderedDict # Import the code for the dialog -from .visualisedialog import VisualiseDialog -from .QSWATUtils import QSWATUtils -from .QSWATTopology import QSWATTopology -from .swatgraph import SWATGraph -from .parameters import Parameters -from .jenks import jenks # @UnresolvedImport -# from .images2gif import writeGif -from . import imageio +from visualisedialog import VisualiseDialog +from QSWATUtils import QSWATUtils +from QSWATTopology import QSWATTopology +from swatgraph import SWATGraph +from parameters import Parameters +from jenks import jenks # @UnresolvedImport +# from images2gif import writeGif +from import imageio class Visualise(QObject): """Support visualisation of SWAT outputs, using data in SWAT output database.""" diff --git a/swatplus_aw.sh b/swatplus_aw.sh new file mode 100644 index 0000000..22c7877 --- /dev/null +++ b/swatplus_aw.sh @@ -0,0 +1,32 @@ + +# set the directory of QGIS +# export QGIS_Dir=C:\Program Files\QGIS 3.10 +# set ERRORLEVEL=0 + +# set variables for project initialisation +export python_script_prepare_qswat=$HOME/.SWAT/SWATPlus/Workflow/main_stages/prepare_project.py +export python_script_make_namelist=$HOME/.SWAT/SWATPlus/Workflow/main_stages/generate_namelist.py +export python_script_run_qswat=$HOME/.SWAT/SWATPlus/Workflow/main_stages/run_qswat.py +export python_script_run_editor=$HOME/.SWAT/SWATPlus/Workflow/main_stages/run_editor.py +export python_script_run_calibration=$HOME/.SWAT/SWATPlus/Workflow/main_stages/run_calibration.py +export python_script_make_figures=$HOME/.SWAT/SWATPlus/Workflow/main_stages/run_make_figures.py +export python_script_clean_up=$HOME/.SWAT/SWATPlus/Workflow/main_stages/run_clean_up.py + +export BASE_DIR=$PWD +export swatplus_wf_dir=$HOME/.SWAT/SWATPlus/Workflow/ + +# # add default plugins and model directory to python path +export PYTHONPATH=$BASE_DIR:$PYTHONPATH +# export PATH=%PATH% + +# start runing the workflow using PyQGIS +python3 $python_script_prepare_qswat $BASE_DIR + +python3 $python_script_make_namelist $BASE_DIR + +python3 $python_script_run_qswat $BASE_DIR +python3 $python_script_run_editor $BASE_DIR +python3 $python_script_run_calibration $BASE_DIR +python3 $python_script_make_figures $BASE_DIR + +python3 $python_script_clean_up $BASE_DIR