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

Last change on this file since 2942 was 2942, checked in by ansari, 19 years ago

MAJ liste de modifs (section TArray en particulier) - Reza 24/04/2006

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