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

Last change on this file since 3085 was 3061, checked in by cmv, 19 years ago

un oeu de texte cmv 14/8/2006

File size: 57.3 KB
RevLine 
[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 ) } \\
[2829]33{\large Janvier 2003 - Novembre 2005 } \\[25mm]
[2632]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 \\
[2829]44V = 1.9 & \hspace{10mm} & Juin 2005 - SANS tag CVS \\
[2911]45V = 1.9xx & \hspace{10mm} & en cours (09/2005 ...) \\
[2829]46
[2632]47\end{tabular}
48}
49\end{center}
50\end{titlepage}
51
52\newpage
53\tableofcontents
54\newpage
55
[2829]56\section{BuildMgr}
[2905]57\begin{itemize}
[2971]58\item[\rond] Juin 2006 : Ajout targets cleanobj prgall tests prgutil
59\item[\rond] Avril 2006 : suppression de libextsophya.so pour fabriquer libPI.so
60(PIext rendu independant de FitsIOServer)
61\item[\rond] Dec 2005/Jan 2006 : Portage sur AIX - xlC
[2905]62\item[\rond] Dec 2005 : check Compil avec icc , compil avec gcc-4
63\item[\rond] Avril-Mai 2005 : Introduction de la nouvelle version de
[2829]64scripts de gestion du code - avec un script principal configure. \\
65Variable d'environnement {\bf SOPHYABASE } - \\
66Pour les makefiles, l'ensemble des dŽfinitions se trouve dans : \\
67SOPHYABASE/include/sophyamake.ic \\
[2905]68\end{itemize}
[2829]69\section{BaseTools}
70\subsection{Modifs}
[2632]71
[2829]72\begin{itemize}
[3050]73\item[\rond] Jun/Jul 2006 : Amelioration gestion initialiseur modules \\
74- Ajout methodes statique {\tt RegisterModule(const char* name, double version)
75ListModules(ostream\& os) } a la classe de base SophyaInitiator. \\
76- Enregistrement des modules avec leur nom et un numero de version par module,
77independante du numero de version SOPHYA \\
78- le programme scanppf peut donner la liste des modules enregistrees et leur numero
79de version.
[2835]80\item[\rond] Octobre-Novembre 2005 : \\
[2829]811/ Correction bug TimeStamp::ToDays() + petites amelioration \\
822/ Prise en compte du type TimeStamp dans MuTyV (sous forme de double en interne) \\
833/ Adaptation DVList a modifs MuTyV (typ TimeStamp) et R/W PPersist \\
[2911]844/ Gestion format YYYY-MM-DDThh:mm:ss par TimeStamp \\
[2835]855/ Gestionnaire PPersist pour TimeStamp
[2829]86%
87\item[\rond] Septembre 2004 - {\bf Namespace SOPHYA } \\
[2632]88Suppression de {\tt using namespace SOPHYA ; } ds machdefs.h -
89Ajout fichier {\tt \#include "sopnamsp.h"} dans les .cc de SOPHYA,
90ainsi que lors de la gŽnŽration automatique du code (runxx, c++exec)
[2829]91\end{itemize}
[2632]92
93\subsection{PPF}
94\begin{itemize}
95\item[\rond] Novembre 2003 (21/11/2003) - Ajout rawstream.h .cc \\
96Classes RawInOutStream , RawInFileStream , RawOutFileStream
97\item[\rond] DŽcembre 2003 - Ajout ppfbinstream.h .cc \\
98Classes PPFBinaryIOStream , PPFBinaryInputStream , PPFBinaryOutputStream
[2716]99\item[\rond] DŽcembre 2003 (9/12/2003) Fin de l'ensemble des modifs pour les
[2632]100PPF V3 \\
101- Ecriture nombre complexes r4, r8 avec tag spŽcifique. \\
102Tag de positionnement sous forme de \\
103\centerline{\tt <tag (1 byte)><FilePosition (8 byte, long int)> } \\
104- Ecriture PosTagTable \\
105- Ecriture Statistiques en fin de fichier \\
106- Voir BaseTools/ppfbinstream.h: \\
107\centerline{\tt GotoPositionTag(int\_8 pos) , }
108\centerline{\tt GetPosTagTable(...) }
109\centerline{\tt int\_8 WritePositionTag() PutPosTagTable(...) }
110- Ajout programme de test Tests/ppftswap.cc
[2716]111\item[\rond] Avril 2005 - Ajout de wrapper de lecture/ecriture PPF pour les vecteurs de
[2717]112la librairie standard (classe PPFWrapperSTLVector$<$T$>$ ) fichier ppfwrapstlv.h
[2716]113\item[\rond] Ajout de la classes utilitaire PPF\_TPointer\_IO$<$T$>$
114(fichiers ppftpointer.h .cc)
115\item[\rond] Amelioration de l'impression ds AnalyseTags (ppfbinstream.cc)
116\item[\rond] scanppf.cc revision 1.8 (2005/04/05)
117modification programme scanppf: ajout option -lh -lho pour lister les classes PP
118ersist handler
119
[2632]120\end{itemize}
121
[2716]122
[2717]123\subsection{Nouvelles classes}
124\begin{itemize}
125\item[\rond] Ajout de la classe {\bf TimeStamp} pour la manipulation de date et heure -
126calcul de duree. - Ajout du prog. test Tests/ttimestamp.cc (Mars 2003)
127\item[\rond] { \bf Segmented Data Block :} \\
[2716]128Mars-Avril 2005: Introduction des classes similaires aux NDataBlock, mais permettant
129de gerer des blocs de donnees segementes, pour tout type de donnees, de structures
[2717]130et de classes (template pour tout type T).
131\begin{enumerate}
132\item Ajout de la classe {\tt SegDataBlock<T>} (et l'interface { \tt SegDBInterface<T>} )
[2716]133pour la gestion de blocs de donnees segmentes (segdatablock.h) et son
[2717]134gestionnaire PPF {\tt FIO\_SegDataBlock<T>} (fichier fiosegdb.h )
135\item Ajout de la classe {\tt SwSegDataBlock<T>} (Data bloc segmente avec gestion
136de swap) et la classe swapper PPF {\tt PPFDataSwapper<T>} (fichiers
[2716]137ppfswapper.h et swsegdb.h)
[2717]138\item Ajout programme de test Tests/tstsegdb.cc
139\end{enumerate}
140\end{itemize}
[2716]141
142
[2632]143\section{TArray}
[2942]144Il s'agit essentiellement des ameliorations en terme de performances et
145de correction d'erreur.
146
[2632]147\begin{itemize}
[2942]148\item[\rond] Avril 2006 \\
149- Instanciation explicite des tableaux , matrices et vecteurs en types \\
150{\tt int\_2 uint\_2 uint\_4 uint\_8 } \\
151- Optimisation du code (ds tarray.cc) des operations sur tableaux \\
152{\tt (TArray::Add/Mul/Sub/DivCst TArray::Add/Mul/Sub/DivElt ) } \\
153a travers le choix entre Share() ou Allocation si le tableau resultat est non alloue.
154D'apres les tests de performances (TCPU), {\bf (tjet , spar)}, il ne semble pas y
155avoir de cas de pertes, et on a en general des gains de l'ordre de 20\% dans la plupart
156des cas de tests, et un ou deux cas avec des gains de 50-80\%. \\
157- Declaration de l'operateur / entre tableaux (DivElt) et l'operateur \& \& pour la
158multiplication element par element (MulElt)
[2919]159\item[\rond] Janvier, FŽvrier 2006 \\
160- AmŽlioration des fonctionalitŽs de la classe {\bf Range} et des mŽthodes d'extraction
161de sous-tableaux (+ correction bugs et amŽlioration documentation) \\
[2911]162- Ajout de la methode BaseArray::ValueAtPositionDB() pour corriger un gros bug au
163niveau de la conversion de type (r\_4 r\_8 ...) des tableaux \\
164- Compil avec g++ 4 : ajouts fichiers declarations privees tmatrix\_tsnl.h tvector\_tsnl.h
165
[2971]166\item[\rond] Juillet 2004 \\
167- Optimisation de la multiplication matricielle (CMV) - Extrait du
[2716]168message (from CMV) du 30 Juillet 2004: \\
[2632]169\begin{verbatim}
170- on definit un flag d'optimisation
171 Contrairement a ce qu'on avait dit, je n'ai pas ajoute
172 un argument a Multiply car on ne peut pas jouer
173 avec qiand on utilise l'operateur * surcharge.
174 Or au vu des performance il'ma parut interessant que l'utilisateur
175 meme lambda puisse choisir le niveau d'optimisation
176 --> donc j'ai ajoute une methode statis dans BaseArray::
177 void BaseArray::SetMatProdOpt(uint_2);
178 uint_2 BaseArray::GetMatProdOpt();
179
180- Je n'ai refait les test de rapidite que sur OSF:
181
1821./ pour les matrices 1000x1000 (grosses)
183 on arrive effectivement au meme temps pour les 4 cas
184 si on copie dans le cas lent (FxC)
185 ---EndMultiply FxC CPUTime: Total= 93.1296 (Partial= 69.3806) Sec.
186 devient
187 ---EndMultiply FxC CPUTime: Total= 34.9653 (Partial= 11.1829) Sec.
188 exactement comme les copains:
189 La copie prend de la place mais ne prend absolument
190 pas de temps pour les grosses matrices
191
1922./ pour les matrices 10x10 (1000000 multiplications par cas)
193 on a bien ce que l'on attend a savoir que
194 la copie faites 100000 fois finie par nous faire perdre du temps
195 ---EndMultiply FxC CPUTime: Total= 37.4152 (Partial= 12.4662) Sec.
196 devient
197 ---EndMultiply FxC CPUTime: Total= 53.9978 (Partial= 28.8322) Sec.
198 dans ce cas on perd un gros facteur 2 a cause de la copie
199 mais rien de surprenant la dedans.
200
201-----------------------------------------------------------------------
202- ensuite j'ai implemente une prise de decision au niveau de
203l'optimisation pour les petites matrices:
204le test est simple mais me semble OK:
205je calcule sza taille du NDataBlock de A
206 szb B
207si ((sza+szb)*sizeof(T) < 100000 ) pas d'optimisation
208IDEE: on pifometre que raisonnablement il y a 100 koctets
209 de disponible pour les matrices A et B dans le cache processeur
210 et que dans ce cas elles sont copiees toutes les 2 dans le cache
211 par l'optimiseur du compilo qui est tres malin et surtout qui
212 veux absolument nous faire plaisir......
213
214-----------------------------------------------------------------
215===> Les resultats sont dans le fichier toto.calc en attached
216.. En tete tu as l'explication des flags d'optimisation
217...Avec les 2 sections:
218 GROSSE MATRICE
219 et
220 PETITE MATRICE
221\end{verbatim}
222
[2971]223\item[\rond] Juillet 2004 : Optimisation operations diverses, en particulier \\
[2632]2241) Remplacement des methodes Add/Sub/Mul/DivElt(a) par
225 Add/Sub/Mul/DivElt(TArray a, TArray res) \\
2262) Operateurs += -= A+B A-B TArray et TMatrix/TVecteur modifies en consequence
[2911]227\item[\rond] Extrait de {\tt cvs log tarray.cc }
[2632]228{\small \begin{verbatim}
229----------------------------
230revision 1.38
231date: 2004/07/30 13:31:39; author: ansari; state: Exp; lines: +28 -24
232Diverses petites optimisations ds les methodes operations/affectations de TArray - Reza 30 Juillet 2004
233----------------------------
234----------------------------
235revision 1.36
236date: 2004/07/27 11:44:23; author: ansari; state: Exp; lines: +4 -1
237Corrections bug apres modifs methods Add/Sub/Mul/DivCst(x,res) - Reza 27 Juillet 2004
238----------------------------
239revision 1.35
240date: 2004/07/26 17:30:40; author: ansari; state: Exp; lines: +187 -108
241Remplacement methodes Add/Mul/Sub/Div(T x) par AddCst/MulCst/SubCst/DivCst(T x, TArray<T> res) ds TArray - Reza 26 Juillet 2004
242----------------------------
243\end{verbatim} }
244
[2911]245\item[\rond] Extrait de {\tt cvs log tarray.cc }
[2632]246{\small \begin{verbatim}
247----------------------------
248revision 1.27
249date: 2004/07/30 10:24:12; author: cmv; state: Exp; lines: +97 -32
250- Intro decision auto d'optimisation produit de matrices
251- Possibilite a l'utilisateur pour choisir l'optimisation
252- cas FxC optimise par copie
253 cmv 30/07/04
254----------------------------
255revision 1.26
256date: 2004/07/29 12:31:16; author: ansari; state: Exp; lines: +7 -5
2571/ Remplacement des methodes Add/Sub/Mul/DivElt(a) par
258 Add/Sub/Mul/DivElt(TArray a, TArray res)
2592/ Operateurs += -= A+B A-B TArray et TMatrix/TVecteur modifies en consequence
2603/ Ajout methode TArray::ScalarProduct()
2614/ Methode TArray::SetT renomme en SetCst() SetT garde en alias
2625/ Ajout parametre bool fzero (mise a zero) ajoute ds constructeur et
263 ReSize() de TMatrix et TVecteur.
264 Reza 29/07/2004
265----------------------------
266revision 1.25
267date: 2004/07/29 08:40:49; author: cmv; state: Exp; lines: +148 -1
268Optimisation produit de matrice a la sauce cmv 29/07/04
269----------------------------
270\end{verbatim} }
271
272\end{itemize}
273
274\section{HiStats}
[3061]275\subsection{Classe Histo,HProf,HistoErr,Histo2D }
276\noindent
277- Aout 2006 : refonte profonde des allocations memoire et delete de
278 Histo,HProf,HistoErr,Histo2D pour faciliter la gestion des IO FITS. \\
279- Sept 2004 : Ajout classe HistoErr.
280C'est un Histo qui garde le nombre d'entr\'ees dans chaque bin) \\
[2632]281
[2716]282\subsection{NTuple}
283la classe NTuple peut maintenant avoir des colonnes float ou double.
284Il y a maintenant deux methodes Fill(r\_4 *) et Fill(r\_8 *)
285Les noms ne sont plus limites a 8 caracteres.
286
287
288\subsection{ Les DataTable (SuperNTuple) }
289
[2835]290{\bf Octobre-Novembre 2005 } \\
291\begin{itemize}
[2854]292\item[\rond] Ajout classe {\bf DataTableRow} pour manipulation d'une ligne de la table.
293Ajout/maj methode BaseDataTable::EmptyRow() AddRow() GetRow()
[2835]294\item[\rond] Gestion des types {\tt complex<r\_4> , complex<r\_8> , TimeStamp } par
295BaseDataTable, DataTable et SwPPFDataTable
296\item[\rond] Codage methode Print() (Dump ascii) et NTFrAscii (decodage fichier
297text) dans BaseDataTable.
298\item[\rond] Codage mŽthode BaseDataTable::GetColumnD() pour recuperer
299une colonne de la table en {\tt TVector<r\_8>} - NON TESTE
300\end{itemize}
301
[2632]302\begin{verbatim}
[2716]303BaseDataTable
304 -------- DataTable
305 -------- SwPPFDataTable
306\end{verbatim}
[2717]307
308\noindent {\bf BaseDataTable} : Classe de base, avec qques methodes virtuelles
[2716]309pures, implementent la presque totalite des fonctionalites, en particulier
310celles de l'interface NTupleInterface.
[2632]311
[2717]312\noindent {\bf DataTable} : Implementation concrete de BaseDataTable avec donnees en
313memoire \\
314(utilise SegDataBlock$<$T$>$ pour stocker les colonnes)
[2632]315
[2717]316\noindent {\bf SwPPFDataTable} : Implementation concrete de BaseDataTable avec donnees
317en swap sur stream PPF (POutPersist)- \\
318Utilise (SwSegDataBlock$<$T$>$ avec
319un data-swapper PPF (classe PPFDataSwapper$<$T$>$ )
[2632]320
[2716]321DataTable et SwPPFDataTable respecte +/- les conventions SOPHYA ,
322constructeur de copie avec partage ou copie de donnees, operateur =
323Datatable : partage et copie , = : fait une copie
324SwPPFDataTable : C'est toujours partage (presque par definition)
325Autre point, compte tenu de la structure des streams PPF ,
326les SwPPFDataTable fonctionne en ecriture OU en lecture, mais
327pas les deux a la fois.
[2632]328
[2716]329Classe de gestion de persistence commune : \\
[2717]330{\bf ObjFileIO$<$BaseDataTable$>$ }
[2632]331
[2716]332Lit et ecrit les DataTable et SwPPFDataTable
333Actuellement, on ne peut les relires que dans le meme type,
334cad on ne peut relire avec un SwPPFDataTable un objet
335ecrit comme DataTable - mais cette possibilite pourra
336peut-etre codee ulterieurement (d'ou l'interet en particulier
[2717]337d'un gestionnaire commun ObjFileIO$<$BaseDataTable$>$
[2632]338
[2716]339(les operateurs habituel $<<$ et $>>$ sur PIn/OutPersist sont definies)
[2632]340
[2716]341
[2911]342Les merges et copie sont prevues,
[2716]343on doit en principe pouvoir ecrire par exemple:
[2717]344\begin{verbatim}
[2716]345SwPPFDataTable swdt;
346PInPersist pis("swdt.ppf");
347pis >> swdt;
348DataTable dt;
349dt = swdt; // Pour tout charger en memoire
[2717]350\end{verbatim}
[2716]351
[2911]352{\it On pourra aussi ajouter des methodes d'acces aux variables
353membres pour enrichier l'interface. }
[2716]354
355
[2717]356{\bf DataTable cote PIAPP :} \\
[2716]357Cote piapp, les DataTable et SwPPFDataTable sont pris en charge par
[2717]358{\tt NOMAdapter\_DataTable} (qui prend en charge tous les 'BaseDataTable' )
359Il faudrait peut-etre rajouter deux commandes : \\
[2716]360newdt ou newdatatable
[2717]361newdt ncol col1 [col2 .... ] \\
[2716]362avec possibilite de specifier coli sous fome de X:colname ou X = D,F,S,I,L ...
363et puis dtfromascii ...
364
365Voir Tests/tnt.cc pour exemple d'utilisation :
[2717]366\begin{verbatim}
[2716]367DataTable dt(64);
368dt.AddIntegerColumn("line");
369dt.AddDoubleColumn("x");
370dt.AddFloatColumn("f_sin");
371MuTyV rec[10];
372for(int k = 0; k<1000; k++) {
373 rec[0] = k;
374 double x = M_PI*k/100.;
375 double fx = sin(x)*cos(x);
376 rec[1] = x;
377 rec[2] = sin(x);
378}
379 POutPersist po("dtable.ppf");
380 po << dt;
[2717]381\end{verbatim}
[2716]382
383Pour SwPPFDataTable, il faut juste creer un stream PPF avant, qui doit rester
[2717]384ouvert tant que le SwPPFDataTable est actif: \\
385\begin{verbatim}
[2716]386 POutPersist po("swdtable.ppf");
387 SwPPFDataTable dt(po, 64);
[2632]388\end{verbatim}
389
[2717]390
[2993]391\section{SkyMap}
[2971]392
[2993]393\begin{itemize}
394\item[\rond] Juin 2006: Prise en charge du rangement mŽmoire {\bf NESTED} dans
395les SphereHEALPix , + I/O PPF et FITS
396\item[\rond] Juin 2006: Nettoyage et amŽliorations diverses dans les classes
397Vector3d, UnitVector, LongLat \ldots et les cartes sphŽriques, en particulier :
398\begin{enumerate}
399\item Nettoyage/uniformation mŽthodes {\tt Print()} des cartes, et
400 ajout de la mŽthode {\tt Show()} dans PixelMap
401 \item Ajout mŽthodes {\tt HasSymThetaSlice() , GetSymThetaSliceIndex() }
402 dans les cartes sphŽriques (SphericalMap)
403 \item Ajout methode {\tt ResolToSizeIndex() SizeIndexToResol() }
404 ds SphereThetaPhi , SphereHEALPix et SphereECP
405 \item Petites optimisations dans {\tt GetThetaSlice()} + methode {\tt GetThetaSliceDataPtr() }
406 \end{enumerate}
407
408\item[\rond] Juin 2006: Introduction de la classe {\bf Angle} - pour conversion d'angle.
[2971]409\begin{verbatim}
[2993]410 // Example to convert 0.035 radians to arcsec
411 double vr = 0.035;
412 cout << "Angle rad= " << vr << " ->arcsec= " << Angle(vr).ToArcSec() << endl;
413 // Example to convert 2.3 arcmin to radian - we use the conversion operator
414 double vam = 2.3;
415 cout << "Angle arcmin= " << vam << " ->rad= "
416 << (double)Angle(vam, Angle::ArcMin) << endl;
417\end{verbatim}
418%
[2971]419
[2632]420
[2993]421\item[\rond] {\bf SphereECP} - Septembre 2004 \\
[2632]422Extrait du message du 7 Septembre 2004
423\begin{verbatim}
424 J'ai mis dans la base (module SkyMap) le code de la classe
425SphereECP<T> (pixelisation avec projection cylindrique) - carte partielle et complete,
426+ gestionnaire PPersist + modifs adaptateur NomSkyMapAdaptor (PIext/ spiapp)
427
428Programme test (avec appel a transforme en Alm) ds Test/tsphereecp.cc
429Attention, mettre le parametere de pixelisation a -1 lors de l'appel a Generate pour eviter
430le Resize de la sphereECP
431ylmserver.GenerateFromCl(map, -1, clin, 0.);
432
433Dans piapp, c'est visualise par defaut en projection Molleweide
434On peut ajouter dans les options d'affichage :
435ecparray : affichage direct du tableau TArray des pixels (X:Phi, Y:Theta)
436Si option ecparray, on peut preciser en plus
437 - ecpscaledeg: echelle des axes en degres au lieu de pixels
438 - ecpscalerad: echelle des axes en radians au lieu de pixels
439Exemple:
440Cmd> disp mapecp 'ecparray ecpscaledeg zoomx2 stdaxes'
441\end{verbatim}
442
[2993]443\item[\rond] Bug non corrigŽ ds classe Circle
[2632]444\begin{verbatim}
445From: Laurence Perotto <perotto@cdf.in2p3.fr>
446Date: Mon Jan 5, 2004 4:59:12 PM Europe/Paris
447To: Reza Ansari <ansari@lal.in2p3.fr>, Christophe Magneville <cmv@hep.saclay.cea.fr>
448Subject: un bug dans sophya...
449
450 Bonjour et bonne annee a tous les deux...
451
452 Je viens de trouver un ptit bug dans la fonction TanOnCircle de la classe Circle: Il
453s'agit d'un melange entre les coordonnees (beta, lambda) de Benoit et les (theta, phi)
454utilises dans Sophya. Lors du passage de l'un a l'autre, une transfo sin->cos a ete
455oubliee...
456 Voila...
457 Bonne journee.
458
459 Laurence.
460\end{verbatim}
[2993]461\end{itemize}
[2632]462
[2993]463\section{Samba }
464
465\begin{itemize}
466\item[\rond] {\bf Juin 2006:} correction bug de calcul $a_{lm} \rightarrow$ SphereHEALPix
467(zones polar cap): le problme venant du choix de taille lors du calcul de la transformŽ
468de Fourier complex $\rightarrow$ rŽel (n/2 - 1 ou n/2 -2) .
469Correction dans {\tt RfourierSynthesisFromB } et utilisation de cette mŽthode
470pour tout type de carte.
471On gagne un peu encore en temps de calcul - sur asc (OSF1-cxx) , avec
472SphereThetaPhi(m=400), $l_{max} = 511$ \\[2mm]
473\begin{tabular}{|l|c|c|}
474\hline
475OpŽration & TCPU Avant & TCPU Aprs OPT \\
476\hline
477map $\rightarrow a_{lm}$ & 10 s & 3.6 s. \\
478$a_{lm} \rightarrow$ map & 26 & 10.5 s. \\
479\hline
480\end{tabular} \\[1mm]
481%
482\item[\rond] {\bf Mai 2006:} Optimisation calcul transformŽ en harmoniques sphŽriques
483{\bf SphericalTransformServer}. \\
484Au lieu de calculer un tableau de $\lambda_{lm}$ dans LambdaLMBuilder
485et utiliser ensuite ce tableau, on calcule les sommes nŽcessaires au vol,
486dans des mŽthodes spŽcifiques de la classe LambdaLMBuilder qui
487sont utilisŽes dans SphericalTransformServer (pour les transformŽs
488scalaire/tempŽrature) - PAS fait pour la polarisation pour le moment.
489On peut encore gagner un facteur 2 en utilisant la symŽtrie
490en $\theta <> \pi-\theta$. \\
491Extrait de cvs log :
492\begin{verbatim}
493revision 1.8
494date: 2006/06/01 11:34:50; author: ansari; state: Exp; lines: +147 -12
4951/ passage en sa_size_t (au lieu de int) dans Alm<T> et Bm<T>
4962/ Ajout des methodes optimisees (statiques) pour calcul transforme Ylm
497ds LambdaLMBuilder et utilisation ds SphericalTransformServer
498 Reza , 1/06/2006
499\end{verbatim}
500
[3061]501\item[\rond] {\bf Fin 2004} : Tests et vŽrifications des polynomes de Legendre.
502La classe LambdaLMBuilder donne les bons r\'esultats mais calcule les Plm
503pour tous les $l,m$.
504Introduction d'une routine (C-like) ``HarmSph\_array\_teta'' qui calcule
505les Plm pour $m$ fix\'e et $l\in [0,l_{max}]$ comme ce qui est fait
506dans la GSL... (la routine GSL ne marche pas corectement).
[2993]507\end{itemize}
508
509%%%%%%%%%%%
[2632]510\section{SysTools}
[2971]511{\bf Mai-Juin 2006 } classe ZThread - petites modifs/amŽliorations liŽes
512ˆ la gestion des signaux et mŽthodes kill
513
[2632]514\subsection{Classe SOPHYA::Commander (module SysTools) }
[2971]515Mai-Juin 2006:
516Debug (?) de gestion/controle des threads dans la classe Commander -
517Extrait de cvs log :
518\begin{verbatim}
519date: 2006/05/29 17:27:35; author: ansari; state: Exp; lines: +62 -11
520Ajout gestionnaire signal ds ZThread et correction/adaptation gestion des thread
521s (killthr) dans Commander - Reza 29 mai 2006
522----------------------------
523revision 1.7
524date: 2006/04/26 15:22:09; author: ansari; state: Exp; lines: +13 -0
525ajout methode ZThread::kill() pour envoi de signal a un thread + remplacement Ca
526ncelThread par StopThread (par kill/SIGUSR1) dans Commander (commander.cc) + ame
527----------------------------
528revision 1.22
529date: 2006/05/31 12:30:13; author: ansari; state: Exp; lines: +20 -11
530correction gestion & pour ThrExec ds Commander - Reza 31/05/2006
531----------------------------
532revision 1.21
533date: 2006/05/29 17:27:35; author: ansari; state: Exp; lines: +37 -16
534Ajout gestionnaire signal ds ZThread et correction/adaptation gestion des thread
535s (killthr) dans Commander - Reza 29 mai 2006
536----------------------------
537revision 1.20
538date: 2006/04/26 15:22:08; author: ansari; state: Exp; lines: +55 -15
539ajout methode ZThread::kill() pour envoi de signal a un thread + remplacement Ca
540ncelThread par StopThread (par kill/SIGUSR1) dans Commander (commander.cc) + ame
541lioration documentation , Reza 26/4/2006
[2632]542
[2971]543\end{verbatim}
544
[2717]545Mars-Avril 2004 :
[2632]546Classe d'interprŽteur de ligne de commande inspire de C-Shell,
547destine a etre incluee dans des applications C/C++. \\
[2717]548( Programme test Test/tcmd.cc ) \\
549Avril 2005 : Introduction de la possibilite d'execution de commandes
550en multithreads \\
551Avril 2005 : Controle strict sur les noms de variables, limites
552aux caracteres alphanumeriques + underscore - Adaptation
553de l'algorithme de substitution en consequence.
[2632]554
555{\bf Mini guide de l'interpreteur - Message du 19 Mars 2004 } \
556
557\begin{itemize}
558
559\item[\rond] {\bf Gestion des variables } \\
560 - Les variables sont non typees toutes traitees comme des chaines
561de caracteres.
562 - Acces aux variables d'environnement -
563 - Un niveau variable d'environnement application est aussi prevu
564 - Toutes les variables de l'interpreteur sont traitees comme des vecteurs.
565extensibles automatiquement (difference avec le C-Shell)
566
567\item[\rond] {\bf Creation / initialisation de variables } \\
568\begin{verbatim}
569Cmd> set sv StringValue
570# Suppression d'une variable : unset ou clearvar
571Cmd> unset sv
572
573# Initialisation de type vecteur - Espace avant/apres ')' et avant ')' obligatoire
574Cmd> set vecv ( mot1 mot2 mot3 mot4 mot5 )
575#Calcul numerique : expression de type C - Espace avant/apres '=' obligatoire
576Cmd> a = 2+3*sqrt(4)
577# Le signe egal peut etre utilise pour attribuer une chaine de caracteres
578Cmd> a = 'Bonjour Madame'
579# Un element de tableau peut etre specifie avant le signe egal
580Cmd> vecv[2] = 'coucou'
581# Ou bien
582Cmd> i = 3
583Cmd> vecv[i] = 'Ooohhh'
584\end{verbatim}
585
586A droite du signe egal (membre de droite), les variables doivent etre
587adressees a l'aide du signe \$.
588
589Une chaine peut etre cassee en mots a l'aide de la commande var2words
590\begin{verbatim}
591Cmd> var2words varname wordvarname [separateur]
592\end{verbatim}
593
594\item[\rond] {\bf Acces aux variables } \\
595L'acces aux variables s'effectue par le signe \$ {\tt \$varname} .
596Les {\tt \$xxx} sont remplaces par le contenu de la variable xxx.
597Cette substitution ne s'effectue pas entre simple quotes {\tt ' ... \$xxx '},
598mais se fait entre double quotes {\tt " ... \$xxx ... "} . Les formes
599{\tt \${vname} } ou {\tt \$(vname)} peuvent etre utilisees.
600
601\begin{verbatim}
602Cmd> x = 'Hello'
603Cmd> echo $x
604# Taille d'une variable de type vecteur $#vname
605Cmd> set vx ( 111 2222 3333 444444 )
606Cmd> echo $#vx
607# Acces aux elements de tableau
608Cmd> echo $vx[0] $vx[1]
609# ou bien indexe par une variable
610Cmd> i = 2
611Cmd> echo $vx[i]
612# Une syntaxe particuliere: $[vname] retourne le contenu de
613# la variable dont le nom est ds vname
614Cmd> zzz = 'Commander'
615Cmd> xxx = 'zzz'
616Cmd> echo '$[xxx]= ' $[xxx]
617$[xxx]= Commander
618\end{verbatim}
619
620Variables d'environnement: L'acces aux variables d'environnement
621se fait simplement par{\tt \$varenvname}. Attention, les variables locales
622de l'interpreteur sont prioritaires.
623
624\item[\rond] {\bf Variables particulieres: } \\
625{\tt \$retval} ou {\tt \$retstr} : chaine specifee sur la derniere commande return
626{\tt \$status} : code de retour de la derniere commande executee.
627(variable existe et est rempli - mais il faudra se donner une regle
628plus claire ...)
629Arguments des fichiers .pic appeles par la commande exec
630{\tt \$\# } : nombre d'arguments, a part \$0
631{\tt \$0} nom du fichier ou du script
632{\tt \$1 \$2 \$3} .... les arguments (pour les scripts et les .pic (exec))
633
634
635\item[\rond] {\bf Structures de controle } \\
636\begin{verbatim}
637foreach f ( w1 w2 w3 ... )
638 ...
639 echo $f
640end
641\end{verbatim}
642
643Espace avant/apres '(' et avant ')' obligatoire.
644
645\begin{verbatim}
646foreach v vecname
647 ...
648 echo $v
649end
650\end{verbatim}
651
652Boucle de type integer:
653\begin{verbatim}
654for i startInt:endInt[:stepInt]
655 ....
656 echo $i
657end
658\end{verbatim}
659
660Boucle de type float
661\begin{verbatim}
662for f startFloat:endFloat[:stepFloat]
663 ....
664 echo $f
665end
666\end{verbatim}
667
668Boucle sur les lignes d'un fichier:
669\begin{verbatim}
670forinfile line FileName
671 ...
672 echo $line
673end
674\end{verbatim}
675
676Instruction {\tt break} pour casser une boucle
677
678\item[\rond] {\bf Les tests }
679\begin{verbatim}
680if ( test ) then
681endif
682
683if ( test ) then
684 ....
685else
686 ....
687endif
688\end{verbatim}
689
690Espace avant/apres '(' et avant ')' obligatoire.
691
692test de type {\tt a == b} OU {\tt a != b} OU {\tt a < b} OU {\tt a > b}
693OU {\tt a <= b} OU {\tt a >= b}
694les espaces avant l'operateur de comparaison sont obligatoires.
695{\tt ==} et {\tt !=} effectue une comparaison de chaines de caracteres.
696{\tt < , > , <= , >=}une comparaison apres conversion en valeur flottante.
697
698\item[\rond] {\bf Definition de script } \\
699\begin{verbatim}
700defscript scriptname [description ]
701 ....
702endscript
703\end{verbatim}
704
705L'appel a un script se fait simplement a l'aide
706du nom de script (contrairement aux fichiers
707de commande qui sont executes a l'aide de la
708commande {\tt exec} )
709\begin{verbatim}
710Cmd> scriptname arg1 arg2 arg3 ....
711\end{verbatim}
712
713L'instruction {\tt return} provoque l'arret (et le retour) d'execution d'un
714script ou d'un fichier de commandes.
715Commandes {\bf listscript }et {\bf clearscript scriptname}
716 permettet d'avoir la liste des scripts
717 definis / supprimer la definition d'un script
718
719\item[\rond] {\bf Autres commandes}
720\begin{itemize}
721\item Instruction {\bf echo } pour ecrire sur cout/stdout
722\item Instruction {\bf echo2file} pour ecrire a la fin d'un fichier
723\item Instruction {\bf sleep nsec} (attente de nsec seconds )
724\item Instructions {\bf timingon , timingoff , traceon , traceoff } \\
725%
726\item Commande {\bf exec commandfilename [arg1 arg2 ... ] }
727\item Commandes {\bf help et help keyword/commandname }
728\item Commandes {\bf listvars , listcommands }
729\item Defintion et liste d'alias : {\bf alias aliasname 'string ' } et {\bf listalias}
730\end{itemize}
[2717]731
732\item[\rond] {\bf Threads d'execution de commandes (Avril 2005)} \\
733Possibilite de lancer des commandes (autre que les commandes
734 de l'interpreteur lui-meme) en thread separe (il suffit de mettre un \&
735 a la fin de la commande) \\
736 Commandes des gestion des threads : \\
737 {\bf thrlist ; cleanthrlist ; cancelthr ThId ; waitthr } \\
738 Attention, la possibilite de lancer des commandes en threads separes ne fonctionne que
739pour des commandes "thread-safe".
740La plupart de nos commandes de piapp sont \\
741 - soit trop rapide, \\
742 - soit non "thread-safe" \\
743
744 \item[\rond] controle d'execution : \\
745Possibilite d'arreter l'execution de l'interpreteur (dans une boucle
746 ou dans dans un fichier .pic ...
747 Utiliser la commande {\bf stop} ou {\tt <Cntrl C>} dans PIConsole
748
[2632]749\end{itemize}
750
751\subsection{Classes CExpressionEvaluator et RPNExpressionEvaluator }
752\begin{itemize}
753\item[\rond] Ajout des classes RPNExpressionEvaluator et CExpressionEvaluator
754d'Žvaluation d'expressions numŽriques en notation polonaise inverse
755et avec la syntaxe C . Utilise dans la classe Commander.
756\item[\rond] Programme test Test/tcmd.cc
757\item[\rond] extrait de {\tt cvs log cexpre.cc }
758{\small \begin{verbatim}
759----------------------------
760revision 1.3
761date: 2004/03/18 18:15:19; author: ansari; state: Exp; lines: +10 -6
762Suite (presque finie) des modifications de l'interpreteur - gestion des variables en particulier - Reste au moins un bug ds CExpressionEvaluator - Reza 18/03/2004
763----------------------------
764revision 1.2
765date: 2004/03/16 08:47:48; author: ansari; state: Exp; lines: +5 -6
766suppression variables inutilisees ds cexpr.cc - Reza 16 Mars 2004
767----------------------------
768revision 1.1
769date: 2004/03/15 22:19:43; author: ansari; state: Exp;
770Ajout fichiers des classes RPNExpressionEvaluator et CExpressionEvaluator (expression arithmetiques) et MAJ du fichier Makefile et objlist.list - Reza 15 Mars 2003
771\end{verbatim} }
772
773\item[\rond] Extrait du message du 3 Mars 2004
774\begin{verbatim}
775Le code est base sur une hierarchie de classe d'expression :
776 Expr -------- NumberExp
777 --------- BinExp ------ AddExp
778 ------ MulExp
779 ------ SubExp
780 ------ DivExp
781 --------- FuncExp
782 --------- CExpressionEvaluator
783
784NumberExp : expression elementaire de nombre, sait actuellement traduire Pi et E
785 tres facile d'ajouter d'autres constantes
786BinExp: Classe d'operations binaires (deux operandes) a+b a-b a*b a/b
787 avec gestion de niveau de priorite des operateurs
788 On peut facilement ajouter d'autres operateurs binaires (par exemple
789 puissance ^ a^b ) - et les priorites relatives seront gerees en principe.
790FuncExp: classe d'expression fonctionnelle, avec n arguments f(x1,x2,...x3)
791 actuellemenent, n=0 a n=3 arguments et quelques fonctions
792 usuelles sont decodes ds cette classe (sin,cos,tan, asin, acos, atan, exp, log,
793 atan2, pow ) - voir ds le code
794
795CExpressionEvaluator : C'est la classe de haut niveau a utiliser -
796 la fonction de decodage de la chaine ASCII (qui utilise
797 les fonctionalites des differentes classes est la dedans
798 et ce n'est pas tres long.
799(+ une classe d'exception specifique).
800\end{verbatim}
801
802\end{itemize}
803
[2829]804\section{FitsIOServer}
[3061]805\noindent
806- Aout 2006 : \\
807Ecriture/Lecture des classes Histo,HProf,HistoErr,Histo2D dans fichier FITS.
808Les Histo2D et leurs projections 1D associ\'ees sont lus et \'ecrits
809sur plusieurs HDU cons\'ecutifs. \\
810- Juin 2006 : \\
[2971]811Ajout verification/correction noms de colonne lors de lecture FITS / DataTable,
812et remplacement throw par un warning lors de lecture fits-healpix avec $nbcols > 1$ \\[1mm]
[3061]813- Septembre-Novembre 2005 : Refondation totale du module
[2829]814\begin{itemize}
[2905]815\item[\rond] Amelioration du programme PrgUtil/scanppf -
816(scanfits -V1 -lh -rd -header filename)
817\item[\rond] La classe FitsFile (et donc FitsInFile FitsOutFile) heritent de FitsInOutFile.
818(Jan 2006)
819\item[\rond] Fonctionalites classe {\bf FitsManager } etendues - en particulier ScanFile()
820\item[\rond] Les FitsIOHandler (ancien) heritent de FitsHandlerInterface -
821Tous les handlers sont pris en charge et enregistre par FitsManager (Jan 2006)
822\item[\rond] Ajout classe d'initialisation du module {\bf FitsIOServerInitiator },
823fichiers fiosinit.h .cc (Dec 2005)
824\item[\rond] Classe { \bf SwFitsDataTable } (DataTable avec swap sur FITS) ajoute
825 + classe FitsHandler<BaseDataTable> modifie pour prise
826en charge de SwFitsDataTable (Dec 2005 - Jan 2006)
827\item[\rond] Classes {\bf FITSDataSwapper$<$T$>$} modifies (Dec 2005)
[2854]828\item[\rond] Prise en charge de types TSTRING et TCOMPLEX et TDBLCOMPLEX
829lors de lecture/ecriture de colonnes FITS.
830\item[\rond] Prise en charge de l'ensemble des types de colonnes pour le handler de Fits
831de DataTable
[2829]832\item[\rond] Classe {\bf FitsInOutFile } comme wrapper des fonctions de la librairie cfitsio +
833classe d'exception spŽcifique {\bf FitsIOException} , et la classe des types FITS {\bf FitsTypes}.
834\item[\rond] Classe template {\bf FitsBlockRW$<$T$>$} pour lecture/Žcriture (tableaux de donnŽes)
835sur IMGHDU et Tables.
836\item[\rond] Classes gestionnaires I/O Fits pour les objets {\bf FitsHandler$<$T$>$} et {\bf FitsManager}
837\item[\rond] Classes gestionnaire pour les tableaux : {\bf FitsArrayHandler$<$T$>$}
838\item[\rond] Classes gestionnaire pour les DataTable {\bf FitsHandler$<$BaseDataTable$>$}
839\item[\rond] Mai 2005 : Classe {\bf FITSDataSwapper$<$T$>$} pour la gestion des
840SwSegDataBlock sur fichiers FITS
841\end{itemize}
842
[2717]843\section{LinAlg}
844Extension des fonctionalitŽs de la classe {\tt LapackServer<T>} :
845(Juillet 2004 / cmv , FŽvrier 2005 / Reza)
846\begin{itemize}
[2911]847\item[\rond] Ajout lancement d'exception sur renvoi de code d'erreur par lapack
848(desactivable par flag au niveau du constructeur de la classe serveur)
[2717]849\item[\rond] Introduction de l'interface Lapack d'inversion des matrices symetriques (21/7/2004)
850\item[\rond] Introduction de l'interface Lapack de recherche de valeurs et vecteurs propres
851 (cas general, symetrique et hermitique) (21/7/2004)
852\item[\rond] Introduction d'un fonction d'interface pour le calculateur de workspace
853 (ilaenv\_) (21/7/2004)
854\item[\rond] Ajout prog test Tests/tsttminv.cc + Commentaires sur les diverses methodes et sur les matrices FORTRAN (21/7/2004)
855\item[\rond] Ajout SVD decomp by Divide and Conquer SVD\_DC (23/7/2004)
856\item[\rond] Ajout Least Square with SVD DC
857\item[\rond] Ajout methode calcul de la matrice inverse par Lapack en utilisant la
858resolution de systemes (07/02/2005)
859\end{itemize}
860
[3061]861\section{IFFTW}
862\noindent
863- Juillet 2007 : Passage a FFTW 3 \\
864- Nov 2005 : Correction du bug dans le cas de FFT-1D Backward(complex -> reel)
[2854]865in(1).imag() pouvait etre ecrase.
866
[2632]867\section{PI,PIext,piapp}
[2717]868\subsection{PI: Classes modifiees - ameliorees}
869\begin{itemize}
870\item[\rond] {\bf PIImageNavigator } \\
[2911]871Ajout de la classe {\tt PIImageNavigator } permettant de visualiser une image
[2717]872avec ses propres widget zoom / global view et colormap. (Fevrier 2005) \\
873Commande {\tt imagnav} ajoute ds piapp/baseexcute.cc . \\
874\item[\rond] Avril 2005 - Amelioration de la classe {\bf PIConsole} \\
8751/Envoi Message PIMSG\_Cancel lors de {\tt <Cntl C>} \\
876 2/ Correction positionnement curseur lors de rappel de commande,
877 Si possible en fin de commande - mais toujours avec le
878 debut de commande visible. \\
8793/ Correction (probable) du petit bug sur les derniers caracteres lors de copier/coller
880 ds PIConsole
[2905]881\item[\rond] Codage Options graphiques en text (string) pour PIGraphicAtt (Nov-Dec 2005)
882\item[\rond] Corrections diverses trace d'axes etc ... (Dec 2005)
[2971]883\item[\rond] PIext rendu indŽpendant de FITS (Avril 2006) - commandes spŽcifiques dans
884ProgPI/fitsbtadapter.cc
[3050]885\item[\rond] BUG A corriger, DrawOpaqueString ds PIGraphPS (sortie postscript)
[2717]886\end{itemize}
887%
888%
[2632]889\subsection{ Codage texte des options graphiques (11 Mars 2004)}
890\begin{verbatim}
891// Methode retournant un vecteur de string a partir des options
892virtual int PIDrawer::OptionToString(vector<string> & opt) const
893qui vient completer les deux methodes
894virtual int PIDrawer:: DecodeOptionString(vector<string> & opt, bool ...) et
895virtual void PIDrawer:: GetOptionsHelpInfo(string& info);
896Ces methodes s'occupent de decoder les options graphiques (et l'aide
897associe). La methode ajoutee permet de faire l'operation inverse, fabriquer
898une serie de chaine de caracteres a partir des options graphiques.
899Il y a aussi la methode
900virtual int PIWdgGen::OptionToString(vector<string> & opt) const
901que j'ai ajoute (rien a faire pour le moment) - ainsi que
902int PIGraphicAtt::AttToStrings(vector<string> & att) const.
903
904Peux-tu remplir la methode PIGraphicAtt::AttToStrings(vector<string> & att) const.
905L'implementation par defaut de PIDrawer::OptionToString(vector<string> & opt) const
906appelle PIGraphicAtt::AttToStrings() - a laisser donc tel quel.
907
908par contre, pour les autres drawer (PIYfXDrawer, PIFuncDrawer, PIElDrawer,
909PISurfaceDrawer, PIHisto, PIHisto2D, PINTuple ...) - lorsque
910DecodeOptionString(vector<string> & opt, bool ...) est modifie,
911rajouter la methode OptionToString(vector<string> & opt) et verifier le help.
912Attention, il ne faut pas mettre l'argument opt a zero, mais ajouter des chaines
913derriere (push_back()) afin de pouvoir cumuler les options de base + options
914specifiques.
915
916Comment tester ?
917Pour tester, tu peux utiliser la fenetre des options texte ou j'ai ajoute le bouton
918[GetOption] . Tu peux acceder a cette fenetre a partir de la fenetre des options
919graphiques <Alt>O , ou directement sur un objet de gestionnaire 2D - par
920<Alt>T - <Shift>Button-1 permet de selectionner le drawer actif
921\end{verbatim}
922
923\subsection{ Trace des axes (11 Mars 2004)}
924 Ajouter la possibilite de specifier l'origine (le point de croisement des axes)
[2911]925lorsque les axes ne sont pas de type 'box' - classes PIAxes et PIElDrawer. FAIT
[2632]926
927\subsection{ Selection graphique (souris) du drawer actif (11 Mars 2004)}
928\begin{verbatim}
929J'ai ajoute la methode PIDrawer::GetDistanceToPoint(double x, double y)
930// Renvoie une distance au point x,y
931// 0: au(x) point(s) le(s) plus proche(s) ... 1 au bord xmin/xmax , ymin/ymax
932// La methode par defaut calcule la distance normalisee au point ((xmin+xmax)/2,
933(ymin+ymax)/2)
934 virtual double PIDrawer::GetDistanceToPoint(double x, double y);
935
936ainsi que ce qu'il faut ds PIBaseWdgGen et ds PIDrawer pour exploiter cette
937methode + code permettant le test ds PIScDrawWdg.
938(virtual void PIDrawer::WdgCoord2DrwCoord(int x, int y, double& xu ...
939 virtual int PIBaseWdgGen:;FindNearestDrawerId(int x, int y) ...)
940Tu as a t'aoccuper de la methode PIDrawer::GetDistanceToPoint(double x, double y)
941qui doit etre redefinie si possible pour chaque drawer, afin de fournir une
942distance raisonnable au point (x,y) en argument.
943J'ai juste mis une implementation par defaut (ds PIDrawer) et une implementation
944partielle pour PIElDrawer (qui trace les axes en particulier) - qu'il faut
945completer.
946
947Comment tester ?
948J'ai mis ce qu'il faut ds le gestionnaire 2D (PIScDrawWdg) -
949<Shift>Button-1 choisit le drawer le plus proche (base sur la
950valeur de retour de PIDrawer::GetDistanceToPoint(double x, double y)
951comme drawer actif. Ce drawer est passe en 'highlight' pendant que
952le bouton est appuye.
953\end{verbatim}
954
955\subsection{ Manipulation interactive des drawers (3 Juin 2004) }
956La manipulation interactive des drawers (ˆ l'aide d'un menu) a
957ŽtŽ finalisŽe pour les PIImage PIScDrawWdg PI3DWdg .
958
959\begin{verbatim}
960 o <Alt>D affiche le menu avec les differentes option
961 o Move/Resize: Affichage du rectangle + rectangle milieu
962 (deplacement) + coin bas-droite (deplacement) -
963 clicker ailleurs pour finir
964 o Mouse Select : Le mouse select des drawers est gere
965 maintenant par un PIEventHandler (comme pour Move/ReSize)
966 Drawer actif affiche par le rectangle muni d'un petit coin
967 (petit carre + rond dedans, en bas a droite).
968 Click souris change eventuellement le drawer actif.
969 On termine en clickant ds le petit [carre+rond]
970\end{verbatim}
971
972\subsection{ Traceur de bar-graph (classe PIBarGraph) (3 Juin 2004) }
973Ajout du traceur de bar-graph (classe {\bf PIBarGraph}) ds module PI/
974et commande {\tt bargraph} ds PIext/basexecut.cc .
975La commande bargraph ne gere pas encore toutes les possibilites
976de la classe PIBarGraph. \\
977Exemple d'utilisation:
978\begin{verbatim}
979Cmd> bargraph ' ' -10. 15. 22. 8. 33. 7 -4.
980Cmd> bargraph 'blue ' -10. 15. 22. 8. 33. 7 -4.
981Cmd> bargraph 'blue horizontalbars' -10. 15. 22. 8. 33. 7 -4.
982Cmd> bargraph 'blue horizontalbars barvaluelabel ' -10. 15. 22. 8. 33. 7 -4.
983Cmd> bargraph 'blue verticalbars nofill barvaluelabel ' -10. 15. 22. 8. 33. 7 -4.
984Cmd> bargraph 'font=times,bold,16 blue verticalbars nofill barvaluelabel ' \
985 -10. 15. 2 2. 8. 33. 7 -4.
986Cmd> bargraph 'font=times,bold,16 blue verticalbars fill barvaluelabel packfrac=0.8' \
987 -10. 15. 22. 8. 33. 7 -4.
988\end{verbatim}
989
990\subsection{ Traceur de lignes de texte (classe PITextDrawer) (3 Juin 2004) }
991
992Ajout d'une classe de traceur de lignes de texte (classe {\bf PITextDrawer}) et commande
993{\tt textdrawe}r ds PIext/basexecut.cc . Mais le traceur (et sa commande)
994doivent etre completes. \\
995Exemple d'utilisation:
996\begin{verbatim}
997# On affiche qque chose
998Cmd> openppf demo.ppf
999Cmd> disp h1d
1000Cmd> textdrawer 'frame line=solid,2 font=times,bold,16 red inset' \
1001 ' Christophe ' ' Reza Ansari' ' SOPHYA '
1002\end{verbatim}
1003
1004\subsection{ Gestion de re-scale-ing des axes en 3D (3 Juin 2004) }
1005
1006Mise en place complete (?) de la gestion de re-scale-ing des axes en 3D
1007avec gestion des options graphiques (texte) - Il est possible en particulier d'imposer
1008les limites de la boites 3D.
1009cela a ete une grosse prise de tete de tout un apres-midi.
1010J'ai eu ensuite mal a la tete une partie de la soiree ! \\
1011Exemple d'utilisation:
1012
1013\begin{verbatim}
1014
1015# On ouvre le fichier demo.ppf
1016Cmd> openppf demo.ppf
1017Cmd> surf mtx1 'colbr32'
1018Cmd> surf mtx1 'colbr32 noautoscale'
1019Cmd> surf mtx1 'colbr32 lim3dbox=-10,60,-10,60,-3,15 autoscale3dbox'
1020# Affichage avec superposition
1021Cmd> nt3d nt32 x y z - - - - - 'marker=circle,7 red'
1022Cmd> nt3d nt32 x y z - - - - - 'same marker=cross,5 blue '
1023# Ou bien :
1024Cmd> nt3d nt32 x y z - - - - - 'marker=circle,7 red noautoscale'
1025Cmd> nt3d nt32 x y z - - - - - 'same marker=cross,5 blue '
1026
1027\end{verbatim}
[3050]1028\subsection{piapp (PIext/ProgPI) }
[2632]1029\begin{itemize}
[3050]1030%%%%
1031\item[\rond] Juillet 2006 : Ameliorations et ajouts divers : \\
1032- Ajout commande {\bf plot3dw} ({\tt Services2NObjMgr::DisplayPoints3DW() }) \\
1033- Ajout possibilite d'acces aux caracteristiques des objets par {\tt \$\{objname.att\} } \\
1034{\tt (PIACmd::GetVarApp()) } et amelioration verification du nom des objets
1035(methode {\tt NamedObjMgr::CheckName()}) \\
1036- Operations sur objets: commande {\bf objaoper} ({\tt NObjMgrAdapter::PerformOperation()})
1037
1038\begin{verbatim}
1039# Extracting row / column from matrix
1040Cmd> objaoper matrixname row 23
1041Cmd> objaoper matrixname col 148
1042# Extracting plane from 3D array (slicexy slicexz sliceyz)
1043Cmd> objaoper arr3dname slicexy 14
1044\end{verbatim}
1045%%%%
[2971]1046\item[\rond] Avril 2006: Ajout possibilite de lecture des commandes sur le terminal (stdin)
1047et flag en argument de commande {\tt -small} \\
1048Extrait de cvs log :
1049\begin{verbatim}
1050revision 1.16
1051date: 2006/04/26 15:53:18; author: ansari; state: Exp; lines: +20 -11
10521/ Ajout classe de lecture sur stdin (terminal) avec thread separe pour
1053piapp - incluant la possibilite d'utilisation de la librairie GNU readline
1054(fichiers piacmdrdr.cc piacmdrdr.h + fichier makfile specifique makefile_wgrdl
1055 pour compil+link avec GNU readline)
10562/ MAJ Makefile et modif programme principal piapp.cc avec flag -small
1057et activation thread de lecture sur terminal
1058 Reza , 26/04/2006
1059
1060----------------------------
1061\end{verbatim}
1062
[2905]1063\item[\rond] Jan 2006 : commandes readfits writefits scanfits ont ete ajoutees
1064dans ProgPI/fitsbtadapter.cc en utilisant le nouveau FITS -
1065Le menu OpenFits de PIStdImgApp utilise desormais ces commandes
[3050]1066\item[\rond] Avril 2005: PossibilitŽ d'execution de commandes en threads separes, en
1067ajoutant {\bf \&} en fin de ligne de commande.
1068\item[\rond] Janvier 2004: Le multithreading a ŽtŽ mis en oeuvre dans piapp .
[2717]1069\item {\bf BUG } a corriger pour {\tt imagvav}:
1070La destruction de l'objet et/ou widget pascorrectement geres -
1071provoque des plantages lors de la sortie de l'application.
1072
[2905]1073\item[\rond] Extrait de {\tt cvs log pistdimgapp.cc } :
[2632]1074\begin{verbatim}
[2717]1075revision 1.77
1076date: 2005/04/27 11:55:00; author: ansari; state: Exp; lines: +26 -10
10771/ Prise en charge de DataTable et SwPPFDataTable pour piapp (NObjMgrAdapter) :
1078nomhistadapter.cc et piiinit.cc
10792/ Lecture de tous les objets ds un fichier PPF par NamedObjMgr::ReadAll() pour
1080fichier PPF sans nametag.
10813/ Ajout bloc try/catch ds PIStdImgApp::Run() (boucle d'evenements)
1082 Reza , 27 Avril 2005
1083----------------------------
1084revision 1.76
1085date: 2005/04/19 09:13:49; author: ansari; state: Exp; lines: +3 -1
1086Ajout de l option nodisp ds les affichages des NamedObjMgr, prise en compte de
1087<Cntrl C> (Msg_Cancel) pour arreter l'execution de l'interpreteur ds PIStdImgApp
1088et remplacement commande breakexe par stop ds PIACmd - Reza 19/4/2005
1089----------------------------
1090revision 1.75
1091date: 2005/04/19 06:56:52; author: ansari; state: Exp; lines: +5 -4
1092Remis en marche la possibilite d'execution d'un .pic au lancement de piapp -
1093Reza 19/4/2005
1094----------------------------
1095revision 1.74
1096date: 2005/02/18 14:09:47; author: ansari; state: Exp; lines: +62 -37
1097Modifications pour l'utilisation viewer PIImageNavigator (ajout commande imagnav
1098) - Reza 18 Fev 2005
1099----------------------------
1100revision 1.73
1101date: 2004/11/19 17:41:07; author: ansari; state: Exp; lines: +26 -0
1102Ajout commandes addoval addfoval pour trace d'ellipse - Reza 19/11/2004
1103----------------------------
[2632]1104revision 1.71
1105date: 2004/09/07 07:10:18; author: ansari; state: Exp; lines: +35 -0
1106Ajout bloc try/catch ds piacmd.cc (thread execution commandes) et ds pistdimgapp.cc (
1107methode process, thread boucle d'evts) - Reza 07/09/2004
1108----------------------------
1109revision 1.70
1110date: 2004/01/06 18:44:56; author: ansari; state: Exp; lines: +11 -1
1111 Suite debugging gestion lock entre threads ds piapp - A l'air de
1112marcher sur OSF1 et Linux ... Reza 06/01/2004
1113----------------------------
1114revision 1.69
1115date: 2004/01/06 17:05:25; author: ansari; state: Exp; lines: +33 -7
1116Suite debug piapp multithread : on ne peut pas utiliser ZSync() ds un if (destructeur
1117 appele de suite) - Reza 06/01/2004
1118----------------------------
1119revision 1.68
1120date: 2004/01/04 19:02:43; author: ansari; state: Exp; lines: +43 -13
1121Suite des modifs pour piapp multi-threads
11221) Ajout Mutex de synchronisation ds ls classe NamedObjMgr
11232) Suite controle de gestion d'appel aux methodes de PIStdImgApp depuis
1124la classe elle-meme, a travers le NamedObjMgr
11253) Modification de la boucle d'evenements, avec un thread de reveil
1126periodique
1127 Reza, 4 Janvier 2004
1128\end{verbatim}
[2905]1129\item[\rond] Extrait de {\tt cvs log pistdimgapp.cc } :
[2632]1130\begin{verbatim}
1131----------------------------
1132revision 1.62
1133date: 2003/11/27 10:51:58; author: ansari; state: Exp; lines: +45 -20
1134Suite modification/adaptations a la classe PIACmd qui herite maintenent de SOPHYA::Co
1135mmander - Reza 27/11/2003
1136----------------------------
1137revision 1.61
1138date: 2003/11/26 23:01:55; author: ansari; state: Exp; lines: +20 -1755
1139Modification du code de PIACmd : La classe PIACmd herite maintenant de la classe Comm
1140ander (de SysTools) - Reza 26/11/2003
1141----------------------------
1142revision 1.60
1143date: 2003/07/21 21:13:10; author: cmv; state: Exp; lines: +3 -3
1144- introduction notion de numero de ligne dans expression ntuple
1145 modif prototype PlotExprFunc NTLoopExprFunc (add _nl _nstart _nend)
1146 modif int_4 -> int_8_exprf (long long) pour _nl (DecodeLoopParameters,
1147 PrepareNTExpressionCFile, LinkExprFunc,...)
1148- doc pour _nl _nstart _nend et arragement repartition RegisterHelp/RegisterCommand
1149 (rz + cmv 21/7/2003)
1150----------------------------
1151\end{verbatim}
1152\end{itemize}
1153
1154\section{Documentation (Manual/) }
1155Documentation des classes de SysTools. \\
1156Extrait message du 12 Aout 2004 : \\
1157\begin{verbatim}
1158---> Au sujet de la doc (Manual/)
1159 J'ai installe doxygen sur le Mac, version 1.3.8 -
1160 Il faut updater le fichier de config de depart (dox_sophya.conf)
1161 Pour ma part, j'ai du modifier mkmf (en version privee) -
1162 En effet, il n'y avait pas le program doxysearch - Je ne sais pas si c'est general
1163 ou specifique Mac.
1164
1165 J'ai aussi modifie certaines options de doxygen (en version privee)
1166 EXTRACT_LOCAL_CLASSES --> NO (au lieu de YES)
1167 DETAILS_AT_TOP ---> YES (au lieu de No)
1168 SORT_MEMBER_DOCS ---> NO (au lieu de YES)
1169
[2829]1170 Si on est d'accord, on peut modifier ces options ds le fichier dox_sophya.conf et
[2632]1171 utiliser la fonction update de doxygen (doxygen -u)
1172\end{verbatim}
1173
[2829]1174\section{Mgr}
[2911]1175{\Large Avril-Mai 2005 : Basculement vers la nouvelle version de scripts
1176de gestion du code (module {\bf BuildMgr/ } )
1177On n'a plus a se preoccuper des indications de cette section
1178}
[2829]1179
1180\subsection{Variables d'environnement SOPHYAxxx (17/9/2003) }
1181Septembre 2003 (17/9/2003) : Changement DPCDEVREP, DPCBASEREP
1182en SOPHYADEVREP , SOPHYABASEREP , EROSCXX en SOPHYACXX
1183
1184\subsection{Modifs Makefile - Message du 3 Mars 2004 }
[2911]1185Modifs effectuees - m nouveau module BuildMgr
[2829]1186
1187\subsection{ Modifs Makefile - Message du 8 Juillet 2004 }
1188\begin{verbatim}
1189A/ Makefile(s) (voir aussi mon message du 3 mars 2004)
1190A-1/ Structures des repertoires
1191>> On garde la structuration avec
1192+ un Makefile par module 'librairie'
1193+ un ensemble de modules librairies sans lib externe -> libsophya.slb
1194+ un ensemble de modules librairies avec lib externe -> libextsophya.slb
1195+ Des modules programmes (PrgUtil/ PrgMap/ ) avec un makefile par module programme
1196+ un Makefile de haut niveau (actuellement ds Mgr/Makefile
1197 Ce Makefile de haut niveau sera aussi simplifiŽ - en particulier la partie
1198concernant la fabrication des shared-libs (.slb) et Makefile.slb
1199+ On garde aussi la convention de generation automatique des GNUmakefile, qui sont
1200ensuite renommes eventuellement en Makefile, conserves ds la base
1201- Plus d'inclusion automatique du nom du system-compilo (Linux-g++ OSF1-cxx ...)
1202dans les noms de repertoires
1203- Plus de structure ExtLibDir obligatoire (remplace par des -Ipath -Lpath pour les
1204compils/links
1205- Si besoin, on fait subir le meme sort que Makefile.h a Makefile.slb
1206
1207 On aura donc : (message du 3 mars 2004)
1208il y aura qu'une seule variable d'environnement : (SOPHYAROOT ou
1209SOPHYARACINE) par exemple
1210$SOPHYAROOT/Include
1211Attention le repertoire Include/ NE sera donc PLUS commun pour plusieurs
1212systemes-compilo.
1213 /Libs
1214 /ShLibs
1215 /Exec
1216 /Objs
1217Un fichier Makefile.h ds $SOPHYAROOT/Include
1218contiendra les flags de compilation dŽfinis pour un systme/compilo.
1219A la base, on aura ds Mgr/ un fichier Makefile.h pour chaque combinaison
1220compilo-compilo;
1221Mgr/makef_osf1_cxx.h
1222Mgr/makef_linux_g++.h
1223Mgr/makef_linux_KCC.h
1224Mgr/makef_darwin_g++.h (Mac)
1225Mgr/makef_sgi_CC.h
1226 etc ...
1227C'est ce fichier qui est copiŽ en Include/Makefile.h, Žventuellement
1228complete/modifie
1229
1230----- Fichier Makefile.h
1231# Section generale
1232SOPHYAROOT =
1233SOPHYACXX=
1234...
1235# Section compilation
1236CC_COMPILER (nom du compilo cc)
1237CXX_COMPILER ( c++)
1238CPPFLAGS , (flag du preprocesseur), en particulier
1239les -Iincludepath (chemin pour les includes SOPHYA
1240CFLAGS flag de compilation c
1241CXXFLAGS flags de compilation c++
1242# Section Link
1243LIBPATH -L... -L... (chemin pour les librairies et les lib externes (cfitsio, ...)
1244LIBLIST -lm -lcfitsio ... (les librairies)
1245
1246Ces variables doivent pouvoir etre utilise par la classe CxxCompilerLinker.
1247Il faut donc prevoir peut-etre un autre fichier cccpp_flags.h (ou qque chose
1248du meme genre) avec la syntaxe C/C++ de chaines de caracteres
1249pouvant etre include (par #include) ds cxxcmplnk.cc
1250
1251le fichier machdefs.h ds $SOPHYAROOT/Include est genere a partir du fichier
1252machdefs_mkmf.h actuel (on pourra songer ulterieurement a le casser en
1253plusieurs morceaux si necessaire) et contiendra en entete les flags
1254qui modifie la generation du code
1255
1256exemple
1257#define Linux
1258#define SOPHYA_DEBUG
1259....
1260
1261Dans les fichier Makefile pour chaque module, on abandonnera
1262les regles (et repertoire) de compilation par defaut et on aura
1263donc:
1264INC= $SOPHYAROOT/Include
1265OBJ = $SOPHYAROOT/Objs
1266LIB=...
1267$(OBJ)toto.o : toto.cc $(INC)toto.h $(INC)titi.h ...
1268 $CXX $CXXFLAGS -c -o $(OBJ)toto.o toto.cc
1269....
1270
1271\end{verbatim}
1272
1273
[2911]1274\section{Plan de modifs pour SOPHYA V 2.0 PI/piapp V 4.0 }
1275
1276{\Large {\bf Dec 2005} : La majorite des modifs ont ete mise en oeuvre -
1277Il faut nettoyer la liste et la transformer en liste pour la version 2.2 ou 2.4 ...} \\
1278
1279{\bf Plan Žtabli en septembre 2003 : }
1280
[2632]1281\subsection{Gestion du code (Mgr/ ) }
1282\begin{verbatim}
1283
1284 o Chemins/variables d'environnement
1285 - Remplacer DPCDEVREP DPCBASEREP par SOPHYADEVREP et SOPHYABASEREP
1286 - Remplacer EROSCXX par SOPHYACXX (?)
1287 o Simplifier/rationaliser les makefiles
1288 - Mettre les flags de compils pour chaque compilo-systeme dans un fichier au lieu
1289 d'avoir tout Makefile.h
1290 Exemple fichier Mgr/linux_g++.flags
1291 CPPFLAGS = ...
1292 CXXFLAGS = ...
1293 LIBS = ...
1294
1295o Mettre un script pour chercher les lib externes (c-fitsio, FFTW, ...) et creer
1296 eventuellement l'arborescence ExtLibs
1297
1298o Inclure la definition des flags influant sur le code (comme
1299 -DOSF1/Linux/Darwin/IRIX64
1300 SO_BOUNDCHECKING a la fin du fichier machdefs.h que l'on fabriquera a
1301 partir de du machdef_mkmf.h )
1302 PB-> ce fichier deviendra alors dependant du systeme et de l'installation !
1303 Faut-il deplacer alors Include/ sous uname-$EROSCXX (Linux-g++)
1304 ou carrement considerer que la separation pour differents systemes doit se faire au
1305 niveau de SOPHYADEV/BASE/REP ?
1306
1307o Abandonner (?) les regles de compilation par defaut
1308 Inclure dans les Makefile la ligne de commande :
1309 $(OBJ)toto.o : toto.cc toto.h titi.h ...
1310 $(COMPILECXX) -$(CPPFLAGS) $(CXXFLAGS) -c -o $(OBJ)toto.o toto.cc
1311
1312o Garder les Makefile simple (eviter trop de tests et syntaxe complique)
1313
1314\end{verbatim}
1315
1316\subsection{Code/Librairie SOPHYA $\rightarrow$ V 2.0)}
1317\begin{verbatim}
1318
1319o Fichiers PPersist (BaseTools) :
1320 - Ajouter la possibilite d'ecrire des complex(r_4> complex<r_8>
1321 (actuellement c'est ecrit sous forme de 2*r_4 ou 2*r_8)
1322 - Ajouter des tag de positionnement qui pourrait servir au cas
1323 ou on utiliserait le fichier PPF comme fichier de swap
1324 Ces tags ne peuvent pas etre les memes que les name-tag
1325 existant actuellement.
1326 Une utilisation annexe de ces tags peut etre alors un moyen
1327 de verifier que le fichier n'est pas corrompu
1328 Ce tag se presente alors sous forme de
1329 <tag (1 byte)><FilePosition (8 byte, long int)>
1330 On peut alors parcourir le fichier et verifier la coherence de
1331 ces tags.
1332 - Il faut aussi ajouter au niveau de POutPersist et PInPersist
1333 les services pour ecrire et lire une collection de tag de
1334 positionnement, afin qu'un objet puisse utiliser une liste de
1335 tag pour se positionner
1336
1337o BaseTools/ Voir autres remarques ds fichier Manual/sophya_afaire.txt
1338 concernant en particulier les NDataBlock<T> DataBlock<T> ...
1339
1340o Les tableaux : TArray/
1341 - Ajouter une classe de base abstraite GenericMatrix<T>
1342 avec methode d'acces aux elements, nb de lignes, nb de colonnes,
1343 ...
1344 - Introduire les TinyMatrix (TinyMatrix<T, int L, int C>)
1345 avec passage de/vers TMatrix<T> (et TinyVector<T, int N>) ?
1346
1347 - Introduire des matrices creuses simples SpareMatrix<T>
1348
1349 - Introduire les DiagonalMatrix<T>
1350
1351 Remarque: Les TMatrix TinyMatrix et SparseMatrix heritent de GenericMatrix
1352
1353o HiStats
1354 - Faire une classe SuperNTuple (!), facile a utiliser, sachant swaper sur les
1355 PPF, avec des champs de differents type
1356
1357o IFFTW/
1358 - Passage a FFTW 3.x ?
1359
1360o Voir autres remarques pour l'ensemble des modules ds Manual/sophya_afaire.txt
1361\end{verbatim}
1362
1363\subsection{Code/Librairie PI ($\rightarrow$ V 4.0)}
1364\begin{verbatim}
1365
1366o Menu contextuel pour les Drawers
1367 - Ajouter a PIImage, PIScrDrawWdg(2D), PIDraw3DWdg(3D) un menu obtenu
1368 sur <Shift><Bouton-1> par exemple, avec la liste de tous les Drawers
1369 permettant d'afficher la fenetre des options graphiques, ou le fenetre
1370 des options ou la fenetre des options texte, activer deplacement/resize
1371 des drawers, suppression (delete) ou detach des drawers, et en fonction
1372 du widgets, la fenetre des axes ou de controle d'image
1373
1374o Mettre l'option auto-scale (rapport entre axes X,Y,Z) pour les Drawers3D
1375 verifer/debugger la definition de la boite 3D au niveau des Drawers3D
1376
1377o Traceur d'histos, NTuples, ...
1378 Remplacer le trace des lignes par morceau fait par appel multiples
1379 a DrawLine a un seul appel a DrawPolygon (si les lignes sont connectes
1380 bien sur) --> Ca ameliore sensiblement l'aspect pour le trace en pointille
1381
1382o Ajouter un traceur de Bar-chart 2D OU ApplePie (facile !)
1383 On donne une serie de nombres, serie de couleur, + serie de strings
1384 et on trace alors une sorte d'histo, avec des barres (rectangles) espaces
1385 Ou bien on trace un cercle divise en zones
1386
1387o Ajouter un traceur de Lego-Plot
1388
1389o PIImageWindow (Une fenetre avec une PIImage, un Zoom et une vue globale)
1390 Assemblage
1391
1392o (?) Une fonction pour faire facilement une fenetre d'alerte ou d'info (?)
1393
1394\end{verbatim}
1395
1396\subsection{(s)piapp ($\rightarrow$ V 4.0)}
1397\begin{verbatim}
1398
1399o Verifier l'interpreteur et introduire le type de variable vecteur
1400 qui peut etre detecte par exemple lors de l'initialisation par set
1401 set a 'Bonjour CMV' # -> variable scalaire
1402 set va [ 12 14 hello ... ] # variable de type vecteur $va[]
1403
1404o Voir comment on pourrait "joindre" deux objets ayant l'interface NTupleInterface
1405 pour pouvoir plotter des objets, l'un vs l'autre
1406
1407o Separer la classe PIACmd en une classe de base (CShellLikeInterpreter)
1408 (a mettre ds SysTools) et la classe PIACmd a laisser ds PIext
1409
1410o (???) Introduire quelque chose du style
1411 AddDialogue("Cmd", "dialogue-description)
1412 qui pourrait fabriquer automatiquement une fenetre avec des champs a remplir
1413 pour les commandes usuelles (???)
1414
1415o Voir les autres commentaires ds Manual/spiapp_afaire.txt
1416
1417\end{verbatim}
1418
1419
1420\end{document}
Note: See TracBrowser for help on using the repository browser.