Changeset 3002 in Sophya


Ignore:
Timestamp:
Jul 3, 2006, 1:04:51 PM (19 years ago)
Author:
ansari
Message:

Suppression const des arguments FFTForward/Backward + adaptation de Toeplitz, cmv+Reza 03/07/2006

Location:
trunk/SophyaLib/NTools
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/SophyaLib/NTools/fftpserver.cc

    r2988 r3002  
    4040
    4141
    42 FFTPackServer::FFTPackServer()
     42//! Constructor - If preserve_input==true, input arrays will not be overwritten.
     43FFTPackServer::FFTPackServer(bool preserve_input)
    4344   : 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)
    4547{
    4648//the working array and its size for the different
     
    6668FFTServerInterface * FFTPackServer::Clone()
    6769{
    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
     74void FFTPackServer::FFTForward(TArray< complex<r_8> > & in, TArray< complex<r_8> > & out)
    7375{
    7476  ckR8.CheckResize(in, out);
     
    7880}
    7981
    80 void FFTPackServer::FFTBackward(TArray< complex<r_8> > const & in, TArray< complex<r_8> > & out)
     82void FFTPackServer::FFTBackward(TArray< complex<r_8> > & in, TArray< complex<r_8> > & out)
    8183{
    8284  ckR8.CheckResize(in, out);
     
    8688
    8789
    88 void FFTPackServer::FFTForward(TArray< complex<r_4> > const & in, TArray< complex<r_4> > & out)
     90void FFTPackServer::FFTForward(TArray< complex<r_4> > & in, TArray< complex<r_4> > & out)
    8991{
    9092  ckR4.CheckResize(in, out); 
     
    9496}
    9597
    96 void FFTPackServer::FFTBackward(TArray< complex<r_4> > const & in, TArray< complex<r_4> > & out)
     98void FFTPackServer::FFTBackward(TArray< complex<r_4> > & in, TArray< complex<r_4> > & out)
    9799{
    98100  ckR4.CheckResize(in, out); 
     
    101103}
    102104
    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);
     105void 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);
    107110  fftf(inout.Size(), inout.Data());
    108111  ReShapetoCompl(inout, out);
     
    110113}
    111114
    112 void FFTPackServer::FFTBackward(TArray< complex<r_4> > const & in, TArray< r_4 > & out,
     115void FFTPackServer::FFTBackward(TArray< complex<r_4> > & in, TArray< r_4 > & out,
    113116                                bool usoutsz)
    114117{
     
    119122
    120123
    121 void FFTPackServer::FFTForward(TArray< r_8 > const & in, TArray< complex<r_8> > & out)
     124void FFTPackServer::FFTForward(TArray< r_8 > & in, TArray< complex<r_8> > & out)
    122125{
    123126  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);
    125129  fftf(inout.Size(), inout.Data());
    126130  ReShapetoCompl(inout, out);
     
    128132}
    129133
    130 void FFTPackServer::FFTBackward(TArray< complex<r_8> > const & in, TArray< r_8 > & out,
     134void FFTPackServer::FFTBackward(TArray< complex<r_8> > & in, TArray< r_8 > & out,
    131135                                bool usoutsz)
    132136{
  • trunk/SophyaLib/NTools/fftpserver.h

    r2988 r3002  
    1515class FFTPackServer : public FFTServerInterface {
    1616 public:
    17   FFTPackServer();
     17  FFTPackServer(bool preserve_input=true);
    1818  virtual ~FFTPackServer();
    1919
     
    2323
    2424  // 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,
    2929                           bool usoutsz=false);
    3030
    3131  // 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,
    3636                           bool usoutsz=false);
    3737
     
    7272  FFTArrayChecker<r_4> ckR4;
    7373  FFTArrayChecker<r_8> ckR8;
     74  bool _preserve_input; // if true, input arrays not overwritten
     75
    7476};
    7577
  • trunk/SophyaLib/NTools/fftservintf.cc

    r2988 r3002  
    7171  \param out : Output complex array
    7272 */
    73 void FFTServerInterface::FFTForward(TArray< complex<r_8> > const &, TArray< complex<r_8> > &)
     73void FFTServerInterface::FFTForward(TArray< complex<r_8> > &, TArray< complex<r_8> > &)
    7474{
    7575  throw NotAvailableOperation("FFTServer::FFTForward(TArray...) Unsupported operation !");
     
    8282  \param out : Output complex array
    8383 */
    84 void FFTServerInterface::FFTBackward(TArray< complex<r_8> > const &, TArray< complex<r_8> > &)
     84void FFTServerInterface::FFTBackward(TArray< complex<r_8> > &, TArray< complex<r_8> > &)
    8585{
    8686  throw NotAvailableOperation("FFTServer::FFTBackward(TArray...) Unsupported operation !");
     
    9393  \param out : Output complex array
    9494 */
    95 void FFTServerInterface::FFTForward(TArray< r_8 > const &, TArray< complex<r_8> > &)
     95void FFTServerInterface::FFTForward(TArray< r_8 > &, TArray< complex<r_8> > &)
    9696{
    9797  throw NotAvailableOperation("FFTServer::FFTForward(TArray...) Unsupported operation !");
     
    110110  size_out_real = 2*size_in_complex - ( 1 or 2)   
    111111 */
    112 void FFTServerInterface::FFTBackward(TArray< complex<r_8> > const &, TArray< r_8 > &, bool)
     112void FFTServerInterface::FFTBackward(TArray< complex<r_8> > &, TArray< r_8 > &, bool)
    113113{
    114114  throw NotAvailableOperation("FFTServer::FFTBackward(TArray...) Unsupported operation !");
     
    124124  \param out : Output complex array
    125125 */
    126 void FFTServerInterface::FFTForward(TArray< complex<r_4> > const &, TArray< complex<r_4> > &)
     126void FFTServerInterface::FFTForward(TArray< complex<r_4> > &, TArray< complex<r_4> > &)
    127127{
    128128  throw NotAvailableOperation("FFTServer::FFTForward(TArray r_4 ... ) Unsupported operation !");
     
    135135  \param out : Output complex array
    136136 */
    137 void FFTServerInterface::FFTBackward(TArray< complex<r_4> > const &, TArray< complex<r_4> > &)
     137void FFTServerInterface::FFTBackward(TArray< complex<r_4> > &, TArray< complex<r_4> > &)
    138138{
    139139  throw NotAvailableOperation("FFTServer::FFTBackward(TArray r_4 ... ) Unsupported operation !");
     
    146146  \param out : Output complex array
    147147 */
    148 void FFTServerInterface::FFTForward(TArray< r_4 > const &, TArray< complex<r_4> > &)
     148void FFTServerInterface::FFTForward(TArray< r_4 > &, TArray< complex<r_4> > &)
    149149{
    150150  throw NotAvailableOperation("FFTServer::FFTForward(TArray r_4 ... ) Unsupported operation !");
     
    163163  size_out_real = 2*size_in_complex - ( 1 or 2)   
    164164*/
    165 void FFTServerInterface::FFTBackward(TArray< complex<r_4> > const &, TArray< r_4 > &, bool)
     165void FFTServerInterface::FFTBackward(TArray< complex<r_4> > &, TArray< r_4 > &, bool)
    166166{
    167167  throw NotAvailableOperation("FFTServer::FFTBackward(TArray r_4 ... ) Unsupported operation !");
  • trunk/SophyaLib/NTools/fftservintf.h

    r2540 r3002  
    3636  //---------------------------------------------------
    3737  // 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);
    4242
    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);
    4747
    4848 protected:
  • trunk/SophyaLib/NTools/toeplitzMatrix.cc

    r2908 r3002  
    2828Toeplitz::Toeplitz() : hermitian_(false)
    2929  {
    30     fftIntfPtr_=new FFTPackServer;
     30    fftIntfPtr_=new FFTPackServer(true);  // true -> on ne surecrit pas les input
    3131    fftIntfPtr_->setNormalize(false);
    3232  }
     
    3636Toeplitz::Toeplitz(const TVector<complex<double> >& firstCol) : hermitian_(false)
    3737  {
    38     fftIntfPtr_=new FFTPackServer;
     38    fftIntfPtr_=new FFTPackServer(true); // true -> on ne surecrit pas les input
    3939    fftIntfPtr_->setNormalize(false);
    4040    setMatrix(firstCol);
  • trunk/SophyaLib/NTools/toeplitzMatrix.h

    r2908 r3002  
    7979
    8080
     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
    8183inline void transformeeFourier(const TVector<complex<double> >& v, TVector< complex<double> >& tv) const
    8284{
    83   fftIntfPtr_-> FFTForward(v, tv);
     85  fftIntfPtr_-> FFTForward(const_cast<TVector<complex<double> > & >(v), tv);
    8486}
    8587inline void transformeeFourier(const TVector<double>& v, TVector< complex<double> >& tv) const
    8688{
    87   fftIntfPtr_-> FFTForward(v, tv);
     89  fftIntfPtr_-> FFTForward(const_cast<TVector<double> & >(v), tv);
    8890}
    8991
     
    9294{
    9395  int n= tv.Size();
    94   fftIntfPtr_-> FFTBackward(tv, v);
     96  fftIntfPtr_-> FFTBackward(const_cast<TVector<complex<double> > & >(tv), v);
    9597  v/=n;
    9698}
     
    98100{
    99101  int n= tv.Size();
    100   fftIntfPtr_-> FFTBackward(tv, v);
     102  fftIntfPtr_-> FFTBackward(const_cast< TVector<complex<double> > & >(tv), v);
    101103  double fac = 1./(2*(n-1));
    102104  v *= fac;
Note: See TracChangeset for help on using the changeset viewer.