Example #1
0
def SauveRecepteurPonctResults(coreconf, encoding=sys.getfilesystemencoding()):
    rootpath=os.path.join(coreconf.paths["workingdirectory"], coreconf.paths["recepteursp_directory"])
    for id,recdata in coreconf.recepteursponct.iteritems():
        saveFold = os.path.join(rootpath, recdata["name"])
        savepath = os.path.join(rootpath, recdata["name"], coreconf.paths["recepteursp_filename"])
        if "power_insta" in recdata:
            gabe_out = ls.Gabe_rw(2)
            stepcol = ls.stringarray()
            if len(recdata["power_insta"]) > 0:
                if not coreconf.const['stationary']:
                    for step_id in range(len(recdata["power_insta"][0])):
                        stepcol.append("%.1f ms" % (float(coreconf.time_step * step_id * 1000)))
                else:
                    stepcol.append("Stationary")
                gabe_out.AppendStrCol(stepcol, "SPL")
                # For each frequency
                # TODO use not hard writen frequency
                for idFreq, freq in enumerate(
                        coreconf.const["frequencies"]):
                    splcol = ls.floatarray()
                    for spl in recdata["power_insta"][idFreq]:
                        splcol.append(float(spl))
                    gabe_out.AppendFloatCol(splcol, "%i Hz" % freq)
                MakeFolderIfNeeded(saveFold)
                if not gabe_out.Save(savepath.decode(encoding).encode("UTF-8")):
                    print("Failed to save ponctual receiver file", file=sys.stderr)
            else:
                print("No data for receiver "+ recdata["name"])
Example #2
0
def getDbReceiver(filepath):
    reader = ls.Gabe_rw()
    if reader.Load(filepath):
        data = reader.ToList()
        if map(len, data) == [len(data[0])] * len(data):
            data = zip(*data)
        return to_deciBelP0(sum(map(lambda x: x[1], data)[1:]))
    return False
Example #3
0
def GabeToCsv(filepath, csvpath):
    reader = ls.Gabe_rw()
    if reader.Load(filepath):
        data = reader.ToList()
        if map(len, data) == [len(data[0])] * len(data):
            data = zip(*data)
        fich = open(csvpath, 'w')
        for line in data:
            firstcol = True
            for col in line:
                if not firstcol:
                    fich.write(",")
                else:
                    firstcol = False
                fich.write(str(col))
            fich.write("\n")
        fich.close()
Example #4
0
def GabeToCsv(filepath, csvpath):
    """
        Converti un fichier GABE (Generic Array Binary Exchange) en format CSV (Comma Separated Values)
    """
    # Instanciation du lecteur
    reader = ls.Gabe_rw()
    # Lecture du fichier gabe
    if reader.Load(filepath):
        # Conversion en liste
        data = reader.ToList()
        # Rotation des données (les colonnes deviennent des lignes)
        data = zip(*data)
        # Ecriture des données
        fich = open(csvpath, 'w')
        for line in data:
            firstcol = True
            for col in line:
                if not firstcol:
                    fich.write(",")
                else:
                    firstcol = False
                fich.write(str(col))  # Ecriture de la cellule et virgule
            fich.write("\n")  # Retour à la ligne
        fich.close()
Example #5
0
#
# For more information, please consult: <http://i-simpa.ifsttar.fr> or 
# send an email to [email protected]
#
# To contact Ifsttar, write to Ifsttar, 14-20 Boulevard Newton
# Cite Descartes, Champs sur Marne F-77447 Marne la Vallee Cedex 2 FRANCE
# or write to [email protected]
# ----------------------------------------------------------------------

import os
import sys
sys.path.append(os.getcwd())
import libsimpa as ls
import sys

driver = ls.Gabe_rw()

