Salome HOME
test017 ok
[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_analysis()
94
95   def add_data(self, data_name):
96     search_text = "__ASSIM_STUDY__ALGORITHM__" + self.dictMCVal["ALGORITHM_NAME"] + "__"
97     back_search_text = search_text + data_name + "__"
98
99     # Data is a Vector
100     search_vector = back_search_text + "Vector"
101     if search_vector + "__FROM" in self.dictMCVal:
102       back_from = self.dictMCVal[search_vector + "__FROM"]
103
104       search_string = search_vector + "__STRING_DATA__STRING"
105       search_script = search_vector + "__SCRIPT_DATA__SCRIPT_FILE"
106
107       # Vector is from a string
108       if search_string in self.dictMCVal:
109         back_data = self.dictMCVal[search_string]
110       # Vector is from a script
111       elif search_script in self.dictMCVal:
112         back_data = self.dictMCVal[search_script]
113       else:
114         print "[generator adao] Error cannot found Vector data"
115
116       self.text_da += data_name + "_config = {} \n"
117       self.text_da += data_name + "_config[\"Type\"] = \"Vector\" \n"
118       self.text_da += data_name + "_config[\"From\"] = \"" + back_from + "\" \n"
119       self.text_da += data_name + "_config[\"Data\"] = \"" + back_data + "\" \n"
120       self.text_da += "study_config[\"" + data_name + "\"] = " + data_name + "_config \n"
121       return 1
122
123     # Data is a Matrix
124     search_matrix = back_search_text + "Matrix"
125     if search_matrix + "__FROM" in self.dictMCVal:
126       back_from = self.dictMCVal[search_matrix + "__FROM"]
127
128       search_string = search_matrix + "__STRING_DATA__STRING"
129       search_script = search_matrix + "__SCRIPT_DATA__SCRIPT_FILE"
130
131       # Matrix is from a string
132       if search_string in self.dictMCVal:
133         back_data = self.dictMCVal[search_string]
134       # Matrix is from a script
135       elif search_script in self.dictMCVal:
136         back_data = self.dictMCVal[search_script]
137       else:
138         print "[generator adao] Error cannot found Matrix data"
139
140       self.text_da += data_name + "_config = {} \n"
141       self.text_da += data_name + "_config[\"Type\"] = \"Matrix\" \n"
142       self.text_da += data_name + "_config[\"From\"] = \"" + back_from + "\" \n"
143       self.text_da += data_name + "_config[\"Data\"] = \"" + back_data + "\" \n"
144       self.text_da += "study_config[\"" + data_name + "\"] = " + data_name + "_config \n"
145       return 1
146
147     # Data is a FunctionDict
148     search_function = back_search_text + "Function"
149     if search_function + "__FROM" in self.dictMCVal:
150       back_from = self.dictMCVal[search_function + "__FROM"]
151       back_data = self.dictMCVal[search_function + "__FUNCTIONDICT_DATA__FUNCTIONDICT_FILE"]
152
153       self.text_da += "FunctionDict = {} \n"
154       self.text_da += "FunctionDict[\"Function\"] = [\"Direct\", \"Tangent\", \"Adjoint\"] \n"
155       self.text_da += "FunctionDict[\"Script\"] = {} \n"
156       self.text_da += "FunctionDict[\"Script\"][\"Direct\"] = \"" + back_data + "\" \n"
157       self.text_da += "FunctionDict[\"Script\"][\"Tangent\"] = \"" + back_data + "\" \n"
158       self.text_da += "FunctionDict[\"Script\"][\"Adjoint\"] = \"" + back_data + "\" \n"
159       self.text_da += data_name + "_config = {} \n"
160       self.text_da += data_name + "_config[\"Type\"] = \"Function\" \n"
161       self.text_da += data_name + "_config[\"From\"] = \"FunctionDict\" \n"
162       self.text_da += data_name + "_config[\"Data\"] = FunctionDict \n"
163       self.text_da += "study_config[\"" + data_name + "\"] = " + data_name + "_config \n"
164       return 1
165
166   def add_analysis(self):
167     search_text = "__ASSIM_STUDY__ALGORITHM__" + self.dictMCVal["ALGORITHM_NAME"] + "__Analysis__"
168     try :
169       ana_from = self.dictMCVal[search_text + "FROM"]
170
171       if ana_from == "String":
172         ana_data = self.dictMCVal[search_text + "STRING_DATA__STRING"]
173         self.text_da += "Analysis_config = {} \n"
174         self.text_da += "Analysis_config[\"From\"] = \"String\" \n"
175         self.text_da += "Analysis_config[\"Data\"] = \"\"\"" + ana_data + "\"\"\" \n"
176         self.text_da += "study_config[\"Analysis\"] = Analysis_config \n"
177         pass
178       if ana_from == "Script":
179         ana_data = self.dictMCVal[search_text + "SCRIPT_DATA__SCRIPT_FILE"]
180         self.text_da += "Analysis_config = {} \n"
181         self.text_da += "Analysis_config[\"From\"] = \"Script\" \n"
182         self.text_da += "Analysis_config[\"Data\"] = \"" + ana_data + "\" \n"
183         self.text_da += "study_config[\"Analysis\"] = Analysis_config \n"
184         pass
185     except:
186       pass
187