Index: trunk/SophyaLib/NTools/fftmserver.cc
===================================================================
--- trunk/SophyaLib/NTools/fftmserver.cc	(revision 1393)
+++ trunk/SophyaLib/NTools/fftmserver.cc	(revision 1394)
@@ -7,4 +7,5 @@
 FFTMayerServer::FFTMayerServer()
    : FFTServerInterface("FFTMayerServer using extended FFTMayer package")
+  , ckR4("FFTMayerServer: ", true, true) , ckR8("FFTMayerServer: ", true, true)
 
 {
@@ -24,6 +25,10 @@
 
 /* --Methode-- */
-void FFTMayerServer::FFTForward(TVector< complex<r_8> > const & in, TVector< complex<r_8> > & out)
-{
+void FFTMayerServer::FFTForward(TArray< complex<r_8> > const & ina, TArray< complex<r_8> > & outa)
+{
+ ckR8.CheckResize(ina, outa);
+ TVector< complex<r_8> > in(ina);
+ TVector< complex<r_8> > out(outa);
+
  r_8 a,b,c,d;
  r_8 q,r,s,t;
@@ -55,5 +60,5 @@
  fht_r8(inoutim.Data(),inoutim.NElts());
 
- out.ReSize(in.NElts());
+ // out.ReSize(in.NElts());
  r_8 fn = 1./n;
  if (getNormalize()) 
@@ -66,6 +71,10 @@
 
 /* --Methode-- */
-void FFTMayerServer::FFTBackward(TVector< complex<r_8> > const & in, TVector< complex<r_8> > & out)
-{
+void FFTMayerServer::FFTBackward(TArray< complex<r_8> > const & ina, TArray< complex<r_8> > & outa)
+{
+ ckR8.CheckResize(ina, outa);
+ TVector< complex<r_8> > in(ina);
+ TVector< complex<r_8> > out(outa);
+
  r_8 a,b,c,d;
  r_8 q,r,s,t;
@@ -87,5 +96,5 @@
  fht_r8(inoutim.Data(),inoutim.NElts());
 
- out.ReSize(in.NElts());
+ // out.ReSize(in.NElts());
  out(0) = complex<r_8>(inoutre(0), inoutim(0));
  out(n/2) = complex<r_8>(inoutre(n/2), inoutim(n/2));
@@ -102,6 +111,10 @@
 
 /* --Methode-- */
-void FFTMayerServer::FFTForward(TVector< complex<r_4> > const & in, TVector< complex<r_4> > & out)
-{
+void FFTMayerServer::FFTForward(TArray< complex<r_4> > const & ina, TArray< complex<r_4> > & outa)
+{
+ ckR4.CheckResize(ina, outa);
+ TVector< complex<r_4> > in(ina);
+ TVector< complex<r_4> > out(outa);
+
  r_4 a,b,c,d;
  r_4 q,r,s,t;
@@ -133,5 +146,5 @@
  fht_r4(inoutim.Data(),inoutim.NElts());
 
- out.ReSize(in.NElts());
+ // out.ReSize(in.NElts());
  r_4 fn = 1./n;
  if (getNormalize()) 
@@ -145,6 +158,10 @@
 
 /* --Methode-- */
-void FFTMayerServer::FFTBackward(TVector< complex<r_4> > const & in, TVector< complex<r_4> > & out)
-{
+void FFTMayerServer::FFTBackward(TArray< complex<r_4> > const & ina, TArray< complex<r_4> > & outa)
+{
+ ckR4.CheckResize(ina, outa);
+ TVector< complex<r_4> > in(ina);
+ TVector< complex<r_4> > out(outa);
+
  r_4 a,b,c,d;
  r_4 q,r,s,t;
@@ -167,5 +184,5 @@
  fht_r4(inoutim.Data(),inoutim.NElts());
 
- out.ReSize(in.NElts());
+ // out.ReSize(in.NElts());
  out(0) = complex<r_4>(inoutre(0), inoutim(0));
  out(n/2) = complex<r_4>(inoutre(n/2), inoutim(n/2));
@@ -182,6 +199,10 @@
 
 /* --Methode-- */
-void FFTMayerServer::FFTForward(TVector< r_4 > const & in, TVector< complex<r_4> > & out)
-{
+void FFTMayerServer::FFTForward(TArray< r_4 > const & ina, TArray< complex<r_4> > & outa)
+{
+ ckR4.CheckResize(ina, outa);
+ TVector< r_4 > in(ina);
+ TVector< complex<r_4> > out(outa);
+
  r_4 a,b;
  int i,j,k;
@@ -205,5 +226,5 @@
 
   
- out.ReSize(n/2+1);
+ // out.ReSize(n/2+1);
  out(0) = complex<r_4>(inout(0), 0.);
 
@@ -225,6 +246,10 @@
 
 /* --Methode-- */
-void FFTMayerServer::FFTBackward(TVector< complex<r_4> > const & in, TVector< r_4 > & out)
-{
+void FFTMayerServer::FFTBackward(TArray< complex<r_4> > const & ina, TArray< r_4 > & outa)
+{
+ ckR4.CheckResize(ina, outa);
+ TVector< complex<r_4> > in(ina);
+ TVector< r_4 > out(outa);
+
  r_4 a,b;
  int i,j,k;
@@ -238,5 +263,5 @@
  }
 
- out.ReSize(nc);
+ // out.ReSize(nc);
  out(0) = in(0).real();
  if (nc%2 == 0) { // nc pair
@@ -267,6 +292,10 @@
 
 /* --Methode-- */
-void FFTMayerServer::FFTForward(TVector< r_8 > const & in, TVector< complex<r_8> > & out)
-{
+void FFTMayerServer::FFTForward(TArray< r_8 > const & ina, TArray< complex<r_8> > & outa)
+{
+ ckR8.CheckResize(ina, outa);
+ TVector< r_8 > in(ina);
+ TVector< complex<r_8> > out(outa);
+
  r_8 a,b;
  int i,j,k;
@@ -290,5 +319,5 @@
 
   
- out.ReSize(n/2+1);
+ // out.ReSize(n/2+1);
  out(0) = complex<r_8>(inout(0), 0.);
 
@@ -309,6 +338,10 @@
 
 /* --Methode-- */
-void FFTMayerServer::FFTBackward(TVector< complex<r_8> > const & in, TVector< r_8 > & out)
-{
+void FFTMayerServer::FFTBackward(TArray< complex<r_8> > const & ina, TArray< r_8 > & outa)
+{
+ ckR8.CheckResize(ina, outa);
+ TVector< r_8 > out(outa);
+ TVector< complex<r_8> > in(ina);
+
  r_8 a,b;
  int i,j,k;
@@ -322,5 +355,5 @@
  }
 
- out.ReSize(nc);
+ // out.ReSize(nc);
  out(0) = in(0).real();
  if (nc%2 == 0) { // nc pair
Index: trunk/SophyaLib/NTools/fftmserver.h
===================================================================
--- trunk/SophyaLib/NTools/fftmserver.h	(revision 1393)
+++ trunk/SophyaLib/NTools/fftmserver.h	(revision 1394)
@@ -18,19 +18,22 @@
 
   // Transforme unidimensionnel sur des doubles
-  virtual void FFTForward(TVector< complex<r_8> > const & in, TVector< complex<r_8> > & out);
-  virtual void FFTBackward(TVector< complex<r_8> > const & in, TVector< complex<r_8> > & out);
-  virtual void FFTForward(TVector< r_8 > const & in, TVector< complex<r_8> > & out);
-  virtual void FFTBackward(TVector< complex<r_8> > const & in, TVector< r_8 > & out);
+  virtual void FFTForward(TArray< complex<r_8> > const & in, TArray< complex<r_8> > & out);
+  virtual void FFTBackward(TArray< complex<r_8> > const & in, TArray< complex<r_8> > & out);
+  virtual void FFTForward(TArray< r_8 > const & in, TArray< complex<r_8> > & out);
+  virtual void FFTBackward(TArray< complex<r_8> > const & in, TArray< r_8 > & out);
 
 
   // Transforme unidimensionnel sur des float
-  virtual void FFTForward(TVector< complex<r_4> > const & in, TVector< complex<r_4> > & out);
-  virtual void FFTBackward(TVector< complex<r_4> > const & in, TVector< complex<r_4> > & out);
-  virtual void FFTForward(TVector< r_4 > const & in, TVector< complex<r_4> > & out);
-  virtual void FFTBackward(TVector< complex<r_4> > const & in, TVector< r_4 > & out);
+  virtual void FFTForward(TArray< complex<r_4> > const & in, TArray< complex<r_4> > & out);
+  virtual void FFTBackward(TArray< complex<r_4> > const & in, TArray< complex<r_4> > & out);
+  virtual void FFTForward(TArray< r_4 > const & in, TArray< complex<r_4> > & out);
+  virtual void FFTBackward(TArray< complex<r_4> > const & in, TArray< r_4 > & out);
 
 
 protected:
   virtual bool checkLength(int n);
+
+  FFTArrayChecker<r_4> ckR4;
+  FFTArrayChecker<r_8> ckR8;
 };
 
Index: trunk/SophyaLib/NTools/fftpserver.cc
===================================================================
--- trunk/SophyaLib/NTools/fftpserver.cc	(revision 1393)
+++ trunk/SophyaLib/NTools/fftpserver.cc	(revision 1394)
@@ -28,5 +28,5 @@
 FFTPackServer::FFTPackServer()
    : FFTServerInterface("FFTPackServer using extended FFTPack (C-version) package")
-  , ckR4(true, true) , ckR8(true, true)
+  , ckR4("FFTPackServer: ", true, true) , ckR8("FFTPackServer: ", true, true)
 {
 //the working array and its size for the different
@@ -72,9 +72,9 @@
 
 
-
 void FFTPackServer::FFTForward(TArray< complex<r_4> > const & in, TArray< complex<r_4> > & out)
 {
   ckR4.CheckResize(in, out);  
   out = in;
+  cout << out << endl;
   fftf(out.Size(), out.Data());
   if (getNormalize()) out *= (1./(r_4)(in.Size()));
@@ -93,5 +93,5 @@
   TArray< r_4 > inout(in, false);
   fftf(inout.Size(), inout.Data());
-  ckR4.ReShapetoCompl(inout, out);
+  ReShapetoCompl(inout, out);
   if (getNormalize()) out *= complex<r_4>((1./(r_4)(in.Size())), 0.);
 }
@@ -100,5 +100,5 @@
 {
   ckR4.CheckResize(in, out);    
-  ckR4.ReShapetoReal(in, out);
+  ReShapetoReal(in, out);
   fftb(out.Size(), out.Data());
 }
@@ -110,5 +110,5 @@
   TArray< r_8 > inout(in, false);
   fftf(inout.Size(), inout.Data());
-  ckR8.ReShapetoCompl(inout, out);
+  ReShapetoCompl(inout, out);
   if (getNormalize()) out *= complex<r_8>((1./(r_8)(in.Size())), 0.);
 }
@@ -117,9 +117,75 @@
 {
   ckR8.CheckResize(in, out);  
-  ckR8.ReShapetoReal(in, out);
-  fftb(out.Size(), out.Data());
-}
-
- 
+  ReShapetoReal(in, out);
+  fftb(out.Size(), out.Data());
+}
+
+
+template <class T>
+void FFTPack_ReShapetoReal(TArray< complex<T> > const & ina, TArray< T >  & outa)
+{
+  TVector< complex<T> > in(ina);
+  TVector< T > out(outa);
+  sa_size_t n = in.NElts();
+  T thr = FFTArrayChecker<T>::ZeroThreshold();
+  sa_size_t ncs = ( (in(n-1).imag() < -thr) || (in(n-1).imag() > thr) ) ?
+                    ncs = 2*n-1 : ncs = 2*n-2;
+
+  if (out.NElts() != ncs) 
+    throw SzMismatchError("FFTPack_ReShapetoReal() - Wrong output array size !");
+    //    cerr << "DEBUG-FFTPack_ReShapetoReal() ncs = " << ncs 
+    //	 << " out.NElts()= " << out.NElts() << endl;
+
+  sa_size_t k;
+
+  out(0) = in(0).real();
+  for(k=1;k<n-1;k++) {
+    out(2*k-1) = in(k).real();
+    out(2*k) = in(k).imag();
+  }
+  if (ncs == n*2-2)  out(ncs-1) = in(n-1).real();
+  else { out(ncs-2) = in(n-1).real();  out(ncs-1) = in(n-1).imag(); }
+
+  return;
+}
+
+template <class T>
+void FFTPack_ReShapetoCompl(TArray< T > const & ina, TArray< complex<T> > & outa)
+{
+  TVector< T > in(ina);
+  TVector< complex<T> > out(outa);
+  sa_size_t n = in.NElts();
+  sa_size_t ncs = n/2+1;
+  sa_size_t nc = (n%2 != 0) ? n/2+1 : n/2;
+  if (out.NElts() != ncs)
+    throw SzMismatchError("FFTPack_ReShapetoCompl() - Wrong output array size !");
+
+  out(0) = complex<T> (in(0),0.);
+  for(int k=1;k<nc;k++)
+    out(k) =  complex<r_4> (in(2*k-1), in(2*k));
+  if (n%2 == 0) out(ncs-1) = complex<T>(in(n-1), 0.);
+
+  return;
+}
+
+void FFTPackServer::ReShapetoReal(TArray< complex<r_8> > const & in, TArray< r_8 >  & out)
+{
+  FFTPack_ReShapetoReal<r_8>(in, out);
+}
+
+void FFTPackServer::ReShapetoCompl(TArray< r_8 > const & in, TArray< complex<r_8> > & out)
+{
+  FFTPack_ReShapetoCompl<r_8>(in, out);
+}
+
+void FFTPackServer::ReShapetoReal(TArray< complex<r_4> > const & in, TArray< r_4 >  & out)
+{
+  FFTPack_ReShapetoReal<r_4>(in, out);
+}
+
+void FFTPackServer::ReShapetoCompl(TArray< r_4 > const & in, TArray< complex<r_4> > & out)
+{
+  FFTPack_ReShapetoCompl<r_4>(in, out);
+}
 
 void FFTPackServer::checkint_rfft(int_4 l)
Index: trunk/SophyaLib/NTools/fftpserver.h
===================================================================
--- trunk/SophyaLib/NTools/fftpserver.h	(revision 1393)
+++ trunk/SophyaLib/NTools/fftpserver.h	(revision 1394)
@@ -33,4 +33,10 @@
   virtual void FFTForward(TArray< r_4 > const & in, TArray< complex<r_4> > & out);
   virtual void FFTBackward(TArray< complex<r_4> > const & in, TArray< r_4 > & out);
+
+// Methodes statiques pour reordonner les donnees
+  static void ReShapetoReal(TArray< complex<r_8> > const & in, TArray< r_8 >  & out);
+  static void ReShapetoCompl(TArray< r_8 > const & in, TArray< complex<r_8> > & out); 
+  static void ReShapetoReal(TArray< complex<r_4> > const & in, TArray< r_4 >  & out);
+  static void ReShapetoCompl(TArray< r_4 > const & in, TArray< complex<r_4> > & out); 
 
   //  Methodes propres a cette classe
Index: trunk/SophyaLib/NTools/fftservintf.cc
===================================================================
--- trunk/SophyaLib/NTools/fftservintf.cc	(revision 1393)
+++ trunk/SophyaLib/NTools/fftservintf.cc	(revision 1394)
@@ -77,6 +77,7 @@
 /* --Methode-- */
 template <class T>
-FFTArrayChecker<T>::FFTArrayChecker(bool checkpack, bool onedonly)
-{
+FFTArrayChecker<T>::FFTArrayChecker(string msg, bool checkpack, bool onedonly)
+{
+  _msg = msg + " FFTArrayChecker::";
   _checkpack = checkpack;
   _onedonly = onedonly;
@@ -89,4 +90,22 @@
 }
 
+template <class T>
+T FFTArrayChecker<T>::ZeroThreshold()
+{
+  return(0);
+}
+
+r_8 FFTArrayChecker< r_8 >::ZeroThreshold()
+{
+  return(1.e-18);
+}
+
+r_4 FFTArrayChecker< r_4 >::ZeroThreshold()
+{
+  return(1.e-9);
+}
+
+
+
 /* --Methode-- */
 template <class T>
@@ -94,20 +113,27 @@
 {
   int k;
-  if (in.Size() < 1) 
-    throw(SzMismatchError("FFTArrayChecker::CheckResize(complex in, complex out) - Unallocated input array !"));
+  string msg;
+  if (in.Size() < 1) {
+    msg = _msg + "CheckResize(complex in, complex out) - Unallocated input array !";
+    throw(SzMismatchError(msg));
+  }
   if (_checkpack) 
-    if ( !in.IsPacked() )
-      throw(SzMismatchError("FFTArrayChecker::CheckResize(complex in, complex out) - Not packed input array !"));
+    if ( !in.IsPacked() ) {
+      msg = _msg + "CheckResize(complex in, complex out) - Not packed input array !";
+      throw(SzMismatchError(msg));
+    }
   int ndg1 = 0;
   for(k=0; k<in.NbDimensions(); k++) 
     if (in.Size(k) > 1)  ndg1++;
   if (_onedonly) 
-    if (ndg1++ > 1)
-      throw(SzMismatchError("FFTArrayChecker::CheckResize(complex in, complex out) - Only 1-D array accepted !"));
-  
-  sa_size_t sz[BASEARRAY_MAXNDIMS];
-  for(k=0; k<in.NbDimensions(); k++) 
-    sz[k] = in.Size(k);
-  out.ReSize(in.NbDimensions(), sz);
+    if (ndg1 > 1) {
+      msg = _msg + "CheckResize(complex in, complex out) - Only 1-D array accepted !";
+      throw(SzMismatchError(msg));
+    }
+  out.ReSize(in);
+  //  sa_size_t sz[BASEARRAY_MAXNDIMS];
+  //  for(k=0; k<in.NbDimensions(); k++) 
+  //    sz[k] = in.Size(k);
+  //  out.ReSize(in.NbDimensions(), sz);
 
   return(ndg1);
@@ -119,19 +145,27 @@
 {
   int k;
-  if (in.Size() < 1) 
-    throw(SzMismatchError("FFTArrayChecker::CheckResize(real in, complex out) - Unallocated input array !"));
+  string msg;
+  if (in.Size() < 1) {
+    msg = _msg + "CheckResize(real in, complex out) - Unallocated input array !";
+    throw(SzMismatchError(msg));
+  }
   if (_checkpack) 
-    if ( !in.IsPacked() )
-      throw(SzMismatchError("FFTArrayChecker::CheckResize(real in, complex out) - Not packed input array !"));
+    if ( !in.IsPacked() ) {
+      msg = _msg + "CheckResize(real in, complex out) - Not packed input array !";
+      throw(SzMismatchError(msg));
+    }
   int ndg1 = 0;
   for(k=0; k<in.NbDimensions(); k++) 
     if (in.Size(k) > 1)  ndg1++;
   if (_onedonly) 
-    if (ndg1++ > 1)
-      throw(SzMismatchError("FFTArrayChecker::CheckResize(real in, complex out) - Only 1-D array accepted !"));
-  
+    if (ndg1 > 1) {
+      msg = _msg + "CheckResize(real in, complex out) - Only 1-D array accepted !";
+      throw(SzMismatchError(msg));
+    }
   sa_size_t sz[BASEARRAY_MAXNDIMS];
   for(k=0; k<in.NbDimensions(); k++) 
-    sz[k] = in.Size(k)/2+1;
+    sz[k] = in.Size(k)/2+1; 
+  //    sz[k] = (in.Size(k)%2 != 0) ? in.Size(k)/2+1 : in.Size(k)/2;
+
   out.ReSize(in.NbDimensions(), sz);
 
@@ -144,19 +178,36 @@
 {
   int k;
-  if (in.Size() < 1) 
-    throw(SzMismatchError("FFTArrayChecker::CheckResize(complex in, real out) - Unallocated input array !"));
+  string msg;
+  if (in.Size() < 1) {
+    msg = _msg + "CheckResize(complex in, real out) - Unallocated input array !";
+    throw(SzMismatchError(msg));
+  }
   if (_checkpack) 
-    if ( !in.IsPacked() )
-      throw(SzMismatchError("FFTArrayChecker::CheckResize(complex in, real out) - Not packed input array !"));
+    if ( !in.IsPacked() ) {
+      msg = _msg + "CheckResize(complex in, real out) - Not packed input array !";
+      throw(SzMismatchError(msg));
+    }
   int ndg1 = 0;
   for(k=0; k<in.NbDimensions(); k++) 
     if (in.Size(k) > 1)  ndg1++;
   if (_onedonly) 
-    if (ndg1++ > 1)
-      throw(SzMismatchError("FFTArrayChecker::CheckResize(complex in, real out) - Only 1-D array accepted !"));
-  
+    if (ndg1 > 1) {
+      msg = _msg + "CheckResize(complex in, real out) - Only 1-D array accepted !";
+      throw(SzMismatchError(msg));
+    }
   sa_size_t sz[BASEARRAY_MAXNDIMS];
-  for(k=0; k<in.NbDimensions(); k++) 
-    sz[k] = in.Size(k)*2-1;
+  if (ndg1 > 1) {
+    for(k=0; k<in.NbDimensions(); k++) 
+      sz[k] = in.Size(k)*2-1;
+  }
+  else {
+    for(k=0; k<BASEARRAY_MAXNDIMS; k++)  sz[k] = 1; 
+    T thr = ZeroThreshold();
+    sa_size_t n = in.Size(in.MaxSizeKA());
+    sa_size_t ncs = ( (in[n-1].imag() < -thr) || (in[n-1].imag() > thr) ) ?
+                    ncs = 2*n-1 : ncs = 2*n-2;
+    sz[in.MaxSizeKA()] = ncs;
+  }
+
   out.ReSize(in.NbDimensions(), sz);
 
@@ -165,5 +216,5 @@
 }
 
-/* --Methode-- */
+/* --Methode-- 
 template <class T>
 void FFTArrayChecker<T>::ReShapetoReal( TArray< complex<T> > const & in, TArray< T >  & out)
@@ -182,6 +233,7 @@
   out[ncs-2] = in[n-1].real();  out[ncs-1] = in[n-1].imag(); 
 }
-
-/* --Methode-- */
+*/
+
+/* --Methode-- 
 template <class T>
 void FFTArrayChecker<T>::ReShapetoCompl(TArray< T > const & in, TArray< complex<T> > & out)
@@ -195,5 +247,5 @@
   if (n%2 == 0) out[ncs-1] = complex<r_8>(in[n-1], 0.);
 }
-
+*/
 
 #ifdef __CXX_PRAGMA_TEMPLATES__
Index: trunk/SophyaLib/NTools/fftservintf.h
===================================================================
--- trunk/SophyaLib/NTools/fftservintf.h	(revision 1393)
+++ trunk/SophyaLib/NTools/fftservintf.h	(revision 1394)
@@ -31,17 +31,4 @@
   inline string getInfo() const { return _info; }
 
-  // Transforme unidimensionnel sur des doubles
-  virtual void FFTForward(TVector< complex<r_8> > const & in, TVector< complex<r_8> > & out);
-  virtual void FFTBackward(TVector< complex<r_8> > const & in, TVector< complex<r_8> > & out);
-  virtual void FFTForward(TVector< r_8 > const & in, TVector< complex<r_8> > & out);
-  virtual void FFTBackward(TVector< complex<r_8> > const & in, TVector< r_8 > & out);
-
-  // Transforme unidimensionnel sur des float
-  virtual void FFTForward(TVector< complex<r_4> > const & in, TVector< complex<r_4> > & out);
-  virtual void FFTBackward(TVector< complex<r_4> > const & in, TVector< complex<r_4> > & out);
-  virtual void FFTForward(TVector< r_4 > const & in, TVector< complex<r_4> > & out);
-  virtual void FFTBackward(TVector< complex<r_4> > const & in, TVector< r_4 > & out);
-
-
   //---------------------------------------------------
   // Transforme N-dim sur des doubles
@@ -67,13 +54,15 @@
 class FFTArrayChecker {
 public:
-		FFTArrayChecker(bool checkpack=true, bool onedonly=false);
+		FFTArrayChecker(string msg, bool checkpack=true, bool onedonly=false);
   virtual	~FFTArrayChecker();
+  static T	ZeroThreshold();
   virtual int	CheckResize(TArray< complex<T> > const & in, TArray< complex<T> > & out);
   virtual int	CheckResize(TArray< T > const & in, TArray< complex<T> > & out);
   virtual int	CheckResize(TArray< complex<T> > const & in, TArray< T > & out);
-  virtual void  ReShapetoReal(TArray< complex<T> > const & in, TArray< T >  & out);
-  virtual void  ReShapetoCompl(TArray< T > const & in, TArray< complex<T> > & out); 
+  //  virtual void  ReShapetoReal(TArray< complex<T> > const & in, TArray< T >  & out);
+  //  virtual void  ReShapetoCompl(TArray< T > const & in, TArray< complex<T> > & out); 
 
 protected:
+  string _msg;
   bool _checkpack;
   bool _onedonly;
