Mercurial Hosting > traffic-intelligence
diff python/storage.py @ 0:aed8eb63cdde
initial commit with non-functional python code for NGSIM
author | Nicolas Saunier <nico@confins.net> |
---|---|
date | Sun, 18 Oct 2009 22:29:24 -0400 |
parents | |
children | ffddccfab7f9 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/python/storage.py Sun Oct 18 22:29:24 2009 -0400 @@ -0,0 +1,99 @@ +#! /usr/bin/env python +'''Various utilities to save and load data''' + +import utils; + +__metaclass__ = type + + + + + +def loadNgsimFile(filename, nObjects = -1, sequenceNum = -1): + '''Reads data from the trajectory data provided by NGSIM project + and returns the list of Feature objects''' + features = [] + + input = utils.open(filename) + if not input: + import sys + sys.exit() + + def createFeature(numbers): + 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 f + + numbers = input.readline().strip().split() + if (len(numbers) > 0): + f = createFeature(numbers) + + for line in input: + numbers = line.strip().split() + if f.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 ? + features.append(f) + if (nObjects>0) and (len(features)>=nObjects): + break + f = createFeature(numbers) + else: + 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 features + +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() + +# other functions +def getLines(f): + '''Gets a complete entry (all the lines) in between delimiterChar.''' + dataStrings = [] + s = utils.myreadline(f) + while (len(s) > 0) and (not s.startswith(delimiterChar)): + dataStrings += [s.strip()] + s = utils.myreadline(f) + return dataStrings + + + + +if __name__ == "__main__": + import doctest + import unittest + suite = doctest.DocFileSuite('tests/ubc_utils.txt') + unittest.TextTestRunner().run(suite) + #doctest.testmod() + #doctest.testfile("example.txt")