1 /*
2  * Copyright (c) 2019-2021, The OSKAR Developers.
3  * See the LICENSE file at the top-level directory of this distribution.
4  */
5 
6 #include "utility/oskar_get_binary_tag_string.h"
7 
8 #include "binary/oskar_binary.h"
9 #include "splines/oskar_splines.h"
10 #include "sky/oskar_sky.h"
11 #include "telescope/station/element/oskar_element.h"
12 #include "vis/oskar_vis_header.h"
13 #include "vis/oskar_vis_block.h"
14 
15 #ifdef __cplusplus
16 extern "C" {
17 #endif
18 
oskar_get_binary_tag_string(char group,char tag)19 const char* oskar_get_binary_tag_string(char group, char tag)
20 {
21     switch (group)
22     {
23     case OSKAR_TAG_GROUP_METADATA:
24     {
25         switch (tag)
26         {
27         case OSKAR_TAG_METADATA_DATE_TIME_STRING:
28             return "Date";
29         case OSKAR_TAG_METADATA_OSKAR_VERSION_STRING:
30             return "OSKAR version";
31         case OSKAR_TAG_METADATA_USERNAME:    return "Username";
32         case OSKAR_TAG_METADATA_CWD:         return "Working directory";
33         default:
34             return "Unknown metadata group tag";
35         }
36         break;
37     }
38     case OSKAR_TAG_GROUP_SETTINGS:
39     {
40         switch (tag)
41         {
42         case OSKAR_TAG_SETTINGS_PATH:        return "Settings file path";
43         case OSKAR_TAG_SETTINGS:             return "Settings file";
44         default:
45             return "Unknown settings group tag";
46         }
47         break;
48     }
49     case OSKAR_TAG_GROUP_RUN:
50     {
51         switch (tag)
52         {
53         case OSKAR_TAG_RUN_LOG:             return "Run log";
54         default:
55             return "Unknown run group tag";
56         }
57         break;
58     }
59     case OSKAR_TAG_GROUP_SKY_MODEL:
60     {
61         switch (tag)
62         {
63         case OSKAR_SKY_TAG_NUM_SOURCES:     return "Number of sources";
64         case OSKAR_SKY_TAG_DATA_TYPE:       return "Data type";
65         case OSKAR_SKY_TAG_RA:              return "Right Ascension values";
66         case OSKAR_SKY_TAG_DEC:             return "Declination values";
67         case OSKAR_SKY_TAG_STOKES_I:        return "Stokes I values";
68         case OSKAR_SKY_TAG_STOKES_Q:        return "Stokes Q values";
69         case OSKAR_SKY_TAG_STOKES_U:        return "Stokes U values";
70         case OSKAR_SKY_TAG_STOKES_V:        return "Stokes V values";
71         case OSKAR_SKY_TAG_REF_FREQ:
72             return "Reference frequency values";
73         case OSKAR_SKY_TAG_SPECTRAL_INDEX:
74             return "Spectral index values";
75         case OSKAR_SKY_TAG_ROTATION_MEASURE:
76             return "Rotation measure values";
77         case OSKAR_SKY_TAG_FWHM_MAJOR:
78             return "Gaussian FWHM (major) values";
79         case OSKAR_SKY_TAG_FWHM_MINOR:
80             return "Gaussian FWHM (minor) values";
81         case OSKAR_SKY_TAG_POSITION_ANGLE:
82             return "Gaussian position angle values";
83         default:
84             return "Unknown sky model group tag";
85         }
86         break;
87     }
88     case OSKAR_TAG_GROUP_SPLINE_DATA:
89     {
90         switch (tag)
91         {
92         case OSKAR_SPLINES_TAG_NUM_KNOTS_X_THETA:
93             return "Number of knots in X or theta";
94         case OSKAR_SPLINES_TAG_NUM_KNOTS_Y_PHI:
95             return "Number of knots in Y or phi";
96         case OSKAR_SPLINES_TAG_KNOTS_X_THETA:
97             return "Knot positions in X or theta";
98         case OSKAR_SPLINES_TAG_KNOTS_Y_PHI:
99             return "Knot positions in Y or phi";
100         case OSKAR_SPLINES_TAG_COEFF:
101             return "Spline coefficient data";
102         case OSKAR_SPLINES_TAG_SMOOTHING_FACTOR:
103             return "Smoothing factor";
104         default:
105             return "Unknown spline data group tag";
106         }
107         break;
108     }
109     case OSKAR_TAG_GROUP_ELEMENT_DATA:
110     {
111         switch (tag)
112         {
113         case OSKAR_ELEMENT_TAG_SURFACE_TYPE:
114             return "Surface type";
115         case OSKAR_ELEMENT_TAG_COORD_SYS:
116             return "Coordinate system";
117         default:
118             return "Unknown element data group tag";
119         }
120         break;
121     }
122     case OSKAR_TAG_GROUP_VIS_HEADER:
123     {
124         switch (tag)
125         {
126         case OSKAR_VIS_HEADER_TAG_TELESCOPE_PATH:
127             return "Telescope model path";
128         case OSKAR_VIS_HEADER_TAG_NUM_TAGS_PER_BLOCK:
129             return "Number of tags per block";
130         case OSKAR_VIS_HEADER_TAG_WRITE_AUTO_CORRELATIONS:
131             return "Auto-correlations present";
132         case OSKAR_VIS_HEADER_TAG_WRITE_CROSS_CORRELATIONS:
133             return "Cross-correlations present";
134         case OSKAR_VIS_HEADER_TAG_AMP_TYPE:
135             return "Visibility amplitude type";
136         case OSKAR_VIS_HEADER_TAG_COORD_PRECISION:
137             return "Coordinate precision";
138         case OSKAR_VIS_HEADER_TAG_MAX_TIMES_PER_BLOCK:
139             return "Maximum number of times per block";
140         case OSKAR_VIS_HEADER_TAG_NUM_TIMES_TOTAL:
141             return "Number of times total";
142         case OSKAR_VIS_HEADER_TAG_MAX_CHANNELS_PER_BLOCK:
143             return "Maximum number of channels per block";
144         case OSKAR_VIS_HEADER_TAG_NUM_CHANNELS_TOTAL:
145             return "Number of channels total";
146         case OSKAR_VIS_HEADER_TAG_NUM_STATIONS:
147             return "Number of stations";
148         case OSKAR_VIS_HEADER_TAG_POL_TYPE:
149             return "Polarisation type";
150         case OSKAR_VIS_HEADER_TAG_PHASE_CENTRE_COORD_TYPE:
151             return "Phase centre coordinate type";
152         case OSKAR_VIS_HEADER_TAG_PHASE_CENTRE_DEG:
153             return "Phase centre [deg]";
154         case OSKAR_VIS_HEADER_TAG_FREQ_START_HZ:
155             return "Frequency start [Hz]";
156         case OSKAR_VIS_HEADER_TAG_FREQ_INC_HZ:
157             return "Frequency inc [Hz]";
158         case OSKAR_VIS_HEADER_TAG_CHANNEL_BANDWIDTH_HZ:
159             return "Channel bandwidth [Hz]";
160         case OSKAR_VIS_HEADER_TAG_TIME_START_MJD_UTC:
161             return "Start time [MJD, UTC]";
162         case OSKAR_VIS_HEADER_TAG_TIME_INC_SEC:
163             return "Time inc [s]";
164         case OSKAR_VIS_HEADER_TAG_TIME_AVERAGE_SEC:
165             return "Time average integration [s]";
166         case OSKAR_VIS_HEADER_TAG_TELESCOPE_REF_LON_DEG:
167             return "Telescope longitude [deg]";
168         case OSKAR_VIS_HEADER_TAG_TELESCOPE_REF_LAT_DEG:
169             return "Telescope latitude [deg]";
170         case OSKAR_VIS_HEADER_TAG_TELESCOPE_REF_ALT_M:
171             return "Telescope altitude [m]";
172         case OSKAR_VIS_HEADER_TAG_STATION_X_OFFSET_ECEF:
173             return "Station X coordinates (offset ECEF) [m]";
174         case OSKAR_VIS_HEADER_TAG_STATION_Y_OFFSET_ECEF:
175             return "Station Y coordinates (offset ECEF) [m]";
176         case OSKAR_VIS_HEADER_TAG_STATION_Z_OFFSET_ECEF:
177             return "Station Z coordinates (offset ECEF) [m]";
178         case OSKAR_VIS_HEADER_TAG_ELEMENT_X_ENU:
179             return "Element X coordinates (ENU) [m]";
180         case OSKAR_VIS_HEADER_TAG_ELEMENT_Y_ENU:
181             return "Element Y coordinates (ENU) [m]";
182         case OSKAR_VIS_HEADER_TAG_ELEMENT_Z_ENU:
183             return "Element Z coordinates (ENU) [m]";
184         default:
185             return "Unknown visibility header group tag";
186         }
187         break;
188     }
189     case OSKAR_TAG_GROUP_VIS_BLOCK:
190     {
191         switch (tag)
192         {
193         case OSKAR_VIS_BLOCK_TAG_DIM_START_AND_SIZE:
194             return "Dimension start and size";
195         case OSKAR_VIS_BLOCK_TAG_AUTO_CORRELATIONS:
196             return "Auto-correlation data";
197         case OSKAR_VIS_BLOCK_TAG_CROSS_CORRELATIONS:
198             return "Cross-correlation data";
199         case OSKAR_VIS_BLOCK_TAG_BASELINE_UU:
200             return "Baseline UU coordinates [m]";
201         case OSKAR_VIS_BLOCK_TAG_BASELINE_VV:
202             return "Baseline VV coordinates [m]";
203         case OSKAR_VIS_BLOCK_TAG_BASELINE_WW:
204             return "Baseline WW coordinates [m]";
205         case OSKAR_VIS_BLOCK_TAG_STATION_U:
206             return "Station U coordinates [m]";
207         case OSKAR_VIS_BLOCK_TAG_STATION_V:
208             return "Station V coordinates [m]";
209         case OSKAR_VIS_BLOCK_TAG_STATION_W:
210             return "Station W coordinates [m]";
211         default:
212             return "Unknown visibility block group tag";
213         }
214         break;
215     }
216     default:
217         break;
218     }
219     return "Unknown tag group";
220 }
221 
222 #ifdef __cplusplus
223 }
224 #endif
225