def normalizedEMG(analysis, emgChannels,contexts, method="MeanMax", fromOtherAnalysis=None, mvcSettings=None): """ normalizedEMG : perform normalization of emg in amplitude :param analysis [pyCGM2.Processing.analysis.Analysis]: pyCGM2 analysis instance :param emgChannels [string list]: label of your emg channels :param contexts [string list]: contexts associated with your emg channel **optional** :param method [str]: method of amplitude normalisation (choice MeanMax[default], MaxMax, MedianMax) :param fromOtherAnalysis [pyCGM2.Processing.analysis.Analysis]: amplitude normalisation from another analysis instance """ i=0 for label in emgChannels: envnf = emgFilters.EmgNormalisationProcessingFilter(analysis,label,contexts[i]) if fromOtherAnalysis is not None and mvcSettings is None: LOGGER.logger.info("[pyCGM2] - %s normalized from another Analysis"%(label)) envnf.setThresholdFromOtherAnalysis(fromOtherAnalysis) if mvcSettings is not None: if label in mvcSettings.keys(): LOGGER.logger.info("[pyCGM2] - %s normalized from MVC"%(label)) envnf.setThresholdFromOtherAnalysis(mvcSettings[label]) else: if fromOtherAnalysis is not None: LOGGER.logger.info("[pyCGM2] - %s normalized from an external Analysis"%(label)) envnf.setThresholdFromOtherAnalysis(fromOtherAnalysis) else: LOGGER.logger.info("[pyCGM2] - %s normalized from current analysis"%(label)) if method != "MeanMax": envnf.setMaxMethod(enums.EmgAmplitudeNormalization.MeanMax) elif method != "MaxMax": envnf.setMaxMethod(enums.EmgAmplitudeNormalization.MaxMax) elif method != "MedianMax": envnf.setMaxMethod(enums.EmgAmplitudeNormalization.MedianMax) envnf.run() i+=1 del envnf
def normalizedEMG(analysis, emgChannels, contexts, method="MeanMax", fromOtherAnalysis=None): """ normalizedEMG : perform normalization of emg in amplitude :param analysis [pyCGM2.Processing.analysis.Analysis]: pyCGM2 analysis instance :param emgChannels [string list]: label of your emg channels :param contexts [string list]: contexts associated with your emg channel **optional** :param method [str]: method of amplitude normalisation (choice MeanMax[default], MaxMax, MedianMax) :param fromOtherAnalysis [pyCGM2.Processing.analysis.Analysis]: amplitude normalisation from another analysis instance """ i = 0 for label in emgChannels: envnf = emgFilters.EmgNormalisationProcessingFilter( analysis, label, contexts[i]) if fromOtherAnalysis is not None: envnf.setThresholdFromOtherAnalysis(fromOtherAnalysis) if method is not "MeanMax": envnf.setMaxMethod(enums.EmgAmplitudeNormalization.MeanMax) elif method is not "MaxMax": envnf.setMaxMethod(enums.EmgAmplitudeNormalization.MaxMax) elif method is not "MedianMax": envnf.setMaxMethod(enums.EmgAmplitudeNormalization.MedianMax) envnf.run() i += 1 del envnf
def test_envelopPlotSingleEmg(self): # ----DATA----- DATA_PATH = pyCGM2.TEST_DATA_PATH+"GaitData\\EMG\\Hånnibøl Lecter-nerve block\\" gaitTrial = "PRE-gait trial 01.c3d" restTrial = "PRE-repos.c3d" DATA_PATH_OUT = pyCGM2.TEST_DATA_PATH_OUT+"GaitData\\EMG\\Hånnibøl Lecter-nerve block\\" files.createDir(DATA_PATH_OUT) EMG_LABELS=['EMG1','EMG2'] acq = btkTools.smartReader(DATA_PATH +gaitTrial) bf = emgFilters.BasicEmgProcessingFilter(acq,EMG_LABELS) bf.setHighPassFrequencies(20.0,200.0) bf.run() envf = emgFilters.EmgEnvelopProcessingFilter(acq,EMG_LABELS) envf.setCutoffFrequency(180.0) envf.run() btkTools.smartWriter(acq,DATA_PATH_OUT+"test_envelopPlotSingleEmg.c3d") modelledFilenames = ["test_envelopPlotSingleEmg.c3d"] c3dmanagerProcedure = c3dManager.UniqueC3dSetProcedure(DATA_PATH_OUT,modelledFilenames) cmf = c3dManager.C3dManagerFilter(c3dmanagerProcedure) cmf.enableSpatioTemporal(False) cmf.enableKinematic(False) cmf.enableKinetic(False) cmf.enableEmg(True) trialManager = cmf.generate() #---- GAIT CYCLES FILTER #-------------------------------------------------------------------------- cycleBuilder = cycle.GaitCyclesBuilder(spatioTemporalTrials=trialManager.spatioTemporal["Trials"], kinematicTrials = trialManager.kinematic["Trials"], kineticTrials = trialManager.kinetic["Trials"], emgTrials=trialManager.emg["Trials"]) cyclefilter = cycle.CyclesFilter() cyclefilter.setBuilder(cycleBuilder) cycles = cyclefilter.build() modelInfo=None subjectInfo=None experimentalInfo=None analysisBuilder = analysis.GaitAnalysisBuilder(cycles, kinematicLabelsDict = None, kineticLabelsDict = None, emgLabelList = ['EMG1_Rectify_Env','EMG2_Rectify_Env'], subjectInfos=subjectInfo, modelInfos=modelInfo, experimentalInfos=experimentalInfo) analysisFilter = analysis.AnalysisFilter() analysisFilter.setBuilder(analysisBuilder) analysisFilter.setInfo(model = modelInfo) analysisFilter.build() analysisInstance = analysisFilter.analysis envnf = emgFilters.EmgNormalisationProcessingFilter(analysisInstance,"EMG1","Left") envnf.setMaxMethod(enums.EmgAmplitudeNormalization.MeanMax) envnf.run() fig = plt.figure() ax = plt.gca() plot.gaitDescriptivePlot(ax,analysisInstance.emgStats, "EMG1_Rectify_Env","Left",0, color=None, title="title", xlabel=None, ylabel=None,ylim=None,legendLabel=None, customLimits=None) footOff = analysisInstance.emgStats.pst['stancePhase', "Left"]["mean"] plot.addNormalActivationLayer(ax,"RECFEM", footOff)
def test_envelopGaitPlotPanel(self): # ----DATA----- DATA_PATH = pyCGM2.TEST_DATA_PATH+"GaitData\\EMG\\Hånnibøl Lecter-nerve block\\" gaitTrial = "PRE-gait trial 01.c3d" restTrial = "PRE-repos.c3d" DATA_PATH_OUT = pyCGM2.TEST_DATA_PATH_OUT+"GaitData\\EMG\\Hånnibøl Lecter-nerve block\\" files.createDir(DATA_PATH_OUT) EMG_LABELS=['EMG1','EMG2'] acq = btkTools.smartReader(DATA_PATH +gaitTrial) bf = emgFilters.BasicEmgProcessingFilter(acq,EMG_LABELS) bf.setHighPassFrequencies(20.0,200.0) bf.run() envf = emgFilters.EmgEnvelopProcessingFilter(acq,EMG_LABELS) envf.setCutoffFrequency(180.0) envf.run() btkTools.smartWriter(acq,DATA_PATH_OUT+"test_envelopGaitPlotPanel.c3d") modelledFilenames = ["test_envelopGaitPlotPanel.c3d"] c3dmanagerProcedure = c3dManager.UniqueC3dSetProcedure(DATA_PATH_OUT,modelledFilenames) cmf = c3dManager.C3dManagerFilter(c3dmanagerProcedure) cmf.enableSpatioTemporal(False) cmf.enableKinematic(False) cmf.enableKinetic(False) cmf.enableEmg(True) trialManager = cmf.generate() #---- GAIT CYCLES FILTER #-------------------------------------------------------------------------- cycleBuilder = cycle.GaitCyclesBuilder(spatioTemporalTrials=trialManager.spatioTemporal["Trials"], kinematicTrials = trialManager.kinematic["Trials"], kineticTrials = trialManager.kinetic["Trials"], emgTrials=trialManager.emg["Trials"]) cyclefilter = cycle.CyclesFilter() cyclefilter.setBuilder(cycleBuilder) cycles = cyclefilter.build() modelInfo=None subjectInfo=None experimentalInfo=None analysisBuilder = analysis.GaitAnalysisBuilder(cycles, kinematicLabelsDict = None, kineticLabelsDict = None, emgLabelList = ['EMG1_Rectify_Env','EMG2_Rectify_Env'], subjectInfos=subjectInfo, modelInfos=modelInfo, experimentalInfos=experimentalInfo) analysisFilter = analysis.AnalysisFilter() analysisFilter.setBuilder(analysisBuilder) analysisFilter.setInfo(model = modelInfo) analysisFilter.build() analysisInstance = analysisFilter.analysis envnf = emgFilters.EmgNormalisationProcessingFilter(analysisInstance,"EMG1","Right") envnf.setMaxMethod(enums.EmgAmplitudeNormalization.MeanMax) envnf.run() envnf = emgFilters.EmgNormalisationProcessingFilter(analysisInstance,"EMG2","Right") envnf.setMaxMethod(enums.EmgAmplitudeNormalization.MeanMax) envnf.run() data = analysisInstance.emgStats.data # viewer kv = emgPlotViewers.EnvEmgGaitPlotPanelViewer (analysisInstance) kv.setEmgs([["EMG1","Right","rf"],["EMG2","Right","rf"]]) kv.setNormalActivationLabels(["RECFEM","RECFEM"]) kv.setConcretePlotFunction(plot.gaitDescriptivePlot) # # filter pf = plotFilters.PlottingFilter() pf.setViewer(kv) pf.plot()
def EnvelopCoactivationPlot(cls): # ----DATA----- DATA_PATH = pyCGM2.TEST_DATA_PATH + "EMG\\SampleNantes\\" gaitTrial = "gait.c3d" restTrial = "repos.c3d" EMG_LABELS = ['EMG1', 'EMG2'] acq = btkTools.smartReader(DATA_PATH + gaitTrial) bf = emgFilters.BasicEmgProcessingFilter(acq, EMG_LABELS) bf.setHighPassFrequencies(20.0, 200.0) bf.run() envf = emgFilters.EmgEnvelopProcessingFilter(acq, EMG_LABELS) envf.setCutoffFrequency(180.0) envf.run() btkTools.smartWriter(acq, DATA_PATH + "test.c3d") modelledFilenames = ["test.c3d"] c3dmanagerProcedure = c3dManager.UniqueC3dSetProcedure( DATA_PATH, modelledFilenames) cmf = c3dManager.C3dManagerFilter(c3dmanagerProcedure) cmf.enableSpatioTemporal(False) cmf.enableKinematic(False) cmf.enableKinetic(False) cmf.enableEmg(True) trialManager = cmf.generate() #---- GAIT CYCLES FILTER #-------------------------------------------------------------------------- cycleBuilder = cycle.GaitCyclesBuilder( spatioTemporalTrials=trialManager.spatioTemporal["Trials"], kinematicTrials=trialManager.kinematic["Trials"], kineticTrials=trialManager.kinetic["Trials"], emgTrials=trialManager.emg["Trials"]) cyclefilter = cycle.CyclesFilter() cyclefilter.setBuilder(cycleBuilder) cycles = cyclefilter.build() modelInfo = None subjectInfo = None experimentalInfo = None analysisBuilder = analysis.GaitAnalysisBuilder( cycles, kinematicLabelsDict=None, kineticLabelsDict=None, emgLabelList=['EMG1_Rectify_Env', 'EMG2_Rectify_Env'], subjectInfos=subjectInfo, modelInfos=modelInfo, experimentalInfos=experimentalInfo) analysisFilter = analysis.AnalysisFilter() analysisFilter.setBuilder(analysisBuilder) analysisFilter.setInfo(model=modelInfo) analysisFilter.build() analysisInstance = analysisFilter.analysis envnf = emgFilters.EmgNormalisationProcessingFilter( analysisInstance, "EMG1", "Left") envnf.setMaxMethod(enums.EmgAmplitudeNormalization.MeanMax) envnf.run() envnf = emgFilters.EmgNormalisationProcessingFilter( analysisInstance, "EMG2", "Left") envnf.setMaxMethod(enums.EmgAmplitudeNormalization.MeanMax) envnf.run() # viewer kv = emgPlotViewers.CoactivationEmgPlotViewer(analysisInstance) kv.setEmgs("EMG1", "EMG2") kv.setMuscles("RF1", "RF2") kv.setConcretePlotFunction(plot.gaitDescriptivePlot) kv.setContext("Left") # # filter pf = plotFilters.PlottingFilter() pf.setViewer(kv) pf.plot() plt.show()
def NormalizationTest(cls): # ----DATA----- DATA_PATH = pyCGM2.TEST_DATA_PATH+"EMG\\SampleNantes\\" gaitTrial = "gait.c3d" restTrial = "repos.c3d" EMG_LABELS=['EMG1','EMG2'] acq = btkTools.smartReader(DATA_PATH +gaitTrial) bf = emgFilters.BasicEmgProcessingFilter(acq,EMG_LABELS) bf.setHighPassFrequencies(20.0,200.0) bf.run() envf = emgFilters.EmgEnvelopProcessingFilter(acq,EMG_LABELS) envf.setCutoffFrequency(180.0) envf.run() btkTools.smartWriter(acq,DATA_PATH+"test.c3d") modelledFilenames = ["test.c3d"] c3dmanagerProcedure = c3dManager.UniqueC3dSetProcedure(DATA_PATH,modelledFilenames) cmf = c3dManager.C3dManagerFilter(c3dmanagerProcedure) cmf.enableSpatioTemporal(False) cmf.enableKinematic(False) cmf.enableKinetic(False) cmf.enableEmg(True) trialManager = cmf.generate() #---- GAIT CYCLES FILTER #-------------------------------------------------------------------------- cycleBuilder = cycle.GaitCyclesBuilder(spatioTemporalTrials=trialManager.spatioTemporal["Trials"], kinematicTrials = trialManager.kinematic["Trials"], kineticTrials = trialManager.kinetic["Trials"], emgTrials=trialManager.emg["Trials"]) cyclefilter = cycle.CyclesFilter() cyclefilter.setBuilder(cycleBuilder) cycles = cyclefilter.build() modelInfo=None subjectInfo=None experimentalInfo=None analysisBuilder = analysis.GaitAnalysisBuilder(cycles, kinematicLabelsDict = None, kineticLabelsDict = None, emgLabelList = ['EMG1_Rectify_Env','EMG2_Rectify_Env'], subjectInfos=subjectInfo, modelInfos=modelInfo, experimentalInfos=experimentalInfo) analysisFilter = analysis.AnalysisFilter() analysisFilter.setBuilder(analysisBuilder) analysisFilter.setInfo(model = modelInfo) analysisFilter.build() analysisInstance = analysisFilter.analysis envnf = emgFilters.EmgNormalisationProcessingFilter(analysisInstance,"EMG1","Left") envnf.setMaxMethod(enums.EmgAmplitudeNormalization.MeanMax) envnf.run() envnf.processC3d([DATA_PATH+"test.c3d"], fileSuffix="test") print analysisInstance.emgStats.data.keys()