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

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

Instanciation explicite et enregistrement des adaptateurs NObjMgrAdapter pour TArray, et TMatrix/TVector <T> pour T=uint_4, uint_8, Reza 12/10/2008

File size: 5.3 KB
Line 
1// Adaptateurs pour TMatrix TVector du package Sophya
2// R. Ansari 1/99
3// LAL (Orsay) / IN2P3-CNRS DAPNIA/SPP (Saclay) / CEA
4
5#include "sopnamsp.h"
6#include "pitvmaad.h"
7#include <math.h>
8
9/* --Methode-- */
10template <class T>
11POTVectorAdapter<T>::POTVectorAdapter(TVector<T>* v, bool ad)
12 : P1DArrayAdapter(v->NElts())
13{
14aDel = ad;
15mVec = v;
16}
17/* --Methode-- */
18template <class T>
19POTVectorAdapter<T>::~POTVectorAdapter()
20{
21if (aDel) delete mVec;
22}
23
24/* --Methode-- */
25template <class T>
26double POTVectorAdapter<T>::Value(int i)
27{
28return((*mVec)(i));
29}
30
31/* --Methode-- */
32DECL_TEMP_SPEC /* equivalent a template <> , pour SGI-CC en particulier */
33double POTVectorAdapter< complex<float> >::Value(int i)
34{
35double re,im;
36re = (*mVec)(i).real();
37im = (*mVec)(i).imag();
38return(sqrt(re*re+im*im));
39}
40
41/* --Methode-- */
42DECL_TEMP_SPEC /* equivalent a template <> , pour SGI-CC en particulier */
43double POTVectorAdapter< complex<double> >::Value(int i)
44{
45double re,im;
46re = (*mVec)(i).real();
47im = (*mVec)(i).imag();
48return(sqrt(re*re+im*im));
49}
50
51/* --Methode-- */
52template <class T>
53POTMatrixAdapter<T>::POTMatrixAdapter(TMatrix<T>* mtx, bool ad)
54 : P2DArrayAdapter(mtx->NCols(), mtx->NRows())
55{
56aDel = ad;
57mMtx = mtx;
58}
59/* --Methode-- */
60template <class T>
61POTMatrixAdapter<T>::~POTMatrixAdapter()
62{
63if (aDel) delete mMtx;
64}
65/* --Methode-- */
66template <class T>
67double POTMatrixAdapter<T>::Value(int ix, int iy)
68{
69return((double)(*mMtx)(iy, ix));
70}
71
72/* --Methode-- */
73template <class T>
74double POTMatrixAdapter<T>::MeanVal(int ix1, int ix2, int jy1, int jy2)
75{
76int ec;
77if (ix1>ix2) { ec=ix1; ix1=ix2; ix2=ec; }
78if (jy1>jy2) { ec=jy1; jy1=jy2; jy2=ec; }
79double ss = 0.;
80for(int j=jy1; j<=jy2; j++)
81 for(int i=ix1; i<=ix2; i++) ss += (double)((*mMtx)(j, i));
82ss /= (double)((jy2-jy1+1)*(ix2-ix1+1));
83return ss;
84}
85
86
87/* --Methode-- */
88DECL_TEMP_SPEC /* equivalent a template <> , pour SGI-CC en particulier */
89double POTMatrixAdapter< complex<float> >::Value(int ix, int iy)
90{
91double re,im;
92re = (*mMtx)(iy, ix).real();
93im = (*mMtx)(iy, ix).imag();
94return(sqrt(re*re+im*im));
95}
96
97/* --Methode-- */
98DECL_TEMP_SPEC /* equivalent a template <> , pour SGI-CC en particulier */
99double POTMatrixAdapter< complex<double> >::Value(int ix, int iy)
100{
101double re,im;
102re = (*mMtx)(iy, ix).real();
103im = (*mMtx)(iy, ix).imag();
104return(sqrt(re*re+im*im));
105}
106
107/* --Methode-- */
108DECL_TEMP_SPEC /* equivalent a template <> , pour SGI-CC en particulier */
109double POTMatrixAdapter< complex<float> >::MeanVal(int ix1, int ix2, int jy1, int jy2)
110{
111int ec;
112if (ix1>ix2) { ec=ix1; ix1=ix2; ix2=ec; }
113if (jy1>jy2) { ec=jy1; jy1=jy2; jy2=ec; }
114complex<float> ss = 0.;
115for(int j=jy1; j<=jy2; j++)
116 for(int i=ix1; i<=ix2; i++) ss += (*mMtx)(j, i);
117ss /= (double)((jy2-jy1+1)*(ix2-ix1+1));
118return sqrt(ss.real()*ss.real()+ss.imag()*ss.imag());
119}
120
121/* --Methode-- */
122DECL_TEMP_SPEC /* equivalent a template <> , pour SGI-CC en particulier */
123double POTMatrixAdapter< complex<double> >::MeanVal(int ix1, int ix2, int jy1, int jy2)
124{
125int ec;
126if (ix1>ix2) { ec=ix1; ix1=ix2; ix2=ec; }
127if (jy1>jy2) { ec=jy1; jy1=jy2; jy2=ec; }
128complex<double> ss = 0.;
129for(int j=jy1; j<=jy2; j++)
130 for(int i=ix1; i<=ix2; i++) ss += (*mMtx)(j, i);
131ss /= (double)((jy2-jy1+1)*(ix2-ix1+1));
132return sqrt(ss.real()*ss.real()+ss.imag()*ss.imag());
133}
134
135#ifdef __CXX_PRAGMA_TEMPLATES__
136#pragma define_template POTVectorAdapter< uint_2 >
137#pragma define_template POTVectorAdapter< uint_4 >
138#pragma define_template POTVectorAdapter< uint_8 >
139#pragma define_template POTVectorAdapter< int_2 >
140#pragma define_template POTVectorAdapter< int_4 >
141#pragma define_template POTVectorAdapter< int_8 >
142#pragma define_template POTVectorAdapter< float >
143#pragma define_template POTVectorAdapter< double >
144#pragma define_template POTVectorAdapter< complex<float> >
145#pragma define_template POTVectorAdapter< complex<double> >
146
147#pragma define_template POTMatrixAdapter< uint_2 >
148#pragma define_template POTMatrixAdapter< uint_4 >
149#pragma define_template POTMatrixAdapter< uint_8 >
150#pragma define_template POTMatrixAdapter< int_2 >
151#pragma define_template POTMatrixAdapter< int_4 >
152#pragma define_template POTMatrixAdapter< int_8 >
153#pragma define_template POTMatrixAdapter< float >
154#pragma define_template POTMatrixAdapter< double >
155#pragma define_template POTMatrixAdapter< complex<float> >
156#pragma define_template POTMatrixAdapter< complex<double> >
157#endif
158
159#if defined(ANSI_TEMPLATES)
160template class POTVectorAdapter< uint_2 >;
161template class POTVectorAdapter< uint_4 >;
162template class POTVectorAdapter< uint_8 >;
163template class POTVectorAdapter< int_2 >;
164template class POTVectorAdapter< int_4 >;
165template class POTVectorAdapter< int_8 >;
166template class POTVectorAdapter< float >;
167template class POTVectorAdapter< double >;
168template class POTVectorAdapter< complex<float> >;
169template class POTVectorAdapter< complex<double> >;
170
171template class POTMatrixAdapter< uint_2 >;
172template class POTMatrixAdapter< uint_4 >;
173template class POTMatrixAdapter< uint_8 >;
174template class POTMatrixAdapter< int_2 >;
175template class POTMatrixAdapter< int_4 >;
176template class POTMatrixAdapter< int_8 >;
177template class POTMatrixAdapter< float >;
178template class POTMatrixAdapter< double >;
179template class POTMatrixAdapter< complex<float> >;
180template class POTMatrixAdapter< complex<double> >;
181#endif
Note: See TracBrowser for help on using the repository browser.