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

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

Intro raffinement dans simul AGN, variation dNu Da Dlum selon Oz cmv 05/04/2007

File size: 4.7 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);
[3199]33 long LosComRedshift(double zinc=0.001,long npoints=-1);
[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);
[3199]73 void ApplyGrowthFactor(void);
[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);
[3199]85 void AddAGN(double lfjy,double lsigma,double powlaw=0.);
[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
[3199]97//-------------------------------------------------------------------
98//--------------------- BRICOLO A NE PAS GARDER ---------------------
99//-------------------------------------------------------------------
100 int ComputeSpectrum_bricolo(HistoErr& herr);
101 int ComputeSpectrum2D_bricolo(Histo2DErr& herr);
102//-------------------------------------------------------------------
103
[3115]104protected:
[3141]105 void setsize(long nx,long ny,long nz,double dx,double dy,double dz);
106 void setalloc(void);
107 void setpointers(bool from_real);
[3154]108 void init_fftw(void);
[3129]109 long manage_coefficients(void);
[3115]110 double compute_power_carte(void);
[3141]111 void check_array_alloc(void);
[3120]112 inline double pixelfilter(double x)
113 {return (x<0.025) ? 1.-x*x/6.*(1.-x*x/20.): sin(x)/x;}
[3115]114
[3154]115 // valeurs dans l'espace reel
[3141]116 long Nx_,Ny_,Nz_; vector<long> N_;
[3129]117 long NCz_,NTz_;
[3134]118 int_8 NRtot_;
[3141]119
120 double Dx_,Dy_,Dz_; vector<double> D_;
121
[3154]122 // valeurs dans l'espace des K
[3141]123 double Dkx_,Dky_,Dkz_; vector<double> Dk_;
124 double Knyqx_,Knyqy_,Knyqz_; vector<double> Knyq_;
125 double Dk3_;
[3115]126 double dVol_, Vol_;
127
[3154]128 // la gestion de la FFT
[3115]129 fftw_plan pf_,pb_;
130 unsigned short nthread_;
[3150]131 int lp_;
[3115]132
[3154]133 // le stockage du Cube de donnees et les pointeurs
[3141]134 bool array_allocated_; // true if array has been allocated
135 TArray< complex<r_8> >& T_;
136 fftw_complex *fdata_;
137 TArray<r_8> R_;
138 double *data_;
[3154]139
140 // l'observateur
141 double redshref_,kredshref_;
[3157]142 CosmoCalc *cosmo_;
143 GrowthFactor *growth_;
144 double xobs_[3];
145 double loscom_ref_, loscom_min_, loscom_max_;
146 vector<double> zred_, loscom_;
[3199]147 double loscom2zred_min_, loscom2zred_max_;
148 vector<double> loscom2zred_;
149
[3115]150};
151
152} // Fin du namespace
153
154#endif
Note: See TracBrowser for help on using the repository browser.