view 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 source

#! /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