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
RevLine 
[295]1#include "machdefs.h"
2#include <stdlib.h>
3#include <typeinfo>
4#include <iostream.h>
5#include <string>
6
7#include "nomimagadapter.h"
[1207]8#include "pimgadapter.h"
9
[495]10#ifdef SANS_EVOLPLANCK
[295]11#include "fitsimage.h"
[1207]12#else
13#include "objfitter.h"
[495]14#endif
[295]15
16
[1207]17
[295]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
[463]46/* --Methode-- */
47template <class T>
[1199]48AnyDataObj* NOMAdapter_Image<T>::CloneDataObj()
[463]49{
[495]50#ifdef SANS_EVOLPLANCK
[463]51FitsImage<T> * fima = dynamic_cast<FitsImage<T> *>(mImg);
52if (fima == NULL) return( new Image<T>(*mImg ) );
53else return ( new FitsImage<T>(*fima) );
[495]54#else
55return( new Image<T>(*mImg ) );
56#endif
[463]57}
[295]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
[495]67string s = typeid(*mImg).name();
[295]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{
[344]90mImg->Print(os);
[295]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>
[344]103NTupleInterface* NOMAdapter_Image<T>::GetNTupleInterface(bool& adel)
[295]104{
[344]105adel = true;
[295]106return( new NTupInt_Image<T>(mImg) );
107}
108
[1207]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);
[295]117
[1207]118int nx = mImg->XSize();
119int ny = mImg->YSize();
120if(nx<=0 || ny<=0) return(NULL);
[295]121
[1207]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
[295]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>
[326]187uint_4 NTupInt_Image<T>::NbLines() const
[295]188{
189return( mImg->XSize() * mImg->YSize() );
190}
191
192/* --Methode-- */
193template <class T>
[326]194uint_4 NTupInt_Image<T>::NbColumns() const
[295]195{
196return(3);
197}
198
199/* --Methode-- */
200template <class T>
[326]201r_8* NTupInt_Image<T>::GetLineD(int n) const
[295]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>
[326]215string NTupInt_Image<T>::VarList_C(const char* nx) const
[295]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>
[1105]232#ifdef SANS_EVOLPLANCK
233#pragma define_template NOMAdapter_Image<int_2>
234#pragma define_template NTupInt_Image<int_2>
[295]235#endif
[1105]236#endif
[506]237#if defined(ANSI_TEMPLATES) || defined(__ANSI_TEMPLATES__) || defined(__GNU_TEMPLATES__)
[295]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>;
[1105]244#ifdef SANS_EVOLPLANCK
245template class NOMAdapter_Image<int_2>;
246template class NTupInt_Image<int_2>;
[295]247#endif
[1105]248#endif
[295]249
250
Note: See TracBrowser for help on using the repository browser.