Changeset 3336 in Sophya for trunk/Cosmo/SimLSS/cmvdefsurv.cc
- Timestamp:
- Oct 3, 2007, 7:22:13 PM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Cosmo/SimLSS/cmvdefsurv.cc
r3288 r3336 14 14 #include "planckspectra.h" 15 15 16 /* --- Check Peterson at al. astro-ph/0606104 v1 16 /* --- Check Peterson at al. astro-ph/0606104 v1 (pb facteur sqrt(2) sur S/N !) 17 17 cmvdefsurv -U 0.75,0.3,0.7,-1,1 -V 300 -z 0.0025,0.2,Z -x 1,90,A -O 400000,6000 -N 75 -M 6.156e9 -F 3 -2 1.5 18 18 --- */ … … 31 31 <<" -x adtx,atxlarg : resolution et largeur dans le plan transverse selon X"<<endl 32 32 <<" -y adty,atylarg : idem selon Y, si <=0 meme que X"<<endl 33 <<" -z dred,redlarg : resolution et largeur sur la ligne de visee"<<endl33 <<" -z dred,redlarg : resolution et largeur sur la ligne de visee"<<endl 34 34 <<"-- Unites pour X-Y:"<<endl 35 35 <<" \'A\' : en angles (pour X-Y) : resolution=ArcMin, largeur=Degre (defaut)"<<endl … … 44 44 <<" Si lobewidth<=0 : l'angle solide du lobe = celui du pixel"<<endl 45 45 <<" Si freqlob<=0 : la frequence de reference est celle du redshift etudie"<<endl 46 <<" Si freqlob absent : la frequence de reference 1.4 GHz"<<endl 46 47 <<" -2 : two polarisations measured"<<endl 47 48 <<" -M : masse de HI de reference (MSol), si <=0 mean schechter in pixel"<<endl … … 89 90 double hifactor = 1.; 90 91 double vrot = 300.; // largeur en vitesse (km/s) pour elargissement doppler 91 double facpolar = 0.5; // si on nemesure les 2 polars -> 1.092 double facpolar = 0.5; // si on mesure les 2 polars -> 1.0 92 93 double lflux_agn = -3.; 93 94 … … 319 320 cout<<"dang lumi = "<<dlum<<" in ["<<dlumlim[0]<<","<<dlumlim[1]<<"] Mpc"<<endl; 320 321 321 double lobewidth = lobewidth0; // ArcMin 322 if(lobefreq0<=0.) lobefreq0 = nuhiz*1.e3; // MHz 323 // La taille angulaire du lobe change avec la frequence donc avec le redshift 324 lobewidth *= lobefreq0/(nuhiz*1.e3); 325 cout<<"\n--- Lobe: width="<<lobewidth0<<" pour "<<lobefreq0<<" MHz"<<endl 326 <<" changed to "<<lobewidth<<" pour "<<nuhiz*1.e3<<" MHz"<<endl; 327 double slobe = lobewidth/2.35482; // sigma du lobe en arcmin 328 double lobecyl = sqrt(8.)*slobe; // diametre du lobe cylindrique equiv en arcmin 329 double lobearea = M_PI*lobecyl*lobecyl/4.; // en arcmin^2 (hypothese lobe gaussien) 330 double nlobes = rad2min(adtx)*rad2min(adty)/lobearea; 331 if(lobewidth<=0.) nlobes = 1.; 332 cout<<"Beam FWHM = "<<lobewidth<<"\' -> sigma = "<<slobe<<"\' -> " 333 <<" Dcyl = "<<lobecyl<<"\' -> area = "<<lobearea<<" arcmin^2"<<endl; 334 cout<<"Number of beams in one transversal pixel = "<<nlobes<<endl; 322 double nlobes = 1.; 323 if(lobewidth0>0.) { 324 double lobewidth = lobewidth0; // ArcMin 325 if(lobefreq0<=0.) lobefreq0 = nuhiz*1.e3; // MHz 326 // La taille angulaire du lobe change avec la frequence donc avec le redshift 327 lobewidth *= lobefreq0/(nuhiz*1.e3); 328 cout<<"\n--- Lobe: width="<<lobewidth0<<" pour "<<lobefreq0<<" MHz"<<endl 329 <<" changed to "<<lobewidth<<" pour "<<nuhiz*1.e3<<" MHz"<<endl; 330 double slobe = lobewidth/2.35482; // sigma du lobe en arcmin 331 double lobecyl = sqrt(8.)*slobe; // diametre du lobe cylindrique equiv en arcmin 332 double lobearea = M_PI*lobecyl*lobecyl/4.; // en arcmin^2 (hypothese lobe gaussien) 333 nlobes = rad2min(adtx)*rad2min(adty)/lobearea; 334 cout<<"Beam FWHM = "<<lobewidth<<"\' -> sigma = "<<slobe<<"\' -> " 335 <<" Dcyl = "<<lobecyl<<"\' -> area = "<<lobearea<<" arcmin^2"<<endl; 336 cout<<"Number of beams in one transversal pixel = "<<nlobes<<endl; 337 } 335 338 336 339 // --- Power emitted by HI … … 360 363 double tsig = psig / k_Boltzman_Cst / (dnuhiz*1e9); 361 364 double ssig = psig / surfeff / (dnuhiz*1e9) / Jansky2Watt_cst; 362 cout<<" Signal("<<mhiref<<" Msol): P="<<psig<<" W"<<endl;365 cout<<"\nSignal("<<mhiref<<" Msol): P="<<psig<<" W"<<endl; 363 366 cout<<" flux density = "<<ssig<<" Jy (for Dnu="<<dnuhiz<<" GHz)"<<endl; 364 367 cout<<" Antenna temperature: tsig="<<tsig<<" K"<<endl; … … 378 381 double psynch = facpolar * planck(nuhiz*1.e+9) * surfeff * angsol * (dnuhiz*1e9); 379 382 double ssynch = psynch / surfeff / (dnuhiz*1e9) / Jansky2Watt_cst; 380 cout<<" Synchrotron: T="<<Tsynch408<<" K ("<<nuhaslam<<" GHz), "383 cout<<"\nSynchrotron: T="<<Tsynch408<<" K ("<<nuhaslam<<" GHz), " 381 384 <<tsynch<<" K ("<<nuhiz<<" GHz)"<<endl 382 385 <<" P="<<psynch<<" W for pixel"<<endl; … … 388 391 double pcmb = facpolar * planck(nuhiz*1.e+9) * surfeff * angsol * (dnuhiz*1e9); 389 392 double scmb = pcmb / surfeff / (dnuhiz*1.e+9) / Jansky2Watt_cst; 390 cout<<" CMB: T="<<tcmb<<" K -> P="<<pcmb<<" W for pixel"<<endl;393 cout<<"\nCMB: T="<<tcmb<<" K -> P="<<pcmb<<" W for pixel"<<endl; 391 394 cout<<" flux density = "<<scmb<<" Jy for pixel solid angle"<<endl; 392 395 … … 394 397 double flux_agn = pow(10.,lflux_agn); 395 398 double mass_agn = FluxHI2Msol(flux_agn*Jansky2Watt_cst,dlum); 396 cout<<" AGN: log10(S_agn)="<<lflux_agn<<" -> S_agn="399 cout<<"\nAGN: log10(S_agn)="<<lflux_agn<<" -> S_agn=" 397 400 <<flux_agn<<" Jy -> "<<mass_agn<<" equiv. Msol/Hz"<<endl; 398 401 double flux_agn_pix = flux_agn*(dnuhiz*1e9); … … 402 405 <<" -> "<<mass_agn_pix<<" Msol -> log10 = "<<lmass_agn_pix<<endl; 403 406 407 // --- 404 408 // --- Noise analysis 405 cout<<"\n--- Noise analysis"<<endl; 409 // --- 410 // Ae = surface d'un telescope elementaire 411 // N = nombre de telescopes dans l'interferometre (Atot = N*Ae) 412 // Slim = 2 * k * Tsys / [ Ae * Sqrt(2*N(N-1)/2 *dnu*Tobs) ] 413 // = 2 * k * Tsys / [ Atot/N * Sqrt(2*N(N-1)/2*dnu*Tobs) ] 414 // = 2 * k * Tsys / [ Atot * Sqrt((N-1)/N *dnu*Tobs) ] 415 // Interferometre a deux antennes: 416 // Slim = 2 * k * Tsys / [ Atot * Sqrt(1/2 *dnu*Tobs) ] 417 // Interferometre a N antennes (N grand): 418 // Slim -> 2 * k * Tsys / [ Atot * Sqrt(dnu*Tobs) ] 419 // C'est aussi la formule pour un telescope unique 420 // - 421 // Ces formules sont valables si on mesure 1 polarisation. 422 // Si on mesure 2 polarisations: 423 // le signal (ssig) est multiplie par 2 (facpolar=1 au lieu de 0.5) 424 // mais on le lit avec 2 chaines electroniques differentes 425 // -> le gain n'est que de sqrt(2) 426 cout<<"\n---\n--- Noise analysis \n---"<<endl; 406 427 double psys = k_Boltzman_Cst * Tsys * (dnuhiz*1.e+9); 407 428 cout<<"Noise: T="<<Tsys<<" K, P="<<psys<<" W (for Dnu="<<dnuhiz<<" GHz)"<<endl; 408 429 409 double slim = 2. * k_Boltzman_Cst * Tsys / surfeff 410 / sqrt(2.*(dnuhiz*1.e+9)*tobs) /Jansky2Watt_cst; 411 cout<<"Observation flux density limit: "<<slim<<" Jy (in 1 lobe)"<<endl; 412 413 double slim_nl = slim * sqrt(nlobes); 414 cout<<"Observation flux density limit: "<<slim_nl<<" Jy (in "<<nlobes<<" lobes)"<<endl; 415 416 double SsN = ssig/slim; 417 cout<<"\nSignal to noise ratio = "<<SsN<<" (1 lobe)"<<endl; 418 double SsN_nl = ssig/slim_nl; 419 cout<<"\nSignal to noise ratio = "<<SsN_nl<<" ("<<nlobes<<" lobes)"<<endl; 420 421 double smass = mhiref/ssig*slim; 422 cout<<"\nSigma noise equivalent = "<<smass<<" Msol (1 lobe)"<<endl; 423 double smass_nl = mhiref/ssig*slim_nl; 424 cout<<"\nSigma noise equivalent = "<<smass_nl<<" Msol ("<<nlobes<<" lobes)"<<endl; 430 double slim,slim_nl,SsN,SsN_nl,smass,smass_nl; 431 cout<<"...Computation assume that noise dominate the signal."<<endl; 432 433 double facpolarbruit = 1.; 434 if(fabs(facpolar-1.)<0.01) { 435 facpolarbruit = sqrt(2.); 436 cout<<"...Assuming 2 polarisations measurements with 2 different electronics."<<endl; 437 } 438 439 //--- 440 cout<<"\n...Observation limits for a 2 telescope interferometer (with complex correlator)"<<endl 441 <<" (sensitivity is given for real or complex correlator output)"<<endl; 442 slim = 2. * k_Boltzman_Cst * Tsys / surfeff 443 / sqrt(0.5*(dnuhiz*1.e+9)*tobs) /Jansky2Watt_cst; 444 slim *= facpolarbruit; 445 SsN = ssig/slim; 446 smass = mhiref/ssig*slim; 447 cout<<"for 1 lobe:"<<endl 448 <<" Flux = "<<slim<<" Jy"<<endl 449 <<" S/N = "<<SsN<<endl 450 <<" Mass HI = "<<smass<<" Msol"<<endl; 451 slim_nl = slim * sqrt(nlobes); 452 SsN_nl = ssig/slim_nl; 453 smass_nl = mhiref/ssig*slim_nl; 454 cout<<"for "<<nlobes<<" lobes:"<<endl 455 <<" Flux = "<<slim_nl<<" Jy"<<endl 456 <<" S/N = "<<SsN_nl<<endl 457 <<" Mass HI = "<<smass_nl<<" Msol"<<endl; 458 459 //--- 460 cout<<"\n...Observation limits for a N (large) telescope interferometer (with complex correlator)"<<endl 461 <<" (weak source limit sensitivity in a synthetised image)"<<endl 462 <<" (Also valid for 1 single antenna telescope)"<<endl; 463 slim = 2. * k_Boltzman_Cst * Tsys / surfeff 464 / sqrt((dnuhiz*1.e+9)*tobs) /Jansky2Watt_cst; 465 slim *= facpolarbruit; 466 SsN = ssig/slim; 467 smass = mhiref/ssig*slim; 468 cout<<"for 1 lobe:"<<endl 469 <<" Flux = "<<slim<<" Jy"<<endl 470 <<" S/N = "<<SsN<<endl 471 <<" Mass HI = "<<smass<<" Msol"<<endl; 472 slim_nl = slim * sqrt(nlobes); 473 SsN_nl = ssig/slim_nl; 474 smass_nl = mhiref/ssig*slim_nl; 475 cout<<"for "<<nlobes<<" lobes:"<<endl 476 <<" Flux = "<<slim_nl<<" Jy"<<endl 477 <<" S/N = "<<SsN_nl<<endl 478 <<" Mass HI = "<<smass_nl<<" Msol"<<endl; 425 479 426 480 return 0;
Note:
See TracChangeset
for help on using the changeset viewer.