40 #include "crires_utils.h"
41 #include "crires_pfits.h"
42 #include "crires_dfs.h"
43 #include "crires_model_computation.h"
49 static int crires_test_model_compute_create(cpl_plugin *) ;
50 static int crires_test_model_compute_exec(cpl_plugin *) ;
51 static int crires_test_model_compute_destroy(cpl_plugin *) ;
52 static int crires_test_model_compute(cpl_parameterlist *, cpl_frameset *) ;
68 } crires_test_model_compute_config ;
70 static char crires_test_model_compute_description[] =
71 " This recipe uses a specified physical model configuration\n (model-cfg.fits in the sof, see below), to generate a variety of\n simulated datasets. There are three principle tasks that may be\n performed with this recipe:\n1. Generate a 2D simulated image of a calibration emission lamp and\n write it to the FITS file <chips_out.fits>. Statistics are also\n written to the ascii file <centres.dat>. The calibration source\n line list should be a FITS table with two columns: wavelength(nm);\n relative intensity. This is the line-list.fits wile in the sof (see\n below).\n2. Generate a wavelength map and write to FITS. This is now superseded\n by the crires_model_wlmap recipe.\n3. Trace the locus of the spectrum for a given instrument\n configuration (see the crires_model_profile function above) and\n write the result to the ascii file <trace.dat>\nThe files listed in the Set Of Frames (sof-file) must be tagged:\n model-cfg.fits CRIRES_MODEL_CONFIG\n line-list.fits CRIRES_MODEL_WAVE_EG\n";
87 int cpl_plugin_get_info(cpl_pluginlist * list)
89 cpl_recipe * recipe = cpl_calloc(1,
sizeof *recipe ) ;
90 cpl_plugin * plugin = &recipe->interface ;
92 cpl_plugin_init(plugin,
94 CRIRES_BINARY_VERSION,
95 CPL_PLUGIN_TYPE_RECIPE,
96 "crires_test_model_compute",
97 "Compute detector locations for given wavelength and cfg",
98 crires_test_model_compute_description,
101 crires_get_license(),
102 crires_test_model_compute_create,
103 crires_test_model_compute_exec,
104 crires_test_model_compute_destroy) ;
106 cpl_pluginlist_append(list, plugin) ;
120 static int crires_test_model_compute_create(cpl_plugin * plugin)
122 cpl_recipe * recipe ;
126 if (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
127 recipe = (cpl_recipe *)plugin ;
131 recipe->parameters = cpl_parameterlist_new() ;
135 p = cpl_parameter_new_value(
"crires.crires_test_model_compute.order_calc",
136 CPL_TYPE_BOOL,
"order_calc flag",
"crires.crires_test_model_compute",
138 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,
"order_calc") ;
139 cpl_parameter_disable(p, CPL_PARAMETER_MODE_ENV) ;
140 cpl_parameterlist_append(recipe->parameters, p) ;
142 p = cpl_parameter_new_value(
"crires.crires_test_model_compute.order_out",
143 CPL_TYPE_BOOL,
"order_out flag",
"crires.crires_test_model_compute",FALSE);
144 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,
"order_out") ;
145 cpl_parameter_disable(p, CPL_PARAMETER_MODE_ENV) ;
146 cpl_parameterlist_append(recipe->parameters, p) ;
148 p = cpl_parameter_new_value(
"crires.crires_test_model_compute.trace_out",
149 CPL_TYPE_BOOL,
"trace_out flag",
"crires.crires_test_model_compute",FALSE);
150 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,
"trace_out") ;
151 cpl_parameter_disable(p, CPL_PARAMETER_MODE_ENV) ;
152 cpl_parameterlist_append(recipe->parameters, p) ;
154 p = cpl_parameter_new_value(
"crires.crires_test_model_compute.is_out",
155 CPL_TYPE_BOOL,
"is_out flag",
"crires.crires_test_model_compute", FALSE);
156 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,
"is_out") ;
157 cpl_parameter_disable(p, CPL_PARAMETER_MODE_ENV) ;
158 cpl_parameterlist_append(recipe->parameters, p) ;
160 p = cpl_parameter_new_value(
"crires.crires_test_model_compute.back_map",
161 CPL_TYPE_BOOL,
"back_map flag",
"crires.crires_test_model_compute",FALSE);
162 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,
"back_map") ;
163 cpl_parameter_disable(p, CPL_PARAMETER_MODE_ENV) ;
164 cpl_parameterlist_append(recipe->parameters, p) ;
166 p = cpl_parameter_new_value(
"crires.crires_test_model_compute.continuum",
167 CPL_TYPE_INT,
"continuum",
"crires.crires_test_model_compute", 0);
168 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,
"continuum") ;
169 cpl_parameter_disable(p, CPL_PARAMETER_MODE_ENV) ;
170 cpl_parameterlist_append(recipe->parameters, p) ;
172 p = cpl_parameter_new_value(
"crires.crires_test_model_compute.morder",
173 CPL_TYPE_INT,
"morder",
"crires.crires_test_model_compute", 31);
174 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,
"morder") ;
175 cpl_parameter_disable(p, CPL_PARAMETER_MODE_ENV) ;
176 cpl_parameterlist_append(recipe->parameters, p) ;
178 p = cpl_parameter_new_value(
"crires.crires_test_model_compute.flux_scale",
179 CPL_TYPE_DOUBLE,
"flux_scale",
"crires.crires_test_model_compute",100.0);
180 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,
"flux_scale") ;
181 cpl_parameter_disable(p, CPL_PARAMETER_MODE_ENV) ;
182 cpl_parameterlist_append(recipe->parameters, p) ;
184 p = cpl_parameter_new_value(
"crires.crires_test_model_compute.spotsize",
185 CPL_TYPE_DOUBLE,
"spotsize",
"crires.crires_test_model_compute", 0.025);
186 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,
"spotsize") ;
187 cpl_parameter_disable(p, CPL_PARAMETER_MODE_ENV) ;
188 cpl_parameterlist_append(recipe->parameters, p) ;
201 static int crires_test_model_compute_exec(cpl_plugin * plugin)
203 cpl_recipe * recipe ;
206 if (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
207 recipe = (cpl_recipe *)plugin ;
210 return crires_test_model_compute(recipe->parameters, recipe->frames) ;
220 static int crires_test_model_compute_destroy(cpl_plugin * plugin)
222 cpl_recipe * recipe ;
225 if (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
226 recipe = (cpl_recipe *)plugin ;
229 cpl_parameterlist_delete(recipe->parameters) ;
241 static int crires_test_model_compute(
242 cpl_parameterlist * parlist,
243 cpl_frameset * frameset)
245 cpl_parameter * par ;
246 cpl_frame * cri_config ;
247 cpl_frame * wave_eg ;
251 par = cpl_parameterlist_find(parlist,
252 "crires.crires_test_model_compute.order_calc");
253 crires_test_model_compute_config.order_calc_flag = cpl_parameter_get_bool(par) ;
255 par = cpl_parameterlist_find(parlist,
256 "crires.crires_test_model_compute.order_out");
257 crires_test_model_compute_config.order_out_flag = cpl_parameter_get_bool(par) ;
259 par = cpl_parameterlist_find(parlist,
260 "crires.crires_test_model_compute.trace_out");
261 crires_test_model_compute_config.trace_out_flag = cpl_parameter_get_bool(par) ;
263 par = cpl_parameterlist_find(parlist,
"crires.crires_test_model_compute.is_out");
264 crires_test_model_compute_config.is_out_flag = cpl_parameter_get_bool(par) ;
266 par = cpl_parameterlist_find(parlist,
267 "crires.crires_test_model_compute.back_map");
268 crires_test_model_compute_config.back_map_flag = cpl_parameter_get_bool(par) ;
270 par = cpl_parameterlist_find(parlist,
271 "crires.crires_test_model_compute.continuum");
272 crires_test_model_compute_config.continuum = cpl_parameter_get_int(par) ;
274 par = cpl_parameterlist_find(parlist,
275 "crires.crires_test_model_compute.morder");
276 crires_test_model_compute_config.morder = cpl_parameter_get_int(par) ;
278 par = cpl_parameterlist_find(parlist,
279 "crires.crires_test_model_compute.flux_scale");
280 crires_test_model_compute_config.flux_scale = cpl_parameter_get_double(par) ;
282 par = cpl_parameterlist_find(parlist,
283 "crires.crires_test_model_compute.spotsize");
284 crires_test_model_compute_config.spotsize = cpl_parameter_get_double(par) ;
287 if (crires_dfs_set_groups(frameset, NULL)) {
288 cpl_msg_error(__func__,
"Cannot identify RAW and CALIB frames") ;
293 cri_config = cpl_frameset_find(frameset, CRIRES_CALPRO_MODEL_CONFIG) ;
294 wave_eg = cpl_frameset_find(frameset, CRIRES_CALPRO_MODEL_WAVEEG) ;
297 if (crires_model_computation(cpl_frame_get_filename(cri_config),
298 cpl_frame_get_filename(wave_eg),
299 crires_test_model_compute_config.order_calc_flag,
300 crires_test_model_compute_config.order_out_flag,
301 crires_test_model_compute_config.trace_out_flag,
302 crires_test_model_compute_config.is_out_flag,
303 crires_test_model_compute_config.back_map_flag,
304 crires_test_model_compute_config.continuum,
305 crires_test_model_compute_config.morder,
306 crires_test_model_compute_config.flux_scale,
307 crires_test_model_compute_config.spotsize) == -1) {
308 cpl_msg_error(__func__,
"Failed computing the model") ;
313 if (cpl_error_get_code())