expected = [['', "Particules absorb\xe9es par l'atmosph\xe8re", 'Particules absorb\xe9es par les mat\xe9riaux', 'Particules perdues d\xfb aux boucles infinies', 'Particules perdues d\xfb au maillage incorrect', 'Particules restantes', 'Total'], ['50 Hz', 0, 19999966, 0, 2, 32, 20000000]]

gabe_path = u"rétrocompat_test.gabe"

if not os.path.exists(gabe_path):
    sys.exit("File not exists: " + gabe_path)

if not driver.Load(gabe_path.encode("utf-8")):
    sys.exit("Cannot load gabe file !")


grid = driver.ToList()

if not grid == expected:
Example #6
0
def MakeSPLNormalGrid(folderwxid, save_as):
    #Dictionnaire qui contiendra les données pour tout les récepteurs
    global_dict = {}
    #folder devient l'objet dossier
    folder = ui.element(folderwxid)
    #dans un tableau on place les indices des fichiers de données des récepteurs ponctuels
    recplist = folder.getallelementbytype(
        ui.element_type.ELEMENT_TYPE_REPORT_GABE_RECP)
    #Pour chaque fichiers de type ELEMENT_TYPE_REPORT_GABE_RECP
    for idrecp in recplist:
        #recp devient l'objet ayant comme indice idrecp (entier)
        recp = ui.element(idrecp)
        #Stocke les informations sur cet élément
        recpinfos = recp.getinfos()
        #Si cet élément est le niveau sonore
        if recpinfos["name"] == "soundpressure":
            #Lecture du libellé du dossier parent
            ponc_receiver_name = ui.element(
                recpinfos["parentid"]).getinfos()["label"]
            #Lecture des informations traité par I-SIMPA. C'est à dire les niveaux directement en dB avec les colonnes de cumul
            gridspl = ui.application.getdataarray(recp)
            #Lecture du cumul sur les pas de temps et sur les fréquences
            global_spl = gridspl[-1][-1]
            #Enregistrement dans le dictionnaire
            global_dict[ponc_receiver_name] = global_spl
    ###
    #Interface de sélection du récepteur ponctuel de référence
    #Création de la liste des libellés des récepteurs ponctuels
    sorted_pr_labels = global_dict.keys()
    #Tri des libellés
    sorted_pr_labels.sort()
    #Création des champs à afficher à l'utilisateur
    lbl_pr_dialog = _("Ponctual receiver name")
    choices = {lbl_pr_dialog: sorted_pr_labels}
    #Affichage de la fenêtre de dialogue
    user_choice = ui.application.getuserinput(
        "Normalisation tool", "Please choose the reference data.", choices)
    #Si l'utilisateur a validé
    if user_choice[0]:
        #Lecture du libellé du récepteur de référence
        pr_reference = user_choice[1][lbl_pr_dialog]
        sub_by = global_dict[pr_reference]
        ##
        # Création de l'objet d'écriture du format de grille de données. Le nombre de colonnes correspond au nombre de récepteurs ponctuels et une colonne de libellé
        out_grid = ls.Gabe_rw(len(global_dict.keys()) + 1)
        #Création d'un vecteur de chaine de caractères
        labels_vector = ls.stringarray()
        #Ajout d'une ligne
        labels_vector.append(_("Global").encode("cp1252"))
        #Ajout de la colonne de libellé
        out_grid.AppendStrCol(labels_vector, "")
        ##
        #Calcul du facteur de normalisation pour chaque récepteur ponctuel
        for pr_name in sorted_pr_labels:
            #Ajout d'une colonne par récepteur
            #Création d'un vecteur de nombre
            spl_vector = ls.floatarray()
            spl_vector.append(global_dict[pr_name] - sub_by)
            #Ajout de la colonne
            out_grid.AppendFloatCol(spl_vector, pr_name, 3)

        #L'utilisateur ne pourra pas modifier la feuille de données
        out_grid.SetReadOnly()
        #Sauvegarde de la grille
        out_grid.Save(save_as)
        return True
    return False