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


Ignore:
Timestamp:
Oct 30, 2007, 6:06:49 PM (18 years ago)
Author:
cmv
Message:

gestion correct du lobe / taille pixel, evolution bruit Msol en fct de z, cmv 30/10/2007

File:
1 edited

Legend:

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

    r3365 r3367  
    2828inline double min2rad(double tmin) {return tmin*M_PI/(180.*60.);}
    2929inline double sec2rad(double tsec) {return tsec*M_PI/(180.*3600.);}
     30
     31inline double sr2deg2(double asr) {return asr*pow(rad2deg(1.),2.);}
     32inline double sr2min2(double asr) {return asr*pow(rad2min(1.),2.);}
     33inline double deg22sr(double adeg) {return adeg*pow(deg2rad(1.),2.);}
     34inline double min22sr(double amin) {return amin*pow(min2rad(1.),2.);}
    3035
    3136double LargeurDoppler(double v /* km/s */, double nu);
     
    5459      <<" -O surf,tobs,eta : surface effective (m^2), temps d\'observation (s), efficacite d\'ouverture"<<endl
    5560      <<" -N Tsys : temperature du system (K)"<<endl
    56       <<" -L lobewidth,freqlob : taille du lobe d\'observation (FWHM) en arcmin (def= rien)"<<endl
    57       <<"                        pour la frequence freqlob en MHz"<<endl
    58       <<"            Si freqlob<=0 : la frequence de reference est celle du redshift etudie"<<endl
    59       <<"            Si freqlob absent : la frequence de reference 1.4 GHz"<<endl
    60       <<"            lobewidth est pris comme la FWHM du lobe gaussien equivalent"<<endl
     61      <<" -L lobearea,freqlob : angle solide du lobe d\'observation en arcmin^2 (def= celle du pixel)"<<endl
     62      <<"                       pour la frequence freqlob en MHz"<<endl
     63      <<"            Si freqlob<=0 : la frequence de reference est celle du redshift etudie (def)"<<endl
    6164      <<" -2 : two polarisations measured"<<endl
    6265      <<" -M  : masse de HI de reference (MSol), si <=0 mean schechter in pixel"<<endl
     
    107110 double tobs = 6000., surftot = 400000., eta_eff  = 1.;
    108111 // taille du lobe d'observation en arcmin pour la frequence
    109  double lobewidth0 = -1., lobefreq0 = Fr_HyperFin_Par*1.e3;
     112 double lobearea0 = -1., lobefreq0 = -1.;
    110113
    111114 //-- Variance cosmique (default = standard SDSSII)
     
    138141    break;
    139142  case 'L' :
    140     sscanf(optarg,"%lf,%lf",&lobewidth0,&lobefreq0);
     143    sscanf(optarg,"%lf,%lf",&lobearea0,&lobefreq0);
    141144    break;
    142145  case 'N' :
     
    363366 cout<<"Pixel solid angle = "<<angsol_pix[0]<<" sr ("<<angsol_pix[0]/(4.*M_PI)<<" *4Pi)"
    364367     <<" in ["<<angsol_pix[1]<<","<<angsol_pix[2]<<"]"<<endl;
     368 cout<<"                  = "<<sr2min2(angsol_pix[0])<<"\'^2"
     369     <<" in ["<<sr2min2(angsol_pix[1])<<","<<sr2min2(angsol_pix[2])<<"]"<<endl;
    365370 cout<<"Total solid angle = "<<angsol_tot[0]<<" sr ("<<angsol_tot[0]/(4.*M_PI)<<" *4Pi)"
    366371     <<" in ["<<angsol_tot[1]<<","<<angsol_tot[2]<<"]"<<endl;
     
    452457 double angSEq[4], angEq[4];
    453458 for(int i=0;i<4;i++) {
    454    double nu =Fr_HyperFin_Par;
     459   double nu = Fr_HyperFin_Par;
    455460   if(i<3) nu = nuhiz[i];
    456461   angSEq[i] = AngsolEqTelescope(nu,surftot);
     
    464469     <<"        angular diameter = "<<angEq[3]<<" rd = "<<rad2min(angEq[3])<<"\'"<<endl;
    465470
    466  // Pour une observation ou le lobe est + petit que le pixel de simulation
     471 // Pour une observation ou le lobe est + petit ou grand que le pixel de simulation
    467472 // La taille angulaire du lobe change avec la frequence donc avec le redshift
    468  // La taille du lobe "lobewidth" est donnee pour une frequence de reference "lobefreq0"
     473 // La taille du lobe "lobearea0" est donnee pour une frequence de reference "lobefreq0" en MHz
    469474 double nlobes[3] = {1.,1.,1.};
    470  if(lobewidth0>0.) {
    471    if(lobefreq0<=0.) lobefreq0 = nuhiz[0]*1.e3; // MHz
    472    cout<<"\n--- Lobe: width="<<lobewidth0<<"\' pour "<<lobefreq0<<" MHz"<<endl;
    473    double lobewidth[3], slobe[3], lobecyl[3], lobearea[3];
    474    for(int i=0;i<3;i++) {
    475      lobewidth[i] = lobewidth0*lobefreq0/(nuhiz[i]*1.e3); // arcmin
    476      slobe[i] = lobewidth[i]/2.35482; // sigma du lobe en arcmin
    477      lobecyl[i] = sqrt(8.)*slobe[i]; // diametre du lobe cylindrique equiv en arcmin
    478      lobearea[i] = M_PI*lobecyl[i]*lobecyl[i]/4.; // en arcmin^2 (hypothese lobe gaussien)
    479      nlobes[i] = rad2min(adtx[i])*rad2min(adty[i])/lobearea[i];
    480    }
    481    cout<<"Lobe width changed to "<<lobewidth[0]<<"\' pour "<<nuhiz[0]*1.e3<<" MHz"
    482        <<" in ["<<lobewidth[1]<<","<<lobewidth[2]<<"]"<<endl;
    483    cout<<"Lobe sigma "<<slobe[0]<<"\' in ["<<slobe[1]<<","<<slobe[2]<<"]"<<endl;
    484    cout<<"Lobe cylindrique diametre "<<lobecyl[0]<<"\' in ["<<lobecyl[1]<<","<<lobecyl[2]<<"]"<<endl;
    485    cout<<"Lobe cylindrique area "<<lobearea[0]<<"\'^2 in ["<<lobearea[1]<<","<<lobearea[2]<<"]"<<endl;
    486    cout<<"Number of beams in one transversal pixel "<<nlobes[0]<<" in ["<<nlobes[1]<<","<<nlobes[2]<<"]"<<endl;
    487  }
     475 // Si "lobefreq0" negatif c'est la frequence du centre du cube
     476 if(lobefreq0<=0.) lobefreq0 = nuhiz[0]*1.e3;
     477 // Si "lobearea0" negatif c'est la taille du pixel ramenee a lobefreq0
     478 if(lobearea0<=0.) lobearea0 = sr2min2(angsol_pix[0])*pow(nuhiz[0]*1.e3/lobefreq0,2.);
     479 cout<<"\n--- Lobe: angsol="<<lobearea0<<"\'^2 pour "<<lobefreq0<<" MHz"<<endl;
     480 double lobearea[3];
     481 for(int i=0;i<3;i++) {
     482   lobearea[i] = lobearea0*pow(lobefreq0/(nuhiz[0]*1.e3),2.);
     483   nlobes[i] = sr2min2(angsol_pix[i])/lobearea[i];
     484 }
     485 cout<<"Lobe cylindrique area "<<lobearea[0]<<"\'^2 in ["<<lobearea[1]<<","<<lobearea[2]<<"]"<<endl;
     486 cout<<"Number of beams in one transversal pixel "<<nlobes[0]<<" in ["<<nlobes[1]<<","<<nlobes[2]<<"]"<<endl;
    488487
    489488 // ---
     
    765764       <<"   Pk      = "<<pkbruit[0]<<" Mpc^3 in ["<<pkbruit[1]<<","<<pkbruit[2]<<"]"<<endl;
    766765
    767    if(fabs(nlobes[0]-1.)>1e-6) {
    768      double slim_nl[3], SsN_nl[3], smass_nl[3], pkbruit_nl[3];
    769      for(int i=0;i<3;i++) {
    770        slim_nl[i] = slim[i] * sqrt(nlobes[i]);
    771        SsN_nl[i] = ssig_2polar[i] / slim_nl[i];
    772        smass_nl[i] = mhiref / ssig_2polar[i] * slim_nl[i];
    773        pkbruit_nl[i] = pow(smass_nl[i]/mhiref,2.)*vol_pixel;
    774      }
    775      cout<<"for "<<nlobes[0]<<" lobes[i] in ["<<nlobes[1]<<","<<nlobes[2]<<"] :"<<endl
     766   double slim_nl[3], SsN_nl[3], smass_nl[3], pkbruit_nl[3];
     767   for(int i=0;i<3;i++) {
     768     slim_nl[i] = slim[i] * sqrt(nlobes[i]);
     769     SsN_nl[i] = ssig_2polar[i] / slim_nl[i];
     770     smass_nl[i] = mhiref / ssig_2polar[i] * slim_nl[i];
     771     pkbruit_nl[i] = pow(smass_nl[i]/mhiref,2.)*vol_pixel;
     772   }
     773   cout<<"for "<<nlobes[0]<<" lobes[i] in ["<<nlobes[1]<<","<<nlobes[2]<<"] :"<<endl
    776774       <<"   Slim    = "<<slim_nl[0]*1.e6<<" mu_Jy in ["<<slim_nl[1]*1.e6<<","<<slim_nl[2]*1.e6<<"]"<<endl
    777775       <<"   S/N     = "<<SsN_nl[0]<<" in ["<<SsN_nl[1]<<","<<SsN_nl[2]<<"]"<<endl
    778776       <<"   Mass HI = "<<smass_nl[0]<<" Msol in ["<<smass_nl[1]<<","<<smass_nl[2]<<"]"<<endl
    779777       <<"   Pk      = "<<pkbruit_nl[0]<<" Mpc^3 in ["<<pkbruit_nl[1]<<","<<pkbruit_nl[2]<<"]"<<endl;
    780    }
    781778
    782779 }
Note: See TracChangeset for help on using the changeset viewer.