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

Last change on this file since 1624 was 1371, checked in by ansari, 25 years ago

MAJ documentation, Makefile, ... - Reza 5/1/2001

File size: 2.2 KB
RevLine 
[1371]1// Class for representing spherical harmonic coefficients
2// G. Le Meur 2000
3// DAPNIA/SPP (Saclay) / CEA LAL - IN2P3/CNRS (Orsay)
4
[729]5#ifndef ALM_SEEN
6#define ALM_SEEN
[758]7
[729]8#include "nbrandom.h"
9#include "nbmath.h"
[758]10#include "triangmtx.h"
[729]11#include "tvector.h"
12
[1371]13namespace SOPHYA {
[729]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
32
33};
34/*! 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$ */
35template <class T>
36class Bm
37 {
38 public :
39Bm(): nmmax_(0) {;};
40 /* instanciate from the maximum absolute value of the index */
41Bm(int mmax) : nmmax_((uint_4)mmax) { bm_.ReSize( (uint_4)(2*mmax+1) );}
42 Bm(const Bm<T>& b, bool share=false) : nmmax_(b.nmmax_), bm_(b.bm_, share) {;}
43 /*! resize with a new value of mmax */
44inline void ReSizeToMmax(int_4 mmax)
45 {
46 nmmax_=(uint_4)l;
47 bm_.ReSize(2* nmmax_+1);
48 }
49//inline int_4 Size() const {return 2*nmmax_+1;};
50inline T& operator()(int m) {return bm_( adr_i(m));};
51inline T const& operator()(int m) const {return *(bm_.Begin()+ adr_i(m));};
52/*! return the current value of the maximum absolute value of the index */
53inline int_4 Mmax() const
54 {
55 return (int_4)nmmax_;
56 }
57inline Bm<T>& operator = (const Bm<T>& b)
58 {
59 if (this != &b)
60 {
61 nmmax_= b.nmmax_;
62 bm_= b.bm_;
63 }
64 return *this;
65 }
66
67 private:
68/*! return the address in the array representing the vector */
69inline uint_4 adr_i(int i) const
70{
71 return(uint_4)(i+nmmax_);
72}
73
74
75
76 uint_4 nmmax_;
77 NDataBlock<T> bm_;
78
79 };
80
[1371]81} // namespace SOPHYA
[729]82
83#endif
Note: See TracBrowser for help on using the repository browser.