source: Sophya/trunk/SophyaLib/Samba/alm.h@ 3712

Last change on this file since 3712 was 3613, checked in by ansari, 16 years ago

Adaptation a l'introduction de la suite des classes RandomGeneratorInterface et Cie , Reza 30/04/2009

File size: 2.6 KB
Line 
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
13namespace SOPHYA {
14
15// ----- Classe Alm
16template <class T>
17class Alm : public TriangularMatrix< complex<T> > {
18public :
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
42private:
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
48template <class T>
49class Bm {
50public :
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
Note: See TracBrowser for help on using the repository browser.