source: Sophya/trunk/SophyaPI/PIext/nommatvecadapter.cc@ 2486

Last change on this file since 2486 was 2322, checked in by cmv, 23 years ago
  • passage xxstream.h en xxstream
  • compile avec gcc_3.2, gcc_2.96 et cxx En 3.2 le seek from ::end semble marcher (voir Eval/COS/pbseekios.cc)

rz+cmv 11/2/2003

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