def loadInteractions(filename, nInteractions = -1):
    'Loads interactions from the old UBC traffic event format'
    from events import Interaction 
    from indicators import SeverityIndicator
    file = storage.openCheck(filename)
    if (not file):
        return []

    interactions = []
    interactionNum = 0
    lines = storage.getLines(file)
    while (lines != []) and ((nInteractions<0) or (interactionNum<nInteractions)):
        parsedLine = [int(n) for n in lines[0].split(' ')]
        inter = Interaction(interactionNum, TimeInterval(parsedLine[1],parsedLine[2]), parsedLine[3], parsedLine[4], categoryNum = parsedLine[5])
        
        indicatorFrameNums = [int(n) for n in lines[1].split(' ')]
        for indicatorNum,line in enumerate(lines[2:]):
            values = {}
            for i,v in enumerate([float(n) for n in line.split(' ')]):
                if not ignoredValue[indicatorNum] or v != ignoredValue[indicatorNum]:
                    values[indicatorFrameNums[i]] = v
            inter.addIndicator(SeverityIndicator(severityIndicatorNames[indicatorNum], values, None, mostSevereIsMax[indicatorNum]))

        interactions.append(inter)
        interactionNum+=1
        lines = storage.getLines(file)

    file.close()
    return interactions
def loadNewInteractions(videoFilename,
                        interactionType,
                        dirname,
                        extension,
                        indicatorsNames,
                        roaduserNum1,
                        roaduserNum2,
                        selectedIndicators=[]):
    """
    Loads interactions from the POLY traffic event format
    Args:
        videoFilename (str): Name of video file, excluding extension and absolute location (i.e., name only).
        interactionType (:
        dirname:
        extension:
        indicatorsNames:
        roaduserNum1:
        roaduserNum2:
        selectedIndicators:

    Returns:

    """
    from events import Interaction
    filename = dirname + videoFilename + extension
    # filename= dirname + interactionType+ '-' + videoFilename + extension #
    # case of min distance todo: change the saving format to be matched with
    # all outputs
    file = utils.openCheck(filename)
    if (not file):
        return []
    # interactions = []
    interactionNum = 0
    data = np.loadtxt(filename)
    indicatorFrameNums = data[:, 0]
    inter = Interaction(
        interactionNum,
        TimeInterval(indicatorFrameNums[0], indicatorFrameNums[-1]),
        roaduserNum1, roaduserNum2)
    inter.addVideoFilename(videoFilename)
    inter.addInteractionType(interactionType)
    for key in indicatorsNames.keys():
        values = {}
        for i, t in enumerate(indicatorFrameNums):
            values[t] = data[i, key]
        inter.addIndicator(SeverityIndicator(indicatorsNames[key], values))
    if selectedIndicators != []:
        values = {}
        for i, t in enumerate(indicatorFrameNums):
            values[t] = [data[i, index] for index in selectedIndicators]
        inter.addIndicator(SeverityIndicator('selectedIndicators', values))

    # interactions.append(inter)
    file.close()
    # return interactions
    return inter
def loadTrajectories(filename, nObjects=-1):
    '''Loads trajectories'''

    file = storage.openCheck(filename)
    if (not file):
        return []

    objects = []
    objNum = 0
    objectType = getFileType(filename)
    lines = storage.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.load(lines[1], lines[2])
            if len(lines) >= 5:
                obj.velocities = Trajectory.load(lines[3], lines[4])
                if objectType == 'object':
                    obj.userType = parsedLine[3]
                    obj.nObjects = float(l[4])
                    obj.featureNumbers = [int(n) for n in l[5:]]

                    # load contour data if available
                    if len(lines) >= 6:
                        obj.contourType = utils.line2Floats(lines[6])
                        obj.contourOrigins = Trajectory.load(
                            lines[7], lines[8])
                        obj.contourSizes = Trajectory.load(lines[9], lines[10])
                elif objectType == 'prototype':
                    obj.userType = parsedLine[3]
                    obj.nMatchings = int(l[4])

        if len(lines) != 2:
            objects.append(obj)
            objNum += 1
        else:
            print("Error two lines of data for feature %d" % (f.num))

        lines = storage.getLines(file)

    file.close()
    return objects
 def getTimeInterval(self):
     return TimeInterval(self.firstFrameNum, self.lastFrameNum)
 def intersection(self, startTime, endTime):
     'returns the moving.TimeInterval intersection with [startTime, endTime]'
     return TimeInterval.intersection(self.getTimeInterval(),
                                      TimeInterval(startTime, endTime))
 def getTimeInterval(self):
     return TimeInterval(self.startTime, self.startTime + self.duration)