Changeset 2716 in Sophya for trunk/SophyaLib/Manual


Ignore:
Timestamp:
May 12, 2005, 6:37:15 PM (20 years ago)
Author:
ansari
Message:

Ajout liste modifs SegDataBlock, DataTable ... - Reza 12/5/2005

File:
1 edited

Legend:

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

    r2632 r2716  
    77% \usepackage{times}
    88% package pour ecrire DRAFT en fond de page
    9 \usepackage[light,all,draft]{draftcopy}
     9% \usepackage[light,all,draft]{draftcopy}
    1010
    1111% \usepackage{epsfig}
     
    3131{\Large \bf Liste de modifications de SOPHYA } \\[5mm]
    3232{ \large (fait ou ˆ faire ) } \\
    33 {\large Janvier 2003 - DŽcembre 2004 } \\[25mm]
     33{\large Janvier 2003 - Mai 2005 } \\[25mm]
    3434Liste des tags et dates : \\[5mm]
    3535{\large
     
    213213\item[\rond] DŽcembre 2003 - Ajout ppfbinstream.h .cc \\
    214214Classes PPFBinaryIOStream , PPFBinaryInputStream , PPFBinaryOutputStream
    215 \item[\rond] DŽcembre 2004 (9/12/2004) Fin de l'ensemble des modifs pour les
     215\item[\rond] DŽcembre 2003 (9/12/2003) Fin de l'ensemble des modifs pour les
    216216PPF V3 \\
    217217- Ecriture nombre complexes r4, r8 avec tag spŽcifique. \\
     
    225225\centerline{\tt  int\_8 WritePositionTag() PutPosTagTable(...) }
    226226- Ajout programme de test Tests/ppftswap.cc
     227\item[\rond] Avril 2005 - Ajout de wrapper de lecture/ecriture PPF pour les vecteurs de
     228la 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)
     233modification programme scanppf: ajout option -lh -lho pour lister les classes PP
     234ersist handler
     235
    227236\end{itemize}
     237
     238
     239
     240\subsection{Segmented Data Block}
     241Mars-Avril 2005: Introduction des classes similaires aux NDataBlock, mais permettant
     242de gerer des blocs de donnees segementes, pour tout type de donnees, de structures
     243et de classes (template pour tout type <T>).
     244Extrait du log CVS du 2005/04/07
     245\begin{verbatim}
     2461/ Ajout de la classe SegDataBlock<T> (et l'interface SegDBInterface<T>)
     247pour la gestion de blocs de donnees segmentes (segdatablock.h) et son
     248gestionnaire PPF FIO_SegDataBlock<T> (fichier fiosegdb.h )
     2492/ Ajout de la classe SwSegDataBlock<T> (Data bloc segmente avec gestion
     250de swap) et la classe swapper PPF PPFDataSwapper<T> (fichiers
     251ppfswapper.h et swsegdb.h)
     252\end{verbatim}
     253
    228254
    229255\section{TArray}
    230256\begin{itemize}
    231257\item Optimisation de la multiplication matricielle (CMV) - Extrait du
    232 message (from CMV) du 30 Juillet 2004:
     258message (from CMV) du 30 Juillet 2004: \\
    233259\begin{verbatim}
    234260- on definit un flag d'optimisation
     
    340366Ajout classe HistoErr (Septembre-Octobre 2004)
    341367
    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}
     369la classe NTuple peut maintenant avoir des colonnes float ou double.
     370Il y a maintenant deux methodes Fill(r\_4 *) et Fill(r\_8 *)
     371Les noms ne sont plus limites a 8 caracteres.
     372
     373
     374\subsection{ Les DataTable (SuperNTuple) }
     375
     376\begin{verbatim}
     377BaseDataTable                                   
     378              --------  DataTable
     379              --------  SwPPFDataTable
     380\end{verbatim}
     381{\bf BaseDataTable} : Classe de base, avec qques methodes virtuelles
     382pures, implementent la presque totalite des fonctionalites, en particulier
     383celles de l'interface NTupleInterface.
     384
     385{\bf DataTable} : Implementation concrete de BaseDataTable avec donnees en
     386memoire (utilise SegDataBlock<T> pour stocker les colonnes)
     387
     388{\bf SwPPFDataTable} : Implementation concrete de BaseDataTable avec donnees
     389en swap sur stream PPF (POutPersist)- Utilise  (SwSegDataBlock<T> avec
     390un data-swapper PPF (classe PPFDataSwapper<T> )
     391
     392DataTable et SwPPFDataTable respecte +/- les conventions SOPHYA ,
     393constructeur de copie avec partage ou copie de donnees, operateur =
     394Datatable : partage et copie , = : fait une copie
     395SwPPFDataTable : C'est toujours partage (presque par definition)
     396Autre point, compte tenu de la structure des streams PPF ,
     397les SwPPFDataTable fonctionne en ecriture OU en lecture, mais
     398pas les deux a la fois.
     399
     400Classe de gestion de persistence commune : \\
     401{\bf ObjFileIO<BaseDataTable> }
     402
     403Lit et ecrit les DataTable et SwPPFDataTable
     404Actuellement, on ne peut les relires que dans le meme type,
     405cad on ne peut relire avec un SwPPFDataTable un objet
     406ecrit comme DataTable - mais cette possibilite pourra
     407peut-etre codee ulterieurement (d'ou l'interet en particulier
     408d'un gestionnaire commun ObjFileIO<BaseDataTable>
     409
     410(les operateurs habituel $<<$ et $>>$ sur PIn/OutPersist sont definies)
     411
     412\begin{verbatim}
     413Actuellement, les colonnes peuvent etre de type
     414int_4  ,  int_8  ,  r_4  ,  r_8  ,  string
     415On pourra ajouter apres  les types suivants :
     416complex<r_4>  ,   complex<r_8>  , TimeStamp
     417 
     418Dans BaseDataTable, il reste a remplir la methode
     419BaseDataTable ::FillFromASCIIFile(string const& fn)
     420BaseDataTable :: Print(int num, int nmax=1) const 
     421(on peut utiliser LineToString(sa_size_t n) const
     422
     423Par contre, les merges et copie sont prevues,
     424on doit en principe pouvoir ecrire par exemple:
     425SwPPFDataTable swdt;
     426PInPersist pis("swdt.ppf");
     427pis >> swdt;
     428DataTable dt;
     429dt = swdt;  // Pour tout charger en memoire
     430
     431On peut aussi ajouter des methodes d'acces aux variables membres pour enrichier l'interface.
     432
     433PLUS IMPORTANT : il reste a ecrire la classe FITS_BaseDataTable ou FITS_DataTable
     434pour I/O sur fichiers FITS - j'ai regarde FITS_XNTuple qu'on pourra simplifier enormement
     435et que devrait etre assez rapide.
     436Il faut aussi faire une classe SwFITSDataTable, en recopiant pas mal de chose ds la classe
     437SwPPFDataTable - On pourrait peut-etre avoir une classe intermediaire qui regroupe
     438tout ce qui est commun a SwFITSDataTable et SwPPFDataTable , mais a voir.
     439L'element cle sera le codage de FITSDataSwapper<T> qui implemente
     440les deux methodes de DataSwapperInterface<T> - le reste devrait etre du copier/coller
     441essentiellement.
     442
     443PIAPP :
     444Cote piapp, les DataTable et SwPPFDataTable  sont pris en charge par
     445NOMAdapter_DataTable (qui prend en charge tous les 'BaseDataTable' )
     446Il faudrait peut-etre rajouter deux commandes :
     447newdt ou newdatatable
     448newdt ncol col1 [col2 .... ]
     449avec possibilite de specifier coli sous fome de X:colname ou X = D,F,S,I,L ...
     450et puis dtfromascii  ...
     451
     452Voir Tests/tnt.cc pour exemple d'utilisation :
     453DataTable dt(64);
     454dt.AddIntegerColumn("line");
     455dt.AddDoubleColumn("x");
     456dt.AddFloatColumn("f_sin");
     457MuTyV rec[10];
     458for(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);
    351464}
    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 donnŽes 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
     468Pour SwPPFDataTable, il faut juste creer un stream PPF avant, qui doit rester
     469ouvert tant que le SwPPFDataTable est actif
     470 POutPersist po("swdtable.ppf");
     471 SwPPFDataTable dt(po, 64);
     472
    383473\end{verbatim}
    384474
Note: See TracChangeset for help on using the changeset viewer.