| 1 | #ifndef MARS_MObservatory | 
|---|
| 2 | #define MARS_MObservatory | 
|---|
| 3 |  | 
|---|
| 4 | #ifndef MARS_MParContainer | 
|---|
| 5 | #include "MParContainer.h" | 
|---|
| 6 | #endif | 
|---|
| 7 |  | 
|---|
| 8 | class MTime; | 
|---|
| 9 | class TArrayD; | 
|---|
| 10 |  | 
|---|
| 11 | class MObservatory : public MParContainer | 
|---|
| 12 | { | 
|---|
| 13 | public: | 
|---|
| 14 | enum LocationName_t | 
|---|
| 15 | { | 
|---|
| 16 | kMagic1, | 
|---|
| 17 | kWuerzburgCity, | 
|---|
| 18 | kTuorla | 
|---|
| 19 | }; | 
|---|
| 20 |  | 
|---|
| 21 | private: | 
|---|
| 22 | LocationName_t fObservatoryKey;  //! | 
|---|
| 23 |  | 
|---|
| 24 | TString  fObservatoryName;       //! Name of the observatory | 
|---|
| 25 |  | 
|---|
| 26 | Double_t fLongitude;             //! [rad] Longitude of observatory (+ east) | 
|---|
| 27 | Double_t fLatitude;              //! [rad] Latitude of observatory (+ north) | 
|---|
| 28 |  | 
|---|
| 29 | Double_t fSinLatitude;           //! Sin component for faster access | 
|---|
| 30 | Double_t fCosLatitude;           //! Cos component for faster access | 
|---|
| 31 |  | 
|---|
| 32 | Double_t fHeight;                //! [m] height of observatory | 
|---|
| 33 |  | 
|---|
| 34 | void Init(const char *name=NULL, const char *title=NULL); | 
|---|
| 35 |  | 
|---|
| 36 | public: | 
|---|
| 37 | MObservatory(const char *name=NULL, const char *title=NULL); | 
|---|
| 38 | MObservatory(LocationName_t key, const char *name=NULL, const char *title=NULL); | 
|---|
| 39 | MObservatory(Double_t lon, Double_t lat, const char *name="<n/a>"); | 
|---|
| 40 | MObservatory(Double_t lon, Double_t lat, Double_t h, const char *name="<n/a>"); | 
|---|
| 41 |  | 
|---|
| 42 | void Copy(TObject &obj) const | 
|---|
| 43 | { | 
|---|
| 44 | MObservatory &obs = (MObservatory&)obj; | 
|---|
| 45 | obs.fObservatoryName = fObservatoryName; | 
|---|
| 46 | obs.fLongitude = fLongitude; | 
|---|
| 47 | obs.fLatitude = fLatitude; | 
|---|
| 48 | obs.fSinLatitude = fSinLatitude; | 
|---|
| 49 | obs.fCosLatitude = fCosLatitude; | 
|---|
| 50 | obs.fHeight = fHeight; | 
|---|
| 51 | } | 
|---|
| 52 |  | 
|---|
| 53 | void SetLocation(LocationName_t name); | 
|---|
| 54 | void SetLocation(Double_t lon, Double_t lat, Double_t h=0, const char *name=NULL); | 
|---|
| 55 |  | 
|---|
| 56 | void Print(Option_t *o=0) const; | 
|---|
| 57 |  | 
|---|
| 58 | const TString &GetObservatoryName() const { return fObservatoryName; } | 
|---|
| 59 |  | 
|---|
| 60 | Double_t GetLatitudeDeg() const     { return fLatitude*kRad2Deg; }  //[deg] | 
|---|
| 61 | Double_t GetLongitudeDeg() const    { return fLongitude*kRad2Deg; } //[deg] | 
|---|
| 62 |  | 
|---|
| 63 | Double_t GetLatitudeRad() const     { return fLatitude; }           //[rad] | 
|---|
| 64 | Double_t GetLongitudeRad() const    { return fLongitude; }          //[rad] | 
|---|
| 65 |  | 
|---|
| 66 | Double_t GetPhi() const             { return fLatitude; }           //[rad] | 
|---|
| 67 | Double_t GetElong() const           { return fLongitude; }          //[rad] | 
|---|
| 68 |  | 
|---|
| 69 | Double_t GetSinPhi() const          { return fSinLatitude; } | 
|---|
| 70 | Double_t GetCosPhi() const          { return fCosLatitude; } | 
|---|
| 71 |  | 
|---|
| 72 | Double_t GetHeight() const          { return fHeight; } | 
|---|
| 73 |  | 
|---|
| 74 | TArrayD GetSunRiseSet(Double_t mjd, Double_t alt=0) const; | 
|---|
| 75 |  | 
|---|
| 76 | void RotationAngle(Double_t theta, Double_t phi, Double_t &sin, Double_t &cos) const; | 
|---|
| 77 | Double_t RotationAngle(Double_t theta, Double_t phi) const; | 
|---|
| 78 |  | 
|---|
| 79 | LocationName_t GetObservatoryKey() const { return fObservatoryKey; } | 
|---|
| 80 |  | 
|---|
| 81 | Int_t ReadEnv(const TEnv &env, TString prefix, Bool_t print=kFALSE); | 
|---|
| 82 |  | 
|---|
| 83 | ClassDef(MObservatory, 0) // class storing observatory locations | 
|---|
| 84 | }; | 
|---|
| 85 |  | 
|---|
| 86 | #endif | 
|---|