| [2632] | 1 | \documentclass[twoside,11pt,A4]{article}
 | 
|---|
 | 2 | \usepackage[french]{babel}
 | 
|---|
 | 3 | 
 | 
|---|
 | 4 | % \usepackage[T1]{fontenc}
 | 
|---|
 | 5 | \usepackage[applemac]{inputenc}
 | 
|---|
 | 6 | \usepackage{palatino}
 | 
|---|
 | 7 | % \usepackage{times}
 | 
|---|
 | 8 | % package pour ecrire DRAFT en fond de page 
 | 
|---|
| [2716] | 9 | % \usepackage[light,all,draft]{draftcopy}
 | 
|---|
| [2632] | 10 | 
 | 
|---|
 | 11 | % \usepackage{epsfig}
 | 
|---|
 | 12 | \usepackage{graphicx}
 | 
|---|
 | 13 | \usepackage{amsmath}
 | 
|---|
 | 14 | \usepackage{amssymb}
 | 
|---|
 | 15 | 
 | 
|---|
 | 16 | \setlength{\textwidth}{16cm}
 | 
|---|
 | 17 | \setlength{\textheight}{23 cm}
 | 
|---|
 | 18 | \setlength{\topmargin}{0.5cm}
 | 
|---|
 | 19 | \setlength{\oddsidemargin}{0.cm}
 | 
|---|
 | 20 | \setlength{\evensidemargin}{0.cm}
 | 
|---|
 | 21 | \setlength{\unitlength}{1mm}
 | 
|---|
 | 22 | 
 | 
|---|
 | 23 | \newcommand{\rond}{$\bullet \ $}
 | 
|---|
 | 24 | \newcommand{\etoile}{$\star \ $}
 | 
|---|
 | 25 | \newcommand{\cercle}{$\circ \ $}
 | 
|---|
 | 26 | \newcommand{\carre}{$\Box \ $}
 | 
|---|
 | 27 | 
 | 
|---|
 | 28 | \begin{document}
 | 
|---|
 | 29 | \begin{titlepage}
 | 
|---|
 | 30 | \begin{center}
 | 
|---|
 | 31 | {\Large \bf Liste de modifications de SOPHYA } \\[5mm]
 | 
|---|
 | 32 | { \large (fait ou  faire ) } \\
 | 
|---|
| [2716] | 33 | {\large Janvier 2003 - Mai 2005 } \\[25mm]
 | 
|---|
| [2632] | 34 | Liste des tags et dates : \\[5mm]
 | 
|---|
 | 35 | {\large 
 | 
|---|
 | 36 | \begin{tabular}{lcl}
 | 
|---|
 | 37 | V = 0.727 &   \hspace{10mm}  & Octobre 1999 \\
 | 
|---|
 | 38 | V = 0.8  &   \hspace{10mm}  &  Fvrier 2000 \\
 | 
|---|
 | 39 | V = 1.1  &   \hspace{10mm}  &  Fvrier 2001 \\
 | 
|---|
 | 40 | V = 1.2  &   \hspace{10mm}  &  Juillet 2001 \\
 | 
|---|
 | 41 | V = 1.3  &   \hspace{10mm}  &  Novembre  2001 \\
 | 
|---|
 | 42 | V = 1.5  &   \hspace{10mm}  &   Dcembre  2002 \\
 | 
|---|
 | 43 | V = 1.7  &   \hspace{10mm}  &   Septembre 2003 \\
 | 
|---|
 | 44 | \end{tabular}
 | 
|---|
 | 45 | }
 | 
|---|
 | 46 | \end{center}
 | 
|---|
 | 47 | \end{titlepage}
 | 
|---|
 | 48 | 
 | 
|---|
 | 49 | \newpage
 | 
|---|
 | 50 | \tableofcontents
 | 
|---|
 | 51 | \newpage
 | 
|---|
 | 52 | 
 | 
|---|
 | 53 | \section{Mgr} 
 | 
