diff python/ubc_utils.py @ 13:30559b2cf7a9

minimal code to load UBC data
author Nicolas Saunier <nico@confins.net>
date Fri, 13 Nov 2009 19:29:01 -0500
parents
children 9d6831cfe675
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/python/ubc_utils.py	Fri Nov 13 19:29:01 2009 -0500
@@ -0,0 +1,52 @@
+#! /usr/bin/env python
+'''Various utilities to load data saved by the UBC tool(s)'''
+
+import utils
+from moving import MovingObject, TimeInterval, Trajectory
+
+__metaclass__ = type
+
+delimiterChar = '%';
+
+def getLines(f):
+    '''Gets a complete entry (all the lines) in between delimiterChar.'''
+    dataStrings = []
+    s = utils.readline(f)
+    while (len(s) > 0) and (not s.startswith(delimiterChar)):
+        dataStrings += [s.strip()]
+        s = utils.readline(f)
+    return dataStrings
+
+def loadTrajectories(filename, nObjects = -1):
+    '''Loads trajectories'''
+
+    file = utils.openCheck(filename)
+    if (not file):
+        return []
+
+    objects = []
+    objNum = 0
+    lines = getLines(file)
+    while (lines != []) and ((nObjects<0) or (objNum<nObjects)):
+        l = lines[0].split(' ')
+        parsedLine = [int(n) for n in l[:4]]
+        obj = MovingObject(num = objNum, timeInterval = TimeInterval(parsedLine[1],parsedLine[2]))
+        add = True
+        if (len(lines) >= 3):
+            obj.positions = Trajectory([[float(n) for n in lines[1].split(' ')],
+                                        [float(n) for n in lines[2].split(' ')]])
+            if (len(lines) >= 5):
+                obj.velocity = Trajectory([[float(n) for n in lines[3].split(' ')],
+                                           [float(n) for n in lines[4].split(' ')]])
+
+        if len(lines) != 2:
+            objects.append(obj)
+            objNum+=1
+        else:
+            print("Error two lines of data for feature %d"%(f.num))
+
+        lines = getLines(file)
+
+    file.close()
+    return objects
+