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

Last change on this file since 3050 was 3050, checked in by ansari, 19 years ago

Mise a jour fichier modifs.tex - Reza 11/08/2006

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