def __init__(self, folder, meshInstance): print "AcdOptiRunConfig::__init__()" self.folder = folder self.meshInstance = meshInstance self.status = "not_initialized" #Construct the instance name from folder instname = folder if instname[-1] == "/": instname = instname[0:-1] self.instName = instname = os.path.split(instname)[1] #Load the param file try: print os.path.join(self.folder, "paramFile.set") self.__paramFile = AcdOptiFileParser_simple(\ os.path.join(self.folder, "paramFile.set"), 'rw') except IOError: raise AcdOptiException_runConfig_loadFail("File paramFile.set not found") if self.__paramFile.dataDict.getValSingle("fileID") != "runConfigParamFile": raise AcdOptiException_runConfig_loadFail\ ("Wrong fileID, got \""+ self.__paramFile.dataDict.getValSingle("fileID")+"\" while loading paramFile") if self.instName != self.__paramFile.dataDict.getValSingle("instName"): raise AcdOptiException_runConfig_loadFail("instName doesn't match folder name, expected='"+self.instName+"', got '"+self.__paramFile.dataDict.getValSingle("instName")+"'") self.status = self.__paramFile.dataDict.getValSingle("status") if not self.status in self.statuses: raise AcdOptiException_runConfig_loadFail("Status '" + self.status + "' not valid") self.stageName = self.__paramFile.dataDict.getValSingle("stageName") if self.stageName == "": self.stageName = None if self.stageName and self.status == "initialized": raise AcdOptiException_runConfig_loadFail("StageName != None while status='" + self.status + "'") #Generate stageFolder, stageFile, finishedFolder from stageName and status if self.statuses.index(self.status) >= self.statuses.index("staged"): self.stageFolder = os.path.join(self.folder,"stage",self.stageName) if not os.path.isdir(self.stageFolder): raise AcdOptiException_runConfig_loadFail("StageFolder '" + self.stageFolder + "' does not exist, but status='" + self.status + "'") self.stageFile = os.path.join(self.folder, "stage", self.stageName) + ".tar.gz" if not os.path.isfile(self.stageFile): raise AcdOptiException_runConfig_loadFail("StageFile '" + self.stageFile + "' does not exist, but status='" + self.status + "'") if self.status == "finished": self.finishedFolder = os.path.join(self.folder, "finished", self.stageName) if not os.path.isdir(self.finishedFolder): raise AcdOptiException_runConfig_loadFail("FinishedFolder '" + self.finishedFolder + "' does not exist, but status='" + self.status + "'") # self.stageFolder = self.__paramFile.dataDict.getValSingle("stageFolder") # if self.stageFolder == "": # self.stageFolder = None # # self.stageFile = self.__paramFile.dataDict.getValSingle("stageFile") # if self.stageFile == "": # self.stageFile = None # # self.finishedFolder = self.__paramFile.dataDict.getValSingle("finishedFolder") # if self.finishedFolder == "": # self.finishedFolder = None # assert self.status != "finished" #Sanity check on folders for staged- and finished data: if not os.path.isdir(os.path.join(self.folder, "stage")): raise AcdOptiException_runConfig_loadFail("stage folder not found") if not os.path.isdir(os.path.join(self.folder, "finished")): raise AcdOptiException_runConfig_loadFail("finished folder not found") if not os.path.isdir(os.path.join(self.folder, "analysis")): raise AcdOptiException_runConfig_loadFail("analysis folder not found") #Load the solverSetups solverSetupNames = self.__paramFile.dataDict.getVals("solverSetup") self.solverSetups = [] for ssName in solverSetupNames: self.solverSetups.append(AcdOptiSolverSetup(ssName, self)) #Load the runner runnerType = self.__paramFile.dataDict["runnerType"] self.runner = AcdOptiRunner.getRunner(runnerType, self) #Load any analysis specified by the paramFile anaDict = self.__paramFile.dataDict["analysis"] self.analysis = {} for (anaName, anaOptions) in anaDict: print anaName, anaOptions if anaName in self.analysis: raise KeyError("Analysis name '" + anaName + "' encountered twice") self.analysis[anaName] = AnalysisInterface.loadAnalysisByDict(anaOptions, os.path.join(self.folder, "analysis"), self) #Refresh lockdowns for solver in self.solverSetups: solver.refreshLockdown() self.runner.refreshLockdown() self.runner.write() #Check if we have an old file format, and if so write() to convert to new format if len(self.__paramFile.dataDict.getVals("stageFolder")): print "Updating to new file format without full paths specified (relocatable projects!)" self.__paramFile.dataDict.delItem("stageFolder") self.__paramFile.dataDict.delItem("stageFile") self.__paramFile.dataDict.delItem("finishedFolder") self.__paramFile.write()
def addAnalysis(self, type, name=None): "Create and add an analysis of the given type and name" ana = AnalysisInterface.createAndLoadAnalysis(type, self, os.path.join(self.folder, "analysis"), name) self.analysis[ana.instName] = ana