source: Sophya/trunk/Poubelle/DPC:FitsIOServer/NTools/tvector.cc@ 658

Last change on this file since 658 was 658, checked in by ansari, 26 years ago

no message

File size: 6.2 KB
RevLine 
[658]1// $Id: tvector.cc,v 1.1.1.1 1999-11-26 16:37:12 ansari Exp $
2// C.Magneville 04/99
3#include "machdefs.h"
4#include <stdio.h>
5#include <stdlib.h>
6#include <iostream.h>
7#include <complex>
8#include "pexceptions.h"
9#include "tvector.h"
10#include "objfio.h"
11
12template <class T>
13TVector<T>::TVector(uint_4 n)
14// Constructeur d'un vecteur de "n" elements
15: TMatrix<T>(n,1)
16{
17}
18
19template <class T>
20TVector<T>::TVector(uint_4 n, T* values,Bridge* br)
21// Construit un vecteur de n elements. On fournit
22// le tableau des valeurs et eventuellement un Bridge.
23: TMatrix<T>(n,1,values,br)
24{
25}
26
27template <class T>
28TVector<T>::TVector(const TVector<T>& v)
29// Constructeur par copie (partage si "v" temporaire).
30: TMatrix<T>(v)
31{
32}
33
34template <class T>
35TVector<T>::TVector(const TVector<T>& v,bool share)
36// Constructeur par copie avec possibilite de forcer le partage ou non.
37: TMatrix<T>(v,share)
38{
39}
40
41template <class T>
42TVector<T>::TVector(const TMatrix<T>& a)
43// Constructeur a partir d'une matrice "a" de dimension (n,1)
44: TMatrix<T>(a)
45{
46if(a.NCols() != 1)
47 throw(SzMismatchError("TVector(const TMatrix<T>& a) size mismatch, ncol!=1"));
48}
49
50#include "generalfit.h"
51//////////////////////////////////////////////////////////
52//**** Residus des fits
53TVector<r_8> TVector<r_8>::FitResidus(GeneralFit& gfit,double xorg,double dx)
54// Retourne une classe contenant les residus du fit ``gfit''.
55// La coordonnee de l'element (i) est -> x = xorg + i*dx
56{
57if(NElts()<=0)
58 throw(SzMismatchError("TVector::FitResidus size mismatch\n"));
59GeneralFunction* f = gfit.GetFunction();
60if(f==NULL)
61 throw(NullPtrError("TVector::FitResidus GeneraFit==NULL\n"));
62int npar = gfit.GetNPar();
63if(npar==0)
64 throw(SzMismatchError("TVector::FitResidus GeneraFit 0 parametre\n"));
65double* par = new double[npar];
66{for(int i=0;i<npar;i++) par[i] = gfit.GetParm(i);}
67TVector<r_8> v(*this);
68for(uint_4 i=0;i<NElts();i++) {
69 double x = xorg+i*dx;
70 v(i) -= f->Value(&x,par);
71}
72delete [] par;
73return v;
74}
75
76TVector<r_8> TVector<r_8>::FitFunction(GeneralFit& gfit,double xorg,double dx)
77// Retourne une classe contenant la fonction du fit ``gfit''.
78// La coordonnee de l'element (i) est -> x = xorg + i*dx
79{
80if(NElts()<=0)
81 throw(SzMismatchError("TVector::FitFunction size mismatch\n"));
82GeneralFunction* f = gfit.GetFunction();
83if(f==NULL)
84 throw(NullPtrError("TVector::FitFunction GeneraFit==NULL\n"));
85int npar = gfit.GetNPar();
86if(npar==0)
87 throw(SzMismatchError("TVector::FitFunction GeneraFit 0 parametre\n"));
88double* par = new double[npar];
89{for(int i=0;i<npar;i++) par[i] = gfit.GetParm(i);}
90TVector<r_8> v(*this);
91for(uint_4 i=0;i<NElts();i++) {
92 double x = xorg+i*dx;
93 v(i) = f->Value(&x,par);
94}
95delete [] par;
96return v;
97}
98
99///////////////////////////////////////////////////////////
100// --------------------------------------------------------
101// Les objets delegues pour la gestion de persistance
102// --------------------------------------------------------
103///////////////////////////////////////////////////////////
104
105template <class T>
106FIO_TVector<T>::FIO_TVector()
107{
108dobj=new TVector<T>;
109ownobj=true;
110}
111
112template <class T>
113FIO_TVector<T>::FIO_TVector(string const & filename)
114{
115dobj=new TVector<T>;
116ownobj=true;
117Read(filename);
118}
119
120template <class T>
121FIO_TVector<T>::FIO_TVector(const TVector<T> & obj)
122{
123dobj = new TVector<T>(obj);
124ownobj=true;
125}
126
127template <class T>
128FIO_TVector<T>::FIO_TVector(TVector<T> * obj)
129{
130dobj = obj;
131ownobj=false;
132}
133
134template <class T>
135FIO_TVector<T>::~FIO_TVector()
136{
137if (ownobj && dobj) delete dobj;
138}
139
140template <class T>
141AnyDataObj* FIO_TVector<T>::DataObj()
142{
143return(dobj);
144}
145
146template <class T>
147void FIO_TVector<T>::ReadSelf(PInPersist& is)
148{
149// On lit les 3 premiers uint_4
150// 0: Numero de version, 1 : NRows=NElts, 2 : NCol=1
151uint_4 itab[3];
152is.Get(itab,3);
153if (dobj == NULL) dobj = new TVector<T>(itab[1]);
154else dobj->ReSize(itab[1]);
155// On lit le NDataBlock
156FIO_NDataBlock<T> fio_nd(&dobj->DataBlock());
157fio_nd.Read(is);
158}
159
160template <class T>
161void FIO_TVector<T>::WriteSelf(POutPersist& os) const
162{
163if (dobj == NULL) return;
164// On ecrit 3 uint_4 ....
165// 0: Numero de version, 1 : NRows=NElts, 2 : NCol=1
166uint_4 itab[3];
167 itab[0] = 1; // Numero de version a 1
168itab[1] = dobj->NElts();
169itab[2] = 1;
170os.Put(itab,3);
171// On ecrit le NDataBlock
172FIO_NDataBlock<T> fio_nd(&dobj->DataBlock());
173fio_nd.Write(os);
174}
175
176///////////////////////////////////////////////////////////////
177#ifdef __CXX_PRAGMA_TEMPLATES__
178#pragma define_template TVector<uint_1>
179#pragma define_template TVector<uint_2>
180#pragma define_template TVector<int_2>
181#pragma define_template TVector<int_4>
182#pragma define_template TVector<int_8>
183#pragma define_template TVector<uint_4>
184#pragma define_template TVector<uint_8>
185#pragma define_template TVector<r_4>
186#pragma define_template TVector<r_8>
187#pragma define_template TVector< complex<float> >
188#pragma define_template TVector< complex<double> >
189// Instances des delegues FileIO (PPersist)
190#pragma define_template FIO_TVector<uint_1>
191#pragma define_template FIO_TVector<uint_2>
192#pragma define_template FIO_TVector<int_2>
193#pragma define_template FIO_TVector<int_4>
194#pragma define_template FIO_TVector<int_8>
195#pragma define_template FIO_TVector<uint_4>
196#pragma define_template FIO_TVector<uint_8>
197#pragma define_template FIO_TVector<r_8>
198#pragma define_template FIO_TVector<r_4>
199#pragma define_template FIO_TVector< complex<float> >
200#pragma define_template FIO_TVector< complex<double> >
201#endif
202
203#if defined(ANSI_TEMPLATES) || defined(GNU_TEMPLATES)
204template class TVector<uint_1>;
205template class TVector<uint_2>;
206template class TVector<int_2>;
207template class TVector<int_4>;
208template class TVector<int_8>;
209template class TVector<uint_4>;
210template class TVector<uint_8>;
211template class TVector<r_4>;
212template class TVector<r_8>;
213template class TVector< complex<float> >;
214template class TVector< complex<double> >;
215// Instances des delegues FileIO (PPersist)
216template class FIO_TVector<uint_1>;
217template class FIO_TVector<uint_2>;
218template class FIO_TVector<int_2>;
219template class FIO_TVector<int_4>;
220template class FIO_TVector<int_8>;
221template class FIO_TVector<uint_4>;
222template class FIO_TVector<uint_8>;
223template class FIO_TVector<r_8>;
224template class FIO_TVector<r_4>;
225template class FIO_TVector< complex<float> >;
226template class FIO_TVector< complex<double> >;
227#endif
Note: See TracBrowser for help on using the repository browser.