comparison python/events.py @ 706:e395bffe1412 dev

cleaned unused code (up to date in Paul St-Aubin PVC code)
author Nicolas Saunier <nicolas.saunier@polymtl.ca>
date Wed, 22 Jul 2015 14:15:33 -0400
parents 0ceee3b1a96d
children 4e89341edd29
comparison
equal deleted inserted replaced
705:0ceee3b1a96d 706:e395bffe1412
336 if any interaction indicator time series is different enough (<minSimilarity), 336 if any interaction indicator time series is different enough (<minSimilarity),
337 it will become a new prototype. 337 it will become a new prototype.
338 Non-prototype interactions will be assigned to an existing prototype if all indicators are similar enough''' 338 Non-prototype interactions will be assigned to an existing prototype if all indicators are similar enough'''
339 pass 339 pass
340 340
341 # TODO:
342 #http://stackoverflow.com/questions/3288595/multiprocessing-using-pool-map-on-a-function-defined-in-a-class
343 #http://www.rueckstiess.net/research/snippets/show/ca1d7d90
344 def calculateIndicatorPipe(pairs, predParam, timeHorizon=75,collisionDistanceThreshold=1.8):
345 collisionPoints, crossingZones = prediction.computeCrossingsCollisions(pairs.roadUser1, pairs.roadUser2, predParam, collisionDistanceThreshold, timeHorizon)
346 #print pairs.num
347 # Ignore empty collision points
348 empty = 1
349 for i in collisionPoints:
350 if(collisionPoints[i] != []):
351 empty = 0
352 if(empty == 1):
353 pairs.hasCP = 0
354 else:
355 pairs.hasCP = 1
356 pairs.CP = collisionPoints
357
358 # Ignore empty crossing zones
359 empty = 1
360 for i in crossingZones:
361 if(crossingZones[i] != []):
362 empty = 0
363 if(empty == 1):
364 pairs.hasCZ = 0
365 else:
366 pairs.hasCZ = 1
367 pairs.CZ = crossingZones
368 return pairs
369
370 def calculateIndicatorPipe_star(a_b):
371 """Convert `f([1,2])` to `f(1,2)` call."""
372 return calculateIndicatorPipe(*a_b)
373
374 class VehPairs():
375 '''Create a veh-pairs object from objects list'''
376 def __init__(self,objects):
377 self.pairs = createInteractions(objects)
378 self.interactionCount = 0
379 self.CPcount = 0
380 self.CZcount = 0
381
382 # Process indicator calculation with support for multi-threading
383 def calculateIndicators(self,predParam,threads=1,timeHorizon=75,collisionDistanceThreshold=1.8):
384 if(threads > 1):
385 pool = multiprocessing.Pool(threads)
386 self.pairs = pool.map(calculateIndicatorPipe_star, itertools.izip(self.pairs, itertools.repeat(predParam)))
387 pool.close()
388 else:
389 #prog = Tools.ProgressBar(0, len(self.pairs), 77) #Removed in traffic-intelligenc port
390 for j in xrange(len(self.pairs)):
391 #prog.updateAmount(j) #Removed in traffic-intelligenc port
392 collisionPoints, crossingZones = prediction.computeCrossingsCollisions(self.pairs[j].roadUser1, self.pairs[j].roadUser2, predParam, collisionDistanceThreshold, timeHorizon)
393
394 # Ignore empty collision points
395 empty = 1
396 for i in collisionPoints:
397 if(collisionPoints[i] != []):
398 empty = 0
399 if(empty == 1):
400 self.pairs[j].hasCP = 0
401 else:
402 self.pairs[j].hasCP = 1
403 self.pairs[j].CP = collisionPoints
404
405 # Ignore empty crossing zones
406 empty = 1
407 for i in crossingZones:
408 if(crossingZones[i] != []):
409 empty = 0
410 if(empty == 1):
411 self.pairs[j].hasCZ = 0
412 else:
413 self.pairs[j].hasCZ = 1
414 self.pairs[j].CZ = crossingZones
415
416 for j in self.pairs:
417 self.interactionCount = self.interactionCount + len(j.CP)
418 self.CPcount = len(self.getCPlist())
419 self.Czcount = len(self.getCZlist())
420
421
422 def getPairsWCP(self):
423 lists = []
424 for j in self.pairs:
425 if(j.hasCP):
426 lists.append(j.num)
427 return lists
428
429 def getPairsWCZ(self):
430 lists = []
431 for j in self.pairs:
432 if(j.hasCZ):
433 lists.append(j.num)
434 return lists
435
436 def getCPlist(self,indicatorThreshold=float('Inf')):
437 lists = []
438 for j in self.pairs:
439 if(j.hasCP):
440 for k in j.CP:
441 if(j.CP[k] != [] and j.CP[k][0].indicator < indicatorThreshold):
442 lists.append([k,j.CP[k][0]])
443 return lists
444
445 def getCZlist(self,indicatorThreshold=float('Inf')):
446 lists = []
447 for j in self.pairs:
448 if(j.hasCZ):
449 for k in j.CZ:
450 if(j.CZ[k] != [] and j.CZ[k][0].indicator < indicatorThreshold):
451 lists.append([k,j.CZ[k][0]])
452 return lists
453
454 def genIndicatorHistogram(self, CPlist=False, bins=range(0,100,1)):
455 if(not CPlist):
456 CPlist = self.getCPlist()
457 if(not CPlist):
458 return False
459 TTC_list = []
460 for i in CPlist:
461 TTC_list.append(i[1].indicator)
462 histo = np.histogram(TTC_list,bins=bins)
463 histo += (histo[0].astype(float)/np.sum(histo[0]),)
464 return histo
465 341
466 class Crossing(moving.STObject): 342 class Crossing(moving.STObject):
467 '''Class for the event of a street crossing 343 '''Class for the event of a street crossing
468 344
469 TODO: detecter passage sur la chaussee 345 TODO: detecter passage sur la chaussee