1use crate::record::create_record_type;
4use crate::types::{Fields, Type};
5use lazy_static::lazy_static;
6
7static SCALAR_FIELDS: [(&str, Type); 49] = [
8 ("radar.revision.major", Type::Char),
9 ("radar.revision.minor", Type::Char),
10 ("origin.code", Type::Char),
11 ("origin.time", Type::String),
12 ("origin.command", Type::String),
13 ("cp", Type::Short),
14 ("stid", Type::Short),
15 ("time.yr", Type::Short),
16 ("time.mo", Type::Short),
17 ("time.dy", Type::Short),
18 ("time.hr", Type::Short),
19 ("time.mt", Type::Short),
20 ("time.sc", Type::Short),
21 ("time.us", Type::Int),
22 ("txpow", Type::Short),
23 ("nave", Type::Short),
24 ("atten", Type::Short),
25 ("lagfr", Type::Short),
26 ("smsep", Type::Short),
27 ("ercod", Type::Short),
28 ("stat.agc", Type::Short),
29 ("stat.lopwr", Type::Short),
30 ("noise.search", Type::Float),
31 ("noise.mean", Type::Float),
32 ("channel", Type::Short),
33 ("bmnum", Type::Short),
34 ("bmazm", Type::Float),
35 ("scan", Type::Short),
36 ("offset", Type::Short),
37 ("rxrise", Type::Short),
38 ("intt.sc", Type::Short),
39 ("intt.us", Type::Int),
40 ("txpl", Type::Short),
41 ("mpinc", Type::Short),
42 ("mppul", Type::Short),
43 ("mplgs", Type::Short),
44 ("nrang", Type::Short),
45 ("frang", Type::Short),
46 ("rsep", Type::Short),
47 ("xcf", Type::Short),
48 ("tfreq", Type::Short),
49 ("mxpwr", Type::Int),
50 ("lvmax", Type::Int),
51 ("fitacf.revision.major", Type::Int),
52 ("fitacf.revision.minor", Type::Int),
53 ("combf", Type::String),
54 ("noise.sky", Type::Float),
55 ("noise.lag0", Type::Float),
56 ("noise.vel", Type::Float),
57];
58
59static SCALAR_FIELDS_OPT: [(&str, Type); 4] = [
60 ("mplgexs", Type::Short),
61 ("ifmode", Type::Short),
62 ("algorithm", Type::String),
63 ("tdiff", Type::Float),
64];
65
66static VECTOR_FIELDS: [(&str, Type); 3] = [
67 ("ptab", Type::Short),
68 ("ltab", Type::Short),
69 ("pwr0", Type::Float),
70];
71
72static VECTOR_FIELDS_OPT: [(&str, Type); 39] = [
73 ("slist", Type::Short),
74 ("nlag", Type::Short),
75 ("qflg", Type::Char),
76 ("gflg", Type::Char),
77 ("p_l", Type::Float),
78 ("p_l_e", Type::Float),
79 ("p_s", Type::Float),
80 ("p_s_e", Type::Float),
81 ("v", Type::Float),
82 ("v_e", Type::Float),
83 ("w_l", Type::Float),
84 ("w_l_e", Type::Float),
85 ("w_s", Type::Float),
86 ("w_s_e", Type::Float),
87 ("sd_l", Type::Float),
88 ("sd_s", Type::Float),
89 ("sd_phi", Type::Float),
90 ("x_qflg", Type::Char),
91 ("x_gflg", Type::Char),
92 ("x_p_l", Type::Float),
93 ("x_p_l_e", Type::Float),
94 ("x_p_s", Type::Float),
95 ("x_p_s_e", Type::Float),
96 ("x_v", Type::Float),
97 ("x_v_e", Type::Float),
98 ("x_w_l", Type::Float),
99 ("x_w_l_e", Type::Float),
100 ("x_w_s", Type::Float),
101 ("x_w_s_e", Type::Float),
102 ("phi0", Type::Float),
103 ("phi0_e", Type::Float),
104 ("elv", Type::Float),
105 ("elv_fitted", Type::Float),
106 ("elv_error", Type::Float),
107 ("elv_low", Type::Float),
108 ("elv_high", Type::Float),
109 ("x_sd_l", Type::Float),
110 ("x_sd_s", Type::Float),
111 ("x_sd_phi", Type::Float),
112];
113
114static MATCHED_VECS: [[&str; 39]; 1] = [[
116 "slist",
117 "nlag",
118 "qflg",
119 "gflg",
120 "p_l",
121 "p_l_e",
122 "p_s",
123 "p_s_e",
124 "v",
125 "v_e",
126 "w_l",
127 "w_l_e",
128 "w_s",
129 "w_s_e",
130 "sd_l",
131 "sd_s",
132 "sd_phi",
133 "x_qflg",
134 "x_gflg",
135 "x_p_l",
136 "x_p_l_e",
137 "x_p_s",
138 "x_p_s_e",
139 "x_v",
140 "x_v_e",
141 "x_w_l",
142 "x_w_l_e",
143 "x_w_s",
144 "x_w_s_e",
145 "phi0",
146 "phi0_e",
147 "elv",
148 "elv_fitted",
149 "elv_error",
150 "elv_low",
151 "elv_high",
152 "x_sd_l",
153 "x_sd_s",
154 "x_sd_phi",
155]];
156
157static DATA_FIELDS: [&str; 39] = [
158 "slist",
159 "nlag",
160 "qflg",
161 "gflg",
162 "p_l",
163 "p_l_e",
164 "p_s",
165 "p_s_e",
166 "v",
167 "v_e",
168 "w_l",
169 "w_l_e",
170 "w_s",
171 "w_s_e",
172 "sd_l",
173 "sd_s",
174 "sd_phi",
175 "x_qflg",
176 "x_gflg",
177 "x_p_l",
178 "x_p_l_e",
179 "x_p_s",
180 "x_p_s_e",
181 "x_v",
182 "x_v_e",
183 "x_w_l",
184 "x_w_l_e",
185 "x_w_s",
186 "x_w_s_e",
187 "phi0",
188 "phi0_e",
189 "elv",
190 "elv_fitted",
191 "elv_error",
192 "elv_low",
193 "elv_high",
194 "x_sd_l",
195 "x_sd_s",
196 "x_sd_phi",
197];
198
199lazy_static! {
200 static ref FITACF_FIELDS: Fields<'static> = Fields {
201 all_fields: {
202 let mut fields: Vec<&str> = vec![];
203 fields.extend(SCALAR_FIELDS.clone().into_iter().map(|x| x.0));
204 fields.extend(SCALAR_FIELDS_OPT.clone().into_iter().map(|x| x.0));
205 fields.extend(VECTOR_FIELDS.clone().into_iter().map(|x| x.0));
206 fields.extend(VECTOR_FIELDS_OPT.clone().into_iter().map(|x| x.0));
207 fields
208 },
209 scalars_required: SCALAR_FIELDS.to_vec(),
210 scalars_optional: SCALAR_FIELDS_OPT.to_vec(),
211 vectors_required: VECTOR_FIELDS.to_vec(),
212 vectors_optional: VECTOR_FIELDS_OPT.to_vec(),
213 vector_dim_groups: {
214 let mut grouped_vecs: Vec<Vec<&str>> = vec![];
215 for group in MATCHED_VECS.iter() {
216 grouped_vecs.push(group.to_vec())
217 }
218 grouped_vecs
219 },
220 data_fields: DATA_FIELDS.to_vec(),
221 };
222}
223
224create_record_type!(fitacf, FITACF_FIELDS);