Changeset 2829 in Sophya for trunk/SophyaLib/Manual
- Timestamp:
- Nov 2, 2005, 11:13:35 AM (20 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/SophyaLib/Manual/modifs.tex
r2717 r2829 31 31 {\Large \bf Liste de modifications de SOPHYA } \\[5mm] 32 32 { \large (fait ou faire ) } \\ 33 {\large Janvier 2003 - Mai2005 } \\[25mm]33 {\large Janvier 2003 - Novembre 2005 } \\[25mm] 34 34 Liste des tags et dates : \\[5mm] 35 35 {\large … … 42 42 V = 1.5 & \hspace{10mm} & Dcembre 2002 \\ 43 43 V = 1.7 & \hspace{10mm} & Septembre 2003 \\ 44 V = 1.9 & \hspace{10mm} & Juin 2005 - SANS tag CVS \\ 45 44 46 \end{tabular} 45 47 } … … 51 53 \newpage 52 54 55 \section{BuildMgr} 56 Avril-Mai 2005 : Introduction de la nouvelle version de 57 scripts de gestion du code - avec un script principal configure. \\ 58 Variable d'environnement {\bf SOPHYABASE } - \\ 59 Pour les makefiles, l'ensemble des dfinitions se trouve dans : \\ 60 SOPHYABASE/include/sophyamake.ic \\ 61 62 \section{BaseTools} 63 \subsection{Modifs} 64 65 \begin{itemize} 66 \item[\rond] Octobre 2005 : \\ 67 1/ Correction bug TimeStamp::ToDays() + petites amelioration \\ 68 2/ Prise en compte du type TimeStamp dans MuTyV (sous forme de double en interne) \\ 69 3/ Adaptation DVList a modifs MuTyV (typ TimeStamp) et R/W PPersist \\ 70 % 71 \item[\rond] Septembre 2004 - {\bf Namespace SOPHYA } \\ 72 Suppression de {\tt using namespace SOPHYA ; } ds machdefs.h - 73 Ajout fichier {\tt \#include "sopnamsp.h"} dans les .cc de SOPHYA, 74 ainsi que lors de la gnration 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 \\ 80 Classes RawInOutStream , RawInFileStream , RawOutFileStream 81 \item[\rond] Dcembre 2003 - Ajout ppfbinstream.h .cc \\ 82 Classes PPFBinaryIOStream , PPFBinaryInputStream , PPFBinaryOutputStream 83 \item[\rond] Dcembre 2003 (9/12/2003) Fin de l'ensemble des modifs pour les 84 PPF V3 \\ 85 - Ecriture nombre complexes r4, r8 avec tag spcifique. \\ 86 Tag 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 96 la 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) 101 modification programme scanppf: ajout option -lh -lho pour lister les classes PP 102 ersist 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 - 110 calcul de duree. - Ajout du prog. test Tests/ttimestamp.cc (Mars 2003) 111 \item[\rond] { \bf Segmented Data Block :} \\ 112 Mars-Avril 2005: Introduction des classes similaires aux NDataBlock, mais permettant 113 de gerer des blocs de donnees segementes, pour tout type de donnees, de structures 114 et 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>} ) 117 pour la gestion de blocs de donnees segmentes (segdatablock.h) et son 118 gestionnaire PPF {\tt FIO\_SegDataBlock<T>} (fichier fiosegdb.h ) 119 \item Ajout de la classe {\tt SwSegDataBlock<T>} (Data bloc segmente avec gestion 120 de swap) et la classe swapper PPF {\tt PPFDataSwapper<T>} (fichiers 121 ppfswapper.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 130 message (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 144 1./ 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 154 2./ 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 165 l'optimisation pour les petites matrices: 166 le test est simple mais me semble OK: 167 je calcule sza taille du NDataBlock de A 168 szb B 169 si ((sza+szb)*sizeof(T) < 100000 ) pas d'optimisation 170 IDEE: 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 \\ 186 1) Remplacement des methodes Add/Sub/Mul/DivElt(a) par 187 Add/Sub/Mul/DivElt(TArray a, TArray res) \\ 188 2) 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 ---------------------------- 192 revision 1.38 193 date: 2004/07/30 13:31:39; author: ansari; state: Exp; lines: +28 -24 194 Diverses petites optimisations ds les methodes operations/affectations de TArray - Reza 30 Juillet 2004 195 ---------------------------- 196 ---------------------------- 197 revision 1.36 198 date: 2004/07/27 11:44:23; author: ansari; state: Exp; lines: +4 -1 199 Corrections bug apres modifs methods Add/Sub/Mul/DivCst(x,res) - Reza 27 Juillet 2004 200 ---------------------------- 201 revision 1.35 202 date: 2004/07/26 17:30:40; author: ansari; state: Exp; lines: +187 -108 203 Remplacement 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 ---------------------------- 210 revision 1.27 211 date: 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 ---------------------------- 217 revision 1.26 218 date: 2004/07/29 12:31:16; author: ansari; state: Exp; lines: +7 -5 219 1/ Remplacement des methodes Add/Sub/Mul/DivElt(a) par 220 Add/Sub/Mul/DivElt(TArray a, TArray res) 221 2/ Operateurs += -= A+B A-B TArray et TMatrix/TVecteur modifies en consequence 222 3/ Ajout methode TArray::ScalarProduct() 223 4/ Methode TArray::SetT renomme en SetCst() SetT garde en alias 224 5/ Ajout parametre bool fzero (mise a zero) ajoute ds constructeur et 225 ReSize() de TMatrix et TVecteur. 226 Reza 29/07/2004 227 ---------------------------- 228 revision 1.25 229 date: 2004/07/29 08:40:49; author: cmv; state: Exp; lines: +148 -1 230 Optimisation 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 } 238 Ajout classe HistoErr (Septembre-Octobre 2004) 239 240 \subsection{NTuple} 241 la classe NTuple peut maintenant avoir des colonnes float ou double. 242 Il y a maintenant deux methodes Fill(r\_4 *) et Fill(r\_8 *) 243 Les noms ne sont plus limites a 8 caracteres. 244 245 246 \subsection{ Les DataTable (SuperNTuple) } 247 248 \begin{verbatim} 249 BaseDataTable 250 -------- DataTable 251 -------- SwPPFDataTable 252 \end{verbatim} 253 254 \noindent {\bf BaseDataTable} : Classe de base, avec qques methodes virtuelles 255 pures, implementent la presque totalite des fonctionalites, en particulier 256 celles de l'interface NTupleInterface. 257 258 \noindent {\bf DataTable} : Implementation concrete de BaseDataTable avec donnees en 259 memoire \\ 260 (utilise SegDataBlock$<$T$>$ pour stocker les colonnes) 261 262 \noindent {\bf SwPPFDataTable} : Implementation concrete de BaseDataTable avec donnees 263 en swap sur stream PPF (POutPersist)- \\ 264 Utilise (SwSegDataBlock$<$T$>$ avec 265 un data-swapper PPF (classe PPFDataSwapper$<$T$>$ ) 266 267 DataTable et SwPPFDataTable respecte +/- les conventions SOPHYA , 268 constructeur de copie avec partage ou copie de donnees, operateur = 269 Datatable : partage et copie , = : fait une copie 270 SwPPFDataTable : C'est toujours partage (presque par definition) 271 Autre point, compte tenu de la structure des streams PPF , 272 les SwPPFDataTable fonctionne en ecriture OU en lecture, mais 273 pas les deux a la fois. 274 275 Classe de gestion de persistence commune : \\ 276 {\bf ObjFileIO$<$BaseDataTable$>$ } 277 278 Lit et ecrit les DataTable et SwPPFDataTable 279 Actuellement, on ne peut les relires que dans le meme type, 280 cad on ne peut relire avec un SwPPFDataTable un objet 281 ecrit comme DataTable - mais cette possibilite pourra 282 peut-etre codee ulterieurement (d'ou l'interet en particulier 283 d'un gestionnaire commun ObjFileIO$<$BaseDataTable$>$ 284 285 (les operateurs habituel $<<$ et $>>$ sur PIn/OutPersist sont definies) 286 287 Actuellement, les colonnes peuvent etre de type \\ 288 {\tt int\_4 , int\_8 , r\_4 , r\_8 , string } \\ 289 On pourra ajouter apres les types suivants : \\ 290 {\tt complex<r\_4> , complex<r\_8> , TimeStamp } 291 292 Dans 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 297 Par contre, les merges et copie sont prevues, 298 on doit en principe pouvoir ecrire par exemple: 299 \begin{verbatim} 300 SwPPFDataTable swdt; 301 PInPersist pis("swdt.ppf"); 302 pis >> swdt; 303 DataTable dt; 304 dt = swdt; // Pour tout charger en memoire 305 \end{verbatim} 306 307 On peut aussi ajouter des methodes d'acces aux variables membres pour enrichier l'interface. 308 309 {\bf PLUS IMPORTANT : } \\ 310 Il reste a ecrire la classe FITS\_BaseDataTable ou FITS\_DataTable 311 pour I/O sur fichiers FITS - j'ai regarde {\tt FITS\_XNTuple} qu'on pourra simplifier enormement 312 et que devrait etre assez rapide. 313 Il 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 315 tout ce qui est commun a {\tt SwFITSDataTable et SwPPFDataTable} , mais a voir. 316 L'element cle sera le codage de {\tt FITSDataSwapper<T>} qui implemente 317 les deux methodes de {\tt DataSwapperInterface<T>} - le reste devrait etre du copier/coller 318 essentiellement. 319 320 {\bf DataTable cote PIAPP :} \\ 321 Cote piapp, les DataTable et SwPPFDataTable sont pris en charge par 322 {\tt NOMAdapter\_DataTable} (qui prend en charge tous les 'BaseDataTable' ) 323 Il faudrait peut-etre rajouter deux commandes : \\ 324 newdt ou newdatatable 325 newdt ncol col1 [col2 .... ] \\ 326 avec possibilite de specifier coli sous fome de X:colname ou X = D,F,S,I,L ... 327 et puis dtfromascii ... 328 329 Voir Tests/tnt.cc pour exemple d'utilisation : 330 \begin{verbatim} 331 DataTable dt(64); 332 dt.AddIntegerColumn("line"); 333 dt.AddDoubleColumn("x"); 334 dt.AddFloatColumn("f_sin"); 335 MuTyV rec[10]; 336 for(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 347 Pour SwPPFDataTable, il faut juste creer un stream PPF avant, qui doit rester 348 ouvert 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 vrifications des polynomes de Legendre} 357 --> CMV 358 359 \subsection{SphereECP} 360 Extrait du message du 7 Septembre 2004 361 \begin{verbatim} 362 J'ai mis dans la base (module SkyMap) le code de la classe 363 SphereECP<T> (pixelisation avec projection cylindrique) - carte partielle et complete, 364 + gestionnaire PPersist + modifs adaptateur NomSkyMapAdaptor (PIext/ spiapp) 365 366 Programme test (avec appel a transforme en Alm) ds Test/tsphereecp.cc 367 Attention, mettre le parametere de pixelisation a -1 lors de l'appel a Generate pour eviter 368 le Resize de la sphereECP 369 ylmserver.GenerateFromCl(map, -1, clin, 0.); 370 371 Dans piapp, c'est visualise par defaut en projection Molleweide 372 On peut ajouter dans les options d'affichage : 373 ecparray : affichage direct du tableau TArray des pixels (X:Phi, Y:Theta) 374 Si 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 377 Exemple: 378 Cmd> disp mapecp 'ecparray ecpscaledeg zoomx2 stdaxes' 379 \end{verbatim} 380 381 \subsection{Bug non corrig ds classe Circle} 382 \begin{verbatim} 383 From: Laurence Perotto <perotto@cdf.in2p3.fr> 384 Date: Mon Jan 5, 2004 4:59:12 PM Europe/Paris 385 To: Reza Ansari <ansari@lal.in2p3.fr>, Christophe Magneville <cmv@hep.saclay.cea.fr> 386 Subject: 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 391 s'agit d'un melange entre les coordonnees (beta, lambda) de Benoit et les (theta, phi) 392 utilises dans Sophya. Lors du passage de l'un a l'autre, une transfo sin->cos a ete 393 oubliee... 394 Voila... 395 Bonne journee. 396 397 Laurence. 398 \end{verbatim} 399 400 \section{SysTools} 401 \subsection{Classe SOPHYA::Commander (module SysTools) } 402 403 Mars-Avril 2004 : 404 Classe d'interprteur de ligne de commande inspire de C-Shell, 405 destine a etre incluee dans des applications C/C++. \\ 406 ( Programme test Test/tcmd.cc ) \\ 407 Avril 2005 : Introduction de la possibilite d'execution de commandes 408 en multithreads \\ 409 Avril 2005 : Controle strict sur les noms de variables, limites 410 aux caracteres alphanumeriques + underscore - Adaptation 411 de 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 419 de 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. 423 extensibles automatiquement (difference avec le C-Shell) 424 425 \item[\rond] {\bf Creation / initialisation de variables } \\ 426 \begin{verbatim} 427 Cmd> set sv StringValue 428 # Suppression d'une variable : unset ou clearvar 429 Cmd> unset sv 430 431 # Initialisation de type vecteur - Espace avant/apres ')' et avant ')' obligatoire 432 Cmd> set vecv ( mot1 mot2 mot3 mot4 mot5 ) 433 #Calcul numerique : expression de type C - Espace avant/apres '=' obligatoire 434 Cmd> a = 2+3*sqrt(4) 435 # Le signe egal peut etre utilise pour attribuer une chaine de caracteres 436 Cmd> a = 'Bonjour Madame' 437 # Un element de tableau peut etre specifie avant le signe egal 438 Cmd> vecv[2] = 'coucou' 439 # Ou bien 440 Cmd> i = 3 441 Cmd> vecv[i] = 'Ooohhh' 442 \end{verbatim} 443 444 A droite du signe egal (membre de droite), les variables doivent etre 445 adressees a l'aide du signe \$. 446 447 Une chaine peut etre cassee en mots a l'aide de la commande var2words 448 \begin{verbatim} 449 Cmd> var2words varname wordvarname [separateur] 450 \end{verbatim} 451 452 \item[\rond] {\bf Acces aux variables } \\ 453 L'acces aux variables s'effectue par le signe \$ {\tt \$varname} . 454 Les {\tt \$xxx} sont remplaces par le contenu de la variable xxx. 455 Cette substitution ne s'effectue pas entre simple quotes {\tt ' ... \$xxx '}, 456 mais se fait entre double quotes {\tt " ... \$xxx ... "} . Les formes 457 {\tt \${vname} } ou {\tt \$(vname)} peuvent etre utilisees. 458 459 \begin{verbatim} 460 Cmd> x = 'Hello' 461 Cmd> echo $x 462 # Taille d'une variable de type vecteur $#vname 463 Cmd> set vx ( 111 2222 3333 444444 ) 464 Cmd> echo $#vx 465 # Acces aux elements de tableau 466 Cmd> echo $vx[0] $vx[1] 467 # ou bien indexe par une variable 468 Cmd> i = 2 469 Cmd> echo $vx[i] 470 # Une syntaxe particuliere: $[vname] retourne le contenu de 471 # la variable dont le nom est ds vname 472 Cmd> zzz = 'Commander' 473 Cmd> xxx = 'zzz' 474 Cmd> echo '$[xxx]= ' $[xxx] 475 $[xxx]= Commander 476 \end{verbatim} 477 478 Variables d'environnement: L'acces aux variables d'environnement 479 se fait simplement par{\tt \$varenvname}. Attention, les variables locales 480 de 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 486 plus claire ...) 487 Arguments 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} 495 foreach f ( w1 w2 w3 ... ) 496 ... 497 echo $f 498 end 499 \end{verbatim} 500 501 Espace avant/apres '(' et avant ')' obligatoire. 502 503 \begin{verbatim} 504 foreach v vecname 505 ... 506 echo $v 507 end 508 \end{verbatim} 509 510 Boucle de type integer: 511 \begin{verbatim} 512 for i startInt:endInt[:stepInt] 513 .... 514 echo $i 515 end 516 \end{verbatim} 517 518 Boucle de type float 519 \begin{verbatim} 520 for f startFloat:endFloat[:stepFloat] 521 .... 522 echo $f 523 end 524 \end{verbatim} 525 526 Boucle sur les lignes d'un fichier: 527 \begin{verbatim} 528 forinfile line FileName 529 ... 530 echo $line 531 end 532 \end{verbatim} 533 534 Instruction {\tt break} pour casser une boucle 535 536 \item[\rond] {\bf Les tests } 537 \begin{verbatim} 538 if ( test ) then 539 endif 540 541 if ( test ) then 542 .... 543 else 544 .... 545 endif 546 \end{verbatim} 547 548 Espace avant/apres '(' et avant ')' obligatoire. 549 550 test de type {\tt a == b} OU {\tt a != b} OU {\tt a < b} OU {\tt a > b} 551 OU {\tt a <= b} OU {\tt a >= b} 552 les 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} 558 defscript scriptname [description ] 559 .... 560 endscript 561 \end{verbatim} 562 563 L'appel a un script se fait simplement a l'aide 564 du nom de script (contrairement aux fichiers 565 de commande qui sont executes a l'aide de la 566 commande {\tt exec} ) 567 \begin{verbatim} 568 Cmd> scriptname arg1 arg2 arg3 .... 569 \end{verbatim} 570 571 L'instruction {\tt return} provoque l'arret (et le retour) d'execution d'un 572 script ou d'un fichier de commandes. 573 Commandes {\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)} \\ 591 Possibilite 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 597 pour des commandes "thread-safe". 598 La plupart de nos commandes de piapp sont \\ 599 - soit trop rapide, \\ 600 - soit non "thread-safe" \\ 601 602 \item[\rond] controle d'execution : \\ 603 Possibilite 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 612 d'valuation d'expressions numriques en notation polonaise inverse 613 et 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 ---------------------------- 618 revision 1.3 619 date: 2004/03/18 18:15:19; author: ansari; state: Exp; lines: +10 -6 620 Suite (presque finie) des modifications de l'interpreteur - gestion des variables en particulier - Reste au moins un bug ds CExpressionEvaluator - Reza 18/03/2004 621 ---------------------------- 622 revision 1.2 623 date: 2004/03/16 08:47:48; author: ansari; state: Exp; lines: +5 -6 624 suppression variables inutilisees ds cexpr.cc - Reza 16 Mars 2004 625 ---------------------------- 626 revision 1.1 627 date: 2004/03/15 22:19:43; author: ansari; state: Exp; 628 Ajout 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} 633 Le 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 642 NumberExp : expression elementaire de nombre, sait actuellement traduire Pi et E 643 tres facile d'ajouter d'autres constantes 644 BinExp: 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. 648 FuncExp: 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 653 CExpressionEvaluator : 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} 663 Septembre-Octobre 2005 : Refondation totale du module - Les anciennes classes et gestionnaires 664 (FitsIOHandler , FitsFile , \ldots ) seront supprims. 665 \begin{itemize} 666 \item[\rond] Classe {\bf FitsInOutFile } comme wrapper des fonctions de la librairie cfitsio + 667 classe d'exception spcifique {\bf FitsIOException} , et la classe des types FITS {\bf FitsTypes}. 668 \item[\rond] Classe template {\bf FitsBlockRW$<$T$>$} pour lecture/criture (tableaux de donnes) 669 sur 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 674 SwSegDataBlock sur fichiers FITS 675 \end{itemize} 676 677 \section{LinAlg} 678 Extension des fonctionalits de la classe {\tt LapackServer<T>} : 679 (Juillet 2004 / cmv , Fvrier 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 690 resolution 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 } \\ 697 Ajout de la classe {\tt PIImageNavigator } permmettant de visualiser une image 698 avec ses propres widget zoom / global view et colormap. (Fevrier 2005) \\ 699 Commande {\tt imagnav} ajoute ds piapp/baseexcute.cc . \\ 700 \item[\rond] Avril 2005 - Amelioration de la classe {\bf PIConsole} \\ 701 1/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. \\ 705 3/ 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 713 virtual int PIDrawer::OptionToString(vector<string> & opt) const 714 qui vient completer les deux methodes 715 virtual int PIDrawer:: DecodeOptionString(vector<string> & opt, bool ...) et 716 virtual void PIDrawer:: GetOptionsHelpInfo(string& info); 717 Ces methodes s'occupent de decoder les options graphiques (et l'aide 718 associe). La methode ajoutee permet de faire l'operation inverse, fabriquer 719 une serie de chaine de caracteres a partir des options graphiques. 720 Il y a aussi la methode 721 virtual int PIWdgGen::OptionToString(vector<string> & opt) const 722 que j'ai ajoute (rien a faire pour le moment) - ainsi que 723 int PIGraphicAtt::AttToStrings(vector<string> & att) const. 724 725 Peux-tu remplir la methode PIGraphicAtt::AttToStrings(vector<string> & att) const. 726 L'implementation par defaut de PIDrawer::OptionToString(vector<string> & opt) const 727 appelle PIGraphicAtt::AttToStrings() - a laisser donc tel quel. 728 729 par contre, pour les autres drawer (PIYfXDrawer, PIFuncDrawer, PIElDrawer, 730 PISurfaceDrawer, PIHisto, PIHisto2D, PINTuple ...) - lorsque 731 DecodeOptionString(vector<string> & opt, bool ...) est modifie, 732 rajouter la methode OptionToString(vector<string> & opt) et verifier le help. 733 Attention, il ne faut pas mettre l'argument opt a zero, mais ajouter des chaines 734 derriere (push_back()) afin de pouvoir cumuler les options de base + options 735 specifiques. 736 737 Comment tester ? 738 Pour 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 740 graphiques <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) 746 lorsque 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} 750 J'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 757 ainsi que ce qu'il faut ds PIBaseWdgGen et ds PIDrawer pour exploiter cette 758 methode + 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) ...) 761 Tu as a t'aoccuper de la methode PIDrawer::GetDistanceToPoint(double x, double y) 762 qui doit etre redefinie si possible pour chaque drawer, afin de fournir une 763 distance raisonnable au point (x,y) en argument. 764 J'ai juste mis une implementation par defaut (ds PIDrawer) et une implementation 765 partielle pour PIElDrawer (qui trace les axes en particulier) - qu'il faut 766 completer. 767 768 Comment tester ? 769 J'ai mis ce qu'il faut ds le gestionnaire 2D (PIScDrawWdg) - 770 <Shift>Button-1 choisit le drawer le plus proche (base sur la 771 valeur de retour de PIDrawer::GetDistanceToPoint(double x, double y) 772 comme drawer actif. Ce drawer est passe en 'highlight' pendant que 773 le bouton est appuye. 774 \end{verbatim} 775 776 \subsection{ Manipulation interactive des drawers (3 Juin 2004) } 777 La manipulation interactive des drawers ( l'aide d'un menu) a 778 t finalise 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) } 794 Ajout du traceur de bar-graph (classe {\bf PIBarGraph}) ds module PI/ 795 et commande {\tt bargraph} ds PIext/basexecut.cc . 796 La commande bargraph ne gere pas encore toutes les possibilites 797 de la classe PIBarGraph. \\ 798 Exemple d'utilisation: 799 \begin{verbatim} 800 Cmd> bargraph ' ' -10. 15. 22. 8. 33. 7 -4. 801 Cmd> bargraph 'blue ' -10. 15. 22. 8. 33. 7 -4. 802 Cmd> bargraph 'blue horizontalbars' -10. 15. 22. 8. 33. 7 -4. 803 Cmd> bargraph 'blue horizontalbars barvaluelabel ' -10. 15. 22. 8. 33. 7 -4. 804 Cmd> bargraph 'blue verticalbars nofill barvaluelabel ' -10. 15. 22. 8. 33. 7 -4. 805 Cmd> bargraph 'font=times,bold,16 blue verticalbars nofill barvaluelabel ' \ 806 -10. 15. 2 2. 8. 33. 7 -4. 807 Cmd> 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 813 Ajout 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) 815 doivent etre completes. \\ 816 Exemple d'utilisation: 817 \begin{verbatim} 818 # On affiche qque chose 819 Cmd> openppf demo.ppf 820 Cmd> disp h1d 821 Cmd> 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 827 Mise en place complete (?) de la gestion de re-scale-ing des axes en 3D 828 avec gestion des options graphiques (texte) - Il est possible en particulier d'imposer 829 les limites de la boites 3D. 830 cela a ete une grosse prise de tete de tout un apres-midi. 831 J'ai eu ensuite mal a la tete une partie de la soiree ! \\ 832 Exemple d'utilisation: 833 834 \begin{verbatim} 835 836 # On ouvre le fichier demo.ppf 837 Cmd> openppf demo.ppf 838 Cmd> surf mtx1 'colbr32' 839 Cmd> surf mtx1 'colbr32 noautoscale' 840 Cmd> surf mtx1 'colbr32 lim3dbox=-10,60,-10,60,-3,15 autoscale3dbox' 841 # Affichage avec superposition 842 Cmd> nt3d nt32 x y z - - - - - 'marker=circle,7 red' 843 Cmd> nt3d nt32 x y z - - - - - 'same marker=cross,5 blue ' 844 # Ou bien : 845 Cmd> nt3d nt32 x y z - - - - - 'marker=circle,7 red noautoscale' 846 Cmd> 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}: 854 La destruction de l'objet et/ou widget pascorrectement geres - 855 provoque des plantages lors de la sortie de l'application. 856 857 \item Extrait de {\tt cvs log pistdimgapp.cc } : 858 \begin{verbatim} 859 revision 1.77 860 date: 2005/04/27 11:55:00; author: ansari; state: Exp; lines: +26 -10 861 1/ Prise en charge de DataTable et SwPPFDataTable pour piapp (NObjMgrAdapter) : 862 nomhistadapter.cc et piiinit.cc 863 2/ Lecture de tous les objets ds un fichier PPF par NamedObjMgr::ReadAll() pour 864 fichier PPF sans nametag. 865 3/ Ajout bloc try/catch ds PIStdImgApp::Run() (boucle d'evenements) 866 Reza , 27 Avril 2005 867 ---------------------------- 868 revision 1.76 869 date: 2005/04/19 09:13:49; author: ansari; state: Exp; lines: +3 -1 870 Ajout 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 872 et remplacement commande breakexe par stop ds PIACmd - Reza 19/4/2005 873 ---------------------------- 874 revision 1.75 875 date: 2005/04/19 06:56:52; author: ansari; state: Exp; lines: +5 -4 876 Remis en marche la possibilite d'execution d'un .pic au lancement de piapp - 877 Reza 19/4/2005 878 ---------------------------- 879 revision 1.74 880 date: 2005/02/18 14:09:47; author: ansari; state: Exp; lines: +62 -37 881 Modifications pour l'utilisation viewer PIImageNavigator (ajout commande imagnav 882 ) - Reza 18 Fev 2005 883 ---------------------------- 884 revision 1.73 885 date: 2004/11/19 17:41:07; author: ansari; state: Exp; lines: +26 -0 886 Ajout commandes addoval addfoval pour trace d'ellipse - Reza 19/11/2004 887 ---------------------------- 888 revision 1.71 889 date: 2004/09/07 07:10:18; author: ansari; state: Exp; lines: +35 -0 890 Ajout bloc try/catch ds piacmd.cc (thread execution commandes) et ds pistdimgapp.cc ( 891 methode process, thread boucle d'evts) - Reza 07/09/2004 892 ---------------------------- 893 revision 1.70 894 date: 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 896 marcher sur OSF1 et Linux ... Reza 06/01/2004 897 ---------------------------- 898 revision 1.69 899 date: 2004/01/06 17:05:25; author: ansari; state: Exp; lines: +33 -7 900 Suite debug piapp multithread : on ne peut pas utiliser ZSync() ds un if (destructeur 901 appele de suite) - Reza 06/01/2004 902 ---------------------------- 903 revision 1.68 904 date: 2004/01/04 19:02:43; author: ansari; state: Exp; lines: +43 -13 905 Suite des modifs pour piapp multi-threads 906 1) Ajout Mutex de synchronisation ds ls classe NamedObjMgr 907 2) Suite controle de gestion d'appel aux methodes de PIStdImgApp depuis 908 la classe elle-meme, a travers le NamedObjMgr 909 3) Modification de la boucle d'evenements, avec un thread de reveil 910 periodique 911 Reza, 4 Janvier 2004 912 \end{verbatim} 913 \item Extrait de {\tt cvs log pistdimgapp.cc } : 914 \begin{verbatim} 915 ---------------------------- 916 revision 1.62 917 date: 2003/11/27 10:51:58; author: ansari; state: Exp; lines: +45 -20 918 Suite modification/adaptations a la classe PIACmd qui herite maintenent de SOPHYA::Co 919 mmander - Reza 27/11/2003 920 ---------------------------- 921 revision 1.61 922 date: 2003/11/26 23:01:55; author: ansari; state: Exp; lines: +20 -1755 923 Modification du code de PIACmd : La classe PIACmd herite maintenant de la classe Comm 924 ander (de SysTools) - Reza 26/11/2003 925 ---------------------------- 926 revision 1.60 927 date: 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/) } 939 Documentation des classes de SysTools. \\ 940 Extrait 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 53 958 \section{Mgr} 959 {\large Avril-Mai 2005 : Basculement vers la nouvelle version de scripts 960 de gestion du code (module {\bf BuildMgr/ } ) } 961 54 962 \subsection{Variables d'environnement SOPHYAxxx (17/9/2003) } 55 963 Septembre 2003 (17/9/2003) : Changement DPCDEVREP, DPCBASEREP … … 200 1108 \end{verbatim} 201 1109 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 gnration 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 , RawOutFileStream213 \item[\rond] Dcembre 2003 - Ajout ppfbinstream.h .cc \\214 Classes PPFBinaryIOStream , PPFBinaryInputStream , PPFBinaryOutputStream215 \item[\rond] Dcembre 2003 (9/12/2003) Fin de l'ensemble des modifs pour les216 PPF V3 \\217 - Ecriture nombre complexes r4, r8 avec tag spcifique. \\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.cc227 \item[\rond] Avril 2005 - Ajout de wrapper de lecture/ecriture PPF pour les vecteurs de228 la librairie standard (classe PPFWrapperSTLVector$<$T$>$ ) fichier ppfwrapstlv.h229 \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 PP234 ersist handler235 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 permettant245 de gerer des blocs de donnees segementes, pour tout type de donnees, de structures246 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 son250 gestionnaire PPF {\tt FIO\_SegDataBlock<T>} (fichier fiosegdb.h )251 \item Ajout de la classe {\tt SwSegDataBlock<T>} (Data bloc segmente avec gestion252 de swap) et la classe swapper PPF {\tt PPFDataSwapper<T>} (fichiers253 ppfswapper.h et swsegdb.h)254 \item Ajout programme de test Tests/tstsegdb.cc255 \end{enumerate}256 \end{itemize}257 258 259 \section{TArray}260 \begin{itemize}261 \item Optimisation de la multiplication matricielle (CMV) - Extrait du262 message (from CMV) du 30 Juillet 2004: \\263 \begin{verbatim}264 - on definit un flag d'optimisation265 Contrairement a ce qu'on avait dit, je n'ai pas ajoute266 un argument a Multiply car on ne peut pas jouer267 avec qiand on utilise l'operateur * surcharge.268 Or au vu des performance il'ma parut interessant que l'utilisateur269 meme lambda puisse choisir le niveau d'optimisation270 --> 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 cas278 si on copie dans le cas lent (FxC)279 ---EndMultiply FxC CPUTime: Total= 93.1296 (Partial= 69.3806) Sec.280 devient281 ---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 absolument284 pas de temps pour les grosses matrices285 286 2./ pour les matrices 10x10 (1000000 multiplications par cas)287 on a bien ce que l'on attend a savoir que288 la copie faites 100000 fois finie par nous faire perdre du temps289 ---EndMultiply FxC CPUTime: Total= 37.4152 (Partial= 12.4662) Sec.290 devient291 ---EndMultiply FxC CPUTime: Total= 53.9978 (Partial= 28.8322) Sec.292 dans ce cas on perd un gros facteur 2 a cause de la copie293 mais rien de surprenant la dedans.294 295 -----------------------------------------------------------------------296 - ensuite j'ai implemente une prise de decision au niveau de297 l'optimisation pour les petites matrices:298 le test est simple mais me semble OK:299 je calcule sza taille du NDataBlock de A300 szb B301 si ((sza+szb)*sizeof(T) < 100000 ) pas d'optimisation302 IDEE: on pifometre que raisonnablement il y a 100 koctets303 de disponible pour les matrices A et B dans le cache processeur304 et que dans ce cas elles sont copiees toutes les 2 dans le cache305 par l'optimiseur du compilo qui est tres malin et surtout qui306 veux absolument nous faire plaisir......307 308 -----------------------------------------------------------------309 ===> Les resultats sont dans le fichier toto.calc en attached310 .. En tete tu as l'explication des flags d'optimisation311 ...Avec les 2 sections:312 GROSSE MATRICE313 et314 PETITE MATRICE315 \end{verbatim}316 317 \item Optimisation operations diverses, en particulier \\318 1) Remplacement des methodes Add/Sub/Mul/DivElt(a) par319 Add/Sub/Mul/DivElt(TArray a, TArray res) \\320 2) Operateurs += -= A+B A-B TArray et TMatrix/TVecteur modifies en consequence321 \item Extrait de {\tt cvs log tarray.cc }322 {\small \begin{verbatim}323 ----------------------------324 revision 1.38325 date: 2004/07/30 13:31:39; author: ansari; state: Exp; lines: +28 -24326 Diverses petites optimisations ds les methodes operations/affectations de TArray - Reza 30 Juillet 2004327 ----------------------------328 ----------------------------329 revision 1.36330 date: 2004/07/27 11:44:23; author: ansari; state: Exp; lines: +4 -1331 Corrections bug apres modifs methods Add/Sub/Mul/DivCst(x,res) - Reza 27 Juillet 2004332 ----------------------------333 revision 1.35334 date: 2004/07/26 17:30:40; author: ansari; state: Exp; lines: +187 -108335 Remplacement methodes Add/Mul/Sub/Div(T x) par AddCst/MulCst/SubCst/DivCst(T x, TArray<T> res) ds TArray - Reza 26 Juillet 2004336 ----------------------------337 \end{verbatim} }338 339 \item Extrait de {\tt cvs log tarray.cc }340 {\small \begin{verbatim}341 ----------------------------342 revision 1.27343 date: 2004/07/30 10:24:12; author: cmv; state: Exp; lines: +97 -32344 - Intro decision auto d'optimisation produit de matrices345 - Possibilite a l'utilisateur pour choisir l'optimisation346 - cas FxC optimise par copie347 cmv 30/07/04348 ----------------------------349 revision 1.26350 date: 2004/07/29 12:31:16; author: ansari; state: Exp; lines: +7 -5351 1/ Remplacement des methodes Add/Sub/Mul/DivElt(a) par352 Add/Sub/Mul/DivElt(TArray a, TArray res)353 2/ Operateurs += -= A+B A-B TArray et TMatrix/TVecteur modifies en consequence354 3/ Ajout methode TArray::ScalarProduct()355 4/ Methode TArray::SetT renomme en SetCst() SetT garde en alias356 5/ Ajout parametre bool fzero (mise a zero) ajoute ds constructeur et357 ReSize() de TMatrix et TVecteur.358 Reza 29/07/2004359 ----------------------------360 revision 1.25361 date: 2004/07/29 08:40:49; author: cmv; state: Exp; lines: +148 -1362 Optimisation produit de matrice a la sauce cmv 29/07/04363 ----------------------------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 BaseDataTable382 -------- DataTable383 -------- SwPPFDataTable384 \end{verbatim}385 386 \noindent {\bf BaseDataTable} : Classe de base, avec qques methodes virtuelles387 pures, implementent la presque totalite des fonctionalites, en particulier388 celles de l'interface NTupleInterface.389 390 \noindent {\bf DataTable} : Implementation concrete de BaseDataTable avec donnees en391 memoire \\392 (utilise SegDataBlock$<$T$>$ pour stocker les colonnes)393 394 \noindent {\bf SwPPFDataTable} : Implementation concrete de BaseDataTable avec donnees395 en swap sur stream PPF (POutPersist)- \\396 Utilise (SwSegDataBlock$<$T$>$ avec397 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 copie402 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, mais405 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 SwPPFDataTable411 Actuellement, on ne peut les relires que dans le meme type,412 cad on ne peut relire avec un SwPPFDataTable un objet413 ecrit comme DataTable - mais cette possibilite pourra414 peut-etre codee ulterieurement (d'ou l'interet en particulier415 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 methode425 {\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 memoire437 \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\_DataTable443 pour I/O sur fichiers FITS - j'ai regarde {\tt FITS\_XNTuple} qu'on pourra simplifier enormement444 et que devrait etre assez rapide.445 Il faut aussi faire une classe {\tt SwFITSDataTable}, en recopiant pas mal de chose ds la classe446 {\tt SwPPFDataTable} - On pourrait peut-etre avoir une classe intermediaire qui regroupe447 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 implemente449 les deux methodes de {\tt DataSwapperInterface<T>} - le reste devrait etre du copier/coller450 essentiellement.451 452 {\bf DataTable cote PIAPP :} \\453 Cote piapp, les DataTable et SwPPFDataTable sont pris en charge par454 {\tt NOMAdapter\_DataTable} (qui prend en charge tous les 'BaseDataTable' )455 Il faudrait peut-etre rajouter deux commandes : \\456 newdt ou newdatatable457 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 rester480 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 vrifications des polynomes de Legendre}489 --> CMV490 491 \subsection{SphereECP}492 Extrait du message du 7 Septembre 2004493 \begin{verbatim}494 J'ai mis dans la base (module SkyMap) le code de la classe495 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.cc499 Attention, mettre le parametere de pixelisation a -1 lors de l'appel a Generate pour eviter500 le Resize de la sphereECP501 ylmserver.GenerateFromCl(map, -1, clin, 0.);502 503 Dans piapp, c'est visualise par defaut en projection Molleweide504 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 plus507 - ecpscaledeg: echelle des axes en degres au lieu de pixels508 - ecpscalerad: echelle des axes en radians au lieu de pixels509 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/Paris517 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: Il523 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 ete525 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'interprteur 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 commandes540 en multithreads \\541 Avril 2005 : Controle strict sur les noms de variables, limites542 aux caracteres alphanumeriques + underscore - Adaptation543 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 chaines551 de caracteres.552 - Acces aux variables d'environnement -553 - Un niveau variable d'environnement application est aussi prevu554 - 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 StringValue560 # Suppression d'une variable : unset ou clearvar561 Cmd> unset sv562 563 # Initialisation de type vecteur - Espace avant/apres ')' et avant ')' obligatoire564 Cmd> set vecv ( mot1 mot2 mot3 mot4 mot5 )565 #Calcul numerique : expression de type C - Espace avant/apres '=' obligatoire566 Cmd> a = 2+3*sqrt(4)567 # Le signe egal peut etre utilise pour attribuer une chaine de caracteres568 Cmd> a = 'Bonjour Madame'569 # Un element de tableau peut etre specifie avant le signe egal570 Cmd> vecv[2] = 'coucou'571 # Ou bien572 Cmd> i = 3573 Cmd> vecv[i] = 'Ooohhh'574 \end{verbatim}575 576 A droite du signe egal (membre de droite), les variables doivent etre577 adressees a l'aide du signe \$.578 579 Une chaine peut etre cassee en mots a l'aide de la commande var2words580 \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 formes589 {\tt \${vname} } ou {\tt \$(vname)} peuvent etre utilisees.590 591 \begin{verbatim}592 Cmd> x = 'Hello'593 Cmd> echo $x594 # Taille d'une variable de type vecteur $#vname595 Cmd> set vx ( 111 2222 3333 444444 )596 Cmd> echo $#vx597 # Acces aux elements de tableau598 Cmd> echo $vx[0] $vx[1]599 # ou bien indexe par une variable600 Cmd> i = 2601 Cmd> echo $vx[i]602 # Une syntaxe particuliere: $[vname] retourne le contenu de603 # la variable dont le nom est ds vname604 Cmd> zzz = 'Commander'605 Cmd> xxx = 'zzz'606 Cmd> echo '$[xxx]= ' $[xxx]607 $[xxx]= Commander608 \end{verbatim}609 610 Variables d'environnement: L'acces aux variables d'environnement611 se fait simplement par{\tt \$varenvname}. Attention, les variables locales612 de l'interpreteur sont prioritaires.613 614 \item[\rond] {\bf Variables particulieres: } \\615 {\tt \$retval} ou {\tt \$retstr} : chaine specifee sur la derniere commande return616 {\tt \$status} : code de retour de la derniere commande executee.617 (variable existe et est rempli - mais il faudra se donner une regle618 plus claire ...)619 Arguments des fichiers .pic appeles par la commande exec620 {\tt \$\# } : nombre d'arguments, a part \$0621 {\tt \$0} nom du fichier ou du script622 {\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 $f630 end631 \end{verbatim}632 633 Espace avant/apres '(' et avant ')' obligatoire.634 635 \begin{verbatim}636 foreach v vecname637 ...638 echo $v639 end640 \end{verbatim}641 642 Boucle de type integer:643 \begin{verbatim}644 for i startInt:endInt[:stepInt]645 ....646 echo $i647 end648 \end{verbatim}649 650 Boucle de type float651 \begin{verbatim}652 for f startFloat:endFloat[:stepFloat]653 ....654 echo $f655 end656 \end{verbatim}657 658 Boucle sur les lignes d'un fichier:659 \begin{verbatim}660 forinfile line FileName661 ...662 echo $line663 end664 \end{verbatim}665 666 Instruction {\tt break} pour casser une boucle667 668 \item[\rond] {\bf Les tests }669 \begin{verbatim}670 if ( test ) then671 endif672 673 if ( test ) then674 ....675 else676 ....677 endif678 \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 endscript693 \end{verbatim}694 695 L'appel a un script se fait simplement a l'aide696 du nom de script (contrairement aux fichiers697 de commande qui sont executes a l'aide de la698 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'un704 script ou d'un fichier de commandes.705 Commandes {\bf listscript }et {\bf clearscript scriptname}706 permettet d'avoir la liste des scripts707 definis / supprimer la definition d'un script708 709 \item[\rond] {\bf Autres commandes}710 \begin{itemize}711 \item Instruction {\bf echo } pour ecrire sur cout/stdout712 \item Instruction {\bf echo2file} pour ecrire a la fin d'un fichier713 \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 commandes724 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 que729 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 boucle736 ou dans dans un fichier .pic ...737 Utiliser la commande {\bf stop} ou {\tt <Cntrl C>} dans PIConsole738 739 \end{itemize}740 741 \subsection{Classes CExpressionEvaluator et RPNExpressionEvaluator }742 \begin{itemize}743 \item[\rond] Ajout des classes RPNExpressionEvaluator et CExpressionEvaluator744 d'valuation d'expressions numriques en notation polonaise inverse745 et avec la syntaxe C . Utilise dans la classe Commander.746 \item[\rond] Programme test Test/tcmd.cc747 \item[\rond] extrait de {\tt cvs log cexpre.cc }748 {\small \begin{verbatim}749 ----------------------------750 revision 1.3751 date: 2004/03/18 18:15:19; author: ansari; state: Exp; lines: +10 -6752 Suite (presque finie) des modifications de l'interpreteur - gestion des variables en particulier - Reste au moins un bug ds CExpressionEvaluator - Reza 18/03/2004753 ----------------------------754 revision 1.2755 date: 2004/03/16 08:47:48; author: ansari; state: Exp; lines: +5 -6756 suppression variables inutilisees ds cexpr.cc - Reza 16 Mars 2004757 ----------------------------758 revision 1.1759 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 2003761 \end{verbatim} }762 763 \item[\rond] Extrait du message du 3 Mars 2004764 \begin{verbatim}765 Le code est base sur une hierarchie de classe d'expression :766 Expr -------- NumberExp767 --------- BinExp ------ AddExp768 ------ MulExp769 ------ SubExp770 ------ DivExp771 --------- FuncExp772 --------- CExpressionEvaluator773 774 NumberExp : expression elementaire de nombre, sait actuellement traduire Pi et E775 tres facile d'ajouter d'autres constantes776 BinExp: Classe d'operations binaires (deux operandes) a+b a-b a*b a/b777 avec gestion de niveau de priorite des operateurs778 On peut facilement ajouter d'autres operateurs binaires (par exemple779 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 fonctions782 usuelles sont decodes ds cette classe (sin,cos,tan, asin, acos, atan, exp, log,783 atan2, pow ) - voir ds le code784 785 CExpressionEvaluator : C'est la classe de haut niveau a utiliser -786 la fonction de decodage de la chaine ASCII (qui utilise787 les fonctionalites des differentes classes est la dedans788 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 fonctionalits de la classe {\tt LapackServer<T>} :796 (Juillet 2004 / cmv , Fvrier 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 propres800 (cas general, symetrique et hermitique) (21/7/2004)801 \item[\rond] Introduction d'un fonction d'interface pour le calculateur de workspace802 (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 DC806 \item[\rond] Ajout methode calcul de la matrice inverse par Lapack en utilisant la807 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 image815 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 le821 debut de commande visible. \\822 3/ Correction (probable) du petit bug sur les derniers caracteres lors de copier/coller823 ds PIConsole824 \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 options830 virtual int PIDrawer::OptionToString(vector<string> & opt) const831 qui vient completer les deux methodes832 virtual int PIDrawer:: DecodeOptionString(vector<string> & opt, bool ...) et833 virtual void PIDrawer:: GetOptionsHelpInfo(string& info);834 Ces methodes s'occupent de decoder les options graphiques (et l'aide835 associe). La methode ajoutee permet de faire l'operation inverse, fabriquer836 une serie de chaine de caracteres a partir des options graphiques.837 Il y a aussi la methode838 virtual int PIWdgGen::OptionToString(vector<string> & opt) const839 que j'ai ajoute (rien a faire pour le moment) - ainsi que840 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) const844 appelle PIGraphicAtt::AttToStrings() - a laisser donc tel quel.845 846 par contre, pour les autres drawer (PIYfXDrawer, PIFuncDrawer, PIElDrawer,847 PISurfaceDrawer, PIHisto, PIHisto2D, PINTuple ...) - lorsque848 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 chaines851 derriere (push_back()) afin de pouvoir cumuler les options de base + options852 specifiques.853 854 Comment tester ?855 Pour tester, tu peux utiliser la fenetre des options texte ou j'ai ajoute le bouton856 [GetOption] . Tu peux acceder a cette fenetre a partir de la fenetre des options857 graphiques <Alt>O , ou directement sur un objet de gestionnaire 2D - par858 <Alt>T - <Shift>Button-1 permet de selectionner le drawer actif859 \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,y869 // 0: au(x) point(s) le(s) plus proche(s) ... 1 au bord xmin/xmax , ymin/ymax870 // 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 cette875 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 une880 distance raisonnable au point (x,y) en argument.881 J'ai juste mis une implementation par defaut (ds PIDrawer) et une implementation882 partielle pour PIElDrawer (qui trace les axes en particulier) - qu'il faut883 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 la888 valeur de retour de PIDrawer::GetDistanceToPoint(double x, double y)889 comme drawer actif. Ce drawer est passe en 'highlight' pendant que890 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) a895 t finalise pour les PIImage PIScDrawWdg PI3DWdg .896 897 \begin{verbatim}898 o <Alt>D affiche le menu avec les differentes option899 o Move/Resize: Affichage du rectangle + rectangle milieu900 (deplacement) + coin bas-droite (deplacement) -901 clicker ailleurs pour finir902 o Mouse Select : Le mouse select des drawers est gere903 maintenant par un PIEventHandler (comme pour Move/ReSize)904 Drawer actif affiche par le rectangle muni d'un petit coin905 (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 possibilites914 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 commande931 {\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 chose936 Cmd> openppf demo.ppf937 Cmd> disp h1d938 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 3D945 avec gestion des options graphiques (texte) - Il est possible en particulier d'imposer946 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.ppf954 Cmd> openppf demo.ppf955 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 superposition959 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.77977 date: 2005/04/27 11:55:00; author: ansari; state: Exp; lines: +26 -10978 1/ Prise en charge de DataTable et SwPPFDataTable pour piapp (NObjMgrAdapter) :979 nomhistadapter.cc et piiinit.cc980 2/ Lecture de tous les objets ds un fichier PPF par NamedObjMgr::ReadAll() pour981 fichier PPF sans nametag.982 3/ Ajout bloc try/catch ds PIStdImgApp::Run() (boucle d'evenements)983 Reza , 27 Avril 2005984 ----------------------------985 revision 1.76986 date: 2005/04/19 09:13:49; author: ansari; state: Exp; lines: +3 -1987 Ajout de l option nodisp ds les affichages des NamedObjMgr, prise en compte de988 <Cntrl C> (Msg_Cancel) pour arreter l'execution de l'interpreteur ds PIStdImgApp989 et remplacement commande breakexe par stop ds PIACmd - Reza 19/4/2005990 ----------------------------991 revision 1.75992 date: 2005/04/19 06:56:52; author: ansari; state: Exp; lines: +5 -4993 Remis en marche la possibilite d'execution d'un .pic au lancement de piapp -994 Reza 19/4/2005995 ----------------------------996 revision 1.74997 date: 2005/02/18 14:09:47; author: ansari; state: Exp; lines: +62 -37998 Modifications pour l'utilisation viewer PIImageNavigator (ajout commande imagnav999 ) - Reza 18 Fev 20051000 ----------------------------1001 revision 1.731002 date: 2004/11/19 17:41:07; author: ansari; state: Exp; lines: +26 -01003 Ajout commandes addoval addfoval pour trace d'ellipse - Reza 19/11/20041004 ----------------------------1005 revision 1.711006 date: 2004/09/07 07:10:18; author: ansari; state: Exp; lines: +35 -01007 Ajout bloc try/catch ds piacmd.cc (thread execution commandes) et ds pistdimgapp.cc (1008 methode process, thread boucle d'evts) - Reza 07/09/20041009 ----------------------------1010 revision 1.701011 date: 2004/01/06 18:44:56; author: ansari; state: Exp; lines: +11 -11012 Suite debugging gestion lock entre threads ds piapp - A l'air de1013 marcher sur OSF1 et Linux ... Reza 06/01/20041014 ----------------------------1015 revision 1.691016 date: 2004/01/06 17:05:25; author: ansari; state: Exp; lines: +33 -71017 Suite debug piapp multithread : on ne peut pas utiliser ZSync() ds un if (destructeur1018 appele de suite) - Reza 06/01/20041019 ----------------------------1020 revision 1.681021 date: 2004/01/04 19:02:43; author: ansari; state: Exp; lines: +43 -131022 Suite des modifs pour piapp multi-threads1023 1) Ajout Mutex de synchronisation ds ls classe NamedObjMgr1024 2) Suite controle de gestion d'appel aux methodes de PIStdImgApp depuis1025 la classe elle-meme, a travers le NamedObjMgr1026 3) Modification de la boucle d'evenements, avec un thread de reveil1027 periodique1028 Reza, 4 Janvier 20041029 \end{verbatim}1030 \item Extrait de {\tt cvs log pistdimgapp.cc } :1031 \begin{verbatim}1032 ----------------------------1033 revision 1.621034 date: 2003/11/27 10:51:58; author: ansari; state: Exp; lines: +45 -201035 Suite modification/adaptations a la classe PIACmd qui herite maintenent de SOPHYA::Co1036 mmander - Reza 27/11/20031037 ----------------------------1038 revision 1.611039 date: 2003/11/26 23:01:55; author: ansari; state: Exp; lines: +20 -17551040 Modification du code de PIACmd : La classe PIACmd herite maintenant de la classe Comm1041 ander (de SysTools) - Reza 26/11/20031042 ----------------------------1043 revision 1.601044 date: 2003/07/21 21:13:10; author: cmv; state: Exp; lines: +3 -31045 - introduction notion de numero de ligne dans expression ntuple1046 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/RegisterCommand1050 (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 general1064 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 et1072 utiliser la fonction update de doxygen (doxygen -u)1073 \end{verbatim}1074 1110 1075 1111 \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.