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

Last change on this file since 2335 was 2335, checked in by ansari, 23 years ago

Compil sur SGI-CC avec LANG:std suite au remplacement xxstream.h par xxstream (gcc 3.1) / ajout template <> pour specialisation template - Reza 10/03/2003

File size: 7.6 KB
RevLine 
[1315]1#include "machdefs.h"
2#include <stdlib.h>
3#include <typeinfo>
[2322]4#include <iostream>
[1315]5#include <string>
6#include <complex>
7
8#include "datatype.h"
9
10#include "nomtarradapter.h"
[1321]11#include "tvector.h"
12#include "pitvmaad.h"
[1905]13#include "piyfxdrw.h"
[1315]14
15#include "fioarr.h"
[1321]16#include "fitstarray.h"
[1315]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>
[1321]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 -----
[2335]84#if defined(__SGICC__)
85template <>
86#endif
[1321]87void NOMAdapter_TArray< complex<r_4> >::ReadFits(string const & flnm)
88{
89cout << " NOMAdapter_TArray< complex<r_4> >::ReadFits() - Error "
90 << " Not supported (complex data type)" << endl;
91}
[2335]92#if defined(__SGICC__)
93template <>
94#endif
[1321]95void NOMAdapter_TArray< complex<r_4> >::SaveFits(string const & flnm)
96{
97cout << " NOMAdapter_TArray< complex<r_4> >::SaveFits() - Error "
98 << " Not supported (complex data type)" << endl;
99}
100
[2335]101#if defined(__SGICC__)
102template <>
103#endif
[1321]104void NOMAdapter_TArray< complex<r_8> >::ReadFits(string const & flnm)
105{
106cout << " NOMAdapter_TArray< complex<r_8> >::ReadFits() - Error "
107 << " Not supported (complex data type)" << endl;
108}
[2335]109#if defined(__SGICC__)
110template <>
111#endif
[1321]112void NOMAdapter_TArray< complex<r_8> >::SaveFits(string const & flnm)
113{
114cout << " NOMAdapter_TArray< complex<r_8> >::SaveFits() - Error "
115 << " Not supported (complex data type)" << endl;
116}
117
118/* --Methode-- */
119template <class T>
[1315]120void NOMAdapter_TArray<T>::SavePPF(POutPersist& pos, string const & nom)
121{
122FIO_TArray<T> fio(mArr);
123fio.Write(pos, nom);
124}
125
126/* --Methode-- */
127template <class T>
128void NOMAdapter_TArray<T>::Print(ostream& os)
129{
130os << (*mArr);
131}
132
[1321]133/* --Methode-- */
134template <class T>
135PIDrawer * NOMAdapter_TArray<T>::GetDrawer(string & dopt)
136{
137if (mArr->NbDimensions() == 1) {
138 // On peut en faire un vecteur ...
139 TVector<T>* v = new TVector<T>(*mArr, true); // on partage les donnees
140 dopt = "thinline," + dopt;
141 return( new PIYfXDrawer( new POTVectorAdapter<T>(v, true), NULL, true) );
142}
143 else return(NULL);
144}
[1315]145
146/* --Methode-- */
147template <class T>
[1321]148P2DArrayAdapter* NOMAdapter_TArray<T>::Get2DArray(string &)
149{
150if (mArr->NbDimensions() <= 2) {
151 // On peut en faire un tableau 2-D ...
152 TMatrix<T>* m = new TMatrix<T>(*mArr, true); // on partage les donnees
153 return ( new POTMatrixAdapter<T>(m, true) );
154}
155else return(NULL);
156}
157
158/* --Methode-- */
159template <class T>
[1315]160NTupleInterface* NOMAdapter_TArray<T>::GetNTupleInterface(bool& adel)
161{
162adel = true;
163return( new NTupInt_TArray<T>(mArr) );
164}
165
166
167
168
169// -------------------------------------------------------------
170
171/* --Methode-- */
172template <class T>
173NTupInt_TArray<T>::NTupInt_TArray(TArray<T>* a)
174{
175mArr = a;
176}
177
178/* --Methode-- */
179template <class T>
180NTupInt_TArray<T>::~NTupInt_TArray()
181{
182}
183
184/* --Methode-- */
185template <class T>
186uint_4 NTupInt_TArray<T>::NbLines() const
187{
188return( mArr->Size() );
189}
190
191/* --Methode-- */
192template <class T>
193uint_4 NTupInt_TArray<T>::NbColumns() const
194{
195return(11);
196}
197
198/* --Methode-- */
199template <class T>
200r_8* NTupInt_TArray<T>::GetLineD(int n) const
201{
202if ((n < 0) || (n >= (int)(mArr->Size()) ) ) {
203 mRet[0] = n;
204 for(int i=1; i<11; i++) mRet[i] = 0.;
205}
206else {
207 sa_size_t ix, iy, iz, it, iu;
208 mArr->IndexAtPosition(n, ix, iy, iz, it, iu);
209 mRet[0] = n; mRet[1] = ix; mRet[2] = iy;
210 mRet[3] = iz; mRet[4] = it; mRet[5] = iu;
211 mRet[6] = (*mArr)(ix,iy,iz,it,iu);
212 mRet[7] = mRet[2]; mRet[8] = 0.;
213 mRet[9] = mRet[2]; mRet[10] = 0.;
214 }
215return(mRet);
216}
217
218/* --Methode-- */
219template <class T>
220string NTupInt_TArray<T>::VarList_C(const char* nx) const
221{
222string nomx;
223if (nx) nomx = nx;
224else nomx = "_xh_";
225string vardec = "double n,x,y,z,t,u,val,real,imag,mod,phas; \n";
226vardec += "n = " + nomx + "[0]; x = " + nomx + "[1]; y = " + nomx + "[2]; \n";
227vardec += "z = " + nomx + "[3]; t = " + nomx + "[4]; u = " + nomx + "[5]; \n";
228vardec += "val = " + nomx + "[6]; \n";
229vardec += "real = " + nomx + "[7]; imag = " + nomx + "[8]; \n";
230vardec += "mod = " + nomx + "[9]; phas = " + nomx + "[10]; \n";
231return(vardec);
232}
233
234/* --Methode-- */
[2335]235#if defined(__SGICC__)
236template <>
237#endif
[1315]238r_8* NTupInt_TArray< complex<r_4> >::GetLineD(int n) const
239{
240if ((n < 0) || (n >= (int)(mArr->Size()) ) ) {
241 mRet[0] = n;
242 for(int i=1; i<11; i++) mRet[i] = 0.;
243}
244else {
245 sa_size_t ix, iy, iz, it, iu;
246 mArr->IndexAtPosition(n, ix, iy, iz, it, iu);
247 mRet[0] = n; mRet[1] = ix; mRet[2] = iy;
248 mRet[3] = iz; mRet[4] = it; mRet[5] = iu;
249 mRet[7] = (*mArr)(ix,iy,iz,it,iu).real();
250 mRet[8] = (*mArr)(ix,iy,iz,it,iu).imag();
251 mRet[3] = mRet[6] = sqrt(mRet[7]*mRet[7]+mRet[8]*mRet[8]);
252 mRet[7] = atan2(mRet[8], mRet[7]);
253}
254return(mRet);
255}
256
[2335]257#if defined(__SGICC__)
258template <>
259#endif
[1315]260r_8* NTupInt_TArray< complex<r_8> >::GetLineD(int n) const
261{
262if ((n < 0) || (n >= (int)(mArr->Size()) ) ) {
263 mRet[0] = n;
264 for(int i=1; i<11; i++) mRet[i] = 0.;
265}
266else {
267 sa_size_t ix, iy, iz, it, iu;
268 mArr->IndexAtPosition(n, ix, iy, iz, it, iu);
269 mRet[0] = n; mRet[1] = ix; mRet[2] = iy;
270 mRet[3] = iz; mRet[4] = it; mRet[5] = iu;
271 mRet[7] = (*mArr)(ix,iy,iz,it,iu).real();
272 mRet[8] = (*mArr)(ix,iy,iz,it,iu).imag();
273 mRet[3] = mRet[6] = sqrt(mRet[7]*mRet[7]+mRet[8]*mRet[8]);
274 mRet[7] = atan2(mRet[8], mRet[7]);
275}
276return(mRet);
277}
278
279
280#ifdef __CXX_PRAGMA_TEMPLATES__
281//#pragma define_template NOMAdapter_TArray<uint_2>
282//#pragma define_template NOMAdapter_TArray<int_2>
283#pragma define_template NOMAdapter_TArray<int_4>
284#pragma define_template NOMAdapter_TArray<r_4>
285#pragma define_template NOMAdapter_TArray<r_8>
286#pragma define_template NOMAdapter_TArray< complex<r_4> >
287#pragma define_template NOMAdapter_TArray< complex<r_8> >
288//#pragma define_template NTupInt_TArray<uint_2>
289//#pragma define_template NTupInt_TArray<int_2>
290#pragma define_template NTupInt_TArray<int_4>
291#pragma define_template NTupInt_TArray<r_4>
292#pragma define_template NTupInt_TArray<r_8>
293#pragma define_template NTupInt_TArray< complex<r_4> >
294#pragma define_template NTupInt_TArray< complex<r_8> >
295#endif
296
297#if defined(ANSI_TEMPLATES)
298//template class NOMAdapter_TArray<uint_2>;
299//template class NOMAdapter_TArray<int_2>;
300template class NOMAdapter_TArray<int_4>;
301template class NOMAdapter_TArray<r_4>;
302template class NOMAdapter_TArray<r_8>;
303template class NOMAdapter_TArray< complex<r_4> >;
304template class NOMAdapter_TArray< complex<r_8> >;
305// template class NTupInt_TArray<uint_2>;
306// template class NTupInt_TArray<int_2>;
307template class NTupInt_TArray<int_4>;
308template class NTupInt_TArray<r_4>;
309template class NTupInt_TArray<r_8>;
310template class NTupInt_TArray< complex<r_4> >;
311template class NTupInt_TArray< complex<r_8> >;
312#endif
Note: See TracBrowser for help on using the repository browser.