Hide keyboard shortcuts

Hot-keys on this page

r m x p   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

1import math 

2 

3__all__ = ["ObservatoryModelParameters"] 

4 

5class ObservatoryModelParameters(object): 

6 """Class that collects all of the configuration parameters for the 

7 observatory. 

8 

9 All angle parameters are stored as radians. Speeds are radians/sec 

10 and accelerations are radians/sec^2 

11 """ 

12 

13 def __init__(self): 

14 """Initialize the class. 

15 """ 

16 self.telalt_minpos_rad = 0.0 

17 self.telalt_maxpos_rad = 0.0 

18 self.telaz_minpos_rad = 0.0 

19 self.telaz_maxpos_rad = 0.0 

20 self.telalt_maxspeed_rad = 0.0 

21 self.telalt_accel_rad = 0.0 

22 self.telalt_decel_rad = 0.0 

23 self.telaz_maxspeed_rad = 0.0 

24 self.telaz_accel_rad = 0.0 

25 self.telaz_decel_rad = 0.0 

26 self.mount_settletime = 0.0 

27 

28 self.telrot_minpos_rad = 0.0 

29 self.telrot_maxpos_rad = 0.0 

30 self.telrot_maxspeed_rad = 0.0 

31 self.telrot_accel_rad = 0.0 

32 self.telrot_decel_rad = 0.0 

33 self.telrot_filterchangepos_rad = 0.0 

34 self.rotator_followsky = False 

35 self.rotator_resumeangle = False 

36 

37 self.domalt_maxspeed_rad = 0.0 

38 self.domalt_accel_rad = 0.0 

39 self.domalt_decel_rad = 0.0 

40 self.domalt_free_range = 0.0 

41 self.domaz_maxspeed_rad = 0.0 

42 self.domaz_accel_rad = 0.0 

43 self.domaz_decel_rad = 0.0 

44 self.domaz_settletime = 0.0 

45 self.domaz_free_range = 0.0 

46 

47 self.optics_ol_slope = 0.0 

48 self.optics_cl_delay = [] 

49 self.optics_cl_altlimit = [] 

50 

51 self.readouttime = 0.0 

52 self.shuttertime = 0.0 

53 self.filter_changetime = 0.0 

54 self.filter_darktime = "u" 

55 self.filter_removable_list = [] 

56 self.filter_max_changes_burst_num = 0 

57 self.filter_max_changes_burst_time = 0.0 

58 self.filter_max_changes_avg_num = 0 

59 self.filter_max_changes_avg_time = 0.0 

60 self.filter_max_changes_avg_interval = 0.0 

61 self.filter_init_mounted_list = [] 

62 self.filter_init_unmounted_list = [] 

63 

64 self.prerequisites = {} 

65 

66 def configure_camera(self, confdict): 

67 """Configure the camera related parameters. 

68 

69 Parameters 

70 ---------- 

71 confdict : dict 

72 The set of camera configuration parameters. 

73 """ 

74 self.readouttime = confdict["camera"]["readout_time"] 

75 self.shuttertime = confdict["camera"]["shutter_time"] 

76 self.filter_changetime = confdict["camera"]["filter_change_time"] 

77 self.filter_removable_list = confdict["camera"]["filter_removable"] 

78 self.filter_max_changes_burst_num = confdict["camera"]["filter_max_changes_burst_num"] 

79 self.filter_max_changes_burst_time = confdict["camera"]["filter_max_changes_burst_time"] 

80 self.filter_max_changes_avg_num = confdict["camera"]["filter_max_changes_avg_num"] 

81 self.filter_max_changes_avg_time = confdict["camera"]["filter_max_changes_avg_time"] 

82 if self.filter_max_changes_avg_num > 0: 

83 self.filter_max_changes_avg_interval =\ 

84 self.filter_max_changes_avg_time / self.filter_max_changes_avg_num 

85 else: 

86 self.filter_max_changes_avg_interval = 0.0 

87 try: 

88 # This is probably not available in most config dicts currently. 

89 self.camera_fov = confdict["camera"]["field_of_view"] 

90 except KeyError: 

91 self.camera_fov = math.radians(3.5) 

92 

93 self.filter_init_mounted_list = list(confdict["camera"]["filter_mounted"]) 

94 self.filter_init_unmounted_list = list(confdict["camera"]["filter_unmounted"]) 

95 

96 def configure_dome(self, confdict): 

97 """Configure the dome related parameters. 

98 

99 Angles must be in degrees, speeds in degrees/sec and accelerations in 

100 degrees/sec^2. 

101 

102 Parameters 

103 ---------- 

104 confdict : dict 

105 The set of dome configuration parameters. 

106 """ 

