source: Sophya/trunk/Cosmo/SimLSS/cmvtvarspec.cc@ 3485

Last change on this file since 3485 was 3348, checked in by cmv, 18 years ago
  • definition des options par enum
  • mise en variable privee du rayon R du filtre de VarianceSpectrum Elle disparait des arguments des methodes: Variance FindMaximum FindLimits

cmv 11/10/2007

File size: 5.4 KB
Line 
1#include "sopnamsp.h"
2#include "machdefs.h"
3#include <iostream>
4#include <stdlib.h>
5#include <stdio.h>
6#include <string.h>
7#include <math.h>
8#include <unistd.h>
9#include "timing.h"
10#include "ntuple.h"
11
12#include "constcosmo.h"
13#include "pkspectrum.h"
14
15void usage(void);
16void usage(void)
17{
18 cout<<"cmvtvarspec -z zref -R R -n as,ns -k kmin,kmax -i eps,npt,fracmax"<<endl;
19}
20
21
22int main(int narg,char *arg[])
23{
24 double ob0 = 0.0444356;
25 // -- WMAP
26 double h100=0.71, om0=0.267804, ol0=0.73;
27 // -- ouvert matter only
28 //double h100=0.71, om0=0.3, ol0=0.;
29 // -- plat matter only
30 //double h100=0.71, om0=1., ol0=0.;
31
32 double ns = 1., as = 1.;
33
34 double zref = 0.5;
35 double R=8./h100;
36
37 double kmin=1e-5,kmax=1000.;
38 int npt = 10000;
39 double eps=1.e-3, fracmax=1e-4;
40
41 char c;
42 while((c = getopt(narg,arg,"hz:R:n:k:i:")) != -1) {
43 switch (c) {
44 case 'z' :
45 sscanf(optarg,"%lf",&zref);
46 break;
47 case 'R' :
48 sscanf(optarg,"%lf",&R);
49 if(R<0.) R = -R/h100;
50 break;
51 case 'n' :
52 sscanf(optarg,"%lf,%lf",&as,&ns);
53 break;
54 case 'k' :
55 sscanf(optarg,"%lf,%lf",&kmin,&kmax);
56 break;
57 case 'i' :
58 sscanf(optarg,"%lf,%d,%lf",&eps,&npt,&fracmax);
59 break;
60 case 'h' :
61 default :
62 usage(); return -1;
63 }
64 }
65
66 double Rg=R/sqrt(5.);
67 double lkmin=log10(kmin), lkmax=log10(kmax), dlk=(lkmax-lkmin)/npt;
68
69 cout<<"zref="<<zref<<endl;
70 cout<<"as="<<as<<" ns="<<ns<<endl;
71 cout<<"R="<<R<<", Rg="<<Rg<<endl;
72 cout<<"kmin="<<kmin<<" ("<<lkmin<<"), kmax="<<kmax<<" ("<<lkmax<<")"
73 <<", dlk="<<dlk<<" npt="<<npt<<endl;
74 cout<<"eps="<<eps<<" fracmax="<<fracmax<<endl;
75
76 //-----------------------------------------------------------------
77 InitialSpectrum pkini(ns,as);
78
79 TransfertEisenstein tf(h100,om0-ob0,ob0,T_CMB_Par,false);
80 //tf.SetNoOscEnv(2);
81
82 GrowthFactor d1(om0,ol0);
83
84 PkSpectrum0 pk0(pkini,tf);
85
86 PkSpectrumZ pkz(pk0,d1,zref);
87
88 //-----------------------------------------------------------------
89 double k1,k2;
90 int rc = 0;
91 //----
92 cout<<endl<<"Filtrage top_hat"<<endl;
93 VarianceSpectrum varpk_th(pkz,R,VarianceSpectrum::TOPHAT);
94 double kfind_th = varpk_th.FindMaximum(kmin,kmax,eps);
95 double pkmax_th = varpk_th(kfind_th);
96 cout<<"kfind_th = "<<kfind_th<<" ("<<log10(kfind_th)<<"), integrand="<<pkmax_th<<endl;
97 k1=kmin, k2=kmax;
98 rc = varpk_th.FindLimits(pkmax_th*fracmax,k1,k2,eps);
99 cout<<"limit_th: rc="<<rc<<" : "<<k1<<" ("<<log10(k1)<<") , "<<k2<<" ("<<log10(k2)<<")"<<endl;
100
101 varpk_th.SetInteg(0.01,dlk,-1.,4);
102 cout<<"varpk_th="<<varpk_th.Variance(k1,k2)<<endl;
103
104 //----
105 cout<<endl<<"Filtrage gaussien"<<endl;
106 VarianceSpectrum varpk_ga(pkz,Rg,VarianceSpectrum::GAUSSIAN);
107 double kfind_ga = varpk_ga.FindMaximum(kmin,kmax,eps);
108 double pkmax_ga = varpk_ga(kfind_ga);
109 cout<<"kfind_ga = "<<kfind_ga<<" -> "<<log10(kfind_ga)<<", integrand="<<pkmax_ga<<endl;
110 k1=kmin, k2=kmax;
111 rc = varpk_ga.FindLimits(pkmax_ga*fracmax,k1,k2,eps);
112 cout<<"limit_ga: rc="<<rc<<" : "<<k1<<" ("<<log10(k1)<<") , "<<k2<<" ("<<log10(k2)<<")"<<endl;
113
114 varpk_ga.SetInteg(0.01,dlk,-1.,4);
115 cout<<"varpk_ga="<<varpk_ga.Variance(k1,k2)<<endl;
116
117 //----
118 cout<<endl<<"Filtrage 1 (integrale du spectre)"<<endl;
119 VarianceSpectrum varpk_int(pkz,Rg,VarianceSpectrum::NOFILTER);
120 double kfind_int = varpk_int.FindMaximum(kmin,kmax,eps);
121 double pkmax_int = varpk_int(kfind_int);
122 cout<<"kfind_int = "<<kfind_int<<" -> "<<log10(kfind_int)<<", integrand="<<pkmax_int<<endl;
123 k1=kmin, k2=kmax;
124 rc = varpk_int.FindLimits(pkmax_int*fracmax,k1,k2,eps);
125 cout<<"limit_int: rc="<<rc<<" : "<<k1<<" ("<<log10(k1)<<") , "<<k2<<" ("<<log10(k2)<<")"<<endl;
126
127 varpk_int.SetInteg(0.01,dlk,-1.,4);
128 cout<<"varpk_int="<<varpk_int.Variance(k1,k2)<<endl;
129
130//-----------------------------------------------------------------
131 const int n = 2;
132 char *vname[n] = {"k","pk"};
133 NTuple nt(n,vname);
134 double xnt[n];
135
136 for(double lk=lkmin;lk<lkmax+dlk/2.;lk+=dlk) {
137 double k = pow(10.,lk);
138 xnt[0] = k;
139 xnt[1] = pkz(k);
140 nt.Fill(xnt);
141 }
142
143 cout<<">>>> Ecriture"<<endl;
144 string tag = "cmvtvarspec.ppf"; POutPersist pos(tag); tag = "nt"; pos.PutObject(nt,tag);
145
146 return 0;
147}
148
149/*
150openppf cmvtvarspec.ppf
151
152#### Spectre a z
153n/plot nt.pk%log10(k) ! ! "nsta crossmarker3"
154
155# L'approximation pour j1(x) (top-hat) et la gaussienne equivalente
156set l1 1e-6
157set l2 10
158set j1sx pow(3*(sin(x)-x*cos(x))/(x*x*x),2.)
159set j1sxa3 (1.-x*x/5.)
160set j1sxa5 (1.-x*x/5.*(1.-3.*x*x/35.))
161set j1sxa7 (1.-x*x/5.*(1.-3.*x*x/35.*(1.-4.*x*x/81.)))
162func $j1sx $l1 $l2 1000
163func $j1sxa3 $l1 $l2 1000 "red same"
164func $j1sxa5 $l1 $l2 1000 "blue same"
165func $j1sxa7 $l1 $l2 1000 "orange same"
166set gauss pow(exp(-(x/sqrt(5.))*(x/sqrt(5.))/2.),2.)
167func $gauss $l1 $l2 1000 "green same"
168
169func $j1sx-$j1sxa3 $l1 $l2 1000 "red"
170func $j1sx-$j1sxa5 $l1 $l2 1000 "blue same"
171func $j1sx-$j1sxa7 $l1 $l2 1000 "orange same"
172func $j1sx-$gauss $l1 $l2 1000 "green same"
173addline $l1 0 $l2 0
174
175# la fonction "Pk" a integrer
176zone
177set D (k*k*pk/(2.*M_PI*M_PI))
178n/plot nt.$D%log10(k) ! ! "nsta crossmarker3"
179
180# La fonction a integrer en dk lineaire (top-hat et gaussien)
181set R 10
182set RG ($R/sqrt(5.))
183set x (k*$R)
184set j1sx pow(3*(sin($x)-$x*cos($x))/($x*$x*$x),2.)
185set y (k*$RG)
186set gauss pow(exp(-$y*$y/2.),2.)
187
188n/plot nt.$D*$j1sx%log10(k) ! ! "nsta crossmarker3"
189n/plot nt.$D*$gauss%log10(k) ! ! "nsta crossmarker3 same red"
190
191# La fonction a integrer en d(log(x)) (top-hat et gaussien)
192# c'est ce que fait Variance()
193n/plot nt.k*$D*$j1sx%log10(k) ! ! "nsta crossmarker3"
194n/plot nt.k*$D*$gauss%log10(k) ! ! "nsta crossmarker3 same red"
195n/plot nt.k*$D%log10(k) ! ! "nsta crossmarker3 same blue"
196
197*/
Note: See TracBrowser for help on using the repository browser.