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


Ignore:
Timestamp:
Jun 14, 2007, 7:06:35 PM (18 years ago)
Author:
cmv
Message:

cmv 14/06/2007

File:
1 edited

Legend:

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

    r3262 r3267  
    6969//                 Si redshref<0 alors redshref=0
    7070//     kredshref = indice (en double) correspondant a ce redshift
    71 //                 Si kredshref<0 alors kredshref=0
     71//                 Si kredshref<0 alors kredshref=nz/2 (milieu du cube)
    7272// Exemple: redshref=1.5 kredshref=250.75
    7373//    -> Le pixel i=nx/2 j=ny/2 k=250.75 est au redshift 1.5
    7474{
    7575 if(redshref<0.) redshref = 0.;
    76  if(kredshref<0.) kredshref = 0.;
     76 if(kredshref<0.) {
     77   if(Nz_<=0) {
     78     char *bla = "GeneFluct3D::SetObservator_Error: for kredshref<0 SetSize should be called first";
     79     cout<<bla<<endl; throw ParmError(bla);
     80   }
     81   kredshref = Nz_/2.;
     82 }
    7783 redshref_  = redshref;
    7884 kredshref_ = kredshref;
     
    97103                <<" D="<<dx<<","<<dy<<","<<dz<<endl;
    98104 if(nx<=0 || dx<=0.) {
    99    char *bla = "GeneFluct3D::setsize_Error: bad value(s";
     105   char *bla = "GeneFluct3D::setsize_Error: bad value(s) for nn/dx";
    100106   cout<<bla<<endl; throw ParmError(bla);
    101107 }
     
    228234 loscom_max_ = 0.;
    229235 for(long i=0;i<=1;i++) {
    230    double dx2 = xobs_[0] - i*Nx_*Dx_; dx2 *= dx2;
     236   double dx2 = xobs_[0] - i*(Nx_-1)*Dx_; dx2 *= dx2;
    231237   for(long j=0;j<=1;j++) {
    232      double dy2 = xobs_[1] - j*Ny_*Dy_; dy2 *= dy2;
     238     double dy2 = xobs_[1] - j*(Ny_-1)*Dy_; dy2 *= dy2;
    233239     for(long k=0;k<=1;k++) {
    234        double dz2 = xobs_[2] - k*Nz_*Dz_; dz2 *= dz2;
     240       double dz2 = xobs_[2] - k*(Nz_-1)*Dz_; dz2 *= dz2;
    235241       dz2 = sqrt(dx2+dy2+dz2);
    236242       if(dz2>loscom_max_) loscom_max_ = dz2;
     
    246252
    247253 // Fill the corresponding vectors for loscom and zred
     254 // Be shure to have one dlc <loscom_min and one >loscom_max
    248255 if(zinc<=0.) zinc = 0.01;
    249256 for(double z=0.; ; z+=zinc) {
     
    11211128}
    11221129
    1123 void GeneFluct3D::AddNoise2Real(double snoise)
     1130void GeneFluct3D::AddNoise2Real(double snoise,bool with_evol)
    11241131// add noise to every pixels (meme les <=0 !)
    11251132{
    1126  if(lp_>0) cout<<"--- AddNoise2Real: snoise = "<<snoise<<endl;
    1127  check_array_alloc();
    1128 
    1129  for(long i=0;i<Nx_;i++) for(long j=0;j<Ny_;j++) for(long l=0;l<Nz_;l++) {
    1130    int_8 ip = IndexR(i,j,l);
    1131    data_[ip] += snoise*NorRand();
    1132  }
    1133 }
    1134 
    1135 
    1136 
    1137 //-------------------------------------------------------------------
    1138 //-------------------------------------------------------------------
    1139 //--------------------- BRICOLO A NE PAS GARDER ---------------------
    1140 //-------------------------------------------------------------------
    1141 //-------------------------------------------------------------------
    1142 int GeneFluct3D::ComputeSpectrum_bricolo(HistoErr& herr)
    1143 // Compute spectrum from "T" and fill HistoErr "herr"
    1144 // T : dans le format standard de GeneFuct3D: T(nz,ny,nx)
    1145 // cad T(kz,ky,kx) avec  0<kz<kz_nyq  -ky_nyq<ky<ky_nyq  -kx_nyq<kx<kx_nyq
    1146 {
    1147  if(lp_>0) cout<<"--- ComputeSpectrum_bricolo ---"<<endl;
    1148  check_array_alloc();
    1149 
    1150  if(herr.NBins()<0) return -1;
    1151  herr.Zero();
    1152 
    1153  // Attention a l'ordre
     1133 if(lp_>0) cout<<"--- AddNoise2Real: snoise = "<<snoise<<" evol="<<with_evol<<endl;
     1134 check_array_alloc();
     1135
    11541136 for(long i=0;i<Nx_;i++) {
    1155    long ii = (i>Nx_/2) ? Nx_-i : i;
    1156    double kx = ii*Dkx_;  kx *= kx;
    11571137   for(long j=0;j<Ny_;j++) {
    1158      if(i==0 && j==0) continue;
    1159      long jj = (j>Ny_/2) ? Ny_-j : j;
    1160      double ky = jj*Dky_;  ky *= ky;
    1161      for(long l=1;l<NCz_;l++) {
    1162        double kz = l*Dkz_;  kz *= kz;
    1163        double k = sqrt(kx+ky+kz);
    1164        double pk = MODULE2(T_(l,j,i));
    1165        herr.Add(k,pk);
    1166      }
    1167    }
    1168  }
    1169  herr.ToVariance();
    1170 
    1171  // renormalize to directly compare to original spectrum
    1172  double norm = Vol_;
    1173  herr *= norm;
    1174 
    1175  return 0;
    1176 }
    1177 
    1178 int GeneFluct3D::ComputeSpectrum2D_bricolo(Histo2DErr& herr)
    1179 {
    1180  if(lp_>0) cout<<"--- ComputeSpectrum2D_bricolo ---"<<endl;
    1181  check_array_alloc();
    1182 
    1183  if(herr.NBinX()<0 || herr.NBinY()<0) return -1;
    1184  herr.Zero();
    1185 
    1186  // Attention a l'ordre
    1187  for(long i=0;i<Nx_;i++) {
    1188    long ii = (i>Nx_/2) ? Nx_-i : i;
    1189    double kx = ii*Dkx_;  kx *= kx;
    1190    for(long j=0;j<Ny_;j++) {
    1191      if(i==0 && j==0) continue;
    1192      long jj = (j>Ny_/2) ? Ny_-j : j;
    1193      double ky = jj*Dky_;  ky *= ky;
    1194      double kt = sqrt(kx+ky);
    1195      for(long l=1;l<NCz_;l++) {
    1196        double kz = l*Dkz_;
    1197        double pk = MODULE2(T_(l,j,i));
    1198        herr.Add(kt,kz,pk);
    1199      }
    1200    }
    1201  }
    1202  herr.ToVariance();
    1203 
    1204  // renormalize to directly compare to original spectrum
    1205  double norm = Vol_;
    1206  herr *= norm;
    1207 
    1208  return 0;
    1209 }
     1138     for(long l=0;l<Nz_;l++) {
     1139       int_8 ip = IndexR(i,j,l);
     1140       data_[ip] += snoise*NorRand();
     1141     }
     1142   }
     1143 }
     1144
     1145}
     1146
Note: See TracChangeset for help on using the changeset viewer.