41 #include <irplib_utils.h>
43 #include <sinfo_tpl_utils.h>
44 #include <sinfo_pfits.h>
45 #include <sinfo_tpl_dfs.h>
46 #include <sinfo_key_names.h>
47 #include <sinfo_pro_types.h>
48 #include <sinfo_functions.h>
49 #include <sinfo_msg.h>
50 #include <sinfo_error.h>
51 #include <sinfo_utils_wrappers.h>
57 static int sinfo_utl_ima_gauss_create(cpl_plugin *) ;
58 static int sinfo_utl_ima_gauss_exec(cpl_plugin *) ;
59 static int sinfo_utl_ima_gauss_destroy(cpl_plugin *) ;
60 static int sinfo_utl_ima_gauss(cpl_parameterlist *, cpl_frameset *) ;
66 static char sinfo_utl_ima_gauss_description[] =
67 "This recipe produce an image,\n"
68 "containing a 2D Gaussian.\n"
71 static char PARAM_NAME_SIZE_X[] =
"sinfoni.sinfo_utl_ima_gauss.size_x";
72 static char PARAM_NAME_SIZE_Y[] =
"sinfoni.sinfo_utl_ima_gauss.size_y";
73 static char PARAM_NAME_FWHM_X[] =
"sinfoni.sinfo_utl_ima_gauss.fwhm_x";
74 static char PARAM_NAME_FWHM_Y[] =
"sinfoni.sinfo_utl_ima_gauss.fwhm_y";
75 static char PARAM_NAME_SIGNAL[] =
"sinfoni.sinfo_utl_ima_gauss.total_signal";
76 static char PARAM_NAME_BKGSIG[] =
"sinfoni.sinfo_utl_ima_gauss.bkg_signal";
77 static char PARAM_NAME_NOISEL[] =
"sinfoni.sinfo_utl_ima_gauss.noise_level";
79 static char RECIPE_NAME[] =
"sinfoni.sinfo_utl_ima_gauss";
102 cpl_recipe * recipe = cpl_calloc(1,
sizeof *recipe ) ;
103 cpl_plugin * plugin = &recipe->interface ;
105 cpl_plugin_init(plugin,
107 SINFONI_BINARY_VERSION,
108 CPL_PLUGIN_TYPE_RECIPE,
109 "sinfo_utl_ima_gauss",
110 "Produce an image containing 2D Gaussian",
111 sinfo_utl_ima_gauss_description,
115 sinfo_utl_ima_gauss_create,
116 sinfo_utl_ima_gauss_exec,
117 sinfo_utl_ima_gauss_destroy) ;
119 cpl_pluginlist_append(list, plugin) ;
134 static int sinfo_utl_ima_gauss_create(cpl_plugin * plugin)
136 const int SIZE_X_DEFAULT = 1024;
137 const int SIZE_Y_DEFAULT = 1024;
138 const int FWHM_X = 100;
139 const int FWHM_Y = 100;
140 const double TOTAL_SIGNAL = 10E5;
141 const double BKG_SIGNAL = 400.;
142 const double NOISE_VALUE = 20.;
144 cpl_recipe * recipe ;
148 if (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
149 recipe = (cpl_recipe *)plugin ;
155 recipe->parameters = cpl_parameterlist_new() ;
167 p = cpl_parameter_new_value(PARAM_NAME_SIZE_X,
168 CPL_TYPE_INT,
"size X axis", RECIPE_NAME, SIZE_X_DEFAULT) ;
169 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,
"size_x") ;
170 cpl_parameterlist_append(recipe->parameters, p) ;
173 p = cpl_parameter_new_value(PARAM_NAME_SIZE_Y,
174 CPL_TYPE_INT,
"size Y axis", RECIPE_NAME, SIZE_Y_DEFAULT) ;
175 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,
"size_y") ;
176 cpl_parameterlist_append(recipe->parameters, p) ;
179 p = cpl_parameter_new_value(PARAM_NAME_FWHM_X,
180 CPL_TYPE_INT,
"FWHM X axis", RECIPE_NAME, FWHM_X) ;
181 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,
"fwhm_x") ;
182 cpl_parameterlist_append(recipe->parameters, p) ;
185 p = cpl_parameter_new_value(PARAM_NAME_FWHM_Y,
186 CPL_TYPE_INT,
"FWHM Y axis", RECIPE_NAME, FWHM_Y) ;
187 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,
"fwhm_y") ;
188 cpl_parameterlist_append(recipe->parameters, p) ;
191 p = cpl_parameter_new_value(PARAM_NAME_SIGNAL,
192 CPL_TYPE_DOUBLE,
"Total signal value", RECIPE_NAME, TOTAL_SIGNAL) ;
193 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,
"total_signal") ;
194 cpl_parameterlist_append(recipe->parameters, p) ;
197 p = cpl_parameter_new_value(PARAM_NAME_BKGSIG,
198 CPL_TYPE_DOUBLE,
"background signal level", RECIPE_NAME, BKG_SIGNAL) ;
199 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,
"bkg_signal") ;
200 cpl_parameterlist_append(recipe->parameters, p) ;
203 p = cpl_parameter_new_value(PARAM_NAME_NOISEL,
204 CPL_TYPE_DOUBLE,
"Noise level", RECIPE_NAME, NOISE_VALUE) ;
205 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,
"noise_level") ;
206 cpl_parameterlist_append(recipe->parameters, p) ;
218 static int sinfo_utl_ima_gauss_exec(cpl_plugin * plugin)
220 cpl_recipe * recipe ;
222 cpl_errorstate initial_errorstate = cpl_errorstate_get();
225 if (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
226 recipe = (cpl_recipe *)plugin ;
230 code = sinfo_utl_ima_gauss(recipe->parameters, recipe->frames) ;
233 if (!cpl_errorstate_is_equal(initial_errorstate)) {
236 cpl_errorstate_dump(initial_errorstate, CPL_FALSE, NULL);
249 static int sinfo_utl_ima_gauss_destroy(cpl_plugin * plugin)
251 cpl_recipe * recipe ;
254 if (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
255 recipe = (cpl_recipe *)plugin ;
258 cpl_parameterlist_delete(recipe->parameters) ;
271 sinfo_utl_ima_gauss( cpl_parameterlist * parlist,
272 cpl_frameset * framelist)
280 double dBkgSignal = 0;
281 double dNoiseLvl = 0;
284 const char * name_o = NULL ;
285 cpl_parameter * param = NULL ;
287 cpl_propertylist * plist = NULL ;
288 cpl_image * imNoise = NULL ;
289 cpl_image * imGauss = NULL ;
290 cpl_image * imResult = NULL;
291 cpl_frame * product_frame = NULL;
292 const double K = 2.35482;
294 sinfo_msg(
"Welcome to SINFONI Pipeline release %d.%d.%d",
295 SINFONI_MAJOR_VERSION,SINFONI_MINOR_VERSION,SINFONI_MICRO_VERSION);
296 ck0(sinfo_dfs_set_groups(framelist),
"Cannot indentify RAW and CALIB frames");
300 check_nomsg(param=cpl_parameterlist_find(parlist,
302 check_nomsg(iSizeX=cpl_parameter_get_int(param));
305 check_nomsg(param=cpl_parameterlist_find(parlist,
307 check_nomsg(iSizeY=cpl_parameter_get_int(param));
310 check_nomsg(param=cpl_parameterlist_find(parlist,
312 check_nomsg(iFWHMX=cpl_parameter_get_int(param));
315 check_nomsg(param=cpl_parameterlist_find(parlist,
317 check_nomsg(iFWHMY=cpl_parameter_get_int(param));
320 check_nomsg(param=cpl_parameterlist_find(parlist,
322 check_nomsg(dSignal=cpl_parameter_get_double(param));
325 check_nomsg(param=cpl_parameterlist_find(parlist,
327 check_nomsg(dBkgSignal=cpl_parameter_get_double(param));
330 check_nomsg(param=cpl_parameterlist_find(parlist,
332 check_nomsg(dNoiseLvl=cpl_parameter_get_double(param));
374 check(plist=cpl_propertylist_new(),
"Cannot create a Property List");
380 check(imNoise = cpl_image_fill_test_create(iSizeX, iSizeY),
381 "Cannot generate the image") ;
382 check_nomsg(cpl_image_fill_noise_uniform(imNoise, dBkgSignal - dNoiseLvl, dBkgSignal + dNoiseLvl));
383 check(imGauss = cpl_image_fill_test_create(iSizeX, iSizeY),
384 "Cannot generate the image") ;
390 check(imResult = cpl_image_fill_test_create(iSizeX, iSizeY),
391 "Cannot generate the image") ;
392 check_nomsg(cpl_image_fill_gaussian(imGauss, iSizeX/2, iSizeY/2, dSignal, iFWHMX / K, iFWHMY / K));
393 check(imResult = cpl_image_add_create(imGauss, imNoise),
"Cannot generate the image");
396 name_o =
"ima_res.fits" ;
399 check_nomsg(product_frame = cpl_frame_new());
400 check_nomsg(cpl_frame_set_filename(product_frame, name_o)) ;
401 check_nomsg(cpl_frame_set_tag(product_frame,
"image_gauss" )) ;
402 check_nomsg(cpl_frame_set_type(product_frame, CPL_FRAME_TYPE_IMAGE)) ;
403 check_nomsg(cpl_frame_set_group(product_frame, CPL_FRAME_GROUP_PRODUCT)) ;
404 check(cpl_frame_set_level(product_frame, CPL_FRAME_LEVEL_FINAL),
405 "Error while initialising the product frame") ;
408 check_nomsg(cpl_propertylist_erase_regexp(plist,
"^ESO PRO CATG",0));
410 check(cpl_dfs_setup_product_header(plist,
414 "sinfo_utl_ima_gauss",
416 KEY_VALUE_HPRO_DID,NULL),
417 "Problem in the product DFS-compliance") ;
421 check(cpl_image_save(imResult,
426 "Could not save product");
429 sinfo_free_propertylist(&plist) ;
430 sinfo_free_image(&imNoise);
431 sinfo_free_image(&imGauss);
432 sinfo_free_image(&imResult);
434 check_nomsg(cpl_frameset_insert(framelist, product_frame)) ;
440 sinfo_free_propertylist(&plist) ;
444 sinfo_free_image(&imNoise) ;
446 if (cpl_error_get_code()) {
int cpl_plugin_get_info(cpl_pluginlist *list)
Build the list of available plugins, for this module.
void irplib_reset(void)
Reset IRPLIB state.