Changeset 3193 in Sophya for trunk/Cosmo/SimLSS/cmvdefsurv.cc
- Timestamp:
- Mar 21, 2007, 7:18:25 PM (19 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Cosmo/SimLSS/cmvdefsurv.cc
r3115 r3193 15 15 #include "planckspectra.h" 16 16 17 /* --- Check Peterson at al. astro-ph/0606104 v1 18 cmvdefsurv -z 0.0025 -x 1 -U 0.75,0.3,0.7,-1,1 -V 300 -O 400000,6000 -A 75 -M 6.156e9 -F 3 -2 1.5 19 --- */ 20 17 21 inline double rad2deg(double trad) {return trad/M_PI*180.;} 18 22 inline double rad2min(double trad) {return trad/M_PI*180.*60.;} … … 28 32 <<" -y adty,atylarg : idem selon y, si <=0 meme que x"<<endl 29 33 <<" -z dred,redlarg : resolution en redshift, largeur en redshift"<<endl 30 <<" -P : on donne -x -y -z en Mpc aulieu d\'angles et de redshift"<<endl 34 <<" -P : on donne -x -y -z en Mpc au lieu d\'angles et de redshift"<<endl 35 <<" -L lobewidth : taille du lobe d\'observation (FWHM) en arcmin (def= 1\')"<<endl 31 36 <<" -O surf,tobs : surface effective (m^2) et temps d\'observation (s)"<<endl 32 <<" -A T bruit : temperature de bruit(K)"<<endl37 <<" -A Tsys : temperature du system (K)"<<endl 33 38 <<" -S Tsynch,indnu : temperature (K) synch a 408 Mhz, index d\'evolution"<<endl 34 39 <<" (indnu==0 no evolution with freq.)"<<endl 35 <<" -M : masse de HI de reference (MSol), si <=0 mean schechter "<<endl40 <<" -M : masse de HI de reference (MSol), si <=0 mean schechter in pixel"<<endl 36 41 <<" -F : HI flux factor to be applied for our redshift"<<endl 37 <<" -1 : on ne mesure qu\'une polarisation"<<endl 42 <<" -V Vrot : largeur en vitesse (km/s) pour l\'elargissement doppler (def=300km/s)"<<endl 43 <<" -U h100,om0,ol0,w0,or0,flat : cosmology"<<endl 44 <<" -2 : two polarisations measured"<<endl 38 45 <<" redshift : redshift moyen du survey"<<endl 39 46 <<endl; … … 45 52 // WMAP 46 53 unsigned short flat = 0; 47 double h100=0.71, om0=0.267804, or0=7.9e-05, ol0=0.73,w0=-1.; 48 cout<<"\nh100="<<h100<<" Om0="<<om0<<" Or0="<<or0<<" Or0="<<or0<<" Ol0="<<ol0<<" w0="<<w0<<endl; 54 double h100=0.71, om0=0.267804, or0=7.9e-05*0., ol0=0.73,w0=-1.; 49 55 // Schechter 50 56 double h75 = h100 / 0.75; … … 61 67 int nx,ny,nz; 62 68 double redshift = 1., dred=0.01, redlarg=0.3; 63 double tobs = 3600., surfeff = 400000.; 64 double Tbruit=75.; 69 double tobs = 6000., surfeff = 400000.; 70 double lobewidth = 1.; // taille du lobe d'observation en arcmin 71 double Tsys=75.; 65 72 // a 408 MHz (Haslam) + evol index a -2.6 66 73 double Tsynch408=60., nuhaslam=0.408, indnu = -2.6; 67 74 double mhiref = -1.; // reference Mass en HI (def integ schechter) 68 75 double hifactor = 1.; 69 double facpolar = 1.; // si on ne mesure qu'un polarisation 0.5 76 double vrot = 300.; // largeur en vitesse (km/s) pour elargissement doppler 77 double facpolar = 0.5; // si on ne mesure les 2 polars -> 1.0 70 78 71 79 // --- Decodage arguments 72 80 char c; 73 while((c = getopt(narg,arg,"hP 1x:y:z:A:S:O:M:F:")) != -1) {81 while((c = getopt(narg,arg,"hP2x:y:z:A:S:O:M:F:V:U:L:")) != -1) { 74 82 switch (c) { 75 83 case 'P' : … … 88 96 sscanf(optarg,"%lf,%lf",&surfeff,&tobs); 89 97 break; 98 case 'L' : 99 sscanf(optarg,"%lf",&lobewidth); 100 break; 90 101 case 'A' : 91 sscanf(optarg,"%lf",&T bruit);102 sscanf(optarg,"%lf",&Tsys); 92 103 break; 93 104 case 'S' : … … 100 111 sscanf(optarg,"%lf",&hifactor); 101 112 break; 102 case '1' : 103 facpolar = 0.5; 113 case 'V' : 114 sscanf(optarg,"%lf",&vrot); 115 break; 116 case 'U' : 117 sscanf(optarg,"%lf,%lf,%lf,%lf,%u",&h100,&om0,&ol0,&w0,&flat); 118 break; 119 case '2' : 120 facpolar = 1.0; 104 121 break; 105 122 case 'h' : … … 107 124 usage(); return -1; 108 125 } 109 } 126 } 110 127 if(optind>=narg) {usage(); return-1;} 111 128 sscanf(arg[optind],"%lf",&redshift); … … 113 130 114 131 // --- Initialisation de la Cosmologie 132 cout<<"\nh100="<<h100<<" Om0="<<om0<<" Or0="<<or0<<" Or0=" 133 <<or0<<" Ol0="<<ol0<<" w0="<<w0<<" flat="<<flat<<endl; 115 134 cout<<"\n--- Cosmology for z = "<<redshift<<endl; 116 135 CosmoCalc univ(flat,true,2.*redshift); … … 118 137 univ.SetInteg(perc,dzinc,dzmax,glorder); 119 138 univ.SetDynParam(h100,om0,or0,ol0,w0); 139 univ.Print(0.); 120 140 univ.Print(redshift); 121 141 … … 258 278 cout<<"dang lumi = "<<dlum<<" in ["<<dlumlim[0]<<","<<dlumlim[1]<<"] Mpc"<<endl; 259 279 280 double slobe = lobewidth/2.35482; // sigma du lobe en arcmin 281 double lobecyl = sqrt(8.)*slobe; // diametre du lobe cylindrique equiv en arcmin 282 double lobearea = M_PI*lobecyl*lobecyl/4.; // en arcmin^2 (hypothese lobe gaussien) 283 cout<<"\nBeam FWHM = "<<lobewidth<<"\' -> sigma = "<<slobe<<"\' -> " 284 <<" Dcyl = "<<lobecyl<<"\' -> area = "<<lobearea<<" arcmin^2"<<endl; 285 double nlobes = rad2min(adtx)*rad2min(adty)/lobearea; 286 cout<<"Number of beams in one transversal pixel = "<<nlobes<<endl; 287 260 288 // --- Power emitted by HI 261 289 cout<<"\n--- Power from HI for M = "<<mhiref<<" Msol at "<<nuhiz<<" GHz"<<endl; … … 267 295 <<" in ["<<hifactor*FluxHI(mhiref,dlumlim[0]) 268 296 <<","<<hifactor*FluxHI(mhiref,dlumlim[1])<<"] W/m^2"<<endl; 269 double sfhi = fhi / (dnuhiz*1 .e+9) / Jansky2Watt_cst;297 double sfhi = fhi / (dnuhiz*1e9) / Jansky2Watt_cst; 270 298 cout<<"If spread over "<<dnuhiz<<" GHz, flux density = "<<sfhi<<" Jy"<<endl; 271 299 272 300 // --- Signal analysis 273 301 cout<<"\n--- Signal analysis"<<endl; 302 cout<<"Facteur polar = "<<facpolar<<endl; 303 274 304 PlanckSpectra planck(T_CMB_Par); 275 305 planck.SetApprox(1); // Rayleigh spectra … … 278 308 planck.SetTypSpectra(0); // radiance W/m^2/Sr/Hz 279 309 280 double hnu = h_Planck_Cst*(nuhiz*1.e+9); 281 cout<<"Facteur polar = "<<facpolar<<", h.nu="<<hnu<<" J"<<endl; 282 310 // Signal 283 311 double psig = facpolar * fhi * surfeff; 284 double esig = psig * tobs; 285 double nsig = esig / hnu; 286 double tsig = psig / k_Boltzman_Cst / (dnuhiz*1.e+9); 287 double ssig = psig / surfeff / (dnuhiz*1.e+9) / Jansky2Watt_cst; 288 cout<<"Signal("<<mhiref<<" Msol): P="<<psig<<" W -> E="<<esig<<" J -> "<<nsig<<" ph"<<endl; 312 double tsig = psig / k_Boltzman_Cst / (dnuhiz*1e9); 313 double ssig = psig / surfeff / (dnuhiz*1e9) / Jansky2Watt_cst; 314 cout<<"Signal("<<mhiref<<" Msol): P="<<psig<<" W"<<endl; 315 cout<<" flux density = "<<ssig<<" Jy (for Dnu="<<dnuhiz<<" GHz)"<<endl; 289 316 cout<<" Antenna temperature: tsig="<<tsig<<" K"<<endl; 290 cout<<" flux density = "<<ssig<<" Jy"<<endl; 291 292 double facnoise = facpolar * tobs * surfeff * angsol * (dnuhiz*1.e+9); 293 317 318 // Elargissement doppler de la raie a 21cm: dNu = vrot/C * Nu(21cm) / (1+z) 319 double doplarge = vrot / SpeedOfLight_Cst * nuhiz; 320 cout<<" Doppler width="<<doplarge*1.e3<<" MHz for rotation width of "<<vrot<<" km/s"<<endl; 321 if(doplarge>dnuhiz) { 322 cout<<"Warning: doppler width "<<doplarge<<" GHz > "<<dnuhiz<<" GHz redshift bin width"<<endl; 323 } 324 325 // Synchrotron 294 326 double tsynch = Tsynch408; 295 327 if(fabs(indnu)>1.e-50) tsynch *= pow(nuhiz/nuhaslam,indnu); 296 328 planck.SetTemperature(tsynch); 297 double psynch = facpolar * planck(nuhiz*1.e+9) * surfeff * angsol * (dnuhiz*1.e+9); 298 double esynch = psynch * tobs; 299 double nsynch = esynch / hnu; 300 double ssynch = psynch / surfeff / (dnuhiz*1.e+9) / Jansky2Watt_cst; 329 double psynch = facpolar * planck(nuhiz*1.e+9) * surfeff * angsol * (dnuhiz*1e9); 330 double ssynch = psynch / surfeff / (dnuhiz*1e9) / Jansky2Watt_cst; 301 331 cout<<"Synchrotron: T="<<Tsynch408<<" K ("<<nuhaslam<<" GHz), " 302 332 <<tsynch<<" K ("<<nuhiz<<" GHz)"<<endl 303 <<" P="<<psynch<<" W -> E="<<esynch<<" J -> "<<nsynch<<" ph"<<endl; 304 cout<<" flux density = "<<ssynch<<" Jy"<<endl; 305 333 <<" P="<<psynch<<" W"<<endl; 334 cout<<" flux density = "<<ssynch<<" Jy"<<endl; 335 336 // CMB 306 337 double tcmb = T_CMB_Par; 307 338 planck.SetTemperature(tcmb); 308 double pcmb = facpolar * planck(nuhiz*1.e+9) * surfeff * angsol * (dnuhiz*1.e+9); 309 double ecmb = pcmb * tobs; 310 double ncmb = ecmb / hnu; 339 double pcmb = facpolar * planck(nuhiz*1.e+9) * surfeff * angsol * (dnuhiz*1e9); 311 340 double scmb = pcmb / surfeff / (dnuhiz*1.e+9) / Jansky2Watt_cst; 312 cout<<"CMB: T="<<tcmb<<" K -> P="<<pcmb<<" W -> E="<<ecmb<<" J -> "<<ncmb<<" ph"<<endl;313 cout<<" flux density = "<<scmb<<" Jy"<<endl;341 cout<<"CMB: T="<<tcmb<<" K -> P="<<pcmb<<" W"<<endl; 342 cout<<" flux density = "<<scmb<<" Jy"<<endl; 314 343 315 344 // --- Noise analysis 316 345 cout<<"\n--- Noise analysis"<<endl; 317 double p bruit = k_Boltzman_Cst * Tbruit* (dnuhiz*1.e+9);318 double ebruit = pbruit * tobs;319 cout<<"Bruit: T="<<Tbruit<<" K, P="<<pbruit<<" W -> E="<<ebruit<<" J"<<endl; 320 321 double seq = (1./facpolar) * k_Boltzman_Cst * Tbruit / surfeff/Jansky2Watt_cst;322 cout<<" \nSystem equivalent flux density: "<<seq<<" Jy"<<endl;323 324 double slim = seq / sqrt(2.*(dnuhiz*1.e+9)*tobs);325 cout<<"Observation flux density limit: "<<slim<<" Jy "<<endl;346 double psys = k_Boltzman_Cst * Tsys * (dnuhiz*1.e+9); 347 cout<<"Noise: T="<<Tsys<<" K, P="<<psys<<" W (for Dnu="<<dnuhiz<<" GHz)"<<endl; 348 349 double slim = 2. * k_Boltzman_Cst * Tsys / surfeff 350 / sqrt(2.*(dnuhiz*1.e+9)*tobs) /Jansky2Watt_cst; 351 cout<<"Observation flux density limit: "<<slim<<" Jy (in 1 lobe)"<<endl; 352 353 slim = slim * sqrt(nlobes); 354 cout<<"Observation flux density limit: "<<slim<<" Jy (in "<<nlobes<<" lobes)"<<endl; 326 355 327 356 double SsN = ssig/slim;
Note:
See TracChangeset
for help on using the changeset viewer.