breakout25.py 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. """
  4. Created on Tue Apr 28 15:13:51 2020
  5. @author: joe
  6. """
  7. import math
  8. import numpy as np
  9. jointpairs = [[1, 0], [1, 2], [2, 3], [3, 4], [1, 5], [5, 6], [6, 7], [1, 8], [8, 9], [9, 10], [10, 11], [8, 12],
  10. [12, 13], [13, 14], [0, 15], [0, 16] \
  11. , [15, 17], [16, 18], [11, 24], [11, 22], [14, 21], [14, 19], [22, 23], [19, 20]]
  12. # [[1,0], [1,2], [2,3], [3,4], [1,5], [5,6], [6,7], [1,8], [8,9], [9,10],[10,11], [8,12],[12,13], [13,14], [0,15], [0,16]]
  13. # [[30, 31],[14, 15],[16, 17],[18, 19],[22, 23],[24, 25],[26, 27],[0, 1],[6, 7],[2, 3],[4, 5], [8, 9],[10, 11],[12, 13],[32, 33],[34, 35]]
  14. # [[15,17],[16,18],[11,24],[11,22],[14,21],[14,19],[22,23],[19,20]]
  15. # [[36,37],[38,39],[50,51],[46,47],[44,45],[40,41],[48,49],[42,43]]
  16. map25 = [[i, i + 1] for i in range(0, 52, 2)]
  17. def findoutmappair(all_peaks, paf):
  18. mid_num = 10
  19. pairmap = []
  20. for pair in jointpairs:
  21. candA = all_peaks[pair[0]]
  22. candB = all_peaks[pair[1]]
  23. if len(candA) == 0 or len(candB) == 0:
  24. pairmap.append([])
  25. continue
  26. candA = candA[0]
  27. candB = candB[0]
  28. startend = list(zip(np.linspace(candA[0], candB[0], num=mid_num), \
  29. np.linspace(candA[1], candB[1], num=mid_num)))
  30. vec = np.subtract(candB[:2], candA[:2])
  31. norm = math.sqrt(vec[0] * vec[0] + vec[1] * vec[1])
  32. vec = np.divide(vec, norm)
  33. score = 0.
  34. tmp = []
  35. for mp in map25:
  36. score_mid = paf[:, :, [mp[0], mp[1]]]
  37. vec_x = np.array([score_mid[int(round(startend[I][1])), int(round(startend[I][0])), 0] \
  38. for I in range(len(startend))])
  39. vec_y = np.array([score_mid[int(round(startend[I][1])), int(round(startend[I][0])), 1] \
  40. for I in range(len(startend))])
  41. score_midpts = np.multiply(vec_x, vec[0]) + np.multiply(vec_y, vec[1])
  42. score_midpts = score_midpts.sum()
  43. if score < score_midpts:
  44. score = score_midpts
  45. tmp = mp
  46. if score > 0.5:
  47. pairmap.append(tmp + [score, ])
  48. else:
  49. pairmap.append([])
  50. return pairmap