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

Last change on this file since 2632 was 2632, checked in by ansari, 21 years ago

Ajout fichier modifs.tex , avec la description des modifs effectu�ees en 2003 et 2004 - Reza 18/11/2004

File size: 38.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 - DŽcembre 2004 } \\[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 \\
44\end{tabular}
45}
46\end{center}
47\end{titlepage}
48
49\newpage
50\tableofcontents
51\newpage
52
53\section{Mgr}
54\subsection{Variables d'environnement SOPHYAxxx (17/9/2003) }
55Septembre 2003 (17/9/2003) : Changement DPCDEVREP, DPCBASEREP
56en SOPHYADEVREP , SOPHYABASEREP , EROSCXX en SOPHYACXX
57
58\subsection{Modifs Makefile - Message du 3 Mars 2004 }
59\begin{verbatim}
60Pour Les makefiles SOPHYA, je n'ai pas encore regarde ton makefile.h
61modifie.
62Voila qques propositions :
63il y aura qu'une seule variable d'environnement : (SOPHYAROOT ou
64SOPHYARACINE) par exemple
65$SOPHYAROOT/Include
66 /Include/FitsIO/ FFTW/ (etc...) pour les .h extlibs
67 /Libs
68 /ShLibs
69 /Exec
70 /Objs
71Un fichier Makefile.h ds $SOPHYAROOT/Include
72contiendra
73# Section generale
74SOPHYAROOT =
75SOPHYACXX=
76...
77# Section compilation
78CC_COMPILER (nom du compilo cc)
79CXX_COMPILER ( c++)
80CPPFLAGS , (flag du preprocesseur), en particulier
81les -Iincludepath (chemin pour les includes SOPHYA
82CFLAGS flag de compilation c
83CXXFLAGS flags de compilation c++
84# Section Link
85LIBPATH -L... -L... (chemin pour les librairies et les lib externes (cfitsio, ...)
86LIBLIST -lm -lcfitsio ... (les librairies)
87
88Ces variables doivent pouvoir etre utilise par la classe CxxCompilerLinker.
89Il faut donc prevoir peut-etre un autre fichier cccpp_flags.h (ou qque chose
90du meme genre) avec la syntaxe C/C++ de chaines de caracteres
91pouvant etre include (par #include) ds cxxcmplnk.cc
92
93le fichier machdefs.h ds $SOPHYAROOT/Include est genere a partir du fichier
94machdefs_mkmf.h actuel (on pourra songer ulterieurement a le casser en
95plusieurs morceaux si necessaire) et contiendra en entete les flags
96qui modifie la generation du code
97
98exemple
99#define Linux
100#define SOPHYA_DEBUG
101....
102
103Dans les fichier Makefile pour chaque module, on abandonnera
104les regles (et repertoire) de compilation par defaut et on aura
105donc:
106INC= $SOPHYAROOT/Include
107OBJ = $SOPHYAROOT/Objs
108LIB=...
109$(OBJ)toto.o : toto.cc $(INC)toto.h $(INC)titi.h ...
110 $CXX $CXXFLAGS -c -o $(OBJ)toto.o toto.cc
111....
112
113Il faudra voir ensuite pour le makefile de fabrication des shared-libs
114\end{verbatim}
115
116\subsection{ Modifs Makefile - Message du 8 Juillet 2004 }
117\begin{verbatim}
118A/ Makefile(s) (voir aussi mon message du 3 mars 2004)
119A-1/ Structures des repertoires
120>> On garde la structuration avec
121+ un Makefile par module 'librairie'
122+ un ensemble de modules librairies sans lib externe -> libsophya.slb
123+ un ensemble de modules librairies avec lib externe -> libextsophya.slb
124+ Des modules programmes (PrgUtil/ PrgMap/ ) avec un makefile par module programme
125+ un Makefile de haut niveau (actuellement ds Mgr/Makefile
126 Ce Makefile de haut niveau sera aussi simplifiŽ - en particulier la partie
127concernant la fabrication des shared-libs (.slb) et Makefile.slb
128+ On garde aussi la convention de generation automatique des GNUmakefile, qui sont
129ensuite renommes eventuellement en Makefile, conserves ds la base
130- Plus d'inclusion automatique du nom du system-compilo (Linux-g++ OSF1-cxx ...)
131dans les noms de repertoires
132- Plus de structure ExtLibDir obligatoire (remplace par des -Ipath -Lpath pour les
133compils/links
134- Si besoin, on fait subir le meme sort que Makefile.h a Makefile.slb
135
136 On aura donc : (message du 3 mars 2004)
137il y aura qu'une seule variable d'environnement : (SOPHYAROOT ou
138SOPHYARACINE) par exemple
139$SOPHYAROOT/Include
140Attention le repertoire Include/ NE sera donc PLUS commun pour plusieurs
141systemes-compilo.
142 /Libs
143 /ShLibs
144 /Exec
145 /Objs
146Un fichier Makefile.h ds $SOPHYAROOT/Include
147contiendra les flags de compilation dŽfinis pour un systme/compilo.
148A la base, on aura ds Mgr/ un fichier Makefile.h pour chaque combinaison
149compilo-compilo;
150Mgr/makef_osf1_cxx.h
151Mgr/makef_linux_g++.h
152Mgr/makef_linux_KCC.h
153Mgr/makef_darwin_g++.h (Mac)
154Mgr/makef_sgi_CC.h
155 etc ...
156C'est ce fichier qui est copiŽ en Include/Makefile.h, Žventuellement
157complete/modifie
158
159----- Fichier Makefile.h
160# Section generale
161SOPHYAROOT =
162SOPHYACXX=
163...
164# Section compilation
165CC_COMPILER (nom du compilo cc)
166CXX_COMPILER ( c++)
167CPPFLAGS , (flag du preprocesseur), en particulier
168les -Iincludepath (chemin pour les includes SOPHYA
169CFLAGS flag de compilation c
170CXXFLAGS flags de compilation c++
171# Section Link
172LIBPATH -L... -L... (chemin pour les librairies et les lib externes (cfitsio, ...)
173LIBLIST -lm -lcfitsio ... (les librairies)
174
175Ces variables doivent pouvoir etre utilise par la classe CxxCompilerLinker.
176Il faut donc prevoir peut-etre un autre fichier cccpp_flags.h (ou qque chose
177du meme genre) avec la syntaxe C/C++ de chaines de caracteres
178pouvant etre include (par #include) ds cxxcmplnk.cc
179
180le fichier machdefs.h ds $SOPHYAROOT/Include est genere a partir du fichier
181machdefs_mkmf.h actuel (on pourra songer ulterieurement a le casser en
182plusieurs morceaux si necessaire) et contiendra en entete les flags
183qui modifie la generation du code
184
185exemple
186#define Linux
187#define SOPHYA_DEBUG
188....
189
190Dans les fichier Makefile pour chaque module, on abandonnera
191les regles (et repertoire) de compilation par defaut et on aura
192donc:
193INC= $SOPHYAROOT/Include
194OBJ = $SOPHYAROOT/Objs
195LIB=...
196$(OBJ)toto.o : toto.cc $(INC)toto.h $(INC)titi.h ...
197 $CXX $CXXFLAGS -c -o $(OBJ)toto.o toto.cc
198....
199
200\end{verbatim}
201
202\section{BaseTools}
203\subsection{Namespace SOPHYA }
204Septembre 2004 :
205Suppression de {\tt using namespace SOPHYA ; } ds machdefs.h -
206Ajout fichier {\tt \#include "sopnamsp.h"} dans les .cc de SOPHYA,
207ainsi que lors de la gŽnŽration automatique du code (runxx, c++exec)
208
209\subsection{PPF}
210\begin{itemize}
211\item[\rond] Novembre 2003 (21/11/2003) - Ajout rawstream.h .cc \\
212Classes RawInOutStream , RawInFileStream , RawOutFileStream
213\item[\rond] DŽcembre 2003 - Ajout ppfbinstream.h .cc \\
214Classes PPFBinaryIOStream , PPFBinaryInputStream , PPFBinaryOutputStream
215\item[\rond] DŽcembre 2004 (9/12/2004) Fin de l'ensemble des modifs pour les
216PPF V3 \\
217- Ecriture nombre complexes r4, r8 avec tag spŽcifique. \\
218Tag de positionnement sous forme de \\
219\centerline{\tt <tag (1 byte)><FilePosition (8 byte, long int)> } \\
220- Ecriture PosTagTable \\
221- Ecriture Statistiques en fin de fichier \\
222- Voir BaseTools/ppfbinstream.h: \\
223\centerline{\tt GotoPositionTag(int\_8 pos) , }
224\centerline{\tt GetPosTagTable(...) }
225\centerline{\tt int\_8 WritePositionTag() PutPosTagTable(...) }
226- Ajout programme de test Tests/ppftswap.cc
227\end{itemize}
228
229\section{TArray}
230\begin{itemize}
231\item Optimisation de la multiplication matricielle (CMV) - Extrait du
232message (from CMV) du 30 Juillet 2004:
233\begin{verbatim}
234- on definit un flag d'optimisation
235 Contrairement a ce qu'on avait dit, je n'ai pas ajoute
236 un argument a Multiply car on ne peut pas jouer
237 avec qiand on utilise l'operateur * surcharge.
238 Or au vu des performance il'ma parut interessant que l'utilisateur
239 meme lambda puisse choisir le niveau d'optimisation
240 --> donc j'ai ajoute une methode statis dans BaseArray::
241 void BaseArray::SetMatProdOpt(uint_2);
242 uint_2 BaseArray::GetMatProdOpt();
243
244- Je n'ai refait les test de rapidite que sur OSF:
245
2461./ pour les matrices 1000x1000 (grosses)
247 on arrive effectivement au meme temps pour les 4 cas
248 si on copie dans le cas lent (FxC)
249 ---EndMultiply FxC CPUTime: Total= 93.1296 (Partial= 69.3806) Sec.
250 devient
251 ---EndMultiply FxC CPUTime: Total= 34.9653 (Partial= 11.1829) Sec.
252 exactement comme les copains:
253 La copie prend de la place mais ne prend absolument
254 pas de temps pour les grosses matrices
255
2562./ pour les matrices 10x10 (1000000 multiplications par cas)
257 on a bien ce que l'on attend a savoir que
258 la copie faites 100000 fois finie par nous faire perdre du temps
259 ---EndMultiply FxC CPUTime: Total= 37.4152 (Partial= 12.4662) Sec.
260 devient
261 ---EndMultiply FxC CPUTime: Total= 53.9978 (Partial= 28.8322) Sec.
262 dans ce cas on perd un gros facteur 2 a cause de la copie
263 mais rien de surprenant la dedans.
264
265-----------------------------------------------------------------------
266- ensuite j'ai implemente une prise de decision au niveau de
267l'optimisation pour les petites matrices:
268le test est simple mais me semble OK:
269je calcule sza taille du NDataBlock de A
270 szb B
271si ((sza+szb)*sizeof(T) < 100000 ) pas d'optimisation
272IDEE: on pifometre que raisonnablement il y a 100 koctets
273 de disponible pour les matrices A et B dans le cache processeur
274 et que dans ce cas elles sont copiees toutes les 2 dans le cache
275 par l'optimiseur du compilo qui est tres malin et surtout qui
276 veux absolument nous faire plaisir......
277
278-----------------------------------------------------------------
279===> Les resultats sont dans le fichier toto.calc en attached
280.. En tete tu as l'explication des flags d'optimisation
281...Avec les 2 sections:
282 GROSSE MATRICE
283 et
284 PETITE MATRICE
285\end{verbatim}
286
287\item Optimisation operations diverses, en particulier \\
2881) Remplacement des methodes Add/Sub/Mul/DivElt(a) par
289 Add/Sub/Mul/DivElt(TArray a, TArray res) \\
2902) Operateurs += -= A+B A-B TArray et TMatrix/TVecteur modifies en consequence
291\item Extrait de {\tt cvs log tarray.cc }
292{\small \begin{verbatim}
293----------------------------
294revision 1.38
295date: 2004/07/30 13:31:39; author: ansari; state: Exp; lines: +28 -24
296Diverses petites optimisations ds les methodes operations/affectations de TArray - Reza 30 Juillet 2004
297----------------------------
298----------------------------
299revision 1.36
300date: 2004/07/27 11:44:23; author: ansari; state: Exp; lines: +4 -1
301Corrections bug apres modifs methods Add/Sub/Mul/DivCst(x,res) - Reza 27 Juillet 2004
302----------------------------
303revision 1.35
304date: 2004/07/26 17:30:40; author: ansari; state: Exp; lines: +187 -108
305Remplacement methodes Add/Mul/Sub/Div(T x) par AddCst/MulCst/SubCst/DivCst(T x, TArray<T> res) ds TArray - Reza 26 Juillet 2004
306----------------------------
307\end{verbatim} }
308
309\item Extrait de {\tt cvs log tarray.cc }
310{\small \begin{verbatim}
311----------------------------
312revision 1.27
313date: 2004/07/30 10:24:12; author: cmv; state: Exp; lines: +97 -32
314- Intro decision auto d'optimisation produit de matrices
315- Possibilite a l'utilisateur pour choisir l'optimisation
316- cas FxC optimise par copie
317 cmv 30/07/04
318----------------------------
319revision 1.26
320date: 2004/07/29 12:31:16; author: ansari; state: Exp; lines: +7 -5
3211/ Remplacement des methodes Add/Sub/Mul/DivElt(a) par
322 Add/Sub/Mul/DivElt(TArray a, TArray res)
3232/ Operateurs += -= A+B A-B TArray et TMatrix/TVecteur modifies en consequence
3243/ Ajout methode TArray::ScalarProduct()
3254/ Methode TArray::SetT renomme en SetCst() SetT garde en alias
3265/ Ajout parametre bool fzero (mise a zero) ajoute ds constructeur et
327 ReSize() de TMatrix et TVecteur.
328 Reza 29/07/2004
329----------------------------
330revision 1.25
331date: 2004/07/29 08:40:49; author: cmv; state: Exp; lines: +148 -1
332Optimisation produit de matrice a la sauce cmv 29/07/04
333----------------------------
334\end{verbatim} }
335
336\end{itemize}
337
338\section{HiStats}
339\subsection{Classe HistoErr }
340Ajout classe HistoErr (Septembre-Octobre 2004)
341
342\subsection{ SuperNTuple (Message du 8 Juillet 2004) }
343\begin{verbatim}
344Classe Record ou DynamicStruct
345Record = Une ligne de ntuple - Un ensemble de noms de variables et de type
346(integer, float, double, ...)
347
348class Record {
349 AddField(string fieldname, fieldtype, defval);
350 ....
351}
352
353Le superntuple (classe DataTable ?) est cree avec un objet record configure.
354
355class DataTable {
356 DataTable(Record & rec);
357 Record GetRecord(); // On pourra l'utiliser pour remplir le NTuple
358 void Fill(Record& rec);
359 Record GetLine(int numline);
360 Vector GetColumn(string colname);
361 ....
362}
363
364Pour implementer la classe DataTable, je pense qu'il faut utiliser une
365classe intermediaire SwapDataBlock<T> et un DataSwapper
366
367Classe SwapDataBlock<T> ressemble au NDataBlock - sans les operations
368arithmetiques - par contre, il gere plusieurs block de donnees - on peut donc l'etendre.
369Dedans, au lieu d'avoir T * data, il a
370quelque chose du style vector<T *> * data_pointer_list;
371Un SwapDataBlock<T> qui n'a pas de DataSwapper associŽ, garde tous
372ses block de donnŽes en memoire.
373S'il y a un DataSwapper associe, il demande au data-swapper de 'sauver'
374(swaper) un bloc de donnees, avant de le reutiliser pour de nouvelles donnees,
375au dela d'un nombre maximum de blocs.
376
377La classe DataTable utilise alors un SwapDataBlock<T> pour chaque
378colonne de donnees.
379
380Le DataSwapper de base est une classe virtuelle.
381On pourra alors l'implementer en PPFDataSwapper et
382puis FITSDataSwapper ...
383\end{verbatim}
384
385\section{SkyMap , Samba }
386\subsection{Tests et vŽrifications des polynomes de Legendre}
387--> CMV
388
389\subsection{SphereECP}
390Extrait du message du 7 Septembre 2004
391\begin{verbatim}
392 J'ai mis dans la base (module SkyMap) le code de la classe
393SphereECP<T> (pixelisation avec projection cylindrique) - carte partielle et complete,
394+ gestionnaire PPersist + modifs adaptateur NomSkyMapAdaptor (PIext/ spiapp)
395
396Programme test (avec appel a transforme en Alm) ds Test/tsphereecp.cc
397Attention, mettre le parametere de pixelisation a -1 lors de l'appel a Generate pour eviter
398le Resize de la sphereECP
399ylmserver.GenerateFromCl(map, -1, clin, 0.);
400
401Dans piapp, c'est visualise par defaut en projection Molleweide
402On peut ajouter dans les options d'affichage :
403ecparray : affichage direct du tableau TArray des pixels (X:Phi, Y:Theta)
404Si option ecparray, on peut preciser en plus
405 - ecpscaledeg: echelle des axes en degres au lieu de pixels
406 - ecpscalerad: echelle des axes en radians au lieu de pixels
407Exemple:
408Cmd> disp mapecp 'ecparray ecpscaledeg zoomx2 stdaxes'
409\end{verbatim}
410
411\subsection{Bug non corrigŽ ds classe Circle}
412\begin{verbatim}
413From: Laurence Perotto <perotto@cdf.in2p3.fr>
414Date: Mon Jan 5, 2004 4:59:12 PM Europe/Paris
415To: Reza Ansari <ansari@lal.in2p3.fr>, Christophe Magneville <cmv@hep.saclay.cea.fr>
416Subject: un bug dans sophya...
417
418 Bonjour et bonne annee a tous les deux...
419
420 Je viens de trouver un ptit bug dans la fonction TanOnCircle de la classe Circle: Il
421s'agit d'un melange entre les coordonnees (beta, lambda) de Benoit et les (theta, phi)
422utilises dans Sophya. Lors du passage de l'un a l'autre, une transfo sin->cos a ete
423oubliee...
424 Voila...
425 Bonne journee.
426
427 Laurence.
428\end{verbatim}
429
430\section{SysTools}
431\subsection{Classe SOPHYA::Commander (module SysTools) }
432
433Classe d'interprŽteur de ligne de commande inspire de C-Shell,
434destine a etre incluee dans des applications C/C++. \\
435( Programme test Test/tcmd.cc )
436
437{\bf Mini guide de l'interpreteur - Message du 19 Mars 2004 } \
438
439\begin{itemize}
440
441\item[\rond] {\bf Gestion des variables } \\
442 - Les variables sont non typees toutes traitees comme des chaines
443de caracteres.
444 - Acces aux variables d'environnement -
445 - Un niveau variable d'environnement application est aussi prevu
446 - Toutes les variables de l'interpreteur sont traitees comme des vecteurs.
447extensibles automatiquement (difference avec le C-Shell)
448
449\item[\rond] {\bf Creation / initialisation de variables } \\
450\begin{verbatim}
451Cmd> set sv StringValue
452# Suppression d'une variable : unset ou clearvar
453Cmd> unset sv
454
455# Initialisation de type vecteur - Espace avant/apres ')' et avant ')' obligatoire
456Cmd> set vecv ( mot1 mot2 mot3 mot4 mot5 )
457#Calcul numerique : expression de type C - Espace avant/apres '=' obligatoire
458Cmd> a = 2+3*sqrt(4)
459# Le signe egal peut etre utilise pour attribuer une chaine de caracteres
460Cmd> a = 'Bonjour Madame'
461# Un element de tableau peut etre specifie avant le signe egal
462Cmd> vecv[2] = 'coucou'
463# Ou bien
464Cmd> i = 3
465Cmd> vecv[i] = 'Ooohhh'
466\end{verbatim}
467
468A droite du signe egal (membre de droite), les variables doivent etre
469adressees a l'aide du signe \$.
470
471Une chaine peut etre cassee en mots a l'aide de la commande var2words
472\begin{verbatim}
473Cmd> var2words varname wordvarname [separateur]
474\end{verbatim}
475
476\item[\rond] {\bf Acces aux variables } \\
477L'acces aux variables s'effectue par le signe \$ {\tt \$varname} .
478Les {\tt \$xxx} sont remplaces par le contenu de la variable xxx.
479Cette substitution ne s'effectue pas entre simple quotes {\tt ' ... \$xxx '},
480mais se fait entre double quotes {\tt " ... \$xxx ... "} . Les formes
481{\tt \${vname} } ou {\tt \$(vname)} peuvent etre utilisees.
482
483\begin{verbatim}
484Cmd> x = 'Hello'
485Cmd> echo $x
486# Taille d'une variable de type vecteur $#vname
487Cmd> set vx ( 111 2222 3333 444444 )
488Cmd> echo $#vx
489# Acces aux elements de tableau
490Cmd> echo $vx[0] $vx[1]
491# ou bien indexe par une variable
492Cmd> i = 2
493Cmd> echo $vx[i]
494# Une syntaxe particuliere: $[vname] retourne le contenu de
495# la variable dont le nom est ds vname
496Cmd> zzz = 'Commander'
497Cmd> xxx = 'zzz'
498Cmd> echo '$[xxx]= ' $[xxx]
499$[xxx]= Commander
500\end{verbatim}
501
502Variables d'environnement: L'acces aux variables d'environnement
503se fait simplement par{\tt \$varenvname}. Attention, les variables locales
504de l'interpreteur sont prioritaires.
505
506\item[\rond] {\bf Variables particulieres: } \\
507{\tt \$retval} ou {\tt \$retstr} : chaine specifee sur la derniere commande return
508{\tt \$status} : code de retour de la derniere commande executee.
509(variable existe et est rempli - mais il faudra se donner une regle
510plus claire ...)
511Arguments des fichiers .pic appeles par la commande exec
512{\tt \$\# } : nombre d'arguments, a part \$0
513{\tt \$0} nom du fichier ou du script
514{\tt \$1 \$2 \$3} .... les arguments (pour les scripts et les .pic (exec))
515
516
517\item[\rond] {\bf Structures de controle } \\
518\begin{verbatim}
519foreach f ( w1 w2 w3 ... )
520 ...
521 echo $f
522end
523\end{verbatim}
524
525Espace avant/apres '(' et avant ')' obligatoire.
526
527\begin{verbatim}
528foreach v vecname
529 ...
530 echo $v
531end
532\end{verbatim}
533
534Boucle de type integer:
535\begin{verbatim}
536for i startInt:endInt[:stepInt]
537 ....
538 echo $i
539end
540\end{verbatim}
541
542Boucle de type float
543\begin{verbatim}
544for f startFloat:endFloat[:stepFloat]
545 ....
546 echo $f
547end
548\end{verbatim}
549
550Boucle sur les lignes d'un fichier:
551\begin{verbatim}
552forinfile line FileName
553 ...
554 echo $line
555end
556\end{verbatim}
557
558Instruction {\tt break} pour casser une boucle
559
560\item[\rond] {\bf Les tests }
561\begin{verbatim}
562if ( test ) then
563endif
564
565if ( test ) then
566 ....
567else
568 ....
569endif
570\end{verbatim}
571
572Espace avant/apres '(' et avant ')' obligatoire.
573
574test de type {\tt a == b} OU {\tt a != b} OU {\tt a < b} OU {\tt a > b}
575OU {\tt a <= b} OU {\tt a >= b}
576les espaces avant l'operateur de comparaison sont obligatoires.
577{\tt ==} et {\tt !=} effectue une comparaison de chaines de caracteres.
578{\tt < , > , <= , >=}une comparaison apres conversion en valeur flottante.
579
580\item[\rond] {\bf Definition de script } \\
581\begin{verbatim}
582defscript scriptname [description ]
583 ....
584endscript
585\end{verbatim}
586
587L'appel a un script se fait simplement a l'aide
588du nom de script (contrairement aux fichiers
589de commande qui sont executes a l'aide de la
590commande {\tt exec} )
591\begin{verbatim}
592Cmd> scriptname arg1 arg2 arg3 ....
593\end{verbatim}
594
595L'instruction {\tt return} provoque l'arret (et le retour) d'execution d'un
596script ou d'un fichier de commandes.
597Commandes {\bf listscript }et {\bf clearscript scriptname}
598 permettet d'avoir la liste des scripts
599 definis / supprimer la definition d'un script
600
601\item[\rond] {\bf Autres commandes}
602\begin{itemize}
603\item Instruction {\bf echo } pour ecrire sur cout/stdout
604\item Instruction {\bf echo2file} pour ecrire a la fin d'un fichier
605\item Instruction {\bf sleep nsec} (attente de nsec seconds )
606\item Instructions {\bf timingon , timingoff , traceon , traceoff } \\
607%
608\item Commande {\bf exec commandfilename [arg1 arg2 ... ] }
609\item Commandes {\bf help et help keyword/commandname }
610\item Commandes {\bf listvars , listcommands }
611\item Defintion et liste d'alias : {\bf alias aliasname 'string ' } et {\bf listalias}
612\end{itemize}
613\end{itemize}
614
615\subsection{Classes CExpressionEvaluator et RPNExpressionEvaluator }
616\begin{itemize}
617\item[\rond] Ajout des classes RPNExpressionEvaluator et CExpressionEvaluator
618d'Žvaluation d'expressions numŽriques en notation polonaise inverse
619et avec la syntaxe C . Utilise dans la classe Commander.
620\item[\rond] Programme test Test/tcmd.cc
621\item[\rond] extrait de {\tt cvs log cexpre.cc }
622{\small \begin{verbatim}
623----------------------------
624revision 1.3
625date: 2004/03/18 18:15:19; author: ansari; state: Exp; lines: +10 -6
626Suite (presque finie) des modifications de l'interpreteur - gestion des variables en particulier - Reste au moins un bug ds CExpressionEvaluator - Reza 18/03/2004
627----------------------------
628revision 1.2
629date: 2004/03/16 08:47:48; author: ansari; state: Exp; lines: +5 -6
630suppression variables inutilisees ds cexpr.cc - Reza 16 Mars 2004
631----------------------------
632revision 1.1
633date: 2004/03/15 22:19:43; author: ansari; state: Exp;
634Ajout fichiers des classes RPNExpressionEvaluator et CExpressionEvaluator (expression arithmetiques) et MAJ du fichier Makefile et objlist.list - Reza 15 Mars 2003
635\end{verbatim} }
636
637\item[\rond] Extrait du message du 3 Mars 2004
638\begin{verbatim}
639Le code est base sur une hierarchie de classe d'expression :
640 Expr -------- NumberExp
641 --------- BinExp ------ AddExp
642 ------ MulExp
643 ------ SubExp
644 ------ DivExp
645 --------- FuncExp
646 --------- CExpressionEvaluator
647
648NumberExp : expression elementaire de nombre, sait actuellement traduire Pi et E
649 tres facile d'ajouter d'autres constantes
650BinExp: Classe d'operations binaires (deux operandes) a+b a-b a*b a/b
651 avec gestion de niveau de priorite des operateurs
652 On peut facilement ajouter d'autres operateurs binaires (par exemple
653 puissance ^ a^b ) - et les priorites relatives seront gerees en principe.
654FuncExp: classe d'expression fonctionnelle, avec n arguments f(x1,x2,...x3)
655 actuellemenent, n=0 a n=3 arguments et quelques fonctions
656 usuelles sont decodes ds cette classe (sin,cos,tan, asin, acos, atan, exp, log,
657 atan2, pow ) - voir ds le code
658
659CExpressionEvaluator : C'est la classe de haut niveau a utiliser -
660 la fonction de decodage de la chaine ASCII (qui utilise
661 les fonctionalites des differentes classes est la dedans
662 et ce n'est pas tres long.
663(+ une classe d'exception specifique).
664\end{verbatim}
665
666\end{itemize}
667
668\section{PI,PIext,piapp}
669\subsection{ Codage texte des options graphiques (11 Mars 2004)}
670\begin{verbatim}
671// Methode retournant un vecteur de string a partir des options
672virtual int PIDrawer::OptionToString(vector<string> & opt) const
673qui vient completer les deux methodes
674virtual int PIDrawer:: DecodeOptionString(vector<string> & opt, bool ...) et
675virtual void PIDrawer:: GetOptionsHelpInfo(string& info);
676Ces methodes s'occupent de decoder les options graphiques (et l'aide
677associe). La methode ajoutee permet de faire l'operation inverse, fabriquer
678une serie de chaine de caracteres a partir des options graphiques.
679Il y a aussi la methode
680virtual int PIWdgGen::OptionToString(vector<string> & opt) const
681que j'ai ajoute (rien a faire pour le moment) - ainsi que
682int PIGraphicAtt::AttToStrings(vector<string> & att) const.
683
684Peux-tu remplir la methode PIGraphicAtt::AttToStrings(vector<string> & att) const.
685L'implementation par defaut de PIDrawer::OptionToString(vector<string> & opt) const
686appelle PIGraphicAtt::AttToStrings() - a laisser donc tel quel.
687
688par contre, pour les autres drawer (PIYfXDrawer, PIFuncDrawer, PIElDrawer,
689PISurfaceDrawer, PIHisto, PIHisto2D, PINTuple ...) - lorsque
690DecodeOptionString(vector<string> & opt, bool ...) est modifie,
691rajouter la methode OptionToString(vector<string> & opt) et verifier le help.
692Attention, il ne faut pas mettre l'argument opt a zero, mais ajouter des chaines
693derriere (push_back()) afin de pouvoir cumuler les options de base + options
694specifiques.
695
696Comment tester ?
697Pour tester, tu peux utiliser la fenetre des options texte ou j'ai ajoute le bouton
698[GetOption] . Tu peux acceder a cette fenetre a partir de la fenetre des options
699graphiques <Alt>O , ou directement sur un objet de gestionnaire 2D - par
700<Alt>T - <Shift>Button-1 permet de selectionner le drawer actif
701\end{verbatim}
702
703\subsection{ Trace des axes (11 Mars 2004)}
704 Ajouter la possibilite de specifier l'origine (le point de croisement des axes)
705lorsque les axes ne sont pas de type 'box' - classes PIAxes et PIElDrawer.
706
707\subsection{ Selection graphique (souris) du drawer actif (11 Mars 2004)}
708\begin{verbatim}
709J'ai ajoute la methode PIDrawer::GetDistanceToPoint(double x, double y)
710// Renvoie une distance au point x,y
711// 0: au(x) point(s) le(s) plus proche(s) ... 1 au bord xmin/xmax , ymin/ymax
712// La methode par defaut calcule la distance normalisee au point ((xmin+xmax)/2,
713(ymin+ymax)/2)
714 virtual double PIDrawer::GetDistanceToPoint(double x, double y);
715
716ainsi que ce qu'il faut ds PIBaseWdgGen et ds PIDrawer pour exploiter cette
717methode + code permettant le test ds PIScDrawWdg.
718(virtual void PIDrawer::WdgCoord2DrwCoord(int x, int y, double& xu ...
719 virtual int PIBaseWdgGen:;FindNearestDrawerId(int x, int y) ...)
720Tu as a t'aoccuper de la methode PIDrawer::GetDistanceToPoint(double x, double y)
721qui doit etre redefinie si possible pour chaque drawer, afin de fournir une
722distance raisonnable au point (x,y) en argument.
723J'ai juste mis une implementation par defaut (ds PIDrawer) et une implementation
724partielle pour PIElDrawer (qui trace les axes en particulier) - qu'il faut
725completer.
726
727Comment tester ?
728J'ai mis ce qu'il faut ds le gestionnaire 2D (PIScDrawWdg) -
729<Shift>Button-1 choisit le drawer le plus proche (base sur la
730valeur de retour de PIDrawer::GetDistanceToPoint(double x, double y)
731comme drawer actif. Ce drawer est passe en 'highlight' pendant que
732le bouton est appuye.
733\end{verbatim}
734
735\subsection{ Manipulation interactive des drawers (3 Juin 2004) }
736La manipulation interactive des drawers (ˆ l'aide d'un menu) a
737ŽtŽ finalisŽe pour les PIImage PIScDrawWdg PI3DWdg .
738
739\begin{verbatim}
740 o <Alt>D affiche le menu avec les differentes option
741 o Move/Resize: Affichage du rectangle + rectangle milieu
742 (deplacement) + coin bas-droite (deplacement) -
743 clicker ailleurs pour finir
744 o Mouse Select : Le mouse select des drawers est gere
745 maintenant par un PIEventHandler (comme pour Move/ReSize)
746 Drawer actif affiche par le rectangle muni d'un petit coin
747 (petit carre + rond dedans, en bas a droite).
748 Click souris change eventuellement le drawer actif.
749 On termine en clickant ds le petit [carre+rond]
750\end{verbatim}
751
752\subsection{ Traceur de bar-graph (classe PIBarGraph) (3 Juin 2004) }
753Ajout du traceur de bar-graph (classe {\bf PIBarGraph}) ds module PI/
754et commande {\tt bargraph} ds PIext/basexecut.cc .
755La commande bargraph ne gere pas encore toutes les possibilites
756de la classe PIBarGraph. \\
757Exemple d'utilisation:
758\begin{verbatim}
759Cmd> bargraph ' ' -10. 15. 22. 8. 33. 7 -4.
760Cmd> bargraph 'blue ' -10. 15. 22. 8. 33. 7 -4.
761Cmd> bargraph 'blue horizontalbars' -10. 15. 22. 8. 33. 7 -4.
762Cmd> bargraph 'blue horizontalbars barvaluelabel ' -10. 15. 22. 8. 33. 7 -4.
763Cmd> bargraph 'blue verticalbars nofill barvaluelabel ' -10. 15. 22. 8. 33. 7 -4.
764Cmd> bargraph 'font=times,bold,16 blue verticalbars nofill barvaluelabel ' \
765 -10. 15. 2 2. 8. 33. 7 -4.
766Cmd> bargraph 'font=times,bold,16 blue verticalbars fill barvaluelabel packfrac=0.8' \
767 -10. 15. 22. 8. 33. 7 -4.
768\end{verbatim}
769
770\subsection{ Traceur de lignes de texte (classe PITextDrawer) (3 Juin 2004) }
771
772Ajout d'une classe de traceur de lignes de texte (classe {\bf PITextDrawer}) et commande
773{\tt textdrawe}r ds PIext/basexecut.cc . Mais le traceur (et sa commande)
774doivent etre completes. \\
775Exemple d'utilisation:
776\begin{verbatim}
777# On affiche qque chose
778Cmd> openppf demo.ppf
779Cmd> disp h1d
780Cmd> textdrawer 'frame line=solid,2 font=times,bold,16 red inset' \
781 ' Christophe ' ' Reza Ansari' ' SOPHYA '
782\end{verbatim}
783
784\subsection{ Gestion de re-scale-ing des axes en 3D (3 Juin 2004) }
785
786Mise en place complete (?) de la gestion de re-scale-ing des axes en 3D
787avec gestion des options graphiques (texte) - Il est possible en particulier d'imposer
788les limites de la boites 3D.
789cela a ete une grosse prise de tete de tout un apres-midi.
790J'ai eu ensuite mal a la tete une partie de la soiree ! \\
791Exemple d'utilisation:
792
793\begin{verbatim}
794
795# On ouvre le fichier demo.ppf
796Cmd> openppf demo.ppf
797Cmd> surf mtx1 'colbr32'
798Cmd> surf mtx1 'colbr32 noautoscale'
799Cmd> surf mtx1 'colbr32 lim3dbox=-10,60,-10,60,-3,15 autoscale3dbox'
800# Affichage avec superposition
801Cmd> nt3d nt32 x y z - - - - - 'marker=circle,7 red'
802Cmd> nt3d nt32 x y z - - - - - 'same marker=cross,5 blue '
803# Ou bien :
804Cmd> nt3d nt32 x y z - - - - - 'marker=circle,7 red noautoscale'
805Cmd> nt3d nt32 x y z - - - - - 'same marker=cross,5 blue '
806
807\end{verbatim}
808\subsection{piapp}
809\begin{itemize}
810\item Le multithreading a ŽtŽ mis en oeuvre dans piapp (janvier 2004).
811\item Il faut par contre ajouter des possibilitŽs de controle du thread
812d'execution des commandes.
813\item Extrait de {\tt cvs log pistdimgapp.cc } :
814\begin{verbatim}
815revision 1.71
816date: 2004/09/07 07:10:18; author: ansari; state: Exp; lines: +35 -0
817Ajout bloc try/catch ds piacmd.cc (thread execution commandes) et ds pistdimgapp.cc (
818methode process, thread boucle d'evts) - Reza 07/09/2004
819----------------------------
820revision 1.70
821date: 2004/01/06 18:44:56; author: ansari; state: Exp; lines: +11 -1
822 Suite debugging gestion lock entre threads ds piapp - A l'air de
823marcher sur OSF1 et Linux ... Reza 06/01/2004
824----------------------------
825revision 1.69
826date: 2004/01/06 17:05:25; author: ansari; state: Exp; lines: +33 -7
827Suite debug piapp multithread : on ne peut pas utiliser ZSync() ds un if (destructeur
828 appele de suite) - Reza 06/01/2004
829----------------------------
830revision 1.68
831date: 2004/01/04 19:02:43; author: ansari; state: Exp; lines: +43 -13
832Suite des modifs pour piapp multi-threads
8331) Ajout Mutex de synchronisation ds ls classe NamedObjMgr
8342) Suite controle de gestion d'appel aux methodes de PIStdImgApp depuis
835la classe elle-meme, a travers le NamedObjMgr
8363) Modification de la boucle d'evenements, avec un thread de reveil
837periodique
838 Reza, 4 Janvier 2004
839\end{verbatim}
840\item Extrait de {\tt cvs log pistdimgapp.cc } :
841\begin{verbatim}
842----------------------------
843revision 1.62
844date: 2003/11/27 10:51:58; author: ansari; state: Exp; lines: +45 -20
845Suite modification/adaptations a la classe PIACmd qui herite maintenent de SOPHYA::Co
846mmander - Reza 27/11/2003
847----------------------------
848revision 1.61
849date: 2003/11/26 23:01:55; author: ansari; state: Exp; lines: +20 -1755
850Modification du code de PIACmd : La classe PIACmd herite maintenant de la classe Comm
851ander (de SysTools) - Reza 26/11/2003
852----------------------------
853revision 1.60
854date: 2003/07/21 21:13:10; author: cmv; state: Exp; lines: +3 -3
855- introduction notion de numero de ligne dans expression ntuple
856 modif prototype PlotExprFunc NTLoopExprFunc (add _nl _nstart _nend)
857 modif int_4 -> int_8_exprf (long long) pour _nl (DecodeLoopParameters,
858 PrepareNTExpressionCFile, LinkExprFunc,...)
859- doc pour _nl _nstart _nend et arragement repartition RegisterHelp/RegisterCommand
860 (rz + cmv 21/7/2003)
861----------------------------
862\end{verbatim}
863\end{itemize}
864
865\section{Documentation (Manual/) }
866Documentation des classes de SysTools. \\
867Extrait message du 12 Aout 2004 : \\
868\begin{verbatim}
869---> Au sujet de la doc (Manual/)
870 J'ai installe doxygen sur le Mac, version 1.3.8 -
871 Il faut updater le fichier de config de depart (dox_sophya.conf)
872 Pour ma part, j'ai du modifier mkmf (en version privee) -
873 En effet, il n'y avait pas le program doxysearch - Je ne sais pas si c'est general
874 ou specifique Mac.
875
876 J'ai aussi modifie certaines options de doxygen (en version privee)
877 EXTRACT_LOCAL_CLASSES --> NO (au lieu de YES)
878 DETAILS_AT_TOP ---> YES (au lieu de No)
879 SORT_MEMBER_DOCS ---> NO (au lieu de YES)
880
881 Si on es d'accord, on peut modifier ces options ds le fichier dox_sophya.conf et
882 utiliser la fonction update de doxygen (doxygen -u)
883\end{verbatim}
884
885\section{Plan de modifs pour SOPHYA V 2.0 PI/piapp V 4.0 (Septembre 2003) }
886\subsection{Gestion du code (Mgr/ ) }
887\begin{verbatim}
888
889 o Chemins/variables d'environnement
890 - Remplacer DPCDEVREP DPCBASEREP par SOPHYADEVREP et SOPHYABASEREP
891 - Remplacer EROSCXX par SOPHYACXX (?)
892 o Simplifier/rationaliser les makefiles
893 - Mettre les flags de compils pour chaque compilo-systeme dans un fichier au lieu
894 d'avoir tout Makefile.h
895 Exemple fichier Mgr/linux_g++.flags
896 CPPFLAGS = ...
897 CXXFLAGS = ...
898 LIBS = ...
899
900o Mettre un script pour chercher les lib externes (c-fitsio, FFTW, ...) et creer
901 eventuellement l'arborescence ExtLibs
902
903o Inclure la definition des flags influant sur le code (comme
904 -DOSF1/Linux/Darwin/IRIX64
905 SO_BOUNDCHECKING a la fin du fichier machdefs.h que l'on fabriquera a
906 partir de du machdef_mkmf.h )
907 PB-> ce fichier deviendra alors dependant du systeme et de l'installation !
908 Faut-il deplacer alors Include/ sous uname-$EROSCXX (Linux-g++)
909 ou carrement considerer que la separation pour differents systemes doit se faire au
910 niveau de SOPHYADEV/BASE/REP ?
911
912o Abandonner (?) les regles de compilation par defaut
913 Inclure dans les Makefile la ligne de commande :
914 $(OBJ)toto.o : toto.cc toto.h titi.h ...
915 $(COMPILECXX) -$(CPPFLAGS) $(CXXFLAGS) -c -o $(OBJ)toto.o toto.cc
916
917o Garder les Makefile simple (eviter trop de tests et syntaxe complique)
918
919\end{verbatim}
920
921\subsection{Code/Librairie SOPHYA $\rightarrow$ V 2.0)}
922\begin{verbatim}
923
924o Fichiers PPersist (BaseTools) :
925 - Ajouter la possibilite d'ecrire des complex(r_4> complex<r_8>
926 (actuellement c'est ecrit sous forme de 2*r_4 ou 2*r_8)
927 - Ajouter des tag de positionnement qui pourrait servir au cas
928 ou on utiliserait le fichier PPF comme fichier de swap
929 Ces tags ne peuvent pas etre les memes que les name-tag
930 existant actuellement.
931 Une utilisation annexe de ces tags peut etre alors un moyen
932 de verifier que le fichier n'est pas corrompu
933 Ce tag se presente alors sous forme de
934 <tag (1 byte)><FilePosition (8 byte, long int)>
935 On peut alors parcourir le fichier et verifier la coherence de
936 ces tags.
937 - Il faut aussi ajouter au niveau de POutPersist et PInPersist
938 les services pour ecrire et lire une collection de tag de
939 positionnement, afin qu'un objet puisse utiliser une liste de
940 tag pour se positionner
941
942o BaseTools/ Voir autres remarques ds fichier Manual/sophya_afaire.txt
943 concernant en particulier les NDataBlock<T> DataBlock<T> ...
944
945o Les tableaux : TArray/
946 - Ajouter une classe de base abstraite GenericMatrix<T>
947 avec methode d'acces aux elements, nb de lignes, nb de colonnes,
948 ...
949 - Introduire les TinyMatrix (TinyMatrix<T, int L, int C>)
950 avec passage de/vers TMatrix<T> (et TinyVector<T, int N>) ?
951
952 - Introduire des matrices creuses simples SpareMatrix<T>
953
954 - Introduire les DiagonalMatrix<T>
955
956 Remarque: Les TMatrix TinyMatrix et SparseMatrix heritent de GenericMatrix
957
958o HiStats
959 - Faire une classe SuperNTuple (!), facile a utiliser, sachant swaper sur les
960 PPF, avec des champs de differents type
961
962o IFFTW/
963 - Passage a FFTW 3.x ?
964
965o Voir autres remarques pour l'ensemble des modules ds Manual/sophya_afaire.txt
966\end{verbatim}
967
968\subsection{Code/Librairie PI ($\rightarrow$ V 4.0)}
969\begin{verbatim}
970
971o Menu contextuel pour les Drawers
972 - Ajouter a PIImage, PIScrDrawWdg(2D), PIDraw3DWdg(3D) un menu obtenu
973 sur <Shift><Bouton-1> par exemple, avec la liste de tous les Drawers
974 permettant d'afficher la fenetre des options graphiques, ou le fenetre
975 des options ou la fenetre des options texte, activer deplacement/resize
976 des drawers, suppression (delete) ou detach des drawers, et en fonction
977 du widgets, la fenetre des axes ou de controle d'image
978
979o Mettre l'option auto-scale (rapport entre axes X,Y,Z) pour les Drawers3D
980 verifer/debugger la definition de la boite 3D au niveau des Drawers3D
981
982o Traceur d'histos, NTuples, ...
983 Remplacer le trace des lignes par morceau fait par appel multiples
984 a DrawLine a un seul appel a DrawPolygon (si les lignes sont connectes
985 bien sur) --> Ca ameliore sensiblement l'aspect pour le trace en pointille
986
987o Ajouter un traceur de Bar-chart 2D OU ApplePie (facile !)
988 On donne une serie de nombres, serie de couleur, + serie de strings
989 et on trace alors une sorte d'histo, avec des barres (rectangles) espaces
990 Ou bien on trace un cercle divise en zones
991
992o Ajouter un traceur de Lego-Plot
993
994o PIImageWindow (Une fenetre avec une PIImage, un Zoom et une vue globale)
995 Assemblage
996
997o (?) Une fonction pour faire facilement une fenetre d'alerte ou d'info (?)
998
999\end{verbatim}
1000
1001\subsection{(s)piapp ($\rightarrow$ V 4.0)}
1002\begin{verbatim}
1003
1004o Verifier l'interpreteur et introduire le type de variable vecteur
1005 qui peut etre detecte par exemple lors de l'initialisation par set
1006 set a 'Bonjour CMV' # -> variable scalaire
1007 set va [ 12 14 hello ... ] # variable de type vecteur $va[]
1008
1009o Voir comment on pourrait "joindre" deux objets ayant l'interface NTupleInterface
1010 pour pouvoir plotter des objets, l'un vs l'autre
1011
1012o Separer la classe PIACmd en une classe de base (CShellLikeInterpreter)
1013 (a mettre ds SysTools) et la classe PIACmd a laisser ds PIext
1014
1015o (???) Introduire quelque chose du style
1016 AddDialogue("Cmd", "dialogue-description)
1017 qui pourrait fabriquer automatiquement une fenetre avec des champs a remplir
1018 pour les commandes usuelles (???)
1019
1020o Voir les autres commentaires ds Manual/spiapp_afaire.txt
1021
1022\end{verbatim}
1023
1024
1025\end{document}
Note: See TracBrowser for help on using the repository browser.