ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/OpenMD/trunk/validation/comp_md.py
(Generate patch)

Comparing branches/development/validation/comp_md.py (file contents):
Revision 1659 by chuckv, Thu Nov 3 13:16:29 2011 UTC vs.
Revision 1662 by chuckv, Mon Nov 7 16:30:29 2011 UTC

# Line 3 | Line 3 | import subprocess
3   import logging
4   import os
5   import subprocess
6 + import logging
7  
8   fraw_list = []#List of all .md files found (even the includes).
9   fmd_list = []#List of all config .md files that can be run (not the includes).
# Line 12 | Line 13 | dir_base = ""#Directory where the script is run from.
13   dir_openmd = ""#Absolute path for openmd
14   dir_base = ""#Directory where the script is run from.
15  
16 + FORMAT = '%(asctime)-15s %(message)s'
17 + logging.basicConfig(format=FORMAT)
18 +
19   """
20   Function sets up the dir_base and dir_openmd. If an openmd executable is not
21   found, script exits. Function looks for the openmd in the relative location
# Line 20 | Line 24 | def setupDirectories():
24   """
25   def setupDirectories():
26          global dir_base, dir_openmd, dir_cwd
27 +        logger = logging.getLogger("tcpserver")
28          dir_base = os.getcwd()
29          if(os.path.isfile("../build/bin/openmd")):
30 <                os.chdir("../build/bin/")
31 <                dir_openmd = os.getcwd()
32 <                os.chdir(dir_base)
30 >                dir_openmd = os.path.abspath("../build/bin/openmd")
31 >        elif(os.path.isfile("../bin/openmd")):
32 >                dir_openmd = os.path.abspath("../bin/openmd")
33          else:
34 <                print "OpenMD executable not found."
34 >                logger.error("OpenMD : %s", "openmd executable not found at the expected location. Script Will Quit...")
35                  sys.exit()
36 +        forcefld_path = os.path.abspath("../forceFields")
37 +        os.environ["FORCE_PARAM_PATH"] = forcefld_path
38          
32        
39   """
40   Function checks if the sample_file and validate_file (.md files) have the same
41   statusTime = interval time for the stats file.
# Line 45 | Line 51 | def validate_md_time(sample_file, validate_file):
51    validate_status_time = 0
52    validate_sample_time = 0
53    validate_run_time = 0
54 <  
54 >  logger = logging.getLogger("tcpserver")
55 >
56    samplefh = open(sample_file, "r")
57    validatefh = open(validate_file, "r")
58    
# Line 86 | Line 93 | def validate_md_time(sample_file, validate_file):
93    if (sample_status_time > 0) or (validate_status_time > 0):
94      if sample_status_time == validate_status_time:
95        return True
89    else:
90      return False
96  
97    if (sample_sample_time > 0) or (validate_sample_time > 0):
98      if sample_sample_time == validate_sample_time:
99        return True
95    else:
96      return False
100  
101    if (sample_run_time > 0) or (validate_run_time > 0):
102      if sample_run_time == validate_run_time:
103        return True
101    else:
102      return False
104  
105 +  logger.warning("MD File: %s", "Sample/Validation times do not match.")
106    return False
107    
108   """
# Line 136 | Line 138 | Function compares two files.
138   """
139   Function compares two files.
140   @author Samuel Njoroge and ().
141 < @param string fExpected - name of the expected file.
142 < @param string fNew - name of the new test file.
141 > @param string fExpected - name of the validation file.
142 > @param string fNew - name of the file to validate.
143   @param float epsilon - Precision of the comparison of the files.
144   @param boolean ignore_sign - if sign will be a factor in comparing the digits.
145   @return boolean
146   """
147   def compare(fExpected, fNew, epsilon = 0.00001, ignore_sign=False):
148 +        logger = logging.getLogger("tcpserver")
149          fone = open(fExpected, 'r')
150          ftwo = open(fNew, 'r')
151  
# Line 162 | Line 165 | def compare(fExpected, fNew, epsilon = 0.00001, ignore
165  
166                  if lenone != lentwo:
167                          diffs = diffs + 1
168 <                        print "Line " + str(i) + " do not match in the files."
168 >                        logger.warning("Line: %d - %s", i, "no mach")
169                          return True
170                  else:
171                          for j in range(lenone):
# Line 219 | Line 222 | def runMdFiles():
222   @author Samuel Njoroge
223   """
224   def runMdFiles():
225 +        logger = logging.getLogger("tcpserver")
226          global dir_base, dir_openmd, dir_cwd
227          output = []
228          for x in range(0, len(fmd_list)):
225                #subprocess.call(["export FORCE_PARAM_PATH=/Users/snjoroge/Documents/openmd/development/forceFields"])
229                  if "argon" in fmd_list[x]:
230 <                        print "Switching to Directory: " + os.path.dirname(fmd_list[x])
230 >                        logger.debug("Switching to Directory: %s", os.path.dirname(fmd_list[x]))
231                          os.chdir(os.path.dirname(fmd_list[x]))
232 <                        print "Running file: " + fmd_list[x]
232 >                        logger.debug("Running: %s", fmd_list[x])
233                          output = subprocess.call([dir_openmd + "/openmd", fmd_list[x]])
234 <                        if(os.path.exists(os.path.dirname(fmd_list[x]) + "/" + fmd_base_list[x] + ".stat")):
234 >                        if(os.path.exists(os.path.dirname(fmd_list[x]) + "/" + fmd_base_list[x] + ".stat") and os.path.exists(os.path.dirname(fmd_list[x]) + "/" + fmd_base_list[x] + "_v.stat")):
235                                  #print "Renaming File: " + fmd_base_list[x] + ".stat - " + fmd_base_list[x] + "_v.stat"
236                                  #subprocess.call(["cp", os.path.dirname(fmd_list[x]) + "/" + fmd_base_list[x] + ".stat", os.path.dirname(fmd_list[x]) + "/" + fmd_base_list[x] + "_v.stat"])
237 <                                print "Comparing: " + fmd_base_list[x] + ".stat <=> " + fmd_base_list[x] + "_v.stat"
238 <                                if(compare(os.path.dirname(fmd_list[x]) + "/" + fmd_base_list[x] + ".stat", os.path.dirname(fmd_list[x]) + "/" + fmd_base_list[x] + "_v.stat")):
239 <                                        print "Files Do not match."
237 >                                logger.debug("Comparing: %s", "Comparing: " + fmd_base_list[x] + ".stat <=> " + fmd_base_list[x] + "_v.stat")
238 >                                if(compare(os.path.dirname(fmd_list[x]) + "/" + fmd_base_list[x] + ".stat", os.path.dirname(fmd_list[x]) + "/" + fmd_base_list[x] + "_v.stat")):
239 >                                        logger.warning("Files: Files do not match.")
240                                  else:
241 <                                        print "Files match."
241 >                                        logger.debug("Files Match")
242 >                        else:
243 >                                logger.warning("Stat Files: one of the files was not found: %s \n %s", os.path.dirname(fmd_list[x]) + "/" + fmd_base_list[x] + ".stat", os.path.dirname(fmd_list[x]) + "/" + fmd_base_list[x] + "_v.stat")
244 >                                
245 >                        if(os.path.exists(os.path.dirname(fmd_list[x]) + "/" + fmd_base_list[x] + ".eor") and os.path.exists(os.path.dirname(fmd_list[x]) + "/" + fmd_base_list[x] + "_v.eor")):
246 >                                #print "Renaming File: " + fmd_base_list[x] + ".stat - " + fmd_base_list[x] + "_v.stat"
247 >                                #subprocess.call(["cp", os.path.dirname(fmd_list[x]) + "/" + fmd_base_list[x] + ".stat", os.path.dirname(fmd_list[x]) + "/" + fmd_base_list[x] + "_v.stat"])
248 >                                logger.debug("Comparing: %s", "Comparing: " + fmd_base_list[x] + ".eor <=> " + fmd_base_list[x] + "_v.eor")
249 >                                if(compare(os.path.dirname(fmd_list[x]) + "/" + fmd_base_list[x] + ".eor", os.path.dirname(fmd_list[x]) + "/" + fmd_base_list[x] + "_v.eor")):
250 >                                        logger.warning("Files: Files do not match.")
251 >                                else:
252 >                                        logger.debug("Files Match")
253 >                        else:
254 >                                logger.warning("Eor Files: one of the files was not found: %s \n %s", os.path.dirname(fmd_list[x]) + "/" + fmd_base_list[x] + ".eor", os.path.dirname(fmd_list[x]) + "/" + fmd_base_list[x] + "_v.eor")
255                  os.chdir(dir_base)
256  
257   def cleanUp():
258 <        print "delete all files generated so not to commit"
258 >        print "Delete all files generated."
259          for x in range(0, len(fmd_list)):
260 <                print "DELETE:" + os.path.dirname(fmd_list[x]) + "/" + fmd_base_list[x] + ".eor"
261 <                os.remove(os.path.dirname(fmd_list[x]) + "/" + fmd_base_list[x] + ".eor")
262 <                print "DELETE:" + os.path.dirname(fmd_list[x]) + "/" + fmd_base_list[x] + ".stat"
263 <                os.remove(os.path.dirname(fmd_list[x]) + "/" + fmd_base_list[x] + ".stat")
264 <                print "DELETE:" + os.path.dirname(fmd_list[x]) + "/" + fmd_base_list[x] + ".dump"
265 <                os.remove(os.path.dirname(fmd_list[x]) + "/" + fmd_base_list[x] + ".dump")
260 >                if(os.path.exists(os.path.dirname(fmd_list[x]) + "/" + fmd_base_list[x] + ".eor")):
261 >                        print "DELETE:" + os.path.dirname(fmd_list[x]) + "/" + fmd_base_list[x] + ".eor"
262 >                        os.remove(os.path.dirname(fmd_list[x]) + "/" + fmd_base_list[x] + ".eor")
263 >                if(os.path.exists(os.path.dirname(fmd_list[x]) + "/" + fmd_base_list[x] + ".stat")):
264 >                        print "DELETE:" + os.path.dirname(fmd_list[x]) + "/" + fmd_base_list[x] + ".stat"
265 >                        os.remove(os.path.dirname(fmd_list[x]) + "/" + fmd_base_list[x] + ".stat")
266 >                if(os.path.exists(os.path.dirname(fmd_list[x]) + "/" + fmd_base_list[x] + ".dump")):
267 >                        print "DELETE:" + os.path.dirname(fmd_list[x]) + "/" + fmd_base_list[x] + ".dump"
268 >                        os.remove(os.path.dirname(fmd_list[x]) + "/" + fmd_base_list[x] + ".dump")
269 >
270 > """
271 > Function compares .eor files. It compares sections <StuntDoubles> for position and section <FrameData> for time.
272 > @author Samuel Njoroge and Dr. Charles Vardeman
273 > @param string file_validate - name of the validation file.
274 > @param string file_validate - name of the file to validate.
275 > @param float epsilon - Precision of the comparison of the files.
276 > @param boolean ignore_sign - if sign will be a factor in comparing the digits.
277 > @return boolean
278 > """
279 > def compareEor(file_validate, file_new, epsilon = 0.00001, ignore_sign=False):
280 >        logger = logging.getLogger("tcpserver")
281 >        handlerv = open(file_validate, 'r')#Validate file handler.
282 >        handlern = open(file_new, 'r')#New file handler.
283          
284 +        #Variables.
285 +        indexv = indexn = 0
286 +        xv = xn = 0.0
287 +        yv = yn = 0.0
288 +        zv = zn = 0.0
289 +        
290 +        #Read first line.
291 +        linev = handlerv.readline()
292 +        linen = handlern.readline()
293 +        
294 +        while linev:
295 +                if '<StuntDoubles>' in linev:
296 +                        linev = handlerv.readline()
297 +                        linen = handlern.readline()
298 +                        while 2:
299 +                                Lv = linev.split()
300 +                                Ln = linen.split()
301 +                                
302 +                                #If any of these fail, then the files do not match line by line.
303 +                                try:
304 +                                        indexv = int(Lv[0])
305 +                                        indexn = int(Ln[0])
306 +                                        xv = float(Lv[2])
307 +                                        yv = float(Lv[3])
308 +                                        zv = float(Lv[4])
309 +                                        xn = float(Ln[2])
310 +                                        yn = float(Ln[3])
311 +                                        zn = float(Ln[4])
312 +                                except:
313 +                                        logger.warning("Format: files do not follow the same format \n '%s' \n '%s'", linev.strip(), linen.strip())
314 +                                        return True
315 +                                
316 +                                if indexv != indexn:
317 +                                        logger.warning("Indexes do not match: %d | %d", indexv, indexn)
318 +                                        
319 +                                fediff = absDiff(xv, xn, ignore_sign)
320 +                                if fediff > epsilon:
321 +                                        logger.warning("Line: position x on index %d do not match", indexv)
322 +                                        return True
323 +                                
324 +                                fediff = absDiff(yv, yn, ignore_sign)
325 +                                if fediff > epsilon:
326 +                                        logger.warning("Line: position y on index %d do not match", indexv)
327 +                                        return True
328 +                                
329 +                                fediff = absDiff(zv, zn, ignore_sign)
330 +                                if fediff > epsilon:
331 +                                        logger.warning("Line: position z on index %d do not match", indexv)
332 +                                        return True
333 +                                
334 +                                linev = handlerv.readline()
335 +                                linen = handlern.readline()
336 +                                
337 +                                if '</StuntDoubles>' in linev:
338 +                                        break
339 +                elif '<FrameData>' in linev:
340 +        
341 +                        linev = handlerv.readline()
342 +                        linen = handlern.readline()
343 +                        
344 +                        while 1:
345 +                                if 'Time' in linev:
346 +                                        Ltv = linev.split(':')
347 +                                        Ltn = linen.split(':')
348 +                                        
349 +                                        if int(Ltv[1]) != int(Ltn[1]):
350 +                                                logger.warning("Time: FrameData time does not match.")
351 +                                                return True
352 +                                elif '</FrameData>' in linev:
353 +                                        break
354 +                                linev = handlerv.readline()
355 +                                linen = handlern.readline()
356 +                        
357 +                linev = handlerv.readline()
358 +                linen = handlern.readline()
359 +        return False
360 +        

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines