Changeset 3196 in Sophya for trunk/Cosmo/SimLSS/genefluct3d.cc
- Timestamp:
- Apr 3, 2007, 4:06:50 PM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Cosmo/SimLSS/genefluct3d.cc
r3157 r3196 20 20 21 21 #include "constcosmo.h" 22 #include "integfunc.h"23 22 #include "geneutils.h" 24 23 … … 970 969 } 971 970 971 void 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 972 1030 void GeneFluct3D::AddNoise2Real(double snoise) 973 1031 // add noise to every pixels (meme les <=0 !)
Note:
See TracChangeset
for help on using the changeset viewer.