target.py 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. import numpy as np
  2. def build_tgt_matrix(tl, aeps_events, tgt_dur):
  3. # compute timeline / AEP indices of entrances / exist to the target
  4. tl_tgt_start_idxs = [] # timeline indices of entrance in target
  5. tl_tgt_end_idxs = [] # timeline indices of exit from target
  6. for i in range(len(tl) - 1):
  7. if tl[i][6] < 2 and tl[i+1][6] == 2:
  8. tl_tgt_start_idxs.append(i + 1)
  9. if tl[i][6] == 2 and tl[i+1][6] < 2:
  10. tl_tgt_end_idxs.append(i)
  11. # ignore first/last target if not ended
  12. if tl_tgt_start_idxs[-1] > tl_tgt_end_idxs[-1]:
  13. tl_tgt_start_idxs = tl_tgt_start_idxs[:-1]
  14. if tl_tgt_end_idxs[0] < tl_tgt_start_idxs[0]:
  15. tl_tgt_end_idxs = tl_tgt_end_idxs[1:]
  16. tl_tgt_start_idxs = np.array(tl_tgt_start_idxs)
  17. tl_tgt_end_idxs = np.array(tl_tgt_end_idxs)
  18. aeps_tgt_start_idxs = [] # indices of first AEPs in target
  19. aeps_tgt_end_idxs = [] # indices of last AEPs in target
  20. for idx in tl_tgt_start_idxs:
  21. aeps_tgt_start_idxs.append(np.abs(aeps_events[:, 0] - tl[idx][0]).argmin())
  22. for idx in tl_tgt_end_idxs:
  23. aeps_tgt_end_idxs.append(np.abs(aeps_events[:, 0] - tl[idx][0]).argmin())
  24. aeps_tgt_start_idxs = np.array(aeps_tgt_start_idxs)
  25. aeps_tgt_end_idxs = np.array(aeps_tgt_end_idxs)
  26. # successful / missed
  27. tgt_results = np.zeros(len(tl_tgt_start_idxs))
  28. succ_idxs = np.where((tl_tgt_end_idxs - tl_tgt_start_idxs > tgt_dur * 100 - 10) & \
  29. (tl_tgt_end_idxs - tl_tgt_start_idxs < tgt_dur * 100 + 10))[0]
  30. tgt_results[succ_idxs] = 1
  31. # tl_idx_start, tl_idx_end, aep_idx_start, aer_idx_end, success / miss
  32. return np.column_stack([
  33. tl_tgt_start_idxs,
  34. tl_tgt_end_idxs,
  35. aeps_tgt_start_idxs,
  36. aeps_tgt_end_idxs,
  37. tgt_results
  38. ]).astype(np.int32)