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


Ignore:
Timestamp:
Mar 21, 2007, 7:18:25 PM (19 years ago)
Author:
cmv
Message:

petis changements cmv 21/03/2007

File:
1 edited

Legend:

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

    r3115 r3193  
    1515#include "planckspectra.h"
    1616
     17/* --- Check Peterson at al. astro-ph/0606104 v1
     18cmvdefsurv -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
    1721inline double rad2deg(double trad) {return trad/M_PI*180.;}
    1822inline double rad2min(double trad) {return trad/M_PI*180.*60.;}
     
    2832      <<" -y adty,atylarg : idem selon y, si <=0 meme que x"<<endl
    2933      <<" -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
    3136      <<" -O surf,tobs : surface effective (m^2) et temps d\'observation (s)"<<endl
    32       <<" -A Tbruit : temperature de bruit (K)"<<endl
     37      <<" -A Tsys : temperature du system (K)"<<endl
    3338      <<" -S Tsynch,indnu : temperature (K) synch a 408 Mhz, index d\'evolution"<<endl
    3439      <<"                   (indnu==0 no evolution with freq.)"<<endl
    35       <<" -M  : masse de HI de reference (MSol), si <=0 mean schechter"<<endl
     40      <<" -M  : masse de HI de reference (MSol), si <=0 mean schechter in pixel"<<endl
    3641      <<" -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
    3845      <<" redshift : redshift moyen du survey"<<endl
    3946      <<endl;
     
    4552 // WMAP
    4653 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.;
    4955 // Schechter
    5056 double h75 = h100 / 0.75;
     
    6167 int nx,ny,nz;
    6268 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.;
    6572 // a 408 MHz (Haslam) + evol index a -2.6
    6673 double Tsynch408=60., nuhaslam=0.408, indnu = -2.6;
    6774 double mhiref = -1.; // reference Mass en HI (def integ schechter)
    6875 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
    7078
    7179 // --- Decodage arguments
    7280 char c;
    73   while((c = getopt(narg,arg,"hP1x: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) {
    7482  switch (c) {
    7583  case 'P' :
     
    8896    sscanf(optarg,"%lf,%lf",&surfeff,&tobs);
    8997    break;
     98  case 'L' :
     99    sscanf(optarg,"%lf",&lobewidth);
     100    break;
    90101  case 'A' :
    91     sscanf(optarg,"%lf",&Tbruit);
     102    sscanf(optarg,"%lf",&Tsys);
    92103    break;
    93104  case 'S' :
     
    100111    sscanf(optarg,"%lf",&hifactor);
    101112    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;
    104121    break;
    105122  case 'h' :
     
    107124    usage(); return -1;
    108125  }
    109  }
     126 } 
    110127 if(optind>=narg) {usage(); return-1;}
    111128 sscanf(arg[optind],"%lf",&redshift);
     
    113130
    114131 // --- Initialisation de la Cosmologie
     132 cout<<"\nh100="<<h100<<" Om0="<<om0<<" Or0="<<or0<<" Or0="
     133     <<or0<<" Ol0="<<ol0<<" w0="<<w0<<" flat="<<flat<<endl;
    115134 cout<<"\n--- Cosmology for z = "<<redshift<<endl;
    116135 CosmoCalc univ(flat,true,2.*redshift);
     
    118137 univ.SetInteg(perc,dzinc,dzmax,glorder);
    119138 univ.SetDynParam(h100,om0,or0,ol0,w0);
     139 univ.Print(0.);
    120140 univ.Print(redshift);
    121141
     
    258278 cout<<"dang lumi = "<<dlum<<" in ["<<dlumlim[0]<<","<<dlumlim[1]<<"] Mpc"<<endl;
    259279
     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
    260288 // --- Power emitted by HI
    261289 cout<<"\n--- Power from HI for M = "<<mhiref<<" Msol at "<<nuhiz<<" GHz"<<endl;
     
    267295     <<"      in ["<<hifactor*FluxHI(mhiref,dlumlim[0])
    268296     <<","<<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;
    270298 cout<<"If spread over "<<dnuhiz<<" GHz, flux density = "<<sfhi<<" Jy"<<endl;
    271299
    272300 // --- Signal analysis
    273301 cout<<"\n--- Signal analysis"<<endl;
     302 cout<<"Facteur polar = "<<facpolar<<endl;
     303
    274304 PlanckSpectra planck(T_CMB_Par);
    275305 planck.SetApprox(1);  // Rayleigh spectra
     
    278308 planck.SetTypSpectra(0); // radiance W/m^2/Sr/Hz
    279309
    280  double hnu = h_Planck_Cst*(nuhiz*1.e+9);
    281  cout<<"Facteur polar = "<<facpolar<<",   h.nu="<<hnu<<" J"<<endl;
    282 
     310 // Signal
    283311 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;
    289316 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
    294326 double tsynch = Tsynch408;
    295327        if(fabs(indnu)>1.e-50) tsynch *= pow(nuhiz/nuhaslam,indnu);
    296328 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;
    301331 cout<<"Synchrotron: T="<<Tsynch408<<" K ("<<nuhaslam<<" GHz), "
    302332     <<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
    306337 double tcmb = T_CMB_Par;
    307338 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);
    311340 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;
    314343
    315344 // --- Noise analysis
    316345 cout<<"\n--- Noise analysis"<<endl;
    317  double pbruit = 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;
    326355
    327356 double SsN = ssig/slim;
Note: See TracChangeset for help on using the changeset viewer.