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

Last change on this file since 3415 was 3077, checked in by cmv, 19 years ago

remplacement nbrandom.h (obsolete) -> srandgen.h cmv 14/09/2006

File size: 2.4 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 "srandgen.h"
9#include "nbmath.h"
10#include "triangmtx.h"
11#include "tvector.h"
12
13namespace SOPHYA {
14
15/*! class for the coefficients \f$a_{lm}\f$ of the development of a function defined on a sphere, in spherical harmonics */
16template <class T>
17class Alm : public TriangularMatrix<complex<T> >
18 {
19 public :
20
21Alm() : TriangularMatrix<complex<T> >() {;};
22 /* instanciate the class from the maximum value of the index \f$l\f$ in the sequence of the \f$a_{lm}\f$'s */
23Alm(sa_size_t nlmax) : TriangularMatrix<complex<T> >(nlmax+1) {;}
24Alm(const Alm<T>& a, bool share=false) : TriangularMatrix<complex<T> >(a, share) {;}
25
26Alm(const TVector<T>& clin, const r_8 fwhm) ;
27/*! resize with a new lmax */
28inline void ReSizeToLmax(sa_size_t nlmax) {this->ReSizeRow(nlmax+1);}
29inline sa_size_t Lmax() const {return this->rowNumber()-1;}
30TVector<T> powerSpectrum() const;
31
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 }
41
42};
43/*! class for a vector with an index running from \f$-m_{max}\f$ to \f$+m_{max}\f$ (then the size of the vector will be actually \f$2m_{max}+1)\f$ */
44template <class T>
45class Bm
46 {
47 public :
48Bm(): nmmax_(0) {;};
49 /* instanciate from the maximum absolute value of the index */
50Bm(sa_size_t mmax) : nmmax_(mmax) { bm_.ReSize( (2*mmax+1) );}
51 Bm(const Bm<T>& b, bool share=false) : nmmax_(b.nmmax_), bm_(b.bm_, share) {;}
52 /*! resize with a new value of mmax */
53inline void ReSizeToMmax(sa_size_t mmax)
54 {
55 nmmax_= mmax;
56 bm_.ReSize(2* nmmax_+1);
57 }
58//inline sa_size_t Size() const {return 2*nmmax_+1;};
59inline T& operator()(sa_size_t m) {return bm_( adr_i(m));};
60inline T const& operator()(sa_size_t m) const {return *(bm_.Begin()+ adr_i(m));};
61/*! return the current value of the maximum absolute value of the index */
62inline sa_size_t Mmax() const
63 {
64 return nmmax_;
65 }
66inline Bm<T>& operator = (const Bm<T>& b)
67 {
68 if (this != &b)
69 {
70 nmmax_= b.nmmax_;
71 bm_= b.bm_;
72 }
73 return *this;
74 }
75
76 private:
77/*! return the address in the array representing the vector */
78inline sa_size_t adr_i(sa_size_t i) const
79{
80 return (i+nmmax_);
81}
82
83
84
85 sa_size_t nmmax_;
86 NDataBlock<T> bm_;
87
88 };
89
90} // namespace SOPHYA
91
92#endif
Note: See TracBrowser for help on using the repository browser.