]> SALOME platform Git repositories - modules/adao.git/commitdiff
Salome HOME
Documentation improvements and post analysis
authorJean-Philippe ARGAUD <jean-philippe.argaud@edf.fr>
Wed, 15 Sep 2021 18:31:39 +0000 (20:31 +0200)
committerJean-Philippe ARGAUD <jean-philippe.argaud@edf.fr>
Wed, 15 Sep 2021 18:31:39 +0000 (20:31 +0200)
doc/en/snippets/UserPostAnalysis.rst
doc/en/tui.rst
doc/fr/snippets/UserPostAnalysis.rst
doc/fr/tui.rst
src/daComposant/daCore/Aidsm.py
src/daComposant/daCore/Templates.py

index 498267b5675f2c7397b940c0451369e63b0ba332..64c19dc15fb5795b9697807814ddf40fd9758819 100644 (file)
@@ -4,6 +4,8 @@
 UserPostAnalysis
   *Multiline string*. This variable allows to process some parameters or data
   automatically after data assimilation or optimization algorithm processing.
-  Its value is defined as a script file or a string, allowing to put
-  post-processing code directly inside the ADAO case. Common templates are
-  provided to help the user to start or to quickly make his case.
+  Its value is defined either as a predefined pattern name, or as a script file
+  name, or as a string, allowing to put post-processing code directly inside
+  the ADAO case. Common templates are provided to help the user to start or to
+  quickly make his case. Important note: this processing is only performed when
+  the case is executed in TUI or exported to YACS.
index d4cd0deec05ef07d6f87e2b8980092fb03a63419..03b46169674d3621037abf02f4b8876af36428a7 100644 (file)
@@ -37,7 +37,9 @@ graphical interface (GUI). When one wants to elaborate "by hand" the TUI
 calculation case, it is recommended to extensively use all the ADAO module
 documentation, and to go back if necessary to the graphical interface (GUI), to
 get all the elements allowing to correctly set the commands. The general used
-notions and terms are defined in :ref:`section_theory`.
+notions and terms are defined in :ref:`section_theory`. As in the graphical
+interface, we point out that the TUI approach is intended to create and manage
+a single calculation case.
 
 .. _subsection_tui_creating:
 
@@ -516,7 +518,9 @@ Setting the calculation, outputs, etc.
     This command disables the detailed information mode when running.
 
 .. index:: single: Observer
+.. index:: single: Observer Template
 .. index:: single: setObserver
+.. index:: single: setObserver Template
 
 **setObserver** (*Variable, Template, String, Script, Info*)
     This command allows to set an *observer* on the current or final
@@ -531,19 +535,21 @@ Setting the calculation, outputs, etc.
     an information string or can be void.
 
 .. index:: single: UserPostAnalysis
+.. index:: single: UserPostAnalysis Template
 .. index:: single: setUserPostAnalysis
 .. index:: single: setUserPostAnalysis Template
 
 **setUserPostAnalysis** (*Template, String, Script*)
     This command allows to define the treatment of parameters or results after
