Changeset 1683 in Sophya for trunk/SophyaLib/Samba
- Timestamp:
- Oct 11, 2001, 5:22:03 PM (24 years ago)
- Location:
- trunk/SophyaLib/Samba
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/SophyaLib/Samba/alm.cc
r1621 r1683 78 78 return powsp; 79 79 } 80 80 81 81 #ifdef __CXX_PRAGMA_TEMPLATES__ 82 82 #pragma define_template Alm<r_8> -
trunk/SophyaLib/Samba/alm.h
r1371 r1683 30 30 TVector<T> powerSpectrum() const; 31 31 32 inline 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 } 32 41 33 42 }; -
trunk/SophyaLib/Samba/lambdaBuilder.cc
r1428 r1683 71 71 cth_=cos(theta); 72 72 sth_=sin(theta); 73 array_init(lmax, mmax); 74 } 75 LambdaLMBuilder::LambdaLMBuilder(r_8 costet, r_8 sintet,int_4 lmax, int_4 mmax) 76 { 77 cth_=costet; 78 sth_=sintet; 73 79 array_init(lmax, mmax); 74 80 } -
trunk/SophyaLib/Samba/lambdaBuilder.h
r1218 r1683 41 41 LambdaLMBuilder() {} 42 42 LambdaLMBuilder(r_8 theta,int_4 lmax, int_4 mmax); 43 LambdaLMBuilder(r_8 ct, r_8 st,int_4 lmax, int_4 mmax); 43 44 virtual ~LambdaLMBuilder() {}; 44 45 45 46 /*! return the value of the coefficient \f$ \lambda_l^m \f$ */ 46 47 inline double lamlm(int l, int m) const { return lambda_(l,m); } 48 49 inline double lamlm(int index) const { return lambda_(index); } 50 51 52 //Return pointer to first element address of the alm's 53 //inline r_8* Data() {return lambda_.Data();} 54 47 55 48 56 private: -
trunk/SophyaLib/Samba/sphericaltransformserver.cc
r1624 r1683 7 7 #include "nbrandom.h" 8 8 #include "nbmath.h" 9 #include "timing.h" 10 //#include "spherehealpix.h" 11 9 12 10 13 /*! \class SOPHYA::SphericalTransformServer … … 184 187 throw IOExc(" unknown type of sphere: " + (string)sphere_type ); 185 188 } 186 cout << "GenerateFromAlm: the sphere is of type : " << sphere_type << endl;187 cout << "GenerateFromAlm: size index (nside) of the sphere= " << nsmax << endl;188 cout << "GenerateFromAlm: nlmax (from Alm) = " << nlmax << endl;189 // cout << "GenerateFromAlm: the sphere is of type : " << sphere_type << endl; 190 // cout << "GenerateFromAlm: size index (nside) of the sphere= " << nsmax << endl; 191 // cout << "GenerateFromAlm: nlmax (from Alm) = " << nlmax << endl; 189 192 if (nlmax>3*nsmax-1) 190 193 { 191 cout << "GenerateFromAlm: nlmax should be <= 3*nside-1" << endl;194 // cout << "GenerateFromAlm: nlmax should be <= 3*nside-1" << endl; 192 195 if (strncmp(sphere_type,"TETAFI",6) == 0) 193 196 { 197 cout << "GenerateFromAlm: nlmax should be <= 3*nside-1" << endl; 194 198 cout << " (for this criterium, nsmax is computed as sqrt(nbPixels/12))" << endl; 195 199 } … … 221 225 for (m = 0; m <= nmmax; m++) 222 226 { 223 // somme sur l de m a l'infini224 227 b_m_theta(m) = (T)( lb.lamlm(m,m) ) * alm(m,m); 225 // if (ith==0 && m==0)226 // {227 // cout << " guy: lmm= " << lb.lamlm(m,m) << " alm " << alm(m,m) << "b00= " << b_m_theta(m) << endl;228 // }229 228 for (int l = m+1; l<= nlmax; l++) 230 229 { 231 230 b_m_theta(m) += (T)( lb.lamlm(l,m) ) * alm(l,m); 232 233 234 // if (ith==0 && m==0)235 // {236 // cout << " guy:l=" << l << " m= " << m << " lmm= " << lb.lamlm(l,m) << " alm " << alm(l,m) << "b00= " << b_m_theta(m) << endl;237 238 // }239 240 231 } 241 232 } … … 245 236 for (m=1;m<=nmmax;m++) 246 237 { 247 //compiler doesn't have conj()248 238 b_m_theta(-m) = conj(b_m_theta(m)); 249 239 } … … 251 241 // sum_m b(m,theta)*exp(i*m*phi) -> f(phi,theta) 252 242 // ---------------------------------------------------------------*/ 253 // TVector<complex<T> > Temp = fourierSynthesisFromB(b_m_theta,nph,phi0); 254 TVector<T> Temp = RfourierSynthesisFromB(b_m_theta,nph,phi0); 243 TVector<T> Temp = RfourierSynthesisFromB(b_m_theta,nph,phi0); 255 244 for (int i=0;i< nph;i++) 256 245 { 257 // map(pixNumber(i))=Temp(i).real(); 258 map(pixNumber(i))=Temp(i); 246 map(pixNumber(i))=Temp(i); 259 247 } 260 248 } … … 421 409 } 422 410 423 //sortie.ReSize(nph);424 411 TVector<T> sortie; 425 412 … … 432 419 /*! \fn Alm<T> SOPHYA::SphericalTransformServer::DecomposeToAlm(const SphericalMap<T>& map, int_4 nlmax, r_8 cos_theta_cut) const 433 420 434 \return the Alm coefficients from analysis of a temperature map. 421 \return the Alm coefficients from analysis of a temperature map. THE MAP CAN BE MODIFIED (if iterationOrder >0) 435 422 436 423 \param<nlmax> : maximum value of the l index 437 424 438 425 \param<cos_theta_cut> : cosinus of the symmetric cut EULER angle theta : cos_theta_cut=0 means no cut ; cos_theta_cut=1 all the sphere is cut. 426 427 \param<iterationOrder> : 1,2,3,4.... order of an iterative analysis. (Default : 0 -> standard analysis) 439 428 */ 440 429 template<class T> 441 Alm<T> SphericalTransformServer<T>::DecomposeToAlm(const SphericalMap<T>& map, int_4 nlmax, r_8 cos_theta_cut) const 430 void SphericalTransformServer<T>::DecomposeToAlm(SphericalMap<T>& map, Alm<T>& alm, int_4 nlmax, r_8 cos_theta_cut, int iterationOrder) const 431 { 432 int_4 nmmax = nlmax; 433 // PrtTim("appel carteVersAlm"); 434 carteVersAlm(map, nlmax, cos_theta_cut, alm); 435 // PrtTim("retour carteVersAlm"); 436 if (iterationOrder > 0) 437 { 438 TVector<int_4> fact(iterationOrder+2); 439 fact(0) = 1; 440 for (int k=1; k <= iterationOrder+1; k++) 441 { 442 fact(k) = fact(k-1)*k; 443 } 444 Alm<T> alm2(alm); 445 T Tzero = (T)0.; 446 complex<T> complexZero = complex<T>(Tzero, Tzero); 447 alm = complexZero; 448 int signe = 1; 449 int nbIteration = iterationOrder+1; 450 for (int k=1; k <= nbIteration; k++) 451 { 452 T facMult = (T)(0.5*signe*fact(iterationOrder)*(2*nbIteration-k)/(fact(k)*fact(nbIteration-k))); 453 for (int m = 0; m <= nmmax; m++) 454 { 455 for (int l = m; l<= nlmax; l++) 456 { 457 alm(l,m) += facMult*alm2(l,m); 458 } 459 } 460 if (k == nbIteration) break; 461 signe = -signe; 462 for (int k=0; k< map.NbPixels(); k++) map(k) = (T)0.; 463 // synthetize a map from the estimated alm 464 // PrtTim("appel GenerateFromAlm"); 465 GenerateFromAlm( map, map.SizeIndex(), alm2); 466 // PrtTim("retour GenerateFromAlm"); 467 alm2 = complexZero; 468 // analyse the new map 469 // PrtTim("appel carteVersAlm"); 470 carteVersAlm(map, nlmax, cos_theta_cut, alm2); 471 // PrtTim("retour carteVersAlm"); 472 } 473 } 474 } 475 476 template<class T> 477 void SphericalTransformServer<T>::carteVersAlm(const SphericalMap<T>& map, int_4 nlmax, r_8 cos_theta_cut, Alm<T>& alm) const 442 478 { 443 479 … … 450 486 int_4 nmmax = nlmax; 451 487 TVector< complex<T> > phase(nmmax+1); 452 Alm<T> alm;488 453 489 alm.ReSizeToLmax(nlmax); 454 490 for (int_4 ith = 0; ith < map.NbThetaSlices(); ith++) … … 456 492 r_8 phi0; 457 493 r_8 theta; 494 // PrtTim("debut 1ere tranche "); 458 495 map.GetThetaSlice(ith,theta,phi0,pixNumber ,data); 459 for (int i=0;i< nmmax+1;i++) 460 { 461 phase(i)=0; 462 } 496 phase = complex<T>((T)0.,(T)0.); 463 497 double cth = cos(theta); 464 498 465 499 //part of the sky out of the symetric cut 466 500 bool keep_it = (fabs(cth) >= cos_theta_cut); 501 502 // PrtTim("fin 1ere tranche "); 503 504 if (keep_it) 505 { 506 // phase = CFromFourierAnalysis(nmmax,data,phi0); 507 // PrtTim("avant Fourier "); 508 CFromFourierAnalysis(nmmax,data,phase, phi0); 509 // PrtTim("apres Fourier "); 510 511 } 467 512 468 if (keep_it) 469 { 470 // tableau datain a supprimer 471 // TVector<complex<T> > datain(pixNumber.NElts()); 472 // for(int kk=0; kk<nph; kk++) datain(kk)=complex<T>(data(kk),(T)0.); 473 474 // phase = CFromFourierAnalysis(nmmax,datain,phi0); 475 phase = CFromFourierAnalysis(nmmax,data,phi0); 476 513 // --------------------------------------------------------------------- 514 // computes the a_lm by integrating over theta 515 // lambda_lm(theta) * phas_m(theta) 516 // for each m and l 517 // ----------------------------------------------------------------------- 518 // PrtTim("avant instanciation LM "); 519 LambdaLMBuilder lb(theta,nlmax,nmmax); 520 // PrtTim("apres instanciation LM "); 521 r_8 domega=map.PixSolAngle(map.PixIndexSph(theta,phi0)); 522 523 // PrtTim("avant mise a jour Alm "); 524 complex<T> fi; 525 T facteur; 526 int index; 527 for (int m = 0; m <= nmmax; m++) 528 { 529 fi = phase(m); 530 for (int l = m; l<= nlmax; l++) 531 { 532 index = alm.indexOfElement(l,m); 533 // facteur = (T)(lb.lamlm(l,m) * domega); 534 facteur = (T)(lb.lamlm(index) * domega); 535 // alm(l,m) += facteur * fi ; 536 alm(index) += facteur * fi ; 537 } 477 538 } 478 539 479 /*----------------------------------------------------------------------- 480 computes the a_lm by integrating over theta 481 lambda_lm(theta) * phas_m(theta) 482 for each m and l 483 -----------------------------------------------------------------------*/ 484 // LambdaBuilder lb(theta,nlmax,nmmax); 485 LambdaLMBuilder lb(theta,nlmax,nmmax); 486 r_8 domega=map.PixSolAngle(map.PixIndexSph(theta,phi0)); 487 for (int m = 0; m <= nmmax; m++) 488 { 489 alm(m,m) += (T)lb.lamlm(m,m) * phase(m) * (T)domega; //m,m even 490 for (int l = m+1; l<= nlmax; l++) 491 { 492 alm(l,m) += (T)lb.lamlm(l,m) * phase(m)*(T)domega; 493 } 494 } 495 } 496 return alm; 540 541 542 // 543 // 544 // PrtTim("apres mise a jour Alm "); 545 } 497 546 } 498 547 /*! \fn TVector< complex<T> > SOPHYA::SphericalTransformServer::CFromFourierAnalysis(int_4 nmmax, const TVector<complex<T> >datain, r_8 phi0) const … … 518 567 fftIntfPtr_-> FFTForward(datain, transformedData); 519 568 520 //dataout.ReSize(nmmax+1);521 569 TVector< complex<T> > dataout(nmmax+1); 522 570 523 571 int im_max=min(nph,nmmax+1); 524 572 int i; 525 for (i=0;i< dataout.NElts();i++) dataout(i)=complex<T>((T)0.,(T)0.); 573 dataout = complex<T>((T)0.,(T)0.); 574 // for (i=0;i< dataout.NElts();i++) dataout(i)=complex<T>((T)0.,(T)0.); 526 575 for (i=0;i<im_max;i++) dataout(i)=transformedData(i); 527 576 528 577 529 // for (int i = 0;i <im_max;i++){530 // dataout(i)*= (complex<T>)(complex<double>(cos(-i*phi0),sin(-i*phi0)));531 // }532 578 for (int kk=nph; kk<dataout.NElts(); kk++) dataout(kk)=dataout(kk%nph); 533 579 for (i = 0;i <dataout.NElts();i++){ … … 542 588 same as previous one, but with a "datain" which is real (not complex) */ 543 589 template<class T> 544 TVector< complex<T> > SphericalTransformServer<T>::CFromFourierAnalysis(int_4 nmmax, const TVector<T> datain, r_8 phi0) const590 void SphericalTransformServer<T>::CFromFourierAnalysis(int_4 nmmax, const TVector<T> datain, TVector< complex<T> >& dataout, r_8 phi0) const 545 591 { 546 592 //======================================================================= … … 559 605 throw PException("bizarre : vecteur datain de longueur nulle (CFromFourierAnalysis)"); 560 606 } 607 if (nph%2 != 0 ) 608 { 609 throw PException("SphericalTransformServer<T>::CFromFourierAnalysis : longueur de datain impair ?"); 610 } 561 611 TVector<complex<T> > transformedData; 562 // a remodifier 563 //FFTPackServer ffts; 564 //ffts.setNormalize(false); 565 //ffts.FFTForward(datain, transformedData); 566 612 613 // la taille du vecteur complexe retourne est nph/2+1 (si la taille 614 // du vecteur reel entre est nph) 567 615 fftIntfPtr_-> FFTForward(datain, transformedData); 568 // 569 570 //dataout.ReSize(nmmax+1); 571 TVector< complex<T> > dataout(nmmax+1); 616 617 // TVector< complex<T> > dataout(nmmax+1); 618 dataout.ReSize(nmmax+1); 572 619 573 620 // on transfere le resultat de la fft dans dataout. 574 // on s'assure que ca ne depasse pas la taille de dataout 575 int sizeOfTransformToGet = min(transformedData.NElts(),nmmax+1); 576 // int im_max=min(transformedData.NElts()-1,nmmax); 621 622 int maxFreqAccessiblesParFFT = min(nph/2,nmmax); 577 623 int i; 578 for (i=0;i< sizeOfTransformToGet;i++) dataout(i)=transformedData(i);579 580 581 // si dataout n'est pas plein, on complete jusqu'a nph valeurs (a moins624 for (i=0;i<=maxFreqAccessiblesParFFT;i++) dataout(i)=transformedData(i); 625 626 627 // si dataout n'est pas plein, on complete jusqu'a nph+1 valeurs (a moins 582 628 // que dataout ne soit plein avant d'atteindre nph) 583 if (sizeOfTransformToGet == (transformedData.NElts())) 584 { 585 for (i=transformedData.NElts(); i<min(nph,dataout.NElts()); i++) 586 { 587 588 // dataout(i) = conj(dataout(2*sizeOfTransformToGet-i-2) ); 629 if (maxFreqAccessiblesParFFT != nmmax ) 630 { 631 int maxMfft = min(nph,nmmax); 632 for (i=maxFreqAccessiblesParFFT+1; i<=maxMfft; i++) 633 { 589 634 dataout(i) = conj(dataout(nph-i) ); 590 635 } 591 636 // on conplete, si necessaire, par periodicite 592 for (int kk=nph; kk<dataout.NElts(); kk++) 593 { 594 dataout(kk)=dataout(kk%nph); 595 } 596 } 597 for (i = 0;i <dataout.NElts();i++){ 598 dataout(i)*= (complex<T>)(complex<double>(cos(-i*phi0),sin(-i*phi0))); 599 } 600 return dataout; 637 if ( maxMfft != nmmax ) 638 { 639 for (int kk=nph+1; kk <= nmmax; kk++) 640 { 641 dataout(kk)=dataout(kk%nph); 642 } 643 } 644 } 645 for (i = 0;i <dataout.NElts();i++) 646 { 647 dataout(i)*= (complex<T>)(complex<double>(cos(-i*phi0),sin(-i*phi0))); 648 } 649 // return dataout; 601 650 } 602 651 … … 701 750 */ 702 751 template<class T> 703 void SphericalTransformServer<T>::DecomposeToAlm(const SphericalMap<T>& mapq, 752 void SphericalTransformServer<T>::DecomposeToAlm(SphericalMap<T>& mapq, 753 SphericalMap<T>& mapu, 754 Alm<T>& alme, 755 Alm<T>& almb, 756 int_4 nlmax, 757 r_8 cos_theta_cut, 758 int iterationOrder) const 759 { 760 int_4 nmmax = nlmax; 761 carteVersAlm(mapq, mapu, alme, almb, nlmax, cos_theta_cut); 762 if (iterationOrder > 0) 763 { 764 TVector<int_4> fact(iterationOrder+2); 765 fact(0) = 1; 766 for (int k=1; k <= iterationOrder+1; k++) 767 { 768 fact(k) = fact(k-1)*k; 769 } 770 Alm<T> alme2(alme); 771 Alm<T> almb2(almb); 772 T Tzero = (T)0.; 773 complex<T> complexZero = complex<T>(Tzero, Tzero); 774 alme = complexZero; 775 almb = complexZero; 776 int signe = 1; 777 int nbIteration = iterationOrder+1; 778 for (int k=1; k <= nbIteration; k++) 779 { 780 T facMult = (T)(0.5*signe*fact(iterationOrder)*(2*nbIteration-k)/(fact(k)*fact(nbIteration-k))); 781 for (int m = 0; m <= nmmax; m++) 782 { 783 for (int l = m; l<= nlmax; l++) 784 { 785 alme(l,m) += facMult*alme2(l,m); 786 almb(l,m) += facMult*almb2(l,m); 787 } 788 } 789 if (k == nbIteration) break; 790 signe = -signe; 791 for (int k=0; k< mapq.NbPixels(); k++) 792 { 793 mapq(k) = (T)0.; 794 mapu(k) = (T)0.; 795 } 796 // synthetize a map from the estimated alm 797 GenerateFromAlm(mapq,mapu,mapq.SizeIndex(),alme2,almb2); 798 alme2 = complexZero; 799 almb2 = complexZero; 800 // analyse the new map 801 carteVersAlm(mapq, mapu, alme2, almb2, nlmax, cos_theta_cut); 802 } 803 } 804 } 805 806 template<class T> 807 void SphericalTransformServer<T>::carteVersAlm(const SphericalMap<T>& mapq, 704 808 const SphericalMap<T>& mapu, 705 809 Alm<T>& alme, … … 797 901 // for(int kk=0; kk<nph; kk++) datain(kk)=complex<T>(dataq(kk),0.); 798 902 799 // phaseq = CFromFourierAnalysis(nmmax,datain,phi0); 800 phaseq = CFromFourierAnalysis(nmmax,dataq,phi0); 801 802 // for(int kk=0; kk<nph; kk++) datain(kk)=complex<T>(datau(kk),0.); 803 804 // phaseu= CFromFourierAnalysis(nlmax,nmmax,datain,phi0); 805 phaseu= CFromFourierAnalysis(nmmax,datau,phi0); 903 // phaseq = CFromFourierAnalysis(nmmax,dataq,phi0); 904 CFromFourierAnalysis(nmmax,dataq,phaseq, phi0); 905 906 // phaseu= CFromFourierAnalysis(nmmax,datau,phi0); 907 CFromFourierAnalysis(nmmax,datau,phaseu, phi0); 806 908 807 909 LambdaWXBuilder lwxb(theta,nlmax,nmmax); … … 1141 1243 /*! \fn TVector<T> SOPHYA::SphericalTransformServer::DecomposeToCl(const SphericalMap<T>& sph, int_4 nlmax, r_8 cos_theta_cut) const 1142 1244 1143 \return power spectrum from analysis of a temperature map. 1245 \return power spectrum from analysis of a temperature map. THE MAP CAN BE MODIFIED (if iterationOrder >0) 1144 1246 1145 1247 \param<nlmax> : maximum value of the l index 1146 1248 1147 1249 \param<cos_theta_cut> : cosinus of the symmetric cut EULER angle theta : cos_theta_cut=0 means no cut ; cos_theta_cut=1 all the sphere is cut. 1250 1251 \param<iterationOrder> : 1,2,3,4.... order of an iterative analysis. (Default : 0 -> standard analysis) 1252 1148 1253 */ 1149 1254 template <class T> 1150 TVector<T> SphericalTransformServer<T>::DecomposeToCl(const SphericalMap<T>& sph, int_4 nlmax, r_8 cos_theta_cut) const 1151 { 1152 Alm<T> alm=DecomposeToAlm( sph, nlmax, cos_theta_cut); 1255 TVector<T> SphericalTransformServer<T>::DecomposeToCl(SphericalMap<T>& sph, int_4 nlmax, r_8 cos_theta_cut, int iterationOrder) const 1256 { 1257 Alm<T> alm; 1258 DecomposeToAlm( sph, alm, nlmax, cos_theta_cut, iterationOrder); 1259 // cout << " SphericalTransformServer : impression alm " << endl; 1260 // alm.Print(); 1153 1261 // power spectrum 1154 1262 return alm.powerSpectrum(); -
trunk/SophyaLib/Samba/sphericaltransformserver.h
r1218 r1683 46 46 47 47 48 Alm<T> DecomposeToAlm(const SphericalMap<T>& map, int_4 nlmax, r_8 cos_theta_cut) const;48 void DecomposeToAlm(SphericalMap<T>& map, Alm<T>& alm, int_4 nlmax, r_8 cos_theta_cut, int iterationOrder = 0) const; 49 49 50 void DecomposeToAlm(const SphericalMap<T>& mapq, const SphericalMap<T>& mapu, 51 Alm<T>& a2lme, Alm<T>& a2lmb, 52 int_4 nlmax, r_8 cos_theta_cut) const; 50 void DecomposeToAlm(SphericalMap<T>& mapq, 51 SphericalMap<T>& mapu, 52 Alm<T>& alme, 53 Alm<T>& almb, 54 int_4 nlmax, 55 r_8 cos_theta_cut, 56 int iterationOrder = 0) const; 53 57 54 TVector<T> DecomposeToCl(constSphericalMap<T>& sph,55 int_4 nlmax, r_8 cos_theta_cut ) const;58 TVector<T> DecomposeToCl(SphericalMap<T>& sph, 59 int_4 nlmax, r_8 cos_theta_cut, int iterationOrder = 0) const; 56 60 57 61 58 62 private: 59 TVector< complex<T> > fourierSynthesisFromB(const Bm<complex<T> >& b_m, 63 64 void carteVersAlm(const SphericalMap<T>& map, int_4 nlmax, r_8 cos_theta_cut, Alm<T>& alm) const; 65 66 void carteVersAlm(const SphericalMap<T>& mapq, 67 const SphericalMap<T>& mapu, 68 Alm<T>& alme, 69 Alm<T>& almb, 70 int_4 nlmax, 71 r_8 cos_theta_cut) const; 72 73 74 TVector< complex<T> > fourierSynthesisFromB(const Bm<complex<T> >& b_m, 60 75 int_4 nph, r_8 phi0) const; 61 76 TVector<T> RfourierSynthesisFromB(const Bm<complex<T> >& b_m, 62 77 int_4 nph, r_8 phi0) const; 63 64 TVector< complex<T> > CFromFourierAnalysis(int_4 mmax, 78 TVector< complex<T> > CFromFourierAnalysis(int_4 mmax, 65 79 const TVector<complex<T> > datain, 66 80 r_8 phi0) const; 67 TVector< complex<T> > CFromFourierAnalysis(int_4 mmax, 68 const TVector<T> datain, 69 r_8 phi0) const; 81 // TVector< complex<T> > CFromFourierAnalysis(int_4 mmax, 82 // const TVector<T> datain, 83 // r_8 phi0) const; 84 void CFromFourierAnalysis(int_4 mmax, const TVector<T> datain, 85 TVector< complex<T> >& dataout, 86 r_8 phi0) const; 70 87 71 88 void almFromWX(int_4 nlmax, int_4 nmmax, r_8 phi0, … … 90 107 91 108 FFTServerInterface* fftIntfPtr_; 109 92 110 }; 93 111 } // Fin du namespace
Note:
See TracChangeset
for help on using the changeset viewer.