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

Last change on this file since 2933 was 2933, checked in by ansari, 19 years ago

Suppression de toute reference a FITS (en particulier NObjMgrAdapter::ReadFits/SaveFits supprime) dans le module PIext - Makefile et smakefile refait , Reza 3 Avril 2006

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