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

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

MAJ fichier liste de modifs - suite modifs TimeStamp et DataTable - Reza 8/11/2005

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