Ignore:
Timestamp:
Oct 3, 2000, 2:14:14 PM (25 years ago)
Author:
ansari
Message:

doc dans .cc

File:
1 edited

Legend:

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

    r833 r1218  
    88#include "nbmath.h"
    99
    10 
     10/*! \class SOPHYA::SphericalTransformServer
     11
     12 Class for performing analysis and synthesis of sky maps using spin-0 or spin-2 spherical harmonics.
     13
     14Maps must be SOPHYA SphericalMaps (SphereGorski or SphereThetaPhi).
     15
     16Temperature and polarization (Stokes parameters) can be developped on spherical harmonics :
     17\f[
     18\frac{\Delta T}{T}(\hat{n})=\sum_{lm}a_{lm}^TY_l^m(\hat{n})
     19\f]
     20\f[
     21Q(\hat{n})=\frac{1}{\sqrt{2}}\sum_{lm}N_l\left(a_{lm}^EW_{lm}(\hat{n})+a_{lm}^BX_{lm}(\hat{n})\right)
     22\f]
     23\f[
     24U(\hat{n})=-\frac{1}{\sqrt{2}}\sum_{lm}N_l\left(a_{lm}^EX_{lm}(\hat{n})-a_{lm}^BW_{lm}(\hat{n})\right)
     25\f]
     26\f[
     27\left(Q \pm iU\right)(\hat{n})=\sum_{lm}a_{\pm 2lm}\, _{\pm 2}Y_l^m(\hat{n})
     28\f]
     29
     30\f[
     31Y_l^m(\hat{n})=\lambda_l^m(\theta)e^{im\phi}
     32\f]
     33\f[
     34_{\pm}Y_l^m(\hat{n})=_{\pm}\lambda_l^m(\theta)e^{im\phi}
     35\f]
     36\f[
     37W_{lm}(\hat{n})=\frac{1}{N_l}\,_{w}\lambda_l^m(\theta)e^{im\phi}
     38\f]
     39\f[
     40X_{lm}(\hat{n})=\frac{-i}{N_l}\,_{x}\lambda_l^m(\theta)e^{im\phi}
     41\f]
     42
     43(see LambdaLMBuilder, LambdaPMBuilder, LambdaWXBuilder classes)
     44
     45power spectra :
     46
     47\f[
     48C_l^T=\frac{1}{2l+1}\sum_{m=0}^{+ \infty }\left|a_{lm}^T\right|^2=\langle\left|a_{lm}^T\right|^2\rangle
     49\f]
     50\f[
     51C_l^E=\frac{1}{2l+1}\sum_{m=0}^{+\infty}\left|a_{lm}^E\right|^2=\langle\left|a_{lm}^E\right|^2\rangle
     52\f]
     53\f[
     54C_l^B=\frac{1}{2l+1}\sum_{m=0}^{+\infty}\left|a_{lm}^B\right|^2=\langle\left|a_{lm}^B\right|^2\rangle
     55\f]
     56
     57\arg
     58\b Synthesis : Get temperature and polarization maps  from \f$a_{lm}\f$ coefficients or from power spectra, (methods GenerateFrom...).
     59
     60\b Temperature:
     61\f[
     62\frac{\Delta T}{T}(\hat{n})=\sum_{lm}a_{lm}^TY_l^m(\hat{n}) = \sum_{-\infty}^{+\infty}b_m(\theta)e^{im\phi}
     63\f]
     64
     65with
     66\f[
     67b_m(\theta)=\sum_{l=\left|m\right|}^{+\infty}a_{lm}^T\lambda_l^m(\theta)
     68\f]
     69
     70\b Polarisation
     71\f[
     72Q \pm iU = \sum_{-\infty}^{+\infty}b_m^{\pm}(\theta)e^{im\phi}
     73\f]
     74
     75where :
     76\f[
     77b_m^{\pm}(\theta) = \sum_{l=\left|m\right|}^{+\infty}a_{\pm 2lm}\,_{\pm}\lambda_l^m(\theta)
     78\f]
     79
     80or :
     81\f[
     82Q  = \sum_{-\infty}^{+\infty}b_m^{Q}(\theta)e^{im\phi}
     83\f]
     84\f[
     85U  = \sum_{-\infty}^{+\infty}b_m^{U}(\theta)e^{im\phi}
     86\f]
     87
     88where:
     89\f[
     90b_m^{Q}(\theta) = \frac{1}{\sqrt{2}}\sum_{l=\left|m\right|}^{+\infty}\left(a_{lm}^E\,_{w}\lambda_l^m(\theta)-ia_{lm}^B\,_{x}\lambda_l^m(\theta)\right)
     91\f]
     92\f[
     93b_m^{U}(\theta) = \frac{1}{\sqrt{2}}\sum_{l=\left|m\right|}^{+\infty}\left(ia_{lm}^E\,_{x}\lambda_l^m(\theta)+a_{lm}^B\,_{w}\lambda_l^m(\theta)\right)
     94\f]
     95
     96Since the pixelization provides "slices" with constant \f$\theta\f$ and \f$\phi\f$ equally distributed  on \f$2\pi\f$  \f$\frac{\Delta T}{T}\f$, \f$Q\f$,\f$U\f$  can be computed by FFT.
     97
     98
     99\arg
     100\b Analysis :  Get \f$a_{lm}\f$ coefficients or  power spectra from temperature and polarization maps   (methods DecomposeTo...).
     101
     102\b Temperature:
     103\f[
     104a_{lm}^T=\int\frac{\Delta T}{T}(\hat{n})Y_l^{m*}(\hat{n})d\hat{n}
     105\f]
     106
     107approximated as :
     108\f[
     109a_{lm}^T=\sum_{\theta_k}\omega_kC_m(\theta_k)\lambda_l^m(\theta_k)
     110\f]
     111where :
     112\f[
     113C_m (\theta _k)=\sum_{\phi _{k\prime}}\frac{\Delta T}{T}(\theta _k,\phi_{k\prime})e^{-im\phi _{k\prime}}
     114\f]
     115Since the pixelization provides "slices" with constant \f$\theta\f$ and \f$\phi\f$ equally distributed  on \f$2\pi\f$ (\f$\omega_k\f$ is the solid angle of each pixel of the slice \f$\theta_k\f$) \f$C_m\f$ can be computed by FFT.
     116
     117\b polarisation:
     118
     119\f[
     120a_{\pm 2lm}=\sum_{\theta_k}\omega_kC_m^{\pm}(\theta_k)\,_{\pm}\lambda_l^m(\theta_k)
     121\f]
     122where :
     123\f[
     124C_m^{\pm} (\theta _k)=\sum_{\phi _{k\prime}}\left(Q \pm iU\right)(\theta _k,\phi_{k\prime})e^{-im\phi _{k\prime}}
     125\f]
     126or :
     127
     128\f[
     129a_{lm}^E=\frac{1}{\sqrt{2}}\sum_{\theta_k}\omega_k\left(C_m^{Q}(\theta_k)\,_{w}\lambda_l^m(\theta_k)-iC_m^{U}(\theta_k)\,_{x}\lambda_l^m(\theta_k)\right)
     130\f]
     131\f[
     132a_{lm}^B=\frac{1}{\sqrt{2}}\sum_{\theta_k}\omega_k\left(iC_m^{Q}(\theta_k)\,_{x}\lambda_l^m(\theta_k)+C_m^{U}(\theta_k)\,_{w}\lambda_l^m(\theta_k)\right)
     133\f]
     134
     135where :
     136\f[
     137C_m^{Q} (\theta _k)=\sum_{\phi _{k\prime}}Q(\theta _k,\phi_{k\prime})e^{-im\phi _{k\prime}}
     138\f]
     139\f[
     140C_m^{U} (\theta _k)=\sum_{\phi _{k\prime}}U(\theta _k,\phi_{k\prime})e^{-im\phi _{k\prime}}
     141\f]
     142
     143 */
     144
     145 /*! \fn void SOPHYA::SphericalTransformServer::GenerateFromAlm( SphericalMap<T>& map, int_4 pixelSizeIndex, const Alm<T>& alm) const
     146
     147 synthesis of a temperature  map from  Alm coefficients
     148*/
    11149template<class T>
    12150void SphericalTransformServer<T>::GenerateFromAlm( SphericalMap<T>& map, int_4 pixelSizeIndex, const Alm<T>& alm) const
     
    125263
    126264
     265  /*! \fn TVector< complex<T> >  SOPHYA::SphericalTransformServer::fourierSynthesisFromB(const Bm<complex<T> >& b_m,  int_4 nph, r_8 phi0) const
     266
     267\return a vector with nph elements  which are  sums :\f$\sum_{m=-mmax}^{mmax}b_m(\theta)e^{im\varphi}\f$ for nph values of \f$\varphi\f$ regularly distributed in \f$[0,\pi]\f$ ( calculated by FFT)
     268
     269  The object b_m (\f$b_m\f$) of the class Bm is a special vector which index goes from -mmax to mmax.
     270  */
    127271template<class T>
    128272TVector< complex<T> >  SphericalTransformServer<T>::fourierSynthesisFromB(const Bm<complex<T> >& b_m,  int_4 nph, r_8 phi0) const
     
    205349
    206350//********************************************
     351/*! \fn TVector<T>  SOPHYA::SphericalTransformServer::RfourierSynthesisFromB(const Bm<complex<T> >& b_m,  int_4 nph, r_8 phi0) const
     352
     353same as fourierSynthesisFromB, but return a real vector, taking into account the fact that b(-m) is conjugate of b(m) */
    207354template<class T>
    208355TVector<T>  SphericalTransformServer<T>::RfourierSynthesisFromB(const Bm<complex<T> >& b_m,  int_4 nph, r_8 phi0) const
     
    285432//*******************************************
    286433
     434 /*! \fn  Alm<T> SOPHYA::SphericalTransformServer::DecomposeToAlm(const SphericalMap<T>& map, int_4 nlmax, r_8 cos_theta_cut) const
     435
     436\return the Alm coefficients from analysis of a temperature map.
     437
     438    \param<nlmax> : maximum value of the l index
     439
     440     \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.
     441  */
    287442template<class T>
    288443 Alm<T> SphericalTransformServer<T>::DecomposeToAlm(const SphericalMap<T>& map, int_4 nlmax, r_8 cos_theta_cut) const
     
    346501  return alm;
    347502}
     503  /*! \fn TVector< complex<T> > SOPHYA::SphericalTransformServer::CFromFourierAnalysis(int_4 nmmax, const TVector<complex<T> >datain, r_8 phi0) const
     504
     505\return a vector with mmax elements  which are  sums :
     506\f$\sum_{k=0}^{nphi}datain(\theta,\varphi_k)e^{im\varphi_k}\f$ for (mmax+1) values of \f$m\f$ from 0 to mmax.
     507   */
    348508template<class T>
    349509TVector< complex<T> > SphericalTransformServer<T>::CFromFourierAnalysis(int_4 nmmax, const TVector<complex<T> >datain, r_8 phi0) const
     
    384544
    385545//&&&&&&&&& nouvelle version
     546/* \fn TVector< complex<T> > SOPHYA::SphericalTransformServer::CFromFourierAnalysis(int_4 nmmax, const TVector<T> datain, r_8 phi0) const
     547
     548same as previous one, but with a "datain" which is real (not complex) */
    386549template<class T>
    387550TVector< complex<T> > SphericalTransformServer<T>::CFromFourierAnalysis(int_4 nmmax, const TVector<T> datain, r_8 phi0) const
     
    445608}
    446609
     610 /*! \fn void SOPHYA::SphericalTransformServer::GenerateFromAlm(SphericalMap<T>& mapq,
     611                                               SphericalMap<T>& mapu,
     612                                               int_4 pixelSizeIndex,
     613                                               const Alm<T>& alme,
     614                                               const Alm<T>& almb) const
     615
     616synthesis of a polarization map from  Alm coefficients. The spheres mapq and mapu contain respectively the Stokes parameters. */
    447617template<class T>
    448618void SphericalTransformServer<T>::GenerateFromAlm(SphericalMap<T>& mapq,
     
    521691
    522692
     693 /*! \fn void SOPHYA::SphericalTransformServer::DecomposeToAlm(const SphericalMap<T>& mapq,
     694                                              const SphericalMap<T>& mapu,
     695                                              Alm<T>& alme,
     696                                              Alm<T>& almb,
     697                                              int_4 nlmax,
     698                                              r_8 cos_theta_cut) const
     699
     700analysis of a polarization map into Alm coefficients.
     701
     702 The spheres \c mapq and \c mapu contain respectively the Stokes parameters.
     703
     704 \c a2lme and \c a2lmb will receive respectively electric and magnetic Alm's
     705    nlmax : maximum value of the l index
     706
     707 \c 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.
     708 */
    523709template<class T>
    524710void SphericalTransformServer<T>::DecomposeToAlm(const SphericalMap<T>& mapq,
     
    578764
    579765
     766 /*! \fn void SOPHYA::SphericalTransformServer::almFromWX(int_4 nlmax, int_4 nmmax,
     767                                         r_8 phi0, r_8 domega,
     768                                         r_8 theta,
     769                                         const TVector<T>& dataq,
     770                                         const TVector<T>& datau,
     771                                         Alm<T>& alme,
     772                                         Alm<T>& almb) const
     773
     774Compute polarized Alm's as :
     775\f[
     776a_{lm}^E=\frac{1}{\sqrt{2}}\sum_{slices}{\omega_{pix}\left(\,_{w}\lambda_l^m\tilde{Q}-i\,_{x}\lambda_l^m\tilde{U}\right)}
     777\f]
     778\f[
     779a_{lm}^B=\frac{1}{\sqrt{2}}\sum_{slices}{\omega_{pix}\left(i\,_{x}\lambda_l^m\tilde{Q}+\,_{w}\lambda_l^m\tilde{U}\right)}
     780\f]
     781
     782where \f$\tilde{Q}\f$ and \f$\tilde{U}\f$ are C-coefficients computed by FFT (method CFromFourierAnalysis, called by present method) from the Stokes parameters.
     783
     784\f$\omega_{pix}\f$ are solid angle of each pixel.
     785
     786dataq, datau : Stokes parameters.
     787
     788  */
    580789template<class T>
    581790void SphericalTransformServer<T>::almFromWX(int_4 nlmax, int_4 nmmax,
     
    628837
    629838
    630 template<class T>
    631 void SphericalTransformServer<T>::almFromPM(int_4 nph, int_4 nlmax, int_4 nmmax,
     839 /*! \fn void SOPHYA::SphericalTransformServer::almFromPM(int_4 nph, int_4 nlmax,
     840                                         int_4 nmmax,
     841                                         r_8 phi0, r_8 domega, 
     842                                         r_8 theta,
     843                                         const TVector<T>& dataq,
     844                                         const TVector<T>& datau,
     845                                         Alm<T>& alme,
     846                                         Alm<T>& almb) const
     847
     848Compute polarized Alm's as :
     849\f[
     850a_{lm}^E=-\frac{1}{2}\sum_{slices}{\omega_{pix}\left(\,_{+}\lambda_l^m\tilde{P^+}+\,_{-}\lambda_l^m\tilde{P^-}\right)}
     851\f]
     852\f[
     853a_{lm}^B=\frac{i}{2}\sum_{slices}{\omega_{pix}\left(\,_{+}\lambda_l^m\tilde{P^+}-\,_{-}\lambda_l^m\tilde{P^-}\right)}
     854\f]
     855
     856where \f$\tilde{P^{\pm}}=\tilde{Q}\pm\tilde{U}\f$  computed by FFT (method CFromFourierAnalysis, called by present method) from the Stokes parameters,\f$Q\f$ and \f$U\f$ .
     857
     858\f$\omega_{pix}\f$ are solid angle of each pixel.
     859
     860dataq, datau : Stokes parameters.
     861
     862  */
     863template<class T>
     864void SphericalTransformServer<T>::almFromPM(int_4 nph, int_4 nlmax,
     865                                         int_4 nmmax,
    632866                                         r_8 phi0, r_8 domega, 
    633867                                         r_8 theta,
     
    673907
    674908
     909/*! \fn void SOPHYA::SphericalTransformServer::mapFromWX(int_4 nlmax, int_4 nmmax,
     910                                         SphericalMap<T>& mapq,
     911                                         SphericalMap<T>& mapu,
     912                                         const Alm<T>& alme,
     913                                         const Alm<T>& almb) const
     914
     915synthesis of Stokes parameters following formulae :
     916
     917\f[
     918Q=\sum_{m=-mmax}^{mmax}b_m^qe^{im\varphi}
     919\f]
     920\f[
     921U=\sum_{m=-mmax}^{mmax}b_m^ue^{im\varphi}
     922\f]
     923
     924computed by FFT (method fourierSynthesisFromB called by the present one)
     925
     926with :
     927
     928\f[
     929b_m^q=-\frac{1}{\sqrt{2}}\sum_{l=|m|}^{lmax}{\left(\,_{w}\lambda_l^ma_{lm}^E-i\,_{x}\lambda_l^ma_{lm}^B\right) }
     930\f]
     931\f[
     932b_m^u=\frac{1}{\sqrt{2}}\sum_{l=|m|}^{lmax}{\left(i\,_{x}\lambda_l^ma_{lm}^E+\,_{w}\lambda_l^ma_{lm}^B\right) }
     933\f]
     934 */
    675935template<class T>
    676936void SphericalTransformServer<T>::mapFromWX(int_4 nlmax, int_4 nmmax,
     
    7441004    }
    7451005}
     1006/*! \fn void SOPHYA::SphericalTransformServer::mapFromPM(int_4 nlmax, int_4 nmmax,
     1007                                         SphericalMap<T>& mapq,
     1008                                         SphericalMap<T>& mapu,
     1009                                         const Alm<T>& alme,
     1010                                         const Alm<T>& almb) const
     1011
     1012synthesis of polarizations following formulae :
     1013
     1014\f[
     1015P^+ = \sum_{m=-mmax}^{mmax} {b_m^+e^{im\varphi} }
     1016\f]
     1017\f[
     1018P^- = \sum_{m=-mmax}^{mmax} {b_m^-e^{im\varphi} }
     1019\f]
     1020
     1021computed by FFT (method fourierSynthesisFromB called by the present one)
     1022
     1023with :
     1024
     1025\f[
     1026b_m^+=-\sum_{l=|m|}^{lmax}{\,_{+}\lambda_l^m \left( a_{lm}^E+ia_{lm}^B \right) }
     1027\f]
     1028\f[
     1029b_m^-=-\sum_{l=|m|}^{lmax}{\,_{+}\lambda_l^m \left( a_{lm}^E-ia_{lm}^B \right) }
     1030\f]
     1031 */
    7461032template<class T>
    7471033void SphericalTransformServer<T>::mapFromPM(int_4 nlmax, int_4 nmmax,
     
    8091095
    8101096
     1097  /*! \fn void SOPHYA::SphericalTransformServer::GenerateFromCl(SphericalMap<T>& sphq,
     1098                                              SphericalMap<T>& sphu,
     1099                                              int_4 pixelSizeIndex,
     1100                                              const TVector<T>& Cle,
     1101                                              const TVector<T>& Clb,
     1102                                              const r_8 fwhm) const
     1103
     1104synthesis of a polarization  map from  power spectra electric-Cl and magnetic-Cl (Alm's are generated randomly, following a gaussian distribution).
     1105  \param fwhm FWHM in arcmin for random generation of Alm's (eg. 5)
     1106*/
    8111107template<class T>
    8121108void SphericalTransformServer<T>::GenerateFromCl(SphericalMap<T>& sphq,
     
    8331129  GenerateFromAlm(sphq,sphu,pixelSizeIndex,a2lme,a2lmb);
    8341130}
     1131 /*! \fn void SOPHYA::SphericalTransformServer::GenerateFromCl(SphericalMap<T>& sph,
     1132                                                 int_4 pixelSizeIndex,
     1133                                              const TVector<T>& Cl,
     1134                                                 const r_8 fwhm)  const
     1135
     1136synthesis of a temperature  map from  power spectrum Cl (Alm's are generated randomly, following a gaussian distribution). */
    8351137template<class T>
    8361138void SphericalTransformServer<T>::GenerateFromCl(SphericalMap<T>& sph,
     
    8461148
    8471149
     1150/*! \fn TVector<T>  SOPHYA::SphericalTransformServer::DecomposeToCl(const SphericalMap<T>& sph, int_4 nlmax, r_8 cos_theta_cut) const
     1151
     1152\return power spectrum from analysis of a temperature map.
     1153
     1154     \param<nlmax> : maximum value of the l index
     1155
     1156     \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.
     1157  */
    8481158template <class T>
    8491159TVector<T>  SphericalTransformServer<T>::DecomposeToCl(const SphericalMap<T>& sph, int_4 nlmax, r_8 cos_theta_cut) const
Note: See TracChangeset for help on using the changeset viewer.