cfg = cfgUtils.getModuleConfig(com1DFAOrig) startTime = time.time() # Clean input directory(ies) of old work and output files initProj.cleanSingleAvaDir(avalancheDir, keep=logName) # Run Standalone DFA reportDictList = com1DFAOrig.com1DFAOrigMain(cfg, avalancheDir) # Print time needed endTime = time.time() log.info(('Took %s seconds to calculate.' % (endTime - startTime))) # append parameters from logFile for reportD in reportDictList: simName = reportD['simName']['name'] parameterDict, reportD = fU.extractParameterInfo(avalancheDir, simName, reportD) # Generate plots for all peakFiles plotDict = oP.plotAllPeakFields(avalancheDir, cfg, cfgMain['FLAGS'], modName) # Set directory for report reportDir = os.path.join(avalancheDir, 'Outputs', 'com1DFAOrigOrig', 'reports') # write report gR.writeReport(reportDir, reportDictList, cfgMain['FLAGS'], plotDict) # write configuration to file cfgUtils.writeCfgFile(avalancheDir, com1DFAOrig, cfg)
avalancheDir = cfgMain['MAIN']['avalancheDir'] # Start logging log = logUtils.initiateLogger(avalancheDir, logName) log.info('MAIN SCRIPT') log.info('Current avalanche: %s', avalancheDir) # Load all input Parameters from config file # get the configuration of an already imported module # write config to log file cfg = cfgUtils.getModuleConfig(ana3AIMEC) iP.cleanModuleFiles(avalancheDir, ana3AIMEC) # write configuration to file cfgUtils.writeCfgFile(avalancheDir, ana3AIMEC, cfg) cfgSetup = cfg['AIMECSETUP'] anaMod = cfgSetup['anaMod'] # set parameter for standard aimec analysis with mass analysis cfgSetup['resType'] = 'ppr' cfgSetup['thresholdValue'] = '1' cfgSetup['diffLim'] = '5' cfgSetup['contourLevels'] = '1|3|5|10' cfg['FLAGS']['flagMass'] = 'True' # Setup input from com1DFA pathDict = dfa2Aimec.mainDfa2Aimec(avalancheDir, anaMod) # TODO: define referenceFile
def runCom1DFA(avaDir='', cfgFile='', relThField='', variationDict=''): """ run com1DFA module """ # +++++++++SETUP CONFIGURATION++++++++++++++++++++++++ # log file name; leave empty to use default runLog.log logName = 'runCom1DFA' # Load avalanche directory from general configuration file cfgMain = cfgUtils.getGeneralConfig() if avaDir != '': avalancheDir = avaDir else: avalancheDir = cfgMain['MAIN']['avalancheDir'] # set module name, reqiured as long we are in dev phase # - because need to create e.g. Output folder for com1DFA to distinguish from # current com1DFA modName = 'com1DFA' # Clean input directory(ies) of old work and output files # initProj.cleanSingleAvaDir(avalancheDir, keep=logName, deleteOutput=False) initProj.cleanModuleFiles(avalancheDir, com1DFA, modName) # Start logging log = logUtils.initiateLogger(avalancheDir, logName) log.info('MAIN SCRIPT') log.info('Current avalanche: %s', avalancheDir) # Create output and work directories # - because need to create e.g. Output folder for com1DFA to distinguish from workDir, outDir = inDirs.initialiseRunDirs(avalancheDir, modName) # generate list of simulations from desired configuration if variationDict == '': # Load full configuration modCfg, modInfo = cfgUtils.getModuleConfig(com1DFA, fileOverride=cfgFile, modInfo=True) variationDict = dP.getVariationDict(avalancheDir, modCfg, modInfo) else: # check if variationDict items exist and are provided in correct format # Load standard/ default configuration modCfg = cfgUtils.getDefaultModuleConfig(com1DFA) variationDict = dP.validateVarDict(variationDict, modCfg) log.info('Variations are performed for:') for key in variationDict: log.info('%s: %s' % (key, variationDict[key])) # add avalanche directory info to cfg modCfg['GENERAL']['avalancheDir'] = avalancheDir # fetch input data - dem, release-, entrainment- and resistance areas inputSimFiles = gI.getInputDataCom1DFAPy(avalancheDir, modCfg['FLAGS']) # write full configuration file to file cfgUtils.writeCfgFile(avalancheDir, com1DFA, modCfg, fileName='sourceConfiguration') # create a list of simulations # if need to reproduce exactely the hash - need to be strings with exactely the same number of digits!! simDict = com1DFA.prepareVarSimDict(modCfg, inputSimFiles, variationDict) log.info('The following simulations will be performed') for key in simDict: log.info('Simulation: %s' % key) reportDictList = [] # loop over all simulations for cuSim in simDict: # load configuration dictionary for cuSim cfg = simDict[cuSim]['cfgSim'] # save configuration settings for each simulation simHash = simDict[cuSim]['simHash'] cfgUtils.writeCfgFile(avalancheDir, com1DFA, cfg, fileName=cuSim) # log simulation name log.info('Run simulation: %s' % cuSim) # set release area scenario inputSimFiles['releaseScenario'] = simDict[cuSim]['relFile'] # +++++++++++++++++++++++++++++++++ # ------------------------ particlesList, fieldsList, Tsave, dem, reportDict, cfgFinal = com1DFA.com1DFAMain( cfg, avalancheDir, cuSim, inputSimFiles, outDir, relThField) # +++++++++EXPORT RESULTS AND PLOTS++++++++++++++++++++++++ # Generate plots for all peakFiles plotDict = oP.plotAllPeakFields(avalancheDir, cfg, cfgMain['FLAGS'], modName) reportDictList.append(reportDict) # export for visulation if cfg['VISUALISATION'].getboolean('writePartToCSV'): outDir = os.path.join(avalancheDir, 'Outputs', modName) com1DFA.savePartToCsv(cfg['VISUALISATION']['particleProperties'], particlesList, outDir) # create hash to check if config didnt change simHashFinal = cfgUtils.cfgHash(cfgFinal) if simHashFinal != simHash: log.warning( 'simulation configuration has been changed since start') cfgUtils.writeCfgFile(avalancheDir, com1DFA, cfg, fileName='%s_butModified' % simHash) # Set directory for report reportDir = os.path.join(avalancheDir, 'Outputs', 'com1DFA', 'reports') # write report gR.writeReport(reportDir, reportDictList, cfgMain['FLAGS'], plotDict) # read all simulation configuration files and return dataFrame and write to csv standardCfg = cfgUtils.getDefaultModuleConfig(com1DFA) simDF = cfgUtils.createConfigurationInfo(avalancheDir, standardCfg, writeCSV=True) return particlesList, fieldsList, Tsave, dem, plotDict, reportDictList
else: log.error('Distribution type not known') #++++++++++++++ Print result to log and save results in outFile for m in range(len(sampleVect)): log.info('%.5f' % (sampleVect[m])) outFile = os.path.join(workingDir, 'sampleFromDist%s.txt' % cfgGen['distType']) with open(outFile, 'w') as pfile: for item in sampleVect: pfile.write('%.5f_' % item) pfile.close() # ++++++++++++++++ Make plots of sample distribution flagShow = cfgMain['FLAGS'].getboolean('showPlot') # # Plot the results iPlot.plotDist(workingDir, CDF, a, b, c, cfgGen, flagShow) iPlot.plotSample(workingDir, sampleVect, cfgGen, flagShow) # +++++++++++++++ Check if retrieved sample actually fits the desired distriution ..... # retrieve approximation of sample PDF using numpy histogram and cumsum CDFEmp, xSample = cF.getEmpiricalCDF(sampleVect, CDF, cfgGen) iPlot.plotEmpCDF(workingDir, CDF, CDFEmp, xSample, cfgGen, 'Hist', flagShow) # retrieve approximation of sample using the ECDF function ECDF, xSample = cF.getEmpiricalCDFNEW(sampleVect) iPlot.plotEmpCDF(workingDir, CDF, ECDF, xSample, cfgGen, 'ECDF', flagShow) # plot sample histogram and PDF of desired distribution iPlot.plotEmpPDF(workingDir, PDF, sampleVect, cfgGen, flagShow) # write configuration to file cfgUtils.writeCfgFile(avalancheDir, cF, cfg, suffix=cfgGen['distType'])
'Simulation Parameters'][ 'Release Area Scenario'] == rel: reportDcom1DFA = dict log.info('Comparison simulation: %s' % dict['simName']['name']) break else: log.error( 'No matching simulation found based on releaseScenario: %s and simType: %s' % (rel, simType)) simNameComp = reportDcom1DFA['simName']['name'] compDir = pathlib.Path(avaDir, 'Outputs', 'com1DFA', 'peakFiles') # write configuration to file cfgUtils.writeCfgFile(avaDir, ana3AIMEC, cfgAimec) if 'ent' in simType: cfgAimec['FLAGS']['flagMass'] = 'True' else: cfgAimec['FLAGS']['flagMass'] = 'False' cfgAimec['AIMECSETUP']['comModules'] = 'com1DFAOrig|com1DFA' # Setup input from com1DFA and com1DFAPy pathDict = [] pathDict = dfa2Aimec.dfaBench2Aimec(avaDir, cfgAimec, simNameRef, simNameComp) pathDict['numSim'] = len(pathDict['ppr']) log.info('reference file comes from: %s' % pathDict['compType'][1]) # Extract input file locations pathDict = aimecTools.readAIMECinputs(