Changeset 19430


Ignore:
Timestamp:
Jan 25, 2019, 11:29:40 PM (3 weeks ago)
Author:
tbretz
Message:
Added the GetNext/Prev also for SunSet.
Location:
trunk/FACT++/src
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/FACT++/src/Time.cc

    r19215 r19430  
    400400//
    401401//! @returns
     402//!     The time of the previous sun-set, relative to given horizon in degree,
     403//!     for the observatory location given (see nova.h).
     404//!     If the sun is circumpolar, it simply return the intgeral fraction of
     405//!     the current MJD.
     406//!     If libnova was not compiled in, it will return the next noon.
     407//!
     408//!  @throws
     409//!     A runtime_error exception is thrown if the observatory location
     410//!     is not defined (see nova.h)
     411//
     412Time Time::GetPrevSunSet(double horizon, const string &obs) const
     413{
     414#ifdef HAVE_NOVA
     415    const Nova::LnLatPosn posn(obs);
     416    if (!posn.isValid())
     417        throw runtime_error("Observatory location '"+obs+"' unknown.");
     418
     419    ln_rst_time sun_day;
     420    if (ln_get_solar_rst_horizon(JD()-0.5, const_cast<Nova::LnLatPosn*>(&posn), horizon, &sun_day)==1)
     421        return Time(floor(Mjd()));
     422
     423    if (Time(sun_day.set)<*this)
     424        return Time(sun_day.set);
     425
     426    if (ln_get_solar_rst_horizon(JD()-1.5, const_cast<Nova::LnLatPosn*>(&posn), horizon, &sun_day)==1)
     427        return Time(floor(Mjd()));
     428
     429    return Time(sun_day.set);
     430#else
     431    return Time(floor(Mjd()-0.5)+0.5);
     432#endif
     433}
     434
     435// --------------------------------------------------------------------------
     436//
     437//! @returns
     438//!     The time of the next sun-set, relative to given horizon in degree,
     439//!     for the observatory location given (see nova.h).
     440//!     If the sun is circumpolar, it simply return the intgeral fraction of
     441//!     the current MJD+1.
     442//!     If libnova was not compiled in, it will return the next noon.
     443//!
     444//!  @throws
     445//!     A runtime_error exception is thrown if the observatory location
     446//!     is not defined (see nova.h)
     447//
     448Time Time::GetNextSunSet(double horizon, const string &obs) const
     449{
     450#ifdef HAVE_NOVA
     451    const Nova::LnLatPosn posn(obs);
     452    if (!posn.isValid())
     453        throw runtime_error("Observatory location '"+obs+"' unknown.");
     454
     455    ln_rst_time sun_day;
     456    if (ln_get_solar_rst_horizon(JD()-0.5, const_cast<Nova::LnLatPosn*>(&posn), horizon, &sun_day)==1)
     457        return Time(floor(Mjd())+1);
     458
     459    if (Time(sun_day.set)>=*this)
     460        return Time(sun_day.set);
     461
     462    if (ln_get_solar_rst_horizon(JD()+0.5, const_cast<Nova::LnLatPosn*>(&posn), horizon, &sun_day)==1)
     463        return Time(floor(Mjd())+1);
     464
     465    return Time(sun_day.set);
     466#else
     467    return Time(floor(Mjd()+0.5)+0.5);
     468#endif
     469}
     470
     471// --------------------------------------------------------------------------
     472//
     473//! Calls GetPrevSunSet(LN_SOLAR_STANDART_HORIZON)
     474//
     475Time Time::GetPrevSunSet(const string &obs) const
     476{
     477#ifdef HAVE_NOVA
     478    return GetPrevSunSet(LN_SOLAR_STANDART_HORIZON, obs);
     479#else
     480    return GetPrevSunSet(-0.8333, obs);
     481#endif
     482}
     483
     484// --------------------------------------------------------------------------
     485//
     486//! Calls GetNextSunSet(LN_SOLAR_STANDART_HORIZON)
     487//
     488Time Time::GetNextSunSet(const string &obs) const
     489{
     490#ifdef HAVE_NOVA
     491    return GetNextSunSet(LN_SOLAR_STANDART_HORIZON, obs);
     492#else
     493    return GetNextSunSet(-0.8333, obs);
     494#endif
     495}
     496
     497// --------------------------------------------------------------------------
     498//
     499//! @returns
    402500//!     Returns an int corresponding to the current sun-cycle, that means
    403501//!     the day of the last sun-rise w.r.t. this Time.
  • trunk/FACT++/src/Time.h

    r19390 r19430  
    120120    Time GetNextSunRise(const std::string &obs="") const;
    121121
     122    Time GetPrevSunSet(double horizon, const std::string &obs="") const;
     123    Time GetNextSunSet(double horizon, const std::string &obs="") const;
     124
     125    Time GetPrevSunSet(const std::string &obs="") const;
     126    Time GetNextSunSet(const std::string &obs="") const;
     127
    122128    uint32_t NightAsInt(const std::string &obs="") const;
    123129};
Note: See TracChangeset for help on using the changeset viewer.