Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 5 additions & 26 deletions avaframe/com7Regional/com7Regional.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@

from rasterio.merge import merge

from avaframe.in3Utils.fileHandlerUtils import findAvaDirsBasedOnInputsDir

# create local logger
log = logging.getLogger(__name__)

Expand Down Expand Up @@ -57,7 +59,7 @@ def com7RegionalMain(cfgMain, cfg):
regionalDir = pathlib.Path(cfgMain["MAIN"]["avalancheDir"]) / regionalDirFromCfg

# List valid avalanche directories within the regional directory
avaDirs = findAvaDirs(regionalDir)
avaDirs = findAvaDirsBasedOnInputsDir(regionalDir)

# Get total number of simulations
log.info(f"Getting total number of simulations to perform...")
Expand Down Expand Up @@ -113,29 +115,6 @@ def com7RegionalMain(cfgMain, cfg):
return allPeakFilesDir, mergedRastersDir


def findAvaDirs(Dir):
"""Find all valid avalanche directories within a given directory.

A directory is considered a valid avalanche directory if it contains an "Inputs" folder.

Parameters
----------
Dir : pathlib.Path or str
Path to the directory to search in

Returns
-------
avaDirs : list
List of pathlib.Path objects pointing to valid avalanche directories
"""
avaDirs = [pathlib.Path(p).parent for p in pathlib.Path(Dir).glob("*/Inputs")]
log.info(f"Found a total of '{len(avaDirs)}' avalanche directories in: {Dir}:")
for avaDir in avaDirs:
log.info(f"'{avaDir.name}'")

return avaDirs


def getTotalNumberOfSims(avaDirs, cfgMain, cfgCom7):
"""Get total number of simulations across all avalanche directories.

Expand Down Expand Up @@ -252,7 +231,7 @@ def moveOrCopyPeakFiles(cfg, avalancheDir):

# Get avalanche directories
# with logUtils.silentLogger():
avaDirs = findAvaDirs(avalancheDir)
avaDirs = findAvaDirsBasedOnInputsDir(avalancheDir)
if not avaDirs:
log.warning("No avalanche directories found to copy/move files from")
return None, None
Expand Down Expand Up @@ -404,7 +383,7 @@ def mergeOutputRasters(cfg, avalancheDir):

# Get all avalanche directories
# with logUtils.silentLogger():
avaDirs = findAvaDirs(avalancheDir)
avaDirs = findAvaDirsBasedOnInputsDir(avalancheDir)
if not avaDirs:
log.warning("No avalanche directories found to merge")
return None
Expand Down
55 changes: 39 additions & 16 deletions avaframe/in3Utils/fileHandlerUtils.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
"""
Directory and file handling helper functions
Directory and file handling helper functions
"""

# Load modules
Expand Down Expand Up @@ -455,9 +455,9 @@ def exportcom1DFAOrigOutput(avaDir, cfg="", addTSteps=False):
"%s_fd.asc" % logDict["simName"][k],
)
pathTo = (
outDirPF
/ "timeSteps"
/ ("%s_%.05f_tLast_ft.asc" % (logDict["simName"][k], logDict[varPar][k]))
outDirPF
/ "timeSteps"
/ ("%s_%.05f_tLast_ft.asc" % (logDict["simName"][k], logDict[varPar][k]))
)
shutil.copy(pathFrom, pathTo)
pathFrom = pathlib.Path(
Expand Down Expand Up @@ -488,9 +488,9 @@ def exportcom1DFAOrigOutput(avaDir, cfg="", addTSteps=False):
"%s%.05f" % (resPath, logDict[varPar][k]), "%s_tFirst_fd.txt" % logDict["simName"][k]
)
pathTo = (
outDirPF
/ "timeSteps"
/ ("%s_%.05f_tFirst_fd.asc" % (logDict["simName"][k], logDict[varPar][k]))
outDirPF
/ "timeSteps"
/ ("%s_%.05f_tFirst_fd.asc" % (logDict["simName"][k], logDict[varPar][k]))
)
shutil.copy(pathFrom, pathTo)

Expand Down Expand Up @@ -633,7 +633,7 @@ def makeSimDF(inputDir, avaDir="", simID="simID"):
data["simType"].append(infoParts[2 + j])
data["modelType"].append(infoParts[3 + j])
data["resType"].append(infoParts[4 + j])
data["simName"].append(fNamePart + "_" + ("_".join(infoParts[0: (4 + j)])))
data["simName"].append(fNamePart + "_" + ("_".join(infoParts[0 : (4 + j)])))

header = IOf.readRasterHeader(datafiles[m])
data["cellSize"].append(header["cellsize"])
Expand Down Expand Up @@ -720,14 +720,14 @@ def makeSimFromResDF(avaDir, comModule, inputDir="", simName=""):
# build the result data frame
resTypeListFromFiles = list(set([file.stem.split("_")[-1] for file in datafiles]))
columnsList = [
"simName",
"releaseArea",
"simHash",
"simModified",
"simType",
"modelType",
"cellSize",
] + resTypeListFromFiles
"simName",
"releaseArea",
"simHash",
"simModified",
"simType",
"modelType",
"cellSize",
] + resTypeListFromFiles
dataDF = pd.DataFrame(columns=columnsList)
resTypeListOne = []

Expand Down Expand Up @@ -791,3 +791,26 @@ def makeSimFromResDF(avaDir, comModule, inputDir="", simName=""):
resTypeListAll.append(resType)

return dataDF, resTypeListAll


def findAvaDirsBasedOnInputsDir(Dir):
"""Find all valid avalanche directories within a given directory.

