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