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

Last change on this file since 3572 was 3572, checked in by cmv, 17 years ago

char* -> const char* pour regler les problemes de deprecated string const... + comparaison unsigned signed + suppression EVOL_PLANCK rz+cmv 07/02/2009

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