| 1 | #ifndef AbsCalTool_H
|
|---|
| 2 | #define AbsCalTool_H
|
|---|
| 3 |
|
|---|
| 4 | #include <fstream>
|
|---|
| 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 !!!!!!!-------------------------------------------------------
|
|---|
| 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 | }
|
|---|
| 67 | //compute solid angle between cones of aperture angles ang1 and ang2
|
|---|
| 68 |
|
|---|
| 69 | double diffSolidAng(double ang1,double ang2) const
|
|---|
| 70 | { return fabs(2*M_PI*(cos(ang1)-cos(ang2))); // Steradians
|
|---|
| 71 | }
|
|---|
| 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 |
|---|