-    the calculation algorithm has been performed. Its value is defined as a
-    predefined pattern name, a script file or a string. This allows to produce
-    directly post-processing code in an ADAO case. It is possible to use
-    patterns available by argument "*Template*" (which can be
+    the calculation algorithm has been performed. Its value is defined either
+    as a predefined pattern name, or as a script file name, or as a string.
+    This allows to produce directly post-processing code in an ADAO case. It is
+    possible to use patterns available by argument "*Template*" (which can be
     "*AnalysisPrinter*", "*AnalysisSaver*" and "*AnalysisPrinterAndSaver*"). In
     the case of a definition by "*Script*", the specified file must contain
     only the commands that could have been put after the execution of the
-    calculation.
+    calculation. Important note: this processing is only performed when the
+    case is executed in TUI or exported to YACS.
 
 Perform the calculation
 +++++++++++++++++++++++
index f7c6eb28307bf80d941e878f1e805dc3243ddda6..cb6a5f290aaa7fcd63797e8e569e8ea79b1d12e1 100644 (file)
@@ -4,8 +4,10 @@
 UserPostAnalysis
   *Chaîne de caractères multi-lignes*. La variable permet de traiter des
   paramètres ou des résultats après le déroulement de l'algorithme
-  d'assimilation de données ou d'optimisation. Sa valeur est définie comme un
-  fichier script ou une chaîne de caractères, permettant de produire
-  directement du code de post-processing dans un cas ADAO. Des exemples
-  courants (squelettes ou "templates") sont fournis pour aider l'utilisateur ou
-  pour faciliter l'élaboration d'un cas.
+  d'assimilation de données ou d'optimisation. Sa valeur est définie soit par
+  un nom de patron prédéfini, soit par nom de un fichier script, soit par une
+  chaîne de caractères, permettant de produire directement du code de
+  post-processing dans un cas ADAO. Des exemples courants (squelettes ou
+  "templates") sont fournis pour aider l'utilisateur ou pour faciliter
+  l'élaboration d'un cas. Remarque importante : ce traitement n'est exécuté que
+  lorsque le cas est exécuté en TUI ou exporté en YACS.
index 6676374c6a2fabfc807225e0b91a1504ee752922..c3df5b843ef4369872e8f1a6adf6710cf588b9e3 100644 (file)
@@ -38,7 +38,9 @@ cas de calcul TUI, on recommande de bien s'appuyer sur l'ensemble de la
 documentation du module ADAO, et de se reporter si nécessaire à l'interface
 graphique (GUI), pour disposer de l'ensemble des éléments permettant de
 renseigner correctement les commandes. Les notions générales et termes utilisés
-ici sont définis dans :ref:`section_theory`.
+ici sont définis dans :ref:`section_theory`. Comme dans l'interface graphique,
+on note que la démarche en TUI est destinée à créer et gérer un unique cas de
+calcul.
 
 .. _subsection_tui_creating:
 
@@ -539,7 +541,9 @@ Paramétrer le calcul, les sorties, etc.
     l'exécution.
 
 .. index:: single: Observer
+.. index:: single: Observer Template
 .. index:: single: setObserver
+.. index:: single: setObserver Template
 
 **setObserver** (*Variable, Template, String, Script, Info*)
     Cette commande permet de définir un *observer* sur une variable courante ou
@@ -555,19 +559,22 @@ Paramétrer le calcul, les sorties, etc.
     "*Info*" contient une chaîne de caractère d'information ou une chaine vide.
 
 .. index:: single: UserPostAnalysis
+.. index:: single: UserPostAnalysis Template
 .. index:: single: setUserPostAnalysis
 .. index:: single: setUserPostAnalysis Template
 
 **setUserPostAnalysis** (*Template, String, Script*)
     Cette commande permet de définir le traitement des paramètres ou des
     résultats après le déroulement de l'algorithme de calcul. Sa valeur est
-    définie comme nom de patron prédéfini, un fichier script ou une chaîne de
-    caractères. Cela permet de produire directement du code de post-processing
-    dans un cas ADAO. On peut d'utiliser les patrons disponibles par l'argument
-    "*Template*" (qui peut valoir "*AnalysisPrinter*", "*AnalysisSaver*" et
-    "*AnalysisPrinterAndSaver*"). Dans le cas d'une définition par "*Script*",
-    le fichier indiqué doit contenir uniquement les commandes que l'on aurait
-    pu mettre à la suite de l'exécution du calcul.
+    définie soit par un nom de patron prédéfini, soit par un nom de fichier
+    script, soit par une chaîne de caractères. Cela permet de produire
+    directement du code de post-processing dans un cas ADAO. On peut d'utiliser
+    les patrons disponibles par l'argument "*Template*" (qui peut valoir
+    "*AnalysisPrinter*", "*AnalysisSaver*" et "*AnalysisPrinterAndSaver*").
+    Dans le cas d'une définition par "*Script*", le fichier indiqué doit
+    contenir uniquement les commandes que l'on aurait pu mettre à la suite de
+    l'exécution du calcul. Remarque importante : ce traitement n'est exécuté
+    que lorsque le cas est exécuté en TUI ou exporté en YACS.
 
 Effectuer le calcul
 +++++++++++++++++++
index 679587e02ca33467d85460c636968f6dd135d45b..f8b0b997c2132991bb257f8a9d459d4d5f2e3202 100644 (file)
@@ -28,6 +28,7 @@ __all__ = ["Aidsm"]
 
 import os
 import sys
+import inspect
 #
 from daCore.BasicObjects import State, Covariance, FullOperator, Operator
 from daCore.BasicObjects import AlgorithmAndParameters, DataObserver
@@ -42,7 +43,8 @@ import logging
 class Aidsm(object):
     """ ADAO Internal Data Structure Model """
     def __init__(self, name = "", addViewers=None):
-        self.__name = str(name)
+        self.__name         = str(name)
+        self.__objname      = None
         self.__directory    = None
         self.__case = CaseLogger(self.__name, "case", addViewers)
         #
