38#include "hdrl_barycorr.h"
47static cpl_table * hdrl_create_eoptable(){
49 cpl_table * eop_table = cpl_table_new(4);
50 cpl_table_new_column(eop_table,
"MJD", CPL_TYPE_DOUBLE);
51 cpl_table_new_column(eop_table,
"PMX", CPL_TYPE_DOUBLE);
52 cpl_table_new_column(eop_table,
"PMY", CPL_TYPE_DOUBLE);
53 cpl_table_new_column(eop_table,
"DUT", CPL_TYPE_DOUBLE);
54 cpl_table_new_column(eop_table,
"FLAG", CPL_TYPE_STRING);
56 cpl_table_set_double(eop_table,
"MJD", 0, 5.884300000000E+04);
57 cpl_table_set_double(eop_table,
"MJD", 1, 5.884400000000E+04);
58 cpl_table_set_double(eop_table,
"MJD", 2, 5.884500000000E+04);
59 cpl_table_set_double(eop_table,
"MJD", 3, 5.884600000000E+04);
61 cpl_table_set_double(eop_table,
"PMX", 0, 8.855900000000E-02);
62 cpl_table_set_double(eop_table,
"PMX", 1, 8.687500000000E-02);
63 cpl_table_set_double(eop_table,
"PMX", 2, 8.503000000000E-02);
64 cpl_table_set_double(eop_table,
"PMX", 3, 8.285400000000E-02);
66 cpl_table_set_double(eop_table,
"PMY", 0, 2.800810000000E-01);
67 cpl_table_set_double(eop_table,
"PMY", 1, 2.806870000000E-01);
68 cpl_table_set_double(eop_table,
"PMY", 2, 2.812910000000E-01);
69 cpl_table_set_double(eop_table,
"PMY", 3, 2.816470000000E-01);
71 cpl_table_set_double(eop_table,
"DUT", 0, -1.761465000000E-01);
72 cpl_table_set_double(eop_table,
"DUT", 1, -1.762087000000E-01);
73 cpl_table_set_double(eop_table,
"DUT", 2, -1.762508000000E-01);
74 cpl_table_set_double(eop_table,
"DUT", 3, -1.763259000000E-01);
76 cpl_table_set_string(eop_table,
"FLAG", 0,
"I");
77 cpl_table_set_string(eop_table,
"FLAG", 1,
"I");
78 cpl_table_set_string(eop_table,
"FLAG", 2,
"I");
79 cpl_table_set_string(eop_table,
"FLAG", 3,
"I");
85static cpl_error_code hdrl_barycorr_compute_test(
void) {
95 cpl_table * eop_table = hdrl_create_eoptable();
97 double ra = 149.823138;
98 double dec = -27.39211;
99 double mjdobs = 58844.22531243;
100 double time_to_mid_exposure = 900.;
101 double longitude = -70.4045;
102 double latitude = -24.6268;
103 double elevation = 2648.;
104 double pressure = 0.;
105 double temperature = 0.;
106 double humidity = 0.;
107 double wavelength = 0.;
109 double barycorr = 0.;
112 longitude, latitude, elevation, pressure, temperature,
113 humidity, wavelength, &barycorr);
115 cpl_test_error(CPL_ERROR_NONE);
116 cpl_test_abs(barycorr, 22814.877482069, FLT_EPSILON);
119 longitude, latitude, elevation, pressure, temperature,
120 humidity, wavelength, &barycorr);
121 cpl_test_error(CPL_ERROR_ILLEGAL_INPUT);
124 longitude, latitude, elevation, pressure, temperature,
125 humidity, wavelength, &barycorr);
126 cpl_test_error(CPL_ERROR_ILLEGAL_INPUT);
129 -200., latitude, elevation, pressure, temperature,
130 humidity, wavelength, &barycorr);
131 cpl_test_error(CPL_ERROR_ILLEGAL_INPUT);
134 longitude, 100, elevation, pressure, temperature,
135 humidity, wavelength, &barycorr);
136 cpl_test_error(CPL_ERROR_ILLEGAL_INPUT);
139 longitude, latitude, elevation, pressure, temperature,
140 humidity, wavelength, &barycorr);
141 cpl_test_error(CPL_ERROR_NULL_INPUT);
144 cpl_table_delete(eop_table);
145 return cpl_error_get_code();
148static cpl_error_code hdrl_eop_interpolate_test(
void) {
156 cpl_table * eop_table = hdrl_create_eoptable();
159 double mean_mjd = 58844.235729096661089;
160 double dut1 = 0., pmx = 0., pmy = 0.;
162 hdrl_parameter * resample_par =
165 hdrl_eop_interpolate(mean_mjd, eop_table, resample_par, &pmx, &pmy, &dut1) ;
166 cpl_test_error(CPL_ERROR_NONE);
172 cpl_test_abs(pmx, 0.08644007981666028406, FLT_EPSILON);
173 cpl_test_abs(pmy, 0.28082938037438331946, FLT_EPSILON);
174 cpl_test_abs(dut1, -0.17621862419496941987, FLT_EPSILON);
176 hdrl_eop_interpolate(mean_mjd, NULL, resample_par, &pmx, &pmy, &dut1) ;
177 cpl_test_error(CPL_ERROR_NULL_INPUT);
179 hdrl_eop_interpolate(mean_mjd, eop_table, NULL, &pmx, &pmy, &dut1) ;
180 cpl_test_error(CPL_ERROR_NULL_INPUT);
182 hdrl_eop_interpolate(mean_mjd, NULL, resample_par, NULL, &pmy, &dut1) ;
183 cpl_test_error(CPL_ERROR_NULL_INPUT);
184 hdrl_eop_interpolate(mean_mjd, NULL, resample_par, &pmx, NULL, &dut1) ;
185 cpl_test_error(CPL_ERROR_NULL_INPUT);
186 hdrl_eop_interpolate(mean_mjd, NULL, resample_par, &pmx, &pmy, NULL) ;
187 cpl_test_error(CPL_ERROR_NULL_INPUT);
189 hdrl_eop_interpolate(-100., eop_table, resample_par, &pmx, &pmy, &dut1) ;
190 cpl_test_error(CPL_ERROR_NONE);
193 cpl_table * eop_table_with_invalid = cpl_table_duplicate(eop_table);
195 cpl_table_set_column_invalid(eop_table_with_invalid,
"DUT", 0, 2);
196 hdrl_eop_interpolate(1., eop_table_with_invalid, resample_par, &pmx, &pmy, &dut1) ;
197 cpl_test_error(CPL_ERROR_NONE);
198 cpl_table_delete(eop_table_with_invalid);
200 eop_table_with_invalid = cpl_table_duplicate(eop_table);
201 cpl_table_set_column_invalid(eop_table_with_invalid,
"DUT", 0, 4);
202 hdrl_eop_interpolate(1., eop_table_with_invalid, resample_par, &pmx, &pmy, &dut1) ;
203 cpl_test_error(CPL_ERROR_ILLEGAL_INPUT);
204 cpl_table_delete(eop_table_with_invalid);
206 cpl_table_erase_column(eop_table,
"PMY");
207 hdrl_eop_interpolate(mean_mjd, eop_table, resample_par, &pmx, &pmy, &dut1) ;
208 cpl_test_error(CPL_ERROR_ILLEGAL_INPUT);
210 cpl_table_delete(eop_table);
212 return cpl_error_get_code();
228 cpl_test_init(PACKAGE_BUGREPORT, CPL_MSG_WARNING);
230 hdrl_barycorr_compute_test();
231 hdrl_eop_interpolate_test();
233 return cpl_test_end(0);
cpl_error_code hdrl_barycorr_compute(double ra, double dec, const cpl_table *eop_table, double mjdobs, double time_to_mid_exposure, double longitude, double latitude, double elevation, double pressure, double temperature, double humidity, double wavelength, double *barycorr)
Derives the barycentric correction using the erfa function eraApco13(). The latter For a terrestrial ...
void hdrl_parameter_delete(hdrl_parameter *obj)
shallow delete of a parameter
hdrl_parameter * hdrl_spectrum1D_resample_interpolate_parameter_create(const hdrl_spectrum1D_interpolation_method method)
constructor for the hdrl_parameter in the case of interpolation