| [1149] | 1 | #ifndef AbsCalTool_H | 
|---|
|  | 2 | #define AbsCalTool_H | 
|---|
|  | 3 |  | 
|---|
| [1154] | 4 | #include <fstream> | 
|---|
| [1149] | 5 | #include "unitvector.h" | 
|---|
|  | 6 | #include "pixelmap.h" | 
|---|
|  | 7 | #include "specresp.h" | 
|---|
|  | 8 | #include "abslobenopolar.h" | 
|---|
|  | 9 |  | 
|---|
|  | 10 | class AbsCalcTool | 
|---|
|  | 11 | { | 
|---|
|  | 12 | public: | 
|---|
|  | 13 | AbsCalcTool(double CompResol=0.,double freqMin=0.,double freqMax=-1.) | 
|---|
|  | 14 | :FreqMax(freqMax), FreqMin(freqMin), RAngComp(CompResol) {      } | 
|---|
|  | 15 | //      Dummy values. Have to be initialised in offspring classes | 
|---|
|  | 16 |  | 
|---|
|  | 17 | ~AbsCalcTool() {        } | 
|---|
|  | 18 |  | 
|---|
|  | 19 | virtual double compPixel(UnitVector& VP, UnitVector& VY)=0; | 
|---|
|  | 20 | // Return power on detector (Watt/m2) for this Lobe and filter | 
|---|
|  | 21 | // Pointing at these ccordinates and orientation. Exact | 
|---|
|  | 22 |  | 
|---|
|  | 23 | virtual void print(ostream& ReadMe)=0; | 
|---|
|  | 24 | //   Main infos about calcTool | 
|---|
|  | 25 |  | 
|---|
|  | 26 | virtual double CalcLobeSize(double frequency= -10.)=0; | 
|---|
|  | 27 | // Calcule l'extension spatiale du lobe de cet outil | 
|---|
|  | 28 | // par integration numerique, calquee sur | 
|---|
|  | 29 | // L'integration spatiale ddu signal physique; | 
|---|
|  | 30 | // VALEUR RETOUR EN STERADIAN | 
|---|
|  | 31 | // Doit EVOLUER SI l'integration spatiale du signal physique CHANGE; | 
|---|
|  | 32 |  | 
|---|
|  | 33 | double compPixelQD(double theta, double phi); | 
|---|
|  | 34 | // Return power on detector (Watt/m2) for this Lobe and filter | 
|---|
|  | 35 | // Pointing at these ccordinates. | 
|---|
|  | 36 | // Exact if lobes are symmetrical by rotation around pointed axe | 
|---|
|  | 37 |  | 
|---|
|  | 38 | // Normalisation tools | 
|---|
|  | 39 | double NormKelvinRayleighJeans(); | 
|---|
|  | 40 | // Compute te normalisation factor to go from Watt/m2 to KelvinRaleighJeans | 
|---|
|  | 41 | // same computation option than the map options | 
|---|
|  | 42 | // KelvinRJ/(Watt/m2) | 
|---|
|  | 43 |  | 
|---|
|  | 44 | double NormKelvinCMB(); | 
|---|
|  | 45 | // Compute te normalisation factor to go from Watt/m2 to KelvinCMB | 
|---|
|  | 46 | // same computation option than the map options | 
|---|
|  | 47 | // KelvinCMB/(Watt/m2) | 
|---|
|  | 48 |  | 
|---|
|  | 49 | protected: | 
|---|
|  | 50 | double RAngComp;                // angular resolution of computations | 
|---|
|  | 51 | double FreqMax;         // Hz | 
|---|
|  | 52 | double FreqMin; | 
|---|
|  | 53 |  | 
|---|
|  | 54 | AbsLobeNoPolar* pLobe; | 
|---|
|  | 55 | SpectralResponse* pFilter;              // Hz | 
|---|
|  | 56 |  | 
|---|
|  | 57 | // Computation tools | 
|---|
|  | 58 | // Math tools !!!!!!!------------------------------------------------------- | 
|---|
| [1154] | 59 | inline double max(double a, double b)const | 
|---|
|  | 60 | {       if(a>b) return a; | 
|---|
|  | 61 | else return b; | 
|---|
|  | 62 | } | 
|---|
|  | 63 | inline double min(double a, double b)const | 
|---|
|  | 64 | {       if(a<b) return a; | 
|---|
|  | 65 | else return b; | 
|---|
|  | 66 | } | 
|---|
| [1149] | 67 | //compute solid angle between cones of aperture angles ang1 and ang2 | 
|---|
|  | 68 |  | 
|---|
| [1191] | 69 | double diffSolidAng(double ang1,double ang2) const | 
|---|
|  | 70 | {       return fabs(2*M_PI*(cos(ang1)-cos(ang2)));              // Steradians | 
|---|
|  | 71 | } | 
|---|
| [1149] | 72 |  | 
|---|
|  | 73 | }; | 
|---|
|  | 74 |  | 
|---|
|  | 75 | // Tools for computing Maps | 
|---|
|  | 76 | template <class T> void addToSkyMap(PixelMap<T>& Map, AbsCalcTool& Tool); | 
|---|
|  | 77 | template <class T> void compSkyMap(PixelMap<T>& Map, AbsCalcTool& Tool); | 
|---|
|  | 78 | template <class T> void addInInBandPowerMap(PixelMap<T>& Map, AbsCalcTool& tool); | 
|---|
|  | 79 | // Exact if lobes are symmetrical by rotation around pointed axe | 
|---|
|  | 80 | // Return a map at the requested resolution and frequency | 
|---|
|  | 81 |  | 
|---|
|  | 82 | // Tools for manipulating maps | 
|---|
|  | 83 | template <class T1, class T2> void addMap(PixelMap<T1>& Map, PixelMap<T2>& Map2); | 
|---|
|  | 84 | template <class T1, class T2> void substractMap(PixelMap<T1>& Map, PixelMap<T2>& Map2); | 
|---|
|  | 85 | template <class T1, class T2> void divMap1WithMap2(PixelMap<T1>& Map, PixelMap<T2>& Map2); | 
|---|
|  | 86 | template <class T> void scaleMap(double scalefactor, PixelMap<T>& Map); | 
|---|
|  | 87 | template <class T> int MinMaxSigMap(PixelMap<T>& Map, double& Min, | 
|---|
|  | 88 | double& Max, double& Moy, double& Var); | 
|---|
|  | 89 |  | 
|---|
|  | 90 | // Tool for changing ccordinates | 
|---|
|  | 91 | // All coordinates are in Radian. | 
|---|
|  | 92 | /* kmg_euler.c | 
|---|
|  | 93 | * | 
|---|
|  | 94 | * Converts between different coordinate systems. | 
|---|
|  | 95 | * | 
|---|
|  | 96 | * SELECT   From           To         |   SELECT    From          To | 
|---|
|  | 97 | *    1     RA-Dec (2000)  Galactic   |     4       Ecliptic      RA-Dec | 
|---|
|  | 98 | *    2     Galactic       RA-DEC     |     5       Ecliptic | 
|---|
|  | 99 | Galactic | 
|---|
|  | 100 | *    3     RA-Dec         Ecliptic   |     6       Galactic | 
|---|
|  | 101 | Ecliptic | 
|---|
|  | 102 | * | 
|---|
|  | 103 | *    Date     Programmer Remarks | 
|---|
|  | 104 | * ----------- ---------- ------- | 
|---|
|  | 105 | * 08-Aug-1999 K. Ganga   First version. Copied and modified EULER from | 
|---|
|  | 106 | *                        the IDL Astrolib. | 
|---|
|  | 107 | * May 2000, D. Yvon           Change coordinates units to Radians | 
|---|
|  | 108 | */ | 
|---|
|  | 109 | int kmg_eulerRad(double ai, double bi, int select, double *ao, double *bo); | 
|---|
|  | 110 |  | 
|---|
|  | 111 | #endif | 
|---|