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

Last change on this file since 2265 was 1321, checked in by ercodmgr, 25 years ago

Adaptateur de TArray et lecture FITS - Reza 13/11/2000

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