Changeset 1683 in Sophya for trunk/SophyaLib/Samba


Ignore:
Timestamp:
Oct 11, 2001, 5:22:03 PM (24 years ago)
Author:
lemeur
Message:

methode iterative pour analyse harmonique

Location:
trunk/SophyaLib/Samba
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/SophyaLib/Samba/alm.cc

    r1621 r1683  
    7878  return powsp;
    7979}
    80 
     80 
    8181#ifdef __CXX_PRAGMA_TEMPLATES__
    8282#pragma define_template Alm<r_8>
  • trunk/SophyaLib/Samba/alm.h

    r1371 r1683  
    3030TVector<T> powerSpectrum() const;
    3131
     32inline  Alm<T>& SetComplexT(complex<T> a)
     33   {
     34     this->SetT(a);
     35     return *this;
     36   }
     37 inline Alm<T>& operator = (complex<T> a)
     38 {
     39   return SetComplexT(a);
     40 }
    3241
    3342};
  • trunk/SophyaLib/Samba/lambdaBuilder.cc

    r1428 r1683  
    7171      cth_=cos(theta);
    7272      sth_=sin(theta);
     73      array_init(lmax, mmax);
     74    }
     75LambdaLMBuilder::LambdaLMBuilder(r_8 costet, r_8 sintet,int_4 lmax, int_4 mmax)
     76    {
     77      cth_=costet;
     78      sth_=sintet;
    7379      array_init(lmax, mmax);
    7480    }
  • trunk/SophyaLib/Samba/lambdaBuilder.h

    r1218 r1683  
    4141LambdaLMBuilder() {}
    4242LambdaLMBuilder(r_8 theta,int_4 lmax, int_4 mmax);
     43LambdaLMBuilder(r_8 ct, r_8 st,int_4 lmax, int_4 mmax);
    4344virtual ~LambdaLMBuilder() {};
    4445
    4546 /*! return the value of the coefficient \f$  \lambda_l^m \f$ */
    4647inline double lamlm(int l, int m) const { return lambda_(l,m); }
     48
     49inline double lamlm(int index) const { return lambda_(index); }
     50
     51
     52  //Return pointer to first element address of the alm's
     53//inline r_8* Data()  {return lambda_.Data();}
     54
    4755
    4856 private:
  • trunk/SophyaLib/Samba/sphericaltransformserver.cc

    r1624 r1683  
    77#include "nbrandom.h"
    88#include "nbmath.h"
     9#include "timing.h"
     10//#include "spherehealpix.h"
     11
    912
    1013/*! \class SOPHYA::SphericalTransformServer
     
    184187        throw IOExc(" unknown type of sphere: " + (string)sphere_type );
    185188      }
    186   cout << "GenerateFromAlm: the sphere is of type : " << sphere_type << endl;
    187   cout << "GenerateFromAlm: size index (nside) of the sphere= " << nsmax << endl;
    188   cout << "GenerateFromAlm: nlmax (from Alm) = " << nlmax << endl;
     189  //  cout << "GenerateFromAlm: the sphere is of type : " << sphere_type << endl;
     190  //  cout << "GenerateFromAlm: size index (nside) of the sphere= " << nsmax << endl;
     191  //  cout << "GenerateFromAlm: nlmax (from Alm) = " << nlmax << endl;
    189192  if (nlmax>3*nsmax-1)
    190193    {
    191       cout << "GenerateFromAlm: nlmax should be <= 3*nside-1" << endl;
     194      //     cout << "GenerateFromAlm: nlmax should be <= 3*nside-1" << endl;
    192195      if (strncmp(sphere_type,"TETAFI",6) == 0)
    193196        {
     197          cout << "GenerateFromAlm: nlmax should be <= 3*nside-1" << endl;
    194198          cout << " (for this criterium, nsmax is computed as sqrt(nbPixels/12))" << endl;
    195199        }
     
    221225      for (m = 0; m <= nmmax; m++)
    222226        {
    223           //  somme sur l de m a l'infini
    224227          b_m_theta(m) = (T)( lb.lamlm(m,m) ) * alm(m,m);
    225           //    if (ith==0 && m==0)
    226           //    {
    227           //      cout << " guy: lmm= " <<  lb.lamlm(m,m) << " alm " << alm(m,m) << "b00= " <<  b_m_theta(m) << endl;
    228           //    }
    229228          for (int l = m+1; l<= nlmax; l++)
    230229            {
    231230               b_m_theta(m) += (T)( lb.lamlm(l,m) ) * alm(l,m);
    232 
    233 
    234                //     if (ith==0 && m==0)
    235                //        {
    236                //          cout << " guy:l=" << l << " m= " << m << " lmm= " <<  lb.lamlm(l,m) << " alm " << alm(l,m) << "b00= " <<  b_m_theta(m) << endl;
    237 
    238                //        }
    239 
    240231            }
    241232        }
     
    245236      for (m=1;m<=nmmax;m++)
    246237        {
    247           //compiler doesn't have conj()
    248238          b_m_theta(-m) = conj(b_m_theta(m));
    249239        }
     
    251241      //    sum_m  b(m,theta)*exp(i*m*phi)   -> f(phi,theta)
    252242      // ---------------------------------------------------------------*/
    253       //    TVector<complex<T> > Temp = fourierSynthesisFromB(b_m_theta,nph,phi0);
    254           TVector<T> Temp = RfourierSynthesisFromB(b_m_theta,nph,phi0);
     243      TVector<T> Temp = RfourierSynthesisFromB(b_m_theta,nph,phi0);
    255244      for (int i=0;i< nph;i++)
    256245        {
    257           //      map(pixNumber(i))=Temp(i).real();
    258                           map(pixNumber(i))=Temp(i);
     246          map(pixNumber(i))=Temp(i);
    259247        }
    260248    }
     
    421409    }
    422410
    423   //sortie.ReSize(nph);
    424411  TVector<T> sortie;
    425412
     
    432419 /*! \fn  Alm<T> SOPHYA::SphericalTransformServer::DecomposeToAlm(const SphericalMap<T>& map, int_4 nlmax, r_8 cos_theta_cut) const
    433420
    434 \return the Alm coefficients from analysis of a temperature map.
     421\return the Alm coefficients from analysis of a temperature map. THE MAP CAN BE MODIFIED (if iterationOrder >0)
    435422
    436423    \param<nlmax> : maximum value of the l index
    437424
    438425     \param<cos_theta_cut> : cosinus of the symmetric cut EULER angle theta : cos_theta_cut=0 means no cut ; cos_theta_cut=1 all the sphere is cut.
     426
     427\param<iterationOrder> : 1,2,3,4.... order of an iterative analysis. (Default : 0 -> standard analysis)
    439428  */
    440429template<class T>
    441  Alm<T> SphericalTransformServer<T>::DecomposeToAlm(const SphericalMap<T>& map, int_4 nlmax, r_8 cos_theta_cut) const
     430void SphericalTransformServer<T>::DecomposeToAlm(SphericalMap<T>& map, Alm<T>& alm, int_4 nlmax, r_8 cos_theta_cut, int iterationOrder) const
     431{
     432  int_4  nmmax = nlmax;
     433  //  PrtTim("appel  carteVersAlm");
     434  carteVersAlm(map, nlmax, cos_theta_cut, alm);
     435  //  PrtTim("retour  carteVersAlm");
     436  if (iterationOrder > 0)
     437    {
     438      TVector<int_4> fact(iterationOrder+2);
     439      fact(0) = 1;
     440      for (int k=1; k <= iterationOrder+1; k++)
     441        {
     442          fact(k) = fact(k-1)*k;
     443        }
     444      Alm<T> alm2(alm);
     445      T Tzero = (T)0.;
     446      complex<T> complexZero = complex<T>(Tzero, Tzero);
     447      alm = complexZero;
     448      int signe = 1;
     449      int nbIteration = iterationOrder+1;
     450      for (int k=1; k <= nbIteration; k++)
     451        {
     452          T facMult = (T)(0.5*signe*fact(iterationOrder)*(2*nbIteration-k)/(fact(k)*fact(nbIteration-k)));
     453          for (int m = 0; m <= nmmax; m++)
     454            {
     455              for (int l = m; l<= nlmax; l++)
     456                {
     457                  alm(l,m) += facMult*alm2(l,m);
     458                }
     459            }
     460          if (k == nbIteration) break;
     461          signe = -signe;
     462          for (int k=0; k< map.NbPixels(); k++) map(k) = (T)0.;
     463          //        synthetize a map from the estimated alm
     464          //      PrtTim("appel  GenerateFromAlm");
     465          GenerateFromAlm( map, map.SizeIndex(), alm2);
     466          //      PrtTim("retour  GenerateFromAlm");
     467          alm2 = complexZero;
     468          //        analyse the new map
     469          //      PrtTim("appel  carteVersAlm");
     470          carteVersAlm(map, nlmax, cos_theta_cut, alm2);
     471          //      PrtTim("retour  carteVersAlm");
     472        }
     473    }
     474}
     475
     476template<class T>
     477 void SphericalTransformServer<T>::carteVersAlm(const SphericalMap<T>& map, int_4 nlmax, r_8 cos_theta_cut, Alm<T>& alm) const
    442478{
    443479 
     
    450486  int_4  nmmax = nlmax;
    451487  TVector< complex<T> > phase(nmmax+1);
    452   Alm<T> alm;
     488 
    453489  alm.ReSizeToLmax(nlmax);
    454490  for (int_4 ith = 0; ith < map.NbThetaSlices(); ith++)
     
    456492      r_8 phi0;
    457493      r_8 theta;
     494      //  PrtTim("debut 1ere tranche ");
    458495      map.GetThetaSlice(ith,theta,phi0,pixNumber ,data);
    459       for (int i=0;i< nmmax+1;i++)
    460         {
    461           phase(i)=0;
    462         }
     496      phase = complex<T>((T)0.,(T)0.);
    463497      double cth = cos(theta);
    464498     
    465499      //part of the sky out of the symetric cut
    466500      bool keep_it = (fabs(cth) >= cos_theta_cut);
     501
     502      //    PrtTim("fin 1ere tranche ");
     503 
     504      if (keep_it)
     505        {
     506          //      phase = CFromFourierAnalysis(nmmax,data,phi0);
     507          //      PrtTim("avant Fourier ");
     508          CFromFourierAnalysis(nmmax,data,phase, phi0);
     509          //      PrtTim("apres Fourier ");
     510
     511        }
    467512     
    468       if (keep_it)
    469         {
    470           // tableau datain a supprimer
    471           //  TVector<complex<T> > datain(pixNumber.NElts());
    472           // for(int kk=0; kk<nph; kk++) datain(kk)=complex<T>(data(kk),(T)0.);
    473 
    474           //  phase = CFromFourierAnalysis(nmmax,datain,phi0);
    475           phase = CFromFourierAnalysis(nmmax,data,phi0);
    476 
     513//      ---------------------------------------------------------------------
     514//      computes the a_lm by integrating over theta
     515//      lambda_lm(theta) * phas_m(theta)
     516//      for each m and l
     517//      -----------------------------------------------------------------------
     518      //        PrtTim("avant instanciation LM ");
     519      LambdaLMBuilder lb(theta,nlmax,nmmax);
     520      //        PrtTim("apres instanciation LM ");
     521      r_8 domega=map.PixSolAngle(map.PixIndexSph(theta,phi0));
     522
     523      //   PrtTim("avant mise a jour Alm ");
     524      complex<T> fi;
     525      T facteur;
     526      int index;
     527      for (int m = 0; m <= nmmax; m++)
     528        {
     529          fi = phase(m);
     530          for (int l = m; l<= nlmax; l++)
     531            {
     532                 index = alm.indexOfElement(l,m);
     533                 //  facteur = (T)(lb.lamlm(l,m) * domega);
     534                    facteur = (T)(lb.lamlm(index) * domega);
     535                  // alm(l,m) += facteur * fi ;
     536                      alm(index) += facteur * fi ;
     537            }
    477538        }
    478539     
    479       /*-----------------------------------------------------------------------
    480         computes the a_lm by integrating over theta
    481         lambda_lm(theta) * phas_m(theta)
    482         for each m and l
    483         -----------------------------------------------------------------------*/
    484       //      LambdaBuilder lb(theta,nlmax,nmmax);
    485       LambdaLMBuilder lb(theta,nlmax,nmmax);
    486       r_8 domega=map.PixSolAngle(map.PixIndexSph(theta,phi0));
    487       for (int m = 0; m <= nmmax; m++)
    488         {
    489           alm(m,m) += (T)lb.lamlm(m,m) * phase(m) * (T)domega; //m,m even
    490           for (int l = m+1; l<= nlmax; l++)
    491             {
    492               alm(l,m) += (T)lb.lamlm(l,m) * phase(m)*(T)domega;
    493             }
    494         }
    495     }
    496   return alm;
     540
     541     
     542      //
     543      //
     544      //       PrtTim("apres mise a jour Alm ");
     545    }
    497546}
    498547  /*! \fn TVector< complex<T> > SOPHYA::SphericalTransformServer::CFromFourierAnalysis(int_4 nmmax, const TVector<complex<T> >datain, r_8 phi0) const
     
    518567  fftIntfPtr_-> FFTForward(datain, transformedData);
    519568
    520   //dataout.ReSize(nmmax+1);
    521569  TVector< complex<T> > dataout(nmmax+1);
    522570
    523571  int im_max=min(nph,nmmax+1);
    524572  int i;
    525   for (i=0;i< dataout.NElts();i++) dataout(i)=complex<T>((T)0.,(T)0.);
     573  dataout = complex<T>((T)0.,(T)0.);
     574  //  for (i=0;i< dataout.NElts();i++) dataout(i)=complex<T>((T)0.,(T)0.);
    526575  for (i=0;i<im_max;i++) dataout(i)=transformedData(i);
    527576
    528577
    529   //  for (int i = 0;i <im_max;i++){
    530   //    dataout(i)*= (complex<T>)(complex<double>(cos(-i*phi0),sin(-i*phi0)));
    531   //  }
    532578  for (int kk=nph; kk<dataout.NElts(); kk++) dataout(kk)=dataout(kk%nph);
    533579  for (i = 0;i <dataout.NElts();i++){
     
    542588same as previous one, but with a "datain" which is real (not complex) */
    543589template<class T>
    544 TVector< complex<T> > SphericalTransformServer<T>::CFromFourierAnalysis(int_4 nmmax, const TVector<T> datain, r_8 phi0) const
     590void SphericalTransformServer<T>::CFromFourierAnalysis(int_4 nmmax, const TVector<T> datain, TVector< complex<T> >& dataout, r_8 phi0) const
    545591{
    546592  //=======================================================================
     
    559605      throw PException("bizarre : vecteur datain de longueur nulle (CFromFourierAnalysis)");
    560606    }
     607  if (nph%2 != 0 )
     608    {
     609      throw PException("SphericalTransformServer<T>::CFromFourierAnalysis : longueur de datain impair ?");
     610    }
    561611  TVector<complex<T> > transformedData;
    562     // a remodifier
    563   //FFTPackServer ffts;
    564   //ffts.setNormalize(false);
    565   //ffts.FFTForward(datain, transformedData);
    566 
     612
     613  // la taille du vecteur complexe retourne est nph/2+1 (si la taille
     614  // du vecteur reel entre est nph)
    567615  fftIntfPtr_-> FFTForward(datain, transformedData);
    568     //
    569 
    570   //dataout.ReSize(nmmax+1);
    571   TVector< complex<T> > dataout(nmmax+1);
     616
     617  //  TVector< complex<T> > dataout(nmmax+1);
     618  dataout.ReSize(nmmax+1);
    572619
    573620  // on transfere le resultat de la fft dans dataout.
    574   // on s'assure que ca ne depasse pas la taille de dataout
    575   int sizeOfTransformToGet = min(transformedData.NElts(),nmmax+1);
    576   //  int im_max=min(transformedData.NElts()-1,nmmax);
     621
     622  int maxFreqAccessiblesParFFT = min(nph/2,nmmax);
    577623  int i;
    578   for (i=0;i<sizeOfTransformToGet;i++) dataout(i)=transformedData(i);
    579 
    580 
    581   // si dataout n'est pas plein, on complete jusqu'a  nph valeurs (a moins
     624  for (i=0;i<=maxFreqAccessiblesParFFT;i++) dataout(i)=transformedData(i);
     625
     626
     627  // si dataout n'est pas plein, on complete jusqu'a  nph+1 valeurs (a moins
    582628  // que dataout ne soit plein avant d'atteindre nph)
    583   if (sizeOfTransformToGet == (transformedData.NElts()))
    584     {
    585       for (i=transformedData.NElts(); i<min(nph,dataout.NElts()); i++)
    586         {
    587 
    588           //      dataout(i) = conj(dataout(2*sizeOfTransformToGet-i-2) );
     629  if (maxFreqAccessiblesParFFT != nmmax )
     630    {
     631      int maxMfft = min(nph,nmmax);
     632      for (i=maxFreqAccessiblesParFFT+1; i<=maxMfft; i++)
     633        {
    589634          dataout(i) = conj(dataout(nph-i) );
    590635        }
    591636      // on conplete, si necessaire, par periodicite
    592       for (int kk=nph; kk<dataout.NElts(); kk++)
    593         {
    594           dataout(kk)=dataout(kk%nph);
    595         }
    596     }
    597   for (i = 0;i <dataout.NElts();i++){
    598     dataout(i)*= (complex<T>)(complex<double>(cos(-i*phi0),sin(-i*phi0)));
    599   }
    600   return dataout;
     637      if ( maxMfft != nmmax )
     638        {
     639          for (int kk=nph+1; kk <= nmmax; kk++)
     640            {
     641              dataout(kk)=dataout(kk%nph);
     642            }
     643        }
     644    }
     645  for (i = 0;i <dataout.NElts();i++)
     646    {
     647      dataout(i)*= (complex<T>)(complex<double>(cos(-i*phi0),sin(-i*phi0)));
     648    }
     649  //  return dataout;
    601650}
    602651
     
    701750 */
    702751template<class T>
    703 void SphericalTransformServer<T>::DecomposeToAlm(const SphericalMap<T>& mapq,
     752void SphericalTransformServer<T>::DecomposeToAlm(SphericalMap<T>& mapq,
     753                                              SphericalMap<T>& mapu,
     754                                              Alm<T>& alme,
     755                                              Alm<T>& almb,
     756                                              int_4 nlmax,
     757                                              r_8 cos_theta_cut,
     758                                              int iterationOrder) const
     759{
     760  int_4  nmmax = nlmax;
     761  carteVersAlm(mapq, mapu, alme, almb, nlmax, cos_theta_cut);
     762  if (iterationOrder > 0)
     763    {
     764      TVector<int_4> fact(iterationOrder+2);
     765      fact(0) = 1;
     766      for (int k=1; k <= iterationOrder+1; k++)
     767        {
     768          fact(k) = fact(k-1)*k;
     769        }
     770      Alm<T> alme2(alme);
     771      Alm<T> almb2(almb);
     772      T Tzero = (T)0.;
     773      complex<T> complexZero = complex<T>(Tzero, Tzero);
     774      alme = complexZero;
     775      almb = complexZero;
     776      int signe = 1;
     777      int nbIteration = iterationOrder+1;
     778      for (int k=1; k <= nbIteration; k++)
     779        {
     780          T facMult = (T)(0.5*signe*fact(iterationOrder)*(2*nbIteration-k)/(fact(k)*fact(nbIteration-k)));
     781          for (int m = 0; m <= nmmax; m++)
     782            {
     783              for (int l = m; l<= nlmax; l++)
     784                {
     785                  alme(l,m) += facMult*alme2(l,m);
     786                  almb(l,m) += facMult*almb2(l,m);
     787                }
     788            }
     789          if (k == nbIteration) break;
     790          signe = -signe;
     791          for (int k=0; k< mapq.NbPixels(); k++)
     792            {
     793              mapq(k) = (T)0.;
     794              mapu(k) = (T)0.;
     795            }
     796          //        synthetize a map from the estimated alm
     797          GenerateFromAlm(mapq,mapu,mapq.SizeIndex(),alme2,almb2);
     798          alme2 = complexZero;
     799          almb2 = complexZero;
     800          //        analyse the new map
     801          carteVersAlm(mapq, mapu, alme2, almb2, nlmax, cos_theta_cut);
     802        }
     803    }
     804}
     805
     806template<class T>
     807void SphericalTransformServer<T>::carteVersAlm(const SphericalMap<T>& mapq,
    704808                                              const SphericalMap<T>& mapu,
    705809                                              Alm<T>& alme,
     
    797901  //  for(int kk=0; kk<nph; kk++) datain(kk)=complex<T>(dataq(kk),0.);
    798902
    799   // phaseq = CFromFourierAnalysis(nmmax,datain,phi0);
    800   phaseq = CFromFourierAnalysis(nmmax,dataq,phi0);
    801 
    802   // for(int kk=0; kk<nph; kk++) datain(kk)=complex<T>(datau(kk),0.);
    803 
    804   // phaseu=  CFromFourierAnalysis(nlmax,nmmax,datain,phi0);
    805   phaseu=  CFromFourierAnalysis(nmmax,datau,phi0);
     903  //  phaseq = CFromFourierAnalysis(nmmax,dataq,phi0);
     904  CFromFourierAnalysis(nmmax,dataq,phaseq, phi0);
     905
     906  //  phaseu=  CFromFourierAnalysis(nmmax,datau,phi0);
     907  CFromFourierAnalysis(nmmax,datau,phaseu, phi0);
    806908
    807909  LambdaWXBuilder lwxb(theta,nlmax,nmmax);
     
    11411243/*! \fn TVector<T>  SOPHYA::SphericalTransformServer::DecomposeToCl(const SphericalMap<T>& sph, int_4 nlmax, r_8 cos_theta_cut) const
    11421244
    1143 \return power spectrum from analysis of a temperature map.
     1245\return power spectrum from analysis of a temperature map. THE MAP CAN BE MODIFIED (if iterationOrder >0)
    11441246
    11451247     \param<nlmax> : maximum value of the l index
    11461248
    11471249     \param<cos_theta_cut> : cosinus of the symmetric cut EULER angle theta : cos_theta_cut=0 means no cut ; cos_theta_cut=1 all the sphere is cut.
     1250
     1251\param<iterationOrder> : 1,2,3,4.... order of an iterative analysis. (Default : 0 -> standard analysis)
     1252
    11481253  */
    11491254template <class T>
    1150 TVector<T>  SphericalTransformServer<T>::DecomposeToCl(const SphericalMap<T>& sph, int_4 nlmax, r_8 cos_theta_cut) const
    1151 {
    1152     Alm<T> alm=DecomposeToAlm( sph, nlmax, cos_theta_cut);
     1255TVector<T>  SphericalTransformServer<T>::DecomposeToCl(SphericalMap<T>& sph, int_4 nlmax, r_8 cos_theta_cut, int iterationOrder) const
     1256{
     1257  Alm<T> alm;
     1258  DecomposeToAlm( sph, alm, nlmax, cos_theta_cut, iterationOrder);
     1259    //    cout << " SphericalTransformServer : impression alm " << endl;
     1260    //     alm.Print();
    11531261  // power spectrum
    11541262     return  alm.powerSpectrum();
  • trunk/SophyaLib/Samba/sphericaltransformserver.h

    r1218 r1683  
    4646
    4747
    48   Alm<T> DecomposeToAlm(const SphericalMap<T>& map, int_4 nlmax, r_8 cos_theta_cut) const;
     48void DecomposeToAlm(SphericalMap<T>& map, Alm<T>& alm, int_4 nlmax, r_8 cos_theta_cut, int iterationOrder = 0) const;
    4949
    50   void DecomposeToAlm(const SphericalMap<T>& mapq, const SphericalMap<T>& mapu,
    51                      Alm<T>& a2lme, Alm<T>& a2lmb,
    52                      int_4 nlmax, r_8 cos_theta_cut) const;
     50void DecomposeToAlm(SphericalMap<T>& mapq,
     51                    SphericalMap<T>& mapu,
     52                    Alm<T>& alme,
     53                    Alm<T>& almb,
     54                    int_4 nlmax,
     55                    r_8 cos_theta_cut,
     56                    int iterationOrder = 0) const;
    5357
    54   TVector<T>  DecomposeToCl(const SphericalMap<T>& sph, 
    55                            int_4 nlmax, r_8 cos_theta_cut) const;
     58TVector<T>  DecomposeToCl(SphericalMap<T>& sph, 
     59                           int_4 nlmax, r_8 cos_theta_cut, int iterationOrder = 0) const;
    5660
    5761
    5862 private:
    59   TVector< complex<T> >  fourierSynthesisFromB(const Bm<complex<T> >& b_m, 
     63
     64void carteVersAlm(const SphericalMap<T>& map, int_4 nlmax, r_8 cos_theta_cut, Alm<T>& alm) const;
     65
     66void carteVersAlm(const SphericalMap<T>& mapq,
     67                  const SphericalMap<T>& mapu,
     68                  Alm<T>& alme,
     69                  Alm<T>& almb,
     70                  int_4 nlmax,
     71                  r_8 cos_theta_cut) const;
     72
     73
     74TVector< complex<T> >  fourierSynthesisFromB(const Bm<complex<T> >& b_m, 
    6075                                  int_4 nph, r_8 phi0) const;
    61   TVector<T>  RfourierSynthesisFromB(const Bm<complex<T> >& b_m, 
     76TVector<T>  RfourierSynthesisFromB(const Bm<complex<T> >& b_m, 
    6277                                  int_4 nph, r_8 phi0) const;
    63 
    64   TVector< complex<T> > CFromFourierAnalysis(int_4 mmax,
     78TVector< complex<T> > CFromFourierAnalysis(int_4 mmax,
    6579                                  const TVector<complex<T> > datain,
    6680                                  r_8 phi0) const;
    67   TVector< complex<T> > CFromFourierAnalysis(int_4 mmax,
    68                          const TVector<T> datain, 
    69                                   r_8 phi0) const;
     81  //  TVector< complex<T> > CFromFourierAnalysis(int_4 mmax,
     82  //                     const TVector<T> datain, 
     83  //                              r_8 phi0) const;
     84  void CFromFourierAnalysis(int_4 mmax, const TVector<T> datain,
     85                            TVector< complex<T> >& dataout,
     86                            r_8 phi0) const;
    7087
    7188  void almFromWX(int_4 nlmax, int_4 nmmax, r_8 phi0,
     
    90107
    91108 FFTServerInterface* fftIntfPtr_;
     109
    92110};
    93111} // Fin du namespace
Note: See TracChangeset for help on using the changeset viewer.