| 1 | //   Class for representing spherical harmonic coefficients
 | 
|---|
| 2 | //              G. Le Meur      2000
 | 
|---|
| 3 | // DAPNIA/SPP (Saclay) / CEA    LAL - IN2P3/CNRS  (Orsay)
 | 
|---|
| 4 | 
 | 
|---|
| 5 | #ifndef ALM_SEEN
 | 
|---|
| 6 | #define ALM_SEEN
 | 
|---|
| 7 | 
 | 
|---|
| 8 | #include "randinterf.h"
 | 
|---|
| 9 | #include "nbmath.h"
 | 
|---|
| 10 | #include "triangmtx.h"
 | 
|---|
| 11 | #include "tvector.h"
 | 
|---|
| 12 | 
 | 
|---|
| 13 | namespace SOPHYA {  
 | 
|---|
| 14 | 
 | 
|---|
| 15 | // ----- Classe Alm 
 | 
|---|
| 16 | template <class T>
 | 
|---|
| 17 | class Alm : public TriangularMatrix< complex<T> > {
 | 
|---|
| 18 | public :
 | 
|---|
| 19 |  
 | 
|---|
| 20 |   Alm() : TriangularMatrix<complex<T> >()  {}
 | 
|---|
| 21 | //! instanciate the class from the maximum value of the index \f$l\f$ in the sequence of the \f$a_{lm}\f$'s 
 | 
|---|
| 22 |   Alm(sa_size_t nlmax) : TriangularMatrix<complex<T> >(nlmax+1) {}
 | 
|---|
| 23 | //! copy constructor 
 | 
|---|
| 24 |   Alm(const Alm<T>& a,  bool share=false)  : TriangularMatrix<complex<T> >(a, share)  {}
 | 
|---|
| 25 | //! Constructor, generates alm from a cl vector
 | 
|---|
| 26 |   Alm(const TVector<T> & clin, const r_8 fwhm) ;
 | 
|---|
| 27 | //! Constructor, generates alm from a cl vector, using the specified random generator object
 | 
|---|
| 28 |   Alm(const TVector<T> & clin, const r_8 fwhm, RandomGeneratorInterface& rg);
 | 
|---|
| 29 | 
 | 
|---|
| 30 | //! Resize with a new lmax 
 | 
|---|
| 31 |   inline void ReSizeToLmax(sa_size_t nlmax) {this->ReSizeRow(nlmax+1);}
 | 
|---|
| 32 |   inline sa_size_t Lmax() const {return this->rowNumber()-1;}
 | 
|---|
| 33 | 
 | 
|---|
| 34 | //! Computes the corresponding pwer spectrum (Cl vector)
 | 
|---|
| 35 |   TVector<T> powerSpectrum() const;
 | 
|---|
| 36 | 
 | 
|---|
| 37 |   inline  Alm<T>& SetComplexT(complex<T> a)
 | 
|---|
| 38 |     {  this->SetT(a);  return *this;  }
 | 
|---|
| 39 |   inline Alm<T>& operator = (complex<T> a)
 | 
|---|
| 40 |     {  return SetComplexT(a);  } 
 | 
|---|
| 41 | 
 | 
|---|
| 42 | private:
 | 
|---|
| 43 |   void GenFromCl(const TVector<T> & clin, const r_8 fwhm, RandomGeneratorInterface& rg);
 | 
|---|
| 44 | };
 | 
|---|
| 45 | 
 | 
|---|
| 46 | 
 | 
|---|
| 47 | //------------ Classe Bm , vecteur avec index  -mMax <= index <= +mMax 
 | 
|---|
| 48 | template <class T>
 | 
|---|
| 49 | class Bm  {
 | 
|---|
| 50 | public :
 | 
|---|
| 51 |   Bm(): nmmax_(0) {;};
 | 
|---|
| 52 | //! Constructor with the specification of the maximum absolute value of the index : |mMax|
 | 
|---|
| 53 | //! Copy contrsuctor 
 | 
|---|
| 54 |   Bm(sa_size_t mmax) : nmmax_(mmax)   { bm_.ReSize( (2*mmax+1) );}
 | 
|---|
| 55 |   Bm(const Bm<T>& b,  bool share=false) : nmmax_(b.nmmax_), bm_(b.bm_, share) { }
 | 
|---|
| 56 |  //! resize with a new value of mmax 
 | 
|---|
| 57 |   inline void ReSizeToMmax(sa_size_t mmax) 
 | 
|---|
| 58 |     { nmmax_= mmax; bm_.ReSize(2* nmmax_+1); }
 | 
|---|
| 59 | 
 | 
|---|
| 60 | //! Acces to element with index m  ( -mMax <= m <= +mMax  ) 
 | 
|---|
| 61 |   inline T operator()(sa_size_t m) const { return bm_( m+nmmax_); }
 | 
|---|
| 62 | //! Acces to element with index m  ( -mMax <= m <= +mMax  ) 
 | 
|---|
| 63 |   inline T& operator()(sa_size_t m) { return bm_( m+nmmax_); }
 | 
|---|
| 64 | 
 | 
|---|
| 65 | //! Return the current value of the maximum absolute value of the index 
 | 
|---|
| 66 |   inline sa_size_t Mmax() const   { return nmmax_; }
 | 
|---|
| 67 | 
 | 
|---|
| 68 |   inline Bm<T>& operator = (const Bm<T>& b)
 | 
|---|
| 69 |     {
 | 
|---|
| 70 |     if (this != &b) {
 | 
|---|
| 71 |        nmmax_= b.nmmax_;
 | 
|---|
| 72 |        bm_=  b.bm_;
 | 
|---|
| 73 |        }
 | 
|---|
| 74 |     return *this;
 | 
|---|
| 75 |     }
 | 
|---|
| 76 | 
 | 
|---|
| 77 | 
 | 
|---|
| 78 |  private:
 | 
|---|
| 79 |   sa_size_t nmmax_;
 | 
|---|
| 80 |   NDataBlock<T> bm_;
 | 
|---|
| 81 |   };
 | 
|---|
| 82 | 
 | 
|---|
| 83 | } // namespace SOPHYA
 | 
|---|
| 84 | 
 | 
|---|
| 85 | #endif
 | 
|---|