1 #@ MODIF impr_table_ops Macro DATE 30/11/2004 AUTEUR MCOURTOI M.COURTOIS
2 # -*- coding: iso-8859-1 -*-
3 # CONFIGURATION MANAGEMENT OF EDF VERSION
4 # ======================================================================
5 # COPYRIGHT (C) 1991 - 2004 EDF R&D WWW.CODE-ASTER.ORG
6 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
7 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
8 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
9 # (AT YOUR OPTION) ANY LATER VERSION.
11 # THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
12 # WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
13 # MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
14 # GENERAL PUBLIC LICENSE FOR MORE DETAILS.
16 # YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
17 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
18 # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
19 # ======================================================================
21 # RESPONSABLE MCOURTOI M.COURTOIS
26 from types import ListType, TupleType, StringTypes
27 EnumTypes=(ListType, TupleType)
30 # ------------------------------------------------------------------------------
31 def impr_table_ops(self, FORMAT, TABLE, INFO, **args):
33 Macro IMPR_TABLE permettant d'imprimer une table dans un fichier.
34 Erreurs<S> dans IMPR_TABLE pour ne pas perdre la base.
39 from Cata.cata import table_jeveux
40 from Utilitai.Utmess import UTMESS
42 # La macro compte pour 1 dans la numerotation des commandes
45 # On importe les definitions des commandes a utiliser dans la macro
46 # Le nom de la variable doit etre obligatoirement le nom de la commande
47 DETRUIRE = self.get_cmd('DETRUIRE')
48 DEFI_FICHIER = self.get_cmd('DEFI_FICHIER')
49 RECU_FONCTION = self.get_cmd('RECU_FONCTION')
51 #----------------------------------------------
52 # 0. Traitement des arguments, initialisations
53 # unité logique des fichiers réservés
58 if args['UNITE'] and args['UNITE']<>6:
59 nomfich='fort.'+str(args['UNITE'])
60 if nomfich and os.path.exists(nomfich):
62 UTMESS('A',macro,'Le fichier '+nomfich+' existe déjà, on écrit ' \
65 # 0.2. Création des dictionnaires des FILTRES
68 for Fi in args['FILTRE']:
69 dF = Fi.cree_dict_valeurs(Fi.mc_liste)
71 if dF[mc]==None: del dF[mc]
73 # format pour l'impression des filtres
74 form_filtre='\nFILTRE -> NOM_PARA: %-16s CRIT_COMP: %-4s VALE: %s'
76 # 0.3. Création de la liste des tables (une seule sans SENSIBILITE)
77 form_sens='\n... SENSIBILITE AU PARAMETRE %s'
79 if args['SENSIBILITE']:
80 nmemo='&NOSENSI.MEMO.CORR'.ljust(24)
81 vect=aster.getvectjev(nmemo)
83 lps=args['SENSIBILITE']
84 if not type(lps) in EnumTypes:
86 for ps in [ps.get_name() for ps in lps]:
88 for ch in vect[0:len(vect):2]:
89 if ch[0:8].strip()==TABLE.get_name() and ch[8:16].strip()==ps:
91 ncomp=ch[16:24].strip()
92 sdtab=table_jeveux(ncomp)
93 tabs=sdtab.EXTR_TABLE()
94 tabs.titr+=form_sens % ps
95 ltab.append([tabs, sdtab])
97 UTMESS('A',macro,'Dérivée de %s par rapport à %s non disponible'\
98 % (TABLE.get_name(), ps))
100 UTMESS('A',macro,'Pas de calcul de sensibilité accessible.')
102 ltab.append([TABLE.EXTR_TABLE(), TABLE])
107 # 0.4.1. liste des paramètres à conserver
108 nom_para=ltab[0][0].para
110 nom_para=args['NOM_PARA']
112 # 0.4.2. Traiter le cas des UL réservées
113 if args['UNITE'] and args['UNITE'] in ul_reserve:
114 DEFI_FICHIER( ACTION='LIBERER', UNITE=args['UNITE'], )
116 #----------------------------------------------
117 # Boucle sur les tables
118 for tab, sdtab in ltab:
120 # ----- 1. Infos de base
122 print 'IMPRESSION DE LA TABLE : %s' % sdtab.get_name()
125 tab.titr=args['TITRE'] + '\n' + tab.titr
129 col = getattr(tab, Fi['NOM_PARA'])
130 # peu importe le type
131 opts=[Fi[k] for k in ('VALE','VALE_I','VALE_C','VALE_K') if Fi.has_key(k)]
133 for k in ('CRITERE','PRECISION'):
136 tab = tab & ( getattr(col, Fi['CRIT_COMP'])(*opts,**kargs) )
137 # trace l'operation dans le titre
138 #if FORMAT in ('TABLEAU','ASTER'):
139 tab.titr+=form_filtre % (Fi['NOM_PARA'], Fi['CRIT_COMP'], \
140 ' '.join([str(v) for v in opts]))
144 # une seule occurence de TRI
146 dT=T0.cree_dict_valeurs(T0.mc_liste)
147 tab.sort(CLES=dT['NOM_PARA'], ORDRE=dT['ORDRE'])
149 # ----- 4. Impression
151 # passage des mots-clés de mise en forme à la méthode Impr
158 # pour l'impression des fonctions
164 # 4.1. au format AGRAF
166 kargs['dform']={ 'formR' : '%12.5E' }
167 kfonc['FORMAT']='TABLEAU'
169 # 4.2. au format XMGRACE et dérivés
170 elif FORMAT=='XMGRACE':
171 kargs['dform']={ 'formR' : '%.8g' }
172 kargs['PILOTE']=args['PILOTE']
173 kfonc['PILOTE']=args['PILOTE']
175 # 4.3. format spécifié dans les arguments
177 kargs['dform'].update({ 'formR' : fmtF2PY(args['FORMAT_R']) })
179 # 4.4. regroupement par paramètre : PAGINATION
180 if args['PAGINATION']:
181 kargs['PAGINATION']=args['PAGINATION']
185 # ----- 5. IMPR_FONCTION='OUI'
186 if args['IMPR_FONCTION'] and args['IMPR_FONCTION']=='OUI':
187 # cherche parmi les cellules celles qui contiennent un nom de fonction
190 for par,cell in row.items():
191 if type(cell) in StringTypes:
192 if aster.getvectjev(cell.strip().ljust(19)+'.PROL')<>None:
193 dfon[cell.strip().ljust(19)]=par
194 # impression des fonctions trouvées
195 for f,par in dfon.items():
196 __fonc=RECU_FONCTION(
204 __fonc.Trace(**kfonc)
205 DETRUIRE(CONCEPT=_F(NOM=('__fonc',),), ALARME='NON', INFO=1,)
207 # 99. Traiter le cas des UL réservées
208 if args['UNITE'] and args['UNITE'] in ul_reserve:
209 DEFI_FICHIER( ACTION='ASSOCIER', UNITE=args['UNITE'],
210 TYPE='ASCII', ACCES='APPEND' )
214 # ------------------------------------------------------------------------------
215 def fmtF2PY(fformat):
216 """Convertit un format Fortran en format Python (printf style).
217 Gère uniquement les fortrans réels, par exemple : E12.5, 1PE13.6, D12.5...
220 matP=re.search('([0-9]+)P',fformat)
222 fmt+=' '*int(matP.group(1))
223 matR=re.search('([eEdDfFgG]{1})([\.0-9]+)',fformat)
225 fmt+='%'+matR.group(2)+re.sub('[dD]+','E',matR.group(1))
228 except (ValueError, TypeError), msg:
231 print 'Format par défaut utilisé :',fmt