Salome HOME
Merge branch 'V9_9_BR'
[modules/smesh.git] / src / Tools / Verima / Base / dataBase.py
1 # Copyright (C) 2013-2022  EDF R&D
2 #
3 # This library is free software; you can redistribute it and/or
4 # modify it under the terms of the GNU Lesser General Public
5 # License as published by the Free Software Foundation; either
6 # version 2.1 of the License, or (at your option) any later version.
7 #
8 # This library is distributed in the hope that it will be useful,
9 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
11 # Lesser General Public License for more details.
12 #
13 # You should have received a copy of the GNU Lesser General Public
14 # License along with this library; if not, write to the Free Software
15 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
16 #
17 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
18 #
19
20 import os
21 import datetime
22 import sys
23
24 from qtsalome import QSqlQuery, QSqlDatabase
25 from Base.tableMaillages  import TableMaillages
26 from Base.tableMailleurs  import TableMailleurs
27 from Base.tableMachines   import TableMachines
28 from Base.tableVersions   import TableVersions
29 from Base.tableGroupesRef import TableGroupesRef
30 from Base.tableGroupes    import TableGroupes
31 from Base.tableMailles    import TableMailles
32 from Base.tableTailles    import TableTailles
33 from Base.tableRatios     import TableRatios
34 from Base.tableGroupeRatios     import TableGroupeRatios
35 from Base.tableGroupeTailles    import TableGroupeTailles
36 from Base.tablePerfs      import TablePerfs
37 from Stats.job       import Job
38 from CreeDocuments.jobHtml       import Document
39
40
41 class Base:
42   def __init__(self,file):    
43        self.db  = QSqlDatabase.addDatabase("QSQLITE")
44        self.db.setDatabaseName(file)
45        self.db.setHostName("localhost");
46        self.db.setUserName("");
47        self.db.setPassword("")
48        if not self.db.open():
49          print((self.db.lastError().text()))
50        else:
51          print("dataBase Open")
52        self.file=file
53         
54   def create(self):
55       self.maTableMailleurs=TableMailleurs()
56       self.maTableMailleurs.createSqlTable()
57       self.maTableMachines=TableMachines()
58       self.maTableMachines.createSqlTable()
59       self.maTableVersions=TableVersions()
60       self.maTableVersions.createSqlTable()
61       self.maTableMaillages=TableMaillages()
62       self.maTableMaillages.createSqlTable()
63       self.maTableGroupesRef=TableGroupesRef()
64       self.maTableGroupesRef.createSqlTable()
65       self.maTablePerfs=TablePerfs()
66       self.maTablePerfs.createSqlTable()
67       self.maTableMailles=TableMailles()
68       self.maTableMailles.createSqlTable()
69       self.maTableTailles=TableTailles()
70       self.maTableTailles.createSqlTable()
71       self.maTableGroupes=TableGroupes()
72       self.maTableGroupes.createSqlTable()
73       self.maTableRatios=TableRatios()
74       self.maTableRatios.createSqlTable()
75       self.maTableGroupeRatios=TableGroupeRatios()
76       self.maTableGroupeRatios.createSqlTable()
77       self.maTableGroupeTailles=TableGroupeTailles()
78       self.maTableGroupeTailles.createSqlTable()
79     
80   def initialise(self):
81       self.maTableMaillages=TableMaillages()
82       self.maTableMailleurs=TableMailleurs()
83       self.maTableVersions=TableVersions()
84       self.maTableMachines=TableMachines()
85       self.maTableMailles=TableMailles()
86       self.maTableTailles=TableTailles()
87       self.maTableGroupes=TableGroupes()
88       self.maTableGroupesRef=TableGroupesRef()
89       self.maTablePerfs=TablePerfs()
90       self.maTableRatios=TableRatios()
91       self.maTableGroupeRatios=TableGroupeRatios()
92       self.maTableGroupeTailles=TableGroupeTailles()
93  
94   def remplit(self):
95       self.maTableMailleurs.remplit()
96       self.maTableMaillages.remplit()
97       self.maTableVersions.remplit()
98       self.maTableMachines.creeMachine()
99       self.maTableGroupesRef.remplit()
100
101   def close(self):
102        self.db.close()
103        
104   def exportToCSV(self,partiel):
105       aujourdhui=datetime.date.today()
106       monFolder="ExportDB"+str(aujourdhui)
107       try :
108         os.mkdir(monFolder)
109       except :
110         pass
111       self.maTableMachines.exportToCSV()
112       self.maTableMailles.exportToCSV()
113       self.maTableTailles.exportToCSV()
114       self.maTableGroupes.exportToCSV()
115       self.maTablePerfs.exportToCSV()
116       self.maTableRatios.exportToCSV()
117       self.maTableGroupeRatios.exportToCSV()
118       self.maTableGroupeTailles.exportToCSV()
119       if partiel==True: return
120       self.maTableMailleurs.exportToCSV()
121       self.maTableVersions.exportToCSV()
122       self.maTableMaillages.exportToCSV()
123       self.maTableMachines.exportToCSV()
124       self.maTableGroupesRef.exportToCSV()
125
126   def importFromCSV(self,folder,partiel,force):
127       if partiel==False: 
128          self.maTableMailleurs.importFromCSV(folder,force)
129          self.maTableVersions.importFromCSV(folder,force)
130          self.maTableMaillages.importFromCSV(folder,force)
131          self.maTableGroupesRef.importFromCSV(folder,force)
132          self.maTableMachines.importFromCSV(folder,force)
133       self.maTableMailles.importFromCSV(folder,force)
134       self.maTableGroupes.importFromCSV(folder,force)
135       self.maTablePerfs.importFromCSV(folder,force)
136       self.maTableRatios.importFromCSV(folder,force)
137       self.maTableGroupesRef.importFromCSV(folder,force)
138       self.maTableGroupeRatios.importFromCSV(folder,force)
139       self.maTableGroupeTailles.importFromCSV(folder,force)
140
141   def Structure(self):
142       # jamais appelee. juste pour memoire
143       texteQuery='select * from sqlite_master;'
144       maQuery=QSqlQuery()
145       return maQuery.exec_(texteQuery)
146
147   def passeJobs(self,all,salomePath,version,force,listeMaillage):
148       if all==True: paramMaillage=self.maTableMaillages.construitListeMaillages()
149       else        : paramMaillage=self.maTableMaillages.verifieListeMaillages(listeMaillage)
150       # paramMaillage=(( id, script, fichier med),)
151
152       bOk,versionId,versionName = self.maTableVersions.chercheVersion(version)
153       if bOk==False:
154          self.maTableVersions.creeVersion(version)
155          print("nouvelle Version enregistree dans la base")
156          bOk,versionId,versionName = self.maTableVersions.chercheVersion(version)
157          if bOk==False:
158             print("Impossible de creer la version")
159             return
160
161       bOk,nomMachine = self.maTableMachines.chercheMachine()
162       if bOk==False:
163          self.maTableMachines.creeMachine()
164          print("enregistrement de la machine dans la table des machines")
165          bOk,nomMachine = self.maTableMachines.chercheMachine()
166          if bOk==False:
167             print("Impossible de creer la version")
168             return
169
170
171       for params in paramMaillage:
172         
173          print("___________________________________________")
174          print("")
175          print(" Job : ", params[1])
176          print(" Version de salome : ", versionName) 
177
178
179          idJob=params[0]
180          mesGroupesRef=self.maTableGroupesRef.getVals(idJob)
181          fichierGroupesRef=str(params[2]).replace('.med','_groupesRef.res')
182          from Stats.utiles import writeFile
183          if mesGroupesRef != [] :
184            writeFile(fichierGroupesRef,",".join(mesGroupesRef))
185          monjob=Job(params,salomePath,versionId,mesGroupesRef)
186          print("")
187          print("  Debut d execution")
188          monjob.execute()
189       
190          # remplit Perfs
191          self.maTablePerfs.insereOuRemplaceLigne((idJob,versionId,nomMachine,int(monjob.getCPU()),0),False)
192
193          # remplit la table Mailles
194          listeColonnes,listeValues=monjob.getStatSurMailles()
195          i=0
196          for col in listeColonnes :
197             lVal=[idJob,versionId,col]+[listeValues[i]]
198             lVal=tuple(lVal)
199             if str(listeValues[i]) != str(0): self.maTableMailles.insereOuRemplaceLigne(lVal,False)
200             i+=1
201
202          # remplit la table Tailles
203          listeValues=monjob.getStatSurTailles()
204          lVal=[params[0],versionId]+listeValues
205          self.maTableTailles.insereOuRemplaceLigne(tuple(lVal),False)
206
207          # remplit la table Ratio
208          maDim=self.maTableMaillages.getVal(params[0],'dimension')
209          listeValues=monjob.getStatSurRatios()
210          lVal=[params[0],versionId]+listeValues
211          self.maTableRatios.insereOuRemplaceLigne(tuple(lVal),False)
212
213          # remplit les Groupes
214          for groupe in mesGroupesRef:
215              listeColonnes,listeValues=monjob.getStatSurGroupes(groupe)
216              i=0
217              for col in listeColonnes :
218                 lVal=[groupe,params[0],versionId,col]+[listeValues[i]]
219                 lVal=tuple(lVal)
220                 if str(listeValues[i]) != str(0): self.maTableGroupes.insereOuRemplaceLigne(lVal,False)
221                 i=i+1
222
223          # remplit les Ratio Groupes
224          for groupe in mesGroupesRef:
225              listeValues=monjob.getStatSurRatiosGroupes(groupe)
226              if listeValues==['0','0','0','0','0','0'] : continue
227              lVal=[params[0],versionId,groupe]+listeValues
228              self.maTableGroupeRatios.insereOuRemplaceLigne(tuple(lVal),False)
229              listeValues=monjob.getStatSurTaillesGroupes(groupe)
230              lVal=[params[0],versionId,groupe]+listeValues
231              self.maTableGroupeTailles.insereOuRemplaceLigne(tuple(lVal),False)
232          monjob.menage()
233
234
235   
236   def compare(self,version,ListeVersionRefString,fichier):    
237       print("_________________________________________________________________")
238       print("Generation du rapport de comparaison") 
239       print(version)
240       bOk,versionId,versionName = self.maTableVersions.chercheVersion(version)
241       if bOk==False :
242          print("version ", version , " inconnue dans la base")
243          exit()
244       print("Version a comparer : ", versionName)
245       versionCompName=versionName
246       versionCompId=versionId
247
248       listeVersionRefId=[]
249       listeVersionRefName=[]
250       ListeVersionRef=ListeVersionRefString.split(",")
251       for id in ListeVersionRef:
252           bOk,versionId,versionName = self.maTableVersions.chercheVersion(id)
253           if bOk==False :
254              print("version ", id , " inconnue dans la base")
255              exit()
256           listeVersionRefId.append(versionId)
257           listeVersionRefName.append(versionName)
258
259       bOk,nomMachine = self.maTableMachines.chercheMachine()
260       monDocument=Document()
261       monDocument.initEntete(versionCompName, nomMachine)
262
263       maillagesIdListe, maillagesNameListe=self.maTableMaillages.getTous()
264       if len(maillagesIdListe) != len (listeVersionRefId):
265          print("Pas assez de version de reference")
266          exit()
267       
268       allEntitySurMaille=self.maTableMailles.getAllEntity()
269       allEntitySurGroupe=self.maTableGroupes.getAllEntity()
270
271       # Boucle sur les maillages
272       for idMaillage in maillagesIdListe :
273           print(idMaillage)
274           versionRefId=listeVersionRefId[idMaillage - 1]
275           versionRefName=listeVersionRefName[idMaillage - 1]
276           mailleurId=self.maTableMaillages.getMailleurId(idMaillage)
277           mailleurName=self.maTableMailleurs.getName(mailleurId)
278
279           # Recuperation des seuils
280           l1,l2,l3,l4,l5,l6=self.maTableMaillages.getSeuilsPourMaillage(idMaillage)
281           monSeuilCPU=l3
282           monSeuilRatio=l4
283           monSeuilTaille=l5
284           monSeuilNbMaille=l6
285
286
287           # Et du temps CPU
288           dicoMaillage={}
289           dicoMaillage["NBCPU"]=self.maTablePerfs.getVal(idMaillage,versionCompId,nomMachine)
290           dicoMaillage["REFCPU"]=self.maTablePerfs.getVal(idMaillage,versionRefId,nomMachine)
291           dicoMaillage["DIFCPU"],dicoMaillage["DIFREL"],dicoMaillage["WARNING"]=self.calculDiffCPU(dicoMaillage["NBCPU"],dicoMaillage["REFCPU"],monSeuilCPU)
292           monDocument.initMaillage(maillagesNameListe[idMaillage-1],mailleurName,versionRefName,dicoMaillage) 
293
294           # Boucle sur les Mailles
295
296           dico={}
297           dico["TITRE"]="Nombre de Mailles dans le maillage entier"
298           i=0
299           for nomColonne in allEntitySurMaille:
300                  val=self.maTableMailles.getVal(idMaillage,versionCompId,nomColonne)
301                  valRef=self.maTableMailles.getVal(idMaillage,versionRefId,nomColonne)
302                  if val==0 and valRef==0 : continue
303                  i=i+1
304                  #print nomColonne;print val; print valRef
305                  cMAIL="MAIL"+str(i); cREF="REF"+str(i)
306                  cNB="NB"+str(i); cDIF="DIF"+str(i); cREL="REL"+str(i)
307                  cWARN="WARN"+str(i);
308                  dico[cMAIL]=nomColonne
309                  dico[cREF]=valRef
310                  dico[cNB]=val
311                  dico[cDIF],dico[cREL],dico[cWARN]=self.calculDiff(val,valRef,monSeuilNbMaille)
312           monDocument.initMaille(dico,i)
313
314
315
316           #
317           dicoMaillage={}
318
319           dicoMaillage["RMAX"]=self.maTableRatios.getVal(idMaillage,versionCompId,'RatioMax')
320           dicoMaillage["RMAXREF"]=self.maTableRatios.getVal(idMaillage,versionRefId,'RatioMax')
321           dicoMaillage["DIFARMAX"],dicoMaillage["DIFRRMAX"],dicoMaillage["WRRMAX"]=self.calculDiff(dicoMaillage["RMAX"],dicoMaillage["RMAXREF"],monSeuilRatio)
322           dicoMaillage["RMIN"]=self.maTableRatios.getVal(idMaillage,versionCompId,'RatioMin')
323           dicoMaillage["RMINREF"]=self.maTableRatios.getVal(idMaillage,versionRefId,'RatioMin')
324           dicoMaillage["DIFARMIN"],dicoMaillage["DIFRRMIN"],dicoMaillage["WRRMIN"]=self.calculDiff(dicoMaillage["RMIN"],dicoMaillage["RMINREF"],monSeuilRatio)
325           dicoMaillage["RMOY"]=self.maTableRatios.getVal(idMaillage,versionCompId,'Moyenne')
326           dicoMaillage["RMOYREF"]=self.maTableRatios.getVal(idMaillage,versionRefId,'Moyenne')
327           dicoMaillage["DIFARMOY"],dicoMaillage["DIFRRMOY"],dicoMaillage["WRRMOY"]=self.calculDiff(dicoMaillage["RMOY"],dicoMaillage["RMOYREF"],monSeuilRatio)
328           dicoMaillage["R1Q"]=self.maTableRatios.getVal(idMaillage,versionCompId,'Q1')
329           dicoMaillage["R1QREF"]=self.maTableRatios.getVal(idMaillage,versionRefId,'Q1')
330           dicoMaillage["DIFAR1Q"],dicoMaillage["DIFRR1Q"],dicoMaillage["WRR1Q"]=self.calculDiff(dicoMaillage["R1Q"],dicoMaillage["R1QREF"],monSeuilRatio)
331           dicoMaillage["RMED"]=self.maTableRatios.getVal(idMaillage,versionCompId,'Mediane')
332           dicoMaillage["RMEDREF"]=self.maTableRatios.getVal(idMaillage,versionRefId,'Mediane')
333           dicoMaillage["DIFARMED"],dicoMaillage["DIFRRMED"],dicoMaillage["WRRMED"]=self.calculDiff(dicoMaillage["RMED"],dicoMaillage["RMEDREF"],monSeuilRatio)
334           dicoMaillage["R3Q"]=self.maTableRatios.getVal(idMaillage,versionCompId,'Q3')
335           dicoMaillage["R3QREF"]=self.maTableRatios.getVal(idMaillage,versionRefId,'Q3')
336           dicoMaillage["DIFAR3Q"],dicoMaillage["DIFRR3Q"],dicoMaillage["WRR3Q"]=self.calculDiff(dicoMaillage["R3Q"],dicoMaillage["R3QREF"],monSeuilRatio)
337  
338           dicoMaillage["TMAX"]=self.maTableTailles.getVal(idMaillage,versionCompId,'TailleMax')
339           dicoMaillage["TMAXREF"]=self.maTableTailles.getVal(idMaillage,versionRefId,'TailleMax')
340           dicoMaillage["DIFATMAX"],dicoMaillage["DIFRTMAX"],dicoMaillage["WTMAX"]=self.calculDiff(dicoMaillage["TMAX"],dicoMaillage["TMAXREF"],monSeuilTaille)
341           dicoMaillage["TMIN"]=self.maTableTailles.getVal(idMaillage,versionCompId,'TailleMin')
342           dicoMaillage["TMINREF"]=self.maTableTailles.getVal(idMaillage,versionRefId,'TailleMin')
343           dicoMaillage["DIFATMIN"],dicoMaillage["DIFRTMIN"],dicoMaillage["WTMIN"]=self.calculDiff(dicoMaillage["TMIN"],dicoMaillage["TMINREF"],monSeuilTaille)
344           dicoMaillage["TMOY"]=self.maTableTailles.getVal(idMaillage,versionCompId,'Moyenne')
345           dicoMaillage["TMOYREF"]=self.maTableTailles.getVal(idMaillage,versionRefId,'Moyenne')
346           dicoMaillage["DIFATMOY"],dicoMaillage["DIFRTMOY"],dicoMaillage["WTMOY"]=self.calculDiff(dicoMaillage["TMOY"],dicoMaillage["TMOYREF"],monSeuilTaille)
347           dicoMaillage["T1Q"]=self.maTableTailles.getVal(idMaillage,versionCompId,'Q1')
348           dicoMaillage["T1QREF"]=self.maTableTailles.getVal(idMaillage,versionRefId,'Q1')
349           dicoMaillage["DIFAT1Q"],dicoMaillage["DIFRT1Q"],dicoMaillage["WT1Q"]=self.calculDiff(dicoMaillage["T1Q"],dicoMaillage["T1QREF"],monSeuilTaille)
350           dicoMaillage["TMED"]=self.maTableTailles.getVal(idMaillage,versionCompId,'Mediane')
351           dicoMaillage["TMEDREF"]=self.maTableTailles.getVal(idMaillage,versionRefId,'Mediane')
352           dicoMaillage["DIFATMED"],dicoMaillage["DIFRTMED"],dicoMaillage["WTMED"]=self.calculDiffCPU(dicoMaillage["TMED"],dicoMaillage["TMEDREF"],monSeuilTaille)
353           dicoMaillage["T3Q"]=self.maTableTailles.getVal(idMaillage,versionCompId,'Q3')
354           dicoMaillage["T3QREF"]=self.maTableTailles.getVal(idMaillage,versionRefId,'Q3')
355           dicoMaillage["DIFAT3Q"],dicoMaillage["DIFRT3Q"],dicoMaillage["WT3Q"]=self.calculDiffCPU(dicoMaillage["T3Q"],dicoMaillage["T3QREF"],monSeuilTaille)
356
357           #PNPNPN a revoir le initJob
358           monDocument.initJob(dicoMaillage)
359
360
361           # Boucle sur les groupes du maillage
362           mesGroupesRef=self.maTableGroupesRef.getVals(idMaillage)
363           if mesGroupesRef==[] : monDocument.addNoGroup()
364           for groupeId in mesGroupesRef:
365               i=0
366               dico={}
367               dico["TITRE"]="Nombre de Mailles dans le groupe "+groupeId
368               for nomColonne in allEntitySurGroupe:
369                   val=self.maTableGroupes.getVal(groupeId,idMaillage,versionCompId,nomColonne)
370                   valRef=self.maTableGroupes.getVal(groupeId,idMaillage,versionRefId,nomColonne)
371                   if val==0 and valRef==0 : continue
372                   i=i+1
373                   cMAIL="MAIL"+str(i); cREF="REF"+str(i)
374                   cNB="NB"+str(i); cDIF="DIF"+str(i); cREL="REL"+str(i)
375                   cWARN="WARN"+str(i);
376                   dico[cMAIL]=nomColonne
377                   dico[cREF]=valRef
378                   dico[cNB]=val
379                   dico[cDIF],dico[cREL],dico[cWARN]=self.calculDiff(val,valRef,monSeuilNbMaille)
380                   monDocument.initMaille(dico,i)
381
382
383               #
384               dico={}
385     
386               if self.maTableGroupeRatios.getVal(idMaillage,versionCompId,groupeId,'RatioMax') != 0 :
387                  dico["RMAX"]=self.maTableGroupeRatios.getVal(idMaillage,versionCompId,groupeId,'RatioMax')
388                  dico["RMAXREF"]=self.maTableGroupeRatios.getVal(idMaillage,versionRefId,groupeId,'RatioMax')
389                  dico["DIFARMAX"],dico["DIFRRMAX"],dico["WRRMAX"]=self.calculDiff(dico["RMAX"],dico["RMAXREF"],monSeuilRatio)
390                  dico["RMIN"]=self.maTableGroupeRatios.getVal(idMaillage,versionCompId,groupeId,'RatioMin')
391                  dico["RMINREF"]=self.maTableGroupeRatios.getVal(idMaillage,versionRefId,groupeId,'RatioMin')
392                  dico["DIFARMIN"],dico["DIFRRMIN"],dico["WRRMIN"]=self.calculDiff(dico["RMIN"],dico["RMINREF"],monSeuilRatio)
393                  dico["RMOY"]=self.maTableGroupeRatios.getVal(idMaillage,versionCompId,groupeId,'Moyenne')
394                  dico["RMOYREF"]=self.maTableGroupeRatios.getVal(idMaillage,versionRefId,groupeId,'Moyenne')
395                  dico["DIFARMOY"],dico["DIFRRMOY"],dico["WRRMOY"]=self.calculDiff(dico["RMOY"],dico["RMOYREF"],monSeuilRatio)
396                  dico["R1Q"]=self.maTableGroupeRatios.getVal(idMaillage,versionCompId,groupeId,'Q1')
397                  dico["R1QREF"]=self.maTableGroupeRatios.getVal(idMaillage,versionRefId,groupeId,'Q1')
398                  dico["DIFAR1Q"],dico["DIFRR1Q"],dico["WRR1Q"]=self.calculDiff(dico["R1Q"],dico["R1QREF"],monSeuilRatio)
399                  dico["RMED"]=self.maTableGroupeRatios.getVal(idMaillage,versionCompId,groupeId,'Mediane')
400                  dico["RMEDREF"]=self.maTableGroupeRatios.getVal(idMaillage,versionRefId,groupeId,'Mediane')
401                  dico["DIFARMED"],dico["DIFRRMED"],dico["WRRMED"]=self.calculDiff(dico["RMED"],dico["RMEDREF"],monSeuilRatio)
402                  dico["R3Q"]=self.maTableGroupeRatios.getVal(idMaillage,versionCompId,groupeId,'Q3')
403                  dico["R3QREF"]=self.maTableGroupeRatios.getVal(idMaillage,versionRefId,groupeId,'Q3')
404                  dico["DIFAR3Q"],dico["DIFRR3Q"],dico["WRR3Q"]=self.calculDiff(dico["R3Q"],dico["R3QREF"],monSeuilRatio)
405                  monDocument.CreeGroupeRatios(dico)
406      
407               dico={}
408               if self.maTableGroupeTailles.getVal(idMaillage,versionCompId,groupeId,'TailleMax') != 0:
409                  dico["TMAX"]=self.maTableGroupeTailles.getVal(idMaillage,versionCompId,groupeId,'TailleMax')
410                  dico["TMAXREF"]=self.maTableGroupeTailles.getVal(idMaillage,versionRefId,groupeId,'TailleMax')
411                  dico["DIFATMAX"],dico["DIFRTMAX"],dico["WTMAX"]=self.calculDiff(dico["TMAX"],dico["TMAXREF"],monSeuilTaille)
412                  dico["TMIN"]=self.maTableGroupeTailles.getVal(idMaillage,versionCompId,groupeId,'TailleMin')
413                  dico["TMINREF"]=self.maTableGroupeTailles.getVal(idMaillage,versionRefId,groupeId,'TailleMin')
414                  dico["DIFATMIN"],dico["DIFRTMIN"],dico["WTMIN"]=self.calculDiff(dico["TMIN"],dico["TMINREF"],monSeuilTaille)
415                  dico["TMOY"]=self.maTableGroupeTailles.getVal(idMaillage,versionCompId,groupeId,'Moyenne')
416                  dico["TMOYREF"]=self.maTableGroupeTailles.getVal(idMaillage,versionRefId,groupeId,'Moyenne')
417                  dico["DIFATMOY"],dico["DIFRTMOY"],dico["WTMOY"]=self.calculDiff(dico["TMOY"],dico["TMOYREF"],monSeuilTaille)
418                  dico["T1Q"]=self.maTableGroupeTailles.getVal(idMaillage,versionCompId,groupeId,'Q1')
419                  dico["T1QREF"]=self.maTableGroupeTailles.getVal(idMaillage,versionRefId,groupeId,'Q1')
420                  dico["DIFAT1Q"],dico["DIFRT1Q"],dico["WT1Q"]=self.calculDiff(dico["T1Q"],dico["T1QREF"],monSeuilTaille)
421                  dico["TMED"]=self.maTableGroupeTailles.getVal(idMaillage,versionCompId,groupeId,'Mediane')
422                  dico["TMEDREF"]=self.maTableGroupeTailles.getVal(idMaillage,versionRefId,groupeId,'Mediane')
423                  dico["DIFATMED"],dico["DIFRTMED"],dico["WTMED"]=self.calculDiffCPU(dico["TMED"],dico["TMEDREF"],monSeuilTaille)
424                  dico["T3Q"]=self.maTableGroupeTailles.getVal(idMaillage,versionCompId,groupeId,'Q3')
425                  dico["T3QREF"]=self.maTableGroupeTailles.getVal(idMaillage,versionRefId,groupeId,'Q3')
426                  dico["DIFAT3Q"],dico["DIFRT3Q"],dico["WT3Q"]=self.calculDiffCPU(dico["T3Q"],dico["T3QREF"],monSeuilTaille)
427                  monDocument.CreeGroupeTaille(dico)
428     
429     
430     
431
432
433       monDocument.creeDocument(fichier)
434
435   def calculDiffCPU(self,nb,nbRef,seuil):    
436          # different de calculDiff : si on est inferieur a la reference
437          # on n a pas de warning
438          diff=nb-nbRef
439          diffRel=((nb-nbRef)*100)/(nbRef*1.00)
440          if diffRel > seuil :
441             warning="plus de "+ str(seuil) + "% de difference CPU"
442          else :
443             warning=""
444          diffRelStr=str(diffRel)+"%"
445          return diff,diffRelStr,warning
446          
447   def calculDiff(self,nb,nbRef,seuil):    
448          #print nb,nbRef,seuil
449          diff=nb-nbRef
450          diffRel=((nb-nbRef)*100)/(nbRef*1.00)
451          if diffRel > seuil or (-1*diffRel) > seuil  :
452             warning="difference superieure a "+ str(seuil) + "%"
453          else :
454             warning=""
455          diffRelStr=str(diffRel)+"%"
456          return diff,diffRelStr,warning
457