Skip to content

Commit

Permalink
Add runAna4ProbDirOnly function
Browse files Browse the repository at this point in the history
  • Loading branch information
fso42 committed Feb 15, 2024
1 parent 7238169 commit c86082b
Show file tree
Hide file tree
Showing 4 changed files with 173 additions and 1 deletion.
2 changes: 2 additions & 0 deletions avaframeConnector_provider.py
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,7 @@ def find_python():
from .runCom5SnowSlide_algorithm import runCom5SnowSlideAlgorithm
from .runCom6RockAvalanche_algorithm import runCom6RockAvalancheAlgorithm
from .runAna4ProbAna_algorithm import runAna4ProbAnaAlgorithm
from .runAna4ProbDirOnly_algorithm import runAna4ProbDirOnlyAlgorithm
from .runIn1RelInfo_algorithm import runIn1RelInfoAlgorithm
from .update_algorithm import updateAlgorithm

Expand Down Expand Up @@ -127,6 +128,7 @@ def loadAlgorithms(self):
self.addAlgorithm(runCom5SnowSlideAlgorithm())
self.addAlgorithm(runCom6RockAvalancheAlgorithm())
self.addAlgorithm(runAna4ProbAnaAlgorithm())
self.addAlgorithm(runAna4ProbDirOnlyAlgorithm())
self.addAlgorithm(getVersionAlgorithm())
self.addAlgorithm(updateAlgorithm())
self.addAlgorithm(runIn1RelInfoAlgorithm())
Expand Down
1 change: 1 addition & 0 deletions pb_tool.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ python_files: __init__.py avaframeConnector.py avaframeConnector_provider.py
runCom1DFA_algorithm.py
runCom2AB_algorithm.py
runAna4ProbAna_algorithm.py
runAna4ProbDirOnly_algorithm.py
runCom5SnowSlide_algorithm.py
runCom6RockAvalanche_algorithm.py
runIn1RelInfo_algorithm.py
Expand Down
1 change: 0 additions & 1 deletion runAna4ProbAna_algorithm.py
Original file line number Diff line number Diff line change
Expand Up @@ -200,7 +200,6 @@ def shortHelpString(self) -> str:
Praxisleitfaden: https://avaframe.org/reports\n"

return self.tr(hstring)
# Praxisleitfaden: https://info.bml.gv.at/dam/jcr:edebd872-2a86-4edf-ac5e-635ef11e35fe/Praxisleitfaden%20LawSim%20WLV%202022%20Gr%C3%BCn.pdf\n'

def helpUrl(self):
return "https://docs.avaframe.org/en/latest/connector.html"
Expand Down
170 changes: 170 additions & 0 deletions runAna4ProbDirOnly_algorithm.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,170 @@
# -*- coding: utf-8 -*-

"""
/***************************************************************************
AvaFrameRunCom1DFA
A QGIS plugin
Connects to AvaFrame
Generated by Plugin Builder: http://g-sherman.github.io/Qgis-Plugin-Builder/
-------------------
begin : 2021-08-26
copyright : (C) 2021 by AvaFrame Team
email : felix@avaframe.org
***************************************************************************/
/***************************************************************************
* *
* This program 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 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
"""

__author__ = "AvaFrame Team"
__date__ = "2023"
__copyright__ = "(C) 2023 by AvaFrame Team"

# This will get replaced with a git SHA1 when you do a git archive

__revision__ = "$Format:%H$"


import pathlib
import subprocess


from qgis.PyQt.QtCore import QCoreApplication
from qgis.core import (
QgsProcessing,
QgsProcessingException,
QgsProcessingAlgorithm,
QgsProcessingParameterRasterLayer,
QgsProcessingParameterFile,
QgsProcessingParameterMultipleLayers,
QgsProcessingParameterFolderDestination,
QgsProcessingOutputVectorLayer,
)


class runAna4ProbDirOnlyAlgorithm(QgsProcessingAlgorithm):
"""
Runs the probability analysis on a single folder
"""

OUTPUT = "OUTPUT"
SIMFOLDER = "FOLDEST"

def initAlgorithm(self, config):
"""
Here we define the inputs and output of the algorithm, along
with some other properties.
"""
self.addParameter(
QgsProcessingParameterFile(
self.SIMFOLDER,
self.tr("Directory to analyse"),
behavior=QgsProcessingParameterFile.Folder,
)
)

self.addOutput(
QgsProcessingOutputVectorLayer(
self.OUTPUT,
self.tr("Output layer"),
QgsProcessing.TypeVectorAnyGeometry,
)
)

def flags(self):
return super().flags()
# return super().flags() | QgsProcessingAlgorithm.FlagNoThreading

def processAlgorithm(self, parameters, context, feedback):
"""
Here is where the processing itself takes place.
"""

import avaframe.version as gv
from . import avaframeConnector_commonFunc as cF

feedback.pushInfo("AvaFrame Version: " + gv.getVersion())

sourceFOLDEST = self.parameterAsFile(parameters, self.SIMFOLDER, context)

# create folder structure
targetDir = pathlib.Path(sourceFOLDEST)

feedback.pushInfo("Starting the simulations")
feedback.pushInfo("This might take a while")
feedback.pushInfo("See console for progress")

subprocess.call(
["python", "-m", "avaframe.runProbAnalysisOnly", str(targetDir)]
)

feedback.pushInfo("Done, start loading the results")

rasterResults = cF.getAna4ProbAnaResults(targetDir)

context = cF.addLayersToContext(context, rasterResults, self.OUTPUT)

feedback.pushInfo("\n---------------------------------")
feedback.pushInfo("Done, find results and logs here:")
feedback.pushInfo(str(targetDir.resolve()))
feedback.pushInfo("---------------------------------\n")

return {self.OUTPUT: rasterResults}

def name(self):
"""
Returns the algorithm name, used for identifying the algorithm. This
string should be fixed for the algorithm, and must not be localised.
The name should be unique within each provider. Names should contain
lowercase alphanumeric characters only and no spaces or other
formatting characters.
"""
return "ana4probdironly"

def displayName(self):
"""
Returns the translated algorithm name, which should be used for any
user-visible display of the algorithm name.
"""
return self.tr("Probability analysis for directory (ana4)")

def group(self):
"""
Returns the name of the group this algorithm belongs to. This string
should be localised.
"""
return self.tr(self.groupId())

def groupId(self):
"""
Returns the unique ID of the group this algorithm belongs to. This
string should be fixed for the algorithm, and must not be localised.
The group id should be unique within each provider. Group id should
contain lowercase alphanumeric characters only and no spaces or other
formatting characters.
"""
return "Experimental"

def tr(self, string):
return QCoreApplication.translate("Processing", string)

def shortHelpString(self) -> str:
hstring = "Runs probability analysis on existing AvaFrame com1DFA simulation directory. \n\
Choose the base avalanche directory (i.e. the one that contains INPUT OUTPUT etc.)\n\
AvaFrame Documentation: https://docs.avaframe.org\n\
Homepage: https://avaframe.org\n\
Praxisleitfaden: https://avaframe.org/reports\n"

return self.tr(hstring)

def helpUrl(self):
return "https://docs.avaframe.org/en/latest/connector.html"

def createInstance(self):
return runAna4ProbDirOnlyAlgorithm()

0 comments on commit c86082b

Please sign in to comment.