Changeset 2716 in Sophya for trunk/SophyaLib/Manual
- Timestamp:
- May 12, 2005, 6:37:15 PM (20 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/SophyaLib/Manual/modifs.tex
r2632 r2716 7 7 % \usepackage{times} 8 8 % package pour ecrire DRAFT en fond de page 9 \usepackage[light,all,draft]{draftcopy}9 % \usepackage[light,all,draft]{draftcopy} 10 10 11 11 % \usepackage{epsfig} … … 31 31 {\Large \bf Liste de modifications de SOPHYA } \\[5mm] 32 32 { \large (fait ou faire ) } \\ 33 {\large Janvier 2003 - Dcembre 2004} \\[25mm]33 {\large Janvier 2003 - Mai 2005 } \\[25mm] 34 34 Liste des tags et dates : \\[5mm] 35 35 {\large … … 213 213 \item[\rond] Dcembre 2003 - Ajout ppfbinstream.h .cc \\ 214 214 Classes PPFBinaryIOStream , PPFBinaryInputStream , PPFBinaryOutputStream 215 \item[\rond] Dcembre 200 4 (9/12/2004) Fin de l'ensemble des modifs pour les215 \item[\rond] Dcembre 2003 (9/12/2003) Fin de l'ensemble des modifs pour les 216 216 PPF V3 \\ 217 217 - Ecriture nombre complexes r4, r8 avec tag spcifique. \\ … … 225 225 \centerline{\tt int\_8 WritePositionTag() PutPosTagTable(...) } 226 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 227 236 \end{itemize} 237 238 239 240 \subsection{Segmented Data Block} 241 Mars-Avril 2005: Introduction des classes similaires aux NDataBlock, mais permettant 242 de gerer des blocs de donnees segementes, pour tout type de donnees, de structures 243 et de classes (template pour tout type <T>). 244 Extrait du log CVS du 2005/04/07 245 \begin{verbatim} 246 1/ Ajout de la classe SegDataBlock<T> (et l'interface SegDBInterface<T>) 247 pour la gestion de blocs de donnees segmentes (segdatablock.h) et son 248 gestionnaire PPF FIO_SegDataBlock<T> (fichier fiosegdb.h ) 249 2/ Ajout de la classe SwSegDataBlock<T> (Data bloc segmente avec gestion 250 de swap) et la classe swapper PPF PPFDataSwapper<T> (fichiers 251 ppfswapper.h et swsegdb.h) 252 \end{verbatim} 253 228 254 229 255 \section{TArray} 230 256 \begin{itemize} 231 257 \item Optimisation de la multiplication matricielle (CMV) - Extrait du 232 message (from CMV) du 30 Juillet 2004: 258 message (from CMV) du 30 Juillet 2004: \\ 233 259 \begin{verbatim} 234 260 - on definit un flag d'optimisation … … 340 366 Ajout classe HistoErr (Septembre-Octobre 2004) 341 367 342 \subsection{ SuperNTuple (Message du 8 Juillet 2004) } 343 \begin{verbatim} 344 Classe Record ou DynamicStruct 345 Record = Une ligne de ntuple - Un ensemble de noms de variables et de type 346 (integer, float, double, ...) 347 348 class Record { 349 AddField(string fieldname, fieldtype, defval); 350 .... 368 \subsection{NTuple} 369 la classe NTuple peut maintenant avoir des colonnes float ou double. 370 Il y a maintenant deux methodes Fill(r\_4 *) et Fill(r\_8 *) 371 Les noms ne sont plus limites a 8 caracteres. 372 373 374 \subsection{ Les DataTable (SuperNTuple) } 375 376 \begin{verbatim} 377 BaseDataTable 378 -------- DataTable 379 -------- SwPPFDataTable 380 \end{verbatim} 381 {\bf BaseDataTable} : Classe de base, avec qques methodes virtuelles 382 pures, implementent la presque totalite des fonctionalites, en particulier 383 celles de l'interface NTupleInterface. 384 385 {\bf DataTable} : Implementation concrete de BaseDataTable avec donnees en 386 memoire (utilise SegDataBlock<T> pour stocker les colonnes) 387 388 {\bf SwPPFDataTable} : Implementation concrete de BaseDataTable avec donnees 389 en swap sur stream PPF (POutPersist)- Utilise (SwSegDataBlock<T> avec 390 un data-swapper PPF (classe PPFDataSwapper<T> ) 391 392 DataTable et SwPPFDataTable respecte +/- les conventions SOPHYA , 393 constructeur de copie avec partage ou copie de donnees, operateur = 394 Datatable : partage et copie , = : fait une copie 395 SwPPFDataTable : C'est toujours partage (presque par definition) 396 Autre point, compte tenu de la structure des streams PPF , 397 les SwPPFDataTable fonctionne en ecriture OU en lecture, mais 398 pas les deux a la fois. 399 400 Classe de gestion de persistence commune : \\ 401 {\bf ObjFileIO<BaseDataTable> } 402 403 Lit et ecrit les DataTable et SwPPFDataTable 404 Actuellement, on ne peut les relires que dans le meme type, 405 cad on ne peut relire avec un SwPPFDataTable un objet 406 ecrit comme DataTable - mais cette possibilite pourra 407 peut-etre codee ulterieurement (d'ou l'interet en particulier 408 d'un gestionnaire commun ObjFileIO<BaseDataTable> 409 410 (les operateurs habituel $<<$ et $>>$ sur PIn/OutPersist sont definies) 411 412 \begin{verbatim} 413 Actuellement, les colonnes peuvent etre de type 414 int_4 , int_8 , r_4 , r_8 , string 415 On pourra ajouter apres les types suivants : 416 complex<r_4> , complex<r_8> , TimeStamp 417 418 Dans BaseDataTable, il reste a remplir la methode 419 BaseDataTable ::FillFromASCIIFile(string const& fn) 420 BaseDataTable :: Print(int num, int nmax=1) const 421 (on peut utiliser LineToString(sa_size_t n) const 422 423 Par contre, les merges et copie sont prevues, 424 on doit en principe pouvoir ecrire par exemple: 425 SwPPFDataTable swdt; 426 PInPersist pis("swdt.ppf"); 427 pis >> swdt; 428 DataTable dt; 429 dt = swdt; // Pour tout charger en memoire 430 431 On peut aussi ajouter des methodes d'acces aux variables membres pour enrichier l'interface. 432 433 PLUS IMPORTANT : il reste a ecrire la classe FITS_BaseDataTable ou FITS_DataTable 434 pour I/O sur fichiers FITS - j'ai regarde FITS_XNTuple qu'on pourra simplifier enormement 435 et que devrait etre assez rapide. 436 Il faut aussi faire une classe SwFITSDataTable, en recopiant pas mal de chose ds la classe 437 SwPPFDataTable - On pourrait peut-etre avoir une classe intermediaire qui regroupe 438 tout ce qui est commun a SwFITSDataTable et SwPPFDataTable , mais a voir. 439 L'element cle sera le codage de FITSDataSwapper<T> qui implemente 440 les deux methodes de DataSwapperInterface<T> - le reste devrait etre du copier/coller 441 essentiellement. 442 443 PIAPP : 444 Cote piapp, les DataTable et SwPPFDataTable sont pris en charge par 445 NOMAdapter_DataTable (qui prend en charge tous les 'BaseDataTable' ) 446 Il faudrait peut-etre rajouter deux commandes : 447 newdt ou newdatatable 448 newdt ncol col1 [col2 .... ] 449 avec possibilite de specifier coli sous fome de X:colname ou X = D,F,S,I,L ... 450 et puis dtfromascii ... 451 452 Voir Tests/tnt.cc pour exemple d'utilisation : 453 DataTable dt(64); 454 dt.AddIntegerColumn("line"); 455 dt.AddDoubleColumn("x"); 456 dt.AddFloatColumn("f_sin"); 457 MuTyV rec[10]; 458 for(int k = 0; k<1000; k++) { 459 rec[0] = k; 460 double x = M_PI*k/100.; 461 double fx = sin(x)*cos(x); 462 rec[1] = x; 463 rec[2] = sin(x); 351 464 } 352 353 Le superntuple (classe DataTable ?) est cree avec un objet record configure. 354 355 class DataTable { 356 DataTable(Record & rec); 357 Record GetRecord(); // On pourra l'utiliser pour remplir le NTuple 358 void Fill(Record& rec); 359 Record GetLine(int numline); 360 Vector GetColumn(string colname); 361 .... 362 } 363 364 Pour implementer la classe DataTable, je pense qu'il faut utiliser une 365 classe intermediaire SwapDataBlock<T> et un DataSwapper 366 367 Classe SwapDataBlock<T> ressemble au NDataBlock - sans les operations 368 arithmetiques - par contre, il gere plusieurs block de donnees - on peut donc l'etendre. 369 Dedans, au lieu d'avoir T * data, il a 370 quelque chose du style vector<T *> * data_pointer_list; 371 Un SwapDataBlock<T> qui n'a pas de DataSwapper associ, garde tous 372 ses block de donnes en memoire. 373 S'il y a un DataSwapper associe, il demande au data-swapper de 'sauver' 374 (swaper) un bloc de donnees, avant de le reutiliser pour de nouvelles donnees, 375 au dela d'un nombre maximum de blocs. 376 377 La classe DataTable utilise alors un SwapDataBlock<T> pour chaque 378 colonne de donnees. 379 380 Le DataSwapper de base est une classe virtuelle. 381 On pourra alors l'implementer en PPFDataSwapper et 382 puis FITSDataSwapper ... 465 POutPersist po("dtable.ppf"); 466 po << dt; 467 468 Pour SwPPFDataTable, il faut juste creer un stream PPF avant, qui doit rester 469 ouvert tant que le SwPPFDataTable est actif 470 POutPersist po("swdtable.ppf"); 471 SwPPFDataTable dt(po, 64); 472 383 473 \end{verbatim} 384 474
Note:
See TracChangeset
for help on using the changeset viewer.