def getForceData(self, acq, frame, noFrames):
        pfe = btk.btkForcePlatformsExtractor()
        grwf = btk.btkGroundReactionWrenchFilter()
        pfe.SetInput(acq)
        pfc = pfe.GetOutput()
        grwf.SetInput(pfc)
        grwc = grwf.GetOutput()
        grwc.Update()

        for filename in self.fileNames:
            forceData = []
            acq = qtools.fileOpen(filename)

            for forceNumber in range(grwc.GetItemNumber()):
                forceData.append({
                    "id": forceNumber + 1,
                    "forceCount": 1,
                    "forcenumber": 2951,
                    "data": {
                        "force":
                        list(
                            self.resampleForceData(grwc, forceNumber, 0,
                                                   noFrames)[frame, :]),
                        "moment":
                        list(
                            self.resampleForceData(grwc, forceNumber, 1,
                                                   noFrames)[frame, :]),
                        "position":
                        list(
                            self.resampleForceData(grwc, forceNumber, 2,
                                                   noFrames)[frame, :])
                    }
                })
        return forceData
 def test_PluginC3D_Threshold50(self):
     reader = btk.btkAcquisitionFileReader()
     reader.SetFilename(_TDDConfigure.C3DFilePathIN +
                        "sample09/PlugInC3D.c3d")
     reader.Update()
     pfe = btk.btkForcePlatformsExtractor()
     grwf = btk.btkGroundReactionWrenchFilter()
     dswc = btk.btkWrenchCollectionDownsampleFilter()
     dswc.SetUpDownRatio(reader.GetOutput().GetNumberAnalogSamplePerFrame())
     pfe.SetInput(reader.GetOutput())
     grwf.SetInput(pfe.GetOutput())
     dswc.SetInput(grwf.GetOutput())
     vgrfged = btk.btkVerticalGroundReactionForceGaitEventDetector()
     vgrfged.SetInput(dswc.GetOutput())
     vgrfged.SetThresholdValue(50)
     vgrfged.SetForceplateContextMapping(["Right", "Left"])
     vgrfged.SetAcquisitionInformation(
         reader.GetOutput().GetFirstFrame(),
         reader.GetOutput().GetPointFrequency(), "")
     output = vgrfged.GetOutput()
     output.Update()
     self.assertEqual(output.GetItemNumber(), 4)
     ev = output.GetItem(0)
     self.assertEqual(ev.GetLabel(), "Foot Strike")
     self.assertEqual(ev.GetContext(), "Right")
     self.assertEqual(
         ev.GetDetectionFlags(),
         btk.btkEvent.Automatic | btk.btkEvent.FromForcePlatform)
     self.assertEqual(ev.GetId(), 1)
     self.assertEqual(ev.GetFrame(), 67)
     self.assertEqual(ev.GetTime(), 67.0 / 60.0)
     ev = output.GetItem(1)
     self.assertEqual(ev.GetLabel(), "Foot Off")
     self.assertEqual(ev.GetContext(), "Right")
     self.assertEqual(
         ev.GetDetectionFlags(),
         btk.btkEvent.Automatic | btk.btkEvent.FromForcePlatform)
     self.assertEqual(ev.GetId(), 2)
     self.assertEqual(ev.GetFrame(), 114)
     self.assertEqual(ev.GetTime(), 114.0 / 60.0)
     ev = output.GetItem(2)
     self.assertEqual(ev.GetLabel(), "Foot Strike")
     self.assertEqual(ev.GetContext(), "Left")
     self.assertEqual(
         ev.GetDetectionFlags(),
         btk.btkEvent.Automatic | btk.btkEvent.FromForcePlatform)
     self.assertEqual(ev.GetId(), 1)
     self.assertEqual(ev.GetFrame(), 109)
     self.assertEqual(ev.GetTime(), 109.0 / 60.0)
     ev = output.GetItem(3)
     self.assertEqual(ev.GetLabel(), "Foot Off")
     self.assertEqual(ev.GetContext(), "Left")
     self.assertEqual(
         ev.GetDetectionFlags(),
         btk.btkEvent.Automatic | btk.btkEvent.FromForcePlatform)
     self.assertEqual(ev.GetId(), 2)
     self.assertEqual(ev.GetFrame(), 148)
     self.assertEqual(ev.GetTime(), 148.0 / 60.0)
 def test_Gait_NoMapping(self):
     reader = btk.btkAcquisitionFileReader()
     reader.SetFilename(_TDDConfigure.C3DFilePathIN + "others/Gait.c3d")
     reader.Update()
     pfe = btk.btkForcePlatformsExtractor()
     grwf = btk.btkGroundReactionWrenchFilter()
     dswc = btk.btkWrenchCollectionDownsampleFilter()
     dswc.SetUpDownRatio(reader.GetOutput().GetNumberAnalogSamplePerFrame())
     pfe.SetInput(reader.GetOutput())
     grwf.SetInput(pfe.GetOutput())
     dswc.SetInput(grwf.GetOutput())
     vgrfged = btk.btkVerticalGroundReactionForceGaitEventDetector()
     vgrfged.SetInput(dswc.GetOutput())
     vgrfged.SetAcquisitionInformation(
         reader.GetOutput().GetFirstFrame(),
         reader.GetOutput().GetPointFrequency(), "")
     output = vgrfged.GetOutput()
     output.Update()
     self.assertEqual(output.GetItemNumber(), 4)
     ev = output.GetItem(0)
     self.assertEqual(ev.GetLabel(), "Foot Strike")
     self.assertEqual(ev.GetContext(), "General")
     self.assertEqual(
         ev.GetDetectionFlags(),
         btk.btkEvent.Automatic | btk.btkEvent.FromForcePlatform)
     self.assertEqual(ev.GetId(), 1)
     self.assertEqual(ev.GetFrame(), 257)
     self.assertEqual(ev.GetTime(), 2.57)
     ev = output.GetItem(1)
     self.assertEqual(ev.GetLabel(), "Foot Off")
     self.assertEqual(ev.GetContext(), "General")
     self.assertEqual(
         ev.GetDetectionFlags(),
         btk.btkEvent.Automatic | btk.btkEvent.FromForcePlatform)
     self.assertEqual(ev.GetId(), 2)
     self.assertEqual(ev.GetFrame(), 316)
     self.assertEqual(ev.GetTime(), 3.16)
     ev = output.GetItem(2)
     self.assertEqual(ev.GetLabel(), "Foot Strike")
     self.assertEqual(ev.GetContext(), "General")
     self.assertEqual(
         ev.GetDetectionFlags(),
         btk.btkEvent.Automatic | btk.btkEvent.FromForcePlatform)
     self.assertEqual(ev.GetId(), 1)
     self.assertEqual(ev.GetFrame(), 209)
     self.assertEqual(ev.GetTime(), 2.09)
     ev = output.GetItem(3)
     self.assertEqual(ev.GetLabel(), "Foot Off")
     self.assertEqual(ev.GetContext(), "General")
     self.assertEqual(
         ev.GetDetectionFlags(),
         btk.btkEvent.Automatic | btk.btkEvent.FromForcePlatform)
     self.assertEqual(ev.GetId(), 2)
     self.assertEqual(ev.GetFrame(), 267)
     self.assertEqual(ev.GetTime(), 2.67)
 def test_FileSample10Type4a(self):
     reader = btk.btkAcquisitionFileReader()
     reader.SetFilename(_TDDConfigure.C3DFilePathIN + "sample10/type-4a.c3d")
     pfe = btk.btkForcePlatformsExtractor()
     grwf = btk.btkGroundReactionWrenchFilter()
     pfe.SetInput(reader.GetOutput())
     grwf.SetInput(pfe.GetOutput())
     grwc = grwf.GetOutput()
     grwc.Update()
     self.assertEqual(grwc.GetItemNumber(), 2)
     grw1 = grwc.GetItem(0)
     self.assertEqual(grw1.GetPosition().GetFrameNumber(), 5760)
 def test_PluginC3D_Threshold50(self):
   reader = btk.btkAcquisitionFileReader()
   reader.SetFilename(_TDDConfigure.C3DFilePathIN + "sample09/PlugInC3D.c3d")
   reader.Update()
   pfe = btk.btkForcePlatformsExtractor()
   grwf = btk.btkGroundReactionWrenchFilter()
   dswc = btk.btkWrenchCollectionDownsampleFilter()
   dswc.SetUpDownRatio(reader.GetOutput().GetNumberAnalogSamplePerFrame())
   pfe.SetInput(reader.GetOutput())
   grwf.SetInput(pfe.GetOutput())
   dswc.SetInput(grwf.GetOutput())
   vgrfged = btk.btkVerticalGroundReactionForceGaitEventDetector()
   vgrfged.SetInput(dswc.GetOutput())
   vgrfged.SetThresholdValue(50)
   vgrfged.SetForceplateContextMapping(["Right","Left"])
   vgrfged.SetAcquisitionInformation(reader.GetOutput().GetFirstFrame(), reader.GetOutput().GetPointFrequency(), "")
   output = vgrfged.GetOutput()
   output.Update()
   self.assertEqual(output.GetItemNumber(), 4)
   ev = output.GetItem(0)
   self.assertEqual(ev.GetLabel(), "Foot Strike")
   self.assertEqual(ev.GetContext(), "Right")
   self.assertEqual(ev.GetDetectionFlags(), btk.btkEvent.Automatic | btk.btkEvent.FromForcePlatform)
   self.assertEqual(ev.GetId(), 1)
   self.assertEqual(ev.GetFrame(), 67)
   self.assertEqual(ev.GetTime(), 67.0/60.0)
   ev = output.GetItem(1)
   self.assertEqual(ev.GetLabel(), "Foot Off")
   self.assertEqual(ev.GetContext(), "Right")
   self.assertEqual(ev.GetDetectionFlags(), btk.btkEvent.Automatic | btk.btkEvent.FromForcePlatform)
   self.assertEqual(ev.GetId(), 2)
   self.assertEqual(ev.GetFrame(), 114)
   self.assertEqual(ev.GetTime(), 114.0/60.0)
   ev = output.GetItem(2)
   self.assertEqual(ev.GetLabel(), "Foot Strike")
   self.assertEqual(ev.GetContext(), "Left")
   self.assertEqual(ev.GetDetectionFlags(), btk.btkEvent.Automatic | btk.btkEvent.FromForcePlatform)
   self.assertEqual(ev.GetId(), 1)
   self.assertEqual(ev.GetFrame(), 109)
   self.assertEqual(ev.GetTime(), 109.0/60.0)
   ev = output.GetItem(3)
   self.assertEqual(ev.GetLabel(), "Foot Off")
   self.assertEqual(ev.GetContext(), "Left")
   self.assertEqual(ev.GetDetectionFlags(), btk.btkEvent.Automatic | btk.btkEvent.FromForcePlatform)
   self.assertEqual(ev.GetId(), 2)
   self.assertEqual(ev.GetFrame(), 148)
   self.assertEqual(ev.GetTime(), 148.0/60.0)
 def test_Gait_NoMapping(self):
   reader = btk.btkAcquisitionFileReader()
   reader.SetFilename(_TDDConfigure.C3DFilePathIN + "others/Gait.c3d")
   reader.Update()
   pfe = btk.btkForcePlatformsExtractor()
   grwf = btk.btkGroundReactionWrenchFilter()
   dswc = btk.btkWrenchCollectionDownsampleFilter()
   dswc.SetUpDownRatio(reader.GetOutput().GetNumberAnalogSamplePerFrame())
   pfe.SetInput(reader.GetOutput())
   grwf.SetInput(pfe.GetOutput())
   dswc.SetInput(grwf.GetOutput())
   vgrfged = btk.btkVerticalGroundReactionForceGaitEventDetector()
   vgrfged.SetInput(dswc.GetOutput())
   vgrfged.SetAcquisitionInformation(reader.GetOutput().GetFirstFrame(), reader.GetOutput().GetPointFrequency(), "")
   output = vgrfged.GetOutput()
   output.Update()
   self.assertEqual(output.GetItemNumber(), 4)
   ev = output.GetItem(0)
   self.assertEqual(ev.GetLabel(), "Foot Strike")
   self.assertEqual(ev.GetContext(), "General")
   self.assertEqual(ev.GetDetectionFlags(), btk.btkEvent.Automatic | btk.btkEvent.FromForcePlatform)
   self.assertEqual(ev.GetId(), 1)
   self.assertEqual(ev.GetFrame(), 257)
   self.assertEqual(ev.GetTime(), 2.57)
   ev = output.GetItem(1)
   self.assertEqual(ev.GetLabel(), "Foot Off")
   self.assertEqual(ev.GetContext(), "General")
   self.assertEqual(ev.GetDetectionFlags(), btk.btkEvent.Automatic | btk.btkEvent.FromForcePlatform)
   self.assertEqual(ev.GetId(), 2)
   self.assertEqual(ev.GetFrame(), 316)
   self.assertEqual(ev.GetTime(), 3.16)
   ev = output.GetItem(2)
   self.assertEqual(ev.GetLabel(), "Foot Strike")
   self.assertEqual(ev.GetContext(), "General")
   self.assertEqual(ev.GetDetectionFlags(), btk.btkEvent.Automatic | btk.btkEvent.FromForcePlatform)
   self.assertEqual(ev.GetId(), 1)
   self.assertEqual(ev.GetFrame(), 209)
   self.assertEqual(ev.GetTime(), 2.09)
   ev = output.GetItem(3)
   self.assertEqual(ev.GetLabel(), "Foot Off")
   self.assertEqual(ev.GetContext(), "General")
   self.assertEqual(ev.GetDetectionFlags(), btk.btkEvent.Automatic | btk.btkEvent.FromForcePlatform)
   self.assertEqual(ev.GetId(), 2)
   self.assertEqual(ev.GetFrame(), 267)
   self.assertEqual(ev.GetTime(), 2.67)
