-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathObsRecords.py
117 lines (91 loc) · 4.99 KB
/
ObsRecords.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
from output_format import *
def search_location(file,name):
location = {}
with open(file) as f2:
surveyplan_input = [line.split() for line in f2][1:]
for plan in surveyplan_input:
locationitem = []
locationitem.append(float(plan[1]))
locationitem.append(float(plan[2]))
location[int(plan[0])] = locationitem
return location[name]
def takeSecond(ele):
return ele[0]
class ObsRecord:
'''
The set of observation record which is used to collect the status of observation
tasks sent by the global scheduler, including cadence, frequency, total observation time and etc.
'''
def __init__(self):
self.ra = {}
self.dec = {}
self.current_round = {}
self.frequency = {}
self.total_obstime = {}
self.each_obstime = {}
self.obs_start_end_time = {}
self.all_cadence = []
self.obs_start_end_time_not_clear = {}
self.status = {}
def clear_obs_start_end_time(self):
self.obs_start_end_time = {}
def update_status(self):
return
def add_record(self,round,timeslots,observations: Observations,final_schedule: Schedule,
file = "input_data/surveyplan-50" ) -> None:
oid_list = []
sched1 = schedule_transform(final_schedule,observations,Resource.S1,timeslots)
sched2 = schedule_transform(final_schedule, observations, Resource.S2, timeslots)
sched = [sched1,sched2]
for isched in sched:
for obs_start_time_slot, obs_idx in isched:
oid_list.append(observations.name[obs_idx])
for name in oid_list:
if name not in self.ra.keys():
self.ra[name] = search_location(file,int(name))[0]
self.dec[name] = search_location(file,int(name))[1]
if name in self.frequency.keys():
self.frequency[name] += 1
else:
self.frequency[name] = 1
self.current_round[name] = round
# print(self.frequency)
for isched in sched:
for obs_start_time_slot, obs_idx in isched:
if observations.name[obs_idx] in self.total_obstime.keys():
self.total_obstime[observations.name[obs_idx]] += ((observations.obs_time[obs_idx].seconds) / 60)
self.each_obstime[observations.name[obs_idx]].append(((observations.obs_time[obs_idx].seconds) / 60))
else:
self.total_obstime[observations.name[obs_idx]] = ((observations.obs_time[obs_idx].seconds) / 60)
self.each_obstime[observations.name[obs_idx]] = [((observations.obs_time[obs_idx].seconds) / 60)]
# print(self.total_obstime)
for isched in sched:
for obs_start_time_slot, obs_idx in isched:
tmp = []
obs_start_time = obs_start_time_slot * timeslots.timeslot_length
# print(obs_start_time)
if observations.name[obs_idx] in self.obs_start_end_time.keys():
tmp.append(obs_start_time)
tmp.append(obs_start_time + observations.obs_time[obs_idx].seconds / 60)
self.obs_start_end_time[observations.name[obs_idx]].append(tmp)
# self.obs_start_end_time[observations.name[obs_idx]].append(obs_start_time+observations.obs_time[obs_idx].seconds/60)
else:
self.obs_start_end_time[observations.name[obs_idx]]= []
tmp.append(obs_start_time)
tmp.append(obs_start_time+observations.obs_time[obs_idx].seconds/60)
self.obs_start_end_time[observations.name[obs_idx]].append(tmp)
# self.obs_start_end_time[observations.name[obs_idx]].append(obs_start_time+observations.obs_time[obs_idx].seconds/60)
# print(self.obs_start_end_time)
for i in list(self.obs_start_end_time.keys()):
self.obs_start_end_time[i].sort(key=takeSecond)
# not clear start and end
for isched in sched:
for obs_start_time_slot, obs_idx in isched:
obs_start_time = obs_start_time_slot * timeslots.timeslot_length
if observations.name[obs_idx] in self.obs_start_end_time_not_clear.keys():
self.obs_start_end_time_not_clear[observations.name[obs_idx]].append(obs_start_time)
self.obs_start_end_time_not_clear[observations.name[obs_idx]].append(obs_start_time + observations.obs_time[obs_idx].seconds / 60)
else:
self.obs_start_end_time_not_clear[observations.name[obs_idx]]= []
self.obs_start_end_time_not_clear[observations.name[obs_idx]].append(obs_start_time)
self.obs_start_end_time_not_clear[observations.name[obs_idx]].append(obs_start_time + observations.obs_time[obs_idx].seconds / 60)