From c14bd6e408bec0634a7cac3aa87e177562430afe Mon Sep 17 00:00:00 2001 From: Samo Penic <samo.penic@fe.uni-lj.si> Date: Mon, 07 Mar 2016 14:04:32 +0000 Subject: [PATCH] Working on script for executing trisurf. Added directory generation, started working on start code. Started reading statistics CSV file for generating report on running simulation --- python/trisurf/trisurf.py | 160 +++++++++++++++++++++++++++++++++++++++++++++++----- 1 files changed, 143 insertions(+), 17 deletions(-) diff --git a/python/trisurf/trisurf.py b/python/trisurf/trisurf.py index d777610..67a0813 100644 --- a/python/trisurf/trisurf.py +++ b/python/trisurf/trisurf.py @@ -5,8 +5,9 @@ import base64 import zlib import io - - +import os +from itertools import islice +import mmap ''' This is a trisurf instance manager written in python @@ -32,7 +33,6 @@ except: print("Error reading or parsing tape file!\n") exit(1) - def setTape(self, string): self.config=configobj.ConfigObj(io.StringIO(string)) @@ -41,12 +41,118 @@ def getValue(self,key): return self.config[key] + def __str__(self): + retval="" + for key,val in self.config.iteritems(): + retval=retval+str(key)+" = "+str(val)+"\n" + return retval + + +class Directory: + def __init__(self, maindir=".", simdir=""): + self.maindir=maindir + self.simdir=simdir + return + + def fullpath(self): + return os.path.join(self.maindir,self.simdir) + + def exists(self): + path=self.fullpath() + if(os.path.exists(path)): + return 1 + else: + return 0 + + def make(self): + try: + os.makedirs(self.fullpath()) + except: + print("Cannot make directory "+self.fullpath()+"\n") + exit(1) + return + + def makeifnotexist(self): + if(self.exists()==0): + self.make() + return + + def remove(self): + if(self.exists()): + try: + os.rmdir(self.fullpath()) + except: + print("Cannot remove directory "+self.fullpath()+ "\n") + exit(1) + return + + def goto(self): + try: + os.chdir(self.fullpath()) + except: + print("Cannot go to directory "+self.fullpath()+"\n") + return + + +class Statistics: + def __init__(self,path,filename="statistics.csv"): + self.path=path + self.filename=filename + self.fullname=os.path.join(path,filename) + self.read() + return + + def __str__(self): + return(str(self.fullname)) + + def exists(self): + if(os.path.isfile(self.fullname)): + return True + else: + return False + + def mapcount(self): + f = open(self.fullname, "r+") + buf = mmap.mmap(f.fileno(), 0) + lines = 0 + readline = buf.readline + while readline(): + lines += 1 + return lines + + def read(self): + if(self.exists()): + nlines=self.mapcount() + try: + with open(self.fullname, "r+") as fin: + i=0; + for line in fin: + if(i==1): + print (line) + if(i==nlines-1): + print (line) + i=i+1 + except: + print("Cannot read statistics file in "+self.fullname+"\n") + exit(1) + else: + print("File "+self.fullname+" does not exists.\n") + exit(1) class Runner: ''' Class Runner consists of a single running or terminated instance of the trisurf ''' + def __init__(self, subdir='run0', tape='', snapshot=''): + self.subdir=subdir + if(tape!=''): + self.initFromTape(tape) + if(snapshot!=''): + self.initFromSnapshot(snapshot) + return + + def initFromTape(self, tape): self.tape=Tape() self.tape.readTape(tape) @@ -61,29 +167,49 @@ root = tree.getroot() tapetxt=root.find('tape') version=root.find('trisurfversion') - #print("Reading snapshot made from: "+version.text) self.tape=Tape() - #print(tapetxt.text) self.tape.setTape(tapetxt.text) - def __init__(self, subdir='run0', tape='', snapshot=''): - self.subdir=subdir - if(tape!=''): - self.initFromTape(tape) - if(snapshot!=''): - self.initFromSnapshot(snapshot) - - return - def getStatus(self): - pass + return 0 def start(self): - pass + if(self.getStatus()==0): + self.Dir=Directory(maindir=self.maindir,simdir=self.subdir) + self.Dir.makeifnotexist() + self.Dir.goto() + print("Starting trisurf-ng executable at "+self.Dir.fullpath()+"\n") + else: + print("Process already running. Not starting\n") + return def stop(self): pass + def setMaindir(self,prefix,variables): + maindir="./" + for p,v in zip(prefix,variables): + if(v=="xk0"): + tv=str(round(float(self.tape.config[v]))) + else: + tv=self.tape.config[v] + maindir=maindir+p+tv + self.maindir=maindir + return + + def setSubdir(self, subdir="run0"): + self.subdir=subdir + return + + def getStatistics(self, statfile="statistics.csv"): + self.statistics=Statistics("", statfile) # we are already in the running directory, so local path is needed! + return + def __str__(self): - return("Running instance") + if(self.getStatus()==0): + str=" not running." + else: + str=" running." + return(self.Dir.fullpath()+str) + -- Gitblit v1.9.3