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

Last change on this file since 2343 was 2343, checked in by ansari, 23 years ago

Compilation avec SGI-CC -LANG:std - Reza 10/03/2003

File size: 6.5 KB
Line 
1#include "machdefs.h"
2#include <stdlib.h>
3#include <typeinfo>
4#include <iostream>
5#include <string>
6
7#include "datatype.h"
8
9#include "nomimagadapter.h"
10#include "pimgadapter.h"
11
12#ifdef SANS_EVOLPLANCK
13#include "fitsimage.h"
14#else
15#include "objfitter.h"
16#include "fitstarray.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/* --Methode-- */
74template <class T>
75void NOMAdapter_Image<T>::ReadFits(string const & flnm)
76{
77#ifdef SANS_EVOLPLANCK
78 cerr << " NOMAdapter_Image<T>::ReadFits() Non disponible !! " << endl;
79#else
80 FitsInFile fis(flnm);
81 fis >> (*mImg);
82#endif
83}
84
85/* --Methode-- */
86template <class T>
87void NOMAdapter_Image<T>::SaveFits(string const & flnm)
88{
89#ifdef SANS_EVOLPLANCK
90FitsImage<T> fim(*mImg, 1);
91fim.Save(flnm);
92#else
93 FitsOutFile fos(flnm);
94 fos << (*mImg);
95#endif
96}
97
98#ifndef SANS_EVOLPLANCK
99DECL_TEMP_SPEC /* equivalent a template <> , pour SGI-CC en particulier */
100void NOMAdapter_Image< uint_2 >::SaveFits(string const & flnm)
101{
102cout << " NOMAdapter_Image< uint_2 >::SaveFits() - Error "
103 << " Not supported uint_2 data type ! " << endl;
104}
105
106DECL_TEMP_SPEC /* equivalent a template <> , pour SGI-CC en particulier */
107void NOMAdapter_Image< uint_2 >::ReadFits(string const & flnm)
108{
109cout << " NOMAdapter_Image< uint_2 >::ReadFits() - Error "
110 << " Not supported uint_2 data type ! " << endl;
111}
112#endif
113
114/* --Methode-- */
115template <class T>
116void NOMAdapter_Image<T>::SavePPF(POutPersist& pos, string const & nom)
117{
118#ifdef SANS_EVOLPLANCK
119// PEIDA-EROS L'histo est lui-meme PPersist
120string tag = nom; // A cause de const
121mImg->Write(pos,0,tag);
122#else
123string s = typeid(*mObj).name();
124cout << "NOMAdapter_Image<T>::SavePPF() - Error : Not supported for " << s << endl;
125#endif
126}
127
128/* --Methode-- */
129template <class T>
130void NOMAdapter_Image<T>::Print(ostream& os)
131{
132mImg->Print(os);
133}
134
135
136/* --Methode-- */
137template <class T>
138P2DArrayAdapter* NOMAdapter_Image<T>::Get2DArray(string &)
139{
140return ( new ImageAdapter<T>(mImg, false) );
141}
142
143/* --Methode-- */
144template <class T>
145NTupleInterface* NOMAdapter_Image<T>::GetNTupleInterface(bool& adel)
146{
147adel = true;
148return( new NTupInt_Image<T>(mImg) );
149}
150
151/* --Methode-- */
152template <class T>
153GeneralFitData* NOMAdapter_Image<T>::GetGeneralFitData(bool& adel
154 ,GeneralFitData::FitErrType errtype,double errscale,double errmin
155 ,int i1,int i2,int j1,int j2)
156{
157adel = false;
158if(!mImg) return(NULL);
159
160int nx = mImg->XSize();
161int ny = mImg->YSize();
162if(nx<=0 || ny<=0) return(NULL);
163
164i1 = (i1<0||i1>=nx)? 0: i1;
165i2 = (i2<0||i2>=nx||i2<i1)? nx-1: i2;
166j1 = (j1<0||j1>=ny)? 0: j1;
167j2 = (j2<0||j2>=ny||j2<j1)? ny-1: j2;
168
169GeneralFitData* mGData = new GeneralFitData(2,(i2-i1+1)*(j2-j1+1),0);
170adel = true;
171
172for(int i=i1;i<=i2;i++) for(int j=j1;j<=j2;j++) {
173 double x = mImg->XPos(i);
174 double y = mImg->YPos(j);
175 double f = (*mImg)(i,j);
176 double e = 1.;
177 e = GeneralFitData::ComputeError(f,e,errtype,errscale,errmin);
178 mGData->AddData2(x,y,f,e);
179}
180
181return mGData;
182}
183
184template <class T>
185AnyDataObj* NOMAdapter_Image<T>::FitResidusObj(GeneralFit& mfit)
186{
187#ifdef SANS_EVOLPLANCK
188RzImage* rzim = mImg->FitResidus(mfit);
189ImageR4* im = new ImageR4(*rzim);
190return im;
191#else
192Image<T>* im = new Image<T>(ObjectFitter::FitResidus(*mImg,mfit));
193return im;
194#endif
195}
196
197template <class T>
198AnyDataObj* NOMAdapter_Image<T>::FitFunctionObj(GeneralFit& mfit)
199{
200#ifdef SANS_EVOLPLANCK
201RzImage* rzim = mImg->FitFunction(mfit);
202ImageR4* im = new ImageR4(*rzim);
203return im;
204#else
205Image<T>* im = NULL;
206//im = new Image<T>(ObjectFitter::FitFunction(*mImg,mfit));
207return im;
208#endif
209}
210
211
212// -------------------------------------------------------------
213
214/* --Methode-- */
215template <class T>
216NTupInt_Image<T>::NTupInt_Image(Image<T>* m)
217{
218mImg = m;
219}
220
221/* --Methode-- */
222template <class T>
223NTupInt_Image<T>::~NTupInt_Image()
224{
225}
226
227/* --Methode-- */
228template <class T>
229uint_4 NTupInt_Image<T>::NbLines() const
230{
231return( mImg->XSize() * mImg->YSize() );
232}
233
234/* --Methode-- */
235template <class T>
236uint_4 NTupInt_Image<T>::NbColumns() const
237{
238return(3);
239}
240
241/* --Methode-- */
242template <class T>
243r_8* NTupInt_Image<T>::GetLineD(int n) const
244{
245int i,j;
246if ((n < 0) || (n >= mImg->XSize() * mImg->YSize() ))
247 for(i=0; i<3; i++) mRet[i] = 0.;
248else {
249 i = n%mImg->XSize(); j = n/mImg->XSize();
250 mRet[0] = i; mRet[1] = j; mRet[2] = (*mImg)(i,j);
251 }
252return(mRet);
253}
254
255/* --Methode-- */
256template <class T>
257string NTupInt_Image<T>::VarList_C(const char* nx) const
258{
259string nomx;
260if (nx) nomx = nx;
261else nomx = "_xh_";
262string vardec = "double x,y,pix,i,j,val; \n";
263vardec += "x = i = " + nomx + "[0]; y = j = " + nomx + "[1]; pix = val = " + nomx + "[2]; \n";
264return(vardec);
265}
266
267#ifdef __CXX_PRAGMA_TEMPLATES__
268#pragma define_template NOMAdapter_Image<uint_2>
269#pragma define_template NOMAdapter_Image<int_4>
270#pragma define_template NOMAdapter_Image<r_4>
271#pragma define_template NTupInt_Image<uint_2>
272#pragma define_template NTupInt_Image<int_4>
273#pragma define_template NTupInt_Image<r_4>
274#ifdef SANS_EVOLPLANCK
275#pragma define_template NOMAdapter_Image<int_2>
276#pragma define_template NTupInt_Image<int_2>
277#endif
278#endif
279#if defined(ANSI_TEMPLATES) || defined(__ANSI_TEMPLATES__) || defined(__GNU_TEMPLATES__)
280template class NOMAdapter_Image<uint_2>;
281template class NOMAdapter_Image<int_4>;
282template class NOMAdapter_Image<r_4>;
283template class NTupInt_Image<uint_2>;
284template class NTupInt_Image<int_4>;
285template class NTupInt_Image<r_4>;
286#ifdef SANS_EVOLPLANCK
287template class NOMAdapter_Image<int_2>;
288template class NTupInt_Image<int_2>;
289#endif
290#endif
291
292
Note: See TracBrowser for help on using the repository browser.