Changeset 2829 in Sophya


Ignore:
Timestamp:
Nov 2, 2005, 11:13:35 AM (20 years ago)
Author:
ansari
Message:

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

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/SophyaLib/Manual/modifs.tex

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