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

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

MAJ modifs.tex suite ajout classe DataTableRow et nouveau fits (TSTRING TCOMPLEX ...) - Reza 21/11/2005

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