Exemplo n.º 1
0
def changeSubjectName(btkAcq,subjectName):


    # change subject name in the metadata
    md = btkAcq.GetMetaData()


    if "SUBJECTS" in _getSectionFromMd(md):
        subjectMd =  btkAcq.GetMetaData().FindChild(utils.str("SUBJECTS")).value()
        if "NAMES" in _getSectionFromMd(subjectMd):
            subjectMd.FindChild(utils.str("NAMES")).value().GetInfo().SetValue(0,utils.str(subjectName))

        if "USES_PREFIXES"  not in _getSectionFromMd(subjectMd):
            btk.btkMetaDataCreateChild(subjectMd, utils.str("USES_PREFIXES"), 0)

    if "ANALYSIS" in _getSectionFromMd(md):
        analysisMd =  btkAcq.GetMetaData().FindChild(utils.str("ANALYSIS")).value()
        if "SUBJECTS" in _getSectionFromMd(analysisMd):
            anaSubMdi = analysisMd.FindChild(utils.str("SUBJECTS")).value().GetInfo()
            for i in range(0,anaSubMdi.GetDimension(1) ):
                anaSubMdi.SetValue(i,utils.str(subjectName))

    events = btkAcq.GetEvents()
    for ev in btk.Iterate(events):
        ev.SetSubject(utils.str(subjectName))

    # Do not work
    # eventMd =  btkAcq.GetMetaData().FindChild("EVENT").value()
    # eventMdi = eventMd.FindChild("SUBJECTS").value().GetInfo()
    # for i in range(0,eventMdi.GetDimension(1) ):
    #     eventMdi.SetValue(i,"TEST")

    return btkAcq
Exemplo n.º 2
0
    def appendForcePlates(self):

        forcePlateNumber = len(self.m_nexusForcePlates)

        fp_count = 0
        for nexusForcePlate in self.m_nexusForcePlates:
            forceLocal = nexusForcePlate.getLocalReactionForce(
            )  #  row number =  NEXUS.getTrialRange[1] not FrameCount
            momentLocal = nexusForcePlate.getLocalReactionMoment()

            start = self.m_firstFrame - 1  #-1 because Nexus frame start at 1
            end = self.m_lastFrame - 1  #- self.m_trialFirstFrame

            forceLabels = [
                "Force.Fx" + str(fp_count + 1), "Force.Fy" + str(fp_count + 1),
                "Force.Fz" + str(fp_count + 1)
            ]
            for j in range(0, 3):
                analog = btk.btkAnalog()
                analog.SetLabel(forceLabels[j])
                analog.SetUnit("N")  #nexusForcePlate.getForceUnit())
                analog.SetFrameNumber(self.m_analogFrameNumber)
                analog.SetValues(
                    forceLocal[(start) *
                               self.m_numberAnalogSamplePerFrame:(end + 1) *
                               self.m_numberAnalogSamplePerFrame, j])
                analog.SetDescription(nexusForcePlate.getDescription())
                #analog.SetGain(btk.btkAnalog.PlusMinus10)

                self.m_acq.AppendAnalog(analog)

            momentLabels = [
                "Moment.Mx" + str(fp_count + 1),
                "Moment.My" + str(fp_count + 1),
                "Moment.Mz" + str(fp_count + 1)
            ]
            for j in range(0, 3):
                analog = btk.btkAnalog()
                analog.SetLabel(momentLabels[j])
                analog.SetUnit("Nmm")  #nexusForcePlate.getMomentUnit())
                analog.SetFrameNumber(self.m_analogFrameNumber)
                analog.SetValues(
                    momentLocal[(start) *
                                self.m_numberAnalogSamplePerFrame:(end + 1) *
                                self.m_numberAnalogSamplePerFrame, j])
                analog.SetDescription(nexusForcePlate.getDescription())
                #analog.GetGain(btk.btkAnalog.PlusMinus10)
                self.m_acq.AppendAnalog(analog)

            fp_count += 1

        # metadata for platform type2
        md_force_platform = btk.btkMetaData('FORCE_PLATFORM')
        btk.btkMetaDataCreateChild(md_force_platform, "USED",
                                   int(forcePlateNumber))  # a
        btk.btkMetaDataCreateChild(md_force_platform, "ZERO", [1, 0])  #
        btk.btkMetaDataCreateChild(
            md_force_platform, "TYPE", btk.btkDoubleArray(
                forcePlateNumber,
                2))  #btk.btkDoubleArray(forcePlateNumber, 2))# add a child

        self.m_acq.GetMetaData().AppendChild(md_force_platform)

        origins = []
        for nexusForcePlate in self.m_nexusForcePlates:
            origins.append(-1.0 * nexusForcePlate.getLocalOrigin())

        md_origin = btk.btkMetaData('ORIGIN')
        md_origin.SetInfo(
            btk.btkMetaDataInfo([3, int(forcePlateNumber)],
                                np.concatenate(origins)))
        md_force_platform.AppendChild(md_origin)

        corners = []
        for nexusForcePlate in self.m_nexusForcePlates:
            corners.append(nexusForcePlate.getCorners().T.flatten())

        md_corners = btk.btkMetaData('CORNERS')
        md_corners.SetInfo(
            btk.btkMetaDataInfo([3, 4, int(forcePlateNumber)],
                                np.concatenate(corners)))
        md_force_platform.AppendChild(md_corners)

        md_channel = btk.btkMetaData('CHANNEL')
        md_channel.SetInfo(
            btk.btkMetaDataInfo([6, int(forcePlateNumber)],
                                np.arange(1,
                                          int(forcePlateNumber) * 6 + 1)))
        md_force_platform.AppendChild(md_channel)
Exemplo n.º 3
0
                f.close()

        # --------------------------CHECKING -----------------------------------
        filename = filenameNoExt + ".c3d"

        # ---------------METADATA PROCESSING-----------------------------------
        acq = btkTools.smartReader(str(DATA_PATH + filename))

        md = acq.GetMetaData()  # main metadata levekl
        md_Model = btkTools.hasChild(md, "MODEL")  # find MODEL level

        # create or update MODEL section
        if md_Model is not None:
            logging.debug("[pyCGM2] : MODEL section exits within metadata")
            md_Model.ClearChildren()
            btk.btkMetaDataCreateChild(md_Model, "NAME", repr(model))
            btk.btkMetaDataCreateChild(md_Model, "PROCESSOR", "pyCGM2")

            if args.calibration:
                mps = getViconMP(model)
                for item in mps.items():
                    btk.btkMetaDataCreateChild(md_Model, str(item[0]),
                                               str(item[1]))

        else:
            logging.warning(
                "[pyCGM2] : MODEL section doesn t exist. It will be created")
            md_Model = btk.btkMetaData('MODEL')  # create main metadata
            btk.btkMetaDataCreateChild(md_Model, "NAME", repr(model))
            btk.btkMetaDataCreateChild(md_Model, "PROCESSOR", "pyCGM2")