Example #1
0
    def test_openFile(self):

        contentYaml = files.openFile(
            pyCGM2.TEST_DATA_PATH + "\\LowLevel\\IO\\Hanibal_files\\",
            "file.yaml")
        contentJson = files.openFile(
            pyCGM2.TEST_DATA_PATH + "\\LowLevel\\IO\\Hanibal_files\\",
            "file.json")

        assert contentYaml != False
        assert contentJson != False

        files.saveJson(
            pyCGM2.TEST_DATA_PATH + "\\LowLevel\\IO\\Hanibal_files\\",
            "testJsonOut", contentJson)
def main(args):
    DATA_PATH = os.getcwd()+"\\"

    # User Settings
    if os.path.isfile(DATA_PATH + args.userFile):
        userSettings = files.openFile(DATA_PATH,args.userFile)
    else:
        raise Exception ("user setting file not found")

    # internal (expert) Settings
    if args.expertFile:
        if os.path.isfile(DATA_PATH + args.expertFile):
            internalSettings = files.openFile(DATA_PATH,args.expertFile)
        else:
            raise Exception ("expert setting file not found")
    else:
        internalSettings = None

    # translators
    if os.path.isfile(DATA_PATH + "CGM1_1.translators"):
        translators = files.openFile(DATA_PATH,"CGM1_1.translators")
    else:
        translators = None


    # --- Manager ----
    manager = ModelManager.CGM1_1ConfigManager(userSettings,localInternalSettings=internalSettings,localTranslators=translators)
    manager.contruct()
    finalSettings = manager.getFinalSettings()
    files.prettyDictPrint(finalSettings)


    logging.info("=============Calibration=============")
    model,finalAcqStatic = cgm1_1.calibrate(DATA_PATH,
        manager.staticTrial,
        manager.translators,
        manager.requiredMp,
        manager.optionalMp,
        manager.leftFlatFoot,
        manager.rightFlatFoot,
        manager.markerDiameter,
        manager.pointSuffix,
        displayCoordinateSystem=True)



    btkTools.smartWriter(finalAcqStatic, str(DATA_PATH+finalSettings["Calibration"]["StaticTrial"]))#[:-4]+"-pyCGM2modelled.c3d"))
    logging.info("Static Calibration -----> Done")

    manager.updateMp(model)
    #files.prettyDictPrint(manager.finalSettings)

    logging.info("=============Fitting=============")
    for trial in manager.dynamicTrials:
        mfpa = None if trial["Mfpa"] == "Auto" else trial["Mfpa"]
        reconstructFilenameLabelled = trial["File"]

        acqGait = cgm1_1.fitting(model,DATA_PATH, reconstructFilenameLabelled,
            manager.translators,
            manager.markerDiameter,
            manager.pointSuffix,
            mfpa,
            manager.momentProjection,
            displayCoordinateSystem=True)

        btkTools.smartWriter(acqGait, str(DATA_PATH+reconstructFilenameLabelled))#[:-4]+"-pyCGM2modelled.c3d"))
        logging.info("---->dynamic trial (%s) processed" %(reconstructFilenameLabelled))

    logging.info("=============Writing of final Settings=============")
    i = 0
    while os.path.exists("CGM1.1 [%s].completeSettings" % i):
        i += 1
    filename = "CGM1.1 [" + str(i)+"].completeSettings"
    files.saveJson(DATA_PATH, filename, finalSettings)
    logging.info("---->complete settings (%s) exported" %(filename))


    raw_input("Press return to exit..")
Example #3
0
 def save(self,DATA_PATH,filename):
     if self.__normativeData is not None:
         files.saveJson(DATA_PATH, filename, self.__normativeData)
     else:
         raise Exception("[pyCGM2] Normative data is empty")
Example #4
0
 def save(self, DATA_PATH, pipelineFilename):
     files.saveJson(DATA_PATH, pipelineFilename, self.pipSettings)
Example #5
0
def main(args):
    DATA_PATH = os.getcwd() + "\\"

    # User Settings
    if os.path.isfile(DATA_PATH + args.userFile):
        userSettings = files.openFile(DATA_PATH, args.userFile)
    else:
        raise Exception("user setting file not found")

    # internal (expert) Settings
    if args.expertFile:
        if os.path.isfile(DATA_PATH + args.expertFile):
            internalSettings = files.openFile(DATA_PATH, args.expertFile)
        else:
            raise Exception("expert setting file not found")
    else:
        internalSettings = None

    # --- Manager ----
    manager = EmgManager.EmgConfigManager(
        userSettings, localInternalSettings=internalSettings)
    manager.contruct()
    finalSettings = manager.getFinalSettings()
    files.prettyDictPrint(finalSettings)

    # reconfiguration of emg settings as lists
    EMG_LABELS, EMG_MUSCLES, EMG_CONTEXT, NORMAL_ACTIVITIES = manager.getEmgConfiguration(
    )

    #----- rectified view -------
    rectTrials = manager.temporal_trials
    analysis.processEMG(
        DATA_PATH,
        rectTrials,
        EMG_LABELS,
        highPassFrequencies=manager.BandpassFrequencies,
        envelopFrequency=manager.EnvelopLowpassFrequency,
        fileSuffix=None)  # high pass then low pass for all c3ds

    for trial in rectTrials:
        plot.plotTemporalEMG(DATA_PATH,
                             trial,
                             EMG_LABELS,
                             EMG_MUSCLES,
                             EMG_CONTEXT,
                             NORMAL_ACTIVITIES,
                             exportPdf=True,
                             rectify=manager.rectifyFlag)

    #----- Gait normalized envelop -------
    envTrials = manager.gaitNormalized_trials
    analysis.processEMG(
        DATA_PATH,
        envTrials,
        EMG_LABELS,
        highPassFrequencies=manager.BandpassFrequencies,
        envelopFrequency=manager.EnvelopLowpassFrequency,
        fileSuffix=None)  # high pass then low pass for all c3ds

    emgAnalysisInstance = analysis.makeEmgAnalysis(DATA_PATH, envTrials,
                                                   EMG_LABELS, None, None)

    filename = manager.title

    if not manager.consistencyFlag:
        plot.plotDescriptiveEnvelopEMGpanel(DATA_PATH,
                                            emgAnalysisInstance,
                                            EMG_LABELS,
                                            EMG_MUSCLES,
                                            EMG_CONTEXT,
                                            NORMAL_ACTIVITIES,
                                            normalized=False,
                                            exportPdf=True,
                                            outputName=filename)
    else:
        plot.plotConsistencyEnvelopEMGpanel(DATA_PATH,
                                            emgAnalysisInstance,
                                            EMG_LABELS,
                                            EMG_MUSCLES,
                                            EMG_CONTEXT,
                                            NORMAL_ACTIVITIES,
                                            normalized=False,
                                            exportPdf=True,
                                            outputName=filename)

    logging.info("=============Writing of final Settings=============")
    files.saveJson(DATA_PATH, str(filename + "-EMG.completeSettings"),
                   finalSettings)
    logging.info("---->complete settings (%s) exported" %
                 (str(filename + "-EMG.completeSettings")))

    raw_input("Press return to exit..")
Example #6
0
def exportJson_Schwartz2008(path, name="Schwartz2008.json"):
    """generate json from schwartz2008 dataset

    :param path: path
    :type path: string
    :param name: filename
    :type name: string
    :return: json file
    :rtype: file

    normativeDatasets.exportJson_Schwartz2008(DATA_PATH,name="test.json")

    """
    def constructJson(dataset, dataset_label, modalityLabel, data):

        dataset[dataset_label].update({modalityLabel: dict()})

        for label in data.keys():

            mean = data[label]["mean"]
            sd = data[label]["sd"]

            label = label.replace(".", "")
            dataset[dataset_label][modalityLabel].update(
                {label: {
                    'X': None,
                    'Y': None,
                    'Z': None
                }})

            outX = [0, mean[0, 0] - sd[0, 0], mean[0, 0] + sd[0, 0]]

            for i in range(1, mean.shape[0]):
                values = [i * 2, mean[i, 0] - sd[i, 0], mean[i, 0] + sd[i, 0]]
                outX.append(values)

            outY = [0, mean[0, 1] - sd[0, 1], mean[0, 1] + sd[0, 1]]
            for i in range(1, mean.shape[0]):
                values = [i * 2, mean[i, 1] - sd[i, 1], mean[i, 1] + sd[i, 1]]
                outY.append(values)

            outZ = [0, mean[0, 2] - sd[0, 2], mean[0, 2] + sd[0, 2]]
            for i in range(1, mean.shape[0]):
                values = [i * 2, mean[i, 2] - sd[i, 2], mean[i, 2] + sd[i, 2]]
                outZ.append(values)

            dataset[dataset_label][modalityLabel][label]["X"] = outX
            dataset[dataset_label][modalityLabel][label]["Y"] = outY
            dataset[dataset_label][modalityLabel][label]["Z"] = outZ

    dataset = {"Schwartz2008": dict()}

    nds = Schwartz2008("VerySlow")
    nds.constructNormativeData()
    constructJson(dataset, "Schwartz2008", "VerySlow", nds.data)

    nds = Schwartz2008("Slow")
    nds.constructNormativeData()
    constructJson(dataset, "Schwartz2008", "Slow", nds.data)

    nds = Schwartz2008("Free")
    nds.constructNormativeData()
    constructJson(dataset, "Schwartz2008", "Free", nds.data)

    nds = Schwartz2008("Fast")
    nds.constructNormativeData()
    constructJson(dataset, "Schwartz2008", "Fast", nds.data)

    nds = Schwartz2008("VeryFast")
    nds.constructNormativeData()
    constructJson(dataset, "Schwartz2008", "VeryFast", nds.data)

    files.saveJson(path, name, dataset)
Example #7
0
    def export(self,outputName, path=None):


        out=OrderedDict()

        if self.analysis.stpStats != {}:
            processedKeys=list()
            for keys in self.analysis.stpStats.keys():
                if keys not in processedKeys:
                    processedKeys.append(keys)
                else:
                    raise Exception ( "[pyCGM2] - duplicated keys[ %s - %s] detected" %(keys[0],keys[1]))

                if keys[0] not in out.keys():
                    out[keys[0]]=dict()
                    out[keys[0]][keys[1]]=dict()
                    out[keys[0]][keys[1]]["values"]=self.analysis.stpStats[keys]["values"].tolist()
                else:
                    out[keys[0]][keys[1]]=dict()
                    out[keys[0]][keys[1]]["values"]=self.analysis.stpStats[keys]["values"].tolist()

        if self.analysis.kinematicStats.data != {}:
            processedKeys=list()
            for keys in self.analysis.kinematicStats.data.keys():
                if not np.all( self.analysis.kinematicStats.data[keys]["mean"]==0):

                    if keys not in processedKeys:
                        processedKeys.append(keys)
                    else:
                        raise Exception ( "[pyCGM2] - duplicated keys[ %s - %s] detected" %(keys[0],keys[1]))

                    if keys[0] not in out.keys():
                        out[keys[0]]=dict()
                        out[keys[0]][keys[1]]=dict()
                        out[keys[0]][keys[1]]["values"]= {"X":[],"Y":[],"Z":[]}
                    else:
                        out[keys[0]][keys[1]]=dict()
                        out[keys[0]][keys[1]]["values"]= {"X":[],"Y":[],"Z":[]}

                    li_X = list()
                    for cycle in self.analysis.kinematicStats.data[keys]["values"]:
                        li_X.append(cycle[:,0].tolist())

                    li_Y = list()
                    for cycle in self.analysis.kinematicStats.data[keys]["values"]:
                        li_Y.append(cycle[:,1].tolist())

                    li_Z = list()
                    for cycle in self.analysis.kinematicStats.data[keys]["values"]:
                        li_Z.append(cycle[:,2].tolist())


                    out[keys[0]][keys[1]]["values"]["X"] = li_X
                    out[keys[0]][keys[1]]["values"]["Y"] = li_Y
                    out[keys[0]][keys[1]]["values"]["Z"] = li_Z

        if self.analysis.kineticStats.data != {}:
            processedKeys=list()
            for keys in self.analysis.kineticStats.data.keys():
                if not np.all( self.analysis.kineticStats.data[keys]["mean"]==0):

                    if keys not in processedKeys:
                        processedKeys.append(keys)
                    else:
                        raise Exception ( "[pyCGM2] - duplicated keys[ %s - %s] detected" %(keys[0],keys[1]))

                    if keys[0] not in out.keys():
                        out[keys[0]]=dict()
                        out[keys[0]][keys[1]]=dict()
                        out[keys[0]][keys[1]]["values"]= {"X":[],"Y":[],"Z":[]}
                    else:
                        out[keys[0]][keys[1]]=dict()
                        out[keys[0]][keys[1]]["values"]= {"X":[],"Y":[],"Z":[]}

                    li_X = list()
                    for cycle in self.analysis.kineticStats.data[keys]["values"]:
                        li_X.append(cycle[:,0].tolist())

                    li_Y = list()
                    for cycle in self.analysis.kineticStats.data[keys]["values"]:
                        li_Y.append(cycle[:,1].tolist())

                    li_Z = list()
                    for cycle in self.analysis.kineticStats.data[keys]["values"]:
                        li_Z.append(cycle[:,2].tolist())


                    out[keys[0]][keys[1]]["values"]["X"] = li_X
                    out[keys[0]][keys[1]]["values"]["Y"] = li_Y
                    out[keys[0]][keys[1]]["values"]["Z"] = li_Z


        if self.analysis.emgStats.data != {}:
            processedKeys=list()
            for keys in self.analysis.emgStats.data.keys():
                if not np.all( self.analysis.emgStats.data[keys]["mean"]==0):
                    if keys not in processedKeys:
                        processedKeys.append(keys)
                    else:
                        raise Exception ( "[pyCGM2] - duplicated keys[ %s - %s] detected" %(keys[0],keys[1]))

                    if keys[0] not in out.keys():
                        out[keys[0]]=dict()
                        out[keys[0]][keys[1]]=dict()
                        out[keys[0]][keys[1]]["values"]=[]
                    else:
                        out[keys[0]][keys[1]]=dict()
                        out[keys[0]][keys[1]]["values"]=[]

                    li = list()
                    for cycle in self.analysis.emgStats.data[keys]["values"]:
                        li.append(cycle[:,0].tolist())

                    out[keys[0]][keys[1]]["values"] = li

        files.saveJson(path,outputName,out)

        return out
Example #8
0
    def export(self, outputName, path=None):

        out = dict()

        if self.analysis.kinematicStats.data != {}:
            for keys in self.analysis.kinematicStats.data.keys():
                if not np.all(
                        self.analysis.kinematicStats.data[keys]["mean"] == 0):

                    out[keys[0]] = dict()
                    out[keys[0]][keys[1]] = dict()
                    out[keys[0]][keys[1]]["values"] = {
                        "X": [],
                        "Y": [],
                        "Z": []
                    }

                    li_X = list()
                    for cycle in self.analysis.kinematicStats.data[keys][
                            "values"]:
                        li_X.append(cycle[:, 0].tolist())

                    li_Y = list()
                    for cycle in self.analysis.kinematicStats.data[keys][
                            "values"]:
                        li_Y.append(cycle[:, 1].tolist())

                    li_Z = list()
                    for cycle in self.analysis.kinematicStats.data[keys][
                            "values"]:
                        li_Z.append(cycle[:, 2].tolist())

                    out[keys[0]][keys[1]]["values"]["X"] = li_X
                    out[keys[0]][keys[1]]["values"]["Y"] = li_Y
                    out[keys[0]][keys[1]]["values"]["Z"] = li_Z

        if self.analysis.kineticStats.data != {}:
            for keys in self.analysis.kineticStats.data.keys():
                if not np.all(
                        self.analysis.kineticStats.data[keys]["mean"] == 0):

                    out[keys[0]] = dict()
                    out[keys[0]][keys[1]] = dict()
                    out[keys[0]][keys[1]]["values"] = {
                        "X": [],
                        "Y": [],
                        "Z": []
                    }

                    li_X = list()
                    for cycle in self.analysis.kineticStats.data[keys][
                            "values"]:
                        li_X.append(cycle[:, 0].tolist())

                    li_Y = list()
                    for cycle in self.analysis.kineticStats.data[keys][
                            "values"]:
                        li_Y.append(cycle[:, 1].tolist())

                    li_Z = list()
                    for cycle in self.analysis.kineticStats.data[keys][
                            "values"]:
                        li_Z.append(cycle[:, 2].tolist())

                    out[keys[0]][keys[1]]["values"]["X"] = li_X
                    out[keys[0]][keys[1]]["values"]["Y"] = li_Y
                    out[keys[0]][keys[1]]["values"]["Z"] = li_Z

        if self.analysis.emgStats.data != {}:
            for keys in self.analysis.emgStats.data.keys():
                if not np.all(self.analysis.emgStats.data[keys]["mean"] == 0):

                    out[keys[0]] = dict()
                    out[keys[0]][keys[1]] = dict()
                    out[keys[0]][keys[1]]["values"] = []

                    li = list()
                    for cycle in self.analysis.emgStats.data[keys]["values"]:
                        li.append(cycle[:, 0].tolist())

                    out[keys[0]][keys[1]]["values"] = li

        files.saveJson(path, outputName, out)