1 #-*-coding:iso-8859-1-*-
3 # Copyright (C) 2008-2010 EDF R&D
5 # This library is free software; you can redistribute it and/or
6 # modify it under the terms of the GNU Lesser General Public
7 # License as published by the Free Software Foundation; either
8 # version 2.1 of the License.
10 # This library is distributed in the hope that it will be useful,
11 # but WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 # Lesser General Public License for more details.
15 # You should have received a copy of the GNU Lesser General Public
16 # License along with this library; if not, write to the Free Software
17 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
22 Classe pour tracer simplement une liste de vecteurs à chaque pas
24 __author__ = "Jean-Philippe ARGAUD - Septembre 2008"
28 from daCore import BasicObjects
30 # ==============================================================================
31 class ElementaryDiagnostic(BasicObjects.Diagnostic):
32 def __init__(self, name = "", unit = "", basetype = None, parameters = {}):
33 BasicObjects.Diagnostic.__init__(self, name, parameters)
36 self.__gnuplot = Gnuplot
38 raise ImportError("The Gnuplot module is required to plot the vector")
42 title, xlabel, ylabel, ltitle,
48 Trace en gnuplot chaque vecteur de la liste Vector, avec une légende
49 générale, en X et en Y
52 self.__gnuplot.GnuplotOpts.gnuplot_command = 'gnuplot -persist -geometry '+geometry
54 self.__gnuplot.GnuplotOpts.gnuplot_command = 'gnuplot -geometry '+geometry
56 self.__g = self.__gnuplot.Gnuplot() # persist=1
57 self.__g('set terminal '+self.__gnuplot.GnuplotOpts.default_term)
58 self.__g('set style data lines')
60 self.__g('set autoscale')
61 self.__g('set title "'+title +'"')
62 self.__g('set xlabel "'+xlabel+'"')
63 self.__g('set ylabel "'+ylabel+'"')
64 self.__g.plot( self.__gnuplot.Data( Steps, Vector.pop(0), title=ltitle.pop(0) ) )
66 self.__g.replot( self.__gnuplot.Data( Steps, vector, title=ltitle.pop(0) ) )
68 self.__g.hardcopy(filename=filename, color=1)
70 raw_input('Please press return to continue...\n')
74 def calculate(self, vector = None, steps = None,
75 title = "", xlabel = "", ylabel = "", ltitle = None,
82 - vector : liste des vecteurs à tracer, chacun étant en liste ou
84 - steps : liste unique des pas, ou None si c'est la numérotation
86 - title : titre général du dessin
87 - xlabel : label de l'axe des X
88 - ylabel : label de l'axe des Y
89 - ltitle : liste des titres associés à chaque vecteur, dans le
90 même ordre que les vecteurs eux-mêmes
91 - geometry : taille en pixels de la fenêtre et position du coin haut
92 gauche, au format X11 : LxH+X+Y (défaut : 600x400)
93 - filename : nom de fichier Postscript pour une sauvegarde à 1 pas
94 Attention, il faut changer le nom à l'appel pour
95 plusieurs pas de sauvegarde
96 - persist : booléen indiquant que la fenêtre affichée sera
97 conservée lors du passage au dessin suivant
98 Par défaut, persist = False
99 - pause : booléen indiquant une pause après chaque tracé, et
101 Par défaut, pause = True
104 raise ValueError("One vector must be given to plot it.")
105 if type(vector) is not type([]) and type(vector) is not type(()):
106 raise ValueError("The vector(s) must be given as a list/tuple.")
107 if ltitle is None or len(ltitle) != len(vector):
108 ltitle = ["" for i in range(len(vector))]
110 for onevector in vector:
111 VectorList.append( numpy.array( onevector ) )
112 if VectorList[-1].size < 1:
113 raise ValueError("Each given vector must not be empty.")
115 Steps = range(len(vector[0]))
116 elif not ( type(steps) is type([]) or type(steps) is not type(numpy.array([])) ):
117 raise ValueError("The steps must be given as a list/tuple.")
120 if os.path.isfile(filename):
121 raise ValueError("Error: a file with this name \"%s\" already exists."%filename)
123 value = self._formula(
126 title = str(title).encode('ascii','replace'),
127 xlabel = str(xlabel).encode('ascii','replace'),
128 ylabel = str(ylabel).encode('ascii','replace'),
129 ltitle = [str(lt) for lt in ltitle],
130 geometry = str(geometry),
131 filename = str(filename),
132 persist = bool(persist),
136 # ==============================================================================
137 if __name__ == "__main__":
138 print '\n AUTODIAGNOSTIC \n'
140 D = ElementaryDiagnostic("Mon Plot")
142 vect1 = [1, 2, 1, 2, 1]
143 D.calculate([vect1,], title = "Vecteur 1", xlabel = "Axe X", ylabel = "Axe Y" )
144 vect2 = [1, 3, 1, 3, 1]
145 D.calculate([vect1,vect2], title = "Vecteurs 1 et 2", filename = "liste_de_vecteurs.ps")
146 vect3 = [-1, 1, -1, 1, -1]
147 D.calculate((vect1,vect2,vect3), title = "Vecteurs 1 a 3")
148 vect4 = 100*[0.29, 0.97, 0.73, 0.01, 0.20]
149 D.calculate([vect4,], title = "Vecteur 4 : long construit par repetition")
152 [0.1,0.2,0.3,0.4,0.5],
153 title = "Vecteurs 1 a 3, temps modifie",
154 ltitle = ["Vecteur 1","Vecteur 2","Vecteur 3"])