Salome HOME
Merge remote branch 'origin/V8_5_asterstudy'
[modules/smesh.git] / src / Tools / Verima / Stats / getCritere.py
1 #!/usr/bin/env python3
2
3 import sys,os
4 import salome
5 from .getStats import getGroupesRef
6 from .Type_Maille import dicoDimENtite
7
8 def getCritere(dim,NomMesh,acritere):
9   import SMESH
10   from salome.smesh import smeshBuilder
11   smesh = smeshBuilder.New()
12   import numpy
13 #  print dim,NomMesh,acritere
14   if dim == 2 :
15     NumElt=NomMesh.GetElementsByType(SMESH.FACE)
16   if dim == 3 :
17     NumElt=NomMesh.GetElementsByType(SMESH.VOLUME)
18   
19   critere=[]
20   if acritere =="Ratio" :
21     for i in range(len(NumElt)):
22       critere.append (NomMesh.GetAspectRatio(NumElt[i]))
23
24   if acritere =="Length" :
25     for i in range(len(NumElt)):
26       critere.append (NomMesh.GetMaxElementLength(NumElt[i]))
27       
28   crit= numpy.array(critere)
29   max=crit.max()
30   min=crit.min()
31   moyenne=crit.mean()
32   M=numpy.median(crit)
33   Q1=numpy.percentile(crit,25)
34   Q3=numpy.percentile(crit,75)
35   
36   return [max,min,Q1,M,Q3,moyenne]
37
38 def getCritereGroupe(NomMesh,NomGr,acritere):
39   import SMESH
40   from salome.smesh import smeshBuilder
41   smesh = smeshBuilder.New()
42   import numpy
43     
44   # on ne traite que les mailles 2D et 3D
45   NumElt = NomGr.GetListOfID()
46   type_gr=NomMesh.GetElementGeomType(NumElt[0])
47
48 #  print "critere",acritere
49 #  print "type groupe",type_gr
50 #  print dicoDimENtite[str(type_gr)]
51
52   if dicoDimENtite[str(type_gr)]==0 :
53      return [0,0,0,0,0,0]
54
55   critere=[]
56   if acritere =="Ratio" :
57     for i in range(len(NumElt)):
58       critere.append (NomMesh.GetAspectRatio(NumElt[i]))
59
60   if acritere =="Length" :
61     for i in range(len(NumElt)):
62       critere.append (NomMesh.GetMaxElementLength(NumElt[i]))
63       
64   crit= numpy.array(critere)
65   max=crit.max()
66   min=crit.min()
67   moyenne=crit.mean()
68   M=numpy.median(crit)
69   Q1=numpy.percentile(crit,25)
70   Q3=numpy.percentile(crit,75)
71   
72   return [max,min,Q1,M,Q3,moyenne]
73
74 def getObjectsGroupe(Mesh,liste):
75   import SMESH
76   from salome.smesh import smeshBuilder
77   dico={}
78   lGroups=Mesh.GetGroups()
79   for g in lGroups :
80       name = g.GetName() 
81       for n in liste :
82           if name == n :  dico[name]=g
83   return dico
84
85 def getStatsCritere(dim,Mesh,fichierMedResult):
86   fichierStatRatio=fichierMedResult.replace('.med','.ratio')
87   max,min,Q1,M,Q3,moyenne = getCritere(dim,Mesh,"Ratio")
88   f = open(fichierStatRatio, 'w')
89   f.write(str(max)+","+str(min)+","+str(Q1)+","+str(M)+","+str(Q3)+","+str(moyenne))
90   f.close()
91
92   fichierStatRatio=fichierMedResult.replace('.med','.taille')
93   max,min,Q1,M,Q3,moyenne = getCritere(dim,Mesh,"Length")
94   f = open(fichierStatRatio, 'w')
95   f.write(str(max)+","+str(min)+","+str(Q1)+","+str(M)+","+str(Q3)+","+str(moyenne))
96   f.close()
97
98   liste=getGroupesRef(fichierMedResult)
99   dicoGroupe=getObjectsGroupe(Mesh,liste)
100   for groupe in liste :
101       max,min,Q1,M,Q3,moyenne=getCritereGroupe(Mesh,dicoGroupe[groupe],"Ratio")
102       extension="_"+groupe+'_Ratio.res'
103       fichier=fichierMedResult.replace('.med',extension)
104       f = open(fichier, 'w')
105       f.write(str(max)+","+str(min)+","+str(Q1)+","+str(M)+","+str(Q3)+","+str(moyenne))
106       f.close()
107       max,min,Q1,M,Q3,moyenne=getCritereGroupe(Mesh,dicoGroupe[groupe],"Length")
108       extension="_"+groupe+'_Taille.res'
109       fichier=fichierMedResult.replace('.med',extension)
110       f = open(fichier, 'w')
111       f.write(str(max)+","+str(min)+","+str(Q1)+","+str(M)+","+str(Q3)+","+str(moyenne))
112       f.close()
113