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.
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:
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
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
+++++++++++++++++++++++
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.
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:
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
"*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
+++++++++++++++++++
import os
import sys
+import inspect
#
from daCore.BasicObjects import State, Covariance, FullOperator, Operator
from daCore.BasicObjects import AlgorithmAndParameters, DataObserver
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)
#
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):
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
__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__']
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",