Changeset 3196 in Sophya for trunk/Cosmo/SimLSS/genefluct3d.cc


Ignore:
Timestamp:
Apr 3, 2007, 4:06:50 PM (18 years ago)
Author:
cmv
Message:

les AGN selon C.Jackson, une premiere approche simplifiee, recodage from Jim Rich. cmv 03/04/2007

File:
1 edited

Legend:

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

    r3157 r3196  
    2020
    2121#include "constcosmo.h"
    22 #include "integfunc.h"
    2322#include "geneutils.h"
    2423
     
    970969}
    971970
     971void GeneFluct3D::AddAGN(double lmsol,double lsigma)
     972// Add AGN flux into simulation:
     973// --- Procedure:
     974// 1. lancer "cmvdefsurv" avec les parametres du survey
     975//    et recuperer l'angle solide "angsol sr" du pixel elementaire
     976//    au centre du cube.
     977// 2. lancer "cmvtstagn" pour cet angle solide -> cmvtstagn.ppf
     978// 3. regarder l'histo "hlfang" et en deduire un equivalent gaussienne
     979//    cad une moyenne <log10(S)> et un sigma "sig"
     980//    Attention: la distribution n'etant pas gaussienne
     981// 4. re-lancer "cmvdefsurv" en ajoutant l'info sur les AGN
     982//    "cmvdefsurv ... -G <log10(S)> ..."
     983//    et recuperer le log10(masse solaire equivalente)
     984// --- Limitations actuelle du code:
     985// a. l'angle solide du pixel est pris au centre du cube
     986//    et ne varie pas avec la distance a l'interieur du cube
     987// b. la taille en dNu des pixels (selon z) est supposee constante
     988//    et egale a celle calculee pour le centre du cube
     989// c. les AGN sont supposes plats en flux
     990// d. le flux des AGN est mis dans une colonne Oz (indice k)
     991//    et pas sur la ligne de visee
     992// e. la distribution est approximee a une gaussienne
     993// .. C'est une approximation pour un observateur loin du centre du cube
     994//    et pour un cube peu epais / distance observateur
     995// --- Parametres de la routine:
     996// lmsol : c'est le <log10(Msol)> qui est la conversion en masse solaire
     997//         du flux depose dans un pixel par les AGN
     998// lsigma : c'est le sigma de la distribution
     999// - Comme on est en echelle log10():
     1000//   on tire log10(Msol) + X
     1001//   ou X est une realisation sur une gaussienne de variance "sig^2"
     1002//   La masse realisee est donc: Msol*10^X
     1003// - Pas de probleme de pixel negatif car on a une multiplication!
     1004{
     1005  if(lp_>0) cout<<"--- AddAGN: lmsol = "<<lmsol<<" , sigma = "<<lsigma<<endl;
     1006  check_array_alloc();
     1007
     1008  double m = pow(10.,lmsol);
     1009
     1010  double sum=0., sum2=0., nsum=0.;
     1011  for(long l=0;l<Nz_;l++) {
     1012    double a = lsigma*NorRand();
     1013    a = m*pow(10.,a);
     1014    // On met le meme tirage le long de Oz (indice k)
     1015    for(long i=0;i<Nx_;i++) for(long j=0;j<Ny_;j++) {
     1016      int_8 ip = IndexR(i,j,l);
     1017      data_[ip] += a;
     1018    }
     1019    sum += a; sum2 += a*a; nsum += 1.;
     1020  }
     1021
     1022 if(nsum>1.) {
     1023   sum /= nsum;
     1024   sum2 = sum2/nsum - sum*sum;
     1025   cout<<"...Mean mass="<<sum<<" Msol , s^2="<<sum2<<" s="<<sqrt(fabs(sum2))<<endl;
     1026 }
     1027 
     1028}
     1029
    9721030void GeneFluct3D::AddNoise2Real(double snoise)
    9731031// add noise to every pixels (meme les <=0 !)
Note: See TracChangeset for help on using the changeset viewer.