12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- import numpy as np
- def build_tgt_matrix(tl, aeps_events, tgt_dur):
- # compute timeline / AEP indices of entrances / exist to the target
- tl_tgt_start_idxs = [] # timeline indices of entrance in target
- tl_tgt_end_idxs = [] # timeline indices of exit from target
- for i in range(len(tl) - 1):
- if tl[i][6] < 2 and tl[i+1][6] == 2:
- tl_tgt_start_idxs.append(i + 1)
- if tl[i][6] == 2 and tl[i+1][6] < 2:
- tl_tgt_end_idxs.append(i)
- # ignore first/last target if not ended
- if tl_tgt_start_idxs[-1] > tl_tgt_end_idxs[-1]:
- tl_tgt_start_idxs = tl_tgt_start_idxs[:-1]
- if tl_tgt_end_idxs[0] < tl_tgt_start_idxs[0]:
- tl_tgt_end_idxs = tl_tgt_end_idxs[1:]
- tl_tgt_start_idxs = np.array(tl_tgt_start_idxs)
- tl_tgt_end_idxs = np.array(tl_tgt_end_idxs)
- aeps_tgt_start_idxs = [] # indices of first AEPs in target
- aeps_tgt_end_idxs = [] # indices of last AEPs in target
- for idx in tl_tgt_start_idxs:
- aeps_tgt_start_idxs.append(np.abs(aeps_events[:, 0] - tl[idx][0]).argmin())
- for idx in tl_tgt_end_idxs:
- aeps_tgt_end_idxs.append(np.abs(aeps_events[:, 0] - tl[idx][0]).argmin())
- aeps_tgt_start_idxs = np.array(aeps_tgt_start_idxs)
- aeps_tgt_end_idxs = np.array(aeps_tgt_end_idxs)
- # successful / missed
- tgt_results = np.zeros(len(tl_tgt_start_idxs))
- succ_idxs = np.where((tl_tgt_end_idxs - tl_tgt_start_idxs > tgt_dur * 100 - 10) & \
- (tl_tgt_end_idxs - tl_tgt_start_idxs < tgt_dur * 100 + 10))[0]
- tgt_results[succ_idxs] = 1
- # tl_idx_start, tl_idx_end, aep_idx_start, aer_idx_end, success / miss
- return np.column_stack([
- tl_tgt_start_idxs,
- tl_tgt_end_idxs,
- aeps_tgt_start_idxs,
- aeps_tgt_end_idxs,
- tgt_results
- ]).astype(np.int32)
|