source: Sophya/trunk/SophyaLib/Manual/modifs.tex@ 2716

Last change on this file since 2716 was 2716, checked in by ansari, 20 years ago

Ajout liste modifs SegDataBlock, DataTable ... - Reza 12/5/2005

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