Citlali
Loading...
Searching...
No Matches
calib.h
Go to the documentation of this file.
1#pragma once
2
3#include <Eigen/Core>
4#include <string>
5#include <vector>
6#include <map>
7#include <netcdf>
8
11
12namespace engine {
13
14class Calib {
15public:
16 // get logger
17 std::shared_ptr<spdlog::logger> logger = spdlog::get("citlali_logger");
18
19 // apt filepath
20 std::string apt_filepath;
21 // apt table
22 std::map<std::string, Eigen::VectorXd> apt;
23 // hwpr angle and timing
24 Eigen::VectorXd hwpr_angle, hwpr_recvt;
25 // pps timing
26 Eigen::MatrixXd hwpr_ts;
27
28 // detector frequency groups
29 Eigen::VectorXI fg;
30
31 // ignore the hwpr (set to true if hwpr is not installed)
32 std::string ignore_hwpr;
33
34 // fpga frequency for hwpr
36
37 // apt header
38 YAML::Node apt_meta;
39
40 // run with hwpr?
42
43 // network and array names
44 Eigen::VectorXI nws, arrays;
45
46 // number of detectors
47 Eigen::Index n_dets;
48
49 // number of networks
50 Eigen::Index n_nws;
51
52 // number of arrays
53 Eigen::Index n_arrays;
54
55 // vector of upper and lower indices of each nw/array
56 std::map<Eigen::Index, std::tuple<Eigen::Index, Eigen::Index>> nw_limits, array_limits;
57
58 // average fwhms
59 std::map<Eigen::Index, std::tuple<double, double>> nw_fwhms, array_fwhms;
60
61 // average pa
62 std::map<Eigen::Index, double> nw_pas, array_pas;
63
64 // average beam areas
65 std::map<Eigen::Index, double> nw_beam_areas, array_beam_areas;
66
67 // flux conversion
68 Eigen::VectorXd flux_conversion_factor;
69
70 // mean flux conversion factor
71 std::map<std::string, double> mean_flux_conversion_factor;
72
73 // map from array index to name
74 std::map<Eigen::Index, std::string> array_name_map = {
75 {0,"a1100"},
76 {1,"a1400"},
77 {2,"a2000"}
78 };
79
80 // keys for apt header
81 std::vector<std::string> apt_header_keys = {
82 {"uid"},
83 {"tone_freq"},
84 {"array"},
85 {"nw"},
86 {"fg"},
87 {"pg"},
88 {"ori"},
89 {"loc"},
90 {"responsivity"},
91 {"flxscale"},
92 {"sens"},
93 {"derot_elev"},
94 {"amp"},
95 {"amp_err"},
96 {"x_t"},
97 {"x_t_err"},
98 {"y_t"},
99 {"y_t_err"},
100 {"a_fwhm"},
101 {"a_fwhm_err"},
102 {"b_fwhm"},
103 {"b_fwhm_err"},
104 {"angle"},
105 {"angle_err"},
106 {"converge_iter"},
107 {"flag"},
108 {"sig2noise"},
109 {"x_t_raw"},
110 {"y_t_raw"},
111 {"x_t_derot"},
112 {"y_t_derot"},
113 };
114
115 // map for apt header units
116 std::map<std::string,std::string> apt_header_units = {
117 {"uid","N/A"},
118 {"tone_freq", "Hz"},
119 {"array","N/A"},
120 {"nw","N/A"},
121 {"fg","N/A"},
122 {"pg","N/A"},
123 {"ori","N/A"},
124 {"loc","N/A"},
125 {"responsivity","N/A"},
126 {"flxscale","mJy/beam/xs"},
127 {"sens","mJy/beam x s^0.5"},
128 {"derot_elev","rad"},
129 {"amp","xs"},
130 {"amp_err","xs"},
131 {"x_t","arcsec"},
132 {"x_t_err","arcsec"},
133 {"y_t","arcsec"},
134 {"y_t_err","arcsec"},
135 {"a_fwhm","arcsec"},
136 {"a_fwhm_err","arcsec"},
137 {"b_fwhm","arcsec"},
138 {"b_fwhm_err","arcsec"},
139 {"angle","rad"},
140 {"angle_err","rad"},
141 {"converge_iter","N/A"},
142 {"flag","N/A"},
143 {"sig2noise","N/A"},
144 {"x_t_raw","arcsec"},
145 {"y_t_raw","arcsec"},
146 {"x_t_derot","arcsec"},
147 {"y_t_derot","arcsec"},
148 };
149
150 // meta information for each apt column
151 std::map<std::string,std::string> apt_header_description = {
152 {"uid","unique id"},
153 {"tone_freq", "tone frequency"},
154 {"array","array index"},
155 {"nw","network index"},
156 {"fg","frequency group"},
157 {"pg","polarization group"},
158 {"ori","orientation"},
159 {"loc","location"},
160 {"responsivity","responsivity"},
161 {"flxscale","flux conversion scale"},
162 {"sens","sensitivity"},
163 {"derot_elev","derotation elevation angle"},
164 {"amp","fitted amplitude"},
165 {"amp_err","fitted amplitude error"},
166 {"x_t","fitted azimuthal offset"},
167 {"x_t_err","fitted azimuthal offset error"},
168 {"y_t","fitted altitude offset"},
169 {"y_t_err","fitted altitude offset error"},
170 {"a_fwhm","fitted azimuthal FWHM"},
171 {"a_fwhm_err","fitted azimuthal FWHM error"},
172 {"b_fwhm","fitted altitude FWHM"},
173 {"b_fwhm_err","fitted altitude FWHM error"},
174 {"angle","fitted rotation angle"},
175 {"angle_err","fitted rotation angle error"},
176 {"converge_iter","beammap convergence iteration"},
177 {"flag","bad detector"},
178 {"sig2noise","signal to noise"},
179 {"x_t_raw","raw azimuthal offset"},
180 {"y_t_raw","raw altitude offset"},
181 {"x_t_derot","derot azimuthal offset"},
182 {"y_t_derot","derot altitude offset"},
183 };
184
185 // setup apt. determine nws and arrays. get groupings and mean values
186 void setup();
187 // read in apt (runs setup)
188 void get_apt(const std::string &, std::vector<std::string> &, std::vector<std::string> &);
189 // read in hwpr file if it exists
190 void get_hwpr(const std::string &, bool);
191 // determine flux conversion factors between various supported units
192 void calc_flux_calibration(std::string, double);
193};
194
195} // namespace engine
Definition calib.h:14
Eigen::VectorXd hwpr_recvt
Definition calib.h:24
void calc_flux_calibration(std::string, double)
Definition calib.cpp:169
Eigen::VectorXI fg
Definition calib.h:29
Eigen::Index n_nws
Definition calib.h:50
Eigen::VectorXd flux_conversion_factor
Definition calib.h:68
void get_apt(const std::string &, std::vector< std::string > &, std::vector< std::string > &)
Definition calib.cpp:8
bool run_hwpr
Definition calib.h:41
std::string ignore_hwpr
Definition calib.h:32
std::map< Eigen::Index, std::string > array_name_map
Definition calib.h:74
Eigen::Index n_arrays
Definition calib.h:53
std::map< Eigen::Index, std::tuple< double, double > > nw_fwhms
Definition calib.h:59
double hwpr_fpga_freq
Definition calib.h:35
std::map< Eigen::Index, std::tuple< Eigen::Index, Eigen::Index > > array_limits
Definition calib.h:56
void get_hwpr(const std::string &, bool)
Definition calib.cpp:110
std::map< Eigen::Index, double > array_pas
Definition calib.h:62
std::map< Eigen::Index, double > array_beam_areas
Definition calib.h:65
Eigen::VectorXI nws
Definition calib.h:44
Eigen::VectorXI arrays
Definition calib.h:44
std::map< std::string, std::string > apt_header_units
Definition calib.h:116
std::map< Eigen::Index, double > nw_pas
Definition calib.h:62
YAML::Node apt_meta
Definition calib.h:38
Eigen::MatrixXd hwpr_ts
Definition calib.h:26
std::string apt_filepath
Definition calib.h:20
std::map< std::string, Eigen::VectorXd > apt
Definition calib.h:22
std::shared_ptr< spdlog::logger > logger
Definition calib.h:17
std::map< Eigen::Index, double > nw_beam_areas
Definition calib.h:65
std::map< std::string, double > mean_flux_conversion_factor
Definition calib.h:71
std::map< std::string, std::string > apt_header_description
Definition calib.h:151
Eigen::VectorXd hwpr_angle
Definition calib.h:24
std::map< Eigen::Index, std::tuple< double, double > > array_fwhms
Definition calib.h:59
std::map< Eigen::Index, std::tuple< Eigen::Index, Eigen::Index > > nw_limits
Definition calib.h:56
std::vector< std::string > apt_header_keys
Definition calib.h:81
Eigen::Index n_dets
Definition calib.h:47
void setup()
Definition calib.cpp:245
Definition calib.h:12