def twoPF_FP1left_FP2right(cls): MAIN_PATH = pyCGM2.TEST_DATA_PATH + "operations\\forceplates\\FootAssignementAutoamticGeneralEvent\\" # --- Motion 1 gaitFilename = "MRI-US-01, 2008-08-08, 3DGA 13.c3d" acqGait = btkTools.smartReader(str(MAIN_PATH + gaitFilename)) #forceplates.appendForcePlateCornerAsMarker(acqGait) mappedForcePlate = forceplates.matchingFootSideOnForceplate(acqGait) forceplates.addForcePlateGeneralEvents(acqGait, "LR") btkTools.smartWriter(acqGait, str(MAIN_PATH + "twoPF_FP1left_FP2right.c3d")) modelledFilenames = ["twoPF_FP1left_FP2right.c3d"] #---- GAIT CYCLES FILTER PRELIMARIES #-------------------------------------------------------------------------- # distinguishing trials for kinematic and kinetic processing # - kinematic Trials kinematicTrials = [] kinematicFilenames = [] for kinematicFilename in modelledFilenames: kinematicFileNode = ma.io.read(str(MAIN_PATH + kinematicFilename)) kinematicTrial = kinematicFileNode.findChild(ma.T_Trial) trialTools.sortedEvents(kinematicTrial) longitudinalAxis, forwardProgression, globalFrame = trialTools.findProgression( kinematicTrial, "LHEE") kinematicTrials.append(kinematicTrial) kinematicFilenames.append(kinematicFilename) # - kinetic Trials ( check if kinetic events) kineticTrials, kineticFilenames, flag_kinetics = trialTools.automaticKineticDetection( MAIN_PATH, modelledFilenames) #---- GAIT CYCLES FILTER #-------------------------------------------------------------------------- cycleBuilder = cycle.GaitCyclesBuilder( spatioTemporalTrials=kinematicTrials, kinematicTrials=kinematicTrials, kineticTrials=kineticTrials, emgTrials=None) cyclefilter = cycle.CyclesFilter() cyclefilter.setBuilder(cycleBuilder) cycles = cyclefilter.build() # TESTING np.testing.assert_equal(len(cycles.kineticCycles), 2) np.testing.assert_equal(cycles.kineticCycles[0].context, "Left") np.testing.assert_equal(cycles.kineticCycles[0].begin, 253) np.testing.assert_equal(cycles.kineticCycles[1].context, "Right") np.testing.assert_equal(cycles.kineticCycles[1].begin, 201)
def gaitTrialProgressionY_forward_lateralX(cls): """ """ MAIN_PATH = pyCGM2.TEST_DATA_PATH + "operations\\progression\\" gaitFilename = "gait_Y_forward.c3d" trial = trialTools.smartTrialReader(MAIN_PATH, gaitFilename) longitudinalAxis, forwardProgression, globalFrame = trialTools.findProgression( trial, "LPSI") np.testing.assert_equal(longitudinalAxis, "Y") np.testing.assert_equal(forwardProgression, True) np.testing.assert_equal(globalFrame, "YXZ") longitudinalAxisFoot, forwardProgressionFoot, globalFrameFoot = trialTools.findProgression( trial, "RHEE") np.testing.assert_equal(longitudinalAxis, "Y") np.testing.assert_equal(forwardProgression, True) np.testing.assert_equal(globalFrame, "YXZ")
def gaitTrialGarches(cls): """ """ MAIN_PATH = pyCGM2.TEST_DATA_PATH + "operations\\progression\\" gaitFilename="gait_garches_issue2.c3d" trial = trialTools.smartTrialReader(MAIN_PATH,gaitFilename) longitudinalAxis,forwardProgression,globalFrame = trialTools.findProgression(trial,"RHEE") np.testing.assert_equal( longitudinalAxis,"Y") np.testing.assert_equal( forwardProgression,False) np.testing.assert_equal( globalFrame,"YXZ")
def __computeSpatioTemporalParameter(self): duration = np.divide((self.end-self.begin),self.pointfrequency) stanceDuration=np.divide(np.abs(self.m_contraFO - self.begin) , self.pointfrequency) swingDuration=np.divide(np.abs(self.m_contraFO - self.end) , self.pointfrequency) stepDuration=np.divide(np.abs(self.m_oppositeFS - self.begin) , self.pointfrequency) pst = ma.Node("stp",self) pst.setProperty("duration", duration) pst.setProperty("cadence", np.divide(60.0,duration)) pst.setProperty("stanceDuration", stanceDuration) pst.setProperty("swingDuration", swingDuration) pst.setProperty("stepDuration", stepDuration) pst.setProperty("doubleStance1Duration", np.divide(np.abs(self.m_oppositeFO - self.begin) , self.pointfrequency)) pst.setProperty("doubleStance2Duration", np.divide(np.abs(self.m_contraFO - self.m_oppositeFS) , self.pointfrequency)) pst.setProperty("simpleStanceDuration", np.divide(np.abs(self.m_oppositeFO - self.m_oppositeFS) , self.pointfrequency)) pst.setProperty("stancePhase", round(np.divide(stanceDuration,duration)*100)) pst.setProperty("swingPhase", round(np.divide(swingDuration,duration)*100 )) pst.setProperty("doubleStance1", round(np.divide(np.divide(np.abs(self.m_oppositeFO - self.begin) , self.pointfrequency),duration)*100)) pst.setProperty("doubleStance2", round(np.divide(np.divide(np.abs(self.m_contraFO - self.m_oppositeFS) , self.pointfrequency),duration)*100)) pst.setProperty("simpleStance", round(np.divide(np.divide(np.abs(self.m_oppositeFO - self.m_oppositeFS) , self.pointfrequency),duration)*100)) pst.setProperty("stepPhase", round(np.divide(stepDuration,duration)*100)) #pst.setProperty("simpleStance3 ",15.0 ) if self.context == "Left": if trialTools.isTimeSequenceExist(self.trial,"LHEE") and trialTools.isTimeSequenceExist(self.trial,"RHEE") and trialTools.isTimeSequenceExist(self.trial,"LTOE"): progressionAxis,forwardProgression,globalFrame = trialTools.findProgression(self.trial,"LHEE") longitudinal_axis=0 if progressionAxis =="X" else 1 lateral_axis=1 if progressionAxis =="X" else 0 strideLength=np.abs(self.getPointTimeSequenceData("LHEE")[self.end-self.begin,longitudinal_axis] -\ self.getPointTimeSequenceData("LHEE")[0,longitudinal_axis])/1000.0 pst.setProperty("strideLength", strideLength) stepLength = np.abs(self.getPointTimeSequenceData("RHEE")[self.m_oppositeFS-self.begin,longitudinal_axis] -\ self.getPointTimeSequenceData("LHEE")[0,longitudinal_axis])/1000.0 pst.setProperty("stepLength", stepLength) strideWidth = np.abs(self.getPointTimeSequenceData("LTOE")[self.end-self.begin,lateral_axis] -\ self.getPointTimeSequenceData("RHEE")[0,lateral_axis])/1000.0 pst.setProperty("strideWidth", strideWidth) pst.setProperty("speed",np.divide(strideLength,duration)) if self.context == "Right": if trialTools.isTimeSequenceExist(self.trial,"RHEE") and trialTools.isTimeSequenceExist(self.trial,"LHEE") and trialTools.isTimeSequenceExist(self.trial,"RTOE"): progressionAxis,forwardProgression,globalFrame = trialTools.findProgression(self.trial,"RHEE") longitudinal_axis=0 if progressionAxis =="X" else 1 lateral_axis=1 if progressionAxis =="X" else 0 strideLength=np.abs(self.getPointTimeSequenceData("RHEE")[self.end-self.begin,longitudinal_axis] -\ self.getPointTimeSequenceData("RHEE")[0,longitudinal_axis])/1000.0 strideWidth = np.abs(self.getPointTimeSequenceData("RTOE")[self.end-self.begin,lateral_axis] -\ self.getPointTimeSequenceData("LHEE")[0,lateral_axis])/1000.0 pst.setProperty("strideLength", strideLength) pst.setProperty("strideWidth", strideWidth) stepLength = np.abs(self.getPointTimeSequenceData("RHEE")[self.m_oppositeFS-self.begin,longitudinal_axis] -\ self.getPointTimeSequenceData("LHEE")[0,longitudinal_axis])/1000.0 pst.setProperty("stepLength", stepLength) pst.setProperty("speed",np.divide(strideLength,duration))