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

Last change on this file since 2683 was 2683, checked in by ansari, 20 years ago

Adaptation au changement de int par sa_size_t ds la classe interface NTuple NTupInterface - Reza 21/4/2005

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