| 1 | // Be aware that this macro just inserts and not updates the rows
|
|---|
| 2 |
|
|---|
| 3 | void GetObsTimes(Bool_t dummy=kTRUE, Int_t start=55866 /*1.11.2011*/, Int_t stop=58848 /*31.12.2019*/)
|
|---|
| 4 | {
|
|---|
| 5 | MSQLMagic serv("sql.rc");
|
|---|
| 6 | Bool_t con = serv.IsConnected();
|
|---|
| 7 | if (con)
|
|---|
| 8 | {
|
|---|
| 9 | cout << "Connected to " << serv.GetName() << endl;
|
|---|
| 10 | cout << endl;
|
|---|
| 11 | }
|
|---|
| 12 | else
|
|---|
| 13 | {
|
|---|
| 14 | cout << "Could not connect to " << serv.GetName() << endl;
|
|---|
| 15 | cout << endl;
|
|---|
| 16 | return;
|
|---|
| 17 | }
|
|---|
| 18 |
|
|---|
| 19 |
|
|---|
| 20 | MTime time(-1);
|
|---|
| 21 | MTime time2, time3, time4, time5;
|
|---|
| 22 | MTime time6, time7, time8, time9;
|
|---|
| 23 | Double_t darknight=0;
|
|---|
| 24 | Int_t night=0;
|
|---|
| 25 | TString query;
|
|---|
| 26 | for (int i=start; i<=stop; i++)
|
|---|
| 27 | {
|
|---|
| 28 | //GetSolarRst returns the information for the next day
|
|---|
| 29 | // as JD seems to be rounded to the next value in all
|
|---|
| 30 | // cases in the libnova function ln_get_solar_rst
|
|---|
| 31 | //to get the correct values the following would be needed
|
|---|
| 32 | //Nova::RstTime t1= Nova::GetSolarRst(time.GetJD()-1, -12);
|
|---|
| 33 | //Nova::RstTime t2= Nova::GetSolarRst(time.GetJD(), -12);
|
|---|
| 34 | //time2.SetJD(t1.set);
|
|---|
| 35 | //time3.SetJD(t2.rise);
|
|---|
| 36 | //however, as time.GetNightAsInt() returns the date of the
|
|---|
| 37 | // sunrise (MAGIC naming convention), we use:
|
|---|
| 38 | time.SetMjd(i);
|
|---|
| 39 | Nova::RstTime t1= Nova::GetSolarRst(time.GetJD(), -12);
|
|---|
| 40 | Nova::RstTime t2= Nova::GetSolarRst(time.GetJD()+1, -12);
|
|---|
| 41 | Nova::RstTime t3= Nova::GetSolarRst(time.GetJD(), -18);
|
|---|
| 42 | Nova::RstTime t4= Nova::GetSolarRst(time.GetJD()+1, -18);
|
|---|
| 43 | Nova::RstTime t5= Nova::GetLunarRst(time.GetJD());
|
|---|
| 44 | Nova::RstTime t6= Nova::GetLunarRst(time.GetJD()+1);
|
|---|
| 45 |
|
|---|
| 46 | /*
|
|---|
| 47 | cout << time.GetNightAsInt()
|
|---|
| 48 | // << " " << MTime(t1.set).GetSqlDateTime()
|
|---|
| 49 | // << " " << MTime(t2.rise).GetSqlDateTime()
|
|---|
| 50 | // << " s" << MTime(t3.set).GetSqlDateTime()
|
|---|
| 51 | // << " r" << MTime(t4.rise).GetSqlDateTime()
|
|---|
| 52 | << " s" << MTime(t5.set).GetSqlDateTime()
|
|---|
| 53 | << " r" << MTime(t5.rise).GetSqlDateTime()
|
|---|
| 54 | << " s" << MTime(t6.set).GetSqlDateTime()
|
|---|
| 55 | << " r" << MTime(t6.rise).GetSqlDateTime()
|
|---|
| 56 | << endl;
|
|---|
| 57 | */
|
|---|
| 58 |
|
|---|
| 59 | // astronomical twilight (-12 deg)
|
|---|
| 60 | time2.SetJD(t1.set);
|
|---|
| 61 | time3.SetJD(t2.rise);
|
|---|
| 62 | // dark night (-18 deg)
|
|---|
| 63 | time4.SetJD(t3.set);
|
|---|
| 64 | time5.SetJD(t4.rise);
|
|---|
| 65 | // setting rise (time6) and set (time7) of moon
|
|---|
| 66 | if (t5.set<t5.rise)
|
|---|
| 67 | {
|
|---|
| 68 | time6.SetJD(t5.rise);
|
|---|
| 69 | time7.SetJD(t6.set);
|
|---|
| 70 | }
|
|---|
| 71 | else//set>rise
|
|---|
| 72 | {
|
|---|
| 73 | if (t5.set>t3.set)
|
|---|
| 74 | time7.SetJD(t5.set);
|
|---|
| 75 | else
|
|---|
| 76 | time7.SetJD(t6.set);
|
|---|
| 77 |
|
|---|
| 78 | time6.SetJD(t6.rise);
|
|---|
| 79 | }
|
|---|
| 80 | // setting times for dark night
|
|---|
| 81 | // sunset after moonrise
|
|---|
| 82 | if (time4>time6)
|
|---|
| 83 | time8=time7;
|
|---|
| 84 | else
|
|---|
| 85 | {
|
|---|
| 86 | if (time4<time7 && time5>time7)
|
|---|
| 87 | time8=time7;
|
|---|
| 88 | else
|
|---|
| 89 | time8=time4;
|
|---|
| 90 | }
|
|---|
| 91 | // moonset before sunrise
|
|---|
| 92 | if (time7<time5)
|
|---|
| 93 | time9=time5;
|
|---|
| 94 | else
|
|---|
| 95 | {
|
|---|
| 96 | // sunrise before moonrise
|
|---|
| 97 | if (time5<time6)
|
|---|
| 98 | time9=time5;
|
|---|
| 99 | else
|
|---|
| 100 | time9=time6;
|
|---|
| 101 | }
|
|---|
| 102 | // number of dark hours
|
|---|
| 103 | darknight=time9<time8 ? 0 : (time9.GetMjd()-time8.GetMjd())*24;
|
|---|
| 104 |
|
|---|
| 105 | /*
|
|---|
| 106 | cout << time.GetNightAsInt() << " "
|
|---|
| 107 | << " ==> r" << time6.GetSqlDateTime()
|
|---|
| 108 | << " s" << time7.GetSqlDateTime()
|
|---|
| 109 | << " ==> start" << time8.GetSqlDateTime()
|
|---|
| 110 | << " stop" << time9.GetSqlDateTime()
|
|---|
| 111 | << " dark: " << darknight << "h "
|
|---|
| 112 | << endl;
|
|---|
| 113 | */
|
|---|
| 114 |
|
|---|
| 115 | query=Form("INSERT ObservationTimes SET fNight=%d, "
|
|---|
| 116 | "fStartObservation='%s', fStopObservation='%s', "
|
|---|
| 117 | "fStartDarkTime='%s', fStopDarkTime='%s', "
|
|---|
| 118 | "fStartDarkNight='%s', fStopDarkNight='%s', "
|
|---|
| 119 | "fMoonRise='%s', fMoonSet='%s', "
|
|---|
| 120 | "fNumDarkHours=%f, fMjd=%d",
|
|---|
| 121 | time.GetNightAsInt(),
|
|---|
| 122 | time2.GetSqlDateTime().Data(), time3.GetSqlDateTime().Data(),// astronomical twilight
|
|---|
| 123 | time4.GetSqlDateTime().Data(), time5.GetSqlDateTime().Data(),// darktime
|
|---|
| 124 | time8.GetSqlDateTime().Data(), time9.GetSqlDateTime().Data(),// darknight
|
|---|
| 125 | time6.GetSqlDateTime().Data(), time7.GetSqlDateTime().Data(),// moon
|
|---|
| 126 | darknight, i); //dark hours
|
|---|
| 127 |
|
|---|
| 128 | cout << "QUERY: " << query << endl;
|
|---|
| 129 |
|
|---|
| 130 | if (dummy)
|
|---|
| 131 | continue;
|
|---|
| 132 | TSQLResult *res = serv.Query(query);
|
|---|
| 133 | if (!res)
|
|---|
| 134 | {
|
|---|
| 135 | cout << "problem to insert. " << endl;
|
|---|
| 136 | return;
|
|---|
| 137 | }
|
|---|
| 138 | }
|
|---|
| 139 | return;
|
|---|
| 140 |
|
|---|
| 141 | }
|
|---|