| [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 | 
|---|