예제 #7
0
파일: btkapp.py 프로젝트: mkjung99/mocaplib
def get_fp_wrench(acq, threshold=0.0):
    pfe = btk.btkForcePlatformsExtractor()
    pfe.SetInput(acq)
    pfe.Update()
    pfc = pfe.GetOutput()
    grwf = btk.btkGroundReactionWrenchFilter()
    grwf.SetInput(pfc)
    grwf.SetTransformToGlobalFrame(True)
    grwf.SetThresholdState(True)
    grwf.SetThresholdValue(threshold)
    grwf.Update()
    grwc = grwf.GetOutput()
    grwc.Update()
    wc_output = {}
    for i in range(grwc.GetItemNumber()):
        wc_data = {}
        pos = grwc.GetItem(i).GetPosition().GetValues()
        force = grwc.GetItem(i).GetForce().GetValues()
        moment = grwc.GetItem(i).GetMoment().GetValues()
        wc_data.update({'POS': pos})
        wc_data.update({'FORCE': force})
        wc_data.update({'MOMENT': moment})
        wc_output.update({i: wc_data})
    return wc_output
예제 #8
0
 
 #Convert c3d force data to file
 
 #Load in the c3d data via btk
 dynamicC3D = btk.btkAcquisitionFileReader()
 dynamicC3D.SetFilename(dynamicFiles[tt])
 dynamicC3D.Update()
 dynamicAcq = dynamicC3D.GetOutput()
 
 #Extract the force platforms data
 forcePlatforms = btk.btkForcePlatformsExtractor()
 forcePlatforms.SetInput(dynamicAcq)
 forcePlatforms.Update()
 
 #Get the wrenchs for position and force data
 groundReactionWrenches = btk.btkGroundReactionWrenchFilter()
 groundReactionWrenches.SetInput(forcePlatforms.GetOutput())
 groundReactionWrenches.Update()
 
 #Grab the data from the singular force platform
 grf = groundReactionWrenches.GetOutput().GetItem(0).GetForce().GetValues()
 grm = groundReactionWrenches.GetOutput().GetItem(0).GetMoment().GetValues()
 cop = groundReactionWrenches.GetOutput().GetItem(0).GetPosition().GetValues()
 
 #Convert mm units to m
 grm = grm / 1000
 cop = cop / 1000
 
 #Define filter for forces data 
 #Replicates the Fukuchi et al. (2017) processing
 #(10Hz low-pass 4th Order Butterworth)