Changeset 3002 in Sophya for trunk/SophyaLib/NTools
- Timestamp:
- Jul 3, 2006, 1:04:51 PM (19 years ago)
- Location:
- trunk/SophyaLib/NTools
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/SophyaLib/NTools/fftpserver.cc
r2988 r3002 40 40 41 41 42 FFTPackServer::FFTPackServer() 42 //! Constructor - If preserve_input==true, input arrays will not be overwritten. 43 FFTPackServer::FFTPackServer(bool preserve_input) 43 44 : FFTServerInterface("FFTPackServer using extended FFTPack (C-version) package") 44 , ckR4("FFTPackServer: ", true, true) , ckR8("FFTPackServer: ", true, true) 45 , ckR4("FFTPackServer: ", true, true) , ckR8("FFTPackServer: ", true, true), 46 _preserve_input(preserve_input) 45 47 { 46 48 //the working array and its size for the different … … 66 68 FFTServerInterface * FFTPackServer::Clone() 67 69 { 68 return (new FFTPackServer );69 } 70 71 72 void FFTPackServer::FFTForward(TArray< complex<r_8> > const& in, TArray< complex<r_8> > & out)70 return (new FFTPackServer(_preserve_input) ); 71 } 72 73 74 void FFTPackServer::FFTForward(TArray< complex<r_8> > & in, TArray< complex<r_8> > & out) 73 75 { 74 76 ckR8.CheckResize(in, out); … … 78 80 } 79 81 80 void FFTPackServer::FFTBackward(TArray< complex<r_8> > const& in, TArray< complex<r_8> > & out)82 void FFTPackServer::FFTBackward(TArray< complex<r_8> > & in, TArray< complex<r_8> > & out) 81 83 { 82 84 ckR8.CheckResize(in, out); … … 86 88 87 89 88 void FFTPackServer::FFTForward(TArray< complex<r_4> > const& in, TArray< complex<r_4> > & out)90 void FFTPackServer::FFTForward(TArray< complex<r_4> > & in, TArray< complex<r_4> > & out) 89 91 { 90 92 ckR4.CheckResize(in, out); … … 94 96 } 95 97 96 void FFTPackServer::FFTBackward(TArray< complex<r_4> > const& in, TArray< complex<r_4> > & out)98 void FFTPackServer::FFTBackward(TArray< complex<r_4> > & in, TArray< complex<r_4> > & out) 97 99 { 98 100 ckR4.CheckResize(in, out); … … 101 103 } 102 104 103 void FFTPackServer::FFTForward(TArray< r_4 > const & in, TArray< complex<r_4> > & out) 104 { 105 ckR4.CheckResize(in, out); 106 TArray< r_4 > inout(in, false); 105 void FFTPackServer::FFTForward(TArray< r_4 > & in, TArray< complex<r_4> > & out) 106 { 107 ckR4.CheckResize(in, out); 108 bool share = (_preserve_input) ? false : true; 109 TArray< r_4 > inout(in, share); 107 110 fftf(inout.Size(), inout.Data()); 108 111 ReShapetoCompl(inout, out); … … 110 113 } 111 114 112 void FFTPackServer::FFTBackward(TArray< complex<r_4> > const& in, TArray< r_4 > & out,115 void FFTPackServer::FFTBackward(TArray< complex<r_4> > & in, TArray< r_4 > & out, 113 116 bool usoutsz) 114 117 { … … 119 122 120 123 121 void FFTPackServer::FFTForward(TArray< r_8 > const& in, TArray< complex<r_8> > & out)124 void FFTPackServer::FFTForward(TArray< r_8 > & in, TArray< complex<r_8> > & out) 122 125 { 123 126 ckR8.CheckResize(in, out); 124 TArray< r_8 > inout(in, false); 127 bool share = (_preserve_input) ? false : true; 128 TArray< r_8 > inout(in, share); 125 129 fftf(inout.Size(), inout.Data()); 126 130 ReShapetoCompl(inout, out); … … 128 132 } 129 133 130 void FFTPackServer::FFTBackward(TArray< complex<r_8> > const& in, TArray< r_8 > & out,134 void FFTPackServer::FFTBackward(TArray< complex<r_8> > & in, TArray< r_8 > & out, 131 135 bool usoutsz) 132 136 { -
trunk/SophyaLib/NTools/fftpserver.h
r2988 r3002 15 15 class FFTPackServer : public FFTServerInterface { 16 16 public: 17 FFTPackServer( );17 FFTPackServer(bool preserve_input=true); 18 18 virtual ~FFTPackServer(); 19 19 … … 23 23 24 24 // Transforme unidimensionnel sur des double 25 virtual void FFTForward(TArray< complex<r_8> > const& in, TArray< complex<r_8> > & out);26 virtual void FFTBackward(TArray< complex<r_8> > const& in, TArray< complex<r_8> > & out);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,25 virtual void FFTForward(TArray< complex<r_8> > & in, TArray< complex<r_8> > & out); 26 virtual void FFTBackward(TArray< complex<r_8> > & in, TArray< complex<r_8> > & out); 27 virtual void FFTForward(TArray< r_8 > & in, TArray< complex<r_8> > & out); 28 virtual void FFTBackward(TArray< complex<r_8> > & in, TArray< r_8 > & out, 29 29 bool usoutsz=false); 30 30 31 31 // Transforme unidimensionnel sur des float 32 virtual void FFTForward(TArray< complex<r_4> > const& in, TArray< complex<r_4> > & out);33 virtual void FFTBackward(TArray< complex<r_4> > const& in, TArray< complex<r_4> > & out);34 virtual void FFTForward(TArray< r_4 > const& in, TArray< complex<r_4> > & out);35 virtual void FFTBackward(TArray< complex<r_4> > const& in, TArray< r_4 > & out,32 virtual void FFTForward(TArray< complex<r_4> > & in, TArray< complex<r_4> > & out); 33 virtual void FFTBackward(TArray< complex<r_4> > & in, TArray< complex<r_4> > & out); 34 virtual void FFTForward(TArray< r_4 > & in, TArray< complex<r_4> > & out); 35 virtual void FFTBackward(TArray< complex<r_4> > & in, TArray< r_4 > & out, 36 36 bool usoutsz=false); 37 37 … … 72 72 FFTArrayChecker<r_4> ckR4; 73 73 FFTArrayChecker<r_8> ckR8; 74 bool _preserve_input; // if true, input arrays not overwritten 75 74 76 }; 75 77 -
trunk/SophyaLib/NTools/fftservintf.cc
r2988 r3002 71 71 \param out : Output complex array 72 72 */ 73 void FFTServerInterface::FFTForward(TArray< complex<r_8> > const&, TArray< complex<r_8> > &)73 void FFTServerInterface::FFTForward(TArray< complex<r_8> > &, TArray< complex<r_8> > &) 74 74 { 75 75 throw NotAvailableOperation("FFTServer::FFTForward(TArray...) Unsupported operation !"); … … 82 82 \param out : Output complex array 83 83 */ 84 void FFTServerInterface::FFTBackward(TArray< complex<r_8> > const&, TArray< complex<r_8> > &)84 void FFTServerInterface::FFTBackward(TArray< complex<r_8> > &, TArray< complex<r_8> > &) 85 85 { 86 86 throw NotAvailableOperation("FFTServer::FFTBackward(TArray...) Unsupported operation !"); … … 93 93 \param out : Output complex array 94 94 */ 95 void FFTServerInterface::FFTForward(TArray< r_8 > const&, TArray< complex<r_8> > &)95 void FFTServerInterface::FFTForward(TArray< r_8 > &, TArray< complex<r_8> > &) 96 96 { 97 97 throw NotAvailableOperation("FFTServer::FFTForward(TArray...) Unsupported operation !"); … … 110 110 size_out_real = 2*size_in_complex - ( 1 or 2) 111 111 */ 112 void FFTServerInterface::FFTBackward(TArray< complex<r_8> > const&, TArray< r_8 > &, bool)112 void FFTServerInterface::FFTBackward(TArray< complex<r_8> > &, TArray< r_8 > &, bool) 113 113 { 114 114 throw NotAvailableOperation("FFTServer::FFTBackward(TArray...) Unsupported operation !"); … … 124 124 \param out : Output complex array 125 125 */ 126 void FFTServerInterface::FFTForward(TArray< complex<r_4> > const&, TArray< complex<r_4> > &)126 void FFTServerInterface::FFTForward(TArray< complex<r_4> > &, TArray< complex<r_4> > &) 127 127 { 128 128 throw NotAvailableOperation("FFTServer::FFTForward(TArray r_4 ... ) Unsupported operation !"); … … 135 135 \param out : Output complex array 136 136 */ 137 void FFTServerInterface::FFTBackward(TArray< complex<r_4> > const&, TArray< complex<r_4> > &)137 void FFTServerInterface::FFTBackward(TArray< complex<r_4> > &, TArray< complex<r_4> > &) 138 138 { 139 139 throw NotAvailableOperation("FFTServer::FFTBackward(TArray r_4 ... ) Unsupported operation !"); … … 146 146 \param out : Output complex array 147 147 */ 148 void FFTServerInterface::FFTForward(TArray< r_4 > const&, TArray< complex<r_4> > &)148 void FFTServerInterface::FFTForward(TArray< r_4 > &, TArray< complex<r_4> > &) 149 149 { 150 150 throw NotAvailableOperation("FFTServer::FFTForward(TArray r_4 ... ) Unsupported operation !"); … … 163 163 size_out_real = 2*size_in_complex - ( 1 or 2) 164 164 */ 165 void FFTServerInterface::FFTBackward(TArray< complex<r_4> > const&, TArray< r_4 > &, bool)165 void FFTServerInterface::FFTBackward(TArray< complex<r_4> > &, TArray< r_4 > &, bool) 166 166 { 167 167 throw NotAvailableOperation("FFTServer::FFTBackward(TArray r_4 ... ) Unsupported operation !"); -
trunk/SophyaLib/NTools/fftservintf.h
r2540 r3002 36 36 //--------------------------------------------------- 37 37 // Transforme N-dim sur des doubles 38 virtual void FFTForward(TArray<r_4> const& in, TArray< complex<r_4> > & out);39 virtual void FFTForward(TArray<r_8> const& in, TArray< complex<r_8> > & out);40 virtual void FFTForward(TArray< complex<r_4> > const& in, TArray< complex<r_4> > & out);41 virtual void FFTForward(TArray< complex<r_8> > const& in, TArray< complex<r_8> > & out);38 virtual void FFTForward(TArray<r_4> & in, TArray< complex<r_4> > & out); 39 virtual void FFTForward(TArray<r_8> & in, TArray< complex<r_8> > & out); 40 virtual void FFTForward(TArray< complex<r_4> > & in, TArray< complex<r_4> > & out); 41 virtual void FFTForward(TArray< complex<r_8> > & in, TArray< complex<r_8> > & out); 42 42 43 virtual void FFTBackward(TArray< complex<r_4> > const& in, TArray<r_4> & out,bool usoutsz=false);44 virtual void FFTBackward(TArray< complex<r_8> > const& in, TArray<r_8> & out,bool usoutsz=false);45 virtual void FFTBackward(TArray< complex<r_4> > const& in, TArray< complex<r_4> > & out);46 virtual void FFTBackward(TArray< complex<r_8> > const& in, TArray< complex<r_8> > & out);43 virtual void FFTBackward(TArray< complex<r_4> > & in, TArray<r_4> & out,bool usoutsz=false); 44 virtual void FFTBackward(TArray< complex<r_8> > & in, TArray<r_8> & out,bool usoutsz=false); 45 virtual void FFTBackward(TArray< complex<r_4> > & in, TArray< complex<r_4> > & out); 46 virtual void FFTBackward(TArray< complex<r_8> > & in, TArray< complex<r_8> > & out); 47 47 48 48 protected: -
trunk/SophyaLib/NTools/toeplitzMatrix.cc
r2908 r3002 28 28 Toeplitz::Toeplitz() : hermitian_(false) 29 29 { 30 fftIntfPtr_=new FFTPackServer ;30 fftIntfPtr_=new FFTPackServer(true); // true -> on ne surecrit pas les input 31 31 fftIntfPtr_->setNormalize(false); 32 32 } … … 36 36 Toeplitz::Toeplitz(const TVector<complex<double> >& firstCol) : hermitian_(false) 37 37 { 38 fftIntfPtr_=new FFTPackServer ;38 fftIntfPtr_=new FFTPackServer(true); // true -> on ne surecrit pas les input 39 39 fftIntfPtr_->setNormalize(false); 40 40 setMatrix(firstCol); -
trunk/SophyaLib/NTools/toeplitzMatrix.h
r2908 r3002 79 79 80 80 81 // Reza+CMV du 3/7/2006 : on a instancie le FFTPackServer avec le flag preserveinput=true 82 // On peut donc faire en principe les const_cast sans danger 81 83 inline void transformeeFourier(const TVector<complex<double> >& v, TVector< complex<double> >& tv) const 82 84 { 83 fftIntfPtr_-> FFTForward( v, tv);85 fftIntfPtr_-> FFTForward(const_cast<TVector<complex<double> > & >(v), tv); 84 86 } 85 87 inline void transformeeFourier(const TVector<double>& v, TVector< complex<double> >& tv) const 86 88 { 87 fftIntfPtr_-> FFTForward( v, tv);89 fftIntfPtr_-> FFTForward(const_cast<TVector<double> & >(v), tv); 88 90 } 89 91 … … 92 94 { 93 95 int n= tv.Size(); 94 fftIntfPtr_-> FFTBackward( tv, v);96 fftIntfPtr_-> FFTBackward(const_cast<TVector<complex<double> > & >(tv), v); 95 97 v/=n; 96 98 } … … 98 100 { 99 101 int n= tv.Size(); 100 fftIntfPtr_-> FFTBackward( tv, v);102 fftIntfPtr_-> FFTBackward(const_cast< TVector<complex<double> > & >(tv), v); 101 103 double fac = 1./(2*(n-1)); 102 104 v *= fac;
Note:
See TracChangeset
for help on using the changeset viewer.