A directory is considered a valid avalanche directory if it contains an "Inputs" folder.

Parameters
----------
Dir : pathlib.Path or str
Path to the directory to search in

Returns
-------
avaDirs : list
List of pathlib.Path objects pointing to valid avalanche directories
"""
avaDirs = [pathlib.Path(p).parent for p in pathlib.Path(Dir).glob("*/Inputs")]
log.info(f"Found a total of '{len(avaDirs)}' avalanche directories in: {Dir}:")
for avaDir in avaDirs:
log.info(f"'{avaDir.name}'")

return avaDirs
1 change: 0 additions & 1 deletion avaframe/runCom1DFA.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@
from avaframe.in3Utils import logUtils
from avaframe.in3Utils import fileHandlerUtils as fU


def runCom1DFA(avalancheDir='', calibration=''):
""" Run com1DFA in the default configuration with only an
avalanche directory as input and the (optional) friction calibration
Expand Down
50 changes: 44 additions & 6 deletions avaframe/runCom7Regional.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,20 +4,26 @@
"""

import time
import pathlib
import argparse

from avaframe.com7Regional import com7Regional as com7
from avaframe.com7Regional import splitInputs as sI
from avaframe.in3Utils import cfgUtils
from avaframe.in3Utils import logUtils


def runCom7Regional(avalancheDir=""):
def runCom7Regional(avalancheDir="", splitInputs=False, runComputations=False):
"""Run regional avalanche simulations in parallel.

Parameters
----------
avalancheDir : str, optional
Path to the main avalanche directory. If not provided, uses the path from general configuration.
splitInputs : bool, optional
Whether to run the split inputs preprocessor before running regional simulations. Default is False.
runComputations : bool, optional
Whether to run the main regional computations. Default is False.

Returns
-------
Expand All @@ -43,11 +49,33 @@ def runCom7Regional(avalancheDir=""):
log = logUtils.initiateLogger(str(avalancheDir), logName="runCom7Regional")
log.info("MAIN SCRIPT")

# Load module configuration
cfg = cfgUtils.getModuleConfig(com7, fileOverride="", toPrint=False, onlyDefault=False)
# Run split inputs preprocessing if requested
if splitInputs:
log.info("Running split inputs preprocessor...")
splitStartTime = time.time()

# Call main function
allPeakFilesDir, mergedRastersDir = com7.com7RegionalMain(cfgMain, cfg)
# Define the output directory for split inputs
outputDir = pathlib.Path(avalancheDir) / "com7Regional"
Comment thread
fso42 marked this conversation as resolved.

# Load split inputs module configuration
splitCfg = cfgUtils.getModuleConfig(sI)

# Run splitting process
sI.splitInputsMain(pathlib.Path(avalancheDir), outputDir, splitCfg, cfgMain)

splitEndTime = time.time()
log.info(f"Split inputs preprocessing completed after {splitEndTime - splitStartTime:.1f} seconds.")

# Initialize return values
allPeakFilesDir, mergedRastersDir = None, None

# Run main computations if requested
if runComputations:
# Load module configuration
cfg = cfgUtils.getModuleConfig(com7, fileOverride="", toPrint=False, onlyDefault=False)

# Call main function
allPeakFilesDir, mergedRastersDir = com7.com7RegionalMain(cfgMain, cfg)

# Print time needed
endTime = time.time()
Expand All @@ -62,6 +90,16 @@ def runCom7Regional(avalancheDir=""):
parser.add_argument(
"avadir", metavar="avalancheDir", type=str, nargs="?", default="", help="the avalanche directory"
)
parser.add_argument(
"--split-inputs",
action="store_true",
help="run split inputs preprocessor before regional simulations",
)
parser.add_argument(
"--run-computations",
action="store_true",
help="run the main regional computations",
)

args = parser.parse_args()
runCom7Regional(str(args.avadir))
runCom7Regional(str(args.avadir), splitInputs=args.split_inputs, runComputations=args.run_computations)
57 changes: 0 additions & 57 deletions avaframe/runScripts/runSplitInputs.py

This file was deleted.

Loading