source: Sophya/trunk/SophyaPI/PIext/nomtmatvecadapter.cc@ 1215

Last change on this file since 1215 was 1215, checked in by ercodmgr, 25 years ago

intro corrections typeid(T).name() pour Linux cmv 1/10/00

File size: 8.1 KB
Line 
1#include "machdefs.h"
2#include <stdlib.h>
3#include <typeinfo>
4#include <iostream.h>
5#include <string>
6#include <complex>
7
8#include "tvector.h"
9#include "objfitter.h"
10#include "nomtmatvecadapter.h"
11#include "piscdrawwdg.h"
12#include "pitvmaad.h"
13
14#include "fioarr.h"
15
16
17
18//----------------------------------------------------------------
19// Class Adaptateur d'objet (Pour NamedObjMgr) d'objet TMatrix<T>
20//----------------------------------------------------------------
21
22
23/* --Methode-- */
24template <class T>
25NOMAdapter_TMatrix<T>::NOMAdapter_TMatrix(TMatrix<T>* o)
26 : NObjMgrAdapter(o)
27{
28mMtx = o;
29}
30
31/* --Methode-- */
32template <class T>
33NOMAdapter_TMatrix<T>::~NOMAdapter_TMatrix()
34{
35}
36
37/* --Methode-- */
38template <class T>
39NObjMgrAdapter* NOMAdapter_TMatrix<T>::Clone(AnyDataObj* o)
40{
41TMatrix<T>* m = dynamic_cast<TMatrix<T> *>(o);
42if (m) return ( new NOMAdapter_TMatrix<T>(m) );
43return ( new NObjMgrAdapter(o) );
44}
45
46/* --Methode-- */
47template <class T>
48string NOMAdapter_TMatrix<T>::GetDataObjType()
49{
50string type = "TMatrix< ";
51
52TVector<T>* v = dynamic_cast<TVector<T> *>(mMtx);
53if (v != NULL) type = "TVector< ";
54
55type += DecodeTypeIdName(typeid(T).name());
56type += " > ";
57return(type);
58}
59
60/* --Methode-- */
61template <class T>
62AnyDataObj* NOMAdapter_TMatrix<T>::CloneDataObj()
63{
64if (mMtx == NULL) return(NULL);
65TVector<T>* v = dynamic_cast<TVector<T> *>(mMtx);
66if (v != NULL) return( new TVector<T>(*v, false) );
67else return ( new TMatrix<T>(*mMtx, false) );
68}
69
70/* --Methode-- */
71template <class T>
72void NOMAdapter_TMatrix<T>::SavePPF(POutPersist& pos, string const & nom)
73{
74if (mMtx == NULL) return;
75TVector<T>* v = dynamic_cast<TVector<T> *>(mMtx);
76if (v != NULL) {
77 FIO_TArray<T> fio(v);
78 fio.Write(pos, nom);
79 }
80else {
81 FIO_TArray<T> fio(mMtx);
82 fio.Write(pos, nom);
83 }
84}
85
86/* --Methode-- */
87template <class T>
88void NOMAdapter_TMatrix<T>::Print(ostream& os)
89{
90TVector<T>* v = dynamic_cast<TVector<T> *>(mMtx);
91if (v != NULL) os << (*v);
92else os << (*mMtx);
93}
94
95/* --Methode-- */
96template <class T>
97PIDrawer* NOMAdapter_TMatrix<T>::GetDrawer(string & dopt)
98{
99TVector<T>* v = dynamic_cast<TVector<T> *>(mMtx);
100if (v == NULL) return(NULL);
101else {
102 dopt = "thinline," + dopt;
103 return( new PIYfXDrawer( new POTVectorAdapter<T>(v, false), NULL, true) );
104 }
105}
106
107/* --Methode-- */
108template <class T>
109P2DArrayAdapter* NOMAdapter_TMatrix<T>::Get2DArray(string &)
110{
111return ( new POTMatrixAdapter<T>(mMtx, false) );
112}
113
114/* --Methode-- */
115template <class T>
116NTupleInterface* NOMAdapter_TMatrix<T>::GetNTupleInterface(bool& adel)
117{
118adel = true;
119return( new NTupInt_TMatrix<T>(mMtx) );
120}
121
122
123/* --Methode-- */
124template <class T>
125GeneralFitData* NOMAdapter_TMatrix<T>::GetGeneralFitData(bool& adel
126 ,GeneralFitData::FitErrType errtype,double errscale,double errmin
127 ,int i1,int i2,int j1,int j2)
128{
129adel = false;
130if(!mMtx) return(NULL);
131
132int nx,ny;
133TVector<T>* vec = dynamic_cast<TVector<T> *>(mMtx);
134
135if(vec) { // C'est un TVector
136 nx = vec->NElts();
137 ny = 1;
138} else {
139 nx = mMtx->NRows();
140 ny = mMtx->NCol();
141 if(nx<=0 || ny<=0) return(NULL);
142}
143
144i1 = (i1<0||i1>=nx)? 0: i1;
145i2 = (i2<0||i2>=nx||i2<i1)? nx-1: i2;
146j1 = (j1<0||j1>=ny)? 0: j1;
147j2 = (j2<0||j2>=ny||j2<j1)? ny-1: j2;
148
149GeneralFitData* mGData = NULL;
150
151if(vec) { // C'est un TVector
152 mGData = new GeneralFitData(1,(i2-i1+1),0);
153 adel = true;
154 for(int i=i1;i<=i2;i++) {
155 double x = (double) i;
156 double f = (*vec)(i);
157 double e = 1.;
158 e = GeneralFitData::ComputeError(f,e,errtype,errscale,errmin);
159 mGData->AddData1(x,f,e);
160 }
161} else {
162 mGData = new GeneralFitData(2,(i2-i1+1)*(j2-j1+1),0);
163 adel = true;
164 for(int i=i1;i<=i2;i++) for(int j=j1;j<=j2;j++) {
165 double x = (double) i;
166 double y = (double) j;
167 double f = (*mMtx)(i,j);
168 double e = 1.;
169 e = GeneralFitData::ComputeError(f,e,errtype,errscale,errmin);
170 mGData->AddData2(x,y,f,e);
171 }
172}
173
174return mGData;
175}
176
177template <class T>
178AnyDataObj* NOMAdapter_TMatrix<T>::FitResidusObj(GeneralFit& mfit)
179{
180TVector<T>* vec = dynamic_cast<TVector<T> *>(mMtx);
181if(vec) {
182 TVector<T>* v = new TVector<T>(ObjectFitter::FitResidus(*vec,mfit),true);
183 return v;
184} else {
185 TMatrix<T>* m = new TMatrix<T>(ObjectFitter::FitResidus(*mMtx,mfit),true);
186 return m;
187}
188}
189
190template <class T>
191AnyDataObj* NOMAdapter_TMatrix<T>::FitFunctionObj(GeneralFit& mfit)
192{
193TVector<T>* vec = dynamic_cast<TVector<T> *>(mMtx);
194if(vec) {
195 TVector<T>* v = new TVector<T>(ObjectFitter::FitFunction(*vec,mfit),true);
196 return v;
197} else {
198 TMatrix<T>* m = new TMatrix<T>(ObjectFitter::FitFunction(*mMtx,mfit),true);
199 return m;
200}
201}
202
203
204// -------------------------------------------------------------
205
206/* --Methode-- */
207template <class T>
208NTupInt_TMatrix<T>::NTupInt_TMatrix(TMatrix<T>* m)
209{
210mMtx = m;
211}
212
213/* --Methode-- */
214template <class T>
215NTupInt_TMatrix<T>::~NTupInt_TMatrix()
216{
217}
218
219/* --Methode-- */
220template <class T>
221uint_4 NTupInt_TMatrix<T>::NbLines() const
222{
223return( mMtx->NRows()*mMtx->NCols() );
224}
225
226/* --Methode-- */
227template <class T>
228uint_4 NTupInt_TMatrix<T>::NbColumns() const
229{
230return(8);
231}
232
233/* --Methode-- */
234template <class T>
235r_8* NTupInt_TMatrix<T>::GetLineD(int n) const
236{
237int i,j;
238if ((n < 0) || (n >= (int)(mMtx->NRows()*mMtx->NCols()) )) {
239 mRet[0] = n;
240 for(i=1; i<8; i++) mRet[i] = 0.;
241}
242else {
243 i = n/mMtx->NCols(); j = n%mMtx->NCols();
244 mRet[0] = n; mRet[1] = i; mRet[2] = j;
245 mRet[3] = (*mMtx)(i,j);
246 mRet[4] = mRet[2]; mRet[5] = 0.;
247 mRet[6] = mRet[2]; mRet[7] = 0.;
248 }
249return(mRet);
250}
251
252/* --Methode-- */
253template <class T>
254string NTupInt_TMatrix<T>::VarList_C(const char* nx) const
255{
256string nomx;
257if (nx) nomx = nx;
258else nomx = "_xh_";
259string vardec = "double n,r,c,val,real,imag,mod,phas; \n";
260vardec += "n = " + nomx + "[0]; r = " + nomx + "[1]; c = " + nomx + "[2]; \n";
261vardec += "val = " + nomx + "[3]; \n";
262vardec += "real = " + nomx + "[4]; imag = " + nomx + "[5]; \n";
263vardec += "mod = " + nomx + "[6]; phas = " + nomx + "[7]; \n";
264return(vardec);
265}
266
267/* --Methode-- */
268r_8* NTupInt_TMatrix< complex<float> >::GetLineD(int n) const
269{
270int i,j;
271if ((n < 0) || (n >= (int)(mMtx->NRows()*mMtx->NCols()) )) {
272 mRet[0] = n;
273 for(i=1; i<8; i++) mRet[i] = 0.;
274}
275else {
276 i = n/mMtx->NCols(); j = n%mMtx->NCols();
277 mRet[0] = n; mRet[1] = i; mRet[2] = j;
278 mRet[4] = (*mMtx)(i,j).real(); mRet[5] = (*mMtx)(i,j).imag();
279 mRet[3] = mRet[6] = sqrt(mRet[4]*mRet[4]+mRet[5]*mRet[5]);
280 mRet[7] = atan2(mRet[5], mRet[4]);
281}
282return(mRet);
283}
284
285r_8* NTupInt_TMatrix< complex<double> >::GetLineD(int n) const
286{
287int i,j;
288if ((n < 0) || (n >= (int)(mMtx->NRows()*mMtx->NCols()) )) {
289 mRet[0] = n;
290 for(i=1; i<8; i++) mRet[i] = 0.;
291}
292else {
293 i = n/mMtx->NCols(); j = n%mMtx->NCols();
294 mRet[0] = n; mRet[1] = i; mRet[2] = j;
295 mRet[4] = (*mMtx)(i,j).real(); mRet[5] = (*mMtx)(i,j).imag();
296 mRet[3] = mRet[6] = sqrt(mRet[4]*mRet[4]+mRet[5]*mRet[5]);
297 mRet[7] = atan2(mRet[5], mRet[4]);
298}
299return(mRet);
300}
301
302
303#ifdef __CXX_PRAGMA_TEMPLATES__
304//#pragma define_template NOMAdapter_TMatrix<uint_2>
305//#pragma define_template NOMAdapter_TMatrix<int_2>
306#pragma define_template NOMAdapter_TMatrix<int_4>
307#pragma define_template NOMAdapter_TMatrix<r_4>
308#pragma define_template NOMAdapter_TMatrix<r_8>
309//#pragma define_template NOMAdapter_TMatrix< complex<r_4> >
310//#pragma define_template NOMAdapter_TMatrix< complex<r_8> >
311//#pragma define_template NTupInt_TMatrix<uint_2>
312//#pragma define_template NTupInt_TMatrix<int_2>
313#pragma define_template NTupInt_TMatrix<int_4>
314#pragma define_template NTupInt_TMatrix<r_4>
315#pragma define_template NTupInt_TMatrix<r_8>
316#pragma define_template NTupInt_TMatrix< complex<r_4> >
317#pragma define_template NTupInt_TMatrix< complex<r_8> >
318#endif
319
320#if defined(ANSI_TEMPLATES)
321//template class NOMAdapter_TMatrix<uint_2>;
322//template class NOMAdapter_TMatrix<int_2>;
323template class NOMAdapter_TMatrix<int_4>;
324template class NOMAdapter_TMatrix<r_4>;
325template class NOMAdapter_TMatrix<r_8>;
326//template class NOMAdapter_TMatrix< complex<r_4> >;
327//template class NOMAdapter_TMatrix< complex<r_8> >;
328// template class NTupInt_TMatrix<uint_2>;
329// template class NTupInt_TMatrix<int_2>;
330template class NTupInt_TMatrix<int_4>;
331template class NTupInt_TMatrix<r_4>;
332template class NTupInt_TMatrix<r_8>;
333template class NTupInt_TMatrix< complex<r_4> >;
334template class NTupInt_TMatrix< complex<r_8> >;
335#endif
Note: See TracBrowser for help on using the repository browser.