41 #include <irplib_utils.h>
54 #include <uves_error.h>
55 #include <uves_utils_wrappers.h>
56 #include <uves_physmod_create_table.h>
57 #include <uves_utils.h>
62 #define UVES_IMA_SIZE_X 4096
63 #define UVES_IMA_SIZE_Y 2048
64 #define UVES_LINE_SIGMA_X 2.0
65 #define UVES_LINE_SIGMA_Y 2.0
77 static char uves_utl_physmod_description[] =
78 "This recipe generates an image using the physical model.\n"
79 "The input file is the reference arc line (LINE_REFER_TABLE)\n"
80 "The output is the image simulated with the UVES physical model\n"
81 "Information on relevant parameters can be found with\n"
82 "esorex --params uves_utl_physmod\n"
83 "esorex --help uves_utl_physmod\n"
107 cpl_recipe * recipe = cpl_calloc(1,
sizeof *recipe ) ;
108 cpl_plugin * plugin = &recipe->interface ;
110 cpl_plugin_init(plugin,
113 CPL_PLUGIN_TYPE_RECIPE,
115 "Generates a simulated image",
116 uves_utl_physmod_description,
118 "Andrea.Modigliani@eso.org",
124 cpl_pluginlist_append(list, plugin) ;
141 cpl_recipe * recipe ;
145 if (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
146 recipe = (cpl_recipe *)plugin ;
152 recipe->parameters = cpl_parameterlist_new() ;
156 p = cpl_parameter_new_value(
"uves.uves_utl_physmod.bias",
159 "uves.uves_utl_physmod",200.);
160 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,
"bias") ;
161 cpl_parameterlist_append(recipe->parameters, p) ;
164 p = cpl_parameter_new_value(
"uves.uves_utl_physmod.ron",
167 "uves.uves_utl_physmod", 3.) ;
168 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,
"ron") ;
169 cpl_parameterlist_append(recipe->parameters, p) ;
173 p = cpl_parameter_new_value(
"uves.uves_utl_physmod.gain",
176 "uves.uves_utl_physmod", 0.7) ;
177 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,
"gain") ;
178 cpl_parameterlist_append(recipe->parameters, p) ;
181 p = cpl_parameter_new_value(
"uves.uves_utl_physmod.flux",
184 "uves.uves_utl_physmod",1.0e4) ;
185 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,
"flux") ;
186 cpl_parameterlist_append(recipe->parameters, p) ;
189 p = cpl_parameter_new_value(
"uves.uves_utl_physmod.wlen",
191 "Wavelength setting",
192 "uves.uves_utl_physmod",580) ;
193 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,
"wlen") ;
194 cpl_parameterlist_append(recipe->parameters, p) ;
198 p = cpl_parameter_new_value(
"uves.uves_utl_physmod.binx",
201 "uves.uves_utl_physmod",1) ;
202 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,
"binx") ;
203 cpl_parameterlist_append(recipe->parameters, p) ;
206 p = cpl_parameter_new_value(
"uves.uves_utl_physmod.biny",
209 "uves.uves_utl_physmod",1) ;
210 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,
"biny") ;
211 cpl_parameterlist_append(recipe->parameters, p) ;
216 p = cpl_parameter_new_value(
"uves_utl_physmod.mbox_x",
219 "uves_utl_physmod",40) ;
220 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,
"mbox_x") ;
221 cpl_parameterlist_append(recipe->parameters, p) ;
224 p = cpl_parameter_new_value(
"uves_utl_physmod.mbox_y",
227 "uves_utl_physmod",40) ;
228 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,
"mbox_y") ;
229 cpl_parameterlist_append(recipe->parameters, p) ;
234 p = cpl_parameter_new_value(
"uves_utl_physmod.trans_x",
237 "uves_utl_physmod",0.) ;
238 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,
"trans_x") ;
239 cpl_parameterlist_append(recipe->parameters, p) ;
243 p = cpl_parameter_new_value(
"uves_utl_physmod.trans_y",
246 "uves_utl_physmod",0.) ;
247 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,
"trans_y") ;
248 cpl_parameterlist_append(recipe->parameters, p) ;
251 p = cpl_parameter_new_value(
"uves_utl_physmod.ech_angle_off",
253 "Offset on echelle angle",
254 "uves_utl_physmod",0.) ;
255 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,
"ech_angle_off") ;
256 cpl_parameterlist_append(recipe->parameters, p) ;
260 p = cpl_parameter_new_value(
"uves_utl_physmod.cd_angle_off",
262 "Offset on cross disperser angle",
263 "uves_utl_physmod",0.) ;
264 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,
"cd_angle_off") ;
265 cpl_parameterlist_append(recipe->parameters, p) ;
268 p = cpl_parameter_new_value(
"uves_utl_physmod.ccd_rot_angle_off",
270 "CCD rotation angle",
271 "uves_utl_physmod",0.) ;
272 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,
"ccd_rot_angle_off") ;
273 cpl_parameterlist_append(recipe->parameters, p) ;
275 p = cpl_parameter_new_value(
"uves_utl_physmod.compute_regression_sw",
277 "Compute regression",
278 "uves_utl_physmod",CPL_TRUE) ;
279 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,
"compute_regression_sw") ;
280 cpl_parameterlist_append(recipe->parameters, p) ;
282 p = cpl_parameter_new_value(
"uves_utl_physmod.process_chip",
284 "Chip to be processed",
285 "uves_utl_physmod",
"both") ;
286 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,
"process_chip") ;
287 cpl_parameterlist_append(recipe->parameters, p) ;
303 cpl_recipe * recipe ;
305 cpl_errorstate initial_errorstate = cpl_errorstate_get();
308 if (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
309 recipe = (cpl_recipe *)plugin ;
316 if (!cpl_errorstate_is_equal(initial_errorstate)) {
319 cpl_errorstate_dump(initial_errorstate, CPL_FALSE, NULL);
334 cpl_recipe * recipe ;
337 if (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
338 recipe = (cpl_recipe *)plugin ;
341 cpl_parameterlist_delete(recipe->parameters) ;
355 cpl_frameset * frames)
357 cpl_parameter * p= NULL ;
368 cpl_image* noise=NULL;
381 cpl_frame* product_frame=NULL;
382 cpl_frameset* ref_set=NULL;
383 cpl_frameset* fck_set=NULL;
384 cpl_table* line_ref_tbl=NULL;
385 cpl_frame* line_ref_frame=NULL;
386 cpl_frame* fck_frame=NULL;
387 cpl_table* mod_tbl=NULL;
388 cpl_table* fsr_tbl=NULL;
390 enum uves_chip chip = UVES_CHIP_REDL;
391 cpl_image *raw_image[2] = {NULL, NULL};
394 const char *raw_filename =
"";
396 const char *line_refer_filename =
"";
397 cpl_table *line_refer = NULL;
398 const char* PROCESS_CHIP=NULL;
400 const char *product_filename = NULL;
402 uves_msg(
"Welcome to UVES Pipeline release %d.%d.%d",
403 UVES_MAJOR_VERSION,UVES_MINOR_VERSION,UVES_MICRO_VERSION);
406 check_nomsg(p=cpl_parameterlist_find(parlist,
"uves.uves_utl_physmod.bias"));
409 check_nomsg(p=cpl_parameterlist_find(parlist,
"uves.uves_utl_physmod.ron"));
412 check_nomsg(p=cpl_parameterlist_find(parlist,
"uves.uves_utl_physmod.gain"));
415 check_nomsg(p=cpl_parameterlist_find(parlist,
"uves.uves_utl_physmod.flux"));
418 check_nomsg(p=cpl_parameterlist_find(parlist,
"uves.uves_utl_physmod.wlen"));
421 check_nomsg(p=cpl_parameterlist_find(parlist,
"uves.uves_utl_physmod.binx"));
424 check_nomsg(p=cpl_parameterlist_find(parlist,
"uves.uves_utl_physmod.biny"));
427 check_nomsg(p=cpl_parameterlist_find(parlist,
"uves_utl_physmod.trans_x"));
430 check_nomsg(p=cpl_parameterlist_find(parlist,
"uves_utl_physmod.trans_y"));
433 check( uves_get_parameter(parlist, NULL,
"uves_utl_physmod",
"process_chip",
434 CPL_TYPE_STRING, &PROCESS_CHIP),
435 "Could not read parameter");
439 check(uves_dfs_set_groups(frames),
440 "Cannot identify RAW and CALIB frames") ;
444 nfrm=cpl_frameset_get_size(frames);
453 check( uves_load_formatcheck(frames, flames, &raw_filename, raw_image,
454 raw_header, rotated_header, &blue),
455 "Error loading raw frame");
457 check( uves_load_linerefertable(frames, &line_refer_filename,
459 "Could not load line reference table");
462 chip != UVES_CHIP_INVALID;
466 if(strcmp(PROCESS_CHIP,
"REDU") == 0) {
473 parlist,line_refer,offx,offy,
477 product_filename =
"model_prediction";
478 check( uves_save_table_local(
"Physical model table",
479 product_filename, mod_tbl,
480 chip, -1, -1, raw_header[raw_index], NULL),
481 "Error saving physical model table");
483 product_filename =
"free_spectral_range";
484 check( uves_save_table_local(
"FSR table",
485 product_filename, fsr_tbl,
486 chip, -1, -1, raw_header[raw_index], NULL),
487 "Error saving free spectral range table");
493 check_nomsg(cpl_frame_set_filename(product_frame, name)) ;
494 check_nomsg(cpl_frame_set_tag(product_frame,
"PRODUCT")) ;
495 check_nomsg(cpl_frame_set_type(product_frame, CPL_FRAME_TYPE_IMAGE)) ;
496 check_nomsg(cpl_frame_set_group(product_frame, CPL_FRAME_GROUP_PRODUCT)) ;
497 check(cpl_frame_set_level(product_frame, CPL_FRAME_LEVEL_FINAL),
498 "Error while initialising the product frame") ;
521 uves_free_propertylist(&plist);
524 check_nomsg(cpl_frameset_insert(frames, product_frame)) ;
531 if (cpl_error_get_code()) {