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


Ignore:
Timestamp:
Oct 1, 2007, 7:10:50 PM (18 years ago)
Author:
cmv
Message:

intro ComputeSpectrum avec soustraction de bruit et deconvolution par la fct de transfert du pixel cmv 01/10/2007

File:
1 edited

Legend:

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

    r3329 r3330  
    321321   if(lp_>1 && n>0)
    322322     for(int i=0;i<n;i++)
    323        if(i==0 || abs(i-n/2)<2 || i==n-1)
    324          cout<<"    "<<i<<"  "<<loscom2zred_[i]<<endl;
     323       if(i<2 || abs(i-n/2)<2 || i>=n-2)
     324         cout<<"    i="<<i
     325             <<"  d="<<loscom2zred_min_+i*(loscom2zred_max_-loscom2zred_min_)/(n-1.)
     326             <<" Mpc   z="<<loscom2zred_[i]<<endl;
    325327 }
    326328
     
    374376   init_fftw();
    375377   SetObservator(zref,kzref);
     378   array_allocated_ = true;
    376379 } catch (PThrowable & exc) {
    377380   cout<<"Exception : "<<(string)typeid(exc).name()
     
    438441   init_fftw();
    439442   SetObservator(zref,kzref);
     443   array_allocated_ = true;
    440444 } catch (PThrowable & exc) {
    441445   cout<<"Exception : "<<(string)typeid(exc).name()
     
    724728   long ii = (i>Nx_/2) ? Nx_-i : i;
    725729   double kx = ii*Dkx_ *Dx_/2;
    726    double pk_x = pixelfilter(kx); 
     730   double pk_x = pixelfilter(kx);
    727731   for(long j=0;j<Ny_;j++) {
    728732     long jj = (j>Ny_/2) ? Ny_-j : j;
    729733     double ky = jj*Dky_ *Dy_/2;
    730      double pk_y =  pixelfilter(ky);
     734     double pk_y = pixelfilter(ky);
    731735     for(long l=0;l<NCz_;l++) {
    732736       double kz = l*Dkz_ *Dz_/2;
     
    826830     double ky = jj*Dky_;  ky *= ky;
    827831     for(long l=0;l<NCz_;l++) {
    828        double kz = l*Dkz_;  kz *= kz;
    829        double k = sqrt(kx+ky+kz);
     832       double kz = l*Dkz_;
     833       double k = sqrt(kx+ky+kz*kz);
    830834       double pk = MODULE2(T_(l,j,i));
    831835       herr.Add(k,pk);
     
    862866       double pk = MODULE2(T_(l,j,i));
    863867       herr.Add(kt,kz,pk);
     868     }
     869   }
     870 }
     871 herr.ToVariance();
     872
     873 // renormalize to directly compare to original spectrum
     874 double norm = Vol_;
     875 herr *= norm;
     876
     877 return 0;
     878}
     879
     880//-------------------------------------------------------------------
     881int GeneFluct3D::ComputeSpectrum(HistoErr& herr,double sigma,bool pixcor)
     882// Compute spectrum from "T" and fill HistoErr "herr"
     883// AVEC la soustraction du niveau de bruit et la correction par filterpixel()
     884// Si on ne fait pas ca, alors on obtient un spectre non-isotrope!
     885//
     886// T : dans le format standard de GeneFuct3D: T(nz,ny,nx)
     887// cad T(kz,ky,kx) avec  0<kz<kz_nyq  -ky_nyq<ky<ky_nyq  -kx_nyq<kx<kx_nyq
     888{
     889  if(lp_>0) cout<<"--- ComputeSpectrum: sigma="<<sigma<<endl;
     890 check_array_alloc();
     891
     892 if(sigma<=0.) sigma = 0.;
     893 double sigma2 = sigma*sigma / (double)NRtot_;
     894
     895 if(herr.NBins()<0) return -1;
     896 herr.Zero();
     897
     898 TVector<r_8> vfz(NCz_);
     899 if(pixcor)  // kz = l*Dkz_
     900   for(long l=0;l<NCz_;l++) {vfz(l)=pixelfilter(l*Dkz_ *Dz_/2); vfz(l)*=vfz(l);}
     901
     902 // Attention a l'ordre
     903 for(long i=0;i<Nx_;i++) {
     904   long ii = (i>Nx_/2) ? Nx_-i : i;
     905   double kx = ii*Dkx_;
     906   double fx = (pixcor) ? pixelfilter(kx*Dx_/2): 1.;
     907   kx *= kx; fx *= fx;
     908   for(long j=0;j<Ny_;j++) {
     909     long jj = (j>Ny_/2) ? Ny_-j : j;
     910     double ky = jj*Dky_;
     911     double fy = (pixcor) ? pixelfilter(ky*Dy_/2): 1.;
     912     ky *= ky; fy *= fy;
     913     for(long l=0;l<NCz_;l++) {
     914       double kz = l*Dkz_;
     915       double k = sqrt(kx+ky+kz*kz);
     916       double pk = MODULE2(T_(l,j,i)) - sigma2;
     917       double fz = (pixcor) ? vfz(l): 1.;
     918       double f = fx*fy*fz;
     919       if(f>0.) herr.Add(k,pk/f);
     920     }
     921   }
     922 }
     923 herr.ToVariance();
     924
     925 // renormalize to directly compare to original spectrum
     926 double norm = Vol_;
     927 herr *= norm;
     928
     929 return 0;
     930}
     931
     932int GeneFluct3D::ComputeSpectrum2D(Histo2DErr& herr,double sigma,bool pixcor)
     933// AVEC la soustraction du niveau de bruit et la correction par filterpixel()
     934{
     935 if(lp_>0) cout<<"--- ComputeSpectrum2D: sigma="<<sigma<<endl;
     936 check_array_alloc();
     937
     938 if(sigma<=0.) sigma = 0.;
     939 double sigma2 = sigma*sigma / (double)NRtot_;
     940
     941 if(herr.NBinX()<0 || herr.NBinY()<0) return -1;
     942 herr.Zero();
     943
     944 TVector<r_8> vfz(NCz_);
     945 if(pixcor)  // kz = l*Dkz_
     946   for(long l=0;l<NCz_;l++) {vfz(l)=pixelfilter(l*Dkz_ *Dz_/2); vfz(l)*=vfz(l);}
     947
     948 // Attention a l'ordre
     949 for(long i=0;i<Nx_;i++) {
     950   long ii = (i>Nx_/2) ? Nx_-i : i;
     951   double kx = ii*Dkx_;
     952   double fx = (pixcor) ? pixelfilter(kx*Dx_/2) : 1.;
     953   kx *= kx; fx *= fx;
     954   for(long j=0;j<Ny_;j++) {
     955     long jj = (j>Ny_/2) ? Ny_-j : j;
     956     double ky = jj*Dky_;
     957     double fy = (pixcor) ? pixelfilter(ky*Dy_/2) : 1.;
     958     ky *= ky; fy *= fy;
     959     double kt = sqrt(kx+ky);
     960     for(long l=0;l<NCz_;l++) {
     961       double kz = l*Dkz_;
     962       double pk = MODULE2(T_(l,j,i)) - sigma2;
     963       double fz = (pixcor) ? vfz(l): 1.;
     964       double f = fx*fy*fz;
     965       if(f>0.) herr.Add(kt,kz,pk/f);
    864966     }
    865967   }
Note: See TracChangeset for help on using the changeset viewer.