Changeset 3358 in Sophya for trunk/Cosmo/SimLSS/genefluct3d.cc
- Timestamp:
- Oct 23, 2007, 12:19:27 PM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Cosmo/SimLSS/genefluct3d.cc
r3354 r3358 1089 1089 } 1090 1090 1091 if(lp_>0) cout<<"--- NumberOfBad "<<nbad<<" px out of ]"<<vmin<<","<<vmax<<"["<<endl; 1091 if(lp_>0) cout<<"--- NumberOfBad "<<nbad<<" px out of ]"<<vmin<<","<<vmax 1092 <<"[ i.e. frac="<<nbad/(double)NRtot_<<endl; 1092 1093 return nbad; 1093 1094 } … … 1206 1207 } 1207 1208 1208 double GeneFluct3D::Turn Mass2MeanNumber(double val_by_mpc3)1209 { 1210 if(lp_>0) cout<<"--- Turn Mass2MeanNumber : "<<val_by_mpc3<<" quantity (gal or mass)/Mpc^3"<<endl;1211 1212 double mall=0., mgood=0.;1213 int_8 n all=0, ngood=0;1209 double GeneFluct3D::TurnFluct2MeanNumber(double val_by_mpc3) 1210 { 1211 if(lp_>0) cout<<"--- TurnFluct2MeanNumber : "<<val_by_mpc3<<" quantity (gal or mass)/Mpc^3"<<endl; 1212 1213 // First convert dRho/Rho into 1+dRho/Rho 1214 int_8 nball = 0; double sumall = 0., sumall2 = 0.; 1214 1215 for(long i=0;i<Nx_;i++) for(long j=0;j<Ny_;j++) for(long l=0;l<Nz_;l++) { 1215 1216 int_8 ip = IndexR(i,j,l); 1216 mall += data_[ip]; nall++; 1217 if(data_[ip]>0.) {mgood += data_[ip]; ngood++;} 1218 } 1219 if(ngood>0) mgood /= (double)ngood; 1220 if(nall>0) mall /= (double)nall; 1221 if(lp_>0) cout<<"...ngood="<<ngood<<" mgood="<<mgood 1222 <<", nall="<<nall<<" mall="<<mall<<endl; 1223 if(ngood<=0 || mall<=0.) { 1224 cout<<"TurnMass2MeanNumber_Error: ngood="<<ngood<<" <=0 || mall="<<mall<<" <=0"<<endl; 1225 throw RangeCheckError("TurnMass2MeanNumber_Error: ngood<=0 || mall<=0"); 1226 } 1227 1228 // On doit mettre n*Vol galaxies (ou Msol) dans notre survey 1229 // On en met uniquement dans les pixels de masse >0. 1230 // On MET a zero les pixels <0 1231 // On renormalise sur les pixels>0 pour qu'on ait n*Vol galaxies (ou Msol) 1232 // comme on ne prend que les pixels >0, on doit normaliser 1233 // a la moyenne de <1+d_rho/rho> sur ces pixels 1234 // (rappel sur tout les pixels <1+d_rho/rho>=1) 1235 // nb de gal (ou Msol) a mettre ds 1 px: 1236 double dn = val_by_mpc3*Vol_/ (mgood/mall) /(double)ngood; 1237 if(lp_>0) cout<<"...quantity density move from " 1238 <<val_by_mpc3*Vol_/double(NRtot_)<<" to "<<dn<<" / pixel"<<endl; 1217 data_[ip] += 1.; 1218 nball++; sumall += data_[ip]; sumall2 += data_[ip]*data_[ip]; 1219 } 1220 if(nball>2) { 1221 sumall /= (double)nball; 1222 sumall2 = sumall2/(double)nball - sumall*sumall; 1223 if(lp_>0) cout<<"1+dRho/Rho: mean="<<sumall<<" variance="<<sumall2 1224 <<" -> "<<sqrt(fabs(sumall2))<<endl; 1225 } 1226 1227 // Find contribution for positive pixels 1228 int_8 nbpos = 0; double sumpos = 0. , sumpos2 = 0.; 1229 for(long i=0;i<Nx_;i++) for(long j=0;j<Ny_;j++) for(long l=0;l<Nz_;l++) { 1230 int_8 ip = IndexR(i,j,l); 1231 double v = data_[ip]; 1232 if(data_[ip]>0.) {nbpos++; sumpos += v; sumpos2 += v*v;} 1233 } 1234 if(nbpos<1) { 1235 cout<<"TurnFluct2MeanNumber_Error: nbpos<1"<<endl; 1236 throw RangeCheckError("TurnFluct2MeanNumber_Error: nbpos<1"); 1237 } 1238 sumpos2 = sumpos2/nball - sumpos*sumpos/(nball*nball); 1239 if(lp_>0) 1240 cout<<"1+dRho/Rho with v<0 set to zero: mean="<<sumpos/nball 1241 <<" variance="<<sumpos2<<" -> "<<sqrt(fabs(sumpos2))<<endl; 1242 cout<<"Sum of positive values: sumpos="<<sumpos 1243 <<" (n(v>0) = "<<nbpos<<" frac(v>0)="<<nbpos/(double)NRtot_<<")"<<endl; 1244 1245 // - Mettre exactement val_by_mpc3*Vol galaxies (ou Msol) dans notre survey 1246 // - Uniquement dans les pixels de masse >0. 1247 // - Mise a zero des pixels <0 1248 double dn = val_by_mpc3 * Vol_ / sumpos; 1249 if(lp_>0) cout<<"...density move from " 1250 <<val_by_mpc3*dVol_<<" to "<<dn<<" / pixel"<<endl; 1239 1251 1240 1252 double sum = 0.; … … 1248 1260 } 1249 1261 1250 if(lp_>0) cout<< sum<<"...quantity put into survey/ "<<val_by_mpc3*Vol_<<endl;1262 if(lp_>0) cout<<"...quantity put into survey "<<sum<<" / "<<val_by_mpc3*Vol_<<endl; 1251 1263 1252 1264 return sum;
Note:
See TracChangeset
for help on using the changeset viewer.