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

Last change on this file since 3465 was 2975, checked in by ansari, 19 years ago

Ajout flag int lev ds les adaptateurs NObjMgrAdapter::Print(ostream& os, int lev=0) et NamedObjMgr::Print() + modif commande print - Reza 20 Juin 2006

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