| 1 | //  Classes to compute simple quantities for radio / 21 cm 
 | 
|---|
| 2 | //  R. Ansari - June 2010 
 | 
|---|
| 3 | 
 | 
|---|
| 4 | #ifndef RADUTIL_SEEN
 | 
|---|
| 5 | #define RADUTIL_SEEN
 | 
|---|
| 6 | 
 | 
|---|
| 7 | #include "machdefs.h"      // SOPHYA .h  
 | 
|---|
| 8 | #include "sopnamsp.h"      // SOPHYA .h  
 | 
|---|
| 9 | 
 | 
|---|
| 10 | #include "vector3d.h"      // conversion d'angle 
 | 
|---|
| 11 | 
 | 
|---|
| 12 | class H21Conversions {
 | 
|---|
| 13 | public:
 | 
|---|
| 14 |   // redshift nul, angle solide du pixel en steradian 
 | 
|---|
| 15 |   H21Conversions(double freq=0., double opix=1.e-5); 
 | 
|---|
| 16 | 
 | 
|---|
| 17 |   double toJansky(double temp);  // Conversion d'une temperature (Kelvin) en jansky 
 | 
|---|
| 18 |   double toKelvin(double jy);    // Conversion de Jansky en  temperature (Kelvin) 
 | 
|---|
| 19 | 
 | 
|---|
| 20 |   double Mean21cmTemperature_mK();      // Temperature moyenne de l'emission a 21 cm en mK
 | 
|---|
| 21 |   inline double T21cm_Kelvin() { return Mean21cmTemperature_mK()/1000.;  }
 | 
|---|
| 22 |   inline double T21cm_mK() { return Mean21cmTemperature_mK();  }
 | 
|---|
| 23 | 
 | 
|---|
| 24 |   void setFrequency(double nu);  // on definit la frequence en MHz 
 | 
|---|
| 25 |   inline void setRedshift(double z)    // on definit le redshift
 | 
|---|
| 26 |   { setFrequency(Freq021cm_Cst/(1+z)); }
 | 
|---|
| 27 |   inline void setLambda(double lam)    // on definit la longueur d'onde en m  
 | 
|---|
| 28 |   { setFrequency(SpeedOfLight_Cst/lam); }
 | 
|---|
| 29 | 
 | 
|---|
| 30 |   inline void setOmegaPix(double opix)   // angle solide en steradian
 | 
|---|
| 31 |   { omegapix_ = opix; }
 | 
|---|
| 32 |   inline void setOmegaPixDeg2(double opix)  // angle solide en Deg^2
 | 
|---|
| 33 |   { double cf=Angle(1.,Angle::Degree).ToRadian(); omegapix_ = opix*cf*cf; }
 | 
|---|
| 34 |   inline void setOmegaPixArcmin2(double opix)  // angle solide en Arcmin^2
 | 
|---|
| 35 |   { double cf=Angle(1.,Angle::ArcMin).ToRadian(); omegapix_ = opix*cf*cf; }
 | 
|---|
| 36 | 
 | 
|---|
| 37 |   // Definition des parametres cosmologiques utiles pour le calcul de la temperature d'emission a 21 cm
 | 
|---|
| 38 |   // retourne la valeur de OmegaLambda (univers plat)
 | 
|---|
| 39 |   double setCosmoParam(double omegamatter=0.02581, double omegabaryon=0.0441, double h100=0.719, double fracHI=0.02);
 | 
|---|
| 40 |   inline void setFracHI(double fracHI=0.02) { fracHI_=fracHI; }
 | 
|---|
| 41 | 
 | 
|---|
| 42 |   inline double getRedshift() { return z_; }
 | 
|---|
| 43 |   inline double getFrequency() { return freq_; }
 | 
|---|
| 44 |   inline double getLambda() { return lambda_; } 
 | 
|---|
| 45 | 
 | 
|---|
| 46 |   inline double getOmegaPix()   // angle solide en steradian
 | 
|---|
| 47 |   { return omegapix_; }
 | 
|---|
| 48 |   inline double getOmegaPixArcmin2()  // angle solide en Arcmin^2
 | 
|---|
| 49 |   { double cf=Angle(1.,Angle::ArcMin).ToRadian(); return omegapix_/cf/cf; }
 | 
|---|
| 50 |   inline double getOmegaPixDeg2()  // angle solide en Deg^2
 | 
|---|
| 51 |   { double cf=Angle(1.,Angle::Degree).ToRadian(); return omegapix_/cf/cf; }
 | 
|---|
| 52 | 
 | 
|---|
| 53 | 
 | 
|---|
| 54 |   static double SpeedOfLight_Cst;       // Speed of light  m/sec
 | 
|---|
| 55 |   static double Freq021cm_Cst;       // Speed of light  m/sec
 | 
|---|
| 56 |   static double k_Boltzman_Cst;         // Boltzmann constant  (SI Units)
 | 
|---|
| 57 | 
 | 
|---|
| 58 |   double z_;
 | 
|---|
| 59 |   double freq_;
 | 
|---|
| 60 |   double lambda_;
 | 
|---|
| 61 |   double omegapix_;
 | 
|---|
| 62 | 
 | 
|---|
| 63 |   // Parametres cosmologiques pour calcul du coefficient de conversion Mass to T21 
 | 
|---|
| 64 |   double OmegaMatter_;
 | 
|---|
| 65 |   double OmegaBaryons_;
 | 
|---|
| 66 |   double OmegaLambda_;
 | 
|---|
| 67 |   double h100_; 
 | 
|---|
| 68 |   double fracHI_; 
 | 
|---|
| 69 | };
 | 
|---|
| 70 | 
 | 
|---|
| 71 | #endif
 | 
|---|