Trisurf Monte Carlo simulator
Samo Penic
2017-01-04 61ad95ca712a374f6e58127fda738b67c57d743d
python/trisurf/trisurf.py
@@ -2,7 +2,7 @@
import xml.etree.ElementTree as ET
import base64
import zlib
import io
import sys,io
import os
from itertools import islice
import mmap
@@ -236,14 +236,19 @@
      try:
         self.dT=int(epoch2)-int(epoch1)
         self.last=n2
         print(epoch1)
         print(epoch2)
         print(self.dT)
         print(self.last)
         #print(epoch1)
         #print(epoch2)
         #print(self.dT)
         #print(self.last)
         self.startDate=os.path.getmtime(os.path.join(self.path,'.lock'))
      except:
         return(False)
      return(True)
   def readText(self):
      with open(self.fullname, 'r+') as fin:
         cont=fin.read()
      return cont
   def read_old(self):
      '''
@@ -297,6 +302,16 @@
   '''
   Class Runner consists of a single running or terminated instance of the trisurf. It manages starting, stopping, verifying the running process and printing the reports of the configured instances.
   '''
   @property
   def Dir(self):
      return Directory(maindir=self.maindir,simdir=self.subdir)
   @property
   def Statistics(self):
      return Statistics(self.Dir.fullpath(), "statistics.csv")
   def __init__(self, subdir='run0', tape=None, snapshot=None, runArgs=[]):
      self.subdir=subdir
      self.runArgs=runArgs
@@ -328,7 +343,7 @@
      self.tape.setTape(tapetxt.text)
   def getPID(self):
      self.Dir=Directory(maindir=self.maindir,simdir=self.subdir)
#      self.Dir=Directory(maindir=self.maindir,simdir=self.subdir)
      #self.Dir.makeifnotexist()
      try:
         fp = open(os.path.join(self.Dir.fullpath(),'.lock'))
@@ -339,7 +354,7 @@
      return int(pid)
   def getLastIteration(self):
      self.Dir=Directory(maindir=self.maindir,simdir=self.subdir)
#      self.Dir=Directory(maindir=self.maindir,simdir=self.subdir)
      #self.Dir.makeifnotexist()
      try:
         fp = open(os.path.join(self.Dir.fullpath(),'.status'))
@@ -350,7 +365,7 @@
      return int(status)
   def isCompleted(self):
      if (int(self.tape.getValue("iterations"))==self.getLastIteration()+1):
      if int(self.tape.getValue("iterations"))+int(self.tape.getValue("inititer"))==self.getLastIteration()+1:
         return True
      else:
         return False
@@ -386,7 +401,7 @@
         if(shutil.which('trisurf')==None):
            print("Error. Trisurf executable not found in PATH. Please install trisurf prior to running trisurf manager.")
            exit(1)
         self.Dir=Directory(maindir=self.maindir,simdir=self.subdir)
#         self.Dir=Directory(maindir=self.maindir,simdir=self.subdir)
#Symlinks tape file to the directory or create tape file from snapshot in the direcory...
         if(self.Dir.makeifnotexist()):
            if(self.fromSnapshot==False):
@@ -443,6 +458,8 @@
      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]
         maindir=maindir+p+tv
@@ -454,13 +471,13 @@
      return
   def getStatistics(self, statfile="statistics.csv"):
      self.Dir=Directory(maindir=self.maindir,simdir=self.subdir)
      self.statistics=Statistics(self.Dir.fullpath(), statfile)
#      self.Dir=Directory(maindir=self.maindir,simdir=self.subdir)
#      self.statistics=Statistics(self.Dir.fullpath(), statfile)
      self.Comment=FileContent(os.path.join(self.Dir.fullpath(),".comment"))
      pid=self.getPID()
      status=self.getStatus()
      if(self.statistics.fileOK):
         ETA=str(datetime.timedelta(microseconds=(int(self.tape.config['iterations'])-int(self.statistics.last))*self.statistics.dT)*1000000)
      if(self.Statistics.fileOK):
         ETA=str(datetime.timedelta(microseconds=(int(self.tape.config['iterations'])-int(self.Statistics.last))*self.Statistics.dT)*1000000)
      if(status==TS_NONEXISTANT or status==TS_NOLOCK):
         statustxt="Not running"
         pid=""
@@ -475,25 +492,29 @@
      else:
         statustxt="Running"
      if(self.statistics.fileOK):
         report=[time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(int(self.statistics.startDate))),ETA, statustxt, pid, str(self.Dir.fullpath()), self.Comment.getText()]
      if(self.Statistics.fileOK):
         report=[time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(int(self.Statistics.startDate))),ETA, statustxt, pid, str(self.Dir.fullpath()), self.Comment.getText()]
      else:
         report=["N/A","N/A",statustxt, pid, str(self.Dir.fullpath()), self.Comment.getText()]
      return report
   def stop(self):
      p=psutil.Process(self.getPID())
      p.kill()
      try:
         p=psutil.Process(self.getPID())
         p.kill()
      except:
         print("Could not stop the process. Is the process running? Do you have sufficient privileges?")
   def writeComment(self, data, mode='w'):
      self.Dir=Directory(maindir=self.maindir,simdir=self.subdir)
#      self.Dir=Directory(maindir=self.maindir,simdir=self.subdir)
      self.Comment=FileContent(os.path.join(self.Dir.fullpath(),".comment"))
      self.Comment.writefile(data,mode=mode)
   def getLastVTU(self):
      vtuidx=self.getLastIteration()
      vtuidx=self.getLastIteration()-int(self.tape.getValue("inititer"))
      if vtuidx<0:
         return None
      else: