コード例 #1
0
    // extraire les données de data dans
    public void CreateDataset(string path)
    {
        List <string> tempData;
        List <string> dataArray;

        GameObject tempPrefab;
        Dataset    tempSet;
        int        temp;
        int        tempElectrodeNb;

        // on sépare les données par ligne dans une liste
        dataArray = data.Split('\n').ToList();
        // on enlève les espaces en début et fin de chaque ligne (pour ne pas avoir de ligne vide)
        foreach (string s in dataArray)
        {
            s.Trim();
        }

        // on parse la première ligne
        tempData = dataArray[0].Split(separator).ToList();
        // on récupère le nb d'électrodes
        int.TryParse(tempData[0], out tempElectrodeNb);

        // On crée un dataset
        tempSet = new Dataset(path.Split('\\').Last(), tempElectrodeNb);

        // on sauvegarde l'unité de temps
        tempSet.timeUnit = tempData[1];

        // on récupère les timeStamps
        for (int i = 2; i < tempData.Count(); ++i)
        {
            // si la string peut être convertie en int, on ajoute cet int à la liste dans le dataset
            if (int.TryParse(tempData[i], out temp))
            {
                tempSet.timestamps.Add(temp);
            }
        }

        // on parse les électrodes
        for (int i = 1; i < dataArray.Count(); ++i)
        {
            if (dataArray[i] != "")
            {
                // on récupère les infos de la ligne
                tempData = dataArray[i].Split(separator).ToList();

                // on crée une nouvelle struct d'electrode et on lui met les infos de base
                ElectrodeLocal EL = new ElectrodeLocal(int.Parse(tempData[0], numberFormat), tempData[1], tempData[2],
                                                       float.Parse(tempData[3], numberFormat), float.Parse(tempData[4], numberFormat), float.Parse(tempData[5], numberFormat), tempData.Count() - 6);

                // on récupère les valeurs de relevés et on les mets dans la struct
                for (int j = 6; j < tempData.Count(); ++j)
                {
                    float.TryParse(tempData[j], NumberStyles.Float, numberFormat, out EL.values[j - 6]);
                }

                // on ajoute la structure ainsi créée à la liste des électrodes du dataset
                tempSet.data.Add(EL);
            }
        }

        // ici on peut faire différent check => UNIQUEMENT TEST SUR DATASET ACTUEL
        // si le nb d'électrodes dans la liste est différent de nbelectrodes, il y a un soucis on interrompt l'ajout
        if (tempSet.data.Count != tempElectrodeNb)
        {
            Debug.Log("Error : Specified number of electrodes doesn't match with the actual number of electrode lines in the file, please check for discrepancies. Dataset will not be added");
            return;

            ////////////////// AJOUTER ///////////////
            // affichage d'une pop-up avec les différents messages d'erreur pour version buildée
            ////////////////// AJOUTER ///////////////
        }
        else
        {
            foreach (var item in tempSet.data)
            {
                // si le nombre de relevé d'une électrode est différent du nombre de timestamps
                if (item.values.Length != tempSet.timestamps.Count())
                {
                    Debug.Log("Error : At least one electrode has a number of values different from the provided number of timestamps, please check for discrepancies. Dataset will not be added.");
                    return;
                }
            }
        }

        /*! Si tout va bien : !*/
        // on incrémente le compteur de datasets
        ++datasetsCount;
        // une fois le dataset complet, on ajoute le dataset à la liste globale
        sets.Add(tempSet);

        // on crée le prefab d'UI
        tempPrefab = (GameObject)Instantiate(prefabUI, new Vector3(0, 0, 0), Quaternion.identity,
                                             GameObject.FindWithTag("DatasetsPanel").transform);
        // on met les bons textes dans le prefab
        tempPrefab.GetComponentsInChildren <Text>().ElementAt(0).text = "Set" + datasetsCount.ToString();
        tempPrefab.GetComponentsInChildren <Text>().ElementAt(1).text = tempSet.electrodesNb.ToString() + " electrodes";
        tempPrefab.GetComponentsInChildren <Text>().ElementAt(2).text = tempSet.name;
        // on change l'ordre du prefab dans la hiérarchie
        tempPrefab.transform.SetSiblingIndex(tempPrefab.transform.GetSiblingIndex() - 1);
        // on assigne le bon callback au bouton remove
        tempPrefab.GetComponentInChildren <Button>().onClick.AddListener(() => RemoveDataset(tempPrefab));
    }
コード例 #2
0
    public void CalculateFinalSet()
    {
        // si le check de la formule ne passe pas
        if (!CheckFormula())
        {
            // afficher message pour dire de régler les erreurs d'abord

            // sortir de la fonction : on ne fait pas le calcul
            return;
        }

        // pour stocker min et max
        float minTest = 0;
        float maxTest = 0;

        // On active le panneau d'info de loading
        loadingPanel.SetActive(true);

        // On vide le dataset calculé avant s'il y en a un
        //proSet.Clear();
        // on supprime les électrodes déjà instanciées
        foreach (Electrode elec in GetComponentsInChildren <Electrode>())
        {
            Destroy(elec.gameObject);
        }
        // on remet à 0 le controller
        controller.value = 0;

        // on crée le compteur et le tableau pour stocker les arguments
        int argCounter = 0;

        Argument[] arg = new Argument[usedSets.Count];

        // on instancie les arguments et on set leur nom
        foreach (int k in usedSets)
        {
            arg[argCounter] = new Argument("Set" + k, 0);
            ++argCounter;
//Debug.Log("Set"+k);
        }
        // on reset le compteur utilisé
        argCounter = 0;

        // On crée l'expression
        Expression e = new Expression(formulaField.text, arg);

        // on crée le dataset final
//Debug.Log(sets[0].name);
        proSet = new Dataset("proSet", sets[usedSets[0] - 1].electrodesNb);
        // on choisit l'unité de temps du premier set
        proSet.timeUnit = sets[usedSets[0] - 1].timeUnit;

        // on instancie les timestamps réels des datasets choisis
        //proSet.timestamps = sets[usedSets[0]-1].timestamps;
        foreach (int item in sets[usedSets[0] - 1].timestamps)
        {
            proSet.timestamps.Add(item);
        }
        // on met à jour l'UI en adaptant le slider
        controller.maxValue = proSet.timestamps.Count - 1;

        // pour le nombre d'électrodes des sets
        for (int i = 0; i < proSet.electrodesNb; ++i)
        {
            // On crée une nouvelle électrode
            ElectrodeLocal ELL = new ElectrodeLocal(sets[usedSets[0] - 1].data[i].ID, sets[usedSets[0] - 1].data[i].name,
                                                    sets[usedSets[0] - 1].data[i].patient, sets[usedSets[0] - 1].data[i].coords.x, sets[usedSets[0] - 1].data[i].coords.y,
                                                    sets[usedSets[0] - 1].data[i].coords.z, sets[usedSets[0] - 1].data[i].values.Length);

            // on boucle sur le nombre de timestamps
            for (int j = 0; j < proSet.timestamps.Count; ++j)
            {
                // on set toutes les variables du calcul
                foreach (int k in usedSets)
                {
                    arg[argCounter].setArgumentValue(sets[k - 1].data[i].values[j]);
                    ++argCounter;
                }

                // on calcule la valeur et on la met dans l'électrode en train d'être créée
                //Expression e = new Expression(formulaField.text,arg);
//Debug.Log(e.calculate());
                ELL.values[j] = (float)e.calculate();
                if (ELL.values[j] < minTest)
                {
                    minTest = ELL.values[j];
                }
                else if (ELL.values[j] > maxTest)
                {
                    maxTest = ELL.values[j];
                }

                // on reset argCounter
                argCounter = 0;
            }

            // On insère l'électrode dans le dataset final
            proSet.data.Add(ELL);

            // On met à jour les données de min et max
            minValue = minTest;
            maxValue = maxTest;
            // On met à jour leur affichage
            minField.text = minValue.ToString();
            maxField.text = maxValue.ToString();
        }

//        // Si le champ max n'a pas été rempli
//
//            // On cherche le max de la série de valeurs et il devient le max
//
//        // Si le champ min n'a pas été rempli
//
//            // On cherche le min de la série de valeurs et il devient le min
//

        // On crée les électrodes dans la visualisation
        InstantiateElectrodes();

        // On a fini, on désactive le panneau d'info de loading
        loadingPanel.SetActive(false);

        // On affiche les bonnes couleurs pour les électrodes
        UpdateElectrodesColor();

        // On update la taille des électrodes
        UpdateElecrodesScale(electrodeScale.text);
    }
