| 1 | #ifndef MARS_MAstro | 
|---|
| 2 | #define MARS_MAstro | 
|---|
| 3 |  | 
|---|
| 4 | #ifndef ROOT_TROOT | 
|---|
| 5 | #include <TROOT.h> | 
|---|
| 6 | #endif | 
|---|
| 7 | #ifndef ROOT_TVector2 | 
|---|
| 8 | #include <TVector2.h> | 
|---|
| 9 | #endif | 
|---|
| 10 |  | 
|---|
| 11 | class TArrayD; | 
|---|
| 12 | class TVector3; | 
|---|
| 13 | class MTime; | 
|---|
| 14 |  | 
|---|
| 15 | class MAstro | 
|---|
| 16 | { | 
|---|
| 17 | private: | 
|---|
| 18 | static Double_t Round(Double_t val); | 
|---|
| 19 | static Double_t Trunc(Double_t val); | 
|---|
| 20 |  | 
|---|
| 21 | static Double_t Kepler(Double_t m, Double_t ecc); | 
|---|
| 22 |  | 
|---|
| 23 | public: | 
|---|
| 24 | virtual ~MAstro() { } | 
|---|
| 25 |  | 
|---|
| 26 | // Unit conversion | 
|---|
| 27 | static Double_t Parsec2Meter()    { return 3.0856776e+16; } | 
|---|
| 28 | static Double_t Parsec2Lighyear() { return 3.2615644; } | 
|---|
| 29 |  | 
|---|
| 30 | static Double_t DegToHor()        { return 15; } | 
|---|
| 31 | static Double_t HorToDeg()        { return 1./15; } | 
|---|
| 32 |  | 
|---|
| 33 | static Double_t RadToHor()        { return 24/TMath::TwoPi(); } | 
|---|
| 34 | static Double_t HorToRad()        { return TMath::TwoPi()/24; } | 
|---|
| 35 |  | 
|---|
| 36 | // Angle/Time conversion functions | 
|---|
| 37 | static Double_t Hms2Sec(Int_t deg, UInt_t min, Double_t sec, char sgn='+'); | 
|---|
| 38 | static Double_t Dms2Rad(Int_t deg, UInt_t min, Double_t sec, Char_t sgn='+'); | 
|---|
| 39 | static Double_t Hms2Rad(Int_t hor, UInt_t min, Double_t sec, Char_t sgn='+'); | 
|---|
| 40 | static Double_t Dms2Deg(Int_t deg, UInt_t min, Double_t sec, Char_t sgn='+'); | 
|---|
| 41 | static Double_t Hms2Deg(Int_t hor, UInt_t min, Double_t sec, Char_t sgn='+'); | 
|---|
| 42 | static Double_t Dms2Hor(Int_t deg, UInt_t min, Double_t sec, Char_t sgn='+'); | 
|---|
| 43 | static Double_t Hms2Hor(Int_t hor, UInt_t min, Double_t sec, Char_t sgn='+'); | 
|---|
| 44 |  | 
|---|
| 45 | static void Day2Hms(Double_t day, Char_t &sgn, UShort_t &hor, UShort_t &min, UShort_t &sec); | 
|---|
| 46 | static void Rad2Dms(Double_t rad, Char_t &sgn, UShort_t °, UShort_t &min, UShort_t &sec); | 
|---|
| 47 | static void Rad2Hms(Double_t rad, Char_t &sgn, UShort_t &hor, UShort_t &min, UShort_t &sec); | 
|---|
| 48 | static void Deg2Dms(Double_t deg, Char_t &sgn, UShort_t °, UShort_t &min, UShort_t &sec); | 
|---|
| 49 | static void Deg2Hms(Double_t deg, Char_t &sgn, UShort_t &hor, UShort_t &min, UShort_t &sec); | 
|---|
| 50 | static void Hor2Dms(Double_t hor, Char_t &sgn, UShort_t °, UShort_t &min, UShort_t &sec); | 
|---|
| 51 | static void Hor2Hms(Double_t hor, Char_t &sgn, UShort_t &hor, UShort_t &min, UShort_t &sec); | 
|---|
| 52 |  | 
|---|
| 53 | static void Day2Hm(Double_t day, Char_t &sgn, UShort_t &hor, Double_t &min); | 
|---|
| 54 | static void Rad2Dm(Double_t rad, Char_t &sgn, UShort_t °, Double_t &min); | 
|---|
| 55 | static void Rad2Hm(Double_t rad, Char_t &sgn, UShort_t &hor, Double_t &min); | 
|---|
| 56 | static void Deg2Dm(Double_t deg, Char_t &sgn, UShort_t °, Double_t &min); | 
|---|
| 57 | static void Deg2Hm(Double_t deg, Char_t &sgn, UShort_t &hor, Double_t &min); | 
|---|
| 58 | static void Hor2Dm(Double_t rad, Char_t &sgn, UShort_t °, Double_t &min); | 
|---|
| 59 | static void Hor2Hm(Double_t rad, Char_t &sgn, UShort_t &hor, Double_t &min); | 
|---|
| 60 |  | 
|---|
| 61 | // Print funtions | 
|---|
| 62 | static TString GetStringDeg(Double_t deg, const char *fmt="%c%d:%02d:%02d"); | 
|---|
| 63 | static TString GetStringHor(Double_t deg, const char *fmt="%c%d:%02d:%02d"); | 
|---|
| 64 |  | 
|---|
| 65 | // Angle treatment functions | 
|---|
| 66 | static Bool_t  String2Angle(TString &str, Double_t &ret); | 
|---|
| 67 | static Bool_t  Coordinate2Angle(const TString &str, Double_t &ret); | 
|---|
| 68 | static TString Angle2Coordinate(Double_t val); | 
|---|
| 69 |  | 
|---|
| 70 | static Double_t AngularDistance(Double_t theta0, Double_t phi0, Double_t theta1, Double_t phi1); | 
|---|
| 71 |  | 
|---|
| 72 | // Time treatment functions | 
|---|
| 73 | static void  Mjd2Ymd(UInt_t mjd, UShort_t &y, Byte_t &m, Byte_t &d); | 
|---|
| 74 | static Int_t Ymd2Mjd(UShort_t y, Byte_t m, Byte_t d); | 
|---|
| 75 |  | 
|---|
| 76 | static Double_t UT2GMST(Double_t ut1); | 
|---|
| 77 |  | 
|---|
| 78 | // Rotation angle between local and sky coordinate system | 
|---|
| 79 | static void     RotationAngle(Double_t sinl, Double_t cosl, Double_t theta, Double_t phi, Double_t &sin, Double_t &cos); | 
|---|
| 80 | static Double_t RotationAngle(Double_t sinl, Double_t cosl, Double_t theta, Double_t phi); | 
|---|
| 81 |  | 
|---|
| 82 | static void     GetMoonRaDec(Double_t mjd, Double_t &ra, Double_t &dec); | 
|---|
| 83 |  | 
|---|
| 84 | static Double_t GetMoonPhase(Double_t mjd); | 
|---|
| 85 | static Double_t GetMoonPeriod(Double_t mjd); | 
|---|
| 86 | static Int_t    GetMagicPeriod(Double_t mjd); | 
|---|
| 87 |  | 
|---|
| 88 | static Double_t EstimateCulminationTime(Double_t mjd, Double_t longit, Double_t ra); | 
|---|
| 89 |  | 
|---|
| 90 | // Estimate some parameters around the sun | 
|---|
| 91 | static Double_t GetSunRaDec(Double_t mjd, Double_t &ra, Double_t &dec); | 
|---|
| 92 | static Double_t GetEquationOfTime(Double_t mjd); | 
|---|
| 93 | static Double_t GetNoonTime(Double_t mjd, Double_t longit); | 
|---|
| 94 | static Double_t GetTimeFromNoonToAlt(Double_t mjd, Double_t latit, Double_t alt); | 
|---|
| 95 | static TArrayD  GetSunRiseSet(Double_t mjd, Double_t longit, Double_t latit, Double_t alt=0); | 
|---|
| 96 |  | 
|---|
| 97 | // Get distance between v1 and v0 in a plain perpendicular to v0 in distance dist | 
|---|
| 98 | static TVector2 GetDistOnPlain(const TVector3 &v0, TVector3 v1, Double_t dist=1); | 
|---|
| 99 |  | 
|---|
| 100 | // Calculate absolute misspointing from error in zd and error in az | 
|---|
| 101 | static Double_t GetDevAbs(Double_t nomzd, Double_t devzd, Double_t devaz); | 
|---|
| 102 |  | 
|---|
| 103 | static Int_t GetEasterOffset(UShort_t year); | 
|---|
| 104 |  | 
|---|
| 105 | ClassDef(MAstro, 0) | 
|---|
| 106 | }; | 
|---|
| 107 |  | 
|---|
| 108 | #endif | 
|---|