def _calibrateTechnicalSegment(self,aquiStatic, segName, dictRef,frameInit,frameEnd, options=None): segPicked=self.getSegment(segName) for tfName in dictRef[segName]: # TF name pt1=aquiStatic.GetPoint(str(dictRef[segName][tfName]['labels'][0])).GetValues()[frameInit:frameEnd,:].mean(axis=0) pt2=aquiStatic.GetPoint(str(dictRef[segName][tfName]['labels'][1])).GetValues()[frameInit:frameEnd,:].mean(axis=0) pt3=aquiStatic.GetPoint(str(dictRef[segName][tfName]['labels'][2])).GetValues()[frameInit:frameEnd,:].mean(axis=0) ptOrigin=aquiStatic.GetPoint(str(dictRef[segName][tfName]['labels'][3])).GetValues()[frameInit:frameEnd,:].mean(axis=0) a1=(pt2-pt1) a1=np.divide(a1,np.linalg.norm(a1)) v=(pt3-pt1) v=np.divide(v,np.linalg.norm(v)) a2=np.cross(a1,v) a2=np.divide(a2,np.linalg.norm(a2)) x,y,z,R=frame.setFrameData(a1,a2,dictRef[segName][tfName]['sequence']) segPicked.referentials[-1].static.m_axisX=x # work on the last TF in the list : thus index -1 segPicked.referentials[-1].static.m_axisY=y segPicked.referentials[-1].static.m_axisZ=z segPicked.referentials[-1].static.setRotation(R) segPicked.referentials[-1].static.setTranslation(ptOrigin) # - add Nodes in segmental static(technical)Frame - for label in segPicked.m_markerLabels: globalPosition=aquiStatic.GetPoint(str(label)).GetValues()[frameInit:frameEnd,:].mean(axis=0) segPicked.referentials[-1].static.addNode(label,globalPosition,positionType="Global")
def _calibrateAnatomicalSegment(self, aquiStatic, segName, dictAnatomic, frameInit, frameEnd, options=None): # calibration of technical Frames for segName in dictAnatomic: segPicked = self.getSegment(segName) tf = segPicked.getReferential("TF") nd1 = str(dictAnatomic[segName]['labels'][0]) pt1 = tf.static.getNode_byLabel(nd1).m_global nd2 = str(dictAnatomic[segName]['labels'][1]) pt2 = tf.static.getNode_byLabel(nd2).m_global nd3 = str(dictAnatomic[segName]['labels'][2]) pt3 = tf.static.getNode_byLabel(nd3).m_global ndO = str(dictAnatomic[segName]['labels'][3]) ptO = tf.static.getNode_byLabel(ndO).m_global a1 = (pt2 - pt1) a1 = np.divide(a1, np.linalg.norm(a1)) v = (pt3 - pt1) v = np.divide(v, np.linalg.norm(v)) a2 = np.cross(a1, v) a2 = np.divide(a2, np.linalg.norm(a2)) x, y, z, R = frame.setFrameData(a1, a2, dictAnatomic[segName]['sequence']) segPicked.anatomicalFrame.static.m_axisX = x # work on the last TF in the list : thus index -1 segPicked.anatomicalFrame.static.m_axisY = y segPicked.anatomicalFrame.static.m_axisZ = z segPicked.anatomicalFrame.static.setRotation(R) segPicked.anatomicalFrame.static.setTranslation(ptO) # --- relative rotation Technical Anatomical tf.setRelativeMatrixAnatomic( np.dot(tf.static.getRotation().T, segPicked.anatomicalFrame.static.getRotation())) # add tracking markers as node for label in segPicked.m_markerLabels: globalPosition = aquiStatic.GetPoint( str(label)).GetValues()[frameInit:frameEnd, :].mean(axis=0) segPicked.anatomicalFrame.static.addNode(label, globalPosition, positionType="Global")