source: Sophya/trunk/SophyaPI/PIext/nomimagadapter.cc@ 3559

Last change on this file since 3559 was 3190, checked in by cmv, 19 years ago

ajout display des Image<r_8> cmv 9/3/2007

File size: 5.8 KB
Line 
1#include "sopnamsp.h"
2#include "machdefs.h"
3#include <stdlib.h>
4#include <typeinfo>
5#include <iostream>
6#include <string>
7
8#include "datatype.h"
9
10#include "nomimagadapter.h"
11#include "pimgadapter.h"
12
13#ifdef SANS_EVOLPLANCK
14#include "fitsimage.h"
15#else
16#include "objfitter.h"
17#endif
18
19
20
21//---------------------------------------------------------------
22// Class Adaptateur d'objet (Pour NamedObjMgr) d'objet Image<T>
23//---------------------------------------------------------------
24
25
26/* --Methode-- */
27template <class T>
28NOMAdapter_Image<T>::NOMAdapter_Image(Image<T> * o)
29 : NObjMgrAdapter(o)
30{
31mImg = o;
32}
33
34/* --Methode-- */
35template <class T>
36NOMAdapter_Image<T>::~NOMAdapter_Image()
37{
38}
39
40/* --Methode-- */
41template <class T>
42NObjMgrAdapter* NOMAdapter_Image<T>::Clone(AnyDataObj* o)
43{
44Image<T>* im = dynamic_cast<Image<T> *>(o);
45if (im) return ( new NOMAdapter_Image<T>(im) );
46return ( new NObjMgrAdapter(o) );
47}
48
49/* --Methode-- */
50template <class T>
51string NOMAdapter_Image<T>::GetDataObjType()
52{
53string type = "Image< ";
54// type += DecodeTypeIdName(typeid(T).name());
55type += DataTypeInfo<T>::getTypeName();
56type += " > ";
57return(type);
58}
59
60/* --Methode-- */
61template <class T>
62AnyDataObj* NOMAdapter_Image<T>::CloneDataObj(bool share)
63{
64#ifdef SANS_EVOLPLANCK
65FitsImage<T> * fima = dynamic_cast<FitsImage<T> *>(mImg);
66if (fima == NULL) return( new Image<T>(*mImg ) );
67else return ( new FitsImage<T>(*fima) );
68#else
69return( new Image<T>(*mImg, share) );
70#endif
71}
72
73
74/* --Methode-- */
75template <class T>
76void NOMAdapter_Image<T>::SavePPF(POutPersist& pos, string const & nom)
77{
78#ifdef SANS_EVOLPLANCK
79// PEIDA-EROS L'histo est lui-meme PPersist
80string tag = nom; // A cause de const
81mImg->Write(pos,0,tag);
82#else
83string s = typeid(*mObj).name();
84cout << "NOMAdapter_Image<T>::SavePPF() - Error : Not supported for " << s << endl;
85#endif
86}
87
88/* --Methode-- */
89template <class T>
90void NOMAdapter_Image<T>::Print(ostream& os, int lev)
91{
92if (lev < 3) mImg->Show(os, false);
93else mImg->Show(os, true);
94if (lev > 0) mImg->Print(os, 10*lev);
95}
96
97
98/* --Methode-- */
99template <class T>
100P2DArrayAdapter* NOMAdapter_Image<T>::Get2DArray(string &)
101{
102return ( new ImageAdapter<T>(mImg, false) );
103}
104
105/* --Methode-- */
106template <class T>
107NTupleInterface* NOMAdapter_Image<T>::GetNTupleInterface(bool& adel)
108{
109adel = true;
110return( new NTupInt_Image<T>(mImg) );
111}
112
113/* --Methode-- */
114template <class T>
115GeneralFitData* NOMAdapter_Image<T>::GetGeneralFitData(bool& adel
116 ,GeneralFitData::FitErrType errtype,double errscale,double errmin
117 ,int i1,int i2,int j1,int j2)
118{
119adel = false;
120if(!mImg) return(NULL);
121
122int nx = mImg->XSize();
123int ny = mImg->YSize();
124if(nx<=0 || ny<=0) return(NULL);
125
126i1 = (i1<0||i1>=nx)? 0: i1;
127i2 = (i2<0||i2>=nx||i2<i1)? nx-1: i2;
128j1 = (j1<0||j1>=ny)? 0: j1;
129j2 = (j2<0||j2>=ny||j2<j1)? ny-1: j2;
130
131GeneralFitData* mGData = new GeneralFitData(2,(i2-i1+1)*(j2-j1+1),0);
132adel = true;
133
134for(int i=i1;i<=i2;i++) for(int j=j1;j<=j2;j++) {
135 double x = mImg->XPos(i);
136 double y = mImg->YPos(j);
137 double f = (*mImg)(i,j);
138 double e = 1.;
139 e = GeneralFitData::ComputeError(f,e,errtype,errscale,errmin);
140 mGData->AddData2(x,y,f,e);
141}
142
143return mGData;
144}
145
146template <class T>
147AnyDataObj* NOMAdapter_Image<T>::FitResidusObj(GeneralFit& mfit)
148{
149#ifdef SANS_EVOLPLANCK
150RzImage* rzim = mImg->FitResidus(mfit);
151ImageR4* im = new ImageR4(*rzim);
152return im;
153#else
154Image<T>* im = new Image<T>(ObjectFitter::FitResidus(*mImg,mfit));
155return im;
156#endif
157}
158
159template <class T>
160AnyDataObj* NOMAdapter_Image<T>::FitFunctionObj(GeneralFit& mfit)
161{
162#ifdef SANS_EVOLPLANCK
163RzImage* rzim = mImg->FitFunction(mfit);
164ImageR4* im = new ImageR4(*rzim);
165return im;
166#else
167Image<T>* im = NULL;
168//im = new Image<T>(ObjectFitter::FitFunction(*mImg,mfit));
169return im;
170#endif
171}
172
173
174// -------------------------------------------------------------
175
176/* --Methode-- */
177template <class T>
178NTupInt_Image<T>::NTupInt_Image(Image<T>* m)
179{
180mImg = m;
181}
182
183/* --Methode-- */
184template <class T>
185NTupInt_Image<T>::~NTupInt_Image()
186{
187}
188
189/* --Methode-- */
190template <class T>
191sa_size_t NTupInt_Image<T>::NbLines() const
192{
193return( mImg->XSize() * mImg->YSize() );
194}
195
196/* --Methode-- */
197template <class T>
198sa_size_t NTupInt_Image<T>::NbColumns() const
199{
200return(3);
201}
202
203/* --Methode-- */
204template <class T>
205r_8* NTupInt_Image<T>::GetLineD(sa_size_t n) const
206{
207int i,j;
208if ((n < 0) || (n >= mImg->XSize() * mImg->YSize() ))
209 for(i=0; i<3; i++) mRet[i] = 0.;
210else {
211 i = n%mImg->XSize(); j = n/mImg->XSize();
212 mRet[0] = i; mRet[1] = j; mRet[2] = (*mImg)(i,j);
213 }
214return(mRet);
215}
216
217/* --Methode-- */
218template <class T>
219string NTupInt_Image<T>::VarList_C(const char* nx) const
220{
221string nomx;
222if (nx) nomx = nx;
223else nomx = "_xh_";
224string vardec = "double x,y,pix,i,j,val; \n";
225vardec += "x = i = " + nomx + "[0]; y = j = " + nomx + "[1]; pix = val = " + nomx + "[2]; \n";
226return(vardec);
227}
228
229#ifdef __CXX_PRAGMA_TEMPLATES__
230#pragma define_template NOMAdapter_Image<uint_2>
231#pragma define_template NOMAdapter_Image<int_4>
232#pragma define_template NOMAdapter_Image<r_4>
233#pragma define_template NOMAdapter_Image<r_8>
234#pragma define_template NTupInt_Image<uint_2>
235#pragma define_template NTupInt_Image<int_4>
236#pragma define_template NTupInt_Image<r_4>
237#pragma define_template NTupInt_Image<r_8>
238#ifdef SANS_EVOLPLANCK
239#pragma define_template NOMAdapter_Image<int_2>
240#pragma define_template NTupInt_Image<int_2>
241#endif
242#endif
243#if defined(ANSI_TEMPLATES) || defined(__ANSI_TEMPLATES__) || defined(__GNU_TEMPLATES__)
244template class NOMAdapter_Image<uint_2>;
245template class NOMAdapter_Image<int_4>;
246template class NOMAdapter_Image<r_4>;
247template class NOMAdapter_Image<r_8>;
248template class NTupInt_Image<uint_2>;
249template class NTupInt_Image<int_4>;
250template class NTupInt_Image<r_4>;
251template class NTupInt_Image<r_8>;
252#ifdef SANS_EVOLPLANCK
253template class NOMAdapter_Image<int_2>;
254template class NTupInt_Image<int_2>;
255#endif
256#endif
257
258
Note: See TracBrowser for help on using the repository browser.