Citlali
Loading...
Searching...
No Matches
telescope.h
Go to the documentation of this file.
1#pragma once
2
3#include <netcdf>
4
5#include <tula/eigen.h>
6
9
10namespace engine {
11
12class Telescope {
13public:
14 // get logger
15 std::shared_ptr<spdlog::logger> logger = spdlog::get("citlali_logger");
16
17 // simulation jobkey
18 char sim_job_key [128] = "";
19 // is this a simulation?
20 bool sim_obs;
21
22 // strings for mapping pattern, source name, obs goal, project ID
24
26
27 // tangent plane center
28 //std::map<std::string, double> tan_center_rad;
29
30 std::string chunk_mode;
31
32 // time chunk size for lissajous/rastajous
34
35 // force chunking scan indices
37
38 // remove samples based on a velocity limit
40
41 // sample rate, downsampled sample rate
42 double fsmp, d_fsmp;
43
44 // tau at 225 GHZ
46
47 // number of samples to remove for inner scans
48 Eigen::Index inner_scans_chunk;
49
50 // scan indices matrix (4 x nscans)
51 Eigen::MatrixXI scan_indices;
52
53 // std map for telescope data vectors
54 std::map<std::string, Eigen::VectorXd> tel_data;
55 // std map for telescope header vectors
56 std::map<std::string, Eigen::VectorXd> tel_header;
57
58 // pixel axes (radec, altaz, etc)
59 std::string pixel_axes;
60
61 // keys to telescope data vectors (angles in radians)
62 std::map<std::string, std::string> tel_data_keys {
63 {"Data.TelescopeBackend.TelTime", "TelTime"},
64 {"Data.TelescopeBackend.TelUtc","TelUTC"},
65 {"Data.TelescopeBackend.TelRaAct", "TelRa"},
66 {"Data.TelescopeBackend.TelDecAct", "TelDec"},
67 {"Data.TelescopeBackend.SourceLAct", "TelL"},
68 {"Data.TelescopeBackend.SourceBAct", "TelB"},
69 {"Data.TelescopeBackend.SourceRaAct", "TelRa"},
70 {"Data.TelescopeBackend.SourceDecAct", "TelDec"},
71 {"Data.TelescopeBackend.TelAzAct", "TelAzAct"},
72 {"Data.TelescopeBackend.TelElAct", "TelElAct"},
73 {"Data.TelescopeBackend.SourceAz", "SourceAz"},
74 {"Data.TelescopeBackend.SourceEl", "SourceEl"},
75 {"Data.TelescopeBackend.ActParAng", "ActParAng"},
76 {"Data.TelescopeBackend.ActGalAng", "ActGalAng"},
77 {"Data.TelescopeBackend.Hold", "Hold"},
78 {"Data.TelescopeBackend.TelAzCor", "TelAzCor"},
79 {"Data.TelescopeBackend.TelElCor", "TelElCor"},
80 {"Data.TelescopeBackend.TelAzDes", "TelAzDes"},
81 {"Data.TelescopeBackend.TelElDes", "TelElDes"},
82 {"Data.TelescopeBackend.PpsTime","PpsTime"},
83 {"Data.TelescopeBackend.TelAzMap", "TelAzMap"},
84 {"Data.TelescopeBackend.TelElMap", "TelElMap"}
85 };
86
87 // keys to telescope header values (angles in radians)
88 std::map<std::string, std::string> tel_header_keys {
89 {"Header.Source.Ra", "Header.Source.Ra"},
90 {"Header.Source.Dec", "Header.Source.Dec"},
91 {"Header.Source.L","Header.Source.L"},
92 {"Header.Source.B","Header.Source.B"},
93 {"Header.Source.Epoch", "Header.Source.Epoch"},
94 {"Header.Source.CoordSys", "Header.Source.CoordSys"},
95 {"Header.Source.Velocity", "Header.Source.Velocity"},
96 {"Header.Source.VelSys", "Header.Source.VelSys"},
97 {"Header.Source.Planet", "Header.Source.Planet"},
98 {"Header.Source.RaProperMotionCor", "Header.Source.RaProperMotionCor"},
99 {"Header.Source.DecProperMotionCor", "Header.Source.DecProperMotionCor"},
100 {"Header.Source.ElObsMin", "Header.Source.ElObsMin"},
101 {"Header.Source.ElObsMax", "Header.Source.ElObsMax"},
102 {"Header.Sky.ObsVel", "Header.Sky.ObsVel"},
103 {"Header.Sky.BaryVel", "Header.Sky.BaryVel"},
104 {"Header.Sky.ParAng", "Header.Sky.ParAng"},
105 {"Header.Sky.RaOffsetSys", "Header.Sky.RaOffsetSys"},
106 {"Header.Telescope.PointingTolerance", "Header.Telescope.PointingTolerance"},
107 {"Header.Telescope.AzDesPos", "Header.Telescope.AzDesPos"},
108 {"Header.Telescope.ElDesPos", "Header.Telescope.ElDesPos"},
109 {"Header.Telescope.AzActPos", "Header.Telescope.AzActPos"},
110 {"Header.Telescope.ElActPos", "Header.Telescope.ElActPos"},
111 {"Header.Telescope.CraneInBeam", "Header.Telescope.CraneInBeam"},
112 {"Header.M1.ModelEnabled", "Header.M1.ModelEnabled"},
113 {"Header.M1.ZernikeEnabled", "Header.M1.ZernikeEnabled"},
114 {"Header.M1.ModelMode", "Header.M1.ModelMode"},
115 {"Header.M2.XAct", "Header.M2.XAct"},
116 {"Header.M2.YAct", "Header.M2.YAct"},
117 {"Header.M2.ZAct", "Header.M2.ZAct"},
118 {"Header.M2.TipAct", "Header.M2.TipAct"},
119 {"Header.M2.TiltAct", "Header.M2.TiltAct"},
120 {"Header.M2.XReq", "Header.M2.XReq"},
121 {"Header.M2.YReq", "Header.M2.YReq"},
122 {"Header.M2.ZReq", "Header.M2.ZReq"},
123 {"Header.M2.TipReq", "Header.M2.TipReq"},
124 {"Header.M2.TiltReq", "Header.M2.TiltReq"},
125 {"Header.M2.XDes", "Header.M2.XDes"},
126 {"Header.M2.YDes", "Header.M2.YDes"},
127 {"Header.M2.ZDes", "Header.M2.ZDes"},
128 {"Header.M2.TipDes", "Header.M2.TipDes"},
129 {"Header.M2.TiltDes", "Header.M2.TiltDes"},
130 {"Header.M2.XPcor", "Header.M2.XPcor"},
131 {"Header.M2.YPcor", "Header.M2.YPcor"},
132 {"Header.M2.ZPcor", "Header.M2.ZPcor"},
133 {"Header.M2.TipPcor", "Header.M2.TipPcor"},
134 {"Header.M2.TiltPcor", "Header.M2.TiltPcor"},
135 {"Header.M2.XCmd", "Header.M2.XCmd"},
136 {"Header.M2.YCmd", "Header.M2.YCmd"},
137 {"Header.M2.ZCmd", "Header.M2.ZCmd"},
138 {"Header.M2.TipCmd", "Header.M2.TipCmd"},
139 {"Header.M2.TiltCmd", "Header.M2.TiltCmd"},
140 {"Header.M2.ElCmd", "Header.M2.ElCmd"},
141 {"Header.M2.AzPcor", "Header.M2.AzPcor"},
142 {"Header.M2.ElPcor", "Header.M2.ElPcor"},
143 {"Header.M2.CorEnabled", "Header.M2.CorEnabled"},
144 {"Header.M2.Follow", "Header.M2.Follow"},
145 {"Header.M2.M2Heartbeat", "Header.M2.M2Heartbeat"},
146 {"Header.M2.AcuHeartbeat", "Header.M2.AcuHeartbeat"},
147 {"Header.M2.Alive", "Header.M2.Alive"},
148 {"Header.M2.Hold", "Header.M2.Hold"},
149 {"Header.M2.ModelMode", "Header.M2.ModelMode"},
150 {"Header.M3.ElDesEnabled", "Header.M3.ElDesEnabled"},
151 {"Header.M3.Alive", "Header.M3.Alive"},
152 {"Header.M3.Fault", "Header.M3.Fault"},
153 {"Header.M3.M3Heartbeat", "Header.M3.M3Heartbeat"},
154 {"Header.M3.AcuHeartbeat", "Header.M3.AcuHeartbeat"},
155 {"Header.M3.M3OffPos", "Header.M3.M3OffPos"},
156 {"Header.TimePlace.LST", "Header.TimePlace.LST"},
157 {"Header.TimePlace.UTDate", "Header.TimePlace.UTDate"},
158 {"Header.TimePlace.UT1", "Header.TimePlace.UT1"},
159 {"Header.TimePlace.ObsLongitude", "Header.TimePlace.ObsLongitude"},
160 {"Header.TimePlace.ObsLatitude", "Header.TimePlace.ObsLatitude"},
161 {"Header.TimePlace.ObsElevation", "Header.TimePlace.ObsElevation"},
162 {"Header.Gps.IgnoreLock", "Header.Gps.IgnoreLock"},
163 {"Header.PointModel.ModRev", "Header.PointModel.ModRev"},
164 {"Header.PointModel.AzPointModelCor", "Header.PointModel.AzPointModelCor"},
165 {"Header.PointModel.ElPointModelCor", "Header.PointModel.ElPointModelCor"},
166 {"Header.PointModel.AzPaddleOff", "Header.PointModel.AzPaddleOff"},
167 {"Header.PointModel.ElPaddleOff", "Header.PointModel.ElPaddleOff"},
168 {"Header.PointModel.AzReceiverOff", "Header.PointModel.AzReceiverOff"},
169 {"Header.PointModel.ElReceiverOff", "Header.PointModel.ElReceiverOff"},
170 {"Header.PointModel.AzReceiverCor", "Header.PointModel.AzReceiverCor"},
171 {"Header.PointModel.ElReceiverCor", "Header.PointModel.ElReceiverCor"},
172 {"Header.PointModel.AzUserOff", "Header.PointModel.AzUserOff"},
173 {"Header.PointModel.ElUserOff", "Header.PointModel.ElUserOff"},
174 {"Header.PointModel.AzM2Cor", "Header.PointModel.AzM2Cor"},
175 {"Header.PointModel.ElM2Cor", "Header.PointModel.ElM2Cor"},
176 {"Header.PointModel.ElRefracCor", "Header.PointModel.ElRefracCor"},
177 {"Header.PointModel.AzTiltCor", "Header.PointModel.AzTiltCor"},
178 {"Header.PointModel.ElTiltCor", "Header.PointModel.ElTiltCor"},
179 {"Header.PointModel.AzTotalCor", "Header.PointModel.AzTotalCor"},
180 {"Header.PointModel.ElTotalCor", "Header.PointModel.ElTotalCor"},
181 {"Header.PointModel.PointModelCorEnabled", "Header.PointModel.PointModelCorEnabled"},
182 {"Header.PointModel.M2CorEnabled", "Header.PointModel.M2CorEnabled"},
183 {"Header.PointModel.RefracCorEnabled", "Header.PointModel.RefracCorEnabled"},
184 {"Header.PointModel.TiltCorEnabled", "Header.PointModel.TiltCorEnabled"},
185 {"Header.PointModel.ReceiverOffEnabled", "Header.PointModel.ReceiverOffEnabled"},
186 {"Header.Dcs.ObsNum", "Header.Dcs.ObsNum"},
187 {"Header.Dcs.SubObsNum", "Header.Dcs.SubObsNum"},
188 {"Header.Dcs.ScanNum", "Header.Dcs.ScanNum"},
189 {"Header.Dcs.ObsType", "Header.Dcs.ObsType"},
190 {"Header.Dcs.ObsMode", "Header.Dcs.ObsMode"},
191 {"Header.Dcs.CalMode", "Header.Dcs.CalMode"},
192 {"Header.Dcs.IntegrationTime", "Header.Dcs.IntegrationTime"},
193 {"Header.Dcs.RequestedTime", "Header.Dcs.RequestedTime"},
194 {"Header.Tiltmeter_0_.TiltX", "Header.Tiltmeter_0_.TiltX"},
195 {"Header.Tiltmeter_0_.TiltY", "Header.Tiltmeter_0_.TiltY"},
196 {"Header.Tiltmeter_0_.Temp", "Header.Tiltmeter_0_.Temp"},
197 {"Header.Tiltmeter_1_.TiltX", "Header.Tiltmeter_1_.TiltX"},
198 {"Header.Tiltmeter_1_.TiltY", "Header.Tiltmeter_1_.TiltY"},
199 {"Header.Tiltmeter_1_.Temp", "Header.Tiltmeter_1_.Temp"},
200 {"Header.Weather.Temperature", "Header.Weather.Temperature"},
201 {"Header.Weather.Humidity", "Header.Weather.Humidity"},
202 {"Header.Weather.Pressure", "Header.Weather.Pressure"},
203 {"Header.Weather.Precipitation", "Header.Weather.Precipitation"},
204 {"Header.Weather.Radiation", "Header.Weather.Radiation"},
205 {"Header.Weather.WindDir1", "Header.Weather.WindDir1"},
206 {"Header.Weather.WindSpeed1", "Header.Weather.WindSpeed1"},
207 {"Header.Weather.WindDir2", "Header.Weather.WindDir2"},
208 {"Header.Weather.WindSpeed2", "Header.Weather.WindSpeed2"},
209 {"Header.Weather.TimeOfDay", "Header.Weather.TimeOfDay"},
210 {"Header.Radiometer.Tau", "Header.Radiometer.Tau"},
211 {"Header.Radiometer.Tau2", "Header.Radiometer.Tau2"},
212 {"Header.Toltec.BeamSelected", "Header.Toltec.BeamSelected"},
213 {"Header.Toltec.NumBands", "Header.Toltec.NumBands"},
214 {"Header.Toltec.NumBeams", "Header.Toltec.NumBeams"},
215 {"Header.Toltec.NumPixels", "Header.Toltec.NumPixels"},
216 {"Header.Toltec.AzPointOff", "Header.Toltec.AzPointOff"},
217 {"Header.Toltec.ElPointOff", "Header.Toltec.ElPointOff"},
218 {"Header.Toltec.AzPointCor", "Header.Toltec.AzPointCor"},
219 {"Header.Toltec.ElPointCor", "Header.Toltec.ElPointCor"},
220 {"Header.Toltec.M3Dir", "Header.Toltec.M3Dir"},
221 {"Header.Toltec.Remote", "Header.Toltec.Remote"},
222 {"Header.TelescopeBackend.Master", "Header.TelescopeBackend.Master"},
223 {"Header.TelescopeBackend.ObsNum", "Header.TelescopeBackend.ObsNum"},
224 {"Header.TelescopeBackend.SubObsNum", "Header.TelescopeBackend.SubObsNum"},
225 {"Header.TelescopeBackend.ScanNum", "Header.TelescopeBackend.ScanNum"},
226 {"Header.TelescopeBackend.CalObsNum", "Header.TelescopeBackend.CalObsNum"},
227 {"Header.TelescopeBackend.NumPixels", "Header.TelescopeBackend.NumPixels"},
228 {"Header.Map.NumRepeats", "Header.Map.NumRepeats"},
229 {"Header.Map.NumScans", "Header.Map.NumScans"},
230 {"Header.Map.HPBW", "Header.Map.HPBW"},
231 {"Header.Map.ScanAngle", "Header.Map.ScanAngle"},
232 {"Header.Map.XLength", "Header.Map.XLength"},
233 {"Header.Map.YLength", "Header.Map.YLength"},
234 {"Header.Map.XOffset", "Header.Map.XOffset"},
235 {"Header.Map.YOffset", "Header.Map.YOffset"},
236 {"Header.Map.XStep", "Header.Map.XStep"},
237 {"Header.Map.YStep", "Header.Map.YStep"},
238 {"Header.Map.XRamp", "Header.Map.XRamp"},
239 {"Header.Map.YRamp", "Header.Map.YRamp"},
240 {"Header.Map.TSamp", "Header.Map.TSamp"},
241 {"Header.Map.TRef", "Header.Map.TRef"},
242 {"Header.Map.TCal", "Header.Map.TCal"},
243 {"Header.Map.RowsPerScan", "Header.Map.RowsPerScan"},
244 {"Header.Map.ScansPerCal", "Header.Map.ScansPerCal"},
245 {"Header.Map.ScansToSkip", "Header.Map.ScansToSkip"},
246 {"Header.Map.TurnTime", "Header.Map.TurnTime"},
247 {"Header.Map.NumPass", "Header.Map.NumPass"},
248 {"Header.Map.ScanRate", "Header.Map.ScanRate"},
249 {"Header.Map.ScanXStep", "Header.Map.ScanXStep"},
250 {"Header.Map.ScanYStep", "Header.Map.ScanYStep"},
251 {"Header.Map.ExecMode", "Header.Map.ExecMode"},
252 {"Header.Lissajous.XLength", "Header.Lissajous.XLength"},
253 {"Header.Lissajous.YLength", "Header.Lissajous.YLength"},
254 {"Header.Lissajous.XOmega", "Header.Lissajous.XOmega"},
255 {"Header.Lissajous.YOmega", "Header.Lissajous.YOmega"},
256 {"Header.Lissajous.XDelta", "Header.Lissajous.XDelta"},
257 {"Header.Lissajous.XLengthMinor", "Header.Lissajous.XLengthMinor"},
258 {"Header.Lissajous.YLengthMinor", "Header.Lissajous.YLengthMinor"},
259 {"Header.Lissajous.XOmegaMinor", "Header.Lissajous.XOmegaMinor"},
260 {"Header.Lissajous.YOmegaMinor", "Header.Lissajous.YOmegaMinor"},
261 {"Header.Lissajous.XDeltaMinor", "Header.Lissajous.XDeltaMinor"},
262 {"Header.Lissajous.XOmegaNorm", "Header.Lissajous.XOmegaNorm"},
263 {"Header.Lissajous.YOmegaNorm", "Header.Lissajous.YOmegaNorm"},
264 {"Header.Lissajous.XOmegaMinorNorm", "Header.Lissajous.XOmegaMinorNorm"},
265 {"Header.Lissajous.YOmegaMinorNorm", "Header.Lissajous.YOmegaMinorNorm"},
266 {"Header.Lissajous.ScanRate", "Header.Lissajous.ScanRate"},
267 {"Header.Lissajous.TScan", "Header.Lissajous.TScan"},
268 {"Header.Lissajous.ExecMode", "Header.Lissajous.ExecMode"},
269 {"Header.ScanFile.Valid", "Header.ScanFile.Valid"},
270 {"Header.M1.ZernikeC","Header.M1.ZernikeC"},
271 {"Header.M1.ActPos","Header.M1.ActPos"},
272 {"Header.M1.CmdPos","Header.M1.CmdPos"},
273 {"Header.Sim.Jobkey","Header.Sim.Jobkey"}
274 };
275
276 void get_tel_data(std::string &);
277 void calc_tan_pointing();
278 void calc_tan_radec();
279 void calc_tan_altaz();
280 void calc_tan_galactic();
281 void calc_scan_indices();
282};
283
284} // namespace engine
Definition telescope.h:12
bool sim_obs
Definition telescope.h:20
std::map< std::string, Eigen::VectorXd > tel_data
Definition telescope.h:54
double fsmp
Definition telescope.h:42
char sim_job_key[128]
Definition telescope.h:18
std::map< std::string, std::string > tel_data_keys
Definition telescope.h:62
std::map< std::string, std::string > tel_header_keys
Definition telescope.h:88
std::string chunk_mode
Definition telescope.h:30
std::string obs_goal
Definition telescope.h:23
void calc_tan_radec()
Definition telescope.cpp:211
std::string source_name
Definition telescope.h:23
bool exec_mode
Definition telescope.h:25
void calc_tan_galactic()
Definition telescope.cpp:255
double d_fsmp
Definition telescope.h:42
void calc_scan_indices()
Definition telescope.cpp:281
double tau_225_GHz
Definition telescope.h:45
Eigen::MatrixXI scan_indices
Definition telescope.h:51
std::shared_ptr< spdlog::logger > logger
Definition telescope.h:15
std::string obs_pgm
Definition telescope.h:23
std::string project_id
Definition telescope.h:23
bool force_chunk
Definition telescope.h:36
void get_tel_data(std::string &)
Definition telescope.cpp:12
double velocity_limit
Definition telescope.h:39
std::string pixel_axes
Definition telescope.h:59
void calc_tan_altaz()
Definition telescope.cpp:237
void calc_tan_pointing()
Definition telescope.cpp:176
std::map< std::string, Eigen::VectorXd > tel_header
Definition telescope.h:56
std::string map_coord
Definition telescope.h:23
double chunking_value
Definition telescope.h:33
Eigen::Index inner_scans_chunk
Definition telescope.h:48
Definition calib.h:12