Ignore:
Timestamp:
06/02/12 20:30:15 (12 years ago)
Author:
tbretz
Message:
Added a source list and some improvements to the astronomy calculations.
File:
1 edited

Legend:

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

    r14040 r14042  
    7979    Time time;
    8080
    81     Time fSunRiseDayTime;
    82     Time fSunRiseCivil;
    83     Time fSunRiseAstronomical;
    84     Time fSunRiseDarkTime;
    85 
    86     Time fSunSetDayTime;
    87     Time fSunSetCivil;
    88     Time fSunSetAstronomical;
    89     Time fSunSetDarkTime;
     81    Time fRiseDayTime;
     82    Time fRiseCivil;
     83    Time fRiseAstronomical;
     84    Time fRiseDarkTime;
     85
     86    Time fSetDayTime;
     87    Time fSetCivil;
     88    Time fSetAstronomical;
     89    Time fSetDarkTime;
    9090
    9191    int state;
     
    100100    {
    101101    }
     102
     103    // Could be done more efficient: Only recalcuate if
     104    // the current time exceeds at least on of the stored times
    102105    Sun(double lon, double lat, const Time &t=Time()) :  time(t)
    103106    {
     
    121124        ln_get_solar_rst_horizon(JD-0.5, &observer, -18, &sun_dark);
    122125
    123         fSunSetDayTime       = Time(sun_day.set);
    124         fSunSetCivil         = Time(sun_civil.set);
    125         fSunSetAstronomical  = Time(sun_astronomical.set);
    126         fSunSetDarkTime      = Time(sun_dark.set);
    127 
    128         fSunRiseDayTime      = Time(sun_day.rise);
    129         fSunRiseCivil        = Time(sun_civil.rise);
    130         fSunRiseAstronomical = Time(sun_astronomical.rise);
    131         fSunRiseDarkTime     = Time(sun_dark.rise);
     126        fSetDayTime       = Time(sun_day.set);
     127        fSetCivil         = Time(sun_civil.set);
     128        fSetAstronomical  = Time(sun_astronomical.set);
     129        fSetDarkTime      = Time(sun_dark.set);
     130
     131        fRiseDayTime      = Time(sun_day.rise);
     132        fRiseCivil        = Time(sun_civil.rise);
     133        fRiseAstronomical = Time(sun_astronomical.rise);
     134        fRiseDarkTime     = Time(sun_dark.rise);
    132135
    133136        const bool is_day   = JD>sun_day.rise;
     
    141144        if (is_day)
    142145        {
    143             fSunRiseDayTime      = Time(sun_day.rise);
    144             fSunRiseCivil        = Time(sun_civil.rise);
    145             fSunRiseAstronomical = Time(sun_astronomical.rise);
    146             fSunRiseDarkTime     = Time(sun_dark.rise);
     146            fRiseDayTime      = Time(sun_day.rise);
     147            fRiseCivil        = Time(sun_civil.rise);
     148            fRiseAstronomical = Time(sun_astronomical.rise);
     149            fRiseDarkTime     = Time(sun_dark.rise);
    147150        }
    148151
    149152        if (is_night)
    150153        {
    151             fSunSetDayTime      = Time(sun_day.set);
    152             fSunSetCivil        = Time(sun_civil.set);
    153             fSunSetAstronomical = Time(sun_astronomical.set);
    154             fSunSetDarkTime     = Time(sun_dark.set);
     154            fSetDayTime      = Time(sun_day.set);
     155            fSetCivil        = Time(sun_civil.set);
     156            fSetAstronomical = Time(sun_astronomical.set);
     157            fSetDarkTime     = Time(sun_dark.set);
    155158        }
    156159
     
    162165
    163166        state = isday ? 4 : 0;
    164         if (time>fSunSetDayTime)       state++;
    165         if (time>fSunSetCivil)         state++;
    166         if (time>fSunSetAstronomical)  state++;
    167         if (time>fSunSetDarkTime)      state++;
    168 
    169         if (time>fSunRiseDarkTime)     state++;
    170         if (time>fSunRiseAstronomical) state++;
    171         if (time>fSunRiseCivil)        state++;
    172         if (time>fSunRiseDayTime)      state++;
     167        if (time>fSetDayTime)       state++;
     168        if (time>fSetCivil)         state++;
     169        if (time>fSetAstronomical)  state++;
     170        if (time>fSetDarkTime)      state++;
     171
     172        if (time>fRiseDarkTime)     state++;
     173        if (time>fRiseAstronomical) state++;
     174        if (time>fRiseCivil)        state++;
     175        if (time>fRiseDayTime)      state++;
    173176
    174177        string name[] =
     
    188191
    189192        const string arr = isday ?
    190             fSunSetDarkTime.MinutesTo(time)+"↓" :
    191             fSunRiseDarkTime.MinutesTo(time)+"↑";
     193            fSetDarkTime.MinutesTo(time)+"↓" :
     194            fRiseDarkTime.MinutesTo(time)+"↑";
    192195
    193196        description += " ["+arr+"]";
     
    222225    bool visible;
    223226
    224     Time fMoonRise;
    225     Time fMoonTransit;
    226     Time fMoonSet;
     227    Time fRise;
     228    Time fTransit;
     229    Time fSet;
    227230
    228231    string description;
    229232    string color;
    230233
     234    int state;
     235
    231236    Moon() : time(Time::none)
    232237    {
    233238    }
    234239
     240    // Could be done more efficient: Only recalcuate if
     241    // the current time exceeds at least on of the stored times
    235242    Moon(double lon, double lat, const Time &t=Time()) : time(t)
    236243    {
     
    252259        ln_get_lunar_rst(JD-0.5, &observer, &moon);
    253260
    254         fMoonRise    = Time(moon.rise);
    255         fMoonTransit = Time(moon.transit);
    256         fMoonSet     = Time(moon.set);
    257 
    258         visible =
    259             (JD>moon.rise && JD<moon.set && moon.rise<moon.set) ||
    260             ((JD<moon.set  || JD>moon.rise) && moon.rise>moon.set);
     261        fRise    = Time(moon.rise);
     262        fTransit = Time(moon.transit);
     263        fSet     = Time(moon.set);
     264
     265        //visible =
     266        //    ((JD>moon.rise && JD<moon.set ) && moon.rise<moon.set) ||
     267        //    ((JD<moon.set  || JD>moon.rise) && moon.rise>moon.set);
    261268
    262269        const bool is_up      = JD>moon.rise;
     
    266273        ln_get_lunar_rst(JD+0.5, &observer, &moon);
    267274        if (is_up)
    268             fMoonRise = Time(moon.rise);
     275            fRise = Time(moon.rise);
    269276        if (is_sinking)
    270             fMoonTransit = Time(moon.transit);
     277            fTransit = Time(moon.transit);
    271278        if (is_dn)
    272             fMoonSet = Time(moon.set);
     279            fSet = Time(moon.set);
    273280
    274281        ln_equ_posn pos;
     
    284291
    285292        disk = ln_get_lunar_disk(JD)*100;
     293        state = 0;
     294        if (fRise   <fTransit && fRise   <fSet)     state = 0;  // not visible
     295        if (fTransit<fSet     && fTransit<fRise)    state = 1;  // before culm
     296        if (fSet    <fRise    && fSet    <fTransit) state = 2;  // after culm
     297
     298        visible = state!=0;
     299
     300        // 0: not visible
     301        // 1: visible before cul
     302        // 2: visible after cul
    286303
    287304        if (!visible || disk<25)
     
    290307            color = disk>75 ? HTML::kRed : HTML::kYellow;
    291308
    292         const string arr = fMoonSet<fMoonRise ?
    293             fMoonSet.MinutesTo(time)+"&darr;" :
    294             fMoonRise.MinutesTo(time)+"&uarr;";
     309        const string arr = fSet<fRise ?
     310            fSet.MinutesTo(time) +"&darr;" :
     311            fRise.MinutesTo(time)+"&uarr;";
    295312
    296313        ostringstream out;
     
    632649        // Not that this will also "ding" just after program startup
    633650        // if the dimctrl is still in state -3
    634         if (d.GetQoS()==-3 && fDimControl.scriptdepth==0)
     651        if (fDimControl.last.second!=DimState::kOffline &&
     652            d.GetQoS()==-3 && fDimControl.scriptdepth==0)
    635653            SetAudio("ding");
    636654
     
    850868        fDriveControlMoonDist = -1;
    851869
    852         Moon moon(-(17.+53./60+26.525/3600), 28.+45./60+42.462/3600);
    853         if (moon.visible)
    854         {
    855             const double angle = moon.Angle(Ra, Dec);
     870        if (fMoon.visible)
     871        {
     872            const double angle = fMoon.Angle(Ra, Dec);
    856873            out << Moon::Color(angle) << '\t' << setprecision(3) << angle << '\n';
    857874
     
    16671684        fMoon = Moon(lon, lat, now);
    16681685
     1686        vector<string> color(8, HTML::kWhite);
     1687        color[fSun.state%8] = HTML::kBlue;
     1688
    16691689        ostringstream out;
    16701690        out << setprecision(3);
    16711691        out << now.JavaDate() << '\n';
    1672         out << HTML::kWhite << '\t' << fSun.fSunRiseDarkTime.GetAsStr("%H:%M") << '\n';
    1673         out << HTML::kWhite << '\t' << fSun.fSunRiseAstronomical.GetAsStr("%H:%M") << '\n';
    1674         out << HTML::kWhite << '\t' << fSun.fSunRiseCivil.GetAsStr("%H:%M") << '\n';
    1675         out << HTML::kWhite << '\t' << fSun.fSunRiseDayTime.GetAsStr("%H:%M") << '\n';
    1676 
    1677         out << HTML::kWhite << '\t' << fSun.fSunSetDayTime.GetAsStr("%H:%M") << '\n';
    1678         out << HTML::kWhite << '\t' << fSun.fSunSetCivil.GetAsStr("%H:%M") << '\n';
    1679         out << HTML::kWhite << '\t' << fSun.fSunSetAstronomical.GetAsStr("%H:%M") << '\n';
    1680         out << HTML::kWhite << '\t' << fSun.fSunSetDarkTime.GetAsStr("%H:%M") << '\n';
     1692        out << color[0] << '\t' << fSun.fRiseDarkTime.GetAsStr("%H:%M") << '\n';
     1693        out << color[1] << '\t' << fSun.fRiseAstronomical.GetAsStr("%H:%M") << '\n';
     1694        out << color[2] << '\t' << fSun.fRiseCivil.GetAsStr("%H:%M") << '\n';
     1695        out << color[3] << '\t' << fSun.fRiseDayTime.GetAsStr("%H:%M") << '\n';
     1696
     1697        out << color[4] << '\t' << fSun.fSetDayTime.GetAsStr("%H:%M") << '\n';
     1698        out << color[5] << '\t' << fSun.fSetCivil.GetAsStr("%H:%M") << '\n';
     1699        out << color[6] << '\t' << fSun.fSetAstronomical.GetAsStr("%H:%M") << '\n';
     1700        out << color[7] << '\t' << fSun.fSetDarkTime.GetAsStr("%H:%M") << '\n';
    16811701
    16821702        ofstream(fPath+"/sun.data") << out.str();
     1703
     1704        color.assign(3, HTML::kWhite);
     1705        color[fMoon.state%3] = HTML::kBlue;
    16831706
    16841707        out.str("");
    16851708        out << now.JavaDate() << '\n';
    16861709
    1687         out << HTML::kWhite << '\t' << fMoon.fMoonRise.GetAsStr("%H:%M") << '\n';
    1688         out << HTML::kWhite << '\t' << fMoon.fMoonTransit.GetAsStr("%H:%M") << '\n';
    1689         out << HTML::kWhite << '\t' << fMoon.fMoonSet.GetAsStr("%H:%M") << '\n';
    1690 
    1691         out << (fSun.visible?HTML::kWhite:fMoon.color) << '\t' << fMoon.description << '\n';
     1710        out << color[0] << '\t' << fMoon.fRise.GetAsStr("%H:%M") << '\n';
     1711        out << color[1] << '\t' << fMoon.fTransit.GetAsStr("%H:%M") << '\n';
     1712        out << color[2] << '\t' << fMoon.fSet.GetAsStr("%H:%M") << '\n';
     1713
     1714        out << (fSun.isday?HTML::kWhite:fMoon.color) << '\t' << fMoon.description << '\n';
    16921715
    16931716        if (!fMoon.visible)
     
    16951718        else
    16961719        {
    1697             string col = HTML::kGreen;
    1698             if (fMoon.zd>25)
    1699                 col = HTML::kYellow;
    1700             if (fMoon.zd>45 && fMoon.zd<85)
    1701                 col = HTML::kRed;
    1702             out << col << '\t' << fMoon.zd << '\n';
     1720            string col = HTML::kWhite;
     1721            if (!fSun.isday)
     1722            {
     1723                col = HTML::kGreen;
     1724                if (fMoon.zd>25)
     1725                    col = HTML::kYellow;
     1726                if (fMoon.zd>45 && fMoon.zd<80)
     1727                    col = HTML::kRed;
     1728                if (fMoon.zd>=80)
     1729                    col = HTML::kRed;
     1730            }
     1731            out << col << '\t' << fMoon.zd << '\t' << GetDir(fMoon.az) << '\n';
    17031732        }
    17041733
     
    20922121                out << " &#9788;";
    20932122                if (fDimDriveControl.state()<Drive::State::kArmed)
    2094                     out << " [" << fSun.fSunSetCivil.MinutesTo() << "&darr;]";
     2123                    out << " [" << fSun.fSetCivil.MinutesTo() << "&darr;]";
    20952124            }
    20962125            else
Note: See TracChangeset for help on using the changeset viewer.