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

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

MAJ modifs.tex suite a la finalisation (?) FitsIOServer et propag ds piapp - Reza 16/01/2006

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