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"])
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
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()
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()
# # 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:
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