107 self.domalt_maxspeed_rad = math.radians(confdict["dome"]["altitude_maxspeed"]) 

108 self.domalt_accel_rad = math.radians(confdict["dome"]["altitude_accel"]) 

109 self.domalt_decel_rad = math.radians(confdict["dome"]["altitude_decel"]) 

110 self.domalt_free_range = math.radians(confdict["dome"]["altitude_freerange"]) 

111 self.domaz_maxspeed_rad = math.radians(confdict["dome"]["azimuth_maxspeed"]) 

112 self.domaz_accel_rad = math.radians(confdict["dome"]["azimuth_accel"]) 

113 self.domaz_decel_rad = math.radians(confdict["dome"]["azimuth_decel"]) 

114 self.domaz_free_range = math.radians(confdict["dome"]["azimuth_freerange"]) 

115 self.domaz_settletime = confdict["dome"]["settle_time"] 

116 

117 def configure_optics(self, confdict): 

118 """Configure the optics related parameters. 

119 

120 Slope must be in inverse degrees and altitude limits in degrees. 

121 

122 Parameters 

123 ---------- 

124 confdict : dict 

125 The set of optics configuration parameters. 

126 """ 

127 self.optics_ol_slope = confdict["optics_loop_corr"]["tel_optics_ol_slope"] / math.radians(1) 

128 self.optics_cl_delay = list(confdict["optics_loop_corr"]["tel_optics_cl_delay"]) 

129 self.optics_cl_altlimit = list(confdict["optics_loop_corr"]["tel_optics_cl_alt_limit"]) 

130 for index, alt in enumerate(self.optics_cl_altlimit): 

131 self.optics_cl_altlimit[index] = math.radians(self.optics_cl_altlimit[index]) 

132 

133 def configure_rotator(self, confdict): 

134 """Configure the telescope rotator related parameters. 

135 

136 Angles must be in degrees, speeds in degrees/sec and accelerations in 

137 degrees/sec^2. 

138 

139 Parameters 

140 ---------- 

141 confdict : dict 

142 The set of telescope rotator configuration parameters. 

143 """ 

144 self.telrot_minpos_rad = math.radians(confdict["rotator"]["minpos"]) 

145 self.telrot_maxpos_rad = math.radians(confdict["rotator"]["maxpos"]) 

146 self.telrot_maxspeed_rad = math.radians(confdict["rotator"]["maxspeed"]) 

147 self.telrot_accel_rad = math.radians(confdict["rotator"]["accel"]) 

148 self.telrot_decel_rad = math.radians(confdict["rotator"]["decel"]) 

149 self.telrot_filterchangepos_rad = \ 

150 math.radians(confdict["rotator"]["filter_change_pos"]) 

151 self.rotator_followsky = confdict["rotator"]["follow_sky"] 

152 self.rotator_resumeangle = confdict["rotator"]["resume_angle"] 

153 

154 def configure_slew(self, confdict, activities): 

155 """Configure the slew related parameters. 

156 

157 Parameters 

158 ---------- 

159 confdict : dict 

160 The set of slew configuration parameters. 

161 activities : list[str] 

162 The set of slew activities 

163 """ 

164 for activity in activities: 

165 key = "prereq_" + activity 

166 self.prerequisites[activity] = list(confdict["slew"][key]) 

167 

168 def configure_telescope(self, confdict): 

169 """Configure the telescope related parameters. 

170 

171 Angles must be in degrees, speeds in degrees/sec and accelerations in 

172 degrees/sec^2. 

173 

174 Parameters 

175 ---------- 

176 confdict : dict 

177 The set of telescope configuration parameters. 

178 """ 

179 self.telalt_minpos_rad = math.radians(confdict["telescope"]["altitude_minpos"]) 

180 self.telalt_maxpos_rad = math.radians(confdict["telescope"]["altitude_maxpos"]) 

181 self.telaz_minpos_rad = math.radians(confdict["telescope"]["azimuth_minpos"]) 

182 self.telaz_maxpos_rad = math.radians(confdict["telescope"]["azimuth_maxpos"]) 

183 self.telalt_maxspeed_rad = math.radians(confdict["telescope"]["altitude_maxspeed"]) 

184 self.telalt_accel_rad = math.radians(confdict["telescope"]["altitude_accel"]) 

185 self.telalt_decel_rad = math.radians(confdict["telescope"]["altitude_decel"]) 

186 self.telaz_maxspeed_rad = math.radians(confdict["telescope"]["azimuth_maxspeed"]) 

187 self.telaz_accel_rad = math.radians(confdict["telescope"]["azimuth_accel"]) 

188 self.telaz_decel_rad = math.radians(confdict["telescope"]["azimuth_decel"]) 

189 self.mount_settletime = confdict["telescope"]["settle_time"]