source: Sophya/trunk/Cosmo/SimLSS/genefluct3d.h@ 3196

Last change on this file since 3196 was 3196, checked in by cmv, 18 years ago

les AGN selon C.Jackson, une premiere approche simplifiee, recodage from Jim Rich. cmv 03/04/2007

File size: 4.2 KB
RevLine 
[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
20namespace SOPHYA {
21
22//-----------------------------------------------------------------------------------
23class GeneFluct3D {
24public:
[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
97protected:
[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
Note: See TracBrowser for help on using the repository browser.