source: Sophya/trunk/SophyaLib/Manual/sophya.tex@ 1360

Last change on this file since 1360 was 1360, checked in by ansari, 25 years ago

Suite documentation TArray , Reza 20/12/2000

File size: 26.5 KB
Line 
1\documentclass[twoside,11pt]{article}
2% Package standard : Utilisation de caracteres accentues, mode francais et graphique
3\usepackage{url}
4\usepackage[latin1]{inputenc}
5\usepackage[T1]{fontenc}
6\usepackage[english]{babel}
7\usepackage{graphicx}
8% package a mettre pour faire du pdf
9\usepackage{palatino}
10
11% Extension de symboles mathematiques
12\usepackage{amssymb}
13
14% Definition pour Docs Sophya
15\usepackage{defsophya}
16
17
18
19\begin{document}
20
21\begin{titlepage}
22% The title page - top of the page with the title of the paper
23\titrehp{Sophya \\ An overview }
24% Authors list
25\auteurs{
26R. Ansari & ansari@lal.in2p3.fr \\
27E. Aubourg & aubourg@hep.saclay.cea.fr \\
28G. Le Meur & lemeur@lal.in2p3.fr \\
29C. Magneville & cmv@hep.saclay.cea.fr \\
30S. Henrot-Versille & versille@in2p3.fr
31}
32% \auteursall
33% The title page - bottom of the page with the paper number
34\titrebp{1}
35\end{titlepage}
36
37\tableofcontents
38
39\newpage
40
41\section{Introduction}
42
43 {\bf SOPHYA} ({\bf SO}ftware for {\bf PHY}sics {\bf A}nalysis)
44is a collection of C++ classes designed for numerical and
45physics analysis software development. Our goal is to provide
46easy to use, yet powerful classes which can be used by scientists.
47We have decided to use as much as possible available
48numerical analysis libraries, encapsulating them whenever
49possible.
50
51 The SOPHYA design and implementation has been carried out
52with the specific goal of providing the general framework for
53the Planck-HFI data processing software. However, most of the
54packages presented here have a more general scope than the CMB analysis
55and Planck mission problem.
56 The source directory tree
57\footnote{ CVS server: cvsserver.lal.in2p3.fr:/projects/Eros/CVSPlanck}
58is organised into a number of modules.
59
60\begin{itemize}
61\item[] {\bf Mgr/} Scripts for code management,
62makefile generation and software installation
63\item[] {\bf SysTools/} General architecture support classes such
64as {\tt PPersist, NDataBlock<T>}, and few utility classes
65({\tt DataCard, DVList} \ldots).
66\item[] {\bf TArray/} template numerical arrays, vectors and matrices \\
67({\tt PixelMap<T> SphericalMap<T>} \ldots)
68\item[] {\bf NTools/} Some standard numerical analysis tools
69(linear, and non linear parameter fitting, FFT, \ldots)
70\item[] {\bf HiStats/} Histogram-ming and data set handling classes \\
71({\tt Histo Histo2D NTuple XNTuple} \ldots)
72\end{itemize}
73
74The modules listed below are more tightly related to the
75CMB (Cosmic Microwave Background) data analysis problem:
76\begin{itemize}
77\item[] {\bf SkyMap/} Local and full sky maps, and few geometry
78handling utility classes. \\
79({\tt PixelMap<T>, LocalMap<T>, SphericalMap<T>, \ldots})
80\item[] {\bf SkyT/}
81classes for spectral emission and detector frequency response modelling \\
82({\tt SpectralResponse, RadSpectra, BlackBody} \ldots)
83\item[] {\bf Samba/} Spherical harmonic analysis.
84\end{itemize}
85
86The following modules contain the interface classes with
87external libraries:
88\begin{itemize}
89\item[] {\bf FitsIOServer/} Classes for handling file input-output
90in FITS format using the cfitsio library.
91\item[] {\bf LinAlg/} Interface with Lapack linear algebra package
92\item[] {\bf IFFTW/} Interface with FFTW package (libfftw.a)
93\end{itemize}
94
95Other modules:
96\begin{itemize}
97\item[] {\bf Tests/} Simple test programs
98\item[] {\bf PrgUtil/} Various utility programs (runcxx, scanppf, scanfits, \ldots)
99\item[] {\bf PMixer/} skymixer and related programs
100\item[] {\bf ProgPI/} interactive analysis tool - It should be noted that
101this module uses the SOPHYA class library and is based on {\bf PI}
102which is a C++ library defining a complete GUI program
103architecture. An additional module (PIext) define the interactive
104analysis program framework and the interfaces with the objects
105in SOPHYA. The {\bf PI/} \footnote{the PI package documentation
106is available from {\bf http://www.lal.in2p3.fr/recherche/eros/PeidaDoc/} }
107and {\bf PIext/} modules are not currently part
108of the SOPHYA CVS structure.
109\end{itemize}
110
111\newpage
112
113\section{Using Sophya}
114Two environment variables {\bf DPCBASEREP} and {\bf EROSCXX} are used
115to define the path where the Sophya libraries and executable are installed.
116{\bf DPCBASEREP} defines the base directory path and {\bf EROSCXX} the
117name of the C++ compiler. The complete path is built using {\bf DPCBASEREP},
118the operating system name (as obtained by the {\tt uname} command), and
119the compiler name. In the example below, we show the complete path
120for a {\tt Linux} system, using the GNU g++ compiler:
121
122\begin{itemize}
123\item \$DPCBASEREP/Include : Include (.h) files
124\item \$DPCBASEREP/Linux-g++/Libs : Path for the archive libraries (.a)
125\item \$DPCBASEREP/Linux-g++/ShLibs : Shared library path (.so)
126\item \$DPCBASEREP/Linux-g++/Exec : Executable file path
127\end{itemize}
128
129In order to use the shared libraries, the {\bf LD\_LIBRARY\_PATH} variable
130should contain the Sophya shared library path
131({\tt \$DPCBASEREP/Linux-g++/ShLibs } when using g++ compiler on Linux)
132
133For modules using external libraries, the {\bf EXTLIBDIR}
134environment variable should contain the path to these libraries
135and corresponding include files.
136C-FitsIO anf FFTW include files should be accessible through: \\
137{\tt \$EXTLIBDIR/Include/FitsIO } \\
138{\tt \$EXTLIBDIR/Include/FFTW } \\
139The corresponding libraries are expected to be found in: \\
140{\tt \$EXTLIBDIR/Linux-g++/Libs} \\
141
142The file {\tt \$DPCBASEREP/Include/MakefileUser.h} defines the compilation
143flags and the list of Sophya libraries. It should be included in the
144user's makefile. The default compilation rules assumes that the object (.o)
145and executable files would be put in the following diretories: \\
146{\tt \$HOME/`uname`-\$EROSCXX/Objs} \\
147{\tt \$HOME/`uname`-\$EROSCXX/Exec}.
148In the case of a {\tt Linux} system and using {\tt g++} as the C++ compiler,
149these two directories would be translated to \\
150{\tt \$HOME/Linux-g++/Objs} and {\tt \$HOME/Linux-g++/Exec}.
151The GNU make program should be used.
152\par
153The file {\tt \$DPCBASEREP/Include/makefile\_auto} defines the rules to compile
154a given source program, and link it against the Sophya libraries to produce
155an executable. The example below shows the steps to compile a program named
156{\tt trivial.cc }.
157\begin{verbatim}
158csh> cp \$DPCBASEREP/Include/makefile_auto makefile
159csh> make trivial
160\end{verbatim}
161This command should compile the {\tt trivial.cc} file,
162and link it against the sophya libraries. The object and executable
163file names are: \\
164{\tt \$HOME/`uname`-\$EROSCXX/Objs/trivial.o} \\
165{\tt \$HOME/`uname`-\$EROSCXX/Exec/trivial}.
166\par
167The file {\tt \$DPCBASEREP/Include/makefile\_example} provides another
168example makefile.
169
170Basic usage of Sophya classes are described in in the following sections.
171Complete Sophya documentation can be found at our web site: \\
172{\bf http://hfi-l2.in2p3.fr}.
173
174
175\section{Module SysTools}
176
177{\bf SysTools} contains utility classes such as {\tt DataCards} or
178{\tt DVlist}, an hierarchy of exception classes for Sophya, a template
179class {\tcls{NDataBlock}} for handling reference counting on numerical
180arrays, as well as classes providing the services for implementing simple
181serialization.
182\vspace*{5mm}
183
184\subsection{SOPHYA persistence}
185\begin{figure}[hbt]
186\dclsa{PPersist}
187\dclsbb{PIOPersist}{PInPersist}
188\dclsb{POutPersist}
189\caption{partial class diagram for classes handling persistence in Sophya}
190\end{figure}
191A simple persistence mechanism is defined in SOPHYA. Its main
192features are:
193\begin{itemize}
194\item[] Portable file format, containing the description of the data structures
195and object hierarchy. \\
196{\bf PPF} {\bf P}ortable {\bf P}ersistence file {\bf F}ormat.
197\item[] Handling of read/write for mutiply referenced objects.
198\item[] All write operations are carried using sequential access only. This
199holds also for read operations, unless positional tags are used.
200SOPHYA persistence services can thus be used to transfer objects
201through network links.
202\item[] The serialisation (reading/writing) for objects for a given class
203is implemented through a delegate object. The delegate class inherits
204from {\tt PPersist} class.
205\end{itemize}
206A complete description of SOPHYA persistence mechanism and guidelines
207for writing delegate classes for handling object persistence is beyond
208the scope of this document. The example in the next paragraph shows
209simple use of SOPHYA persistence.
210
211\subsection{\tcls{NDataBlock}}
212The {\bf \tcls{NDataBlock}} is designed to handle reference counting
213and sharing of memory blocs (contiguous arrays) for numerical data
214types. Initialisation, resizing, basic arithmetic operations, as
215well as persistence handling services are provided.
216The persistence handler class ({\tt \tcls{FIO\_NDataBlock}}) insures
217that a single copy of data is written for multiply referenced objects,
218and the data is shared among objects when reading.
219\par
220The example below shows writing of NDataBlock objects through the
221use of overloaded operator $ << $ :
222\begin{verbatim}
223#include "fiondblock.h"
224// ...
225POutPersist pos("aa.ppf");
226NDataBlock<r_4> rdb(40);
227rdb = 567.89;
228pos << rdb;
229// We can also use the PutObject method
230NDataBlock<int_4> idb(20);
231idb = 123;
232pos.PutObject(idb);
233\end{verbatim}
234The following sample programs show the reading of the created PPF file :
235\begin{verbatim}
236PInPersist pis("aa.ppf");
237NDataBlock<r_4> rdb;
238pis >> rdb;
239cout << rdb;
240NDataBlock<int_4> idb;
241cout << idb;
242\end{verbatim}
243
244\subsection{Using DataCards}
245The {\bf DataCards} class can be used to read parameters from a file.
246Each line in the file starting with \@ defines a set of values
247associated with a keyword. In the example below, we read the
248parameters corresponding with the keyword {\tt SIZE} from the
249file {\tt ex.d}. We suppose that {\tt ex.d} contains the line: \\
250{\tt @SIZE 400 250} \\
251\begin{verbatim}
252#include "datacards.h"
253// ...
254// Initializing DataCards object dc from file ex.d
255DataCards dc( "ex.d" );
256// Getting the first and second parameters for keyword size
257// We define a default value 100
258int size_x = dc.IParam("SIZE", 0, 100);
259int size_y = dc.IParam("SIZE", 1, 100);
260cout << " size_x= " << size_x << " size_y= " << size_y << endl;
261\end{verbatim}
262
263\subsection{Dynamic linker}
264The class {\bf PDynLinkMgr} can be used for managing shared libraries
265at run time. The example below shows the run time linking of a function:\\
266{\tt extern "C" { void myfunc(); } } \\
267\begin{verbatim}
268#include "pdlmgr.h"
269// ...
270string soname = "mylib.so";
271string funcname = "myfunc";
272PDynLinkMgr dyl(soname);
273DlFunction f = dyl.GetFunction(funcname);
274if (f != NULL) {
275// Calling the function
276 f();
277}
278\end{verbatim}
279
280\subsection{CxxCompilerLinker class}
281This class provides the services to compile C++ code and building
282shared libraries, using the same compiler and options which have
283been used to create the SOPHYA shared library.
284The sample program below illustrates using this class to build
285the shared library (myfunc.so) from the source file myfunc.cc :
286\begin{verbatim}
287#include "cxxcmplnk.h"
288// ...
289string flnm = "myfunc.cc";
290string oname, soname;
291int rc;
292CxxCompilerLinker cxx;
293// The Compile method provides a default object file name
294rc = cxx.Compile(flnm, oname);
295if (rc != 0 ) { // Error when compiling ... }
296// The BuildSO method provides a default shared object file name
297rc = cxx.BuildSO(oname, soname);
298if (rc != 0 ) { // Error when creating shared object ... }
299\end{verbatim}
300
301\section{Module TArray}
302{\bf TArray} module contains template classes for handling standard
303operations on numerical arrays. Using the class {\tt \tcls{TArray} },
304it is possible to create and manipulate up to 5-dimension numerical
305arrays {\tt (int, float, double, complex, \ldots)}.
306
307\begin{figure}[hbt]
308\dclsccc{AnyDataObj}{BaseArray}{\tcls{TArray}}
309\ldots \\
310\dclsccc{\tcls{TArray}}{\tcls{TMatrix}}{\tcls{TVector}}
311\caption{partial class diagram for arrays, matrices and vectors}
312\end{figure}
313
314
315\subsection{Using arrays}
316
317The example below shows basic usage of arrays:
318\begin{verbatim}
319#include "array.h"
320// ...
321// Creation , filling of a Matrix
322 TMatrix<r_4> ma(7,9);
323 ma = RegularSequence(0.1, 0.05);
324 cout << "\n ma = " << ma << endl;
325\end{verbatim}
326
327Example of a simple low-pass filter on a one dimensional array (Vector)
328\begin{verbatim}
329// Input Vector containing a noisy periodic signal
330 Vector in(1024), out(1024);
331 in = RandomSequence(RandomSequence::Gaussian, 0., 1.);
332 for(int kk=0; kk<in.Size(); kk++)
333 in(kk) += 2*sin(kk*0.05);
334// Compute the output vector by a simple low pass filter
335 Vector out(1024);
336 int w = 2;
337 for(int k=w; k<in.Size()-w; k++)
338 out(k) = in(Range(k-w, k+w).Sum()/(2.*w+1.);
339\end{verbatim}
340
341\subsection{Memory organisation}
342{\tt \tcls{TArray} } can handle numerical arrays with various memory
343organisation, as long as the spacing (steps) along each axis is
344regular. The five axis are labeled X,Y,Z,T,U. The examples below
345illustrates the memory location for a 2-dimensional, $N_x=4 \times N_y=3$.
346The first index is along the X axis and the second index along the Y axis.
347\begin{verbatim}
348 | (0,0) (0,1) (0,2) (0,3) |
349 | (1,0) (1,1) (1,2) (1,3) |
350 | (2,0) (2,1) (2,2) (2,3) |
351\end{verbatim}
352In the first case, the array is completely packed
353($Step_X=1, Step_Y=N_X=4$), with zero offset,
354while in the second case, $Step_X=2, Step_Y=10, Offset=10$:
355\begin{verbatim}
356 | 0 1 2 3 | | 10 12 14 16 |
357Ex1 | 4 5 6 7 | Ex2 | 20 22 24 26 |
358 | 8 9 10 11 | | 30 32 34 36 |
359\end{verbatim}
360
361For matrices and vectors, an optional argument ({\tt MemoryMapping})
362can be used to select the memory mapping, where two basic schemes
363are available: \\
364{\tt CMemoryMapping} and {\tt FortranMemoryMapping}. \\
365In the case where {\tt CMemoryMapping} is used, a given matrix line
366is packed in memory, while the columns are packed when
367{\tt FortranMemoryMapping} is used. The first index when addressing
368the matrix elements (line number index) runs along
369the Y-axis if {\tt CMemoryMapping} is used, and along the X-axis
370in the case of {\tt FortranMemoryMapping}.
371Arithmetic operations between matrices
372with different memory organisation is allowed as long as
373the two matrices have the same sizes (Number of rows and columns).
374The following code example and the corresponding output illustrates
375these two memory mappings.
376\begin{verbatim}
377TArray<r_4> X(4,2);
378X = RegularSequence(1,1);
379cout << "Array X= " << X << endl;
380TMatrix<r_4> X_C(X, true, BaseArray::CMemoryMapping);
381cout << "Matrix X_C (CMemoryMapping) = " << X_C << endl;
382TMatrix<r_4> X_F(X, true, BaseArray::FortranMemoryMapping);
383cout << "Matrix X_F (FortranMemoryMapping) = " << X_F << endl;
384\end{verbatim}
385This code would produce the following output (X\_F = Transpose(X\_C)) :
386\begin{verbatim}
387Array X=
388--- TArray<f> ND=2 SizeX*Y*...= 4x2 ---
3891, 2, 3, 4
3905, 6, 7, 8
391
392Matrix X_C (CMemoryMapping) =
393--- TMatrix<f>(NRows=2, NCols=4) ND=2 SizeX*Y*...= 4x2 ---
3941, 2, 3, 4
3955, 6, 7, 8
396
397Matrix X_F (FortranMemoryMapping) =
398--- TMatrix<f>(NRows=4, NCols=2) ND=2 SizeX*Y*...= 4x2 ---
3991, 5
4002, 6
4013, 7
4024, 8
403\end{verbatim}
404
405\newpage
406
407\section{Module HiStats}
408\begin{figure}[hbt]
409\dclsccc{AnyDataObj}{Histo}{HProf}
410\dclsbb{AnyDataObj}{Histo2D}
411\dclsbb{AnyDataObj}{Ntuple}
412\dclsb{XNtuple}
413\caption{partial class diagram for histograms and ntuples}
414\end{figure}
415
416{\bf HiStats} contains classes for creating, filling, printing and
417doing various operations on one or two dimensional histograms
418{\tt Histo} and {\tt Histo2D} as well as profile histograms {\tt HProf}. \\
419This module also contains {\tt NTuple} and {\tt XNTuple} which are
420more or less the same that the binary FITS tables.
421
422\subsection{1D Histograms}
423
424For 1D histograms, various numerical methods are provided such as
425computing means and sigmas, finding maxima, fitting, rebinning,
426integrating \dots \\
427The example below shows creating and filling a one dimensionnal histogram
428of 100 bins from $-5.$ to $+5.$ to create a gaussian normal distribution
429with errors~:
430\begin{verbatim}
431#include "histos.h"
432// ...
433Histo H(-0.5,0.5,100);
434H.Errors();
435for(int i=0;i<25000;i++) {
436 double x = NorRand();
437 H.Add(x);
438}
439H.Print(80);
440\end{verbatim}
441
442\subsection{2D Histograms}
443
444Much of these operations are also valid for 2D histograms. 1D projection
445or slices can be set~:
446\begin{verbatim}
447#include "histos2.h"
448// ...
449Histo H2(-1.,1.,100,0.,60.,50);
450H2.SetProjX(); // create the 1D histo for X projection
451H2.SetBandX(25.,35.); // create 1D histo projection for 25.<y<35.
452H2.SetBandX(35.,45.); // create 1D histo projection for 35.<y<45.
453H2.SetBandX(40.,55.); // create 1D histo projection for 40.<y<55.
454//... fill H2 with what ever you want
455H2.Print();
456Histo *hx = H2.HProjX();
457 hx->Print(80);
458Histo *hbx2 = HBandX(1); // Get the second X band (35.<y<45.)
459 hbx2->Print(80);
460\end{verbatim}
461
462\subsection{Profile Histograms}
463
464Profiles histograms contains the mean and the sigma of the distribution
465of the values filled in each bin. The sigma can be changed to
466the error on the mean. When filled, the profile histogram looks
467like a 1D histogram and much of the operations that can be done on 1D histo
468may be applied onto profile histograms.
469
470\subsection{Ntuples}
471
472NTuple are memory resident tables of 32 bits floating values (float).
473They are arranged in columns. Each line is often called an event.
474These objects are frequently used to analyze data.
475Graphicals tools (spiapp) can plot a column against an other one
476with respect to various selection cuts. \\
477Here is an example of creation and filling~:
478\begin{verbatim}
479#include "ntuple.h"
480#include "srandgen.h"
481// ...
482char* nament[4] = {"i","x","y","ey"};
483r_4 xnt[4];
484NTuple NT(4,nament);
485for(i=0;i<5000;i++) {
486 xnt[0] = i+1;
487 xnt[1] = 5.*drandpm1(); // a random value between -5 and +5
488 xnt[2] = 100.*exp(-0.5*xnt[1]*xnt[1]) + 1.;
489 xnt[3] = sqrt(xnt[2]);
490 xnt[2] += xnt[3] * NorRand(); // add a random gaussian error
491 NT.Fill(xnt);
492}
493\end{verbatim}
494
495XNtuple are sophisticated NTuple : they accept various types
496of column values (float,double,int,...) and can be as big as
497needed (they used buffers on hard disk).
498
499\subsection{Writing, seeing \dots }
500
501All these objects have been design to be written to or read from a persistant file.
502The following example shows how to write the previously created objects
503into such a file~:
504\begin{verbatim}
505//-- Writing
506{
507char *fileout = "myfile.ppf";
508string tag;
509POutPersist outppf(fileout);
510tag = "H"; outppf.PutObject(H,tag);
511tag = "H2"; outppf.PutObject(H2,tag);
512tag = "NT"; outppf.PutObject(NT,tag);
513} // closing ``}'' destroy ``outppf'' and automatically close the file !
514\end{verbatim}
515
516Sophya graphical tools (spiapp) can automatically display and operate
517all these objects.
518
519\section{Module SkyMap}
520
521\section{Module NTools}
522
523This module provides elementary numerical tools for numerical integration,
524fitting, sorting and ODE solving. FFTs are also provided (Mayer,FFTPack).
525
526\subsection{Fitting}
527
528Fitting is done with two classes {\tt GeneralFit} and {\tt GeneralFitData}
529and is based on the Levenberg-Marquardt method.
530GeneralFitData is a class which provide a description of the data
531to be fitted. GeneralFit is the fitter class. Parametrized functions
532can be given as classes which inherit {\tt GeneralFunction}
533or as simple C functions. Classes of pre-defined functions are provided
534(see files fct1dfit.h and fct2dfit.h). The user interface is very close
535from that of the CERN {\tt Minuit} fitter.
536Number of objects (Histo, HProf \dots ) are interfaced with GeneralFit
537and can be easily fitted. \\
538Here is a very simple example for fitting the previously created NTuple
539with a gaussian~:
540\begin{verbatim}
541#include "fct1dfit.h"
542// ...
543
544// Read from ppf file
545NTuple nt;
546{
547PInPersist pis("myfile.ppf");
548string tag = "NT"; pis.GetObject(nt,tag);
549}
550
551// Fill GeneralData
552GeneralData mGdata(nt.NEntry());
553for(int i=0; i<nt.NEntry(); i++)
554 mGdata.AddData1(xnt[1],xnt[2],xnt[3]); // Fill x, y and error on y
555mGData.PrintStatus();
556
557// Function for fitting : y = f(x) + noise
558Gauss1DPol mFunction; // gaussian + constant
559
560// Prepare for fit
561GeneralFit mFit(&mFunction); // create a fitter for the choosen function
562mFit.SetData(&mGData); // connect data to the fitter
563
564// Set and initialize the parameters (that's non-linear fitting!)
565// (num par, name, guess start, step, [limits min and max])
566mFit.SetParam(0,"high",90.,1..);
567mFit.SetParam(1,"xcenter",0.05,0.01);
568mFit.SetParam(2,"sigma",sig,0.05,0.01,10.);
569 // Give limits to avoid division by zero
570mFit.SetParam(3,"constant",0.,1.);
571
572// Fit and print result
573int rcfit = mFit.Fit();
574mFit.PrintFit();
575if(rcfit>0) {)
576 cout<<"Reduce_Chisquare = "<<mFit.GetChi2Red()
577 <<" nstep="<<mFit.GetNStep()<<" rc="<<rcfit<<endl;
578} else {
579 cout<<"Fit_Error, rc = "<<rcfit<<" nstep="<<mFit.GetNStep()<<endl;
580 mFit.PrintFitErr(rcfit);
581}
582
583// Get the result for further use
584TVector<r_8> ParResult = mFit.GetParm();
585cout<<ParResult;
586\end{verbatim}
587
588Much more usefull possibilities and detailed informations might be found
589in the HTML pages of the Sophya manual.
590
591\subsection{Polynomial}
592
593Polynomials of 1 or 2 variables are supported ({\tt Poly} and {\tt Poly2}).
594Various operations are supported~:
595\begin{itemize}
596\item elementary operations between polynomials $(+,-,*,/) $
597\item setting or getting coefficients
598\item computing the value of the polynomial for a given value
599 of the variable(s),
600\item derivating
601\item computing roots (degre 1 or 2)
602\item fitting the polynomial to vectors of data.
603\end{itemize}
604Here is an example of polynomial fitting~:
605\begin{verbatim}
606#include "poly.h"
607// ...
608Poly pol(2);
609pol[0] = 100.; pol[1] = 0.; pol[2] = 0.01; // Setting coefficients
610TVector<r_8> x(100);
611TVector<r_8> y(100);
612TVector<r_8> ey(100);
613for(int i=0;i<100;i++) {
614 x(i) = i;
615 ey(i) = 10.;
616 y(i) = pol((double) i) + ey(i)*NorRand();
617 ey(i) *= ey(i)
618}
619
620TVector<r_8> errcoef;
621Poly polfit;
622polfit.Fit(x,y,ey,2,errcoef);
623
624cout<<"Fit Result"<<polfit<<endl;
625cout<<"Errors :"<<errcoef;
626\end{verbatim}
627
628Similar operations can be done on polynomials with 2 variables.
629
630\section{Module Samba}
631
632\section{Module SkyT}
633
634
635\newpage
636\section{Building and installing Sophya}
637Presently, the Sophya library compilation has been tested with the following
638compiler/platform pairs:
639
640\begin{center}
641\begin{tabular}{ll}
642Compaq/DEC OSF1 & cxx (6.0 , 6.2) \\
643Linux & g++ (2.91 , 2.95) \\
644Linux & KCC (3.4) \\
645Solaris & g++ (2.95) \\
646SGI IRIX64 & CC \\
647\end{tabular}
648\end{center}
649
650Some of the modules in the Sophya package uses external libraries. The
651{\bf FitsIOServer} is the example of such a module, where the {\tt libcfitsio.a}
652is used.
653The build procedure expects to find the include files and the libraries in: \\
654{\tt \$EXTLIBDIR/Include/FitsIO } \\
655{\tt \$EXTLIBDIR/`uname`-\$EROSCXX/Libs} \\
656
657The object files from a given Sophya module are grouped in an archive library
658with the module's name ({\tt libmodulename.a}). All Sophya modules
659 are grouped in a single shared library ({\tt libsophya.so}), while the
660modules with reference to external libraries are grouped in
661({\tt libextsophya.so}). The {\bf PI} and {\bf PIext} modules are
662grouped in ({\tt libPI.so}).
663
664The environment variables {\bf DPCDEVREP}, {\bf EXTLIBDIR} and {\bf EROSCXX}
665must be defined in order to install the Sophya package.
666In the example below, we assume that we want to install Sophya from a
667released (tagged) version in the source directory {\tt \$SRC} in the
668{\tt /usr/local/Sophya} diretory, using {\tt g++}. We assume that
669the external libraries directory tree has been set up in
670{\tt /usr/local/ExtLibs/}. \\[3mm]
671\centerline{
672 \rule{20mm}{0.5mm}
673 {\bf \large the use of GNU make is mandatory}
674 \rule{20mm}{0.5mm} }
675
676\vspace*{3mm}
677\begin{verbatim}
678# We select our C++ compiler
679csh> setenv EROSCXX g++
680# Setup the build directory
681csh> mkdir /usr/local/Sophya/
682csh> setenv DPCDEVREP /usr/local/Sophya/
683csh> setenv EXTLIBDIR /usr/local/ExtLibs/
684# Use the top level makefile in Mgr/
685csh> cd \$SRC
686csh> cp Mgr/Makefile Makefile
687# Step 1: Create the directory tree and copy the include files (.h)
688csh> make depend
689# Step 2: Compile the modules without external library reference
690csh> make libs
691# Step 3: Compile the modules WITH external library reference (optional)
692csh> make extlibs
693# Step 4: Build libsophya.so
694csh> make slb
695# Step 5: Build libextsophya.so (optional)
696csh> make slbext
697# Step 6: Compile the PI and PIext modules (optional)
698csh> make PI
699# Step 7: Build the corresponding shared library libPI.so (optional)
700csh> make slbpi
701\end{verbatim}
702
703To compile all modules and build the shared libraries, it is possible
704to use:
705\begin{verbatim}
706# Step 2,3,6
707csh> make all
708# Step 4,5,7
709csh> make slball
710\end{verbatim}
711
712At this step, all libraries sould have been made. Programs using
713Sophya libraries can now be built:
714\begin{verbatim}
715# To compile test programs
716csh> cd Tests
717csh> make arrt ...
718csh> cd ..
719# To compile other programs, for example from the PMixer module
720csh> cd PMixer
721csh> make
722csh> cd ..
723# To build (s)piapp (libPI.so is needed)
724csh> cd ProgPI
725csh> make
726csh> cd ..
727\end{verbatim}
728
729\subsection{Mgr module}
730This module contains scripts which can be used for generating the
731makefiles for each module.
732\begin{itemize}
733\item {\bf Makefile} Top level Makefile for builiding the libraries.
734\item {\bf Makefile.h} contains the defintion of compilation flags for the
735different compilers and systems. This file is used for building the
736library and generating {\bf MakefileUser.h} (to be included in makefiles).
737\item {\bf Makefile.slb} contains the rules for building shared libraries
738for the different compilers and systems. (to be included in makefiles)
739\item {\bf crerep\_sophya} c-shell script for creating the directory tree
740under {\tt \$DPCBASEREP} and {\tt \$DPCDEVREP}
741\item {\bf install\_sophya} c-shell script for installing the Sophya package.
742Usually from {\tt \$DPCDEVREP} to {\tt \$DPCBASEREP}
743\item {\bf mkmflien} c-shell script for making symbolic links or copying
744include files to {\tt \$DPCDEVREP/Include} or {\tt \$DPCBASEREP/Include}
745\item {\bf mkmf} c-shell script for generating module makefiles and the
746top level makefile (named GNUmakefile)
747\item {\bf mkmflib} c-shell script for generating each library module
748makefile (named GNUmakefile)
749\item {\bf mkmfprog} c-shell script for generating makefile for a module
750containing the source for executable programs (named GNUmakefile).
751\item {\bf mkmfPI} c-shell script for generating makefile for PI and PIext
752modules (named GNUmakefile)
753\item {\bf libdirs} List of Sophya modules without reference to external
754libraries.
755\item {\bf extlibdirs} List of Sophya modules with reference to external
756libraries.
757
758\end{itemize}
759
760\newpage
761\appendix
762\section{Exception handling: An example}
763For simple programs, it is a good practice to handle
764the exceptions at least at high level, in the {\tt main()} function.
765The example below shows the exception handling and the usage
766of Sophya persistence.
767
768\input{ex1.inc}
769
770
771\end{document}
Note: See TracBrowser for help on using the repository browser.