def z_angle(data=None, bone=None, method='quat'): if data is None: raise Exception("No data input") if method == 'quat': stuff = np.array(data[data_model.kin_bone_name(bone)]) return stuff.T[0]*stuff.T[0] - stuff.T[1]*stuff.T[1] - stuff.T[2]*stuff.T[2] + stuff.T[3]*stuff.T[3] else: # kin is using savitzky-golay and model params are just residual moduli for angle in ANGLES: if angle[1] == bone[0]: first_joint = np.array(data[angle[0]]) second_joint = np.array(data[angle[1]]) third_joint = np.array(data[angle[2]]) first_limb = first_joint - second_joint second_limb = third_joint - second_joint first_limb_normalized = normalize_rows(first_limb) second_limb_normalized = normalize_rows(second_limb) return np.clip(-1*np.sum((first_limb_normalized * second_limb_normalized), axis=-1), -1.0, 1.0)
def __init__(self, DM): for kind in ['kin', 'qual']: setattr(self, kind, HandlerObject()) for level in ['raw', 'smooth']: setattr(getattr(self, kind), level, dict()) d = getattr(getattr(self, kind), level) for bone in data_model.KIN_TREE: if kind is 'kin' or bone in data_model.BONE_MAPPING: if kind == 'kin' and DM.kin.smoothing == 'SG':# and bone != ('HipCenter', 'HipCenter'): method = 'joint' else: method = 'quat' handler = Handler(DM) # stuff = getattr(getattr(DM, kind).data, level)[data_model.kin_bone_name(bone)] handler.axis = AXES[kind] # TEMP: FOLLOWING ASSUMES ACTING ON Z AXIS WITH NORMALIZED QUATERION handler.raw_func = z_angle(data=getattr(getattr(DM, kind).data, level), bone=bone, method=method) handler.times = getattr(DM, kind).data.raw['Time'] handler.time_shift = 0 handler.vis_func = degreeify#basic_degreeify d[data_model.kin_bone_name(bone)] = handler