source: Sophya/trunk/SophyaProg/Tests/tspm2.cc@ 2582

Last change on this file since 2582 was 2322, checked in by cmv, 23 years ago
  • passage xxstream.h en xxstream
  • compile avec gcc_3.2, gcc_2.96 et cxx En 3.2 le seek from ::end semble marcher (voir Eval/COS/pbseekios.cc)

rz+cmv 11/2/2003

File size: 5.2 KB
RevLine 
[2322]1#include <iostream>
[591]2#include <math.h>
[857]3#include "sambainit.h"
4#include "skymap.h"
[591]5
6#include "tod.h"
[1119]7#include "fitstarray.h"
8#include "fitsspherehealpix.h"
[591]9#include "nbrandom.h"
10
11#include "timing.h"
12
13template <class T>
14void MeanSig(PixelMap<T> const & map, double& gmoy, double& gsig)
15{
16 gmoy=0.;
17 gsig = 0.;
18 double valok;
19 for(int k=0; k<map.NbPixels(); k++) {
20 valok = map(k);
21 gmoy += valok; gsig += valok*valok;
22 }
23 gmoy /= (double)map.NbPixels();
24 gsig = gsig/(double)map.NbPixels() - gmoy*gmoy;
25 if (gsig >= 0.) gsig = sqrt(gsig);
26}
27
28template <class T>
29void Project_Mol(PixelMap<T> const & map, TMatrix<T> & mtx, T defval=-999.)
30{
31 r_8 xa, yd, teta,phi, facteur;
32 int_4 l,c,k;
33 int_4 nl = mtx.NRows();
34 int_4 nc = mtx.NCols();
[819]35 mtx = defval; // On met tout a defval
[591]36 cout << " NRows= " << nl << " NCols= " << nc << endl;
37 for(l=0; l<nl; l++) {
38 yd = (r_8)(l+0.5)/(r_8)nl-0.5;
39 facteur=2.*M_PI/sin(acos((double)yd*2));
40 teta = (yd+0.5)*Pi;
41 // teta = (0.5-yd)*M_PI;
42 for(c=0; c<nc; c++) {
43 xa = (r_8)(c+0.5)/(r_8)nc-0.5;
44 phi = xa*facteur+M_PI;
45 if ( (phi <= 2*M_PI) && (phi >= 0.) ) {
46 k = map.PixIndexSph(teta, phi);
47 mtx(l,c) = map(k);
48 }
49 }
50 }
51
52}
53
54int main(int narg, char* arg[])
55{
56 double teta,phi;
57 double gmoy=0., gsig=0.;
58
[768]59 SophyaInit();
[591]60 InitTim(); // Initializing the CPU timer
61 if ((narg > 1) && (strcmp(arg[1],"-h") == 0) ) {
[857]62 cout << " tspm [HEALPix_M=32] : HEALPix Spherical Map Test " << endl;
[591]63 exit(0);
64 }
65
66 int m=32;
67 if (narg >1) m = atoi(arg[1]);
[857]68 cout << " ===== HEALPix Spherical Map Test M= " << m << endl;
[591]69
[1119]70 try {
71
[591]72 POutPersist s("spheres.ppf");
73 string nomobj;
74
75 {
[857]76 SphereHEALPix<double> sph(m);
[591]77
78 cout << "Filling spherical map NPixels= " << sph.NbPixels() << endl;
79 for (int j=0;j<sph.NbPixels();j++)
80 {
81 sph.PixThetaPhi(j,teta,phi);
82 sph(j)= 0.2* cos(3.*teta)*sin(8*phi);
83 }
84 PrtTim("End of Fill ");
85
86 {
[857]87 FIO_SphereHEALPix<double> fiog(&sph) ;
[591]88 nomobj = "sphg1";
89 fiog.Write(s, nomobj);
[857]90 cout << "SphMap SphereHEALPix<double> written to POutPersist with name " << nomobj << endl;
[591]91 }
92
93
94 TMatrix<double> mtx(3*m, 6*m);
[1119]95 cout << " Project_Mol(sph, mtx) " << endl;
[591]96 Project_Mol(sph, mtx);
[1119]97 {
98 cout << " Writing to FITS prjmol1.fits " << endl;
99 FITS_TArray<double> fios(mtx);
100 fios.Write("prjmol1.fits");
101 }
[591]102
103 // Computing mean and sigma on the sphere
104 MeanSig(sph, gmoy, gsig);
105 cout << "SphMap Mean= " << gmoy << " Sigma = " << gsig << endl;
106 PrtTim("End of Mean-Sig ");
107 }
[606]108
[591]109 {
[857]110 SphereHEALPix<float> sph(m);
[591]111
112 cout << "Filling spherical map2 NPixels= " << sph.NbPixels() << endl;
113 for (int j=0;j<sph.NbPixels();j++)
114 {
115 sph.PixThetaPhi(j,teta,phi);
116 if (teta < 0.3) sph(j) = 30.;
117 else if ((teta>1.4) && (teta<1.6) ) sph(j) = 20.;
118 else {
119 if (phi < 2.) sph(j) = 2.;
120 else if (phi > 3.) sph(j) = 5.;
121 else sph(j) = 0.;
122 }
123 }
124 PrtTim("End of Fill2 ");
125
126 {
[857]127 FIO_SphereHEALPix<float> fiog(&sph) ;
[591]128 nomobj = "sphg2";
129 fiog.Write(s, nomobj);
[857]130 cout << "SphMap SphereHEALPix<float> written to POutPersist with name " << nomobj << endl;
[591]131 }
132
133
134 // On projete dans un fichier FITS
[606]135 {
[857]136 cout << "Test of Write/Read SphereHEALPix<float> to FITS (sphg_r4.fits) " << endl;
[1119]137 FITS_SphereHEALPix<r_4> fiosw(sph);
138 fiosw.Write("sphg_r4.fits");
139 }
140
141
142 SphereHEALPix<float> sphr;
143 {
144 FITS_SphereHEALPix<r_4> fiosr("sphg_r4.fits");
145 sphr = fiosr;
[857]146 cout << " Read from file - SphereHEALPix<float> NPixels= " << sphr.NbPixels() << endl;
[606]147 int ndiff = 0;
148 for(int k=0; k<sphr.NbPixels(); k++) {
149 if ( sphr(k) != sph(k) ) {
150 ndiff++;
151 if (ndiff < 20) cout << "!!!Diff: K= " << k << " SPHR= " << sphr(k) << " SPH= " << sph(k) << endl;
152 }
153 }
154 cout << " ReadFrom FITS NDiff = " << ndiff << " (should be zero = 0) " << endl;
155
156 }
157
158
159 TMatrix<float> mtx(3*m, 6*m);
[591]160 Project_Mol(sph, mtx);
[1119]161 {
162 cout << " Writing to FITS prjmol2.fits " << endl;
163 FITS_TArray<double> fios(mtx);
164 fios.Write("prjmol2.fits");
165 }
[591]166
167 // Computing mean and sigma on the sphere
168 MeanSig(sph, gmoy, gsig);
169 cout << "SphMap2 Mean= " << gmoy << " Sigma = " << gsig << endl;
170 PrtTim("End of Mean-Sig2 ");
171 }
172
173 {
174 SphereThetaPhi< complex<float> > sphc(m*10);
175
176 cout << "Filling spherical map3 SphereThetaPhi(complex) NPixels= " << sphc.NbPixels() << endl;
177 for (int j=0;j<sphc.NbPixels();j++)
178 {
179 sphc.PixThetaPhi(j,teta,phi);
180 if (teta < 0.3) sphc(j) = (30., drandpm1()*3.);
181 else if ((teta>1.4) && (teta<1.6) ) sphc(j) = (20., NorRand());
182 else {
183 if (phi < 2.) sphc(j) = 2.;
184 else if (phi > 3.) sphc(j) = 5.;
185 else sphc(j) = 0.;
186 }
187 }
188 PrtTim("End of Fill2 ");
189
190 {
191 FIO_SphereThetaPhi< complex<float> > fio(&sphc) ;
192 nomobj = "sphtp";
193 fio.Write(s, nomobj);
194 cout << "SphMap written to POutPersist with name " << nomobj << endl;
195 }
196 }
[1119]197 }
198 catch (PThrowable & exc) {
199 cerr << "tspm2: Catched Exception " << (string)typeid(exc).name()
200 << " - Msg= " << exc.Msg() << endl;
201 }
202 catch (...) {
203 cerr << "tspm2: some other exception was caught ! " << endl;
204 }
205
[591]206 cout << " ===== Fin de TSPM2_Test ======== " << endl;
207 return 0;
208}
Note: See TracBrowser for help on using the repository browser.