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

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

MAJ liste des modifs - Reza 25/01/2006

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