[3115] | 1 | #ifndef GENEFLUCT3D_SEEN
|
---|
| 2 | #define GENEFLUCT3D_SEEN
|
---|
| 3 |
|
---|
| 4 | #include "machdefs.h"
|
---|
| 5 | #include "genericfunc.h"
|
---|
| 6 | #include "tarray.h"
|
---|
[3141] | 7 | #include "histerr.h"
|
---|
| 8 | #include "hist2err.h"
|
---|
[3115] | 9 | #include "perandom.h"
|
---|
| 10 |
|
---|
[3141] | 11 | #include "FFTW/fftw3.h"
|
---|
| 12 | #include "FitsIO/fitsio.h"
|
---|
| 13 |
|
---|
[3115] | 14 | #include <vector>
|
---|
| 15 |
|
---|
[3157] | 16 | #include "cosmocalc.h"
|
---|
[3115] | 17 | #include "pkspectrum.h"
|
---|
| 18 |
|
---|
| 19 |
|
---|
| 20 | namespace SOPHYA {
|
---|
| 21 |
|
---|
| 22 | //-----------------------------------------------------------------------------------
|
---|
| 23 | class GeneFluct3D {
|
---|
| 24 | public:
|
---|
[3141] | 25 | GeneFluct3D(TArray< complex<r_8 > >& T);
|
---|
[3115] | 26 | virtual ~GeneFluct3D(void);
|
---|
| 27 |
|
---|
| 28 | void SetNThread(unsigned short nthread=0) {nthread_ = nthread;}
|
---|
[3129] | 29 | void SetSize(long nx,long ny,long nz,double dx,double dy,double dz); // Mpc
|
---|
[3157] | 30 | void SetObservator(double redshref=0.,double kredshref=0.);
|
---|
| 31 | void SetCosmology(CosmoCalc& cosmo);
|
---|
| 32 | void SetGrowthFactor(GrowthFactor& growth);
|
---|
| 33 | long LosComRedshift(double zinc=0.001);
|
---|
[3115] | 34 |
|
---|
[3141] | 35 | TArray< complex<r_8> >& GetComplexArray(void) {return T_;}
|
---|
| 36 | fftw_complex* GetComplexPointer(void) {return fdata_;}
|
---|
| 37 | TArray<r_8>& GetRealArray(void) {return R_;}
|
---|
| 38 | r_8* GetRealPointer(void) {return data_;}
|
---|
| 39 |
|
---|
| 40 | // Pour adressage data_[ip]
|
---|
| 41 | inline int_8 IndexR(long i,long j,long k) {return (int_8)(k+NTz_*(j+Ny_*i));}
|
---|
| 42 | // Pour adressage fdata_[ip][0-1]
|
---|
| 43 | inline int_8 IndexC(long i,long j,long k) {return (int_8)(k+NCz_*(j+Ny_*i));}
|
---|
| 44 | // - On peut aussi adresser:
|
---|
| 45 | // TArray< complex<r_8> >& pk = gf3d.GetComplexArray(); pk(i,j,k) = ...;
|
---|
| 46 | // TArray<r_8>& rgen = gf3d.GetRealArray(); rgen(i,j,k) = ...;
|
---|
| 47 |
|
---|
| 48 | vector<long> GetNpix(void) {return N_;}
|
---|
| 49 | int_8 NPix(void) {return NRtot_;}
|
---|
| 50 |
|
---|
| 51 | vector<r_8> GetDinc(void) {return D_;}
|
---|
| 52 | double GetDVol(void) {return dVol_;}
|
---|
[3115] | 53 | double GetVol(void) {return Vol_;}
|
---|
[3141] | 54 |
|
---|
| 55 | vector<r_8> GetKinc(void) {return Dk_;}
|
---|
| 56 | vector<r_8> GetKnyq(void) {return Knyq_;}
|
---|
[3115] | 57 | double GetKmax(void) {return sqrt(Knyqx_*Knyqx_+Knyqy_*Knyqy_+Knyqz_*Knyqz_);}
|
---|
[3141] | 58 | double GetKTmax(void) {return sqrt(Knyqx_*Knyqx_+Knyqy_*Knyqy_);}
|
---|
| 59 | double GetKincMin(void)
|
---|
| 60 | {vector<r_8>::const_iterator it = min_element(Dk_.begin(), Dk_.end()); return *it;}
|
---|
| 61 | double GetKTincMin(void) {return min(Dk_[0],Dk_[1]);}
|
---|
[3115] | 62 |
|
---|
[3141] | 63 | void ComputeFourier0(GenericFunc& pk_at_z);
|
---|
| 64 | void ComputeFourier(GenericFunc& pk_at_z);
|
---|
[3115] | 65 | void FilterByPixel(void);
|
---|
[3141] | 66 |
|
---|
[3115] | 67 | void ComputeReal(void);
|
---|
[3141] | 68 |
|
---|
[3115] | 69 | void ReComputeFourier(void);
|
---|
| 70 |
|
---|
[3141] | 71 | int ComputeSpectrum(HistoErr& herr);
|
---|
| 72 | int ComputeSpectrum2D(Histo2DErr& herr);
|
---|
[3157] | 73 | void ApplyGrowthFactor(long npoints=-1);
|
---|
[3141] | 74 |
|
---|
[3134] | 75 | int_8 VarianceFrReal(double R,double& var);
|
---|
| 76 | int_8 MeanSigma2(double& rm,double& rs2,double vmin=-1.e+150,double vmax=1.e+150);
|
---|
| 77 | int_8 NumberOfBad(double vmin=-1.e+150,double vmax=1.e+150);
|
---|
| 78 | int_8 SetToVal(double vmin, double vmax,double val0=0.);
|
---|
[3115] | 79 |
|
---|
| 80 | void TurnFluct2Mass(void);
|
---|
| 81 | double TurnMass2MeanNumber(double n_by_mpc3);
|
---|
| 82 | double ApplyPoisson(void);
|
---|
| 83 | double TurnNGal2Mass(FunRan& massdist,bool axeslog=false);
|
---|
| 84 | double TurnMass2Flux(void);
|
---|
[3196] | 85 | void AddAGN(double lmsol,double lsigma);
|
---|
[3115] | 86 | void AddNoise2Real(double snoise);
|
---|
| 87 |
|
---|
[3141] | 88 | void WriteFits(string cfname,int bitpix=FLOAT_IMG);
|
---|
| 89 | void ReadFits(string cfname);
|
---|
| 90 |
|
---|
| 91 | void WritePPF(string cfname,bool write_real=true);
|
---|
| 92 | void ReadPPF(string cfname);
|
---|
| 93 |
|
---|
[3150] | 94 | void SetPrtLevel(int lp=0) {lp_ = lp;}
|
---|
[3115] | 95 | void Print(void);
|
---|
| 96 |
|
---|
| 97 | protected:
|
---|
[3141] | 98 | void setsize(long nx,long ny,long nz,double dx,double dy,double dz);
|
---|
| 99 | void setalloc(void);
|
---|
| 100 | void setpointers(bool from_real);
|
---|
[3154] | 101 | void init_fftw(void);
|
---|
[3129] | 102 | long manage_coefficients(void);
|
---|
[3115] | 103 | double compute_power_carte(void);
|
---|
[3141] | 104 | void check_array_alloc(void);
|
---|
[3120] | 105 | inline double pixelfilter(double x)
|
---|
| 106 | {return (x<0.025) ? 1.-x*x/6.*(1.-x*x/20.): sin(x)/x;}
|
---|
[3115] | 107 |
|
---|
[3154] | 108 | // valeurs dans l'espace reel
|
---|
[3141] | 109 | long Nx_,Ny_,Nz_; vector<long> N_;
|
---|
[3129] | 110 | long NCz_,NTz_;
|
---|
[3134] | 111 | int_8 NRtot_;
|
---|
[3141] | 112 |
|
---|
| 113 | double Dx_,Dy_,Dz_; vector<double> D_;
|
---|
| 114 |
|
---|
[3154] | 115 | // valeurs dans l'espace des K
|
---|
[3141] | 116 | double Dkx_,Dky_,Dkz_; vector<double> Dk_;
|
---|
| 117 | double Knyqx_,Knyqy_,Knyqz_; vector<double> Knyq_;
|
---|
| 118 | double Dk3_;
|
---|
[3115] | 119 | double dVol_, Vol_;
|
---|
| 120 |
|
---|
[3154] | 121 | // la gestion de la FFT
|
---|
[3115] | 122 | fftw_plan pf_,pb_;
|
---|
| 123 | unsigned short nthread_;
|
---|
[3150] | 124 | int lp_;
|
---|
[3115] | 125 |
|
---|
[3154] | 126 | // le stockage du Cube de donnees et les pointeurs
|
---|
[3141] | 127 | bool array_allocated_; // true if array has been allocated
|
---|
| 128 | TArray< complex<r_8> >& T_;
|
---|
| 129 | fftw_complex *fdata_;
|
---|
| 130 | TArray<r_8> R_;
|
---|
| 131 | double *data_;
|
---|
[3154] | 132 |
|
---|
| 133 | // l'observateur
|
---|
| 134 | double redshref_,kredshref_;
|
---|
[3157] | 135 | CosmoCalc *cosmo_;
|
---|
| 136 | GrowthFactor *growth_;
|
---|
| 137 | double xobs_[3];
|
---|
| 138 | double loscom_ref_, loscom_min_, loscom_max_;
|
---|
| 139 | vector<double> zred_, loscom_;
|
---|
[3115] | 140 | };
|
---|
| 141 |
|
---|
| 142 | } // Fin du namespace
|
---|
| 143 |
|
---|
| 144 | #endif
|
---|