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 | }
|
---|