Changeset 1402 in Sophya for trunk/SophyaLib
- Timestamp:
- Feb 13, 2001, 7:12:07 PM (25 years ago)
- Location:
- trunk/SophyaLib/NTools
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/SophyaLib/NTools/fftmserver.cc
r1394 r1402 246 246 247 247 /* --Methode-- */ 248 void FFTMayerServer::FFTBackward(TArray< complex<r_4> > const & ina, TArray< r_4 > & outa) 248 void FFTMayerServer::FFTBackward(TArray< complex<r_4> > const & ina, TArray< r_4 > & outa, 249 bool usoutsz) 249 250 { 250 251 ckR4.CheckResize(ina, outa); … … 338 339 339 340 /* --Methode-- */ 340 void FFTMayerServer::FFTBackward(TArray< complex<r_8> > const & ina, TArray< r_8 > & outa) 341 void FFTMayerServer::FFTBackward(TArray< complex<r_8> > const & ina, TArray< r_8 > & outa, 342 bool usoutsz) 341 343 { 342 344 ckR8.CheckResize(ina, outa); -
trunk/SophyaLib/NTools/fftmserver.h
r1394 r1402 21 21 virtual void FFTBackward(TArray< complex<r_8> > const & in, TArray< complex<r_8> > & out); 22 22 virtual void FFTForward(TArray< r_8 > const & in, TArray< complex<r_8> > & out); 23 virtual void FFTBackward(TArray< complex<r_8> > const & in, TArray< r_8 > & out); 23 virtual void FFTBackward(TArray< complex<r_8> > const & in, TArray< r_8 > & out, 24 bool usoutsz=false); 24 25 25 26 … … 28 29 virtual void FFTBackward(TArray< complex<r_4> > const & in, TArray< complex<r_4> > & out); 29 30 virtual void FFTForward(TArray< r_4 > const & in, TArray< complex<r_4> > & out); 30 virtual void FFTBackward(TArray< complex<r_4> > const & in, TArray< r_4 > & out); 31 virtual void FFTBackward(TArray< complex<r_4> > const & in, TArray< r_4 > & out, 32 bool usoutsz=false); 31 33 32 34 -
trunk/SophyaLib/NTools/fftpserver.cc
r1400 r1402 97 97 } 98 98 99 void FFTPackServer::FFTBackward(TArray< complex<r_4> > const & in, TArray< r_4 > & out) 100 { 101 ckR4.CheckResize(in, out); 99 void FFTPackServer::FFTBackward(TArray< complex<r_4> > const & in, TArray< r_4 > & out, 100 bool usoutsz) 101 { 102 ckR4.CheckResize(in, out, usoutsz); 102 103 ReShapetoReal(in, out); 103 104 fftb(out.Size(), out.Data()); … … 114 115 } 115 116 116 void FFTPackServer::FFTBackward(TArray< complex<r_8> > const & in, TArray< r_8 > & out) 117 { 118 ckR8.CheckResize(in, out); 117 void FFTPackServer::FFTBackward(TArray< complex<r_8> > const & in, TArray< r_8 > & out, 118 bool usoutsz) 119 { 120 ckR8.CheckResize(in, out, usoutsz); 119 121 ReShapetoReal(in, out); 120 122 fftb(out.Size(), out.Data()); -
trunk/SophyaLib/NTools/fftpserver.h
r1394 r1402 26 26 virtual void FFTBackward(TArray< complex<r_8> > const & in, TArray< complex<r_8> > & out); 27 27 virtual void FFTForward(TArray< r_8 > const & in, TArray< complex<r_8> > & out); 28 virtual void FFTBackward(TArray< complex<r_8> > const & in, TArray< r_8 > & out); 28 virtual void FFTBackward(TArray< complex<r_8> > const & in, TArray< r_8 > & out, 29 bool usoutsz=false); 29 30 30 31 // Transforme unidimensionnel sur des float … … 32 33 virtual void FFTBackward(TArray< complex<r_4> > const & in, TArray< complex<r_4> > & out); 33 34 virtual void FFTForward(TArray< r_4 > const & in, TArray< complex<r_4> > & out); 34 virtual void FFTBackward(TArray< complex<r_4> > const & in, TArray< r_4 > & out); 35 virtual void FFTBackward(TArray< complex<r_4> > const & in, TArray< r_4 > & out, 36 bool usoutsz=false); 35 37 36 38 // Methodes statiques pour reordonner les donnees -
trunk/SophyaLib/NTools/fftservintf.cc
r1400 r1402 41 41 42 42 /* --Methode-- */ 43 void FFTServerInterface::FFTBackward(TArray< complex<r_8> > const &, TArray< r_8 > & )43 void FFTServerInterface::FFTBackward(TArray< complex<r_8> > const &, TArray< r_8 > &, bool) 44 44 { 45 45 throw NotAvailableOperation("FFTServer::FFTBackward(TArray...) Unsupported operation !"); … … 68 68 69 69 /* --Methode-- */ 70 void FFTServerInterface::FFTBackward(TArray< complex<r_4> > const &, TArray< r_4 > & )70 void FFTServerInterface::FFTBackward(TArray< complex<r_4> > const &, TArray< r_4 > &, bool) 71 71 { 72 72 throw NotAvailableOperation("FFTServer::FFTBackward(TArray r_4 ... ) Unsupported operation !"); … … 183 183 /* --Methode-- */ 184 184 template <class T> 185 int FFTArrayChecker<T>::CheckResize(TArray< complex<T> > const & in, TArray< T > & out) 185 int FFTArrayChecker<T>::CheckResize(TArray< complex<T> > const & in, TArray< T > & out, 186 bool usoutsz) 186 187 { 187 188 int k; … … 204 205 throw(SzMismatchError(msg)); 205 206 } 206 sa_size_t sz[BASEARRAY_MAXNDIMS]; 207 if (ndg1 > 1) { 208 sz[0] = 2*in.Size(0)-1; 209 for(k=1; k<in.NbDimensions(); k++) 210 sz[k] = in.Size(k); 207 if (usoutsz) { // We have to use output array size 208 bool fgerr = false; 209 if (ndg1 > 1) { 210 if (in.Size(0) != out.Size(0)/2+1) fgerr = true; 211 } 212 else { 213 if (in.Size(in.MaxSizeKA()) != out.Size(in.MaxSizeKA())/2+1) fgerr = true; 214 } 215 if (fgerr) { 216 msg = _msg + "CheckResize(complex in, real out) - Incompatible in-out sizes !"; 217 throw(SzMismatchError(msg)); 218 } 219 } 220 else { // We have to resize the output array 221 sa_size_t sz[BASEARRAY_MAXNDIMS]; 222 if (ndg1 > 1) { 223 sz[0] = 2*in.Size(0)-1; 224 for(k=1; k<in.NbDimensions(); k++) 225 sz[k] = in.Size(k); 211 226 // sz[k] = in.Size(k)*2-1; 212 } 213 else { 214 for(k=0; k<BASEARRAY_MAXNDIMS; k++) sz[k] = 1; 215 T thr = ZeroThreshold(); 216 sa_size_t n = in.Size(in.MaxSizeKA()); 217 sa_size_t ncs = ( (in[n-1].imag() < -thr) || (in[n-1].imag() > thr) ) ? 218 ncs = 2*n-1 : ncs = 2*n-2; 219 sz[in.MaxSizeKA()] = ncs; 220 } 221 227 } 228 else { 229 for(k=0; k<BASEARRAY_MAXNDIMS; k++) sz[k] = 1; 230 T thr = ZeroThreshold(); 231 sa_size_t n = in.Size(in.MaxSizeKA()); 232 sa_size_t ncs = ( (in[n-1].imag() < -thr) || (in[n-1].imag() > thr) ) ? 233 ncs = 2*n-1 : ncs = 2*n-2; 234 sz[in.MaxSizeKA()] = ncs; 235 } 222 236 out.ReSize(in.NbDimensions(), sz); 237 } 223 238 224 239 return(ndg1); … … 226 241 } 227 242 228 /* --Methode--229 template <class T>230 void FFTArrayChecker<T>::ReShapetoReal( TArray< complex<T> > const & in, TArray< T > & out)231 {232 sa_size_t n = in.Size();233 // int ncs = (fabs(in(n-1).imag()) > 1.e-12) ? ncs = 2*n-1 : ncs = n*2-2;234 sa_size_t ncs = 2*n-1;235 sa_size_t k;236 out[0] = in[0].real();237 for(k=1;k<n-1;k++) {238 out[2*k-1] = in[k].real();239 out[2*k] = in[k].imag();240 }241 // if (ncs == n*2-2) out[ncs-1] = in[n-1].real();242 // else { out[ncs-2] = in[n-1].real(); out[ncs-1] = in[n-1].imag(); }243 out[ncs-2] = in[n-1].real(); out[ncs-1] = in[n-1].imag();244 }245 */246 247 /* --Methode--248 template <class T>249 void FFTArrayChecker<T>::ReShapetoCompl(TArray< T > const & in, TArray< complex<T> > & out)250 {251 sa_size_t n = in.Size();252 sa_size_t ncs = n/2+1;253 sa_size_t nc = (n%2 != 0) ? n/2+1 : n/2;254 out[0] = complex<T> (in[0],0.);255 for(int k=1;k<nc;k++)256 out[k] = complex<T> (in[2*k-1], in[2*k]);257 if (n%2 == 0) out[ncs-1] = complex<r_8>(in[n-1], 0.);258 }259 */260 243 261 244 #ifdef __CXX_PRAGMA_TEMPLATES__ -
trunk/SophyaLib/NTools/fftservintf.h
r1400 r1402 35 35 virtual void FFTForward(TArray< complex<r_8> > const & in, TArray< complex<r_8> > & out); 36 36 virtual void FFTBackward(TArray< complex<r_8> > const & in, TArray< complex<r_8> > & out); 37 virtual void FFTForward(TArray< r_8 > const & in, TArray< complex<r_8> > & out); 38 virtual void FFTBackward(TArray< complex<r_8> > const & in, TArray< r_8 > & out); 37 virtual void FFTForward(TArray< r_8 > const & in, TArray< complex<r_8> > & out); 38 virtual void FFTBackward(TArray< complex<r_8> > const & in, TArray< r_8 > & out, 39 bool usoutsz=false); 39 40 40 41 // Transforme N-dim sur des float … … 42 43 virtual void FFTBackward(TArray< complex<r_4> > const & in, TArray< complex<r_4> > & out); 43 44 virtual void FFTForward(TArray< r_4 > const & in, TArray< complex<r_4> > & out); 44 virtual void FFTBackward(TArray< complex<r_4> > const & in, TArray< r_4 > & out); 45 virtual void FFTBackward(TArray< complex<r_4> > const & in, TArray< r_4 > & out, 46 bool usoutsz=false); 45 47 46 48 protected: 49 47 50 bool _fgnorm; 48 51 string _info; 52 49 53 }; 50 54 … … 58 62 virtual ~FFTArrayChecker(); 59 63 static T ZeroThreshold(); 64 65 inline void SetMsg(string const & msg) { _msg = msg; } 66 inline void CheckPackedArray(bool ck=true) { _checkpack = ck; } 67 inline void Accept1DOnly(bool ac1d=false) { _onedonly = ac1d; } 68 60 69 virtual int CheckResize(TArray< complex<T> > const & in, TArray< complex<T> > & out); 61 70 virtual int CheckResize(TArray< T > const & in, TArray< complex<T> > & out); 62 virtual int CheckResize(TArray< complex<T> > const & in, TArray< T > & out); 63 // virtual void ReShapetoReal(TArray< complex<T> > const & in, TArray< T > & out); 64 // virtual void ReShapetoCompl(TArray< T > const & in, TArray< complex<T> > & out); 71 virtual int CheckResize(TArray< complex<T> > const & in, TArray< T > & out, 72 bool usoutsz=false); 65 73 66 74 protected: … … 68 76 bool _checkpack; 69 77 bool _onedonly; 78 70 79 }; 71 80
Note:
See TracChangeset
for help on using the changeset viewer.