1 | #include "sopnamsp.h"
|
---|
2 | #include "machdefs.h"
|
---|
3 | #include <stdlib.h>
|
---|
4 | #include <typeinfo>
|
---|
5 | #include <iostream>
|
---|
6 | #include <string>
|
---|
7 | #include <complex>
|
---|
8 |
|
---|
9 | #include "datatype.h"
|
---|
10 |
|
---|
11 | #include "nomtarradapter.h"
|
---|
12 | #include "tvector.h"
|
---|
13 | #include "pitvmaad.h"
|
---|
14 | #include "piyfxdrw.h"
|
---|
15 |
|
---|
16 | #include "fioarr.h"
|
---|
17 |
|
---|
18 | #include "nobjmgr.h"
|
---|
19 |
|
---|
20 |
|
---|
21 | //----------------------------------------------------------------
|
---|
22 | // Class Adaptateur d'objet (Pour NamedObjMgr) d'objet TMatrix<T>
|
---|
23 | //----------------------------------------------------------------
|
---|
24 |
|
---|
25 |
|
---|
26 | /* --Methode-- */
|
---|
27 | template <class T>
|
---|
28 | NOMAdapter_TArray<T>::NOMAdapter_TArray(TArray<T>* o)
|
---|
29 | : NObjMgrAdapter(o)
|
---|
30 | {
|
---|
31 | mArr = o;
|
---|
32 | }
|
---|
33 |
|
---|
34 | /* --Methode-- */
|
---|
35 | template <class T>
|
---|
36 | NOMAdapter_TArray<T>::~NOMAdapter_TArray()
|
---|
37 | {
|
---|
38 | }
|
---|
39 |
|
---|
40 | /* --Methode-- */
|
---|
41 | template <class T>
|
---|
42 | NObjMgrAdapter* NOMAdapter_TArray<T>::Clone(AnyDataObj* o)
|
---|
43 | {
|
---|
44 | TArray<T>* a = dynamic_cast<TArray<T> *>(o);
|
---|
45 | if (a) return ( new NOMAdapter_TArray<T>(a) );
|
---|
46 | return ( new NObjMgrAdapter(o) );
|
---|
47 | }
|
---|
48 |
|
---|
49 | /* --Methode-- */
|
---|
50 | template <class T>
|
---|
51 | string NOMAdapter_TArray<T>::GetDataObjType()
|
---|
52 | {
|
---|
53 | string type = "TArray< ";
|
---|
54 |
|
---|
55 | // type += DecodeTypeIdName(typeid(T).name());
|
---|
56 | type += DataTypeInfo<T>::getTypeName();
|
---|
57 | type += " > ";
|
---|
58 | return(type);
|
---|
59 | }
|
---|
60 |
|
---|
61 | /* --Methode-- */
|
---|
62 | template <class T>
|
---|
63 | AnyDataObj* NOMAdapter_TArray<T>::CloneDataObj(bool share)
|
---|
64 | {
|
---|
65 | return ( new TArray<T>(*mArr, share) );
|
---|
66 | }
|
---|
67 |
|
---|
68 | /* --Methode-- */
|
---|
69 | template <class T>
|
---|
70 | string NOMAdapter_TArray<T>::GetInfoString(vector<string>& opts)
|
---|
71 | {
|
---|
72 | if (opts.size() == 0) return mArr->InfoString();
|
---|
73 | else {
|
---|
74 | char buff[128];
|
---|
75 | if (opts[0] == "rank") {
|
---|
76 | sprintf(buff,"%d", (int)mArr->Rank());
|
---|
77 | return string(buff);
|
---|
78 | }
|
---|
79 | if (opts[0] == "sizes") {
|
---|
80 | string rs;
|
---|
81 | for(int_4 kd=0; kd<mArr->Rank(); kd++) {
|
---|
82 | sprintf(buff, "%ld ", (long)mArr->Size(kd));
|
---|
83 | rs += buff;
|
---|
84 | }
|
---|
85 | return rs;
|
---|
86 | }
|
---|
87 | else if ((opts[0] == "size") || (opts[0] == "nelts")) {
|
---|
88 | sprintf(buff, "%ld", (long)mArr->Size());
|
---|
89 | return string(buff);
|
---|
90 | }
|
---|
91 | else if (opts[0] == "sum") {
|
---|
92 | MuTyV mtv(mArr->Sum());
|
---|
93 | string s;
|
---|
94 | return mtv.Convert(s);
|
---|
95 | }
|
---|
96 | else if (opts[0] == "sumsq") {
|
---|
97 | MuTyV mtv(mArr->SumSq());
|
---|
98 | string s;
|
---|
99 | return mtv.Convert(s);
|
---|
100 | }
|
---|
101 | else if (opts[0] == "norm2") {
|
---|
102 | MuTyV mtv(mArr->Norm2());
|
---|
103 | string s;
|
---|
104 | return mtv.Convert(s);
|
---|
105 | }
|
---|
106 | else if ((opts[0] == "min")||(opts[0] == "max")||(opts[0] == "minmax")) {
|
---|
107 | T amin, amax;
|
---|
108 | MuTyV mtv;
|
---|
109 | string s;
|
---|
110 | mArr->MinMax(amin, amax);
|
---|
111 | if (opts[0] == "minmax") {
|
---|
112 | mtv = amin; mtv.Convert(s);
|
---|
113 | s += " ";
|
---|
114 | string mms;
|
---|
115 | mtv = amax; mtv.Convert(mms);
|
---|
116 | s += mms;
|
---|
117 | }
|
---|
118 | else {
|
---|
119 | if (opts[0] == "min") mtv = amin;
|
---|
120 | else if (opts[0] == "max") mtv = amax;
|
---|
121 | mtv.Convert(s);
|
---|
122 | }
|
---|
123 | return s;
|
---|
124 | }
|
---|
125 | else if (opts[0] == "info") { // Acces aux valeurs stockes ds le DVList Info()
|
---|
126 | if (opts.size() < 2) return string("");
|
---|
127 | else if (mArr->Info().HasKey(opts[1]) == false) return string("");
|
---|
128 | else return mArr->Info().GetS(opts[1]);
|
---|
129 | }
|
---|
130 | else return "TArray.Att: rank sizes size/nelts sum sumsq/norm2 min max minmax";
|
---|
131 | }
|
---|
132 | }
|
---|
133 |
|
---|
134 | /* --Methode-- */
|
---|
135 | template <class T>
|
---|
136 | int NOMAdapter_TArray<T>::PerformOperation(vector<string>& opts)
|
---|
137 | {
|
---|
138 | bool ok = false;
|
---|
139 | if ((mArr->Rank() >= 3) && (opts.size() >= 2)) {
|
---|
140 | int_4 ks = atoi(opts[1].c_str());
|
---|
141 | TMatrix<T> * slice = new TMatrix<T>;
|
---|
142 | char buff[40];
|
---|
143 | if (opts[0] == "slicexy") {
|
---|
144 | slice->Share(mArr->SubArray(Range::all(), Range::all(), Range(ks),
|
---|
145 | Range::first(), Range::first()) );
|
---|
146 | ok = true;
|
---|
147 | sprintf(buff,"slicexy_%ld",(long)ks);
|
---|
148 | cout << "PerformOperation(): Extracting SliceXY(" << ks << ") from array" << endl;
|
---|
149 | }
|
---|
150 | else if (opts[0] == "sliceyz") {
|
---|
151 | slice->Share(mArr->SubArray(Range(ks), Range::all(), Range::all(), Range::first(),
|
---|
152 | Range::first()).CompactAllDimensions() );
|
---|
153 | ok = true;
|
---|
154 | sprintf(buff,"sliceyz_%ld",(long)ks);
|
---|
155 | cout << "PerformOperation(): Extracting SliceYZ(" << ks << ") from array" << endl;
|
---|
156 | }
|
---|
157 | else if (opts[0] == "slicexz") {
|
---|
158 | slice->Share(mArr->SubArray(Range::all(), Range(ks), Range::all(), Range::first(),
|
---|
159 | Range::first()).CompactAllDimensions() );
|
---|
160 | ok = true;
|
---|
161 | sprintf(buff,"slicexz_%ld",(long)ks);
|
---|
162 | cout << "PerformOperation(): Extracting SliceYZ(" << ks << ") from array" << endl;
|
---|
163 | }
|
---|
164 | if (ok) {
|
---|
165 | string nslice;
|
---|
166 | if (opts.size() > 2) nslice = opts[2];
|
---|
167 | else nslice = buff;
|
---|
168 | NamedObjMgr omg;
|
---|
169 | omg.AddObj(slice, nslice, true);
|
---|
170 | return 0;
|
---|
171 | }
|
---|
172 | }
|
---|
173 |
|
---|
174 | cout << "NOMAdapter_TArray<T>::PerformOperation(): Error operation/arguments !" << endl;
|
---|
175 | cout << "...Valid args: slicexy idxZ [slicename], sliceyz idxX [nm] slicexz idxY [nm]" << endl;
|
---|
176 | return 1;
|
---|
177 | }
|
---|
178 |
|
---|
179 | /* --Methode-- */
|
---|
180 | template <class T>
|
---|
181 | void NOMAdapter_TArray<T>::SavePPF(POutPersist& pos, string const & nom)
|
---|
182 | {
|
---|
183 | FIO_TArray<T> fio(mArr);
|
---|
184 | fio.Write(pos, nom);
|
---|
185 | }
|
---|
186 |
|
---|
187 | /* --Methode-- */
|
---|
188 | template <class T>
|
---|
189 | void NOMAdapter_TArray<T>::Print(ostream& os, int lev)
|
---|
190 | {
|
---|
191 | if (lev < 3) mArr->Show(os, false);
|
---|
192 | else mArr->Show(os, true);
|
---|
193 | if (lev > 0) mArr->Print(os, 10*lev);
|
---|
194 | }
|
---|
195 |
|
---|
196 | /* --Methode-- */
|
---|
197 | template <class T>
|
---|
198 | PIDrawer * NOMAdapter_TArray<T>::GetDrawer(string & dopt)
|
---|
199 | {
|
---|
200 | if (mArr->NbDimensions() == 1) {
|
---|
201 | // On peut en faire un vecteur ...
|
---|
202 | TVector<T>* v = new TVector<T>(*mArr, true); // on partage les donnees
|
---|
203 | dopt = "thinline," + dopt;
|
---|
204 | return( new PIYfXDrawer( new POTVectorAdapter<T>(v, true), NULL, true) );
|
---|
205 | }
|
---|
206 | else return(NULL);
|
---|
207 | }
|
---|
208 |
|
---|
209 | /* --Methode-- */
|
---|
210 | template <class T>
|
---|
211 | P2DArrayAdapter* NOMAdapter_TArray<T>::Get2DArray(string &)
|
---|
212 | {
|
---|
213 | if (mArr->NbDimensions() <= 2) {
|
---|
214 | // On peut en faire un tableau 2-D ...
|
---|
215 | TMatrix<T>* m = new TMatrix<T>(*mArr, true); // on partage les donnees
|
---|
216 | return ( new POTMatrixAdapter<T>(m, true) );
|
---|
217 | }
|
---|
218 | else return(NULL);
|
---|
219 | }
|
---|
220 |
|
---|
221 | /* --Methode-- */
|
---|
222 | template <class T>
|
---|
223 | NTupleInterface* NOMAdapter_TArray<T>::GetNTupleInterface(bool& adel)
|
---|
224 | {
|
---|
225 | adel = true;
|
---|
226 | return( new NTupInt_TArray<T>(mArr) );
|
---|
227 | }
|
---|
228 |
|
---|
229 |
|
---|
230 |
|
---|
231 |
|
---|
232 | // -------------------------------------------------------------
|
---|
233 |
|
---|
234 | /* --Methode-- */
|
---|
235 | template <class T>
|
---|
236 | NTupInt_TArray<T>::NTupInt_TArray(TArray<T>* a)
|
---|
237 | {
|
---|
238 | mArr = a;
|
---|
239 | }
|
---|
240 |
|
---|
241 | /* --Methode-- */
|
---|
242 | template <class T>
|
---|
243 | NTupInt_TArray<T>::~NTupInt_TArray()
|
---|
244 | {
|
---|
245 | }
|
---|
246 |
|
---|
247 | /* --Methode-- */
|
---|
248 | template <class T>
|
---|
249 | sa_size_t NTupInt_TArray<T>::NbLines() const
|
---|
250 | {
|
---|
251 | return( mArr->Size() );
|
---|
252 | }
|
---|
253 |
|
---|
254 | /* --Methode-- */
|
---|
255 | template <class T>
|
---|
256 | sa_size_t NTupInt_TArray<T>::NbColumns() const
|
---|
257 | {
|
---|
258 | return(11);
|
---|
259 | }
|
---|
260 |
|
---|
261 | /* --Methode-- */
|
---|
262 | template <class T>
|
---|
263 | r_8 NTupInt_TArray<T>::GetCell(sa_size_t n, sa_size_t k) const
|
---|
264 | {
|
---|
265 | if ((n < 0) || (n >= (int)(mArr->Size()) ) )
|
---|
266 | return 0.;
|
---|
267 | if ((k < 0) || (k > 10)) return 0.;
|
---|
268 | GetLineD(n);
|
---|
269 | return mRet[k];
|
---|
270 | }
|
---|
271 |
|
---|
272 | /* --Methode-- */
|
---|
273 | template <class T>
|
---|
274 | sa_size_t NTupInt_TArray<T>::ColumnIndex(string const & nom) const
|
---|
275 | {
|
---|
276 | string vardec = "double n,x,y,z,t,u,val,real,imag,mod,phas; \n";
|
---|
277 | if (nom == "n") return 0;
|
---|
278 | else if (nom == "x") return 1;
|
---|
279 | else if (nom == "y") return 2;
|
---|
280 | else if (nom == "z") return 3;
|
---|
281 | else if (nom == "t") return 4;
|
---|
282 | else if (nom == "u") return 5;
|
---|
283 | else if (nom == "val") return 6;
|
---|
284 | else if (nom == "real") return 7;
|
---|
285 | else if (nom == "imag") return 8;
|
---|
286 | else if (nom == "mod") return 9;
|
---|
287 | else if (nom == "phase") return 10;
|
---|
288 | else return -1;
|
---|
289 | }
|
---|
290 |
|
---|
291 | /* --Methode-- */
|
---|
292 | template <class T>
|
---|
293 | void NTupInt_TArray<T>::GetMinMax(sa_size_t k, double& min, double& max) const
|
---|
294 | {
|
---|
295 | if (k == 0) {
|
---|
296 | min = 0.; max = (r_8)(mArr->Size()); }
|
---|
297 | else if (k == 1) {
|
---|
298 | min = 0.; max = (r_8)(mArr->SizeX()); }
|
---|
299 | else if (k == 2) {
|
---|
300 | min = 0.; max = (r_8)(mArr->SizeY()); }
|
---|
301 | else if (k == 3) {
|
---|
302 | min = 0.; max = (r_8)(mArr->SizeZ()); }
|
---|
303 | else if (k == 4) {
|
---|
304 | min = 0.; max = (r_8)(mArr->Size(3)); }
|
---|
305 | else if (k == 5) {
|
---|
306 | min = 0.; max = (r_8)(mArr->Size(4)); }
|
---|
307 | else if ((k == 6) || (k == 7) || (k == 9)) {
|
---|
308 | T tmin, tmax;
|
---|
309 | mArr->MinMax(tmin, tmax);
|
---|
310 | min = (r_8)(tmin);
|
---|
311 | max = (r_8)(tmax);
|
---|
312 | }
|
---|
313 | else { min = max = 0.; }
|
---|
314 | return;
|
---|
315 | }
|
---|
316 |
|
---|
317 | /* --Methode-- */
|
---|
318 | template <class T>
|
---|
319 | r_8* NTupInt_TArray<T>::GetLineD(sa_size_t n) const
|
---|
320 | {
|
---|
321 | if ((n < 0) || (n >= (int)(mArr->Size()) ) ) {
|
---|
322 | mRet[0] = n;
|
---|
323 | for(int i=1; i<11; i++) mRet[i] = 0.;
|
---|
324 | }
|
---|
325 | else {
|
---|
326 | sa_size_t ix, iy, iz, it, iu;
|
---|
327 | mArr->IndexAtPosition(n, ix, iy, iz, it, iu);
|
---|
328 | mRet[0] = n; mRet[1] = ix; mRet[2] = iy;
|
---|
329 | mRet[3] = iz; mRet[4] = it; mRet[5] = iu;
|
---|
330 | mRet[6] = (*mArr)(ix,iy,iz,it,iu);
|
---|
331 | mRet[7] = mRet[6]; mRet[8] = 0.;
|
---|
332 | mRet[9] = mRet[6]; mRet[10] = 0.;
|
---|
333 | }
|
---|
334 | return(mRet);
|
---|
335 | }
|
---|
336 |
|
---|
337 | /* --Methode-- */
|
---|
338 | template <class T>
|
---|
339 | string NTupInt_TArray<T>::VarList_C(const char* nx) const
|
---|
340 | {
|
---|
341 | string nomx;
|
---|
342 | if (nx) nomx = nx;
|
---|
343 | else nomx = "_xh_";
|
---|
344 | string vardec = "double n,x,y,z,t,u,val,real,imag,mod,phas; \n";
|
---|
345 | vardec += "n = " + nomx + "[0]; x = " + nomx + "[1]; y = " + nomx + "[2]; \n";
|
---|
346 | vardec += "z = " + nomx + "[3]; t = " + nomx + "[4]; u = " + nomx + "[5]; \n";
|
---|
347 | vardec += "val = " + nomx + "[6]; \n";
|
---|
348 | vardec += "real = " + nomx + "[7]; imag = " + nomx + "[8]; \n";
|
---|
349 | vardec += "mod = " + nomx + "[9]; phas = " + nomx + "[10]; \n";
|
---|
350 | return(vardec);
|
---|
351 | }
|
---|
352 |
|
---|
353 | /* --Methode-- */
|
---|
354 | DECL_TEMP_SPEC /* equivalent a template <> , pour SGI-CC en particulier */
|
---|
355 | r_8* NTupInt_TArray< complex<r_4> >::GetLineD(sa_size_t n) const
|
---|
356 | {
|
---|
357 | if ((n < 0) || (n >= (int)(mArr->Size()) ) ) {
|
---|
358 | mRet[0] = n;
|
---|
359 | for(int i=1; i<11; i++) mRet[i] = 0.;
|
---|
360 | }
|
---|
361 | else {
|
---|
362 | sa_size_t ix, iy, iz, it, iu;
|
---|
363 | mArr->IndexAtPosition(n, ix, iy, iz, it, iu);
|
---|
364 | mRet[0] = n; mRet[1] = ix; mRet[2] = iy;
|
---|
365 | mRet[3] = iz; mRet[4] = it; mRet[5] = iu;
|
---|
366 | mRet[7] = (*mArr)(ix,iy,iz,it,iu).real();
|
---|
367 | mRet[8] = (*mArr)(ix,iy,iz,it,iu).imag();
|
---|
368 | mRet[6] = mRet[9] = sqrt(mRet[7]*mRet[7]+mRet[8]*mRet[8]);
|
---|
369 | mRet[10] = atan2(mRet[8], mRet[7]);
|
---|
370 | }
|
---|
371 | return(mRet);
|
---|
372 | }
|
---|
373 |
|
---|
374 | DECL_TEMP_SPEC /* equivalent a template <> , pour SGI-CC en particulier */
|
---|
375 | r_8* NTupInt_TArray< complex<r_8> >::GetLineD(sa_size_t n) const
|
---|
376 | {
|
---|
377 | if ((n < 0) || (n >= (int)(mArr->Size()) ) ) {
|
---|
378 | mRet[0] = n;
|
---|
379 | for(int i=1; i<11; i++) mRet[i] = 0.;
|
---|
380 | }
|
---|
381 | else {
|
---|
382 | sa_size_t ix, iy, iz, it, iu;
|
---|
383 | mArr->IndexAtPosition(n, ix, iy, iz, it, iu);
|
---|
384 | mRet[0] = n; mRet[1] = ix; mRet[2] = iy;
|
---|
385 | mRet[3] = iz; mRet[4] = it; mRet[5] = iu;
|
---|
386 | mRet[7] = (*mArr)(ix,iy,iz,it,iu).real();
|
---|
387 | mRet[8] = (*mArr)(ix,iy,iz,it,iu).imag();
|
---|
388 | mRet[6] = mRet[9] = sqrt(mRet[7]*mRet[7]+mRet[8]*mRet[8]);
|
---|
389 | mRet[10] = atan2(mRet[8], mRet[7]);
|
---|
390 | }
|
---|
391 | return(mRet);
|
---|
392 | }
|
---|
393 |
|
---|
394 | DECL_TEMP_SPEC /* equivalent a template <> , pour SGI-CC en particulier */
|
---|
395 | void NTupInt_TArray< complex<r_4> >::GetMinMax(sa_size_t k, double& min, double& max) const
|
---|
396 | {
|
---|
397 | if (k == 0) {
|
---|
398 | min = 0.; max = (r_8)(mArr->Size()); }
|
---|
399 | else if (k == 1) {
|
---|
400 | min = 0.; max = (r_8)(mArr->SizeX()); }
|
---|
401 | else if (k == 2) {
|
---|
402 | min = 0.; max = (r_8)(mArr->SizeY()); }
|
---|
403 | else if (k == 3) {
|
---|
404 | min = 0.; max = (r_8)(mArr->SizeZ()); }
|
---|
405 | else if (k == 4) {
|
---|
406 | min = 0.; max = (r_8)(mArr->Size(3)); }
|
---|
407 | else if (k == 5) {
|
---|
408 | min = 0.; max = (r_8)(mArr->Size(4)); }
|
---|
409 | else if ((k >= 6) || (k <= 9)) {
|
---|
410 | r_8 tmin[3] = {9.e39,9.e39,9.e39};
|
---|
411 | r_8 tmax[3] = {-9.e39,-9.e39,-9.e39};
|
---|
412 | for(sa_size_t jj=0; jj<mArr->Size(); jj++) {
|
---|
413 | sa_size_t ix, iy, iz, it, iu;
|
---|
414 | mArr->IndexAtPosition(jj, ix, iy, iz, it, iu);
|
---|
415 | r_8 cv[3];
|
---|
416 | cv[0] = (*mArr)(ix,iy,iz,it,iu).real();
|
---|
417 | cv[1] = (*mArr)(ix,iy,iz,it,iu).imag();
|
---|
418 | cv[2] = sqrt(cv[0]*cv[0]+cv[1]*cv[1]);
|
---|
419 | for(int i=0; i<3; i++) {
|
---|
420 | if (cv[i] < tmin[i]) tmin[i] = cv[i];
|
---|
421 | if (cv[i] > tmax[i]) tmax[i] = cv[i];
|
---|
422 | }
|
---|
423 | }
|
---|
424 | if (k == 7) { min = tmin[0]; max = tmax[0]; }
|
---|
425 | else if (k == 8) { min = tmin[0]; max = tmax[0]; }
|
---|
426 | else { min = tmin[2]; max = tmax[2]; }
|
---|
427 | }
|
---|
428 | else { min = max = 0.; }
|
---|
429 | return;
|
---|
430 | }
|
---|
431 | DECL_TEMP_SPEC /* equivalent a template <> , pour SGI-CC en particulier */
|
---|
432 | void NTupInt_TArray< complex<r_8> >::GetMinMax(sa_size_t k, double& min, double& max) const
|
---|
433 | {
|
---|
434 | if (k == 0) {
|
---|
435 | min = 0.; max = (r_8)(mArr->Size()); }
|
---|
436 | else if (k == 1) {
|
---|
437 | min = 0.; max = (r_8)(mArr->SizeX()); }
|
---|
438 | else if (k == 2) {
|
---|
439 | min = 0.; max = (r_8)(mArr->SizeY()); }
|
---|
440 | else if (k == 3) {
|
---|
441 | min = 0.; max = (r_8)(mArr->SizeZ()); }
|
---|
442 | else if (k == 4) {
|
---|
443 | min = 0.; max = (r_8)(mArr->Size(3)); }
|
---|
444 | else if (k == 5) {
|
---|
445 | min = 0.; max = (r_8)(mArr->Size(4)); }
|
---|
446 | else if ((k >= 6) || (k <= 9)) {
|
---|
447 | r_8 tmin[3] = {9.e39,9.e39,9.e39};
|
---|
448 | r_8 tmax[3] = {-9.e39,-9.e39,-9.e39};
|
---|
449 | for(sa_size_t jj=0; jj<mArr->Size(); jj++) {
|
---|
450 | sa_size_t ix, iy, iz, it, iu;
|
---|
451 | mArr->IndexAtPosition(jj, ix, iy, iz, it, iu);
|
---|
452 | r_8 cv[3];
|
---|
453 | cv[0] = (*mArr)(ix,iy,iz,it,iu).real();
|
---|
454 | cv[1] = (*mArr)(ix,iy,iz,it,iu).imag();
|
---|
455 | cv[2] = sqrt(cv[0]*cv[0]+cv[1]*cv[1]);
|
---|
456 | for(int i=0; i<3; i++) {
|
---|
457 | if (cv[i] < tmin[i]) tmin[i] = cv[i];
|
---|
458 | if (cv[i] > tmax[i]) tmax[i] = cv[i];
|
---|
459 | }
|
---|
460 | }
|
---|
461 | if (k == 7) { min = tmin[0]; max = tmax[0]; }
|
---|
462 | else if (k == 8) { min = tmin[0]; max = tmax[0]; }
|
---|
463 | else { min = tmin[2]; max = tmax[2]; }
|
---|
464 | }
|
---|
465 | else { min = max = 0.; }
|
---|
466 | return;
|
---|
467 | }
|
---|
468 |
|
---|
469 | #ifdef __CXX_PRAGMA_TEMPLATES__
|
---|
470 | #pragma define_template NOMAdapter_TArray<uint_2>
|
---|
471 | #pragma define_template NOMAdapter_TArray<int_2>
|
---|
472 | #pragma define_template NOMAdapter_TArray<int_4>
|
---|
473 | #pragma define_template NOMAdapter_TArray<int_8>
|
---|
474 | #pragma define_template NOMAdapter_TArray<r_4>
|
---|
475 | #pragma define_template NOMAdapter_TArray<r_8>
|
---|
476 | #pragma define_template NOMAdapter_TArray< complex<r_4> >
|
---|
477 | #pragma define_template NOMAdapter_TArray< complex<r_8> >
|
---|
478 | #pragma define_template NTupInt_TArray<uint_2>
|
---|
479 | #pragma define_template NTupInt_TArray<int_2>
|
---|
480 | #pragma define_template NTupInt_TArray<int_4>
|
---|
481 | #pragma define_template NTupInt_TArray<int_8>
|
---|
482 | #pragma define_template NTupInt_TArray<r_4>
|
---|
483 | #pragma define_template NTupInt_TArray<r_8>
|
---|
484 | #pragma define_template NTupInt_TArray< complex<r_4> >
|
---|
485 | #pragma define_template NTupInt_TArray< complex<r_8> >
|
---|
486 | #endif
|
---|
487 |
|
---|
488 | #if defined(ANSI_TEMPLATES)
|
---|
489 | template class NOMAdapter_TArray<uint_2>;
|
---|
490 | template class NOMAdapter_TArray<int_2>;
|
---|
491 | template class NOMAdapter_TArray<int_4>;
|
---|
492 | template class NOMAdapter_TArray<int_8>;
|
---|
493 | template class NOMAdapter_TArray<r_4>;
|
---|
494 | template class NOMAdapter_TArray<r_8>;
|
---|
495 | template class NOMAdapter_TArray< complex<r_4> >;
|
---|
496 | template class NOMAdapter_TArray< complex<r_8> >;
|
---|
497 | template class NTupInt_TArray<uint_2>;
|
---|
498 | template class NTupInt_TArray<int_2>;
|
---|
499 | template class NTupInt_TArray<int_4>;
|
---|
500 | template class NTupInt_TArray<int_8>;
|
---|
501 | template class NTupInt_TArray<r_4>;
|
---|
502 | template class NTupInt_TArray<r_8>;
|
---|
503 | template class NTupInt_TArray< complex<r_4> >;
|
---|
504 | template class NTupInt_TArray< complex<r_8> >;
|
---|
505 | #endif
|
---|