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.h

    r866 r1218  
    1111namespace SOPHYA {
    1212
    13 //
    14 /*! Class for performing analysis and synthesis of sky maps using spin-0 or spin-2 spherical harmonics.
    1513
    16 Maps must be SOPHYA SphericalMaps (SphereGorski or SphereThetaPhi).
    17 
    18 Temperature and polarization (Stokes parameters) can be developped on spherical harmonics :
    19 \f[
    20 \frac{\Delta T}{T}(\hat{n})=\sum_{lm}a_{lm}^TY_l^m(\hat{n})
    21 \f]
    22 \f[
    23 Q(\hat{n})=\frac{1}{\sqrt{2}}\sum_{lm}N_l\left(a_{lm}^EW_{lm}(\hat{n})+a_{lm}^BX_{lm}(\hat{n})\right)
    24 \f]
    25 \f[
    26 U(\hat{n})=-\frac{1}{\sqrt{2}}\sum_{lm}N_l\left(a_{lm}^EX_{lm}(\hat{n})-a_{lm}^BW_{lm}(\hat{n})\right)
    27 \f]
    28 \f[
    29 \left(Q \pm iU\right)(\hat{n})=\sum_{lm}a_{\pm 2lm}\, _{\pm 2}Y_l^m(\hat{n})
    30 \f]
    31 
    32 \f[
    33 Y_l^m(\hat{n})=\lambda_l^m(\theta)e^{im\phi}
    34 \f]
    35 \f[
    36 _{\pm}Y_l^m(\hat{n})=_{\pm}\lambda_l^m(\theta)e^{im\phi}
    37 \f]
    38 \f[
    39 W_{lm}(\hat{n})=\frac{1}{N_l}\,_{w}\lambda_l^m(\theta)e^{im\phi}
    40 \f]
    41 \f[
    42 X_{lm}(\hat{n})=\frac{-i}{N_l}\,_{x}\lambda_l^m(\theta)e^{im\phi}
    43 \f]
    44 
    45 (see LambdaLMBuilder, LambdaPMBuilder, LambdaWXBuilder classes)
    46 
    47 power spectra :
    48 
    49 \f[
    50 C_l^T=\frac{1}{2l+1}\sum_{m=0}^{+ \infty }\left|a_{lm}^T\right|^2=\langle\left|a_{lm}^T\right|^2\rangle
    51 \f]
    52 \f[
    53 C_l^E=\frac{1}{2l+1}\sum_{m=0}^{+\infty}\left|a_{lm}^E\right|^2=\langle\left|a_{lm}^E\right|^2\rangle
    54 \f]
    55 \f[
    56 C_l^B=\frac{1}{2l+1}\sum_{m=0}^{+\infty}\left|a_{lm}^B\right|^2=\langle\left|a_{lm}^B\right|^2\rangle
    57 \f]
    58 
    59 \arg
    60 \b Synthesis : Get temperature and polarization maps  from \f$a_{lm}\f$ coefficients or from power spectra, (methods GenerateFrom...).
    61 
    62 \b Temperature:
    63 \f[
    64 \frac{\Delta T}{T}(\hat{n})=\sum_{lm}a_{lm}^TY_l^m(\hat{n}) = \sum_{-\infty}^{+\infty}b_m(\theta)e^{im\phi}
    65 \f]
    66 
    67 with
    68 \f[
    69 b_m(\theta)=\sum_{l=\left|m\right|}^{+\infty}a_{lm}^T\lambda_l^m(\theta)
    70 \f]
    71 
    72 \b Polarisation
    73 \f[
    74 Q \pm iU = \sum_{-\infty}^{+\infty}b_m^{\pm}(\theta)e^{im\phi}
    75 \f]
    76 
    77 where :
    78 \f[
    79 b_m^{\pm}(\theta) = \sum_{l=\left|m\right|}^{+\infty}a_{\pm 2lm}\,_{\pm}\lambda_l^m(\theta)
    80 \f]
    81 
    82 or :
    83 \f[
    84 Q  = \sum_{-\infty}^{+\infty}b_m^{Q}(\theta)e^{im\phi}
    85 \f]
    86 \f[
    87 U  = \sum_{-\infty}^{+\infty}b_m^{U}(\theta)e^{im\phi}
    88 \f]
    89 
    90 where:
    91 \f[
    92 b_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)
    93 \f]
    94 \f[
    95 b_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)
    96 \f]
    97 
    98 Since 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.
    99 
    100 
    101 \arg
    102 \b Analysis :  Get \f$a_{lm}\f$ coefficients or  power spectra from temperature and polarization maps   (methods DecomposeTo...).
    103 
    104 \b Temperature:
    105 \f[
    106 a_{lm}^T=\int\frac{\Delta T}{T}(\hat{n})Y_l^{m*}(\hat{n})d\hat{n}
    107 \f]
    108 
    109 approximated as :
    110 \f[
    111 a_{lm}^T=\sum_{\theta_k}\omega_kC_m(\theta_k)\lambda_l^m(\theta_k)
    112 \f]
    113 where :
    114 \f[
    115 C_m (\theta _k)=\sum_{\phi _{k\prime}}\frac{\Delta T}{T}(\theta _k,\phi_{k\prime})e^{-im\phi _{k\prime}}
    116 \f]
    117 Since 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.
    118 
    119 \b polarisation:
    120 
    121 \f[
    122 a_{\pm 2lm}=\sum_{\theta_k}\omega_kC_m^{\pm}(\theta_k)\,_{\pm}\lambda_l^m(\theta_k)
    123 \f]
    124 where :
    125 \f[
    126 C_m^{\pm} (\theta _k)=\sum_{\phi _{k\prime}}\left(Q \pm iU\right)(\theta _k,\phi_{k\prime})e^{-im\phi _{k\prime}}
    127 \f]
    128 or :
    129 
    130 \f[
    131 a_{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)
    132 \f]
    133 \f[
    134 a_{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)
    135 \f]
    136 
    137 where :
    138 \f[
    139 C_m^{Q} (\theta _k)=\sum_{\phi _{k\prime}}Q(\theta _k,\phi_{k\prime})e^{-im\phi _{k\prime}}
    140 \f]
    141 \f[
    142 C_m^{U} (\theta _k)=\sum_{\phi _{k\prime}}U(\theta _k,\phi_{k\prime})e^{-im\phi _{k\prime}}
    143 \f]
    144 
    145  */
    14614template <class T>
    14715class SphericalTransformServer
     
    15018 public:
    15119
    152  SphericalTransformServer() 
    153 {
    154     fftIntfPtr_=new FFTPackServer;
    155     fftIntfPtr_->setNormalize(false);
    156 };
    157  ~SphericalTransformServer(){ if (fftIntfPtr_!=NULL) delete fftIntfPtr_;};
    158 /*!
     20  SphericalTransformServer() 
     21    {
     22      fftIntfPtr_=new FFTPackServer;
     23      fftIntfPtr_->setNormalize(false);
     24    };
     25  ~SphericalTransformServer(){ if (fftIntfPtr_!=NULL) delete fftIntfPtr_;};
     26 
     27 /*!
    15928 Set a fft server. The constructor sets a default fft server (fft-pack). So it is not necessary to call this method for a standard use.
    16029*/
    161  void SetFFTServer(FFTServerInterface* srv=NULL)
    162 {
    163   if (fftIntfPtr_!=NULL) delete fftIntfPtr_;
    164   fftIntfPtr_=srv;
    165   fftIntfPtr_->setNormalize(false);
    166 }
    167  /*! synthesis of a temperature  map from  Alm coefficients */
    168  void GenerateFromAlm( SphericalMap<T>& map, int_4 pixelSizeIndex, const Alm<T>& alm) const;
    169  /*! synthesis of a polarization map from  Alm coefficients. The spheres mapq and mapu contain respectively the Stokes parameters. */
    170  void GenerateFromAlm(SphericalMap<T>& mapq, SphericalMap<T>& mapu, int_4 pixelSizeIndex, const Alm<T>& alme,    const Alm<T>& almb) const;
     30  void SetFFTServer(FFTServerInterface* srv=NULL)
     31    {
     32      if (fftIntfPtr_!=NULL) delete fftIntfPtr_;
     33      fftIntfPtr_=srv;
     34      fftIntfPtr_->setNormalize(false);
     35    }
    17136
    172  /*! synthesis of a temperature  map from  power spectrum Cl (Alm's are generated randomly, following a gaussian distribution). */
    173  void GenerateFromCl(SphericalMap<T>& sph, int_4 pixelSizeIndex,
     37  void GenerateFromAlm( SphericalMap<T>& map, int_4 pixelSizeIndex, const Alm<T>& alm) const;
     38  void GenerateFromAlm(SphericalMap<T>& mapq, SphericalMap<T>& mapu, int_4 pixelSizeIndex, const Alm<T>& alme,    const Alm<T>& almb) const;
     39
     40  void GenerateFromCl(SphericalMap<T>& sph, int_4 pixelSizeIndex,
    17441                     const TVector<T>& Cl, const r_8 fwhm) const;
    175   /*! synthesis of a polarization  map from  power spectra electric-Cl and magnetic-Cl (Alm's are generated randomly, following a gaussian distribution).
    176   \param fwhm FWHM in arcmin for random generation of Alm's (eg. 5)
    177 
    178 */
    179  void GenerateFromCl(SphericalMap<T>& sphq, SphericalMap<T>& sphu,
     42  void GenerateFromCl(SphericalMap<T>& sphq, SphericalMap<T>& sphu,
    18043                     int_4 pixelSizeIndex,
    18144                     const TVector<T>& Cle, const TVector<T>& Clb,
    18245                    const r_8 fwhm) const;
    183  /*!return the Alm coefficients from analysis of a temperature map.
    184 
    185     \param<nlmax> : maximum value of the l index
    186 
    187      \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.
    188   */
    18946
    19047
    191 Alm<T> DecomposeToAlm(const SphericalMap<T>& map, int_4 nlmax, r_8 cos_theta_cut) const;
    192  /*!analysis of a polarization map into Alm coefficients.
     48  Alm<T> DecomposeToAlm(const SphericalMap<T>& map, int_4 nlmax, r_8 cos_theta_cut) const;
    19349
    194  The spheres \c mapq and \c mapu contain respectively the Stokes parameters.
    195 
    196  \c a2lme and \c a2lmb will receive respectively electric and magnetic Alm's
    197     nlmax : maximum value of the l index
    198 
    199  \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.
    200  */
    201 
    202  void DecomposeToAlm(const SphericalMap<T>& mapq, const SphericalMap<T>& mapu,
     50  void DecomposeToAlm(const SphericalMap<T>& mapq, const SphericalMap<T>& mapu,
    20351                     Alm<T>& a2lme, Alm<T>& a2lmb,
    20452                     int_4 nlmax, r_8 cos_theta_cut) const;
    20553
    206 /*!return power spectrum from analysis of a temperature map.
    207 
    208      \param<nlmax> : maximum value of the l index
    209 
    210      \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.
    211   */
    212  TVector<T>  DecomposeToCl(const SphericalMap<T>& sph, 
     54  TVector<T>  DecomposeToCl(const SphericalMap<T>& sph, 
    21355                           int_4 nlmax, r_8 cos_theta_cut) const;
    21456
    21557
    216   private:
    217   /*! 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)
    218 
    219   The object b_m (\f$b_m\f$) of the class Bm is a special vector which index goes from -mmax to mmax.
    220   */
    221  TVector< complex<T> >  fourierSynthesisFromB(const Bm<complex<T> >& b_m, 
     58 private:
     59  TVector< complex<T> >  fourierSynthesisFromB(const Bm<complex<T> >& b_m, 
    22260                                  int_4 nph, r_8 phi0) const;
    223 /*! same as fourierSynthesisFromB, but return a real vector, taking into account the fact that b(-m) is conjugate of b(m) */
    224  TVector<T>  RfourierSynthesisFromB(const Bm<complex<T> >& b_m, 
     61  TVector<T>  RfourierSynthesisFromB(const Bm<complex<T> >& b_m, 
    22562                                  int_4 nph, r_8 phi0) const;
    22663
    227   /*! return a vector with mmax elements  which are  sums :
    228 \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.
    229    */
    230  TVector< complex<T> > CFromFourierAnalysis(int_4 mmax,
     64  TVector< complex<T> > CFromFourierAnalysis(int_4 mmax,
    23165                                  const TVector<complex<T> > datain,
    23266                                  r_8 phi0) const;
    233 /* same as previous one, but with a "datain" which is real (not complex) */
    234  TVector< complex<T> > CFromFourierAnalysis(int_4 mmax,
     67  TVector< complex<T> > CFromFourierAnalysis(int_4 mmax,
    23568                         const TVector<T> datain, 
    23669                                  r_8 phi0) const;
    23770
    238  /*!
    239 Compute polarized Alm's as :
    240 \f[
    241 a_{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)}
    242 \f]
    243 \f[
    244 a_{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)}
    245 \f]
    246 
    247 where \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.
    248 
    249 \f$\omega_{pix}\f$ are solid angle of each pixel.
    250 
    251 dataq, datau : Stokes parameters.
    252 
    253   */
    254 void almFromWX(int_4 nlmax, int_4 nmmax, r_8 phi0,
     71  void almFromWX(int_4 nlmax, int_4 nmmax, r_8 phi0,
    25572               r_8 domega, r_8 theta,
    25673               const TVector<T>& dataq, const TVector<T>& datau,
    25774               Alm<T>& alme, Alm<T>& almb) const;
    258  /*!
    259 Compute polarized Alm's as :
    260 \f[
    261 a_{lm}^E=-\frac{1}{2}\sum_{slices}{\omega_{pix}\left(\,_{+}\lambda_l^m\tilde{P^+}+\,_{-}\lambda_l^m\tilde{P^-}\right)}
    262 \f]
    263 \f[
    264 a_{lm}^B=\frac{i}{2}\sum_{slices}{\omega_{pix}\left(\,_{+}\lambda_l^m\tilde{P^+}-\,_{-}\lambda_l^m\tilde{P^-}\right)}
    265 \f]
    266 
    267 where \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$ .
    268 
    269 \f$\omega_{pix}\f$ are solid angle of each pixel.
    270 
    271 dataq, datau : Stokes parameters.
    272 
    273   */
    274 void almFromPM(int_4 nph, int_4 nlmax, int_4 nmmax,
     75  void almFromPM(int_4 nph, int_4 nlmax, int_4 nmmax,
    27576               r_8 phi0, r_8 domega, r_8 theta,
    27677               const TVector<T>& dataq, const TVector<T>& datau,
    27778               Alm<T>& alme, Alm<T>& almb) const;
    27879
    279 /*! synthesis of Stokes parameters following formulae :
    280 
    281 \f[
    282 Q=\sum_{m=-mmax}^{mmax}b_m^qe^{im\varphi}
    283 \f]
    284 \f[
    285 U=\sum_{m=-mmax}^{mmax}b_m^ue^{im\varphi}
    286 \f]
    287 
    288 computed by FFT (method fourierSynthesisFromB called by the present one)
    289 
    290 with :
    291 
    292 \f[
    293 b_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) }
    294 \f]
    295 \f[
    296 b_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) }
    297 \f]
    298  */
    299 void mapFromWX(int_4 nlmax, int_4 nmmax,
     80  void mapFromWX(int_4 nlmax, int_4 nmmax,
    30081               SphericalMap<T>& mapq, SphericalMap<T>& mapu,
    30182               const Alm<T>& alme, const Alm<T>& almb) const;
    30283
    303 /*! synthesis of polarizations following formulae :
    30484
    305 \f[
    306 P^+ = \sum_{m=-mmax}^{mmax} {b_m^+e^{im\varphi} }
    307 \f]
    308 \f[
    309 P^- = \sum_{m=-mmax}^{mmax} {b_m^-e^{im\varphi} }
    310 \f]
    311 
    312 computed by FFT (method fourierSynthesisFromB called by the present one)
    313 
    314 with :
    315 
    316 \f[
    317 b_m^+=-\sum_{l=|m|}^{lmax}{\,_{+}\lambda_l^m \left( a_{lm}^E+ia_{lm}^B \right) }
    318 \f]
    319 \f[
    320 b_m^-=-\sum_{l=|m|}^{lmax}{\,_{+}\lambda_l^m \left( a_{lm}^E-ia_{lm}^B \right) }
    321 \f]
    322  */
    323 
    324 void mapFromPM(int_4 nlmax, int_4 nmmax,
     85  void mapFromPM(int_4 nlmax, int_4 nmmax,
    32586               SphericalMap<T>& mapq, SphericalMap<T>& mapu,
    32687               const Alm<T>& alme, const Alm<T>& almb) const;
Note: See TracChangeset for help on using the changeset viewer.