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

Last change on this file since 1207 was 1207, checked in by ercodmgr, 25 years ago
  • refonte de piaffiting avec les fits adapteurs
  • addapteur de fit pour les objets existants
  • entree des Image<T> dans les fits (retour !!!)

cmv 29/9/00

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