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

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

MAJ de la liste des modifications (modifs.tex) , Reza 2 Nov 2005

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