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

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

Compil sur SGI-CC avec LANG:std suite au remplacement xxstream.h par xxstream (gcc 3.1) / ajout template <> pour specialisation template - Reza 10/03/2003

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