#if !defined (FFT_H)
#define FFT_H
#include "smp.h"
#include "complexmap.h"
//#include <fftw.h> //This can be commented out if refs in fft.cpp are changed to fft_nd


class FFT {
 private:
 protected:
  void fft_nd(float* data,int* nn,int ndim,int isign) const;
 public:
  static const int ok = 0;
  static const int bad_map = 1;
  int FFTMaps(SMPMap& mapr,SMPMap& mapc,const int& inverse) const;
  int FFTWMaps(SMPMap& mapr,SMPMap& mapc,const int& inverse) const;
  int FFTComplexMap(ComplexMap& cmap,const int& inverse) const;
  int FFTMaps(const SMPMap& mapin,SMPMap** mapr,SMPMap** mapc) const;
  int FFTWMaps(const SMPMap& mapin,SMPMap** mapr,SMPMap** mapc) const;
  int PowerMap(SMPMap& mapin,const int& inverse) const;
  SMPMap PowerMap(const SMPMap& map1) const;
  SMPMap PowerMap(const SMPMap& map1,const SMPMap& map2) const;
  SMPMap TwoPointCorrelation(const SMPMap& map1) const;
  SMPMap TwoPointCorrelation(const SMPMap& map1,const SMPMap& map2) const;
  SMPMap ConvolveMaps(SMPMap& map1,SMPMap& map2) const;
};

#endif