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

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

Adaptateur pour TArray et flag share ds methode CloneDataObj() - Reza 9/11/2000

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