]> SALOME platform Git repositories - modules/smesh.git/blobdiff - src/Tools/Verima/Base/dataBase.py
Salome HOME
IMP: Verima / New Plugin: Added a plugin for meshers quality testing (work done at...
[modules/smesh.git] / src / Tools / Verima / Base / dataBase.py
diff --git a/src/Tools/Verima/Base/dataBase.py b/src/Tools/Verima/Base/dataBase.py
new file mode 100644 (file)
index 0000000..b49d321
--- /dev/null
@@ -0,0 +1,395 @@
+# -*- coding: utf-8 -*-
+
+import os
+import datetime
+import sys
+
+from PyQt4 import QtSql, QtCore
+from tableMaillages  import TableMaillages
+from tableMailleurs  import TableMailleurs
+from tableMachines   import TableMachines
+from tableVersions   import TableVersions
+from tableGroupesRef import TableGroupesRef
+from tableGroupes    import TableGroupes
+from tableMailles    import TableMailles
+from tableTailles    import TableTailles
+from tableRatios     import TableRatios
+from tablePerfs      import TablePerfs
+from Stats.job       import Job
+from Stats.ref       import Ref
+from CreeDocuments.jobHtml       import Document
+
+
+class Base:
+  def __init__(self,file):    
+       self.db  = QtSql.QSqlDatabase.addDatabase("QSQLITE")
+       self.db.setDatabaseName(file)
+       self.db.setHostName("localhost");
+       self.db.setUserName("");
+       self.db.setPassword("")
+       if not self.db.open():
+         print(self.db.lastError().text())
+       else:
+         print "dataBase Open"
+       self.file=file
+        
+  def create(self):
+      self.maTableMailleurs=TableMailleurs()
+      self.maTableMailleurs.createSqlTable()
+      self.maTableMachines=TableMachines()
+      self.maTableMachines.createSqlTable()
+      self.maTableVersions=TableVersions()
+      self.maTableVersions.createSqlTable()
+      self.maTableMaillages=TableMaillages()
+      self.maTableMaillages.createSqlTable()
+      self.maTableGroupesRef=TableGroupesRef()
+      self.maTableGroupesRef.createSqlTable()
+      self.maTablePerfs=TablePerfs()
+      self.maTablePerfs.createSqlTable()
+      self.maTableMailles=TableMailles()
+      self.maTableMailles.createSqlTable()
+      self.maTableTailles=TableTailles()
+      self.maTableTailles.createSqlTable()
+      self.maTableGroupes=TableGroupes()
+      self.maTableGroupes.createSqlTable()
+      self.maTableRatios=TableRatios()
+      self.maTableRatios.createSqlTable()
+    
+  def initialise(self):
+      self.maTableMaillages=TableMaillages()
+      self.maTableMailleurs=TableMailleurs()
+      self.maTableVersions=TableVersions()
+      self.maTableMachines=TableMachines()
+      self.maTableMailles=TableMailles()
+      self.maTableTailles=TableTailles()
+      self.maTableGroupes=TableGroupes()
+      self.maTableGroupesRef=TableGroupesRef()
+      self.maTablePerfs=TablePerfs()
+      self.maTableRatios=TableRatios()
+  def remplit(self):
+      self.maTableMailleurs.remplit()
+      self.maTableMaillages.remplit()
+      self.maTableVersions.remplit()
+      #self.maTableVersions.creeVersion()
+      self.maTableMachines.creeMachine()
+      self.maTableGroupesRef.remplit()
+
+  def close(self):
+       self.db.close()
+       
+  def exportToCSV(self,partiel):
+      aujourdhui=datetime.date.today()
+      monFolder="ExportDB"+str(aujourdhui)
+      try :
+        os.mkdir(monFolder)
+      except :
+        pass
+      self.maTableMachines.exportToCSV()
+      self.maTableMailles.exportToCSV()
+      self.maTableTailles.exportToCSV()
+      self.maTableGroupes.exportToCSV()
+      self.maTablePerfs.exportToCSV()
+      self.maTableRatios.exportToCSV()
+      if partiel==True: return
+      self.maTableMailleurs.exportToCSV()
+      self.maTableVersions.exportToCSV()
+      self.maTableMaillages.exportToCSV()
+      self.maTableMachines.exportToCSV()
+      self.maTableGroupesRef.exportToCSV()
+
+  def importFromCSV(self,folder,partiel,force):
+      if partiel==False: 
+         self.maTableMailleurs.importFromCSV(folder,force)
+         self.maTableVersions.importFromCSV(folder,force)
+         self.maTableMaillages.importFromCSV(folder,force)
+         self.maTableGroupesRef.importFromCSV(folder,force)
+         self.maTableMachines.importFromCSV(folder,force)
+      self.maTableMailles.importFromCSV(folder,force)
+      self.maTableGroupes.importFromCSV(folder,force)
+      self.maTablePerfs.importFromCSV(folder,force)
+      self.maTableRatios.importFromCSV(folder,force)
+      self.maTableGroupesRef.importFromCSV(folder,force)
+
+  def Structure(self):
+      # jamais appelee. juste pour memoire
+      texteQuery='select * from sqlite_master;'
+      maQuery=QSqlQuery()
+      return maQuery.exec_(texteQuery)
+
+  def passeJobs(self,all,salomePath,version,force,listeMaillage):
+      if all==True: paramMaillage=self.maTableMaillages.construitListeMaillages()
+      else        : paramMaillage=self.maTableMaillages.verifieListeMaillages(listeMaillage)
+      # paramMaillage=(( id, script, fichier med),)
+
+      #version="Salome7.3"
+      bOk,versionId,versionName = self.maTableVersions.chercheVersion(version)
+      if bOk==False:
+         self.maTableVersions.creeVersion(version)
+         print "nouvelle Version enregistree dans la base"
+         bOk,versionId,versionName = self.maTableVersions.chercheVersion(version)
+         if bOk==False:
+            print "Impossible de creer la version"
+            return
+
+      bOk,nomMachine = self.maTableMachines.chercheMachine()
+      if bOk==False:
+         self.maTableMachines.creeMachine()
+         print "enregistrement de la machine dans la table des machines"
+         bOk,nomMachine = self.maTableMachines.chercheMachine()
+         if bOk==False:
+            print "Impossible de creer la version"
+            return
+
+
+      for params in paramMaillage:
+        
+         print "___________________________________________"
+         print ""
+         print " Job : ", params[1]
+         print " Version de salome : ", versionName 
+
+         #recherche si le Job a deja ete passe
+         if self.maTablePerfs.getVal(params[0],versionId,nomMachine) !=None and force==False:
+            print "job numero: " , params[0], "deja passe"
+            print ""
+            print "___________________________________________"
+            continue
+
+         # recherche de la reference du Job
+         maRef=Ref(self,params[0],versionId,nomMachine)
+         idVersionRef=self.maTableVersions.getVersionRef()
+         idJob=params[0]
+         if maRef.existe==False and idVersionRef != versionId :
+            print "pas de reference pour le job : ", params[0]
+            print "pas de passage du job", 
+            continue
+
+
+         mesGroupesRef=self.maTableGroupesRef.getVals(idJob)
+         fichierGroupesRef=str(params[2]).replace('.med','_groupesRef.res')
+         from Stats.utiles import writeFile
+         writeFile(fichierGroupesRef,",".join(mesGroupesRef))
+         monjob=Job(params,salomePath,versionId,nomMachine,mesGroupesRef)
+         print ""
+         print "  Debut d execution"
+         monjob.execute()
+      
+         # remplit Perfs
+         self.maTablePerfs.insereOuRemplaceLigne((idJob,versionId,nomMachine,int(monjob.getCPU()),0),False)
+         if idVersionRef != versionId :
+            stop=maRef.verifieCpu(monjob.getCPU())
+            if stop :
+               print "                   Arret                "
+               print " Pb CPU: Seuil Atteint sur job : ", params[0]
+               print "________________________________________"
+
+         # remplit la table Mailles
+         listeColonnes,listeValues=monjob.getStatSurMailles()
+         print listeColonnes,listeValues
+         i=0
+         for col in listeColonnes :
+            lVal=[idJob,versionId,nomMachine,col]+[listeValues[i]]
+            lVal=tuple(lVal)
+            if str(listeValues[i]) != str(0): self.maTableMailles.insereOuRemplaceLigne(lVal,False)
+            i+=1
+         if idVersionRef != versionId :
+            stop=maRef.verifieMailles(listeValues,listeColonnes)
+            if stop :
+               print "                   Arret                "
+               print " Pb sur le nombre de Maille : Seuil Atteint sur job : ", params[0]
+               print "_________________________________________________________________"
+               #exit()
+            else :
+               print "verification du Nb de Mailles effectuee"
+
+         # remplit la table Tailles
+         listeValues=monjob.getStatSurTailles()
+         lVal=[params[0],versionId,nomMachine]+listeValues
+         self.maTableTailles.insereOuRemplaceLigne(tuple(lVal),False)
+         if idVersionRef != versionId :
+            stop=maRef.verifieTailles(lVal)
+            if stop :
+               print "                   Arret                "
+               print " Pb sur la taille des mailles : Seuil Atteint sur job : ", params[0]
+               print "_________________________________________________________________"
+               #exit()
+            else :
+               print "verification du Nb de Mailles effectuee"
+
+
+         # remplit la table Ratio
+         maDim=self.maTableMaillages.getVal(params[0],'dimension')
+         if maDim == 3 :
+            listeValues=monjob.getStatSurRatios()
+            lVal=[params[0],versionId,nomMachine]+listeValues
+            self.maTableRatios.insereOuRemplaceLigne(tuple(lVal),False)
+            if idVersionRef != versionId :
+               stop=maRef.verifieRatios(lVal)
+               if stop :
+                  print "                   Arret                "
+                  print " Pb sur la taille des mailles : Seuil Atteint sur job : ", params[0]
+                  print "_________________________________________________________________"
+                  #exit()
+               else :
+                  print "verification du Nb de Mailles effectuee"
+
+         # remplit les Groupes
+         for groupe in mesGroupesRef:
+             listeColonnes,listeValues=monjob.getStatSurGroupes(groupe)
+             i=0
+             for col in listeColonnes :
+                lVal=[groupe,params[0],versionId,nomMachine,col]+[listeValues[i]]
+                lVal=tuple(lVal)
+                if str(listeValues[i]) != str(0): self.maTableGroupes.insereOuRemplaceLigne(lVal,False)
+                i=i+1
+             if idVersionRef != versionId :
+                stop=maRef.verifieMaillesPourGroupes(groupe,listeValues,listeColonnes)
+                stop=0
+                if stop :
+                   print "                   Arret                "
+                   print " Pb sur le nombre de Maille : Seuil Atteint sur job : ", params[0]
+                   print "_________________________________________________________________"
+                   #exit()
+         print "verification du Nb de Mailles sur les groupes reference effectuee"
+         print "_________________________________________________________________"
+
+  
+  def compare(self,version,versionRef,fichier):    
+      print "_________________________________________________________________"
+      print "Generation du rapport de comparaison" 
+      bOk,versionId,versionName = self.maTableVersions.chercheVersion(version)
+      if bOk==False :
+         print "version ", version , " inconnue dans la base"
+         exit()
+      print "Version a comparer : ", versionName
+      versionCompName=versionName
+      versionCompId=versionId
+
+      if versionRef==None:
+         idVersionRef=self.maTableVersions.getVersionRef()
+      bOk,versionId,versionName = self.maTableVersions.chercheVersion(idVersionRef)
+      if bOk==False :
+         print "version de référence ", versionRef , " inconnue dans la base"
+      versionRefName=versionName
+      versionRefId=versionId
+      print "Version de comparaison : ", versionRefName
+
+      bOk,nomMachine = self.maTableMachines.chercheMachine()
+      monDocument=Document()
+      monDocument.initEntete(versionName, versionRefName,nomMachine)
+      mailleursIdListe,mailleursNameListe=self.maTableMailleurs.getTous()
+      
+      allEntitySurMaille=self.maTableMailles.getAllEntity()
+      allEntitySurGroupe=self.maTableGroupes.getAllEntity()
+      # Boucle sur les mailleurs
+      for indexMailleur in range(len(mailleursNameListe)):
+          monDocument.initMailleur(mailleursNameListe[indexMailleur]) 
+          l1,l2,l3,l4,l5,l6=self.maTableMaillages.getTousPourMaillage(mailleursIdListe[indexMailleur])
+          maillagesIdListe=l1
+          maillagesNameListe=l2
+          maillagesSeuilCPUListe=l3
+          maillagesSeuilRatioListe=l4
+          maillagesSeuilTailleListe=l5
+          maillagesSeuilNbMailleListe=l6
+          dicoMaillage={}
+      #   Boucle sur les maillages 
+          for indexMaillage in range(len(maillagesNameListe)):
+             idMaillage=maillagesIdListe[indexMaillage]
+             dicoMaillage["NOM"]=maillagesNameListe[indexMaillage]
+             dicoMaillage["NBCPU"]=self.maTablePerfs.getVal(idMaillage,versionCompId,nomMachine)
+             dicoMaillage["REFCPU"]=self.maTablePerfs.getVal(idMaillage,versionRefId,nomMachine)
+             dicoMaillage["DIFCPU"],dicoMaillage["DIFREL"],dicoMaillage["WARNING"]=self.calculDiffCPU(dicoMaillage["NBCPU"],dicoMaillage["REFCPU"],maillagesSeuilCPUListe[indexMaillage])
+  
+             dicoMaillage["RMAX"]=self.maTableRatios.getVal(idMaillage,versionCompId,nomMachine,'RatioMax')
+             dicoMaillage["RMAXREF"]=self.maTableRatios.getVal(idMaillage,versionRefId,nomMachine,'RatioMax')
+             dicoMaillage["RMIN"]=self.maTableRatios.getVal(idMaillage,versionCompId,nomMachine,'RatioMin')
+             dicoMaillage["RMINREF"]=self.maTableRatios.getVal(idMaillage,versionRefId,nomMachine,'RatioMin')
+             dicoMaillage["RMOY"]=self.maTableRatios.getVal(idMaillage,versionCompId,nomMachine,'Moyenne')
+             dicoMaillage["RMOYREF"]=self.maTableRatios.getVal(idMaillage,versionRefId,nomMachine,'Moyenne')
+             dicoMaillage["R1Q"]=self.maTableRatios.getVal(idMaillage,versionCompId,nomMachine,'Q1')
+             dicoMaillage["R1QREF"]=self.maTableRatios.getVal(idMaillage,versionRefId,nomMachine,'Q1')
+             dicoMaillage["RMED"]=self.maTableRatios.getVal(idMaillage,versionCompId,nomMachine,'Mediane')
+             dicoMaillage["RMEDREF"]=self.maTableRatios.getVal(idMaillage,versionRefId,nomMachine,'Mediane')
+             dicoMaillage["R3Q"]=self.maTableRatios.getVal(idMaillage,versionCompId,nomMachine,'Q3')
+             dicoMaillage["R3QREF"]=self.maTableRatios.getVal(idMaillage,versionRefId,nomMachine,'Q3')
+  
+             dicoMaillage["TMAX"]=self.maTableTailles.getVal(idMaillage,versionCompId,nomMachine,'TailleMax')
+             dicoMaillage["TMAXREF"]=self.maTableTailles.getVal(idMaillage,versionRefId,nomMachine,'TailleMax')
+             dicoMaillage["TMIN"]=self.maTableTailles.getVal(idMaillage,versionCompId,nomMachine,'TailleMin')
+             dicoMaillage["TMINREF"]=self.maTableTailles.getVal(idMaillage,versionRefId,nomMachine,'TailleMin')
+             dicoMaillage["TMOY"]=self.maTableTailles.getVal(idMaillage,versionCompId,nomMachine,'Moyenne')
+             dicoMaillage["TMOYREF"]=self.maTableTailles.getVal(idMaillage,versionRefId,nomMachine,'Moyenne')
+             dicoMaillage["T1Q"]=self.maTableTailles.getVal(idMaillage,versionCompId,nomMachine,'Q1')
+             dicoMaillage["T1QREF"]=self.maTableTailles.getVal(idMaillage,versionRefId,nomMachine,'Q1')
+             dicoMaillage["TMED"]=self.maTableTailles.getVal(idMaillage,versionCompId,nomMachine,'Mediane')
+             dicoMaillage["TMEDREF"]=self.maTableTailles.getVal(idMaillage,versionRefId,nomMachine,'Mediane')
+             dicoMaillage["T3Q"]=self.maTableTailles.getVal(idMaillage,versionCompId,nomMachine,'Q3')
+             dicoMaillage["T3QREF"]=self.maTableTailles.getVal(idMaillage,versionRefId,nomMachine,'Q3')
+
+             monDocument.initJob(dicoMaillage)
+
+             i=0
+             dico={}
+             dico["TITRE"]="Nombre de Mailles dans le maillage entier"
+             for nomColonne in allEntitySurMaille:
+                 val=self.maTableMailles.getVal(idMaillage,versionCompId,nomMachine,nomColonne)
+                 valRef=self.maTableMailles.getVal(idMaillage,versionRefId,nomMachine,nomColonne)
+                 if val==0 and valRef==0 : continue
+                 i=i+1
+                 #print nomColonne;print val; print valRef
+                 cMAIL="MAIL"+str(i); cREF="REF"+str(i)
+                 cNB="NB"+str(i); cDIF="DIF"+str(i); cREL="REL"+str(i)
+                 cWARN="WARN"+str(i);
+                 dico[cMAIL]=nomColonne
+                 dico[cREF]=valRef
+                 dico[cNB]=val
+                 dico[cDIF],dico[cREL],dico[cWARN]=self.calculDiff(val,valRef,maillagesSeuilNbMailleListe[indexMaillage])
+             monDocument.initMaille(dico,i)
+
+             # Boucle sur les groupes du maillage
+             mesGroupesRef=self.maTableGroupesRef.getVals(idMaillage)
+             if mesGroupesRef==[] : monDocument.addNoGroup()
+             for groupeId in mesGroupesRef:
+                 i=0
+                 dico={}
+                 dico["TITRE"]="Nombre de Mailles dans le groupe "+groupeId
+                 for nomColonne in allEntitySurGroupe:
+                     val=self.maTableGroupes.getVal(groupeId,idMaillage,versionCompId,nomMachine,nomColonne)
+                     valRef=self.maTableGroupes.getVal(groupeId,idMaillage,versionRefId,nomMachine,nomColonne)
+                     if val==0 and valRef==0 : continue
+                     i=i+1
+                     cMAIL="MAIL"+str(i); cREF="REF"+str(i)
+                     cNB="NB"+str(i); cDIF="DIF"+str(i); cREL="REL"+str(i)
+                     cWARN="WARN"+str(i);
+                     #print nomColonne," ",val," ",valRef
+                     dico[cMAIL]=nomColonne
+                     dico[cREF]=valRef
+                     dico[cNB]=val
+                     dico[cDIF],dico[cREL],dico[cWARN]=self.calculDiff(val,valRef,maillagesSeuilNbMailleListe[indexMaillage])
+                 monDocument.initMaille(dico,i)
+
+      monDocument.creeDocument(fichier)
+
+  def calculDiffCPU(self,nb,nbRef,seuil):    
+         # different de calculDiff : si on est inferieur a la reference
+         # on n a pas de warning
+         diff=nb-nbRef
+         diffRel=((nb-nbRef)*100)/(nbRef*1.00)
+         if diffRel > seuil :
+            warning="plus de "+ str(seuil) + "% de difference CPU"
+         else :
+            warning=""
+         diffRelStr=str(diffRel)+"%"
+         return diff,diffRelStr,warning
+         
+  def calculDiff(self,nb,nbRef,seuil):    
+         diff=nb-nbRef
+         diffRel=((nb-nbRef)*100)/(nbRef*1.00)
+         if diffRel > seuil or (-1*diffRel) > seuil  :
+            warning="difference superieure a "+ str(seuil) + "%"
+         else :
+            warning=""
+         diffRelStr=str(diffRel)+"%"
+         return diff,diffRelStr,warning
+