diff python/storage.py @ 780:1b22d81ef5ff dev

cleaned and checked storage with functions for curvilinear trajectories
author Nicolas Saunier <nicolas.saunier@polymtl.ca>
date Mon, 08 Feb 2016 12:24:26 -0500
parents bd684e57c431
children f1040d739bbf
line wrap: on
line diff
--- a/python/storage.py	Mon Feb 08 12:07:47 2016 -0500
+++ b/python/storage.py	Mon Feb 08 12:24:26 2016 -0500
@@ -255,10 +255,10 @@
     connection.close()
     return objects
 
-def loadCurvilinearTrajectoriesFromSqlite(filename, objects, objectNumbers = None):
-    '''load alignement curvilinear positions (s_coordinate, y_coordinate, lane)
-    from an object database to an existing MovingObject list'''
-    connection = sqlite3.connect(inputFilename)
+def addCurvilinearTrajectoriesFromSqlite(filename, objects):
+    '''Adds curvilinear positions (s_coordinate, y_coordinate, lane)
+    from a database to an existing MovingObject dict (indexed by each objects's num)'''
+    connection = sqlite3.connect(filename)
     cursor = connection.cursor()
 
     try:
@@ -271,17 +271,16 @@
     for row in cursor:
         if objNum != row[0]:
             objNum = row[0]
-            objects[objNum].curvilinearPositions = moving.CurvilinearPositions()
-        else:
-            objects[objNum].curvilinearPositions.addPositionsSYL(row[2],row[3],row[4])
-
-    return objects 
+            objects[objNum].curvilinearPositions = moving.CurvilinearTrajectory()
+        objects[objNum].curvilinearPositions.addPositionSYL(row[2],row[3],row[4])
 
 def saveTrajectoriesToSqlite(outputFilename, objects, trajectoryType, withFeatures = False):
     '''Writes features, ie the trajectories positions (and velocities if exist)
     with their instants to a specified sqlite file
+    Either feature positions (and velocities if they exist)
+    or curvilinear positions will be saved at a time
 
-    TODO: Not implemented for other trajectoryType than features
+    TODO: Not implemented for trajectoryType MovingObject with features
     For objects, with features will control whether the features
     corresponding to the object are also saved'''
 
@@ -289,15 +288,12 @@
     try:
         cursor = connection.cursor()
 
-        if trajectoryType in ['feature', 'curvilinear']:
+        if trajectoryType == 'feature':
             cursor.execute("CREATE TABLE IF NOT EXISTS positions (trajectory_id INTEGER, frame_number INTEGER, x_coordinate REAL, y_coordinate REAL, PRIMARY KEY(trajectory_id, frame_number))")
             cursor.execute("CREATE TABLE IF NOT EXISTS velocities (trajectory_id INTEGER, frame_number INTEGER, x_coordinate REAL, y_coordinate REAL, PRIMARY KEY(trajectory_id, frame_number))")
-            if trajectoryType == 'curvilinear':
-                cursor.execute("CREATE TABLE IF NOT EXISTS curvilinear_positions (trajectory_id INTEGER, frame_number INTEGER, s_coordinate REAL, y_coordinate REAL, lane TEXT, PRIMARY KEY(trajectory_id, frame_number))")
 
             positionQuery = "insert into positions (trajectory_id, frame_number, x_coordinate, y_coordinate) values (?,?,?,?)"
             velocityQuery = "insert into velocities (trajectory_id, frame_number, x_coordinate, y_coordinate) values (?,?,?,?)"
-            curvilinearQuery = "insert into curvilinear_positions (trajectory_id, frame_number, x_coordinate, y_coordinate) values (?,?,?,?)"
             for obj in objects:
                 num = obj.getNum()
                 frame_number = obj.getFirstInstant()
@@ -312,16 +308,19 @@
                         v = velocities[i]
                         cursor.execute(velocityQuery, (num, frame_number, v.x, v.y))
                         frame_number += 1
-                # curvilinear trajectories
-                if trajectoryType == 'curvilinear' and hasattr(obj, 'curvilinearPositions') is not None:
-                    frame_number = obj.getFirstInstant()
-                    for position in obj.getCurvilinearPositions():
-                        cursor.execute(curvilinearQuery, (num, frame_number, position[0], position[1], position[2]))
-                        frame_number += 1
-            connection.commit()
+        elif trajectoryType == 'curvilinear':
+            cursor.execute("CREATE TABLE IF NOT EXISTS curvilinear_positions (trajectory_id INTEGER, frame_number INTEGER, s_coordinate REAL, y_coordinate REAL, lane TEXT, PRIMARY KEY(trajectory_id, frame_number))")
+            curvilinearQuery = "insert into curvilinear_positions (trajectory_id, frame_number, s_coordinate, y_coordinate, lane) values (?,?,?,?,?)"
+            for obj in objects:
+                num = obj.getNum()
+                frame_number = obj.getFirstInstant()
+                for position in obj.getCurvilinearPositions():
+                    cursor.execute(curvilinearQuery, (num, frame_number, position[0], position[1], position[2]))
+                    frame_number += 1
         #elif trajectoryType == 'object':
         else:
             print('Unknown trajectory type {}'.format(trajectoryType))
+        connection.commit()
     except sqlite3.OperationalError as error:
         printDBError(error)
     connection.close()