Mercurial Hosting > traffic-intelligence
view python/storage.py @ 50:7b06d649122b
re-arrangement
author | Nicolas Saunier <nicolas.saunier@polymtl.ca> |
---|---|
date | Sat, 25 Sep 2010 11:36:37 -0400 |
parents | 8aed225f71d8 |
children | 575340e6fce3 |
line wrap: on
line source
#! /usr/bin/env python '''Various utilities to save and load data''' import utils import moving __metaclass__ = type ngsimUserTypes = {'twowheels':1, 'car':2, 'truck':3} def loadNgsimFile(filename, nObjects = -1, sequenceNum = -1): '''Reads data from the trajectory data provided by NGSIM project and returns the list of Feature objects''' objects = [] input = utils.openCheck(filename) if not input: import sys sys.exit() def createObject(numbers): firstFrameNum = int(numbers[1]) time = moving.TimeInterval(firstFrameNum, firstFrameNum+int(numbers[2])-1) obj = moving.MovingObject(num = int(numbers[0]), timeInterval = time) # do the geometry and usertype # firstFrameNum = int(numbers[1]) # lastFrameNum = firstFrameNum+int(numbers[2])-1 # f = Feature(sequenceNum, firstFrameNum, lastFrameNum, int(numbers[0])) # f.sizeLength = float(numbers[8]) # f.sizeWidth = float(numbers[9]) # f.userType = int(numbers[10]) # f.positions = [[float(numbers[6])],[float(numbers[7])]] # f.speeds = [float(numbers[11])] return obj numbers = input.readline().strip().split() if (len(numbers) > 0): obj = createObject(numbers) for line in input: numbers = line.strip().split() if obj.num != int(numbers[0]): # check and adapt the length to deal with issues in NGSIM data #objLength = f.length() #if (objLength != len(f.positions[0])): # print 'length pb with object %s (%d,%d)' % (f.num,objLength,len(f.positions[0])) # f.lastFrameNum = f.getFirstFrameNum()+len(f.positions[0])-1 #f.velocities = utils.computeVelocities(f.positions) # compare norm to speeds ? objects.append(obj) if (nObjects>0) and (len(objects)>=nObjects): break obj = createObject(numbers) else: print(numbers[6]) # f.positions[0] += [float(numbers[6])] # f.positions[1] += [float(numbers[7])] # f.speeds += [float(numbers[11])] # if (f.sizeWidth != float(numbers[9])): # print 'changed width obj %d' % (f.num) # if (f.sizeLength != float(numbers[8])): # print 'changed length obj %d' % (f.num) input.close() return objects def convertNgsimFile(inFile, outFile, append = False, nObjects = -1, sequenceNum = 0): '''Reads data from the trajectory data provided by NGSIM project and converts to our current format.''' if append: out = open(outFile,'a') else: out = open(outFile,'w') nObjectsPerType = [0,0,0] features = loadNgsimFile(inFile, sequenceNum) for f in features: nObjectsPerType[f.userType-1] += 1 f.write(out) print nObjectsPerType out.close() if __name__ == "__main__": import doctest import unittest suite = doctest.DocFileSuite('tests/ubc_utils.txt') unittest.TextTestRunner().run(suite) #doctest.testmod() #doctest.testfile("example.txt")