source: Sophya/trunk/SophyaPI/PIext/nomtarradapter.cc@ 1451

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

Adaptateur de TArray et lecture FITS - Reza 13/11/2000

File size: 7.4 KB
Line 
1#include "machdefs.h"
2#include <stdlib.h>
3#include <typeinfo>
4#include <iostream.h>
5#include <string>
6#include <complex>
7
8#include "datatype.h"
9
10#include "nomtarradapter.h"
11#include "tvector.h"
12#include "pitvmaad.h"
13#include "piscdrawwdg.h"
14
15#include "fioarr.h"
16#include "fitstarray.h"
17
18
19
20//----------------------------------------------------------------
21// Class Adaptateur d'objet (Pour NamedObjMgr) d'objet TMatrix<T>
22//----------------------------------------------------------------
23
24
25/* --Methode-- */
26template <class T>
27NOMAdapter_TArray<T>::NOMAdapter_TArray(TArray<T>* o)
28 : NObjMgrAdapter(o)
29{
30mArr = o;
31}
32
33/* --Methode-- */
34template <class T>
35NOMAdapter_TArray<T>::~NOMAdapter_TArray()
36{
37}
38
39/* --Methode-- */
40template <class T>
41NObjMgrAdapter* NOMAdapter_TArray<T>::Clone(AnyDataObj* o)
42{
43TArray<T>* a = dynamic_cast<TArray<T> *>(o);
44if (a) return ( new NOMAdapter_TArray<T>(a) );
45return ( new NObjMgrAdapter(o) );
46}
47
48/* --Methode-- */
49template <class T>
50string NOMAdapter_TArray<T>::GetDataObjType()
51{
52string type = "TArray< ";
53
54// type += DecodeTypeIdName(typeid(T).name());
55type += DataTypeInfo<T>::getTypeName();
56type += " > ";
57return(type);
58}
59
60/* --Methode-- */
61template <class T>
62AnyDataObj* NOMAdapter_TArray<T>::CloneDataObj(bool share)
63{
64return ( new TArray<T>(*mArr, share) );
65}
66
67/* --Methode-- */
68template <class T>
69void NOMAdapter_TArray<T>::ReadFits(string const & flnm)
70{
71 FitsInFile fis(flnm);
72 fis >> (*mArr);
73}
74
75/* --Methode-- */
76template <class T>
77void NOMAdapter_TArray<T>::SaveFits(string const & flnm)
78{
79 FitsOutFile fos(flnm);
80 fos << (*mArr);
81}
82
83// ---- Specialisation pour complexes -----
84void NOMAdapter_TArray< complex<r_4> >::ReadFits(string const & flnm)
85{
86cout << " NOMAdapter_TArray< complex<r_4> >::ReadFits() - Error "
87 << " Not supported (complex data type)" << endl;
88}
89void NOMAdapter_TArray< complex<r_4> >::SaveFits(string const & flnm)
90{
91cout << " NOMAdapter_TArray< complex<r_4> >::SaveFits() - Error "
92 << " Not supported (complex data type)" << endl;
93}
94
95void NOMAdapter_TArray< complex<r_8> >::ReadFits(string const & flnm)
96{
97cout << " NOMAdapter_TArray< complex<r_8> >::ReadFits() - Error "
98 << " Not supported (complex data type)" << endl;
99}
100void NOMAdapter_TArray< complex<r_8> >::SaveFits(string const & flnm)
101{
102cout << " NOMAdapter_TArray< complex<r_8> >::SaveFits() - Error "
103 << " Not supported (complex data type)" << endl;
104}
105
106/* --Methode-- */
107template <class T>
108void NOMAdapter_TArray<T>::SavePPF(POutPersist& pos, string const & nom)
109{
110FIO_TArray<T> fio(mArr);
111fio.Write(pos, nom);
112}
113
114/* --Methode-- */
115template <class T>
116void NOMAdapter_TArray<T>::Print(ostream& os)
117{
118os << (*mArr);
119}
120
121/* --Methode-- */
122template <class T>
123PIDrawer * NOMAdapter_TArray<T>::GetDrawer(string & dopt)
124{
125if (mArr->NbDimensions() == 1) {
126 // On peut en faire un vecteur ...
127 TVector<T>* v = new TVector<T>(*mArr, true); // on partage les donnees
128 dopt = "thinline," + dopt;
129 return( new PIYfXDrawer( new POTVectorAdapter<T>(v, true), NULL, true) );
130}
131 else return(NULL);
132}
133
134/* --Methode-- */
135template <class T>
136P2DArrayAdapter* NOMAdapter_TArray<T>::Get2DArray(string &)
137{
138if (mArr->NbDimensions() <= 2) {
139 // On peut en faire un tableau 2-D ...
140 TMatrix<T>* m = new TMatrix<T>(*mArr, true); // on partage les donnees
141 return ( new POTMatrixAdapter<T>(m, true) );
142}
143else return(NULL);
144}
145
146/* --Methode-- */
147template <class T>
148NTupleInterface* NOMAdapter_TArray<T>::GetNTupleInterface(bool& adel)
149{
150adel = true;
151return( new NTupInt_TArray<T>(mArr) );
152}
153
154
155
156
157// -------------------------------------------------------------
158
159/* --Methode-- */
160template <class T>
161NTupInt_TArray<T>::NTupInt_TArray(TArray<T>* a)
162{
163mArr = a;
164}
165
166/* --Methode-- */
167template <class T>
168NTupInt_TArray<T>::~NTupInt_TArray()
169{
170}
171
172/* --Methode-- */
173template <class T>
174uint_4 NTupInt_TArray<T>::NbLines() const
175{
176return( mArr->Size() );
177}
178
179/* --Methode-- */
180template <class T>
181uint_4 NTupInt_TArray<T>::NbColumns() const
182{
183return(11);
184}
185
186/* --Methode-- */
187template <class T>
188r_8* NTupInt_TArray<T>::GetLineD(int n) const
189{
190if ((n < 0) || (n >= (int)(mArr->Size()) ) ) {
191 mRet[0] = n;
192 for(int i=1; i<11; i++) mRet[i] = 0.;
193}
194else {
195 sa_size_t ix, iy, iz, it, iu;
196 mArr->IndexAtPosition(n, ix, iy, iz, it, iu);
197 mRet[0] = n; mRet[1] = ix; mRet[2] = iy;
198 mRet[3] = iz; mRet[4] = it; mRet[5] = iu;
199 mRet[6] = (*mArr)(ix,iy,iz,it,iu);
200 mRet[7] = mRet[2]; mRet[8] = 0.;
201 mRet[9] = mRet[2]; mRet[10] = 0.;
202 }
203return(mRet);
204}
205
206/* --Methode-- */
207template <class T>
208string NTupInt_TArray<T>::VarList_C(const char* nx) const
209{
210string nomx;
211if (nx) nomx = nx;
212else nomx = "_xh_";
213string vardec = "double n,x,y,z,t,u,val,real,imag,mod,phas; \n";
214vardec += "n = " + nomx + "[0]; x = " + nomx + "[1]; y = " + nomx + "[2]; \n";
215vardec += "z = " + nomx + "[3]; t = " + nomx + "[4]; u = " + nomx + "[5]; \n";
216vardec += "val = " + nomx + "[6]; \n";
217vardec += "real = " + nomx + "[7]; imag = " + nomx + "[8]; \n";
218vardec += "mod = " + nomx + "[9]; phas = " + nomx + "[10]; \n";
219return(vardec);
220}
221
222/* --Methode-- */
223r_8* NTupInt_TArray< complex<r_4> >::GetLineD(int n) const
224{
225if ((n < 0) || (n >= (int)(mArr->Size()) ) ) {
226 mRet[0] = n;
227 for(int i=1; i<11; i++) mRet[i] = 0.;
228}
229else {
230 sa_size_t ix, iy, iz, it, iu;
231 mArr->IndexAtPosition(n, ix, iy, iz, it, iu);
232 mRet[0] = n; mRet[1] = ix; mRet[2] = iy;
233 mRet[3] = iz; mRet[4] = it; mRet[5] = iu;
234 mRet[7] = (*mArr)(ix,iy,iz,it,iu).real();
235 mRet[8] = (*mArr)(ix,iy,iz,it,iu).imag();
236 mRet[3] = mRet[6] = sqrt(mRet[7]*mRet[7]+mRet[8]*mRet[8]);
237 mRet[7] = atan2(mRet[8], mRet[7]);
238}
239return(mRet);
240}
241
242r_8* NTupInt_TArray< complex<r_8> >::GetLineD(int n) const
243{
244if ((n < 0) || (n >= (int)(mArr->Size()) ) ) {
245 mRet[0] = n;
246 for(int i=1; i<11; i++) mRet[i] = 0.;
247}
248else {
249 sa_size_t ix, iy, iz, it, iu;
250 mArr->IndexAtPosition(n, ix, iy, iz, it, iu);
251 mRet[0] = n; mRet[1] = ix; mRet[2] = iy;
252 mRet[3] = iz; mRet[4] = it; mRet[5] = iu;
253 mRet[7] = (*mArr)(ix,iy,iz,it,iu).real();
254 mRet[8] = (*mArr)(ix,iy,iz,it,iu).imag();
255 mRet[3] = mRet[6] = sqrt(mRet[7]*mRet[7]+mRet[8]*mRet[8]);
256 mRet[7] = atan2(mRet[8], mRet[7]);
257}
258return(mRet);
259}
260
261
262#ifdef __CXX_PRAGMA_TEMPLATES__
263//#pragma define_template NOMAdapter_TArray<uint_2>
264//#pragma define_template NOMAdapter_TArray<int_2>
265#pragma define_template NOMAdapter_TArray<int_4>
266#pragma define_template NOMAdapter_TArray<r_4>
267#pragma define_template NOMAdapter_TArray<r_8>
268#pragma define_template NOMAdapter_TArray< complex<r_4> >
269#pragma define_template NOMAdapter_TArray< complex<r_8> >
270//#pragma define_template NTupInt_TArray<uint_2>
271//#pragma define_template NTupInt_TArray<int_2>
272#pragma define_template NTupInt_TArray<int_4>
273#pragma define_template NTupInt_TArray<r_4>
274#pragma define_template NTupInt_TArray<r_8>
275#pragma define_template NTupInt_TArray< complex<r_4> >
276#pragma define_template NTupInt_TArray< complex<r_8> >
277#endif
278
279#if defined(ANSI_TEMPLATES)
280//template class NOMAdapter_TArray<uint_2>;
281//template class NOMAdapter_TArray<int_2>;
282template class NOMAdapter_TArray<int_4>;
283template class NOMAdapter_TArray<r_4>;
284template class NOMAdapter_TArray<r_8>;
285template class NOMAdapter_TArray< complex<r_4> >;
286template class NOMAdapter_TArray< complex<r_8> >;
287// template class NTupInt_TArray<uint_2>;
288// template class NTupInt_TArray<int_2>;
289template class NTupInt_TArray<int_4>;
290template class NTupInt_TArray<r_4>;
291template class NTupInt_TArray<r_8>;
292template class NTupInt_TArray< complex<r_4> >;
293template class NTupInt_TArray< complex<r_8> >;
294#endif
Note: See TracBrowser for help on using the repository browser.