def run(self): fa = self.m_acq.GetAnalogFrequency() for analog in btk.Iterate(self.m_acq.GetAnalogs()): for label in self.m_labels: if analog.GetLabel() == label: values = analog.GetValues() # stop 50hz value50 = signal_processing.remove50hz(values, fa) # high pass and compensation with mean hpLower = self.m_hpf_low hpUpper = self.m_hpf_up valuesHp = signal_processing.highPass( value50, hpLower, hpUpper, fa) btkTools.smartAppendAnalog(self.m_acq, label + "_HPF", valuesHp, desc="high Pass filter") # rectification btkTools.smartAppendAnalog(self.m_acq, label + "_Rectify", np.abs(valuesHp), desc="rectify")
def run(self): fa = self.m_acq.GetAnalogFrequency() for label in self.m_labels: values = self.m_acq.GetAnalog(label).GetValues() valuesFilt = signal_processing.enveloppe(values, self.m_fc, fa) btkTools.smartAppendAnalog(self.m_acq, label + "_Env", valuesFilt, desc="fc(" + str(self.m_fc) + ")")
def processC3d(self): for c3d in self.m_c3ds: filenameOut = c3d[:-4] + "_" + self.m_fileSuffix+".c3d" if self.m_fileSuffix is not None else c3d acq = btkTools.smartReader((self.m_c3dPath+c3d)) values = acq.GetAnalog(utils.str(self.m_label)).GetValues() valuesNorm = values / self.m_threshold btkTools.smartAppendAnalog(acq,self.m_label+"_Norm",valuesNorm, desc= "Normalization)") btkTools.smartWriter(acq, (self.m_c3dPath+filenameOut))
def run(self): fa = self.m_acq.GetAnalogFrequency() for analog in btk.Iterate(self.m_acq.GetAnalogs()): for label in self.m_labels: if analog.GetLabel() == label: values = analog.GetValues() valuesFilt = signal_processing.enveloppe( values, self.m_fc, fa) btkTools.smartAppendAnalog(self.m_acq, label + "_Env", valuesFilt, desc="fc(" + str(self.m_fc) + ")")
def correctForcePlateType5(btkAcq): pfe = btk.btkForcePlatformsExtractor() pfe.SetInput(btkAcq) pfc = pfe.GetOutput() pfc.Update() md_force_platform = btkAcq.GetMetaData().FindChild( str("FORCE_PLATFORM")).value() md_force_platform_channels = btkAcq.GetMetaData().FindChild( str("FORCE_PLATFORM")).value().FindChild(str("CHANNEL")).value() md_force_platform.RemoveChild("CAL_MATRIX") md_force_platform.RemoveChild("MATRIX_STORE") md_channels = list() for i in btkTools.smartGetMetadata(btkAcq, 'FORCE_PLATFORM', "CHANNEL"): md_channels.append(i) pfds = [pfc.GetItem(0), pfc.GetItem(1)] forcePlateNumber = len(pfds) channel_number_byFp = list() for i in range(0, len(pfds)): if pfds[i].GetType() in [1, 2, 4]: channel_number_byFp.append(6) if pfds[i].GetType() in [3, 5]: channel_number_byFp.append(8) init = 0 channel_indexes_ofAnalog = list() for i in channel_number_byFp: channel_indexes_ofAnalog.append(md_channels[init:init + i]) init = i newChannelIndexes = [] for i in range(0, len(pfds)): if pfds[i].GetType() == 5: numAnalogs = btkAcq.GetAnalogNumber() analogChannels = np.zeros((8, btkAcq.GetAnalogFrameNumber())) j = 0 for index in channel_indexes_ofAnalog[i]: analogChannels[j, :] = btkAcq.GetAnalog(int(index) - 1).GetValues().T md_channels.remove(index) j += 1 wrench = np.dot( pfds[i].GetCalMatrix().T.reshape(8, 6).T, analogChannels ) # warning : storage of cal_matrix of type5 force plate is wrong in btk. force = wrench[0:3, :].T moment = wrench[3:6, :].T origin = pfds[i].GetOrigin() corners = pfds[i].GetCorners() btkTools.smartAppendAnalog(btkAcq, "Force.Fx" + str(i), force[:, 0], desc="virtual Force plate") btkTools.smartAppendAnalog(btkAcq, "Force.Fy" + str(i), force[:, 1], desc="virtual Force plate") btkTools.smartAppendAnalog(btkAcq, "Force.Fz" + str(i), force[:, 2], desc="virtual Force plate") btkTools.smartAppendAnalog(btkAcq, "Moment.Mx" + str(i), moment[:, 0], desc="virtual Force plate") btkTools.smartAppendAnalog(btkAcq, "Moment.My" + str(i), moment[:, 1], desc="virtual Force plate") btkTools.smartAppendAnalog(btkAcq, "Moment.Mz" + str(i), moment[:, 2], desc="virtual Force plate") new_channel_indexes_ofAnalog = range(numAnalogs, numAnalogs + 6) numAnalogs = btkAcq.GetAnalogNumber() btkTools.smartSetMetadata(btkAcq, 'FORCE_PLATFORM', "TYPE", i, str(2)) newChannelIndexes = newChannelIndexes + new_channel_indexes_ofAnalog else: newChannelIndexes = newChannelIndexes + channel_indexes_ofAnalog[i] md_newChannelIndexes = map(lambda x: x + 1, newChannelIndexes) md_force_platform_channels.SetInfo( btk.btkMetaDataInfo([6, int(forcePlateNumber)], md_newChannelIndexes)) btkAcq.GetMetaData().FindChild(str("FORCE_PLATFORM")).value().FindChild( str("ZERO")).value().SetInfo( btk.btkMetaDataInfo(btk.btkDoubleArray(forcePlateNumber, 0))) return btkAcq
def test_appendAnalog(self): filename = pyCGM2.TEST_DATA_PATH + "LowLevel\\IO\\Hånnibøl_c3d\\static.c3d" acq = btkTools.smartReader(filename, translators=None) values = acq.GetAnalog(utils.str("Force.Fx1")).GetValues() btkTools.smartAppendAnalog(acq, "Hän-emg", values, desc="Hän-emg")