|---|
 | 54 | \subsection{Variables d'environnement SOPHYAxxx (17/9/2003)  } 
 | 
|---|
 | 55 | Septembre 2003 (17/9/2003) :  Changement DPCDEVREP, DPCBASEREP
 | 
|---|
 | 56 | en SOPHYADEVREP , SOPHYABASEREP , EROSCXX en SOPHYACXX 
 | 
|---|
 | 57 | 
 | 
|---|
 | 58 | \subsection{Modifs Makefile - Message du 3 Mars 2004 }
 | 
|---|
 | 59 | \begin{verbatim}
 | 
|---|
 | 60 | Pour Les makefiles SOPHYA, je n'ai pas encore regarde ton makefile.h
 | 
|---|
 | 61 | modifie.
 | 
|---|
 | 62 | Voila qques propositions :
 | 
|---|
 | 63 | il y aura qu'une seule variable d'environnement :  (SOPHYAROOT ou
 | 
|---|
 | 64 | SOPHYARACINE) par exemple
 | 
|---|
 | 65 | $SOPHYAROOT/Include
 | 
|---|
 | 66 |            /Include/FitsIO/ FFTW/  (etc...) pour les .h extlibs
 | 
|---|
 | 67 |            /Libs
 | 
|---|
 | 68 |            /ShLibs
 | 
|---|
 | 69 |            /Exec
 | 
|---|
 | 70 |            /Objs
 | 
|---|
 | 71 | Un fichier Makefile.h ds $SOPHYAROOT/Include
 | 
|---|
 | 72 | contiendra
 | 
|---|
 | 73 | #  Section  generale
 | 
|---|
 | 74 | SOPHYAROOT =
 | 
|---|
 | 75 | SOPHYACXX=
 | 
|---|
 | 76 | ...
 | 
|---|
 | 77 | #  Section compilation
 | 
|---|
 | 78 | CC_COMPILER  (nom du compilo cc)
 | 
|---|
 | 79 | CXX_COMPILER (   c++)
 | 
|---|
 | 80 | CPPFLAGS , (flag du preprocesseur), en particulier
 | 
|---|
 | 81 | les -Iincludepath  (chemin pour les includes SOPHYA
 | 
|---|
 | 82 | CFLAGS flag de compilation c
 | 
|---|
 | 83 | CXXFLAGS flags de compilation c++
 | 
|---|
 | 84 | #  Section Link
 | 
|---|
 | 85 | LIBPATH -L... -L... (chemin pour les librairies et les lib externes (cfitsio, ...)
 | 
|---|
 | 86 | LIBLIST -lm -lcfitsio ... (les librairies)
 | 
|---|
 | 87 | 
 | 
|---|
 | 88 | Ces variables doivent pouvoir etre utilise par la classe CxxCompilerLinker.
 | 
|---|
 | 89 | Il faut donc prevoir peut-etre un autre fichier cccpp_flags.h (ou qque chose
 | 
|---|
 | 90 | du meme genre) avec la syntaxe C/C++ de chaines de caracteres
 | 
|---|
 | 91 | pouvant etre include (par #include) ds cxxcmplnk.cc
 | 
|---|
 | 92 | 
 | 
|---|
 | 93 | le fichier machdefs.h ds $SOPHYAROOT/Include est genere a partir du fichier
 | 
|---|
 | 94 | machdefs_mkmf.h actuel (on pourra songer ulterieurement a le casser en
 | 
|---|
 | 95 | plusieurs morceaux si necessaire) et contiendra en entete les flags
 | 
|---|
 | 96 | qui modifie la generation du code
 | 
|---|
 | 97 | 
 | 
|---|
 | 98 | exemple
 | 
|---|
 | 99 | #define Linux
 | 
|---|
 | 100 | #define SOPHYA_DEBUG
 | 
|---|
 | 101 | ....
 | 
|---|
 | 102 | 
 | 
|---|
 | 103 | Dans les fichier Makefile pour chaque module, on abandonnera
 | 
|---|
 | 104 | les regles (et repertoire) de compilation par defaut et on aura
 | 
|---|
 | 105 | donc:
 | 
|---|
 | 106 | INC= $SOPHYAROOT/Include
 | 
|---|
 | 107 | OBJ = $SOPHYAROOT/Objs
 | 
|---|
 | 108 | LIB=...
 | 
|---|
 | 109 | $(OBJ)toto.o : toto.cc $(INC)toto.h $(INC)titi.h ...
 | 
|---|
 | 110 |         $CXX $CXXFLAGS -c -o  $(OBJ)toto.o toto.cc
 | 
|---|
 | 111 | ....
 | 
|---|
 | 112 | 
 | 
|---|
 | 113 | Il faudra voir ensuite pour le makefile de fabrication des shared-libs
 | 
|---|
 | 114 | \end{verbatim}
 | 
|---|
 | 115 | 
 | 
|---|
 | 116 | \subsection{ Modifs Makefile - Message du 8 Juillet 2004 }
 | 
|---|
 | 117 | \begin{verbatim}
 | 
|---|
 | 118 | A/ Makefile(s)  (voir aussi mon message du 3 mars 2004)
 | 
|---|
 | 119 | A-1/ Structures des repertoires
 | 
|---|
 | 120 | >> On garde la structuration avec 
 | 
|---|
 | 121 | + un Makefile par module 'librairie'
 | 
|---|
 | 122 | + un ensemble de modules librairies sans lib externe -> libsophya.slb
 | 
|---|
 | 123 | + un ensemble de modules librairies avec lib externe -> libextsophya.slb
 | 
|---|
 | 124 | + Des modules programmes (PrgUtil/ PrgMap/ ) avec un makefile par module programme
 | 
|---|
 | 125 | + un Makefile de haut niveau (actuellement ds Mgr/Makefile 
 | 
|---|
 | 126 |   Ce Makefile de haut niveau sera aussi simplifi - en particulier la partie
 | 
|---|
 | 127 | concernant la fabrication des shared-libs (.slb) et Makefile.slb 
 | 
|---|
 | 128 | + On garde aussi la convention de generation automatique des GNUmakefile, qui sont 
 | 
|---|
 | 129 | ensuite renommes eventuellement en Makefile, conserves ds la base 
 | 
|---|
 | 130 | - Plus d'inclusion automatique du nom du system-compilo (Linux-g++ OSF1-cxx ...) 
 | 
|---|
 | 131 | dans les noms de repertoires
 | 
|---|
 | 132 | - Plus de structure ExtLibDir obligatoire (remplace par des -Ipath -Lpath pour les
 | 
|---|
 | 133 | compils/links
 | 
|---|
 | 134 | - Si besoin, on fait subir le meme sort que Makefile.h a Makefile.slb
 | 
|---|
 | 135 | 
 | 
|---|
 | 136 |   On aura donc :   (message du 3 mars 2004)
 | 
|---|
 | 137 | il y aura qu'une seule variable d'environnement :  (SOPHYAROOT ou
 | 
|---|
 | 138 | SOPHYARACINE) par exemple
 | 
|---|
 | 139 | $SOPHYAROOT/Include  
 | 
|---|
 | 140 | Attention le repertoire Include/  NE sera donc PLUS commun pour plusieurs
 | 
|---|
 | 141 | systemes-compilo. 
 | 
|---|
 | 142 |                               /Libs
 | 
|---|
 | 143 |                               /ShLibs
 | 
|---|
 | 144 |                               /Exec
 | 
|---|
 | 145 |                               /Objs
 | 
|---|
 | 146 | Un fichier Makefile.h ds $SOPHYAROOT/Include
 | 
|---|
 | 147 | contiendra les flags de compilation dfinis pour un systme/compilo.
 | 
|---|
 | 148 | A la base, on aura ds Mgr/ un fichier Makefile.h pour chaque combinaison 
 | 
|---|
 | 149 | compilo-compilo;
 | 
|---|
 | 150 | Mgr/makef_osf1_cxx.h 
 | 
|---|
 | 151 | Mgr/makef_linux_g++.h
 | 
|---|
 | 152 | Mgr/makef_linux_KCC.h
 | 
|---|
 | 153 | Mgr/makef_darwin_g++.h  (Mac)
 | 
|---|
 | 154 | Mgr/makef_sgi_CC.h
 | 
|---|
 | 155 |   etc ...
 | 
|---|
 | 156 | C'est ce fichier qui est copi en Include/Makefile.h, ventuellement 
 | 
|---|
 | 157 | complete/modifie
 | 
|---|
 | 158 | 
 | 
|---|
 | 159 | ----- Fichier Makefile.h
 | 
|---|
 | 160 | #  Section  generale
 | 
|---|
 | 161 | SOPHYAROOT =
 | 
|---|
 | 162 | SOPHYACXX=
 | 
|---|
 | 163 | ...
 | 
|---|
 | 164 | #  Section compilation
 | 
|---|
 | 165 | CC_COMPILER  (nom du compilo cc)
 | 
|---|
 | 166 | CXX_COMPILER (   c++)
 | 
|---|
 | 167 | CPPFLAGS , (flag du preprocesseur), en particulier
 | 
|---|
 | 168 | les -Iincludepath  (chemin pour les includes SOPHYA
 | 
|---|
 | 169 | CFLAGS flag de compilation c
 | 
|---|
 | 170 | CXXFLAGS flags de compilation c++
 | 
|---|
 | 171 | #  Section Link
 | 
|---|
 | 172 | LIBPATH -L... -L... (chemin pour les librairies et les lib externes (cfitsio, ...)
 | 
|---|
 | 173 | LIBLIST -lm -lcfitsio ... (les librairies)
 | 
|---|
 | 174 | 
 | 
|---|
 | 175 | Ces variables doivent pouvoir etre utilise par la classe CxxCompilerLinker.
 | 
|---|
 | 176 | Il faut donc prevoir peut-etre un autre fichier cccpp_flags.h (ou qque chose
 | 
|---|
 | 177 | du meme genre) avec la syntaxe C/C++ de chaines de caracteres
 | 
|---|
 | 178 | pouvant etre include (par #include) ds cxxcmplnk.cc
 | 
|---|
 | 179 | 
 | 
|---|
 | 180 | le fichier machdefs.h ds $SOPHYAROOT/Include est genere a partir du fichier
 | 
|---|
 | 181 | machdefs_mkmf.h actuel (on pourra songer ulterieurement a le casser en
 | 
|---|
 | 182 | plusieurs morceaux si necessaire) et contiendra en entete les flags
 | 
|---|
 | 183 | qui modifie la generation du code
 | 
|---|
 | 184 | 
 | 
|---|
 | 185 | exemple
 | 
|---|
 | 186 | #define Linux
 | 
|---|
 | 187 | #define SOPHYA_DEBUG
 | 
|---|
 | 188 | ....
 | 
|---|
 | 189 | 
 | 
|---|
 | 190 | Dans les fichier Makefile pour chaque module, on abandonnera
 | 
|---|
 | 191 | les regles (et repertoire) de compilation par defaut et on aura
 | 
|---|
 | 192 | donc:
 | 
|---|
 | 193 | INC= $SOPHYAROOT/Include
 | 
|---|
 | 194 | OBJ = $SOPHYAROOT/Objs
 | 
|---|
 | 195 | LIB=...
 | 
|---|
 | 196 | $(OBJ)toto.o : toto.cc $(INC)toto.h $(INC)titi.h ...
 | 
|---|
 | 197 |         $CXX $CXXFLAGS -c -o  $(OBJ)toto.o toto.cc
 | 
|---|
 | 198 | ....
 | 
|---|
 | 199 |   
 | 
|---|
 | 200 | \end{verbatim}
 | 
|---|
 | 201 | 
 | 
|---|
 | 202 | \section{BaseTools} 
 | 
|---|
 | 203 | \subsection{Namespace SOPHYA }
 | 
|---|
 | 204 | Septembre 2004 : 
 | 
|---|
 | 205 | Suppression de {\tt using namespace SOPHYA ; } ds machdefs.h - 
 | 
|---|
 | 206 | Ajout fichier {\tt \#include "sopnamsp.h"} dans les .cc de SOPHYA,
 | 
|---|
 | 207 | ainsi que lors de la gnration automatique du code (runxx, c++exec) 
 | 
|---|
 | 208 |  
 | 
|---|
 | 209 | \subsection{PPF}
 | 
|---|
 | 210 | \begin{itemize}
 | 
|---|
 | 211 | \item[\rond] Novembre 2003 (21/11/2003) - Ajout rawstream.h .cc \\
 | 
|---|
 | 212 | Classes RawInOutStream  ,  RawInFileStream , RawOutFileStream
 | 
|---|
 | 213 | \item[\rond] Dcembre 2003 - Ajout ppfbinstream.h .cc \\
 | 
|---|
 | 214 | Classes PPFBinaryIOStream , PPFBinaryInputStream , PPFBinaryOutputStream
 | 
|---|
| [2716] | 215 | \item[\rond] Dcembre 2003 (9/12/2003) Fin de l'ensemble des modifs pour les
 | 
|---|
| [2632] | 216 | PPF V3 \\
 | 
|---|
 | 217 | - Ecriture nombre complexes r4, r8 avec tag spcifique. \\
 | 
|---|
 | 218 | Tag de positionnement sous forme de \\
 | 
|---|
 | 219 | \centerline{\tt <tag (1 byte)><FilePosition (8 byte, long int)> } \\
 | 
|---|
 | 220 | - Ecriture PosTagTable \\
 | 
|---|
 | 221 | - Ecriture Statistiques en fin de fichier \\
 | 
|---|
 | 222 | - Voir BaseTools/ppfbinstream.h: \\
 | 
|---|
 | 223 | \centerline{\tt  GotoPositionTag(int\_8 pos) , } 
 | 
|---|
 | 224 | \centerline{\tt  GetPosTagTable(...) } 
 | 
|---|
 | 225 | \centerline{\tt  int\_8 WritePositionTag() PutPosTagTable(...) } 
 | 
|---|
 | 226 | - Ajout programme de test Tests/ppftswap.cc
 | 
|---|
| [2716] | 227 | \item[\rond] Avril 2005 - Ajout de wrapper de lecture/ecriture PPF pour les vecteurs de
 | 
|---|
| [2717] | 228 | la librairie standard (classe PPFWrapperSTLVector$<$T$>$ ) fichier ppfwrapstlv.h
 | 
|---|
| [2716] | 229 | \item[\rond] Ajout de la classes utilitaire PPF\_TPointer\_IO$<$T$>$ 
 | 
|---|
 | 230 | (fichiers ppftpointer.h .cc)
 | 
|---|
 | 231 | \item[\rond] Amelioration de l'impression ds AnalyseTags (ppfbinstream.cc)
 | 
|---|
 | 232 | \item[\rond] scanppf.cc revision 1.8 (2005/04/05)
 | 
|---|
 | 233 | modification programme scanppf: ajout option -lh -lho pour lister les classes PP
 | 
|---|
 | 234 | ersist handler
 | 
|---|
 | 235 | 
 | 
|---|
| [2632] | 236 | \end{itemize}
 | 
|---|
 | 237 | 
 | 
|---|
| [2716] | 238 | 
 | 
|---|
| [2717] | 239 | \subsection{Nouvelles classes}
 | 
|---|
 | 240 | \begin{itemize}
 | 
|---|
 | 241 | \item[\rond] Ajout de la classe {\bf TimeStamp} pour la manipulation de date et heure - 
 | 
|---|
 | 242 | calcul de duree. - Ajout du prog. test Tests/ttimestamp.cc (Mars 2003) 
 | 
|---|
 | 243 | \item[\rond] { \bf Segmented Data Block :}  \\
 | 
|---|
| [2716] | 244 | Mars-Avril 2005: Introduction des classes similaires aux NDataBlock, mais permettant 
 | 
|---|
 | 245 | de gerer des blocs de donnees segementes, pour tout type de donnees, de structures
 | 
|---|
| [2717] | 246 | et de classes (template pour tout type T). 
 | 
|---|
 | 247 | \begin{enumerate}
 | 
|---|
 | 248 | \item  Ajout de la classe {\tt SegDataBlock<T>} (et l'interface { \tt SegDBInterface<T>} )
 | 
|---|
| [2716] | 249 | pour la gestion de blocs de donnees segmentes (segdatablock.h) et son
 | 
|---|
| [2717] | 250 | gestionnaire PPF {\tt FIO\_SegDataBlock<T>}  (fichier fiosegdb.h )
 | 
|---|
 | 251 | \item Ajout de la classe {\tt SwSegDataBlock<T>} (Data bloc segmente avec gestion
 | 
|---|
 | 252 | de swap) et la classe swapper PPF {\tt PPFDataSwapper<T>} (fichiers
 | 
|---|
| [2716] | 253 | ppfswapper.h et swsegdb.h)
 | 
|---|
| [2717] | 254 | \item Ajout programme de test Tests/tstsegdb.cc 
 | 
|---|
 | 255 | \end{enumerate}
 | 
|---|
 | 256 | \end{itemize}
 | 
|---|
| [2716] | 257 | 
 | 
|---|
 | 258 | 
 | 
|---|
| [2632] | 259 | \section{TArray}
 | 
|---|
 | 260 | \begin{itemize}
 | 
|---|
 | 261 | \item Optimisation de la multiplication matricielle (CMV) - Extrait du 
 | 
|---|
| [2716] | 262 | message (from CMV) du 30 Juillet 2004: \\
 | 
|---|
| [2632] | 263 | \begin{verbatim}
 | 
|---|
 | 264 | - on definit un flag d'optimisation
 | 
|---|
 | 265 |   Contrairement a ce qu'on avait dit, je n'ai pas ajoute
 | 
|---|
 | 266 |   un argument a Multiply car on ne peut pas jouer
 | 
|---|
 | 267 |   avec qiand on utilise l'operateur * surcharge.
 | 
|---|
 | 268 |   Or au vu des performance il'ma parut interessant que l'utilisateur
 | 
|---|
 | 269 |   meme lambda puisse choisir le niveau d'optimisation
 | 
|---|
 | 270 |   --> donc j'ai ajoute une methode statis dans BaseArray::
 | 
|---|
 | 271 |     void BaseArray::SetMatProdOpt(uint_2);
 | 
|---|
 | 272 |     uint_2 BaseArray::GetMatProdOpt();
 | 
|---|
 | 273 | 
 | 
|---|
 | 274 | - Je n'ai refait les test de rapidite que sur OSF:
 | 
|---|
 | 275 | 
 | 
|---|
 | 276 | 1./  pour les matrices 1000x1000 (grosses)
 | 
|---|
 | 277 |   on arrive effectivement au meme temps pour les 4 cas
 | 
|---|
 | 278 |   si on copie dans le cas lent (FxC)
 | 
|---|
 | 279 |   ---EndMultiply FxC  CPUTime: Total= 93.1296  (Partial= 69.3806) Sec.
 | 
|---|
 | 280 |   devient
 | 
|---|
 | 281 |   ---EndMultiply FxC  CPUTime: Total= 34.9653  (Partial= 11.1829) Sec.
 | 
|---|
 | 282 |   exactement comme les copains:
 | 
|---|
 | 283 |   La copie prend de la place mais ne prend absolument
 | 
|---|
 | 284 |   pas de temps pour les grosses matrices
 | 
|---|
 | 285 | 
 | 
|---|
 | 286 | 2./ pour les matrices 10x10 (1000000 multiplications par cas)
 | 
|---|
 | 287 |   on a bien ce que l'on attend a savoir que
 | 
|---|
 | 288 |   la copie faites 100000 fois finie par nous faire perdre du temps
 | 
|---|
 | 289 |   ---EndMultiply FxC  CPUTime: Total= 37.4152  (Partial= 12.4662) Sec.
 | 
|---|
 | 290 |   devient
 | 
|---|
 | 291 |   ---EndMultiply FxC  CPUTime: Total= 53.9978  (Partial= 28.8322) Sec.
 | 
|---|
 | 292 |   dans ce cas on perd un gros facteur 2 a cause de la copie
 | 
|---|
 | 293 |   mais rien de surprenant la dedans.
 | 
|---|
 | 294 | 
 | 
|---|
 | 295 | -----------------------------------------------------------------------
 | 
|---|
 | 296 | - ensuite j'ai implemente une prise de decision au niveau de
 | 
|---|
 | 297 | l'optimisation pour les petites matrices:
 | 
|---|
 | 298 | le test est simple mais me semble OK:
 | 
|---|
 | 299 | je calcule sza taille du NDataBlock de A
 | 
|---|
 | 300 |            szb                         B
 | 
|---|
 | 301 | si ((sza+szb)*sizeof(T) < 100000 ) pas d'optimisation
 | 
|---|
 | 302 | IDEE: on pifometre que raisonnablement il y a 100 koctets
 | 
|---|
 | 303 |    de disponible pour les matrices A et B dans le cache processeur
 | 
|---|
 | 304 |    et que dans ce cas elles sont copiees toutes les 2 dans le cache
 | 
|---|
 | 305 |    par l'optimiseur du compilo qui est tres malin et surtout qui
 | 
|---|
 | 306 |    veux absolument nous faire plaisir......
 | 
|---|
 | 307 | 
 | 
|---|
 | 308 | -----------------------------------------------------------------
 | 
|---|
 | 309 | ===> Les resultats sont dans le fichier toto.calc en attached
 | 
|---|
 | 310 | .. En tete tu as l'explication des flags d'optimisation
 | 
|---|
 | 311 | ...Avec les 2 sections:
 | 
|---|
 | 312 |     GROSSE MATRICE
 | 
|---|
 | 313 |        et
 | 
|---|
 | 314 |     PETITE MATRICE
 | 
|---|
 | 315 | \end{verbatim}
 | 
|---|
 | 316 | 
 | 
|---|
 | 317 | \item Optimisation operations diverses, en particulier \\
 | 
|---|
 | 318 | 1) Remplacement des methodes Add/Sub/Mul/DivElt(a) par
 | 
|---|
 | 319 |    Add/Sub/Mul/DivElt(TArray a, TArray res) \\
 | 
|---|
 | 320 | 2)  Operateurs += -= A+B A-B TArray et TMatrix/TVecteur modifies en consequence
 | 
|---|
 | 321 | \item Extrait de {\tt cvs log tarray.cc } 
 | 
|---|
 | 322 | {\small \begin{verbatim}
 | 
|---|
 | 323 | ----------------------------
 | 
|---|
 | 324 | revision 1.38
 | 
|---|
 | 325 | date: 2004/07/30 13:31:39;  author: ansari;  state: Exp;  lines: +28 -24
 | 
|---|
 | 326 | Diverses petites optimisations ds les methodes operations/affectations de TArray - Reza 30 Juillet 2004
 | 
|---|
 | 327 | ----------------------------
 | 
|---|
 | 328 | ----------------------------
 | 
|---|
 | 329 | revision 1.36
 | 
|---|
 | 330 | date: 2004/07/27 11:44:23;  author: ansari;  state: Exp;  lines: +4 -1
 | 
|---|
 | 331 | Corrections bug apres modifs methods Add/Sub/Mul/DivCst(x,res) - Reza 27 Juillet 2004
 | 
|---|
 | 332 | ----------------------------
 | 
|---|
 | 333 | revision 1.35
 | 
|---|
 | 334 | date: 2004/07/26 17:30:40;  author: ansari;  state: Exp;  lines: +187 -108
 | 
|---|
 | 335 | Remplacement methodes Add/Mul/Sub/Div(T x) par AddCst/MulCst/SubCst/DivCst(T x, TArray<T> res) ds TArray - Reza 26 Juillet 2004
 | 
|---|
 | 336 | ----------------------------
 | 
|---|
 | 337 | \end{verbatim} }
 | 
|---|
 | 338 | 
 | 
|---|
 | 339 | \item Extrait de {\tt cvs log tarray.cc } 
 | 
|---|
 | 340 | {\small \begin{verbatim}
 | 
|---|
 | 341 | ----------------------------
 | 
|---|
 | 342 | revision 1.27
 | 
|---|
 | 343 | date: 2004/07/30 10:24:12;  author: cmv;  state: Exp;  lines: +97 -32
 | 
|---|
 | 344 | - Intro decision auto d'optimisation produit de matrices
 | 
|---|
 | 345 | - Possibilite a l'utilisateur pour choisir l'optimisation
 | 
|---|
 | 346 | - cas FxC optimise par copie
 | 
|---|
 | 347 |                 cmv 30/07/04
 | 
|---|
 | 348 | ----------------------------
 | 
|---|
 | 349 | revision 1.26
 | 
|---|
 | 350 | date: 2004/07/29 12:31:16;  author: ansari;  state: Exp;  lines: +7 -5
 | 
|---|
 | 351 | 1/ Remplacement des methodes Add/Sub/Mul/DivElt(a) par
 | 
|---|
 | 352 |    Add/Sub/Mul/DivElt(TArray a, TArray res)
 | 
|---|
 | 353 | 2/ Operateurs += -= A+B A-B TArray et TMatrix/TVecteur modifies en consequence
 | 
|---|
 | 354 | 3/ Ajout methode TArray::ScalarProduct()
 | 
|---|
 | 355 | 4/ Methode TArray::SetT renomme en SetCst() SetT garde en alias
 | 
|---|
 | 356 | 5/ Ajout parametre bool fzero (mise a zero) ajoute ds constructeur et
 | 
|---|
 | 357 |    ReSize() de TMatrix et TVecteur.
 | 
|---|
 | 358 |                                           Reza 29/07/2004
 | 
|---|
 | 359 | ----------------------------
 | 
|---|
 | 360 | revision 1.25
 | 
|---|
 | 361 | date: 2004/07/29 08:40:49;  author: cmv;  state: Exp;  lines: +148 -1
 | 
|---|
 | 362 | Optimisation produit de matrice a la sauce cmv 29/07/04
 | 
|---|
 | 363 | ----------------------------
 | 
|---|
 | 364 | \end{verbatim}  }
 | 
|---|
 | 365 | 
 | 
|---|
 | 366 | \end{itemize}
 | 
|---|
 | 367 | 
 | 
|---|
 | 368 | \section{HiStats} 
 | 
|---|
 | 369 | \subsection{Classe HistoErr } 
 | 
|---|
 | 370 | Ajout classe HistoErr (Septembre-Octobre 2004) 
 | 
|---|
 | 371 | 
 | 
|---|
| [2716] | 372 | \subsection{NTuple}
 | 
|---|
 | 373 | la classe NTuple peut maintenant avoir des colonnes float ou double.
 | 
|---|
 | 374 | Il y a maintenant deux methodes Fill(r\_4 *) et Fill(r\_8 *)
 | 
|---|
 | 375 | Les noms ne sont plus limites a 8 caracteres.
 | 
|---|
 | 376 | 
 | 
|---|
 | 377 | 
 | 
|---|
 | 378 | \subsection{ Les DataTable (SuperNTuple) }
 | 
|---|
 | 379 | 
 | 
|---|
| [2632] | 380 | \begin{verbatim}
 | 
|---|
| [2716] | 381 | BaseDataTable                                    
 | 
|---|
 | 382 |               --------  DataTable
 | 
|---|
 | 383 |               --------  SwPPFDataTable
 | 
|---|
 | 384 | \end{verbatim}
 | 
|---|
| [2717] | 385 | 
 | 
|---|
 | 386 | \noindent {\bf BaseDataTable} : Classe de base, avec qques methodes virtuelles
 | 
|---|
| [2716] | 387 | pures, implementent la presque totalite des fonctionalites, en particulier
 | 
|---|
 | 388 | celles de l'interface NTupleInterface.
 | 
|---|
| [2632] | 389 | 
 | 
|---|
| [2717] | 390 | \noindent {\bf DataTable} : Implementation concrete de BaseDataTable avec donnees en 
 | 
|---|
 | 391 | memoire \\ 
 | 
|---|
 | 392 | (utilise SegDataBlock$<$T$>$ pour stocker les colonnes)
 | 
|---|
| [2632] | 393 | 
 | 
|---|
| [2717] | 394 | \noindent {\bf SwPPFDataTable} : Implementation concrete de BaseDataTable avec donnees 
 | 
|---|
 | 395 | en swap sur stream PPF (POutPersist)- \\ 
 | 
|---|
 | 396 | Utilise  (SwSegDataBlock$<$T$>$ avec 
 | 
|---|
 | 397 | un data-swapper PPF (classe PPFDataSwapper$<$T$>$ ) 
 | 
|---|
| [2632] | 398 | 
 | 
|---|
| [2716] | 399 | DataTable et SwPPFDataTable respecte +/- les conventions SOPHYA , 
 | 
|---|
 | 400 | constructeur de copie avec partage ou copie de donnees, operateur = 
 | 
|---|
 | 401 | Datatable : partage et copie , = : fait une copie
 | 
|---|
 | 402 | SwPPFDataTable : C'est toujours partage (presque par definition)
 | 
|---|
 | 403 | Autre point, compte tenu de la structure des streams PPF , 
 | 
|---|
 | 404 | les SwPPFDataTable fonctionne en ecriture OU en lecture, mais
 | 
|---|
 | 405 | pas les deux a la fois. 
 | 
|---|
| [2632] | 406 | 
 | 
|---|
| [2716] | 407 | Classe de gestion de persistence commune : \\
 | 
|---|
| [2717] | 408 | {\bf ObjFileIO$<$BaseDataTable$>$ }
 | 
|---|
| [2632] | 409 | 
 | 
|---|
| [2716] | 410 | Lit et ecrit les DataTable et SwPPFDataTable
 | 
|---|
 | 411 | Actuellement, on ne peut les relires que dans le meme type,
 | 
|---|
 | 412 | cad on ne peut relire avec un SwPPFDataTable un objet 
 | 
|---|
 | 413 | ecrit comme DataTable - mais cette possibilite pourra 
 | 
|---|
 | 414 | peut-etre codee ulterieurement (d'ou l'interet en particulier 
 | 
|---|
| [2717] | 415 | d'un gestionnaire commun ObjFileIO$<$BaseDataTable$>$
 | 
|---|
| [2632] | 416 | 
 | 
|---|
| [2716] | 417 | (les operateurs habituel $<<$ et $>>$ sur PIn/OutPersist sont definies)
 | 
|---|
| [2632] | 418 | 
 | 
|---|
| [2717] | 419 | Actuellement, les colonnes peuvent etre de type \\
 | 
|---|
 | 420 | {\tt int\_4  ,  int\_8  ,  r\_4  ,  r\_8  ,  string } \\
 | 
|---|
 | 421 | On pourra ajouter apres  les types suivants : \\
 | 
|---|
 | 422 | {\tt complex<r\_4>  ,   complex<r\_8>  , TimeStamp }
 | 
|---|
| [2716] | 423 |  
 | 
|---|
 | 424 | Dans BaseDataTable, il reste a remplir la methode
 | 
|---|
| [2717] | 425 | {\tt BaseDataTable ::FillFromASCIIFile(string const \& fn) } \\
 | 
|---|
 | 426 | {\tt BaseDataTable :: Print(int num, int nmax=1) const  }
 | 
|---|
 | 427 | (on peut utiliser { \tt LineToString(sa\_size\_t n) const }
 | 
|---|
| [2716] | 428 | 
 | 
|---|
 | 429 | Par contre, les merges et copie sont prevues, 
 | 
|---|
 | 430 | on doit en principe pouvoir ecrire par exemple:
 | 
|---|
| [2717] | 431 | \begin{verbatim}
 | 
|---|
| [2716] | 432 | SwPPFDataTable swdt;
 | 
|---|
 | 433 | PInPersist pis("swdt.ppf");
 | 
|---|
 | 434 | pis >> swdt;
 | 
|---|
 | 435 | DataTable dt;
 | 
|---|
 | 436 | dt = swdt;  // Pour tout charger en memoire 
 | 
|---|
| [2717] | 437 | \end{verbatim}
 | 
|---|
| [2716] | 438 | 
 | 
|---|
 | 439 | On peut aussi ajouter des methodes d'acces aux variables membres pour enrichier l'interface.
 | 
|---|
 | 440 | 
 | 
|---|
| [2717] | 441 | {\bf PLUS IMPORTANT : } \\
 | 
|---|
 | 442 | Il reste a ecrire la classe FITS\_BaseDataTable ou FITS\_DataTable 
 | 
|---|
 | 443 | pour I/O sur fichiers FITS - j'ai regarde {\tt FITS\_XNTuple} qu'on pourra simplifier enormement
 | 
|---|
| [2716] | 444 | et que devrait etre assez rapide. 
 | 
|---|
| [2717] | 445 | Il faut aussi faire une classe {\tt SwFITSDataTable}, en recopiant pas mal de chose ds la classe
 | 
|---|
 | 446 | {\tt SwPPFDataTable} - On pourrait peut-etre avoir une classe intermediaire qui regroupe
 | 
|---|
 | 447 | tout ce qui est commun a {\tt SwFITSDataTable et SwPPFDataTable} , mais a voir.
 | 
|---|
 | 448 | L'element cle sera le codage de {\tt FITSDataSwapper<T>}  qui implemente 
 | 
|---|
 | 449 | les deux methodes de {\tt DataSwapperInterface<T>} - le reste devrait etre du copier/coller
 | 
|---|
| [2716] | 450 | essentiellement. 
 | 
|---|
 | 451 | 
 | 
|---|
| [2717] | 452 | {\bf DataTable cote PIAPP :} \\ 
 | 
|---|
| [2716] | 453 | Cote piapp, les DataTable et SwPPFDataTable  sont pris en charge par 
 | 
|---|
| [2717] | 454 | {\tt NOMAdapter\_DataTable} (qui prend en charge tous les 'BaseDataTable' )
 | 
|---|
 | 455 | Il faudrait peut-etre rajouter deux commandes : \\
 | 
|---|
| [2716] | 456 | newdt ou newdatatable 
 | 
|---|
| [2717] | 457 | newdt ncol col1 [col2 .... ]  \\
 | 
|---|
| [2716] | 458 | avec possibilite de specifier coli sous fome de X:colname ou X = D,F,S,I,L ...
 | 
|---|
 | 459 | et puis dtfromascii  ...
 | 
|---|
 | 460 | 
 | 
|---|
 | 461 | Voir Tests/tnt.cc pour exemple d'utilisation :
 | 
|---|
| [2717] | 462 | \begin{verbatim}
 | 
|---|
| [2716] | 463 | DataTable dt(64);
 | 
|---|
 | 464 | dt.AddIntegerColumn("line");
 | 
|---|
 | 465 | dt.AddDoubleColumn("x");
 | 
|---|
 | 466 | dt.AddFloatColumn("f_sin");
 | 
|---|
 | 467 | MuTyV rec[10];
 | 
|---|
 | 468 | for(int k = 0; k<1000; k++) {
 | 
|---|
 | 469 |   rec[0] = k;
 | 
|---|
 | 470 |   double x = M_PI*k/100.;
 | 
|---|
 | 471 |   double fx = sin(x)*cos(x);
 | 
|---|
 | 472 |   rec[1] = x;
 | 
|---|
 | 473 |   rec[2] = sin(x);
 | 
|---|
 | 474 | }
 | 
|---|
 | 475 |  POutPersist po("dtable.ppf");
 | 
|---|
 | 476 |  po << dt;
 | 
|---|
| [2717] | 477 | \end{verbatim}
 | 
|---|
| [2716] | 478 | 
 | 
|---|
 | 479 | Pour SwPPFDataTable, il faut juste creer un stream PPF avant, qui doit rester
 | 
|---|
| [2717] | 480 | ouvert tant que le SwPPFDataTable est actif: \\
 | 
|---|
 | 481 | \begin{verbatim}
 | 
|---|
| [2716] | 482 |  POutPersist po("swdtable.ppf");
 | 
|---|
 | 483 |  SwPPFDataTable dt(po, 64);
 | 
|---|
| [2632] | 484 | \end{verbatim}
 | 
|---|
 | 485 | 
 | 
|---|
| [2717] | 486 | 
 | 
|---|
| [2632] | 487 | \section{SkyMap , Samba }
 | 
|---|
 | 488 | \subsection{Tests et vrifications des polynomes de Legendre} 
 | 
|---|
 | 489 | --> CMV 
 | 
|---|
 | 490 | 
 | 
|---|
 | 491 | \subsection{SphereECP} 
 | 
|---|
 | 492 | Extrait du message du 7 Septembre 2004 
 | 
|---|
 | 493 | \begin{verbatim}
 | 
|---|
 | 494 |  J'ai mis dans la base (module SkyMap) le code de la classe
 | 
|---|
 | 495 | SphereECP<T> (pixelisation avec projection cylindrique) - carte partielle et complete,
 | 
|---|
 | 496 | + gestionnaire PPersist + modifs adaptateur NomSkyMapAdaptor (PIext/ spiapp)
 | 
|---|
 | 497 | 
 | 
|---|
 | 498 | Programme test (avec appel a transforme en Alm) ds Test/tsphereecp.cc
 | 
|---|
 | 499 | Attention, mettre le parametere de pixelisation a -1 lors de l'appel a Generate pour eviter
 | 
|---|
 | 500 | le Resize de la sphereECP
 | 
|---|
 | 501 | ylmserver.GenerateFromCl(map, -1,  clin, 0.);
 | 
|---|
 | 502 | 
 | 
|---|
 | 503 | Dans piapp, c'est visualise par defaut en projection Molleweide
 | 
|---|
 | 504 | On peut ajouter dans les options d'affichage :
 | 
|---|
 | 505 | ecparray : affichage direct du tableau TArray des pixels (X:Phi, Y:Theta)
 | 
|---|
 | 506 | Si option ecparray, on peut preciser en plus
 | 
|---|
 | 507 |      - ecpscaledeg: echelle des axes en degres au lieu de pixels
 | 
|---|
 | 508 |      - ecpscalerad: echelle des axes en radians au lieu de pixels
 | 
|---|
 | 509 | Exemple:
 | 
|---|
 | 510 | Cmd> disp mapecp 'ecparray ecpscaledeg zoomx2 stdaxes'
 | 
|---|
 | 511 | \end{verbatim} 
 | 
|---|
 | 512 | 
 | 
|---|
 | 513 | \subsection{Bug non corrig ds classe Circle} 
 | 
|---|
 | 514 | \begin{verbatim}
 | 
|---|
 | 515 | From: Laurence Perotto <perotto@cdf.in2p3.fr>
 | 
|---|
 | 516 | Date: Mon Jan 5, 2004  4:59:12 PM Europe/Paris
 | 
|---|
 | 517 | To: Reza Ansari <ansari@lal.in2p3.fr>, Christophe Magneville <cmv@hep.saclay.cea.fr>
 | 
|---|
 | 518 | Subject: un bug dans sophya...
 | 
|---|
 | 519 | 
 | 
|---|
 | 520 |     Bonjour et bonne annee a tous les deux...
 | 
|---|
 | 521 | 
 | 
|---|
 | 522 |     Je viens de trouver un ptit bug dans la fonction TanOnCircle de la classe Circle: Il
 | 
|---|
 | 523 | s'agit d'un melange entre les coordonnees (beta, lambda) de Benoit et les (theta, phi)
 | 
|---|
 | 524 | utilises dans Sophya. Lors du passage de l'un a l'autre, une transfo sin->cos a ete
 | 
|---|
 | 525 | oubliee...
 | 
|---|
 | 526 |     Voila...
 | 
|---|
 | 527 |     Bonne journee.
 | 
|---|
 | 528 | 
 | 
|---|
 | 529 |     Laurence.
 | 
|---|
 | 530 | \end{verbatim} 
 | 
|---|
 | 531 | 
 | 
|---|
 | 532 | \section{SysTools} 
 | 
|---|
 | 533 | \subsection{Classe SOPHYA::Commander (module SysTools) }
 | 
|---|
 | 534 | 
 | 
|---|
| [2717] | 535 | Mars-Avril 2004 : 
 | 
|---|
| [2632] | 536 | Classe d'interprteur de ligne de commande inspire de C-Shell,
 | 
|---|
 | 537 | destine a etre incluee dans des applications C/C++. \\
 | 
|---|
| [2717] | 538 | ( Programme test Test/tcmd.cc )  \\
 | 
|---|
 | 539 | Avril 2005 : Introduction de la possibilite d'execution de commandes
 | 
|---|
 | 540 | en multithreads \\
 | 
|---|
 | 541 | Avril 2005 : Controle strict sur les noms de variables, limites
 | 
|---|
 | 542 | aux caracteres alphanumeriques + underscore - Adaptation
 | 
|---|
 | 543 | de l'algorithme de substitution en consequence.
 | 
|---|
| [2632] | 544 | 
 | 
|---|
 | 545 | {\bf Mini guide de l'interpreteur - Message du 19 Mars 2004 }   \
 | 
|---|
 | 546 | 
 | 
|---|
 | 547 | \begin{itemize}
 | 
|---|
 | 548 | 
 | 
|---|
 | 549 | \item[\rond] {\bf Gestion des variables } \\
 | 
|---|
 | 550 |  - Les variables sont non typees toutes traitees comme des chaines 
 | 
|---|
 | 551 | de caracteres. 
 | 
|---|
 | 552 |  - Acces aux variables d'environnement - 
 | 
|---|
 | 553 |  - Un niveau variable d'environnement application est aussi prevu
 | 
|---|
 | 554 |  - Toutes les variables de l'interpreteur  sont traitees comme des vecteurs.
 | 
|---|
 | 555 | extensibles automatiquement (difference avec le C-Shell) 
 | 
|---|
 | 556 | 
 | 
|---|
 | 557 | \item[\rond] {\bf Creation / initialisation de variables }  \\
 | 
|---|
 | 558 | \begin{verbatim}
 | 
|---|
 | 559 | Cmd> set sv StringValue
 | 
|---|
 | 560 | # Suppression d'une variable : unset ou clearvar 
 | 
|---|
 | 561 | Cmd> unset sv 
 | 
|---|
 | 562 | 
 | 
|---|
 | 563 | # Initialisation de type vecteur - Espace avant/apres ')' et avant ')' obligatoire
 | 
|---|
 | 564 | Cmd> set vecv ( mot1 mot2 mot3 mot4 mot5 )
 | 
|---|
 | 565 | #Calcul numerique : expression de type C  - Espace avant/apres '=' obligatoire
 | 
|---|
 | 566 | Cmd> a = 2+3*sqrt(4)
 | 
|---|
 | 567 | # Le signe egal peut etre utilise pour attribuer une chaine de caracteres
 | 
|---|
 | 568 | Cmd> a = 'Bonjour Madame'
 | 
|---|
 | 569 | # Un element de tableau peut etre specifie avant le signe egal 
 | 
|---|
 | 570 | Cmd> vecv[2] = 'coucou'
 | 
|---|
 | 571 | # Ou bien 
 | 
|---|
 | 572 | Cmd> i = 3
 | 
|---|
 | 573 | Cmd> vecv[i] = 'Ooohhh' 
 | 
|---|
 | 574 | \end{verbatim}
 | 
|---|
 | 575 | 
 | 
|---|
 | 576 | A droite du signe egal (membre de droite), les variables doivent etre
 | 
|---|
 | 577 | adressees a l'aide du signe \$.  
 | 
|---|
 | 578 | 
 | 
|---|
 | 579 | Une chaine peut etre cassee en mots a l'aide de la commande var2words
 | 
|---|
 | 580 | \begin{verbatim}
 | 
|---|
 | 581 | Cmd> var2words varname wordvarname [separateur]
 | 
|---|
 | 582 | \end{verbatim}
 | 
|---|
 | 583 | 
 | 
|---|
 | 584 | \item[\rond] {\bf Acces aux variables } \\
 | 
|---|
 | 585 | L'acces aux variables s'effectue par le signe \$  {\tt \$varname} .
 | 
|---|
 | 586 | Les {\tt \$xxx} sont remplaces par le contenu de la variable xxx. 
 | 
|---|
 | 587 | Cette substitution ne s'effectue pas entre simple quotes {\tt ' ... \$xxx '},
 | 
|---|
 | 588 | mais se fait entre double quotes {\tt " ... \$xxx ... "} . Les formes
 | 
|---|
 | 589 | {\tt \${vname} } ou {\tt \$(vname)} peuvent etre utilisees.
 | 
|---|
 | 590 | 
 | 
|---|
 | 591 | \begin{verbatim}
 | 
|---|
 | 592 | Cmd> x = 'Hello'
 | 
|---|
 | 593 | Cmd> echo $x
 | 
|---|
 | 594 | # Taille d'une variable de type vecteur $#vname
 | 
|---|
 | 595 | Cmd> set vx ( 111 2222 3333 444444 )
 | 
|---|
 | 596 | Cmd> echo $#vx 
 | 
|---|
 | 597 | # Acces aux elements de tableau
 | 
|---|
 | 598 | Cmd> echo $vx[0] $vx[1] 
 | 
|---|
 | 599 | #  ou bien indexe par une variable 
 | 
|---|
 | 600 | Cmd> i = 2
 | 
|---|
 | 601 | Cmd> echo $vx[i] 
 | 
|---|
 | 602 | # Une syntaxe particuliere: $[vname] retourne le contenu de
 | 
|---|
 | 603 | # la variable dont le nom est ds vname 
 | 
|---|
 | 604 | Cmd> zzz = 'Commander'
 | 
|---|
 | 605 | Cmd> xxx = 'zzz'
 | 
|---|
 | 606 | Cmd> echo '$[xxx]= '  $[xxx]
 | 
|---|
 | 607 | $[xxx]= Commander
 | 
|---|
 | 608 | \end{verbatim}
 | 
|---|
 | 609 | 
 | 
|---|
 | 610 | Variables d'environnement: L'acces aux variables d'environnement 
 | 
|---|
 | 611 | se fait simplement par{\tt \$varenvname}. Attention, les variables locales
 | 
|---|
 | 612 | de l'interpreteur sont prioritaires.
 | 
|---|
 | 613 | 
 | 
|---|
 | 614 | \item[\rond] {\bf Variables particulieres: } \\
 | 
|---|
 | 615 | {\tt \$retval} ou {\tt \$retstr}  :  chaine specifee sur la derniere commande return 
 | 
|---|
 | 616 | {\tt \$status} : code de retour de la derniere commande executee.
 | 
|---|
 | 617 | (variable existe et est rempli - mais il faudra se donner une regle 
 | 
|---|
 | 618 | plus claire ...)
 | 
|---|
 | 619 | Arguments des fichiers .pic appeles par la commande exec 
 | 
|---|
 | 620 | {\tt \$\# } : nombre d'arguments, a part \$0 
 | 
|---|
 | 621 | {\tt \$0} nom du fichier ou du script 
 | 
|---|
 | 622 | {\tt \$1 \$2 \$3} .... les arguments  (pour les scripts et les .pic (exec))
 | 
|---|
 | 623 | 
 | 
|---|
 | 624 |  
 | 
|---|
 | 625 | \item[\rond] {\bf Structures de controle  } \\
 | 
|---|
 | 626 | \begin{verbatim}
 | 
|---|
 | 627 | foreach f ( w1 w2 w3 ... )
 | 
|---|
 | 628 |   ...
 | 
|---|
 | 629 |   echo $f
 | 
|---|
 | 630 | end
 | 
|---|
 | 631 | \end{verbatim}
 | 
|---|
 | 632 | 
 | 
|---|
 | 633 | Espace avant/apres '(' et avant ')' obligatoire.
 | 
|---|
 | 634 | 
 | 
|---|
 | 635 | \begin{verbatim}
 | 
|---|
 | 636 | foreach v vecname 
 | 
|---|
 | 637 |   ...
 | 
|---|
 | 638 |   echo $v
 | 
|---|
 | 639 | end
 | 
|---|
 | 640 | \end{verbatim}
 | 
|---|
 | 641 | 
 | 
|---|
 | 642 | Boucle de type integer:
 | 
|---|
 | 643 | \begin{verbatim}
 | 
|---|
 | 644 | for i  startInt:endInt[:stepInt]
 | 
|---|
 | 645 |   ....
 | 
|---|
 | 646 |   echo $i 
 | 
|---|
 | 647 | end
 | 
|---|
 | 648 | \end{verbatim}
 | 
|---|
 | 649 | 
 | 
|---|
 | 650 | Boucle de type float
 | 
|---|
 | 651 | \begin{verbatim}
 | 
|---|
 | 652 | for f  startFloat:endFloat[:stepFloat]
 | 
|---|
 | 653 |   ....
 | 
|---|
 | 654 |   echo $f
 | 
|---|
 | 655 | end
 | 
|---|
 | 656 | \end{verbatim}
 | 
|---|
 | 657 | 
 | 
|---|
 | 658 | Boucle sur les lignes d'un fichier:
 | 
|---|
 | 659 | \begin{verbatim}
 | 
|---|
 | 660 | forinfile line FileName
 | 
|---|
 | 661 |   ...
 | 
|---|
 | 662 |   echo $line
 | 
|---|
 | 663 | end
 | 
|---|
 | 664 | \end{verbatim}
 | 
|---|
 | 665 | 
 | 
|---|
 | 666 | Instruction {\tt break} pour casser une boucle
 | 
|---|
 | 667 | 
 | 
|---|
 | 668 | \item[\rond] {\bf Les tests  }
 | 
|---|
 | 669 | \begin{verbatim}
 | 
|---|
 | 670 | if ( test ) then 
 | 
|---|
 | 671 | endif
 | 
|---|
 | 672 | 
 | 
|---|
 | 673 | if ( test ) then
 | 
|---|
 | 674 |  ....
 | 
|---|
 | 675 | else
 | 
|---|
 | 676 |  .... 
 | 
|---|
 | 677 | endif
 | 
|---|
 | 678 | \end{verbatim}
 | 
|---|
 | 679 | 
 | 
|---|
 | 680 | Espace avant/apres '(' et avant ')' obligatoire.
 | 
|---|
 | 681 | 
 | 
|---|
 | 682 | test de type {\tt a == b} OU {\tt a != b} OU {\tt a < b}  OU {\tt a > b} 
 | 
|---|
 | 683 | OU {\tt a <= b} OU {\tt a >= b}
 | 
|---|
 | 684 | les espaces avant l'operateur de comparaison sont obligatoires.
 | 
|---|
 | 685 | {\tt ==} et {\tt !=}  effectue une comparaison de chaines de caracteres.
 | 
|---|
 | 686 | {\tt < , > , <= , >=}une comparaison apres conversion en valeur flottante.
 | 
|---|
 | 687 | 
 | 
|---|
 | 688 | \item[\rond] {\bf Definition de script } \\
 | 
|---|
 | 689 | \begin{verbatim}
 | 
|---|
 | 690 | defscript scriptname  [description ]
 | 
|---|
 | 691 |    ....
 | 
|---|
 | 692 | endscript 
 | 
|---|
 | 693 | \end{verbatim}
 | 
|---|
 | 694 | 
 | 
|---|
 | 695 | L'appel a un script se fait simplement a l'aide
 | 
|---|
 | 696 | du nom de script (contrairement aux fichiers
 | 
|---|
 | 697 | de commande qui sont executes a l'aide de la 
 | 
|---|
 | 698 | commande {\tt exec} )
 | 
|---|
 | 699 | \begin{verbatim}
 | 
|---|
 | 700 | Cmd> scriptname arg1 arg2 arg3 ....
 | 
|---|
 | 701 | \end{verbatim}
 | 
|---|
 | 702 | 
 | 
|---|
 | 703 | L'instruction {\tt return} provoque l'arret (et le retour) d'execution d'un
 | 
|---|
 | 704 | script ou d'un fichier de commandes.
 | 
|---|
 | 705 | Commandes {\bf listscript }et {\bf clearscript scriptname} 
 | 
|---|
 | 706 |  permettet d'avoir la liste des scripts 
 | 
|---|
 | 707 |  definis / supprimer la definition d'un script 
 | 
|---|
 | 708 | 
 | 
|---|
 | 709 | \item[\rond] {\bf Autres commandes}
 | 
|---|
 | 710 | \begin{itemize}
 | 
|---|
 | 711 | \item Instruction {\bf echo } pour ecrire sur cout/stdout
 | 
|---|
 | 712 | \item Instruction {\bf echo2file} pour ecrire a la fin d'un fichier
 | 
|---|
 | 713 | \item Instruction {\bf sleep nsec} (attente de nsec seconds )
 | 
|---|
 | 714 | \item Instructions {\bf timingon , timingoff , traceon , traceoff } \\
 | 
|---|
 | 715 | %
 | 
|---|
 | 716 | \item Commande {\bf exec commandfilename [arg1 arg2 ... ] }
 | 
|---|
 | 717 | \item Commandes {\bf help et help keyword/commandname }
 | 
|---|
 | 718 | \item Commandes {\bf listvars , listcommands }
 | 
|---|
 | 719 | \item  Defintion et liste d'alias : {\bf alias aliasname 'string ' } et {\bf  listalias} 
 | 
|---|
 | 720 | \end{itemize} 
 | 
|---|
| [2717] | 721 | 
 | 
|---|
 | 722 | \item[\rond] {\bf Threads d'execution de commandes (Avril 2005)} \\
 | 
|---|
 | 723 | Possibilite de lancer des commandes (autre que les commandes
 | 
|---|
 | 724 |   de l'interpreteur lui-meme) en thread separe (il suffit de mettre un \& 
 | 
|---|
 | 725 |   a la fin de la commande) \\ 
 | 
|---|
 | 726 |   Commandes des gestion des threads : \\
 | 
|---|
 | 727 |   {\bf thrlist  ;  cleanthrlist  ;  cancelthr ThId ;   waitthr  } \\
 | 
|---|
 | 728 |   Attention, la possibilite de lancer des commandes en threads separes ne fonctionne que
 | 
|---|
 | 729 | pour des commandes "thread-safe".
 | 
|---|
 | 730 | La plupart de nos commandes de piapp sont  \\
 | 
|---|
 | 731 |    - soit trop rapide,  \\
 | 
|---|
 | 732 |    - soit non "thread-safe"   \\
 | 
|---|
 | 733 | 
 | 
|---|
 | 734 |   \item[\rond] controle d'execution : \\
 | 
|---|
 | 735 | Possibilite d'arreter l'execution de l'interpreteur (dans une boucle
 | 
|---|
 | 736 |    ou dans dans un fichier .pic ... 
 | 
|---|
 | 737 |    Utiliser la commande {\bf stop} ou {\tt <Cntrl C>} dans PIConsole
 | 
|---|
 | 738 | 
 | 
|---|
| [2632] | 739 | \end{itemize} 
 | 
|---|
 | 740 | 
 | 
|---|
 | 741 | \subsection{Classes CExpressionEvaluator et RPNExpressionEvaluator }
 | 
|---|
 | 742 | \begin{itemize}
 | 
|---|
 | 743 | \item[\rond]  Ajout des classes RPNExpressionEvaluator et CExpressionEvaluator 
 | 
|---|
 | 744 | d'valuation d'expressions numriques en notation polonaise inverse
 | 
|---|
 | 745 | et avec la syntaxe C . Utilise dans la classe Commander.  
 | 
|---|
 | 746 | \item[\rond]   Programme test Test/tcmd.cc 
 | 
|---|
 | 747 | \item[\rond]  extrait de {\tt cvs log cexpre.cc }
 | 
|---|
 | 748 | {\small \begin{verbatim} 
 | 
|---|
 | 749 | ----------------------------
 | 
|---|
 | 750 | revision 1.3
 | 
|---|
 | 751 | date: 2004/03/18 18:15:19;  author: ansari;  state: Exp;  lines: +10 -6
 | 
|---|
 | 752 | Suite (presque finie) des modifications de l'interpreteur - gestion des variables en particulier - Reste au moins un bug ds CExpressionEvaluator - Reza 18/03/2004
 | 
|---|
 | 753 | ----------------------------
 | 
|---|
 | 754 | revision 1.2
 | 
|---|
 | 755 | date: 2004/03/16 08:47:48;  author: ansari;  state: Exp;  lines: +5 -6
 | 
|---|
 | 756 | suppression variables inutilisees ds cexpr.cc - Reza 16 Mars 2004
 | 
|---|
 | 757 | ----------------------------
 | 
|---|
 | 758 | revision 1.1
 | 
|---|
 | 759 | date: 2004/03/15 22:19:43;  author: ansari;  state: Exp;
 | 
|---|
 | 760 | Ajout fichiers des classes RPNExpressionEvaluator et CExpressionEvaluator (expression arithmetiques) et MAJ du fichier Makefile et objlist.list - Reza 15 Mars 2003
 | 
|---|
 | 761 | \end{verbatim} }
 | 
|---|
 | 762 | 
 | 
|---|
 | 763 | \item[\rond] Extrait du message du 3 Mars 2004 
 | 
|---|
 | 764 | \begin{verbatim}
 | 
|---|
 | 765 | Le code est base sur une hierarchie de classe d'expression :
 | 
|---|
 | 766 |  Expr --------  NumberExp
 | 
|---|
 | 767 |       --------- BinExp ------ AddExp
 | 
|---|
 | 768 |                        ------ MulExp
 | 
|---|
 | 769 |                        ------ SubExp
 | 
|---|
 | 770 |                        ------ DivExp
 | 
|---|
 | 771 |     ---------  FuncExp
 | 
|---|
 | 772 |     ---------  CExpressionEvaluator
 | 
|---|
 | 773 | 
 | 
|---|
 | 774 | NumberExp  : expression elementaire de nombre, sait actuellement traduire Pi et E
 | 
|---|
 | 775 |                           tres facile d'ajouter d'autres constantes
 | 
|---|
 | 776 | BinExp: Classe d'operations binaires (deux operandes) a+b a-b a*b a/b
 | 
|---|
 | 777 |                avec gestion de niveau de priorite des operateurs
 | 
|---|
 | 778 |                On peut facilement ajouter d'autres operateurs binaires (par exemple
 | 
|---|
 | 779 |                puissance ^ a^b ) - et les priorites relatives seront gerees en principe.
 | 
|---|
 | 780 | FuncExp: classe d'expression fonctionnelle, avec n arguments f(x1,x2,...x3)
 | 
|---|
 | 781 |                   actuellemenent, n=0 a n=3 arguments et quelques fonctions
 | 
|---|
 | 782 |                   usuelles sont decodes ds cette classe (sin,cos,tan, asin, acos, atan, exp, log,
 | 
|---|
 | 783 |                   atan2, pow ) - voir ds le code
 | 
|---|
 | 784 | 
 | 
|---|
 | 785 | CExpressionEvaluator : C'est la classe de haut niveau a utiliser -
 | 
|---|
 | 786 |                                             la fonction de decodage de la chaine ASCII (qui utilise
 | 
|---|
 | 787 |                                             les fonctionalites des differentes classes est la dedans
 | 
|---|
 | 788 |                                             et ce n'est pas tres long.
 | 
|---|
 | 789 | (+ une classe d'exception specifique).
 | 
|---|
 | 790 | \end{verbatim}
 | 
|---|
 | 791 | 
 | 
|---|
 | 792 | \end{itemize}
 | 
|---|
 | 793 | 
 | 
|---|
| [2717] | 794 | \section{LinAlg} 
 | 
|---|
 | 795 | Extension des fonctionalits de la classe {\tt LapackServer<T>} : 
 | 
|---|
 | 796 | (Juillet 2004 / cmv , Fvrier 2005 / Reza)
 | 
|---|
 | 797 | \begin{itemize}
 | 
|---|
 | 798 | \item[\rond] Introduction de l'interface Lapack d'inversion des matrices symetriques (21/7/2004)
 | 
|---|
 | 799 | \item[\rond]  Introduction de l'interface Lapack de recherche de valeurs et vecteurs propres
 | 
|---|
 | 800 |   (cas general, symetrique et hermitique) (21/7/2004)
 | 
|---|
 | 801 | \item[\rond] Introduction d'un fonction d'interface pour le calculateur de workspace
 | 
|---|
 | 802 |   (ilaenv\_) (21/7/2004)
 | 
|---|
 | 803 | \item[\rond] Ajout prog test Tests/tsttminv.cc + Commentaires sur les diverses methodes et sur les matrices FORTRAN (21/7/2004)
 | 
|---|
 | 804 | \item[\rond] Ajout SVD decomp by Divide and Conquer SVD\_DC (23/7/2004)
 | 
|---|
 | 805 | \item[\rond] Ajout  Least Square with SVD DC
 | 
|---|
 | 806 | \item[\rond] Ajout methode calcul de la matrice inverse par Lapack en utilisant la 
 | 
|---|
 | 807 | resolution de systemes (07/02/2005) 
 | 
|---|
 | 808 | \end{itemize}
 | 
|---|
 | 809 | 
 | 
|---|
| [2632] | 810 | \section{PI,PIext,piapp} 
 | 
|---|
| [2717] | 811 | \subsection{PI: Classes modifiees - ameliorees}
 | 
|---|
 | 812 | \begin{itemize}
 | 
|---|
 | 813 | \item[\rond] {\bf  PIImageNavigator } \\
 | 
|---|
 | 814 | Ajout de la classe {\tt PIImageNavigator } permmettant de visualiser une image 
 | 
|---|
 | 815 | avec ses propres widget zoom / global view et colormap. (Fevrier 2005) \\
 | 
|---|
 | 816 | Commande {\tt imagnav} ajoute ds piapp/baseexcute.cc . \\
 | 
|---|
 | 817 | \item[\rond] Avril 2005 - Amelioration de la classe {\bf PIConsole} \\
 | 
|---|
 | 818 | 1/Envoi Message PIMSG\_Cancel lors de {\tt <Cntl C>} \\ 
 | 
|---|
 | 819 |  2/ Correction positionnement curseur lors de rappel de commande,
 | 
|---|
 | 820 |   Si possible en fin de commande - mais toujours avec le 
 | 
|---|
 | 821 |   debut de commande visible.  \\
 | 
|---|
 | 822 | 3/ Correction (probable) du petit bug sur les derniers caracteres lors de copier/coller
 | 
|---|
 | 823 |   ds PIConsole
 | 
|---|
 | 824 | \end{itemize}
 | 
|---|
 | 825 | %
 | 
|---|
 | 826 | % 
 | 
|---|
| [2632] | 827 | \subsection{ Codage texte des options graphiques (11 Mars 2004)}
 | 
|---|
 | 828 | \begin{verbatim}
 | 
|---|
 | 829 | //   Methode retournant un vecteur de string a partir des options
 | 
|---|
 | 830 | virtual int        PIDrawer::OptionToString(vector<string> & opt) const
 | 
|---|
 | 831 | qui vient completer les deux methodes
 | 
|---|
 | 832 | virtual int        PIDrawer:: DecodeOptionString(vector<string> & opt, bool ...) et
 | 
|---|
 | 833 | virtual void       PIDrawer:: GetOptionsHelpInfo(string& info);
 | 
|---|
 | 834 | Ces methodes s'occupent de decoder les options graphiques (et l'aide
 | 
|---|
 | 835 | associe). La methode ajoutee permet de faire l'operation inverse, fabriquer
 | 
|---|
 | 836 | une serie de chaine de caracteres a partir des options graphiques.
 | 
|---|
 | 837 | Il y a aussi la methode
 | 
|---|
 | 838 | virtual int            PIWdgGen::OptionToString(vector<string> & opt) const
 | 
|---|
 | 839 | que j'ai ajoute (rien a faire pour le moment) - ainsi que
 | 
|---|
 | 840 | int PIGraphicAtt::AttToStrings(vector<string> & att) const.
 | 
|---|
 | 841 | 
 | 
|---|
 | 842 | Peux-tu remplir la methode PIGraphicAtt::AttToStrings(vector<string> & att) const.
 | 
|---|
 | 843 | L'implementation par defaut de PIDrawer::OptionToString(vector<string> & opt) const
 | 
|---|
 | 844 | appelle PIGraphicAtt::AttToStrings() -  a laisser donc tel quel.
 | 
|---|
 | 845 | 
 | 
|---|
 | 846 | par contre, pour les autres drawer (PIYfXDrawer, PIFuncDrawer, PIElDrawer,
 | 
|---|
 | 847 | PISurfaceDrawer, PIHisto, PIHisto2D, PINTuple ...) - lorsque
 | 
|---|
 | 848 | DecodeOptionString(vector<string> & opt, bool ...) est modifie,
 | 
|---|
 | 849 | rajouter la methode OptionToString(vector<string> & opt) et verifier le help.
 | 
|---|
 | 850 | Attention, il ne faut pas mettre l'argument opt a zero, mais ajouter des chaines
 | 
|---|
 | 851 | derriere (push_back()) afin de pouvoir cumuler les options de base  + options
 | 
|---|
 | 852 | specifiques.
 | 
|---|
 | 853 | 
 | 
|---|
 | 854 | Comment tester ?
 | 
|---|
 | 855 | Pour tester, tu peux utiliser  la fenetre des options texte ou j'ai ajoute le bouton
 | 
|---|
 | 856 | [GetOption] . Tu peux acceder a cette fenetre a partir de la fenetre des options
 | 
|---|
 | 857 | graphiques <Alt>O , ou directement sur un objet de gestionnaire 2D - par
 | 
|---|
 | 858 | <Alt>T - <Shift>Button-1 permet de selectionner le drawer actif
 | 
|---|
 | 859 | \end{verbatim}
 | 
|---|
 | 860 | 
 | 
|---|
 | 861 | \subsection{ Trace des axes (11 Mars 2004)}
 | 
|---|
 | 862 |     Ajouter la possibilite de specifier l'origine (le point de croisement des axes)
 | 
|---|
 | 863 | lorsque les axes ne sont pas de type 'box' - classes PIAxes et PIElDrawer.
 | 
|---|
 | 864 | 
 | 
|---|
 | 865 | \subsection{ Selection graphique (souris) du drawer actif (11 Mars 2004)}
 | 
|---|
 | 866 | \begin{verbatim}
 | 
|---|
 | 867 | J'ai ajoute la methode PIDrawer::GetDistanceToPoint(double x, double y)
 | 
|---|
 | 868 | // Renvoie une distance au point x,y
 | 
|---|
 | 869 | // 0: au(x) point(s) le(s) plus proche(s) ... 1  au bord xmin/xmax , ymin/ymax
 | 
|---|
 | 870 | // La methode par defaut calcule la distance normalisee au point ((xmin+xmax)/2,
 | 
|---|
 | 871 | (ymin+ymax)/2)
 | 
|---|
 | 872 |   virtual double     PIDrawer::GetDistanceToPoint(double x, double y);
 | 
|---|
 | 873 | 
 | 
|---|
 | 874 | ainsi que ce qu'il faut ds PIBaseWdgGen et ds PIDrawer pour exploiter cette
 | 
|---|
 | 875 | methode + code permettant le test ds PIScDrawWdg.
 | 
|---|
 | 876 | (virtual  void      PIDrawer::WdgCoord2DrwCoord(int x, int y, double& xu ...
 | 
|---|
 | 877 |  virtual int PIBaseWdgGen:;FindNearestDrawerId(int x, int y) ...)
 | 
|---|
 | 878 | Tu as a t'aoccuper de la methode  PIDrawer::GetDistanceToPoint(double x, double y)
 | 
|---|
 | 879 | qui doit etre redefinie si possible pour chaque drawer, afin de fournir une
 | 
|---|
 | 880 | distance raisonnable au point (x,y) en argument.
 | 
|---|
 | 881 | J'ai juste mis une implementation par defaut (ds PIDrawer) et une implementation
 | 
|---|
 | 882 | partielle pour PIElDrawer (qui trace les axes en particulier) - qu'il faut
 | 
|---|
 | 883 | completer.
 | 
|---|
 | 884 | 
 | 
|---|
 | 885 | Comment tester ?
 | 
|---|
 | 886 | J'ai mis ce qu'il faut ds le gestionnaire 2D (PIScDrawWdg) -
 | 
|---|
 | 887 | <Shift>Button-1 choisit le drawer le plus proche (base sur la
 | 
|---|
 | 888 | valeur de retour de  PIDrawer::GetDistanceToPoint(double x, double y)
 | 
|---|
 | 889 | comme drawer actif. Ce drawer est passe en 'highlight' pendant que
 | 
|---|
 | 890 | le bouton est appuye.
 | 
|---|
 | 891 | \end{verbatim}
 | 
|---|
 | 892 | 
 | 
|---|
 | 893 | \subsection{ Manipulation interactive des drawers (3 Juin 2004) }
 | 
|---|
 | 894 | La manipulation interactive des drawers ( l'aide d'un menu) a
 | 
|---|
 | 895 | t finalise pour les PIImage PIScDrawWdg PI3DWdg .
 | 
|---|
 | 896 | 
 | 
|---|
 | 897 | \begin{verbatim}
 | 
|---|
 | 898 |    o <Alt>D affiche le menu avec les differentes option
 | 
|---|
 | 899 |    o Move/Resize: Affichage du rectangle + rectangle milieu
 | 
|---|
 | 900 |    (deplacement) + coin bas-droite (deplacement) - 
 | 
|---|
 | 901 |    clicker ailleurs pour finir
 | 
|---|
 | 902 |    o Mouse Select : Le mouse select des drawers est gere
 | 
|---|
 | 903 |    maintenant par un PIEventHandler (comme pour Move/ReSize)
 | 
|---|
 | 904 |    Drawer actif affiche par le rectangle muni d'un petit coin 
 | 
|---|
 | 905 |    (petit carre + rond dedans, en bas a droite). 
 | 
|---|
 | 906 |    Click souris change eventuellement le drawer actif. 
 | 
|---|
 | 907 |    On termine en clickant ds le petit [carre+rond] 
 | 
|---|
 | 908 | \end{verbatim}
 | 
|---|
 | 909 | 
 | 
|---|
 | 910 | \subsection{ Traceur de bar-graph (classe PIBarGraph) (3 Juin 2004) } 
 | 
|---|
 | 911 | Ajout du traceur de bar-graph (classe {\bf PIBarGraph}) ds module PI/
 | 
|---|
 | 912 | et commande {\tt bargraph}  ds PIext/basexecut.cc .
 | 
|---|
 | 913 | La commande bargraph ne gere pas encore toutes les possibilites
 | 
|---|
 | 914 | de la classe PIBarGraph. \\
 | 
|---|
 | 915 | Exemple d'utilisation:
 | 
|---|
 | 916 | \begin{verbatim}
 | 
|---|
 | 917 | Cmd> bargraph ' ' -10. 15. 22. 8. 33. 7 -4. 
 | 
|---|
 | 918 | Cmd> bargraph 'blue ' -10. 15. 22. 8. 33. 7 -4. 
 | 
|---|
 | 919 | Cmd> bargraph 'blue horizontalbars' -10. 15. 22. 8. 33. 7 -4. 
 | 
|---|
 | 920 | Cmd> bargraph 'blue horizontalbars barvaluelabel ' -10. 15. 22. 8. 33. 7 -4. 
 | 
|---|
 | 921 | Cmd> bargraph 'blue verticalbars nofill barvaluelabel ' -10. 15. 22. 8. 33. 7 -4. 
 | 
|---|
 | 922 | Cmd> bargraph 'font=times,bold,16 blue verticalbars nofill barvaluelabel ' \
 | 
|---|
 | 923 |      -10. 15. 2 2. 8. 33. 7 -4. 
 | 
|---|
 | 924 | Cmd> bargraph 'font=times,bold,16 blue verticalbars fill barvaluelabel packfrac=0.8' \
 | 
|---|
 | 925 |      -10. 15. 22. 8. 33. 7 -4. 
 | 
|---|
 | 926 | \end{verbatim}
 | 
|---|
 | 927 | 
 | 
|---|
 | 928 | \subsection{ Traceur de lignes de texte (classe PITextDrawer)  (3 Juin 2004) } 
 | 
|---|
 | 929 | 
 | 
|---|
 | 930 | Ajout d'une classe de traceur de lignes de texte (classe {\bf PITextDrawer}) et commande 
 | 
|---|
 | 931 | {\tt textdrawe}r ds PIext/basexecut.cc . Mais le traceur (et sa commande) 
 | 
|---|
 | 932 | doivent etre completes. \\
 | 
|---|
 | 933 | Exemple d'utilisation:
 | 
|---|
 | 934 | \begin{verbatim}
 | 
|---|
 | 935 | # On affiche qque chose
 | 
|---|
 | 936 | Cmd> openppf demo.ppf
 | 
|---|
 | 937 | Cmd> disp h1d
 | 
|---|
 | 938 | Cmd> textdrawer 'frame line=solid,2 font=times,bold,16 red inset'  \
 | 
|---|
 | 939 |      ' Christophe ' ' Reza Ansari' ' SOPHYA ' 
 | 
|---|
 | 940 | \end{verbatim}
 | 
|---|
 | 941 | 
 | 
|---|
 | 942 | \subsection{ Gestion de re-scale-ing des  axes en 3D  (3 Juin 2004)  }
 | 
|---|
 | 943 | 
 | 
|---|
 | 944 | Mise en place complete (?) de la gestion de re-scale-ing des  axes en 3D 
 | 
|---|
 | 945 | avec gestion des options graphiques (texte) - Il est possible en particulier d'imposer
 | 
|---|
 | 946 | les limites de la boites 3D.
 | 
|---|
 | 947 | cela a ete une grosse prise de tete de tout un apres-midi.
 | 
|---|
 | 948 | J'ai eu ensuite mal a la tete une partie de la soiree !  \\
 | 
|---|
 | 949 | Exemple d'utilisation:
 | 
|---|
 | 950 | 
 | 
|---|
 | 951 | \begin{verbatim}
 | 
|---|
 | 952 | 
 | 
|---|
 | 953 | # On ouvre le fichier demo.ppf
 | 
|---|
 | 954 | Cmd> openppf demo.ppf
 | 
|---|
 | 955 | Cmd> surf mtx1 'colbr32'
 | 
|---|
 | 956 | Cmd> surf mtx1 'colbr32 noautoscale'
 | 
|---|
 | 957 | Cmd> surf mtx1 'colbr32 lim3dbox=-10,60,-10,60,-3,15 autoscale3dbox'
 | 
|---|
 | 958 | #  Affichage avec superposition
 | 
|---|
 | 959 | Cmd> nt3d nt32 x y z - - - - - 'marker=circle,7 red'
 | 
|---|
 | 960 | Cmd> nt3d nt32 x y z - - - - - 'same marker=cross,5 blue '
 | 
|---|
 | 961 | #  Ou bien : 
 | 
|---|
 | 962 | Cmd> nt3d nt32 x y z - - - - - 'marker=circle,7 red noautoscale'
 | 
|---|
 | 963 | Cmd> nt3d nt32 x y z - - - - - 'same marker=cross,5 blue '
 | 
|---|
 | 964 | 
 | 
|---|
 | 965 | \end{verbatim}
 | 
|---|
 | 966 | \subsection{piapp}
 | 
|---|
 | 967 | \begin{itemize}
 | 
|---|
 | 968 | \item Le multithreading a t mis en oeuvre dans piapp (janvier 2004). 
 | 
|---|
| [2717] | 969 | \item Possibilit d'execution de commandes en multithread (Avril 2005)
 | 
|---|
 | 970 | \item {\bf BUG } a corriger pour {\tt imagvav}: 
 | 
|---|
 | 971 | La destruction de l'objet et/ou widget pascorrectement geres - 
 | 
|---|
 | 972 | provoque des plantages lors de la sortie de l'application.
 | 
|---|
 | 973 | 
 | 
|---|
| [2632] | 974 | \item Extrait de {\tt cvs log pistdimgapp.cc } : 
 | 
|---|
 | 975 | \begin{verbatim}
 | 
|---|
| [2717] | 976 | revision 1.77
 | 
|---|
 | 977 | date: 2005/04/27 11:55:00;  author: ansari;  state: Exp;  lines: +26 -10
 | 
|---|
 | 978 | 1/ Prise en charge de DataTable et SwPPFDataTable pour piapp (NObjMgrAdapter) :
 | 
|---|
 | 979 | nomhistadapter.cc et piiinit.cc
 | 
|---|
 | 980 | 2/ Lecture de tous les objets ds un fichier PPF par NamedObjMgr::ReadAll() pour
 | 
|---|
 | 981 | fichier PPF sans nametag.
 | 
|---|
 | 982 | 3/ Ajout bloc try/catch ds PIStdImgApp::Run() (boucle d'evenements)
 | 
|---|
 | 983 |                                            Reza , 27 Avril 2005
 | 
|---|
 | 984 | ----------------------------
 | 
|---|
 | 985 | revision 1.76
 | 
|---|
 | 986 | date: 2005/04/19 09:13:49;  author: ansari;  state: Exp;  lines: +3 -1
 | 
|---|
 | 987 | Ajout de l option nodisp ds les affichages des NamedObjMgr, prise en compte de 
 | 
|---|
 | 988 | <Cntrl C> (Msg_Cancel) pour arreter l'execution de l'interpreteur ds PIStdImgApp 
 | 
|---|
 | 989 | et remplacement commande breakexe par stop ds PIACmd - Reza 19/4/2005
 | 
|---|
 | 990 | ----------------------------
 | 
|---|
 | 991 | revision 1.75
 | 
|---|
 | 992 | date: 2005/04/19 06:56:52;  author: ansari;  state: Exp;  lines: +5 -4
 | 
|---|
 | 993 | Remis en marche la possibilite d'execution d'un .pic au lancement de piapp - 
 | 
|---|
 | 994 | Reza 19/4/2005
 | 
|---|
 | 995 | ----------------------------
 | 
|---|
 | 996 | revision 1.74
 | 
|---|
 | 997 | date: 2005/02/18 14:09:47;  author: ansari;  state: Exp;  lines: +62 -37
 | 
|---|
 | 998 | Modifications pour l'utilisation viewer PIImageNavigator (ajout commande imagnav
 | 
|---|
 | 999 | ) - Reza 18 Fev 2005
 | 
|---|
 | 1000 | ----------------------------
 | 
|---|
 | 1001 | revision 1.73
 | 
|---|
 | 1002 | date: 2004/11/19 17:41:07;  author: ansari;  state: Exp;  lines: +26 -0
 | 
|---|
 | 1003 | Ajout commandes addoval addfoval pour trace d'ellipse - Reza 19/11/2004
 | 
|---|
 | 1004 | ----------------------------
 | 
|---|
| [2632] | 1005 | revision 1.71
 | 
|---|
 | 1006 | date: 2004/09/07 07:10:18;  author: ansari;  state: Exp;  lines: +35 -0
 | 
|---|
 | 1007 | Ajout bloc try/catch ds piacmd.cc (thread execution commandes) et ds pistdimgapp.cc (
 | 
|---|
 | 1008 | methode process, thread boucle d'evts) - Reza 07/09/2004
 | 
|---|
 | 1009 | ----------------------------
 | 
|---|
 | 1010 | revision 1.70
 | 
|---|
 | 1011 | date: 2004/01/06 18:44:56;  author: ansari;  state: Exp;  lines: +11 -1
 | 
|---|
 | 1012 |  Suite debugging gestion lock entre threads ds piapp - A l'air de
 | 
|---|
 | 1013 | marcher sur OSF1 et Linux ...   Reza 06/01/2004
 | 
|---|
 | 1014 | ----------------------------
 | 
|---|
 | 1015 | revision 1.69
 | 
|---|
 | 1016 | date: 2004/01/06 17:05:25;  author: ansari;  state: Exp;  lines: +33 -7
 | 
|---|
 | 1017 | Suite debug piapp multithread : on ne peut pas utiliser ZSync() ds un if (destructeur
 | 
|---|
 | 1018 |  appele de suite) - Reza 06/01/2004
 | 
|---|
 | 1019 | ----------------------------
 | 
|---|
 | 1020 | revision 1.68
 | 
|---|
 | 1021 | date: 2004/01/04 19:02:43;  author: ansari;  state: Exp;  lines: +43 -13
 | 
|---|
 | 1022 | Suite des modifs pour piapp multi-threads
 | 
|---|
 | 1023 | 1) Ajout Mutex de synchronisation ds ls classe NamedObjMgr
 | 
|---|
 | 1024 | 2) Suite controle de gestion d'appel aux methodes de PIStdImgApp depuis
 | 
|---|
 | 1025 | la classe elle-meme, a travers le NamedObjMgr
 | 
|---|
 | 1026 | 3) Modification de la boucle d'evenements, avec un thread de reveil
 | 
|---|
 | 1027 | periodique
 | 
|---|
 | 1028 |                                     Reza, 4 Janvier 2004
 | 
|---|
 | 1029 | \end{verbatim}
 | 
|---|
 | 1030 | \item Extrait de {\tt cvs log pistdimgapp.cc } : 
 | 
|---|
 | 1031 | \begin{verbatim}
 | 
|---|
 | 1032 | ----------------------------
 | 
|---|
 | 1033 | revision 1.62
 | 
|---|
 | 1034 | date: 2003/11/27 10:51:58;  author: ansari;  state: Exp;  lines: +45 -20
 | 
|---|
 | 1035 | Suite modification/adaptations a la classe PIACmd qui herite maintenent de SOPHYA::Co
 | 
|---|
 | 1036 | mmander - Reza 27/11/2003
 | 
|---|
 | 1037 | ----------------------------
 | 
|---|
 | 1038 | revision 1.61
 | 
|---|
 | 1039 | date: 2003/11/26 23:01:55;  author: ansari;  state: Exp;  lines: +20 -1755
 | 
|---|
 | 1040 | Modification du code de PIACmd : La classe PIACmd herite maintenant de la classe Comm
 | 
|---|
 | 1041 | ander (de SysTools) - Reza 26/11/2003
 | 
|---|
 | 1042 | ----------------------------
 | 
|---|
 | 1043 | revision 1.60
 | 
|---|
 | 1044 | date: 2003/07/21 21:13:10;  author: cmv;  state: Exp;  lines: +3 -3
 | 
|---|
 | 1045 | - introduction notion de numero de ligne dans expression ntuple
 | 
|---|
 | 1046 |   modif prototype PlotExprFunc NTLoopExprFunc (add _nl _nstart _nend)
 | 
|---|
 | 1047 |   modif int_4 -> int_8_exprf (long long) pour _nl (DecodeLoopParameters,
 | 
|---|
 | 1048 |      PrepareNTExpressionCFile, LinkExprFunc,...)
 | 
|---|
 | 1049 | - doc pour _nl _nstart _nend et arragement repartition RegisterHelp/RegisterCommand
 | 
|---|
 | 1050 |              (rz + cmv 21/7/2003)
 | 
|---|
 | 1051 | ----------------------------
 | 
|---|
 | 1052 | \end{verbatim}
 | 
|---|
 | 1053 | \end{itemize}
 | 
|---|
 | 1054 | 
 | 
|---|
 | 1055 | \section{Documentation (Manual/) } 
 | 
|---|
 | 1056 | Documentation des classes de SysTools. \\
 | 
|---|
 | 1057 | Extrait message du 12 Aout 2004 : \\
 | 
|---|
 | 1058 | \begin{verbatim} 
 | 
|---|
 | 1059 | ---> Au sujet de la doc (Manual/)
 | 
|---|
 | 1060 |        J'ai installe doxygen sur le Mac, version 1.3.8 -
 | 
|---|
 | 1061 |        Il faut updater le fichier de config de depart (dox_sophya.conf)
 | 
|---|
 | 1062 |        Pour ma part, j'ai du modifier mkmf (en version privee) -
 | 
|---|
 | 1063 |       En effet, il n'y avait pas le program doxysearch - Je ne sais pas si c'est general
 | 
|---|
 | 1064 |       ou specifique Mac.
 | 
|---|
 | 1065 | 
 | 
|---|
 | 1066 |       J'ai aussi modifie certaines options de doxygen (en version privee)
 | 
|---|
 | 1067 |      EXTRACT_LOCAL_CLASSES  --> NO   (au lieu de YES)
 | 
|---|
 | 1068 |      DETAILS_AT_TOP  ---> YES     (au lieu de No)
 | 
|---|
 | 1069 |      SORT_MEMBER_DOCS  ---> NO    (au lieu de YES)
 | 
|---|
 | 1070 | 
 | 
|---|
 | 1071 |       Si on es d'accord, on peut modifier ces options ds le fichier dox_sophya.conf et
 | 
|---|
 | 1072 |       utiliser la fonction update de doxygen (doxygen -u)
 | 
|---|
 | 1073 | \end{verbatim}
 | 
|---|
 | 1074 | 
 | 
|---|
 | 1075 | \section{Plan de modifs pour SOPHYA V 2.0 PI/piapp V 4.0 (Septembre 2003) }
 | 
|---|
 | 1076 | \subsection{Gestion du code (Mgr/ ) }
 | 
|---|
 | 1077 | \begin{verbatim}
 | 
|---|
 | 1078 | 
 | 
|---|
 | 1079 |  o Chemins/variables d'environnement
 | 
|---|
 | 1080 |    - Remplacer DPCDEVREP DPCBASEREP par SOPHYADEVREP et SOPHYABASEREP
 | 
|---|
 | 1081 |    - Remplacer EROSCXX par SOPHYACXX (?)
 | 
|---|
 | 1082 |  o Simplifier/rationaliser les makefiles
 | 
|---|
 | 1083 |    - Mettre les flags de compils pour chaque compilo-systeme dans un fichier au lieu
 | 
|---|
 | 1084 |      d'avoir tout Makefile.h
 | 
|---|
 | 1085 |      Exemple fichier Mgr/linux_g++.flags
 | 
|---|
 | 1086 |       CPPFLAGS = ...
 | 
|---|
 | 1087 |       CXXFLAGS = ...
 | 
|---|
 | 1088 |       LIBS = ...
 | 
|---|
 | 1089 | 
 | 
|---|
 | 1090 | o Mettre un script pour chercher les lib externes (c-fitsio, FFTW, ...) et creer
 | 
|---|
 | 1091 |   eventuellement l'arborescence ExtLibs
 | 
|---|
 | 1092 | 
 | 
|---|
 | 1093 | o Inclure la definition des flags influant sur le code (comme 
 | 
|---|
 | 1094 |    -DOSF1/Linux/Darwin/IRIX64
 | 
|---|
 | 1095 |    SO_BOUNDCHECKING a la fin du fichier machdefs.h que l'on fabriquera a 
 | 
|---|
 | 1096 |    partir de du machdef_mkmf.h )
 | 
|---|
 | 1097 |    PB-> ce fichier deviendra alors dependant du systeme et de l'installation !
 | 
|---|
 | 1098 |    Faut-il deplacer alors Include/ sous uname-$EROSCXX (Linux-g++)
 | 
|---|
 | 1099 |     ou carrement considerer que la separation pour differents systemes doit se faire au
 | 
|---|
 | 1100 |   niveau de SOPHYADEV/BASE/REP ?
 | 
|---|
 | 1101 | 
 | 
|---|
 | 1102 | o Abandonner (?) les regles de compilation par defaut
 | 
|---|
 | 1103 |   Inclure dans les Makefile la ligne de commande :
 | 
|---|
 | 1104 |   $(OBJ)toto.o : toto.cc toto.h titi.h ...
 | 
|---|
 | 1105 |         $(COMPILECXX) -$(CPPFLAGS) $(CXXFLAGS) -c -o $(OBJ)toto.o toto.cc
 | 
|---|
 | 1106 | 
 | 
|---|
 | 1107 | o Garder les Makefile simple (eviter trop de tests et syntaxe complique)
 | 
|---|
 | 1108 | 
 | 
|---|
 | 1109 | \end{verbatim}
 | 
|---|
 | 1110 | 
 | 
|---|
 | 1111 | \subsection{Code/Librairie SOPHYA $\rightarrow$ V 2.0)}
 | 
|---|
 | 1112 | \begin{verbatim}
 | 
|---|
 | 1113 | 
 | 
|---|
 | 1114 | o Fichiers PPersist (BaseTools) :
 | 
|---|
 | 1115 |   - Ajouter la possibilite d'ecrire des complex(r_4> complex<r_8>
 | 
|---|
 | 1116 |     (actuellement c'est ecrit sous forme de 2*r_4 ou 2*r_8)
 | 
|---|
 | 1117 |   - Ajouter des tag de positionnement qui pourrait servir au cas
 | 
|---|
 | 1118 |     ou on utiliserait le fichier PPF comme fichier de swap
 | 
|---|
 | 1119 |     Ces tags ne peuvent pas etre les memes que les name-tag
 | 
|---|
 | 1120 |     existant actuellement.
 | 
|---|
 | 1121 |     Une utilisation annexe de ces tags peut etre alors un moyen
 | 
|---|
 | 1122 |     de verifier que le fichier n'est pas corrompu
 | 
|---|
 | 1123 |     Ce tag se presente alors sous forme de
 | 
|---|
 | 1124 |     <tag (1 byte)><FilePosition (8 byte, long int)>
 | 
|---|
 | 1125 |     On peut alors parcourir le fichier et verifier la coherence de
 | 
|---|
 | 1126 |     ces tags.
 | 
|---|
 | 1127 |   - Il faut aussi ajouter au niveau de POutPersist et PInPersist
 | 
|---|
 | 1128 |     les services pour ecrire et lire une collection de tag de
 | 
|---|
 | 1129 |     positionnement, afin qu'un objet puisse utiliser une liste de
 | 
|---|
 | 1130 |     tag pour se positionner
 | 
|---|
 | 1131 | 
 | 
|---|
 | 1132 | o BaseTools/ Voir autres remarques ds fichier Manual/sophya_afaire.txt
 | 
|---|
 | 1133 |   concernant en particulier les NDataBlock<T> DataBlock<T> ...
 | 
|---|
 | 1134 | 
 | 
|---|
 | 1135 | o Les tableaux : TArray/
 | 
|---|
 | 1136 |   - Ajouter une classe de base abstraite GenericMatrix<T>
 | 
|---|
 | 1137 |     avec methode d'acces aux elements, nb de lignes, nb de colonnes,
 | 
|---|
 | 1138 |     ...
 | 
|---|
 | 1139 |   - Introduire les TinyMatrix  (TinyMatrix<T, int L, int C>)
 | 
|---|
 | 1140 |     avec passage de/vers TMatrix<T> (et TinyVector<T, int N>) ?
 | 
|---|
 | 1141 | 
 | 
|---|
 | 1142 |   - Introduire des matrices creuses simples SpareMatrix<T>
 | 
|---|
 | 1143 | 
 | 
|---|
 | 1144 |   - Introduire les DiagonalMatrix<T>
 | 
|---|
 | 1145 | 
 | 
|---|
 | 1146 |   Remarque: Les TMatrix TinyMatrix et  SparseMatrix heritent de GenericMatrix
 | 
|---|
 | 1147 | 
 | 
|---|
 | 1148 | o HiStats
 | 
|---|
 | 1149 |   - Faire une classe SuperNTuple (!), facile a utiliser, sachant swaper sur les
 | 
|---|
 | 1150 |     PPF, avec des champs de differents type
 | 
|---|
 | 1151 | 
 | 
|---|
 | 1152 | o IFFTW/
 | 
|---|
 | 1153 |   - Passage a FFTW 3.x  ?
 | 
|---|
 | 1154 | 
 | 
|---|
 | 1155 | o Voir autres remarques pour l'ensemble des modules ds Manual/sophya_afaire.txt
 | 
|---|
 | 1156 | \end{verbatim}
 | 
|---|
 | 1157 | 
 | 
|---|
 | 1158 | \subsection{Code/Librairie PI  ($\rightarrow$ V 4.0)}
 | 
|---|
 | 1159 | \begin{verbatim}
 | 
|---|
 | 1160 | 
 | 
|---|
 | 1161 | o Menu contextuel pour les Drawers
 | 
|---|
 | 1162 |   - Ajouter a PIImage, PIScrDrawWdg(2D), PIDraw3DWdg(3D) un menu obtenu
 | 
|---|
 | 1163 |     sur <Shift><Bouton-1> par exemple, avec la liste de tous les Drawers
 | 
|---|
 | 1164 |     permettant d'afficher la fenetre des options graphiques, ou le fenetre
 | 
|---|
 | 1165 |     des options ou la fenetre des options texte, activer deplacement/resize
 | 
|---|
 | 1166 |     des drawers, suppression (delete) ou detach des drawers, et en fonction
 | 
|---|
 | 1167 |     du widgets, la fenetre des axes ou de controle d'image
 | 
|---|
 | 1168 | 
 | 
|---|
 | 1169 | o Mettre l'option auto-scale (rapport entre axes X,Y,Z) pour les Drawers3D
 | 
|---|
 | 1170 |     verifer/debugger la definition de la boite 3D au niveau des Drawers3D
 | 
|---|
 | 1171 | 
 | 
|---|
 | 1172 | o Traceur d'histos, NTuples, ...
 | 
|---|
 | 1173 |   Remplacer le trace des lignes par morceau fait par appel multiples
 | 
|---|
 | 1174 |   a DrawLine a un seul appel a DrawPolygon (si les lignes sont connectes
 | 
|---|
 | 1175 |   bien sur) --> Ca ameliore sensiblement l'aspect pour le trace en pointille
 | 
|---|
 | 1176 | 
 | 
|---|
 | 1177 | o Ajouter un traceur de Bar-chart 2D OU ApplePie (facile !)
 | 
|---|
 | 1178 |   On donne une serie de nombres, serie de couleur, + serie de strings
 | 
|---|
 | 1179 |   et on trace alors une sorte d'histo, avec des barres (rectangles) espaces
 | 
|---|
 | 1180 |    Ou bien on trace un cercle divise en zones
 | 
|---|
 | 1181 | 
 | 
|---|
 | 1182 | o Ajouter un traceur de Lego-Plot
 | 
|---|
 | 1183 | 
 | 
|---|
 | 1184 | o PIImageWindow (Une fenetre avec une PIImage, un Zoom et une vue globale)
 | 
|---|
 | 1185 |   Assemblage
 | 
|---|
 | 1186 | 
 | 
|---|
 | 1187 | o (?) Une fonction pour faire facilement une fenetre d'alerte ou d'info (?)
 | 
|---|
 | 1188 | 
 | 
|---|
 | 1189 | \end{verbatim}
 | 
|---|
 | 1190 | 
 | 
|---|
 | 1191 | \subsection{(s)piapp ($\rightarrow$ V 4.0)}
 | 
|---|
 | 1192 | \begin{verbatim}
 | 
|---|
 | 1193 | 
 | 
|---|
 | 1194 | o Verifier l'interpreteur et introduire le type de variable vecteur
 | 
|---|
 | 1195 |   qui peut etre detecte par exemple lors de l'initialisation par set
 | 
|---|
 | 1196 |   set a 'Bonjour CMV' # -> variable scalaire
 | 
|---|
 | 1197 |   set va [ 12 14 hello ... ] # variable de type vecteur $va[]
 | 
|---|
 | 1198 | 
 | 
|---|
 | 1199 | o Voir comment on pourrait "joindre" deux objets ayant l'interface NTupleInterface
 | 
|---|
 | 1200 |   pour pouvoir plotter des objets, l'un vs l'autre
 | 
|---|
 | 1201 | 
 | 
|---|
 | 1202 | o Separer la classe PIACmd en une classe de base (CShellLikeInterpreter)
 | 
|---|
 | 1203 |   (a mettre ds SysTools) et la classe PIACmd  a laisser ds PIext
 | 
|---|
 | 1204 | 
 | 
|---|
 | 1205 | o (???) Introduire quelque chose du style
 | 
|---|
 | 1206 |   AddDialogue("Cmd", "dialogue-description)
 | 
|---|
 | 1207 |   qui pourrait fabriquer automatiquement une fenetre avec des champs a remplir
 | 
|---|
 | 1208 |   pour les commandes usuelles (???)
 | 
|---|
 | 1209 | 
 | 
|---|
 | 1210 | o Voir les autres commentaires ds Manual/spiapp_afaire.txt
 | 
|---|
 | 1211 | 
 | 
|---|
 | 1212 | \end{verbatim}
 | 
|---|
 | 1213 | 
 | 
|---|
 | 1214 | 
 | 
|---|
 | 1215 | \end{document}
 | 
|---|