Changeset 19388


Ignore:
Timestamp:
Nov 13, 2018, 4:15:06 PM (5 months ago)
Author:
tbretz
Message:
Declare all functions inline to avoid multiple definitions when including the header twice. Use the precompiler directive PRESET_OBSERVATORY as default observatory instead of kORM (keep kORM as default if PRESET_OBSERVATORY was not set. Implement a function which allows to return the name corresponding to some observatory location. Implemented a function which return the corresponding name of the PRESET_OBSERVATORY. If the string in the constructor is empty, return the PRESET_OBSERVATORY. This allows to overwrite the default during compile time.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Mars/mcore/nova.h

    r19293 r19388  
    2727#endif
    2828
     29#ifndef PRESET_OBSERVATORY
     30#define PRESET_OBSERVATORY kORM
     31#endif
     32
    2933    const static double kSolarStandardHorizon = LN_SOLAR_STANDART_HORIZON;
    3034
     
    3640    struct LnLatPosn : public ln_lnlat_posn
    3741    {
    38         LnLatPosn() { }
    39         LnLatPosn(const ln_lnlat_posn &pos) : ln_lnlat_posn(pos) { }
    40         LnLatPosn(std::string obs)
     42        typedef std::map<std::string, ln_lnlat_posn> LUT;
     43
     44        bool operator==(const LnLatPosn &eq) const
     45        {
     46            return lng==eq.lng && lat==eq.lat;
     47        }
     48
     49        static const LUT &lut()
    4150        {
    4251#ifndef __CINT__
    43             static const std::map<std::string, ln_lnlat_posn> lut =
     52            static const LUT lut =
    4453            {
    4554                { "ORM",  kORM  },
     
    4857                { "RWTH", kRWTH },
    4958            };
     59            return lut;
     60#else
     61            return LUT();
     62#endif
     63        }
     64
     65        LnLatPosn() { }
     66        LnLatPosn(const ln_lnlat_posn &pos) : ln_lnlat_posn(pos) { }
     67        LnLatPosn(std::string obs)
     68        {
     69#ifndef __CINT__
     70            if (obs.empty())
     71                return PRESET_OBSERVATORY;
    5072
    5173            for (auto it=obs.begin(); it!=obs.end(); it++)
    5274                *it = toupper(*it);
    5375
    54             const auto it = lut.find(obs);
    55             *this = it==lut.end() ? ln_lnlat_posn({std::numeric_limits<double>::quiet_NaN(),std::numeric_limits<double>::quiet_NaN()}) : it->second;
     76            const auto it = lut().find(obs);
     77            *this = it==lut().end() ? ln_lnlat_posn({std::numeric_limits<double>::quiet_NaN(),std::numeric_limits<double>::quiet_NaN()}) : it->second;
    5678#endif
    5779        }
     
    5981        {
    6082            return std::isfinite(lat) && std::isfinite(lng);
     83        }
     84
     85        const std::string &name() const
     86        {
     87            for (auto it=lut().begin(); it!=lut().end(); it++)
     88                if (LnLatPosn(it->second)==*this)
     89                    return it->first;
     90
     91            static const std::string dummy;
     92            return dummy;
     93        }
     94
     95        static const std::string preset()
     96        {
     97            return LnLatPosn(PRESET_OBSERVATORY).name();
    6198        }
    6299    };
     
    81118    };
    82119
    83     HrzPosn::HrzPosn(const ZdAzPosn &za) { alt = 90-za.zd; az = za.az-180; }
     120    inline HrzPosn::HrzPosn(const ZdAzPosn &za) { alt = 90-za.zd; az = za.az-180; }
    84121
    85122
     
    103140    };
    104141
    105     EquPosn::EquPosn(const RaDecPosn &rd) { ra = rd.ra*15; dec = rd.dec; }
    106 
    107     HrzPosn GetHrzFromEqu(const EquPosn &equ, const LnLatPosn &obs, const double &jd)
     142    inline EquPosn::EquPosn(const RaDecPosn &rd) { ra = rd.ra*15; dec = rd.dec; }
     143
     144    inline HrzPosn GetHrzFromEqu(const EquPosn &equ, const LnLatPosn &obs, const double &jd)
    108145    {
    109146        HrzPosn hrz;
     
    111148        return hrz;
    112149    }
    113     HrzPosn GetHrzFromEqu(const EquPosn &equ, const double &jd)
    114     {
    115         return GetHrzFromEqu(equ, kORM, jd);
    116     }
    117 
    118     EquPosn GetEquFromHrz(const HrzPosn &hrz, const LnLatPosn &obs, const double &jd)
     150    inline HrzPosn GetHrzFromEqu(const EquPosn &equ, const double &jd)
     151    {
     152        return GetHrzFromEqu(equ, PRESET_OBSERVATORY, jd);
     153    }
     154
     155    inline EquPosn GetEquFromHrz(const HrzPosn &hrz, const LnLatPosn &obs, const double &jd)
    119156    {
    120157        EquPosn equ;
     
    122159        return equ;
    123160    }
    124     EquPosn GetEquFromHrz(const HrzPosn &hrz, const double &jd)
    125     {
    126         return GetEquFromHrz(hrz, kORM, jd);
    127     }
    128 
    129     RstTime GetSolarRst(const double &jd, const LnLatPosn &obs, const double &hrz=kSolarStandardHorizon)
     161    inline EquPosn GetEquFromHrz(const HrzPosn &hrz, const double &jd)
     162    {
     163        return GetEquFromHrz(hrz, PRESET_OBSERVATORY, jd);
     164    }
     165
     166    inline RstTime GetSolarRst(const double &jd, const LnLatPosn &obs, const double &hrz=kSolarStandardHorizon)
    130167    {
    131168        RstTime rst;
     
    133170        return rst;
    134171    }
    135     RstTime GetSolarRst(const double &jd, const double &hrz=kSolarStandardHorizon)
    136     {
    137         return GetSolarRst(jd, kORM, hrz);
    138     }
    139 
    140     RstTime GetLunarRst(const double &jd, const LnLatPosn &obs=kORM)
     172    inline RstTime GetSolarRst(const double &jd, const double &hrz=kSolarStandardHorizon)
     173    {
     174        return GetSolarRst(jd, PRESET_OBSERVATORY, hrz);
     175    }
     176
     177    inline RstTime GetLunarRst(const double &jd, const LnLatPosn &obs=PRESET_OBSERVATORY)
    141178    {
    142179        RstTime rst;
     
    144181        return rst;
    145182    }
    146     EquPosn GetSolarEquCoords(const double &jd)
     183    inline EquPosn GetSolarEquCoords(const double &jd)
    147184    {
    148185        EquPosn equ;
     
    151188    }
    152189
    153     double GetLunarDisk(const double &jd)
     190    inline double GetLunarDisk(const double &jd)
    154191    {
    155192        return ln_get_lunar_disk(jd);
    156193    }
    157194
    158     double GetLunarSdiam(const double &jd)
     195    inline double GetLunarSdiam(const double &jd)
    159196    {
    160197        return ln_get_lunar_sdiam(jd);
    161198    }
    162199
    163     double GetLunarPhase(const double &jd)
     200    inline double GetLunarPhase(const double &jd)
    164201    {
    165202        return ln_get_lunar_phase(jd);
    166203    }
    167204
    168     EquPosn GetLunarEquCoords(const double &jd, double precision=0)
     205    inline EquPosn GetLunarEquCoords(const double &jd, double precision=0)
    169206    {
    170207        EquPosn equ;
     
    173210    }
    174211
    175     double GetLunarEarthDist(const double &jd)
     212    inline double GetLunarEarthDist(const double &jd)
    176213    {
    177214        return ln_get_lunar_earth_dist(jd);
    178215    }
    179216
    180     double GetAngularSeparation(const EquPosn &p1, const EquPosn &p2)
     217    inline double GetAngularSeparation(const EquPosn &p1, const EquPosn &p2)
    181218    {
    182219        return ln_get_angular_separation(const_cast<EquPosn*>(&p1), const_cast<EquPosn*>(&p2));
    183220    }
    184221
    185     double GetAngularSeparation(const HrzPosn &h1, const HrzPosn &h2)
     222    inline double GetAngularSeparation(const HrzPosn &h1, const HrzPosn &h2)
    186223    {
    187224        EquPosn p1; p1.ra=h1.az; p1.dec=h1.alt;
     
    203240        double fEarthDist;
    204241
    205         SolarObjects(const double &jd, const LnLatPosn &obs=Nova::kORM)
     242        SolarObjects(const double &jd, const LnLatPosn &obs=Nova::PRESET_OBSERVATORY)
    206243        {
    207244            fJD = jd;
     
    219256        }
    220257    };
    221 
    222258}
    223259
Note: See TracChangeset for help on using the changeset viewer.