Changeset 3336 in Sophya for trunk/Cosmo/SimLSS/cmvdefsurv.cc


Ignore:
Timestamp:
Oct 3, 2007, 7:22:13 PM (18 years ago)
Author:
cmv
Message:

modifs calcul bruit, mise a niveau cmv 03/10/2007

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Cosmo/SimLSS/cmvdefsurv.cc

    r3288 r3336  
    1414#include "planckspectra.h"
    1515
    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 !)
    1717cmvdefsurv -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
    1818 --- */
     
    3131      <<" -x adtx,atxlarg : resolution et largeur dans le plan transverse selon X"<<endl
    3232      <<" -y adty,atylarg : idem selon Y, si <=0 meme que X"<<endl
    33       <<" -z dred,redlarg : resolution et largeursur la ligne de visee"<<endl
     33      <<" -z dred,redlarg : resolution et largeur sur la ligne de visee"<<endl
    3434      <<"-- Unites pour X-Y:"<<endl
    3535      <<"   \'A\' : en angles (pour X-Y)     : resolution=ArcMin, largeur=Degre (defaut)"<<endl
     
    4444      <<"            Si lobewidth<=0 : l'angle solide du lobe = celui du pixel"<<endl
    4545      <<"            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
    4647      <<" -2 : two polarisations measured"<<endl
    4748      <<" -M  : masse de HI de reference (MSol), si <=0 mean schechter in pixel"<<endl
     
    8990 double hifactor = 1.;
    9091 double vrot = 300.; // largeur en vitesse (km/s) pour elargissement doppler
    91  double facpolar = 0.5; // si on ne mesure les 2 polars -> 1.0
     92 double facpolar = 0.5; // si on mesure les 2 polars -> 1.0
    9293 double lflux_agn = -3.;
    9394
     
    319320 cout<<"dang lumi = "<<dlum<<" in ["<<dlumlim[0]<<","<<dlumlim[1]<<"] Mpc"<<endl;
    320321
    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 }
    335338
    336339 // --- Power emitted by HI
     
    360363 double tsig = psig / k_Boltzman_Cst / (dnuhiz*1e9);
    361364 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;
    363366 cout<<"     flux density = "<<ssig<<" Jy  (for Dnu="<<dnuhiz<<" GHz)"<<endl;
    364367 cout<<"     Antenna temperature: tsig="<<tsig<<" K"<<endl;
     
    378381 double psynch = facpolar * planck(nuhiz*1.e+9) * surfeff * angsol * (dnuhiz*1e9);
    379382 double ssynch = psynch / surfeff / (dnuhiz*1e9) / Jansky2Watt_cst;
    380  cout<<"Synchrotron: T="<<Tsynch408<<" K ("<<nuhaslam<<" GHz), "
     383 cout<<"\nSynchrotron: T="<<Tsynch408<<" K ("<<nuhaslam<<" GHz), "
    381384     <<tsynch<<" K ("<<nuhiz<<" GHz)"<<endl
    382385     <<"             P="<<psynch<<" W for pixel"<<endl;
     
    388391 double pcmb = facpolar * planck(nuhiz*1.e+9) * surfeff * angsol * (dnuhiz*1e9);
    389392 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;
    391394 cout<<"                       flux density = "<<scmb<<" Jy for pixel solid angle"<<endl;
    392395
     
    394397 double flux_agn = pow(10.,lflux_agn);
    395398 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="
    397400     <<flux_agn<<" Jy -> "<<mass_agn<<" equiv. Msol/Hz"<<endl;
    398401 double flux_agn_pix = flux_agn*(dnuhiz*1e9);
     
    402405     <<" -> "<<mass_agn_pix<<" Msol -> log10 = "<<lmass_agn_pix<<endl;
    403406
     407 // ---
    404408 // --- 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;
    406427 double psys = k_Boltzman_Cst * Tsys * (dnuhiz*1.e+9);
    407428 cout<<"Noise: T="<<Tsys<<" K, P="<<psys<<" W  (for Dnu="<<dnuhiz<<" GHz)"<<endl;
    408429
    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;
    425479
    426480 return 0;
Note: See TracChangeset for help on using the changeset viewer.