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

Last change on this file since 3280 was 3280, checked in by ansari, 18 years ago

Fichier modifs.tex pour V=2.135 - Reza 05/07/2007

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