Example #1
0
    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)
Example #2
0
    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")
Example #3
0
    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")
Example #4
0
    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))