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

Last change on this file since 2277 was 1756, checked in by lemeur, 24 years ago

adaptation aus spheres theta-phi

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 "nbrandom.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(int 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(int_4 nlmax) {ReSizeRow(nlmax+1);}
29inline int_4 Lmax() const {return 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(int mmax) : nmmax_((uint_4)mmax) { bm_.ReSize( (uint_4)(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(int_4 mmax)
54 {
55 nmmax_=(uint_4)l;
56 bm_.ReSize(2* nmmax_+1);
57 }
58//inline int_4 Size() const {return 2*nmmax_+1;};
59inline T& operator()(int m) {return bm_( adr_i(m));};
60inline T const& operator()(int m) const {return *(bm_.Begin()+ adr_i(m));};
61/*! return the current value of the maximum absolute value of the index */
62inline int_4 Mmax() const
63 {
64 return (int_4)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 uint_4 adr_i(int i) const
79{
80 return(uint_4)(i+nmmax_);
81}
82
83
84
85 uint_4 nmmax_;
86 NDataBlock<T> bm_;
87
88 };
89
90} // namespace SOPHYA
91
92#endif
Note: See TracBrowser for help on using the repository browser.