source: Sophya/trunk/SophyaProg/PMixer/tgsky.cc@ 905

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

Sophie: adding the dipole here also

File size: 3.8 KB
Line 
1#include "machdefs.h"
2#include <iostream.h>
3#include <math.h>
4
5#include "sambainit.h"
6#include "spherehealpix.h"
7#include "fiospherehealpix.h"
8#include "fitsioserver.h"
9#include "nbrandom.h"
10#include "bruit.h"
11#include "timing.h"
12
13// Test program to generate different type of random skies
14template <class T>
15void MeanSig(PixelMap<T> const & map, double& gmoy, double& gsig);
16
17// ------------- Main program --------------
18int main(int narg, char* arg[])
19{
20 double teta,phi;
21 double gmoy=0., gsig=0.;
22
23 SophyaInit();
24 InitTim(); // Initializing the CPU timer
25 if ((narg < 5) || ((narg>1) && (strcmp(arg[1],"-h") == 0)) ) {
26 cout << " tgsky : Generation of random skies " << endl;
27 cout << " Usage: tgsky NSide TypSky Params FitsFileName [PPFName] " << endl;
28 cout << " - TypSky = 0 Params= m,sig , Gaussian(m,sig) " << endl;
29 cout << " - TypSky = 1 Params= m,sig , OOFNoise(sig) + m" << endl;
30 cout << " - TypSky = 2 Params= K,a,b,m K*cos(a*teta)*sin(b*phi)+m" << endl;
31 cout << " - TypSky = 3 Params= theta,phi DIPOLE" << endl;
32 exit(0);
33 }
34
35 int ns = atoi(arg[1]);
36 SphereHEALPix<float> sph(ns);
37
38 cout << "Filling SphereHEALPix<float> NSide= " << ns
39 << " NPixels= " << sph.NbPixels() << endl;
40
41 int typ = atoi(arg[2]);
42 double m,s,a,b,K;
43 double Theta,Phi;
44 Theta = 0.;
45 Phi = 0.;
46 m = 0.;
47 s = 1.;
48 a = b = 1.;
49 K = 1.;
50 if ((typ < 0) || (typ > 3)) typ = 0;
51 if (typ < 2) {
52 sscanf(arg[3],"%lg,%lg",&m,&s);
53 cout << " TypSky= " << typ << " m= " << m << " sig= " << s << endl;
54 if (typ == 1) cout << " ---> OOFNoise() " << endl;
55 else cout << " ---> NoiseGenerator() " << endl;
56 }
57 else if(typ==2) {
58 sscanf(arg[3],"%lg,%lg,%lg,%lg",&K,&a,&b,&m);
59 cout << " TypSky= " << typ << " K= " << m << " a= " << a << " b="
60 << b << " m= " << m << endl;
61 cout << " ---> K * cos(a*teta) * sin(b*teta) + m" << endl;
62 }
63 else if(typ==3) {
64 sscanf(arg[3],"%lg,%lg",&Theta,&Phi);
65 cout << " TypSky= " << typ << " Theta= " << Theta << " phi= " << Phi ;
66 cout << " ---> DIPOLE " << endl;
67 }
68
69 PrtTim("End of Init ");
70
71 if (typ == 2) {
72 for (int j=0;j<sph.NbPixels();j++) {
73 sph.PixThetaPhi(j,teta,phi);
74 sph(j)= K * cos(a*teta)*sin(b*phi) + m;
75 }
76 }
77 else if(typ==3)
78 {
79 UnitVector vd(Theta,Phi);
80 UnitVector vc(Theta,Phi);
81 for(int i=0; i<sph.NbPixels(); i++)
82 {
83 double Thetar,Phir;
84 sph.PixThetaPhi(i,Thetar,Phir);
85 vc.SetThetaPhi(Thetar, Phir);
86 sph(i) += vd.Psc(vc);
87 }
88 }
89 else{
90 NoiseGenerator * ng;
91 if (typ == 0) ng = new NoiseGenerator(s);
92 else ng = new OOFNoise(s);
93 for (int j=0;j<sph.NbPixels();j++) sph(j) = ng->Noise()+m;
94 delete ng;
95 }
96 PrtTim("End of Fill ");
97
98 // Computing mean and sigma on the sphere
99 MeanSig(sph, gmoy, gsig);
100 cout << "SphereHEALPix<float> Mean= " << gmoy << " Sigma = " << gsig << endl;
101 PrtTim("End of Mean-Sig ");
102
103 if (narg > 5) {
104 POutPersist s(arg[5]);
105 FIO_SphereHEALPix<float> fiog(&sph) ;
106 fiog.Write(s);
107 cout << "SphereHEALPix<float> written to POutPersist file"
108 << (string)(arg[5]) << endl;
109 PrtTim("End of WritePPF ");
110 }
111
112
113
114 FitsIoServer fios;
115 fios.save(sph, arg[4]);
116 cout << "SphereHEALPix<float> written to FITS file " << (string)(arg[4]) << endl;
117 PrtTim("End of WriteFITS ");
118
119 cout << " ============ End of tgsky program ======== " << endl;
120 return 0;
121}
122
123/* Nouvelle-Methode */
124template <class T>
125void MeanSig(PixelMap<T> const & map, double& gmoy, double& gsig)
126
127{
128 gmoy=0.;
129 gsig = 0.;
130 double valok;
131 for(int k=0; k<map.NbPixels(); k++) {
132 valok = map(k);
133 gmoy += valok; gsig += valok*valok;
134 }
135 gmoy /= (double)map.NbPixels();
136 gsig = gsig/(double)map.NbPixels() - gmoy*gmoy;
137 if (gsig >= 0.) gsig = sqrt(gsig);
138}
Note: See TracBrowser for help on using the repository browser.