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