Python wrapper for running instances of trisurf-ng
Samo Penic
2017-11-28 8b8845e452b45b765c0c74a388296d10e91787fc
trisurf/trisurf.py
@@ -258,6 +258,35 @@
      fields=shlex.split(lines[1])
      epoch2=fields[0]
      return (fields[1])
   def getColumn(self,n=0):
      lines=self.readText().splitlines()
      col=[]
      name=lines[0].split()[n]
      for line in lines:
         col.append(line.split()[n])
      return col[2:],name
   def getTable(self):
      lines=self.readText().splitlines()
      keys=lines[0].split()
      table={}
      def num(s):
         try:
            return int(s)
         except ValueError:
            return float(s)
      for key in keys:
         table[key]=[]
      for line in lines:
         fields=line.split()
         for i in range(0,len(keys)):
            try:
               value=num(fields[i])
               table[keys[i]].append(value)
            except:
               pass
      return table
      
   def readText(self):
@@ -363,7 +392,7 @@
         else:
            procname=proc.name
            procstat=proc.status
         if procname=="trisurf":
         if procname=="tssystem":
            if procstat=="stopped":
               return TS_STOPPED
            else:
@@ -376,7 +405,7 @@
   def start(self):
      if(self.getStatus()==0 or self.getStatus()==TS_COMPLETED):
         #check if executable exists
         if(shutil.which('trisurf')==None):
         if(shutil.which('tssystem')==None):
            print("Error. Trisurf executable not found in PATH. Please install trisurf prior to running trisurf manager.")
            exit(1)
#Symlinks tape file to the directory or create tape file from snapshot in the direcory...
@@ -416,13 +445,13 @@
            else:
               initSnap=lastVTU
               print("WARNING: Not using initial snapshot as starting point, but selecting "+initSnap+" as a starting vesicle")
            params=["trisurf", "--restore-from-vtk",initSnap]+self.runArgs
            params=["tssystem", "--restore-from-vtk",initSnap]+self.runArgs
            print("InitSnap is: "+initSnap)
         else:
            #veify if dump exists. If not it is a first run and shoud be run with --force-from-tape
            if(os.path.isfile("dump.bin")==False):
               self.runArgs.append("--force-from-tape")
            params=["trisurf"]+self.runArgs
            params=["tssystem"]+self.runArgs
         subprocess.Popen (params, stdout=subprocess.DEVNULL)
         cwd.goto()
      else:
@@ -433,12 +462,12 @@
   def setMaindir(self,prefix,variables):
      maindir=""
      for p,v in zip(prefix,variables):
         if(v=="xk0"):
            tv=str(round(float(self.Tape.config[v])))
            if sys.version_info<(3,0):
               tv=str(int(float(self.Tape.config[v])))
         else:
            tv=self.Tape.config[v]
         #if(v=="xk0"):
         #   tv=str(round(float(self.Tape.config[v])))
         #   if sys.version_info<(3,0):
         #      tv=str(int(float(self.Tape.config[v])))
         #else:
         tv=str(self.Tape.config[v])
         maindir=maindir+p+tv
      self.maindir=maindir
      return
@@ -487,13 +516,24 @@
      self.Comment.writefile(data,mode=mode)
   def getLastVTU(self):
   def getLastVTUold(self):
      vtuidx=self.getLastIteration()-int(self.Tape.getValue("inititer"))
      if vtuidx<0:
         return None
      else:
         return  'timestep_{:06d}.vtu'.format(vtuidx)
   def getLastVTU(self):
      flist=[]
      for file in os.listdir(self.Dir.fullpath()):
         if file.endswith(".vtu"):
            flist.append(file)
      flist.sort()
      if(len(flist)==0):
         return -1
      else:
         return(flist[-1])
   def __str__(self):
      if(self.getStatus()==0):
         str=" not running."