@@ -759,6 +761,9 @@ class Aidsm(object):
         if FileName is not None:
             self.dump( FileName, "TUI")
         self.__adaoObject["AlgorithmParameters"].executePythonScheme( self.__adaoObject )
+        if "UserPostAnalysis" in self.__adaoObject and len(self.__adaoObject["UserPostAnalysis"])>0:
+            __Upa = eval("\n".join([str(val).replace("ADD.","self.") for val in self.__adaoObject["UserPostAnalysis"]]))
+            exec(__Upa, {}, {'self':self})
         return 0
 
     def __executeYACSScheme(self, FileName=None):
@@ -781,7 +786,7 @@ class Aidsm(object):
         from numpy import array, matrix
         for __command in __commands:
             if (__command.find("set")>-1 and __command.find("set_")<0) or 'UserPostAnalysis' in __command:
-                exec("self."+__command)
+                exec("self."+__command, {}, locals())
             else:
                 self.__PostAnalysis.append(__command)
         return self
@@ -812,6 +817,20 @@ class Aidsm(object):
             __fullpath = __filename
         return __fullpath
 
+    def __retrieve_objname(self):
+        "Ne pas utiliser dans le __init__, la variable appelante n'existe pas encore"
+        __names  = []
+        for level in reversed(inspect.stack()):
+            __names += [name for name, value in level.frame.f_locals.items() if value is self]
+        __names += [name for name, value in globals().items() if value is self]
+        __names.remove('self') # Devrait toujours être trouvé, donc pas d'erreur
+        if len(__names) > 0:
+            logging.debug("Cet objet est appelé par au moins une variable :",__names)
+            self.__objname = __names[0]
+        else:
+            self.__objname = "ADD"
+        return self.__objname
+
     def __dir__(self):
         "Clarifie la visibilité des méthodes"
         return ['set', 'get', 'execute', 'dump', 'load', '__doc__', '__init__', '__module__']
index 7f9e9f555fd3eb0fa469a2c6511ceb47c40650a1..e06d714b78675a2e08a83b9075dad87741a642c2 100644 (file)
@@ -230,21 +230,21 @@ UserPostAnalysisTemplates = TemplateStorage()
 
 UserPostAnalysisTemplates.store(
     name    = "AnalysisPrinter",
-    content = """import numpy\nxa=numpy.ravel(ADD.get('Analysis')[-1])\nprint('Analysis:',xa)""",
+    content = """print('# Post-analysis')\nimport numpy\nxa=numpy.ravel(ADD.get('Analysis')[-1])\nprint('Analysis',xa)""",
     fr_FR   = "Imprime sur la sortie standard la valeur optimale",
     en_EN   = "Print on standard output the optimal value",
     order   = "next",
     )
 UserPostAnalysisTemplates.store(
     name    = "AnalysisSaver",
-    content = """import numpy\nxa=numpy.ravel(ADD.get('Analysis')[-1])\nf='/tmp/analysis.txt'\nprint('Analysis saved in \"%s\"'%f)\nnumpy.savetxt(f,xa)""",
+    content = """print('# Post-analysis')\nimport numpy\nxa=numpy.ravel(ADD.get('Analysis')[-1])\nf='/tmp/analysis.txt'\nprint('Analysis saved in \"%s\"'%f)\nnumpy.savetxt(f,xa)""",
     fr_FR   = "Enregistre la valeur optimale dans un fichier du répertoire '/tmp' nommé 'analysis.txt'",
     en_EN   = "Save the optimal value in a file of the '/tmp' directory named 'analysis.txt'",
     order   = "next",
     )
 UserPostAnalysisTemplates.store(
     name    = "AnalysisPrinterAndSaver",
-    content = """import numpy\nxa=numpy.ravel(ADD.get('Analysis')[-1])\nprint 'Analysis:',xa\nf='/tmp/analysis.txt'\nprint('Analysis saved in \"%s\"'%f)\nnumpy.savetxt(f,xa)""",
+    content = """print('# Post-analysis')\nimport numpy\nxa=numpy.ravel(ADD.get('Analysis')[-1])\nprint 'Analysis',xa\nf='/tmp/analysis.txt'\nprint('Analysis saved in \"%s\"'%f)\nnumpy.savetxt(f,xa)""",
     fr_FR   = "Imprime sur la sortie standard et, en même temps enregistre dans un fichier du répertoire '/tmp', la valeur optimale",
     en_EN   = "Print on standard output and, in the same time save in a file of the '/tmp' directory, the optimal value",
     order   = "next",