コード例 #3
0
    int AddDataset(List <string> data, int index, bool pro)
    {
        List <string> tempData;
        Dataset       tempSet;
        int           temp;
        GameObject    tempPrefab;

        // on parse la première ligne
        tempData = data[index].Split(';').ToList(); index++;
        // On crée un dataset
        tempSet = new Dataset(tempData[0], int.Parse(tempData[2], c));

        // Get the time unit
        tempSet.timeUnit = tempData[1];

        // on récupère les timeStamps
        for (int i = 3; i < tempData.Count(); ++i)
        {
            // si la string peut être convertie en int, on ajoute cet int à la liste dans le dataset
            if (int.TryParse(tempData[i], NumberStyles.Any, c, out temp))
            {
                tempSet.timestamps.Add(temp);
            }
        }

        // on parse les électrodes
        for (int i = 0; i < tempSet.electrodesNb; ++i)
        {
            // on récupère les infos de la ligne
            tempData = data[index].Split(';').ToList();
//Debug.Log(tempData.Count + " " + data[index]);
            // on crée une nouvelle struct d'electrode et on lui met les infos de base
            ElectrodeLocal EL = new ElectrodeLocal(int.Parse(tempData[0], c), tempData[1], tempData[2],
                                                   float.Parse(tempData[3], c), float.Parse(tempData[4], c),
                                                   float.Parse(tempData[5], c), tempData.Count() - 7);

            // on récupère les valeurs de relevés et on les mets dans la struct
            for (int j = 6; j < tempData.Count() - 1; ++j)
            {
                float.TryParse(tempData[j], NumberStyles.Any, c, out EL.values[j - 6]);
            }

            // on ajoute la structure ainsi créée à la liste des électrodes du dataset
            tempSet.data.Add(EL);

            index++;
        }

        // si on assigne le set calculé
        if (pro)
        {
            electrodesData.proSet = tempSet;
            electrodesData.InstantiateElectrodes();
        }
        // sinon, on fait la création normale d'un dataset
        else
        {
            // on incrémente le compteur de datasets
            electrodesData.datasetsCount++;
            // une fois le dataset complet, on ajoute le dataset à la liste globale
            electrodesData.sets.Add(tempSet);

            // on crée le prefab d'UI (si il y a un endroit où le mettre)
            if (datasetsPanel != null)
            {
                tempPrefab = (GameObject)Instantiate(electrodesData.prefabUI, new Vector3(0, 0, 0), Quaternion.identity,
                                                     datasetsPanel.transform);
                // on met les bons textes dans le prefab
                tempPrefab.GetComponentsInChildren <Text>().ElementAt(0).text = "Set" + electrodesData.datasetsCount.ToString();
                tempPrefab.GetComponentsInChildren <Text>().ElementAt(1).text = tempSet.electrodesNb.ToString() + " electrodes";
                tempPrefab.GetComponentsInChildren <Text>().ElementAt(2).text = tempSet.name;
                // on change l'ordre du prefab dans la hiérarchie
                tempPrefab.transform.SetSiblingIndex(tempPrefab.transform.GetSiblingIndex() - 1);
                // on assigne le bon callback au bouton remove
                tempPrefab.GetComponentInChildren <Button>().onClick.AddListener(() => electrodesData.RemoveDataset(tempPrefab));
            }
        }

        return(index);
    }