]> SALOME platform Git repositories - modules/adao.git/blob - src/daEficas/generator_adao.py
Salome HOME
Fin de la mise à jour de la génération du catalogue Eficas
[modules/adao.git] / src / daEficas / generator_adao.py
1 # -*- coding: utf-8 -*-
2 print "import generator_adao"
3
4 from generator.generator_python import PythonGenerator
5 import traceback
6
7 def entryPoint():
8    """
9       Retourne les informations necessaires pour le chargeur de plugins
10
11       Ces informations sont retournees dans un dictionnaire
12    """
13    return {
14         # Le nom du plugin
15         'name' : 'adao',
16         # La factory pour creer une instance du plugin
17           'factory' : AdaoGenerator,
18           }
19
20 class AdaoGenerator(PythonGenerator):
21
22   def __init__(self,cr=None):
23     PythonGenerator.__init__(self, cr)
24     self.dictMCVal={}
25     self.text_comm = ""
26     self.text_da = ""
27     self.text_da_status = False
28
29   def gener(self,obj,format='brut',config=None):
30     print "AdaoGenerator gener"
31     self.text_comm = PythonGenerator.gener(self, obj, format, config)
32
33     print "Dictionnaire"
34     print self.dictMCVal
35
36     try :
37       self.text_da_status = False
38       self.generate_da()
39       self.text_da_status = True
40     except:
41       print "Case seems not be correct"
42       traceback.print_exc()
43       pass
44     return self.text_comm
45
46   def writeDefault(self, fn):
47     if self.text_da_status:
48       print "write adao python command file"
49       filename = fn[:fn.rfind(".")] + '.py'
50       f = open( str(filename), 'wb')
51       f.write( self.text_da )
52       f.close()
53
54   def generMCSIMP(self,obj) :
55     """
56     Convertit un objet MCSIMP en texte python
57     """
58     clef=""
59     for i in obj.get_genealogie() :
60       clef=clef+"__"+i
61     self.dictMCVal[clef]=obj.valeur
62
63     s=PythonGenerator.generMCSIMP(self,obj)
64     return s
65
66   def generMCFACT(self,obj):
67
68    if obj.parent.nom == "ALGORITHM":
69      self.dictMCVal["ALGORITHM_NAME"] = obj.nom
70
71    s=PythonGenerator.generMCFACT(self,obj)
72    return s
73
74   def generate_da(self):
75
76     self.text_da += "#-*-coding:iso-8859-1-*- \n"
77     self.text_da += "study_config = {} \n"
78     self.text_da += "study_config[\"Name\"] = \"" + self.dictMCVal["__ASSIM_STUDY__STUDY_NAME"] + "\"\n"
79
80     if self.dictMCVal["ALGORITHM_NAME"] != "ThreeDVAR":
81       self.text_da += "study_config[\"Algorithm\"] = \"" + self.dictMCVal["ALGORITHM_NAME"] + "\"\n"
82     else:
83       self.text_da += "study_config[\"Algorithm\"] = \"3DVAR\"\n"
84
85
86     self.add_data("Background")
87     self.add_data("BackgroundError")
88     self.add_data("Observation")
89     self.add_data("ObservationError")
90     self.add_data("ObservationOperator")
91
92     # Optionnel
93     self.add_data("AlgorithmParameters")
94     self.add_analysis()
95     self.add_init()
96
97   def add_data(self, data_name):
98     search_text = "__ASSIM_STUDY__ALGORITHM__" + self.dictMCVal["ALGORITHM_NAME"] + "__"
99     back_search_text = search_text + data_name + "__"
100
101     # Data is a Vector
102     search_vector = back_search_text + "Vector"
103     if search_vector + "__FROM" in self.dictMCVal:
104       back_from = self.dictMCVal[search_vector + "__FROM"]
105
106       search_string = search_vector + "__STRING_DATA__STRING"
107       search_script = search_vector + "__SCRIPT_DATA__SCRIPT_FILE"
108
109       # Vector is from a string
110       if search_string in self.dictMCVal:
111         back_data = self.dictMCVal[search_string]
112       # Vector is from a script
113       elif search_script in self.dictMCVal:
114         back_data = self.dictMCVal[search_script]
115       else:
116         print "[generator adao] Error cannot found Vector data"
117
118       self.text_da += data_name + "_config = {} \n"
119       self.text_da += data_name + "_config[\"Type\"] = \"Vector\" \n"
120       self.text_da += data_name + "_config[\"From\"] = \"" + back_from + "\" \n"
121       self.text_da += data_name + "_config[\"Data\"] = \"" + back_data + "\" \n"
122       self.text_da += "study_config[\"" + data_name + "\"] = " + data_name + "_config \n"
123       return 1
124
125     # Data is a Matrix
126     search_matrix = back_search_text + "Matrix"
127     if search_matrix + "__FROM" in self.dictMCVal:
128       back_from = self.dictMCVal[search_matrix + "__FROM"]
129
130       search_string = search_matrix + "__STRING_DATA__STRING"
131       search_script = search_matrix + "__SCRIPT_DATA__SCRIPT_FILE"
132
133       # Matrix is from a string
134       if search_string in self.dictMCVal:
135         back_data = self.dictMCVal[search_string]
136       # Matrix is from a script
137       elif search_script in self.dictMCVal:
138         back_data = self.dictMCVal[search_script]
139       else:
140         print "[generator adao] Error cannot found Matrix data"
141
142       self.text_da += data_name + "_config = {} \n"
143       self.text_da += data_name + "_config[\"Type\"] = \"Matrix\" \n"
144       self.text_da += data_name + "_config[\"From\"] = \"" + back_from + "\" \n"
145       self.text_da += data_name + "_config[\"Data\"] = \"" + back_data + "\" \n"
146       self.text_da += "study_config[\"" + data_name + "\"] = " + data_name + "_config \n"
147       return 1
148
149     # Data is a Dict
150     search_dict = back_search_text + "Dict"
151     if search_dict + "__FROM" in self.dictMCVal:
152       back_from = self.dictMCVal[search_dict + "__FROM"]
153       back_data = self.dictMCVal[search_dict + "__SCRIPT_DATA__SCRIPT_FILE"]
154
155       self.text_da += data_name + "_config = {} \n"
156       self.text_da += data_name + "_config[\"Type\"] = \"Dict\" \n"
157       self.text_da += data_name + "_config[\"From\"] = \"" + back_from + "\" \n"
158       self.text_da += data_name + "_config[\"Data\"] = \"" + back_data + "\" \n"
159       self.text_da += "study_config[\"" + data_name + "\"] = " + data_name + "_config \n"
160       return 1
161
162     # Data is a FunctionDict
163     search_function = back_search_text + "Function"
164     if search_function + "__FROM" in self.dictMCVal:
165       back_from = self.dictMCVal[search_function + "__FROM"]
166       back_data = self.dictMCVal[search_function + "__FUNCTIONDICT_DATA__FUNCTIONDICT_FILE"]
167
168       self.text_da += data_name + "_FunctionDict = {} \n"
169       self.text_da += data_name + "_FunctionDict[\"Function\"] = [\"Direct\", \"Tangent\", \"Adjoint\"] \n"
170       self.text_da += data_name + "_FunctionDict[\"Script\"] = {} \n"
171       self.text_da += data_name + "_FunctionDict[\"Script\"][\"Direct\"] = \"" + back_data + "\" \n"
172       self.text_da += data_name + "_FunctionDict[\"Script\"][\"Tangent\"] = \"" + back_data + "\" \n"
173       self.text_da += data_name + "_FunctionDict[\"Script\"][\"Adjoint\"] = \"" + back_data + "\" \n"
174       self.text_da += data_name + "_config = {} \n"
175       self.text_da += data_name + "_config[\"Type\"] = \"Function\" \n"
176       self.text_da += data_name + "_config[\"From\"] = \"FunctionDict\" \n"
177       self.text_da += data_name + "_config[\"Data\"] = " + data_name + "_FunctionDict \n"
178       self.text_da += "study_config[\"" + data_name + "\"] = " + data_name + "_config \n"
179       return 1
180
181   def add_analysis(self):
182     search_text = "__ASSIM_STUDY__ALGORITHM__" + self.dictMCVal["ALGORITHM_NAME"] + "__Analysis__"
183     try :
184       ana_from = self.dictMCVal[search_text + "FROM"]
185
186       if ana_from == "String":
187         ana_data = self.dictMCVal[search_text + "STRING_DATA__STRING"]
188         self.text_da += "Analysis_config = {} \n"
189         self.text_da += "Analysis_config[\"From\"] = \"String\" \n"
190         self.text_da += "Analysis_config[\"Data\"] = \"\"\"" + ana_data + "\"\"\" \n"
191         self.text_da += "study_config[\"Analysis\"] = Analysis_config \n"
192         pass
193       if ana_from == "Script":
194         ana_data = self.dictMCVal[search_text + "SCRIPT_DATA__SCRIPT_FILE"]
195         self.text_da += "Analysis_config = {} \n"
196         self.text_da += "Analysis_config[\"From\"] = \"Script\" \n"
197         self.text_da += "Analysis_config[\"Data\"] = \"" + ana_data + "\" \n"
198         self.text_da += "study_config[\"Analysis\"] = Analysis_config \n"
199         pass
200     except:
201       pass
202
203   def add_init(self):
204     search_text = "__ASSIM_STUDY__ALGORITHM__" + self.dictMCVal["ALGORITHM_NAME"] + "__Init__"
205
206     if search_text + "INIT_FILE" in self.dictMCVal:
207
208       init_file_data = self.dictMCVal[search_text + "INIT_FILE"]
209       init_target_list = self.dictMCVal[search_text + "TARGET_LIST"]
210
211       self.text_da += "Init_config = {} \n"
212       self.text_da += "Init_config[\"Type\"] = \"Dict\" \n"
213       self.text_da += "Init_config[\"From\"] = \"Script\" \n"
214       self.text_da += "Init_config[\"Data\"] = \"" + init_file_data + "\"\n"
215       self.text_da += "Init_config[\"Target\"] = ["
216       for target in init_target_list:
217         self.text_da += "\"" + target + "\","
218       self.text_da += "] \n"
219       self.text_da += "study_config[\"Init\"] = Init_config \n"
220